rt-4.2.12/000755 000765 000024 00000000000 12562703634 012665 5ustar00sartakstaff000000 000000 rt-4.2.12/.perlcriticrc000644 000765 000024 00000001505 12555754775 015372 0ustar00sartakstaff000000 000000 # This perlcritic policy file isn't to be taken as gospel. It's just a start # As of now, it's mostly about disabling policies we're not able to follow or # strongly disagree with exclude = Subroutines::ProhibitExplicitReturnUndef Modules::RequireFilenameMatchesPackage TestingAndDebugging::ProhibitNoStrict color = 1 verbose = 7 # we don't unpack @_ right away as we mostly use named vars with defaults: # sub foo { # my $self = shift; # my %args = ( default => 'value', ..., @_ ); # ... [-Subroutines::RequireArgUnpacking] # Readonly superiority is not convincing, especially considering # that 'use constant' participates in constants folding during # compilation [-ValuesAndExpressions::ProhibitConstantPragma] # brutal [BuiltinFunctions::RequireBlockGrep] severity = 1 [BuiltinFunctions::RequireBlockMap] severity = 1 rt-4.2.12/.perltidyrc000644 000765 000024 00000000652 12555754775 015070 0ustar00sartakstaff000000 000000 --maximum-line-length=78 --indent-columns=4 --continuation-indentation=4 --standard-error-output --vertical-tightness=2 --closing-token-indentation=1 --paren-tightness=1 --brace-tightness=1 --square-bracket-tightness=1 --block-brace-tightness=1 --nospace-for-semicolon --no-outdent-long-quotes --cuddled-else --want-break-before="% + - * / x != == >= <= =~ !~ < > | & >= < = **= += *= &= <<= &&= -= /= |= >>= ||= .= %= ^= x=" rt-4.2.12/.tag000644 000765 000024 00000000012 12562703632 013430 0ustar00sartakstaff000000 000000 rt-4.2.12 rt-4.2.12/aclocal.m4000644 000765 000024 00000012141 12555754775 014542 0ustar00sartakstaff000000 000000 dnl aclocal.m4 generated automatically by aclocal 1.4-p6 dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A dnl PARTICULAR PURPOSE. dnl dnl @synopsis RT_ENABLE_LAYOUT() dnl dnl Enable a specific directory layout for the installation to use. dnl This configures a command-line parameter that can be specified dnl at ./configure invocation. dnl dnl The use of this feature in this way is a little hackish, but dnl better than a heap of options for every directory. dnl dnl This code is heavily borrowed *cough* from the Apache 2 code. dnl AC_DEFUN([RT_ENABLE_LAYOUT],[ AC_ARG_ENABLE(layout, AC_HELP_STRING([--enable-layout=LAYOUT], [Use a specific directory layout (Default: relative)]), LAYOUT=$enableval) if test "x$LAYOUT" = "x"; then LAYOUT="relative" fi RT_LAYOUT($srcdir/config.layout, $LAYOUT) AC_MSG_CHECKING(for chosen layout) if test "x$rt_layout_name" = "xno"; then if test "x$LAYOUT" = "xno"; then AC_MSG_RESULT(none) else AC_MSG_RESULT($LAYOUT) fi AC_MSG_ERROR([a valid layout must be specified (or the default used)]) else AC_SUBST(rt_layout_name) AC_MSG_RESULT($rt_layout_name) fi if test "x$rt_layout_name" != "xinplace" ; then AC_SUBST([COMMENT_INPLACE_LAYOUT], [""]) else AC_SUBST([COMMENT_INPLACE_LAYOUT], [# ]) fi ]) dnl dnl @synopsis RT_LAYOUT(configlayout, layoutname) dnl dnl This macro reads an Apache-style layout file (specified as the dnl configlayout parameter), and searches for a specific layout dnl (named using the layoutname parameter). dnl dnl The entries for a given layout are then inserted into the dnl environment such that they become available as substitution dnl variables. In addition, the rt_layout_name variable is set dnl (but not exported) if the layout is valid. dnl dnl This code is heavily borrowed *cough* from the Apache 2 codebase. dnl AC_DEFUN([RT_LAYOUT],[ if test ! -f $srcdir/config.layout; then AC_MSG_WARN([Layout file $srcdir/config.layout not found]) rt_layout_name=no else pldconf=./config.pld $PERL -0777 -p -e "\$layout = '$2';" -e ' s/.*//gims; s/\<\/Layout\>.*//s; s/^#.*$//m; s/^\s+//gim; s/\s+$/\n/gim; s/\+$/\/rt3/gim; # m4 will not let us just use $1, we need @S|@1 s/^\s*((?:bin|sbin|libexec|data|sysconf|sharedstate|localstate|lib|include|oldinclude|info|man|html)dir)\s*:\s*(.*)$/@S|@1=@S|@2/gim; s/^\s*(.*?)\s*:\s*(.*)$/\(test "x\@S|@@S|@1" = "xNONE" || test "x\@S|@@S|@1" = "x") && @S|@1=@S|@2/gim; ' < $1 > $pldconf if test -s $pldconf; then rt_layout_name=$2 . $pldconf changequote({,}) for var in prefix exec_prefix bindir sbindir \ sysconfdir mandir libdir datadir htmldir fontdir\ lexdir staticdir localstatedir logfiledir masonstatedir \ sessionstatedir customdir custometcdir customhtmldir \ customlexdir customstaticdir customplugindir customlibdir manualdir; do eval "val=\"\$$var\"" val=`echo $val | sed -e 's:\(.\)/*$:\1:'` val=`echo $val | sed -e 's:[\$]\([a-z_]*\):${\1}:g'` eval "$var='$val'" done changequote([,]) else rt_layout_name=no fi #rm $pldconf fi RT_SUBST_EXPANDED_ARG(prefix) RT_SUBST_EXPANDED_ARG(exec_prefix) RT_SUBST_EXPANDED_ARG(bindir) RT_SUBST_EXPANDED_ARG(sbindir) RT_SUBST_EXPANDED_ARG(sysconfdir) RT_SUBST_EXPANDED_ARG(mandir) RT_SUBST_EXPANDED_ARG(libdir) RT_SUBST_EXPANDED_ARG(lexdir) RT_SUBST_EXPANDED_ARG(staticdir) RT_SUBST_EXPANDED_ARG(datadir) RT_SUBST_EXPANDED_ARG(htmldir) RT_SUBST_EXPANDED_ARG(fontdir) RT_SUBST_EXPANDED_ARG(manualdir) RT_SUBST_EXPANDED_ARG(plugindir) RT_SUBST_EXPANDED_ARG(localstatedir) RT_SUBST_EXPANDED_ARG(logfiledir) RT_SUBST_EXPANDED_ARG(masonstatedir) RT_SUBST_EXPANDED_ARG(sessionstatedir) RT_SUBST_EXPANDED_ARG(customdir) RT_SUBST_EXPANDED_ARG(custometcdir) RT_SUBST_EXPANDED_ARG(customplugindir) RT_SUBST_EXPANDED_ARG(customhtmldir) RT_SUBST_EXPANDED_ARG(customlexdir) RT_SUBST_EXPANDED_ARG(customstaticdir) RT_SUBST_EXPANDED_ARG(customlibdir) ])dnl dnl dnl @synopsis RT_SUBST_EXPANDED_ARG(var) dnl dnl Export (via AC_SUBST) a given variable, along with an expanded dnl version of the variable (same name, but with exp_ prefix). dnl dnl This code is heavily borrowed *cough* from the Apache 2 source. dnl AC_DEFUN([RT_SUBST_EXPANDED_ARG],[ RT_EXPAND_VAR(exp_$1, [$]$1) AC_SUBST($1) AC_SUBST(exp_$1) ]) dnl dnl @synopsis RT_EXPAND_VAR(baz, $fraz) dnl dnl Iteratively expands the second parameter, until successive iterations dnl yield no change. The result is then assigned to the first parameter. dnl dnl This code is heavily borrowed from the Apache 2 codebase. dnl AC_DEFUN([RT_EXPAND_VAR],[ ap_last='' ap_cur='$2' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done $1="${ap_cur}" ]) rt-4.2.12/bin/000755 000765 000024 00000000000 12562703634 013435 5ustar00sartakstaff000000 000000 rt-4.2.12/config.layout000644 000765 000024 00000014621 12555754775 015413 0ustar00sartakstaff000000 000000 ## ## config.layout -- Pre-defined Installation Path Layouts ## ## Hints: ## - layouts can be loaded with configure's --enable-layout=ID option ## - when no --enable-layout option is given, the default layout is `RT' ## - a trailing plus character (`+') on paths is replaced with a ## `/' suffix where is currently hardcoded to 'rt3'. ## (This may become a configurable parameter at some point.) ## ## The following variables must _all_ be set: ## prefix exec_prefix bindir sbindir sysconfdir mandir libdir ## datadir htmldir localstatedir logfiledir masonstatedir fontdir ## sessionstatedir customdir customhtmldir customlexdir customstaticdir ## (This can be seen in m4/rt_layout.m4.) ## # Default RT3 path layout. prefix: /opt/rt4 exec_prefix: ${prefix} bindir: ${exec_prefix}/bin sbindir: ${exec_prefix}/sbin sysconfdir: ${prefix}/etc mandir: ${prefix}/man plugindir: ${prefix}/plugins libdir: ${prefix}/lib datadir: ${prefix}/share htmldir: ${datadir}/html fontdir: ${datadir}/fonts lexdir: ${datadir}/po staticdir: ${datadir}/static manualdir: ${prefix}/docs localstatedir: ${prefix}/var logfiledir: ${localstatedir}/log masonstatedir: ${localstatedir}/mason_data sessionstatedir: ${localstatedir}/session_data customdir: ${prefix}/local custometcdir: ${customdir}/etc customhtmldir: ${customdir}/html customlexdir: ${customdir}/po customstaticdir: ${customdir}/static customlibdir: ${customdir}/lib customplugindir: ${customdir}/plugins prefix: . exec_prefix: ${prefix} bindir: ${exec_prefix}/bin sbindir: ${exec_prefix}/sbin sysconfdir: ${prefix}/etc mandir: ${prefix}/man plugindir: ${prefix}/plugins libdir: ${prefix}/lib datadir: ${prefix}/share htmldir: ${datadir}/html lexdir: ${datadir}/po staticdir: ${datadir}/static fontdir: ${datadir}/fonts manualdir: ${prefix}/docs localstatedir: ${prefix}/var logfiledir: ${localstatedir}/log masonstatedir: ${localstatedir}/mason_data sessionstatedir: ${localstatedir}/session_data customdir: ${prefix}/local custometcdir: ${customdir}/etc customhtmldir: ${customdir}/html customlexdir: ${customdir}/po customstaticdir: ${customdir}/static customlibdir: ${customdir}/lib customplugindir: ${customdir}/plugins prefix: /usr/local exec_prefix: ${prefix} bindir: ${prefix}/bin sbindir: ${prefix}/sbin sysconfdir: /etc+ datadir: ${prefix}/share # FIXME: missing support for lib64 libdir: ${prefix}/lib mandir: ${datadir}/man # FIXME: no such directory in FHS; shouldn't go to somewhere in "${datadir}/rt/"? plugindir: ${datadir}/plugins htmldir: ${datadir}/html lexdir: ${datadir}/po staticdir: ${datadir}/static fontdir: ${datadir}/fonts manualdir: ${datadir}/doc localstatedir: /var logfiledir: ${localstatedir}/log # XXX: "/var/cache/mason/*"? masonstatedir: ${localstatedir}/cache/mason_data sessionstatedir: ${localstatedir}/cache/session_data customdir: ${prefix}/local custometcdir: ${customdir}/etc customhtmldir: ${customdir}/html customlexdir: ${customdir}/po customstaticdir: ${customdir}/static customlibdir: ${customdir}/lib customplugindir: ${customdir}/plugins prefix: /usr/local exec_prefix: ${prefix} bindir: ${exec_prefix}/bin sbindir: ${exec_prefix}/sbin sysconfdir: ${prefix}/etc+ mandir: ${prefix}/man plugindir: ${prefix}/plugins libdir: ${prefix}/lib+ datadir: ${prefix}/share+ htmldir: ${datadir}/html lexdir: ${datadir}/po staticdir: ${datadir}/static fontdir: ${datadir}/fonts manualdir: ${prefix}/share/doc+ logfiledir: /var/log localstatedir: /var/run+ masonstatedir: ${localstatedir}/mason_data sessionstatedir: ${localstatedir}/session_data customdir: ${prefix}/share+ custometcdir: ${customdir}/local/etc customhtmldir: ${customdir}/local/html customlexdir: ${customdir}/local/po customstaticdir: ${customdir}/static customlibdir: ${customdir}/local/lib customplugindir: ${customdir}/local/plugins # RH path layout. prefix: /usr exec_prefix: ${prefix} bindir: ${exec_prefix}/bin sbindir: ${exec_prefix}/sbin sysconfdir: /etc/rt3 mandir: ${prefix}/man libdir: ${prefix}/lib/rt3 datadir: /var/rt3 htmldir: ${datadir}/html fontdir: ${datadir}/fonts lexdir: ${datadir}/po staticdir: ${datadir}/static manualdir: ${datadir}/doc plugindir: ${datadir}/plugins localstatedir: /var logfiledir: ${localstatedir}/log/rt3 masonstatedir: ${localstatedir}/rt3/mason_data sessionstatedir: ${localstatedir}/rt3/session_data customdir: ${prefix}/local/rt3 custometcdir: ${customdir}/etc customhtmldir: ${customdir}/html customlexdir: ${customdir}/po customstaticdir: ${customdir}/static customlibdir: ${customdir}/lib customplugindir: ${customdir}/plugins prefix: /opt/rt4 exec_prefix: ${prefix} bindir: bin sbindir: sbin sysconfdir: etc mandir: man plugindir: plugins libdir: lib datadir: share htmldir: ${datadir}/html fontdir: ${datadir}/fonts lexdir: ${datadir}/po staticdir: ${datadir}/static manualdir: docs localstatedir: var logfiledir: ${localstatedir}/log masonstatedir: ${localstatedir}/mason_data sessionstatedir: ${localstatedir}/session_data customdir: local custometcdir: ${customdir}/etc customhtmldir: ${customdir}/html customlexdir: ${customdir}/po customstaticdir: ${customdir}/static customlibdir: ${customdir}/lib customplugindir: ${customdir}/plugins prefix: /opt/rt4 exec_prefix: ${prefix} bindir: bin sbindir: sbin sysconfdir: etc/rt/ mandir: man libdir: lib/rt datadir: share/rt plugindir: ${datadir}/plugins htmldir: ${datadir}/html fontdir: ${datadir}/fonts lexdir: ${datadir}/po staticdir: ${datadir}/static manualdir: docs/rt localstatedir: var/rt/ logfiledir: ${localstatedir}/log masonstatedir: ${localstatedir}/mason_data sessionstatedir: ${localstatedir}/session_data customdir: local/rt/ custometcdir: ${customdir}/etc customhtmldir: ${customdir}/html customlexdir: ${customdir}/po customstaticdir: ${customdir}/static customlibdir: ${customdir}/lib customplugindir: ${customdir}/plugins rt-4.2.12/configure000755 000765 000024 00000360705 12562703632 014605 0ustar00sartakstaff000000 000000 #! /bin/sh # From configure.ac Revision. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for RT rt-4.2.12. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: rt-bugs@bestpractical.com about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='RT' PACKAGE_TARNAME='rt' PACKAGE_VERSION='rt-4.2.12' PACKAGE_STRING='RT rt-4.2.12' PACKAGE_BUGREPORT='rt-bugs@bestpractical.com' PACKAGE_URL='' ac_unique_file="lib/RT.pm" ac_default_prefix=/opt/rt4 ac_subst_vars='LTLIBOBJS LIBOBJS RT_LOG_PATH_R LOCAL_PLUGIN_PATH_R LOCAL_LIB_PATH_R LOCAL_STATIC_PATH_R LOCAL_LEXICON_PATH_R MASON_LOCAL_HTML_PATH_R LOCAL_ETC_PATH_R MASON_HTML_PATH_R MASON_SESSION_PATH_R MASON_DATA_PATH_R RT_PLUGIN_PATH_R RT_STATIC_PATH_R RT_LEXICON_PATH_R RT_FONT_PATH_R RT_MAN_PATH_R RT_VAR_PATH_R RT_SBIN_PATH_R RT_BIN_PATH_R CONFIG_FILE_PATH_R RT_ETC_PATH_R RT_LIB_PATH_R RT_LOCAL_PATH_R RT_DOC_PATH_R RT_PATH_R RT_LOG_PATH LOCAL_PLUGIN_PATH LOCAL_LIB_PATH LOCAL_STATIC_PATH LOCAL_LEXICON_PATH MASON_LOCAL_HTML_PATH LOCAL_ETC_PATH MASON_HTML_PATH MASON_SESSION_PATH MASON_DATA_PATH RT_PLUGIN_PATH RT_FONT_PATH RT_MAN_PATH RT_VAR_PATH RT_SBIN_PATH RT_BIN_PATH CONFIG_FILE_PATH RT_ETC_PATH RT_STATIC_PATH RT_LEXICON_PATH RT_LIB_PATH RT_LOCAL_PATH RT_DOC_PATH RT_PATH RT_VERSION_PATCH RT_VERSION_MINOR RT_VERSION_MAJOR RT_SMIME RT_SMIME_DEPS RT_GPG RT_GPG_DEPS RT_GD RT_GRAPHVIZ RT_DEVELOPER RTGROUP WEB_GROUP WEB_USER DB_RT_PASS DB_RT_USER DB_DATABASE DB_DBA DB_RT_HOST DB_PORT DB_HOST DATABASE_ENV_PREF DB_TYPE LIBS_GROUP LIBS_OWNER BIN_OWNER COMMENT_INPLACE_LAYOUT rt_layout_name exp_customlibdir customlibdir exp_customstaticdir customstaticdir exp_customlexdir customlexdir exp_customhtmldir customhtmldir exp_customplugindir customplugindir exp_custometcdir custometcdir exp_customdir customdir exp_sessionstatedir sessionstatedir exp_masonstatedir masonstatedir exp_logfiledir logfiledir exp_localstatedir exp_plugindir plugindir exp_manualdir manualdir exp_fontdir fontdir exp_htmldir exp_datadir exp_staticdir staticdir exp_lexdir lexdir exp_libdir exp_mandir exp_sysconfdir exp_sbindir exp_bindir exp_exec_prefix exp_prefix WEB_HANDLER PERL INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM rt_version_patch rt_version_minor rt_version_major CONFIGURE_INCANT target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_web_handler enable_layout with_bin_owner with_libs_owner with_libs_group with_db_type with_db_host with_db_port with_db_rt_host with_db_dba with_db_database with_db_rt_user with_db_rt_pass with_web_user with_web_group with_rt_group with_my_user_group with_developer enable_developer with_graphviz enable_graphviz with_gd enable_gd enable_gpg enable_smime ' ac_precious_vars='build_alias host_alias target_alias PERL' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures RT rt-4.2.12 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/rt] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of RT rt-4.2.12:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-layout=LAYOUT Use a specific directory layout (Default: relative) --enable-developer Add dependencies needed for testing and developing RT --enable-graphviz Turns on support for RT's GraphViz dependency charts --enable-gd Turns on support for RT's GD pie and bar charts --enable-gpg Turns on GNU Privacy Guard (GPG) support --enable-smime Turns on Secure MIME (SMIME) support Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-web-handler=LIST comma separated list of web-handlers RT will be able to use. Default is fastcgi. Valid values are modperl1, modperl2, fastcgi and standalone. To successfully run RT you need only one. --with-bin-owner=OWNER user that will own RT binaries (default root) --with-libs-owner=OWNER user that will own RT libraries (default root) --with-libs-group=GROUP group that will own RT binaries (default bin) --with-db-type=TYPE sort of database RT will use (default: mysql) (mysql, Pg, Oracle and SQLite are valid) --with-db-host=HOSTNAME FQDN of database server (default: localhost) --with-db-port=PORT port on which the database listens on --with-db-rt-host=HOSTNAME FQDN of RT server which talks to the database server (default: localhost) --with-db-dba=DBA name of database administrator (default: root or postgres) --with-db-database=DBNAME name of the database to use (default: rt4) --with-db-rt-user=DBUSER name of database user (default: rt_user) --with-db-rt-pass=PASSWORD password for database user (default: rt_pass) --with-web-user=USER user the web server runs as (default: www) --with-web-group=GROUP group the web server runs as (default: www) --with-rt-group=GROUP group to own all files (default: rt) --with-my-user-group set all users and groups to current user/group Some influential environment variables: PERL Perl interpreter command Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF RT configure rt-4.2.12 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by RT $as_me rt-4.2.12, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CONFIGURE_INCANT="$0 $@" rt_version_major=4 rt_version_minor=2 rt_version_patch=12 test "x$rt_version_major" = 'x' && rt_version_major=0 test "x$rt_version_minor" = 'x' && rt_version_minor=0 test "x$rt_version_patch" = 'x' && rt_version_patch=0 ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="not found" ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$PERL" = 'not found'; then as_fn_error $? "cannot use $PACKAGE_NAME without perl" "$LINENO" 5 fi # Check whether --with-web-handler was given. if test "${with_web_handler+set}" = set; then : withval=$with_web_handler; WEB_HANDLER=$withval else WEB_HANDLER=fastcgi fi my_web_handler_test=$($PERL -e 'print "ok" unless grep $_ !~ /^(modperl1|modperl2|fastcgi|standalone)$/i, grep defined && length, split /\s*,\s*/, $ARGV[0]' $WEB_HANDLER) if test "$my_web_handler_test" != "ok"; then as_fn_error $? "Only modperl1, modperl2, fastcgi and standalone are valid web-handlers" "$LINENO" 5 fi # Check whether --enable-layout was given. if test "${enable_layout+set}" = set; then : enableval=$enable_layout; LAYOUT=$enableval fi if test "x$LAYOUT" = "x"; then LAYOUT="relative" fi if test ! -f $srcdir/config.layout; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Layout file $srcdir/config.layout not found" >&5 $as_echo "$as_me: WARNING: Layout file $srcdir/config.layout not found" >&2;} rt_layout_name=no else pldconf=./config.pld $PERL -0777 -p -e "\$layout = '$LAYOUT';" -e ' s/.*//gims; s/\<\/Layout\>.*//s; s/^#.*$//m; s/^\s+//gim; s/\s+$/\n/gim; s/\+$/\/rt3/gim; # m4 will not let us just use $srcdir/config.layout, we need $1 s/^\s*((?:bin|sbin|libexec|data|sysconf|sharedstate|localstate|lib|include|oldinclude|info|man|html)dir)\s*:\s*(.*)$/$1=$2/gim; s/^\s*(.*?)\s*:\s*(.*)$/\(test "x\$$1" = "xNONE" || test "x\$$1" = "x") && $1=$2/gim; ' < $srcdir/config.layout > $pldconf if test -s $pldconf; then rt_layout_name=$LAYOUT . $pldconf for var in prefix exec_prefix bindir sbindir \ sysconfdir mandir libdir datadir htmldir fontdir\ lexdir staticdir localstatedir logfiledir masonstatedir \ sessionstatedir customdir custometcdir customhtmldir \ customlexdir customstaticdir customplugindir customlibdir manualdir; do eval "val=\"\$$var\"" val=`echo $val | sed -e 's:\(.\)/*$:\1:'` val=`echo $val | sed -e 's:[\$]\([a-z_]*\):$\1:g'` eval "$var='$val'" done else rt_layout_name=no fi #rm $pldconf fi ap_last='' ap_cur='$prefix' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_prefix="${ap_cur}" ap_last='' ap_cur='$exec_prefix' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_exec_prefix="${ap_cur}" ap_last='' ap_cur='$bindir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_bindir="${ap_cur}" ap_last='' ap_cur='$sbindir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_sbindir="${ap_cur}" ap_last='' ap_cur='$sysconfdir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_sysconfdir="${ap_cur}" ap_last='' ap_cur='$mandir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_mandir="${ap_cur}" ap_last='' ap_cur='$libdir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_libdir="${ap_cur}" ap_last='' ap_cur='$lexdir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_lexdir="${ap_cur}" ap_last='' ap_cur='$staticdir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_staticdir="${ap_cur}" ap_last='' ap_cur='$datadir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_datadir="${ap_cur}" ap_last='' ap_cur='$htmldir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_htmldir="${ap_cur}" ap_last='' ap_cur='$fontdir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_fontdir="${ap_cur}" ap_last='' ap_cur='$manualdir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_manualdir="${ap_cur}" ap_last='' ap_cur='$plugindir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_plugindir="${ap_cur}" ap_last='' ap_cur='$localstatedir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_localstatedir="${ap_cur}" ap_last='' ap_cur='$logfiledir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_logfiledir="${ap_cur}" ap_last='' ap_cur='$masonstatedir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_masonstatedir="${ap_cur}" ap_last='' ap_cur='$sessionstatedir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_sessionstatedir="${ap_cur}" ap_last='' ap_cur='$customdir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_customdir="${ap_cur}" ap_last='' ap_cur='$custometcdir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_custometcdir="${ap_cur}" ap_last='' ap_cur='$customplugindir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_customplugindir="${ap_cur}" ap_last='' ap_cur='$customhtmldir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_customhtmldir="${ap_cur}" ap_last='' ap_cur='$customlexdir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_customlexdir="${ap_cur}" ap_last='' ap_cur='$customstaticdir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_customstaticdir="${ap_cur}" ap_last='' ap_cur='$customlibdir' while test "x${ap_cur}" != "x${ap_last}"; do ap_last="${ap_cur}" ap_cur=`eval "echo ${ap_cur}"` done exp_customlibdir="${ap_cur}" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for chosen layout" >&5 $as_echo_n "checking for chosen layout... " >&6; } if test "x$rt_layout_name" = "xno"; then if test "x$LAYOUT" = "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LAYOUT" >&5 $as_echo "$LAYOUT" >&6; } fi as_fn_error $? "a valid layout must be specified (or the default used)" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rt_layout_name" >&5 $as_echo "$rt_layout_name" >&6; } fi if test "x$rt_layout_name" != "xinplace" ; then COMMENT_INPLACE_LAYOUT="" else COMMENT_INPLACE_LAYOUT=# fi # ACRT_USER_EXISTS( users, variable, default ) # - users is a list of users [www apache www-docs] # from highest to lowest priority to high priority (i.e. first match) # - variable is what you set with the result # # Check whether --with-bin-owner was given. if test "${with_bin_owner+set}" = set; then : withval=$with_bin_owner; BIN_OWNER=$withval else BIN_OWNER=root fi # Check whether --with-libs-owner was given. if test "${with_libs_owner+set}" = set; then : withval=$with_libs_owner; LIBS_OWNER=$withval else LIBS_OWNER=root fi # Check whether --with-libs-group was given. if test "${with_libs_group+set}" = set; then : withval=$with_libs_group; LIBS_GROUP=$withval else LIBS_GROUP=bin fi # Check whether --with-db-type was given. if test "${with_db_type+set}" = set; then : withval=$with_db_type; DB_TYPE=$withval else DB_TYPE=mysql fi if test "$DB_TYPE" != 'mysql' -a "$DB_TYPE" != 'Pg' -a "$DB_TYPE" != 'SQLite' -a "$DB_TYPE" != 'Oracle' ; then as_fn_error $? "Only Oracle, Pg, mysql and SQLite are valid db types" "$LINENO" 5 fi if test "$DB_TYPE" = 'Oracle'; then test "x$ORACLE_HOME" = 'x' && as_fn_error $? "Please declare the ORACLE_HOME environment variable" "$LINENO" 5 DATABASE_ENV_PREF="\$ENV{'ORACLE_HOME'} = '$ORACLE_HOME';" fi # Check whether --with-db-host was given. if test "${with_db_host+set}" = set; then : withval=$with_db_host; DB_HOST=$withval else DB_HOST=localhost fi # Check whether --with-db-port was given. if test "${with_db_port+set}" = set; then : withval=$with_db_port; DB_PORT=$withval else DB_PORT= fi # Check whether --with-db-rt-host was given. if test "${with_db_rt_host+set}" = set; then : withval=$with_db_rt_host; DB_RT_HOST=$withval else DB_RT_HOST=localhost fi if test "$DB_TYPE" = "Pg" ; then DB_DBA="postgres" else DB_DBA="root" fi # Check whether --with-db-dba was given. if test "${with_db_dba+set}" = set; then : withval=$with_db_dba; DB_DBA=$withval else DB_DBA="$DB_DBA" fi # Check whether --with-db-database was given. if test "${with_db_database+set}" = set; then : withval=$with_db_database; DB_DATABASE=$withval else DB_DATABASE=rt4 fi # Check whether --with-db-rt-user was given. if test "${with_db_rt_user+set}" = set; then : withval=$with_db_rt_user; DB_RT_USER=$withval else DB_RT_USER=rt_user fi # Check whether --with-db-rt-pass was given. if test "${with_db_rt_pass+set}" = set; then : withval=$with_db_rt_pass; DB_RT_PASS=$withval else DB_RT_PASS=rt_pass fi # Check whether --with-web-user was given. if test "${with_web_user+set}" = set; then : withval=$with_web_user; WEB_USER=$withval else WEB_USER=www for x in www www-data apache httpd nobody; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking if user $x exists" >&5 $as_echo_n "checking if user $x exists... " >&6; } if $PERL -e"exit( defined getpwnam('$x') ? 0 : 1)" ; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; }; WEB_USER=$x ; break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi done fi # Check whether --with-web-group was given. if test "${with_web_group+set}" = set; then : withval=$with_web_group; WEB_GROUP=$withval else WEB_GROUP=www for x in www www-data apache httpd nogroup nobody; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking if group $x exists" >&5 $as_echo_n "checking if group $x exists... " >&6; } if $PERL -e"exit( defined getgrnam('$x') ? 0 : 1)" ; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; }; WEB_GROUP=$x ; break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi done fi # Check whether --with-rt-group was given. if test "${with_rt_group+set}" = set; then : withval=$with_rt_group; RTGROUP=$withval else RTGROUP=rt for x in rt3 rt $WEB_GROUP; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking if group $x exists" >&5 $as_echo_n "checking if group $x exists... " >&6; } if $PERL -e"exit( defined getgrnam('$x') ? 0 : 1)" ; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 $as_echo "found" >&6; }; RTGROUP=$x ; break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi done fi my_group=$($PERL -MPOSIX=getgid -le 'print scalar getgrgid getgid') my_user=${USER:-$LOGNAME} # Check whether --with-my-user-group was given. if test "${with_my_user_group+set}" = set; then : withval=$with_my_user_group; RTGROUP=$my_group BIN_OWNER=$my_user LIBS_OWNER=$my_user LIBS_GROUP=$my_group WEB_USER=$my_user WEB_GROUP=$my_group fi # Test for valid database names { $as_echo "$as_me:${as_lineno-$LINENO}: checking if database name is set" >&5 $as_echo_n "checking if database name is set... " >&6; } if echo $DB_DATABASE | $PERL -e 'exit(1) unless <> =~ /\S/' ; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else as_fn_error $? "no. database name is not set" "$LINENO" 5 fi # Check whether --with-developer was given. if test "${with_developer+set}" = set; then : withval=$with_developer; RT_DEVELOPER=$withval else RT_DEVELOPER="0" fi # Check whether --enable-developer was given. if test "${enable_developer+set}" = set; then : enableval=$enable_developer; RT_DEVELOPER=$enableval else RT_DEVELOPER=$RT_DEVELOPER fi if test "$RT_DEVELOPER" = yes; then RT_DEVELOPER="1" else RT_DEVELOPER="0" fi # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RT_GRAPHVIZ+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RT_GRAPHVIZ"; then ac_cv_prog_RT_GRAPHVIZ="$RT_GRAPHVIZ" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RT_GRAPHVIZ=""yes"" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_RT_GRAPHVIZ" && ac_cv_prog_RT_GRAPHVIZ=""no"" fi fi RT_GRAPHVIZ=$ac_cv_prog_RT_GRAPHVIZ if test -n "$RT_GRAPHVIZ"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RT_GRAPHVIZ" >&5 $as_echo "$RT_GRAPHVIZ" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --with-graphviz was given. if test "${with_graphviz+set}" = set; then : withval=$with_graphviz; RT_GRAPHVIZ=$withval fi # Check whether --enable-graphviz was given. if test "${enable_graphviz+set}" = set; then : enableval=$enable_graphviz; RT_GRAPHVIZ=$enableval fi if test "$RT_GRAPHVIZ" = yes; then RT_GRAPHVIZ="1" else RT_GRAPHVIZ="0" fi # Extract the first word of "gdlib-config", so it can be a program name with args. set dummy gdlib-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RT_GD+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RT_GD"; then ac_cv_prog_RT_GD="$RT_GD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RT_GD=""yes"" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_RT_GD" && ac_cv_prog_RT_GD=""no"" fi fi RT_GD=$ac_cv_prog_RT_GD if test -n "$RT_GD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RT_GD" >&5 $as_echo "$RT_GD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --with-gd was given. if test "${with_gd+set}" = set; then : withval=$with_gd; RT_GD=$withval fi # Check whether --enable-gd was given. if test "${enable_gd+set}" = set; then : enableval=$enable_gd; RT_GD=$enableval fi if test "$RT_GD" = yes; then RT_GD="1" else RT_GD="0" fi # Extract the first word of "gpg", so it can be a program name with args. set dummy gpg; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RT_GPG_DEPS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RT_GPG_DEPS"; then ac_cv_prog_RT_GPG_DEPS="$RT_GPG_DEPS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RT_GPG_DEPS=""yes"" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_RT_GPG_DEPS" && ac_cv_prog_RT_GPG_DEPS=""no"" fi fi RT_GPG_DEPS=$ac_cv_prog_RT_GPG_DEPS if test -n "$RT_GPG_DEPS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RT_GPG_DEPS" >&5 $as_echo "$RT_GPG_DEPS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$RT_GPG_DEPS" = yes; then RT_GPG_DEPS="1" else RT_GPG_DEPS="0" fi # Check whether --enable-gpg was given. if test "${enable_gpg+set}" = set; then : enableval=$enable_gpg; RT_GPG=$enableval fi if test "$RT_GPG" = yes; then RT_GPG="1" RT_GPG_DEPS="1" else if test "$RT_GPG" = no; then RT_GPG="0" RT_GPG_DEPS="0" else RT_GPG="0" fi fi # Extract the first word of "openssl", so it can be a program name with args. set dummy openssl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RT_SMIME_DEPS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RT_SMIME_DEPS"; then ac_cv_prog_RT_SMIME_DEPS="$RT_SMIME_DEPS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RT_SMIME_DEPS=""yes"" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_RT_SMIME_DEPS" && ac_cv_prog_RT_SMIME_DEPS=""no"" fi fi RT_SMIME_DEPS=$ac_cv_prog_RT_SMIME_DEPS if test -n "$RT_SMIME_DEPS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RT_SMIME_DEPS" >&5 $as_echo "$RT_SMIME_DEPS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$RT_SMIME_DEPS" = yes; then RT_SMIME_DEPS="1" else RT_SMIME_DEPS="0" fi # Check whether --enable-smime was given. if test "${enable_smime+set}" = set; then : enableval=$enable_smime; RT_SMIME=$enableval fi if test "$RT_SMIME" = yes; then RT_SMIME="1" RT_SMIME_DEPS="1" else if test "$RT_SMIME" = no; then RT_SMIME="0" RT_SMIME_DEPS="0" else RT_SMIME="0" fi fi RT_VERSION_MAJOR=${rt_version_major} RT_VERSION_MINOR=${rt_version_minor} RT_VERSION_PATCH=${rt_version_patch} RT_PATH=${exp_prefix} RT_DOC_PATH=${exp_manualdir} RT_LOCAL_PATH=${exp_customdir} RT_LIB_PATH=${exp_libdir} RT_LEXICON_PATH=${exp_lexdir} RT_STATIC_PATH=${exp_staticdir} RT_ETC_PATH=${exp_sysconfdir} CONFIG_FILE_PATH=${exp_sysconfdir} RT_BIN_PATH=${exp_bindir} RT_SBIN_PATH=${exp_sbindir} RT_VAR_PATH=${exp_localstatedir} RT_MAN_PATH=${exp_mandir} RT_FONT_PATH=${exp_fontdir} RT_PLUGIN_PATH=${exp_plugindir} MASON_DATA_PATH=${exp_masonstatedir} MASON_SESSION_PATH=${exp_sessionstatedir} MASON_HTML_PATH=${exp_htmldir} LOCAL_ETC_PATH=${exp_custometcdir} MASON_LOCAL_HTML_PATH=${exp_customhtmldir} LOCAL_LEXICON_PATH=${exp_customlexdir} LOCAL_STATIC_PATH=${exp_customstaticdir} LOCAL_LIB_PATH=${exp_customlibdir} LOCAL_PLUGIN_PATH=${exp_customplugindir} RT_LOG_PATH=${exp_logfiledir} if test ${exp_sysconfdir} = "etc" -o ${exp_sysconfdir} = "etc/rt"; then RT_PATH_R=${exp_prefix} RT_DOC_PATH_R=${exp_prefix}/${exp_manualdir} RT_LOCAL_PATH_R=${exp_prefix}/${exp_customdir} RT_LIB_PATH_R=${exp_prefix}/${exp_libdir} RT_ETC_PATH_R=${exp_prefix}/${exp_sysconfdir} CONFIG_FILE_PATH_R=${exp_prefix}/${exp_sysconfdir} RT_BIN_PATH_R=${exp_prefix}/${exp_bindir} RT_SBIN_PATH_R=${exp_prefix}/${exp_sbindir} RT_VAR_PATH_R=${exp_prefix}/${exp_localstatedir} RT_MAN_PATH_R=${exp_prefix}/${exp_mandir} RT_FONT_PATH_R=${exp_prefix}/${exp_fontdir} RT_LEXICON_PATH_R=${exp_prefix}/${exp_lexdir} RT_STATIC_PATH_R=${exp_prefix}/${exp_staticdir} RT_PLUGIN_PATH_R=${exp_prefix}/${exp_plugindir} MASON_DATA_PATH_R=${exp_prefix}/${exp_masonstatedir} MASON_SESSION_PATH_R=${exp_prefix}/${exp_sessionstatedir} MASON_HTML_PATH_R=${exp_prefix}/${exp_htmldir} LOCAL_ETC_PATH_R=${exp_prefix}/${exp_custometcdir} MASON_LOCAL_HTML_PATH_R=${exp_prefix}/${exp_customhtmldir} LOCAL_LEXICON_PATH_R=${exp_prefix}/${exp_customlexdir} LOCAL_STATIC_PATH_R=${exp_prefix}/${exp_customstaticdir} LOCAL_LIB_PATH_R=${exp_prefix}/${exp_customlibdir} LOCAL_PLUGIN_PATH_R=${exp_prefix}/${exp_customplugindir} RT_LOG_PATH_R=${exp_prefix}/${exp_logfiledir} else RT_PATH_R=${exp_prefix} RT_DOC_PATH_R=${exp_manualdir} RT_LOCAL_PATH_R=${exp_customdir} RT_LIB_PATH_R=${exp_libdir} RT_LEXICON_PATH_R=${exp_lexdir} RT_STATIC_PATH_R=${exp_staticdir} RT_ETC_PATH_R=${exp_sysconfdir} RT_PLUGIN_PATH_R=${exp_plugindir} CONFIG_FILE_PATH_R=${exp_sysconfdir} RT_BIN_PATH_R=${exp_bindir} RT_SBIN_PATH_R=${exp_sbindir} RT_VAR_PATH_R=${exp_localstatedir} RT_MAN_PATH_R=${exp_mandir} RT_FONT_PATH_R=${exp_fontdir} MASON_DATA_PATH_R=${exp_masonstatedir} MASON_SESSION_PATH_R=${exp_sessionstatedir} MASON_HTML_PATH_R=${exp_htmldir} LOCAL_ETC_PATH_R=${exp_custometcdir} MASON_LOCAL_HTML_PATH_R=${exp_customhtmldir} LOCAL_LEXICON_PATH_R=${exp_customlexdir} LOCAL_STATIC_PATH_R=${exp_customstaticdir} LOCAL_PLUGIN_PATH_R=${exp_customplugindir} LOCAL_LIB_PATH_R=${exp_customlibdir} RT_LOG_PATH_R=${exp_logfiledir} fi ac_config_files="$ac_config_files etc/upgrade/3.8-ical-extension etc/upgrade/4.0-customfield-checkbox-extension etc/upgrade/generate-rtaddressregexp etc/upgrade/sanity-check-stylesheets etc/upgrade/shrink-cgm-table etc/upgrade/shrink-transactions-table etc/upgrade/split-out-cf-categories etc/upgrade/switch-templates-to etc/upgrade/time-worked-history etc/upgrade/upgrade-articles etc/upgrade/vulnerable-passwords sbin/rt-attributes-viewer sbin/rt-preferences-viewer sbin/rt-session-viewer sbin/rt-dump-metadata sbin/rt-setup-database sbin/rt-test-dependencies sbin/rt-email-digest sbin/rt-email-dashboards sbin/rt-clean-sessions sbin/rt-shredder sbin/rt-validator sbin/rt-validate-aliases sbin/rt-email-group-admin sbin/rt-server sbin/rt-server.fcgi sbin/standalone_httpd sbin/rt-setup-fulltext-index sbin/rt-fulltext-indexer sbin/rt-serializer sbin/rt-importer bin/rt-crontool bin/rt-mailgate bin/rt" ac_config_files="$ac_config_files Makefile etc/RT_Config.pm lib/RT/Generated.pm t/data/configs/apache2.2+mod_perl.conf t/data/configs/apache2.2+fastcgi.conf" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by RT $as_me rt-4.2.12, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ RT config.status rt-4.2.12 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "etc/upgrade/3.8-ical-extension") CONFIG_FILES="$CONFIG_FILES etc/upgrade/3.8-ical-extension" ;; "etc/upgrade/4.0-customfield-checkbox-extension") CONFIG_FILES="$CONFIG_FILES etc/upgrade/4.0-customfield-checkbox-extension" ;; "etc/upgrade/generate-rtaddressregexp") CONFIG_FILES="$CONFIG_FILES etc/upgrade/generate-rtaddressregexp" ;; "etc/upgrade/sanity-check-stylesheets") CONFIG_FILES="$CONFIG_FILES etc/upgrade/sanity-check-stylesheets" ;; "etc/upgrade/shrink-cgm-table") CONFIG_FILES="$CONFIG_FILES etc/upgrade/shrink-cgm-table" ;; "etc/upgrade/shrink-transactions-table") CONFIG_FILES="$CONFIG_FILES etc/upgrade/shrink-transactions-table" ;; "etc/upgrade/split-out-cf-categories") CONFIG_FILES="$CONFIG_FILES etc/upgrade/split-out-cf-categories" ;; "etc/upgrade/switch-templates-to") CONFIG_FILES="$CONFIG_FILES etc/upgrade/switch-templates-to" ;; "etc/upgrade/time-worked-history") CONFIG_FILES="$CONFIG_FILES etc/upgrade/time-worked-history" ;; "etc/upgrade/upgrade-articles") CONFIG_FILES="$CONFIG_FILES etc/upgrade/upgrade-articles" ;; "etc/upgrade/vulnerable-passwords") CONFIG_FILES="$CONFIG_FILES etc/upgrade/vulnerable-passwords" ;; "sbin/rt-attributes-viewer") CONFIG_FILES="$CONFIG_FILES sbin/rt-attributes-viewer" ;; "sbin/rt-preferences-viewer") CONFIG_FILES="$CONFIG_FILES sbin/rt-preferences-viewer" ;; "sbin/rt-session-viewer") CONFIG_FILES="$CONFIG_FILES sbin/rt-session-viewer" ;; "sbin/rt-dump-metadata") CONFIG_FILES="$CONFIG_FILES sbin/rt-dump-metadata" ;; "sbin/rt-setup-database") CONFIG_FILES="$CONFIG_FILES sbin/rt-setup-database" ;; "sbin/rt-test-dependencies") CONFIG_FILES="$CONFIG_FILES sbin/rt-test-dependencies" ;; "sbin/rt-email-digest") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-digest" ;; "sbin/rt-email-dashboards") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-dashboards" ;; "sbin/rt-clean-sessions") CONFIG_FILES="$CONFIG_FILES sbin/rt-clean-sessions" ;; "sbin/rt-shredder") CONFIG_FILES="$CONFIG_FILES sbin/rt-shredder" ;; "sbin/rt-validator") CONFIG_FILES="$CONFIG_FILES sbin/rt-validator" ;; "sbin/rt-validate-aliases") CONFIG_FILES="$CONFIG_FILES sbin/rt-validate-aliases" ;; "sbin/rt-email-group-admin") CONFIG_FILES="$CONFIG_FILES sbin/rt-email-group-admin" ;; "sbin/rt-server") CONFIG_FILES="$CONFIG_FILES sbin/rt-server" ;; "sbin/rt-server.fcgi") CONFIG_FILES="$CONFIG_FILES sbin/rt-server.fcgi" ;; "sbin/standalone_httpd") CONFIG_FILES="$CONFIG_FILES sbin/standalone_httpd" ;; "sbin/rt-setup-fulltext-index") CONFIG_FILES="$CONFIG_FILES sbin/rt-setup-fulltext-index" ;; "sbin/rt-fulltext-indexer") CONFIG_FILES="$CONFIG_FILES sbin/rt-fulltext-indexer" ;; "sbin/rt-serializer") CONFIG_FILES="$CONFIG_FILES sbin/rt-serializer" ;; "sbin/rt-importer") CONFIG_FILES="$CONFIG_FILES sbin/rt-importer" ;; "bin/rt-crontool") CONFIG_FILES="$CONFIG_FILES bin/rt-crontool" ;; "bin/rt-mailgate") CONFIG_FILES="$CONFIG_FILES bin/rt-mailgate" ;; "bin/rt") CONFIG_FILES="$CONFIG_FILES bin/rt" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "etc/RT_Config.pm") CONFIG_FILES="$CONFIG_FILES etc/RT_Config.pm" ;; "lib/RT/Generated.pm") CONFIG_FILES="$CONFIG_FILES lib/RT/Generated.pm" ;; "t/data/configs/apache2.2+mod_perl.conf") CONFIG_FILES="$CONFIG_FILES t/data/configs/apache2.2+mod_perl.conf" ;; "t/data/configs/apache2.2+fastcgi.conf") CONFIG_FILES="$CONFIG_FILES t/data/configs/apache2.2+fastcgi.conf" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac case $ac_file$ac_mode in "etc/upgrade/3.8-ical-extension":F) chmod ug+x $ac_file ;; "etc/upgrade/4.0-customfield-checkbox-extension":F) chmod ug+x $ac_file ;; "etc/upgrade/generate-rtaddressregexp":F) chmod ug+x $ac_file ;; "etc/upgrade/sanity-check-stylesheets":F) chmod ug+x $ac_file ;; "etc/upgrade/shrink-cgm-table":F) chmod ug+x $ac_file ;; "etc/upgrade/shrink-transactions-table":F) chmod ug+x $ac_file ;; "etc/upgrade/split-out-cf-categories":F) chmod ug+x $ac_file ;; "etc/upgrade/switch-templates-to":F) chmod ug+x $ac_file ;; "etc/upgrade/time-worked-history":F) chmod ug+x $ac_file ;; "etc/upgrade/upgrade-articles":F) chmod ug+x $ac_file ;; "etc/upgrade/vulnerable-passwords":F) chmod ug+x $ac_file ;; "sbin/rt-attributes-viewer":F) chmod ug+x $ac_file ;; "sbin/rt-preferences-viewer":F) chmod ug+x $ac_file ;; "sbin/rt-session-viewer":F) chmod ug+x $ac_file ;; "sbin/rt-dump-metadata":F) chmod ug+x $ac_file ;; "sbin/rt-setup-database":F) chmod ug+x $ac_file ;; "sbin/rt-test-dependencies":F) chmod ug+x $ac_file ;; "sbin/rt-email-digest":F) chmod ug+x $ac_file ;; "sbin/rt-email-dashboards":F) chmod ug+x $ac_file ;; "sbin/rt-clean-sessions":F) chmod ug+x $ac_file ;; "sbin/rt-shredder":F) chmod ug+x $ac_file ;; "sbin/rt-validator":F) chmod ug+x $ac_file ;; "sbin/rt-validate-aliases":F) chmod ug+x $ac_file ;; "sbin/rt-email-group-admin":F) chmod ug+x $ac_file ;; "sbin/rt-server":F) chmod ug+x $ac_file ;; "sbin/rt-server.fcgi":F) chmod ug+x $ac_file ;; "sbin/standalone_httpd":F) chmod ug+x $ac_file ;; "sbin/rt-setup-fulltext-index":F) chmod ug+x $ac_file ;; "sbin/rt-fulltext-indexer":F) chmod ug+x $ac_file ;; "sbin/rt-serializer":F) chmod ug+x $ac_file ;; "sbin/rt-importer":F) chmod ug+x $ac_file ;; "bin/rt-crontool":F) chmod ug+x $ac_file ;; "bin/rt-mailgate":F) chmod ug+x $ac_file ;; "bin/rt":F) chmod ug+x $ac_file ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi rt-4.2.12/configure.ac000755 000765 000024 00000037522 12555754775 015205 0ustar00sartakstaff000000 000000 autoconf; exec ./configure $@ dnl dnl Process this file with autoconf to produce a configure script dnl dnl Embed in generated ./configure script the following CVS info: AC_REVISION($Revision$)dnl dnl Setup autoconf AC_PREREQ([2.53]) AC_INIT(RT, m4_esyscmd([( git describe --tags || cat ./.tag 2> /dev/null || echo "rt-3.9.EXPORTED" )| tr -d "\n"]), [rt-bugs@bestpractical.com]) AC_CONFIG_SRCDIR([lib/RT.pm]) dnl Save our incant early since $@ gets overwritten by some macros. dnl ${ac_configure_args} is available later, but it's quoted differently dnl and undocumented. See http://www.spinics.net/lists/ac/msg10022.html. AC_SUBST(CONFIGURE_INCANT, "$0 $@") dnl Extract RT version number components AC_SUBST([rt_version_major], m4_bregexp(AC_PACKAGE_VERSION,[^rt-\(\w+\)\.\(\w+\)\.\(.+\)$],[\1])) AC_SUBST([rt_version_minor], m4_bregexp(AC_PACKAGE_VERSION,[^rt-\(\w+\)\.\(\w+\)\.\(.+\)$],[\2])) AC_SUBST([rt_version_patch], m4_bregexp(AC_PACKAGE_VERSION,[^rt-\(\w+\)\.\(\w+\)\.\(.+\)$],[\3])) test "x$rt_version_major" = 'x' && rt_version_major=0 test "x$rt_version_minor" = 'x' && rt_version_minor=0 test "x$rt_version_patch" = 'x' && rt_version_patch=0 dnl Check for programs AC_PROG_INSTALL AC_ARG_VAR([PERL],[Perl interpreter command]) AC_PATH_PROG([PERL], [perl], [not found]) if test "$PERL" = 'not found'; then AC_MSG_ERROR([cannot use $PACKAGE_NAME without perl]) fi dnl WEB_HANDLER AC_ARG_WITH(web-handler, AC_HELP_STRING([--with-web-handler=LIST], [comma separated list of web-handlers RT will be able to use. Default is fastcgi. Valid values are modperl1, modperl2, fastcgi and standalone. To successfully run RT you need only one. ]), WEB_HANDLER=$withval, WEB_HANDLER=fastcgi) my_web_handler_test=$($PERL -e 'print "ok" unless grep $_ !~ /^(modperl1|modperl2|fastcgi|standalone)$/i, grep defined && length, split /\s*,\s*/, $ARGV@<:@0@:>@' $WEB_HANDLER) if test "$my_web_handler_test" != "ok"; then AC_MSG_ERROR([Only modperl1, modperl2, fastcgi and standalone are valid web-handlers]) fi AC_SUBST(WEB_HANDLER) dnl Defaults paths for installation AC_PREFIX_DEFAULT([/opt/rt4]) RT_ENABLE_LAYOUT # ACRT_USER_EXISTS( users, variable, default ) # - users is a list of users [www apache www-docs] # from highest to lowest priority to high priority (i.e. first match) # - variable is what you set with the result # AC_DEFUN([ACRT_USER_GUESS], [ $2=$3 for x in $1; do AC_MSG_CHECKING([if user $x exists]) AS_IF([ $PERL -e"exit( defined getpwnam('$x') ? 0 : 1)" ], [ AC_MSG_RESULT([found]); $2=$x ; break], [ AC_MSG_RESULT([not found]) ]) done ]) AC_DEFUN([ACRT_GROUP_GUESS], [ $2=$3 for x in $1; do AC_MSG_CHECKING([if group $x exists]) AS_IF([ $PERL -e"exit( defined getgrnam('$x') ? 0 : 1)" ], [ AC_MSG_RESULT([found]); $2=$x ; break], [ AC_MSG_RESULT([not found]) ]) done ]) dnl BIN_OWNER AC_ARG_WITH(bin-owner, AC_HELP_STRING([--with-bin-owner=OWNER], [user that will own RT binaries (default root)]), BIN_OWNER=$withval, BIN_OWNER=root) AC_SUBST(BIN_OWNER) dnl LIBS_OWNER AC_ARG_WITH(libs-owner, AC_HELP_STRING([--with-libs-owner=OWNER], [user that will own RT libraries (default root)]), LIBS_OWNER=$withval, LIBS_OWNER=root) AC_SUBST(LIBS_OWNER) dnl LIBS_GROUP AC_ARG_WITH(libs-group, AC_HELP_STRING([--with-libs-group=GROUP], [group that will own RT binaries (default bin)]), LIBS_GROUP=$withval, LIBS_GROUP=bin) AC_SUBST(LIBS_GROUP) dnl DB_TYPE AC_ARG_WITH(db-type, AC_HELP_STRING([--with-db-type=TYPE], [sort of database RT will use (default: mysql) (mysql, Pg, Oracle and SQLite are valid)]), DB_TYPE=$withval, DB_TYPE=mysql) if test "$DB_TYPE" != 'mysql' -a "$DB_TYPE" != 'Pg' -a "$DB_TYPE" != 'SQLite' -a "$DB_TYPE" != 'Oracle' ; then AC_MSG_ERROR([Only Oracle, Pg, mysql and SQLite are valid db types]) fi AC_SUBST(DB_TYPE) dnl DATABASE_ENV_PREF if test "$DB_TYPE" = 'Oracle'; then test "x$ORACLE_HOME" = 'x' && AC_MSG_ERROR([Please declare the ORACLE_HOME environment variable]) DATABASE_ENV_PREF="\$ENV{'ORACLE_HOME'} = '$ORACLE_HOME';" fi AC_SUBST(DATABASE_ENV_PREF) dnl DB_HOST AC_ARG_WITH(db-host, AC_HELP_STRING([--with-db-host=HOSTNAME], [FQDN of database server (default: localhost)]), DB_HOST=$withval, DB_HOST=localhost) AC_SUBST(DB_HOST) dnl DB_PORT AC_ARG_WITH(db-port, AC_HELP_STRING([--with-db-port=PORT], [port on which the database listens on]), DB_PORT=$withval, DB_PORT=) AC_SUBST(DB_PORT) dnl DB_RT_HOST AC_ARG_WITH(db-rt-host, AC_HELP_STRING([--with-db-rt-host=HOSTNAME], [FQDN of RT server which talks to the database server (default: localhost)]), DB_RT_HOST=$withval, DB_RT_HOST=localhost) AC_SUBST(DB_RT_HOST) dnl DB_DATABASE_ADMIN if test "$DB_TYPE" = "Pg" ; then DB_DBA="postgres" else DB_DBA="root" fi AC_ARG_WITH(db-dba, AC_HELP_STRING([--with-db-dba=DBA], [name of database administrator (default: root or postgres)]), DB_DBA=$withval, DB_DBA="$DB_DBA") AC_SUBST(DB_DBA) dnl DB_DATABASE AC_ARG_WITH(db-database, AC_HELP_STRING([--with-db-database=DBNAME], [name of the database to use (default: rt4)]), DB_DATABASE=$withval, DB_DATABASE=rt4) AC_SUBST(DB_DATABASE) dnl DB_RT_USER AC_ARG_WITH(db-rt-user, AC_HELP_STRING([--with-db-rt-user=DBUSER], [name of database user (default: rt_user)]), DB_RT_USER=$withval, DB_RT_USER=rt_user) AC_SUBST(DB_RT_USER) dnl DB_RT_PASS AC_ARG_WITH(db-rt-pass, AC_HELP_STRING([--with-db-rt-pass=PASSWORD], [password for database user (default: rt_pass)]), DB_RT_PASS=$withval, DB_RT_PASS=rt_pass) AC_SUBST(DB_RT_PASS) dnl WEB_USER AC_ARG_WITH(web-user, AC_HELP_STRING([--with-web-user=USER], [user the web server runs as (default: www)]), WEB_USER=$withval, ACRT_USER_GUESS([www www-data apache httpd nobody],[WEB_USER],[www]) ) AC_SUBST(WEB_USER) dnl WEB_GROUP AC_ARG_WITH(web-group, AC_HELP_STRING([--with-web-group=GROUP], [group the web server runs as (default: www)]), WEB_GROUP=$withval, ACRT_GROUP_GUESS([www www-data apache httpd nogroup nobody],[WEB_GROUP], [www])) AC_SUBST(WEB_GROUP) dnl RTGROUP AC_ARG_WITH(rt-group, AC_HELP_STRING([--with-rt-group=GROUP], [group to own all files (default: rt)]), RTGROUP=$withval, ACRT_GROUP_GUESS([rt3 rt $WEB_GROUP],[RTGROUP], [rt])) AC_SUBST(RTGROUP) dnl INSTALL AS ME my_group=$($PERL -MPOSIX=getgid -le 'print scalar getgrgid getgid') my_user=${USER:-$LOGNAME} AC_ARG_WITH(my-user-group, AC_HELP_STRING([--with-my-user-group], [set all users and groups to current user/group]), RTGROUP=$my_group BIN_OWNER=$my_user LIBS_OWNER=$my_user LIBS_GROUP=$my_group WEB_USER=$my_user WEB_GROUP=$my_group) # Test for valid database names AC_MSG_CHECKING([if database name is set]) AS_IF([ echo $DB_DATABASE | $PERL -e 'exit(1) unless <> =~ /\S/' ], [ AC_MSG_RESULT([yes]) ], [ AC_MSG_ERROR([no. database name is not set]) ] ) dnl Dependencies for testing and developing RT AC_ARG_WITH(developer,[],RT_DEVELOPER=$withval,RT_DEVELOPER="0") AC_ARG_ENABLE(developer, AC_HELP_STRING([--enable-developer], [Add dependencies needed for testing and developing RT]), RT_DEVELOPER=$enableval, RT_DEVELOPER=$RT_DEVELOPER) if test "$RT_DEVELOPER" = yes; then RT_DEVELOPER="1" else RT_DEVELOPER="0" fi AC_SUBST(RT_DEVELOPER) dnl RT's GraphViz dependency charts AC_CHECK_PROG([RT_GRAPHVIZ], [dot], "yes", "no") AC_ARG_WITH(graphviz,[],RT_GRAPHVIZ=$withval) AC_ARG_ENABLE(graphviz, AC_HELP_STRING([--enable-graphviz], [Turns on support for RT's GraphViz dependency charts]), RT_GRAPHVIZ=$enableval) if test "$RT_GRAPHVIZ" = yes; then RT_GRAPHVIZ="1" else RT_GRAPHVIZ="0" fi AC_SUBST(RT_GRAPHVIZ) dnl RT's GD pie and bar charts AC_CHECK_PROG([RT_GD], [gdlib-config], "yes", "no") AC_ARG_WITH(gd,[],RT_GD=$withval) AC_ARG_ENABLE(gd, AC_HELP_STRING([--enable-gd], [Turns on support for RT's GD pie and bar charts]), RT_GD=$enableval) if test "$RT_GD" = yes; then RT_GD="1" else RT_GD="0" fi AC_SUBST(RT_GD) dnl RT's GPG support AC_CHECK_PROG([RT_GPG_DEPS], [gpg], "yes", "no") if test "$RT_GPG_DEPS" = yes; then RT_GPG_DEPS="1" else RT_GPG_DEPS="0" fi AC_ARG_ENABLE(gpg, AC_HELP_STRING([--enable-gpg], [Turns on GNU Privacy Guard (GPG) support]), RT_GPG=$enableval) if test "$RT_GPG" = yes; then RT_GPG="1" RT_GPG_DEPS="1" else if test "$RT_GPG" = no; then RT_GPG="0" RT_GPG_DEPS="0" else RT_GPG="0" fi fi AC_SUBST(RT_GPG_DEPS) AC_SUBST(RT_GPG) dnl RT's SMIME support AC_CHECK_PROG([RT_SMIME_DEPS], [openssl], "yes", "no") if test "$RT_SMIME_DEPS" = yes; then RT_SMIME_DEPS="1" else RT_SMIME_DEPS="0" fi AC_ARG_ENABLE(smime, AC_HELP_STRING([--enable-smime], [Turns on Secure MIME (SMIME) support]), RT_SMIME=$enableval) if test "$RT_SMIME" = yes; then RT_SMIME="1" RT_SMIME_DEPS="1" else if test "$RT_SMIME" = no; then RT_SMIME="0" RT_SMIME_DEPS="0" else RT_SMIME="0" fi fi AC_SUBST(RT_SMIME_DEPS) AC_SUBST(RT_SMIME) dnl This section maps the variable names this script 'natively' generates dnl to their existing names. They should be removed from here as the .in dnl files are changed to use the new names. dnl version numbers AC_SUBST(RT_VERSION_MAJOR, ${rt_version_major}) AC_SUBST(RT_VERSION_MINOR, ${rt_version_minor}) AC_SUBST(RT_VERSION_PATCH, ${rt_version_patch}) dnl layout paths AC_SUBST([RT_PATH], ${exp_prefix}) AC_SUBST([RT_DOC_PATH], ${exp_manualdir}) AC_SUBST([RT_LOCAL_PATH], ${exp_customdir}) AC_SUBST([RT_LIB_PATH], ${exp_libdir}) AC_SUBST([RT_LEXICON_PATH], ${exp_lexdir}) AC_SUBST([RT_STATIC_PATH], ${exp_staticdir}) AC_SUBST([RT_ETC_PATH], ${exp_sysconfdir}) AC_SUBST([CONFIG_FILE_PATH], ${exp_sysconfdir}) AC_SUBST([RT_BIN_PATH], ${exp_bindir}) AC_SUBST([RT_SBIN_PATH], ${exp_sbindir}) AC_SUBST([RT_VAR_PATH], ${exp_localstatedir}) AC_SUBST([RT_MAN_PATH], ${exp_mandir}) AC_SUBST([RT_FONT_PATH], ${exp_fontdir}) AC_SUBST([RT_PLUGIN_PATH], ${exp_plugindir}) AC_SUBST([MASON_DATA_PATH], ${exp_masonstatedir}) AC_SUBST([MASON_SESSION_PATH], ${exp_sessionstatedir}) AC_SUBST([MASON_HTML_PATH], ${exp_htmldir}) AC_SUBST([LOCAL_ETC_PATH], ${exp_custometcdir}) AC_SUBST([MASON_LOCAL_HTML_PATH], ${exp_customhtmldir}) AC_SUBST([LOCAL_LEXICON_PATH], ${exp_customlexdir}) AC_SUBST([LOCAL_STATIC_PATH], ${exp_customstaticdir}) AC_SUBST([LOCAL_LIB_PATH], ${exp_customlibdir}) AC_SUBST([LOCAL_PLUGIN_PATH], ${exp_customplugindir}) AC_SUBST([RT_LOG_PATH], ${exp_logfiledir}) if test ${exp_sysconfdir} = "etc" -o ${exp_sysconfdir} = "etc/rt"; then AC_SUBST([RT_PATH_R], ${exp_prefix}) AC_SUBST([RT_DOC_PATH_R], ${exp_prefix}/${exp_manualdir}) AC_SUBST([RT_LOCAL_PATH_R], ${exp_prefix}/${exp_customdir}) AC_SUBST([RT_LIB_PATH_R], ${exp_prefix}/${exp_libdir}) AC_SUBST([RT_ETC_PATH_R], ${exp_prefix}/${exp_sysconfdir}) AC_SUBST([CONFIG_FILE_PATH_R], ${exp_prefix}/${exp_sysconfdir}) AC_SUBST([RT_BIN_PATH_R], ${exp_prefix}/${exp_bindir}) AC_SUBST([RT_SBIN_PATH_R], ${exp_prefix}/${exp_sbindir}) AC_SUBST([RT_VAR_PATH_R], ${exp_prefix}/${exp_localstatedir}) AC_SUBST([RT_MAN_PATH_R], ${exp_prefix}/${exp_mandir}) AC_SUBST([RT_FONT_PATH_R], ${exp_prefix}/${exp_fontdir}) AC_SUBST([RT_LEXICON_PATH_R], ${exp_prefix}/${exp_lexdir}) AC_SUBST([RT_STATIC_PATH_R], ${exp_prefix}/${exp_staticdir}) AC_SUBST([RT_PLUGIN_PATH_R], ${exp_prefix}/${exp_plugindir}) AC_SUBST([MASON_DATA_PATH_R], ${exp_prefix}/${exp_masonstatedir}) AC_SUBST([MASON_SESSION_PATH_R], ${exp_prefix}/${exp_sessionstatedir}) AC_SUBST([MASON_HTML_PATH_R], ${exp_prefix}/${exp_htmldir}) AC_SUBST([LOCAL_ETC_PATH_R], ${exp_prefix}/${exp_custometcdir}) AC_SUBST([MASON_LOCAL_HTML_PATH_R], ${exp_prefix}/${exp_customhtmldir}) AC_SUBST([LOCAL_LEXICON_PATH_R], ${exp_prefix}/${exp_customlexdir}) AC_SUBST([LOCAL_STATIC_PATH_R], ${exp_prefix}/${exp_customstaticdir}) AC_SUBST([LOCAL_LIB_PATH_R], ${exp_prefix}/${exp_customlibdir}) AC_SUBST([LOCAL_PLUGIN_PATH_R], ${exp_prefix}/${exp_customplugindir}) AC_SUBST([RT_LOG_PATH_R], ${exp_prefix}/${exp_logfiledir}) else AC_SUBST([RT_PATH_R], ${exp_prefix}) AC_SUBST([RT_DOC_PATH_R], ${exp_manualdir}) AC_SUBST([RT_LOCAL_PATH_R], ${exp_customdir}) AC_SUBST([RT_LIB_PATH_R], ${exp_libdir}) AC_SUBST([RT_LEXICON_PATH_R], ${exp_lexdir}) AC_SUBST([RT_STATIC_PATH_R], ${exp_staticdir}) AC_SUBST([RT_ETC_PATH_R], ${exp_sysconfdir}) AC_SUBST([RT_PLUGIN_PATH_R], ${exp_plugindir}) AC_SUBST([CONFIG_FILE_PATH_R], ${exp_sysconfdir}) AC_SUBST([RT_BIN_PATH_R], ${exp_bindir}) AC_SUBST([RT_SBIN_PATH_R], ${exp_sbindir}) AC_SUBST([RT_VAR_PATH_R], ${exp_localstatedir}) AC_SUBST([RT_MAN_PATH_R], ${exp_mandir}) AC_SUBST([RT_FONT_PATH_R], ${exp_fontdir}) AC_SUBST([MASON_DATA_PATH_R], ${exp_masonstatedir}) AC_SUBST([MASON_SESSION_PATH_R], ${exp_sessionstatedir}) AC_SUBST([MASON_HTML_PATH_R], ${exp_htmldir}) AC_SUBST([LOCAL_ETC_PATH_R], ${exp_custometcdir}) AC_SUBST([MASON_LOCAL_HTML_PATH_R], ${exp_customhtmldir}) AC_SUBST([LOCAL_LEXICON_PATH_R], ${exp_customlexdir}) AC_SUBST([LOCAL_STATIC_PATH_R], ${exp_customstaticdir}) AC_SUBST([LOCAL_PLUGIN_PATH_R], ${exp_customplugindir}) AC_SUBST([LOCAL_LIB_PATH_R], ${exp_customlibdir}) AC_SUBST([RT_LOG_PATH_R], ${exp_logfiledir}) fi dnl Configure the output files, and generate them. dnl Binaries that should be +x AC_CONFIG_FILES([ etc/upgrade/3.8-ical-extension etc/upgrade/4.0-customfield-checkbox-extension etc/upgrade/generate-rtaddressregexp etc/upgrade/sanity-check-stylesheets etc/upgrade/shrink-cgm-table etc/upgrade/shrink-transactions-table etc/upgrade/split-out-cf-categories etc/upgrade/switch-templates-to etc/upgrade/time-worked-history etc/upgrade/upgrade-articles etc/upgrade/vulnerable-passwords sbin/rt-attributes-viewer sbin/rt-preferences-viewer sbin/rt-session-viewer sbin/rt-dump-metadata sbin/rt-setup-database sbin/rt-test-dependencies sbin/rt-email-digest sbin/rt-email-dashboards sbin/rt-clean-sessions sbin/rt-shredder sbin/rt-validator sbin/rt-validate-aliases sbin/rt-email-group-admin sbin/rt-server sbin/rt-server.fcgi sbin/standalone_httpd sbin/rt-setup-fulltext-index sbin/rt-fulltext-indexer sbin/rt-serializer sbin/rt-importer bin/rt-crontool bin/rt-mailgate bin/rt], [chmod ug+x $ac_file] ) dnl All other generated files AC_CONFIG_FILES([ Makefile etc/RT_Config.pm lib/RT/Generated.pm t/data/configs/apache2.2+mod_perl.conf t/data/configs/apache2.2+fastcgi.conf], ) AC_OUTPUT rt-4.2.12/COPYING000644 000765 000024 00000043070 12555754775 013742 0ustar00sartakstaff000000 000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. rt-4.2.12/devel/000755 000765 000024 00000000000 12555754775 014002 5ustar00sartakstaff000000 000000 rt-4.2.12/docs/000755 000765 000024 00000000000 12555754775 013633 5ustar00sartakstaff000000 000000 rt-4.2.12/etc/000755 000765 000024 00000000000 12562703634 013440 5ustar00sartakstaff000000 000000 rt-4.2.12/install-sh000755 000765 000024 00000032464 12555754775 014720 0ustar00sartakstaff000000 000000 #!/bin/sh # install - install a program, script, or datafile scriptversion=2006-12-25.00 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: rt-4.2.12/lib/000755 000765 000024 00000000000 12555754775 013451 5ustar00sartakstaff000000 000000 rt-4.2.12/Makefile000644 000765 000024 00000046674 12562703634 014346 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} # # DO NOT HAND-EDIT the file named 'Makefile'. This file is autogenerated. # Have a look at "configure" and "Makefile.in" instead # PERL = /usr/bin/perl INSTALL = ./install-sh CC = @CC@ RT_LAYOUT = relative CONFIG_FILE_PATH = /opt/rt4/etc CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_Config.pm SITE_CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_SiteConfig.pm RT_VERSION_MAJOR = 4 RT_VERSION_MINOR = 2 RT_VERSION_PATCH = 12 RT_VERSION = $(RT_VERSION_MAJOR).$(RT_VERSION_MINOR).$(RT_VERSION_PATCH) TAG = rt-$(RT_VERSION_MAJOR)-$(RT_VERSION_MINOR)-$(RT_VERSION_PATCH) # This is the group that all of the installed files will be chgrp'ed to. RTGROUP = www # User which should own rt binaries. BIN_OWNER = root # User that should own all of RT's libraries, generally root. LIBS_OWNER = root # Group that should own all of RT's libraries, generally root. LIBS_GROUP = bin WEB_USER = www WEB_GROUP = www # DESTDIR allows you to specify that RT be installed somewhere other than # where it will eventually reside. DESTDIR _must_ have a trailing slash # if it's defined. DESTDIR = RT_PATH = /opt/rt4 RT_ETC_PATH = /opt/rt4/etc RT_BIN_PATH = /opt/rt4/bin RT_SBIN_PATH = /opt/rt4/sbin RT_LIB_PATH = /opt/rt4/lib RT_MAN_PATH = /opt/rt4/man RT_VAR_PATH = /opt/rt4/var RT_DOC_PATH = /opt/rt4/docs RT_FONT_PATH = /opt/rt4/share/fonts RT_LEXICON_PATH = /opt/rt4/share/po RT_STATIC_PATH = /opt/rt4/share/static RT_LOCAL_PATH = /opt/rt4/local LOCAL_PLUGIN_PATH = /opt/rt4/local/plugins LOCAL_ETC_PATH = /opt/rt4/local/etc LOCAL_LIB_PATH = /opt/rt4/local/lib LOCAL_LEXICON_PATH = /opt/rt4/local/po LOCAL_STATIC_PATH = /opt/rt4/local/static MASON_HTML_PATH = /opt/rt4/share/html MASON_LOCAL_HTML_PATH = /opt/rt4/local/html MASON_DATA_PATH = /opt/rt4/var/mason_data MASON_SESSION_PATH = /opt/rt4/var/session_data RT_LOG_PATH = /opt/rt4/var/log # RT_READABLE_DIR_MODE is the mode of directories that are generally meant # to be accessable RT_READABLE_DIR_MODE = 0755 # RT's CLI RT_CLI_BIN = rt # RT's mail gateway RT_MAILGATE_BIN = rt-mailgate # RT's cron tool RT_CRON_BIN = rt-crontool BINARIES = $(RT_MAILGATE_BIN) \ $(RT_CLI_BIN) \ $(RT_CRON_BIN) SYSTEM_BINARIES = rt-attributes-viewer \ rt-clean-sessions \ rt-dump-metadata \ rt-email-dashboards \ rt-email-digest \ rt-email-group-admin \ rt-fulltext-indexer \ rt-importer \ rt-preferences-viewer \ rt-serializer \ rt-server \ rt-server.fcgi \ rt-session-viewer \ rt-setup-database \ rt-setup-fulltext-index \ rt-shredder \ rt-test-dependencies \ rt-validator \ rt-validate-aliases \ standalone_httpd ETC_FILES = acl.Pg \ acl.Oracle \ acl.mysql \ schema.Pg \ schema.Oracle \ schema.mysql \ schema.SQLite \ initialdata WEB_HANDLER = standalone # # DB_TYPE defines what sort of database RT trys to talk to # "mysql", "Oracle", "Pg", and "SQLite" are known to work. DB_TYPE = SQLite # Set DBA to the name of a unix account with the proper permissions and # environment to run your commandline SQL sbin # Set DB_DBA to the name of a DB user with permission to create new databases # For mysql, you probably want 'root' # For Pg, you probably want 'postgres' # For Oracle, you want 'system' DB_DBA = root DB_HOST = localhost # If you're not running your database server on its default port, # specifiy the port the database server is running on below. # It's generally safe to leave this blank DB_PORT = # # Set this to the canonical name of the interface RT will be talking to the # database on. If you said that the RT_DB_HOST above was "localhost," this # should be too. This value will be used to grant rt access to the database. # If you want to access the RT database from multiple hosts, you'll need # to grant those database rights by hand. # DB_RT_HOST = localhost # set this to the name you want to give to the RT database in # your database server. For Oracle, this should be the name of your sid DB_DATABASE = rt4 DB_RT_USER = rt_user DB_RT_PASS = rt_pass TEST_FILES = t/*.t t/*/*.t t/*/*/*.t TEST_VERBOSE = 0 RT_TEST_PARALLEL_NUM ?= 5 #################################################################### all: default default: @echo "Please read RT's README before beginning your installation." instruct: @echo "Congratulations. RT is now installed." @echo "" @echo "" @echo "You must now configure RT by editing $(SITE_CONFIG_FILE)." @echo "" @echo "(You will definitely need to set RT's database password in " @echo "$(SITE_CONFIG_FILE) before continuing. Not doing so could be " @echo "very dangerous. Note that you do not have to manually add a " @echo "database user or set up a database for RT. These actions will be " @echo "taken care of in the next step.)" @echo "" @echo "After that, you need to initialize RT's database by running" @echo " 'make initialize-database'" upgrade-instruct: @echo "Congratulations. RT has been upgraded. You should now check over" @echo "$(CONFIG_FILE) for any necessary site customization. Additionally," @echo "you should update RT's system database objects by running " @echo " make upgrade-database" upgrade: testdeps config-install dirs files-install fixperms upgrade-instruct my_with_web_handlers= $(shell $(PERL) -e 'print join " ", map "--with-$$_", grep defined && length, split /,/, "$(WEB_HANDLER)"') testdeps: $(PERL) ./sbin/rt-test-dependencies --verbose --with-$(DB_TYPE) $(my_with_web_handlers) depends: fixdeps fixdeps: $(PERL) ./sbin/rt-test-dependencies --verbose --install --with-$(DB_TYPE) $(my_with_web_handlers) #}}} fixperms: # Make the libraries readable chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_PATH) chown -R $(LIBS_OWNER) $(DESTDIR)$(RT_LIB_PATH) chgrp -R $(LIBS_GROUP) $(DESTDIR)$(RT_LIB_PATH) chmod -R u+rwX,go-w,go+rX $(DESTDIR)$(RT_LIB_PATH) chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_BIN_PATH) chmod 0755 $(DESTDIR)$(RT_ETC_PATH) cd $(DESTDIR)$(RT_ETC_PATH) && chmod 0400 $(ETC_FILES) #TODO: the config file should probably be able to have its # owner set separately from the binaries. chown -R $(BIN_OWNER) $(DESTDIR)$(RT_ETC_PATH) chgrp -R $(RTGROUP) $(DESTDIR)$(RT_ETC_PATH) chmod 0440 $(DESTDIR)$(CONFIG_FILE) chmod 0640 $(DESTDIR)$(SITE_CONFIG_FILE) # Make the system binaries cd $(DESTDIR)$(RT_BIN_PATH) && ( chmod 0755 $(BINARIES) ; chown $(BIN_OWNER) $(BINARIES); chgrp $(RTGROUP) $(BINARIES)) # Make the system binaries executable also cd $(DESTDIR)$(RT_SBIN_PATH) && ( chmod 0755 $(SYSTEM_BINARIES) ; chown $(BIN_OWNER) $(SYSTEM_BINARIES); chgrp $(RTGROUP) $(SYSTEM_BINARIES)) # Make upgrade scripts executable if they are in the source. # # Note that we use the deprecated (by GNU/POSIX find) -perm +0NNN syntax # instead of -perm /0NNN since BSD find doesn't support the latter. ( cd etc/upgrade && find . -type f -not -name '*.in' -perm +0111 -print ) | while read file ; do \ chmod a+x "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$file" ; \ done # Make the web ui readable by all. chmod -R u+rwX,go-w,go+rX $(DESTDIR)$(MASON_HTML_PATH) \ $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \ $(DESTDIR)$(RT_LEXICON_PATH) \ $(DESTDIR)$(LOCAL_LEXICON_PATH) \ $(DESTDIR)$(RT_STATIC_PATH) \ $(DESTDIR)$(LOCAL_STATIC_PATH) chown -R $(LIBS_OWNER) $(DESTDIR)$(MASON_HTML_PATH) \ $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \ $(DESTDIR)$(RT_LEXICON_PATH) \ $(DESTDIR)$(LOCAL_LEXICON_PATH) \ $(DESTDIR)$(RT_STATIC_PATH) \ $(DESTDIR)$(LOCAL_STATIC_PATH) chgrp -R $(LIBS_GROUP) $(DESTDIR)$(MASON_HTML_PATH) \ $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \ $(DESTDIR)$(RT_LEXICON_PATH) \ $(DESTDIR)$(LOCAL_LEXICON_PATH) \ $(DESTDIR)$(RT_STATIC_PATH) \ $(DESTDIR)$(LOCAL_STATIC_PATH) # Make the web ui's data dir writable chmod 0770 $(DESTDIR)$(MASON_DATA_PATH) \ $(DESTDIR)$(MASON_SESSION_PATH) chown -R $(WEB_USER) $(DESTDIR)$(MASON_DATA_PATH) \ $(DESTDIR)$(MASON_SESSION_PATH) chgrp -R $(WEB_GROUP) $(DESTDIR)$(MASON_DATA_PATH) \ $(DESTDIR)$(MASON_SESSION_PATH) dirs: $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LOG_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_FONT_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LEXICON_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_STATIC_PATH) $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH) $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/cache $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/etc $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/obj $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_SESSION_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_HTML_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_LOCAL_HTML_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_ETC_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LIB_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_PLUGIN_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LEXICON_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_STATIC_PATH) clean-mason-cache: rm -rf $(DESTDIR)$(MASON_DATA_PATH)/cache/* rm -rf $(DESTDIR)$(MASON_DATA_PATH)/etc/* rm -rf $(DESTDIR)$(MASON_DATA_PATH)/obj/* install: testdeps config-install dirs files-install fixperms instruct files-install: libs-install etc-install config-install bin-install sbin-install html-install doc-install font-install po-install static-install config-install: $(INSTALL) -m 0755 -o $(BIN_OWNER) -g $(RTGROUP) -d $(DESTDIR)$(CONFIG_FILE_PATH) -$(INSTALL) -m 0440 -o $(BIN_OWNER) -g $(RTGROUP) etc/RT_Config.pm $(DESTDIR)$(CONFIG_FILE) [ -f $(DESTDIR)$(SITE_CONFIG_FILE) ] || $(INSTALL) -m 0640 -o $(BIN_OWNER) -g $(RTGROUP) etc/RT_SiteConfig.pm $(DESTDIR)$(SITE_CONFIG_FILE) @echo "Installed configuration. About to install RT in $(RT_PATH)" test: $(PERL) "-MExtUtils::Command::MM" -e "test_harness($(TEST_VERBOSE), 'lib')" $(TEST_FILES) parallel-test: test-parallel test-parallel: RT_TEST_PARALLEL=1 $(PERL) "-MApp::Prove" -e 'my $$p = App::Prove->new(); $$p->process_args("-wlrj$(RT_TEST_PARALLEL_NUM)","--state=slow,save", "t"); exit( $$p->run() ? 0 : 1 )' regression-reset-db: force-dropdb $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --dba-password '' initdb :: initialize-database initialize-database: $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --prompt-for-dba-password upgrade-database: $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action upgrade --prompt-for-dba-password dropdb: $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action drop --prompt-for-dba-password force-dropdb: $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action drop --dba-password '' --force critic: perlcritic --quiet sbin bin lib libs-install: [ -d $(DESTDIR)$(RT_LIB_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LIB_PATH) -( cd lib && find . -type d -print ) | while read dir ; do \ $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_LIB_PATH)/$$dir" ; \ done -( cd lib && find . -type f -print ) | while read file ; do \ $(INSTALL) -m 0644 "lib/$$file" "$(DESTDIR)$(RT_LIB_PATH)/$$file" ; \ done html-install: [ -d $(DESTDIR)$(MASON_HTML_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_HTML_PATH) -( cd share/html && find . -type d -print ) | while read dir ; do \ $(INSTALL) -m 0755 -d "$(DESTDIR)$(MASON_HTML_PATH)/$$dir" ; \ done -( cd share/html && find . -type f -print ) | while read file ; do \ $(INSTALL) -m 0644 "share/html/$$file" "$(DESTDIR)$(MASON_HTML_PATH)/$$file" ; \ done $(MAKE) clean-mason-cache font-install: [ -d $(DESTDIR)$(RT_FONT_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_FONT_PATH) -( cd share/fonts && find . -type f -print ) | while read file ; do \ $(INSTALL) -m 0644 "share/fonts/$$file" "$(DESTDIR)$(RT_FONT_PATH)/$$file" ; \ done po-install: [ -d $(DESTDIR)$(RT_LEXICON_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LEXICON_PATH) -( cd share/po && find . -type f -print ) | while read file ; do \ $(INSTALL) -m 0644 "share/po/$$file" "$(DESTDIR)$(RT_LEXICON_PATH)/$$file" ; \ done static-install: [ -d $(DESTDIR)$(RT_STATIC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_STATIC_PATH) -( cd share/static && find . -type d -print ) | while read dir ; do \ $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_STATIC_PATH)/$$dir" ; \ done -( cd share/static && find . -type f -print ) | while read file ; do \ $(INSTALL) -m 0644 "share/static/$$file" "$(DESTDIR)$(RT_STATIC_PATH)/$$file" ; \ done doc-install: # RT 3.0.0 - RT 3.0.2 would accidentally create a file instead of a dir -[ -f $(DESTDIR)$(RT_DOC_PATH) ] && rm $(DESTDIR)$(RT_DOC_PATH) [ -d $(DESTDIR)$(RT_DOC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_DOC_PATH) -( cd docs && find . -type d -print ) | while read dir ; do \ $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_DOC_PATH)/$$dir" ; \ done -( cd docs && find . -type f -print ) | while read file ; do \ $(INSTALL) -m 0644 "docs/$$file" "$(DESTDIR)$(RT_DOC_PATH)/$$file" ; \ done -$(INSTALL) -m 0644 ./README $(DESTDIR)$(RT_DOC_PATH)/ etc-install: [ -d $(DESTDIR)$(RT_ETC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_ETC_PATH) for file in $(ETC_FILES) ; do \ $(INSTALL) -m 0644 "etc/$$file" "$(DESTDIR)$(RT_ETC_PATH)/" ; \ done [ -d $(DESTDIR)$(RT_ETC_PATH)/upgrade ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_ETC_PATH)/upgrade -( cd etc/upgrade && find . -type d -print ) | while read dir ; do \ $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$dir" ; \ done -( cd etc/upgrade && find . -type f -not -name '*.in' -print ) | while read file ; do \ $(INSTALL) -m 0644 "etc/upgrade/$$file" "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$file" ; \ done sbin-install: $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_SBIN_PATH) for file in $(SYSTEM_BINARIES) ; do \ $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "sbin/$$file" "$(DESTDIR)$(RT_SBIN_PATH)/" ; \ done bin-install: $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_BIN_PATH) for file in $(BINARIES) ; do \ $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "bin/$$file" "$(DESTDIR)$(RT_BIN_PATH)/" ; \ done regenerate-catalogs: $(PERL) devel/tools/extract-message-catalog license-tag: $(PERL) devel/tools/license_tag start-httpd: $(PERL) sbin/standalone_httpd & start-server: $(PERL) sbin/rt-server & SNAPSHOT=$(shell git describe --tags) THIRD_PARTY=devel/third-party/ snapshot: build-snapshot build-third-party clearsign-snapshot clearsign-third-party snapshot-shasums build-snapshot: git archive --prefix "$(SNAPSHOT)/" HEAD | tar -xf - ( cd $(SNAPSHOT) && \ echo "$(SNAPSHOT)" > .tag && \ autoconf && \ INSTALL=./install-sh PERL=/usr/bin/perl ./configure \ --with-db-type=SQLite \ --enable-layout=relative \ --with-web-handler=standalone && \ rm -rf autom4te.cache \ config.status config.log config.pld \ ) tar -czf "$(SNAPSHOT).tar.gz" "$(SNAPSHOT)/" rm -fr "$(SNAPSHOT)/" clearsign-snapshot: gpg --armor --detach-sign "$(SNAPSHOT).tar.gz" build-third-party: git archive --prefix "$(SNAPSHOT)/$(THIRD_PARTY)" HEAD:$(THIRD_PARTY) \ | gzip > "$(SNAPSHOT)-third-party-source.tar.gz" rm -rf "$(SNAPSHOT)/$(THIRD_PARTY)" clearsign-third-party: gpg --armor --detach-sign "$(SNAPSHOT)-third-party-source.tar.gz" snapshot-shasums: sha1sum $(SNAPSHOT)*.tar.gz* vessel-import: build-snapshot [ -d $(VESSEL) ] || (echo "VESSEL isn't a path to your shipwright vessel" && exit -1) cp $(VESSEL)/scripts/RT/build.pl /tmp/build.pl ./sbin/rt-test-dependencies --with-standalone --with-fastcgi --with-sqlite --list > /tmp/rt.yml shipwright import file:$(SNAPSHOT).tar.gz \ --require-yml /tmp/rt.yml \ --build-script /tmp/build.pl \ --name RT \ --repository fs:$(VESSEL) \ --log-level=info \ --skip cpan-capitalization,cpan-mod_perl,cpan-Encode,cpan-PPI,cpan-Test-Exception-LessClever,cpan-Test-Manifest,cpan-Test-Object,cpan-Test-Pod,cpan-Test-Requires,cpan-Test-SubCalls,cpan-Test-cpan-Tester,cpan-Test-Warn --skip-all-recommends mv $(VESSEL)/scripts/RT/build $(VESSEL)/scripts/RT/build.pl JSMIN_URL = http://download.bestpractical.com/mirror/jsmin-2013-03-29.c JSMIN_SHA = 67dc8d73a8878f88cdaeb1a86775872eae5c3077 jsmin: jsmin-checkcc jsmin-fetch jsmin-verify jsmin-confirm jsmin-build jsmin-install @echo "" @echo "To configure RT to use jsmin, add the following line to $(DESTDIR)$(RT_ETC_PATH)/RT_SiteConfig.pm:" @echo "" @echo " Set(\$$JSMinPath, '$(DESTDIR)$(RT_BIN_PATH)/jsmin');" @echo "" jsmin-checkcc: @[ -n "$(CC)" ] || (echo "You don't appear to have a C compiler, please set CC and re-run configure" && exit 1) jsmin-confirm: @echo "jsmin is distributed under a slightly unusual license and can't be shipped" @echo "with RT. Before configuring RT to use jsmin, please read jsmin's license" @echo "below:" @echo "" @$(PERL) -pe 'print && exit if /^\*\// or /^#include/' jsmin.c @echo "" @echo "Press Enter to accept the license, or Ctrl-C to stop now." @$(PERL) -e '' jsmin-fetch: @echo "" @echo "Downloading jsmin.c from $(JSMIN_URL)" @echo "" @$(PERL) -MLWP::Simple -e 'exit not is_success(getstore("$(JSMIN_URL)", "jsmin.c"))' \ || (echo "Failed to download $(JSMIN_URL)" && exit 1) jsmin-verify: @$(PERL) -MDigest::SHA -e \ 'exit not Digest::SHA->new(1)->addfile("jsmin.c")->hexdigest eq "$(JSMIN_SHA)"' \ || (echo "Verification of jsmin.c failed! Possible man in the middle?" && exit 1) jsmin-build: $(CC) -o jsmin jsmin.c jsmin-install: $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "jsmin" "$(DESTDIR)$(RT_BIN_PATH)/" rt-4.2.12/Makefile.in000644 000765 000024 00000052116 12555754775 014755 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} # # DO NOT HAND-EDIT the file named 'Makefile'. This file is autogenerated. # Have a look at "configure" and "Makefile.in" instead # PERL = @PERL@ INSTALL = @INSTALL@ CC = @CC@ RT_LAYOUT = @rt_layout_name@ CONFIG_FILE_PATH = @CONFIG_FILE_PATH_R@ CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_Config.pm SITE_CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_SiteConfig.pm RT_VERSION_MAJOR = @RT_VERSION_MAJOR@ RT_VERSION_MINOR = @RT_VERSION_MINOR@ RT_VERSION_PATCH = @RT_VERSION_PATCH@ RT_VERSION = $(RT_VERSION_MAJOR).$(RT_VERSION_MINOR).$(RT_VERSION_PATCH) TAG = rt-$(RT_VERSION_MAJOR)-$(RT_VERSION_MINOR)-$(RT_VERSION_PATCH) # This is the group that all of the installed files will be chgrp'ed to. RTGROUP = @RTGROUP@ # User which should own rt binaries. BIN_OWNER = @BIN_OWNER@ # User that should own all of RT's libraries, generally root. LIBS_OWNER = @LIBS_OWNER@ # Group that should own all of RT's libraries, generally root. LIBS_GROUP = @LIBS_GROUP@ WEB_USER = @WEB_USER@ WEB_GROUP = @WEB_GROUP@ # DESTDIR allows you to specify that RT be installed somewhere other than # where it will eventually reside. DESTDIR _must_ have a trailing slash # if it's defined. DESTDIR = RT_PATH = @RT_PATH_R@ RT_ETC_PATH = @RT_ETC_PATH_R@ RT_BIN_PATH = @RT_BIN_PATH_R@ RT_SBIN_PATH = @RT_SBIN_PATH_R@ RT_LIB_PATH = @RT_LIB_PATH_R@ RT_MAN_PATH = @RT_MAN_PATH_R@ RT_VAR_PATH = @RT_VAR_PATH_R@ RT_DOC_PATH = @RT_DOC_PATH_R@ RT_FONT_PATH = @RT_FONT_PATH_R@ RT_LEXICON_PATH = @RT_LEXICON_PATH_R@ RT_STATIC_PATH = @RT_STATIC_PATH_R@ RT_LOCAL_PATH = @RT_LOCAL_PATH_R@ LOCAL_PLUGIN_PATH = @RT_LOCAL_PATH_R@/plugins LOCAL_ETC_PATH = @LOCAL_ETC_PATH_R@ LOCAL_LIB_PATH = @LOCAL_LIB_PATH_R@ LOCAL_LEXICON_PATH = @LOCAL_LEXICON_PATH_R@ LOCAL_STATIC_PATH = @LOCAL_STATIC_PATH_R@ MASON_HTML_PATH = @MASON_HTML_PATH_R@ MASON_LOCAL_HTML_PATH = @MASON_LOCAL_HTML_PATH_R@ MASON_DATA_PATH = @MASON_DATA_PATH_R@ MASON_SESSION_PATH = @MASON_SESSION_PATH_R@ RT_LOG_PATH = @RT_LOG_PATH_R@ # RT_READABLE_DIR_MODE is the mode of directories that are generally meant # to be accessable RT_READABLE_DIR_MODE = 0755 # RT's CLI RT_CLI_BIN = rt # RT's mail gateway RT_MAILGATE_BIN = rt-mailgate # RT's cron tool RT_CRON_BIN = rt-crontool BINARIES = $(RT_MAILGATE_BIN) \ $(RT_CLI_BIN) \ $(RT_CRON_BIN) SYSTEM_BINARIES = rt-attributes-viewer \ rt-clean-sessions \ rt-dump-metadata \ rt-email-dashboards \ rt-email-digest \ rt-email-group-admin \ rt-fulltext-indexer \ rt-importer \ rt-preferences-viewer \ rt-serializer \ rt-server \ rt-server.fcgi \ rt-session-viewer \ rt-setup-database \ rt-setup-fulltext-index \ rt-shredder \ rt-test-dependencies \ rt-validator \ rt-validate-aliases \ standalone_httpd ETC_FILES = acl.Pg \ acl.Oracle \ acl.mysql \ schema.Pg \ schema.Oracle \ schema.mysql \ schema.SQLite \ initialdata WEB_HANDLER = @WEB_HANDLER@ # # DB_TYPE defines what sort of database RT trys to talk to # "mysql", "Oracle", "Pg", and "SQLite" are known to work. DB_TYPE = @DB_TYPE@ # Set DBA to the name of a unix account with the proper permissions and # environment to run your commandline SQL sbin # Set DB_DBA to the name of a DB user with permission to create new databases # For mysql, you probably want 'root' # For Pg, you probably want 'postgres' # For Oracle, you want 'system' DB_DBA = @DB_DBA@ DB_HOST = @DB_HOST@ # If you're not running your database server on its default port, # specifiy the port the database server is running on below. # It's generally safe to leave this blank DB_PORT = @DB_PORT@ # # Set this to the canonical name of the interface RT will be talking to the # database on. If you said that the RT_DB_HOST above was "localhost," this # should be too. This value will be used to grant rt access to the database. # If you want to access the RT database from multiple hosts, you'll need # to grant those database rights by hand. # DB_RT_HOST = @DB_RT_HOST@ # set this to the name you want to give to the RT database in # your database server. For Oracle, this should be the name of your sid DB_DATABASE = @DB_DATABASE@ DB_RT_USER = @DB_RT_USER@ DB_RT_PASS = @DB_RT_PASS@ TEST_FILES = t/*.t t/*/*.t t/*/*/*.t TEST_VERBOSE = 0 RT_TEST_PARALLEL_NUM ?= 5 #################################################################### all: default default: @echo "Please read RT's README before beginning your installation." instruct: @echo "Congratulations. RT is now installed." @echo "" @echo "" @echo "You must now configure RT by editing $(SITE_CONFIG_FILE)." @echo "" @echo "(You will definitely need to set RT's database password in " @echo "$(SITE_CONFIG_FILE) before continuing. Not doing so could be " @echo "very dangerous. Note that you do not have to manually add a " @echo "database user or set up a database for RT. These actions will be " @echo "taken care of in the next step.)" @echo "" @echo "After that, you need to initialize RT's database by running" @echo " 'make initialize-database'" upgrade-instruct: @echo "Congratulations. RT has been upgraded. You should now check over" @echo "$(CONFIG_FILE) for any necessary site customization. Additionally," @echo "you should update RT's system database objects by running " @echo " make upgrade-database" upgrade: testdeps config-install dirs files-install fixperms upgrade-instruct my_with_web_handlers= $(shell $(PERL) -e 'print join " ", map "--with-$$_", grep defined && length, split /,/, "$(WEB_HANDLER)"') testdeps: $(PERL) ./sbin/rt-test-dependencies --verbose --with-$(DB_TYPE) $(my_with_web_handlers) depends: fixdeps fixdeps: $(PERL) ./sbin/rt-test-dependencies --verbose --install --with-$(DB_TYPE) $(my_with_web_handlers) #}}} fixperms: # Make the libraries readable chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_PATH) chown -R $(LIBS_OWNER) $(DESTDIR)$(RT_LIB_PATH) chgrp -R $(LIBS_GROUP) $(DESTDIR)$(RT_LIB_PATH) chmod -R u+rwX,go-w,go+rX $(DESTDIR)$(RT_LIB_PATH) chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_BIN_PATH) chmod 0755 $(DESTDIR)$(RT_ETC_PATH) cd $(DESTDIR)$(RT_ETC_PATH) && chmod 0400 $(ETC_FILES) #TODO: the config file should probably be able to have its # owner set separately from the binaries. chown -R $(BIN_OWNER) $(DESTDIR)$(RT_ETC_PATH) chgrp -R $(RTGROUP) $(DESTDIR)$(RT_ETC_PATH) chmod 0440 $(DESTDIR)$(CONFIG_FILE) chmod 0640 $(DESTDIR)$(SITE_CONFIG_FILE) # Make the system binaries cd $(DESTDIR)$(RT_BIN_PATH) && ( chmod 0755 $(BINARIES) ; chown $(BIN_OWNER) $(BINARIES); chgrp $(RTGROUP) $(BINARIES)) # Make the system binaries executable also cd $(DESTDIR)$(RT_SBIN_PATH) && ( chmod 0755 $(SYSTEM_BINARIES) ; chown $(BIN_OWNER) $(SYSTEM_BINARIES); chgrp $(RTGROUP) $(SYSTEM_BINARIES)) # Make upgrade scripts executable if they are in the source. # # Note that we use the deprecated (by GNU/POSIX find) -perm +0NNN syntax # instead of -perm /0NNN since BSD find doesn't support the latter. ( cd etc/upgrade && find . -type f -not -name '*.in' -perm +0111 -print ) | while read file ; do \ chmod a+x "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$file" ; \ done # Make the web ui readable by all. chmod -R u+rwX,go-w,go+rX $(DESTDIR)$(MASON_HTML_PATH) \ $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \ $(DESTDIR)$(RT_LEXICON_PATH) \ $(DESTDIR)$(LOCAL_LEXICON_PATH) \ $(DESTDIR)$(RT_STATIC_PATH) \ $(DESTDIR)$(LOCAL_STATIC_PATH) chown -R $(LIBS_OWNER) $(DESTDIR)$(MASON_HTML_PATH) \ $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \ $(DESTDIR)$(RT_LEXICON_PATH) \ $(DESTDIR)$(LOCAL_LEXICON_PATH) \ $(DESTDIR)$(RT_STATIC_PATH) \ $(DESTDIR)$(LOCAL_STATIC_PATH) chgrp -R $(LIBS_GROUP) $(DESTDIR)$(MASON_HTML_PATH) \ $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \ $(DESTDIR)$(RT_LEXICON_PATH) \ $(DESTDIR)$(LOCAL_LEXICON_PATH) \ $(DESTDIR)$(RT_STATIC_PATH) \ $(DESTDIR)$(LOCAL_STATIC_PATH) # Make the web ui's data dir writable chmod 0770 $(DESTDIR)$(MASON_DATA_PATH) \ $(DESTDIR)$(MASON_SESSION_PATH) chown -R $(WEB_USER) $(DESTDIR)$(MASON_DATA_PATH) \ $(DESTDIR)$(MASON_SESSION_PATH) chgrp -R $(WEB_GROUP) $(DESTDIR)$(MASON_DATA_PATH) \ $(DESTDIR)$(MASON_SESSION_PATH) dirs: $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LOG_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_FONT_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LEXICON_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_STATIC_PATH) $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH) $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/cache $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/etc $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/obj $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_SESSION_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_HTML_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_LOCAL_HTML_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_ETC_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LIB_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_PLUGIN_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LEXICON_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_STATIC_PATH) clean-mason-cache: rm -rf $(DESTDIR)$(MASON_DATA_PATH)/cache/* rm -rf $(DESTDIR)$(MASON_DATA_PATH)/etc/* rm -rf $(DESTDIR)$(MASON_DATA_PATH)/obj/* install: testdeps config-install dirs files-install fixperms instruct files-install: libs-install etc-install config-install bin-install sbin-install html-install doc-install font-install po-install static-install config-install: @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -o $(BIN_OWNER) -g $(RTGROUP) -d $(DESTDIR)$(CONFIG_FILE_PATH) @COMMENT_INPLACE_LAYOUT@ -$(INSTALL) -m 0440 -o $(BIN_OWNER) -g $(RTGROUP) etc/RT_Config.pm $(DESTDIR)$(CONFIG_FILE) @COMMENT_INPLACE_LAYOUT@ [ -f $(DESTDIR)$(SITE_CONFIG_FILE) ] || $(INSTALL) -m 0640 -o $(BIN_OWNER) -g $(RTGROUP) etc/RT_SiteConfig.pm $(DESTDIR)$(SITE_CONFIG_FILE) @COMMENT_INPLACE_LAYOUT@ @echo "Installed configuration. About to install RT in $(RT_PATH)" test: $(PERL) "-MExtUtils::Command::MM" -e "test_harness($(TEST_VERBOSE), 'lib')" $(TEST_FILES) parallel-test: test-parallel test-parallel: RT_TEST_PARALLEL=1 $(PERL) "-MApp::Prove" -e 'my $$p = App::Prove->new(); $$p->process_args("-wlrj$(RT_TEST_PARALLEL_NUM)","--state=slow,save", "t"); exit( $$p->run() ? 0 : 1 )' regression-reset-db: force-dropdb $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --dba-password '' initdb :: initialize-database initialize-database: $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --prompt-for-dba-password upgrade-database: $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action upgrade --prompt-for-dba-password dropdb: $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action drop --prompt-for-dba-password force-dropdb: $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action drop --dba-password '' --force critic: perlcritic --quiet sbin bin lib libs-install: @COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(RT_LIB_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LIB_PATH) @COMMENT_INPLACE_LAYOUT@ -( cd lib && find . -type d -print ) | while read dir ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_LIB_PATH)/$$dir" ; \ @COMMENT_INPLACE_LAYOUT@ done @COMMENT_INPLACE_LAYOUT@ -( cd lib && find . -type f -print ) | while read file ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "lib/$$file" "$(DESTDIR)$(RT_LIB_PATH)/$$file" ; \ @COMMENT_INPLACE_LAYOUT@ done html-install: @COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(MASON_HTML_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_HTML_PATH) @COMMENT_INPLACE_LAYOUT@ -( cd share/html && find . -type d -print ) | while read dir ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -d "$(DESTDIR)$(MASON_HTML_PATH)/$$dir" ; \ @COMMENT_INPLACE_LAYOUT@ done @COMMENT_INPLACE_LAYOUT@ -( cd share/html && find . -type f -print ) | while read file ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "share/html/$$file" "$(DESTDIR)$(MASON_HTML_PATH)/$$file" ; \ @COMMENT_INPLACE_LAYOUT@ done @COMMENT_INPLACE_LAYOUT@ $(MAKE) clean-mason-cache font-install: @COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(RT_FONT_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_FONT_PATH) @COMMENT_INPLACE_LAYOUT@ -( cd share/fonts && find . -type f -print ) | while read file ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "share/fonts/$$file" "$(DESTDIR)$(RT_FONT_PATH)/$$file" ; \ @COMMENT_INPLACE_LAYOUT@ done po-install: @COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(RT_LEXICON_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LEXICON_PATH) @COMMENT_INPLACE_LAYOUT@ -( cd share/po && find . -type f -print ) | while read file ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "share/po/$$file" "$(DESTDIR)$(RT_LEXICON_PATH)/$$file" ; \ @COMMENT_INPLACE_LAYOUT@ done static-install: @COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(RT_STATIC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_STATIC_PATH) @COMMENT_INPLACE_LAYOUT@ -( cd share/static && find . -type d -print ) | while read dir ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_STATIC_PATH)/$$dir" ; \ @COMMENT_INPLACE_LAYOUT@ done @COMMENT_INPLACE_LAYOUT@ -( cd share/static && find . -type f -print ) | while read file ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "share/static/$$file" "$(DESTDIR)$(RT_STATIC_PATH)/$$file" ; \ @COMMENT_INPLACE_LAYOUT@ done doc-install: @COMMENT_INPLACE_LAYOUT@ # RT 3.0.0 - RT 3.0.2 would accidentally create a file instead of a dir @COMMENT_INPLACE_LAYOUT@ -[ -f $(DESTDIR)$(RT_DOC_PATH) ] && rm $(DESTDIR)$(RT_DOC_PATH) @COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(RT_DOC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_DOC_PATH) @COMMENT_INPLACE_LAYOUT@ -( cd docs && find . -type d -print ) | while read dir ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_DOC_PATH)/$$dir" ; \ @COMMENT_INPLACE_LAYOUT@ done @COMMENT_INPLACE_LAYOUT@ -( cd docs && find . -type f -print ) | while read file ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "docs/$$file" "$(DESTDIR)$(RT_DOC_PATH)/$$file" ; \ @COMMENT_INPLACE_LAYOUT@ done @COMMENT_INPLACE_LAYOUT@ -$(INSTALL) -m 0644 ./README $(DESTDIR)$(RT_DOC_PATH)/ etc-install: @COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(RT_ETC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_ETC_PATH) @COMMENT_INPLACE_LAYOUT@ for file in $(ETC_FILES) ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "etc/$$file" "$(DESTDIR)$(RT_ETC_PATH)/" ; \ @COMMENT_INPLACE_LAYOUT@ done @COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(RT_ETC_PATH)/upgrade ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_ETC_PATH)/upgrade @COMMENT_INPLACE_LAYOUT@ -( cd etc/upgrade && find . -type d -print ) | while read dir ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$dir" ; \ @COMMENT_INPLACE_LAYOUT@ done @COMMENT_INPLACE_LAYOUT@ -( cd etc/upgrade && find . -type f -not -name '*.in' -print ) | while read file ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "etc/upgrade/$$file" "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$file" ; \ @COMMENT_INPLACE_LAYOUT@ done sbin-install: @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_SBIN_PATH) @COMMENT_INPLACE_LAYOUT@ for file in $(SYSTEM_BINARIES) ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "sbin/$$file" "$(DESTDIR)$(RT_SBIN_PATH)/" ; \ @COMMENT_INPLACE_LAYOUT@ done bin-install: @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_BIN_PATH) @COMMENT_INPLACE_LAYOUT@ for file in $(BINARIES) ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "bin/$$file" "$(DESTDIR)$(RT_BIN_PATH)/" ; \ @COMMENT_INPLACE_LAYOUT@ done regenerate-catalogs: $(PERL) devel/tools/extract-message-catalog license-tag: $(PERL) devel/tools/license_tag start-httpd: $(PERL) sbin/standalone_httpd & start-server: $(PERL) sbin/rt-server & SNAPSHOT=$(shell git describe --tags) THIRD_PARTY=devel/third-party/ snapshot: build-snapshot build-third-party clearsign-snapshot clearsign-third-party snapshot-shasums build-snapshot: git archive --prefix "$(SNAPSHOT)/" HEAD | tar -xf - ( cd $(SNAPSHOT) && \ echo "$(SNAPSHOT)" > .tag && \ autoconf && \ INSTALL=./install-sh PERL=/usr/bin/perl ./configure \ --with-db-type=SQLite \ --enable-layout=relative \ --with-web-handler=standalone && \ rm -rf autom4te.cache \ config.status config.log config.pld \ ) tar -czf "$(SNAPSHOT).tar.gz" "$(SNAPSHOT)/" rm -fr "$(SNAPSHOT)/" clearsign-snapshot: gpg --armor --detach-sign "$(SNAPSHOT).tar.gz" build-third-party: git archive --prefix "$(SNAPSHOT)/$(THIRD_PARTY)" HEAD:$(THIRD_PARTY) \ | gzip > "$(SNAPSHOT)-third-party-source.tar.gz" rm -rf "$(SNAPSHOT)/$(THIRD_PARTY)" clearsign-third-party: gpg --armor --detach-sign "$(SNAPSHOT)-third-party-source.tar.gz" snapshot-shasums: sha1sum $(SNAPSHOT)*.tar.gz* vessel-import: build-snapshot [ -d $(VESSEL) ] || (echo "VESSEL isn't a path to your shipwright vessel" && exit -1) cp $(VESSEL)/scripts/RT/build.pl /tmp/build.pl ./sbin/rt-test-dependencies --with-standalone --with-fastcgi --with-sqlite --list > /tmp/rt.yml shipwright import file:$(SNAPSHOT).tar.gz \ --require-yml /tmp/rt.yml \ --build-script /tmp/build.pl \ --name RT \ --repository fs:$(VESSEL) \ --log-level=info \ --skip cpan-capitalization,cpan-mod_perl,cpan-Encode,cpan-PPI,cpan-Test-Exception-LessClever,cpan-Test-Manifest,cpan-Test-Object,cpan-Test-Pod,cpan-Test-Requires,cpan-Test-SubCalls,cpan-Test-cpan-Tester,cpan-Test-Warn --skip-all-recommends mv $(VESSEL)/scripts/RT/build $(VESSEL)/scripts/RT/build.pl JSMIN_URL = http://download.bestpractical.com/mirror/jsmin-2013-03-29.c JSMIN_SHA = 67dc8d73a8878f88cdaeb1a86775872eae5c3077 jsmin: jsmin-checkcc jsmin-fetch jsmin-verify jsmin-confirm jsmin-build jsmin-install @echo "" @echo "To configure RT to use jsmin, add the following line to $(DESTDIR)$(RT_ETC_PATH)/RT_SiteConfig.pm:" @echo "" @echo " Set(\$$JSMinPath, '$(DESTDIR)$(RT_BIN_PATH)/jsmin');" @echo "" jsmin-checkcc: @[ -n "$(CC)" ] || (echo "You don't appear to have a C compiler, please set CC and re-run configure" && exit 1) jsmin-confirm: @echo "jsmin is distributed under a slightly unusual license and can't be shipped" @echo "with RT. Before configuring RT to use jsmin, please read jsmin's license" @echo "below:" @echo "" @$(PERL) -pe 'print && exit if /^\*\// or /^#include/' jsmin.c @echo "" @echo "Press Enter to accept the license, or Ctrl-C to stop now." @$(PERL) -e '' jsmin-fetch: @echo "" @echo "Downloading jsmin.c from $(JSMIN_URL)" @echo "" @$(PERL) -MLWP::Simple -e 'exit not is_success(getstore("$(JSMIN_URL)", "jsmin.c"))' \ || (echo "Failed to download $(JSMIN_URL)" && exit 1) jsmin-verify: @$(PERL) -MDigest::SHA -e \ 'exit not Digest::SHA->new(1)->addfile("jsmin.c")->hexdigest eq "$(JSMIN_SHA)"' \ || (echo "Verification of jsmin.c failed! Possible man in the middle?" && exit 1) jsmin-build: $(CC) -o jsmin jsmin.c jsmin-install: $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "jsmin" "$(DESTDIR)$(RT_BIN_PATH)/" rt-4.2.12/README000644 000765 000024 00000030201 12555754775 013557 0ustar00sartakstaff000000 000000 RT is an enterprise-grade issue tracking system. It allows organizations to keep track of what needs to get done, who is working on which tasks, what's already been done, and when tasks were (or weren't) completed. RT doesn't cost anything to use, no matter how much you use it; it is freely available under the terms of Version 2 of the GNU General Public License. RT is commercially-supported software. To purchase support, training, custom development, or professional services, please get in touch with us at . REQUIRED PACKAGES ----------------- o Perl 5.10.1 or later (http://www.perl.org). RT won't start on versions of Perl older than 5.10.1. o A supported SQL database Currently supported: MySQL 5.1 or later with InnoDB support. Postgres 8.4 or later; 9.0 or later suggested Oracle 9iR2 or later. SQLite 3.0 or later; for testing only, no upgrade path guaranteed o Apache version 1.3.x or 2.x (http://httpd.apache.org) with mod_perl -- (http://perl.apache.org) or with FastCGI -- (http://www.fastcgi.com) or other webserver with FastCGI support RT's FastCGI handler needs to access RT's configuration file. o Various and sundry perl modules A tool included with RT takes care of the installation of most of these automatically during the install process. The tool supplied with RT uses Perl's CPAN (http://www.cpan.org) to install modules. Some operating systems package all or some of the modules required, and you may be better off installing the modules that way. GENERAL INSTALLATION -------------------- 1) Unpack this distribution other than where you want to install RT. To do this cleanly, run the following command: tar xzvf rt.tar.gz -C /tmp 2) Run the "configure" script. To see the list of options, run: ./configure --help Peruse the options, then rerun ./configure with the flags you want. RT defaults to installing in /opt/rt4 with MySQL as its database. It tries to guess which of www-data, www, apache or nobody your webserver will run as, but you can override that behavior. Note that the default install directory in /opt/rt4 does not work under SELinux's default configuration. If you are upgrading from a previous version of RT, please review the upgrade notes for the appropriate versions, which can be found in docs/UPGRADING-* If you are coming from 4.0.x to 4.2.x you should review both the UPGRADING-4.0 and UPGRADING-4.2 file. Similarly, if you were coming from 3.8.x, you would want to review UPGRADING-3.8, UPGRADING-4.0 and UPGRADING-4.2 Any upgrade steps given in version-specific UPGRADING files should be run after the rest of the steps below; however, please read the relevant documentation before beginning the upgrade, soas to be aware of important changes. RT stores the arguments given to ./configure at the top of the etc/RT_Config.pm file in case you need to recreate your previous use of ./configure. 3) Make sure that RT has the Perl and system libraries it needs to run. Check for missing dependencies by running: make testdeps 4) If the script reports any missing dependencies, install them by hand, or run the following command as a user who has permission to install perl modules on your system: make fixdeps Some modules require user input or environment variables to install correctly, so it may be necessary to install them manually. If you are having trouble installing GD, refer to "Installing GD libraries" in docs/charts.pod. Ticket relationship graphing requires the graphviz library which you should install using your distribution's package manager. 5) Check to make sure everything was installed properly. make testdeps It might sometimes be necessary to run "make fixdeps" several times to install all necessary perl modules. 6a) If this is a NEW installation (not an upgrade): As a user with permission to install RT in your chosen directory, type: make install To configure RT with the web installer, run: /opt/rt4/sbin/rt-server and follow the instructions. Once completed, you should now have a working RT instance running with the standalone rt-server. Press Ctrl-C to stop it, and proceed to Step 7 to configure a recommended deployment environment for production. To configure RT manually, you must setup etc/RT_SiteConfig.pm in your RT installation directory. You'll need to add any values you need to change from the defaults in etc/RT_Config.pm As a user with permission to read RT's configuration file, type: make initialize-database If the make fails, type: make dropdb and re-run 'make initialize-database'. 6b) If you are UPGRADING from a previous installation: Before upgrading, always ensure that you have a complete current backup. If you don't have a current backup, upgrading your database could accidentally damage it and lose data, or worse. If you are using MySQL, please read the instructions in docs/UPGRADING.mysql as well to ensure that you do not corrupt existing data. First, stop your webserver. You may also wish to put incoming email into a hold queue, to avoid temporary delivery failure messages if your upgrade is expected to take several hours. Next, install new binaries, config files and libraries by running: make upgrade This will also prompt you to upgrade your database by running: make upgrade-database You should back up your database before running this command. When you run it, you will be prompted for your previous version of RT (such as 3.8.1) so that the appropriate set of database upgrades can be applied. If 'make upgrade-database' completes without error, your upgrade has been successful; you should now run any commands that were supplied in version-specific UPGRADING documentation. You should then restart your webserver. 7) Configure the web server, as described in docs/web_deployment.pod, and the email gateway, as described below. NOTE: The default credentials for RT are: User: root Pass: password Not changing the root password from the default is a SECURITY risk! Once you've set up the web interface, consider setting up automatic logout for inactive sessions. For more information about how to do that, run: perldoc /opt/rt4/sbin/rt-clean-sessions 8) Set up users, groups, queues, scrips and access control. Until you do this, RT will not be able to send or receive email, nor will it be more than marginally functional. This is not an optional step. 9) Set up automated recurring tasks (cronjobs): To generate email digest messages, you must arrange for the provided utility to be run once daily, and once weekly. You may also want to arrange for the rt-email-dashboards utility to be run hourly. For example, if your task scheduler is cron, you can configure it by adding the following lines as /etc/cron.d/rt: 0 0 * * * root /opt/rt4/sbin/rt-email-digest -m daily 0 0 * * 0 root /opt/rt4/sbin/rt-email-digest -m weekly 0 * * * * root /opt/rt4/sbin/rt-email-dashboards 10) Configure the RT email gateway. To let email flow to your RT server, you need to add a few lines of configuration to your mail server's "aliases" file. These lines "pipe" incoming email messages from your mail server to RT. Add the following lines to /etc/aliases (or your local equivalent) on your mail server: rt: "|/opt/rt4/bin/rt-mailgate --queue general --action correspond --url http://rt.example.com/" rt-comment: "|/opt/rt4/bin/rt-mailgate --queue general --action comment --url http://rt.example.com/" You'll need to add similar lines for each queue you want to be able to send email to. To find out more about how to configure RT's email gateway, type: perldoc /opt/rt4/bin/rt-mailgate GETTING HELP ------------ If RT is mission-critical for you or if you use it heavily, we recommend that you purchase a commercial support contract. Details on support contracts are available at http://www.bestpractical.com or by writing to . If you're interested in having RT extended or customized or would like more information about commercial support options, please send email to to discuss rates and availability. MAILING LISTS AND WIKI ---------------------- To keep up to date on the latest RT tips, techniques and extensions, you may wish to join the rt-users mailing list. Send a message to: rt-users-request@lists.bestpractical.com with the body of the message consisting of only the word: subscribe If you're interested in hacking on RT, you'll want to subscribe to . Subscribe to it with instructions similar to those above. Address questions about the stable release to the rt-users list, and questions about the development version to the rt-devel list. The RT wiki, at http://requesttracker.wikia.com/ , is also a potential resource. SECURITY -------- If you believe you've discovered a security issue in RT, please send an email to with a detailed description of the issue, and a secure means to respond to you (such as your PGP public key). You can find our PGP key and fingerprint at http://bestpractical.com/security/ BUGS ---- RT's a pretty complex application, and as you get up to speed, you might run into some trouble. Generally, it's best to ask about things you run into on the rt-users mailinglist (or pick up a commercial support contract from Best Practical). But, sometimes people do run into bugs. In the exceedingly unlikely event that you hit a bug in RT, please report it! We'd love to hear about problems you have with RT, so we can fix them. To report a bug, send email to . # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} rt-4.2.12/README.Oracle000644 000765 000024 00000003043 12555754775 014767 0ustar00sartakstaff000000 000000 On RT 3.8.2 and later, RT deployment for Oracle databases is very straightforward. You don't need to configure Oracle beforehand. During installation a user is created and all RT's objects are created in his schema. The user is created with the following parameters: CREATE USER IDENTIFIED BY DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP QUOTA UNLIMITED ON USERS And the user is also granted 'CONNECT' and 'RESOURCE'. It's up to you to do decide how to manage users, change quotas, table spaces, etc. RT has an option $DatabaseName which is used to define the SID of the Oracle database. You don't have to set up the TWO_TASK environment variable or any helper files for establishing connections. Example: ./configure \ --with-db-type=Oracle \ --with-db-database=XE \ --with-db-host=192.168.0.1 \ --with-db-dba=system \ --with-db-rt-user=rtdb1 \ --with-db-rt-pass=rtdb1secret \ ... other configure options ... That should be enough to get you started on Oracle, but to complete installation you must follow the general instructions in the README file. As with all databases it is important to analyze the schema and get current statistics after every significant dataset change. Oracle's cost-based optimizer can provide particularly bad performance when the schema statistics are inaccurate. To analyze the schema of the user called RT, execute the following from within sqlplus: execute dbms_utility.analyze_schema( 'RT', 'estimate'); rt-4.2.12/sbin/000755 000765 000024 00000000000 12562703634 013620 5ustar00sartakstaff000000 000000 rt-4.2.12/share/000755 000765 000024 00000000000 12555754775 014005 5ustar00sartakstaff000000 000000 rt-4.2.12/t/000755 000765 000024 00000000000 12555754775 013146 5ustar00sartakstaff000000 000000 rt-4.2.12/t/00-compile.t000644 000765 000024 00000003126 12555754775 015202 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test nodb => 1, tests => 44; require_ok("RT"); require_ok("RT::Test"); require_ok("RT::ACL"); require_ok("RT::Handle"); require_ok("RT::Transaction"); require_ok("RT::Interface::CLI"); require_ok("RT::Interface::Email"); require_ok("RT::Links"); require_ok("RT::Queues"); require_ok("RT::Scrips"); require_ok("RT::Templates"); require_ok("RT::Principals"); require_ok("RT::Attachments"); require_ok("RT::GroupMember"); require_ok("RT::ScripAction"); require_ok("RT::CustomFields"); require_ok("RT::GroupMembers"); require_ok("RT::ScripActions"); require_ok("RT::Transactions"); require_ok("RT::ScripCondition"); require_ok("RT::Action"); require_ok("RT::ScripConditions"); require_ok("RT::Search"); require_ok("RT::Action::SendEmail"); require_ok("RT::CachedGroupMembers"); require_ok("RT::Condition"); require_ok("RT::Interface::Web"); require_ok("RT::SavedSearch"); require_ok("RT::SavedSearches"); require_ok("RT::Dashboard"); require_ok("RT::Dashboard::Mailer"); require_ok("RT::Dashboards"); require_ok("RT::Installer"); require_ok("RT::Util"); require_ok("RT::Article"); require_ok("RT::Articles"); require_ok("RT::Class"); require_ok("RT::Classes"); require_ok("RT::ObjectClass"); require_ok("RT::ObjectClasses"); require_ok("RT::ObjectTopic"); require_ok("RT::ObjectTopics"); require_ok("RT::Topic"); require_ok("RT::Topics"); # no the following doesn't work yet __END__ use File::Find::Rule; my @files = File::Find::Rule->file() ->name( '*.pm' ) ->in( 'lib' ); plan tests => scalar @files; for (@files) { local $SIG{__WARN__} = sub {}; require_ok($_); } rt-4.2.12/t/00-mason-syntax.t000644 000765 000024 00000001467 12555754775 016221 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test nodb => 1; use File::Find; find( { no_chdir => 1, wanted => sub { return if /(?:\.(?:jpe?g|png|gif|rej)|\~)$/i; return if m{/\.[^/]+\.sw[op]$}; # vim swap files return unless -f $_; local ($@); ok( eval { compile_file($_) }, "Compiled $File::Find::name ok: $@"); }, }, RT::Test::get_relocatable_dir('../share/html')); use HTML::Mason; use HTML::Mason::Compiler; use HTML::Mason::Compiler::ToObject; BEGIN { require RT::Test; } sub compile_file { my $file = shift; my $text = Encode::decode( "UTF-8", RT::Test->file_content($file)); my $compiler = new HTML::Mason::Compiler::ToObject; $compiler->compile( comp_source => $text, name => 'my', comp_path => 'my', ); return 1; } rt-4.2.12/t/99-policy.t000644 000765 000024 00000012215 12555754775 015072 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef; use File::Find; use IPC::Run3; my @files; find( { wanted => sub { push @files, $File::Find::name if -f; $File::Find::prune = 1 if $_ eq "t/tmp" or m{/\.git$}; }, no_chdir => 1 }, qw{etc lib share t bin sbin devel/tools docs devel/docs} ); if ( my $dir = `git rev-parse --git-dir 2>/dev/null` ) { # We're in a git repo, use the ignore list chomp $dir; my %ignores; $ignores{ $_ }++ for grep $_, split /\n/, `git ls-files -o -i --exclude-standard .`; @files = grep {not $ignores{$_}} @files; } sub check { my $file = shift; my %check = ( strict => 0, warnings => 0, no_tabs => 0, shebang => 0, exec => 0, bps_tag => 0, compile_perl => 0, @_, ); if ($check{strict} or $check{warnings} or $check{shebang} or $check{bps_tag} or $check{no_tabs}) { local $/; open my $fh, '<', $file or die $!; my $content = <$fh>; unless ($check{shebang} != -1 and $content =~ /^#!(?!.*perl)/i) { like( $content, qr/^use strict(?:;|\s+)/m, "$file has 'use strict'" ) if $check{strict}; like( $content, qr/^use warnings(?:;|\s+)/m, "$file has 'use warnings'" ) if $check{warnings}; } if ($check{shebang} == 1) { like( $content, qr/^#!/, "$file has shebang" ); } elsif ($check{shebang} == -1) { unlike( $content, qr/^#!/, "$file has no shebang" ); } my $other_copyright = 0; $other_copyright = 1 if $file =~ /\.(css|js)$/ and not $content =~ /Copyright\s+\(c\)\s+\d\d\d\d-\d\d\d\d Best Practical Solutions/i and $file =~ /(?:ckeditor|scriptaculous|superfish|tablesorter|farbtastic)/i; $other_copyright = 1 if $file =~ /\.(css|js)$/ and not $content =~ /Copyright\s+\(c\)\s+\d\d\d\d-\d\d\d\d Best Practical Solutions/i and ($content =~ /\b(copyright|GPL|Public Domain)\b/i or $content =~ /\(c\)\s+\d\d\d\d(?:-\d\d\d\d)?/i); $check{bps_tag} = -1 if $check{bps_tag} and $other_copyright; if ($check{bps_tag} == 1) { like( $content, qr/[B]EGIN BPS TAGGED BLOCK \{\{\{/, "$file has BPS license tag"); } elsif ($check{bps_tag} == -1) { unlike( $content, qr/[B]EGIN BPS TAGGED BLOCK \{\{\{/, "$file has no BPS license tag" . ($other_copyright ? " (other copyright)" : "")); } if (not $other_copyright and $check{no_tabs}) { unlike( $content, qr/\t/, "$file has no hard tabs" ); } } my $executable = ( stat $file )[2] & 0100; if ($check{exec} == 1) { if ( $file =~ /\.in$/ ) { ok( !$executable, "$file permission is u-x (.in will add +x)" ); } else { ok( $executable, "$file permission is u+x" ); } } elsif ($check{exec} == -1) { ok( !$executable, "$file permission is u-x" ); } if ($check{compile_perl}) { my ($input, $output, $error) = ('', '', ''); my $pre_check = 1; if ( $file =~ /\bmysql\b/ ) { eval { require DBD::mysql }; undef $pre_check if $@; } if ( $pre_check ) { run3( [ $^X, '-Ilib', '-Mstrict', '-Mwarnings', '-c', $file ], \$input, \$output, \$error, ); is $error, "$file syntax OK\n", "$file syntax is OK"; } } } check( $_, shebang => -1, exec => -1, warnings => 1, strict => 1, bps_tag => 1, no_tabs => 1 ) for grep {m{^lib/.*\.pm$}} @files; check( $_, shebang => -1, exec => -1, warnings => 1, strict => 1, bps_tag => -1, no_tabs => 1 ) for grep {m{^t/.*\.t$}} @files; check( $_, shebang => 1, exec => 1, warnings => 1, strict => 1, bps_tag => 1, no_tabs => 1 ) for grep {m{^s?bin/}} @files; check( $_, compile_perl => 1, exec => 1 ) for grep { -f $_ } map { s/\.in$//; $_ } grep {m{^s?bin/}} @files; check( $_, shebang => 1, exec => 1, warnings => 1, strict => 1, bps_tag => 1, no_tabs => 1 ) for grep {m{^devel/tools/} and not m{/(localhost\.(crt|key)|mime\.types)$}} @files; check( $_, exec => -1 ) for grep {m{^share/static/}} @files; check( $_, exec => -1, bps_tag => 1, no_tabs => 1 ) for grep {m{^share/html/}} @files; check( $_, exec => -1 ) for grep {m{^share/(po|fonts)/}} @files; check( $_, exec => -1 ) for grep {m{^t/data/}} @files; check( $_, exec => -1, bps_tag => -1 ) for grep {m{^etc/[^/]+$}} @files; check( $_, exec => -1, bps_tag => -1 ) for grep {m{^etc/upgrade/[^/]+/}} @files; check( $_, warnings => 1, strict => 1, compile_perl => 1, no_tabs => 1 ) for grep {m{^etc/upgrade/.*/content$}} @files; check( $_, shebang => 1, exec => 1, warnings => 1, strict => 1, bps_tag => 1, no_tabs => 1 ) for grep {m{^etc/upgrade/[^/]+$}} @files; check( $_, compile_perl => 1, exec => 1 ) for grep{ -f $_} map {s/\.in$//; $_} grep {m{^etc/upgrade/[^/]+$}} @files; check( $_, exec => -1 ) for grep {m{^(devel/)?docs/}} @files; done_testing; rt-4.2.12/t/api/000755 000765 000024 00000000000 12555754775 013717 5ustar00sartakstaff000000 000000 rt-4.2.12/t/approval/000755 000765 000024 00000000000 12555754775 014772 5ustar00sartakstaff000000 000000 rt-4.2.12/t/articles/000755 000765 000024 00000000000 12555754775 014754 5ustar00sartakstaff000000 000000 rt-4.2.12/t/charts/000755 000765 000024 00000000000 12555754775 014432 5ustar00sartakstaff000000 000000 rt-4.2.12/t/crypt/000755 000765 000024 00000000000 12555754775 014307 5ustar00sartakstaff000000 000000 rt-4.2.12/t/customfields/000755 000765 000024 00000000000 12555754775 015647 5ustar00sartakstaff000000 000000 rt-4.2.12/t/data/000755 000765 000024 00000000000 12555754775 014057 5ustar00sartakstaff000000 000000 rt-4.2.12/t/fts/000755 000765 000024 00000000000 12555754775 013742 5ustar00sartakstaff000000 000000 rt-4.2.12/t/i18n/000755 000765 000024 00000000000 12555754775 013725 5ustar00sartakstaff000000 000000 rt-4.2.12/t/lifecycles/000755 000765 000024 00000000000 12555754775 015270 5ustar00sartakstaff000000 000000 rt-4.2.12/t/mail/000755 000765 000024 00000000000 12555754775 014070 5ustar00sartakstaff000000 000000 rt-4.2.12/t/pod.t000644 000765 000024 00000000277 12555754775 014123 0ustar00sartakstaff000000 000000 use strict; use warnings; use Test::More; use Test::Pod; all_pod_files_ok( all_pod_files("lib","devel","docs","etc","bin","sbin"), , , ); rt-4.2.12/t/security/000755 000765 000024 00000000000 12555754775 015015 5ustar00sartakstaff000000 000000 rt-4.2.12/t/shredder/000755 000765 000024 00000000000 12555754775 014746 5ustar00sartakstaff000000 000000 rt-4.2.12/t/ticket/000755 000765 000024 00000000000 12555754775 014431 5ustar00sartakstaff000000 000000 rt-4.2.12/t/validator/000755 000765 000024 00000000000 12555754775 015133 5ustar00sartakstaff000000 000000 rt-4.2.12/t/web/000755 000765 000024 00000000000 12555754775 013723 5ustar00sartakstaff000000 000000 rt-4.2.12/t/web/action-results.t000644 000765 000024 00000003614 12555754775 017070 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 'no_declare'; my ($url, $m) = RT::Test->started_ok; ok $m->login, "Logged in"; # We test two ticket creation paths since one historically doesn't update the # session (quick create) and the other does. for my $quick (1, 0) { diag $quick ? "Quick ticket creation" : "Normal ticket creation"; $m->get_ok("/"); $m->submit_form_ok({ form_name => 'CreateTicketInQueue' }, "Create new ticket form") unless $quick; $m->submit_form_ok({ with_fields => { Subject => "The Plants", Content => "Please water them.", }, }, "Submitted new ticket"); my $id = RT::Test->last_ticket->id; like $m->uri, qr/results=[A-Za-z0-9]{32}/, "URI contains results hash"; $m->content_contains("Ticket $id created", "Page contains results message"); $m->content_contains("#$id: The Plants") unless $quick; diag "Reloading without a referer but with a results hash doesn't trigger the CSRF"; { # Mech's API here sucks. To drop the Referer and simulate a real browser # reload, we need to make a new request which explicitly adds an empty Referer # header (causing it to never be sent) and then deletes the empty Referer # header to let it be automatically managed again. $m->add_header("Referer" => undef); $m->get_ok( $m->uri, "Reloading the results page without a Referer" ); $m->delete_header("Referer"); like $m->uri, qr/results=[A-Za-z0-9]{32}/, "URI contains results hash"; $m->content_lacks("cross-site request forgery", "Skipped the CSRF interstitial") or $m->follow_link_ok({ text => "click here to resume your request" }, "Ignoring CSRF warning"); $m->content_lacks("Ticket $id created", "Page lacks results message"); $m->content_contains("#$id: The Plants") unless $quick; } } undef $m; done_testing; rt-4.2.12/t/web/admin_groups.t000644 000765 000024 00000003670 12555754775 016605 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 26; my ( $url, $m ) = RT::Test->started_ok; ok( $m->login(), 'logged in' ); { diag "test creating a group" if $ENV{TEST_VERBOSE}; $m->get_ok( $url . '/Admin/Groups/Modify.html?Create=1' ); $m->content_contains('Create a new group', 'found title'); $m->submit_form_ok({ form_number => 3, fields => { Name => 'test group' }, }); $m->content_contains('Group created', 'found results'); $m->content_contains('Modify the group test group', 'found title'); } { diag "test creating another group" if $ENV{TEST_VERBOSE}; $m->get_ok( $url . '/Admin/Groups/Modify.html?Create=1' ); $m->content_contains('Create a new group', 'found title'); $m->submit_form_ok({ form_number => 3, fields => { Name => 'test group2' }, }); $m->content_contains('Group created', 'found results'); $m->content_contains('Modify the group test group2', 'found title'); } { diag "test creating an overlapping group" if $ENV{TEST_VERBOSE}; $m->get_ok( $url . '/Admin/Groups/Modify.html?Create=1' ); $m->content_contains('Create a new group', 'found title'); $m->submit_form_ok({ form_number => 3, fields => { Name => 'test group' }, }); $m->content_contains('Group could not be created', 'found results'); $m->content_like(qr/Group name .+? is already in use/, 'found message'); } { diag "test updating a group name to overlap" if $ENV{TEST_VERBOSE}; $m->get_ok( $url . '/Admin/Groups/' ); $m->follow_link_ok({text => 'test group2'}, 'found title'); $m->content_contains('Modify the group test group2'); $m->submit_form_ok({ form_number => 3, fields => { Name => 'test group' }, }); $m->content_lacks('Name changed', "name not changed"); $m->content_contains('Illegal value for Name', 'found error message'); $m->content_contains('test group', 'did not find new name'); } rt-4.2.12/t/web/admin_queue_lifecycle.t000644 000765 000024 00000003151 12555754775 020423 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 13; my $lifecycles = RT->Config->Get('Lifecycles'); RT->Config->Set( Lifecycles => %{$lifecycles}, foo => { initial => ['initial'], active => ['open'], inactive => ['resolved'], } ); RT::Lifecycle->FillCache(); my ( $url, $m ) = RT::Test->started_ok; ok( $m->login(), 'logged in' ); $m->get_ok( $url . '/Admin/Queues/Modify.html?id=1' ); my $form = $m->form_name('ModifyQueue'); my $lifecycle_input = $form->find_input('Lifecycle'); is( $lifecycle_input->value, 'default', 'default lifecycle' ); my @lifecycles = sort $lifecycle_input->possible_values; is_deeply( \@lifecycles, [qw/default foo/], 'found all lifecycles' ); $m->submit_form(); $m->content_lacks( 'Lifecycle changed from', 'no message of "Lifecycle changed from"' ); $m->content_lacks( 'That is already the current value', 'no message of "That is already the current value"' ); $form = $m->form_name('ModifyQueue'); $m->submit_form( fields => { Lifecycle => 'foo' }, ); $m->content_contains( 'Lifecycle changed from "default" to "foo"'); $lifecycle_input = $form->find_input('Lifecycle'); is( $lifecycle_input->value, 'foo', 'lifecycle is changed to foo' ); $form = $m->form_name('ModifyQueue'); $m->submit_form( fields => { Lifecycle => 'default' }, ); $m->content_contains( 'Lifecycle changed from "foo" to "default"'); $lifecycle_input = $form->find_input('Lifecycle'); is( $lifecycle_input->value, 'default', 'lifecycle is changed back to default' ); rt-4.2.12/t/web/admin_user.t000644 000765 000024 00000004260 12555754775 016240 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test::GnuPG tests => undef, gnupg_options => { passphrase => 'recipient', 'trust-model' => 'always', }; RT::Test->import_gnupg_key( 'rt-test@example.com', 'secret' ); ok( my $user = RT::User->new( RT->SystemUser ) ); ok( $user->Load('root'), "loaded user 'root'" ); $user->SetEmailAddress('rt-test@example.com'); my ( $url, $m ) = RT::Test->started_ok; ok( $m->login(), 'logged in' ); my $root = RT::User->new( $RT::SystemUser ); $root->Load('root'); ok( $root->id, 'loaded root' ); diag "test the history page" if $ENV{TEST_VERBOSE}; $m->get_ok( $url . '/Admin/Users/History.html?id=' . $root->id ); $m->content_contains('User created', 'has User created entry'); diag "test keys page" if $ENV{TEST_VERBOSE}; $m->follow_link_ok( { text => 'Private keys' } ); $m->content_contains('Public key(s) for rt-test@example.com'); $m->content_contains('The key is ultimately trusted'); $m->content_contains('F0CB3B482CFA485680A4A0BDD328035D84881F1B'); $m->content_contains('Tue Aug 07 2007'); $m->content_contains('never'); $m->content_contains('GnuPG private key'); my $form = $m->form_with_fields('PrivateKey'); is( $form->find_input('PrivateKey')->value, '__empty_value__', 'default no private key' ); $m->submit_form_ok( { fields => { PrivateKey => 'D328035D84881F1B' }, button => 'Update', }, 'submit PrivateKey form' ); $m->content_contains('Set private key'); $form = $m->form_with_fields('PrivateKey'); is( $form->find_input('PrivateKey')->value, 'D328035D84881F1B', 'set private key' ); $m->submit_form_ok( { fields => { PrivateKey => '__empty_value__' }, button => 'Update', }, 'submit PrivateKey form' ); $m->content_contains('Unset private key'); is( $form->find_input('PrivateKey')->value, '__empty_value__', 'unset private key' ); $form = $m->form_with_fields('PrivateKey'); $m->submit_form_ok( { fields => { PrivateKey => 'C798591AA831DBFB' }, button => 'Update', }, 'submit PrivateKey form' ); is( $form->find_input('PrivateKey')->value, 'C798591AA831DBFB', 'set private key' ); # TODO more /Admin/Users tests undef $m; done_testing; rt-4.2.12/t/web/articles-links.t000644 000765 000024 00000003270 12555754775 017036 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 18; RT->Config->Set( MasonLocalComponentRoot => RT::Test::get_abs_relocatable_dir('html') ); my ($baseurl, $m) = RT::Test->started_ok; my $queue = RT::Queue->new(RT->SystemUser); $queue->Load('General'); my $class = RT::Class->new(RT->SystemUser); my ($ok, $msg) = $class->Create(Name => "issues"); ok($ok, "created class: $msg"); ($ok, $msg) = $class->AddToObject($queue); ok($ok, "applied class to General: $msg"); my $article = RT::Article->new(RT->SystemUser); ($ok, $msg) = $article->Create(Name => "instance of ticket #17421", Class => $class->id); ok($ok, "created article: $msg"); ok($m->login, "logged in"); my $ticket = RT::Test->create_ticket(Queue => $queue->Id, Subject => 'oh wow! an AUTOLOAD bug'); $m->goto_ticket($ticket->id); $m->follow_link_ok({text => 'Reply'}); $m->form_name('TicketUpdate'); $m->field('Articles-Include-Article-Named' => $article->Name); $m->submit; $m->content_contains('instance of ticket #17421', 'got the name of the article in the ticket'); # delete RT::Article's Name method on the server so we'll need to AUTOLOAD it my $clone = $m->clone; $clone->get_ok('/delete-article-name-method.html'); like($clone->content, qr/\{deleted\}/); $m->form_name('TicketUpdate'); $m->click('SubmitTicket'); $m->follow_link_ok({text => 'Links'}); $m->text_contains('Article #' . $article->id . ': instance of ticket #17421', 'Article appears with its name in the links table'); my $refers_to = $ticket->RefersTo; is($refers_to->Count, 1, 'the ticket has a refers-to link'); is($refers_to->First->TargetURI->URI, 'fsck.com-article://example.com/article/' . $article->Id, 'when we included the article it created a refers-to'); rt-4.2.12/t/web/attachment-with-name-0.t000644 000765 000024 00000001143 12555754775 020263 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 8; my ( $baseurl, $m ) = RT::Test->started_ok; ok $m->login, 'logged in as root'; use File::Spec; my $file = File::Spec->catfile( RT::Test->temp_directory, 0 ); open my $fh, '>', $file or die $!; print $fh 'foobar'; close $fh; $m->get_ok( '/Ticket/Create.html?Queue=1' ); $m->submit_form( form_number => 3, fields => { Subject => 'test att 0', Content => 'test', Attach => $file }, ); $m->content_like( qr/Ticket \d+ created/i, 'created the ticket' ); $m->follow_link_ok( { text => 'Download 0' } ); $m->content_contains( 'foobar', 'file content' ); rt-4.2.12/t/web/attachment_dropping.t000644 000765 000024 00000003177 12555754775 020152 0ustar00sartakstaff000000 000000 use warnings; use strict; use RT::Test tests => undef; use File::Temp 'tempfile'; my $content = 'a' x 1000 . 'b' x 10; my ( $fh, $path ) = tempfile( UNLINK => 1, SUFFIX => '.txt' ); print $fh $content; close $fh; my $name = ( File::Spec->splitpath($path) )[2]; RT->Config->Set( 'WebSessionClass', "Apache::Session::File"); RT->Config->Set( 'MaxAttachmentSize', 1000 ); RT->Config->Set( 'TruncateLongAttachments', '0' ); RT->Config->Set( 'DropLongAttachments', '1' ); my $cf = RT::CustomField->new( RT->SystemUser ); ok( $cf->Create( Name => 'test truncation', Queue => '0', Type => 'FreeformSingle', ), ); my $cfid = $cf->id; my ( $baseurl, $m ) = RT::Test->started_ok; ok $m->login, 'logged in'; my $queue = RT::Test->load_or_create_queue( Name => 'General' ); ok( $queue->id, "Loaded General queue" ); $m->get_ok( $baseurl . '/Ticket/Create.html?Queue=' . $queue->id ); $m->content_contains( "Create a new ticket", 'ticket create page' ); $m->form_name('TicketCreate'); $m->field( 'Subject', 'Attachments dropping test' ); $m->field( 'Attach', $path ); $m->field( 'Content', 'Some content' ); my $cf_content = 'cf' . 'a' x 998 . 'cfb'; $m->field( "Object-RT::Ticket--CustomField-$cfid-Value", $cf_content ); $m->submit; is( $m->status, 200, "request successful" ); $m->content_contains( "File '$name' dropped because its size (1010 bytes) exceeded configured maximum size setting (1000 bytes).", 'dropped message' ); $m->content_lacks( 'cfaaaa', 'cf value was dropped' ); $m->follow_link_ok( { text => "Download $name" } ); is( $m->content, 'Large attachment dropped', 'dropped $name' ); undef $m; done_testing; rt-4.2.12/t/web/attachment_encoding.t000644 000765 000024 00000006717 12555754775 020121 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 32; my ( $baseurl, $m ) = RT::Test->started_ok; ok $m->login, 'logged in as root'; use File::Spec; my $subject = Encode::decode("UTF-8",'标题'); my $content = Encode::decode("UTF-8",'测试'); my $filename = Encode::decode("UTF-8",'附件.txt'); diag 'test without attachments' if $ENV{TEST_VERBOSE}; { $m->get_ok( $baseurl . '/Ticket/Create.html?Queue=1' ); $m->form_name('TicketModify'); $m->submit_form( form_number => 3, fields => { Subject => $subject, Content => $content }, ); $m->content_like( qr/Ticket \d+ created/i, 'created the ticket' ); $m->follow_link_ok( { text => 'with headers' }, '-> /Ticket/Attachment/WithHeaders/...' ); $m->content_contains( $subject, "has subject $subject" ); $m->content_contains( $content, "has content $content" ); my ( $id ) = $m->uri =~ /(\d+)$/; ok( $id, 'found attachment id' ); my $attachment = RT::Attachment->new( $RT::SystemUser ); ok($attachment->Load($id), "load att $id"); # let make original encoding to gbk ok( $attachment->SetHeader( 'X-RT-Original-Encoding' => 'gbk' ), 'set original encoding to gbk' ); $m->get( $m->uri ); $m->content_contains( $subject, "has subject $subject" ); $m->content_contains( $content, "has content $content" ); } diag 'test with attachemnts' if $ENV{TEST_VERBOSE}; { my $file = File::Spec->catfile( RT::Test->temp_directory, Encode::encode("UTF-8",$filename) ); open( my $fh, '>', $file ) or die $!; binmode $fh, ':utf8'; print $fh $filename; close $fh; $m->get_ok( $baseurl . '/Ticket/Create.html?Queue=1' ); $m->form_name('TicketModify'); $m->submit_form( form_number => 3, fields => { Subject => $subject, Content => $content, Attach => $file }, ); $m->content_like( qr/Ticket \d+ created/i, 'created the ticket' ); $m->content_contains( $filename, 'attached filename' ); $m->content_lacks( Encode::encode("UTF-8",$filename), 'no double encoded attached filename' ); $m->follow_link_ok( { text => 'with headers' }, '-> /Ticket/Attachment/WithHeaders/...' ); # subject is in the parent attachment, so there is no 标题 $m->content_lacks( $subject, "does not have content $subject" ); $m->content_contains( $content, "has content $content" ); my ( $id ) = $m->uri =~ /(\d+)$/; ok( $id, 'found attachment id' ); my $attachment = RT::Attachment->new( $RT::SystemUser ); ok($attachment->Load($id), "load att $id"); # let make original encoding to gbk ok( $attachment->SetHeader( 'X-RT-Original-Encoding' => 'gbk' ), 'set original encoding to gbk' ); $m->get( $m->uri ); $m->content_lacks( $subject, "does not have content $subject" ); $m->content_contains( $content, "has content $content" ); $m->back; $m->back; $m->follow_link_ok( { text => "Download $filename" }, '-> /Ticket/Attachment/...' ); $m->content_contains( $filename, "has file content $filename" ); ( $id ) = $m->uri =~ m{/(\d+)/[^/]+$}; ok( $id, 'found attachment id' ); $attachment = RT::Attachment->new( $RT::SystemUser ); ok($attachment->Load($id), "load att $id"); # let make original encoding to gbk ok( $attachment->SetHeader( 'X-RT-Original-Encoding' => 'gbk' ), 'set original encoding to gbk' ); $m->get( $m->uri ); $m->content_contains( $filename, "has content $filename" ); unlink $file; } rt-4.2.12/t/web/attachment_truncation.t000644 000765 000024 00000003311 12555754775 020504 0ustar00sartakstaff000000 000000 use warnings; use strict; use RT::Test tests => undef; use File::Temp 'tempfile'; my $content = 'a' x 1000 . 'b' x 10; my ( $fh, $path ) = tempfile( UNLINK => 1, SUFFIX => '.txt' ); print $fh $content; close $fh; my $name = ( File::Spec->splitpath($path) )[2]; RT->Config->Set( 'WebSessionClass', "Apache::Session::File"); RT->Config->Set( 'MaxAttachmentSize', 1000 ); RT->Config->Set( 'TruncateLongAttachments', '1' ); my $queue = RT::Test->load_or_create_queue( Name => 'General' ); ok( $queue->id, "Loaded General queue" ); my $cf = RT::CustomField->new( RT->SystemUser ); ok( $cf->Create( Name => 'test truncation', Queue => '0', Type => 'FreeformSingle', ), ); my $cfid = $cf->id; my ( $baseurl, $m ) = RT::Test->started_ok; ok $m->login, 'logged in'; $m->get_ok( $baseurl . '/Ticket/Create.html?Queue=' . $queue->id ); $m->content_contains( "Create a new ticket", 'ticket create page' ); $m->form_name('TicketCreate'); $m->field( 'Subject', 'Attachments test' ); $m->field( 'Attach', $path ); $m->field( 'Content', 'Some content' ); my $cf_content = 'cf' . 'a' x 998 . 'cfb'; $m->field( "Object-RT::Ticket--CustomField-$cfid-Value", $cf_content ); $m->submit; is( $m->status, 200, "request successful" ); $m->content_contains( "File '$name' truncated because its size (1010 bytes) exceeded configured maximum size setting (1000 bytes).", 'truncated message' ); $m->content_contains( 'cf' . 'a' x 998, 'has the first 1000 cf chars' ); $m->content_lacks( 'aaacfb', 'lacks cf chars after that' ); $m->follow_link_ok( { text => "Download $name" } ); $m->content_contains( 'a' x 1000, 'has the first 1000 chars' ); $m->content_lacks( 'b', 'lacks chars after that' ); undef $m; done_testing; rt-4.2.12/t/web/attachments.t000644 000765 000024 00000036615 12555754775 016436 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 159; use constant LogoFile => $RT::StaticPath .'/images/bpslogo.png'; use constant FaviconFile => $RT::StaticPath .'/images/favicon.png'; use constant TextFile => $RT::StaticPath .'/css/mobile.css'; my ($url, $m) = RT::Test->started_ok; ok $m->login, 'logged in'; my $queue = RT::Test->load_or_create_queue( Name => 'General' ); ok( $queue && $queue->id, "Loaded General queue" ); diag "create a ticket in full interface"; diag "w/o attachments"; { $m->goto_create_ticket( $queue ); is($m->status, 200, "request successful"); $m->form_name('TicketCreate'); $m->content_contains("Create a new ticket", 'ticket create page'); $m->submit; is($m->status, 200, "request successful"); } diag "with one attachment"; { $m->goto_create_ticket( $queue ); $m->form_name('TicketCreate'); $m->field('Subject', 'Attachments test'); $m->field('Attach', LogoFile); $m->field('Content', 'Some content'); $m->submit; is($m->status, 200, "request successful"); $m->content_contains('Attachments test', 'we have subject on the page'); $m->content_contains('Some content', 'and content'); $m->content_contains('Download bpslogo.png', 'page has file name'); } diag "with two attachments"; { $m->goto_create_ticket( $queue ); $m->form_name('TicketCreate'); $m->field('Attach', LogoFile); $m->click('AddMoreAttach'); is($m->status, 200, "request successful"); $m->form_name('TicketCreate'); $m->field('Attach', FaviconFile); $m->field('Subject', 'Attachments test'); $m->field('Content', 'Some content'); $m->submit; is($m->status, 200, "request successful"); $m->content_contains('Attachments test', 'we have subject on the page'); $m->content_contains('Some content', 'and content'); $m->content_contains('Download bpslogo.png', 'page has file name'); $m->content_contains('Download favicon.png', 'page has file name'); } diag "with one attachment, but delete one along the way"; { $m->goto_create_ticket( $queue ); $m->form_name('TicketCreate'); $m->field('Attach', LogoFile); $m->click('AddMoreAttach'); is($m->status, 200, "request successful"); $m->form_name('TicketCreate'); $m->field('Attach', FaviconFile); $m->tick( 'DeleteAttach', LogoFile ); $m->field('Subject', 'Attachments test'); $m->field('Content', 'Some content'); $m->submit; is($m->status, 200, "request successful"); $m->content_contains('Attachments test', 'we have subject on the page'); $m->content_contains('Some content', 'and content'); $m->content_lacks('Download bpslogo.png', 'page has file name'); $m->content_contains('Download favicon.png', 'page has file name'); } diag "with one attachment, but delete one along the way"; { $m->goto_create_ticket( $queue ); $m->form_name('TicketCreate'); $m->field('Attach', LogoFile); $m->click('AddMoreAttach'); is($m->status, 200, "request successful"); $m->form_name('TicketCreate'); $m->tick( 'DeleteAttach', LogoFile ); $m->click('AddMoreAttach'); is($m->status, 200, "request successful"); $m->form_name('TicketCreate'); $m->field('Attach', FaviconFile); $m->click('AddMoreAttach'); is($m->status, 200, "request successful"); $m->form_name('TicketCreate'); $m->field('Subject', 'Attachments test'); $m->field('Content', 'Some content'); $m->submit; is($m->status, 200, "request successful"); $m->content_contains('Attachments test', 'we have subject on the page'); $m->content_contains('Some content', 'and content'); $m->content_lacks('Download bpslogo.png', 'page has file name'); $m->content_contains('Download favicon.png', 'page has file name'); } diag "reply to a ticket in full interface"; diag "with one attachment"; { my $ticket = RT::Test->create_ticket( Queue => $queue, Subject => 'Attachments test', Content => 'Some content', ); $m->goto_ticket( $ticket->id ); $m->follow_link_ok({text => 'Reply'}, "reply to the ticket"); $m->form_name('TicketUpdate'); $m->field('Attach', LogoFile); $m->field('UpdateContent', 'Message'); $m->click('SubmitTicket'); is($m->status, 200, "request successful"); $m->content_contains('Download bpslogo.png', 'page has file name'); } diag "with two attachments"; { my $ticket = RT::Test->create_ticket( Queue => $queue, Subject => 'Attachments test', Content => 'Some content', ); $m->goto_ticket( $ticket->id ); $m->follow_link_ok({text => 'Reply'}, "reply to the ticket"); $m->form_name('TicketUpdate'); $m->field('Attach', LogoFile); $m->click('AddMoreAttach'); is($m->status, 200, "request successful"); $m->form_name('TicketUpdate'); $m->field('Attach', FaviconFile); $m->field('UpdateContent', 'Message'); $m->click('SubmitTicket'); is($m->status, 200, "request successful"); $m->content_contains('Download bpslogo.png', 'page has file name'); $m->content_contains('Download favicon.png', 'page has file name'); } diag "with one attachment, delete one along the way"; { my $ticket = RT::Test->create_ticket( Queue => $queue, Subject => 'Attachments test', Content => 'Some content', ); $m->goto_ticket( $ticket->id ); $m->follow_link_ok({text => 'Reply'}, "reply to the ticket"); $m->form_name('TicketUpdate'); $m->field('Attach', LogoFile); $m->click('AddMoreAttach'); is($m->status, 200, "request successful"); $m->form_name('TicketUpdate'); $m->tick('DeleteAttach', LogoFile); $m->field('Attach', FaviconFile); $m->field('UpdateContent', 'Message'); $m->click('SubmitTicket'); is($m->status, 200, "request successful"); $m->content_lacks('Download bpslogo.png', 'page has file name'); $m->content_contains('Download favicon.png', 'page has file name'); } diag "jumbo interface"; diag "with one attachment"; { my $ticket = RT::Test->create_ticket( Queue => $queue, Subject => 'Attachments test', Content => 'Some content', ); $m->goto_ticket( $ticket->id ); $m->follow_link_ok({text => 'Jumbo'}, "jumbo the ticket"); $m->form_name('TicketModifyAll'); $m->field('Attach', LogoFile); $m->field('UpdateContent', 'Message'); $m->click('SubmitTicket'); is($m->status, 200, "request successful"); $m->goto_ticket( $ticket->id ); $m->content_contains('Download bpslogo.png', 'page has file name'); } diag "with two attachments"; { my $ticket = RT::Test->create_ticket( Queue => $queue, Subject => 'Attachments test', Content => 'Some content', ); $m->goto_ticket( $ticket->id ); $m->follow_link_ok({text => 'Jumbo'}, "jumbo the ticket"); $m->form_name('TicketModifyAll'); $m->field('Attach', LogoFile); $m->click('AddMoreAttach'); is($m->status, 200, "request successful"); $m->form_name('TicketModifyAll'); $m->field('Attach', FaviconFile); $m->field('UpdateContent', 'Message'); $m->click('SubmitTicket'); is($m->status, 200, "request successful"); $m->goto_ticket( $ticket->id ); $m->content_contains('Download bpslogo.png', 'page has file name'); $m->content_contains('Download favicon.png', 'page has file name'); } diag "with one attachment, delete one along the way"; { my $ticket = RT::Test->create_ticket( Queue => $queue, Subject => 'Attachments test', Content => 'Some content', ); $m->goto_ticket( $ticket->id ); $m->follow_link_ok({text => 'Jumbo'}, "jumbo the ticket"); $m->form_name('TicketModifyAll'); $m->field('Attach', LogoFile); $m->click('AddMoreAttach'); is($m->status, 200, "request successful"); $m->form_name('TicketModifyAll'); $m->tick('DeleteAttach', LogoFile); $m->field('Attach', FaviconFile); $m->field('UpdateContent', 'Message'); $m->click('SubmitTicket'); is($m->status, 200, "request successful"); $m->goto_ticket( $ticket->id ); $m->content_lacks('Download bpslogo.png', 'page has file name'); $m->content_contains('Download favicon.png', 'page has file name'); } diag "bulk update"; diag "one attachment"; { my @tickets = RT::Test->create_tickets( { Queue => $queue, Subject => 'Attachments test', Content => 'Some content', }, {}, {}, ); my $query = join ' OR ', map "id=$_", map $_->id, @tickets; $query =~ s/ /%20/g; $m->get_ok( $url . "/Search/Bulk.html?Query=$query&Rows=10" ); $m->form_name('BulkUpdate'); $m->field('Attach', FaviconFile); $m->field('UpdateContent', 'Message'); $m->submit; is($m->status, 200, "request successful"); foreach my $ticket ( @tickets ) { $m->goto_ticket( $ticket->id ); $m->content_lacks('Download bpslogo.png', 'page has file name'); $m->content_contains('Download favicon.png', 'page has file name'); } } diag "two attachments"; { my @tickets = RT::Test->create_tickets( { Queue => $queue, Subject => 'Attachments test', Content => 'Some content', }, {}, {}, ); my $query = join ' OR ', map "id=$_", map $_->id, @tickets; $query =~ s/ /%20/g; $m->get_ok( $url . "/Search/Bulk.html?Query=$query&Rows=10" ); $m->form_name('BulkUpdate'); $m->field('Attach', LogoFile); $m->click('AddMoreAttach'); is($m->status, 200, "request successful"); $m->form_name('BulkUpdate'); $m->field('Attach', FaviconFile); $m->field('UpdateContent', 'Message'); $m->submit; is($m->status, 200, "request successful"); foreach my $ticket ( @tickets ) { $m->goto_ticket( $ticket->id ); $m->content_contains('Download bpslogo.png', 'page has file name'); $m->content_contains('Download favicon.png', 'page has file name'); } } diag "one attachment, delete one along the way"; { my @tickets = RT::Test->create_tickets( { Queue => $queue, Subject => 'Attachments test', Content => 'Some content', }, {}, {}, ); my $query = join ' OR ', map "id=$_", map $_->id, @tickets; $query =~ s/ /%20/g; $m->get_ok( $url . "/Search/Bulk.html?Query=$query&Rows=10" ); $m->form_name('BulkUpdate'); $m->field('Attach', LogoFile); $m->click('AddMoreAttach'); is($m->status, 200, "request successful"); $m->form_name('BulkUpdate'); $m->tick('DeleteAttach', LogoFile); $m->field('Attach', FaviconFile); $m->field('UpdateContent', 'Message'); $m->submit; is($m->status, 200, "request successful"); foreach my $ticket ( @tickets ) { $m->goto_ticket( $ticket->id ); $m->content_lacks('Download bpslogo.png', 'page has file name'); $m->content_contains('Download favicon.png', 'page has file name'); } } diag "self service"; diag "create with attachment"; { $m->get_ok( $url . "/SelfService/Create.html?Queue=". $queue->id ); $m->form_name('TicketCreate'); $m->field('Attach', FaviconFile); $m->field('Subject', 'Subject'); $m->field('Content', 'Message'); ok($m->current_form->find_input('AddMoreAttach'), "more than one attachment"); $m->submit; is($m->status, 200, "request successful"); $m->content_contains('Download favicon.png', 'page has file name'); } diag "update with attachment"; { my $ticket = RT::Test->create_ticket( Queue => $queue, Subject => 'Attachments test', Content => 'Some content', ); $m->get_ok( $url . "/SelfService/Update.html?id=". $ticket->id ); $m->form_name('TicketUpdate'); $m->field('Attach', FaviconFile); $m->field('UpdateContent', 'Message'); ok($m->current_form->find_input('AddMoreAttach'), "more than one attachment"); $m->click('SubmitTicket'); is($m->status, 200, "request successful"); $m->content_contains('Download favicon.png', 'page has file name'); } diag "mobile ui"; diag "simple create + reply"; { $m->get_ok( $url . '/m/ticket/create?Queue=' . $queue->id ); $m->form_name('TicketCreate'); $m->field('Subject', 'Attachments test'); $m->field('Attach', LogoFile); $m->field('Content', 'Some content'); $m->submit; is($m->status, 200, "request successful"); $m->content_contains('Attachments test', 'we have subject on the page'); $m->content_contains('bpslogo.png', 'page has file name'); $m->follow_link_ok({text => 'Reply'}, "reply to the ticket"); $m->form_name('TicketUpdate'); $m->field('Attach', LogoFile); $m->click('AddMoreAttach'); is($m->status, 200, "request successful"); $m->form_name('TicketUpdate'); $m->field('Attach', FaviconFile); $m->field('UpdateContent', 'Message'); $m->click('SubmitTicket'); is($m->status, 200, "request successful"); $m->content_contains('bpslogo.png', 'page has file name'); $m->content_contains('favicon.png', 'page has file name'); } diag "check content type and content"; { $m->goto_create_ticket( $queue ); $m->form_name('TicketCreate'); $m->field('Attach', LogoFile); $m->click('AddMoreAttach'); is($m->status, 200, "request successful"); $m->form_name('TicketCreate'); $m->field('Attach', TextFile); $m->field('Subject', 'Attachments test'); $m->field('Content', 'Some content'); $m->submit; is($m->status, 200, "request successful"); $m->content_contains('Attachments test', 'we have subject on the page'); $m->content_contains('Some content', 'and content'); $m->content_contains('Download bpslogo.png', 'page has file name'); $m->content_contains('Download mobile.css', 'page has file name'); $m->follow_link_ok({text => "Download bpslogo.png"}); is($m->response->header('Content-Type'), 'image/png', 'Content-Type of png lacks charset' ); is($m->content_type, "image/png"); is($m->content, RT::Test->file_content(LogoFile), "Binary content matches"); $m->back; $m->follow_link_ok( { text => 'Download mobile.css' } ); is( $m->response->header('Content-Type'), 'text/css;charset=UTF-8', 'Content-Type of text has charset', ); is($m->content_type, "text/css"); is($m->content, RT::Test->file_content(TextFile), "Text content matches"); } diag "concurent actions"; my $m2 = RT::Test::Web->new; ok $m2->login, 'second login'; diag "update and create"; { my $ticket = RT::Test->create_ticket( Queue => $queue, Subject => 'Attachments test', Content => 'Some content', ); $m2->goto_ticket( $ticket->id ); $m2->follow_link_ok({text => 'Reply'}, "reply to the ticket"); $m2->form_name('TicketUpdate'); $m2->field('Attach', LogoFile); $m2->click('AddMoreAttach'); is($m2->status, 200, "request successful"); $m->goto_create_ticket( $queue ); $m->form_name('TicketCreate'); $m->field('Attach', FaviconFile); $m->field('Subject', 'Attachments test'); $m->field('Content', 'Some content'); $m->submit; is($m->status, 200, "request successful"); $m->content_lacks('Download bpslogo.png', 'page has file name'); $m->content_contains('Download favicon.png', 'page has file name'); $m2->form_name('TicketUpdate'); $m2->click('SubmitTicket'); $m2->content_contains('Download bpslogo.png', 'page has file name'); $m2->content_lacks('Download favicon.png', 'page has no file name'); } rt-4.2.12/t/web/basic.t000644 000765 000024 00000006522 12555754775 015176 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 24; my ($baseurl, $agent) = RT::Test->started_ok; my $url = $agent->rt_base_url; # get the top page { $agent->get($url); is ($agent->status, 200, "Loaded a page"); } # test a login { $agent->login('root' => 'password'); # the field isn't named, so we have to click link 0 is( $agent->status, 200, "Fetched the page ok"); $agent->content_contains("Logout", "Found a logout link"); } { $agent->goto_create_ticket(1); is ($agent->status, 200, "Loaded Create.html"); $agent->form_name('TicketCreate'); my $string = Encode::decode("UTF-8","I18N Web Testing æøå"); $agent->field('Subject' => "Ticket with utf8 body"); $agent->field('Content' => $string); ok($agent->submit, "Created new ticket with $string as Content"); $agent->content_contains($string, "Found the content"); ok($agent->{redirected_uri}, "Did redirection"); { my $ticket = RT::Test->last_ticket; my $content = $ticket->Transactions->First->Content; like( $content, qr{$string}, 'content is there, API check' ); } } { $agent->goto_create_ticket(1); is ($agent->status, 200, "Loaded Create.html"); $agent->form_name('TicketCreate'); my $string = Encode::decode( "UTF-8","I18N Web Testing æøå"); $agent->field('Subject' => $string); $agent->field('Content' => "Ticket with utf8 subject"); ok($agent->submit, "Created new ticket with $string as Content"); $agent->content_contains($string, "Found the content"); ok($agent->{redirected_uri}, "Did redirection"); { my $ticket = RT::Test->last_ticket; is( $ticket->Subject, $string, 'subject is correct, API check' ); } } # Update time worked in hours { $agent->follow_link( text_regex => qr/Basics/ ); $agent->submit_form( form_name => 'TicketModify', fields => { TimeWorked => 5, 'TimeWorked-TimeUnits' => "hours" } ); $agent->content_contains("5 hours", "5 hours is displayed"); $agent->content_contains("300 min", "but minutes is also"); } $agent->get( $url."static/images/test.png" ); my $file = RT::Test::get_relocatable_file( File::Spec->catfile( qw(.. .. share static images test.png) ) ); is( length($agent->content), -s $file, "got a file of the correct size ($file)", ); # # XXX: hey-ho, we have these tests in t/web/query-builder # TODO: move everything about QB there my $response = $agent->get($url."Search/Build.html"); ok( $response->is_success, "Fetched " . $url."Search/Build.html" ); # Parsing TicketSQL # # Adding items # set the first value ok($agent->form_name('BuildQuery')); $agent->field("AttachmentField", "Subject"); $agent->field("AttachmentOp", "LIKE"); $agent->field("ValueOfAttachment", "aaa"); $agent->submit("AddClause"); # set the next value ok($agent->form_name('BuildQuery')); $agent->field("AttachmentField", "Subject"); $agent->field("AttachmentOp", "LIKE"); $agent->field("ValueOfAttachment", "bbb"); $agent->submit("AddClause"); ok($agent->form_name('BuildQuery')); # get the query my $query = $agent->current_form->find_input("Query")->value; # strip whitespace from ends $query =~ s/^\s*//g; $query =~ s/\s*$//g; # collapse other whitespace $query =~ s/\s+/ /g; is ($query, "Subject LIKE 'aaa' AND Subject LIKE 'bbb'"); rt-4.2.12/t/web/basic_auth.t000644 000765 000024 00000001754 12555754775 016221 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT; use RT::Test tests => 9; RT->Config->Set( DevelMode => 0 ); RT->Config->Set( WebRemoteUserAuth => 1 ); my ( $url, $m ) = RT::Test->started_ok( basic_auth => 1 ); # This tests the plack middleware, not RT $m->get($url); is($m->status, 401, "Initial request with no creds gets 401"); # This tests the plack middleware, not RT $m->get($url, $m->auth_header( root => "wrong" )); is($m->status, 401, "Request with wrong creds gets 401"); $m->get($url, $m->auth_header( root => "password" )); is($m->status, 200, "Request with right creds gets 200"); $m->content_like( qr{\Qroot\E}i, "Has user on the page" ); $m->content_unlike(qr/Logout/i, "Has no logout button, no WebFallbackToRTLogin"); # Again, testing the plack middleware $m->get($url); is($m->status, 401, "Subsequent requests without credentials aren't still logged in"); # Put the credentials back for the warnings check at the end $m->auth( root => "password" ); rt-4.2.12/t/web/case-sensitivity.t000644 000765 000024 00000003775 12555754775 017427 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 18; my $q = RT::Test->load_or_create_queue( Name => 'General' ); ok $q && $q->id, 'loaded or created queue'; my ($root, $root_id); { $root = RT::User->new( RT->SystemUser ); $root->Load('root'); ok $root_id = $root->id, 'found root'; } my ($baseurl, $m) = RT::Test->started_ok; $m->login; # test users auto completer { $m->get_ok('/Helpers/Autocomplete/Users?term=eNo'); require JSON; is_deeply( JSON::from_json( $m->content ), [{id => 12, "value" => "root\@localhost","label" => "root (Enoch Root)"}] ); } # test ticket's People page { my $ticket = RT::Test->create_ticket( Queue => $q->id ); ok $ticket && $ticket->id, "created ticket"; $m->goto_ticket( $ticket->id ); $m->follow_link_ok( {text => 'People'} ); $m->form_number(3); $m->select( UserField => 'RealName' ); $m->field( UserString => 'eNo' ); $m->click('OnlySearchForPeople'); my $form = $m->form_number(3); my $input = $form->find_input('Ticket-AddWatcher-Principal-'. $root->id ); ok $input, 'input is there'; } # test users' admin UI { $m->get_ok('/Admin/Users/'); $m->form_number(4); $m->select( UserField => 'RealName' ); $m->field( UserString => 'eNo' ); $m->submit; like $m->uri, qr{\QAdmin/Users/Modify.html?id=$root_id\E}; } # create a cf for testing my $cf; { $cf = RT::CustomField->new(RT->SystemUser); my ($id,$msg) = $cf->Create( Name => 'Test', Type => 'Select', MaxValues => '1', Queue => $q->id, ); ok($id,$msg); ($id,$msg) = $cf->AddValue(Name => 'Enoch', Description => 'Root'); ok($id,$msg); } # test custom field values auto completer { $m->get_ok('/Helpers/Autocomplete/CustomFieldValues?term=eNo&Object-RT::Ticket--CustomField-'. $cf->id .'-Value&ContextId=1&ContextType=RT::Queue'); require JSON; is_deeply( JSON::from_json( $m->content ), [{"value" => "Enoch","label" => "Enoch (Root)"}] ); } rt-4.2.12/t/web/cf_access.t000644 000765 000024 00000016506 12555754775 016031 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 32; my ($baseurl, $m) = RT::Test->started_ok; use constant ImageFile => $RT::StaticPath .'/images/bpslogo.png'; use constant ImageFileContent => RT::Test->file_content(ImageFile); ok $m->login, 'logged in'; diag "Create a CF"; { $m->follow_link( id => 'admin-custom-fields-create'); # Test form validation $m->submit_form( form_name => "ModifyCustomField", fields => { TypeComposite => 'Image-0', LookupType => 'RT::Queue-RT::Ticket', Name => '', Description => 'img', }, ); $m->text_contains('Invalid value for Name'); $m->submit_form( form_name => "ModifyCustomField", fields => { TypeComposite => 'Image-0', LookupType => 'RT::Queue-RT::Ticket', Name => '0', Description => 'img', }, ); $m->text_contains('Invalid value for Name'); $m->submit_form( form_name => "ModifyCustomField", fields => { TypeComposite => 'Image-0', LookupType => 'RT::Queue-RT::Ticket', Name => '1', Description => 'img', }, ); $m->text_contains('Invalid value for Name'); # The real submission $m->submit_form( form_name => "ModifyCustomField", fields => { TypeComposite => 'Image-0', LookupType => 'RT::Queue-RT::Ticket', Name => 'img', Description => 'img', }, ); $m->text_contains('Object created'); # Validation on update $m->form_name("ModifyCustomField"); $m->set_fields( TypeComposite => 'Image-0', LookupType => 'RT::Queue-RT::Ticket', Name => '', Description => 'img', ); $m->click('Update'); $m->text_contains('Illegal value for Name'); $m->form_name("ModifyCustomField"); $m->set_fields( TypeComposite => 'Image-0', LookupType => 'RT::Queue-RT::Ticket', Name => '0', Description => 'img', ); $m->click('Update'); $m->text_contains('Illegal value for Name'); $m->form_name("ModifyCustomField"); $m->set_fields( TypeComposite => 'Image-0', LookupType => 'RT::Queue-RT::Ticket', Name => '1', Description => 'img', ); $m->click('Update'); $m->text_contains('Illegal value for Name'); } diag "apply the CF to General queue"; my ( $cf, $cfid, $tid ); { $m->title_is(q/Editing CustomField img/, 'admin-cf created'); $m->follow_link( id => 'admin-queues'); $m->follow_link( text => 'General' ); $m->title_is(q/Configuration for queue General/, 'admin-queue: general'); $m->follow_link( id => 'page-custom-fields-tickets'); $m->title_is(q/Custom Fields for queue General/, 'admin-queue: general cfid'); $m->form_name('EditCustomFields'); # Sort by numeric IDs in names my @names = sort grep defined, $m->current_form->find_input('AddCustomField')->possible_values; $cf = pop(@names); $cf =~ /(\d+)$/ or die "Hey this is impossible dude"; $cfid = $1; $m->tick( AddCustomField => $cf => 1 ); # Associate the new CF with this queue $m->tick( AddCustomField => $_ => 0 ) for @names; # ...and not any other. ;-) $m->click('UpdateCFs'); $m->content_contains('Object created', 'TCF added to the queue' ); } my $tester = RT::Test->load_or_create_user( Name => 'tester', Password => '123456' ); RT::Test->set_rights( { Principal => $tester->PrincipalObj, Right => [qw(SeeQueue ShowTicket CreateTicket)], }, ); ok $m->login( $tester->Name, 123456, logout => 1), 'logged in'; diag "check that we have no the CF on the create" ." ticket page when user has no SeeCustomField right"; { $m->submit_form( form_name => "CreateTicketInQueue", fields => { Queue => 'General' }, ); $m->content_lacks('Upload multiple images', 'has no upload image field'); my $form = $m->form_name("TicketCreate"); my $upload_field = "Object-RT::Ticket--CustomField-$cfid-Upload"; ok !$form->find_input( $upload_field ), 'no form field on the page'; $m->submit_form( form_name => "TicketCreate", fields => { Subject => 'test' }, ); $m->content_like(qr/Ticket \d+ created/, "a ticket is created succesfully"); $m->content_lacks('img:', 'has no img field on the page'); $m->follow_link( text => 'Custom Fields'); $m->content_lacks('Upload multiple images', 'has no upload image field'); } RT::Test->set_rights( { Principal => $tester->PrincipalObj, Right => [qw(SeeQueue ShowTicket CreateTicket SeeCustomField)], }, ); diag "check that we have no the CF on the create" ." ticket page when user has no ModifyCustomField right"; { $m->submit_form( form_name => "CreateTicketInQueue", fields => { Queue => 'General' }, ); $m->content_lacks('Upload multiple images', 'has no upload image field'); my $form = $m->form_name("TicketCreate"); my $upload_field = "Object-RT::Ticket--CustomField-$cfid-Upload"; ok !$form->find_input( $upload_field ), 'no form field on the page'; $m->submit_form( form_name => "TicketCreate", fields => { Subject => 'test' }, ); $tid = $1 if $m->content =~ /Ticket (\d+) created/i; ok $tid, "a ticket is created succesfully"; $m->follow_link( id => 'page-basics'); $m->content_lacks('Upload multiple images', 'has no upload image field'); $form = $m->form_name('TicketModify'); $upload_field = "Object-RT::Ticket-$tid-CustomField-$cfid-Upload"; ok !$form->find_input( $upload_field ), 'no form field on the page'; } RT::Test->set_rights( { Principal => $tester->PrincipalObj, Right => [qw(SeeQueue ShowTicket CreateTicket SeeCustomField ModifyCustomField)], }, ); diag "create a ticket with an image"; { $m->submit_form( form_name => "CreateTicketInQueue", fields => { Queue => 'General' }, ); $m->content_contains('Upload multiple images', 'has a upload image field'); $cf =~ /(\d+)$/ or die "Hey this is impossible dude"; my $upload_field = "Object-RT::Ticket--CustomField-$1-Upload"; $m->submit_form( form_name => "TicketCreate", fields => { $upload_field => ImageFile, Subject => 'testing img cf creation', }, ); $m->content_like(qr/Ticket \d+ created/, "a ticket is created succesfully"); $tid = $1 if $m->content =~ /Ticket (\d+) created/; $m->title_like(qr/testing img cf creation/, "its title is the Subject"); $m->follow_link( text => 'bpslogo.png' ); $m->content_is(ImageFileContent, "it links to the uploaded image"); } $m->get( $m->rt_base_url ); $m->follow_link( id => 'search-tickets-new'); $m->title_is(q/Query Builder/, 'Query building'); $m->submit_form( form_name => "BuildQuery", fields => { idOp => '=', ValueOfid => $tid, ValueOfQueue => 'General', }, button => 'AddClause', ); $m->form_name('BuildQuery'); my $col = ($m->current_form->find_input('SelectDisplayColumns'))[-1]; $col->value( ($col->possible_values)[-1] ); $m->click('AddCol'); $m->form_name('BuildQuery'); $m->click('DoSearch'); $m->follow_link( text_regex => qr/bpslogo\.png/ ); $m->content_is(ImageFileContent, "it links to the uploaded image"); __END__ [FC] Bulk Update does not have custom fields. rt-4.2.12/t/web/cf_date.t000644 000765 000024 00000020735 12555754775 015504 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef; my ( $baseurl, $m ) = RT::Test->started_ok; ok $m->login, 'logged in as root'; my $root = RT::User->new(RT->SystemUser); ok( $root->Load('root'), 'load root user' ); my $cf_name = 'test cf date'; my $cfid; diag "Create a CF"; { $m->follow_link( id => 'admin-custom-fields-create'); $m->submit_form( form_name => "ModifyCustomField", fields => { Name => $cf_name, TypeComposite => 'Date-1', LookupType => 'RT::Queue-RT::Ticket', }, ); $m->content_contains('Object created', 'created CF sucessfully' ); $cfid = $m->form_name('ModifyCustomField')->value('id'); ok $cfid, "found id of the CF in the form, it's #$cfid"; } diag "apply the CF to General queue"; my $queue = RT::Test->load_or_create_queue( Name => 'General' ); ok $queue && $queue->id, 'loaded or created queue'; { $m->follow_link( id => 'admin-queues-select'); $m->title_is( q/Admin queues/, 'admin-queues screen' ); $m->follow_link( text => 'General' ); $m->title_is( q/Configuration for queue General/, 'admin-queue: general' ); $m->follow_link( id => 'page-custom-fields-tickets' ); $m->title_is( q/Custom Fields for queue General/, 'admin-queue: general cfid' ); $m->form_name('EditCustomFields'); $m->tick( "AddCustomField" => $cfid ); $m->click('UpdateCFs'); $m->content_contains('Object created', 'TCF added to the queue' ); } diag 'check valid inputs with various timezones in ticket create page'; { my ( $ticket, $id ); $m->submit_form( form_name => "CreateTicketInQueue", fields => { Queue => 'General' }, ); $m->content_contains('Select date', 'has cf field' ); $m->submit_form( form_name => "TicketCreate", fields => { Subject => 'test 2010-05-04', Content => 'test', "Object-RT::Ticket--CustomField-$cfid-Values" => '2010-05-04', }, ); ok( ($id) = $m->content =~ /Ticket (\d+) created/, "created ticket $id" ); $ticket = RT::Ticket->new(RT->SystemUser); $ticket->Load($id); is( $ticket->CustomFieldValues($cfid)->First->Content, '2010-05-04', 'date in db' ); $m->content_contains('test cf date:', 'has no cf date field on the page' ); $m->content_contains('Tue May 04 2010', 'has cf date value on the page' ); } diag 'check search build page'; { $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' ); $m->form_name('BuildQuery'); my ($cf_op) = $m->find_all_inputs( type => 'option', name_regex => qr/test cf date/ ); is_deeply( [ $cf_op->possible_values ], [ '<', '=', '>' ], 'right oprators' ); my ($cf_field) = $m->find_all_inputs( type => 'text', name_regex => qr/test cf date/ ); $m->submit_form( fields => { $cf_op->name => '=', $cf_field->name => '2010-05-04' }, button => 'DoSearch', ); $m->content_contains( 'Found 1 ticket', 'Found 1 ticket' ); $m->content_contains( '2010-05-04', 'got the right ticket' ); $m->content_lacks( '2010-05-06', 'did not get the wrong ticket' ); $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' ); $m->form_name('BuildQuery'); $m->submit_form( fields => { $cf_op->name => '<', $cf_field->name => '2010-05-05' }, button => 'DoSearch', ); $m->content_contains( 'Found 1 ticket', 'Found 1 ticket' ); $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' ); $m->form_name('BuildQuery'); $m->submit_form( fields => { $cf_op->name => '>', $cf_field->name => '2010-05-03', }, button => 'DoSearch', ); $m->content_contains( 'Found 1 ticket', 'Found 1 ticket' ); $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' ); $m->form_name('BuildQuery'); $m->submit_form( fields => { $cf_op->name => '=', $cf_field->name => '2010-05-05', }, button => 'DoSearch', ); $m->content_contains( 'Found 0 tickets', 'Found 0 tickets' ); $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' ); $m->form_name('BuildQuery'); $m->submit_form( fields => { $cf_op->name => '<', $cf_field->name => '2010-05-03', }, button => 'DoSearch', ); $m->content_contains( 'Found 0 tickets', 'Found 0 tickets' ); $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' ); $m->form_name('BuildQuery'); $m->submit_form( fields => { $cf_op->name => '>', $cf_field->name => '2010-05-05', }, button => 'DoSearch', ); $m->content_contains( 'Found 0 tickets', 'Found 0 tickets' ); } diag 'check invalid inputs'; { $m->submit_form( form_name => "CreateTicketInQueue", fields => { Queue => 'General' }, ); my $form = $m->form_name("TicketCreate"); $m->submit_form( form_name => "TicketCreate", fields => { Subject => 'test', Content => 'test', "Object-RT::Ticket--CustomField-$cfid-Values" => 'foodate', }, ); $m->content_like( qr/Ticket \d+ created/, "a ticket is created succesfully" ); $m->content_contains('test cf date:', 'has no cf date field on the page' ); $m->content_lacks('foodate', 'invalid dates not set' ); my @warnings = $m->get_warnings; chomp @warnings; is_deeply( [@warnings], [(q{Couldn't parse date 'foodate' by Time::ParseDate})x2] ); } diag 'retain values when adding attachments'; { my ( $ticket, $id ); my $txn_cf = RT::CustomField->new( RT->SystemUser ); my ( $ret, $msg ) = $txn_cf->Create( Name => 'test txn cf date', TypeComposite => 'Date-1', LookupType => 'RT::Queue-RT::Ticket-RT::Transaction', ); ok( $ret, "created 'txn datetime': $msg" ); $txn_cf->AddToObject(RT::Queue->new(RT->SystemUser)); my $txn_cfid = $txn_cf->id; $m->submit_form( form_name => "CreateTicketInQueue", fields => { Queue => 'General' }, ); $m->content_contains('test cf date', 'has cf' ); $m->content_contains('test txn cf date', 'has txn cf' ); $m->submit_form_ok( { form_name => "TicketCreate", fields => { Subject => 'test 2015-06-04', Content => 'test', "Object-RT::Ticket--CustomField-$cfid-Values" => '2015-06-04', "Object-RT::Transaction--CustomField-$txn_cfid-Values" => '2015-08-15', }, button => 'AddMoreAttach', }, 'create test ticket' ); $m->form_name("TicketCreate"); is( $m->value( "Object-RT::Ticket--CustomField-$cfid-Values" ), "2015-06-04", "ticket cf date value still on form" ); is( $m->value( "Object-RT::Transaction--CustomField-$txn_cfid-Values" ), "2015-08-15", "txn cf date date value still on form" ); $m->submit_form(); ok( ($id) = $m->content =~ /Ticket (\d+) created/, "created ticket $id" ); $m->follow_link_ok( {text => 'Reply'} ); $m->title_like( qr/Update/ ); $m->content_contains('test txn cf date', 'has txn cf'); $m->submit_form_ok( { form_name => "TicketUpdate", fields => { Content => 'test', "Object-RT::Transaction--CustomField-$txn_cfid-Values" => '2015-09-16', }, button => 'AddMoreAttach', }, 'Update test ticket' ); $m->form_name("TicketUpdate"); is( $m->value( "Object-RT::Transaction--CustomField-$txn_cfid-Values" ), "2015-09-16", "txn date value still on form" ); $m->follow_link_ok( {text => 'Jumbo'} ); $m->title_like( qr/Jumbo/ ); $m->submit_form_ok( { form_name => "TicketModifyAll", fields => { "Object-RT::Transaction--CustomField-$txn_cfid-Values" => '2015-12-16', }, button => 'AddMoreAttach', }, 'jumbo form' ); $m->form_name("TicketModifyAll"); is( $m->value( "Object-RT::Transaction--CustomField-$txn_cfid-Values" ), "2015-12-16", "txn date value still on form" ); } done_testing; rt-4.2.12/t/web/cf_datetime.t000644 000765 000024 00000025141 12555754775 016357 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef; RT->Config->Set( 'Timezone' => 'EST5EDT' ); # -04:00 my ($baseurl, $m) = RT::Test->started_ok; ok $m->login, 'logged in as root'; my $root = RT::User->new( RT->SystemUser ); ok( $root->Load('root'), 'load root user' ); my $cf_name = 'test cf datetime'; my $why; if ( ( $ENV{RT_TEST_WEB_HANDLER} || '' ) =~ /^apache(\+mod_perl)?$/ && RT::Test::Apache->apache_mpm_type =~ /^(?:worker|event)$/ ) { $why = 'localizing $ENV{TZ} does *not* work with mod_perl+mpm_event or mod_perl+mpm_worker'; } my $cfid; diag "Create a CF"; { $m->follow_link( id => 'admin-custom-fields-create'); $m->submit_form( form_name => "ModifyCustomField", fields => { Name => $cf_name, TypeComposite => 'DateTime-1', LookupType => 'RT::Queue-RT::Ticket', }, ); $m->content_contains('Object created', 'created CF sucessfully' ); $cfid = $m->form_name('ModifyCustomField')->value('id'); ok $cfid, "found id of the CF in the form, it's #$cfid"; } diag "apply the CF to General queue"; my $queue = RT::Test->load_or_create_queue( Name => 'General' ); ok $queue && $queue->id, 'loaded or created queue'; { $m->follow_link( text => 'Queues' ); $m->title_is(q/Admin queues/, 'admin-queues screen'); $m->follow_link( text => 'General' ); $m->title_is(q/Configuration for queue General/, 'admin-queue: general'); $m->follow_link( id => 'page-custom-fields-tickets' ); $m->title_is(q/Custom Fields for queue General/, 'admin-queue: general cfid'); $m->form_name('EditCustomFields'); $m->tick( "AddCustomField" => $cfid ); $m->click('UpdateCFs'); $m->content_contains('Object created', 'TCF added to the queue' ); } diag 'check valid inputs with various timezones in ticket create page'; { my ( $ticket, $id ); $m->submit_form( form_name => "CreateTicketInQueue", fields => { Queue => 'General' }, ); $m->content_contains('Select datetime', 'has cf field'); $m->submit_form( form_name => "TicketCreate", fields => { Subject => 'test 2010-05-04 13:00:01', Content => 'test', "Object-RT::Ticket--CustomField-$cfid-Values" => '2010-05-04 13:00:01', }, ); ok( ($id) = $m->content =~ /Ticket (\d+) created/, "created ticket $id" ); $ticket = RT::Ticket->new( RT->SystemUser ); $ticket->Load($id); TODO: { local $TODO = $why; is( $ticket->CustomFieldValues($cfid)->First->Content, '2010-05-04 17:00:01', 'date in db is in UTC' ); } $m->content_contains('test cf datetime:', 'has cf datetime field on the page'); $m->content_contains('Tue May 04 13:00:01 2010', 'has cf datetime value on the page'); $root->SetTimezone( 'Asia/Shanghai' ); # interesting that $m->reload doesn't work $m->get_ok( $m->uri ); TODO: { local $TODO = $why; $m->content_contains( 'Wed May 05 01:00:01 2010', 'cf datetime value respects user timezone' ); } $m->submit_form( form_name => "CreateTicketInQueue", fields => { Queue => 'General' }, ); $m->submit_form( form_name => "TicketCreate", fields => { Subject => 'test 2010-05-06 07:00:01', Content => 'test', "Object-RT::Ticket--CustomField-$cfid-Values" => '2010-05-06 07:00:01', }, ); ok( ($id) = $m->content =~ /Ticket (\d+) created/, "created ticket $id" ); $ticket = RT::Ticket->new( RT->SystemUser ); $ticket->Load($id); TODO: { local $TODO = $why; is( $ticket->CustomFieldValues($cfid)->First->Content, '2010-05-05 23:00:01', 'date in db is in UTC' ); } $m->content_contains('test cf datetime:', 'has cf datetime field on the page'); $m->content_contains( 'Thu May 06 07:00:01 2010', 'cf datetime input respects user timezone' ); $root->SetTimezone( 'EST5EDT' ); # back to -04:00 $m->get_ok( $m->uri ); TODO: { local $TODO = $why; $m->content_contains( 'Wed May 05 19:00:01 2010', 'cf datetime value respects user timezone' ); } } diag 'check search build page'; { $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' ); $m->form_name('BuildQuery'); my ($cf_op) = $m->find_all_inputs( type => 'option', name_regex => qr/test cf datetime/ ); is_deeply( [ $cf_op->possible_values ], [ '<', '=', '>' ], 'right oprators' ); my ($cf_field) = $m->find_all_inputs( type => 'text', name_regex => qr/test cf datetime/ ); is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-04', }, 1 ); $m->content_contains( '2010-05-04', 'got the right ticket' ); $m->content_lacks( '2010-05-06', 'did not get the wrong ticket' ); my $shanghai = RT::Test->load_or_create_user( Name => 'shanghai', Password => 'password', Timezone => 'Asia/Shanghai', ); ok( $shanghai->PrincipalObj->GrantRight( Right => 'SuperUser', Object => $RT::System, )); $m->login( 'shanghai', 'password', logout => 1 ); is_results_number( { $cf_op->name => '<', $cf_field->name => '2010-05-07', }, 2 ); is_results_number( { $cf_op->name => '>', $cf_field->name => '2010-05-04', }, 2 ); TODO: { local $TODO = $why; is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-05', }, 1 ); is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-05 01:00:01', }, 1 ); } is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-05 02:00:01', }, 0 ); is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-06', }, 1 ); is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-06 07:00:01', }, 1 ); is_results_number( { $cf_op->name => '=', $cf_field->name => '2010-05-06 08:00:01', }, 0 ); } diag 'check invalid inputs'; { $m->submit_form( form_name => "CreateTicketInQueue", fields => { Queue => 'General' }, ); my $form = $m->form_name("TicketCreate"); $m->submit_form( form_name => "TicketCreate", fields => { Subject => 'test', Content => 'test', "Object-RT::Ticket--CustomField-$cfid-Values" => 'foodate', }, ); $m->content_like(qr/Ticket \d+ created/, "a ticket is created succesfully"); $m->content_contains('test cf datetime:', 'has cf datetime field on the page'); $m->content_lacks('foodate', 'invalid dates not set'); my @warnings = $m->get_warnings; chomp @warnings; is_deeply( [@warnings], [(q{Couldn't parse date 'foodate' by Time::ParseDate})x2] ); } diag 'retain values when adding attachments'; { my ( $ticket, $id ); my $txn_cf = RT::CustomField->new( RT->SystemUser ); my ( $ret, $msg ) = $txn_cf->Create( Name => 'test txn cf datetime', TypeComposite => 'DateTime-1', LookupType => 'RT::Queue-RT::Ticket-RT::Transaction', ); ok( $ret, "created 'txn datetime': $msg" ); $txn_cf->AddToObject(RT::Queue->new(RT->SystemUser)); my $txn_cfid = $txn_cf->id; $m->submit_form( form_name => "CreateTicketInQueue", fields => { Queue => 'General' }, ); $m->content_contains('test cf datetime', 'has cf' ); $m->content_contains('test txn cf datetime', 'has txn cf' ); $m->submit_form_ok( { form_name => "TicketCreate", fields => { Subject => 'test 2015-06-04', Content => 'test', "Object-RT::Ticket--CustomField-$cfid-Values" => '2015-06-04 08:30:00', "Object-RT::Transaction--CustomField-$txn_cfid-Values" => '2015-08-15 12:30:30', }, button => 'AddMoreAttach', }, 'Create test ticket' ); $m->form_name("TicketCreate"); is( $m->value( "Object-RT::Ticket--CustomField-$cfid-Values" ), "2015-06-04 08:30:00", "ticket cf date value still on form" ); $m->content_contains( "Jun 04 08:30:00 2015", 'date in parens' ); is( $m->value( "Object-RT::Transaction--CustomField-$txn_cfid-Values" ), "2015-08-15 12:30:30", "txn cf date date value still on form" ); $m->content_contains( "Aug 15 12:30:30 2015", 'date in parens' ); $m->submit_form(); ok( ($id) = $m->content =~ /Ticket (\d+) created/, "Created ticket $id" ); $m->follow_link_ok( {text => 'Reply'} ); $m->title_like( qr/Update/ ); $m->content_contains('test txn cf date', 'has txn cf'); $m->submit_form_ok( { form_name => "TicketUpdate", fields => { Content => 'test', "Object-RT::Transaction--CustomField-$txn_cfid-Values" => '2015-09-16 09:30:40', }, button => 'AddMoreAttach', }, 'Update test ticket' ); $m->form_name("TicketUpdate"); is( $m->value( "Object-RT::Transaction--CustomField-$txn_cfid-Values" ), "2015-09-16 09:30:40", "Date value still on form" ); $m->content_contains( "Sep 16 09:30:40 2015", 'date in parens' ); $m->follow_link_ok( {text => 'Jumbo'} ); $m->title_like( qr/Jumbo/ ); $m->submit_form_ok( { form_name => "TicketModifyAll", fields => { "Object-RT::Transaction--CustomField-$txn_cfid-Values" => '2015-12-16 03:00:00', }, button => 'AddMoreAttach', }, 'jumbo form' ); $m->save_content('/tmp/x.html'); $m->form_name("TicketModifyAll"); is( $m->value( "Object-RT::Transaction--CustomField-$txn_cfid-Values" ), "2015-12-16 03:00:00", "txn date value still on form" ); $m->content_contains( "Dec 16 03:00:00 2015", 'date in parens' ); } sub is_results_number { local $Test::Builder::Level = $Test::Builder::Level + 1; my $fields = shift; my $number = shift; my $operator = shift; my $value = shift; { local $TODO; $m->get_ok( $baseurl . '/Search/Build.html?Query=Queue=1' ); } $m->form_name('BuildQuery'); $m->submit_form( fields => $fields, button => 'DoSearch', ); $m->content_contains( "Found $number ticket", "Found $number ticket" ); } # to make $m->DESTROY happy undef $m; done_testing; rt-4.2.12/t/web/cf_groupings.t000644 000765 000024 00000023076 12555754775 016605 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef; my @groupings = qw/Basics Dates People Links More/; RT->Config->Set( 'CustomFieldGroupings', 'RT::Ticket' => { map { +($_ => ["Test$_"]) } @groupings, }, ); my %CF; for my $grouping (@groupings) { my $name = "Test$grouping"; my $cf = RT::CustomField->new( RT->SystemUser ); my ($id, $msg) = $cf->Create( Name => $name, Queue => '0', Description => 'A Testing custom field', Type => 'FreeformSingle', Pattern => '^(?!bad value).*$', ); ok $id, "custom field '$name' correctly created"; $CF{$grouping} = $id; } my $queue = RT::Test->load_or_create_queue( Name => 'General' ); my ( $baseurl, $m ) = RT::Test->started_ok; ok $m->login, 'logged in as root'; my %location = ( Basics => ".ticket-info-basics", Dates => ".ticket-info-dates", People => "#ticket-create-message", Links => ".ticket-info-links", More => ".ticket-info-cfs", ); { note "testing Create"; $m->goto_create_ticket($queue); my $prefix = 'Object-RT::Ticket--CustomField:'; my $dom = $m->dom; $m->form_name('TicketCreate'); $m->field("Subject", "CF grouping test"); for my $grouping (@groupings) { my $input_name = $prefix . "$grouping-$CF{$grouping}-Value"; is $dom->find(qq{input[name="$input_name"]})->size, 1, "only one CF input on the page"; ok $dom->at(qq{$location{$grouping} input[name="$input_name"]}), "CF is in the right place"; $m->field( $input_name, "Test" . $grouping . "Value" ); } $m->submit; } my $id = $m->get_ticket_id; { note "testing Display"; ok $id, "created a ticket"; my $dom = $m->dom; $location{People} = ".ticket-info-people"; foreach my $grouping (@groupings) { my $row_id = "CF-$CF{$grouping}-ShowRow"; is $dom->find(qq{#$row_id})->size, 1, "CF on the page"; is $dom->at(qq{#$row_id})->all_text, "Test$grouping: Test${grouping}Value", "value is set"; ok $dom->at(qq{$location{$grouping} #$row_id}), "CF is in the right place"; } } { note "testing Basics/People/Dates/Links pages"; my $prefix = 'Object-RT::Ticket-'. $id .'-CustomField:'; { # Basics and More both show up on "Basics" for my $name (qw/Basics More/) { $m->follow_link_ok({id => 'page-basics'}, 'Ticket -> Basics'); is $m->dom->find(qq{input[name^="$prefix"][name\$="-Value"]})->size, 2, "two CF inputs on the page"; my $input_name = "$prefix$name-$CF{$name}-Value"; ok $m->dom->at(qq{$location{$name} input[name="$input_name"]}), "CF is in the right place"; $m->submit_form_ok({ with_fields => { $input_name => "Test${name}Changed" }, button => 'SubmitTicket', }); $m->content_like(qr{to Test${name}Changed}); $m->submit_form_ok({ with_fields => { $input_name => "bad value" }, button => 'SubmitTicket', }); $m->content_like(qr{Test\Q$name\E: Input must match}); } } # Everything else gets its own page foreach my $name ( qw(People Dates Links) ) { $m->follow_link_ok({id => "page-\L$name"}, "Ticket's $name page"); is $m->dom->find(qq{input[name^="$prefix"][name\$="-Value"]})->size, 1, "only one CF input on the page"; my $input_name = "$prefix$name-$CF{$name}-Value"; $m->submit_form_ok({ with_fields => { $input_name => "Test${name}Changed" }, button => 'SubmitTicket', }); $m->content_like(qr{to Test${name}Changed}); $m->submit_form_ok({ with_fields => { $input_name => "bad value" }, button => 'SubmitTicket', }); $m->content_like(qr{Could not add new custom field value: Input must match}); } } { note "testing Jumbo"; my $prefix = 'Object-RT::Ticket-'. $id .'-CustomField:'; $m->follow_link_ok({id => "page-jumbo"}, "Ticket's Jumbo page"); my $dom = $m->dom; $m->form_name("TicketModifyAll"); foreach my $name ( qw(Basics People Dates Links More) ) { my $input_name = "$prefix$name-$CF{$name}-Value"; is $dom->find(qq{input[name="$input_name"]})->size, 1, "only one CF input on the page"; $m->field( $input_name, "Test${name}Again" ); } $m->click('SubmitTicket'); foreach my $name ( qw(Basics People Dates Links More) ) { $m->content_like(qr{to Test${name}Again}); } } { note "Reconfigure to place one CF in multiple boxes"; $m->no_warnings_ok; RT::Test->stop_server; RT->Config->Set( 'CustomFieldGroupings', 'RT::Ticket' => { Basics => [ 'TestMore' ], More => [ 'TestMore' ], }, ); ( $baseurl, $m ) = RT::Test->started_ok; ok $m->login, 'logged in as root'; } { note "Testing one CF in multiple boxes"; $m->goto_create_ticket($queue); my $prefix = 'Object-RT::Ticket--CustomField:'; my $dom = $m->dom; $m->form_name('TicketCreate'); my $cf = $CF{More}; is $m->dom->find(qq{input[name^="$prefix"][name\$="-$cf-Value"]})->size, 2, "Two 'More' CF inputs on the page"; for my $grouping (qw/Basics More/) { my $input_name = $prefix . "$grouping-$cf-Value"; is $dom->find(qq{input[name="$input_name"]})->size, 1, "Found the $grouping grouping"; ok $dom->at(qq{$location{$grouping} input[name="$input_name"]}), "CF is in the right place"; $m->field( $input_name, "TestMoreValue" ); } $m->submit; $m->no_warnings_ok( "Submitting CF with two (identical) values had no warnings" ); } $id = $m->get_ticket_id; my $ticket = RT::Ticket->new ( RT->SystemUser ); $ticket->Load( $id ); is $ticket->CustomFieldValuesAsString( "TestMore", Separator => "|" ), "TestMoreValue", "Value submitted twice is set correctly (and only once)"; my $cf = $CF{More}; my $prefix = 'Object-RT::Ticket-'. $id .'-CustomField:'; { note "Updating with multiple appearances of a CF"; $m->follow_link_ok({id => 'page-basics'}, 'Ticket -> Basics'); is $m->dom->find(qq{input[name^="$prefix"][name\$="-$cf-Value"]})->size, 2, "Two 'More' CF inputs on the page"; my @inputs; for my $grouping (qw/Basics More/) { my $input_name = "$prefix$grouping-$cf-Value"; push @inputs, $input_name; ok $m->dom->at(qq{$location{$grouping} input[name="$input_name"]}), "CF is in the right place"; } $m->submit_form_ok({ with_fields => { map {+($_ => "TestMoreChanged")} @inputs, }, button => 'SubmitTicket', }); $m->no_warnings_ok; $m->content_like(qr{to TestMoreChanged}); $ticket->Load( $id ); is $ticket->CustomFieldValuesAsString( "TestMore", Separator => "|" ), "TestMoreChanged", "Updated value submitted twice is set correctly (and only once)"; } { note "Updating with _differing_ values in multiple appearances of a CF"; my %inputs = map {+($_ => "$prefix$_-$cf-Value")} qw/Basics More/; $m->submit_form_ok({ with_fields => { $inputs{Basics} => "BasicsValue", $inputs{More} => "MoreValue", }, button => 'SubmitTicket', }); $m->warning_like(qr{CF $cf submitted with multiple differing values}); $m->content_like(qr{to BasicsValue}, "Arbitrarily chose first value"); $ticket->Load( $id ); is $ticket->CustomFieldValuesAsString( "TestMore", Separator => "|" ), "BasicsValue", "Conflicting value submitted twice is set correctly (and only once)"; } { note "Configuring CF to be a select-multiple"; my $custom_field = RT::CustomField->new( RT->SystemUser ); $custom_field->Load( $cf ); $custom_field->SetType( "Select" ); $custom_field->SetMaxValues( 0 ); $custom_field->AddValue( Name => $_ ) for 1..9; } { note "Select multiples do not interfere with each other when appearing multiple times"; $m->follow_link_ok({id => 'page-basics'}, 'Ticket -> Basics'); $m->form_name('TicketModify'); my %inputs = map {+($_ => "$prefix$_-$cf-Values")} qw/Basics More/; ok $m->dom->at(qq{select[name="$inputs{Basics}"]}), "Found 'More' CF in Basics box"; ok $m->dom->at(qq{select[name="$inputs{More}"]}), "Found 'More' CF in More box"; $m->select( $inputs{Basics} => [1, 3, 9] ); $m->select( $inputs{More} => [1, 3, 9] ); $m->click( 'SubmitTicket' ); $m->no_warnings_ok; $m->content_like(qr{$_ added as a value for TestMore}) for 1, 3, 9; $m->content_like(qr{BasicsValue is no longer a value for custom field TestMore}); $ticket->Load( $id ); is $ticket->CustomFieldValuesAsString( "TestMore", Separator => "|" ), "1|3|9", "Multi-select values submitted correctly"; } { note "Submit multiples correctly choose one set of values when conflicting information is submitted"; $m->form_name('TicketModify'); my %inputs = map {+($_ => "$prefix$_-$cf-Values")} qw/Basics More/; $m->select( $inputs{Basics} => [2, 3, 4] ); $m->select( $inputs{More} => [8, 9] ); $m->click( 'SubmitTicket' ); $m->warning_like(qr{CF $cf submitted with multiple differing values}); $m->content_like(qr{$_ added as a value for TestMore}) for 2, 4; $m->content_unlike(qr{$_ added as a value for TestMore}) for 8; $m->content_like(qr{$_ is no longer a value for custom field TestMore}) for 1, 9; $ticket->Load( $id ); is $ticket->CustomFieldValuesAsString( "TestMore", Separator => "|" ), "3|2|4", "Multi-select values submitted correctly"; } undef $m; done_testing; rt-4.2.12/t/web/cf_groupings_user.t000644 000765 000024 00000006544 12555754775 017644 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef; RT->Config->Set( 'CustomFieldGroupings', 'RT::User' => { Identity => ['TestIdentity'], 'Access control' => ['TestAccessControl'], Location => ['TestLocation'], Phones => ['TestPhones'], More => ['TestMore'], }, ); my %CF; while (my ($group,$cfs) = each %{ RT->Config->Get('CustomFieldGroupings')->{'RT::User'} } ) { my $name = $cfs->[0]; my $cf = RT::CustomField->new( RT->SystemUser ); my ($id, $msg) = $cf->Create( Name => $name, Description => 'A custom field', LookupType => RT::User->new( $RT::SystemUser )->CustomFieldLookupType, Type => 'FreeformSingle', Pattern => '^(?!bad value).*$', ); ok $id, "custom field '$name' correctly created"; ($id, $msg) = $cf->AddToObject( RT::User->new( $cf->CurrentUser ) ); ok $id, "applied custom field" or diag "error: $msg"; $group =~ s/\W//g; $CF{$name} = "$group-" . $cf->Id; } my ( $baseurl, $m ) = RT::Test->started_ok; ok $m->login, 'logged in as root'; my %location = ( Identity => ".user-info-identity", AccessControl => ".user-info-access-control", Location => ".user-info-location", Phones => ".user-info-phones", More => ".user-info-cfs", ); { note "testing Create"; $m->follow_link_ok({id => 'admin-users-create'}, 'Create '); my $dom = $m->dom; $m->form_name('UserCreate'); $m->field( 'Name', 'user1' ); my $prefix = 'Object-RT::User--CustomField:'; for my $name (keys %location) { my $input_name = $prefix . $CF{"Test$name"} .'-Value'; is $dom->find(qq{input[name="$input_name"]})->size, 1, "only one CF input on the page"; ok $dom->at(qq{$location{$name} input[name="$input_name"]}), "CF is in the right place"; $m->field( $input_name, "Test${name}Value" ); } $m->submit; $m->content_like(qr{User created}); } my ($id) = ($m->uri =~ /id=(\d+)/); ok $id, "found user's id #$id"; { note "testing values on Modify page and on the object"; my $user = RT::User->new( RT->SystemUser ); $user->Load( $id ); ok $user->id, "loaded user"; my $dom = $m->dom; $m->form_name('UserModify'); my $prefix = "Object-RT::User-$id-CustomField:"; foreach my $name ( keys %location ) { is $user->FirstCustomFieldValue("Test$name"), "Test${name}Value", "correct value of Test$name CF"; my $input_name = $prefix . $CF{"Test$name"} .'-Value'; is $m->value($input_name), "Test${name}Value", "correct value in UI"; $m->field( $input_name, "Test${name}Changed" ); ok $dom->at(qq{$location{$name} input[name="$input_name"]}), "CF is in the right place"; } $m->submit; } { note "testing that update works"; my $user = RT::User->new( RT->SystemUser ); $user->Load( $id ); ok $user->id, "loaded user"; $m->form_name('UserModify'); my $prefix = "Object-RT::User-$id-CustomField:"; foreach my $name ( keys %location ) { is $user->FirstCustomFieldValue("Test$name"), "Test${name}Changed", "correct value of Test$name CF"; my $input = $prefix . $CF{"Test$name"} .'-Value'; is $m->value($input), "Test${name}Changed", "correct value in UI"; } } undef $m; done_testing; rt-4.2.12/t/web/cf_image.t000644 000765 000024 00000003276 12555754775 015652 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 'no_declare'; my (undef, $m) = RT::Test->started_ok; $m->login; $m->follow_link( id => 'admin-custom-fields-create' ); $m->submit_form_ok({ form_name => "ModifyCustomField", fields => { Name => 'Images', TypeComposite => 'Image-1', LookupType => 'RT::Queue-RT::Ticket', }, }); $m->content_contains("Object created"); my $cfid = $m->form_name('ModifyCustomField')->value('id'); ok $cfid, "Created CF correctly"; $m->follow_link_ok( {id => "page-applies-to"} ); $m->form_with_fields( "AddCustomField-1" ); $m->tick( "AddCustomField-1", 0 ); $m->click_ok( "UpdateObjs" ); $m->content_contains("Object created"); $m->submit_form_ok({ form_name => "CreateTicketInQueue", fields => { Queue => 'General' }, }); $m->content_contains("Upload one image"); $m->submit_form_ok({ form_name => "TicketCreate", fields => { Subject => 'Test ticket', Content => 'test', }, }); $m->content_like( qr/Ticket \d+ created/, "a ticket is created succesfully" ); $m->follow_link_ok( {id => "page-basics"} ); $m->content_contains("Upload one image"); $m->submit_form_ok({ form_name => "TicketModify", fields => { "Object-RT::Ticket-1-CustomField-1-Upload" => RT::Test::get_relocatable_file('bpslogo.png', '..', 'data'), }, }); $m->content_contains("bpslogo.png added"); $m->content_contains("/Download/CustomFieldValue/1/bpslogo.png"); $m->form_name("TicketModify"); $m->tick("Object-RT::Ticket-1-CustomField-1-DeleteValueIds", 1); $m->click_ok("SubmitTicket"); $m->content_lacks("/Download/CustomFieldValue/1/bpslogo.png"); undef $m; done_testing; rt-4.2.12/t/web/cf_onqueue.t000644 000765 000024 00000004055 12555754775 016245 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 14; my ($baseurl, $m) = RT::Test->started_ok; ok $m->login, 'logged in'; diag "Create a queue CF"; { $m->follow_link( id => 'admin-custom-fields-create'); $m->submit_form( form_name => "ModifyCustomField", fields => { TypeComposite => 'Freeform-1', LookupType => 'RT::Queue', Name => 'QueueCFTest', Description => 'QueueCFTest', }, ); $m->content_contains('Object created', 'CF QueueCFTest created' ); } diag "Apply the new CF globally"; { $m->follow_link( text => 'Global' ); $m->title_is(q!Admin/Global configuration!, 'global configuration screen'); $m->follow_link( url_regex => qr!Admin/Global/CustomFields/index! ); $m->title_is(q/Global custom field configuration/, 'global custom field configuration screen'); $m->follow_link( url => 'Queues.html' ); $m->title_is(q/Edit Custom Fields for all queues/, 'global custom field for all queues configuration screen'); $m->content_contains('QueueCFTest', 'CF QueueCFTest displayed on page' ); $m->form_name('EditCustomFields'); $m->tick( AddCustomField => 1 ); $m->click('UpdateCFs'); $m->content_contains('Object created', 'CF QueueCFTest enabled globally' ); } diag "Edit the CF value for default queue"; { $m->follow_link( url => '/Admin/Queues/' ); $m->title_is(q/Admin queues/, 'queues configuration screen'); $m->follow_link( text => "1" ); $m->title_is(q/Configuration for queue General/, 'default queue configuration screen'); $m->content_contains('QueueCFTest', 'CF QueueCFTest displayed on default queue' ); $m->submit_form( form_number => 3, # The following doesn't want to works :( #with_fields => { 'Object-RT::Queue-1-CustomField-1-Value' }, fields => { 'Object-RT::Queue-1-CustomField-1-Value' => 'QueueCFTest content', }, ); $m->content_contains('QueueCFTest QueueCFTest content added', 'Content filed in CF QueueCFTest for default queue' ); } __END__ rt-4.2.12/t/web/cf_pattern.t000644 000765 000024 00000004364 12555754775 016244 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 'no_declare'; my ($base, $m) = RT::Test->started_ok; my $cf = RT::Test->load_or_create_custom_field( Name => 'Yaks', Type => 'FreeformSingle', Pattern => '(?#Digits)^\d+$', Queue => 0, LookupType => 'RT::Queue-RT::Ticket', ); ok $cf && $cf->id, "Created CF with Pattern"; my $ticket = RT::Test->create_ticket( Queue => 1, Subject => 'a test ticket', ); ok $ticket && $ticket->id, "Created ticket"; $m->login; for my $page ("/Ticket/Create.html?Queue=1", "/Ticket/Modify.html?id=".$ticket->id) { diag $page; $m->get_ok($page, "Fetched $page"); $m->content_contains("Yaks"); $m->content_contains("Input must match [Digits]"); $m->content_lacks("cfinvalidfield"); my $cfinput = RT::Interface::Web::GetCustomFieldInputName( Object => ( $page =~ /Create/ ? RT::Ticket->new( RT->SystemUser ) : $ticket ), CustomField => $cf, ); $m->submit_form_ok({ with_fields => { $cfinput => "too many", "${cfinput}-Magic" => "1", }, }); $m->content_contains("Input must match [Digits]"); $m->content_contains("cfinvalidfield"); $m->submit_form_ok({ with_fields => { $cfinput => "42", "${cfinput}-Magic" => "1", }, }); if ($page =~ /Create/) { $m->content_like(qr/Ticket \d+ created/, "Created ticket"); } else { $m->content_contains("Yaks 42 added", "Updated ticket"); $m->content_contains("Input must match [Digits]"); $m->content_lacks("cfinvalidfield"); } } diag "Quick ticket creation"; { $m->get_ok("/"); $m->submit_form_ok({ with_fields => { Subject => "test quick create", QuickCreate => 1, }, }); my $tickets = RT::Tickets->new(RT->SystemUser); $tickets->FromSQL("Subject = 'test quick create'"); is $tickets->Count, 0, "No ticket created"; like $m->uri, qr/Ticket\/Create\.html/, "Redirected to the ticket create page"; $m->content_contains("Yaks: Input must match", "Found CF validation error"); $m->content_contains("test quick create", "Found prefilled Subject"); } undef $m; done_testing; rt-4.2.12/t/web/cf_render_type.t000644 000765 000024 00000002405 12555754775 017101 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 8; my ($baseurl, $m) = RT::Test->started_ok; ok $m->login, 'logged in as root'; my $cf_name = 'test render type'; my $cfid; diag "Create a CF"; { $m->follow_link( id => 'admin-custom-fields-create'); $m->submit_form( form_name => "ModifyCustomField", fields => { Name => $cf_name, TypeComposite => 'Freeform-1', LookupType => 'RT::Queue-RT::Ticket', }, ); $m->content_contains('Object created', 'created Freeform-1' ); $cfid = $m->form_name('ModifyCustomField')->value('id'); ok $cfid, "found id of the CF in the form, it's #$cfid"; } diag "change to Select type"; { $m->submit_form( form_name => "ModifyCustomField", fields => { TypeComposite => 'Select-1', }, button => 'Update', ); $m->content_contains( "Type changed from 'Enter one value' to 'Select one value'", 'changed to Select-1' ); } diag "let's save it again"; { $m->submit_form( form_name => "ModifyCustomField", button => 'Update', ); $m->content_lacks( "Render Type changed from '1' to 'Select box'", 'no buggy RenderType change msg' ); } rt-4.2.12/t/web/cf_select_one.t000644 000765 000024 00000014207 12555754775 016704 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef; my ($baseurl, $m) = RT::Test->started_ok; ok $m->login, 'logged in as root'; my $cf_name = 'test select one value'; my $cfid; diag "Create a CF"; { $m->follow_link( id => 'admin-custom-fields-create'); $m->submit_form( form_name => "ModifyCustomField", fields => { Name => $cf_name, TypeComposite => 'Select-1', LookupType => 'RT::Queue-RT::Ticket', }, ); $m->content_contains('Object created', 'created CF sucessfully' ); $cfid = $m->form_name('ModifyCustomField')->value('id'); ok $cfid, "found id of the CF in the form, it's #$cfid"; } diag "add 'qwe', 'ASD', '0' and ' foo ' as values to the CF"; { foreach my $value(qw(qwe ASD 0), 'foo ') { $m->submit_form( form_name => "ModifyCustomField", fields => { "CustomField-". $cfid ."-Value-new-Name" => $value, }, button => 'Update', ); $m->content_contains('Object created', 'added a value to the CF' ); # or diag $m->content; my $v = $value; $v =~ s/^\s+$//; $v =~ s/\s+$//; $m->content_contains("value=\"$v\"", 'the added value is right' ); } } my $queue = RT::Test->load_or_create_queue( Name => 'General' ); ok $queue && $queue->id, 'loaded or created queue'; diag "apply the CF to General queue"; { $m->follow_link( id => 'admin-queues'); $m->follow_link( text => 'General' ); $m->title_is(q/Configuration for queue General/, 'admin-queue: general'); $m->follow_link( id => 'page-custom-fields-tickets'); $m->title_is(q/Custom Fields for queue General/, 'admin-queue: general cfid'); $m->form_name('EditCustomFields'); $m->tick( "AddCustomField" => $cfid ); $m->click('UpdateCFs'); $m->content_contains('Object created', 'TCF added to the queue' ); } my $tid; diag "create a ticket using API with 'asd'(not 'ASD') as value of the CF"; { my $ticket = RT::Ticket->new( RT->SystemUser ); my ($txnid, $msg); ($tid, $txnid, $msg) = $ticket->Create( Subject => 'test', Queue => $queue->id, "CustomField-$cfid" => 'asd', ); ok $tid, "created ticket"; diag $msg if $msg; # we use lc as we really don't care about case # so if later we'll add canonicalization of value # test should work is lc $ticket->FirstCustomFieldValue( $cf_name ), 'asd', 'assigned value of the CF'; } diag "check that values of the CF are case insensetive(asd vs. ASD)"; { ok $m->goto_ticket( $tid ), "opened ticket's page"; $m->follow_link( id => 'page-basics'); $m->title_like(qr/Modify ticket/i, 'modify ticket'); $m->content_contains($cf_name, 'CF on the page'); my $value = $m->form_name('TicketModify')->value("Object-RT::Ticket-$tid-CustomField-$cfid-Values"); is lc $value, 'asd', 'correct value is selected'; $m->submit; $m->content_unlike(qr/\Q$cf_name\E.*?changed/mi, 'field is not changed'); $value = $m->form_name('TicketModify')->value("Object-RT::Ticket-$tid-CustomField-$cfid-Values"); is lc $value, 'asd', 'the same value is still selected'; my $ticket = RT::Ticket->new( RT->SystemUser ); $ticket->Load( $tid ); ok $ticket->id, 'loaded the ticket'; is lc $ticket->FirstCustomFieldValue( $cf_name ), 'asd', 'value is still the same'; } diag "check that 0 is ok value of the CF"; { ok $m->goto_ticket( $tid ), "opened ticket's page"; $m->follow_link( id => 'page-basics'); $m->title_like(qr/Modify ticket/i, 'modify ticket'); $m->content_contains($cf_name, 'CF on the page'); my $value = $m->form_name('TicketModify')->value("Object-RT::Ticket-$tid-CustomField-$cfid-Values"); is lc $value, 'asd', 'correct value is selected'; $m->select("Object-RT::Ticket-$tid-CustomField-$cfid-Values" => 0 ); $m->submit; $m->content_like(qr/\Q$cf_name\E.*?changed/mi, 'field is changed'); $m->content_lacks('0 is no longer a value for custom field', 'no bad message in results'); $value = $m->form_name('TicketModify')->value("Object-RT::Ticket-$tid-CustomField-$cfid-Values"); is lc $value, '0', 'new value is selected'; my $ticket = RT::Ticket->new( RT->SystemUser ); $ticket->Load( $tid ); ok $ticket->id, 'loaded the ticket'; is lc $ticket->FirstCustomFieldValue( $cf_name ), '0', 'API returns correct value'; } diag "check that we can set empty value when the current is 0"; { ok $m->goto_ticket( $tid ), "opened ticket's page"; $m->follow_link( id => 'page-basics'); $m->title_like(qr/Modify ticket/i, 'modify ticket'); $m->content_contains($cf_name, 'CF on the page'); my $value = $m->form_name('TicketModify')->value("Object-RT::Ticket-$tid-CustomField-$cfid-Values"); is lc $value, '0', 'correct value is selected'; $m->select("Object-RT::Ticket-$tid-CustomField-$cfid-Values" => '' ); $m->submit; $m->content_contains('0 is no longer a value for custom field', '0 is no longer a value'); $value = $m->form_name('TicketModify')->value("Object-RT::Ticket-$tid-CustomField-$cfid-Values"); is $value, '', '(no value) is selected'; my $ticket = RT::Ticket->new( RT->SystemUser ); $ticket->Load( $tid ); ok $ticket->id, 'loaded the ticket'; is $ticket->FirstCustomFieldValue( $cf_name ), undef, 'API returns correct value'; } diag 'retain selected cf values when adding attachments'; { my ( $ticket, $id ); $m->submit_form( form_name => "CreateTicketInQueue", fields => { Queue => 'General' }, ); $m->content_contains($cf_name, 'Found cf field' ); $m->submit_form_ok( { form_name => "TicketCreate", fields => { Subject => 'test defaults', Content => 'test', "Object-RT::Ticket--CustomField-$cfid-Values" => 'qwe', }, button => 'AddMoreAttach', }, 'Add an attachment on create' ); $m->form_name("TicketCreate"); is($m->value("Object-RT::Ticket--CustomField-$cfid-Values"), "qwe", "Selected value still on form" ); } undef $m; done_testing; rt-4.2.12/t/web/cf_textarea.t000644 000765 000024 00000004251 12555754775 016377 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 'no_declare'; my $content = join ' ', ('The quick brown fox jumps over the lazy dog.') x 5; $content = join "\n\n", $content, $content, $content; my ($base, $m) = RT::Test->started_ok; $m->login; my $ticket = RT::Test->create_ticket( Queue => 1, Subject => 'a test ticket', ); ok $ticket && $ticket->id, "Created ticket"; my $EditUrl = "/Ticket/Modify.html?id=" . $ticket->id; my $cfs = { area => { type => 'Text', name => 'TheTextarea', }, text => { type => 'FreeformSingle', name => 'TheControlField', }, }; while ( my( $label, $data ) = each %$cfs ) { my $cf = $data->{obj} = RT::Test->load_or_create_custom_field( Name => $data->{name}, Type => $data->{type}, Queue => 0, LookupType => 'RT::Queue-RT::Ticket', ); ok $cf && $cf->id, "Created $data->{type} CF"; # get cf input field name $data->{input} = RT::Interface::Web::GetCustomFieldInputName( Object => $ticket, CustomField => $cf, ); } # open ticket "Basics" page $m->get_ok($EditUrl, "Fetched $EditUrl"); $m->content_contains($_->{name} . ':') for ( values %$cfs ); $m->submit_form_ok({ with_fields => { $cfs->{area}{input} => $content, $cfs->{area}{input} . '-Magic' => "1", $cfs->{text}{input} => 'value a', $cfs->{text}{input} . '-Magic' => "1", }, }, 'submitted form to initially set CFs'); $m->content_contains('
  • TheControlField value a added
  • '); $m->content_contains("
  • TheTextarea $content added
  • ", 'content found'); # http://issues.bestpractical.com/Ticket/Display.html?id=30378 # #30378: RT 4.2.6 - Very long text fields get updated even when they haven't changed $m->submit_form_ok({ with_fields => { $cfs->{text}{input} => 'value b', $cfs->{text}{input} . '-Magic' => "1", }, }, 'submitted form to initially set CFs'); $m->content_contains('
  • TheControlField value a changed to value b
  • '); $m->content_lacks("
  • TheTextarea $content changed to $content
  • ", 'textarea wasnt updated'); undef $m; done_testing; rt-4.2.12/t/web/cf_values_class.t000644 000765 000024 00000003121 12555754775 017241 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 8; use constant VALUES_CLASS => 'RT::CustomFieldValues::Groups'; RT->Config->Set(CustomFieldValuesSources => VALUES_CLASS); my ($baseurl, $m) = RT::Test->started_ok; ok $m->login, 'logged in as root'; my $cf_name = 'test values class'; my $cfid; diag "Create a CF"; { $m->follow_link( id => 'admin-custom-fields-create'); $m->submit_form( form_name => "ModifyCustomField", fields => { Name => $cf_name, TypeComposite => 'Select-1', LookupType => 'RT::Queue-RT::Ticket', }, ); $m->content_contains('Object created', 'created Select-1' ); $cfid = $m->form_name('ModifyCustomField')->value('id'); ok $cfid, "found id of the CF in the form, it's #$cfid"; } diag "change to external values class"; { $m->submit_form( form_name => "ModifyCustomField", fields => { ValuesClass => 'RT::CustomFieldValues::Groups', }, button => 'Update', ); $m->content_contains( "Field values source changed from 'RT::CustomFieldValues' to 'RT::CustomFieldValues::Groups'", 'changed to external values class' ); } diag "change to internal values class"; { $m->submit_form( form_name => "ModifyCustomField", fields => { ValuesClass => 'RT::CustomFieldValues', }, button => 'Update', ); $m->content_contains( "Field values source changed from 'RT::CustomFieldValues::Groups' to 'RT::CustomFieldValues'", 'changed to internal values class' ); } rt-4.2.12/t/web/charting.t000644 000765 000024 00000006724 12555754775 015720 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef; plan skip_all => 'GD required' unless GD->require; for my $n (1..7) { my $ticket = RT::Ticket->new( RT->SystemUser ); my $req = 'root' . ($n % 2) . '@localhost'; my ( $ret, $msg ) = $ticket->Create( Subject => "base ticket $_", Queue => "General", Owner => "root", Requestor => $req, MIMEObj => MIME::Entity->build( From => $req, To => 'rt@localhost', Subject => "base ticket $_", Data => "Content $_", ), ); ok( $ret, "ticket $n created: $msg" ); } my ($url, $m) = RT::Test->started_ok; ok( $m->login, "Logged in" ); # Test that defaults work $m->get_ok( "/Search/Chart.html?Query=id>0" ); $m->content_like(qr{]*>Status\s*\s*]*>Ticket count\s*}, "Grouped by status"); $m->content_like(qr{new\s*\s*]*>\s*]*>7}, "Found results in table"); $m->content_like(qr{get_ok( "/Search/Chart?Query=id>0" ); is( $m->content_type, "image/png" ); ok( length($m->content), "Has content" ); # Group by Queue $m->get_ok( "/Search/Chart.html?Query=id>0&GroupBy=Queue" ); $m->content_like(qr{]*>Queue\s*\s*]*>Ticket count\s*}, "Grouped by queue"); $m->content_like(qr{General\s*\s*]*>\s*]*>7}, "Found results in table"); $m->content_like(qr{get_ok( "/Search/Chart?Query=id>0&GroupBy=Queue" ); is( $m->content_type, "image/png" ); ok( length($m->content), "Has content" ); # Group by Requestor email $m->get_ok( "/Search/Chart.html?Query=id>0&GroupBy=Requestor.EmailAddress" ); $m->content_like(qr{]*>Requestor\s+EmailAddress\s*]*>Ticket count\s*}, "Grouped by requestor"); $m->content_like(qr{root0\@localhost\s*\s*]*>\s*]*>3}, "Found results in table"); $m->content_like(qr{get_ok( "/Search/Chart?Query=id>0&GroupBy=Requestor.EmailAddress" ); is( $m->content_type, "image/png" ); ok( length($m->content), "Has content" ); # Group by Requestor phone -- which is bogus, and falls back to queue $m->get_ok( "/Search/Chart.html?Query=id>0&GroupBy=Requestor.Phone" ); $m->warning_like( qr{'Requestor\.Phone' is not a valid grouping for reports} ); TODO: { local $TODO = "UI should show that it's group by status"; $m->content_like(qr{new\s*\s*]*>\s*]*>7}, "Found queue results in table, as a default"); } $m->content_like(qr{get_ok( "/Search/Chart?Query=id>0&GroupBy=Requestor.Phone" ); $m->warning_like( qr{'Requestor\.Phone' is not a valid grouping for reports} ); is( $m->content_type, "image/png" ); ok( length($m->content), "Has content" ); diag "Confirm subnav links use Query param before saved search in session."; $m->get_ok( "/Search/Chart.html?Query=id>0" ); my $advanced = $m->find_link( text => 'Advanced' )->URI->equery; like( $advanced, qr{Query=id%3E0}, 'Advanced link has Query param with id search' ); # Load the session with another search. $m->get_ok( "/Search/Results.html?Query=Queue='General'" ); $m->get_ok( "/Search/Chart.html?Query=id>0" ); $advanced = $m->find_link( text => 'Advanced' )->URI->equery; like( $advanced, qr{Query=id%3E0}, 'Advanced link still has Query param with id search' ); undef $m; done_testing; rt-4.2.12/t/web/class_create.t000644 000765 000024 00000003417 12555754775 016545 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 13; my ( $baseurl, $m ) = RT::Test->started_ok; ok $m->login, 'logged in as root'; my $root = RT::User->new(RT->SystemUser); ok( $root->Load('root'), 'load root user' ); my $class_name = 'test class'; my $class_id; diag "Create a class"; { $m->follow_link( id => 'admin-articles-classes-create'); # Test class form validation $m->submit_form( form_name => 'ModifyClass', fields => { Name => '', }, ); $m->text_contains('Invalid value for Name'); $m->submit_form( form_name => 'ModifyClass', fields => { Name => '0', }, ); $m->text_contains('Invalid value for Name'); $m->submit_form( form_name => 'ModifyClass', fields => { Name => '1', }, ); $m->text_contains('Invalid value for Name'); $m->submit_form( form_name => 'ModifyClass', fields => { Name => $class_name, }, ); $m->content_contains('Object created', 'created class sucessfully' ); # Test validation on updae $m->form_name('ModifyClass'); $m->set_fields( Name => '', ); $m->click_button(value => 'Save Changes'); $m->text_contains('Illegal value for Name'); $m->form_name('ModifyClass'); $m->set_fields( Name => '0', ); $m->click_button(value => 'Save Changes'); $m->text_contains('Illegal value for Name'); $m->form_name('ModifyClass'); $m->set_fields( Name => '1', ); $m->click_button(value => 'Save Changes'); $m->text_contains('Illegal value for Name'); $class_id = $m->form_name('ModifyClass')->value('id'); ok $class_id, "found id of the class in the form, it's #$class_id"; } rt-4.2.12/t/web/clickjacking-preventions.t000644 000765 000024 00000001370 12555754775 021077 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 11; my ($url, $m); # Enabled by default { ok(RT->Config->Get('Framebusting'), "Framebusting enabled by default"); ($url, $m) = RT::Test->started_ok; $m->get_ok($url); $m->content_contains('if (window.top !== window.self) {', "Found the framekiller javascript"); is $m->response->header('X-Frame-Options'), 'DENY', "X-Frame-Options is set to DENY"; RT::Test->stop_server; } # Disabled { RT->Config->Set('Framebusting', 0); ($url, $m) = RT::Test->started_ok; $m->get_ok($url); $m->content_lacks('if (window.top !== window.self) {', "Didn't find the framekiller javascript"); is $m->response->header('X-Frame-Options'), undef, "X-Frame-Options is not present"; } rt-4.2.12/t/web/command_line.t000644 000765 000024 00000072350 12555754775 016544 0ustar00sartakstaff000000 000000 use strict; use warnings; use File::Spec (); use Test::Expect; use RT::Test tests => undef, actual_server => 1; my ($baseurl, $m) = RT::Test->started_ok; use RT::User; use RT::Queue; my $rt_tool_path = "$RT::BinPath/rt"; # config directives: # (in $CWD/.rtrc) # - server URL to RT server. # - user RT username. # - passwd RT user's password. # - query Default RT Query for list action # - orderby Default RT order for list action # # Blank and #-commented lines are ignored. # environment variables # The following environment variables override any corresponding # values defined in configuration files: # # - RTUSER $ENV{'RTUSER'} = 'root'; # - RTPASSWD $ENV{'RTPASSWD'} = 'password'; # - RTSERVER $RT::Logger->debug("Connecting to server at ".RT->Config->Get('WebBaseURL')); $ENV{'RTSERVER'} =RT->Config->Get('WebBaseURL') ; # - RTDEBUG Numeric debug level. (Set to 3 for full logs.) $ENV{'RTDEBUG'} = '1'; # - RTCONFIG Specifies a name other than ".rtrc" for the # configuration file. $ENV{'RTCONFIG'} = '/dev/null'; # # - RTQUERY Default RT Query for rt list # - RTORDERBY Default order for rt list # create a ticket expect_run( command => "$rt_tool_path shell", prompt => 'rt> ', quit => 'quit', ); expect_send(q{create -t ticket set subject='new ticket' add cc=foo@example.com}, "Creating a ticket..."); expect_like(qr/Ticket \d+ created/, "Created the ticket"); expect_handle->before() =~ /Ticket (\d+) created/; my $ticket_id = $1; ok($ticket_id, "Got ticket id=$ticket_id"); expect_send(q{create -t ticket set subject='new ticket'}, "Creating a ticket as just a subject..."); expect_like(qr/Ticket \d+ created/, "Created the ticket"); # make sure we can request things as 'rt foo' expect_send(q{rt create -t ticket set subject='rt ticket'}, "Creating a ticket with 'rt create'..."); expect_like(qr/Ticket \d+ created/, "Created the ticket"); # creating queues expect_send("create -t queue set Name='NewQueue$$'", 'Creating a queue...'); expect_like(qr/Queue \d+ created/, 'Created the queue'); expect_handle->before() =~ /Queue (\d+) created/; my $queue_id = $1; ok($queue_id, "Got queue id=$queue_id"); # updating users expect_send("edit queue/$queue_id set Name='EditedQueue$$'", 'Editing the queue'); expect_like(qr/Queue $queue_id updated/, 'Edited the queue'); expect_send("show queue/$queue_id", 'Showing the queue...'); expect_like(qr/id: queue\/$queue_id/, 'Saw the queue'); expect_like(qr/Name: EditedQueue$$/, 'Saw the modification'); TODO: { todo_skip "Listing non-ticket items doesn't work", 2; expect_send("list -t queue 'id > 0'", 'Listing the queues...'); expect_like(qr/$queue_id: EditedQueue$$/, 'Found the queue'); } # Queues with spaces in their names expect_send("create -t queue set Name='Spaced Out'", 'Creating a queue...'); expect_like(qr/Queue \d+ created/, 'Created the queue'); expect_handle->before() =~ /Queue (\d+) created/; my $other_queue = $1; ok($other_queue, "Got queue id=$other_queue"); expect_send("show 'queue/Spaced Out'", 'Showing the queue...'); expect_like(qr/id: queue\/$other_queue/, 'Saw the queue'); expect_like(qr/Name: Spaced Out/, 'Saw the modification'); # Set up a custom field for editing tests my $cf = RT::CustomField->new(RT->SystemUser); my ($val,$msg) = $cf->Create(Name => 'MyCF'.$$, Type => 'FreeformSingle', Queue => $queue_id); ok($val,$msg); my $othercf = RT::CustomField->new(RT->SystemUser); ($val,$msg) = $othercf->Create(Name => 'My CF'.$$, Type => 'FreeformSingle', Queue => $queue_id); ok($val,$msg); my $multiple_cf = RT::CustomField->new(RT->SystemUser); ($val,$msg) = $multiple_cf->Create(Name => 'MultipleCF'.$$, Type => 'FreeformMultiple', Queue => $queue_id); ok($val,$msg); # add a comment to ticket expect_send("comment -m 'comment-$$' $ticket_id", "Adding a comment..."); expect_like(qr/Comments added/, "Added the comment"); ### should test to make sure it actually got added # add correspondance to ticket (?) expect_send("correspond -m 'correspond-$$' $ticket_id", "Adding correspondence..."); expect_like(qr/Correspondence added/, "Added the correspondence"); ### should test to make sure it actually got added my $test_email = RT::Test::get_relocatable_file('lorem-ipsum', (File::Spec->updir(), 'data', 'emails')); # add attachments to a ticket # text attachment check_attachment($test_email); # binary attachment check_attachment($RT::StaticPath . '/images/bpslogo.png'); # change a ticket's Owner expect_send("edit ticket/$ticket_id set owner=root", 'Changing owner...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed owner'); expect_send("show ticket/$ticket_id -f owner", 'Verifying change...'); expect_like(qr/Owner: root/, 'Verified change'); # change a ticket's Requestor expect_send("edit ticket/$ticket_id set requestors=foo\@example.com", 'Changing Requestor...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed Requestor'); expect_send("show ticket/$ticket_id -f requestors", 'Verifying change...'); expect_like(qr/Requestors: foo\@example.com/, 'Verified change'); # set multiple Requestors expect_send("edit ticket/$ticket_id set requestors=foo\@example.com,bar\@example.com", 'Changing Requestor...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed Requestor'); expect_send("show ticket/$ticket_id -f requestors", 'Verifying change...'); expect_like(qr/Requestors: bar\@example.com, foo\@example.com/, 'Verified change'); # change a ticket's Cc expect_send("edit ticket/$ticket_id set cc=bar\@example.com", 'Changing Cc...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed Cc'); expect_send("show ticket/$ticket_id -f cc", 'Verifying change...'); expect_like(qr/Cc: bar\@example.com/, 'Verified change'); # change a ticket's priority expect_send("edit ticket/$ticket_id set priority=10", 'Changing priority...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed priority'); expect_send("show ticket/$ticket_id -f priority", 'Verifying change...'); expect_like(qr/Priority: 10/, 'Verified change'); # move a ticket to a different queue expect_send("edit ticket/$ticket_id set queue=EditedQueue$$", 'Changing queue...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed queue'); expect_send("show ticket/$ticket_id -f queue", 'Verifying change...'); expect_like(qr/Queue: EditedQueue$$/, 'Verified change'); # cannot move ticket to a nonexistent queue expect_send("edit ticket/$ticket_id set queue=nonexistent-$$", 'Changing to nonexistent queue...'); expect_like(qr/Queue nonexistent-$$ does not exist/i, 'Errored out'); expect_send("show ticket/$ticket_id -f queue", 'Verifying lack of change...'); expect_like(qr/Queue: EditedQueue$$/, 'Verified lack of change'); # Test reading and setting custom fields without spaces expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking initial value'); expect_like(qr/\QCF.{myCF$$}\E:/i, 'Verified initial empty value (CF-x syntax)'); expect_send("show ticket/$ticket_id -f CF.{myCF$$}", 'Checking initial value'); expect_like(qr/\QCF.{myCF$$}\E:/i, 'Verified initial empty value (CF.{x} syntax)'); expect_send("edit ticket/$ticket_id set 'CF-myCF$$=VALUE' ", 'Changing CF...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed cf'); expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking new value'); expect_like(qr/\QCF.{myCF$$}\E: VALUE/i, 'Verified change'); # Test setting 0 as value of the custom field expect_send("edit ticket/$ticket_id set 'CF-myCF$$=0' ", 'Changing CF...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed cf'); expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking new value'); expect_like(qr/\QCF.{myCF$$}\E: 0/i, 'Verified change'); expect_send("edit ticket/$ticket_id set 'CF.{myCF$$}=VALUE' ",'Changing CF...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed cf'); expect_send("show ticket/$ticket_id -f CF.{myCF$$}", 'Checking new value'); expect_like(qr/\QCF.{myCF$$}\E: VALUE/i, 'Verified change'); # Test setting 0 as value of the custom field expect_send("edit ticket/$ticket_id set 'CF.{myCF$$}=0' ", 'Changing CF...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed cf'); expect_send("show ticket/$ticket_id -f CF.{myCF$$}", 'Checking new value'); expect_like(qr/\QCF.{myCF$$}\E: 0/i, 'Verified change'); # Test reading and setting custom fields with spaces expect_send("show ticket/$ticket_id -f 'CF-my CF$$'", 'Checking initial value'); expect_like(qr/\QCF.{my CF$$}\E:/i, 'Verified change'); expect_send("edit ticket/$ticket_id set 'CF-my CF$$=VALUE' ", 'Changing CF...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed cf'); expect_send("show ticket/$ticket_id -f 'CF-my CF$$'", 'Checking new value'); expect_like(qr/\QCF.{my CF$$}\E: VALUE/i, 'Verified change'); expect_send("ls -l 'id = $ticket_id' -f 'CF-my CF$$'", 'Checking new value'); expect_like(qr/\QCF.{my CF$$}\E: VALUE/i, 'Verified change'); expect_send("show ticket/$ticket_id -f 'CF.{my CF$$}'", 'Checking initial value'); expect_like(qr/\QCF.{my CF$$}\E: VALUE/i, 'Verified change'); expect_send("edit ticket/$ticket_id set 'CF.{my CF$$}=NEW' ", 'Changing CF...'); expect_send("show ticket/$ticket_id -f 'CF.{my CF$$}'", 'Checking new value'); expect_like(qr/\QCF.{my CF$$}\E: NEW/i, 'Verified change'); expect_send("ls -l 'id = $ticket_id' -f 'CF.{my CF$$}'", 'Checking new value'); expect_like(qr/\QCF.{my CF$$}\E: NEW/i, 'Verified change'); # Test reading and setting single value custom field with commas or quotes expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking initial value'); expect_like(qr/\QCF.{myCF$$}\E:/i, 'Verified change'); expect_send("edit ticket/$ticket_id set CF-myCF$$=1,2,3", 'Changing CF...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed cf'); expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking new value'); expect_like(qr/\QCF.{myCF$$}\E: 1,2,3/i, 'Verified change'); expect_send(qq{edit ticket/$ticket_id set CF-myCF$$="1's,2,3"}, 'Changing CF...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed cf'); expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking new value'); expect_like(qr/\QCF.{myCF$$}\E: 1's,2,3/i, 'Verified change'); # Test reading and setting custom fields with multiple values expect_send("show ticket/$ticket_id -f CF-MultipleCF$$", 'Checking initial value'); expect_like(qr/\QCF.{MultipleCF$$}\E:/i, 'Verified multiple cf change'); expect_send("edit ticket/$ticket_id set CF.{MultipleCF$$}=1,2,3 ", 'Changing CF...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf'); expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value'); expect_like(qr/\QCF.{MultipleCF$$}\E: 1,\s*2,\s*3/i, 'Verified multiple cf change'); expect_send("edit ticket/$ticket_id set CF.{MultipleCF$$}=a,b,c ", 'Changing CF...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf'); expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value'); expect_like(qr/\QCF.{MultipleCF$$}\E: a,\s*b,\s*c/i, 'Verified change'); expect_send("edit ticket/$ticket_id del CF.{MultipleCF$$}=a", 'Changing CF...'); expect_like(qr/Ticket $ticket_id updated/, 'del multiple cf'); expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value'); expect_like(qr/\QCF.{MultipleCF$$}\E: b,\s*c/i, 'Verified multiple cf change'); expect_send("edit ticket/$ticket_id add CF.{MultipleCF$$}=o", 'Changing CF...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf'); expect_send("show ticket/$ticket_id -f CF.{MultipleCF$$}", 'Checking new value'); expect_like(qr/\QCF.{MultipleCF$$}\E: b,\s*c,\s*o/i, 'Verified multiple cf change'); sub multi_round_trip { my ($op, $value, $regex) = @_; $Test::Builder::Level++; # The outer double quotes are for the argument parsing that the # command-line does; the extra layer of escaping is to for them, as # well. It is equivilent to the quoting that the shell would # require. my $quoted = $value; $quoted =~ s/(["\\])/\\$1/g; expect_send(qq{edit ticket/$ticket_id $op CF.{MultipleCF$$}="$quoted"}, qq{CF $op $value}); expect_like(qr/Ticket $ticket_id updated/, qq{Got expected "updated" answer}); expect_send(qq{show ticket/$ticket_id -f CF.{MultipleCF$$}}, qq{Sent "show"}); expect_like(qr/\QCF.{MultipleCF$$}\E: $regex$/i, qq{Answer matches $regex}); } # Test simple quoting my $ticket = RT::Ticket->new($RT::SystemUser); $ticket->Load($ticket_id); multi_round_trip(set => q|'a,b,c'|, qr/'a,b,c'/); is($ticket->CustomFieldValues("MultipleCF$$")->Count, 1, "Has only one CF value"); is($ticket->FirstCustomFieldValue("MultipleCF$$"), q{a,b,c}, "And that CF value is as expected"); multi_round_trip(del => q|a|, qr/'a,b,c'/); is($ticket->CustomFieldValues("MultipleCF$$")->Count, 1, "Still has only one CF value"); is($ticket->FirstCustomFieldValue("MultipleCF$$"), q{a,b,c}, "And that CF value is as expected"); multi_round_trip(set => q|q{a,b,c}|, qr/'a,b,c'/); is($ticket->CustomFieldValues("MultipleCF$$")->Count, 1, "Still has only one CF value"); is($ticket->FirstCustomFieldValue("MultipleCF$$"), q{a,b,c}, "And that CF value is as expected"); multi_round_trip(del => q|a|, qr/'a,b,c'/); is($ticket->CustomFieldValues("MultipleCF$$")->Count, 1, "Still has only one CF value"); is($ticket->FirstCustomFieldValue("MultipleCF$$"), q{a,b,c}, "And that CF value is as expected"); multi_round_trip(del => q|'a,b,c'|, qr/\s*/); is($ticket->CustomFieldValues("MultipleCF$$")->Count, 0, "Now has no CF values"); multi_round_trip(set => q|q{1,2's,3}|, qr/'1,2\\'s,3'/); is($ticket->CustomFieldValues("MultipleCF$$")->Count, 1, "Still has only one CF value"); is($ticket->FirstCustomFieldValue("MultipleCF$$"), q{1,2's,3}, "And that CF value is as expected"); multi_round_trip(del => q|q{1,2's,3}|, qr/\s*/); is($ticket->CustomFieldValues("MultipleCF$$")->Count, 0, "Now has no CF values"); # Test escaping of quotes - generate (foo)(bar') with no escapes multi_round_trip(set => q|'foo',bar'|, qr/foo,bar'/); is($ticket->CustomFieldValues("MultipleCF$$")->Count, 2, "Has two values"); is($ticket->CustomFieldValues("MultipleCF$$")->First->Content, q|foo|, "Direct value checks out"); is($ticket->CustomFieldValues("MultipleCF$$")->Last->Content, q|bar'|, "Direct value checks out"); multi_round_trip(del => q|bar'|, qr/foo/); # With one \, generate (foo',bar) # We obviously need two \s in the following q|| string in order to # generate a string with one actual \ in it; this causes the string to, # in general, have twice as many \s in it as we wish to test. multi_round_trip(set => q|'foo\\',bar'|, qr/'foo\\',bar'/); is($ticket->CustomFieldValues("MultipleCF$$")->Count, 1, "Has one value"); is($ticket->CustomFieldValues("MultipleCF$$")->First->Content, q|foo',bar|, "Direct value checks out"); # With two \, generate (foo\)(bar') multi_round_trip(set => q|'foo\\\\',bar'|, qr/foo\\,bar'/); is($ticket->CustomFieldValues("MultipleCF$$")->Count, 2, "Has two values"); is($ticket->CustomFieldValues("MultipleCF$$")->First->Content, q|foo\\|, "Direct value checks out"); is($ticket->CustomFieldValues("MultipleCF$$")->Last->Content, q|bar'|, "Direct value checks out"); multi_round_trip(del => q|bar'|, qr/foo\\/); # With three \, generate (foo\',bar) multi_round_trip(set => q|'foo\\\\\\',bar'|, qr/'foo\\\\\\',bar'/); is($ticket->CustomFieldValues("MultipleCF$$")->Count, 1, "Has one value"); is($ticket->CustomFieldValues("MultipleCF$$")->First->Content, q|foo\\',bar|, "Direct value checks out"); # Check that we don't infinite-loop on 'foo'bar,baz; this should be ('foo'bar)(baz) expect_send("edit ticket/$ticket_id set CF.{MultipleCF$$}=\"'foo'bar,baz\"", 'Changing CF to have quotes not at commas'); expect_like(qr/Ticket $ticket_id updated/, 'Changed multiple cf'); is($ticket->CustomFieldValues("MultipleCF$$")->Count, 2, "Has two value"); is($ticket->CustomFieldValues("MultipleCF$$")->First->Content, q|'foo'bar|, "Direct value checks out"); is($ticket->CustomFieldValues("MultipleCF$$")->Last->Content, q|baz|, "Direct value checks out"); # ... # change a ticket's ...[other properties]... # ... # stall a ticket expect_send("edit ticket/$ticket_id set status=stalled", 'Changing status to "stalled"...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed status'); expect_send("show ticket/$ticket_id -f status", 'Verifying change...'); expect_like(qr/Status: stalled/, 'Verified change'); # resolve a ticket expect_send("edit ticket/$ticket_id set status=resolved", 'Changing status to "resolved"...'); expect_like(qr/Ticket $ticket_id updated/, 'Changed status'); expect_send("show ticket/$ticket_id -f status", 'Verifying change...'); expect_like(qr/Status: resolved/, 'Verified change'); # try to set status to an illegal value expect_send("edit ticket/$ticket_id set status=quux", 'Changing status to an illegal value...'); expect_like(qr/isn't a valid status/i, 'Errored out'); expect_send("show ticket/$ticket_id -f status", 'Verifying lack of change...'); expect_like(qr/Status: resolved/, 'Verified change'); # show ticket list expect_send("ls -s -t ticket -o +id \"Status='resolved'\"", 'Listing resolved tickets...'); expect_like(qr/$ticket_id: new ticket/, 'Found our ticket'); expect_send("ls -s -t ticket -f Requestors $ticket_id", 'getting Requestors'); expect_like(qr/$ticket_id\s+bar\@example.com,\s+foo\@example.com/, 'got Requestors'); # show ticket list verbosely expect_send("ls -l -t ticket -o +id \"Status='resolved'\"", 'Listing resolved tickets verbosely...'); expect_like(qr/id: ticket\/$ticket_id/, 'Found our ticket'); # show ticket expect_send("show -s -t ticket $ticket_id", 'Showing our ticket...'); expect_like(qr/id: ticket\/$ticket_id/, 'Got our ticket'); # show ticket history expect_send("show ticket/$ticket_id/history", 'Showing our ticket\'s history...'); expect_like(qr/Ticket created by root/, 'Got our history'); expect_send("show -v ticket/$ticket_id/history", 'Showing our ticket\'s history verbosely...'); TODO: { local $TODO = "Cannot show verbose ticket history right now"; # show ticket history verbosely expect_like(qr/Ticket created by root/, 'Got our history'); } # get attachments from a ticket expect_send("show -s ticket/$ticket_id/attachments", 'Showing ticket attachments...'); expect_like(qr/id: ticket\/$ticket_id\/attachments/, 'Got our ticket\'s attachments'); expect_like(qr/Attachments: \d+: \(Unnamed\) \(\S+ \/ \d+\w+\)/, 'Our ticket has an attachment'); expect_handle->before() =~ /Attachments: (\d+): \(Unnamed\) \((\S+)/; my $attachment_id = $1; my $attachment_type = $2; ok($attachment_id, "Got attachment id=$attachment_id $attachment_type"); expect_send("show -s ticket/$ticket_id/attachments/$attachment_id", "Showing attachment $attachment_id..."); expect_like(qr/ContentType: $attachment_type/, 'Got the attachment'); # creating users expect_send("create -t user set Name='NewUser$$' EmailAddress='fbar$$\@example.com'", 'Creating a user...'); expect_like(qr/User \d+ created/, 'Created the user'); expect_handle->before() =~ /User (\d+) created/; my $user_id = $1; ok($user_id, "Got user id=$user_id"); # updating users expect_send("edit user/$user_id set Name='EditedUser$$'", 'Editing the user'); expect_like(qr/User $user_id updated/, 'Edited the user'); expect_send("show user/$user_id", 'Showing the user...'); expect_like(qr/id: user\/$user_id/, 'Saw the user'); expect_like(qr/Name: EditedUser$$/, 'Saw the modification'); TODO: { todo_skip "Listing non-ticket items doesn't work", 2; expect_send("list -t user 'id > 0'", 'Listing the users...'); expect_like(qr/$user_id: EditedUser$$/, 'Found the user'); } TODO: { todo_skip "Group manipulation doesn't work right now", 8; # creating groups expect_send("create -t group set Name='NewGroup$$'", 'Creating a group...'); expect_like(qr/Group \d+ created/, 'Created the group'); expect_handle->before() =~ /Group (\d+) created/; my $group_id = $1; ok($group_id, "Got group id=$group_id"); # updating groups expect_send("edit group/$group_id set Name='EditedGroup$$'", 'Editing the group'); expect_like(qr/Group $group_id updated/, 'Edited the group'); expect_send("show group/$group_id", 'Showing the group...'); expect_like(qr/id: group\/$group_id/, 'Saw the group'); expect_like(qr/Name: EditedGroup$$/, 'Saw the modification'); TODO: { local $TODO = "Listing non-ticket items doesn't work"; expect_send("list -t group 'id > 0'", 'Listing the groups...'); expect_like(qr/$group_id: EditedGroup$$/, 'Found the group'); } } TODO: { todo_skip "Custom field manipulation not yet implemented", 8; # creating custom fields expect_send("create -t custom_field set Name='NewCF$$'", 'Creating a custom field...'); expect_like(qr/Custom Field \d+ created/, 'Created the custom field'); expect_handle->before() =~ /Custom Field (\d+) created/; my $cf_id = $1; ok($cf_id, "Got custom field id=$cf_id"); # updating custom fields expect_send("edit cf/$cf_id set Name='EditedCF$$'", 'Editing the custom field'); expect_like(qr/Custom field $cf_id updated/, 'Edited the custom field'); expect_send("show cf/$cf_id", 'Showing the queue...'); expect_like(qr/id: custom_field\/$cf_id/, 'Saw the custom field'); expect_like(qr/Name: EditedCF$$/, 'Saw the modification'); TODO: { todo_skip "Listing non-ticket items doesn't work", 2; expect_send("list -t custom_field 'id > 0'", 'Listing the CFs...'); expect_like(qr/$cf_id: EditedCF$$/, 'Found the custom field'); } } expect_send("create -t ticket set subject='CLIMergeTest1-$$'", 'Creating first ticket to merge...'); expect_like(qr/Ticket \d+ created/, 'Created first ticket'); expect_handle->before() =~ /Ticket (\d+) created/; my $merge_ticket_A = $1; ok($merge_ticket_A, "Got first ticket to merge id=$merge_ticket_A"); expect_send("create -t ticket set subject='CLIMergeTest2-$$'", 'Creating second ticket to merge...'); expect_like(qr/Ticket \d+ created/, 'Created second ticket'); expect_handle->before() =~ /Ticket (\d+) created/; my $merge_ticket_B = $1; ok($merge_ticket_B, "Got second ticket to merge id=$merge_ticket_B"); expect_send("merge $merge_ticket_B $merge_ticket_A", 'Merging the tickets...'); expect_like(qr/Merge completed/, 'Merged the tickets'); expect_send("show ticket/$merge_ticket_A/history", 'Checking merge on first ticket'); expect_like(qr/Merged into #$merge_ticket_A: CLIMergeTest1-$$ by root/, 'Merge recorded in first ticket'); expect_send("show ticket/$merge_ticket_B/history", 'Checking merge on second ticket'); expect_like(qr/Merged into #$merge_ticket_A: CLIMergeTest1-$$ by root/, 'Merge recorded in second ticket'); { # create a user; give them privileges to take and steal ### TODO: implement 'grant' in the CLI tool; use that here instead. ### this breaks the abstraction barrier, like, a lot. my $steal_user = RT::User->new(RT->SystemUser); my ($steal_user_id, $msg) = $steal_user->Create( Name => "fooser$$", EmailAddress => "fooser$$\@localhost", Privileged => 1, Password => 'foobar', ); ok($steal_user_id, "Created the user? $msg"); my $steal_queue = RT::Queue->new(RT->SystemUser); my $steal_queue_id; ($steal_queue_id, $msg) = $steal_queue->Create( Name => "Steal$$" ); ok($steal_queue_id, "Got the queue? $msg"); ok($steal_queue->id, "queue obj has id"); my $status; ($status, $msg) = $steal_user->PrincipalObj->GrantRight( Right => 'ShowTicket', Object => $steal_queue ); ok($status, "Gave 'ShowTicket' to our user? $msg"); ($status, $msg) = $steal_user->PrincipalObj->GrantRight( Right => 'OwnTicket', Object => $steal_queue ); ok($status, "Gave 'OwnTicket' to our user? $msg"); ($status, $msg) = $steal_user->PrincipalObj->GrantRight( Right => 'StealTicket', Object => $steal_queue ); ok($status, "Gave 'StealTicket' to our user? $msg"); ($status, $msg) = $steal_user->PrincipalObj->GrantRight( Right => 'TakeTicket', Object => $steal_queue ); ok($status, "Gave 'TakeTicket' to our user? $msg"); # create a ticket to take/steal expect_send("create -t ticket set queue=$steal_queue_id subject='CLIStealTest-$$'", 'Creating ticket to steal...'); expect_like(qr/Ticket \d+ created/, 'Created ticket'); expect_handle->before() =~ /Ticket (\d+) created/; my $steal_ticket_id = $1; ok($steal_ticket_id, "Got ticket to steal id=$steal_ticket_id"); # root takes the ticket expect_send("take $steal_ticket_id", 'root takes the ticket...'); expect_like(qr/Owner changed from Nobody to root/, 'root took the ticket'); expect_quit(); # log in as the non-root user $ENV{'RTUSER'} = "fooser$$"; $ENV{'RTPASSWD'} = 'foobar'; expect_run( command => "$rt_tool_path shell", prompt => 'rt> ', quit => 'quit',); # user tries to take the ticket, fails # shouldn't be able to 'take' a ticket which someone else has taken out from # under you; that should produce an error. should have to explicitly # 'steal' it back from them. 'steal' can automatically 'take' a ticket, # though. expect_send("take $steal_ticket_id", 'user tries to take the ticket...'); expect_like(qr/You can only take tickets that are unowned/, '...and fails.'); expect_send("show ticket/$steal_ticket_id -f owner", 'Double-checking...'); expect_like(qr/Owner: root/, '...no change.'); # user steals the ticket expect_send("steal $steal_ticket_id", 'user tries to *steal* the ticket...'); expect_like(qr/Owner changed from root to fooser$$/, '...and succeeds!'); expect_send("show ticket/$steal_ticket_id -f owner", 'Double-checking...'); expect_like(qr/Owner: fooser$$/, '...yup, it worked.'); expect_quit(); # log back in as root $ENV{'RTUSER'} = 'root'; $ENV{'RTPASSWD'} = 'password'; expect_run( command => "$rt_tool_path shell", prompt => 'rt> ', quit => 'quit',); # root steals the ticket back expect_send("steal $steal_ticket_id", 'root steals the ticket back...'); expect_like(qr/Owner changed from fooser$$ to root/, '...and succeeds.'); } my @link_relns = ( 'DependsOn', 'DependedOnBy', 'RefersTo', 'ReferredToBy', 'MemberOf', 'HasMember', ); my %display_relns = map { $_ => $_ } @link_relns; $display_relns{HasMember} = 'Members'; my $link1_id = ok_create_ticket( "LinkTicket1-$$" ); my $link2_id = ok_create_ticket( "LinkTicket2-$$" ); foreach my $reln (@link_relns) { # create link expect_send("link $link1_id $reln $link2_id", "Link by $reln..."); expect_like(qr/Created link $link1_id $reln $link2_id/, 'Linked'); expect_send("show -s ticket/$link1_id/links", "Checking creation of $reln..."); expect_like(qr/$display_relns{$reln}: [\w\d\.\-]+:\/\/[\w\d\.]+\/ticket\/$link2_id/, "Created link $reln"); expect_send("show ticket/$link1_id/links", "Checking show links without format"); expect_like(qr/$display_relns{$reln}: [\w\d\.\-]+:\/\/[\w\d\.]+\/ticket\/$link2_id/, "Found link $reln"); # delete link expect_send("link -d $link1_id $reln $link2_id", "Delete $reln..."); expect_like(qr/Deleted link $link1_id $reln $link2_id/, 'Deleted'); expect_send("show ticket/$link1_id/links", "Checking removal of $reln..."); ok( expect_handle->before() !~ /\Q$display_relns{$reln}: \E[\w\d\.\-]+:\/\/[w\d\.]+\/ticket\/$link2_id/, "Removed link $reln" ); #expect_unlike(qr/\Q$reln: \E[\w\d\.]+\Q://\E[w\d\.]+\/ticket\/$link2_id/, "Removed link $reln"); } expect_quit(); # We need to do this ourselves, so that we quit # *before* we tear down the webserver. # helper function sub ok_create_ticket { my $subject = shift; expect_send("create -t ticket set subject='$subject'", 'Creating ticket...'); expect_like(qr/Ticket \d+ created/, "Created ticket '$subject'"); expect_handle->before() =~ /Ticket (\d+) created/; my $id = $1; ok($id, "Got ticket id=$id"); return $id; } # wrap up all the file handling stuff for attachment testing sub check_attachment { my $attachment_path = shift; (my $filename = $attachment_path) =~ s/.*\/(.*)$/$1/; expect_send("comment -m 'attach file' -a $attachment_path $ticket_id", "Adding an attachment ($filename)"); expect_like(qr/Comments added/, "Added the attachment"); expect_send("show ticket/$ticket_id/attachments","Finding Attachment"); my $attachment_regex = qr/(\d+):\s+$filename/; expect_like($attachment_regex,"Attachment Uploaded"); expect_handle->before() =~ $attachment_regex; my $attachment_id = $1; expect_send("show ticket/$ticket_id/attachments/$attachment_id/content","Fetching Attachment"); open( my $fh, '<', $attachment_path ) or die "Can't open $attachment_path: $!"; my $attachment_content = do { local($/); <$fh> }; close $fh; chomp $attachment_content; TODO: { local $TODO = "Binary PNG content is getting mangled somewhere along the way" if $attachment_path =~ /\.png$/; is( MIME::Base64::encode_base64(Test::Expect::before()), MIME::Base64::encode_base64($attachment_content), "Attachment contains original text" ); } } # you may encounter warning like Use of uninitialized value $ampm # ... in Time::ParseDate my @warnings = grep { $_ !~ /\$ampm/ } $m->get_warnings; is( scalar @warnings, 0, 'no extra warnings' ); undef $m; done_testing; 1; # needed to avoid a weird exit value from expect_quit rt-4.2.12/t/web/command_line_cf_edge_cases.t000644 000765 000024 00000005176 12555754775 021360 0ustar00sartakstaff000000 000000 use strict; use warnings; use Test::Expect; use RT::Test tests => 100, actual_server => 1; my ( $baseurl, $m ) = RT::Test->started_ok; my $rt_tool_path = "$RT::BinPath/rt"; $ENV{'RTUSER'} = 'root'; $ENV{'RTPASSWD'} = 'password'; $ENV{'RTSERVER'} = RT->Config->Get('WebBaseURL'); $ENV{'RTDEBUG'} = '1'; $ENV{'RTCONFIG'} = '/dev/null'; my @cfs = ( 'foo=bar', 'foo.bar', 'foo:bar', 'foo bar', 'foo{bar}', 'foo-bar', 'foo()bar', ); for my $name (@cfs) { RT::Test->load_or_create_custom_field( Name => $name, Type => 'Freeform', MaxValues => 1, Queue => 0, ); } expect_run( command => "$rt_tool_path shell", prompt => 'rt> ', quit => 'quit', ); # create a ticket for my $name (@cfs) { expect_send( qq{create -t ticket set subject='test cf $name' 'CF.{$name}=foo:b a.r=baz'}, "creating a ticket for cf $name" ); expect_handle->before() =~ /Ticket (\d+) created/; my $ticket_id = $1; expect_send( "show ticket/$ticket_id -f 'CF.{$name}'", 'checking new value' ); expect_like( qr/CF\.\Q{$name}\E: foo:b a\.r=baz/i, 'verified change' ); expect_send( "edit ticket/$ticket_id set 'CF.{$name}=bar'", "changing cf $name to bar" ); expect_like( qr/Ticket $ticket_id updated/, 'changed cf' ); expect_send( "show ticket/$ticket_id -f 'CF.{$name}'", 'checking new value' ); expect_like( qr/CF\.\Q{$name}\E: bar/i, 'verified change' ); expect_send( qq{create -t ticket set subject='test cf $name' 'CF-$name=foo:b a.r=baz'}, "creating a ticket for cf $name" ); expect_handle->before() =~ /Ticket (\d+) created/; $ticket_id = $1; expect_send( "show ticket/$ticket_id -f 'CF-$name'", 'checking new value' ); if ( $name eq 'foo=bar' ) { expect_like( qr/CF\.\Q{$name}\E: $/mi, "can't use = in cf name with old style" ); } else { expect_like( qr/CF\.\Q{$name}\E: foo:b a\.r=baz/i, 'verified change' ); expect_send( "edit ticket/$ticket_id set 'CF-$name=bar'", "changing cf $name to bar" ); expect_like( qr/Ticket $ticket_id updated/, 'changed cf' ); expect_send( "show ticket/$ticket_id -f 'CF-$name'", 'checking new value' ); expect_like( qr/CF\.\Q{$name}\E: bar/i, 'verified change' ); } } my @invalid = ('foo,bar'); for my $name (@invalid) { expect_send( qq{create -t ticket set subject='test cf $name' 'CF.{$name}=foo'}, "creating a ticket for cf $name" ); expect_like( qr/You shouldn't specify objects as arguments to create/i, '$name is not a valid cf name' ); } expect_quit(); rt-4.2.12/t/web/command_line_link_to_articles.t000644 000765 000024 00000002640 12555754775 022144 0ustar00sartakstaff000000 000000 use strict; use warnings; use Test::Expect; use RT::Test tests => 12, actual_server => 1; my $class = RT::Class->new( RT->SystemUser ); my ( $class_id, $msg ) = $class->Create( Name => 'foo' ); ok( $class_id, $msg ); my $article = RT::Article->new( RT->SystemUser ); ( my $article_id, $msg ) = $article->Create( Class => 'foo', Summary => 'article summary' ); ok( $article_id, $msg ); my ( $baseurl, $m ) = RT::Test->started_ok; my $rt_tool_path = "$RT::BinPath/rt"; $ENV{'RTUSER'} = 'root'; $ENV{'RTPASSWD'} = 'password'; $RT::Logger->debug( "Connecting to server at " . RT->Config->Get('WebBaseURL') ); $ENV{'RTSERVER'} = RT->Config->Get('WebBaseURL'); $ENV{'RTDEBUG'} = '1'; $ENV{'RTCONFIG'} = '/dev/null'; expect_run( command => "$rt_tool_path shell", prompt => 'rt> ', quit => 'quit', ); expect_send( q{create -t ticket set subject='new ticket'}, "creating a ticket..." ); expect_like( qr/Ticket \d+ created/, "created the ticket" ); expect_handle->before() =~ /Ticket (\d+) created/; my $ticket_id = $1; expect_send( "link $ticket_id RefersTo a:$article_id", "link $ticket_id RefersTo a:$article_id" ); expect_like( qr/Created link $ticket_id RefersTo a:$article_id/, 'created link' ); expect_send( "show -s ticket/$ticket_id/links", "show ticket links" ); expect_like( qr|RefersTo: fsck\.com-article://example\.com/article/$article_id|, "found new created link" ); expect_quit(); rt-4.2.12/t/web/command_line_ticket_content_type.t000644 000765 000024 00000002651 12555754775 022677 0ustar00sartakstaff000000 000000 use strict; use warnings; use Test::Expect; use RT::Test tests => 22, actual_server => 1; my ( $baseurl, $m ) = RT::Test->started_ok; $m->login(); my $rt_tool_path = "$RT::BinPath/rt"; $ENV{'RTUSER'} = 'root'; $ENV{'RTPASSWD'} = 'password'; $ENV{'RTSERVER'} = RT->Config->Get('WebBaseURL'); $ENV{'RTCONFIG'} = '/dev/null'; # create a ticket expect_run( command => "$rt_tool_path shell", prompt => 'rt> ', quit => 'quit', ); for my $content_type ( 'text/plain', 'text/html' ) { expect_send( qq{create -t ticket -ct $content_type set subject='new ticket' text=foo}, "creating a ticket with content-type $content_type" ); expect_like( qr/Ticket \d+ created/, "created the ticket" ); expect_handle->before() =~ /Ticket (\d+) created/; my $id = $1; ok( $id, "got ticket $id" ); $m->goto_ticket($id); $m->follow_link_ok( { text => 'with headers', n => 1 } ); $m->content_contains( "Content-Type: $content_type", 'content-type' ); expect_send( qq{comment ticket/$id -ct $content_type -m bar}, "commenting a ticket with content-type $content_type" ); expect_like( qr/Comments added/, "commented the ticket" ); $m->goto_ticket($id); $m->follow_link_ok( { text => 'with headers', n => 2 } ); $m->content_contains( "Content-Type: $content_type", 'content-type' ); } expect_quit(); 1; # needed to avoid a weird exit value from expect_quit rt-4.2.12/t/web/command_line_with_unknown_field.t000644 000765 000024 00000004137 12555754775 022517 0ustar00sartakstaff000000 000000 use strict; use warnings; use File::Spec (); use Test::Expect; use RT::Test tests => 21, actual_server => 1; my ($baseurl, $m) = RT::Test->started_ok; my $rt_tool_path = "$RT::BinPath/rt"; $ENV{'RTUSER'} = 'root'; $ENV{'RTPASSWD'} = 'password'; $RT::Logger->debug("Connecting to server at ".RT->Config->Get('WebBaseURL')); $ENV{'RTSERVER'} =RT->Config->Get('WebBaseURL') ; $ENV{'RTDEBUG'} = '1'; $ENV{'RTCONFIG'} = '/dev/null'; expect_run( command => "$rt_tool_path shell", prompt => 'rt> ', quit => 'quit', ); expect_send( q{create -t ticket set foo=bar}, "create ticket with unknown field" ); expect_like(qr/foo: Unknown field/, 'foo is unknown field'); expect_like(qr/Could not create ticket/, 'ticket is not created'); expect_send(q{create -t ticket set subject='new ticket' add cc=foo@example.com}, "Creating a ticket..."); expect_like(qr/Ticket \d+ created/, "Created the ticket"); expect_handle->before() =~ /Ticket (\d+) created/; my $ticket_id = $1; expect_send("edit ticket/$ticket_id set marge=simpson", 'set unknown field'); expect_like(qr/marge: Unknown field/, 'marge is unknown field'); expect_like(qr/marge: simpson/, 'the value we set for marge is shown too'); expect_send("edit ticket/$ticket_id set homer=simpson", 'set unknown field'); expect_like(qr/homer: Unknown field/, 'homer is unknown field'); expect_like(qr/homer: simpson/, 'the value we set for homer is shown too'); expect_send( q{create -t ticket set requestors='foo@example.com, bar@example.com'}, "create ticket with field 'requestors'" ); expect_like(qr/Ticket \d+ created/, "Created the ticket"); expect_handle->before() =~ /Ticket (\d+) created/; $ticket_id = $1; expect_send("show ticket/$ticket_id", 'check requestors'); expect_like(qr/From: (?:foo\@example\.com, bar\@example\.com|bar\@example\.com, foo\@example\.com)/, "requestors are set correctly"); expect_quit(); # you may encounter warning like Use of uninitialized value $ampm # ... in Time::ParseDate my @warnings = grep { $_ !~ /\$ampm/ } $m->get_warnings; is( scalar @warnings, 0, 'no extra warnings' ); 1; # needed to avoid a weird exit value from expect_quit rt-4.2.12/t/web/compilation_errors.t000644 000765 000024 00000003046 12555754775 020025 0ustar00sartakstaff000000 000000 use strict; use warnings; use Test::More; use File::Find; BEGIN { sub wanted { -f && /\.html$/ && $_ !~ /Logout.html$/ && $File::Find::dir !~ /RichText/; } my $tests = 7; find( sub { wanted() and $tests += 4 }, 'share/html/' ); plan tests => $tests + 1; # plus one for warnings check } use HTTP::Request::Common; use HTTP::Cookies; use LWP; my $cookie_jar = HTTP::Cookies->new; use RT::Test; my ($baseurl, $agent) = RT::Test->started_ok; # give the agent a place to stash the cookies $agent->cookie_jar($cookie_jar); # get the top page my $url = $agent->rt_base_url; $agent->get($url); is($agent->status, 200, "Loaded a page"); # follow the link marked "Login" $agent->login(root => 'password'); is($agent->status, 200, "Fetched the page ok"); $agent->content_contains('Logout', "Found a logout link"); find ( { wanted => sub { wanted() and test_get($agent, $File::Find::name) }, no_chdir => 1 } , 'share/html/'); # We expect to spew a lot of warnings; toss them away $agent->get_warnings; sub test_get { my $agent = shift; my $file = shift; $file =~ s#^share/html/##; diag( "testing $url/$file" ); $agent->get_ok("$url/$file"); is($agent->status, 200, "Loaded $file"); $agent->content_lacks('Not logged in', "Still logged in for $file"); $agent->content_lacks('raw error', "Didn't get a Mason compilation error on $file") or do { if (my ($error) = $agent->content =~ /
    (.*?line.*?)$/s) {
                    diag "$file: $error";
                }
            };
    }
    
    rt-4.2.12/t/web/config_tab_right.t000644 000765 000024 00000001524 12555754775 017402 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test nodata => 1, tests => 10;
    
    my ($uname, $upass, $user) = ('tester', 'tester');
    {
        $user = RT::User->new(RT->SystemUser);
        my ($status, $msg) = $user->Create(
            Name => $uname,
            Password => $upass,
            Disabled => 0,
            Privileged => 1,
        );
        ok($status, 'created a user');
    }
    
    my ($baseurl, $m) = RT::Test->started_ok;
    ok $m->login($uname, $upass), "logged in";
    
    {
        $m->content_lacks('li-admin', 'no Admin tab');
        $m->get('/Admin/');
        is $m->status, 403, 'no access to /Admin/';
    }
    
    RT::Test->set_rights(
        { Principal => $user->PrincipalObj,
          Right => [qw(ShowConfigTab)],
        },
    );
    
    {
        $m->get('/');
        $m->content_contains('li-admin', 'admin tab is there');
    
        $m->follow_link_ok({text => 'Admin'});
        is $m->status, 200, 'user has access to /Admin/';
    }
    
    rt-4.2.12/t/web/crypt-gnupg.t000644 000765 000024 00000034506 12555754775 016377 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test::GnuPG
      tests         => undef,
      gnupg_options => {
        passphrase    => 'recipient',
        'trust-model' => 'always',
    };
    use Test::Warn;
    use MIME::Head;
    
    use RT::Action::SendEmail;
    
    RT->Config->Set( CommentAddress => 'general@example.com');
    RT->Config->Set( CorrespondAddress => 'general@example.com');
    RT->Config->Set( DefaultSearchResultFormat => qq{
       '__id__/TITLE:#',
       '__Subject__/TITLE:Subject',
       'OO-__Owner__-O',
       'OR-__Requestors__-O',
       'KO-__KeyOwner__-K',
       'KR-__KeyRequestors__-K',
       Status});
    
    
    RT::Test->import_gnupg_key('recipient@example.com', 'public');
    RT::Test->import_gnupg_key('recipient@example.com', 'secret');
    RT::Test->import_gnupg_key('general@example.com', 'public');
    RT::Test->import_gnupg_key('general@example.com', 'secret');
    RT::Test->import_gnupg_key('general@example.com.2', 'public');
    RT::Test->import_gnupg_key('general@example.com.2', 'secret');
    
    ok(my $user = RT::User->new(RT->SystemUser));
    ok($user->Load('root'), "Loaded user 'root'");
    $user->SetEmailAddress('recipient@example.com');
    
    my $queue = RT::Test->load_or_create_queue(
        Name              => 'General',
        CorrespondAddress => 'general@example.com',
    );
    ok $queue && $queue->id, 'loaded or created queue';
    my $qid = $queue->id;
    
    my ($baseurl, $m) = RT::Test->started_ok;
    ok $m->login, 'logged in';
    
    $m->get_ok("/Admin/Queues/Modify.html?id=$qid");
    $m->form_with_fields('Sign', 'Encrypt');
    $m->field(Encrypt => 1);
    $m->submit;
    
    RT::Test->clean_caught_mails;
    
    $m->goto_create_ticket( $queue );
    $m->form_name('TicketCreate');
    $m->field('Requestors', 'recipient@example.com');
    $m->field('Subject', 'Encryption test');
    $m->field('Content', 'Some content');
    ok($m->value('Encrypt', 2), "encrypt tick box is checked");
    ok(!$m->value('Sign', 2), "sign tick box is unchecked");
    $m->submit;
    is($m->status, 200, "request successful");
    
    $m->get($baseurl); # ensure that the mail has been processed
    
    my @mail = RT::Test->fetch_caught_mails;
    ok(@mail, "got some mail");
    
    $user->SetEmailAddress('general@example.com');
    for my $mail (@mail) {
        unlike $mail, qr/Some content/, "outgoing mail was encrypted";
    
        my ($content_type, $mime_version) = get_headers($mail, "Content-Type", "MIME-Version");
        my $body = strip_headers($mail);
    
        $mail = << "MAIL";
    Subject: RT mail sent back into RT
    From: general\@example.com
    To: recipient\@example.com
    $mime_version
    $content_type
    
    $body
    MAIL
     
        my ($status, $id) = RT::Test->send_via_mailgate($mail);
        is ($status >> 8, 0, "The mail gateway exited normally");
        ok ($id, "got id of a newly created ticket - $id");
    
        my $tick = RT::Ticket->new( RT->SystemUser );
        $tick->Load( $id );
        ok ($tick->id, "loaded ticket #$id");
    
        is ($tick->Subject,
            "RT mail sent back into RT",
            "Correct subject"
        );
    
        my $txn = $tick->Transactions->First;
        my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef};
    
        is( $msg->GetHeader('X-RT-Privacy'),
            'GnuPG',
            "RT's outgoing mail has crypto"
        );
        is( $msg->GetHeader('X-RT-Incoming-Encryption'),
            'Success',
            "RT's outgoing mail looks encrypted"
        );
    
        like($attachments[0]->Content, qr/Some content/, "RT's mail includes copy of ticket text");
        like($attachments[0]->Content, qr/$RT::rtname/, "RT's mail includes this instance's name");
    }
    
    $m->get("$baseurl/Admin/Queues/Modify.html?id=$qid");
    $m->form_with_fields('Sign', 'Encrypt');
    $m->field(Encrypt => undef);
    $m->field(Sign => 1);
    $m->submit;
    
    RT::Test->clean_caught_mails;
    
    $m->goto_create_ticket( $queue );
    $m->form_name('TicketCreate');
    $m->field('Requestors', 'recipient@example.com');
    $m->field('Subject', 'Signing test');
    $m->field('Content', 'Some other content');
    ok(!$m->value('Encrypt', 2), "encrypt tick box is unchecked");
    ok($m->value('Sign', 2), "sign tick box is checked");
    $m->submit;
    is($m->status, 200, "request successful");
    
    $m->get($baseurl); # ensure that the mail has been processed
    
    @mail = RT::Test->fetch_caught_mails;
    ok(@mail, "got some mail");
    for my $mail (@mail) {
        like $mail, qr/Some other content/, "outgoing mail was not encrypted";
        like $mail, qr/-----BEGIN PGP SIGNATURE-----[\s\S]+-----END PGP SIGNATURE-----/, "data has some kind of signature";
    
        my ($content_type, $mime_version) = get_headers($mail, "Content-Type", "MIME-Version");
        my $body = strip_headers($mail);
    
        $mail = << "MAIL";
    Subject: More RT mail sent back into RT
    From: general\@example.com
    To: recipient\@example.com
    $mime_version
    $content_type
    
    $body
    MAIL
     
        my ($status, $id) = RT::Test->send_via_mailgate($mail);
        is ($status >> 8, 0, "The mail gateway exited normally");
        ok ($id, "got id of a newly created ticket - $id");
    
        my $tick = RT::Ticket->new( RT->SystemUser );
        $tick->Load( $id );
        ok ($tick->id, "loaded ticket #$id");
    
        is ($tick->Subject,
            "More RT mail sent back into RT",
            "Correct subject"
        );
    
        my $txn = $tick->Transactions->First;
        my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef};
    
        is( $msg->GetHeader('X-RT-Privacy'),
            'GnuPG',
            "RT's outgoing mail has crypto"
        );
        is( $msg->GetHeader('X-RT-Incoming-Encryption'),
            'Not encrypted',
            "RT's outgoing mail looks unencrypted"
        );
        is( $msg->GetHeader('X-RT-Incoming-Signature'),
            'general ',
            "RT's outgoing mail looks signed"
        );
    
        like($attachments[0]->Content, qr/Some other content/, "RT's mail includes copy of ticket text");
        like($attachments[0]->Content, qr/$RT::rtname/, "RT's mail includes this instance's name");
    }
    
    $m->get("$baseurl/Admin/Queues/Modify.html?id=$qid");
    $m->form_with_fields('Sign', 'Encrypt');
    $m->field(Encrypt => 1);
    $m->field(Sign => 1);
    $m->submit;
    
    RT::Test->clean_caught_mails;
    
    
    $m->goto_create_ticket( $queue );
    $m->form_name('TicketCreate');
    $m->field('Requestors', 'recipient@example.com');
    $m->field('Subject', 'Crypt+Sign test');
    $m->field('Content', 'Some final? content');
    ok($m->value('Encrypt', 2), "encrypt tick box is checked");
    ok($m->value('Sign', 2), "sign tick box is checked");
    $m->submit;
    is($m->status, 200, "request successful");
    
    $m->get($baseurl); # ensure that the mail has been processed
    
    @mail = RT::Test->fetch_caught_mails;
    ok(@mail, "got some mail");
    for my $mail (@mail) {
        unlike $mail, qr/Some other content/, "outgoing mail was encrypted";
    
        my ($content_type, $mime_version) = get_headers($mail, "Content-Type", "MIME-Version");
        my $body = strip_headers($mail);
    
        $mail = << "MAIL";
    Subject: Final RT mail sent back into RT
    From: general\@example.com
    To: recipient\@example.com
    $mime_version
    $content_type
    
    $body
    MAIL
     
        my ($status, $id) = RT::Test->send_via_mailgate($mail);
        is ($status >> 8, 0, "The mail gateway exited normally");
        ok ($id, "got id of a newly created ticket - $id");
    
        my $tick = RT::Ticket->new( RT->SystemUser );
        $tick->Load( $id );
        ok ($tick->id, "loaded ticket #$id");
    
        is ($tick->Subject,
            "Final RT mail sent back into RT",
            "Correct subject"
        );
    
        my $txn = $tick->Transactions->First;
        my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef};
    
        is( $msg->GetHeader('X-RT-Privacy'),
            'GnuPG',
            "RT's outgoing mail has crypto"
        );
        is( $msg->GetHeader('X-RT-Incoming-Encryption'),
            'Success',
            "RT's outgoing mail looks encrypted"
        );
        is( $msg->GetHeader('X-RT-Incoming-Signature'),
            'general ',
            "RT's outgoing mail looks signed"
        );
    
        like($attachments[0]->Content, qr/Some final\? content/, "RT's mail includes copy of ticket text");
        like($attachments[0]->Content, qr/$RT::rtname/, "RT's mail includes this instance's name");
    }
    
    RT::Test->clean_caught_mails;
    
    $m->goto_create_ticket( $queue );
    $m->form_name('TicketCreate');
    $m->field('Requestors', 'recipient@example.com');
    $m->field('Subject', 'Test crypt-off on encrypted queue');
    $m->field('Content', 'Thought you had me figured out didya');
    $m->field(Encrypt => undef, 2); # turn off encryption
    ok(!$m->value('Encrypt', 2), "encrypt tick box is now unchecked");
    ok($m->value('Sign', 2), "sign tick box is still checked");
    $m->submit;
    is($m->status, 200, "request successful");
    
    $m->get($baseurl); # ensure that the mail has been processed
    
    @mail = RT::Test->fetch_caught_mails;
    ok(@mail, "got some mail");
    for my $mail (@mail) {
        like $mail, qr/Thought you had me figured out didya/, "outgoing mail was unencrypted";
    
        my ($content_type, $mime_version) = get_headers($mail, "Content-Type", "MIME-Version");
        my $body = strip_headers($mail);
    
        $mail = << "MAIL";
    Subject: Post-final! RT mail sent back into RT
    From: general\@example.com
    To: recipient\@example.com
    $mime_version
    $content_type
    
    $body
    MAIL
     
        my ($status, $id) = RT::Test->send_via_mailgate($mail);
        is ($status >> 8, 0, "The mail gateway exited normally");
        ok ($id, "got id of a newly created ticket - $id");
    
        my $tick = RT::Ticket->new( RT->SystemUser );
        $tick->Load( $id );
        ok ($tick->id, "loaded ticket #$id");
    
        is ($tick->Subject,
            "Post-final! RT mail sent back into RT",
            "Correct subject"
        );
    
        my $txn = $tick->Transactions->First;
        my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef};
    
        is( $msg->GetHeader('X-RT-Privacy'),
            'GnuPG',
            "RT's outgoing mail has crypto"
        );
        is( $msg->GetHeader('X-RT-Incoming-Encryption'),
            'Not encrypted',
            "RT's outgoing mail looks unencrypted"
        );
        is( $msg->GetHeader('X-RT-Incoming-Signature'),
            'general ',
            "RT's outgoing mail looks signed"
        );
    
        like($attachments[0]->Content, qr/Thought you had me figured out didya/, "RT's mail includes copy of ticket text");
        like($attachments[0]->Content, qr/$RT::rtname/, "RT's mail includes this instance's name");
    }
    
    sub get_headers {
        my $mail = shift;
        open my $fh, "<", \$mail or die $!;
        my $head = MIME::Head->read($fh);
        return @{[
            map {
                my $hdr = "$_: " . $head->get($_);
                chomp $hdr;
                $hdr;
            }
            @_
        ]};
    }
    
    sub strip_headers
    {
        my $mail = shift;
        $mail =~ s/.*?\n\n//s;
        return $mail;
    }
    
    # now test the OwnerNameKey and RequestorsKey fields
    
    my $nokey = RT::Test->load_or_create_user(Name => 'nokey', EmailAddress => 'nokey@example.com');
    $nokey->PrincipalObj->GrantRight(Right => 'CreateTicket');
    $nokey->PrincipalObj->GrantRight(Right => 'OwnTicket');
    
    my $tick = RT::Ticket->new( RT->SystemUser );
    warning_like {
        $tick->Create(Subject => 'owner lacks pubkey', Queue => 'general',
                      Owner => $nokey);
    } [
        qr/nokey\@example.com: skipped: public key not found/,
        qr/Recipient 'nokey\@example.com' is unusable/,
    ];
    ok(my $id = $tick->id, 'created ticket for owner-without-pubkey');
    
    $tick = RT::Ticket->new( RT->SystemUser );
    $tick->Create(Subject => 'owner has pubkey', Queue => 'general',
                  Owner => 'root');
    ok($id = $tick->id, 'created ticket for owner-with-pubkey');
    
    my $mail = << "MAIL";
    Subject: Nokey requestor
    From: nokey\@example.com
    To: general\@example.com
    
    hello
    MAIL
     
    my $status;
    warning_like {
        ($status, $id) = RT::Test->send_via_mailgate($mail);
    } [
        qr/nokey\@example.com: skipped: public key not found/,
        qr/Recipient 'nokey\@example.com' is unusable/,
    ];
    
    is ($status >> 8, 0, "The mail gateway exited normally");
    ok ($id, "got id of a newly created ticket - $id");
    
    $tick = RT::Ticket->new( RT->SystemUser );
    $tick->Load( $id );
    ok ($tick->id, "loaded ticket #$id");
    
    is ($tick->Subject,
        "Nokey requestor",
        "Correct subject"
    );
    
    # test key selection
    my $key1 = "EC1E81E7DC3DB42788FB0E4E9FA662C06DE22FC2";
    my $key2 = "75E156271DCCF02DDD4A7A8CDF651FA0632C4F50";
    
    ok($user = RT::User->new(RT->SystemUser));
    ok($user->Load('root'), "Loaded user 'root'");
    is($user->PreferredKey, $key1, "preferred key is set correctly");
    $m->get("$baseurl/Prefs/Other.html");
    like($m->content, qr/Preferred key/, "preferred key option shows up in preference");
    
    # XXX: mech doesn't let us see the current value of the select, apparently
    like($m->content, qr/$key1/, "first key shows up in preferences");
    like($m->content, qr/$key2/, "second key shows up in preferences");
    like($m->content, qr/$key1.*?$key2/s, "first key shows up before the second");
    
    $m->form_name('ModifyPreferences');
    $m->select("PreferredKey" => $key2);
    $m->submit;
    
    ok($user = RT::User->new(RT->SystemUser));
    ok($user->Load('root'), "Loaded user 'root'");
    is($user->PreferredKey, $key2, "preferred key is set correctly to the new value");
    
    $m->get("$baseurl/Prefs/Other.html");
    like($m->content, qr/Preferred key/, "preferred key option shows up in preference");
    
    # XXX: mech doesn't let us see the current value of the select, apparently
    like($m->content, qr/$key2/, "second key shows up in preferences");
    like($m->content, qr/$key1/, "first key shows up in preferences");
    like($m->content, qr/$key2.*?$key1/s, "second key (now preferred) shows up before the first");
    
    $m->no_warnings_ok;
    
    # test that the new fields work
    $m->get("$baseurl/Search/Simple.html?q=General");
    my $content = $m->content;
    $content =~ s/(/(/g;
    $content =~ s/)/)/g;
    $content =~ s/<(a|span)\b[^>]+>//g;
    $content =~ s/<\/(a|span)>//g;
    $content =~ s/<//g;
    
    like($content, qr/OO-Nobody in particular-O/,
         "original Owner untouched");
    like($content, qr/OO-nokey-O/,
         "original Owner untouched");
    like($content, qr/OO-root \(Enoch Root\)-O/,
         "original Owner untouched");
    like($content, qr/OR--O/,
         "original Requestors untouched");
    like($content, qr/OR-nokey-O/,
         "original Requestors untouched");
    
    like($content, qr/KO-Nobody in particular \(no pubkey!\)-K/,
         "KeyOwner issues no-pubkey warning for nobody");
    like($content, qr/KO-nokey \(no pubkey!\)-K/,
         "KeyOwner issues no-pubkey warning for root");
    like($content, qr/KO-root \(Enoch Root\)-K/,
         "KeyOwner does not issue no-pubkey warning for recipient");
    like($content, qr/KR--K/,
         "KeyRequestors does not issue no-pubkey warning for recipient\@example.com");
    like($content, qr/KR-nokey \(no pubkey!\)-K/,
         "KeyRequestors DOES issue no-pubkey warning for nokey\@example.com");
    
    $m->next_warning_like(qr/public key not found/);
    $m->next_warning_like(qr/public key not found/);
    $m->no_leftover_warnings_ok;
    
    undef $m;
    done_testing;
    rt-4.2.12/t/web/csrf-rest.t000644 000765 000024 00000004513 12555754775 016023 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test tests => undef;
    
    my ($baseurl, $m) = RT::Test->started_ok;
    
    # Get a non-REST session
    diag "Standard web session";
    ok $m->login, 'logged in';
    $m->content_contains("RT at a glance", "Get full UI content");
    
    # Requesting a REST page should be fine, as we have a Referer
    $m->post("$baseurl/REST/1.0/ticket/new", [
        format  => 'l',
    ]);
    $m->content_like(qr{^id: ticket/new}m, "REST request with referrer");
    
    # Removing the Referer header gets us an interstitial
    $m->add_header(Referer => undef);
    $m->post("$baseurl/REST/1.0/ticket/new", [
        format  => 'l',
        foo     => 'bar',
    ]);
    $m->content_contains("Possible cross-site request forgery",
                     "REST request without referrer is blocked");
    
    # But passing username and password lets us though
    $m->post("$baseurl/REST/1.0/ticket/new", [
        user    => 'root',
        pass    => 'password',
        format  => 'l',
    ]);
    $m->content_like(qr{^id: ticket/new}m, "REST request without referrer, but username/password supplied, is OK");
    
    # And we can still access non-REST urls
    $m->get("$baseurl");
    $m->content_contains("RT at a glance", "Full UI is still available");
    
    
    # Now go get a REST session
    diag "REST session";
    $m = RT::Test::Web->new;
    $m->post("$baseurl/REST/1.0/ticket/new", [
        user    => 'root',
        pass    => 'password',
        format  => 'l',
    ]);
    $m->content_like(qr{^id: ticket/new}m, "REST request to log in");
    
    # Requesting that page again, with a username/password but no referrer,
    # is fine
    $m->add_header(Referer => undef);
    $m->post("$baseurl/REST/1.0/ticket/new", [
        user    => 'root',
        pass    => 'password',
        format  => 'l',
    ]);
    $m->content_like(qr{^id: ticket/new}m, "REST request with no referrer, but username/pass");
    
    # And it's still fine without both referer and username and password,
    # because REST is special-cased
    $m->post("$baseurl/REST/1.0/ticket/new", [
        format  => 'l',
    ]);
    $m->content_like(qr{^id: ticket/new}m, "REST request with no referrer or username/pass is special-cased for REST sessions");
    
    # But the REST page can't request normal pages
    $m->get("$baseurl");
    $m->content_lacks("RT at a glance", "Full UI is denied for REST sessions");
    $m->content_contains("This login session belongs to a REST client", "Tells you why");
    $m->warning_like(qr/This login session belongs to a REST client/, "Logs a warning");
    
    undef $m;
    done_testing;
    
    rt-4.2.12/t/web/csrf.t000644 000765 000024 00000016507 12555754775 015056 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test tests => undef;
    
    my $ticket = RT::Ticket->new(RT::CurrentUser->new('root'));
    my ($ok, $msg) = $ticket->Create(Queue => 1, Owner => 'nobody', Subject => 'bad music');
    ok($ok);
    my $other = RT::Test->load_or_create_queue(Name => "Other queue", Disabled => 0);
    my $other_queue_id = $other->id;
    
    my ($baseurl, $m) = RT::Test->started_ok;
    
    my $test_page = "/Ticket/Create.html?Queue=1";
    my $test_path = "/Ticket/Create.html";
    
    ok $m->login, 'logged in';
    
    # valid referer
    $m->add_header(Referer => $baseurl);
    $m->get_ok($test_page);
    $m->content_lacks("Possible cross-site request forgery");
    $m->title_is('Create a new ticket');
    
    # off-site referer BUT provides auth
    $m->add_header(Referer => 'http://example.net');
    $m->get_ok("$test_page&user=root&pass=password");
    $m->content_lacks("Possible cross-site request forgery");
    $m->title_is('Create a new ticket');
    
    # explicitly no referer BUT provides auth
    $m->add_header(Referer => undef);
    $m->get_ok("$test_page&user=root&pass=password");
    $m->content_lacks("Possible cross-site request forgery");
    $m->title_is('Create a new ticket');
    
    # now send a referer from an attacker
    $m->add_header(Referer => 'http://example.net');
    $m->get_ok($test_page);
    $m->content_contains("Possible cross-site request forgery");
    $m->content_contains("If you really intended to visit /Ticket/Create.html");
    $m->content_contains("the Referrer header supplied by your browser (example.net:80) is not allowed");
    $m->title_is('Possible cross-site request forgery');
    
    # reinstate mech's usual header policy
    $m->delete_header('Referer');
    
    # clicking the resume request button gets us to the test page
    $m->follow_link(text_regex => qr{resume your request});
    $m->content_lacks("Possible cross-site request forgery");
    like($m->response->request->uri, qr{^http://[^/]+\Q$test_path\E\?CSRF_Token=\w+$});
    $m->title_is('Create a new ticket');
    
    # try a whitelisted argument from an attacker
    $m->add_header(Referer => 'http://example.net');
    $m->get_ok("/Ticket/Display.html?id=1");
    $m->content_lacks("Possible cross-site request forgery");
    $m->title_is('#1: bad music');
    
    # now a non-whitelisted argument
    $m->get_ok("/Ticket/Display.html?id=1&Action=Take");
    $m->content_contains("Possible cross-site request forgery");
    $m->content_contains("If you really intended to visit /Ticket/Display.html");
    $m->content_contains("the Referrer header supplied by your browser (example.net:80) is not allowed");
    $m->title_is('Possible cross-site request forgery');
    
    $m->delete_header('Referer');
    $m->follow_link(text_regex => qr{resume your request});
    $m->content_lacks("Possible cross-site request forgery");
    like($m->response->request->uri, qr{^http://[^/]+\Q/Ticket/Display.html});
    $m->title_is('#1: bad music');
    $m->content_contains('Owner changed from Nobody to root');
    
    # force mech to never set referer
    $m->add_header(Referer => undef);
    $m->get_ok($test_page);
    $m->content_contains("Possible cross-site request forgery");
    $m->content_contains("If you really intended to visit /Ticket/Create.html");
    $m->content_contains("your browser did not supply a Referrer header");
    $m->title_is('Possible cross-site request forgery');
    
    $m->follow_link(text_regex => qr{resume your request});
    $m->content_lacks("Possible cross-site request forgery");
    is($m->response->redirects, 0, "no redirection");
    like($m->response->request->uri, qr{^http://[^/]+\Q$test_path\E\?CSRF_Token=\w+$});
    $m->title_is('Create a new ticket');
    
    # try sending the wrong csrf token, then the right one
    $m->add_header(Referer => undef);
    $m->get_ok($test_page);
    $m->content_contains("Possible cross-site request forgery");
    $m->content_contains("If you really intended to visit /Ticket/Create.html");
    $m->content_contains("your browser did not supply a Referrer header");
    $m->title_is('Possible cross-site request forgery');
    
    # Sending a wrong CSRF is just a normal request.  We'll make a request
    # with just an invalid token, which means no Queue=, which means
    # Create.html errors out.
    my $link = $m->find_link(text_regex => qr{resume your request});
    (my $broken_url = $link->url) =~ s/(CSRF_Token)=\w+/$1=crud/;
    $m->get_ok($broken_url);
    $m->content_like(qr/Queue\s+could not be loaded/);
    $m->title_is('RT Error');
    $m->warning_like(qr/Queue\s+could not be loaded/);
    
    # The token doesn't work for other pages, or other arguments to the same page.
    $m->add_header(Referer => undef);
    $m->get_ok($test_page);
    $m->content_contains("Possible cross-site request forgery");
    my ($token) = $m->content =~ m{CSRF_Token=(\w+)};
    
    $m->add_header(Referer => undef);
    $m->get_ok("/Admin/Queues/Modify.html?id=new&Name=test&CSRF_Token=$token");
    $m->content_contains("Possible cross-site request forgery");
    $m->content_contains("If you really intended to visit /Admin/Queues/Modify.html");
    $m->content_contains("your browser did not supply a Referrer header");
    $m->title_is('Possible cross-site request forgery');
    
    $m->follow_link(text_regex => qr{resume your request});
    $m->content_lacks("Possible cross-site request forgery");
    $m->title_is('Configuration for queue test');
    
    # Try the same page, but different query parameters, which are blatted by the token
    $m->get_ok("/Ticket/Create.html?Queue=$other_queue_id&CSRF_Token=$token");
    $m->content_lacks("Possible cross-site request forgery");
    $m->title_is('Create a new ticket');
    $m->text_unlike(qr/Queue:\s*Other queue/);
    $m->text_like(qr/Queue:\s*General/);
    
    # Ensure that file uploads work across the interstitial
    $m->delete_header('Referer');
    $m->get_ok($test_page);
    $m->content_contains("Create a new ticket", 'ticket create page');
    $m->form_name('TicketCreate');
    $m->field('Subject', 'Attachments test');
    
    my $logofile = "$RT::StaticPath/images/bpslogo.png";
    open LOGO, "<", $logofile or die "Can't open logo file: $!";
    binmode LOGO;
    my $logo_contents = do {local $/; };
    close LOGO;
    $m->field('Attach',  $logofile);
    
    # Lose the referer before the POST
    $m->add_header(Referer => undef);
    $m->submit;
    $m->content_contains("Possible cross-site request forgery");
    $m->content_contains("If you really intended to visit /Ticket/Create.html");
    $m->follow_link(text_regex => qr{resume your request});
    $m->content_contains('Download bpslogo.png', 'page has file name');
    $m->follow_link_ok({text => "Download bpslogo.png"});
    is($m->content, $logo_contents, "Binary content matches");
    
    
    # now try self-service with CSRF
    my $user = RT::User->new(RT->SystemUser);
    $user->Create(Name => "SelfService", Password => "chops", Privileged => 0);
    
    $m = RT::Test::Web->new;
    $m->get_ok("$baseurl/index.html?user=SelfService&pass=chops");
    $m->title_is("Open tickets", "got self-service interface");
    $m->content_contains("My open tickets", "got self-service interface");
    
    # post without referer
    $m->add_header(Referer => undef);
    $m->get_ok("/SelfService/Create.html?Queue=1");
    $m->content_contains("Possible cross-site request forgery");
    $m->content_contains("If you really intended to visit /SelfService/Create.html");
    $m->content_contains("your browser did not supply a Referrer header");
    $m->title_is('Possible cross-site request forgery');
    
    $m->follow_link(text_regex => qr{resume your request});
    $m->content_lacks("Possible cross-site request forgery");
    is($m->response->redirects, 0, "no redirection");
    like($m->response->request->uri, qr{^http://[^/]+\Q/SelfService/Create.html\E\?CSRF_Token=\w+$});
    $m->title_is('Create a ticket');
    $m->content_contains('Describe the issue below:');
    
    undef $m;
    done_testing;
    rt-4.2.12/t/web/current_user_outdated_email.t000644 000765 000024 00000002242 12555754775 021670 0ustar00sartakstaff000000 000000 
    use strict;
    use warnings;
    use RT::Test tests => 39;
    
    my ( $url, $m ) = RT::Test->started_ok;
    
    $m->login();
    
    my @links = (
        '/',                                '/Ticket/Create.html?Queue=1',
        '/SelfService/Create.html?Queue=1', '/m/ticket/create?Queue=1'
    );
    
    my $root = RT::Test->load_or_create_user( Name => 'root' );
    ok( $root->id, 'loaded root' );
    is( $root->EmailAddress, 'root@localhost', 'default root email' );
    
    for my $link (@links) {
        $m->get_ok($link);
        $m->content_contains( '"root@localhost"', "default email in $link" );
    }
    
    $root->SetEmailAddress('foo@example.com');
    is( $root->EmailAddress, 'foo@example.com', 'changed to foo@example.com' );
    
    for my $link (@links) {
        $m->get_ok($link);
        $m->content_lacks( '"root@localhost"', "no default email in $link" );
        $m->content_contains( '"foo@example.com"', "new email in $link" );
    }
    
    $root->SetEmailAddress('root@localhost');
    is( $root->EmailAddress, 'root@localhost', 'changed back to root@localhost' );
    
    for my $link (@links) {
        $m->get_ok($link);
        $m->content_lacks( '"foo@example.com"', "no previous email in $link" );
        $m->content_contains( '"root@localhost"', "default email in $link" );
    }
    
    rt-4.2.12/t/web/custom_frontpage.t000644 000765 000024 00000007367 12555754775 017504 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test tests => 19;
    my ($baseurl, $m) = RT::Test->started_ok;
    
    my $url = $m->rt_base_url;
    
    my $user_obj = RT::User->new(RT->SystemUser);
    my ($ret, $msg) = $user_obj->LoadOrCreateByEmail('customer@example.com');
    ok($ret, 'ACL test user creation');
    $user_obj->SetName('customer');
    $user_obj->SetPrivileged(1);
    ($ret, $msg) = $user_obj->SetPassword('customer');
    $user_obj->PrincipalObj->GrantRight(Right => 'LoadSavedSearch');
    $user_obj->PrincipalObj->GrantRight(Right => 'EditSavedSearches');
    $user_obj->PrincipalObj->GrantRight(Right => 'CreateSavedSearch');
    $user_obj->PrincipalObj->GrantRight(Right => 'ModifySelf');
    
    ok $m->login( customer => 'customer' ), "logged in";
    
    $m->get ( $url."Search/Build.html");
    
    #create a saved search
    $m->form_name ('BuildQuery');
    
    $m->field ( "ValueOfAttachment" => 'stupid');
    $m->field ( "SavedSearchDescription" => 'stupid tickets');
    $m->click_button (name => 'SavedSearchSave');
    
    $m->get ( $url.'Prefs/MyRT.html' );
    $m->content_contains('stupid tickets', 'saved search listed in rt at a glance items');
    
    ok $m->login('root', 'password', logout => 1), 'we did log in as root';
    
    $m->get ( $url.'Prefs/MyRT.html' );
    $m->form_name ('SelectionBox-body');
    # can't use submit form for mutli-valued select as it uses set_fields
    $m->field ('body-Selected' => ['component-QuickCreate', 'system-Unowned Tickets', 'system-My Tickets']);
    $m->click_button (name => 'remove');
    $m->form_name ('SelectionBox-body');
    #$m->click_button (name => 'body-Save');
    $m->get ( $url );
    $m->content_lacks ('highest priority tickets', 'remove everything from body pane');
    
    $m->get ( $url.'Prefs/MyRT.html' );
    $m->form_name ('SelectionBox-body');
    $m->field ('body-Available' => ['component-QuickCreate', 'system-Unowned Tickets', 'system-My Tickets']);
    $m->click_button (name => 'add');
    
    $m->form_name ('SelectionBox-body');
    $m->field ('body-Selected' => ['component-QuickCreate']);
    $m->click_button (name => 'movedown');
    
    $m->form_name ('SelectionBox-body');
    $m->click_button (name => 'movedown');
    
    $m->form_name ('SelectionBox-body');
    #$m->click_button (name => 'body-Save');
    $m->get ( $url );
    $m->content_contains('highest priority tickets', 'adds them back');
    
    
    #create a saved search with special chars
    $m->get( $url . "Search/Build.html" );
    $m->form_name('BuildQuery');
    $m->field( "ValueOfAttachment"      => 'stupid' );
    $m->field( "SavedSearchDescription" => 'special chars [test] [_1] ~[_1~]' );
    $m->click_button( name => 'SavedSearchSave' );
    my ($name) = $m->content =~ /value="(RT::User-\d+-SavedSearch-\d+)"/;
    ok( $name, 'saved search name' );
    $m->get( $url . 'Prefs/MyRT.html' );
    $m->content_contains( 'special chars [test] [_1] ~[_1~]',
        'saved search listed in rt at a glance items' );
    
    $m->get( $url . 'Prefs/MyRT.html' );
    $m->form_name('SelectionBox-body');
    $m->field(
        'body-Available' => [
            'component-QuickCreate',
            'system-Unowned Tickets',
            'system-My Tickets',
            'saved-' . $name,
        ]
    );
    $m->click_button( name => 'add' );
    
    $m->get($url);
    $m->content_like( qr/special chars \[test\] \d+ \[_1\]/,
        'special chars in titlebox' );
    
    
    # Edit a system saved search to contain "[more]"
    {
        my $search = RT::Attribute->new( RT->SystemUser );
        $search->LoadByNameAndObject( Name => 'Search - My Tickets', Object => RT->System );
        my ($id, $desc) = ($search->id, RT->SystemUser->loc($search->Description, '"N"'));
        ok $id, 'loaded search attribute';
    
        $m->get_ok($url);
        $m->follow_link_ok({ url_regex => qr"Prefs/Search\.html\?name=.+?Attribute-$id" }, 'Edit link');
        $m->content_contains($desc, "found description: $desc");
    
        ok +($search->SetDescription( $search->Description . " [more]" ));
    
        $m->get_ok($m->uri); # "reload_ok"
        $m->content_contains($desc . " [more]", "found description: $desc");
    }
    
    rt-4.2.12/t/web/custom_search.t000644 000765 000024 00000004744 12555754775 016760 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test tests => 13;
    my ($baseurl, $m) = RT::Test->started_ok;
    my $url = $m->rt_base_url;
    
    # reset preferences for easier test?
    
    
    
    my $t = RT::Ticket->new(RT->SystemUser);
    $t->Create(Subject => 'for custom search'.$$, Queue => 'general',
               Owner => 'root', Requestor => 'customsearch@localhost');
    ok(my $id = $t->id, 'created ticket for custom search');
    
    ok $m->login, 'logged in';
    
    my $t_link = $m->find_link( text => "for custom search".$$ );
    like ($t_link->url, qr/$id/, 'link to the ticket we created');
    
    $m->content_lacks ('customsearch@localhost', 'requestor not displayed ');
    $m->get ( $url.'Prefs/MyRT.html' );
    my $cus_hp = $m->find_link( text => "My Tickets" );
    my $cus_qs = $m->find_link( text => "Quick search" );
    $m->get ($cus_hp);
    $m->content_contains('highest priority tickets');
    
    # add Requestor to the fields
    $m->form_name ('BuildQuery');
    # can't use submit form for mutli-valued select as it uses set_fields
    $m->field (SelectDisplayColumns => ['Requestors']);
    $m->click_button (name => 'AddCol') ;
    
    $m->form_name ('BuildQuery');
    $m->click_button (name => 'Save');
    
    $m->get( $url );
    $m->content_contains ('customsearch@localhost', 'requestor now displayed ');
    
    
    # now remove Requestor from the fields
    $m->get ($cus_hp);
    
    $m->form_name ('BuildQuery');
    
    my $cdc = $m->current_form->find_input('CurrentDisplayColumns');
    my ($requestor_value) = grep { /Requestor/ } $cdc->possible_values;
    ok($requestor_value, "got the requestor value");
    
    $m->field (CurrentDisplayColumns => $requestor_value);
    $m->click_button (name => 'RemoveCol') ;
    
    $m->form_name ('BuildQuery');
    $m->click_button (name => 'Save');
    
    $m->get( $url );
    $m->content_lacks ('customsearch@localhost', 'requestor not displayed ');
    
    
    # try to disable General from quick search
    
    # Note that there's a small problem in the current implementation,
    # since ticked quese are wanted, we do the invesrsion.  So any
    # queue added during the quicksearch setting will be unticked.
    my $nlinks = $#{$m->find_all_links( text => "General" )};
    $m->get ($cus_qs);
    $m->form_name ('Preferences');
    $m->untick('Want-General', '1');
    $m->click_button (name => 'Save');
    
    $m->get( $url );
    is ($#{$m->find_all_links( text => "General" )}, $nlinks - 1,
        'General gone from quicksearch list');
    
    # get it back
    $m->get ($cus_qs);
    $m->form_name ('Preferences');
    $m->tick('Want-General', '1');
    $m->click_button (name => 'Save');
    
    $m->get( $url );
    is ($#{$m->find_all_links( text => "General" )}, $nlinks,
        'General back in quicksearch list');
    rt-4.2.12/t/web/dashboards-basics.t000644 000765 000024 00000025122 12555754775 017466 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test tests => 122;
    my ($baseurl, $m) = RT::Test->started_ok;
    
    my $url = $m->rt_base_url;
    
    my $user_obj = RT::User->new(RT->SystemUser);
    my ($ret, $msg) = $user_obj->LoadOrCreateByEmail('customer@example.com');
    ok($ret, 'ACL test user creation');
    $user_obj->SetName('customer');
    $user_obj->SetPrivileged(1);
    ($ret, $msg) = $user_obj->SetPassword('customer');
    $user_obj->PrincipalObj->GrantRight(Right => 'ModifySelf');
    my $currentuser = RT::CurrentUser->new($user_obj);
    
    my $onlooker = RT::User->new(RT->SystemUser);
    ($ret, $msg) = $onlooker->LoadOrCreateByEmail('onlooker@example.com');
    ok($ret, 'ACL test user creation');
    $onlooker->SetName('onlooker');
    $onlooker->SetPrivileged(1);
    ($ret, $msg) = $onlooker->SetPassword('onlooker');
    
    my $queue = RT::Queue->new(RT->SystemUser);
    $queue->Create(Name => 'SearchQueue'.$$);
    
    for my $user ($user_obj, $onlooker) {
        $user->PrincipalObj->GrantRight(Right => 'ModifySelf');
        for my $right (qw/SeeQueue ShowTicket OwnTicket/) {
            $user->PrincipalObj->GrantRight(Right => $right, Object => $queue);
        }
    }
    
    ok $m->login(customer => 'customer'), "logged in";
    
    $m->get_ok($url."Dashboards/index.html");
    $m->content_lacks('New', 
                      "No 'new dashboard' link because we have no CreateOwnDashboard");
    
    $m->no_warnings_ok;
    
    $m->get_ok($url."Dashboards/Modify.html?Create=1");
    $m->content_contains("Permission Denied");
    $m->content_lacks("Save Changes");
    
    $m->warning_like(qr/Permission Denied/, "got a permission denied warning");
    
    $user_obj->PrincipalObj->GrantRight(Right => 'ModifyOwnDashboard', Object => $RT::System);
    
    # Modify itself is no longer good enough, you need Create
    $m->get_ok($url."Dashboards/Modify.html?Create=1");
    $m->content_contains("Permission Denied");
    $m->content_lacks("Save Changes");
    
    $m->warning_like(qr/Permission Denied/, "got a permission denied warning");
    
    $user_obj->PrincipalObj->GrantRight(Right => 'CreateOwnDashboard', Object => $RT::System);
    
    $m->get_ok($url."Dashboards/Modify.html?Create=1");
    $m->content_lacks("Permission Denied");
    $m->content_contains("Create");
    
    $m->get_ok($url."Dashboards/index.html");
    $m->content_contains("New", "'New' link because we now have ModifyOwnDashboard");
    $m->follow_link_ok({ id => 'home-dashboard_create'});
    $m->form_name('ModifyDashboard');
    $m->field("Name" => 'different dashboard');
    $m->content_lacks('Delete', "Delete button hidden because we are creating");
    $m->click_button(value => 'Create');
    $m->content_contains("Saved dashboard different dashboard");
    $user_obj->PrincipalObj->GrantRight(Right => 'SeeOwnDashboard', Object => $RT::System);
    $m->get($url."Dashboards/index.html");
    $m->follow_link_ok({ text => 'different dashboard'});
    $m->content_lacks("Permission Denied", "we now have SeeOwnDashboard");
    $m->content_lacks('Delete', "Delete button hidden because we lack DeleteOwnDashboard");
    
    $m->get_ok($url."Dashboards/index.html");
    $m->content_contains("different dashboard", "we now have SeeOwnDashboard");
    $m->content_lacks("Permission Denied");
    
    $m->follow_link_ok({text => "different dashboard"});
    $m->content_contains("Basics");
    $m->content_contains("Content");
    $m->content_lacks("Subscription", "we don't have the SubscribeDashboard right");
    
    $m->follow_link_ok({text => "Basics"});
    $m->content_contains("Modify the dashboard different dashboard");
    
    $m->follow_link_ok({text => "Content"});
    $m->content_contains("Modify the content of dashboard different dashboard");
    my $form = $m->form_name('Dashboard-Searches-body');
    my @input = $form->find_input('Searches-body-Available');
    my ($unowned) =
      map { ( $_->possible_values )[1] }
      grep { ( $_->value_names )[1] =~ /Saved Search: Unowned Tickets/ } @input;
    $form->value('Searches-body-Available' => $unowned );
    $m->click_button(name => 'add');
    $m->content_contains("Dashboard updated");
    
    my $dashboard = RT::Dashboard->new($currentuser);
    my ($id) = $m->content =~ /name="id" value="(\d+)"/;
    ok($id, "got an ID, $id");
    $dashboard->LoadById($id);
    is($dashboard->Name, "different dashboard");
    
    is($dashboard->Privacy, 'RT::User-' . $user_obj->Id, "correct privacy");
    is($dashboard->PossibleHiddenSearches, 0, "all searches are visible");
    
    my @searches = $dashboard->Searches;
    is(@searches, 1, "one saved search in the dashboard");
    like($searches[0]->Name, qr/newest unowned tickets/, "correct search name");
    
    $form = $m->form_name('Dashboard-Searches-body');
    @input = $form->find_input('Searches-body-Available');
    my ($my_tickets) =
      map { ( $_->possible_values )[1] }
      grep { ( $_->value_names )[1] =~ /Saved Search: My Tickets/ } @input;
    $form->value('Searches-body-Available' => $my_tickets );
    $m->click_button(name => 'add');
    $m->content_contains("Dashboard updated");
    
    RT::Record->FlushCache if RT::Record->can('FlushCache');
    $dashboard = RT::Dashboard->new($currentuser);
    $dashboard->LoadById($id);
    
    @searches = $dashboard->Searches;
    is(@searches, 2, "two saved searches in the dashboard");
    like($searches[0]->Name, qr/newest unowned tickets/, "correct existing search name");
    like($searches[1]->Name, qr/highest priority tickets I own/, "correct new search name");
    
    my $ticket = RT::Ticket->new(RT->SystemUser);
    $ticket->Create(
        Queue     => $queue->Id,
        Requestor => [ $user_obj->Name ],
        Owner     => $user_obj,
        Subject   => 'dashboard test',
    );
    
    $m->follow_link_ok({id => 'page-show'});
    $m->content_contains("50 highest priority tickets I own");
    $m->content_contains("50 newest unowned tickets");
    $m->content_unlike( qr/Bookmarked Tickets.*Bookmarked Tickets/s,
        'only dashboard queries show up' );
    $m->content_contains("dashboard test", "ticket subject");
    
    $m->get_ok("/Dashboards/$id/This fragment left intentionally blank");
    $m->content_contains("50 highest priority tickets I own");
    $m->content_contains("50 newest unowned tickets");
    $m->content_unlike( qr/Bookmarked Tickets.*Bookmarked Tickets/s,
        'only dashboard queries show up' );
    $m->content_contains("dashboard test", "ticket subject");
    
    $m->get_ok("/Dashboards/Subscription.html?id=$id");
    $m->form_name('SubscribeDashboard');
    $m->click_button(name => 'Save');
    $m->content_contains("Permission Denied");
    $m->warning_like(qr/Unable to subscribe to dashboard.*Permission Denied/, "got a permission denied warning when trying to subscribe to a dashboard");
    
    $user_obj->Attributes->RedoSearch;
    is($user_obj->Attributes->Named('Subscription'), 0, "no subscriptions");
    
    $user_obj->PrincipalObj->GrantRight(Right => 'SubscribeDashboard', Object => $RT::System);
    
    $m->get_ok("/Dashboards/Modify.html?id=$id");
    $m->follow_link_ok({text => "Subscription"});
    $m->content_contains("Subscribe to dashboard different dashboard");
    $m->content_contains("Unowned Tickets");
    $m->content_contains("My Tickets");
    $m->content_unlike( qr/Bookmarked Tickets.*Bookmarked Tickets/s,
        'only dashboard queries show up' );
    
    $m->form_name('SubscribeDashboard');
    $m->click_button(name => 'Save');
    $m->content_lacks("Permission Denied");
    $m->content_contains("Subscribed to dashboard different dashboard");
    
    $user_obj->Attributes->RedoSearch;
    is($user_obj->Attributes->Named('Subscription'), 1, "we have a subscription");
    
    $m->get_ok("/Dashboards/Modify.html?id=$id");
    $m->follow_link_ok({text => "Subscription"});
    $m->content_contains("Modify the subscription to dashboard different dashboard");
    
    $m->get_ok("/Dashboards/Modify.html?id=$id&Delete=1");
    $m->content_contains("Permission Denied", "unable to delete dashboard because we lack DeleteOwnDashboard");
    
    $m->warning_like(qr/Couldn't delete dashboard.*Permission Denied/, "got a permission denied warning when trying to delete the dashboard");
    
    $user_obj->PrincipalObj->GrantRight(Right => 'DeleteOwnDashboard', Object => $RT::System);
    
    $m->get_ok("/Dashboards/Modify.html?id=$id");
    $m->content_contains('Delete', "Delete button shows because we have DeleteOwnDashboard");
    
    $m->form_name('ModifyDashboard');
    $m->click_button(name => 'Delete');
    $m->content_contains("Deleted dashboard");
    
    $m->get("/Dashboards/Modify.html?id=$id");
    $m->content_lacks("different dashboard", "dashboard was deleted");
    $m->content_contains("Failed to load dashboard $id");
    
    $m->warning_like(qr/Failed to load dashboard.*Couldn't find row/, "the dashboard was deleted");
    
    $user_obj->PrincipalObj->GrantRight(Right => "SuperUser", Object => $RT::System);
    
    # now test that we warn about searches others can't see
    # first create a personal saved search...
    $m->get_ok($url."Search/Build.html");
    $m->follow_link_ok({text => 'Advanced'});
    $m->form_with_fields('Query');
    $m->field(Query => "id > 0");
    $m->submit;
    
    $m->form_with_fields('SavedSearchDescription');
    $m->field(SavedSearchDescription => "personal search");
    $m->click_button(name => "SavedSearchSave");
    
    # then the system-wide dashboard
    $m->get_ok($url."Dashboards/Modify.html?Create=1");
    
    $m->form_name('ModifyDashboard');
    $m->field("Name" => 'system dashboard');
    $m->field("Privacy" => 'RT::System-1');
    $m->content_lacks('Delete', "Delete button hidden because we are creating");
    $m->click_button(value => 'Create');
    $m->content_lacks("No permission to create dashboards");
    $m->content_contains("Saved dashboard system dashboard");
    
    $m->follow_link_ok({id => 'page-content'});
    
    $form = $m->form_name('Dashboard-Searches-body');
    @input = $form->find_input('Searches-body-Available');
    my ($personal) =
      map { ( $_->possible_values )[1] }
      grep { ( $_->value_names )[1] =~ /Saved Search: personal search/ } @input;
    $form->value('Searches-body-Available' => $personal );
    $m->click_button(name => 'add');
    $m->content_contains("Dashboard updated");
    
    $m->content_contains("The following queries may not be visible to all users who can see this dashboard.");
    
    $m->follow_link_ok({id => 'page-show'});
    $m->content_contains("personal search", "saved search shows up");
    $m->content_contains("dashboard test", "matched ticket shows up");
    
    # make sure the onlooker can't see the search...
    $onlooker->PrincipalObj->GrantRight(Right => 'SeeDashboard', Object => $RT::System);
    
    my $omech = RT::Test::Web->new;
    ok $omech->login(onlooker => 'onlooker'), "logged in";
    $omech->get_ok("/Dashboards");
    
    $omech->follow_link_ok({text => 'system dashboard'});
    $omech->content_lacks("personal search", "saved search doesn't show up");
    $omech->content_lacks("dashboard test", "matched ticket doesn't show up");
    
    $omech->warning_like(qr/User .* tried to load container user /, "can't see other users' personal searches");
    
    # make sure that navigating to dashboard pages with bad IDs throws an error
    my ($bad_id) = $personal =~ /^search-(\d+)/;
    
    for my $page (qw/Modify Queries Render Subscription/) {
        $m->get("/Dashboards/$page.html?id=$bad_id");
        $m->content_like(qr/Couldn.+t load dashboard $bad_id: Invalid object type/);
        $m->warning_like(qr/Couldn't load dashboard $bad_id: Invalid object type/);
    }
    
    rt-4.2.12/t/web/dashboards-deleted-saved-search.t000644 000765 000024 00000004772 12555754775 022203 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test tests => 20;
    my ( $url, $m ) = RT::Test->started_ok;
    ok( $m->login, 'logged in' );
    
    # create a saved search
    $m->get_ok( $url . "/Search/Build.html?Query=" . 'id=1' );
    
    $m->submit_form(
        form_name => 'BuildQuery',
        fields    => { SavedSearchDescription => 'foo', },
        button    => 'SavedSearchSave',
    );
    
    my ( $search_uri, $user_id, $search_id ) =
      $m->content =~ /value="(RT::User-(\d+)-SavedSearch-(\d+))"/;
    $m->submit_form(
        form_name => 'BuildQuery',
        fields    => { SavedSearchLoad => $search_uri },
        button    => 'SavedSearchSave',
    );
    
    $m->content_like( qr/name="SavedSearchDelete"\s+value="Delete"/,
        'found Delete button' );
    $m->content_like(
        qr/name="SavedSearchDescription"\s+value="foo"/,
        'found Description input with the value filled'
    );
    
    # create a dashboard with the created search
    
    $m->get_ok( $url . "/Dashboards/Modify.html?Create=1" );
    $m->submit_form(
        form_name => 'ModifyDashboard',
        fields    => { Name => 'bar' },
    );
    
    $m->content_contains('Saved dashboard bar', 'dashboard saved' );
    my $dashboard_queries_link = $m->find_link( text_regex => qr/Content/ );
    my ( $dashboard_id ) = $dashboard_queries_link->url =~ /id=(\d+)/;
    
    $m->get_ok( $url . "/Dashboards/Queries.html?id=$dashboard_id" );
    
    $m->content_lacks( 'value="Update"', 'no update button' );
    
    $m->submit_form(
        form_name => 'Dashboard-Searches-body',
        fields =>
          { 'Searches-body-Available' => "search-$search_id-RT::User-$user_id" },
        button => 'add',
    );
    
    $m->content_contains('Dashboard updated', 'added search foo to dashboard bar' );
    
    # delete the created search
    
    $m->get_ok( $url . "/Search/Build.html?Query=" . 'id=1' );
    $m->submit_form(
        form_name => 'BuildQuery',
        fields    => { SavedSearchLoad => $search_uri },
    );
    $m->submit_form(
        form_name => 'BuildQuery',
        button    => 'SavedSearchDelete',
    );
    
    $m->content_lacks( $search_uri, 'deleted search foo' );
    
    # here is what we really want to test
    
    $m->get_ok( $url . "/Dashboards/Queries.html?id=$dashboard_id" );
    $m->content_contains('Deleted queries', 'found deleted message' );
    
    # Update button shows so we can update the deleted search easily
    $m->content_contains( 'value="Update"', 'found update button' );
    
    $m->submit_form(
        form_name => 'Dashboard-Searches-body',
        button    => 'update',
    );
    
    $m->content_lacks('Deleted queries', 'deleted message is gone' );
    $m->content_lacks( 'value="Update"', 'update button is gone too' );
    
    $m->get_warnings; # we'll get a lot of warnings because the deleted search
    
    rt-4.2.12/t/web/dashboards-groups.t000644 000765 000024 00000020560 12555754775 017542 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test nodata => 1, tests => 64;
    my ($baseurl, $m) = RT::Test->started_ok;
    
    my $url = $m->rt_base_url;
    
    # create user and queue
    my $user_obj = RT::User->new(RT->SystemUser);
    my ($ok, $msg) = $user_obj->LoadOrCreateByEmail('customer@example.com');
    ok($ok, 'ACL test user creation');
    $user_obj->SetName('customer');
    $user_obj->SetPrivileged(1);
    ($ok, $msg) = $user_obj->SetPassword('customer');
    $user_obj->PrincipalObj->GrantRight(Right => 'ModifySelf');
    my $currentuser = RT::CurrentUser->new($user_obj);
    
    my $queue = RT::Queue->new(RT->SystemUser);
    $queue->Create(Name => 'SearchQueue'.$$);
    
    $user_obj->PrincipalObj->GrantRight(Right => $_, Object => $queue)
        for qw/SeeQueue ShowTicket OwnTicket/;
    
    # grant the user all these rights so we can make sure that the group rights
    # are checked and not these as well
    $user_obj->PrincipalObj->GrantRight(Right => $_, Object => $RT::System)
        for qw/SubscribeDashboard CreateOwnDashboard SeeOwnDashboard ModifyOwnDashboard DeleteOwnDashboard/;
    # create and test groups (outer < inner < user)
    my $inner_group = RT::Group->new(RT->SystemUser);
    ($ok, $msg) = $inner_group->CreateUserDefinedGroup(Name => "inner", Description => "inner group");
    ok($ok, "created inner group: $msg");
    
    my $outer_group = RT::Group->new(RT->SystemUser);
    ($ok, $msg) = $outer_group->CreateUserDefinedGroup(Name => "outer", Description => "outer group");
    ok($ok, "created outer group: $msg");
    
    ($ok, $msg) = $outer_group->AddMember($inner_group->PrincipalId);
    ok($ok, "added inner as a member of outer: $msg");
    
    ($ok, $msg) = $inner_group->AddMember($user_obj->PrincipalId);
    ok($ok, "added user as a member of member: $msg");
    
    ok($outer_group->HasMember($inner_group->PrincipalId), "outer has inner");
    ok(!$outer_group->HasMember($user_obj->PrincipalId), "outer doesn't have user directly");
    ok($outer_group->HasMemberRecursively($inner_group->PrincipalId), "outer has inner recursively");
    ok($outer_group->HasMemberRecursively($user_obj->PrincipalId), "outer has user recursively");
    
    ok(!$inner_group->HasMember($outer_group->PrincipalId), "inner doesn't have outer");
    ok($inner_group->HasMember($user_obj->PrincipalId), "inner has user");
    ok(!$inner_group->HasMemberRecursively($outer_group->PrincipalId), "inner doesn't have outer, even recursively");
    ok($inner_group->HasMemberRecursively($user_obj->PrincipalId), "inner has user recursively");
    
    ok $m->login(customer => 'customer'), "logged in";
    
    
    $m->follow_link_ok({ id => 'home-dashboard_create'});
    $m->form_name('ModifyDashboard');
    is_deeply([$m->current_form->find_input('Privacy')->possible_values], ["RT::User-" . $user_obj->Id], "the only selectable privacy is user");
    $m->content_lacks('Delete', "Delete button hidden because we are creating");
    
    $user_obj->PrincipalObj->GrantRight(Right => 'CreateGroupDashboard', Object => $inner_group);
    
    $m->follow_link_ok({ id => 'home-dashboard_create'});
    $m->form_name('ModifyDashboard');
    is_deeply([$m->current_form->find_input('Privacy')->possible_values], ["RT::User-" . $user_obj->Id, "RT::Group-" . $inner_group->Id], "the only selectable privacies are user and inner group (not outer group)");
    $m->field("Name" => 'broken dashboard');
    $m->field("Privacy" => "RT::Group-" . $inner_group->Id);
    $m->content_lacks('Delete', "Delete button hidden because we are creating");
    $m->click_button(value => 'Create');
    $m->content_contains("saved", "we lack SeeGroupDashboard, so we end up back at the index.");
    
    $user_obj->PrincipalObj->GrantRight(
        Right  => 'SeeGroupDashboard',
        Object => $inner_group,
    );
    $m->follow_link_ok({ id => 'home-dashboard_create'});
    $m->form_name('ModifyDashboard');
    $m->field("Name" => 'inner dashboard');
    $m->field("Privacy" => "RT::Group-" . $inner_group->Id);
    $m->click_button(value => 'Create');
    $m->content_lacks("Permission Denied", "we now have SeeGroupDashboard");
    $m->content_contains("Saved dashboard inner dashboard");
    $m->content_lacks('Delete', "Delete button hidden because we lack DeleteDashboard");
    
    my $dashboard = RT::Dashboard->new($currentuser);
    my ($id) = $m->content =~ /name="id" value="(\d+)"/;
    ok($id, "got an ID, $id");
    $dashboard->LoadById($id);
    is($dashboard->Name, "inner dashboard");
    
    is($dashboard->Privacy, 'RT::Group-' . $inner_group->Id, "correct privacy");
    is($dashboard->PossibleHiddenSearches, 0, "all searches are visible");
    
    
    $m->get_ok("/Dashboards/Modify.html?id=$id");
    $m->content_contains("inner dashboard", "we now have SeeGroupDashboard right");
    $m->content_lacks("Permission Denied");
    $m->content_contains('Subscription', "Subscription link not hidden because we have SubscribeDashboard");
    
    
    $m->get_ok("/Dashboards/index.html");
    $m->content_contains("inner dashboard", "We can see the inner dashboard from the UI");
    
    $m->get_ok("/Prefs/DashboardsInMenu.html");
    $m->content_contains("inner dashboard", "Can also see it in the menu options");
    
    my ($group) = grep {$_->isa("RT::Group") and $_->Id == $inner_group->Id}
        RT::Dashboard->new($currentuser)->_PrivacyObjects;
    ok($group, "Found the group in  the privacy objects list");
    
    my @loading = map {ref($_)."-".$_->Id} RT::Dashboard->new($currentuser)->ObjectsForLoading;
    is_deeply(
        \@loading,
        ["RT::User-".$user_obj->Id, "RT::Group-".$inner_group->Id],
        "We can load from ourselves (SeeOwnDashboard) and a group we are with SeeGroupDashboard"
    );
    
    # If you are granted SeeGroupDashboard globally, you can only see
    # dashboards in groups you are in.
    $user_obj->PrincipalObj->RevokeRight(
        Right  => 'SeeGroupDashboard',
        Object => $inner_group,
    );
    $user_obj->PrincipalObj->GrantRight(
        Right  => 'SeeGroupDashboard',
        Object => RT->System,
    );
    $m->get_ok("/Dashboards/index.html");
    $m->content_contains("inner dashboard", "Having SeeGroupDashboard gobally is fine for groups you are in");
    @loading = map {ref($_)."-".$_->Id} RT::Dashboard->new($currentuser)->ObjectsForLoading;
    is_deeply(
        \@loading,
        ["RT::User-".$user_obj->Id, "RT::Group-".$inner_group->Id],
        "SeeGroupDashboard globally still works for groups you are in"
    );
    
    $inner_group->DeleteMember($user_obj->PrincipalObj->Id);
    ok(!$outer_group->HasMemberRecursively($user_obj->PrincipalId), "outer no longer has user recursively");
    ok(!$inner_group->HasMemberRecursively($user_obj->PrincipalId), "inner no longer has user recursively");
    $m->get_ok("/Dashboards/index.html");
    $m->content_lacks("inner dashboard", "But global SeeGroupDashboard isn't enough for other groups");
    $m->no_warnings_ok;
    @loading = map {ref($_)."-".$_->Id} RT::Dashboard->new($currentuser)->ObjectsForLoading;
    is_deeply(
        \@loading,
        ["RT::User-".$user_obj->Id],
        "We only have our SeeOwnDashboard right, as we are no longer in inner"
    );
    
    # Similarly, if you're a SuperUser, you still only see dashboards for
    # groups you belong to
    $user_obj->PrincipalObj->RevokeRight(
        Right  => 'SeeGroupDashboard',
        Object => RT->System,
    );
    $user_obj->PrincipalObj->GrantRight(
        Right  => 'SuperUser',
        Object => RT->System,
    );
    $m->get_ok("/Dashboards/index.html");
    $m->content_lacks("inner dashboard", "Superuser can't see dashboards in groups they're not in");
    @loading = map {ref($_)."-".$_->Id} RT::Dashboard->new($currentuser)->ObjectsForLoading;
    is_deeply(
        \@loading,
        ["RT::User-".$user_obj->Id, "RT::System-1"],
        "We pick up the system-level SeeDashboard right from superuser"
    );
    @loading = map {ref($_)."-".$_->Id} RT::Dashboard->new($currentuser)->ObjectsForLoading(IncludeSuperuserGroups => 0);
    is_deeply(
        \@loading,
        ["RT::User-".$user_obj->Id, "RT::System-1"],
        "IncludeSuperusers only cuts out _group_ dashboard objects for loading, not user and system ones"
    );
    
    $inner_group->AddMember($user_obj->PrincipalId);
    $m->get_ok("/Dashboards/index.html");
    $m->content_contains("inner dashboard", "Superuser can see dashboards in groups they are in");
    @loading = map {ref($_)."-".$_->Id} RT::Dashboard->new($currentuser)->ObjectsForLoading;
    is_deeply(
        \@loading,
        ["RT::User-".$user_obj->Id, "RT::Group-".$inner_group->Id, "RT::System-1"],
        "Becoming a member of the group makes it a possibility"
    );
    @loading = map {ref($_)."-".$_->Id} RT::Dashboard->new($currentuser)->ObjectsForLoading(IncludeSuperuserGroups => 0);
    is_deeply(
        \@loading,
        ["RT::User-".$user_obj->Id, "RT::System-1"],
        "But only via superuser"
    );
    
    $m->get_ok("/Dashboards/index.html");
    $m->content_contains("inner dashboard", "The dashboards list includes superuser rights");
    $m->get_ok("/Prefs/DashboardsInMenu.html");
    $m->content_lacks("inner dashboard", "But the menu skips them");
    rt-4.2.12/t/web/dashboards-in-menu.t000644 000765 000024 00000006145 12555754775 017576 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test tests => 31;
    my ($baseurl, $m) = RT::Test->started_ok;
    
    my $system_foo = RT::Dashboard->new($RT::SystemUser);
    $system_foo->Save(
        Name    => 'system foo',
        Privacy => 'RT::System-' . $RT::System->id,
    );
    
    my $system_bar = RT::Dashboard->new($RT::SystemUser);
    $system_bar->Save(
        Name    => 'system bar',
        Privacy => 'RT::System-' . $RT::System->id,
    );
    
    ok( $m->login(), "logged in" );
    
    diag "global setting";
    # in case "RT at a glance" contains dashboards stuff.
    $m->get_ok( $baseurl . "/Search/Simple.html" );
    ok( !$m->find_link( text => 'system foo' ), 'no system foo link' );
    $m->get_ok( $baseurl."/Admin/Global/DashboardsInMenu.html");
    
    my $form_name = 'SelectionBox-dashboards_in_menu';
    $m->form_name($form_name);
    
    $m->field('dashboards_in_menu-Available' => [$system_foo->id],);
    $m->click_button(name => 'add');
    $m->content_contains('Global dashboards in menu saved.', 'saved');
    
    $m->logout;
    ok( $m->login(), "relogged in" );
    
    $m->get_ok( $baseurl . "/Search/Simple.html" );
    $m->follow_link_ok( { text => 'system foo' }, 'follow system foo link' );
    $m->title_is( 'system foo Dashboard', 'got system foo dashboard page' );
    
    diag "setting in admin users";
    my $root = RT::CurrentUser->new( $RT::SystemUser );
    ok( $root->Load('root') );
    my $self_foo = RT::Dashboard->new($root);
    $self_foo->Save( Name => 'self foo', Privacy => 'RT::User-' . $root->id );
    my $self_bar = RT::Dashboard->new($root);
    $self_bar->Save( Name => 'self bar', Privacy => 'RT::User-' . $root->id );
    
    ok( !$m->find_link( text => 'self foo' ), 'no self foo link' );
    $m->get_ok( $baseurl."/Admin/Users/DashboardsInMenu.html?id=" . $root->id);
    $m->form_name($form_name);
    $m->field('dashboards_in_menu-Available' => [$self_foo->id]);
    $m->click_button(name => 'add');
    $m->content_contains( 'Preferences saved for dashboards in menu.',
        'prefs saved' );
    $m->form_name($form_name);
    $m->field('dashboards_in_menu-Selected' => [$system_foo->id]);
    $m->content_contains( 'Preferences saved for dashboards in menu.',
        'prefs saved' );
    $m->click_button(name => 'remove');
    
    $m->logout;
    ok( $m->login(), "relogged in" );
    $m->get_ok( $baseurl . "/Search/Simple.html" );
    ok( !$m->find_link( text => 'system foo' ), 'no system foo link' );
    $m->follow_link_ok( { text => 'self foo' }, 'follow self foo link' );
    $m->title_is( 'self foo Dashboard', 'got self foo dashboard page' );
    
    diag "setting in prefs";
    $m->get_ok( $baseurl."/Prefs/DashboardsInMenu.html");
    $m->form_name($form_name);
    $m->field('dashboards_in_menu-Available' => [$self_bar->id]);
    $m->click_button(name => 'add');
    $m->content_contains( 'Preferences saved for dashboards in menu.',
        'prefs saved' );
    $m->follow_link_ok( { text => 'self bar' }, 'follow self bar link' );
    $m->title_is( 'self bar Dashboard', 'got self bar dashboard page' );
    $m->get_ok( $baseurl."/Prefs/DashboardsInMenu.html");
    $m->form_with_fields('Reset');
    $m->click;
    $m->content_contains( 'Preferences saved', 'prefs saved' );
    ok( $m->find_link( text => 'system foo' ), 'got system foo link' );
    ok( !$m->find_link( text => 'self foo' ), 'no self foo link' );
    ok( !$m->find_link( text => 'self bar' ), 'no self bar link' );
    
    rt-4.2.12/t/web/dashboards-permissions.t000644 000765 000024 00000002375 12555754775 020602 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test nodata => 1, tests => 8;
    my ($baseurl, $m) = RT::Test->started_ok;
    
    my $url = $m->rt_base_url;
    
    # create user and queue {{{
    my $user_obj = RT::User->new(RT->SystemUser);
    my ($ok, $msg) = $user_obj->LoadOrCreateByEmail('customer@example.com');
    ok($ok, 'ACL test user creation');
    $user_obj->SetName('customer');
    $user_obj->SetPrivileged(1);
    ($ok, $msg) = $user_obj->SetPassword('customer');
    $user_obj->PrincipalObj->GrantRight(Right => 'ModifySelf');
    my $currentuser = RT::CurrentUser->new($user_obj);
    
    my $queue = RT::Queue->new(RT->SystemUser);
    $queue->Create(Name => 'SearchQueue'.$$);
    
    $user_obj->PrincipalObj->GrantRight(Right => $_, Object => $queue)
        for qw/SeeQueue ShowTicket OwnTicket/;
    
    $user_obj->PrincipalObj->GrantRight(Right => $_, Object => $RT::System)
        for qw/SubscribeDashboard CreateOwnDashboard SeeOwnDashboard ModifyOwnDashboard DeleteOwnDashboard/;
    
    ok $m->login(customer => 'customer'), "logged in";
    
    
    $m->follow_link_ok( {id => 'home-dashboard_create'});
    $m->form_name('ModifyDashboard');
    is_deeply([$m->current_form->find_input('Privacy')->possible_values], ["RT::User-" . $user_obj->Id], "the only selectable privacy is user");
    $m->content_lacks('Delete', "Delete button hidden because we are creating");
    
    rt-4.2.12/t/web/dashboards-search-cache.t000644 000765 000024 00000007362 12555754775 020536 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test tests => 33;
    my ($baseurl, $m) = RT::Test->started_ok;
    
    my $url = $m->rt_base_url;
    
    ok($m->login, 'logged in');
    
    # create a search
    $m->follow_link_ok({text => 'Tickets'}, 'to query builder');
    $m->form_name('BuildQuery');
    
    $m->field(ValueOfid => 10 );
    $m->click('AddClause');
    $m->text_contains( 'id < 10', 'added new clause');
    
    $m->form_name('BuildQuery');
    $m->field(SavedSearchDescription => 'Original Name');
    $m->click('SavedSearchSave');
    
    # create the inner dashboard
    $m->get_ok("$url/Dashboards/Modify.html?Create=1");
    $m->form_name('ModifyDashboard');
    $m->field('Name' => 'inner dashboard');
    $m->click_button(value => 'Create');
    $m->text_contains('Saved dashboard inner dashboard');
    
    my ($inner_id) = $m->content =~ /name="id" value="(\d+)"/;
    ok($inner_id, "got an ID, $inner_id");
    
    # create a dashboard
    $m->get_ok("$url/Dashboards/Modify.html?Create=1");
    $m->form_name('ModifyDashboard');
    $m->field('Name' => 'cachey dashboard');
    $m->click_button(value => 'Create');
    $m->text_contains('Saved dashboard cachey dashboard');
    
    my ($dashboard_id) = $m->content =~ /name="id" value="(\d+)"/;
    ok($dashboard_id, "got an ID, $dashboard_id");
    
    # add the search to the dashboard
    $m->follow_link_ok({text => 'Content'});
    my $form = $m->form_name('Dashboard-Searches-body');
    my @input = $form->find_input('Searches-body-Available');
    my ($search_value) =
      map { ( $_->possible_values )[1] }
      grep { ( $_->value_names )[1] =~ /Saved Search: Original Name/ } @input;
    $form->value('Searches-body-Available' => $search_value );
    $m->click_button(name => 'add');
    $m->text_contains('Dashboard updated');
    
    # add the dashboard to the dashboard
    $m->follow_link_ok({text => 'Content'});
    $form = $m->form_name('Dashboard-Searches-body');
    @input = $form->find_input('Searches-body-Available');
    my ($dashboard_value) =
      map { ( $_->possible_values )[1] }
      grep { ( $_->value_names )[1] =~ /Dashboard: inner dashboard/ } @input;
    $form->value('Searches-body-Available' => $dashboard_value );
    $m->click_button(name => 'add');
    $m->text_contains('Dashboard updated');
    
    # subscribe to the dashboard
    $m->follow_link_ok({text => 'Subscription'});
    $m->text_contains('Saved Search: Original Name');
    $m->text_contains('Dashboard: inner dashboard');
    $m->form_name('SubscribeDashboard');
    $m->click_button(name => 'Save');
    $m->text_contains('Subscribed to dashboard cachey dashboard');
    
    # rename the search
    $m->follow_link_ok({text => 'Tickets'}, 'to query builder');
    $form = $m->form_name('BuildQuery');
    @input = $form->find_input('SavedSearchLoad');
    ($search_value) =
      map { ( $_->possible_values )[1] }
      grep { ( $_->value_names )[1] =~ /Original Name/ } @input;
    $form->value('SavedSearchLoad' => $search_value );
    $m->click_button(value => 'Load');
    $m->text_contains('Loaded saved search "Original Name"');
    
    $m->form_name('BuildQuery');
    $m->field('SavedSearchDescription' => 'New Name');
    $m->click_button(value => 'Update');
    $m->text_contains('Updated saved search "New Name"');
    
    # rename the dashboard
    $m->get_ok("/Dashboards/Modify.html?id=$inner_id");
    $m->form_name('ModifyDashboard');
    $m->field('Name' => 'recursive dashboard');
    $m->click_button(value => 'Save Changes');
    $m->text_contains('Dashboard recursive dashboard updated');
    
    # check subscription page again
    $m->get_ok("/Dashboards/Subscription.html?id=$dashboard_id");
    TODO: {
        local $TODO = 'we cache search names too aggressively';
        $m->text_contains('Saved Search: New Name');
        $m->text_unlike(qr/Saved Search: Original Name/); # t-w-m lacks text_lacks
    
        $m->text_contains('Dashboard: recursive dashboard');
        $m->text_unlike(qr/Dashboard: inner dashboard/); # t-w-m lacks text_lacks
    }
    
    $m->get_ok("/Dashboards/Render.html?id=$dashboard_id");
    $m->text_contains('New Name');
    $m->text_unlike(qr/Original Name/); # t-w-m lacks text_lacks
    rt-4.2.12/t/web/gnupg-headers.t000644 000765 000024 00000003051 12555754775 016640 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test::GnuPG
      tests         => 15,
      gnupg_options => {
        passphrase    => 'recipient',
        'trust-model' => 'always',
      };
    
    RT::Test->import_gnupg_key( 'recipient@example.com', 'public' );
    RT::Test->import_gnupg_key( 'general@example.com',   'secret' );
    
    ok( my $user = RT::User->new( RT->SystemUser ) );
    ok( $user->Load('root'), "Loaded user 'root'" );
    $user->SetEmailAddress('recipient@example.com');
    
    my $queue = RT::Test->load_or_create_queue(
        Name              => 'General',
        CorrespondAddress => 'general@example.com',
    );
    ok $queue && $queue->id, 'loaded or created queue';
    my $qid = $queue->id;
    
    my ( $baseurl, $m ) = RT::Test->started_ok;
    ok $m->login, 'logged in';
    
    diag "test with Encrypt and Sign disabled";
    
    $m->goto_create_ticket($queue);
    $m->form_name('TicketCreate');
    $m->field( 'Subject', 'Signing test' );
    $m->field( 'Content', 'Some other content' );
    $m->submit;
    $m->content_like( qr/Ticket \d+ created/i, 'created the ticket' );
    $m->follow_link_ok( { text => 'with headers' } );
    $m->content_contains('X-RT-Encrypt: 0');
    $m->content_contains('X-RT-Sign: 0');
    
    diag "test with Encrypt and Sign enabled";
    
    $m->goto_create_ticket($queue);
    $m->form_name('TicketCreate');
    $m->field( 'Subject', 'Signing test' );
    $m->field( 'Content', 'Some other content' );
    $m->tick( 'Encrypt', 1 );
    $m->tick( 'Sign',    1 );
    $m->submit;
    $m->content_like( qr/Ticket \d+ created/i, 'created the ticket' );
    $m->follow_link_ok( { text => 'with headers' } );
    $m->content_contains('X-RT-Encrypt: 1');
    $m->content_contains('X-RT-Sign: 1');
    
    rt-4.2.12/t/web/gnupg-select-keys-on-create.t000644 000765 000024 00000020746 12555754775 021342 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test::GnuPG tests => 79, gnupg_options => { passphrase => 'rt-test' };
    use RT::Action::SendEmail;
    
    my $queue = RT::Test->load_or_create_queue(
        Name              => 'Regression',
        CorrespondAddress => 'rt-recipient@example.com',
        CommentAddress    => 'rt-recipient@example.com',
    );
    ok $queue && $queue->id, 'loaded or created queue';
    
    my ($baseurl, $m) = RT::Test->started_ok;
    ok $m->login, 'logged in';
    
    diag "check that signing doesn't work if there is no key";
    {
        RT::Test->clean_caught_mails;
    
        ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
        $m->form_name('TicketCreate');
        $m->tick( Sign => 1 );
        $m->field( Requestors => 'rt-test@example.com' );
        $m->field( Content => 'Some content' );
        $m->submit;
        $m->content_contains(
            'unable to sign outgoing email messages',
            'problems with passphrase'
        );
        $m->warning_like(qr/signing failed: secret key not available/);
    
        my @mail = RT::Test->fetch_caught_mails;
        ok !@mail, 'there are no outgoing emails';
    }
    
    {
        RT::Test->import_gnupg_key('rt-recipient@example.com');
        RT::Test->trust_gnupg_key('rt-recipient@example.com');
        my %res = RT::Crypt->GetKeysInfo( Key => 'rt-recipient@example.com' );
        is $res{'info'}[0]{'TrustTerse'}, 'ultimate', 'ultimately trusted key';
    }
    
    diag "check that things don't work if there is no key";
    {
        RT::Test->clean_caught_mails;
    
        ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
        $m->form_name('TicketCreate');
        $m->tick( Encrypt => 1 );
        $m->field( Requestors => 'rt-test@example.com' );
        $m->field( Content => 'Some content' );
        $m->submit;
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'There is no key suitable for encryption',
            'problems with keys'
        );
    
        my $form = $m->form_name('TicketCreate');
        ok !$form->find_input( 'UseKey-rt-test@example.com' ), 'no key selector';
    
        my @mail = RT::Test->fetch_caught_mails;
        ok !@mail, 'there are no outgoing emails';
    
        $m->next_warning_like(qr/public key not found/) for 1 .. 4;
        $m->no_leftover_warnings_ok;
    }
    
    diag "import first key of rt-test\@example.com";
    my $fpr1 = '';
    {
        RT::Test->import_gnupg_key('rt-test@example.com', 'public');
        my %res = RT::Crypt->GetKeysInfo( Key => 'rt-test@example.com' );
        is $res{'info'}[0]{'TrustLevel'}, 0, 'is not trusted key';
        $fpr1 = $res{'info'}[0]{'Fingerprint'};
    }
    
    diag "check that things still doesn't work if key is not trusted";
    {
        RT::Test->clean_caught_mails;
    
        ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
        $m->form_name('TicketCreate');
        $m->tick( Encrypt => 1 );
        $m->field( Requestors => 'rt-test@example.com' );
        $m->field( Content => 'Some content' );
        $m->submit;
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'There is one suitable key, but trust level is not set',
            'problems with keys'
        );
    
        my $form = $m->form_name('TicketCreate');
        ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
        is scalar $input->possible_values, 1, 'one option';
    
        $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
        $m->submit;
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'Selected key either is not trusted',
            'problems with keys'
        );
    
        my @mail = RT::Test->fetch_caught_mails;
        ok !@mail, 'there are no outgoing emails';
    
        $m->no_warnings_ok;
    }
    
    diag "import a second key of rt-test\@example.com";
    my $fpr2 = '';
    {
        RT::Test->import_gnupg_key('rt-test@example.com.2', 'public');
        my %res = RT::Crypt->GetKeysInfo( Key => 'rt-test@example.com' );
        is $res{'info'}[1]{'TrustLevel'}, 0, 'is not trusted key';
        $fpr2 = $res{'info'}[2]{'Fingerprint'};
    }
    
    diag "check that things still doesn't work if two keys are not trusted";
    {
        RT::Test->clean_caught_mails;
    
        ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
        $m->form_name('TicketCreate');
        $m->tick( Encrypt => 1 );
        $m->field( Requestors => 'rt-test@example.com' );
        $m->field( Content => 'Some content' );
        $m->submit;
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'There are several keys suitable for encryption',
            'problems with keys'
        );
    
        my $form = $m->form_name('TicketCreate');
        ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
        is scalar $input->possible_values, 2, 'two options';
    
        $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
        $m->submit;
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'Selected key either is not trusted',
            'problems with keys'
        );
    
        my @mail = RT::Test->fetch_caught_mails;
        ok !@mail, 'there are no outgoing emails';
    
        $m->no_warnings_ok;
    }
    
    {
        RT::Test->lsign_gnupg_key( $fpr1 );
        my %res = RT::Crypt->GetKeysInfo( Key => 'rt-test@example.com' );
        ok $res{'info'}[0]{'TrustLevel'} > 0, 'trusted key';
        is $res{'info'}[1]{'TrustLevel'}, 0, 'is not trusted key';
    }
    
    diag "check that we see key selector even if only one key is trusted but there are more keys";
    {
        RT::Test->clean_caught_mails;
    
        ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
        $m->form_name('TicketCreate');
        $m->tick( Encrypt => 1 );
        $m->field( Requestors => 'rt-test@example.com' );
        $m->field( Content => 'Some content' );
        $m->submit;
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'There are several keys suitable for encryption',
            'problems with keys'
        );
    
        my $form = $m->form_name('TicketCreate');
        ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
        is scalar $input->possible_values, 2, 'two options';
    
        my @mail = RT::Test->fetch_caught_mails;
        ok !@mail, 'there are no outgoing emails';
    
        $m->no_warnings_ok;
    }
    
    diag "check that key selector works and we can select trusted key";
    {
        RT::Test->clean_caught_mails;
    
        ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
        $m->form_name('TicketCreate');
        $m->tick( Encrypt => 1 );
        $m->field( Requestors => 'rt-test@example.com' );
        $m->field( Content => 'Some content' );
        $m->submit;
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'There are several keys suitable for encryption',
            'problems with keys'
        );
    
        my $form = $m->form_name('TicketCreate');
        ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
        is scalar $input->possible_values, 2, 'two options';
    
        $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
        $m->submit;
        $m->content_like( qr/Ticket \d+ created in queue/i, 'ticket created' );
    
        my @mail = RT::Test->fetch_caught_mails;
        ok @mail, 'there are some emails';
        check_text_emails( { Encrypt => 1 }, @mail );
    
        $m->no_warnings_ok;
    }
    
    diag "check encrypting of attachments";
    {
        RT::Test->clean_caught_mails;
    
        ok $m->goto_create_ticket( $queue ), "UI -> create ticket";
        $m->form_name('TicketCreate');
        $m->tick( Encrypt => 1 );
        $m->field( Requestors => 'rt-test@example.com' );
        $m->field( Content => 'Some content' );
        $m->field( Attach => $0 );
        $m->submit;
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'There are several keys suitable for encryption',
            'problems with keys'
        );
    
        my $form = $m->form_name('TicketCreate');
        ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
        is scalar $input->possible_values, 2, 'two options';
    
        $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
        $m->submit;
        $m->content_like( qr/Ticket \d+ created in queue/i, 'ticket created' );
    
        my @mail = RT::Test->fetch_caught_mails;
        ok @mail, 'there are some emails';
        check_text_emails( { Encrypt => 1, Attachment => 1 }, @mail );
    
        $m->no_warnings_ok;
    }
    
    rt-4.2.12/t/web/gnupg-select-keys-on-update.t000644 000765 000024 00000022412 12555754775 021351 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test::GnuPG tests => 86, gnupg_options => { passphrase => 'rt-test' };
    
    use RT::Action::SendEmail;
    
    my $queue = RT::Test->load_or_create_queue(
        Name              => 'Regression',
        CorrespondAddress => 'rt-recipient@example.com',
        CommentAddress    => 'rt-recipient@example.com',
    );
    ok $queue && $queue->id, 'loaded or created queue';
    
    my ($baseurl, $m) = RT::Test->started_ok;
    ok $m->login, 'logged in';
    
    
    my $tid;
    {
        my $ticket = RT::Ticket->new( RT->SystemUser );
        ($tid) = $ticket->Create(
            Subject   => 'test',
            Queue     => $queue->id,
        );
        ok $tid, 'ticket created';
    }
    
    diag "check that signing doesn't work if there is no key";
    {
        RT::Test->clean_caught_mails;
    
        ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
        $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
        $m->form_name('TicketUpdate');
        $m->tick( Sign => 1 );
        $m->field( UpdateCc => 'rt-test@example.com' );
        $m->field( UpdateContent => 'Some content' );
        $m->click('SubmitTicket');
        $m->content_contains(
            'unable to sign outgoing email messages',
            'problems with passphrase'
        );
    
        my @mail = RT::Test->fetch_caught_mails;
        ok !@mail, 'there are no outgoing emails';
    
        $m->next_warning_like(qr/secret key not available/);
        $m->no_leftover_warnings_ok;
    }
    
    {
        RT::Test->import_gnupg_key('rt-recipient@example.com');
        RT::Test->trust_gnupg_key('rt-recipient@example.com');
        my %res = RT::Crypt->GetKeysInfo( Key => 'rt-recipient@example.com' );
        is $res{'info'}[0]{'TrustTerse'}, 'ultimate', 'ultimately trusted key';
    }
    
    diag "check that things don't work if there is no key";
    {
        RT::Test->clean_caught_mails;
    
        ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
        $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
        $m->form_name('TicketUpdate');
        $m->tick( Encrypt => 1 );
        $m->field( UpdateCc => 'rt-test@example.com' );
        $m->field( UpdateContent => 'Some content' );
        $m->click('SubmitTicket');
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'There is no key suitable for encryption',
            'problems with keys'
        );
    
        my $form = $m->form_name('TicketUpdate');
        ok !$form->find_input( 'UseKey-rt-test@example.com' ), 'no key selector';
    
        my @mail = RT::Test->fetch_caught_mails;
        ok !@mail, 'there are no outgoing emails';
    
        $m->next_warning_like(qr/public key not found/) for 1 .. 2;
        $m->no_leftover_warnings_ok;
    }
    
    
    diag "import first key of rt-test\@example.com";
    my $fpr1 = '';
    {
        RT::Test->import_gnupg_key('rt-test@example.com', 'public');
        my %res = RT::Crypt->GetKeysInfo( Key => 'rt-test@example.com' );
        is $res{'info'}[0]{'TrustLevel'}, 0, 'is not trusted key';
        $fpr1 = $res{'info'}[0]{'Fingerprint'};
    }
    
    diag "check that things still doesn't work if key is not trusted";
    {
        RT::Test->clean_caught_mails;
    
        ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
        $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
        $m->form_name('TicketUpdate');
        $m->tick( Encrypt => 1 );
        $m->field( UpdateCc => 'rt-test@example.com' );
        $m->field( UpdateContent => 'Some content' );
        $m->click('SubmitTicket');
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'There is one suitable key, but trust level is not set',
            'problems with keys'
        );
    
        my $form = $m->form_name('TicketUpdate');
        ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
        is scalar $input->possible_values, 1, 'one option';
    
        $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
        $m->click('SubmitTicket');
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'Selected key either is not trusted',
            'problems with keys'
        );
    
        my @mail = RT::Test->fetch_caught_mails;
        ok !@mail, 'there are no outgoing emails';
    
        $m->no_warnings_ok;
    }
    
    diag "import a second key of rt-test\@example.com";
    my $fpr2 = '';
    {
        RT::Test->import_gnupg_key('rt-test@example.com.2', 'public');
        my %res = RT::Crypt->GetKeysInfo( Key => 'rt-test@example.com' );
        is $res{'info'}[1]{'TrustLevel'}, 0, 'is not trusted key';
        $fpr2 = $res{'info'}[2]{'Fingerprint'};
    }
    
    diag "check that things still doesn't work if two keys are not trusted";
    {
        RT::Test->clean_caught_mails;
    
        ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
        $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
        $m->form_name('TicketUpdate');
        $m->tick( Encrypt => 1 );
        $m->field( UpdateCc => 'rt-test@example.com' );
        $m->field( UpdateContent => 'Some content' );
        $m->click('SubmitTicket');
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'There are several keys suitable for encryption',
            'problems with keys'
        );
    
        my $form = $m->form_name('TicketUpdate');
        ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
        is scalar $input->possible_values, 2, 'two options';
    
        $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
        $m->click('SubmitTicket');
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'Selected key either is not trusted',
            'problems with keys'
        );
    
        my @mail = RT::Test->fetch_caught_mails;
        ok !@mail, 'there are no outgoing emails';
    
        $m->no_warnings_ok;
    }
    
    {
        RT::Test->lsign_gnupg_key( $fpr1 );
        my %res = RT::Crypt->GetKeysInfo( Key => 'rt-test@example.com' );
        ok $res{'info'}[0]{'TrustLevel'} > 0, 'trusted key';
        is $res{'info'}[1]{'TrustLevel'}, 0, 'is not trusted key';
    }
    
    diag "check that we see key selector even if only one key is trusted but there are more keys";
    {
        RT::Test->clean_caught_mails;
    
        ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
        $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
        $m->form_name('TicketUpdate');
        $m->tick( Encrypt => 1 );
        $m->field( UpdateCc => 'rt-test@example.com' );
        $m->field( UpdateContent => 'Some content' );
        $m->click('SubmitTicket');
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'There are several keys suitable for encryption',
            'problems with keys'
        );
    
        my $form = $m->form_name('TicketUpdate');
        ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
        is scalar $input->possible_values, 2, 'two options';
    
        my @mail = RT::Test->fetch_caught_mails;
        ok !@mail, 'there are no outgoing emails';
    
        $m->no_warnings_ok;
    }
    
    diag "check that key selector works and we can select trusted key";
    {
        RT::Test->clean_caught_mails;
    
        ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
        $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
        $m->form_name('TicketUpdate');
        $m->tick( Encrypt => 1 );
        $m->field( UpdateCc => 'rt-test@example.com' );
        $m->field( UpdateContent => 'Some content' );
        $m->click('SubmitTicket');
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'There are several keys suitable for encryption',
            'problems with keys'
        );
    
        my $form = $m->form_name('TicketUpdate');
        ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
        is scalar $input->possible_values, 2, 'two options';
    
        $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
        $m->click('SubmitTicket');
        $m->content_contains('Correspondence added', 'Correspondence added' );
    
        my @mail = RT::Test->fetch_caught_mails;
        ok @mail, 'there are some emails';
        check_text_emails( { Encrypt => 1 }, @mail );
    
        $m->no_warnings_ok;
    }
    
    diag "check encrypting of attachments";
    {
        RT::Test->clean_caught_mails;
    
        ok $m->goto_ticket( $tid ), "UI -> ticket #$tid";
        $m->follow_link_ok( { text => 'Reply' }, 'ticket -> reply' );
        $m->form_name('TicketUpdate');
        $m->tick( Encrypt => 1 );
        $m->field( UpdateCc => 'rt-test@example.com' );
        $m->field( UpdateContent => 'Some content' );
        $m->field( Attach => $0 );
        $m->click('SubmitTicket');
        $m->content_contains(
            'You are going to encrypt outgoing email messages',
            'problems with keys'
        );
        $m->content_contains(
            'There are several keys suitable for encryption',
            'problems with keys'
        );
    
        my $form = $m->form_name('TicketUpdate');
        ok my $input = $form->find_input( 'UseKey-rt-test@example.com' ), 'found key selector';
        is scalar $input->possible_values, 2, 'two options';
    
        $m->select( 'UseKey-rt-test@example.com' => $fpr1 );
        $m->click('SubmitTicket');
        $m->content_contains('Correspondence added', 'Correspondence added' );
    
        my @mail = RT::Test->fetch_caught_mails;
        ok @mail, 'there are some emails';
        check_text_emails( { Encrypt => 1, Attachment => 1 }, @mail );
    
        $m->no_warnings_ok;
    }
    rt-4.2.12/t/web/gnupg-tickyboxes.t000644 000765 000024 00000004620 12555754775 017414 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test::GnuPG tests => 22, gnupg_options => { passphrase => 'rt-test' };
    
    use RT::Action::SendEmail;
    
    RT::Test->import_gnupg_key('rt-recipient@example.com');
    RT::Test->import_gnupg_key('rt-test@example.com', 'public');
    
    my $queue = RT::Test->load_or_create_queue(
        Name              => 'Regression',
        CorrespondAddress => 'rt-recipient@example.com',
        CommentAddress    => 'rt-recipient@example.com',
    );
    ok $queue && $queue->id, 'loaded or created queue';
    
    my ($baseurl, $m) = RT::Test->started_ok;
    ok $m->login, 'logged in';
    
    my @variants = (
        {},
        { Sign => 1 },
        { Encrypt => 1 },
        { Sign => 1, Encrypt => 1 },
    );
    
    # collect emails
    my %mail = (
        plain            => [],
        signed           => [],
        encrypted        => [],
        signed_encrypted => [],
    );
    
    diag "check in read-only mode that queue's props influence create/update ticket pages";
    {
        foreach my $variant ( @variants ) {
            set_queue_crypt_options( $queue =>  %$variant );
            $m->goto_create_ticket( $queue );
            $m->form_name('TicketCreate');
            if ( $variant->{'Encrypt'} ) {
                ok $m->value('Encrypt', 2), "encrypt tick box is checked";
            } else {
                ok !$m->value('Encrypt', 2), "encrypt tick box is unchecked";
            }
            if ( $variant->{'Sign'} ) {
                ok $m->value('Sign', 2), "sign tick box is checked";
            } else {
                ok !$m->value('Sign', 2), "sign tick box is unchecked";
            }
        }
    
        # to avoid encryption/signing during create
        set_queue_crypt_options($queue);
    
        my $ticket = RT::Ticket->new( RT->SystemUser );
        my ($id) = $ticket->Create(
            Subject   => 'test',
            Queue     => $queue->id,
            Requestor => 'rt-test@example.com',
        );
        ok $id, 'ticket created';
    
        foreach my $variant ( @variants ) {
            set_queue_crypt_options( $queue => %$variant );
            $m->get( $m->rt_base_url . "/Ticket/Update.html?Action=Respond&id=$id" );
            $m->form_name('TicketUpdate');
            if ( $variant->{'Encrypt'} ) {
                ok $m->value('Encrypt', 2), "encrypt tick box is checked";
            } else {
                ok !$m->value('Encrypt', 2), "encrypt tick box is unchecked";
            }
            if ( $variant->{'Sign'} ) {
                ok $m->value('Sign', 2), "sign tick box is checked";
            } else {
                ok !$m->value('Sign', 2), "sign tick box is unchecked";
            }
        }
    }
    
    
    
    rt-4.2.12/t/web/group_create.t000644 000765 000024 00000003376 12555754775 016600 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    use RT::Test tests => 13;
    
    my ( $baseurl, $m ) = RT::Test->started_ok;
    ok $m->login, 'logged in as root';
    my $root = RT::User->new(RT->SystemUser);
    ok( $root->Load('root'), 'load root user' );
    
    my $group_name = 'test group';
    
    my $group_id;
    diag "Create a group";
    {
        $m->follow_link( id => 'admin-groups-create');
    
        # Test group form validation
        $m->submit_form(
            form_name => 'ModifyGroup',
            fields => {
                Name => '',
            },
        );
        $m->text_contains('Name is required');
        $m->submit_form(
            form_name => 'ModifyGroup',
            fields => {
                Name => '0',
            },
        );
        $m->text_contains('Could not create group');
        $m->submit_form(
            form_name => 'ModifyGroup',
            fields => {
                Name => '1',
            },
        );
        $m->text_contains('Could not create group');
        $m->submit_form(
            form_name => 'ModifyGroup',
            fields => {
                Name => $group_name,
            },
        );
        $m->content_contains('Group created', 'created group sucessfully' );
    
        # Test validation on updae
        $m->form_name('ModifyGroup');
        $m->set_fields(
            Name => '',
        );
        $m->click_button(value => 'Save Changes');
        $m->text_contains('Illegal value for Name');
    
        $m->form_name('ModifyGroup');
        $m->set_fields(
            Name => '0',
        );
        $m->click_button(value => 'Save Changes');
        $m->text_contains('Illegal value for Name');
    
        $m->form_name('ModifyGroup');
        $m->set_fields(
            Name => '1',
        );
        $m->click_button(value => 'Save Changes');
        $m->text_contains('Illegal value for Name');
    
        $group_id           = $m->form_name('ModifyGroup')->value('id');
        ok $group_id, "found id of the group in the form, it's #$group_id";
    }
    
    rt-4.2.12/t/web/helpers-http-cache-headers.t000644 000765 000024 00000004642 12555754775 021207 0ustar00sartakstaff000000 000000 use strict;
    use warnings;
    
    # trs: I'd write a quick t/web/caching-headers.t file which loops the available
    #      endpoints checking for the right headers.
    
    use File::Find;
    
    BEGIN {
        # Ensure that the test and server processes use the same fixed time.
        use constant TIME => 1365175699;
        use Test::MockTime 'set_fixed_time';
        set_fixed_time(TIME);
    
        use RT::Test
            tests   => undef,
            config  => "use Test::MockTime 'set_fixed_time'; set_fixed_time(".TIME.");";
    }
    
    my ($base, $m) = RT::Test->started_ok;
    ok $m->login, 'logged in';
    
    my $docroot = join '/', qw(share html);
    
    # find endpoints to loop over
    my @endpoints = (
        "/NoAuth/css/aileron/squished-".("0"x32).".css",
        '/static/images/bpslogo.png',
    );
    find({
      wanted => sub {
        if ( -f $_ && $_ !~ m|autohandler$| ) {
          return if m{/\.[^/]+\.sw[op]$}; # vim swap files
          ( my $endpoint = $_ ) =~ s|^$docroot||;
          push @endpoints, $endpoint;
        }
      },
      no_chdir => 1,
    } => join '/', $docroot => 'Helpers');
    
    my $ticket_id;
    diag "create a ticket via the API";
    {
        my $ticket = RT::Ticket->new( RT->SystemUser );
        my ($id, $txn, $msg) = $ticket->Create(
            Queue => 'General',
            Subject => 'test ticket',
        );
        ok $id, 'created a ticket #'. $id or diag "error: $msg";
        is $ticket->Subject, 'test ticket', 'correct subject';
        $ticket_id = $id;
    }
    
    
    my $expected;
    diag "set up expected date headers";
    {
    
      # expected headers
      $expected = {
        Autocomplete => {
          'Cache-Control' => 'max-age=120, private',
          'Expires'       => 'Fri, 05 Apr 2013 15:30:19 GMT',
        },
        NoAuth      => {
          'Cache-Control' => 'max-age=2592000, public',
          'Expires'       => 'Sun, 05 May 2013 15:28:19 GMT',
        },
        default      => {
          'Cache-Control' => 'no-cache',
          'Expires'       => 'Fri, 05 Apr 2013 15:28:19 GMT',
        },
      };
    
    }
    
    foreach my $endpoint ( @endpoints ) {
      $m->get_ok( $endpoint . "?id=${ticket_id}&Status=open&Requestor=root" );
    
      my $header_key = 'default';
      if ( $endpoint =~ m|Autocomplete| ) {
        $header_key =  'Autocomplete';
      } elsif ( $endpoint =~ m/NoAuth|static/ ) {
        $header_key =  'NoAuth';
      }
      my $headers = $expected->{$header_key};
    
      is(
          $m->res->header('Cache-Control') => $headers->{'Cache-Control'},
          'got expected Cache-Control header'
      );
    
      is(
        $m->res->header('Expires') => $headers->{'Expires'},
        'got expected Expires header'
      );
    }
    
    undef $m;
    done_testing;
    rt-4.2.12/t/web/html/000755 000765 000024 00000000000 12555754775 014667 5ustar00sartakstaff000000 000000 rt-4.2.12/t/web/html_template.t000644 000765 000024 00000004340 12555754775 016750 0ustar00sartakstaff000000 000000 
    use strict;
    use warnings;
    
    use RT::Test tests => undef;
    my ( $baseurl, $m ) = RT::Test->started_ok;
    ok $m->login, 'logged in as root';
    
    diag('make Autoreply template a html one and add utf8 chars')
      if $ENV{TEST_VERBOSE};
    
    my $template = Encode::decode("UTF-8", "你好 éèà€");
    my $subject  = Encode::decode("UTF-8", "标题");
    my $content  = Encode::decode("UTF-8", "测试");
    {
        $m->follow_link_ok( { id => 'admin-global-templates' }, '-> Templates' );
        $m->follow_link_ok( { text => 'Autoreply in HTML' },    '-> Autoreply in HTML' );
    
        $m->submit_form(
            form_name => 'ModifyTemplate',
            fields => {
                Content => <Subject}
    Content-Type: text/html
    
    $template
    {\$Ticket->Subject}
    -------------------------------------------------------------------------
    {\$Transaction->Content()}
    
    EOF
            },
        );
        $m->content_like( qr/Content updated/, 'content is changed' );
        $m->content_contains( $template, 'content is really updated' );
    }
    
    diag('create a ticket to see the autoreply mail') if $ENV{TEST_VERBOSE};
    
    {
        $m->get_ok( $baseurl . '/Ticket/Create.html?Queue=1' );
    
        $m->submit_form(
            form_name => 'TicketCreate',
            fields      => { Subject => $subject, Content => "

    $content

    ", ContentType => 'text/html' }, ); $m->content_like( qr/Ticket \d+ created/i, 'created the ticket' ); $m->follow_link( text => 'Show' ); $m->content_contains( $template, "html has $template" ); $m->content_contains( $subject, "html has ticket subject $subject" ); $m->content_contains( "<h1>$content</h1>", "html has ticket html content $content" ); } diag('test real mail outgoing') if $ENV{TEST_VERBOSE}; { # $mail is utf8 encoded my ($mail) = RT::Test->fetch_caught_mails; $mail = Encode::decode("UTF-8", $mail ); like( $mail, qr/$template.*$template/s, 'mail has template content $template twice' ); like( $mail, qr/$subject.*$subject/s, 'mail has ticket subject $sujbect twice' ); like( $mail, qr/$content.*$content/s, 'mail has ticket content $content twice' ); like( $mail, qr!

    $content

    !, 'mail has ticket html content

    $content

    ' ); } undef $m; done_testing; rt-4.2.12/t/web/install.t000644 000765 000024 00000013050 12555754775 015555 0ustar00sartakstaff000000 000000 use strict; use warnings; use File::Spec; $ENV{RT_TEST_WEB_HANDLER} = 'plack+rt-server'; use RT::Test tests => undef, nodb => 1, server_ok => 1; my $dbname = 'rt4test_install_xxx'; my $rtname = 'rttestname'; my $domain = 'rttes.com'; my $password = 'newpass'; my $correspond = 'reply@example.com'; my $comment = 'comment@example.com'; # use bin/rt to fake sendmail to make sure the file exists my $sendmail = File::Spec->catfile( $RT::BinPath, 'rt' ); my $owner = 'root@localhost'; unlink File::Spec->catfile( $RT::VarPath, $dbname ); my ( $url, $m ) = RT::Test->started_ok; $m->warning_like(qr/If this is a new installation of RT/, "Got startup warning"); my ($port) = $url =~ /:(\d+)/; $m->get_ok($url); is( $m->uri, $url . '/Install/index.html', 'install page' ); $m->select( 'Lang', 'zh-cn' ); $m->click('ChangeLang'); $m->content_contains( Encode::decode("UTF-8",'语言'), 'select chinese' ); $m->click('Run'); $m->content_contains( Encode::decode("UTF-8",'æ•°æ®åº“'), 'select db type in chinese' ); $m->back; $m->select( 'Lang', 'en' ); $m->click('ChangeLang'); $m->content_contains( 'Select another language', 'back to english' ); $m->click('Run'); is( $m->uri, $url . '/Install/DatabaseType.html', 'db type page' ); my $select_type = $m->current_form->find_input('DatabaseType'); my @possible_types = $select_type->possible_values; ok( @possible_types, 'we have at least 1 db type' ); SKIP: { skip 'no mysql found', 7 unless grep { /mysql/ } @possible_types; $m->select( 'DatabaseType', 'mysql' ); $m->click; for my $field (qw/Name Host Port Admin AdminPassword User Password/) { ok( $m->current_form->find_input("Database$field"), "db mysql has field Database$field" ); } $m->back; } SKIP: { skip 'no pg found', 8 unless grep { /Pg/ } @possible_types; $m->select( 'DatabaseType', 'Pg' ); $m->click; for my $field ( qw/Name Host Port Admin AdminPassword User Password/) { ok( $m->current_form->find_input("Database$field"), "db Pg has field Database$field" ); } $m->back; } $m->select( 'DatabaseType', 'SQLite' ); $m->click; is( $m->uri, $url . '/Install/DatabaseDetails.html', 'db details page' ); $m->field( 'DatabaseName' => $dbname ); $m->submit_form( fields => { DatabaseName => $dbname } ); $m->content_contains( 'Connection succeeded', 'succeed msg' ); $m->content_contains( qq{$dbname already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT.}, 'more db state msg' ); $m->click; is( $m->uri, $url . '/Install/Basics.html', 'basics page' ); $m->click; $m->content_contains( 'You must enter an Administrative password', "got password can't be empty error" ); for my $field (qw/rtname WebDomain WebPort Password/) { ok( $m->current_form->find_input($field), "has field $field" ); } is( $m->value('WebPort'), $port, 'default port' ); $m->field( 'rtname' => $rtname ); $m->field( 'WebDomain' => $domain ); $m->field( 'Password' => $password ); $m->click; is( $m->uri, $url . '/Install/Sendmail.html', 'mail page' ); for my $field (qw/SendmailPath OwnerEmail/) { ok( $m->current_form->find_input($field), "has field $field" ); } $m->field( 'OwnerEmail' => '' ); $m->click; $m->content_contains( "doesn't look like an email address", 'got email error' ); $m->field( 'SendmailPath' => '/fake/path/sendmail' ); $m->click; $m->content_contains( "/fake/path/sendmail doesn't exist", 'got sendmail error' ); $m->field( 'SendmailPath' => $sendmail ); $m->field( 'OwnerEmail' => $owner ); $m->click; is( $m->uri, $url . '/Install/Global.html', 'global page' ); for my $field (qw/CommentAddress CorrespondAddress/) { ok( $m->current_form->find_input($field), "has field $field" ); } $m->click; is( $m->uri, $url . '/Install/Initialize.html', 'init db page' ); $m->back; is( $m->uri, $url . '/Install/Global.html', 'global page' ); $m->field( 'CorrespondAddress' => 'reply' ); $m->click; $m->content_contains( "doesn't look like an email address", 'got email error' ); $m->field( 'CommentAddress' => 'comment' ); $m->click; $m->content_contains( "doesn't look like an email address", 'got email error' ); $m->field( 'CorrespondAddress' => 'reply@example.com' ); $m->field( 'CommentAddress' => 'comment@example.com' ); $m->click; is( $m->uri, $url . '/Install/Initialize.html', 'init db page' ); $m->click; is( $m->uri, $url . '/Install/Finish.html', 'finish page' ); $m->click; is( $m->uri, $url . '/', 'home page' ); $m->login( 'root', $password ); $m->content_contains( 'RT at a glance', 'logged in with newpass' ); RT->LoadConfig; my $config = RT->Config; is( $config->Get('DatabaseType'), 'SQLite', 'DatabaseType in config' ); is( $config->Get('DatabaseName'), $dbname, 'DatabaseName in config' ); is( $config->Get('rtname'), $rtname, 'rtname in config' ); is( $config->Get('WebDomain'), $domain, 'WebDomain email in config' ); is( $config->Get('WebPort'), $port, 'WebPort email in config' ); is( $config->Get('SendmailPath'), $sendmail, 'SendmailPath in config' ); is( $config->Get('OwnerEmail'), $owner, 'OwnerEmail in config' ); is( $config->Get('CorrespondAddress'), $correspond, 'correspond address in config' ); is( $config->Get('CommentAddress'), $comment, 'comment address in config' ); unlink File::Spec->catfile( $RT::VarPath, $dbname ); undef $m; done_testing; rt-4.2.12/t/web/installer.t000644 000765 000024 00000004666 12555754775 016121 0ustar00sartakstaff000000 000000 use strict; use warnings; $ENV{RT_TEST_WEB_HANDLER} = 'plack+rt-server'; use RT::Test tests => undef, nodb => 1, server_ok => 1; my ($base, $m) = RT::Test->started_ok; $m->warning_like(qr/If this is a new installation of RT/, "Got startup warning"); $m->get_ok($base); like $m->uri, qr/Install/, 'at installer'; diag "Testing language change"; { $m->submit_form_ok( { with_fields => { Lang => 'fr', }, button => 'ChangeLang', }, 'change language to french' ); $m->content_like(qr/RT\s+pour\s+example\.com/i); $m->submit_form_ok( { with_fields => { Lang => 'en', }, button => 'ChangeLang', }, 'change language to english' ); $m->content_like(qr/RT\s+for\s+example\.com/i); } diag "Walking through install screens setting defaults"; { $m->click_ok('Run'); # Database type $m->content_contains('DatabaseType'); $m->content_contains($_, "found database $_") for qw(MySQL PostgreSQL Oracle SQLite); $m->submit(); # Database details $m->content_contains('DatabaseName'); if (RT->Config->Get('DatabaseType') eq 'SQLite') { $m->submit; } else { $m->submit_form(with_fields => { DatabaseAdmin => $ENV{RT_DBA_USER}, DatabaseAdminPassword => $ENV{RT_DBA_PASSWORD}, DatabasePassword => "rt_pass", }); } $m->content_contains('Connection succeeded'); $m->submit_form_ok({ button => 'Next' }); # Basic options $m->submit_form_ok({ with_fields => { Password => 'password', } }, 'set root password'); # Mail options $m->submit_form_ok({ with_fields => { OwnerEmail => 'admin@example.com', }, }, 'set admin email'); # Mail addresses $m->submit_form_ok({ with_fields => { CorrespondAddress => 'rt@example.com', CommentAddress => 'rt-comment@example.com', }, }, 'set addresses'); # Initialize database $m->content_contains('database'); $m->submit(); # Finish $m->content_contains('/RT_SiteConfig.pm'); $m->content_contains('Finish'); $m->submit(); $m->content_contains('Login'); ok $m->login(), 'logged in'; } RT::Test::__drop_database(); undef $m; done_testing; rt-4.2.12/t/web/language_update.t000644 000765 000024 00000001414 12555754775 017235 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 9; my ( $url, $m ) = RT::Test->started_ok; ok( $m->login(), 'logged in' ); $m->follow_link_ok({text => 'About me'}); $m->form_with_fields('Lang'); $m->field(Lang => 'zh_TW'); $m->submit; $m->text_contains(Encode::decode("UTF-8","並讓ç¾å­˜çš„ iCal feedsä¸å†èƒ½ç”¨"), "successfully updated to zh_TW"); $m->text_contains(Encode::decode("UTF-8","使用語言 的值從 (ç„¡) 改為 'zh_TW'"), "when updating to language zh_TW, results are in zh_TW"); $m->form_with_fields('Lang'); $m->field(Lang => 'en_us'); $m->submit; $m->text_contains("breaking all existing iCal feeds", "successfully updated to en_us"); $m->text_contains("Lang changed from 'zh_TW' to 'en_us'", "when updating to language en_us, results are in en_us"); rt-4.2.12/t/web/login.t000644 000765 000024 00000006745 12555754775 015234 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test; RT::Config->Set(AllowLoginPasswordAutoComplete => 1); my ( $baseurl, $m ) = RT::Test->started_ok; my $ticket = RT::Test->create_ticket( Subject => 'ticket_foo', Queue => 'General', ); my ( $user, $pass ) = ( 'root', 'password' ); diag "normal login"; { $m->get($baseurl); $m->title_is('Login'); is( $m->uri, $baseurl, "right url" ); $m->content_lacks('autocomplete="off"'); $m->submit_form( form_id => 'login', fields => { user => $user, pass => 'wrong pass', } ); $m->content_contains( "Your username or password is incorrect", 'login error message' ); $m->warning_like( qr/FAILED LOGIN for root/, "got failed login warning" ); $m->submit_form( form_id => 'login', fields => { user => $user, pass => $pass, } ); $m->title_is( 'RT at a glance', 'logged in' ); $m->follow_link_ok( { text => 'Logout' }, 'follow logout' ); $m->title_is( 'Logout', 'logout' ); } diag "tangent login"; { $m->get( $baseurl . '/Ticket/Display.html?id=1' ); $m->title_is('Login'); $m->submit_form( form_id => 'login', fields => { user => $user, pass => $pass, } ); like( $m->uri, qr{/Ticket/Display\.html}, 'normal ticket page' ); $m->follow_link_ok( { text => 'Logout' }, 'follow logout' ); } diag "mobile login with not mobile client"; { $m->get( $baseurl . '/m' ); is( $m->uri, $baseurl . '/m', "right url" ); $m->content_contains( "/m/index.html?NotMobile=1", 'mobile login' ); $m->submit_form( form_id => 'login', fields => { user => $user, pass => 'wrong pass', } ); $m->content_contains( "Your username or password is incorrect", 'login error message' ); $m->warning_like( qr/FAILED LOGIN for root/, "got failed login warning" ); $m->submit_form( form_id => 'login', fields => { user => $user, pass => $pass, } ); like( $m->uri, qr{\Q$baseurl/m\E}, "mobile url" ); $m->follow_link_ok( { text => 'Logout' }, 'follow logout' ); $m->content_contains( "/m/index.html?NotMobile=1", 'back to mobile login page' ); $m->content_lacks( 'Logout', 'really logout' ); } diag "mobile normal login"; { # default browser in android 2.3.6 $m->agent( "Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus One Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1" ); $m->get($baseurl); is( $m->uri, $baseurl, "right url" ); $m->content_contains( "/m/index.html?NotMobile=1", 'mobile login' ); $m->submit_form( form_id => 'login', fields => { user => $user, pass => $pass, } ); is( $m->uri, $baseurl . '/m/', "mobile url" ); $m->follow_link_ok( { text => 'Logout' }, 'follow logout' ); $m->content_contains( "/m/index.html?NotMobile=1", 'back to mobile login page' ); $m->content_lacks( 'Logout', 'really logout' ); } diag "mobile tangent login"; { $m->get( $baseurl . '/Ticket/Display.html?id=1' ); $m->content_contains( "/m/index.html?NotMobile=1", 'mobile login' ); $m->submit_form( form_id => 'login', fields => { user => $user, pass => $pass, } ); like( $m->uri, qr{/m/ticket/show}, 'mobile ticket page' ); } rt-4.2.12/t/web/logout.t000644 000765 000024 00000002124 12555754775 015420 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 12; my ($baseurl, $agent) = RT::Test->started_ok; my $url = $agent->rt_base_url; diag $url if $ENV{TEST_VERBOSE}; # test that logout would actually redirects to the correct URL { ok $agent->login, "logged in"; $agent->follow_link_ok({ text => 'Logout' }); like $agent->uri, qr'/Logout\.html$', "right url"; $agent->content_contains('stop_server; RT->Config->Set(MasonLocalComponentRoot => RT::Test::get_abs_relocatable_dir('html')); ($baseurl, $agent) = RT::Test->started_ok; $url = $agent->rt_base_url; diag $url if $ENV{TEST_VERBOSE}; # test that logout would actually redirects to URL from the callback { ok $agent->login, "logged in"; $agent->follow_link_ok({ text => 'Logout' }); like $agent->uri, qr'/Logout\.html$', "right url"; $agent->content_contains(' 'no_declare', plugins => ["MakeClicky"], config => 'Set( @Active_MakeClicky => "httpurl_overwrite" );'; use Test::LongString; my ($base, $m) = RT::Test->started_ok; $m->login; $m->get_ok("/"); diag "Trailing punctuation"; { my $url = 'http://bestpractical.com/rt'; for my $punc (qw( . ! ? ), ",") { is_string( make_clicky($m, "Refer to $url$punc A following sentence."), qq[Refer to $url$punc A following sentence.], "$punc not included in url", ); } } diag "Punctuation as part of the url"; { my $url = 'http://bestpractical.com/rt/download.html?foo=bar,baz&bat=1.2'; my $escaped_url = $url; RT::Interface::Web::EscapeHTML( \$escaped_url ); is_string( make_clicky($m, "Refer to $url. A following sentence."), qq[Refer to $escaped_url. A following sentence.], "Punctuation in middle of URL", ); } sub make_clicky { my $m = shift; my $text = shift; RT::Interface::Web::EscapeURI(\$text); $m->get_ok("/makeclicky?content=$text", "made clicky") or diag $m->status; return $m->success ? $m->content : ""; } undef $m; done_testing(); rt-4.2.12/t/web/mobile.t000644 000765 000024 00000017314 12555754775 015365 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 170; my ( $url, $m ) = RT::Test->started_ok; my $root = RT::Test->load_or_create_user( Name => 'root' ); diag "create another queue"; my $test_queue = RT::Queue->new( $RT::SystemUser ); ok( $test_queue->Create( Name => 'foo' ) ); diag "create cf cfbar"; my $cfbar = RT::CustomField->new( $RT::SystemUser ); ok( $cfbar->Create( Name => 'cfbar', Type => 'Freeform', LookupType => 'RT::Queue-RT::Ticket' ) ); $cfbar->AddToObject( $test_queue ); diag "create some tickets to link"; # yep, create 3 tickets for DependsOn my @tickets = map { { Subject => "link of $_" } } qw/DependsOn DependsOn DependsOn DependedOnBy HasMember HasMember MemberOf RefersTo RefersTo ReferredToBy/; RT::Test->create_tickets( { Status => 'resolved' }, @tickets ); diag "test different mobile agents"; my @agents = ( 'hiptop', 'Blazer', 'Novarra', 'Vagabond', 'SonyEricsson', 'Symbian', 'NetFront', 'UP.Browser', 'UP.Link', 'Windows CE', 'MIDP', 'J2ME', 'DoCoMo', 'J-PHONE', 'PalmOS', 'PalmSource', 'iPhone', 'iPod', 'AvantGo', 'Nokia', 'Android', 'WebOS', 'S60' ); for my $agent (@agents) { $m->agent($agent); $m->get_ok($url); $m->content_contains( 'Not using a mobile browser', "mobile login page for agent $agent" ); } $m->submit_form( fields => { user => 'root', pass => 'password' } ); is( $m->uri, $url . '/m/', 'logged in via mobile ui' ); ok( $m->find_link( text => 'Home' ), 'has homepage link, so really logged in' ); diag "create some tickets"; $m->follow_link_ok( { text => 'New ticket' } ); like( $m->uri, qr'/m/ticket/select_create_queue', 'queue select page' ); $m->follow_link_ok( { text => 'General' } ); like( $m->uri, qr'/m/ticket/create', 'ticket create page' ); $m->submit_form( fields => { Subject => 'ticket1', Content => 'content 1', Status => 'open', Cc => 'cc@example.com', AdminCc => 'admincc@example.com', InitialPriority => 13, FinalPriority => 93, TimeEstimated => 2, 'TimeEstimated-TimeUnits' => 'hours', TimeWorked => 30, TimeLeft => 60, Starts => '2011-01-11 11:11:11', Due => '2011-02-12 12:12:12', 'new-DependsOn' => '1 2 3', 'DependsOn-new' => '4', 'new-MemberOf' => '5 6', 'MemberOf-new' => '7', 'new-RefersTo' => '8 9', 'RefersTo-new' => '10', } ); like( $m->uri, qr'/m/ticket/show', 'ticket show page' ); $m->content_contains( 'ticket1', 'subject' ); $m->content_contains( 'open', 'status' ); $m->content_contains( 'cc@example.com', 'cc' ); $m->content_contains( 'admincc@example.com', 'admincc' ); $m->content_contains( '13/93', 'priority' ); $m->content_contains( '2 hour', 'time estimates' ); $m->content_contains( '30 min', 'time worked' ); $m->content_contains( '60 min', 'time left' ); $m->content_contains( 'Tue Jan 11 11:11:11', 'starts' ); $m->content_contains( 'Sat Feb 12 12:12:12', 'due' ); $m->content_like( qr/(link of DependsOn).*\1.*\1/s, 'depends on' ); $m->content_contains( 'link of DependedOnBy', 'depended on by' ); $m->content_like( qr/(link of HasMember).*\1/s, 'has member' ); $m->content_contains( 'link of MemberOf', 'member of' ); $m->content_like( qr/(link of RefersTo).*\1/s, 'refers to' ); $m->content_contains( 'link of ReferredToBy', 'referred to by' ); diag "test ticket reply"; $m->follow_link_ok( { text => 'Reply' } ); like( $m->uri, qr'/m/ticket/reply', 'ticket reply page' ); $m->submit_form( fields => { UpdateContent => 'reply 1', UpdateTimeWorked => '30', UpdateStatus => 'resolved', UpdateType => 'response', }, button => 'SubmitTicket', ); like( $m->uri, qr'/m/ticket/show', 'back to ticket show page' ); $m->content_contains( '1 hour', 'time worked' ); $m->content_contains( 'resolved', 'status' ); $m->follow_link_ok( { text => 'Reply' } ); like( $m->uri, qr'/m/ticket/reply', 'ticket reply page' ); $m->submit_form( fields => { UpdateContent => 'reply 2', UpdateSubject => 'ticket1', UpdateStatus => 'open', UpdateType => 'private', }, button => 'SubmitTicket', ); $m->no_warnings_ok; $m->content_contains( 'ticket1', 'subject' ); $m->content_contains( 'open', 'status' ); like( $m->uri, qr'/m/ticket/show', 'back to ticket show page' ); diag "test ticket history"; $m->follow_link_ok( { text => 'History' } ); like( $m->uri, qr'/m/ticket/history', 'ticket history page' ); $m->content_contains( 'content 1', 'has main content' ); $m->content_contains( 'reply 1', 'has replied content' ); $m->content_contains( 'reply 2', 'has replied content' ); diag "create another ticket in queue foo"; $m->follow_link_ok( { text => 'Home' } ); is( $m->uri, "$url/m/", 'main mobile page' ); $m->follow_link_ok( { text => 'New ticket' } ); like( $m->uri, qr'/m/ticket/select_create_queue', 'queue select page' ); $m->follow_link_ok( { text => 'foo' } ); like( $m->uri, qr'/m/ticket/create', 'ticket create page' ); $m->content_contains( 'cfbar', 'has cf name' ); $m->content_contains( 'Object-RT::Ticket--CustomField-' . $cfbar->id . '-Value', 'has cf input name' ); $m->submit_form( fields => { Subject => 'ticket2', Content => 'content 2', Owner => $root->id, 'Object-RT::Ticket--CustomField-' . $cfbar->id . '-Value' => 'cfvalue', } ); $m->no_warnings_ok; like( $m->uri, qr'/m/ticket/show', 'ticket show page' ); $m->content_contains( 'cfbar', 'has cf name' ); $m->content_contains( 'cfvalue', 'has cf value' ); $m->follow_link_ok( { text => 'Home' } ); is( $m->uri, "$url/m/", 'main mobile page' ); diag "test unowned tickets link"; $m->follow_link_ok( { text => 'Unowned tickets' } ); $m->content_contains( 'Found 1 ticket', 'found 1 ticket' ); $m->content_contains( 'ticket1', 'has ticket1' ); $m->content_lacks( 'ticket2', 'no ticket2' ); $m->back; diag "test tickets I own link"; $m->follow_link_ok( { text => 'Tickets I own' } ); $m->content_contains( 'Found 1 ticket', 'found 1 ticket' ); $m->content_lacks( 'ticket1', 'no ticket1' ); ok( $m->find_link( text_regex => qr/ticket2/ ), 'has ticket2 link' ); $m->back; diag "test all tickets link"; $m->follow_link_ok( { text => 'All tickets' } ); $m->content_contains( 'Found 12 tickets', 'found 12 tickets' ); ok( $m->find_link( text_regex => qr/ticket1/ ), 'has ticket1 link' ); ok( $m->find_link( text_regex => qr/ticket2/ ), 'has ticket2 link' ); $m->back; diag "test bookmarked tickets link"; my $ticket = RT::Ticket->new(RT::CurrentUser->new('root')); $ticket->Load(11); $root->ToggleBookmark($ticket); $m->follow_link_ok( { text => 'Bookmarked tickets' } ); $m->content_contains( 'Found 1 ticket', 'found 1 ticket' ); ok( $m->find_link( text_regex => qr/ticket1/ ), 'has ticket1 link' ); $m->content_lacks( 'ticket2', 'no ticket2' ); $m->back; diag "test tickets search"; $m->submit_form( fields => { q => 'ticket2' } ); $m->content_contains( 'Found 1 ticket', 'found 1 ticket' ); $m->content_lacks( 'ticket1', 'no ticket1' ); ok( $m->find_link( text_regex => qr/ticket2/ ), 'has ticket2 link' ); $m->back; diag "test logout link"; $m->follow_link_ok( { text => 'Logout' } ); is( $m->uri, "$url/m/", 'still in mobile' ); $m->submit_form( fields => { user => 'root', pass => 'password' } ); diag "test notmobile link"; $m->follow_link_ok( { text => 'Home' } ); $m->follow_link_ok( { text => 'Not using a mobile browser?' } ); is( $m->uri, $url . '/', 'got full ui' ); rt-4.2.12/t/web/owner_disabled_group_19221.t000644 000765 000024 00000013332 12555754775 021045 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef; my $queue = RT::Test->load_or_create_queue( Name => 'Test' ); ok $queue && $queue->id, 'loaded or created queue'; my $user = RT::Test->load_or_create_user( Name => 'ausername', Privileged => 1, ); ok $user && $user->id, 'loaded or created user'; my $group = RT::Group->new(RT->SystemUser); my ($ok, $msg) = $group->CreateUserDefinedGroup(Name => 'Disabled Group'); ok($ok, $msg); ($ok, $msg) = $group->AddMember( $user->PrincipalId ); ok($ok, $msg); ok( RT::Test->set_rights({ Principal => $group, Object => $queue, Right => [qw(OwnTicket)] }), 'set rights'); RT->Config->Set( AutocompleteOwners => 0 ); my ($base, $m) = RT::Test->started_ok; ok $m->login, 'logged in'; diag "user from group shows up in create form"; { $m->get_ok('/', 'open home page'); $m->form_name('CreateTicketInQueue'); $m->select( 'Queue', $queue->id ); $m->submit; $m->content_contains('Create a new ticket', 'opened create ticket page'); my $form = $m->form_name('TicketCreate'); my $input = $form->find_input('Owner'); is $input->value, RT->Nobody->Id, 'correct owner selected'; ok((scalar grep { $_ == $user->Id } $input->possible_values), 'user from group is in dropdown'); } diag "user from disabled group DOESN'T shows up in create form"; { ($ok, $msg) = $group->SetDisabled(1); ok($ok, $msg); $m->get_ok('/', 'open home page'); $m->form_name('CreateTicketInQueue'); $m->select( 'Queue', $queue->id ); $m->submit; $m->content_contains('Create a new ticket', 'opened create ticket page'); my $form = $m->form_name('TicketCreate'); my $input = $form->find_input('Owner'); is $input->value, RT->Nobody->Id, 'correct owner selected'; ok((not scalar grep { $_ == $user->Id } $input->possible_values), 'user from disabled group is NOT in dropdown'); ($ok, $msg) = $group->SetDisabled(0); ok($ok, $msg); } diag "Put us in a nested group"; my $super = RT::Group->new(RT->SystemUser); ($ok, $msg) = $super->CreateUserDefinedGroup(Name => 'Supergroup'); ok($ok, $msg); ($ok, $msg) = $super->AddMember( $group->PrincipalId ); ok($ok, $msg); ok( RT::Test->set_rights({ Principal => $super, Object => $queue, Right => [qw(OwnTicket)] }), 'set rights'); diag "Disable the middle group"; { ($ok, $msg) = $group->SetDisabled(1); ok($ok, "Disabled group: $msg"); $m->get_ok('/', 'open home page'); $m->form_name('CreateTicketInQueue'); $m->select( 'Queue', $queue->id ); $m->submit; $m->content_contains('Create a new ticket', 'opened create ticket page'); my $form = $m->form_name('TicketCreate'); my $input = $form->find_input('Owner'); is $input->value, RT->Nobody->Id, 'correct owner selected'; ok((not scalar grep { $_ == $user->Id } $input->possible_values), 'user from disabled group is NOT in dropdown'); ($ok, $msg) = $group->SetDisabled(0); ok($ok, "Re-enabled group: $msg"); } diag "Disable the top group"; { ($ok, $msg) = $super->SetDisabled(1); ok($ok, "Disabled supergroup: $msg"); $m->get_ok('/', 'open home page'); $m->form_name('CreateTicketInQueue'); $m->select( 'Queue', $queue->id ); $m->submit; $m->content_contains('Create a new ticket', 'opened create ticket page'); my $form = $m->form_name('TicketCreate'); my $input = $form->find_input('Owner'); is $input->value, RT->Nobody->Id, 'correct owner selected'; ok((not scalar grep { $_ == $user->Id } $input->possible_values), 'user from disabled group is NOT in dropdown'); ($ok, $msg) = $super->SetDisabled(0); ok($ok, "Re-enabled supergroup: $msg"); } diag "Check WithMember and WithoutMember recursively"; { my $with = RT::Groups->new( RT->SystemUser ); $with->WithMember( PrincipalId => $user->PrincipalObj->Id, Recursively => 1 ); $with->LimitToUserDefinedGroups; is_deeply( [map {$_->Name} @{$with->ItemsArrayRef}], ['Disabled Group','Supergroup'], "Get expected recursive memberships", ); my $without = RT::Groups->new( RT->SystemUser ); $without->WithoutMember( PrincipalId => $user->PrincipalObj->Id, Recursively => 1 ); $without->LimitToUserDefinedGroups; is_deeply( [map {$_->Name} @{$without->ItemsArrayRef}], [], "And not a member of no groups", ); ($ok, $msg) = $super->SetDisabled(1); ok($ok, "Disabled supergroup: $msg"); $with->RedoSearch; $without->RedoSearch; is_deeply( [map {$_->Name} @{$with->ItemsArrayRef}], ['Disabled Group'], "Recursive check only contains subgroup", ); is_deeply( [map {$_->Name} @{$without->ItemsArrayRef}], [], "Doesn't find the currently disabled group", ); ($ok, $msg) = $super->SetDisabled(0); ok($ok, "Re-enabled supergroup: $msg"); ($ok, $msg) = $group->SetDisabled(1); ok($ok, "Disabled intermediate group: $msg"); $with->RedoSearch; $without->RedoSearch; is_deeply( [map {$_->Name} @{$with->ItemsArrayRef}], [], "Recursive check finds no groups", ); is_deeply( [map {$_->Name} @{$without->ItemsArrayRef}], ['Supergroup'], "Now not a member of the supergroup", ); ($ok, $msg) = $group->SetDisabled(0); ok($ok, "Re-enabled intermediate group: $msg"); } diag "Check MemberOfGroup"; { ($ok, $msg) = $group->SetDisabled(1); ok($ok, "Disabled intermediate group: $msg"); my $users = RT::Users->new(RT->SystemUser); $users->MemberOfGroup($super->PrincipalObj->id); is($users->Count, 0, "Supergroup claims no members"); ($ok, $msg) = $group->SetDisabled(0); ok($ok, "Re-enabled intermediate group: $msg"); } undef $m; done_testing; rt-4.2.12/t/web/passthrough-jsmin000755 000765 000024 00000000064 12555754775 017336 0ustar00sartakstaff000000 000000 echo "// passthrough-jsmin added this"; exec cat; rt-4.2.12/t/web/path-traversal.t000644 000765 000024 00000003263 12555754775 017051 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef; my ($baseurl, $agent) = RT::Test->started_ok; ok($agent->login); $agent->get("$baseurl/NoAuth/../Elements/HeaderJavascript"); is($agent->status, 400); $agent->warning_like(qr/Invalid request.*aborting/); $agent->get("$baseurl/NoAuth/../%45lements/HeaderJavascript"); is($agent->status, 400); $agent->warning_like(qr/Invalid request.*aborting/); $agent->get("$baseurl/NoAuth/%2E%2E/Elements/HeaderJavascript"); is($agent->status, 400); $agent->warning_like(qr/Invalid request.*aborting/); $agent->get("$baseurl/NoAuth/../../../etc/RT_Config.pm"); is($agent->status, 400); $agent->warning_like(qr/Invalid request.*aborting/) unless $ENV{RT_TEST_WEB_HANDLER} =~ /^apache/; $agent->get("$baseurl/static/css/web2/images/../../../../../../etc/RT_Config.pm"); # Apache hardcodes a 400m but the static handler returns a 403 for traversal too high is($agent->status, $ENV{RT_TEST_WEB_HANDLER} =~ /^apache/ ? 400 : 403); # Do not reject a simple /. in the URL, for downloading uploaded # dotfiles, for example. $agent->get("$baseurl/Ticket/Attachment/28/9/.bashrc"); is($agent->status, 200); # Even for a file not found, we return 200 $agent->next_warning_like(qr/could not be loaded/, "couldn't loaded warning"); $agent->content_like(qr/Attachment \S+ could not be loaded/); # do not reject these URLs, even though they contain /. outside the path $agent->get("$baseurl/index.html?ignored=%2F%2E"); is($agent->status, 200); $agent->get("$baseurl/index.html?ignored=/."); is($agent->status, 200); $agent->get("$baseurl/index.html#%2F%2E"); is($agent->status, 200); $agent->get("$baseurl/index.html#/."); is($agent->status, 200); undef $agent; done_testing; rt-4.2.12/t/web/plugin-overlays.t000644 000765 000024 00000001413 12555754775 017247 0ustar00sartakstaff000000 000000 use strict; use warnings; BEGIN { use Test::More; plan skip_all => "Testing the rt-server init sequence in isolation requires Apache" unless ($ENV{RT_TEST_WEB_HANDLER} || '') =~ /^apache/; } use JSON qw(from_json); use RT::Test tests => undef, plugins => ["Overlays"]; my ($base, $m) = RT::Test->started_ok; # Check that the overlay was actually loaded $m->get_ok("$base/overlay_loaded"); is $m->content, "yes", "Plugin's RT/User_Local.pm was loaded"; # Check accessible is correct and doesn't need to be rebuilt from overlay $m->get_ok("$base/user_accessible"); ok $m->content, "Received some content"; my $info = from_json($m->content) || {}; ok $info->{Comments}{public}, "User.Comments is marked public via overlay"; undef $m; done_testing; rt-4.2.12/t/web/private-components.t000644 000765 000024 00000002256 12555754775 017752 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 24; my ($baseurl, $agent) = RT::Test->started_ok; ok $agent->login, 'logged in'; $agent->get("/Elements/Refresh?Name=private"); is($agent->status, 403); $agent->content_lacks("private"); $agent->content_lacks("Refresh this page every"); $agent->get("/Ticket/Elements/ShowTime?minutes=42"); is($agent->status, 403); $agent->content_lacks("42 min"); $agent->get("/Widgets/TitleBox?title=private"); is($agent->status, 403); $agent->content_lacks("private"); $agent->get("/m/_elements/header?title=private"); is($agent->status, 403); $agent->content_lacks("private"); $agent->get("/autohandler"); is($agent->status, 403); $agent->content_lacks("comp called without component"); $agent->get("/NoAuth/js/autohandler"); is($agent->status, 403); $agent->content_lacks("no next component"); $agent->get("/l"); is($agent->status, 403); $agent->content_lacks("No handle/phrase"); $agent->get("/%61utohandler"); is($agent->status, 403); $agent->content_lacks("comp called without component"); $agent->get("/%45lements/Refresh?Name=private"); is($agent->status, 403); $agent->content_lacks("private"); $agent->content_lacks("Refresh this page every"); rt-4.2.12/t/web/psgi-wrap.t000644 000765 000024 00000000525 12555754775 016023 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef, plugins => [qw(RT::Extension::PSGIWrap)]; my ($base, $m) = RT::Test->started_ok; $m->login; ok(my $res = $m->get("/")); is($res->code, 200, 'Successful request to /'); ok($res->header('X-RT-PSGIWrap'), 'X-RT-PSGIWrap header set from the plugin'); undef $m; done_testing(); rt-4.2.12/t/web/query_builder.t000644 000765 000024 00000024726 12555754775 016776 0ustar00sartakstaff000000 000000 use strict; use warnings; use HTTP::Request::Common; use HTTP::Cookies; use LWP; use RT::Test tests => 70; my $cookie_jar = HTTP::Cookies->new; my ($baseurl, $agent) = RT::Test->started_ok; # give the agent a place to stash the cookies $agent->cookie_jar($cookie_jar); # create a regression queue if it doesn't exist my $queue = RT::Test->load_or_create_queue( Name => 'Regression' ); ok $queue && $queue->id, 'loaded or created queue'; my $url = $agent->rt_base_url; ok $agent->login, "logged in"; my $response = $agent->get($url."Search/Build.html"); ok $response->is_success, "Fetched ". $url ."Search/Build.html"; sub getQueryFromForm { my $agent = shift; $agent->form_name('BuildQuery'); # This pulls out the "hidden input" query from the page my $q = $agent->current_form->find_input("Query")->value; $q =~ s/^\s+//g; $q =~ s/\s+$//g; $q =~ s/\s+/ /g; return $q; } sub selectedClauses { my $agent = shift; my @clauses = grep { defined } map { $_->value } $agent->current_form->find_input("clauses"); return [ @clauses ]; } diag "add the first condition"; { ok $agent->form_name('BuildQuery'), "found the form once"; $agent->field("ActorField", "Owner"); $agent->field("ActorOp", "="); $agent->field("ValueOfActor", "Nobody"); $agent->submit; is getQueryFromForm($agent), "Owner = 'Nobody'", 'correct query'; } diag "set the next condition"; { ok($agent->form_name('BuildQuery'), "found the form again"); $agent->field("QueueOp", "!="); $agent->field("ValueOfQueue", "Regression"); $agent->submit; is getQueryFromForm($agent), "Owner = 'Nobody' AND Queue != 'Regression'", 'correct query'; } diag "We're going to delete the owner"; { $agent->select("clauses", ["0"] ); $agent->click("DeleteClause"); ok $agent->form_name('BuildQuery'), "found the form"; is getQueryFromForm($agent), "Queue != 'Regression'", 'correct query'; } diag "add a cond with OR and se number by the way"; { $agent->field("AndOr", "OR"); $agent->select("idOp", ">"); $agent->field("ValueOfid" => "1234"); $agent->click("AddClause"); ok $agent->form_name('BuildQuery'), "found the form again"; is getQueryFromForm($agent), "Queue != 'Regression' OR id > 1234", "added something as OR, and number not quoted"; is_deeply selectedClauses($agent), ["1"], 'the id that we just entered is still selected'; } diag "Move the second one up a level"; { $agent->click("Up"); ok $agent->form_name('BuildQuery'), "found the form again"; is getQueryFromForm($agent), "id > 1234 OR Queue != 'Regression'", "moved up one"; is_deeply selectedClauses($agent), ["0"], 'the one we moved up is selected'; } diag "Move the second one right"; { $agent->click("Right"); ok $agent->form_name('BuildQuery'), "found the form again"; is getQueryFromForm($agent), "Queue != 'Regression' OR ( id > 1234 )", "moved over to the right (and down)"; is_deeply selectedClauses($agent), ["2"], 'the one we moved right is selected'; } diag "Move the block up"; { $agent->select("clauses", ["1"]); $agent->click("Up"); ok $agent->form_name('BuildQuery'), "found the form again"; is getQueryFromForm($agent), "( id > 1234 ) OR Queue != 'Regression'", "moved up"; is_deeply selectedClauses($agent), ["0"], 'the one we moved up is selected'; } diag "Can not move up the top most clause"; { $agent->select("clauses", ["0"]); $agent->click("Up"); ok $agent->form_name('BuildQuery'), "found the form again"; $agent->content_contains("error: can't move up", "i shouldn't have been able to hit up"); is_deeply selectedClauses($agent), ["0"], 'the one we tried to move is selected'; } diag "Can not move left the left most clause"; { $agent->click("Left"); ok($agent->form_name('BuildQuery'), "found the form again"); $agent->content_contains("error: can't move left", "i shouldn't have been able to hit left"); is_deeply selectedClauses($agent), ["0"], 'the one we tried to move is selected'; } diag "Add a condition into a nested block"; { $agent->select("clauses", ["1"]); $agent->select("ValueOfStatus" => "stalled"); $agent->submit; ok $agent->form_name('BuildQuery'), "found the form again"; is_deeply selectedClauses($agent), ["2"], 'the one we added is only selected'; is getQueryFromForm($agent), "( id > 1234 AND Status = 'stalled' ) OR Queue != 'Regression'", "added new one"; } diag "click advanced, enter 'C1 OR ( C2 AND C3 )', apply, aggregators should stay the same."; { my $response = $agent->get($url."Search/Edit.html"); ok( $response->is_success, "Fetched /Search/Edit.html" ); ok($agent->form_name('BuildQueryAdvanced'), "found the form"); $agent->field("Query", "Status = 'new' OR ( Status = 'open' AND Subject LIKE 'office' )"); $agent->submit; is( getQueryFromForm($agent), "Status = 'new' OR ( Status = 'open' AND Subject LIKE 'office' )", "no aggregators change" ); } # - new items go one level down # - add items at currently selected level # - if nothing is selected, add at end, one level down # # move left # - error if nothing selected # - same item should be selected after move # - can't move left if you're at the top level # # move right # - error if nothing selected # - same item should be selected after move # - can always move right (no max depth...should there be?) # # move up # - error if nothing selected # - same item should be selected after move # - can't move up if you're first in the list # # move down # - error if nothing selected # - same item should be selected after move # - can't move down if you're last in the list # # toggle # - error if nothing selected # - change all aggregators in the grouping # - don't change any others # # delete # - error if nothing selected # - delete currently selected item # - delete all children of a grouping # - if delete leaves a node with no children, delete that, too # - what should be selected? # # Clear # - clears entire query # - clears it from the session, too # create a custom field with nonascii name and try to add a condition { my $cf = RT::CustomField->new( RT->SystemUser ); $cf->LoadByName( Name => "\x{442}", LookupType => RT::Ticket->CustomFieldLookupType, ObjectId => 0 ); if ( $cf->id ) { is($cf->Type, 'Freeform', 'loaded and type is correct'); } else { my ($return, $msg) = $cf->Create( Name => "\x{442}", Queue => 0, Type => 'Freeform', ); ok($return, 'created CF') or diag "error: $msg"; } my $response = $agent->get($url."Search/Build.html?NewQuery=1"); ok( $response->is_success, "Fetched " . $url."Search/Build.html" ); ok($agent->form_name('BuildQuery'), "found the form once"); $agent->field("ValueOfCF.{\x{442}}", "\x{441}"); $agent->submit(); is( getQueryFromForm($agent), "CF.{\x{442}} LIKE '\x{441}'", "no changes, no duplicate condition with badly encoded text" ); } diag "input a condition, select (several conditions), click delete"; { my $response = $agent->get( $url."Search/Edit.html" ); ok $response->is_success, "Fetched /Search/Edit.html"; ok $agent->form_name('BuildQueryAdvanced'), "found the form"; $agent->field("Query", "( Status = 'new' OR Status = 'open' )"); $agent->submit; is( getQueryFromForm($agent), "( Status = 'new' OR Status = 'open' )", "query is the same" ); $agent->select("clauses", [qw(0 1 2)]); $agent->field( ValueOfid => 10 ); $agent->click("DeleteClause"); is( getQueryFromForm($agent), "id < 10", "replaced query successfuly" ); } diag "send query with not quoted negative number"; { my $response = $agent->get($url."Search/Build.html?Query=Priority%20>%20-2"); ok( $response->is_success, "Fetched " . $url."Search/Build.html" ); is( getQueryFromForm($agent), "Priority > -2", "query is the same" ); } diag "click advanced, enter an invalid SQL IS restriction, apply and check that we corrected it"; { my $response = $agent->get($url."Search/Edit.html"); ok( $response->is_success, "Fetched /Search/Edit.html" ); ok($agent->form_name('BuildQueryAdvanced'), "found the form"); $agent->field("Query", "Requestor.EmailAddress IS 'FOOBAR'"); $agent->submit; is( getQueryFromForm($agent), "Requestor.EmailAddress IS NULL", "foobar is replaced by NULL" ); } diag "click advanced, enter an invalid SQL IS NOT restriction, apply and check that we corrected it"; { my $response = $agent->get($url."Search/Edit.html"); ok( $response->is_success, "Fetched /Search/Edit.html" ); ok($agent->form_name('BuildQueryAdvanced'), "found the form"); $agent->field("Query", "Requestor.EmailAddress IS NOT 'FOOBAR'"); $agent->submit; is( getQueryFromForm($agent), "Requestor.EmailAddress IS NOT NULL", "foobar is replaced by NULL" ); } diag "click advanced, enter a valid SQL, but the field is lower cased"; { my $response = $agent->get($url."Search/Edit.html"); ok( $response->is_success, "Fetched /Search/Edit.html" ); ok($agent->form_name('BuildQueryAdvanced'), "found the form"); $agent->field("Query", "status = 'new'"); $agent->submit; $agent->content_lacks( 'Unknown field:', 'no "unknown field" warning' ); is( getQueryFromForm($agent), "Status = 'new'", "field's case is corrected" ); } diag "make sure skipped order by field doesn't break search"; { my $t = RT::Test->create_ticket( Queue => 'General', Subject => 'test' ); ok $t && $t->id, 'created a ticket'; $agent->get_ok($url."Search/Edit.html"); ok($agent->form_name('BuildQueryAdvanced'), "found the form"); $agent->field("Query", "id = ". $t->id); $agent->submit; $agent->follow_link_ok({id => 'page-results'}); ok( $agent->find_link( text => $t->id, url_regex => qr{/Ticket/Display\.html}, ), "link to the ticket" ); $agent->follow_link_ok({id => 'page-edit_search'}); $agent->form_name('BuildQuery'); $agent->field("OrderBy", 'Requestor.EmailAddress', 3); $agent->submit; $agent->form_name('BuildQuery'); is $agent->value('OrderBy', 1), 'id'; is $agent->value('OrderBy', 2), ''; is $agent->value('OrderBy', 3), 'Requestor.EmailAddress'; $agent->follow_link_ok({id => 'page-results'}); ok( $agent->find_link( text => $t->id, url_regex => qr{/Ticket/Display\.html}, ), "link to the ticket" ); } rt-4.2.12/t/web/query_builder_queue_limits.t000644 000765 000024 00000013404 12555754775 021552 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 34; my $lifecycles = RT->Config->Get('Lifecycles'); $lifecycles->{foo} = { initial => ['initial'], active => ['open'], inactive => ['resolved'], }; # explicitly Set so RT::Test can catch our change RT->Config->Set( Lifecycles => %$lifecycles ); RT::Lifecycle->FillCache(); my $general = RT::Test->load_or_create_queue( Name => 'General' ); my $foo = RT::Test->load_or_create_queue( Name => 'foo', Lifecycle => 'foo' ); my $global_cf = RT::Test->load_or_create_custom_field( Name => 'global_cf', Queue => 0, Type => 'FreeformSingle', ); my $general_cf = RT::Test->load_or_create_custom_field( Name => 'general_cf', Queue => 'General', Type => 'FreeformSingle', ); my $foo_cf = RT::Test->load_or_create_custom_field( Name => 'foo_cf', Queue => 'foo', Type => 'FreeformSingle' ); my $root = RT::Test->load_or_create_user( Name => 'root', ); my $user_a = RT::Test->load_or_create_user( Name => 'user_a', Password => 'password', ); my $user_b = RT::Test->load_or_create_user( Name => 'user_b', Password => 'password', ); ok( RT::Test->set_rights( { Principal => $user_a, Object => $general, Right => ['OwnTicket'], }, { Principal => $user_b, Object => $foo, Right => ['OwnTicket'], }, ), 'granted OwnTicket right for user_a and user_b' ); my ( $url, $m ) = RT::Test->started_ok; ok( $m->login, 'logged in' ); $m->get_ok( $url . '/Search/Build.html' ); diag "check default statuses, cf and owners"; my $form = $m->form_name('BuildQuery'); ok( $form, 'found BuildQuery form' ); ok( $form->find_input("ValueOfCF.{global_cf}"), 'found global_cf by default' ); ok( !$form->find_input("ValueOfCF.{general_cf}"), 'no general_cf by default' ); ok( !$form->find_input("ValueOfCF.{foo_cf}"), 'no foo_cf by default' ); my $status_input = $form->find_input('ValueOfStatus'); my @statuses = sort $status_input->possible_values; is_deeply( \@statuses, [ '', qw/initial new open open rejected resolved resolved stalled/], 'found all statuses' ) or diag "Statuses are: ", explain \@statuses; my $owner_input = $form->find_input('ValueOfActor'); my @owners = sort $owner_input->possible_values; is_deeply( \@owners, [ '', qw/Nobody root user_a user_b/], 'found all users' ); diag "limit queue to foo"; $m->submit_form( fields => { ValueOfQueue => 'foo' }, button => 'AddClause', ); $form = $m->form_name('BuildQuery'); ok( $form->find_input("ValueOfCF.{foo_cf}"), 'found foo_cf' ); ok( $form->find_input("ValueOfCF.{global_cf}"), 'found global_cf' ); ok( !$form->find_input("ValueOfCF.{general_cf}"), 'still no general_cf' ); $status_input = $form->find_input('ValueOfStatus'); @statuses = sort $status_input->possible_values; is_deeply( \@statuses, [ '', qw/initial open resolved/ ], 'found statuses from foo only' ); $owner_input = $form->find_input('ValueOfActor'); @owners = sort $owner_input->possible_values; is_deeply( \@owners, [ '', qw/Nobody root user_b/], 'no user_a' ); diag "limit queue to general too"; $m->submit_form( fields => { ValueOfQueue => 'General' }, button => 'AddClause', ); $form = $m->form_name('BuildQuery'); ok( $form->find_input("ValueOfCF.{general_cf}"), 'found general_cf' ); ok( $form->find_input("ValueOfCF.{foo_cf}"), 'found foo_cf' ); ok( $form->find_input("ValueOfCF.{global_cf}"), 'found global_cf' ); $status_input = $form->find_input('ValueOfStatus'); @statuses = sort $status_input->possible_values; is_deeply( \@statuses, [ '', qw/initial new open open rejected resolved resolved stalled/ ], 'found all statuses again' ) or diag "Statuses are: ", explain \@statuses; $owner_input = $form->find_input('ValueOfActor'); @owners = sort $owner_input->possible_values; is_deeply( \@owners, [ '', qw/Nobody root user_a user_b/], 'found all users again' ); diag "limit queue to != foo"; $m->get_ok( $url . '/Search/Build.html?NewQuery=1' ); $m->submit_form( form_name => 'BuildQuery', fields => { ValueOfQueue => 'foo', QueueOp => '!=' }, button => 'AddClause', ); $form = $m->form_name('BuildQuery'); ok( $form->find_input("ValueOfCF.{global_cf}"), 'found global_cf' ); ok( !$form->find_input("ValueOfCF.{foo_cf}"), 'no foo_cf' ); ok( !$form->find_input("ValueOfCF.{general_cf}"), 'no general_cf' ); $status_input = $form->find_input('ValueOfStatus'); @statuses = sort $status_input->possible_values; is_deeply( \@statuses, [ '', qw/initial new open open rejected resolved resolved stalled/], 'found all statuses' ) or diag "Statuses are: ", explain \@statuses; $owner_input = $form->find_input('ValueOfActor'); @owners = sort $owner_input->possible_values; is_deeply( \@owners, [ '', qw/Nobody root user_a user_b/], 'found all users' ); diag "limit queue to General OR foo"; $m->get_ok( $url . '/Search/Edit.html' ); $m->submit_form( form_name => 'BuildQueryAdvanced', fields => { Query => q{Queue = 'General' OR Queue = 'foo'} }, ); $form = $m->form_name('BuildQuery'); ok( $form->find_input("ValueOfCF.{general_cf}"), 'found general_cf' ); ok( $form->find_input("ValueOfCF.{foo_cf}"), 'found foo_cf' ); ok( $form->find_input("ValueOfCF.{global_cf}"), 'found global_cf' ); $status_input = $form->find_input('ValueOfStatus'); @statuses = sort $status_input->possible_values; is_deeply( \@statuses, [ '', qw/initial new open open rejected resolved resolved stalled/ ], 'found all statuses' ) or diag "Statuses are: ", explain \@statuses; $owner_input = $form->find_input('ValueOfActor'); @owners = sort $owner_input->possible_values; is_deeply( \@owners, [ '', qw/Nobody root user_a user_b/], 'found all users' ); rt-4.2.12/t/web/query_log.t000644 000765 000024 00000001130 12555754775 016111 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 9; RT->Config->Set(StatementLog => 1); my ($baseurl, $m) = RT::Test->started_ok; ok $m->login, 'logged in'; my $root = RT::User->new($RT::SystemUser); $root->LoadByEmail('root@localhost'); $m->get_ok("/Admin/Tools/Queries.html"); $m->text_contains("/index.html", "we include info about a page we hit while logging in"); $m->text_contains("Stack:", "stack traces"); $m->text_like(qr{/autohandler:\d+}, "stack trace includes mason components"); $m->text_contains("SELECT * FROM Principals WHERE id = '".$root->id."'", "we interpolate bind params"); rt-4.2.12/t/web/queue_caching.t000644 000765 000024 00000006050 12555754775 016711 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 48; # make an initial queue, so we have more than 1 my $original_test_queue = new_queue("Test$$"); my ($baseurl, $m) = RT::Test->started_ok; ok $m->login, 'logged in'; diag("Check for 2 existing queues being visible"); { check_queues($m); } diag("Add a new queue, which won't show up until we fix the cache"); { new_queue("New Test $$"); check_queues($m); } diag("Disable an existing queue, it should stop appearing in the list"); { ok($original_test_queue->SetDisabled(1)); check_queues($m); } diag("Bring back a disabled queue"); { ok($original_test_queue->SetDisabled(0)); check_queues($m); } diag("Rename the original queue, make sure the name change is uncached"); { ok($original_test_queue->SetName("Name Change $$")); check_queues($m); } diag("Test a user who has more limited rights Queues"); { my $user_a = RT::Test->load_or_create_user( Name => 'user_a', Password => 'password', ); ok $user_a && $user_a->id, 'loaded or created user'; ok( RT::Test->set_rights( { Principal => $user_a, Right => [qw(SeeQueue CreateTicket)], Object => $original_test_queue }, ), 'Allow user a to see the testing queue'); my $a_m = RT::Test::Web->new; ok $a_m->login('user_a', 'password'), 'logged in as user A'; # check that they see a single queue check_queues($a_m,[$original_test_queue->Id],[$original_test_queue->Name]); ok( RT::Test->add_rights( { Principal => $user_a, Right => [qw(SeeQueue CreateTicket)] }, ), 'add global queue viewing rights'); check_queues($a_m); } sub new_queue { my $name = shift; my $new_queue = RT::Queue->new(RT->SystemUser); ok($new_queue->Create( Name => $name, Description => "Testing for $name queue" ), "Created queue ".$new_queue->Name); return $new_queue; } sub internal_queues { my $internal_queues = RT::Queues->new(RT->SystemUser); $internal_queues->Limit(FIELD => 'Disabled', VALUE => 0); my $queuelist; while ( my $q = $internal_queues->Next ) { $queuelist->{$q->Id} = $q->Name; } return $queuelist; } # takes a WWW::Mech object and two optional arrayrefs of queue ids and names # compares the list of ids and names to the dropdown of Queues for the New Ticket In form sub check_queues { my ($browser, $queue_id_list, $queue_name_list) = @_; $browser->get_ok($baseurl,"Navigated to homepage"); ok(my $form = $browser->form_name('CreateTicketInQueue'), "Found New Ticket In form"); ok(my $queuelist = $form->find_input('Queue','option'), "Found queue select"); my @queue_ids = $queuelist->possible_values; my @queue_names = $queuelist->value_names; my $full_queue_list = internal_queues(); $queue_id_list = [keys %$full_queue_list] unless $queue_id_list; $queue_name_list = [values %$full_queue_list] unless $queue_name_list; is_deeply([sort @queue_ids],[sort @$queue_id_list], "Queue list contains the expected queue ids"); is_deeply([sort @queue_names],[sort @$queue_name_list], "Queue list contains the expected queue namess"); } rt-4.2.12/t/web/queue_create.t000644 000765 000024 00000003406 12555754775 016562 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 13; my ( $baseurl, $m ) = RT::Test->started_ok; ok $m->login, 'logged in as root'; my $root = RT::User->new(RT->SystemUser); ok( $root->Load('root'), 'load root user' ); my $queue_name = 'test queue'; my $queue_id; diag "Create a queue"; { $m->follow_link( id => 'admin-queues-create'); # Test queue form validation $m->submit_form( form_name => 'ModifyQueue', fields => { Name => '', }, ); $m->text_contains('Queue name is required'); $m->submit_form( form_name => 'ModifyQueue', fields => { Name => '0', }, ); $m->text_contains("'0' is not a valid name"); $m->submit_form( form_name => 'ModifyQueue', fields => { Name => '1', }, ); $m->text_contains("'1' is not a valid name"); $m->submit_form( form_name => 'ModifyQueue', fields => { Name => $queue_name, }, ); $m->content_contains('Queue created', 'created queue sucessfully' ); # Test validation on update $m->form_name('ModifyQueue'); $m->set_fields( Name => '', ); $m->click_button(value => 'Save Changes'); $m->content_contains('Illegal value for Name'); $m->form_name('ModifyQueue'); $m->set_fields( Name => '0', ); $m->click_button(value => 'Save Changes'); $m->content_contains('Illegal value for Name'); $m->form_name('ModifyQueue'); $m->set_fields( Name => '1', ); $m->click_button(value => 'Save Changes'); $m->content_contains('Illegal value for Name'); $queue_id = $m->form_name('ModifyQueue')->value('id'); ok $queue_id, "found id of the queue in the form, it's #$queue_id"; } rt-4.2.12/t/web/quickcreate.t000644 000765 000024 00000002020 12555754775 016402 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 11; RT->Config->Set('DisplayTicketAfterQuickCreate' => 0); my ($baseurl, $m) = RT::Test->started_ok; ok($m->login, 'logged in'); $m->form_with_fields('Subject', 'Content'); $m->field(Subject => 'from quick create'); $m->submit; $m->content_like(qr/Ticket \d+ created in queue/, 'created ticket'); like( $m->uri, qr{^\Q$baseurl\E/(?:index\.html)?\?results=}, 'still in homepage' ); unlike( $m->uri, qr{Ticket/Display.html}, 'not on ticket display page' ); $m->get_ok($baseurl . '/Prefs/Other.html'); $m->submit_form( form_name => 'ModifyPreferences', fields => { 'DisplayTicketAfterQuickCreate' => 1, }, button => 'Update', ); $m->content_contains( 'Preferences saved', 'enabled DisplayTicketAfterQuickCreate' ); $m->get($baseurl); $m->form_with_fields('Subject', 'Content'); $m->field(Subject => 'from quick create'); $m->submit; $m->content_like(qr/Ticket \d+ created in queue/, 'created ticket'); like( $m->uri, qr!/Ticket/Display.html!, 'still in homepage' ); rt-4.2.12/t/web/quicksearch.t000644 000765 000024 00000002635 12555754775 016420 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 9; my ($baseurl, $m) = RT::Test->started_ok; my $url = $m->rt_base_url; # merged tickets still show up in search my $t1 = RT::Ticket->new(RT->SystemUser); $t1->Create( Subject => 'base ticket'.$$, Queue => 'general', Owner => 'root', Requestor => 'customsearch@localhost', MIMEObj => MIME::Entity->build( From => 'customsearch@localhost', To => 'rt@localhost', Subject => 'base ticket'.$$, Data => "DON'T SEARCH FOR ME", ), ); ok(my $id1 = $t1->id, 'created ticket for custom search'); my $t2 = RT::Ticket->new(RT->SystemUser); $t2->Create( Subject => 'merged away'.$$, Queue => 'general', Owner => 'root', Requestor => 'customsearch@localhost', MIMEObj => MIME::Entity->build( From => 'customsearch@localhost', To => 'rt@localhost', Subject => 'merged away'.$$, Data => "MERGEDAWAY", ), ); ok(my $id2 = $t2->id, 'created ticket for custom search'); my ($ok, $msg) = $t2->MergeInto($id1); ok($ok, "merge: $msg"); ok($m->login, 'logged in'); $m->form_with_fields('q'); $m->field(q => 'fulltext:MERGEDAWAY'); TODO: { local $TODO = "We don't yet handle merged ticket content searches right"; $m->content_contains('Found 1 ticket'); } $m->content_contains('base ticket', "base ticket is found, not the merged-away ticket"); rt-4.2.12/t/web/redirect-after-login.t000644 000765 000024 00000022174 12555754775 020124 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 122; my ($baseurl, $agent) = RT::Test->started_ok; my $url = $agent->rt_base_url; diag $url if $ENV{TEST_VERBOSE}; # test a login from the main page { $agent->get_ok($url); is($agent->{'status'}, 200, "Loaded a page"); is($agent->uri, $url, "didn't redirect to /NoAuth/Login.html for base URL"); ok($agent->current_form->find_input('user')); ok($agent->current_form->find_input('pass')); like($agent->current_form->action, qr{/NoAuth/Login\.html$}, "login form action is correct"); ok($agent->content =~ /username:/i); $agent->field( 'user' => 'root' ); $agent->field( 'pass' => 'password' ); # the field isn't named, so we have to click link 0 $agent->click(0); is( $agent->status, 200, "Fetched the page ok"); ok( $agent->content =~ /Logout/i, "Found a logout link"); is( $agent->uri, $url, "right URL" ); like( $agent->{redirected_uri}, qr{/NoAuth/Login\.html$}, "We redirected from login"); $agent->logout(); } # test a bogus login from the main page { $agent->get_ok($url); is($agent->{'status'}, 200, "Loaded a page"); is($agent->uri, $url, "didn't redirect to /NoAuth/Login.html for base URL"); ok($agent->current_form->find_input('user')); ok($agent->current_form->find_input('pass')); like($agent->current_form->action, qr{/NoAuth/Login\.html$}, "login form action is correct"); ok($agent->content =~ /username:/i); $agent->field( 'user' => 'root' ); $agent->field( 'pass' => 'wrongpass' ); # the field isn't named, so we have to click link 0 $agent->click(0); is( $agent->status, 200, "Fetched the page ok"); ok( $agent->content =~ /Your username or password is incorrect/i, "Found the error message"); like( $agent->uri, qr{/NoAuth/Login\.html$}, "now on /NoAuth/Login.html" ); $agent->warning_like(qr/FAILED LOGIN for root/, "got failed login warning"); $agent->logout(); } # test a login from a non-front page, both with a double leading slash and without for my $path (qw(Prefs/Other.html /Prefs/Other.html)) { my $requested = $url.$path; $agent->get_ok($requested); is($agent->status, 200, "Loaded a page"); like($agent->uri, qr'/NoAuth/Login\.html\?next=[a-z0-9]{32}', "on login page, with next page hash"); is($agent->{redirected_uri}, $requested, "redirected from our requested page"); ok($agent->current_form->find_input('user')); ok($agent->current_form->find_input('pass')); ok($agent->current_form->find_input('next')); like($agent->value('next'), qr/^[a-z0-9]{32}$/i, "next page argument is a hash"); like($agent->current_form->action, qr{/NoAuth/Login\.html$}, "login form action is correct"); ok($agent->content =~ /username:/i); $agent->field( 'user' => 'root' ); $agent->field( 'pass' => 'password' ); # the field isn't named, so we have to click link 0 $agent->click(0); is( $agent->status, 200, "Fetched the page ok"); ok( $agent->content =~ /Logout/i, "Found a logout link"); if ($path =~ m{/}) { (my $collapsed = $path) =~ s{^/}{}; is( $agent->uri, $url.$collapsed, "right URL, with leading slashes in path collapsed" ); } else { is( $agent->uri, $requested, "right URL" ); } like( $agent->{redirected_uri}, qr{/NoAuth/Login\.html}, "We redirected from login"); $agent->logout(); } # test a bogus login from a non-front page { my $requested = $url.'Prefs/Other.html'; $agent->get_ok($requested); is($agent->status, 200, "Loaded a page"); like($agent->uri, qr'/NoAuth/Login\.html\?next=[a-z0-9]{32}', "on login page, with next page hash"); is($agent->{redirected_uri}, $requested, "redirected from our requested page"); ok($agent->current_form->find_input('user')); ok($agent->current_form->find_input('pass')); ok($agent->current_form->find_input('next')); like($agent->value('next'), qr/^[a-z0-9]{32}$/i, "next page argument is a hash"); like($agent->current_form->action, qr{/NoAuth/Login\.html$}, "login form action is correct"); ok($agent->content =~ /username:/i); $agent->field( 'user' => 'root' ); $agent->field( 'pass' => 'wrongpass' ); # the field isn't named, so we have to click link 0 $agent->click(0); is( $agent->status, 200, "Fetched the page ok"); ok( $agent->content =~ /Your username or password is incorrect/i, "Found the error message"); like( $agent->uri, qr{/NoAuth/Login\.html$}, "still on /NoAuth/Login.html" ); $agent->warning_like(qr/FAILED LOGIN for root/, "got failed login warning"); # try to login again ok($agent->current_form->find_input('user')); ok($agent->current_form->find_input('pass')); ok($agent->current_form->find_input('next')); like($agent->value('next'), qr/^[a-z0-9]{32}$/i, "next page argument is a hash"); like($agent->current_form->action, qr{/NoAuth/Login\.html$}, "login form action is correct"); ok($agent->content =~ /username:/i); $agent->field( 'user' => 'root' ); $agent->field( 'pass' => 'password' ); # the field isn't named, so we have to click link 0 $agent->click(0); is( $agent->status, 200, "Fetched the page ok"); # check out where we got to is( $agent->uri, $requested, "right URL" ); like( $agent->{redirected_uri}, qr{/NoAuth/Login\.html}, "We redirected from login"); $agent->logout(); } # test a login from the main page with query params { my $requested = $url."?user=root;pass=password"; $agent->get_ok($requested); is($agent->{'status'}, 200, "Loaded a page"); is($agent->uri, $requested, "didn't redirect to /NoAuth/Login.html for base URL"); ok($agent->content =~ /Logout/i, "Found a logout link - we're logged in"); $agent->logout(); } # test a bogus login from the main page with query params { my $requested = $url."?user=root;pass=wrongpass"; $agent->get_ok($requested); is($agent->{'status'}, 200, "Loaded a page"); is($agent->uri, $requested, "didn't redirect to /NoAuth/Login.html for base URL"); ok($agent->content =~ /Your username or password is incorrect/i, "Found the error message"); ok($agent->current_form->find_input('user')); ok($agent->current_form->find_input('pass')); like($agent->current_form->action, qr{/NoAuth/Login\.html$}, "login form action is correct"); $agent->warning_like(qr/FAILED LOGIN for root/, "got failed login warning"); } # test a bogus login from a non-front page with query params { my $requested = $url."Prefs/Other.html?user=root;pass=wrongpass"; $agent->get_ok($requested); is($agent->status, 200, "Loaded a page"); like($agent->uri, qr'/NoAuth/Login\.html\?next=[a-z0-9]{32}', "on login page, with next page hash"); is($agent->{redirected_uri}, $requested, "redirected from our requested page"); ok( $agent->content =~ /Your username or password is incorrect/i, "Found the error message"); ok($agent->current_form->find_input('user')); ok($agent->current_form->find_input('pass')); ok($agent->current_form->find_input('next')); like($agent->value('next'), qr/^[a-z0-9]{32}$/i, "next page argument is a hash"); like($agent->current_form->action, qr{/NoAuth/Login\.html$}, "login form action is correct"); $agent->warning_like(qr/FAILED LOGIN for root/, "got failed login warning"); # Try to login again ok($agent->content =~ /username:/i); $agent->field( 'user' => 'root' ); $agent->field( 'pass' => 'password' ); # the field isn't named, so we have to click link 0 $agent->click(0); is( $agent->status, 200, "Fetched the page ok"); # check out where we got to is( $agent->uri, $requested, "right URL" ); like( $agent->{redirected_uri}, qr{/NoAuth/Login\.html}, "We redirected from login"); $agent->logout(); } # test REST login response { $agent = RT::Test::Web->new; my $requested = $url."REST/1.0/?user=root;pass=password"; $agent->get($requested); is($agent->status, 200, "Loaded a page"); is($agent->uri, $requested, "didn't redirect to /NoAuth/Login.html for REST"); $agent->get_ok($url."REST/1.0"); } # test REST login response for wrong pass { $agent = RT::Test::Web->new; my $requested = $url."REST/1.0/?user=root;pass=passwrong"; $agent->get_ok($requested); is($agent->status, 200, "Loaded a page"); is($agent->uri, $requested, "didn't redirect to /NoAuth/Login.html for REST"); like($agent->content, qr/401 Credentials required/i, "got error status"); like($agent->content, qr/Your username or password is incorrect/, "got error message"); $agent->warning_like(qr/FAILED LOGIN for root/, "got failed login warning"); } # test REST login response for no creds { $agent = RT::Test::Web->new; my $requested = $url."REST/1.0/"; $agent->get_ok($requested); is($agent->status, 200, "Loaded a page"); is($agent->uri, $requested, "didn't redirect to /NoAuth/Login.html for REST"); like($agent->content, qr/401 Credentials required/i, "got error status"); unlike($agent->content, qr/Your username or password is incorrect/, "didn't get any error message"); } # XXX TODO: we should also be testing WebRemoteUserAuth here, but we don't have # the framework for dealing with that 1; rt-4.2.12/t/web/redirect.t000644 000765 000024 00000005423 12555754775 015715 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 13; my $r = $HTML::Mason::Commands::r = bless {}, 'R'; my $m = $HTML::Mason::Commands::m = bless {}, 'M'; set_config( CanonicalizeRedirectURLs => 0, WebDomain => 'localhost', WebPort => 80, WebPath => '', ); is( RT->Config->Get('WebBaseURL'), 'http://localhost' ); is( RT->Config->Get('WebURL'), 'http://localhost/' ); redirect_ok( 'http://localhost/Ticket/', 'http://localhost/Ticket/', { SERVER_NAME => 'localhost', SERVER_PORT => 80 }, ); redirect_ok( '/Ticket/', 'http://localhost/Ticket/', { SERVER_NAME => 'localhost', SERVER_PORT => 80 }, ); redirect_ok( 'http://localhost/Ticket/', 'http://example.com/Ticket/', { SERVER_NAME => 'example.com', SERVER_PORT => 80 }, ); set_config( CanonicalizeRedirectURLs => 0, WebDomain => 'localhost', WebPort => 443, WebPath => '', ); is( RT->Config->Get('WebBaseURL'), 'https://localhost' ); is( RT->Config->Get('WebURL'), 'https://localhost/' ); redirect_ok( 'https://localhost/Ticket/', 'https://localhost/Ticket/', { SERVER_NAME => 'localhost', SERVER_PORT => 443, HTTPS => 'on' }, ); redirect_ok( '/Ticket/', 'https://localhost/Ticket/', { SERVER_NAME => 'localhost', SERVER_PORT => 443, HTTPS => 'on' }, ); redirect_ok( 'https://localhost/Ticket/', 'http://localhost/Ticket/', { SERVER_NAME => 'localhost', SERVER_PORT => 80 }, ); redirect_ok( '/Ticket/', 'http://localhost/Ticket/', { SERVER_NAME => 'localhost', SERVER_PORT => 80 }, ); redirect_ok( 'https://localhost/Ticket/', 'http://example.com/Ticket/', { SERVER_NAME => 'example.com', SERVER_PORT => 80 }, ); redirect_ok( 'https://localhost/Ticket/', 'https://example.com/Ticket/', { SERVER_NAME => 'example.com', SERVER_PORT => 443, HTTPS => 'on' }, ); sub set_config { my %values = @_; while ( my ($k, $v) = each %values ) { RT->Config->Set( $k => $v ); } unless ( $values{'WebBaseURL'} ) { my $port = RT->Config->Get('WebPort'); RT->Config->Set( WebBaseURL => ($port == 443? 'https': 'http') .'://' . RT->Config->Get('WebDomain') . ($port != 80 && $port != 443? ":$port" : '') ); } unless ( $values{'WebURL'} ) { RT->Config->Set( WebURL => RT->Config->Get('WebBaseURL') . RT->Config->Get('WebPath') . "/" ); } } sub redirect_ok { my ($to, $expected, $env, $details) = @_; local %ENV = %ENV; while ( my ($k, $v) = each %{ $env || {} } ) { $ENV{ $k } = $v; } RT::Interface::Web::Redirect( $to ); is($m->redirect, $expected, $details || "correct for '$to'"); } package R; sub status {}; package M; sub redirect { $_[0]{'last'} = $_[1] if @_ > 1; return $_[0]{'last'} } sub abort {} rt-4.2.12/t/web/reminder-permissions.t000644 000765 000024 00000013555 12555754775 020277 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 40; my $user_a = RT::Test->load_or_create_user( Name => 'user_a', Password => 'password', ); ok( $user_a && $user_a->id, 'created user_a' ); ok( RT::Test->add_rights( { Principal => $user_a, Right => [qw/SeeQueue CreateTicket ShowTicket OwnTicket/] }, ), 'add basic rights for user_a' ); ok( RT::Test->add_rights( { Principal => 'Owner', Right => [qw/ModifyTicket/], }, ), 'add basic rights for owner' ); my $ticket = RT::Test->create_ticket( Subject => 'test reminder permission', Queue => 'General', ); ok( $ticket->id, 'created a ticket' ); my ( $baseurl, $m ) = RT::Test->started_ok; $m->login; my ( $root_reminder_id, $user_a_reminder_id ); diag "create two reminders, with owner root and user_a, respectively"; { $m->goto_ticket( $ticket->id ); $m->text_contains( 'New reminder:', 'can create a new reminder' ); $m->form_name('UpdateReminders'); $m->field( 'NewReminder-Subject' => "root reminder" ); $m->submit; $m->text_contains( "Reminder 'root reminder': Created", 'created root reminder' ); $m->form_name('UpdateReminders'); $m->field( 'NewReminder-Subject' => "user_a reminder", ); $m->field( 'NewReminder-Owner' => $user_a->id, ); $m->submit; $m->text_contains( "Reminder 'user_a reminder': Created", 'created user_a reminder' ); my $reminders = RT::Reminders->new($user_a); $reminders->Ticket( $ticket->id ); my $col = $reminders->Collection; while ( my $c = $col->Next ) { if ( $c->Subject eq 'root reminder' ) { $root_reminder_id = $c->id; } elsif ( $c->Subject eq 'user_a reminder' ) { $user_a_reminder_id = $c->id; } } } diag "check root_a can update user_a reminder but not root reminder"; my $m_a = RT::Test::Web->new; { ok( $m_a->login( user_a => 'password' ), 'logged in as user_a' ); $m_a->goto_ticket( $ticket->id ); $m_a->content_lacks( 'New reminder:', 'can not create a new reminder' ); $m_a->content_contains( 'root reminder', 'can see root reminder' ); $m_a->content_contains( 'user_a reminder', 'can see user_a reminder' ); $m_a->content_like( qr!form_name('UpdateReminders'); $m_a->tick( "Complete-Reminder-$user_a_reminder_id" => 1 ); $m_a->submit; $m_a->text_contains( "Reminder 'user_a reminder': Status changed from 'open' to 'resolved'", 'complete user_a reminder' ); $m_a->follow_link_ok( { id => 'page-reminders' } ); $m_a->title_is( "Reminders for ticket #" . $ticket->id ); $m_a->content_contains( 'root reminder', 'can see root reminder' ); $m_a->content_contains( 'user_a reminder', 'can see user_a reminder' ); $m_a->content_lacks( 'New reminder:', 'can not create a new reminder' ); $m_a->content_like( qr!form_name('UpdateReminders'); $m_a->untick( "Complete-Reminder-$user_a_reminder_id", 1 ); $m_a->submit; $m_a->text_contains( "Reminder 'user_a reminder': Status changed from 'resolved' to 'open'", 'reopen user_a reminder' ); } diag "set ticket owner to user_a to let user_a grant modify ticket right"; { $ticket->SetOwner( $user_a->id ); $m_a->goto_ticket( $ticket->id ); $m_a->content_contains( 'New reminder:', 'can create a new reminder' ); $m_a->content_like( qr!form_name('UpdateReminders'); $m_a->field( 'NewReminder-Subject' => "user_a from display reminder" ); $m_a->submit; $m_a->text_contains( "Reminder 'user_a from display reminder': Created", 'created user_a from display reminder' ); $m_a->follow_link_ok( { id => 'page-reminders' } ); $m_a->title_is( "Reminders for ticket #" . $ticket->id ); $m_a->content_contains( 'New reminder:', 'can create a new reminder' ); $m_a->content_like( qr!form_name('UpdateReminders'); $m_a->field( 'NewReminder-Subject' => "user_a from reminders reminder" ); $m_a->submit; $m_a->text_contains( "Reminder 'user_a from reminders reminder': Created", 'created user_a from reminders reminder' ); } diag "grant user_a with ModifyTicket globally"; { ok( RT::Test->add_rights( { Principal => $user_a, Right => [qw/ModifyTicket/], }, ), 'add ModifyTicket rights to user_a' ); $m_a->goto_ticket( $ticket->id ); $m_a->content_unlike( qr!form_name('UpdateReminders'); $m_a->tick( "Complete-Reminder-$root_reminder_id" => 1 ); $m_a->submit; $m_a->text_contains( "Reminder 'root reminder': Status changed from 'open' to 'resolved'", 'complete root reminder' ); $m_a->follow_link_ok( { id => 'page-reminders' } ); $m_a->content_unlike( qr!form_name('UpdateReminders'); $m_a->untick( "Complete-Reminder-$root_reminder_id" => 1 ); $m_a->submit; $m_a->text_contains( "Reminder 'root reminder': Status changed from 'resolved' to 'open'", 'reopen root reminder' ); } rt-4.2.12/t/web/reminders.t000644 000765 000024 00000010355 12555754775 016104 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 45; my ($baseurl, $m) = RT::Test->started_ok; ok($m->login, 'logged in'); my $user = RT::CurrentUser->new('root'); my $ticket = RT::Ticket->new($user); $ticket->Create(Subject => 'testing reminders!', Queue => 'General'); ok($ticket->id, 'created a ticket'); $m->goto_ticket($ticket->id); $m->text_contains('New reminder:', 'can create a new reminder'); $m->content_unlike(qr{Check box to complete}, "we don't display this text when there are no reminders"); $m->content_unlike(qr{]*>Reminders?}, "no reminder titlebar"); $m->follow_link_ok({id => 'page-reminders'}); $m->title_is("Reminders for ticket #" . $ticket->id); $m->text_contains('New reminder:', 'can create a new reminder'); $m->content_unlike(qr{Check box to complete}, "we don't display this text when there are no reminders"); $m->content_unlike(qr{]*>Reminders?}, "no reminder titlebar"); $m->goto_ticket($ticket->id); $m->form_name('UpdateReminders'); $m->field( 'NewReminder-Subject' => "baby's first reminder" ); $m->submit; $m->content_contains("Reminder 'baby's first reminder': Created"); $ticket->SetStatus('deleted'); is( $ticket->Status, 'deleted', 'deleted ticket' ); $m->form_name('UpdateReminders'); $m->field( 'NewReminder-Subject' => "link to a deleted ticket" ); $m->submit; $m->content_contains("Can't link to a deleted ticket"); $m->get_ok('/Tools/MyReminders.html'); $m->content_contains( "baby's first reminder", 'got the reminder even the ticket is deleted' ); $m->goto_ticket( $ticket->id ); $m->content_lacks('New reminder:', "can't create a new reminder"); $m->text_contains('Check box to complete', "we DO display this text when there are reminders"); $m->content_like(qr{]*>Reminders?}, "now we have a reminder titlebar"); $m->text_contains("baby's first reminder", "display the reminder's subject"); my $reminders = RT::Reminders->new($user); $reminders->Ticket($ticket->id); my $col = $reminders->Collection; is($col->Count, 1, 'got a reminder'); my $reminder = $col->First; is($reminder->Subject, "baby's first reminder"); my $reminder_id = $reminder->id; is($reminder->Status, 'open'); $ticket->SetStatus('open'); is( $ticket->Status, 'open', 'changed back to new' ); $m->goto_ticket($ticket->id); $m->text_contains('New reminder:', "can create a new reminder"); $m->text_contains('Check box to complete', "we DO display this text when there are reminders"); $m->content_like(qr{]*>Reminders?}, "now we have a reminder titlebar"); $m->text_contains("baby's first reminder", "display the reminder's subject"); $m->follow_link_ok({id => 'page-reminders'}); $m->title_is("Reminders for ticket #" . $ticket->id); $m->form_name('UpdateReminders'); $m->field("Reminder-Subject-$reminder_id" => "changed the subject"); $m->submit; DBIx::SearchBuilder::Record::Cachable->FlushCache; $reminder = RT::Ticket->new($user); $reminder->Load($reminder_id); is($reminder->Subject, 'changed the subject'); is($reminder->Status, 'open'); $m->goto_ticket($ticket->id); $m->form_name('UpdateReminders'); $m->tick("Complete-Reminder-$reminder_id" => 1); $m->submit; DBIx::SearchBuilder::Record::Cachable->FlushCache; $reminder = RT::Ticket->new($user); $reminder->Load($reminder_id); is($reminder->Status, 'resolved'); $m->text_contains('New reminder:', 'can create a new reminder'); $m->content_unlike(qr{Check box to complete}, "we don't display this text when there are open reminders"); $m->content_unlike(qr{]*>Reminders?}, "no reminder titlebar"); $m->content_unlike(qr{baby's first reminder}, "we don't display resolved reminders"); $m->follow_link_ok({id => 'page-reminders'}); $m->title_is("Reminders for ticket #" . $ticket->id); $m->text_contains('New reminder:', 'can create a new reminder'); $m->text_contains('Check box to complete', "we DO display this text when there are reminders"); $m->content_contains("changed the subject", "display the resolved reminder's subject"); # make sure that when we submit the form, it doesn't accidentally reopen # resolved reminders $m->goto_ticket($ticket->id); $m->form_name('UpdateReminders'); $m->submit; DBIx::SearchBuilder::Record::Cachable->FlushCache; $reminder = RT::Ticket->new($user); $reminder->Load($reminder_id); is($reminder->Status, 'resolved'); rt-4.2.12/t/web/remote_user.t000644 000765 000024 00000013557 12555754775 016454 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT; use RT::Test plan => 'no_plan'; sub stop_server { my $mech = shift; # Ensure we're logged in for the final warnings check $$mech->auth("root"); # Force the warnings check before we stop the server undef $$mech; RT::Test->stop_server; } diag "Continuous + Fallback"; { RT->Config->Set( DevelMode => 0 ); RT->Config->Set( WebRemoteUserAuth => 1 ); RT->Config->Set( WebRemoteUserAuthContinuous => 1 ); RT->Config->Set( WebFallbackToRTLogin => 1 ); RT->Config->Set( WebRemoteUserAutocreate => 0 ); my ( $url, $m ) = RT::Test->started_ok( basic_auth => 'anon' ); diag "Internal auth"; { # Empty REMOTE_USER $m->auth(""); # First request gets the login form $m->get_ok($url, "No basic auth is OK"); $m->content_like(qr/Login/, "Login form"); # Log in using RT's form $m->submit_form_ok({ with_fields => { user => 'root', pass => 'password', }, }, "Submitted login form"); ok $m->logged_in_as("root"), "Logged in as root"; # Still logged in on another request without REMOTE_USER $m->follow_link_ok({ text => 'My Tickets' }); ok $m->logged_in_as("root"), "Logged in as root"; ok $m->logout, "Logged out"; # We're definitely logged out? $m->get_ok($url); $m->content_like(qr/Login/, "Login form"); } diag "External auth"; { # REMOTE_USER of root $m->auth("root"); # Automatically logged in as root without Login page $m->get_ok($url); ok $m->logged_in_as("root"), "Logged in as root"; # Still logged in on another request $m->follow_link_ok({ text => 'My Tickets' }); ok $m->logged_in_as("root"), "Still logged in as root"; # Drop credentials and... $m->auth(""); # ...see if RT notices $m->get($url); is $m->status, 403, "403 Forbidden from RT"; # Next request gets us the login form $m->get_ok($url); $m->content_like(qr/Login/, "Login form"); } diag "External auth with invalid user, login internally"; { # REMOTE_USER of invalid $m->auth("invalid"); # Login internally via the login link $m->get("$url/Search/Build.html"); is $m->status, 403, "403 Forbidden"; $m->follow_link_ok({ url_regex => qr'NoAuth/Login\.html' }, "follow logout link"); $m->content_like(qr/Login/, "Login form"); # Log in using RT's form $m->submit_form_ok({ with_fields => { user => 'root', pass => 'password', }, }, "Submitted login form"); ok $m->logged_in_as("root"), "Logged in as root"; like $m->uri, qr'Search/Build\.html', "at our originally requested page"; # Still logged in on another request $m->follow_link_ok({ text => 'Tools' }); ok $m->logged_in_as("root"), "Logged in as root"; ok $m->logout, "Logged out"; $m->next_warning_like(qr/Couldn't find internal user for 'invalid'/, "found warning for first request"); $m->next_warning_like(qr/Couldn't find internal user for 'invalid'/, "found warning for second request"); } stop_server(\$m); } diag "Fallback OFF"; { RT->Config->Set( DevelMode => 0 ); RT->Config->Set( WebRemoteUserAuth => 1 ); RT->Config->Set( WebRemoteUserContinuous => 0 ); RT->Config->Set( WebFallbackToRTLogin => 0 ); RT->Config->Set( WebRemoteUserAutocreate => 0 ); my ( $url, $m ) = RT::Test->started_ok( basic_auth => 'anon' ); diag "No remote user"; { $m->auth(""); $m->get($url); is $m->status, 403, "Forbidden"; } stop_server(\$m); } diag "WebRemoteUserAutocreate"; { RT->Config->Set( DevelMode => 0 ); RT->Config->Set( WebRemoteUserAuth => 1 ); RT->Config->Set( WebRemoteUserContinuous => 1 ); RT->Config->Set( WebFallbackToRTLogin => 0 ); RT->Config->Set( WebRemoteUserAutocreate => 1 ); RT->Config->Set( UserAutocreateDefaultsOnLogin => { Organization => "BPS" } ); my ( $url, $m ) = RT::Test->started_ok( basic_auth => 'anon' ); diag "New user"; { $m->auth("anewuser"); $m->get_ok($url); ok $m->logged_in_as("anewuser"), "Logged in as anewuser"; my $user = RT::User->new( RT->SystemUser ); $user->Load("anewuser"); ok $user->id, "Found newly created user"; is $user->Organization, "BPS", "Found Organization from UserAutocreateDefaultsOnLogin hash"; ok $user->Privileged, "Privileged by default"; } stop_server(\$m); RT->Config->Set( UserAutocreateDefaultsOnLogin => { Privileged => 0, EmailAddress => 'foo@example.com', }, ); ( $url, $m ) = RT::Test->started_ok( basic_auth => 'anon' ); diag "Create unprivileged users"; { $m->auth("unpriv"); $m->get_ok($url); ok $m->logged_in_as("unpriv"), "Logged in as an unpriv user"; like $m->uri->path, RT->Config->Get('SelfServiceRegex'), "SelfService URL"; my $user = RT::User->new( RT->SystemUser ); $user->Load("unpriv"); ok $user->id, "Found newly created user"; ok !$user->Privileged, "Unprivileged per config"; is $user->EmailAddress, 'foo@example.com', "Email address per config"; } diag "User creation failure"; { $m->auth("conflicting"); $m->get($url); is $m->status, 403, "Forbidden"; $m->next_warning_like(qr/Couldn't auto-create user 'conflicting' when attempting WebRemoteUser: Email address in use/, 'found failed auth warning'); my $user = RT::User->new( RT->SystemUser ); $user->Load("conflicting"); ok !$user->id, "Couldn't find conflicting user"; } stop_server(\$m); } rt-4.2.12/t/web/requestor_groups_edit_link.t000644 000765 000024 00000002341 12555754775 021562 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 11; RT->Config->Set( ShowMoreAboutPrivilegedUsers => 1 ); my ( $url, $m ) = RT::Test->started_ok; my $user_a = RT::Test->load_or_create_user( Name => 'user_a', Password => 'password', ); ok( $user_a, 'created user user_a' ); ok( RT::Test->set_rights( { Principal => $user_a, Right => [ qw/SeeQueue ShowTicket CreateTicket/ ] }, ), 'set rights for user_a' ); my $ticket = RT::Ticket->new(RT->SystemUser); my ($id) = $ticket->Create( Subject => 'groups limit', Queue => 'General', Requestor => $user_a->id, ); ok( $id, 'created ticket' ); ok( $m->login( user_a => 'password' ), 'logged in as user_a' ); $m->goto_ticket($id); ok( !$m->find_link( text => 'Edit' ), 'no Edit link without AdminUsers permission' ); ok( RT::Test->add_rights( { Principal => $user_a, Right => [ qw/AdminUsers ShowConfigTab/ ] }, ), 'add AdminUsers and ShowConfigTab rights for user_a' ); $m->goto_ticket($id); $m->follow_link_ok( { text => 'Edit' }, 'follow the Edit link' ); is( $m->uri, $url . "/Admin/Users/Memberships.html?id=" . $user_a->id, 'url is right' ); rt-4.2.12/t/web/requestor_groups_limit.t000644 000765 000024 00000001702 12555754775 020736 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 11; diag "set groups limit to 1"; RT->Config->Set( ShowMoreAboutPrivilegedUsers => 1 ); RT->Config->Set( MoreAboutRequestorGroupsLimit => 1 ); my $ticket = RT::Ticket->new(RT->SystemUser); my ($id) = $ticket->Create( Subject => 'groups limit', Queue => 'General', Requestor => 'root@localhost', ); ok( $id, 'created ticket' ); my ( $url, $m ) = RT::Test->started_ok; ok( $m->login(), 'logged in as root' ); $m->goto_ticket($id); $m->content_like( qr/Everyone|Privileged/, 'got one group' ); $m->content_unlike( qr/Everyone.*?Privileged/, 'not 2 groups' ); RT::Test->stop_server; diag "set groups limit to 2"; RT->Config->Set( MoreAboutRequestorGroupsLimit => 2 ); ( $url, $m ) = RT::Test->started_ok; ok( $m->login(), 'logged in as root' ); $m->goto_ticket($id); $m->content_contains( 'Everyone', 'got the first group' ); $m->content_contains( 'Privileged', 'got the second group' ); rt-4.2.12/t/web/rest-non-ascii-subject.t000644 000765 000024 00000002421 12555754775 020377 0ustar00sartakstaff000000 000000 # Test ticket creation with REST using non ascii subject use strict; use warnings; use RT::Test tests => 9; my $subject = Encode::decode('latin1', "Sujet accentu\x{e9}"); my $text = Encode::decode('latin1', "Contenu accentu\x{e9}"); my ($baseurl, $m) = RT::Test->started_ok; my $queue = RT::Test->load_or_create_queue(Name => 'General'); ok($queue->Id, "loaded the General queue"); my $content = "id: ticket/new Queue: General Requestor: root Subject: $subject Cc: AdminCc: Owner: Status: new Priority: InitialPriority: FinalPriority: TimeEstimated: Starts: 2009-03-10 16:14:55 Due: 2009-03-10 16:14:55 Text: $text"; $m->post("$baseurl/REST/1.0/ticket/new", [ user => 'root', pass => 'password', content => Encode::encode( "UTF-8", $content), ], Content_Type => 'form-data' ); my ($id) = $m->content =~ /Ticket (\d+) created/; ok($id, "got ticket #$id"); my $ticket = RT::Ticket->new(RT->SystemUser); $ticket->Load($id); is($ticket->Id, $id, "loaded the REST-created ticket"); is($ticket->Subject, $subject, "ticket subject successfully set"); my $attach = $ticket->Transactions->First->Attachments->First; is($attach->Subject, $subject, "attachement subject successfully set"); is($attach->GetHeader('Subject'), $subject, "attachement header subject successfully set"); rt-4.2.12/t/web/rest-search-group.t000644 000765 000024 00000004471 12555754775 017470 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef; my $group_foo = RT::Group->new($RT::SystemUser); $group_foo->CreateUserDefinedGroup( Name => 'foo' ); my $group_bar = RT::Group->new($RT::SystemUser); $group_bar->CreateUserDefinedGroup( Name => 'bar' ); my $group_baz = RT::Group->new($RT::SystemUser); $group_baz->CreateUserDefinedGroup( Name => 'baz' ); $group_baz->SetDisabled(1); my ( $baseurl, $m ) = RT::Test->started_ok; ok( $m->login, 'logged in' ); search_groups_ok( { query => 'id = ' . $group_foo->id }, [ $group_foo->id . ': foo' ], 'search by id' ); search_groups_ok( { query => 'Name = ' . $group_foo->Name, format => 's', fields => 'id,name', }, [ "id\tName", $group_foo->id . "\tfoo" ], 'search by name with customized fields' ); search_groups_ok( { query => 'foo = 3' }, ['Invalid field specification: foo'], 'invalid field' ); search_groups_ok( { query => 'id foo 3' }, ['Invalid operator specification: foo'], 'invalid op' ); search_groups_ok( { query => '', orderby => 'id' }, [ $group_foo->id . ': foo', $group_bar->id . ': bar', ], 'order by id' ); search_groups_ok( { query => '', orderby => 'name' }, [ $group_bar->id . ': bar', $group_foo->id . ': foo' ], 'order by name' ); search_groups_ok( { query => '', orderby => '+name' }, [ $group_bar->id . ': bar', $group_foo->id . ': foo' ], 'order by +name' ); search_groups_ok( { query => '', orderby => '-name' }, [ $group_foo->id . ': foo', $group_bar->id . ': bar' ], 'order by -name' ); search_groups_ok( { query => 'Disabled = 0', orderby => 'id' }, [ $group_foo->id . ': foo', $group_bar->id . ': bar' ], 'enabled groups' ); search_groups_ok( { query => 'Disabled = 1', orderby => 'id' }, [ $group_baz->id . ': baz' ], 'disabled groups' ); sub search_groups_ok { local $Test::Builder::Level = $Test::Builder::Level + 1; my $query = shift; my $expected = shift; my $name = shift || 'search groups'; my $uri = URI->new("$baseurl/REST/1.0/search/group"); $uri->query_form(%$query); $m->get_ok($uri); my @lines = split /\n/, $m->content; shift @lines; # header shift @lines; # empty line is_deeply( \@lines, $expected, $name ); } undef $m; done_testing(); rt-4.2.12/t/web/rest-search-queue.t000644 000765 000024 00000004750 12555754775 017460 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef; my $queue_foo = RT::Test->load_or_create_queue( Name => 'Foo' ); my $queue_bar = RT::Test->load_or_create_queue( Name => 'Bar' ); my $queue_baz = RT::Test->load_or_create_queue( Name => 'Baz' ); $queue_baz->SetDisabled(1); my ( $baseurl, $m ) = RT::Test->started_ok; ok( $m->login, 'logged in' ); search_queues_ok( { query => 'id = 1' }, ['1: General'], 'search id = 1' ); search_queues_ok( { query => 'Name = General', format => 's', fields => 'id,name,description' }, [ "id\tName\tDescription", "1\tGeneral\tThe default queue" ], 'search by name with customized fields' ); search_queues_ok( { query => 'id > 10' }, ['No matching results.'], 'no matching results' ); search_queues_ok( { query => 'foo = 3' }, ['Invalid field specification: foo'], 'invalid field' ); search_queues_ok( { query => 'id foo 3' }, ['Invalid operator specification: foo'], 'invalid op' ); search_queues_ok( { query => '', orderby => 'id' }, [ '1: General', $queue_foo->id . ': Foo', $queue_bar->id . ': Bar', ], 'order by id' ); search_queues_ok( { query => '', orderby => 'name' }, [ $queue_bar->id . ': Bar', $queue_foo->id . ': Foo', '1: General', ], 'order by name' ); search_queues_ok( { query => '', orderby => '+name' }, [ $queue_bar->id . ': Bar', $queue_foo->id . ': Foo', '1: General', ], 'order by +name' ); search_queues_ok( { query => '', orderby => '-name' }, [ '1: General', $queue_foo->id . ': Foo', $queue_bar->id . ': Bar', ], 'order by -name' ); search_queues_ok( { query => 'Disabled = 0', orderby => 'id' }, [ '1: General', $queue_foo->id . ': Foo', $queue_bar->id . ': Bar', ], 'enabled queues' ); search_queues_ok( { query => 'Disabled = 1', orderby => 'id' }, [ $queue_baz->id . ': Baz', ], 'disabled queues' ); search_queues_ok( { query => 'Disabled = 2', orderby => 'id' }, [ '2: ___Approvals', ], 'special Approvals queue' ); sub search_queues_ok { local $Test::Builder::Level = $Test::Builder::Level + 1; my $query = shift; my $expected = shift; my $name = shift || 'search queues'; my $uri = URI->new("$baseurl/REST/1.0/search/queue"); $uri->query_form(%$query); $m->get_ok($uri); my @lines = split /\n/, $m->content; shift @lines; # header shift @lines; # empty line is_deeply( \@lines, $expected, $name ); } undef $m; done_testing(); rt-4.2.12/t/web/rest-search-user.t000644 000765 000024 00000005301 12555754775 017303 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef; my $root = RT::Test->load_or_create_user( Name => 'root', ); my $user_foo = RT::Test->load_or_create_user( Name => 'foo', Password => 'password', ); my $user_bar = RT::Test->load_or_create_user( Name => 'bar' ); my $user_baz = RT::Test->load_or_create_user( Name => 'baz' ); $user_baz->SetDisabled(1); my ( $baseurl, $m ) = RT::Test->started_ok; ok( $m->login, 'logged in' ); search_users_ok( { query => 'id = ' . $user_foo->id }, [ $user_foo->id . ': foo' ], 'search by id' ); search_users_ok( { query => 'Name = ' . $user_foo->Name, format => 's', fields => 'id,name' }, [ "id\tName", $user_foo->id . "\tfoo" ], 'search by name with customized fields' ); search_users_ok( { query => 'foo = 3' }, ['Invalid field specification: foo'], 'invalid field' ); search_users_ok( { query => 'id foo 3' }, ['Invalid operator specification: foo'], 'invalid op' ); search_users_ok( { query => 'password = foo' }, ['Invalid field specification: password'], "can't search password" ); search_users_ok( { query => '', orderby => 'id' }, [ $root->id . ': root', $user_foo->id . ': foo', $user_bar->id . ': bar', ], 'order by id' ); search_users_ok( { query => '', orderby => 'name' }, [ $user_bar->id . ': bar', $user_foo->id . ': foo', $root->id . ': root' ], 'order by name' ); search_users_ok( { query => '', orderby => '+name' }, [ $user_bar->id . ': bar', $user_foo->id . ': foo', $root->id . ': root' ], 'order by +name' ); search_users_ok( { query => '', orderby => '-name' }, [ $root->id . ': root', $user_foo->id . ': foo', $user_bar->id . ': bar' ], 'order by -name' ); search_users_ok( { query => 'Disabled = 0', orderby => 'id' }, [ $root->id . ': root', $user_foo->id . ': foo', $user_bar->id . ': bar', ], 'enabled users' ); search_users_ok( { query => 'Disabled = 1', orderby => 'id' }, [ $user_baz->id . ': baz', ], 'disabled users' ); ok( $m->login( 'foo', 'password', logout => 1 ), 'logged in as foo' ); search_users_ok( { query => 'id = ' . $user_foo->id }, [ 'Permission denied' ], "can't search without permission" ); sub search_users_ok { local $Test::Builder::Level = $Test::Builder::Level + 1; my $query = shift; my $expected = shift; my $name = shift || 'search users'; my $uri = URI->new("$baseurl/REST/1.0/search/user"); $uri->query_form(%$query); $m->get_ok($uri); my @lines = split /\n/, $m->content; shift @lines; # header shift @lines; # empty line is_deeply( \@lines, $expected, $name ); } undef $m; done_testing(); rt-4.2.12/t/web/rest-sort.t000644 000765 000024 00000002146 12555754775 016055 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 25; my ($baseurl, $m) = RT::Test->started_ok; RT::Test->create_tickets( { }, { Subject => 'uno' }, { Subject => 'dos' }, { Subject => 'tres' }, ); ok($m->login, 'logged in'); sorted_tickets_ok('Subject', ['2: dos', '3: tres', '1: uno']); sorted_tickets_ok('+Subject', ['2: dos', '3: tres', '1: uno']); sorted_tickets_ok('-Subject', ['1: uno', '3: tres', '2: dos']); sorted_tickets_ok('id', ['1: uno', '2: dos', '3: tres']); sorted_tickets_ok('+id', ['1: uno', '2: dos', '3: tres']); sorted_tickets_ok('-id', ['3: tres', '2: dos', '1: uno']); undef $m; sub sorted_tickets_ok { local $Test::Builder::Level = $Test::Builder::Level + 1; my $order = shift; my $expected = shift; my $query = 'id > 0'; my $uri = URI->new("$baseurl/REST/1.0/search/ticket"); $uri->query_form( query => $query, orderby => $order, ); $m->get_ok($uri); my @lines = split /\n/, $m->content; shift @lines; # header shift @lines; # empty line is_deeply(\@lines, $expected, "sorted results by '$order'"); } rt-4.2.12/t/web/rest.t000644 000765 000024 00000020706 12555754775 015072 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Interface::REST; use RT::Test tests => 34; my ($baseurl, $m) = RT::Test->started_ok; for my $name ("severity", "fu()n:k/") { my $cf = RT::Test->load_or_create_custom_field( Name => $name, Type => 'FreeformMultiple', Queue => 'General', ); ok($cf->Id, "created a CustomField"); is($cf->Name, $name, "correct CF name"); } { my $cf = RT::Test->load_or_create_custom_field( Name => 'single', Type => 'FreeformSingle', Queue => 'General', ); ok($cf->Id, "created a CustomField"); } my $queue = RT::Test->load_or_create_queue(Name => 'General'); ok($queue->Id, "loaded the General queue"); $m->post("$baseurl/REST/1.0/ticket/new", [ user => 'root', pass => 'password', format => 'l', ]); my $text = $m->content; my @lines = $text =~ m{.*}g; shift @lines; # header # CFs aren't in the default ticket form push @lines, "CF-fu()n:k/: maximum"; # old style push @lines, "CF.{severity}: explosive"; # new style $text = join "\n", @lines; ok($text =~ s/Subject:\s*$/Subject: REST interface/m, "successfully replaced subject"); $m->post("$baseurl/REST/1.0/ticket/edit", [ user => 'root', pass => 'password', content => $text, ], Content_Type => 'form-data'); my ($id) = $m->content =~ /Ticket (\d+) created/; ok($id, "got ticket #$id"); my $ticket = RT::Ticket->new(RT->SystemUser); $ticket->Load($id); is($ticket->Id, $id, "loaded the REST-created ticket"); is($ticket->Subject, "REST interface", "subject successfully set"); is($ticket->FirstCustomFieldValue("fu()n:k/"), "maximum", "CF successfully set"); $m->post("$baseurl/REST/1.0/search/ticket", [ user => 'root', pass => 'password', query => "id=$id", fields => "Subject,CF-fu()n:k/,CF.{severity},Status", ]); # the fields are interpreted server-side a hash (why?), so we can't depend # on order for ("id: ticket/1", "Subject: REST interface", "CF.{fu()n:k/}: maximum", "CF.{severity}: explosive", "Status: new") { $m->content_contains($_); } # Create ticket 2 for testing ticket links for (2 .. 3) { $m->post("$baseurl/REST/1.0/ticket/edit", [ user => 'root', pass => 'password', content => $text, ], Content_Type => 'form-data'); $m->post( "$baseurl/REST/1.0/ticket/1/links", [ user => 'root', pass => 'password', ], Content_Type => 'form-data', ); my $link_data = form_parse($m->content); push @{$link_data->[0]->[1]}, 'DependsOn'; vpush($link_data->[0]->[2], 'DependsOn', $_); $m->post( "$baseurl/REST/1.0/ticket/1/links", [ user => 'root', pass => 'password', content => form_compose($link_data), ], Content_Type => 'form-data', ); } # See what links get reported for ticket 1. $m->post( "$baseurl/REST/1.0/ticket/1/links/show", [ user => 'root', pass => 'password', ], Content_Type => 'form-data', ); # Verify that the link was added correctly. my $content = form_parse($m->content); my $depends_on = vsplit($content->[0]->[2]->{DependsOn}); @$depends_on = sort @$depends_on; like( $depends_on->[0], qr{/ticket/2$}, "Check ticket link.", ) or diag("'content' obtained:\n", $m->content); like( $depends_on->[1], qr{/ticket/3$}, "Check ticket link.", ) or diag("'content' obtained:\n", $m->content); $m->post( "$baseurl/REST/1.0/ticket/2/links/show", [ user => 'root', pass => 'password', ], Content_Type => 'form-data', ); my ($link) = $m->content =~ m|DependedOnBy:.*ticket/(\d+)|; is($link, 1, "Check ticket link.") or diag("'content' obtained:\n", $m->content); $m->post( "$baseurl/REST/1.0/ticket/3/links/show", [ user => 'root', pass => 'password', ], Content_Type => 'form-data', ); ($link) = $m->content =~ m|DependedOnBy:.*ticket/(\d+)|; is($link, 1, "Check ticket link.") or diag("'content' obtained:\n", $m->content); { $m->post("$baseurl/REST/1.0/ticket/new", [ user => 'root', pass => 'password', format => 'l', ]); my $text = $m->content; my @lines = $text =~ m{.*}g; shift @lines; # header push @lines, "CF.{severity}: explosive"; push @lines, "CF.{severity}: very"; $text = join "\n", @lines; $m->post("$baseurl/REST/1.0/ticket/edit", [ user => 'root', pass => 'password', content => $text, ], Content_Type => 'form-data'); my ($id) = $m->content =~ /Ticket (\d+) created/; ok($id, "got ticket #$id"); my $ticket = RT::Ticket->new(RT->SystemUser); $ticket->Load($id); is($ticket->Id, $id, "loaded the REST-created ticket"); is_deeply( [sort map $_->Content, @{ $ticket->CustomFieldValues("severity")->ItemsArrayRef }], ["explosive", "very"], "CF successfully set" ); $m->post( "$baseurl/REST/1.0/ticket/show", [ user => 'root', pass => 'password', format => 'l', id => "ticket/$id", ] ); $text = $m->content; $text =~ s/.*?\n\n//; $text =~ s/\n\n/\n/; $text =~ s{CF\.\{severity\}:.*\n}{}img; $text .= "CF.{severity}: explosive, a bit\n"; $m->post( "$baseurl/REST/1.0/ticket/edit", [ user => 'root', pass => 'password', content => $text, ], Content_Type => 'form-data' ); $m->content =~ /Ticket ($id) updated/; $ticket->Load($id); is_deeply( [sort map $_->Content, @{ $ticket->CustomFieldValues("severity")->ItemsArrayRef }], ['a bit', 'explosive'], "CF successfully set" ); $m->post( "$baseurl/REST/1.0/ticket/show", [ user => 'root', pass => 'password', format => 'l', id => "ticket/$id", ] ); $text = $m->content; $text =~ s{CF\.\{severity\}:.*\n}{}img; $text .= "CF.{severity}:\n"; $m->post( "$baseurl/REST/1.0/ticket/edit", [ user => 'root', pass => 'password', content => $text, ], Content_Type => 'form-data' ); $m->content =~ /Ticket ($id) updated/; $ticket->Load($id); is_deeply( [sort map $_->Content, @{ $ticket->CustomFieldValues("severity")->ItemsArrayRef }], [], "CF successfully set" ); my @txns = map [$_->OldValue, $_->NewValue], grep $_->Type eq 'CustomField', @{ $ticket->Transactions->ItemsArrayRef }; is_deeply(\@txns, [['very', undef], [undef, 'a bit'], ['explosive', undef], ['a bit', undef]]); } { $m->post("$baseurl/REST/1.0/ticket/new", [ user => 'root', pass => 'password', format => 'l', ]); my $text = $m->content; my @lines = $text =~ m{.*}g; shift @lines; # header push @lines, "CF.{single}: this"; $text = join "\n", @lines; $m->post("$baseurl/REST/1.0/ticket/edit", [ user => 'root', pass => 'password', content => $text, ], Content_Type => 'form-data'); my ($id) = $m->content =~ /Ticket (\d+) created/; ok($id, "got ticket #$id"); my $ticket = RT::Ticket->new(RT->SystemUser); $ticket->Load($id); is($ticket->Id, $id, "loaded the REST-created ticket"); is_deeply( [sort map $_->Content, @{ $ticket->CustomFieldValues("single")->ItemsArrayRef }], ["this"], "CF successfully set" ); $m->post( "$baseurl/REST/1.0/ticket/show", [ user => 'root', pass => 'password', format => 'l', id => "ticket/$id", ] ); $text = $m->content; $text =~ s{CF\.\{single\}:.*\n}{}img; $text .= "CF.{single}: that\n"; $m->post( "$baseurl/REST/1.0/ticket/edit", [ user => 'root', pass => 'password', content => $text, ], Content_Type => 'form-data' ); $m->content =~ /Ticket ($id) updated/; $ticket->Load($id); is_deeply( [sort map $_->Content, @{ $ticket->CustomFieldValues("single")->ItemsArrayRef }], ['that'], "CF successfully set" ); my @txns = map [$_->OldValue, $_->NewValue], grep $_->Type eq 'CustomField', @{ $ticket->Transactions->ItemsArrayRef }; is_deeply(\@txns, [['this', 'that']]); } rt-4.2.12/t/web/rest_cfs_with_same_name.t000644 000765 000024 00000004643 12555754775 020767 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Interface::REST; use RT::Test tests => 25; my ( $baseurl, $m ) = RT::Test->started_ok; for my $queue_name (qw/foo bar/) { my $queue = RT::Test->load_or_create_queue( Name => $queue_name ); ok( $queue, "created queue $queue_name" ); my $cf = RT::Test->load_or_create_custom_field( Name => 'test', Type => 'Freeform', Queue => $queue_name, ); ok( $cf->id, "created cf test for queue $queue_name " . $cf->id ); $m->post( "$baseurl/REST/1.0/ticket/new", [ user => 'root', pass => 'password', format => 'l', ] ); my $text = $m->content; my @lines = $text =~ m{.*}g; shift @lines; # header # cfs aren't in the default ticket form push @lines, "CF.{test}: baz"; $text = join "\n", @lines; ok( $text =~ s/Subject:\s*$/Subject: test cf/m, "successfully replaced subject" ); ok( $text =~ s/Queue: General\s*$/Queue: $queue_name/m, "successfully replaced Queue" ); $m->post( "$baseurl/REST/1.0/ticket/edit", [ user => 'root', pass => 'password', content => $text, ], Content_Type => 'form-data' ); my ($id) = $m->content =~ /Ticket (\d+) created/; ok( $id, "got ticket #$id" ); my $ticket = RT::Ticket->new( RT->SystemUser ); $ticket->Load($id); is( $ticket->id, $id, "loaded the REST-created ticket" ); is( $ticket->Subject, "test cf", "subject successfully set" ); is( $ticket->Queue, $queue->id, "queue successfully set" ); is( $ticket->FirstCustomFieldValue("test"), "baz", "cf successfully set" ); $m->post( "$baseurl/REST/1.0/ticket/show", [ user => 'root', pass => 'password', format => 'l', id => "ticket/$id", ] ); $text = $m->content; like( $text, qr/^CF\.\{test\}: baz\s*$/m, 'cf value in rest show' ); $text =~ s{.*}{}; # remove header $text =~ s!CF\.\{test\}: baz!CF.{test}: newbaz!; $m->post( "$baseurl/REST/1.0/ticket/edit", [ user => 'root', pass => 'password', content => $text, ], Content_Type => 'form-data' ); $m->content =~ /Ticket ($id) updated/; is( $ticket->FirstCustomFieldValue("test"), "newbaz", "cf successfully updated" ); } rt-4.2.12/t/web/rest_user_cf.t000644 000765 000024 00000001252 12555754775 016573 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Interface::REST; use RT::Test tests => undef; my ( $baseurl, $m ) = RT::Test->started_ok; my $cf = RT::Test->load_or_create_custom_field( Name => 'foo', Type => 'Freeform', LookupType => 'RT::User', ); $cf->AddToObject(RT::User->new(RT->SystemUser)); my $root = RT::User->new( RT->SystemUser ); $root->Load('root'); $root->AddCustomFieldValue( Field => 'foo', Value => 'blabla' ); is( $root->FirstCustomFieldValue('foo'), 'blabla', 'cf is set' ); ok( $m->login, 'logged in' ); $m->post( "$baseurl/REST/1.0/show", [ id => 'user/12', ] ); like( $m->content, qr/CF-foo: blabla/, 'found the cf' ); undef $m; done_testing; rt-4.2.12/t/web/rights.t000644 000765 000024 00000005026 12555754775 015413 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 14; my ($baseurl, $m) = RT::Test->started_ok; ok $m->login, "logged in"; $m->follow_link_ok({ id => 'admin-global-group-rights'}); sub get_rights { my $agent = shift; my $principal_id = shift; my $object = shift; $agent->form_name('ModifyGroupRights'); my @inputs = $agent->current_form->find_input("SetRights-$principal_id-$object"); my @rights = sort grep $_, map $_->possible_values, grep $_ && $_->value, @inputs; return @rights; }; diag "load Everyone group"; my ($everyone, $everyone_gid); { $everyone = RT::Group->new( RT->SystemUser ); $everyone->LoadSystemInternalGroup('Everyone'); ok($everyone_gid = $everyone->id, "loaded 'everyone' group"); } diag "revoke all global rights from Everyone group"; my @has = get_rights( $m, $everyone_gid, 'RT::System-1' ); if ( @has ) { $m->form_name('ModifyGroupRights'); $m->untick("SetRights-$everyone_gid-RT::System-1", $_) foreach @has; $m->submit; is_deeply([get_rights( $m, $everyone_gid, 'RT::System-1' )], [], 'deleted all rights' ); } else { ok(1, 'the group has no global rights'); } diag "grant SuperUser right to everyone"; { $m->form_name('ModifyGroupRights'); $m->tick("SetRights-$everyone_gid-RT::System-1", 'SuperUser'); $m->submit; $m->content_contains('Right Granted', 'got message'); RT::Principal::InvalidateACLCache(); ok($everyone->PrincipalObj->HasRight( Right => 'SuperUser', Object => $RT::System ), 'group has right'); is_deeply( [get_rights( $m, $everyone_gid, 'RT::System-1' )], ['SuperUser'], 'granted SuperUser right' ); } diag "revoke the right"; { $m->form_name('ModifyGroupRights'); $m->untick("SetRights-$everyone_gid-RT::System-1", 'SuperUser'); $m->submit; $m->content_contains('Right revoked', 'got message'); RT::Principal::InvalidateACLCache(); ok(!$everyone->PrincipalObj->HasRight( Right => 'SuperUser', Object => $RT::System ), 'group has no right'); is_deeply( [get_rights( $m, $everyone_gid, 'RT::System-1' )], [], 'revoked SuperUser right' ); } diag "return rights the group had in the beginning"; if ( @has ) { $m->form_name('ModifyGroupRights'); $m->tick("SetRights-$everyone_gid-RT::System-1", $_) for @has; $m->submit; $m->content_contains('Right Granted', 'got message'); is_deeply( [ get_rights( $m, $everyone_gid, 'RT::System-1' ) ], [ @has ], 'returned back all rights' ); } else { ok(1, 'the group had no global rights, so nothing to return'); } rt-4.2.12/t/web/rights1.t000644 000765 000024 00000010623 12555754775 015473 0ustar00sartakstaff000000 000000 use strict; use warnings; use HTTP::Cookies; use RT::Test nodata => 1, tests => 31; my ($baseurl, $agent) = RT::Test->started_ok; # Create a user with basically no rights, to start. my $user_obj = RT::User->new(RT->SystemUser); my ($ret, $msg) = $user_obj->LoadOrCreateByEmail('customer-'.$$.'@example.com'); ok($ret, 'ACL test user creation'); $user_obj->SetName('customer-'.$$); $user_obj->SetPrivileged(1); ($ret, $msg) = $user_obj->SetPassword('customer'); ok($ret, "ACL test password set. $msg"); # Now test the web interface, making sure objects come and go as # required. my $cookie_jar = HTTP::Cookies->new; # give the agent a place to stash the cookies $agent->cookie_jar($cookie_jar); # get the top page $agent->login( $user_obj->Name, 'customer'); # Test for absence of Configure and Preferences tabs. ok(!$agent->find_link( url => "$RT::WebPath/Admin/", text => 'Admin'), "No admin tab" ); ok(!$agent->find_link( url => "$RT::WebPath/User/Prefs.html", text => 'Preferences'), "No prefs pane" ); # Now test for their presence, one at a time. Sleep for a bit after # ACL changes, thanks to the 10s ACL cache. my ($grantid,$grantmsg) =$user_obj->PrincipalObj->GrantRight(Right => 'ShowConfigTab', Object => RT->System); ok($grantid,$grantmsg); $agent->reload; $agent->content_contains('Logout', "Reloaded page successfully"); ok($agent->find_link( url => "$RT::WebPath/Admin/", text => 'Admin'), "Found admin tab" ); my ($revokeid,$revokemsg) =$user_obj->PrincipalObj->RevokeRight(Right => 'ShowConfigTab'); ok ($revokeid,$revokemsg); ($grantid,$grantmsg) =$user_obj->PrincipalObj->GrantRight(Right => 'ModifySelf'); ok ($grantid,$grantmsg); $agent->reload(); $agent->content_contains('Logout', "Reloaded page successfully"); ok($agent->find_link( id => 'preferences-settings' ), "Found prefs pane" ); ($revokeid,$revokemsg) = $user_obj->PrincipalObj->RevokeRight(Right => 'ModifySelf'); ok ($revokeid,$revokemsg); # Good. Now load the search page and test Load/Save Search. $agent->follow_link( url => "$RT::WebPath/Search/Build.html", text => 'Tickets'); is($agent->status, 200, "Fetched search builder page"); $agent->content_lacks("Load saved search", "No search loading box"); $agent->content_lacks("Saved searches", "No saved searches box"); ($grantid,$grantmsg) = $user_obj->PrincipalObj->GrantRight(Right => 'LoadSavedSearch'); ok($grantid,$grantmsg); $agent->reload(); $agent->content_contains("Load saved search", "Search loading box exists"); $agent->content_unlike(qr/input\s+type=['"]submit['"][^>]+name=['"]SavedSearchSave['"]/i, "Still no saved searches box"); ($grantid,$grantmsg) =$user_obj->PrincipalObj->GrantRight(Right => 'CreateSavedSearch'); ok ($grantid,$grantmsg); $agent->reload(); $agent->content_contains("Load saved search", "Search loading box still exists"); $agent->content_like(qr/input\s+type=['"]submit['"][^>]+name=['"]SavedSearchSave['"]/i, "Saved searches box exists"); # Create a group, and a queue, so we can test limited user visibility # via SelectOwner. my $queue_obj = RT::Queue->new(RT->SystemUser); ($ret, $msg) = $queue_obj->Create(Name => 'CustomerQueue-'.$$, Description => 'queue for SelectOwner testing'); ok($ret, "SelectOwner test queue creation. $msg"); my $group_obj = RT::Group->new(RT->SystemUser); ($ret, $msg) = $group_obj->CreateUserDefinedGroup(Name => 'CustomerGroup-'.$$, Description => 'group for SelectOwner testing'); ok($ret, "SelectOwner test group creation. $msg"); # Add our customer to the customer group, and give it queue rights. ($ret, $msg) = $group_obj->AddMember($user_obj->PrincipalObj->Id()); ok($ret, "Added customer to its group. $msg"); ($grantid,$grantmsg) =$group_obj->PrincipalObj->GrantRight(Right => 'OwnTicket', Object => $queue_obj); ok($grantid,$grantmsg); ($grantid,$grantmsg) =$group_obj->PrincipalObj->GrantRight(Right => 'SeeQueue', Object => $queue_obj); ok ($grantid,$grantmsg); # Now. When we look at the search page we should be able to see # ourself in the list of possible owners. $agent->reload(); ok($agent->form_name('BuildQuery'), "Yep, form is still there"); my $input = $agent->current_form->find_input('ValueOfActor'); ok(grep(/customer-$$/, $input->value_names()), "Found self in the actor listing"); rt-4.2.12/t/web/saved_search_chart.t000644 000765 000024 00000010637 12555754775 017727 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test no_plan => 1; my ( $url, $m ) = RT::Test->started_ok; use RT::Attribute; my $search = RT::Attribute->new(RT->SystemUser); my $ticket = RT::Ticket->new(RT->SystemUser); my ( $ret, $msg ) = $ticket->Create( Subject => 'base ticket' . $$, Queue => 'general', Owner => 'root', Requestor => 'root@localhost', MIMEObj => MIME::Entity->build( From => 'root@localhost', To => 'rt@localhost', Subject => 'base ticket' . $$, Data => "", ), ); ok( $ret, "ticket created: $msg" ); ok( $m->login, 'logged in' ); $m->get_ok( $url . "/Search/Chart.html?Query=" . 'id=1' ); my ($owner) = $m->content =~ /value="(RT::User-\d+)"/; $m->submit_form( form_name => 'SaveSearch', fields => { SavedSearchDescription => 'first chart', SavedSearchOwner => $owner, }, button => 'SavedSearchSave', ); $m->content_contains("Chart first chart saved", 'saved first chart' ); my ( $search_uri, $id ) = $m->content =~ /value="(RT::User-\d+-SavedSearch-(\d+))"/; $m->submit_form( form_name => 'SaveSearch', fields => { SavedSearchLoad => $search_uri }, ); $m->content_like( qr/name="SavedSearchDelete"\s+value="Delete"/, 'found Delete button' ); $m->content_like( qr/name="SavedSearchDescription"\s+value="first chart"/, 'found Description input with the value filled' ); $m->content_like( qr/name="SavedSearchSave"\s+value="Update"/, 'found Update button' ); $m->content_unlike( qr/name="SavedSearchSave"\s+value="Save"/, 'no Save button' ); $m->submit_form( form_name => 'SaveSearch', fields => { Query => 'id=2', GroupBy => 'Status', ChartStyle => 'pie', }, button => 'SavedSearchSave', ); $m->content_contains("Chart first chart updated", 'found updated message' ); $m->content_contains("id=2", 'Query is updated' ); $m->content_like( qr/value="Status"\s+selected="selected"/, 'GroupBy is updated' ); $m->content_like( qr/value="pie"\s+selected="selected"/, 'ChartType is updated' ); ok( $search->Load($id) ); is( $search->SubValue('Query'), 'id=2', 'Query is indeed updated' ); is( $search->SubValue('GroupBy'), 'Status', 'GroupBy is indeed updated' ); is( $search->SubValue('ChartStyle'), 'pie', 'ChartStyle is indeed updated' ); # finally, let's test delete $m->submit_form( form_name => 'SaveSearch', button => 'SavedSearchDelete', ); $m->content_contains("Chart first chart deleted", 'found deleted message' ); $m->content_unlike( qr/value="RT::User-\d+-SavedSearch-\d+"/, 'no saved search' ); for ('A' .. 'F') { $ticket->Create( Subject => $$ . $_, ); } for ([A => 'subject="'.$$.'A"'], [BorC => 'subject="'.$$.'B" OR subject="'.$$.'C"']) { $m->get_ok('/Search/Edit.html'); $m->form_name('BuildQueryAdvanced'); $m->field('Query', $_->[1]); $m->submit; # Save the search $m->follow_link_ok({id => 'page-chart'}); $m->form_name('SaveSearch'); $m->field(SavedSearchDescription => $_->[0]); $m->click_ok('SavedSearchSave'); $m->text_contains('Chart ' . $_->[0] . ' saved.'); } $m->form_name('SaveSearch'); my @saved_search_ids = $m->current_form->find_input('SavedSearchLoad')->possible_values; shift @saved_search_ids; # first value is blank cmp_ok(@saved_search_ids, '==', 2, 'Two saved charts were made'); # TODO get find_link('page-chart')->URI->params to work... sub page_chart_link_has { my ($m, $id, $msg) = @_; $Test::Builder::Level = $Test::Builder::Level + 1; (my $dec_id = $id) =~ s/:/%3A/g; my $chart_url = $m->find_link(id => 'page-chart')->url; like( $chart_url, qr{SavedChartSearchId=\Q$dec_id\E}, $msg || 'Page chart link matches the pattern we expected' ); } # load the first chart $m->field('SavedSearchLoad' => $saved_search_ids[0]); $m->click('SavedSearchLoadSubmit'); page_chart_link_has($m, $saved_search_ids[0]); $m->form_name('SaveSearch'); is($m->form_number(3)->value('SavedChartSearchId'), $saved_search_ids[0]); $m->form_name('SaveSearch'); # now load the second chart $m->field('SavedSearchLoad' => $saved_search_ids[1]); $m->click('SavedSearchLoadSubmit'); page_chart_link_has($m, $saved_search_ids[1]); is( $m->form_number(3)->value('SavedChartSearchId'), $saved_search_ids[1], 'Second form is seen as a hidden field' ); page_chart_link_has($m, $saved_search_ids[1]); rt-4.2.12/t/web/saved_search_context.t000644 000765 000024 00000003436 12555754775 020311 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test no_plan => 1; my ( $url, $m ) = RT::Test->started_ok; my $ticket = RT::Ticket->new(RT->SystemUser); for (['x', 50], ['y', 40], ['z', 30]) { $ticket->Create( Subject => $_->[0], Queue => 'general', Owner => 'root', Priority => $_->[1], Requestor => 'root@localhost', ); } ok( $m->login, 'logged in' ); $m->get($url . '/Search/Build.html?NewQuery=1'); $m->form_name('BuildQuery'); $m->field(ValueOfPriority => 45); $m->click('DoSearch'); #RT->Logger->error($m->uri); sleep 100; #{ open my $fh, '>', 'm.html'; print $fh $m->content; close $fh; }; die; $m->text_contains('Found 2 tickets'); $m->follow_link(id => 'page-edit_search'); $m->form_name('BuildQuery'); $m->field(ValueOfAttachment => 'z'); $m->click('DoSearch'); $m->text_contains('Found 1 ticket'); $m->follow_link(id => 'page-bulk'); $m->form_name('BulkUpdate'); ok(!$m->value('UpdateTicket2'), "There is no Ticket #2 in the search's bulk update"); sub edit_search_link_has { my ($m, $id, $msg) = @_; local $Test::Builder::Level = $Test::Builder::Level + 1; (my $dec_id = $id) =~ s/:/%3A/g; my $chart_url = $m->find_link(id => 'page-edit_search')->url; like( $chart_url, qr{SavedSearchId=\Q$dec_id\E}, $msg || 'Search link matches the pattern we expected' ); } diag("Test search context"); { $m->get_ok($url . '/Search/Build.html'); $m->form_name('BuildQuery'); $m->field(ValueOfPriority => 45); $m->click('AddClause'); $m->form_name('BuildQuery'); $m->set_fields( SavedSearchDescription => 'my saved search', ); $m->click('SavedSearchSave'); my $saved_search_id = $m->form_name('BuildQuery')->value('SavedSearchId'); edit_search_link_has($m, $saved_search_id); } rt-4.2.12/t/web/saved_search_permissions.t000644 000765 000024 00000002021 12555754775 021165 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 12; my $user = RT::User->new(RT->SystemUser); ok( $user->Create( Name => 'foo', Privileged => 1, Password => 'foobar' ) ); my ( $url, $m ) = RT::Test->started_ok; ok( $m->login, 'root logged in' ); $m->get_ok( $url . '/Search/Build.html?Query=id<100' ); $m->submit_form( form_name => 'BuildQuery', fields => { SavedSearchDescription => 'test' }, button => 'SavedSearchSave', ); $m->content_contains( q{name="SavedSearchDescription" value="test"}, 'saved test search' ); my ($id) = $m->content =~ /value="(RT::User-\d+-SavedSearch-\d+)"/; ok( $m->login( 'foo', 'foobar', logout => 1 ), 'logged in' ); $m->get_ok( $url . "/Search/Build.html?SavedSearchLoad=$id" ); my $message = qq{Can not load saved search "$id"}; RT::Interface::Web::EscapeHTML( \$message ); $m->content_contains( $message, 'user foo can not load saved search of root' ); $m->warning_like( qr/User #\d+ tried to load container user #\d+/, 'get warning' ); rt-4.2.12/t/web/saved_search_update.t000644 000765 000024 00000003721 12555754775 020104 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 18; my $root = RT::User->new( $RT::SystemUser ); $root->Load('root'); my $uid = $root->id; ok( $uid, 'loaded root' ); my $group = RT::Group->new( $RT::SystemUser ); my ($gid) = $group->CreateUserDefinedGroup( Name => 'foo' ); ok( $gid, 'created group foo'); ok( $group->AddMember( $root->PrincipalId ) ); my ( $baseurl, $m ) = RT::Test->started_ok; ok($m->login, 'logged in'); $m->follow_link_ok({text => "Tickets"}, "to query builder"); $m->form_name("BuildQuery"); $m->field(ValueOfid => 10 ); $m->click("AddClause"); $m->content_contains( 'id < 10', "added new clause"); $m->form_name("BuildQuery"); $m->field(SavedSearchDescription => 'user_saved'); $m->click("SavedSearchSave"); $m->form_name("BuildQuery"); is($m->value('SavedSearchDescription'), 'user_saved', "name is correct"); like($m->value('SavedSearchOwner'), qr/^RT::User-\d+$/, "name is correct"); ok( scalar grep { $_ eq "RT::Group-$gid" } $m->current_form->find_input('SavedSearchOwner')->possible_values, 'found group foo' ); $m->field(SavedSearchDescription => 'group_saved'); $m->select(SavedSearchOwner => "RT::Group-$gid"); $m->click("SavedSearchSave"); $m->form_name("BuildQuery"); is($m->value('SavedSearchOwner'), "RT::Group-$gid", "privacy is correct"); is($m->value('SavedSearchDescription'), 'group_saved', "name is correct"); $m->select(SavedSearchOwner => "RT::User-$uid"); $m->field(SavedSearchDescription => 'user_saved'); $m->click("SavedSearchSave"); $m->form_name("BuildQuery"); is($m->value('SavedSearchOwner'), "RT::User-$uid", "privacy is correct"); is($m->value('SavedSearchDescription'), 'user_saved', "name is correct"); $m->select(SavedSearchOwner => "RT::System-1"); $m->field(SavedSearchDescription => 'system_saved'); $m->click("SavedSearchSave"); $m->form_name("BuildQuery"); is($m->value('SavedSearchOwner'), "RT::System-1", "privacy is correct"); is($m->value('SavedSearchDescription'), 'system_saved', "name is correct"); rt-4.2.12/t/web/scrips.t000644 000765 000024 00000024101 12555754775 015411 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef; RT->Config->Set( UseTransactionBatch => 1 ); # TODO: # Test the rest of the conditions. # Test actions. # Test templates? # Test cleanup scripts. my $queue_g = RT::Test->load_or_create_queue( Name => 'General' ); ok $queue_g && $queue_g->id, 'loaded or created queue'; my $queue_r = RT::Test->load_or_create_queue( Name => 'Regression' ); ok $queue_r && $queue_r->id, 'loaded or created queue'; my ($baseurl, $m) = RT::Test->started_ok; ok $m->login, "logged in"; $m->follow_link_ok({id => 'admin-global-scrips-create'}); sub prepare_code_with_value { my $value = shift; # changing the ticket is an easy scrip check for a test return '$self->TicketObj->SetSubject(' . '$self->TicketObj->Subject . ' . '"|" . ' . $value . ')'; } { # preserve order for checking the subject string later my @values_for_actions; my $conds = RT::ScripConditions->new(RT->SystemUser); foreach my $cond_value ('On Forward', 'On Forward Ticket', 'On Forward Transaction') { $conds->Limit( FIELD => 'name', VALUE => $cond_value, ENTRYAGGREGATOR => 'OR', ); } while (my $rec = $conds->Next) { push @values_for_actions, [$rec->Id, '"' . $rec->Name . '"']; } @values_for_actions = sort { $a->[0] cmp $b->[0] } @values_for_actions; foreach my $data (@values_for_actions) { my ($condition, $prepare_code_value) = @$data; diag "Create Scrip (Cond #$condition)" if $ENV{TEST_VERBOSE}; $m->follow_link_ok({id => 'admin-global-scrips-create'}); my $prepare_code = prepare_code_with_value($prepare_code_value); $m->form_name('CreateScrip'); $m->set_fields( 'ScripCondition' => $condition, 'ScripAction' => 'User Defined', 'Template' => 'Blank', 'CustomPrepareCode' => $prepare_code, ); $m->click('Create'); $m->content_like(qr{Scrip Created}); } my $ticket_obj = RT::Test->create_ticket( Subject => 'subject', Content => 'stuff', Queue => 1, ); my $ticket = $ticket_obj->id; $m->goto_ticket($ticket); $m->follow_link_ok( { id => 'page-actions-forward' }, 'follow 1st Forward to forward ticket' ); diag "Forward Ticket" if $ENV{TEST_VERBOSE}; $m->submit_form( form_name => 'ForwardMessage', fields => { To => 'rt-test@example.com, rt-to@example.com', }, button => 'ForwardAndReturn' ); $m->text_contains("#${ticket}: subject|On Forward|On Forward Ticket"); diag "Forward Transaction" if $ENV{TEST_VERBOSE}; # get the first transaction on the ticket my ($transaction) = $ticket_obj->Transactions->First->id; $m->get( "$baseurl/Ticket/Forward.html?id=1&QuoteTransaction=$transaction" ); $m->submit_form( form_name => 'ForwardMessage', fields => { To => 'rt-test@example.com, rt-to@example.com', }, button => 'ForwardAndReturn' ); $m->text_contains("#${ticket}: subject|On Forward|On Forward Ticket|On Forward|On Forward Transaction"); RT::Test->clean_caught_mails; } note "check basics in scrip's admin interface"; { $m->follow_link_ok( { id => 'admin-global-scrips-create' } ); ok $m->form_name('CreateScrip'); is $m->value_name('Description'), '', 'empty value'; is $m->value_name('ScripAction'), '-', 'empty value'; is $m->value_name('ScripCondition'), '-', 'empty value'; is $m->value_name('Template'), '-', 'empty value'; $m->field('Description' => 'test'); $m->click('Create'); $m->content_contains("Action is mandatory argument"); ok $m->form_name('CreateScrip'); is $m->value_name('Description'), 'test', 'value stays on the page'; $m->select('ScripAction' => 'Notify Ccs'); $m->click('Create'); $m->content_contains("Template is mandatory argument"); ok $m->form_name('CreateScrip'); is $m->value_name('Description'), 'test', 'value stays on the page'; is $m->value_name('ScripAction'), 'Notify Ccs', 'value stays on the page'; $m->select('Template' => 'Blank'); $m->click('Create'); $m->content_contains("Condition is mandatory argument"); ok $m->form_name('CreateScrip'); is $m->value_name('Description'), 'test', 'value stays on the page'; is $m->value_name('ScripAction'), 'Notify Ccs', 'value stays on the page'; $m->select('ScripCondition' => 'On Close'); $m->click('Create'); $m->content_contains("Scrip Created"); ok $m->form_name('ModifyScrip'); is $m->value_name('Description'), 'test', 'correct value'; is $m->value_name('ScripCondition'), 'On Close', 'correct value'; is $m->value_name('ScripAction'), 'Notify Ccs', 'correct value'; is $m->value_name('Template'), 'Blank', 'correct value'; $m->field('Description' => 'test test'); $m->click('Update'); # regression $m->content_lacks("Template is mandatory argument"); ok $m->form_name('ModifyScrip'); is $m->value_name('Description'), 'test test', 'correct value'; $m->content_contains("Description changed from", "found action result message"); } note "check application in admin interface"; { $m->follow_link_ok({ id => 'admin-global-scrips-create' }); $m->submit_form_ok({ with_fields => { Description => "testing application", ScripCondition => "On Create", ScripAction => "Open Tickets", Template => "Blank", }, button => 'Create', }, "created scrip"); $m->content_contains("Scrip Created", "found result message"); my ($sid) = ($m->content =~ /Modify scrip #(\d+)/); ok $sid, "found scrip id on the page"; RT::Test->object_scrips_are($sid, [0]); $m->follow_link_ok({ id => 'page-applies-to' }); ok $m->form_name("AddRemoveScrip"), "found form"; $m->tick("RemoveScrip-$sid", 0); $m->click_ok("Update", "update scrip application"); RT::Test->object_scrips_are($sid, []); ok $m->form_name("AddRemoveScrip"), "found form"; $m->tick("AddScrip-$sid", 0); $m->tick("AddScrip-$sid", $queue_g->id); $m->click_ok("Update", "update scrip application"); RT::Test->object_scrips_are($sid, [0], [$queue_g->id, $queue_r->id]); } note "check templates in scrip's admin interface"; { my $template = RT::Template->new( RT->SystemUser ); my ($status, $msg) = $template->Create( Queue => $queue_g->id, Name => 'foo' ); ok $status, 'created a template'; my $templates = RT::Templates->new( RT->SystemUser ); $templates->LimitToGlobal; my @default = ( '', map $_->Name, @{$templates->ItemsArrayRef} ); $m->follow_link_ok( { id => 'admin-global-scrips-create' } ); ok $m->form_name('CreateScrip'); my @templates = ($m->find_all_inputs( type => 'option', name => 'Template' ))[0] ->possible_values; is_deeply([sort @templates], [sort @default]); $m->follow_link_ok( { id => 'admin-queues' } ); $m->follow_link_ok( { text => 'General' } ); $m->follow_link_ok( { id => 'page-scrips-create' } ); ok $m->form_name('CreateScrip'); @templates = ($m->find_all_inputs( type => 'option', name => 'Template' ))[0] ->possible_values; is_deeply([sort @templates], [sort @default, 'foo']); note "make sure we can not apply scrip to queue without required template"; $m->field('Description' => 'test template'); $m->select('ScripCondition' => 'On Close'); $m->select('ScripAction' => 'Notify Ccs'); $m->select('Template' => 'foo'); $m->click('Create'); $m->content_contains("Scrip Created"); $m->follow_link_ok( { id => 'page-applies-to' } ); my ($id) = ($m->content =~ /Modify associated objects for scrip #(\d+)/); $m->form_name('AddRemoveScrip'); $m->tick('AddScrip-'.$id, $queue_r->id); $m->click('Update'); $m->content_like(qr{No template foo in queue Regression or global}); note "unapply the scrip from any queue"; $m->form_name('AddRemoveScrip'); $m->tick('RemoveScrip-'.$id, $queue_g->id); $m->click('Update'); $m->content_like(qr{Object deleted}); note "you can pick any template"; $m->follow_link_ok( { id => 'page-basics' } ); ok $m->form_name('ModifyScrip'); @templates = ($m->find_all_inputs( type => 'option', name => 'Template' ))[0] ->possible_values; is_deeply( [sort @templates], [sort do { my $t = RT::Templates->new( RT->SystemUser ); $t->UnLimit; ('', $t->DistinctFieldValues('Name')) }], ); note "go to apply page and apply with template change"; $m->follow_link_ok( { id => 'page-applies-to' } ); $m->form_name('AddRemoveScrip'); $m->field('Template' => 'blank'); $m->tick('AddScrip-'.$id, $queue_g->id); $m->tick('AddScrip-'.$id, $queue_r->id); $m->click('Update'); $m->content_contains("Template: Template changed from "); $m->content_contains("Object created"); } note "apply scrip in different stage to different queues"; { $m->follow_link_ok( { id => 'admin-queues' } ); $m->follow_link_ok( { text => 'General' } ); $m->follow_link_ok( { id => 'page-scrips-create'}); ok $m->form_name('CreateScrip'); $m->field('Description' => 'test stage'); $m->select('ScripCondition' => 'On Close'); $m->select('ScripAction' => 'Notify Ccs'); $m->select('Template' => 'Blank'); $m->click('Create'); $m->content_contains("Scrip Created"); my ($sid) = ($m->content =~ /Modify scrip #(\d+)/); ok $sid, "found scrip id on the page"; $m->follow_link_ok({ text => 'Applies to' }); ok $m->form_name('AddRemoveScrip'); $m->select('Stage' => 'Batch'); $m->tick( "AddScrip-$sid" => $queue_r->id ); $m->click('Update'); $m->content_contains("Object created"); $m->follow_link_ok({ text => 'General' }); $m->follow_link_ok({ id => 'page-scrips' }); my (@matches) = $m->content =~ /test stage/g; # regression is scalar @matches, 1, 'scrip mentioned only once'; } undef $m; done_testing; rt-4.2.12/t/web/scrub.t000644 000765 000024 00000004567 12555754775 015242 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test nodb => 1, tests => 6; use RT::Interface::Web; # This gets us HTML::Mason::Commands use Test::LongString; { my $html = 'This is a test of color and font and boldness.'; is_string(scrub_html($html), $html, "CKEditor produced HTML sails through"); } { my $html = '

    And alignment with color?

    '; is_string(scrub_html($html), $html, "CKEditor produced HTML sails through"); } { my $html = 'This is a test of color and font and boldness.'; my $expected = 'This is a test of color and font and boldness.'; is_string(scrub_html($html), $expected, "nasty CSS not allowed through"); } { my $html = 'Let\'s add some color up in here.'; is_string(scrub_html($html), $html, "multiple props and color specs allowed"); } { my $html = q[oh hai I'm some text]; my $expected = q[oh hai I'm some text]; is_string(scrub_html($html), $expected, "font lists"); } { my $html = q[oh hai I'm some text]; my $expected = q[oh hai I'm some text]; is_string(scrub_html($html), $expected, "outlook html"); } sub scrub_html { return HTML::Mason::Commands::ScrubHTML(shift); } rt-4.2.12/t/web/search_bulk_update_links.t000644 000765 000024 00000011355 12555754775 021141 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 46; my ( $url, $m ) = RT::Test->started_ok; ok( $m->login, 'logged in' ); my $rtname = RT->Config->Get('rtname'); # create tickets use RT::Ticket; my ( @link_tickets, @search_tickets ); for ( 1 .. 3 ) { my $link_ticket = RT::Ticket->new(RT->SystemUser); my ( $ret, $msg ) = $link_ticket->Create( Subject => "link ticket $_", Queue => 'general', Owner => 'root', Requestor => 'root@localhost', ); ok( $ret, "link ticket created: $msg" ); push @link_tickets, $ret; } for ( 1 .. 3 ) { my $ticket = RT::Ticket->new(RT->SystemUser); my ( $ret, $msg ) = $ticket->Create( Subject => "search ticket $_", Queue => 'general', Owner => 'root', Requestor => 'root@localhost', ); ok( $ret, "search ticket created: $msg" ); push @search_tickets, $ret; } # let's add link to 1 search ticket first $m->get_ok( $url . "/Search/Bulk.html?Query=id=$search_tickets[0]&Rows=10" ); $m->content_contains( 'Current Links', 'has current links part' ); $m->content_lacks( 'DeleteLink--', 'no delete link stuff' ); $m->submit_form( form_name => 'BulkUpdate', fields => { 'Ticket-DependsOn' => $link_tickets[0], 'Ticket-MemberOf' => $link_tickets[1], 'Ticket-RefersTo' => $link_tickets[2], }, ); $m->content_contains( "Ticket $search_tickets[0] depends on Ticket $link_tickets[0]", 'depends on msg', ); $m->content_contains( "Ticket $search_tickets[0] member of Ticket $link_tickets[1]", 'member of msg', ); $m->content_contains( "Ticket $search_tickets[0] refers to Ticket $link_tickets[2]", 'refers to msg', ); $m->content_contains( "DeleteLink--DependsOn-fsck.com-rt://$rtname/ticket/$link_tickets[0]", 'found depends on link' ); $m->content_contains( "DeleteLink--MemberOf-fsck.com-rt://$rtname/ticket/$link_tickets[1]", 'found member of link' ); $m->content_contains( "DeleteLink--RefersTo-fsck.com-rt://$rtname/ticket/$link_tickets[2]", 'found refers to link' ); # here we check the *real* bulk update my $query = join ' OR ', map { "id=$_" } @search_tickets; $m->get_ok( $url . "/Search/Bulk.html?Query=$query&Rows=10" ); $m->content_contains( 'Current Links', 'has current links part' ); $m->content_lacks( 'DeleteLink--', 'no delete link stuff' ); $m->form_name('BulkUpdate'); my @fields = qw/Owner AddRequestor DeleteRequestor AddCc DeleteCc AddAdminCc DeleteAdminCc Subject Priority Queue Status Starts_Date Told_Date Due_Date UpdateSubject UpdateContent/; for my $field ( @fields ) { is( $m->value($field), '', "default $field is empty" ); } # test DependsOn, MemberOf and RefersTo $m->submit_form( form_name => 'BulkUpdate', fields => { 'Ticket-DependsOn' => $link_tickets[0], 'Ticket-MemberOf' => $link_tickets[1], 'Ticket-RefersTo' => $link_tickets[2], }, ); $m->content_contains( "DeleteLink--DependsOn-fsck.com-rt://$rtname/ticket/$link_tickets[0]", 'found depends on link' ); $m->content_contains( "DeleteLink--MemberOf-fsck.com-rt://$rtname/ticket/$link_tickets[1]", 'found member of link' ); $m->content_contains( "DeleteLink--RefersTo-fsck.com-rt://$rtname/ticket/$link_tickets[2]", 'found refers to link' ); $m->submit_form( form_name => 'BulkUpdate', fields => { "DeleteLink--DependsOn-fsck.com-rt://$rtname/ticket/$link_tickets[0]" => 1, "DeleteLink--MemberOf-fsck.com-rt://$rtname/ticket/$link_tickets[1]" => 1, "DeleteLink--RefersTo-fsck.com-rt://$rtname/ticket/$link_tickets[2]" => 1, }, ); $m->content_lacks( 'DeleteLink--', 'links are all deleted' ); # test DependedOnBy, Members and ReferredToBy $m->submit_form( form_name => 'BulkUpdate', fields => { 'DependsOn-Ticket' => $link_tickets[0], 'MemberOf-Ticket' => $link_tickets[1], 'RefersTo-Ticket' => $link_tickets[2], }, ); $m->content_contains( "DeleteLink-fsck.com-rt://$rtname/ticket/$link_tickets[0]-DependsOn-", 'found depended on link' ); $m->content_contains( "DeleteLink-fsck.com-rt://$rtname/ticket/$link_tickets[1]-MemberOf-", 'found members link' ); $m->content_contains( "DeleteLink-fsck.com-rt://$rtname/ticket/$link_tickets[2]-RefersTo-", 'found referrd to link' ); $m->submit_form( form_name => 'BulkUpdate', fields => { "DeleteLink-fsck.com-rt://$rtname/ticket/$link_tickets[0]-DependsOn-" => 1, "DeleteLink-fsck.com-rt://$rtname/ticket/$link_tickets[1]-MemberOf-" => 1, "DeleteLink-fsck.com-rt://$rtname/ticket/$link_tickets[2]-RefersTo-" => 1, }, ); $m->content_lacks( 'DeleteLink--', 'links are all deleted' ); rt-4.2.12/t/web/search_cf_quotes.t000644 000765 000024 00000002766 12555754775 017440 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 24; my ( $baseurl, $m ) = RT::Test->started_ok; my $cf = RT::CustomField->new($RT::SystemUser); ok( $cf->Create( Name => "I'm a cf", Type => 'Date', LookupType => 'RT::Queue-RT::Ticket', ) ); ok( $cf->AddToObject( RT::Queue->new($RT::SystemUser) ) ); RT::Test->create_tickets( { Queue => 'General' }, { Subject => 'ticket foo', 'CustomField-' . $cf->id => '2011-09-15' }, { Subject => 'ticket bar', 'CustomField-' . $cf->id => '2011-10-15' }, { Subject => 'ticket baz' }, ); ok( $m->login, 'logged in' ); $m->get_ok('/Search/Build.html'); $m->form_name( 'BuildQuery' ); my ($cf_op) = $m->find_all_inputs( type => 'option', name_regex => qr/I'm a cf/ ); my ($cf_field) = $m->find_all_inputs( type => 'text', name_regex => qr/I'm a cf/ ); diag "search directly"; $m->submit_form( fields => { $cf_op->name => '<', $cf_field->name => '2011-09-30', }, button => 'DoSearch', ); $m->title_is( 'Found 1 ticket', 'found only 1 ticket' ); $m->content_contains( 'ticket foo', 'has ticket foo' ); diag "first add clause, then search"; $m->get_ok('/Search/Build.html?NewQuery=1'); $m->form_name( 'BuildQuery' ); $m->submit_form( fields => { $cf_op->name => '<', $cf_field->name => '2011-09-30', }, button => 'AddClause', ); $m->follow_link_ok( { text => 'Show Results' } ); $m->title_is( 'Found 1 ticket', 'found only 1 ticket' ); $m->content_contains( 'ticket foo', 'has ticket foo' ); rt-4.2.12/t/web/search_ical.t000644 000765 000024 00000014637 12555754775 016360 0ustar00sartakstaff000000 000000 use strict; use warnings; use Data::ICal; use RT::Test tests => 77; my $start_obj = RT::Date->new( RT->SystemUser ); $start_obj->SetToNow; my $start = $start_obj->iCal( Time => 1); my $due_obj = RT::Date->new( RT->SystemUser ); $due_obj->SetToNow; $due_obj->AddDays(2); my $due = $due_obj->iCal( Time => 1); diag 'Test iCal with date only'; { my ($baseurl, $agent) = RT::Test->started_ok; my $ticket = RT::Ticket->new(RT->SystemUser); for ( 1 .. 5 ) { $ticket->Create( Subject => 'Ticket ' . $_, Queue => 'General', Owner => 'root', Requestor => 'ical@localhost', Starts => $start_obj->ISO, Due => $due_obj->ISO, ); } ok $agent->login('root', 'password'), 'logged in as root'; $agent->get_ok('/Search/Build.html'); $agent->form_name('BuildQuery'); $agent->field('idOp', '>'); $agent->field('ValueOfid', '0'); $agent->submit('DoSearch'); $agent->follow_link_ok({id => 'page-results'}); for ( 1 .. 5 ) { $agent->content_contains('Ticket ' . $_); } $agent->follow_link_ok( { text => 'iCal' } ); is( $agent->content_type, 'text/calendar', 'content type is text/calendar' ); for ( 1 .. 5 ) { $agent->content_like(qr/URL\:$baseurl\/Ticket\/Display\.html\?id=$_/); } my $ical = Data::ICal->new(data => $agent->content); my @entries = $ical->entries; my $ical_count = @{$entries[0]}; is( $ical_count, 10, "Got $ical_count ical entries"); my $prop_ref = $entries[0]->[0]->properties; my $start_as_root = RT::Date->new( RT::CurrentUser->new( 'root' ) ); $start_as_root->Unix( $start_obj->Unix ); my $start = $start_as_root->ISO( Time => 0, Timezone => 'user' ); $start =~ s/-//g; is($prop_ref->{'dtstart'}->[0]->value, $start, "Got start date: $start"); like( $prop_ref->{'dtstart'}->[0]->as_string, qr/VALUE=DATE\:/, 'Got DATE value'); $prop_ref = $entries[0]->[1]->properties; my $due_as_root = RT::Date->new( RT::CurrentUser->new( 'root' ) ); $due_as_root->Unix( $due_obj->Unix ); my $due = $due_as_root->ISO( Time => 0, Timezone => 'user' ); $due =~ s/-//g; is($prop_ref->{'dtend'}->[0]->value, $due, "Got due date: $due"); like( $prop_ref->{'dtend'}->[0]->as_string, qr/VALUE=DATE\:/, 'Got DATE value'); } RT::Test->stop_server; diag 'Test iCal with date and time with config option'; { RT->Config->Set(TimeInICal =>1); my ($baseurl, $agent) = RT::Test->started_ok; ok $agent->login('root', 'password'), 'logged in as root'; $agent->get_ok('/Search/Build.html'); $agent->form_name('BuildQuery'); $agent->field('idOp', '>'); $agent->field('ValueOfid', '0'); $agent->submit('DoSearch'); $agent->follow_link_ok({id => 'page-results'}); for ( 1 .. 5 ) { $agent->content_contains('Ticket ' . $_); } my $link = $agent->find_link( text => 'iCal' ); # use $link later $agent->get_ok($link->url); is( $agent->content_type, 'text/calendar', 'content type is text/calendar' ); for ( 1 .. 5 ) { $agent->content_like(qr/URL\:$baseurl\/Ticket\/Display\.html\?id=$_/); } my $ical = Data::ICal->new(data => $agent->content); my @entries = $ical->entries; my $ical_count = @{$entries[0]}; is( $ical_count, 10, "Got $ical_count ical entries"); my $prop_ref = $entries[0]->[0]->properties; $start =~ s/-//g; is($prop_ref->{'dtstart'}->[0]->value, $start, "Got start date with time: $start"); like( $prop_ref->{'dtstart'}->[0]->as_string, qr/VALUE=DATE-TIME\:/, 'Got DATE-TIME value'); $prop_ref = $entries[0]->[1]->properties; $due =~ s/-//g; is($prop_ref->{'dtend'}->[0]->value, $due, "Got due date with time: $due"); like( $prop_ref->{'dtend'}->[0]->as_string, qr/VALUE=DATE-TIME\:/, 'Got DATE-TIME value'); } RT::Test->stop_server; diag 'Test iCal with date and time using query param'; { RT->Config->Set(TimeInICal =>0); my ($baseurl, $agent) = RT::Test->started_ok; ok $agent->login('root', 'password'), 'logged in as root'; $agent->get_ok('/Search/Build.html'); $agent->form_name('BuildQuery'); $agent->field('idOp', '>'); $agent->field('ValueOfid', '0'); $agent->submit('DoSearch'); $agent->follow_link_ok({id => 'page-results'}); for ( 1 .. 5 ) { $agent->content_contains('Ticket ' . $_); } my $link = $agent->find_link( text => 'iCal' ); $agent->get_ok($link->url . '?Time=1'); is( $agent->content_type, 'text/calendar', 'content type is text/calendar' ); for ( 1 .. 5 ) { $agent->content_like(qr/URL\:$baseurl\/Ticket\/Display\.html\?id=$_/); } my $ical = Data::ICal->new(data => $agent->content); my @entries = $ical->entries; my $ical_count = @{$entries[0]}; is( $ical_count, 10, "Got $ical_count ical entries"); my $prop_ref = $entries[0]->[0]->properties; $start =~ s/-//g; is($prop_ref->{'dtstart'}->[0]->value, $start, "Got start date with time: $start"); like( $prop_ref->{'dtstart'}->[0]->as_string, qr/VALUE=DATE-TIME\:/, 'Got DATE-TIME value'); $prop_ref = $entries[0]->[1]->properties; $due =~ s/-//g; is($prop_ref->{'dtend'}->[0]->value, $due, "Got due date with time: $due"); like( $prop_ref->{'dtend'}->[0]->as_string, qr/VALUE=DATE-TIME\:/, 'Got DATE-TIME value'); diag 'Test iCal with date and time in single events'; my $url = $link->url . '?SingleEvent=1&Time=1'; $agent->get_ok($url); is( $agent->content_type, 'text/calendar', 'content type is text/calendar' ); for ( 1 .. 5 ) { $agent->content_like(qr/URL\:$baseurl\/Ticket\/Display\.html\?id=$_/); } $ical = Data::ICal->new(data => $agent->content); @entries = $ical->entries; $ical_count = @{$entries[0]}; # Only 5 entries in single event mode is( $ical_count, 5, "Got $ical_count ical entries"); $prop_ref = $entries[0]->[0]->properties; $start =~ s/-//g; is($prop_ref->{'dtstart'}->[0]->value, $start, "Got start date with time: $start"); like( $prop_ref->{'dtstart'}->[0]->as_string, qr/VALUE=DATE-TIME\:/, 'Got DATE-TIME value'); $prop_ref = $entries[0]->[1]->properties; $due =~ s/-//g; is($prop_ref->{'dtend'}->[0]->value, $due, "Got due date with time: $due"); like( $prop_ref->{'dtend'}->[0]->as_string, qr/VALUE=DATE-TIME\:/, 'Got DATE-TIME value'); } rt-4.2.12/t/web/search_linkdisplay.t000644 000765 000024 00000003451 12555754775 017763 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef; my ( $baseurl, $m ) = RT::Test->started_ok; my $ticket = RT::Test->create_ticket( Queue => 'General', Subject => 'ticket foo', ); my $generic_url = 'http://generic_url.example.com'; my $link = RT::Link->new( RT->SystemUser ); my ($id,$msg) = $link->Create( Base => $ticket->URI, Target => $generic_url, Type => 'RefersTo' ); ok($id, $msg); my $ticket2 = RT::Test->create_ticket( Queue => 'General', Subject => 'ticket bar', ); $link = RT::Link->new( RT->SystemUser ); ($id,$msg) = $link->Create( Base => $ticket->URI, Target => $ticket2->URI, Type => 'RefersTo' ); ok($id, $msg); my $class = RT::Class->new( RT->SystemUser ); ($id, $msg) = $class->Create( Name => 'Test Class' ); ok ($id, $msg); my $article = RT::Article->new( RT->SystemUser ); ($id, $msg) = $article->Create( Class => $class->Name, Summary => 'Test Article' ); ok ($id, $msg); $article->Load($id); $link = RT::Link->new( RT->SystemUser ); ($id,$msg) = $link->Create( Base => $ticket->URI, Target => $article->URI, Type => 'RefersTo' ); ok($id, $msg); ok( $m->login, 'logged in' ); $m->get_ok("/Search/Results.html?Format=id,RefersTo;Query=id=".$ticket->Id); $m->title_is( 'Found 1 ticket', 'title' ); my $ref = $m->find_link( url_regex => qr!generic_url! ); ok( $ref, "found generic link" ); is( $ref->text, $generic_url, $generic_url . " is displayed" ); $ref = $m->find_link( url_regex => qr!/Ticket/Display.html! ); ok( $ref, "found ticket link" ); is( $ref->text, "#".$ticket2->Id.": ticket bar", $ticket2->Id . " is displayed" ); $ref = $m->find_link( url_regex => qr!/Article/Display.html! ); ok( $ref, "found article link" ); is( $ref->text, $article->URIObj->Resolver->AsString, $article->URIObj->Resolver->AsString . " is displayed" ); undef $m; done_testing; rt-4.2.12/t/web/search_rss.t000644 000765 000024 00000004111 12555754775 016241 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 38; my ($baseurl, $agent) = RT::Test->started_ok; my $ticket = RT::Ticket->new(RT->SystemUser); for ( 1 .. 5 ) { $ticket->Create( Subject => 'Ticket ' . $_, Queue => 'General', Owner => 'root', Requestor => 'rss@localhost', ); } ok $agent->login('root', 'password'), 'logged in as root'; $agent->get_ok('/Search/Build.html'); $agent->form_name('BuildQuery'); $agent->field('idOp', '>'); $agent->field('ValueOfid', '0'); $agent->submit('DoSearch'); $agent->follow_link_ok({id => 'page-results'}); for ( 1 .. 5 ) { $agent->content_contains('Ticket ' . $_); } my $rdf_path = $agent->uri->path_query; $rdf_path =~ s!Results\.html!Results.rdf!; $agent->follow_link_ok( { text => 'RSS' } ); my $noauth_uri = $agent->uri; is( $agent->content_type, 'application/rss+xml', 'content type' ); for ( 1 .. 5 ) { $agent->content_contains('Ticket ' . $_); } my $rss_content = $agent->content; $agent->get_ok($rdf_path); is($agent->content, $rss_content, 'old Results.rdf still works'); use XML::Simple; my $rss = XML::Simple::XMLin( $rss_content ); is( scalar @{ $rss->{item} }, 5, 'item number' ); for ( 1 .. 5 ) { is( $rss->{item}[$_-1]{title}, 'Ticket ' . $_, 'title' . $_ ); } # not login at all my $agent_b = RT::Test::Web->new; $agent_b->get_ok($noauth_uri); is( $agent_b->content_type, 'application/rss+xml', 'content type' ); is( $agent_b->content, $rss_content, 'content' ); $agent_b->get_ok('/', 'back to homepage'); $agent_b->content_lacks( 'Logout', 'still not login' ); # lets login as another user my $user_b = RT::Test->load_or_create_user( Name => 'user_b', Password => 'password', ); ok $user_b && $user_b->id, 'loaded or created user'; $agent_b->login('user_b', 'password'); $agent_b->get_ok($noauth_uri); is( $agent_b->content_type, 'application/rss+xml', 'content type' ); is( $agent_b->content, $rss_content, 'content' ); $agent_b->get_ok('/', 'back to homepage'); $agent_b->content_contains( 'Logout', 'still loggedin' ); $agent_b->content_contains( 'user_b', 'still loggedin as user_b' ); rt-4.2.12/t/web/search_simple.t000644 000765 000024 00000004440 12555754775 016730 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 30; my ( $baseurl, $m ) = RT::Test->started_ok; RT::Test->create_tickets( { Queue => 'General' }, { Subject => 'ticket foo' }, { Subject => 'ticket bar' }, ); ok( $m->login, 'logged in' ); $m->get_ok('/Search/Simple.html'); $m->content_lacks( 'Show Results', 'no page menu' ); $m->get_ok('/Search/Simple.html?q=ticket foo'); $m->content_contains( 'Show Results', "has page menu" ); $m->title_is( 'Found 1 ticket', 'title' ); $m->content_contains( 'ticket foo', 'has ticket foo' ); # Test searches on custom fields my $cf1 = RT::Test->load_or_create_custom_field( Name => 'Location', Queue => 'General', Type => 'FreeformSingle', ); isa_ok( $cf1, 'RT::CustomField' ); my $cf2 = RT::Test->load_or_create_custom_field( Name => 'Server-name', Queue => 'General', Type => 'FreeformSingle', ); isa_ok( $cf2, 'RT::CustomField' ); my $t = RT::Ticket->new(RT->SystemUser); { my ($id,undef,$msg) = $t->Create( Queue => 'General', Subject => 'Test searching CFs'); ok( $id, "Created ticket - $msg" ); } { my ($status, $msg) = $t->AddCustomFieldValue( Field => $cf1->id, Value => 'Downtown'); ok( $status, "Added CF value - $msg" ); } { my ($status, $msg) = $t->AddCustomFieldValue( Field => $cf2->id, Value => 'Proxy'); ok( $status, "Added CF value - $msg" ); } # Regular search my $search = 'cf.Location:Downtown'; $m->get_ok("/Search/Simple.html?q=$search"); $m->title_is( 'Found 1 ticket', 'Found 1 ticket' ); $m->text_contains( 'Test searching CFs', "Found test CF ticket with $search" ); # Case insensitive $search = "cf.Location:downtown"; $m->get_ok("/Search/Simple.html?q=$search"); $m->title_is( 'Found 1 ticket', 'Found 1 ticket' ); $m->text_contains( 'Test searching CFs', "Found test CF ticket with $search" ); # With dash in CF name $search = "cf.Server-name:Proxy"; $m->get_ok("/Search/Simple.html?q=$search"); $m->title_is( 'Found 1 ticket', 'Found 1 ticket' ); $m->text_contains( 'Test searching CFs', "Found test CF ticket with $search" ); # TODO more simple search tests rt-4.2.12/t/web/search_tabs.t000644 000765 000024 00000004610 12555754775 016367 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 21; my ($baseurl, $agent) = RT::Test->started_ok; my $ticket = RT::Ticket->new(RT->SystemUser); for ( 1 .. 3 ) { $ticket->Create( Subject => 'Ticket ' . $_, Queue => 'General', Owner => 'root', Requestor => 'clownman@localhost', ); } ok $agent->login('root', 'password'), 'logged in as root'; # [issues.bestpractical.com #16841] { $agent->get_ok('/Search/Build.html'); $agent->form_name('BuildQuery'); $agent->field('idOp', '='); $agent->field('ValueOfid', '1'); $agent->submit('AddClause'); $agent->form_name('BuildQuery'); $agent->field('idOp', '='); $agent->field('ValueOfid', '2'); $agent->field('AndOr', 'OR'); $agent->submit('AddClause'); $agent->follow_link_ok({id => 'page-results'}); $agent->title_is('Found 2 tickets'); # } # [issues.bestpractical.com #17237] { $agent->follow_link_ok({text => 'New Search'}); $agent->title_is('Query Builder'); $agent->form_name('BuildQuery'); $agent->field('idOp', '='); $agent->field('ValueOfid', '1'); $agent->submit('AddClause'); $agent->form_name('BuildQuery'); $agent->field('idOp', '='); $agent->field('ValueOfid', '2'); $agent->field('AndOr', 'OR'); $agent->click_button(name => 'DoSearch'); $agent->title_is('Found 2 tickets'); $agent->follow_link_ok({id => 'page-results'}); $agent->title_is('Found 2 tickets'); # } $agent->follow_link_ok({text => 'Chart'}); $agent->text_contains('id = 1 OR id = 2'); $agent->form_name('SaveSearch'); $agent->field('SavedSearchDescription' => 'this is my saved chart'); $agent->click_button(name => 'SavedSearchSave'); # Confirm that we saved the chart and that it's the "current chart" $agent->text_contains('Chart this is my saved chart saved.'); $agent->form_name('SaveSearch'); is($agent->value('SavedSearchDescription'), 'this is my saved chart'); $agent->follow_link_ok({text => 'Edit Search'}); $agent->form_name('BuildQuery'); $agent->field('idOp', '='); $agent->field('ValueOfid', '3'); $agent->field('AndOr', 'OR'); $agent->click_button(name => 'DoSearch'); $agent->title_is('Found 3 tickets'); $agent->follow_link_ok({text => 'Chart'}); $agent->text_contains('id = 1 OR id = 2 OR id = 3'); # The interesting bit: confirm that the chart we saved is still the # "current chart" after roundtripping through search builder $agent->form_name('SaveSearch'); is($agent->value('SavedSearchDescription'), 'this is my saved chart'); rt-4.2.12/t/web/self_service.t000644 000765 000024 00000003031 12555754775 016556 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 17, config => 'Set( $ShowUnreadMessageNotifications, 1 );' ; my ($url, $m) = RT::Test->started_ok; my $user_a = RT::Test->load_or_create_user( Name => 'user_a', Password => 'password', EmailAddress => 'user_a@example.com', Privileged => 0, ); ok( $user_a && $user_a->id, 'loaded or created user' ); ok( ! $user_a->Privileged, 'user is not privileged' ); # Load Cc group my $Cc = RT::System->RoleGroup( 'Cc' ); ok($Cc->id); RT::Test->add_rights( { Principal => $Cc, Right => ['ShowTicket'] } ); my ($ticket) = RT::Test->create_ticket( Queue => 'General', Subject => 'test subject', Cc => 'user_a@example.com', ); my @results = $ticket->Correspond( Content => 'sample correspondence' ); ok( $m->login('user_a' => 'password'), 'unprivileged user logged in' ); $m->get_ok( '/SelfService/Display.html?id=' . $ticket->id, 'got selfservice display page' ); my $title = '#' . $ticket->id . ': test subject'; $m->title_is( $title ); $m->content_contains( "

    $title

    ", "contains

    $title

    " ); # $ShowUnreadMessageNotifications tests: $m->content_contains( "There are unread messages on this ticket." ); # mark the message as read $m->follow_link_ok( { text => 'jump to the first unread message and mark all messages as seen' }, 'followed mark as seen link' ); $m->content_contains( "

    $title

    ", "contains

    $title

    " ); $m->content_lacks( "There are unread messages on this ticket." ); # TODO need more SelfService tests rt-4.2.12/t/web/sidebyside_layout.t000644 000765 000024 00000002313 12555754775 017630 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 11; RT->Config->Set( UseSideBySideLayout => 0 ); my $root = RT::Test->load_or_create_user( Name => 'root', ); my ( $status, $msg ) = $root->SetPreferences( $RT::System => { %{ $root->Preferences($RT::System) || {} }, 'UseSideBySideLayout' => 1 } ); ok( $status, 'use side by side layout for root' ); my $user_a = RT::Test->load_or_create_user( Name => 'user_a', Password => 'password', ); ok( $user_a->id, 'created user_a' ); ok( RT::Test->set_rights( { Principal => $user_a, Right => ['CreateTicket'] }, ), 'granted user_a the right of CreateTicket' ); my ( $url, $m ) = RT::Test->started_ok; $m->login; $m->get_ok( $url . '/Ticket/Create.html?Queue=1', "root's ticket create page" ); $m->content_like( qr/]*class="[^>"]*\bsidebyside\b/, 'found sidebyside css for root' ); my $m_a = RT::Test::Web->new; ok $m_a->login( 'user_a', 'password' ), 'logged in as user_a'; $m_a->get_ok( $url . '/Ticket/Create.html?Queue=1', "user_a's ticket create page" ); $m_a->content_unlike( qr/]*class="[^>"]*\bsidebyside\b/, "didn't find sidebyside class for user_a" ); rt-4.2.12/t/web/simple_search.t000644 000765 000024 00000021324 12555754775 016730 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => undef, config => 'Set( %FullTextSearch, Enable => 1, Indexed => 0 );'; my ($baseurl, $m) = RT::Test->started_ok; my $url = $m->rt_base_url; my $queue = RT::Queue->new($RT::SystemUser); $queue->Create( Name => 'other' ); ok( $queue->id, 'created queue other'); my $two_words_queue = RT::Test->load_or_create_queue( Name => 'Two Words', ); ok $two_words_queue && $two_words_queue->id, 'loaded or created a queue'; { my $tickets = RT::Tickets->new( RT->SystemUser ); my $active = "( ".join( " OR ", map "Status = '$_'", RT::Queue->ActiveStatusArray())." )"; my $inactive = "( ".join( " OR ", map "Status = '$_'", RT::Queue->InactiveStatusArray())." )"; require RT::Search::Simple; my $parser = RT::Search::Simple->new( TicketsObj => $tickets, Argument => '', ); is $parser->QueryToSQL("foo"), "( Subject LIKE 'foo' ) AND $active", "correct parsing"; is $parser->QueryToSQL("1 foo"), "( Subject LIKE 'foo' AND Subject LIKE '1' ) AND $active", "correct parsing"; is $parser->QueryToSQL("1"), "( Id = 1 )", "correct parsing"; is $parser->QueryToSQL("#1"), "( Id = 1 )", "correct parsing"; is $parser->QueryToSQL("'1'"), "( Subject LIKE '1' ) AND $active", "correct parsing"; is $parser->QueryToSQL("foo bar"), "( Subject LIKE 'foo' AND Subject LIKE 'bar' ) AND $active", "correct parsing"; is $parser->QueryToSQL("'foo bar'"), "( Subject LIKE 'foo bar' ) AND $active", "correct parsing"; is $parser->QueryToSQL("'foo \\' bar'"), "( Subject LIKE 'foo \\' bar' ) AND $active", "correct parsing"; is $parser->QueryToSQL('"foo \' bar"'), "( Subject LIKE 'foo \\' bar' ) AND $active", "correct parsing"; is $parser->QueryToSQL('"\f\o\o"'), "( Subject LIKE '\\\\f\\\\o\\\\o' ) AND $active", "correct parsing"; is $parser->QueryToSQL("General"), "( Queue = 'General' ) AND $active", "correct parsing"; is $parser->QueryToSQL("'Two Words'"), "( Subject LIKE 'Two Words' ) AND $active", "correct parsing"; is $parser->QueryToSQL("queue:'Two Words'"), "( Queue = 'Two Words' ) AND $active", "correct parsing"; is $parser->QueryToSQL("subject:'Two Words'"), "$active AND ( Subject LIKE 'Two Words' )", "correct parsing"; is $parser->QueryToSQL("me"), "( Owner.id = '__CurrentUser__' ) AND $active", "correct parsing"; is $parser->QueryToSQL("'me'"), "( Subject LIKE 'me' ) AND $active", "correct parsing"; is $parser->QueryToSQL("owner:me"), "( Owner.id = '__CurrentUser__' ) AND $active", "correct parsing"; is $parser->QueryToSQL("owner:'me'"), "( Owner = 'me' ) AND $active", "correct parsing"; is $parser->QueryToSQL('owner:root@localhost'), "( Owner.EmailAddress = 'root\@localhost' ) AND $active", "Email address as owner"; is $parser->QueryToSQL("resolved me"), "( Owner.id = '__CurrentUser__' ) AND ( Status = 'resolved' )", "correct parsing"; is $parser->QueryToSQL("resolved active me"), "( Owner.id = '__CurrentUser__' ) AND ( Status = 'resolved' OR Status = 'new' OR Status = 'open' OR Status = 'stalled' )", "correct parsing"; is $parser->QueryToSQL("status:active"), $active, "Explicit active search"; is $parser->QueryToSQL("status:'active'"), "( Status = 'active' )", "Quoting active makes it the actual word"; is $parser->QueryToSQL("inactive me"), "( Owner.id = '__CurrentUser__' ) AND $inactive", "correct parsing"; is $parser->QueryToSQL("cf.Foo:bar"), "( 'CF.{Foo}' LIKE 'bar' ) AND $active", "correct parsing of CFs"; is $parser->QueryToSQL(q{cf."don't foo?":'bar n\\' baz'}), qq/( 'CF.{don\\'t foo?}' LIKE 'bar n\\' baz' ) AND $active/, "correct parsing of CFs with quotes"; } my $ticket_found_1 = RT::Ticket->new($RT::SystemUser); my $ticket_found_2 = RT::Ticket->new($RT::SystemUser); my $ticket_not_found = RT::Ticket->new($RT::SystemUser); $ticket_found_1->Create( Subject => 'base ticket 1'.$$, Queue => 'general', Owner => 'root', Requestor => 'customsearch@localhost', Content => 'this is base ticket 1', ); ok( $ticket_found_1->id, 'created ticket for custom search'); $ticket_found_2->Create( Subject => 'base ticket 2'.$$, Queue => 'general', Owner => 'root', Requestor => 'customsearch@localhost', Content => 'this is base ticket 2', ); ok( $ticket_found_2->id, 'created ticket for custom search'); $ticket_not_found = RT::Ticket->new($RT::SystemUser); $ticket_not_found->Create( Subject => 'not found subject' . $$, Queue => 'other', Owner => 'nobody', Requestor => 'notfound@localhost', Content => 'this is not found content', ); ok( $ticket_not_found->id, 'created ticket for custom search'); ok($m->login, 'logged in'); my @queries = ( 'base ticket', 'root', 'customsearch@localhost', 'requestor:customsearch', 'subject:base', 'subject:"base ticket"', 'queue:general', 'owner:root', ); for my $q (@queries) { $m->form_with_fields('q'); $m->field( q => $q ); $m->submit; $m->content_contains( 'base ticket 1', 'base ticket 1 is found' ); $m->content_contains( 'base ticket 2', 'base ticket 2 is found' ); $m->content_lacks( 'not found subject', 'not found ticket is not found' ); } $ticket_not_found->SetStatus('open'); is( $ticket_not_found->Status, 'open', 'status of not found ticket is open' ); @queries = qw/new status:new/; for my $q (@queries) { $m->form_with_fields('q'); $m->field( q => $q ); $m->submit; $m->content_contains( 'base ticket 1', 'base ticket 1 is found' ); $m->content_contains( 'base ticket 2', 'base ticket 2 is found' ); $m->content_lacks( 'not found subject', 'not found ticket is not found' ); } @queries = ( 'fulltext:"base ticket 1"', "'base ticket 1'" ); for my $q (@queries) { $m->form_with_fields('q'); $m->field( q => $q ); $m->submit; $m->content_contains( 'base ticket 1', 'base ticket 1 is found' ); $m->content_lacks( 'base ticket 2', 'base ticket 2 is not found' ); $m->content_lacks( 'not found subject', 'not found ticket is not found' ); } # now let's test with ' or " for my $quote ( q{'}, q{"} ) { my $user = RT::User->new($RT::SystemUser); is( ref($user), 'RT::User' ); my ( $id, $msg ) = $user->Create( Name => qq!foo${quote}bar!, EmailAddress => qq!foo${quote}bar$$\@example.com !, Privileged => 1, ); ok ($id, "Creating user - " . $msg ); my ( $grantid, $grantmsg ) = $user->PrincipalObj->GrantRight( Right => 'OwnTicket' ); ok( $grantid, $grantmsg ); my $ticket_quote = RT::Ticket->new($RT::SystemUser); $ticket_quote->Create( Subject => qq!base${quote}ticket $$!, Queue => 'general', Owner => $user->Name, ( $quote eq q{'} ? (Requestor => qq!custom${quote}search\@localhost!) : () ), Content => qq!this is base${quote}ticket with quote inside!, ); ok( $ticket_quote->id, 'created ticket with quote for custom search' ); @queries = ( qq!fulltext:base${quote}ticket!, "base${quote}ticket", "owner:foo${quote}bar", "foo${quote}bar", # email doesn't allow " character $quote eq q{'} ? ( "requestor:custom${quote}search\@localhost", "custom${quote}search\@localhost", ) : (), ); for my $q (@queries) { $m->form_with_fields('q'); $m->field( q => $q ); $m->submit; my $escape_quote = $quote; RT::Interface::Web::EscapeHTML(\$escape_quote); $m->content_contains( "base${escape_quote}ticket", "base${quote}ticket is found" ); } } # Create a CF { my $cf = RT::CustomField->new(RT->SystemUser); ok( $cf->Create(Name => 'Foo', Type => 'Freeform', MaxValues => '1', Queue => 0) ); ok $cf->Id; $ticket_found_1->AddCustomFieldValue( Field => 'Foo', Value => 'bar' ); $ticket_found_2->AddCustomFieldValue( Field => 'Foo', Value => 'bar' ); $ticket_not_found->AddCustomFieldValue( Field => 'Foo', Value => 'baz' ); is( $ticket_found_1->FirstCustomFieldValue('Foo'), 'bar', 'cf value is ok' ); is( $ticket_found_2->FirstCustomFieldValue('Foo'), 'bar', 'cf value is ok' ); is( $ticket_not_found->FirstCustomFieldValue('Foo'), 'baz', 'cf value is ok' ); @queries = qw/cf.Foo:bar/; for my $q (@queries) { $m->form_with_fields('q'); $m->field( q => $q ); $m->submit; $m->content_contains( 'base ticket 1', 'base ticket 1 is found' ); $m->content_contains( 'base ticket 2', 'base ticket 2 is found' ); $m->content_lacks( 'not found subject', 'not found ticket is not found' ); } } undef $m; done_testing; rt-4.2.12/t/web/smime/000755 000765 000024 00000000000 12555754775 015035 5ustar00sartakstaff000000 000000 rt-4.2.12/t/web/squish.t000644 000765 000024 00000005372 12555754775 015433 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT; use RT::Test tests => 26; RT->Config->Set( DevelMode => 0 ); RT->Config->Set( WebDefaultStylesheet => 'aileron' ); RT->Config->Set( LocalStaticPath => RT::Test::get_abs_relocatable_dir('static') ); my ( $url, $m ) = RT::Test->started_ok; $m->login; diag "test squished files with devel mode disabled"; $m->follow_link_ok( { url_regex => qr!aileron/squished-([a-f0-9]{32})\.css! }, 'follow squished css' ); $m->content_like( qr!/\*\* End of .*?.css \*/!, 'squished css' ); $m->content_lacks( 'counteract the titlebox', 'no mobile.css by default' ); $m->back; my ($js_link) = $m->content =~ m!src="([^"]+?squished-([a-f0-9]{32})\.js)"!; $m->get_ok( $url . $js_link, 'follow squished js' ); $m->content_lacks('function just_testing', "no not-by-default.js"); $m->content_contains('jQuery.noConflict', "found default js content"); RT::Test->stop_server; diag "test squished files with customized files and devel mode disabled"; RT->AddJavaScript( 'not-by-default.js' ); RT->AddStyleSheets( 'mobile.css' ); ( $url, $m ) = RT::Test->started_ok; $m->login; $m->follow_link_ok( { url_regex => qr!aileron/squished-([a-f0-9]{32})\.css! }, 'follow squished css' ); $m->content_like( qr!/\*\* End of .*?.css \*/!, 'squished css' ); $m->content_contains( 'counteract the titlebox', 'has mobile.css' ); $m->back; ($js_link) = $m->content =~ m!src="([^"]+?squished-([a-f0-9]{32})\.js)"!; $m->get_ok( $url . $js_link, 'follow squished js' ); $m->content_contains( 'function just_testing', "has not-by-default.js" ); $m->content_contains('jQuery.noConflict', "found default js content"); RT::Test->stop_server; diag "Test with a trivial jsmin which is a pass-through"; RT->Config->Set( 'JSMinPath' => RT::Test::get_abs_relocatable_dir("passthrough-jsmin")); ( $url, $m ) = RT::Test->started_ok; $m->login; ($js_link) = $m->content =~ m!src="([^"]+?squished-([a-f0-9]{32})\.js)"!; $m->get_ok( $url . $js_link, 'follow squished js' ); $m->content_contains( 'passthrough-jsmin added this', "has passthrough-added content" ); $m->content_contains( 'function just_testing', "has not-by-default.js" ); $m->content_contains('jQuery.noConflict', "found default js content"); RT::Test->stop_server; diag "test squished files with devel mode enabled"; RT->Config->Set( 'DevelMode' => 1 ); RT->AddJavaScript( 'not-by-default.js' ); RT->AddStyleSheets( 'nottherebutwedontcare.css' ); ( $url, $m ) = RT::Test->started_ok; $m->login; $m->content_unlike( qr!squished-.*?\.(js|css)!, 'no squished link with develmode' ); $m->content_contains('not-by-default.js', "found extra javascript resource"); $m->content_contains('nottherebutwedontcare.css', "found extra css resource"); $m->content_contains('jquery_noconflict.js', "found a default js resource"); rt-4.2.12/t/web/static/000755 000765 000024 00000000000 12555754775 015212 5ustar00sartakstaff000000 000000 rt-4.2.12/t/web/template.t000644 000765 000024 00000005365 12555754775 015734 0ustar00sartakstaff000000 000000 use strict; use warnings; use RT::Test tests => 22; my $user_a = RT::Test->load_or_create_user( Name => 'user_a', Password => 'password', ); ok $user_a && $user_a->id, 'loaded or created user'; my ($baseurl, $m) = RT::Test->started_ok; ok( RT::Test->set_rights( { Principal => $user_a, Right => [qw(ShowConfigTab ShowTemplate ModifyTemplate)] }, ), 'set rights'); ok $m->login('user_a', 'password'), 'logged in as user A'; # get to the templates screen $m->follow_link( text => 'Admin' ); $m->title_is(q{RT Administration}, 'admin screen'); $m->follow_link( text => 'Global' ); $m->title_is(q{Admin/Global configuration}, 'global admin'); $m->follow_link( text => 'Templates' ); $m->title_is(q{Modify templates which apply to all queues}, 'global templates'); $m->follow_link( text => 'Resolved' ); # template name $m->title_is(q{Modify template Resolved}, 'modifying the Resolved template'); # now try changing Type back and forth $m->form_name('ModifyTemplate'); is($m->value('Type'), 'Perl'); $m->field(Type => 'Simple'); $m->submit; $m->title_is(q{Modify template Resolved}, 'modifying the Resolved template'); $m->form_name('ModifyTemplate'); is($m->value('Type'), 'Simple', 'updated type to simple'); $m->field(Type => 'Perl'); $m->submit; $m->title_is(q{Modify template Resolved}, 'modifying the Resolved template'); $m->form_name('ModifyTemplate'); is($m->value('Type'), 'Simple', 'need the ExecuteCode right to update Type to Perl'); $m->content_contains('Permission Denied'); ok( RT::Test->add_rights( { Principal => $user_a, Right => [qw(ExecuteCode)] }, ), 'add ExecuteCode rights'); $m->field(Type => 'Perl'); $m->submit; $m->title_is(q{Modify template Resolved}, 'modifying the Resolved template'); $m->form_name('ModifyTemplate'); is($m->value('Type'), 'Perl', 'now that we have ExecuteCode we can update Type to Perl'); { # 21152: Each time you save a Template a newline is chopped off the front $m->form_name('ModifyTemplate'); my $content; TODO: { local $TODO = "WWW::Mechanize doesn't strip newline following ");return a.join("")})}}, checkbox:function(b,a,d){if(!(3>arguments.length)){var e=h.call(this,a,{"default":!!a["default"]});a.validate&&(this.validate=a.validate);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"span",null,null,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},true),f=[],d=CKEDITOR.tools.getNextId()+"_label",g={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":d};p(c);if(a["default"])g.checked="checked";if(typeof c.inputStyle!= "undefined")c.style=c.inputStyle;e.checkbox=new CKEDITOR.ui.dialog.uiElement(b,c,f,"input",null,g);f.push(' ");return f.join("")})}},radio:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);this._["default"]||(this._["default"]=this._.initValue=a.items[0][1]);a.validate&&(this.validate=a.valdiate);var e=[],c=this;CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){for(var f= [],d=[],g=a.id?a.id+"_radio":CKEDITOR.tools.getNextId()+"_radio",j=0;j'+CKEDITOR.tools.htmlEncode(a.label)+"")}}, select:function(b,a,d){if(!(3>arguments.length)){var e=h.call(this,a);a.validate&&(this.validate=a.validate);e.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_select":CKEDITOR.tools.getNextId()+"_select"},true),d=[],i=[],g={id:e.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId};d.push('");return d.join("")})}},file:function(b,a,d){if(!(3>arguments.length)){void 0=== a["default"]&&(a["default"]="");var e=CKEDITOR.tools.extend(h.call(this,a),{definition:a,buttons:[]});a.validate&&(this.validate=a.validate);b.on("load",function(){CKEDITOR.document.getById(e.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){e.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var b=CKEDITOR.env.isCustomDomain(),d=['');return d.join("")})}},fileButton:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var e=this;a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),f=c.onClick;c.className=(c.className?c.className+" ":"")+"cke_dialog_ui_button";c.onClick=function(c){var d=a["for"];if(!f||f.call(this,c)!==false){b.getContentElement(d[0], d[1]).submit();this.disable()}};b.on("load",function(){b.getContentElement(a["for"][0],a["for"][1])._.buttons.push(e)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\s*<[\w:]+\s+([^>]*)?>/,a=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(e,c,f){if(!(3>arguments.length)){var i=[],g=c.html;"<"!=g.charAt(0)&&(g=""+g+"");var j=c.focus;j&&(this.focus=function(){this.selectParentTab();"function"==typeof j&&j.call(this);this.fire("focus")},c.isFocusable&& (this.isFocusable=this.isFocusable),this.keyboardFocusable=!0);CKEDITOR.ui.dialog.uiElement.call(this,e,c,i,"span",null,null,"");i=i.join("").match(b);g=g.match(a)||["","",""];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]="/"+g[2]);f.push([g[1]," ",i[1]||"",g[2]].join(""))}}}(),fieldset:function(b,a,d,e,c){var f=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,e,"fieldset",null,null,function(){var a=[];f&&a.push(""+f+""); for(var b=0;ba.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b=CKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()? "":b.getChild(0).getText()},eventProcessors:o},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return!this._.disabled?this.fire("click",{dialog:this._.dialog}):!1},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()},isEnabled:function(){return!this._.disabled}, eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(b,a){this.on("click",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)},focus:function(){var b=this.selectParentTab(); setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){!b&&(b="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement, {getInputElement:function(){return this._.select.getElement()},add:function(b,a,d){var e=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),c=this.getInputElement().$;e.$.text=b;e.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(e.$):c.add(e.$,null):c.add(e.$,d);return this},remove:function(b){this.getInputElement().$.remove(b);return this},clear:function(){for(var b=this.getInputElement().$;0','
    ',"

    rt-4.2.12/share/static/RichText/plugins/wsc/dialogs/tmpFrameset.html000644 000765 000024 00000003617 12555754775 026111 0ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/wsc/dialogs/wsc.css000644 000765 000024 00000002320 12555754775 024230 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ html, body { background-color: transparent; margin: 0px; padding: 0px; } body { padding: 10px; } body, td, input, select, textarea { font-size: 11px; font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; } .midtext { padding:0px; margin:10px; } .midtext p { padding:0px; margin:10px; } .Button { border: #737357 1px solid; color: #3b3b1f; background-color: #c7c78f; } .PopupTabArea { color: #737357; background-color: #e3e3c7; } .PopupTitleBorder { border-bottom: #d5d59d 1px solid; } .PopupTabEmptyArea { padding-left: 10px; border-bottom: #d5d59d 1px solid; } .PopupTab, .PopupTabSelected { border-right: #d5d59d 1px solid; border-top: #d5d59d 1px solid; border-left: #d5d59d 1px solid; padding: 3px 5px 3px 5px; color: #737357; } .PopupTab { margin-top: 1px; border-bottom: #d5d59d 1px solid; cursor: pointer; } .PopupTabSelected { font-weight: bold; cursor: default; padding-top: 4px; border-bottom: #f1f1e3 1px solid; background-color: #f1f1e3; } rt-4.2.12/share/static/RichText/plugins/wsc/dialogs/wsc.js000644 000765 000024 00000006374 12555754775 024071 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add("checkspell",function(a){function c(a,c){var d=0;return function(){"function"==typeof window.doSpell?("undefined"!=typeof e&&window.clearInterval(e),j(a)):180==d++&&window._cancelOnError(c)}}function j(c){var f=new window._SP_FCK_LangCompare,b=CKEDITOR.getUrl(a.plugins.wsc.path+"dialogs/"),e=b+"tmpFrameset.html";window.gFCKPluginName="wsc";f.setDefaulLangCode(a.config.defaultLanguage);window.doSpell({ctrl:g,lang:a.config.wsc_lang||f.getSPLangCode(a.langCode),intLang:a.config.wsc_uiLang|| f.getSPLangCode(a.langCode),winType:d,onCancel:function(){c.hide()},onFinish:function(b){a.focus();c.getParentEditor().setData(b.value);c.hide()},staticFrame:e,framesetPath:e,iframePath:b+"ciframe.html",schemaURI:b+"wsc.css",userDictionaryName:a.config.wsc_userDictionaryName,customDictionaryName:a.config.wsc_customDictionaryIds&&a.config.wsc_customDictionaryIds.split(","),domainName:a.config.wsc_domainName});CKEDITOR.document.getById(h).setStyle("display","none");CKEDITOR.document.getById(d).setStyle("display", "block")}var b=CKEDITOR.tools.getNextNumber(),d="cke_frame_"+b,g="cke_data_"+b,h="cke_error_"+b,e,b=document.location.protocol||"http:",i=a.lang.wsc.notAvailable,k='', l=a.config.wsc_customLoaderScript||b+"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin=fck2&customerid="+a.config.wsc_customerId+"&cmd=script&doc=wsc&schema=22";a.config.wsc_customLoaderScript&&(i+='

    '+a.lang.wsc.errorLoading.replace(/%s/g,a.config.wsc_customLoaderScript)+"

    ");window._cancelOnError=function(c){if("undefined"==typeof window.WSC_Error){CKEDITOR.document.getById(d).setStyle("display", "none");var b=CKEDITOR.document.getById(h);b.setStyle("display","block");b.setHtml(c||a.lang.wsc.notAvailable)}};return{title:a.config.wsc_dialogTitle||a.lang.wsc.title,minWidth:485,minHeight:380,buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var b=this.getContentElement("general","content").getElement();b.setHtml(k);b.getChild(2).setStyle("height",this._.contentSize.height+"px");"function"!=typeof window.doSpell&&CKEDITOR.document.getHead().append(CKEDITOR.document.createElement("script", {attributes:{type:"text/javascript",src:l}}));b=a.getData();CKEDITOR.document.getById(g).setValue(b);e=window.setInterval(c(this,i),250)},onHide:function(){window.ooo=void 0;window.int_framsetLoaded=void 0;window.framesetLoaded=void 0;window.is_window_opened=!1},contents:[{id:"general",label:a.config.wsc_dialogTitle||a.lang.wsc.title,padding:0,elements:[{type:"html",id:"content",html:""}]}]}}); CKEDITOR.dialog.on("resize",function(a){var a=a.data,c=a.dialog;"checkspell"==c._.name&&((c=(c=c.getContentElement("general","content").getElement())&&c.getChild(2))&&c.setSize("height",a.height),c&&c.setSize("width",a.width))});rt-4.2.12/share/static/RichText/plugins/templates/dialogs/000755 000765 000024 00000000000 12555754775 024127 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/templates/templates/000755 000765 000024 00000000000 12555754775 024503 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/templates/templates/default.js000644 000765 000024 00000002665 12555754775 026476 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.addTemplates("default",{imagesPath:CKEDITOR.getUrl(CKEDITOR.plugins.getPath("templates")+"templates/images/"),templates:[{title:"Image and Title",image:"template1.gif",description:"One main image with a title and text that surround the image.",html:'

    Type the title here

    Type the text here

    '},{title:"Strange Template",image:"template2.gif",description:"A template that defines two colums, each one with a title, and some text.", html:'

    Title 1

    Title 2

    Text 1Text 2

    More text goes here.

    '},{title:"Text and Table",image:"template3.gif",description:"A title with some text and a table.",html:'

    Title goes here

    Table title
       
       
       

    Type the text here

    '}]});rt-4.2.12/share/static/RichText/plugins/templates/templates/images/000755 000765 000024 00000000000 12555754775 025750 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/templates/templates/images/template1.gif000644 000765 000024 00000000567 12555754775 030343 0ustar00sartakstaff000000 000000 GIF89adF‘²²²ÿÿÿ!ù,dFÿ„©Ëí£œ´Ú …Þ¼û†âH–b¦êʪh ÇrùÎö-×øÎ“z j~Â"ލ (—̦óÉ4æ ÐÊj·Ü&)ÀòÄÉ®ù¼üR?d\ ïª Õ«4nßôwSÞÞÇò×Ã828Ö·5PGh¸‚¸S(é™xé·æaó¹ÉAé&JÓ©¸ÁÈõAºgꃚ¥*‹Éf{ëk*Û;ók,óÖÚŠë©»;J»ÊÜ<ôœ-] *ýJfÝŒ 3, ÞrŒÌ¨œ©}Â-®ò~IÎ/9¿Ro˜wÞÈîLgŠºmýmcP „E2 âða}+ZL'Q!·ŒH@"r¼áñãŒ"ñ¸³ˆ’Æ’7²´Aòå$—2M¬¹ƒbÊ‹VâIóçÌ›B-jóR˜A—Î:êt(†©T«Z½Š5ëƒ;rt-4.2.12/share/static/RichText/plugins/templates/templates/images/template2.gif000644 000765 000024 00000000515 12555754775 030335 0ustar00sartakstaff000000 000000 GIF89adF‘²²²ÿÿÿ!ù,dFÿ„©Ëí£œ´Ú …Þ¼û†âH–b¦êʪh ÇrùÎö-×øÎ“z j~Â"ŽhLÆ‚€ó J§ÔÀ§ŠÍJAL­W{ýŠ·Ÿîøü £Ç܃ò=cÂç#9ýî±ã÷óšíñ˜çÆgHhp¨¸¡·øÖè˜Yä'è¥v™Õ–HÉ7é Ê3JzTx:g©‰•ÙJÅ  JgJ›“z+™«[ÉÛd ¼Â ;õj%;l$Ìlâüìó+}]Rœ …¼í´Œ]J¾4NÞr}Α®>4î /ÞŽÛI_nn®?ßïâ]¼ƒNð˜í Â2 üç°NÈî j ˆC‹7Îêèï#HìÚ•Twò\JrZº| 3¦Ì™ ;rt-4.2.12/share/static/RichText/plugins/templates/templates/images/template3.gif000644 000765 000024 00000000646 12555754775 030343 0ustar00sartakstaff000000 000000 GIF89adF‘²²²ÿÿÿ!ù,dFÿ„©Ëí£œ´Ú …Þ¼û†âH–b¦êʪh ÇrùÎö-×øÎ“z j~Â"ŽhLƦó J§Ôªõúü0±Ü®÷Õ>à²ùœõ •l׸ g­ãt±¡ŽmÑæŸ 2—·Th08rÈÃxò¦rø×¤áÈ!¨xy³9éÑ9#ºGéågø Êa†ÈJ"j9«z‹*)BKºšÛËk ›Û:¼‹¬ö+àú¥+{z›XLØì4]M-üˆ«ÌmL>N­ ^-îýüMmîþN¿Qzmå‡ï»^ÜžÞM]
    '),d='';a.image&&b&&(d+='');d+='");k.on("click",function(){p(a.html)});return k}function p(a){var b=CKEDITOR.dialog.getCurrent();b.getValueOf("selectTpl","chkInsertOpt")?(c.fire("saveSnapshot"),c.setData(a,function(){b.hide();var a=c.createRange();a.moveToElementEditStart(c.editable());a.select();setTimeout(function(){c.fire("saveSnapshot")},0)})):(c.insertHtml(a),b.hide())}function i(a){var b=a.data.getTarget(), c=g.equals(b);if(c||g.contains(b)){var d=a.data.getKeystroke(),f=g.getElementsByTag("a"),e;if(f){if(c)e=f.getItem(0);else switch(d){case 40:e=b.getNext();break;case 38:e=b.getPrevious();break;case 13:case 32:b.fire("click")}e&&(e.focus(),a.data.preventDefault())}}}var h=CKEDITOR.plugins.get("templates");CKEDITOR.document.appendStyleSheet(CKEDITOR.getUrl(h.path+"dialogs/templates.css"));var g,h="cke_tpl_list_label_"+CKEDITOR.tools.getNextNumber(),f=c.lang.templates,l=c.config;return{title:c.lang.templates.title, minWidth:CKEDITOR.env.ie?440:400,minHeight:340,contents:[{id:"selectTpl",label:f.title,elements:[{type:"vbox",padding:5,children:[{id:"selectTplText",type:"html",html:""+f.selectPromptMsg+""},{id:"templatesList",type:"html",focus:!0,html:'
    '+f.options+""},{id:"chkInsertOpt",type:"checkbox",label:f.insertOption, "default":l.templates_replaceContent}]}]}],buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var a=this.getContentElement("selectTpl","templatesList");g=a.getElement();CKEDITOR.loadTemplates(l.templates_files,function(){var b=(l.templates||"default").split(",");if(b.length){var c=g;c.setHtml("");for(var d=0,h=b.length;d'+f.emptyListMsg+"")});this._.element.on("keydown",i)},onHide:function(){this._.element.removeListener("keydown",i)}}})})();rt-4.2.12/share/static/RichText/plugins/tabletools/dialogs/000755 000765 000024 00000000000 12555754775 024301 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/tabletools/dialogs/tableCell.js000644 000765 000024 00000014102 12555754775 026524 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add("cellProperties",function(f){var g=f.lang.table,c=g.cell,d=f.lang.common,h=CKEDITOR.dialog.validate,j=/^(\d+(?:\.\d+)?)(px|%)$/,e={type:"html",html:" "},k="rtl"==f.lang.dir,i=f.plugins.colordialog;return{title:c.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?450:410,minHeight:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?230:220,contents:[{id:"info",label:c.title,accessKey:"I",elements:[{type:"hbox",widths:["40%","5%","40%"],children:[{type:"vbox",padding:0, children:[{type:"hbox",widths:["70%","30%"],children:[{type:"text",id:"width",width:"100px",label:d.width,validate:h.number(c.invalidWidth),onLoad:function(){var a=this.getDialog().getContentElement("info","widthType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:function(a){var b=parseInt(a.getAttribute("width"),10),a=parseInt(a.getStyle("width"),10);!isNaN(b)&&this.setValue(b);!isNaN(a)&&this.setValue(a)}, commit:function(a){var b=parseInt(this.getValue(),10),c=this.getDialog().getValueOf("info","widthType");isNaN(b)?a.removeStyle("width"):a.setStyle("width",b+c);a.removeAttribute("width")},"default":""},{type:"select",id:"widthType",label:f.lang.table.widthUnit,labelStyle:"visibility:hidden","default":"px",items:[[g.widthPx,"px"],[g.widthPc,"%"]],setup:function(a){(a=j.exec(a.getStyle("width")||a.getAttribute("width")))&&this.setValue(a[2])}}]},{type:"hbox",widths:["70%","30%"],children:[{type:"text", id:"height",label:d.height,width:"100px","default":"",validate:h.number(c.invalidHeight),onLoad:function(){var a=this.getDialog().getContentElement("info","htmlHeightType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:function(a){var b=parseInt(a.getAttribute("height"),10),a=parseInt(a.getStyle("height"),10);!isNaN(b)&&this.setValue(b);!isNaN(a)&&this.setValue(a)},commit:function(a){var b=parseInt(this.getValue(), 10);isNaN(b)?a.removeStyle("height"):a.setStyle("height",CKEDITOR.tools.cssLength(b));a.removeAttribute("height")}},{id:"htmlHeightType",type:"html",html:"
    "+g.widthPx}]},e,{type:"select",id:"wordWrap",label:c.wordWrap,"default":"yes",items:[[c.yes,"yes"],[c.no,"no"]],setup:function(a){var b=a.getAttribute("noWrap");("nowrap"==a.getStyle("white-space")||b)&&this.setValue("no")},commit:function(a){"no"==this.getValue()?a.setStyle("white-space","nowrap"):a.removeStyle("white-space");a.removeAttribute("noWrap")}}, e,{type:"select",id:"hAlign",label:c.hAlign,"default":"",items:[[d.notSet,""],[d.alignLeft,"left"],[d.alignCenter,"center"],[d.alignRight,"right"]],setup:function(a){var b=a.getAttribute("align");this.setValue(a.getStyle("text-align")||b||"")},commit:function(a){var b=this.getValue();b?a.setStyle("text-align",b):a.removeStyle("text-align");a.removeAttribute("align")}},{type:"select",id:"vAlign",label:c.vAlign,"default":"",items:[[d.notSet,""],[d.alignTop,"top"],[d.alignMiddle,"middle"],[d.alignBottom, "bottom"],[c.alignBaseline,"baseline"]],setup:function(a){var b=a.getAttribute("vAlign"),a=a.getStyle("vertical-align");switch(a){case "top":case "middle":case "bottom":case "baseline":break;default:a=""}this.setValue(a||b||"")},commit:function(a){var b=this.getValue();b?a.setStyle("vertical-align",b):a.removeStyle("vertical-align");a.removeAttribute("vAlign")}}]},e,{type:"vbox",padding:0,children:[{type:"select",id:"cellType",label:c.cellType,"default":"td",items:[[c.data,"td"],[c.header,"th"]], setup:function(a){this.setValue(a.getName())},commit:function(a){a.renameNode(this.getValue())}},e,{type:"text",id:"rowSpan",label:c.rowSpan,"default":"",validate:h.integer(c.invalidRowSpan),setup:function(a){(a=parseInt(a.getAttribute("rowSpan"),10))&&1!=a&&this.setValue(a)},commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("rowSpan",this.getValue()):a.removeAttribute("rowSpan")}},{type:"text",id:"colSpan",label:c.colSpan,"default":"",validate:h.integer(c.invalidColSpan), setup:function(a){(a=parseInt(a.getAttribute("colSpan"),10))&&1!=a&&this.setValue(a)},commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("colSpan",this.getValue()):a.removeAttribute("colSpan")}},e,{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"bgColor",label:c.bgColor,"default":"",setup:function(a){var b=a.getAttribute("bgColor");this.setValue(a.getStyle("background-color")||b)},commit:function(a){this.getValue()?a.setStyle("background-color",this.getValue()): a.removeStyle("background-color");a.removeAttribute("bgColor")}},i?{type:"button",id:"bgColorChoose","class":"colorChooser",label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){f.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","bgColor").setValue(a);this.focus()},this)}}:e]},e,{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"borderColor",label:c.borderColor,"default":"",setup:function(a){var b= a.getAttribute("borderColor");this.setValue(a.getStyle("border-color")||b)},commit:function(a){this.getValue()?a.setStyle("border-color",this.getValue()):a.removeStyle("border-color");a.removeAttribute("borderColor")}},i?{type:"button",id:"borderColorChoose","class":"colorChooser",label:c.chooseColor,style:(k?"margin-right":"margin-left")+": 10px",onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){f.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info", "borderColor").setValue(a);this.focus()},this)}}:e]}]}]}]}],onShow:function(){this.cells=CKEDITOR.plugins.tabletools.getSelectedCells(this._.editor.getSelection());this.setupContent(this.cells[0])},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),c=this.cells,d=0;dl&&(l=f)}return l}function o(a){return function(){var f=this.getValue(),f=!!(CKEDITOR.dialog.validate.integer()(f)&&0n.getSize("width")?"100%":500,getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&&a.updateStyle("width",this.getValue())},setup:function(a){this.setValue(a.getStyle("width"))},commit:k}]},{type:"hbox",widths:["5em"],children:[{type:"text", id:"txtHeight",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:k}]},{type:"html",html:" "},{type:"text",id:"txtCellSpace", controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":1,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing",this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":1,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")|| "")},commit:function(a,d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right",html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0'],d=0,g=b.length,h,e;d');for(var j=0;j'+h+''+e+"")}else f.push(' ');f.push("")}f.push("")}f.push("",''+l.options+"");this.getContentElement("info","charContainer").getElement().setHtml(f.join(""))},contents:[{id:"info",label:i.lang.common.generalTab, title:i.lang.common.generalTab,padding:0,align:"top",elements:[{type:"hbox",align:"top",widths:["320px","90px"],children:[{type:"html",id:"charContainer",html:"",onMouseover:g,onMouseout:d,focus:function(){var c=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){c.focus();g(null,c)},0)},onShow:function(){var c=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){c.focus();g(null,c)},0)},onLoad:function(c){e=c.sender}},{type:"hbox",align:"top",widths:["100%"],children:[{type:"vbox", align:"top",children:[{type:"html",html:"
    "},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"
     
    "},{type:"html",id:"htmlPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;", html:"
     
    "}]}]}]}]}]}});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/_translationstatus.txt000644 000765 000024 00000001322 12555754775 032030 0ustar00sartakstaff000000 000000 Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license cs.js Found: 118 Missing: 0 cy.js Found: 118 Missing: 0 de.js Found: 118 Missing: 0 el.js Found: 16 Missing: 102 eo.js Found: 118 Missing: 0 et.js Found: 31 Missing: 87 fa.js Found: 24 Missing: 94 fi.js Found: 23 Missing: 95 fr.js Found: 118 Missing: 0 hr.js Found: 23 Missing: 95 it.js Found: 118 Missing: 0 nb.js Found: 118 Missing: 0 nl.js Found: 118 Missing: 0 no.js Found: 118 Missing: 0 tr.js Found: 118 Missing: 0 ug.js Found: 39 Missing: 79 zh-cn.js Found: 118 Missing: 0 rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/ca.js000644 000765 000024 00000010770 12555754775 026256 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","ca",{euro:"Símbol d'euro",lsquo:"Signe de cometa simple esquerra",rsquo:"Signe de cometa simple dreta",ldquo:"Signe de cometa doble esquerra",rdquo:"Signe de cometa doble dreta",ndash:"Guió",mdash:"Guió baix",iexcl:"Signe d'exclamació inversa",cent:"Símbol de percentatge",pound:"Símbol de lliura",curren:"Símbol de moneda",yen:"Símbol de Yen",brvbar:"Broken bar",sect:"Section sign",uml:"Dièresi",copy:"Símbol de Copyright",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", not:"Not sign",reg:"Símbol registrat",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/cs.js000644 000765 000024 00000011551 12555754775 026276 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","cs",{euro:"Znak eura",lsquo:"PoÄáteÄní uvozovka jednoduchá",rsquo:"Koncová uvozovka jednoduchá",ldquo:"PoÄáteÄní uvozovka dvojitá",rdquo:"Koncová uvozovka dvojitá",ndash:"En pomlÄka",mdash:"Em pomlÄka",iexcl:"Obrácený vykÅ™iÄník",cent:"Znak centu",pound:"Znak libry",curren:"Znak mÄ›ny",yen:"Znak jenu",brvbar:"PÅ™eruÅ¡ená svislá Äára",sect:"Znak oddílu",uml:"PÅ™ehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených uvozovek vlevo", not:"Logistický zápor",reg:"Znak registrace",macr:"PomlÄka nad",deg:"Znak stupnÄ›",sup2:"Dvojka jako horní index",sup3:"Trojka jako horní index",acute:"Čárka nad vpravo",micro:"Znak mikro",para:"Znak odstavce",middot:"TeÄka uprostÅ™ed",cedil:"Ocásek vlevo",sup1:"JedniÄka jako horní index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených uvozovek vpravo",frac14:"ObyÄejný zlomek jedna Ätvrtina",frac12:"ObyÄejný zlomek jedna polovina",frac34:"ObyÄejný zlomek tÅ™i Ätvrtiny",iquest:"Znak obráceného otazníku", Agrave:"Velké písmeno latinky A s Äárkou nad vlevo",Aacute:"Velké písmeno latinky A s Äárkou nad vpravo",Acirc:"Velké písmeno latinky A s vokánÄ›m",Atilde:"Velké písmeno latinky A s tildou",Auml:"Velké písmeno latinky A s dvÄ›ma teÄkami",Aring:"Velké písmeno latinky A s kroužkem nad",AElig:"Velké písmeno latinky Ae",Ccedil:"Velké písmeno latinky C s ocáskem vlevo",Egrave:"Velké písmeno latinky E s Äárkou nad vlevo",Eacute:"Velké písmeno latinky E s Äárkou nad vpravo",Ecirc:"Velké písmeno latinky E s vokánÄ›m", Euml:"Velké písmeno latinky E s dvÄ›ma teÄkami",Igrave:"Velké písmeno latinky I s Äárkou nad vlevo",Iacute:"Velké písmeno latinky I s Äárkou nad vpravo",Icirc:"Velké písmeno latinky I s vokánÄ›m",Iuml:"Velké písmeno latinky I s dvÄ›ma teÄkami",ETH:"Velké písmeno latinky Eth",Ntilde:"Velké písmeno latinky N s tildou",Ograve:"Velké písmeno latinky O s Äárkou nad vlevo",Oacute:"Velké písmeno latinky O s Äárkou nad vpravo",Ocirc:"Velké písmeno latinky O s vokánÄ›m",Otilde:"Velké písmeno latinky O s tildou", Ouml:"Velké písmeno latinky O s dvÄ›ma teÄkami",times:"Znak násobení",Oslash:"Velké písmeno latinky O pÅ™eÅ¡krtnuté",Ugrave:"Velké písmeno latinky U s Äárkou nad vlevo",Uacute:"Velké písmeno latinky U s Äárkou nad vpravo",Ucirc:"Velké písmeno latinky U s vokánÄ›m",Uuml:"Velké písmeno latinky U s dvÄ›ma teÄkami",Yacute:"Velké písmeno latinky Y s Äárkou nad vpravo",THORN:"Velké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s Äárkou nad vlevo",aacute:"Malé písmeno latinky a s Äárkou nad vpravo", acirc:"Malé písmeno latinky a s vokánÄ›m",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvÄ›ma teÄkami",aring:"Malé písmeno latinky a s kroužkem nad",aelig:"Malé písmeno latinky ae",ccedil:"Malé písmeno latinky c s ocáskem vlevo",egrave:"Malé písmeno latinky e s Äárkou nad vlevo",eacute:"Malé písmeno latinky e s Äárkou nad vpravo",ecirc:"Malé písmeno latinky e s vokánÄ›m",euml:"Malé písmeno latinky e s dvÄ›ma teÄkami",igrave:"Malé písmeno latinky i s Äárkou nad vlevo",iacute:"Malé písmeno latinky i s Äárkou nad vpravo", icirc:"Malé písmeno latinky i s vokánÄ›m",iuml:"Malé písmeno latinky i s dvÄ›ma teÄkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s Äárkou nad vlevo",oacute:"Malé písmeno latinky o s Äárkou nad vpravo",ocirc:"Malé písmeno latinky o s vokánÄ›m",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvÄ›ma teÄkami",divide:"Znak dÄ›lení",oslash:"Malé písmeno latinky o pÅ™eÅ¡krtnuté",ugrave:"Malé písmeno latinky u s Äárkou nad vlevo", uacute:"Malé písmeno latinky u s Äárkou nad vpravo",ucirc:"Malé písmeno latinky u s vokánÄ›m",uuml:"Malé písmeno latinky u s dvÄ›ma teÄkami",yacute:"Malé písmeno latinky y s Äárkou nad vpravo",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvÄ›ma teÄkami",OElig:"Velká ligatura latinky OE",oelig:"Malá ligatura latinky OE",372:"Velké písmeno latinky W s vokánÄ›m",374:"Velké písmeno latinky Y s vokánÄ›m",373:"Malé písmeno latinky w s vokánÄ›m",375:"Malé písmeno latinky y s vokánÄ›m",sbquo:"Dolní 9 uvozovka jednoduchá", 8219:"Horní obrácená 9 uvozovka jednoduchá",bdquo:"Dolní 9 uvozovka dvojitá",hellip:"TrojteÄkový úvod",trade:"Obchodní znaÄka",9658:"ÄŒerný ukazatel směřující vpravo",bull:"KoleÄko",rarr:"Å ipka vpravo",rArr:"Dvojitá Å¡ipka vpravo",hArr:"Dvojitá Å¡ipka vlevo a vpravo",diams:"ÄŒerné piky",asymp:"Téměř se rovná"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/cy.js000644 000765 000024 00000011373 12555754775 026306 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","cy",{euro:"Arwydd yr Ewro",lsquo:"Dyfynnod chwith unigol",rsquo:"Dyfynnod dde unigol",ldquo:"Dyfynnod chwith dwbl",rdquo:"Dyfynnod dde dwbl",ndash:"Cysylltnod en",mdash:"Cysylltnod em",iexcl:"Ebychnod gwrthdro",cent:"Arwydd sent",pound:"Arwydd punt",curren:"Arwydd arian cyfred",yen:"Arwydd yen",brvbar:"Bar toriedig",sect:"Arwydd adran",uml:"Didolnod",copy:"Arwydd hawlfraint",ordf:"Dangosydd benywaidd",laquo:"Dyfynnod dwbl ar ongl i'r chwith",not:"Arwydd Nid", reg:"Arwydd cofrestredig",macr:"Macron",deg:"Arwydd gradd",sup2:"Dau uwchsgript",sup3:"Tri uwchsgript",acute:"Acen ddyrchafedig",micro:"Arwydd micro",para:"Arwydd pilcrow",middot:"Dot canol",cedil:"Sedila",sup1:"Un uwchsgript",ordm:"Dangosydd gwrywaidd",raquo:"Dyfynnod dwbl ar ongl i'r dde",frac14:"Ffracsiwn cyffredin un cwarter",frac12:"Ffracsiwn cyffredin un hanner",frac34:"Ffracsiwn cyffredin tri chwarter",iquest:"Marc cwestiwn gwrthdroëdig",Agrave:"Priflythyren A Lladinaidd gydag acen ddisgynedig", Aacute:"Priflythyren A Lladinaidd gydag acen ddyrchafedig",Acirc:"Priflythyren A Lladinaidd gydag acen grom",Atilde:"Priflythyren A Lladinaidd gyda thild",Auml:"Priflythyren A Lladinaidd gyda didolnod",Aring:"Priflythyren A Lladinaidd gyda chylch uwchben",AElig:"Priflythyren Æ Lladinaidd",Ccedil:"Priflythyren C Lladinaidd gyda sedila",Egrave:"Priflythyren E Lladinaidd gydag acen ddisgynedig",Eacute:"Priflythyren E Lladinaidd gydag acen ddyrchafedig",Ecirc:"Priflythyren E Lladinaidd gydag acen grom", Euml:"Priflythyren E Lladinaidd gyda didolnod",Igrave:"Priflythyren I Lladinaidd gydag acen ddisgynedig",Iacute:"Priflythyren I Lladinaidd gydag acen ddyrchafedig",Icirc:"Priflythyren I Lladinaidd gydag acen grom",Iuml:"Priflythyren I Lladinaidd gyda didolnod",ETH:"Priflythyren Eth",Ntilde:"Priflythyren N Lladinaidd gyda thild",Ograve:"Priflythyren O Lladinaidd gydag acen ddisgynedig",Oacute:"Priflythyren O Lladinaidd gydag acen ddyrchafedig",Ocirc:"Priflythyren O Lladinaidd gydag acen grom",Otilde:"Priflythyren O Lladinaidd gyda thild", Ouml:"Priflythyren O Lladinaidd gyda didolnod",times:"Arwydd lluosi",Oslash:"Priflythyren O Lladinaidd gyda strôc",Ugrave:"Priflythyren U Lladinaidd gydag acen ddisgynedig",Uacute:"Priflythyren U Lladinaidd gydag acen ddyrchafedig",Ucirc:"Priflythyren U Lladinaidd gydag acen grom",Uuml:"Priflythyren U Lladinaidd gyda didolnod",Yacute:"Priflythyren Y Lladinaidd gydag acen ddyrchafedig",THORN:"Priflythyren Thorn",szlig:"Llythyren s fach Lladinaidd siarp ",agrave:"Llythyren a fach Lladinaidd gydag acen ddisgynedig", aacute:"Llythyren a fach Lladinaidd gydag acen ddyrchafedig",acirc:"Llythyren a fach Lladinaidd gydag acen grom",atilde:"Llythyren a fach Lladinaidd gyda thild",auml:"Llythyren a fach Lladinaidd gyda didolnod",aring:"Llythyren a fach Lladinaidd gyda chylch uwchben",aelig:"Llythyren æ fach Lladinaidd",ccedil:"Llythyren c fach Lladinaidd gyda sedila",egrave:"Llythyren e fach Lladinaidd gydag acen ddisgynedig",eacute:"Llythyren e fach Lladinaidd gydag acen ddyrchafedig",ecirc:"Llythyren e fach Lladinaidd gydag acen grom", euml:"Llythyren e fach Lladinaidd gyda didolnod",igrave:"Llythyren i fach Lladinaidd gydag acen ddisgynedig",iacute:"Llythyren i fach Lladinaidd gydag acen ddyrchafedig",icirc:"Llythyren i fach Lladinaidd gydag acen grom",iuml:"Llythyren i fach Lladinaidd gyda didolnod",eth:"Llythyren eth fach",ntilde:"Llythyren n fach Lladinaidd gyda thild",ograve:"Llythyren o fach Lladinaidd gydag acen ddisgynedig",oacute:"Llythyren o fach Lladinaidd gydag acen ddyrchafedig",ocirc:"Llythyren o fach Lladinaidd gydag acen grom", otilde:"Llythyren o fach Lladinaidd gyda thild",ouml:"Llythyren o fach Lladinaidd gyda didolnod",divide:"Arwydd rhannu",oslash:"Llyth",ugrave:"Llythyren u fach Lladinaidd gydag acen ddisgynedig",uacute:"Llythyren u fach Lladinaidd gydag acen ddyrchafedig",ucirc:"Llythyren u fach Lladinaidd gydag acen grom",uuml:"Llythyren u fach Lladinaidd gyda didolnod",yacute:"Llythyren y fach Lladinaidd gydag acen ddisgynedig",thorn:"Llythyren o fach Lladinaidd gyda strôc",yuml:"Llythyren y fach Lladinaidd gyda didolnod", OElig:"Priflythyren cwlwm OE Lladinaidd ",oelig:"Priflythyren cwlwm oe Lladinaidd ",372:"Priflythyren W gydag acen grom",374:"Priflythyren Y gydag acen grom",373:"Llythyren w fach gydag acen grom",375:"Llythyren y fach gydag acen grom",sbquo:"Dyfynnod sengl 9-isel",8219:"Dyfynnod sengl 9-uchel cildro",bdquo:"Dyfynnod dwbl 9-isel",hellip:"Coll geiriau llorweddol",trade:"Arwydd marc masnachol",9658:"Pwyntydd du i'r dde",bull:"Bwled",rarr:"Saeth i'r dde",rArr:"Saeth ddwbl i'r dde",hArr:"Saeth ddwbl i'r chwith", diams:"Siwt diemwnt du",asymp:"Bron yn hafal iddo"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/de.js000644 000765 000024 00000011157 12555754775 026263 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","de",{euro:"Euro Zeichen",lsquo:"Hochkomma links",rsquo:"Hochkomma rechts",ldquo:"Anführungszeichen links",rdquo:"Anführungszeichen rechts",ndash:"kleiner Strich",mdash:"mittlerer Strich",iexcl:"invertiertes Ausrufezeichen",cent:"Cent",pound:"Pfund",curren:"Währung",yen:"Yen",brvbar:"gestrichelte Linie",sect:"§ Zeichen",uml:"Diäresis",copy:"Copyright",ordf:"Feminine ordinal Anzeige",laquo:"Nach links zeigenden Doppel-Winkel Anführungszeichen",not:"Not-Zeichen", reg:"Registriert",macr:"Längezeichen",deg:"Grad",sup2:"Hoch 2",sup3:"Hoch 3",acute:"Akzentzeichen ",micro:"Micro",para:"Pilcrow-Zeichen",middot:"Mittelpunkt",cedil:"Cedilla",sup1:"Hoch 1",ordm:"Männliche Ordnungszahl Anzeige",raquo:"Nach rechts zeigenden Doppel-Winkel Anführungszeichen",frac14:"ein Viertel",frac12:"Hälfte",frac34:"Dreiviertel",iquest:"Umgekehrtes Fragezeichen",Agrave:"Lateinischer Buchstabe A mit AkzentGrave",Aacute:"Lateinischer Buchstabe A mit Akutakzent",Acirc:"Lateinischer Buchstabe A mit Zirkumflex", Atilde:"Lateinischer Buchstabe A mit Tilde",Auml:"Lateinischer Buchstabe A mit Trema",Aring:"Lateinischer Buchstabe A mit Ring oben",AElig:"Lateinischer Buchstabe Æ",Ccedil:"Lateinischer Buchstabe C mit Cedille",Egrave:"Lateinischer Buchstabe E mit AkzentGrave",Eacute:"Lateinischer Buchstabe E mit Akutakzent",Ecirc:"Lateinischer Buchstabe E mit Zirkumflex",Euml:"Lateinischer Buchstabe E Trema",Igrave:"Lateinischer Buchstabe I mit AkzentGrave",Iacute:"Lateinischer Buchstabe I mit Akutakzent",Icirc:"Lateinischer Buchstabe I mit Zirkumflex", Iuml:"Lateinischer Buchstabe I mit Trema",ETH:"Lateinischer Buchstabe Eth",Ntilde:"Lateinischer Buchstabe N mit Tilde",Ograve:"Lateinischer Buchstabe O mit AkzentGrave",Oacute:"Lateinischer Buchstabe O mit Akutakzent",Ocirc:"Lateinischer Buchstabe O mit Zirkumflex",Otilde:"Lateinischer Buchstabe O mit Tilde",Ouml:"Lateinischer Buchstabe O mit Trema",times:"Multiplikation",Oslash:"Lateinischer Buchstabe O durchgestrichen",Ugrave:"Lateinischer Buchstabe U mit Akzentgrave",Uacute:"Lateinischer Buchstabe U mit Akutakzent", Ucirc:"Lateinischer Buchstabe U mit Zirkumflex",Uuml:"Lateinischer Buchstabe a mit Trema",Yacute:"Lateinischer Buchstabe a mit Akzent",THORN:"Lateinischer Buchstabe mit Dorn",szlig:"Kleiner lateinischer Buchstabe scharfe s",agrave:"Kleiner lateinischer Buchstabe a mit Accent grave",aacute:"Kleiner lateinischer Buchstabe a mit Akut",acirc:"Lateinischer Buchstabe a mit Zirkumflex",atilde:"Lateinischer Buchstabe a mit Tilde",auml:"Kleiner lateinischer Buchstabe a mit Trema",aring:"Kleiner lateinischer Buchstabe a mit Ring oben", aelig:"Lateinischer Buchstabe æ",ccedil:"Kleiner lateinischer Buchstabe c mit Cedille",egrave:"Kleiner lateinischer Buchstabe e mit Accent grave",eacute:"Kleiner lateinischer Buchstabe e mit Akut",ecirc:"Kleiner lateinischer Buchstabe e mit Zirkumflex",euml:"Kleiner lateinischer Buchstabe e mit Trema",igrave:"Kleiner lateinischer Buchstabe i mit AkzentGrave",iacute:"Kleiner lateinischer Buchstabe i mit Akzent",icirc:"Kleiner lateinischer Buchstabe i mit Zirkumflex",iuml:"Kleiner lateinischer Buchstabe i mit Trema", eth:"Kleiner lateinischer Buchstabe eth",ntilde:"Kleiner lateinischer Buchstabe n mit Tilde",ograve:"Kleiner lateinischer Buchstabe o mit Accent grave",oacute:"Kleiner lateinischer Buchstabe o mit Akzent",ocirc:"Kleiner lateinischer Buchstabe o mit Zirkumflex",otilde:"Lateinischer Buchstabe i mit Tilde",ouml:"Kleiner lateinischer Buchstabe o mit Trema",divide:"Divisionszeichen",oslash:"Kleiner lateinischer Buchstabe o durchgestrichen",ugrave:"Kleiner lateinischer Buchstabe u mit Accent grave",uacute:"Kleiner lateinischer Buchstabe u mit Akut", ucirc:"Kleiner lateinischer Buchstabe u mit Zirkumflex",uuml:"Kleiner lateinischer Buchstabe u mit Trema",yacute:"Kleiner lateinischer Buchstabe y mit Akut",thorn:"Kleiner lateinischer Buchstabe Dorn",yuml:"Kleiner lateinischer Buchstabe y mit Trema",OElig:"Lateinischer Buchstabe Ligatur OE",oelig:"Kleiner lateinischer Buchstabe Ligatur OE",372:"Lateinischer Buchstabe W mit Zirkumflex",374:"Lateinischer Buchstabe Y mit Zirkumflex",373:"Kleiner lateinischer Buchstabe w mit Zirkumflex",375:"Kleiner lateinischer Buchstabe y mit Zirkumflex", sbquo:"Tiefergestelltes Komma",8219:"Rumgedrehtes Komma",bdquo:"Doppeltes Anführungszeichen unten",hellip:"horizontale Auslassungspunkte",trade:"Handelszeichen",9658:"Dreickspfeil rechts",bull:"Bullet",rarr:"Pfeil rechts",rArr:"Doppelpfeil rechts",hArr:"Doppelpfeil links",diams:"Karo",asymp:"Ungefähr"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/el.js000644 000765 000024 00000011513 12555754775 026267 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","el",{euro:"ΣÏμβολο ΕυÏÏŽ",lsquo:"ΑÏιστεÏός χαÏακτήÏας Î¼Î¿Î½Î¿Ï ÎµÎ¹ÏƒÎ±Î³Ï‰Î³Î¹ÎºÎ¿Ï",rsquo:"Δεξιός χαÏακτήÏας Î¼Î¿Î½Î¿Ï ÎµÎ¹ÏƒÎ±Î³Ï‰Î³Î¹ÎºÎ¿Ï",ldquo:"ΑÏιστεÏός χαÏακτήÏας Î´Î¹Ï€Î»Î¿Ï ÎµÎ¹ÏƒÎ±Î³Ï‰Î³Î¹ÎºÎ¿Ï",rdquo:"Δεξιός χαÏακτήÏας Î´Î¹Ï€Î»Î¿Ï ÎµÎ¹ÏƒÎ±Î³Ï‰Î³Î¹ÎºÎ¿Ï",ndash:"ΠαÏλα en",mdash:"ΠαÏλα em",iexcl:"Ανάποδο θαυμαστικό",cent:"ΣÏμβολο Σεντ",pound:"ΣÏμβολο λίÏας",curren:"ΣÏμβολο συναλλαγματικής μονάδας",yen:"ΣÏμβολο Γιέν",brvbar:"Σπασμένη μπάÏα",sect:"ΣÏμβολο τμήματος",uml:"ΔιαίÏεση",copy:"ΣÏμβολο πνευματικών δικαιωμάτων", ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters", iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex", Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde", Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent", acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent", icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent", ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark", bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/en.js000644 000765 000024 00000010701 12555754775 026267 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","en",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/eo.js000644 000765 000024 00000007742 12555754775 026303 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","eo",{euro:"EÅ­rosigno",lsquo:"Supra 6-citilo",rsquo:"Supra 9-citilo",ldquo:"Supra 66-citilo",rdquo:"Supra 99-citilo",ndash:"Streketo",mdash:"Substreko",iexcl:"Renversita krisigno",cent:"Cendosigno",pound:"Pundosigno",curren:"Monersigno",yen:"Enosigno",brvbar:"Rompita vertikala streko",sect:"Kurba paragrafo",uml:"Tremao",copy:"Kopirajtosigno",ordf:"Adjektiva numerfinaĵo",laquo:"Duobla malplio-citilo",not:"Negohoko",reg:"Registrita marko",macr:"Superstreko",deg:"Gradosigno", sup2:"Supra indico 2",sup3:"Supra indico 3",acute:"Dekstra korno",micro:"Mikrosigno",para:"Rekta paragrafo",middot:"Meza punkto",cedil:"Zoeto",sup1:"Supra indico 1",ordm:"Substantiva numerfinaĵo",raquo:"Duobla plio-citilo",frac14:"Kvaronosigno",frac12:"Duonosigno",frac34:"Trikvaronosigno",iquest:"renversita demandosigno",Agrave:"Latina ĉeflitero A kun liva korno",Aacute:"Latina ĉeflitero A kun dekstra korno",Acirc:"Latina ĉeflitero A kun ĉapelo",Atilde:"Latina ĉeflitero A kun tildo",Auml:"Latina ĉeflitero A kun tremao", Aring:"Latina ĉeflitero A kun superringo",AElig:"Latina ĉeflitera ligaturo Æ",Ccedil:"Latina ĉeflitero C kun zoeto",Egrave:"Latina ĉeflitero E kun liva korno",Eacute:"Latina ĉeflitero E kun dekstra korno",Ecirc:"Latina ĉeflitero E kun ĉapelo",Euml:"Latina ĉeflitero E kun tremao",Igrave:"Latina ĉeflitero I kun liva korno",Iacute:"Latina ĉeflitero I kun dekstra korno",Icirc:"Latina ĉeflitero I kun ĉapelo",Iuml:"Latina ĉeflitero I kun tremao",ETH:"Latina ĉeflitero islanda edo",Ntilde:"Latina ĉeflitero N kun tildo", Ograve:"Latina ĉeflitero O kun liva korno",Oacute:"Latina ĉeflitero O kun dekstra korno",Ocirc:"Latina ĉeflitero O kun ĉapelo",Otilde:"Latina ĉeflitero O kun tildo",Ouml:"Latina ĉeflitero O kun tremao",times:"Multipliko",Oslash:"Latina ĉeflitero O trastrekita",Ugrave:"Latina ĉeflitero U kun liva korno",Uacute:"Latina ĉeflitero U kun dekstra korno",Ucirc:"Latina ĉeflitero U kun ĉapelo",Uuml:"Latina ĉeflitero U kun tremao",Yacute:"Latina ĉeflitero Y kun dekstra korno",THORN:"Latina ĉeflitero islanda dorno", szlig:"Latina etlitero germana sozo (akra s)",agrave:"Latina etlitero a kun liva korno",aacute:"Latina etlitero a kun dekstra korno",acirc:"Latina etlitero a kun ĉapelo",atilde:"Latina etlitero a kun tildo",auml:"Latina etlitero a kun tremao",aring:"Latina etlitero a kun superringo",aelig:"Latina etlitera ligaturo æ",ccedil:"Latina etlitero c kun zoeto",egrave:"Latina etlitero e kun liva korno",eacute:"Latina etlitero e kun dekstra korno",ecirc:"Latina etlitero e kun ĉapelo",euml:"Latina etlitero e kun tremao", igrave:"Latina etlitero i kun liva korno",iacute:"Latina etlitero i kun dekstra korno",icirc:"Latina etlitero i kun ĉapelo",iuml:"Latina etlitero i kun tremao",eth:"Latina etlitero islanda edo",ntilde:"Latina etlitero n kun tildo",ograve:"Latina etlitero o kun liva korno",oacute:"Latina etlitero o kun dekstra korno",ocirc:"Latina etlitero o kun ĉapelo",otilde:"Latina etlitero o kun tildo",ouml:"Latina etlitero o kun tremao",divide:"Dividosigno",oslash:"Latina etlitero o trastrekita",ugrave:"Latina etlitero u kun liva korno", uacute:"Latina etlitero u kun dekstra korno",ucirc:"Latina etlitero u kun ĉapelo",uuml:"Latina etlitero u kun tremao",yacute:"Latina etlitero y kun dekstra korno",thorn:"Latina etlitero islanda dorno",yuml:"Latina etlitero y kun tremao",OElig:"Latina ĉeflitera ligaturo Å’",oelig:"Latina etlitera ligaturo Å“",372:"Latina ĉeflitero W kun ĉapelo",374:"Latina ĉeflitero Y kun ĉapelo",373:"Latina etlitero w kun ĉapelo",375:"Latina etlitero y kun ĉapelo",sbquo:"Suba 9-citilo",8219:"Supra renversita 9-citilo", bdquo:"Suba 99-citilo",hellip:"Tripunkto",trade:"Varmarka signo",9658:"Nigra sago dekstren",bull:"Bulmarko",rarr:"Sago dekstren",rArr:"Duobla sago dekstren",hArr:"Duobla sago maldekstren",diams:"Nigra kvadrato",asymp:"PreskaÅ­ egala"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/et.js000644 000765 000024 00000010624 12555754775 026301 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","et",{euro:"Euromärk",lsquo:"Alustav ühekordne jutumärk",rsquo:"Lõpetav ühekordne jutumärk",ldquo:"Alustav kahekordne jutumärk",rdquo:"Lõpetav kahekordne jutumärk",ndash:"Enn-kriips",mdash:"Emm-kriips",iexcl:"Pööratud hüüumärk",cent:"Sendimärk",pound:"Naela märk",curren:"Valuutamärk",yen:"Jeeni märk",brvbar:"Katkestatud kriips",sect:"Lõigu märk",uml:"Täpid",copy:"Autoriõiguse märk",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", not:"Ei-märk",reg:"Registered sign",macr:"Macron",deg:"Kraadimärk",sup2:"Ülaindeks kaks",sup3:"Ülaindeks kolm",acute:"Acute accent",micro:"Mikro-märk",para:"Pilcrow sign",middot:"Keskpunkt",cedil:"Cedilla",sup1:"Ülaindeks üks",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Ladina suur A tildega",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Täppidega ladina suur O",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Kandilise katusega suur ladina U",Uuml:"Täppidega ladina suur U",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Ladina väike terav s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Kandilise katusega ladina väike a",atilde:"Tildega ladina väike a",auml:"Täppidega ladina väike a",aring:"Latin small letter a with ring above", aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/fa.js000644 000765 000024 00000011364 12555754775 026261 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","fa",{euro:"نشان یورو",lsquo:"علامت نقل قول تکی Ú†Ù¾",rsquo:"علامت نقل قول تکی راست",ldquo:"علامت دوتایی نقل قول Ú†Ù¾",rdquo:"علامت دوتایی نقل قول راست",ndash:"خط تیره En",mdash:"خط تیره Em",iexcl:"علامت گذاری به عنوان علامت تعجب وارونه",cent:"نشان سنت",pound:"نشان پوند",curren:"نشان ارز",yen:"نشان ین",brvbar:"نوار شکسته",sect:"نشان بخش",uml:"Diaeresis",copy:"نشان Ú©Ù¾ÛŒ رایت",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",not:"علامت ثبت نشده", reg:"علامت ثبت شده",macr:"Macron",deg:"نشان درجه",sup2:"بالانویس دو",sup3:"بالانویس سه",acute:"لهجه غلیظ",micro:"نشان مایکرو",para:"Pilcrow sign",middot:"نقطه میانی",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"نشان زاویه‌دار دوتایی نقل قول راست چین",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"جهت‌نمای دوتایی Ú†Ù¾ به راست",diams:"Black diamond suit",asymp:"تقریبا برابر با"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/fi.js000644 000765 000024 00000010747 12555754775 026275 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","fi",{euro:"Euron merkki",lsquo:"Vasen yksittäinen lainausmerkki",rsquo:"Oikea yksittäinen lainausmerkki",ldquo:"Vasen kaksoislainausmerkki",rdquo:"Oikea kaksoislainausmerkki",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Sentin merkki",pound:"Punnan merkki",curren:"Valuuttamerkki",yen:"Yenin merkki",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", not:"Not sign",reg:"Rekisteröity merkki",macr:"Macron",deg:"Asteen merkki",sup2:"Yläindeksi kaksi",sup3:"Yläindeksi kolme",acute:"Acute accent",micro:"Mikron merkki",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Yläindeksi yksi",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Ylösalaisin oleva kysymysmerkki",Agrave:"Latin capital letter A with grave accent", Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Kertomerkki",Oslash:"Latin capital letter O with stroke", Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jakomerkki",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", trade:"Tavaramerkki merkki",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Nuoli oikealle",rArr:"Kaksoisnuoli oikealle",hArr:"Kaksoisnuoli oikealle ja vasemmalle",diams:"Black diamond suit",asymp:"Noin"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/fr.js000644 000765 000024 00000007406 12555754775 026304 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","fr",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret bas underscore",iexcl:"Point d'exclamation inversé",cent:"Symbole Cent",pound:"Symbole Livre Sterling",curren:"Symbole monétaire",yen:"Symbole Yen",brvbar:"Barre verticale scindée",sect:"Section",uml:"Tréma",copy:"Symbole Copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", not:"Crochet de négation",reg:"Marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"\\tExposant 3",acute:"Accent aigu",micro:"Omicron",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"\\tExposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Un demi",frac34:"Trois quarts",iquest:"Point d'interrogation inversé",Agrave:"A majuscule accent grave",Aacute:"A majuscule accent aigu",Acirc:"A majuscule accent circonflexe",Atilde:"A majuscule avec caron", Auml:"A majuscule tréma",Aring:"A majuscule avec un rond au-dessus",AElig:"Æ majuscule ligaturés",Ccedil:"C majuscule cédille",Egrave:"E majuscule accent grave",Eacute:"E majuscule accent aigu",Ecirc:"E majuscule accent circonflexe",Euml:"E majuscule tréma",Igrave:"I majuscule accent grave",Iacute:"I majuscule accent aigu",Icirc:"I majuscule accent circonflexe",Iuml:"I majuscule tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N majuscule avec caron",Ograve:"O majuscule accent grave",Oacute:"O majuscule accent aigu", Ocirc:"O majuscule accent circonflexe",Otilde:"O majuscule avec caron",Ouml:"O majuscule tréma",times:"Multiplication",Oslash:"O majuscule barré",Ugrave:"U majuscule accent grave",Uacute:"U majuscule accent aigu",Ucirc:"U majuscule accent circonflexe",Uuml:"U majuscule tréma",Yacute:"Y majuscule accent aigu",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a minuscule accent grave",aacute:"a minuscule accent aigu",acirc:"a minuscule accent circonflexe",atilde:"a minuscule avec caron", auml:"a minuscule tréma",aring:"a minuscule avec un rond au-dessus",aelig:"æ minuscule ligaturés",ccedil:"c minuscule cédille",egrave:"e minuscule accent grave",eacute:"e minuscule accent aigu",ecirc:"e minuscule accent circonflexe",euml:"e minuscule tréma",igrave:"i minuscule accent grave",iacute:"i minuscule accent aigu",icirc:"i minuscule accent circonflexe",iuml:"i minuscule tréma",eth:"Lettre minuscule islandaise ED",ntilde:"n minuscule avec caron",ograve:"o minuscule accent grave",oacute:"o minuscule accent aigu", ocirc:"o minuscule accent circonflexe",otilde:"o minuscule avec caron",ouml:"o minuscule tréma",divide:"Division",oslash:"o minuscule barré",ugrave:"u minuscule accent grave",uacute:"u minuscule accent aigu",ucirc:"u minuscule accent circonflexe",uuml:"u minuscule tréma",yacute:"y minuscule accent aigu",thorn:"Lettre islandaise thorn minuscule",yuml:"y minuscule tréma",OElig:"ligature majuscule latine Å’",oelig:"ligature minuscule latine Å“",372:"W majuscule accent circonflexe",374:"Y majuscule accent circonflexe", 373:"w minuscule accent circonflexe",375:"y minuscule accent circonflexe",sbquo:"Guillemet simple fermant (anglais)",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Marque commerciale (trade mark)",9658:"Flèche noire pointant vers la droite",bull:"Gros point médian",rarr:"Flèche vers la droite",rArr:"Double flèche vers la droite",hArr:"Double flèche vers la gauche",diams:"Carreau noir",asymp:"Presque égal"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/he.js000644 000765 000024 00000010700 12555754775 026260 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","he",{euro:"יורו",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/hr.js000644 000765 000024 00000010643 12555754775 026303 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","hr",{euro:"Euro znak",lsquo:"Lijevi jednostruki navodnik",rsquo:"Desni jednostruki navodnik",ldquo:"Lijevi dvostruki navodnik",rdquo:"Desni dvostruki navodnik",ndash:"En crtica",mdash:"Em crtica",iexcl:"Naopaki uskliÄnik",cent:"Cent znak",pound:"Funta znak",curren:"Znak valute",yen:"Yen znak",brvbar:"Potrgana preÄka",sect:"Znak odjeljka",uml:"Diaeresis",copy:"Copyright znak",ordf:"Feminine ordinal indicator",laquo:"Lijevi dvostruki uglati navodnik",not:"Not znak", reg:"Registered znak",macr:"Macron",deg:"Stupanj znak",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Srednja toÄka",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Desni dvostruku uglati navodnik",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Naopaki upitnik",Agrave:"Veliko latinsko slovo A s akcentom",Aacute:"Latin capital letter A with acute accent", Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/it.js000644 000765 000024 00000011632 12555754775 026305 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","it",{euro:"Simbolo Euro",lsquo:"Virgoletta singola sinistra",rsquo:"Virgoletta singola destra",ldquo:"Virgolette aperte",rdquo:"Virgolette chiuse",ndash:"Trattino",mdash:"Trattino lungo",iexcl:"Punto esclavamativo invertito",cent:"Simbolo Cent",pound:"Simbolo Sterlina",curren:"Simbolo Moneta",yen:"Simbolo Yen",brvbar:"Barra interrotta",sect:"Simbolo di sezione",uml:"Dieresi",copy:"Simbolo Copyright",ordf:"Indicatore ordinale femminile",laquo:"Virgolette basse aperte", not:"Nessun segno",reg:"Simbolo Registrato",macr:"Macron",deg:"Simbolo Grado",sup2:"Apice Due",sup3:"Apice Tre",acute:"Accento acuto",micro:"Simbolo Micro",para:"Simbolo Paragrafo",middot:"Punto centrale",cedil:"Cediglia",sup1:"Apice Uno",ordm:"Indicatore ordinale maschile",raquo:"Virgolette basse chiuse",frac14:"Frazione volgare un quarto",frac12:"Frazione volgare un mezzo",frac34:"Frazione volgare tre quarti",iquest:"Punto interrogativo invertito",Agrave:"Lettera maiuscola latina A con accento grave", Aacute:"Lettera maiuscola latina A con accento acuto",Acirc:"Lettera maiuscola latina A con accento circonflesso",Atilde:"Lettera maiuscola latina A con tilde",Auml:"Lettera maiuscola latina A con dieresi",Aring:"Lettera maiuscola latina A con anello sopra",AElig:"Lettera maiuscola latina AE",Ccedil:"Lettera maiuscola latina C con cediglia",Egrave:"Lettera maiuscola latina E con accento grave",Eacute:"Lettera maiuscola latina E con accento acuto",Ecirc:"Lettera maiuscola latina E con accento circonflesso", Euml:"Lettera maiuscola latina E con dieresi",Igrave:"Lettera maiuscola latina I con accento grave",Iacute:"Lettera maiuscola latina I con accento acuto",Icirc:"Lettera maiuscola latina I con accento circonflesso",Iuml:"Lettera maiuscola latina I con dieresi",ETH:"Lettera maiuscola latina Eth",Ntilde:"Lettera maiuscola latina N con tilde",Ograve:"Lettera maiuscola latina O con accento grave",Oacute:"Lettera maiuscola latina O con accento acuto",Ocirc:"Lettera maiuscola latina O con accento circonflesso", Otilde:"Lettera maiuscola latina O con tilde",Ouml:"Lettera maiuscola latina O con dieresi",times:"Simbolo di moltiplicazione",Oslash:"Lettera maiuscola latina O barrata",Ugrave:"Lettera maiuscola latina U con accento grave",Uacute:"Lettera maiuscola latina U con accento acuto",Ucirc:"Lettera maiuscola latina U con accento circonflesso",Uuml:"Lettera maiuscola latina U con accento circonflesso",Yacute:"Lettera maiuscola latina Y con accento acuto",THORN:"Lettera maiuscola latina Thorn",szlig:"Lettera latina minuscola doppia S", agrave:"Lettera minuscola latina a con accento grave",aacute:"Lettera minuscola latina a con accento acuto",acirc:"Lettera minuscola latina a con accento circonflesso",atilde:"Lettera minuscola latina a con tilde",auml:"Lettera minuscola latina a con dieresi",aring:"Lettera minuscola latina a con anello superiore",aelig:"Lettera minuscola latina ae",ccedil:"Lettera minuscola latina c con cediglia",egrave:"Lettera minuscola latina e con accento grave",eacute:"Lettera minuscola latina e con accento acuto", ecirc:"Lettera minuscola latina e con accento circonflesso",euml:"Lettera minuscola latina e con dieresi",igrave:"Lettera minuscola latina i con accento grave",iacute:"Lettera minuscola latina i con accento acuto",icirc:"Lettera minuscola latina i con accento circonflesso",iuml:"Lettera minuscola latina i con dieresi",eth:"Lettera minuscola latina eth",ntilde:"Lettera minuscola latina n con tilde",ograve:"Lettera minuscola latina o con accento grave",oacute:"Lettera minuscola latina o con accento acuto", ocirc:"Lettera minuscola latina o con accento circonflesso",otilde:"Lettera minuscola latina o con tilde",ouml:"Lettera minuscola latina o con dieresi",divide:"Simbolo di divisione",oslash:"Lettera minuscola latina o barrata",ugrave:"Lettera minuscola latina u con accento grave",uacute:"Lettera minuscola latina u con accento acuto",ucirc:"Lettera minuscola latina u con accento circonflesso",uuml:"Lettera minuscola latina u con dieresi",yacute:"Lettera minuscola latina y con accento acuto",thorn:"Lettera minuscola latina thorn", yuml:"Lettera minuscola latina y con dieresi",OElig:"Legatura maiuscola latina OE",oelig:"Legatura minuscola latina oe",372:"Lettera maiuscola latina W con accento circonflesso",374:"Lettera maiuscola latina Y con accento circonflesso",373:"Lettera minuscola latina w con accento circonflesso",375:"Lettera minuscola latina y con accento circonflesso",sbquo:"Singola virgoletta bassa low-9",8219:"Singola virgoletta bassa low-9 inversa",bdquo:"Doppia virgoletta bassa low-9",hellip:"Ellissi orizzontale", trade:"Simbolo TM",9658:"Puntatore nero rivolto verso destra",bull:"Punto",rarr:"Freccia verso destra",rArr:"Doppia freccia verso destra",hArr:"Doppia freccia sinistra destra",diams:"Simbolo nero diamante",asymp:"Quasi uguale a"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/ku.js000644 000765 000024 00000021055 12555754775 026310 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","ku",{euro:"نیشانه‌ی یۆرۆ",lsquo:"نیشانه‌ی ÙØ§Ø±ÛŒØ²Ù‡â€ŒÛŒ سه‌رووژێری تاکی چه‌پ",rsquo:"نیشانه‌ی ÙØ§Ø±ÛŒØ²Ù‡â€ŒÛŒ سه‌رووژێری تاکی ڕاست",ldquo:"نیشانه‌ی ÙØ§Ø±ÛŒØ²Ù‡â€ŒÛŒ سه‌رووژێری دووهێنده‌ی چه‌پ",rdquo:"نیشانه‌ی ÙØ§Ø±ÛŒØ²Ù‡â€ŒÛŒ سه‌رووژێری دووهێنده‌ی ڕاست",ndash:"ته‌قه‌ڵی کورت",mdash:"ته‌قه‌ڵی درێژ",iexcl:"نیشانه‌ی هه‌ڵه‌وگێڕی سه‌رسوڕمێنه‌ر",cent:"نیشانه‌ی سه‌نت",pound:"نیشانه‌ی پاوه‌ند",curren:"نیشانه‌ی دراو",yen:"نیشانه‌ی یه‌نی ژاپۆنی",brvbar:"شریتی ئه‌ستوونی پچڕاو",sect:"نیشانه‌ی دوو s له‌سه‌ریه‌ك", uml:"خاڵ",copy:"نیشانه‌ی ماÙÛŒ چاپ",ordf:"Ù‡ÛŽÚµ له‌سه‌ر پیتی a",laquo:"دوو تیری به‌دووایه‌کی چه‌پ",not:"نیشانه‌ی نه‌خێر",reg:"نیشانه‌ی R له‌ناو بازنه‌دا",macr:"ماکڕوون",deg:"نیشانه‌ی پله",sup2:"سه‌رنووسی دوو",sup3:"سه‌رنووسی سێ",acute:"لاری تیژ",micro:"نیشانه‌ی u لق درێژی چه‌پی خواروو",para:"نیشانه‌یپه‌ڕه‌گراÙ",middot:"ناوه‌ڕاستی خاڵ",cedil:"نیشانه‌ی c ژێر چووکره‌",sup1:"سه‌رنووسی یه‌ك",ordm:"Ù‡ÛŽÚµ له‌ژێر پیتی o",raquo:"دوو تیری به‌دووایه‌کی ڕاست",frac14:"یه‌ك له‌سه‌ر چووار",frac12:"یه‌ك له‌سه‌ر دوو", frac34:"سێ له‌سه‌ر چووار",iquest:"هێمای هه‌ڵه‌وگێری پرسیار",Agrave:"پیتی لاتینی A-ÛŒ گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری لار",Aacute:"پیتی لاتینی A-ÛŒ گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری تیژ",Acirc:"پیتی لاتینی A-ÛŒ گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",Atilde:"پیتی لاتینی A-ÛŒ گه‌وره‌ له‌گه‌ڵ زه‌ڕه‌",Auml:"پیتی لاتینی A-ÛŒ گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",Aring:"پیتی لاتینی گه‌وره‌ی Ã…",AElig:"پیتی لاتینی گه‌وره‌ی Æ",Ccedil:"پیتی لاتینی C-ÛŒ گه‌وره‌ له‌گه‌ڵ ژێر چووکره‌",Egrave:"پیتی لاتینی E-ÛŒ گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری لار", Eacute:"پیتی لاتینی E-ÛŒ گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری تیژ",Ecirc:"پیتی لاتینی E-ÛŒ گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",Euml:"پیتی لاتینی E-ÛŒ گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",Igrave:"پیتی لاتینی I-ÛŒ گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری لار",Iacute:"پیتی لاتینی I-ÛŒ گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری تیژ",Icirc:"پیتی لاتینی I-ÛŒ گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",Iuml:"پیتی لاتینی I-ÛŒ گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",ETH:"پیتی لاتینی E-ÛŒ گه‌وره‌ی",Ntilde:"پیتی لاتینی N-ÛŒ گه‌وره‌ له‌گه‌ڵ زه‌ڕه‌",Ograve:"پیتی لاتینی O-ÛŒ گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری لار", Oacute:"پیتی لاتینی O-ÛŒ گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری تیژ",Ocirc:"پیتی لاتینی O-ÛŒ گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",Otilde:"پیتی لاتینی O-ÛŒ گه‌وره‌ له‌گه‌ڵ زه‌ڕه‌",Ouml:"پیتی لاتینی O-ÛŒ گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",times:"نیشانه‌ی لێکدان",Oslash:"پیتی لاتینی گه‌وره‌ی Ø له‌گه‌ڵ هێمای دڵ وه‌ستان",Ugrave:"پیتی لاتینی U-ÛŒ گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری لار",Uacute:"پیتی لاتینی U-ÛŒ گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری تیژ",Ucirc:"پیتی لاتینی U-ÛŒ گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",Uuml:"پیتی لاتینی U-ÛŒ گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری", Yacute:"پیتی لاتینی Y-ÛŒ گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری تیژ",THORN:"پیتی لاتینی دڕکی گه‌وره",szlig:"پیتی لاتنی نووك تیژی s",agrave:"پیتی لاتینی a-ÛŒ بچووك له‌گه‌ڵ ڕوومه‌تداری لار",aacute:"پیتی لاتینی a-ÛŒ بچووك له‌گه‌ڵ ڕوومه‌تداری تیژ",acirc:"پیتی لاتینی a-ÛŒ بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",atilde:"پیتی لاتینی a-ÛŒ بچووك له‌گه‌ڵ زه‌ڕه‌",auml:"پیتی لاتینی a-ÛŒ بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",aring:"پیتی لاتینی Ã¥-ÛŒ بچووك",aelig:"پیتی لاتینی æ-ÛŒ بچووك",ccedil:"پیتی لاتینی c-ÛŒ بچووك له‌گه‌ڵ ژێر چووکره‌",egrave:"پیتی لاتینی e-ÛŒ بچووك له‌گه‌ڵ ڕوومه‌تداری لار", eacute:"پیتی لاتینی e-ÛŒ بچووك له‌گه‌ڵ ڕوومه‌تداری تیژ",ecirc:"پیتی لاتینی e-ÛŒ بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",euml:"پیتی لاتینی e-ÛŒ بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",igrave:"پیتی لاتینی i-ÛŒ بچووك له‌گه‌ڵ ڕوومه‌تداری لار",iacute:"پیتی لاتینی i-ÛŒ بچووك له‌گه‌ڵ ڕوومه‌تداری تیژ",icirc:"پیتی لاتینی i-ÛŒ بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",iuml:"پیتی لاتینی i-ÛŒ بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",eth:"پیتی لاتینی e-ÛŒ بچووك",ntilde:"پیتی لاتینی n-ÛŒ بچووك له‌گه‌ڵ زه‌ڕه‌",ograve:"پیتی لاتینی o-ÛŒ بچووك له‌گه‌ڵ ڕوومه‌تداری لار", oacute:"پیتی لاتینی o-ÛŒ بچووك له‌گه‌ڵ ڕوومه‌تداری تیژ",ocirc:"پیتی لاتینی o-ÛŒ بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",otilde:"پیتی لاتینی o-ÛŒ بچووك له‌گه‌ڵ زه‌ڕه‌",ouml:"پیتی لاتینی o-ÛŒ بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",divide:"نیشانه‌ی دابه‌ش",oslash:"پیتی لاتینی گه‌وره‌ی ø له‌گه‌ڵ هێمای دڵ وه‌ستان",ugrave:"پیتی لاتینی u-ÛŒ بچووك له‌گه‌ڵ ڕوومه‌تداری لار",uacute:"پیتی لاتینی u-ÛŒ بچووك له‌گه‌ڵ ڕوومه‌تداری تیژ",ucirc:"پیتی لاتینی u-ÛŒ بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",uuml:"پیتی لاتینی u-ÛŒ بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری", yacute:"پیتی لاتینی y-ÛŒ بچووك له‌گه‌ڵ ڕوومه‌تداری تیژ",thorn:"پیتی لاتینی دڕکی بچووك",yuml:"پیتی لاتینی y-ÛŒ بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",OElig:"پیتی لاتینی گه‌وره‌ی پێکه‌وه‌نووسراوی OE",oelig:"پیتی لاتینی بچووکی پێکه‌وه‌نووسراوی oe",372:"پیتی لاتینی W-ÛŒ گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",374:"پیتی لاتینی Y-ÛŒ گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",373:"پیتی لاتینی w-ÛŒ بچووکی له‌گه‌ڵ نیشانه‌ له‌سه‌ری",375:"پیتی لاتینی y-ÛŒ بچووکی له‌گه‌ڵ نیشانه‌ له‌سه‌ری",sbquo:"نیشانه‌ی ÙØ§Ø±ÛŒØ²Ù‡â€ŒÛŒ نزم",8219:"نیشانه‌ی ÙØ§Ø±ÛŒØ²Ù‡â€ŒÛŒ به‌رزی پێچه‌وانه", bdquo:"دوو ÙØ§Ø±ÛŒØ²Ù‡â€ŒÛŒ ته‌نیش یه‌ك",hellip:"ئاسۆیی بازنه",trade:"نیشانه‌ی بازرگانی",9658:"ئاراسته‌ی ڕه‌شی ده‌ستی ڕاست",bull:"Ùیشه‌ك",rarr:"تیری ده‌ستی ڕاست",rArr:"دووتیری ده‌ستی ڕاست",hArr:"دوو تیری ڕاست Ùˆ چه‌پ",diams:"ڕه‌شی پاقڵاوه‌یی",asymp:"نیشانه‌ی یه‌کسانه"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/lv.js000644 000765 000024 00000011634 12555754775 026314 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","lv",{euro:"Euro zÄ«me",lsquo:"KreisÄ vienkÄrtÄ«ga pÄ“diņa",rsquo:"LabÄ vienkÄrtÄ«ga pÄ“diņa",ldquo:"KreisÄ dubult pÄ“diņa",rdquo:"LabÄ dubult pÄ“diņa",ndash:"En svÄ«tra",mdash:"Em svÄ«tra",iexcl:"Apgriezta izsaukuma zÄ«me",cent:"Centu naudas zÄ«me",pound:"Sterliņu mÄrciņu naudas zÄ«me",curren:"ValÅ«tas zÄ«me",yen:"Jenu naudas zÄ«me",brvbar:"VertikÄla pÄrrauta lÄ«nija",sect:"ParagrÄfa zÄ«me",uml:"Diakritiska zÄ«me",copy:"AutortiesÄ«bu zÄ«me",ordf:"Sievišķas kÄrtas rÄdÄ«tÄjs", laquo:"KreisÄ dubult stÅ«ra pÄ“diņu zÄ«me",not:"NeparakstÄ«ts",reg:"ReÄ£istrÄ“ta zÄ«me",macr:"GarumzÄ«me",deg:"GrÄdu zÄ«me",sup2:"AugÅ¡raksts divi",sup3:"AugÅ¡raksts trÄ«s",acute:"AkÅ«ta uzsvara zÄ«me",micro:"Mikro zÄ«me",para:"Rindkopas zÄ«me ",middot:"VidÄ“js punkts",cedil:"Āķītis zem burta",sup1:"AugÅ¡raksts viens",ordm:"VÄ«rišķīgas kÄrtas rÄdÄ«tÄjs",raquo:"LabÄ dubult stÅ«ra pÄ“diņu zÄ«me",frac14:"VulgÄra frakcija 1/4",frac12:"VulgÄra frakcija 1/2",frac34:"VulgÄra frakcija 3/4",iquest:"Apgriezta jautÄjuma zÄ«me",Agrave:"Lielais latīņu burts A ar uzsvara zÄ«mi", Aacute:"Lielais latīņu burts A ar akÅ«tu uzsvara zÄ«mi",Acirc:"Lielais latīņu burts A ar diakritisku zÄ«mi",Atilde:"Lielais latīņu burts A ar tildi ",Auml:"Lielais latīņu burts A ar diakritisko zÄ«mi",Aring:"Lielais latīņu burts A ar aplÄ«ti augÅ¡Ä",AElig:"Lielais latīņu burts Æ",Ccedil:"Lielais latīņu burts C ar ÄÄ·Ä«ti zem burta",Egrave:"Lielais latīņu burts E ar apostrofu",Eacute:"Lielais latīņu burts E ar akÅ«tu uzsvara zÄ«mi",Ecirc:"Lielais latīņu burts E ar diakritisko zÄ«mi",Euml:"Lielais latīņu burts E ar diakritisko zÄ«mi", Igrave:"Lielais latīņu burts I ar uzsvaras zÄ«mi",Iacute:"Lielais latīņu burts I ar akÅ«tu uzsvara zÄ«mi",Icirc:"Lielais latīņu burts I ar diakritisko zÄ«mi",Iuml:"Lielais latīņu burts I ar diakritisko zÄ«mi",ETH:"Lielais latīņu burts Eth",Ntilde:"Lielais latīņu burts N ar tildi",Ograve:"Lielais latīņu burts O ar uzsvara zÄ«mi",Oacute:"Lielais latīņu burts O ar akÅ«to uzsvara zÄ«mi",Ocirc:"Lielais latīņu burts O ar diakritisko zÄ«mi",Otilde:"Lielais latīņu burts O ar tildi",Ouml:"Lielais latīņu burts O ar diakritisko zÄ«mi", times:"ReizinÄÅ¡anas zÄ«me ",Oslash:"Lielais latīņu burts O ar iesvÄ«trojumu",Ugrave:"Lielais latīņu burts U ar uzsvaras zÄ«mi",Uacute:"Lielais latīņu burts U ar akÅ«to uzsvars zÄ«mi",Ucirc:"Lielais latīņu burts U ar diakritisko zÄ«mi",Uuml:"Lielais latīņu burts U ar diakritisko zÄ«mi",Yacute:"Lielais latīņu burts Y ar akÅ«to uzsvaras zÄ«mi",THORN:"Lielais latīņu burts torn",szlig:"Mazs latīņu burts ar ligatÅ«ru",agrave:"Mazs latīņu burts a ar uzsvara zÄ«mi",aacute:"Mazs latīņu burts a ar akÅ«to uzsvara zÄ«mi", acirc:"Mazs latīņu burts a ar diakritisko zÄ«mi",atilde:"Mazs latīņu burts a ar tildi",auml:"Mazs latīņu burts a ar diakritisko zÄ«mi",aring:"Mazs latīņu burts a ar aplÄ«ti augÅ¡Ä",aelig:"Mazs latīņu burts æ",ccedil:"Mazs latīņu burts c ar ÄÄ·Ä«ti zem burta",egrave:"Mazs latīņu burts e ar uzsvara zÄ«mi ",eacute:"Mazs latīņu burts e ar akÅ«tu uzsvara zÄ«mi",ecirc:"Mazs latīņu burts e ar diakritisko zÄ«mi",euml:"Mazs latīņu burts e ar diakritisko zÄ«mi",igrave:"Mazs latīņu burts i ar uzsvara zÄ«mi ",iacute:"Mazs latīņu burts i ar akÅ«tu uzsvara zÄ«mi", icirc:"Mazs latīņu burts i ar diakritisko zÄ«mi",iuml:"Mazs latīņu burts i ar diakritisko zÄ«mi",eth:"Mazs latīņu burts eth",ntilde:"Mazs latīņu burts n ar tildi",ograve:"Mazs latīņu burts o ar uzsvara zÄ«mi ",oacute:"Mazs latīņu burts o ar akÅ«tu uzsvara zÄ«mi",ocirc:"Mazs latīņu burts o ar diakritisko zÄ«mi",otilde:"Mazs latīņu burts o ar tildi",ouml:"Mazs latīņu burts o ar diakritisko zÄ«mi",divide:"Dalīšanas zÄ«me",oslash:"Mazs latīņu burts o ar iesvÄ«trojumu",ugrave:"Mazs latīņu burts u ar uzsvara zÄ«mi ", uacute:"Mazs latīņu burts u ar akÅ«tu uzsvara zÄ«mi",ucirc:"Mazs latīņu burts u ar diakritisko zÄ«mi",uuml:"Mazs latīņu burts u ar diakritisko zÄ«mi",yacute:"Mazs latīņu burts y ar akÅ«tu uzsvaras zÄ«mi",thorn:"Mazs latīņu burts torns",yuml:"Mazs latīņu burts y ar diakritisko zÄ«mi",OElig:"Liela latīņu ligatÅ«ra OE",oelig:"Maza latīņu ligatÅ«ra oe",372:"Liels latīņu burts W ar diakritisko zÄ«mi ",374:"Liels latīņu burts Y ar diakritisko zÄ«mi ",373:"Mazs latīņu burts w ar diakritisko zÄ«mi ",375:"Mazs latīņu burts y ar diakritisko zÄ«mi ", sbquo:"Mazas-9 vienkÄrtÄ«gas pÄ“diņas",8219:"Lielas-9 vienkÄrtÄ«gas apgrieztas pÄ“diņas",bdquo:"Mazas-9 dubultas pÄ“diņas",hellip:"HorizontÄli daudzpunkti",trade:"PreÄu zÄ«mes zÄ«me",9658:"Melns pa labi pagriezts radÄ«tÄjs",bull:"Lode",rarr:"Bulta pa labi",rArr:"Dubulta Bulta pa labi",hArr:"Bulta pa kreisi",diams:"Dubulta Bulta pa kreisi",asymp:"GandrÄ«z vienÄds ar"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/nb.js000644 000765 000024 00000006546 12555754775 026300 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","nb",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmÃ¥lstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", Auml:"Stor A med tøddel",Aring:"Stor Ã…",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten Ã¥",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/nl.js000644 000765 000024 00000011163 12555754775 026301 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","nl",{euro:"Euro-teken",lsquo:"Linker enkel aanhalingsteken",rsquo:"Rechter enkel aanhalingsteken",ldquo:"Linker dubbel aanhalingsteken",rdquo:"Rechter dubbel aanhalingsteken",ndash:"En dash",mdash:"Em dash",iexcl:"Omgekeerd uitroepteken",cent:"Cent-teken",pound:"Pond-teken",curren:"Valuta-teken",yen:"Yen-teken",brvbar:"Gebroken streep",sect:"Paragraaf-teken",uml:"Trema",copy:"Copyright-teken",ordf:"Vrouwelijk ordinaal",laquo:"Linker guillemet",not:"Ongelijk-teken", reg:"Geregistreerd handelsmerk-teken",macr:"Macron",deg:"Graden-teken",sup2:"Superscript twee",sup3:"Superscript drie",acute:"Accent aigu",micro:"Mico-teken",para:"Alinea-teken",middot:"Halfhoge punt",cedil:"Cedille",sup1:"Superscript een",ordm:"Mannelijk ordinaal",raquo:"Rechter guillemet",frac14:"Breuk kwart",frac12:"Breuk half",frac34:"Breuk driekwart",iquest:"Omgekeerd vraagteken",Agrave:"Latijnse hoofdletter A met een accent grave",Aacute:"Latijnse hoofdletter A met een accent aigu",Acirc:"Latijnse hoofdletter A met een circonflexe", Atilde:"Latijnse hoofdletter A met een tilde",Auml:"Latijnse hoofdletter A met een trema",Aring:"Latijnse hoofdletter A met een corona",AElig:"Latijnse hoofdletter Æ",Ccedil:"Latijnse hoofdletter C met een cedille",Egrave:"Latijnse hoofdletter E met een accent grave",Eacute:"Latijnse hoofdletter E met een accent aigu",Ecirc:"Latijnse hoofdletter E met een circonflexe",Euml:"Latijnse hoofdletter E met een trema",Igrave:"Latijnse hoofdletter I met een accent grave",Iacute:"Latijnse hoofdletter I met een accent aigu", Icirc:"Latijnse hoofdletter I met een circonflexe",Iuml:"Latijnse hoofdletter I met een trema",ETH:"Latijnse hoofdletter Eth",Ntilde:"Latijnse hoofdletter N met een tilde",Ograve:"Latijnse hoofdletter O met een accent grave",Oacute:"Latijnse hoofdletter O met een accent aigu",Ocirc:"Latijnse hoofdletter O met een circonflexe",Otilde:"Latijnse hoofdletter O met een tilde",Ouml:"Latijnse hoofdletter O met een trema",times:"Maal-teken",Oslash:"Latijnse hoofdletter O met een schuine streep",Ugrave:"Latijnse hoofdletter U met een accent grave", Uacute:"Latijnse hoofdletter U met een accent aigu",Ucirc:"Latijnse hoofdletter U met een circonflexe",Uuml:"Latijnse hoofdletter U met een trema",Yacute:"Latijnse hoofdletter Y met een accent aigu",THORN:"Latijnse hoofdletter Thorn",szlig:"Latijnse kleine ringel-s",agrave:"Latijnse kleine letter a met een accent grave",aacute:"Latijnse kleine letter a met een accent aigu",acirc:"Latijnse kleine letter a met een circonflexe",atilde:"Latijnse kleine letter a met een tilde",auml:"Latijnse kleine letter a met een trema", aring:"Latijnse kleine letter a met een corona",aelig:"Latijnse kleine letter æ",ccedil:"Latijnse kleine letter c met een cedille",egrave:"Latijnse kleine letter e met een accent grave",eacute:"Latijnse kleine letter e met een accent aigu",ecirc:"Latijnse kleine letter e met een circonflexe",euml:"Latijnse kleine letter e met een trema",igrave:"Latijnse kleine letter i met een accent grave",iacute:"Latijnse kleine letter i met een accent aigu",icirc:"Latijnse kleine letter i met een circonflexe", iuml:"Latijnse kleine letter i met een trema",eth:"Latijnse kleine letter eth",ntilde:"Latijnse kleine letter n met een tilde",ograve:"Latijnse kleine letter o met een accent grave",oacute:"Latijnse kleine letter o met een accent aigu",ocirc:"Latijnse kleine letter o met een circonflexe",otilde:"Latijnse kleine letter o met een tilde",ouml:"Latijnse kleine letter o met een trema",divide:"Deel-teken",oslash:"Latijnse kleine letter o met een schuine streep",ugrave:"Latijnse kleine letter u met een accent grave", uacute:"Latijnse kleine letter u met een accent aigu",ucirc:"Latijnse kleine letter u met een circonflexe",uuml:"Latijnse kleine letter u met een trema",yacute:"Latijnse kleine letter y met een accent aigu",thorn:"Latijnse kleine letter thorn",yuml:"Latijnse kleine letter y met een trema",OElig:"Latijnse hoofdletter Å’",oelig:"Latijnse kleine letter Å“",372:"Latijnse hoofdletter W met een circonflexe",374:"Latijnse hoofdletter Y met een circonflexe",373:"Latijnse kleine letter w met een circonflexe", 375:"Latijnse kleine letter y met een circonflexe",sbquo:"Lage enkele aanhalingsteken",8219:"Hoge omgekeerde enkele aanhalingsteken",bdquo:"Lage dubbele aanhalingsteken",hellip:"Beletselteken",trade:"Trademark-teken",9658:"Zwarte driehoek naar rechts",bull:"Bullet",rarr:"Pijl naar rechts",rArr:"Dubbele pijl naar rechts",hArr:"Dubbele pijl naar links",diams:"Zwart ruitje",asymp:"Benaderingsteken"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/no.js000644 000765 000024 00000006546 12555754775 026315 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","no",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmÃ¥lstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", Auml:"Stor A med tøddel",Aring:"Stor Ã…",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten Ã¥",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/pt-br.js000644 000765 000024 00000007364 12555754775 026724 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","pt-br",{euro:"Euro",lsquo:"Aspas simples esquerda",rsquo:"Aspas simples direita",ldquo:"Aspas duplas esquerda",rdquo:"Aspas duplas direita",ndash:"Traço",mdash:"Travessão",iexcl:"Ponto de exclamação invertido",cent:"Cent",pound:"Cerquilha",curren:"Dinheiro",yen:"Yen",brvbar:"Bara interrompida",sect:"Símbolo de Parágrafo",uml:"Trema",copy:"Direito de Cópia",ordf:"Indicador ordinal feminino",laquo:"Aspas duplas angulares esquerda",not:"Negação",reg:"Marca Registrada", macr:"Mácron",deg:"Grau",sup2:"2 Superscrito",sup3:"3 Superscrito",acute:"Acento agudo",micro:"Micro",para:"Pé de mosca",middot:"Ponto mediano",cedil:"Cedilha",sup1:"1 Superscrito",ordm:"Indicador ordinal masculino",raquo:"Aspas duplas angulares direita",frac14:"Um quarto",frac12:"Um meio",frac34:"Três quartos",iquest:"Interrogação invertida",Agrave:"A maiúsculo com acento grave",Aacute:"A maiúsculo com acento agudo",Acirc:"A maiúsculo com acento circunflexo",Atilde:"A maiúsculo com til",Auml:"A maiúsculo com trema", Aring:"A maiúsculo com anel acima",AElig:"Æ maiúsculo",Ccedil:"Ç maiúlculo",Egrave:"E maiúsculo com acento grave",Eacute:"E maiúsculo com acento agudo",Ecirc:"E maiúsculo com acento circumflexo",Euml:"E maiúsculo com trema",Igrave:"I maiúsculo com acento grave",Iacute:"I maiúsculo com acento agudo",Icirc:"I maiúsculo com acento circunflexo",Iuml:"I maiúsculo com crase",ETH:"Eth maiúsculo",Ntilde:"N maiúsculo com til",Ograve:"O maiúsculo com acento grave",Oacute:"O maiúsculo com acento agudo",Ocirc:"O maiúsculo com acento circunflexo", Otilde:"O maiúsculo com til",Ouml:"O maiúsculo com trema",times:"Multiplicação",Oslash:"Diâmetro",Ugrave:"U maiúsculo com acento grave",Uacute:"U maiúsculo com acento agudo",Ucirc:"U maiúsculo com acento circunflexo",Uuml:"U maiúsculo com trema",Yacute:"Y maiúsculo com acento agudo",THORN:"Thorn maiúsculo",szlig:"Eszett minúsculo",agrave:"a minúsculo com acento grave",aacute:"a minúsculo com acento agudo",acirc:"a minúsculo com acento circunflexo",atilde:"a minúsculo com til",auml:"a minúsculo com trema", aring:"a minúsculo com anel acima",aelig:"æ minúsculo",ccedil:"ç minúsculo",egrave:"e minúsculo com acento grave",eacute:"e minúsculo com acento agudo",ecirc:"e minúsculo com acento circunflexo",euml:"e minúsculo com trema",igrave:"i minúsculo com acento grave",iacute:"i minúsculo com acento agudo",icirc:"i minúsculo com acento circunflexo",iuml:"i minúsculo com trema",eth:"eth minúsculo",ntilde:"n minúsculo com til",ograve:"o minúsculo com acento grave",oacute:"o minúsculo com acento agudo",ocirc:"o minúsculo com acento circunflexo", otilde:"o minúsculo com til",ouml:"o minúsculo com trema",divide:"Divisão",oslash:"o minúsculo com cortado ou diâmetro",ugrave:"u minúsculo com acento grave",uacute:"u minúsculo com acento agudo",ucirc:"u minúsculo com acento circunflexo",uuml:"u minúsculo com trema",yacute:"y minúsculo com acento agudo",thorn:"thorn minúsculo",yuml:"y minúsculo com trema",OElig:"Ligação tipográfica OE maiúscula",oelig:"Ligação tipográfica oe minúscula",372:"W maiúsculo com acento circunflexo",374:"Y maiúsculo com acento circunflexo", 373:"w minúsculo com acento circunflexo",375:"y minúsculo com acento circunflexo",sbquo:"Aspas simples inferior direita",8219:"Aspas simples superior esquerda",bdquo:"Aspas duplas inferior direita",hellip:"Reticências",trade:"Trade mark",9658:"Ponta de seta preta para direita",bull:"Ponto lista",rarr:"Seta para direita",rArr:"Seta dupla para direita",hArr:"Seta dupla direita e esquerda",diams:"Ouros",asymp:"Aproximadamente"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/sk.js000644 000765 000024 00000011232 12555754775 026302 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","sk",{euro:"Znak eura",lsquo:"Ľavá jednoduchá úvodzovka",rsquo:"Pravá jednoduchá úvodzovka",ldquo:"Pravá dvojitá úvodzovka",rdquo:"Pravá dvojitá úvodzovka",ndash:"En pomlÄka",mdash:"Em pomlÄka",iexcl:"Obrátený výkriÄník",cent:"Znak centu",pound:"Znak libry",curren:"Znak meny",yen:"Znak jenu",brvbar:"PreruÅ¡ená zvislá Äiara",sect:"Znak odseku",uml:"Prehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených úvodzoviek vľavo",not:"Logistický zápor", reg:"Znak registrácie",macr:"PomlÄka nad",deg:"Znak stupňa",sup2:"Dvojka ako horný index",sup3:"Trojka ako horný index",acute:"Dĺžeň",micro:"Znak mikro",para:"Znak odstavca",middot:"Bodka uprostred",cedil:"Chvost vľavo",sup1:"Jednotka ako horný index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených úvodzoviek vpravo",frac14:"ObyÄajný zlomok jedna Å¡tvrtina",frac12:"ObyÄajný zlomok jedna polovica",frac34:"ObyÄajný zlomok tri Å¡tvrtiny",iquest:"OtoÄený otáznik",Agrave:"Veľké písmeno latinky A s accentom", Aacute:"Veľké písmeno latinky A s dĺžňom",Acirc:"Veľké písmeno latinky A s mäkÄeňom",Atilde:"Veľké písmeno latinky A s tildou",Auml:"Veľké písmeno latinky A s dvoma bodkami",Aring:"Veľké písmeno latinky A s krúžkom nad",AElig:"Veľké písmeno latinky Æ",Ccedil:"Veľké písmeno latinky C s chvostom vľavo",Egrave:"Veľké písmeno latinky E s accentom",Eacute:"Veľké písmeno latinky E s dĺžňom",Ecirc:"Veľké písmeno latinky E s mäkÄeňom",Euml:"Veľké písmeno latinky E s dvoma bodkami",Igrave:"Veľké písmeno latinky I s accentom", Iacute:"Veľké písmeno latinky I s dĺžňom",Icirc:"Veľké písmeno latinky I s mäkÄeňom",Iuml:"Veľké písmeno latinky I s dvoma bodkami",ETH:"Veľké písmeno latinky Eth",Ntilde:"Veľké písmeno latinky N s tildou",Ograve:"Veľké písmeno latinky O s accentom",Oacute:"Veľké písmeno latinky O s dĺžňom",Ocirc:"Veľké písmeno latinky O s mäkÄeňom",Otilde:"Veľké písmeno latinky O s tildou",Ouml:"Veľké písmeno latinky O s dvoma bodkami",times:"Znak násobenia",Oslash:"Veľké písmeno latinky O preÅ¡krtnuté",Ugrave:"Veľké písmeno latinky U s accentom", Uacute:"Veľké písmeno latinky U s dĺžňom",Ucirc:"Veľké písmeno latinky U s mäkÄeňom",Uuml:"Veľké písmeno latinky U s dvoma bodkami",Yacute:"Veľké písmeno latinky Y s dĺžňom",THORN:"Veľké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s accentom",aacute:"Malé písmeno latinky a s dĺžňom",acirc:"Malé písmeno latinky a s mäkÄeňom",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvoma bodkami",aring:"Malé písmeno latinky a s krúžkom nad", aelig:"Malé písmeno latinky æ",ccedil:"Malé písmeno latinky c s chvostom vľavo",egrave:"Malé písmeno latinky e s accentom",eacute:"Malé písmeno latinky e s dĺžňom",ecirc:"Malé písmeno latinky e s mäkÄeňom",euml:"Malé písmeno latinky e s dvoma bodkami",igrave:"Malé písmeno latinky i s accentom",iacute:"Malé písmeno latinky i s dĺžňom",icirc:"Malé písmeno latinky i s mäkÄeňom",iuml:"Malé písmeno latinky i s dvoma bodkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s accentom", oacute:"Malé písmeno latinky o s dĺžňom",ocirc:"Malé písmeno latinky o s mäkÄeňom",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvoma bodkami",divide:"Znak delenia",oslash:"Malé písmeno latinky o preÅ¡krtnuté",ugrave:"Malé písmeno latinky u s accentom",uacute:"Malé písmeno latinky u s dĺžňom",ucirc:"Malé písmeno latinky u s mäkÄeňom",uuml:"Malé písmeno latinky u s dvoma bodkami",yacute:"Malé písmeno latinky y s dĺžňom",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvoma bodkami", OElig:"Veľká ligatúra latinky OE",oelig:"Malá ligatúra latinky OE",372:"Veľké písmeno latinky W s mäkÄeňom",374:"Veľké písmeno latinky Y s mäkÄeňom",373:"Malé písmeno latinky w s mäkÄeňom",375:"Malé písmeno latinky y s mäkÄeňom",sbquo:"Dolná jednoduchá 9-úvodzovka",8219:"Horná jednoduchá otoÄená 9-úvodzovka",bdquo:"Dolná dvojitá 9-úvodzovka",hellip:"Trojbodkový úvod",trade:"Znak ibchodnej znaÄky",9658:"ÄŒierny ukazovateľ smerujúci vpravo",bull:"Kruh",rarr:"Šípka vpravo",rArr:"Dvojitá Å¡ipka vpravo", hArr:"Dvojitá Å¡ipka vľavo a vpravo",diams:"ÄŒierne piky",asymp:"Skoro sa rovná"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/sv.js000644 000765 000024 00000006632 12555754775 026325 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","sv",{euro:"Eurotecken",lsquo:"Enkelt vänster citattecken",rsquo:"Enkelt höger citattecken",ldquo:"Dubbelt vänster citattecken",rdquo:"Dubbelt höger citattecken",ndash:"Snedstreck",mdash:"LÃ¥ngt tankstreck",iexcl:"Inverterad utropstecken",cent:"Centtecken",pound:"Pundtecken",curren:"Valutatecken",yen:"Yentecken",brvbar:"Brutet lodrätt streck",sect:"Paragraftecken",uml:"Diaeresis",copy:"Upphovsrättstecken",ordf:"Feminit ordningstalsindikator",laquo:"Vänsterställt dubbelt vinkelcitationstecken", not:"Icke-tecken",reg:"Registrerad",macr:"Macron",deg:"Grader",sup2:"Upphöjt tvÃ¥",sup3:"Upphöjt tre",acute:"Akut accent",micro:"Mikrotecken",para:"Alinea",middot:"Centrerad prick",cedil:"Cedilj",sup1:"Upphöjt en",ordm:"Maskulina ordningsändelsen",raquo:"Högerställt dubbelt vinkelcitationstecken",frac14:"BrÃ¥ktal - en kvart",frac12:"BrÃ¥ktal - en halv",frac34:"BrÃ¥ktal - tre fjärdedelar",iquest:"Inverterat frÃ¥getecken",Agrave:"Stort A med grav accent",Aacute:"Stort A med akutaccent",Acirc:"Stort A med circumflex", Atilde:"Stort A med tilde",Auml:"Stort A med diaresis",Aring:"Stort A med ring ovan",AElig:"Stort Æ",Ccedil:"Stort C med cedilj",Egrave:"Stort E med grav accent",Eacute:"Stort E med aktuaccent",Ecirc:"Stort E med circumflex",Euml:"Stort E med diaeresis",Igrave:"Stort I med grav accent",Iacute:"Stort I med akutaccent",Icirc:"Stort I med circumflex",Iuml:"Stort I med diaeresis",ETH:"Stort Eth",Ntilde:"Stort N med tilde",Ograve:"Stort O med grav accent",Oacute:"Stort O med aktuaccent",Ocirc:"Stort O med circumflex", Otilde:"Stort O med tilde",Ouml:"Stort O med diaeresis",times:"Multiplicera",Oslash:"Stor Ø",Ugrave:"Stort U med grav accent",Uacute:"Stort U med akutaccent",Ucirc:"Stort U med circumflex",Uuml:"Stort U med diaeresis",Yacute:"Stort Y med akutaccent",THORN:"Stort Thorn",szlig:"Litet dubbel-s/Eszett",agrave:"Litet a med grav accent",aacute:"Litet a med akutaccent",acirc:"Litet a med circumflex",atilde:"Litet a med tilde",auml:"Litet a med diaeresis",aring:"Litet a med ring ovan",aelig:"Bokstaven æ", ccedil:"Litet c med cedilj",egrave:"Litet e med grav accent",eacute:"Litet e med akutaccent",ecirc:"Litet e med circumflex",euml:"Litet e med diaeresis",igrave:"Litet i med grav accent",iacute:"Litet i med akutaccent",icirc:"LItet i med circumflex",iuml:"Litet i med didaeresis",eth:"Litet eth",ntilde:"Litet n med tilde",ograve:"LItet o med grav accent",oacute:"LItet o med akutaccent",ocirc:"Litet o med circumflex",otilde:"LItet o med tilde",ouml:"Litet o med diaeresis",divide:"Division",oslash:"ø", ugrave:"Litet u med grav accent",uacute:"Litet u med akutaccent",ucirc:"LItet u med circumflex",uuml:"Litet u med diaeresis",yacute:"Litet y med akutaccent",thorn:"Litet thorn",yuml:"Litet y med diaeresis",OElig:"Stor ligatur av OE",oelig:"Liten ligatur av oe",372:"Stort W med circumflex",374:"Stort Y med circumflex",373:"Litet w med circumflex",375:"Litet y med circumflex",sbquo:"Enkelt lÃ¥gt 9-citationstecken",8219:"Enkelt högt bakvänt 9-citationstecken",bdquo:"Dubbelt lÃ¥gt 9-citationstecken",hellip:"Horisontellt uteslutningstecken", trade:"Varumärke",9658:"Svart högervänd pekare",bull:"Listpunkt",rarr:"Högerpil",rArr:"Dubbel högerpil",hArr:"Dubbel vänsterpil",diams:"Svart ruter",asymp:"Ungefär lika med"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/tr.js000644 000765 000024 00000010575 12555754775 026323 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","tr",{euro:"Euro iÅŸareti",lsquo:"Sol tek tırnak iÅŸareti",rsquo:"SaÄŸ tek tırnak iÅŸareti",ldquo:"Sol çift tırnak iÅŸareti",rdquo:"SaÄŸ çift tırnak iÅŸareti",ndash:"En tire",mdash:"Em tire",iexcl:"Ters ünlem iÅŸareti",cent:"Cent iÅŸareti",pound:"Pound iÅŸareti",curren:"Para birimi iÅŸareti",yen:"Yen iÅŸareti",brvbar:"Kırık bar",sect:"Bölüm iÅŸareti",uml:"İki sesli harfin ayrılması",copy:"Telif hakkı iÅŸareti",ordf:"DiÅŸil sıralı gösterge",laquo:"Sol-iÅŸaret çift açı tırnak iÅŸareti", not:"Not iÅŸareti",reg:"Kayıtlı iÅŸareti",macr:"Makron",deg:"Derece iÅŸareti",sup2:"İkili üstsimge",sup3:"Üçlü üstsimge",acute:"Aksan iÅŸareti",micro:"Mikro iÅŸareti",para:"Pilcrow iÅŸareti",middot:"Orta nokta",cedil:"Kedilla",sup1:"Üstsimge",ordm:"Eril sıralı gösterge",raquo:"SaÄŸ iÅŸaret çift açı tırnak iÅŸareti",frac14:"Bayağı kesrin dörtte biri",frac12:"Bayağı kesrin bir yarım",frac34:"Bayağı kesrin dörtte üç",iquest:"Ters soru iÅŸareti",Agrave:"Aksanlı latin harfi",Aacute:"Aşırı aksanıyla Latin harfi", Acirc:"Çarpık Latin harfi",Atilde:"Tilde latin harfi",Auml:"Sesli harf ayrılımlıı latin harfi",Aring:"Halkalı latin büyük A harfi",AElig:"Latin büyük Æ harfi",Ccedil:"Latin büyük C harfi ile kedilla",Egrave:"Aksanlı latin büyük E harfi",Eacute:"Aşırı vurgulu latin büyük E harfi",Ecirc:"Çarpık latin büyük E harfi",Euml:"Sesli harf ayrılımlıı latin büyük E harfi",Igrave:"Aksanlı latin büyük I harfi",Iacute:"Aşırı aksanlı latin büyük I harfi",Icirc:"Çarpık latin büyük I harfi",Iuml:"Sesli harf ayrılımlıı latin büyük I harfi", ETH:"Latin büyük Eth harfi",Ntilde:"Tildeli latin büyük N harfi",Ograve:"Aksanlı latin büyük O harfi",Oacute:"Aşırı aksanlı latin büyük O harfi",Ocirc:"Çarpık latin büyük O harfi",Otilde:"Tildeli latin büyük O harfi",Ouml:"Sesli harf ayrılımlı latin büyük O harfi",times:"Çarpma iÅŸareti",Oslash:"Vurgulu latin büyük O harfi",Ugrave:"Aksanlı latin büyük U harfi",Uacute:"Aşırı aksanlı latin büyük U harfi",Ucirc:"Çarpık latin büyük U harfi",Uuml:"Sesli harf ayrılımlı latin büyük U harfi",Yacute:"Aşırı aksanlı latin büyük Y harfi", THORN:"Latin büyük Thorn harfi",szlig:"Latin küçük keskin s harfi",agrave:"Aksanlı latin küçük a harfi",aacute:"Aşırı aksanlı latin küçük a harfi",acirc:"Çarpık latin küçük a harfi",atilde:"Tildeli latin küçük a harfi",auml:"Sesli harf ayrılımlı latin küçük a harfi",aring:"Halkalı latin küçük a harfi",aelig:"Latin büyük æ harfi",ccedil:"Kedillalı latin küçük c harfi",egrave:"Aksanlı latin küçük e harfi",eacute:"Aşırı aksanlı latin küçük e harfi",ecirc:"Çarpık latin küçük e harfi",euml:"Sesli harf ayrılımlı latin küçük e harfi", igrave:"Aksanlı latin küçük i harfi",iacute:"Aşırı aksanlı latin küçük i harfi",icirc:"Çarpık latin küçük i harfi",iuml:"Sesli harf ayrılımlı latin küçük i harfi",eth:"Latin küçük eth harfi",ntilde:"Tildeli latin küçük n harfi",ograve:"Aksanlı latin küçük o harfi",oacute:"Aşırı aksanlı latin küçük o harfi",ocirc:"Çarpık latin küçük o harfi",otilde:"Tildeli latin küçük o harfi",ouml:"Sesli harf ayrılımlı latin küçük o harfi",divide:"Bölme iÅŸareti",oslash:"Vurgulu latin küçük o harfi",ugrave:"Aksanlı latin küçük u harfi", uacute:"Aşırı aksanlı latin küçük u harfi",ucirc:"Çarpık latin küçük u harfi",uuml:"Sesli harf ayrılımlı latin küçük u harfi",yacute:"Aşırı aksanlı latin küçük y harfi",thorn:"Latin küçük thorn harfi",yuml:"Sesli harf ayrılımlı latin küçük y harfi",OElig:"Latin büyük baÄŸlı OE harfi",oelig:"Latin küçük baÄŸlı oe harfi",372:"Çarpık latin büyük W harfi",374:"Çarpık latin büyük Y harfi",373:"Çarpık latin küçük w harfi",375:"Çarpık latin küçük y harfi",sbquo:"Tek düşük-9 tırnak iÅŸareti",8219:"Tek yüksek-ters-9 tırnak iÅŸareti", bdquo:"Çift düşük-9 tırnak iÅŸareti",hellip:"Yatay elips",trade:"Marka tescili iÅŸareti",9658:"Siyah saÄŸ iÅŸaret iÅŸaretçisi",bull:"Koyu nokta",rarr:"SaÄŸa doÄŸru ok",rArr:"SaÄŸa doÄŸru çift ok",hArr:"Sol, saÄŸ çift ok",diams:"Siyah elmas takımı",asymp:"Hemen hemen eÅŸit"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/ug.js000644 000765 000024 00000011521 12555754775 026301 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","ug",{euro:"ياۋرو بەلگىسى",lsquo:"يالاڭ Ù¾Û•Ø´ سول",rsquo:"يالاڭ Ù¾Û•Ø´ ئوڭ",ldquo:"قوش Ù¾Û•Ø´ سول",rdquo:"قوش Ù¾Û•Ø´ ئوڭ",ndash:"سىزىقچە",mdash:"سىزىق",iexcl:"ئۈندەش",cent:"تىيىن بەلگىسى",pound:"Ùوند Ø³ØªÛØ±Ù„Ù‰Ú­",curren:"Ù¾Û‡Ù„ بەلگىسى",yen:"ياپونىيە يىنى",brvbar:"ئۈزۈك بالداق",sect:"پاراگرا٠بەلگىسى",uml:"تاۋۇش ئايرىش بەلگىسى",copy:"نەشر ھوقۇقى بەلگىسى",ordf:"Feminine ordinal indicator",laquo:"قوش تىرناق سول",not:"غەيرى بەلگە",reg:"خەتلەتكەن تاۋار ماركىسى",macr:"سوزۇش بەلگىسى", deg:"گىرادۇس بەلگىسى",sup2:"يۇقىرى ئىندÛكىس 2",sup3:"يۇقىرى ئىندÛكىس 3",acute:"ئۇرغۇ بەلگىسى",micro:"Micro sign",para:"ئابزاس بەلگىسى",middot:"ئوتتۇرا Ú†Ûكىت",cedil:"ئاستىغا قوشۇلىدىغان بەلگە",sup1:"يۇقىرى ئىندÛكىس 1",ordm:"Masculine ordinal indicator",raquo:"قوش تىرناق ئوڭ",frac14:"ئاددىي كەسىر تۆتتىن بىر",frac12:"ئاددىي كەسىر ئىككىدىن بىر",frac34:"ئاددىي كەسىر ئۈچتىن تۆرت",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"قوش Ù¾Û•Ø´ ئوڭ",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent", Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ", ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"تىك موللاق سوئال بەلگىسى",ograve:"Latin small letter o with grave accent", oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn", yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet", rarr:"ئوڭ يا ئوق",rArr:"ئوڭ قوش سىزىق يا ئوق",hArr:"ئوڭ سول قوش سىزىق يا ئوق",diams:"ئۇيۇل غىچ",asymp:"تەخمىنەن تەڭ"});rt-4.2.12/share/static/RichText/plugins/specialchar/dialogs/lang/zh-cn.js000644 000765 000024 00000010433 12555754775 026706 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.plugins.setLang("specialchar","zh-cn",{euro:"欧元符å·",lsquo:"å·¦å•引å·",rsquo:"å³å•引å·",ldquo:"å·¦åŒå¼•å·",rdquo:"å³åŒå¼•å·",ndash:"短划线",mdash:"破折å·",iexcl:"ç«–ç¿»å¹å·",cent:"åˆ†å¸æ ‡è®°",pound:"英镑标记",curren:"è´§å¸æ ‡è®°",yen:"日元标记",brvbar:"é—´æ–­æ¡",sect:"节标记",uml:"分音符",copy:"ç‰ˆæƒæ‰€æœ‰æ ‡è®°",ordf:"é˜´æ€§é¡ºåºæŒ‡ç¤ºç¬¦",laquo:"左指åŒå°–引å·",not:"éžæ ‡è®°",reg:"注册标记",macr:"长音符",deg:"度标记",sup2:"上标二",sup3:"上标三",acute:"é”音符",micro:"微符",para:"æ®µè½æ ‡è®°",middot:"中间点",cedil:"下加符",sup1:"上标一",ordm:"é˜³æ€§é¡ºåºæŒ‡ç¤ºç¬¦",raquo:"峿Œ‡åŒå°–引å·",frac14:"普通分数四分之一",frac12:"普通分数二分之一",frac34:"普通分数四分之三",iquest:"竖翻问å·", Agrave:"å¸¦æŠ‘éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ A",Aacute:"带é”éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ A",Acirc:"å¸¦æ‰¬æŠ‘ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ A",Atilde:"å¸¦é¢šåŒ–ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ A",Auml:"å¸¦åˆ†éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ A",Aring:"å¸¦ä¸Šåœ†åœˆçš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ A",AElig:"æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ Ae",Ccedil:"å¸¦ä¸‹åŠ ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ C",Egrave:"å¸¦æŠ‘éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ E",Eacute:"带é”éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ E",Ecirc:"å¸¦æ‰¬æŠ‘ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ E",Euml:"å¸¦åˆ†éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ E",Igrave:"å¸¦æŠ‘éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ I",Iacute:"带é”éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ I",Icirc:"å¸¦æ‰¬æŠ‘ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ I",Iuml:"å¸¦åˆ†éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ I",ETH:"æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ Eth",Ntilde:"å¸¦é¢šåŒ–ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ N",Ograve:"å¸¦æŠ‘éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ O",Oacute:"带é”éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ O",Ocirc:"å¸¦æ‰¬æŠ‘ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ O",Otilde:"å¸¦é¢šåŒ–ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ O", Ouml:"å¸¦åˆ†éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ O",times:"乘å·",Oslash:"å¸¦ç²—çº¿çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ O",Ugrave:"å¸¦æŠ‘éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ U",Uacute:"带é”éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ U",Ucirc:"å¸¦æ‰¬æŠ‘ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ U",Uuml:"å¸¦åˆ†éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ U",Yacute:"å¸¦æŠ‘éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ Y",THORN:"æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ Thorn",szlig:"æ‹‰ä¸æ–‡å°å†™å­—æ¯æ¸…音 S",agrave:"å¸¦æŠ‘éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ A",aacute:"带é”éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ A",acirc:"å¸¦æ‰¬æŠ‘ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ A",atilde:"å¸¦é¢šåŒ–ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ A",auml:"å¸¦åˆ†éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ A",aring:"å¸¦ä¸Šåœ†åœˆçš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ A",aelig:"æ‹‰ä¸æ–‡å°å†™å­—æ¯ Ae",ccedil:"å¸¦ä¸‹åŠ ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ C",egrave:"å¸¦æŠ‘éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ E",eacute:"带é”éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ E",ecirc:"å¸¦æ‰¬æŠ‘ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ E",euml:"å¸¦åˆ†éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ E",igrave:"å¸¦æŠ‘éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ I", iacute:"带é”éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ I",icirc:"å¸¦æ‰¬æŠ‘ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ I",iuml:"å¸¦åˆ†éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ I",eth:"æ‹‰ä¸æ–‡å°å†™å­—æ¯ Eth",ntilde:"å¸¦é¢šåŒ–ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ N",ograve:"å¸¦æŠ‘éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ O",oacute:"带é”éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ O",ocirc:"å¸¦æ‰¬æŠ‘ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ O",otilde:"å¸¦é¢šåŒ–ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ O",ouml:"å¸¦åˆ†éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ O",divide:"除å·",oslash:"å¸¦ç²—çº¿çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ O",ugrave:"å¸¦æŠ‘éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ U",uacute:"带é”éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ U",ucirc:"å¸¦æ‰¬æŠ‘ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ U",uuml:"å¸¦åˆ†éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ U",yacute:"å¸¦æŠ‘éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ Y",thorn:"æ‹‰ä¸æ–‡å°å†™å­—æ¯ Thorn",yuml:"å¸¦åˆ†éŸ³ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ Y",OElig:"æ‹‰ä¸æ–‡å¤§å†™è¿žå­— Oe",oelig:"æ‹‰ä¸æ–‡å°å†™è¿žå­— Oe",372:"å¸¦æ‰¬æŠ‘ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ W",374:"å¸¦æ‰¬æŠ‘ç¬¦çš„æ‹‰ä¸æ–‡å¤§å†™å­—æ¯ Y", 373:"å¸¦æ‰¬æŠ‘ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ W",375:"å¸¦æ‰¬æŠ‘ç¬¦çš„æ‹‰ä¸æ–‡å°å†™å­—æ¯ Y",sbquo:"å•下 9 形引å·",8219:"å•高横翻 9 形引å·",bdquo:"åŒä¸‹ 9 形引å·",hellip:"æ°´å¹³çœç•¥å·",trade:"商标标志",9658:"å®žå¿ƒå³æŒ‡æŒ‡é’ˆ",bull:"加é‡å·",rarr:"å‘å³ç®­å¤´",rArr:"å‘å³åŒçº¿ç®­å¤´",hArr:"å·¦å³åŒçº¿ç®­å¤´",diams:"实心方å—纸牌",asymp:"约等于"});rt-4.2.12/share/static/RichText/plugins/smiley/dialogs/000755 000765 000024 00000000000 12555754775 023433 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/smiley/images/000755 000765 000024 00000000000 12555754775 023256 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/smiley/images/angel_smile.gif000644 000765 000024 00000000721 12555754775 026224 0ustar00sartakstaff000000 000000 GIF89aÕ?ýÅ'ؘý¶®oÿ×Fk1£ûâhü±$þÎDúº<Ò˜3ÿÕ8é¦ÿ¾ÿÿÿû¾'ÿãTÿ³ûâ’ýñÅüëµþ÷ØÿàMÿúçò×]ü´,ýÎ\ÙÇzþï íÏwžh ûß}‰Z ÀNêÔ¥ü¼.ú¨"ÿýöÿÎ.þýïÿÚjßÇ’ÿ×'ð·IúòãýÂ5Ô³gõ±÷¹αšýÉ<úz)êå÷¿tîèâɉX×§0Ñ©Rÿì„ûúøüûýÿÿûô+ÿÿÿ!ù?,îÀŸpH,‡”$…#i6?Êd:!n®‰±r©T(¨Ì´rm:Oâ„UºL$ J’1µD‘hr9]º^KG9)'%m_ …+b$•#”E17Ÿ,# DŸ4*5Ÿ<=ªD6=*;¾&¹C»:&ÌÇ«C-&  0 ÖB  2 —æE- 8 >>3 `¡ˆ… #€ÁÐà ±ÐàE@ HÊ ^0À€£D Cš;ç±e‘ ;rt-4.2.12/share/static/RichText/plugins/smiley/images/angry_smile.gif000644 000765 000024 00000000673 12555754775 026264 0ustar00sartakstaff000000 000000 GIF89aÕ;÷?õo$ôfú§DìNöe•D÷‡3ðWúz)ý´Kø•Qö‚ByP ù›?ñ,»sJÅ9ùx™U$j0¥ü”1ëo ‰Z ÷]t8—úòãÛJ îz'ý­Zñ]#§Sþýüºaûúøß` ûöóÛj,áO a™šgvØÇ¯âTÓAèØËœu0± ëd„IwîèâþþþαšÌZô¾k÷õðë‘cÏSæZñM ÿÿÿ!ù;,ØÀpH,ȤP¡ ˜L¥sà¨>‚Òéx½V[|χ„1.‹ø7Xc‹ŒE§ÖñÒ u d;]!ŠŠ C "2'0 .6$• (#Ÿ7$• %*:·o #!ˆÅ• % -3)8u…; Ú 1" ,uE ú4&ä„Ð{‘cE„ƒJ8$À? h)dXäß?…J2 ;rt-4.2.12/share/static/RichText/plugins/smiley/images/broken_heart.gif000644 000765 000024 00000000300 12555754775 026401 0ustar00sartakstaff000000 000000 GIF89a³ ´/áO ÛJ Å9ÓAñ,îz'ëo æZëdâTÿÿÿ!ù ,mpÉI«½8ã B•! åy‚@LEkˆt~*1,­ KMØ·\ᕈÉ|`aÈ Yʦ\ŠFEè¬.`p1ê£*'‰4B»¨ ’gÊZ¡¹áKK$yã35qo^‚ƒˆy‹Ž;rt-4.2.12/share/static/RichText/plugins/smiley/images/confused_smile.gif000644 000765 000024 00000000720 12555754775 026743 0ustar00sartakstaff000000 000000 GIF89aÕ?¼‡ؘÿÓ;ÿå[ÿÿü«vð¦›g þåcÿ³ÿâRÿ¶ÿàMÿÛHÿßPÿÃ!ÿ¿þýïø°ÿúçÿâW‰Z ÿË,}UºÿØAÿÎ1ûâ’ûß}j0¥üëµÿÝG—r½û´þèjÍ»ÞýÎ\þÝZúòã½§ÔþÅ0õ±ÿì„þ·þ÷ØÿßJîèâþºç þÔCÿåU÷õðîÁ3ÿýöþï ÷°þÌH¥ÛÿÞMø²ßÔíÿÚjýñÅÊ”.ÿÿÿ!ù?,íÀŸpH,¤#Ù8I…±L2œ eÀ¥(r ‹åZÌ:¡.Ã<ÆEjd2© M§³±@â;-! 28%<d?),=-B‘""&& C1!+4+s%7.²B  $'##'.*Ã?,$0»»Ò * ÕÙ3/ ïâ?>ø66Õ„0xð À  8PˆòB@!A( A+Ž‹h„ ¸q¨\É’H;rt-4.2.12/share/static/RichText/plugins/smiley/images/cry_smile.gif000644 000765 000024 00000000724 12555754775 025736 0ustar00sartakstaff000000 000000 GIF89aÕ?ÿå\•dÿàL×§0þÜDÿßJ©vüº(ú³Õ˜è±-é¦ÿâRÿ¾ÿÿþÿÄ+ÿÖ:ýädÿ²ͻ޽§Ô}Uº¥Ûa™—r½‰Z þèj±ƒxóÎBÌÂòò×]¿†ÿÁ—kí©5ßÇ’ÿìtØÇ¯šgv­‰>ɉXð·IÿäVÑ©RîÁ3ÿßPÿÒ4œu0ÿêLÿ· ÿî]Ú›7íÏw± ÿôoá·:èØËÿ¾þÝZúòãô×R»sJ¹‡"ÿÿÿ!ù?,ñÀŸpH,ÈäOÀžÊ%AÀ¨¶žRèvUW¬¶(Pi΀ÊI€¸\ã!ÃLªGÖBûñ(24‚<<‡,D 677‘“ r2#= #+ C*04):5ªC³), "§»C%²(>!Ô±C¦& '8%! "ÉC±1 #;'"& B¡&> ˜WÂÀ3.ì£Ð¯B… xqâ…5 V bÁÂ…Bdˆ„QÂŽ[$,ø`cœ(0ƒ;rt-4.2.12/share/static/RichText/plugins/smiley/images/devil_smile.gif000644 000765 000024 00000000664 12555754775 026247 0ustar00sartakstaff000000 000000 GIF89aÕ?S j/¡ÿÖ9þÚHÿÃ&Ï–1ù¹<ÿ´«výöåÿÿþý¾$Ì^þÎCþÚVé¦ýånÿàLý´#˜fÿäWþ·§Sü¼.þºýÂ5ÐÿÆ.þ÷Ø÷µÿ¿ü´,¹‡"ýÉ<ÿýöÍ»Þå±-ÿþûþ»þï ×§0ÿÚjïëøÙÇzæ¿@ëÊLûß}ýÎ\èØË÷Ã"ôÉ#ÿÎ#÷ôùÿì„çÈbì‰%íÏw±ƒxýî½ÿÎ1úùÿú¨"ñº1ÿÿÿ!ù?,ÑÀŸpH,H£e™.-ÄgRZ\N„—ìÅ U. ¾P& ¢*A(Ö` h˜ÇÔlî„ü"bŒ8pb Y}69'$Œ#":‰D+Œ* 5‘< —C.#4 %20 °:¥B)"  ;'% /³E y3l1  ´? l=E;×7 çàEôô–ÑBT8p€O&0tXH°`“6tG$;rt-4.2.12/share/static/RichText/plugins/smiley/images/embaressed_smile.gif000644 000765 000024 00000000672 12555754775 027255 0ustar00sartakstaff000000 000000 GIF89aÕ?÷Š8ÒÈðý¶*ÿäSÿ×:ýøèý±Ú˜þ·úÖXÙ°8ÿÿÿýçiÿÌ)þÌ7ÿæ\íèðþÎD”gÿàMÿÝGj0¥þ»ÿØB‰Z ú¨"ø•Qù›?yP þï ü”1ý­ZÿÁÿ¾ÿþûú«9æ¿@ûâ’çÈbÿòOú§Dý´KÔ³g®wö‚BÊ”.ø±!¿tîÁ3þ÷Øÿ×'ç ýä6¹‡"ô¾kÿâ@ÿìRÿî]êÔ¥ÿÚjûß}þÔCúùÿÿÿÿ!ù?,×ÀŸpH,‹“ä`y9“Ê ó2q&Iƒ‡6¡PP¨Æ$FÂ`'²y0¡¨xRU*"7&"%mC'/> 4~‡1!‹8: ‘2&Ÿ˜C""; <"Ÿˆ§B 6=x#™¶Ê)½(C(,,) 5-ÔÔn¶#Ô3ÃHêì.勺Xa…>þ¬,ÆÐ@B'BŠ@è¢Å‹‹;rt-4.2.12/share/static/RichText/plugins/smiley/images/embarrassed_smile.gif000644 000765 000024 00000000672 12555754775 027433 0ustar00sartakstaff000000 000000 GIF89aÕ?÷Š8ÒÈðý¶*ÿäSÿ×:ýøèý±Ú˜þ·úÖXÙ°8ÿÿÿýçiÿÌ)þÌ7ÿæ\íèðþÎD”gÿàMÿÝGj0¥þ»ÿØB‰Z ú¨"ø•Qù›?yP þï ü”1ý­ZÿÁÿ¾ÿþûú«9æ¿@ûâ’çÈbÿòOú§Dý´KÔ³g®wö‚BÊ”.ø±!¿tîÁ3þ÷Øÿ×'ç ýä6¹‡"ô¾kÿâ@ÿìRÿî]êÔ¥ÿÚjûß}þÔCúùÿÿÿÿ!ù?,×ÀŸpH,‹“ä`y9“Ê ó2q&Iƒ‡6¡PP¨Æ$FÂ`'²y0¡¨xRU*"7&"%mC'/> 4~‡1!‹8: ‘2&Ÿ˜C""; <"Ÿˆ§B 6=x#™¶Ê)½(C(,,) 5-ÔÔn¶#Ô3ÃHêì.勺Xa…>þ¬,ÆÐ@B'BŠ@è¢Å‹‹;rt-4.2.12/share/static/RichText/plugins/smiley/images/envelope.gif000644 000765 000024 00000000652 12555754775 025565 0ustar00sartakstaff000000 000000 GIF89aÕ(þÒLÿÿÿß™ç þ×Qí©5üëµöÃ<ê¢,ï±,â›"ë«þÌHñº1ø¸;ô¾kÚŸþÏ@ýÉ<å±-¿†ö·&ÿýöð¦ûâ’ýñÅð·Iæ¿@Ð×§0Ê”.þÝZã©@úòãýÂ5íÏwþþþü½Qè¸7ÿþúÿÿÿ!ù(,Ç@”pH,Èä° P Jba€=§Êi¡dèŽ ˆÔ~d2§@ „Áhð!Bx<Ô$µ>PI(†j{z B ƒzT‰‹(  "C•–] ¥  ¨B –  ¥– K – ¦ÎÁÅBÇ ¹¿¿¦ÐD¼ ‰ ÎÒŒ ÎÍÊÑDí&ÄÑõF &Ðã%  *<;rt-4.2.12/share/static/RichText/plugins/smiley/images/heart.gif000644 000765 000024 00000000267 12555754775 025055 0ustar00sartakstaff000000 000000 GIF89a³ ´/áO ÛJ Å9ÓAñ,îz'ëo æZëdâTÿÿÿ!ù ,dpÉI«½8klúIS `¨ñ! I A¡éê–11Lt¡&ˆŽ ÛI ´_𓎸„éžPÉa» ›Î'%AFTsá,ŬPX‹XÌè=HkÐõø&×o$~j‚…†‡;rt-4.2.12/share/static/RichText/plugins/smiley/images/kiss.gif000644 000765 000024 00000000361 12555754775 024716 0ustar00sartakstaff000000 000000 GIF89aÄëdæZ»FÀNëo ë‘cÆ]/âTÏSß` »U'ÿÿþÌZɉX»sJÿÿüþýüÛj,αšêÔ¥ÿÿÿ!ù,n %Ždižhª®lëRA°L¤1ë§ÃlHŒýH±ÀAÀd" †!¡ÖˆÂÐè6 ð &J“Çb½€H бU4$îwC0œd?1 L8C M‡*BY} -3€/˜™š›"!;rt-4.2.12/share/static/RichText/plugins/smiley/images/lightbulb.gif000644 000765 000024 00000000560 12555754775 025722 0ustar00sartakstaff000000 000000 GIF89aÕ-—kûâqþèjûâdý´Kù›?ÿæcþÝZýÎ\¹‡"‘cþÅTýñÅûß}j0¥ô¾k÷?ë‘cú«9ÿì„ɉXüëµ}Uºûâ’a™—r½o6@þÌHÿßPn0síÏwÚ›7„Iwü½QÿâWt8—ÿÿþþýïü”1þ÷Øý­Zþ×QÊ”.ú§Dø¸;ÿÿÿ!ù-,À–pH,H#@  FqId¶Ñ Px ­Æç˜,o2hœH'¡»0Jó 4/*þWv -K EO+ˆI-)„ ( IV s*¡B`ªD ©_UE&J˜˜G ¾FÃE#ÈEÍEÐÍA;rt-4.2.12/share/static/RichText/plugins/smiley/images/omg_smile.gif000644 000765 000024 00000000703 12555754775 025720 0ustar00sartakstaff000000 000000 GIF89aÕ?¹‡!ýåj–gþÝZüåÿãTþÕ6º”u±œØþ÷ØÿÿþÿÝD”j«XwûÌ3©vk1£ÿæ[ü´,þ»ÿÛGýµÿàNÿãIÿË,þï ý´Kú«9ýñÅæ¿@ÿ¾Ñ©R‰Z Úµ<ÐôÒKþÔCþÔNßÇ’êÔ¥ú¨"ü½QüëµèØËÿâ@}UºîèâyP ýÎ\þýñœu0ýä6Ú›7ùôêóñûöýÿù›?ØÇ¯ã©@å±-ûß}÷¹Ô³gÿÿÿ!ù?,àÀŸpH,‹‹‹ry$Z‹Ô²´4Ÿˆ¶0 u(kÑÒy=m$0ÂHK £Ê¤ï=Af 1  ‚0pBI 6-3> €C +   7 ™›*   +<¨‹R,;š‹¹\Í4))Ç? $%%:5&ãbB%'€58ÕB$(í .2(è™rC&r Bà D`Àa“s< Wï¢Ç ;rt-4.2.12/share/static/RichText/plugins/smiley/images/regular_smile.gif000644 000765 000024 00000000702 12555754775 026576 0ustar00sartakstaff000000 000000 GIF89aÕ?ý狾†ÿå[± ÿçgÿÞSù»'ÿâRý¶ÿ¶ÿÿþÿâIÿßKÿÃ!ÿÝGÿÚFÿ²þºÿ³þï ‰Z j0¥‘cÚŸÿË,üëµþ÷ØÿÝCžh ÿþúõ±ÿÖ=þÆ&ÿâWÿÜ;öÊ4ÿýöÿ¾ ûß}þÒLþýüÿÎ#ÐÿåUþ»ÿÎ1îÁ3þýïóñûÍ»ÞÿØB®wèØËûâqûþÿ}Uº½§ÔÿçFÿÒ4æ¿@¥Ûa™—r½ÿÿÿ!ù?,ßÀŸpH,‹†òÁ<›ä¡À`>Άã è†Õ+¶¨]΂oõ£kŒ‡ŽÐ$3!ÀŽÂää~n/ w" |o$ˆ (&†}B$81’)07<6C+>=)54ª 9" #º©™JUà %-2 Ë?[#*  Þ×o?-;ðÙBn.òýÊ$ ÃÍÀ (pˆ A`7%"xðÐС‚ <Ø“p±£ÇE‚;rt-4.2.12/share/static/RichText/plugins/smiley/images/sad_smile.gif000644 000765 000024 00000000714 12555754775 025707 0ustar00sartakstaff000000 000000 GIF89aÕ?ÿÄ&ýç‹Ó•þºÿÿþÿÞSÿßKÿµé¦þåcø²ÿàMÿâQÿ²ÿÎ1ÿÝGÿ³ÿæ]‘cþèjj0¥ÿÖ<ÿâWþ¾ ÿÒ;ÿäYÿìtÿÚjt8—ÿØBžh ͻޚgvð¦ÿåUýÎ\ýñÅþÔCþÒL‰Z ûß}þ÷Øþï ÿþúúòãÿúçîÁ3èØË½§Ôå±-—kù°Ê”.ÿÒ4ÿÛGÿÛ0±ƒxêå÷ÿýöõ±üëµÚµ<”j«ÿÿÿ!ù?,éÀŸpH,‹äÂðx‰J£Àl.žIK$’±0 6+rIL¸–Å£Sq8®ÐÈD£Id¾¶JÍ=‚ZZ  ( (8=&#p? >,/”) C +9>7%0+žŸB":µ$,++)°?  $-<% **&ÀÁL دC.2'1ÞŽ?n"4öè ÁBH@" ðƒ'dÁ€¿.\°cÆB, @P à€Ç héñ‰É“(Ÿ;rt-4.2.12/share/static/RichText/plugins/smiley/images/shades_smile.gif000644 000765 000024 00000000701 12555754775 026403 0ustar00sartakstaff000000 000000 GIF89aÕ?ÿ×B›jÿãTöÃ<¨vÿÞSÿâ@ÿàLÿå[ÿÓ;Ýœþþþÿµÿ³Iy_!“œu0ÿÁ„IwçÈbG£t8—þÆ&ñº1ÿî]n0s‰Z æ¿@ëÊLÿìRíÏwØÇ¯j0¥Ô³g¿tè¸7ÿôoÚ›7ÿÜ;îÁ3a™šgvαšã©@±ƒxÿ²þ·ëžÿéIÑ©Rîèâõ¯÷µ¿†÷¹ýä6þº÷õðÿÐ3ÿÛ0ï±,ó¹#ûâdÿÿÿ!ù?,ÞÀŸpH,ȤPÀ<8ÊßA€`žNäÁ­ ž hñÃHL3˜vá"gâ©OîÎf3ñŠ„‚„„b?‚ƒ„‰Š%C!,œ 1œ %C>")(("&7!),§BSw¿++¸ ¹? a''=43. C à ÖŒ?::* ï 2á -ØD69ð/è¡ÓÕ‡*>@ wmà×PãZ‡EZh¬w-ŠÇ!A;rt-4.2.12/share/static/RichText/plugins/smiley/images/teeth_smile.gif000644 000765 000024 00000000672 12555754775 026254 0ustar00sartakstaff000000 000000 GIF89aÕ?n3Ÿ‘cÿÍ4þæeüä†ÿÙCþÝZÿÿÿÿå[ÿµÿÕ<Ù®6ÿûêÿÃ'ÿâQÿàMÿßJþ½!ÿýöüëµ®wÿâWØÇ¯­‰>÷ôùÿåUûúø™jÿÒ4ÿÚjýñÅþ·½§Ô¹‡"a™ð·IßÇ’—r½ù°îèâšgv÷õð± ûöóþÒL랉Z ÿìtë«ÿÆ.åÝò}Uºÿÿûþï Í»ÞÿæQþÏ@¥ÛèØËýÙOÿÁÿßOÿË,ÿÿÿ!ù?,×ÀŸpH,d²P8I‡£÷`N(Á­L“ lQ;(#¼Á®.&_4Éáxä¶{ ¡Åkƒ>mBI‚ 6 9324, C 2 %<—ˆ*""( ¨?[7;#  – ƘI8 8>1·Æ¸K7 ÙÚÔbB '+):&ÇO 0ƒÝ ßC!$,X¸°!„±}ï"PàbC‹ƒN†øóG-¢Å‹‰;rt-4.2.12/share/static/RichText/plugins/smiley/images/thumbs_down.gif000644 000765 000024 00000000630 12555754775 026275 0ustar00sartakstaff000000 000000 GIF89aÕ*ý´KþÅTü½QÚ›7þÒLí©5þ¾?ø¸;ÿÒ;þÏ@ú«9¹‡"Ê”.ã©@â›"þÌHÐê¢,ß™ýÉ<®wëžú§D¢t—kÿÖ=‘c¿†û°$ð¦þÔCýÎ\×§0þ×Qú¨"ÿÚEþÝZç üÚMü´,ð·Ižh ÿÿÿ!ù*,µ@•pH,DyT Ô’©„¶Ñ˜•€@ȄȌ@‹Á×)~$ˆz±:¡aGL vP†Y )„Pn € BVPX  Ÿ* …""j*²Â%¯°ÕªÌ¿TÒ']TE ¢âFêçE ìC  Ûò÷òGA;rt-4.2.12/share/static/RichText/plugins/smiley/images/thumbs_up.gif000644 000765 000024 00000000614 12555754775 025754 0ustar00sartakstaff000000 000000 GIF89aÕ þÅTü½Qã©@Ú›7Ê”.ð·Iê¢,í©5â›"¹‡"ý´KýÎ\×§0ýÉ<þÏ@ýÂ5Ðþ¾?ø¸;è¸7®wöÃ<þÌHú§Dú«9¢tþÒLå±-ß™æ¿@ü´,þÔCÿÿÿ!ù ,©@pH,‹Âq)\,æðŒJ‹@@p-.²…Cw¸"’q` *ƒ41ØïYdÙ.²€€Gmn C mYwŠB  •™v   ® C ¶ŒrB  À   ÖÉB Ô»ÙDêêcíîFA;rt-4.2.12/share/static/RichText/plugins/smiley/images/tongue_smile.gif000644 000765 000024 00000000676 12555754775 026450 0ustar00sartakstaff000000 000000 GIF89aÕ?ÿæe–e‹V üÚMº‡ÿÿþý²ó«ÿÖ=÷ÍDk1£ÿ·ÿúå±M ÿå[ÿàMíèøþ»ÿÍ(ÿâQÿÚEÓAÿâWÿÝCÿÁþï Ï‘Úµ<æ¿@ÿåUÿþúyP ÿýöüëµûâqùØGÿÝGÅ9þ¾ ß™ýñÅßÇ’}UºáO ë«ì‰%ßÔíÿÎ1èØËôÒKÿôZÿìRÿÚjûâ’ÿØBÿßPÿæQå±-è¸7ØÇ¯ÿÒ4Ã\—kÿÿÿ!ù?,ÛÀŸpH,‹”¤’r$>.ÊdòH"ÍçÄÁµP)ˆ«ñi˜^˜‡Á¡ è…Bƒ)Þ=y4mC. (  *! Š;!5")0"&›B‹823/6'ÉCa$1× nBa:%% öÊ«a =ý ç4©S¦E?r’¥Ë‚àÀ q4-l²†)jÜȱH;rt-4.2.12/share/static/RichText/plugins/smiley/images/tounge_smile.gif000644 000765 000024 00000000676 12555754775 026450 0ustar00sartakstaff000000 000000 GIF89aÕ?ÿæe–e‹V üÚMº‡ÿÿþý²ó«ÿÖ=÷ÍDk1£ÿ·ÿúå±M ÿå[ÿàMíèøþ»ÿÍ(ÿâQÿÚEÓAÿâWÿÝCÿÁþï Ï‘Úµ<æ¿@ÿåUÿþúyP ÿýöüëµûâqùØGÿÝGÅ9þ¾ ß™ýñÅßÇ’}UºáO ë«ì‰%ßÔíÿÎ1èØËôÒKÿôZÿìRÿÚjûâ’ÿØBÿßPÿæQå±-è¸7ØÇ¯ÿÒ4Ã\—kÿÿÿ!ù?,ÛÀŸpH,‹”¤’r$>.ÊdòH"ÍçÄÁµP)ˆ«ñi˜^˜‡Á¡ è…Bƒ)Þ=y4mC. (  *! Š;!5")0"&›B‹823/6'ÉCa$1× nBa:%% öÊ«a =ý ç4©S¦E?r’¥Ë‚àÀ q4-l²†)jÜȱH;rt-4.2.12/share/static/RichText/plugins/smiley/images/whatchutalkingabout_smile.gif000644 000765 000024 00000000704 12555754775 031207 0ustar00sartakstaff000000 000000 GIF89aÕ?ÿÕ;þêˆ÷×Rþ´ÿÿþÿúçÿÚDþésýÍ2î¨þÊXö·&ÿàM•hþÂ%þÆ.ÿäTÿáIþ·ÿË,ø°‰Z ýñÅþï ¿†è¸7ø²õ±þºÿìRj0¥¹‡"Ê”.ïëøûß}ëÊLÿØ*üëµÿÎ#—r½Í»Þÿî]}Uºþ÷ØÿåL¥ÛßÔíÿôoÿÁîÁ3ÿ· ÿßJ¢tñº1÷ôùÿýóæ¿@ÿæ]çÈbõÐDþÔCÐûâdÿÿÿ!ù?,áÀŸpH,ÈäÁdt:å’™‚0 PɈ@ Qjôñ&Ûb×Ûhè^¸ 1A#‘Ãêv+\r%"w!$6.7%i?x(*''C,‰*-"&"!(Œ¦B»  §V$Ë&02¶—Î >;1Ý5 ÔÕ§3; êë=â–?3øàÖB ,{°`à ª½ó7ƒ&PÈe…‹áøIXhÄ¢ÆqRB ;rt-4.2.12/share/static/RichText/plugins/smiley/images/wink_smile.gif000644 000765 000024 00000000712 12555754775 026106 0ustar00sartakstaff000000 000000 GIF89aÕ?•gû»#¥uج4ÿÛEÿâSþåcÿÃ"ÿÞIÿáKÿÿþþºÿ´ÿàMÿÒ;ÿìtþ³ÿÖ=þ¾?þÌH¹‡"yP þèjj0¥Ðÿ·ÿÎ1‰Z þ·­‰>ÿæ]¿†Ñ©Rô¾kÿåLÿôoßÔíöÒEýñÅôÒKð¦û¶ÿÎ#ɉXa™æ¿@ÿî]õ±±ƒxÿÀÿÒ4ëÊLÿßPÿì„üëµüÃ2ñº1û´ÿÜ;ë«óÎBþÏ@öÃ<ÿÿÿ!ù?,çÀŸpH,‰¤c99ÉB¡a6œÐ‚Çà¡"ÇäZ„& –‡¡pâùn“q1™~<,-AeC‘‰ç5v!!/*Kd? # #,$ 6KC v“ +™ =1žB '3§0&&7 ­?.% :  1 ½"ÃÖÍCÑ; ?8äêìeýôðaÈ!A‚;! X€âà (00ˆå@Š2p€Àñ ‘~9vsB²¤É#A;rt-4.2.12/share/static/RichText/plugins/smiley/dialogs/smiley.js000644 000765 000024 00000006250 12555754775 025276 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add("smiley",function(f){for(var e=f.config,a=f.lang.smiley,h=e.smiley_images,g=e.smiley_columns||8,i,k=function(j){var c=j.data.getTarget(),b=c.getName();if("a"==b)c=c.getChild(0);else if("img"!=b)return;var b=c.getAttribute("cke_src"),a=c.getAttribute("title"),c=f.document.createElement("img",{attributes:{src:b,"data-cke-saved-src":b,title:a,alt:a,width:c.$.width,height:c.$.height}});f.insertElement(c);i.hide();j.data.preventDefault()},n=CKEDITOR.tools.addFunction(function(a,c){var a= new CKEDITOR.dom.event(a),c=new CKEDITOR.dom.element(c),b;b=a.getKeystroke();var d="rtl"==f.lang.dir;switch(b){case 38:if(b=c.getParent().getParent().getPrevious())b=b.getChild([c.getParent().getIndex(),0]),b.focus();a.preventDefault();break;case 40:if(b=c.getParent().getParent().getNext())(b=b.getChild([c.getParent().getIndex(),0]))&&b.focus();a.preventDefault();break;case 32:k({data:a});a.preventDefault();break;case d?37:39:if(b=c.getParent().getNext())b=b.getChild(0),b.focus(),a.preventDefault(!0); else if(b=c.getParent().getParent().getNext())(b=b.getChild([0,0]))&&b.focus(),a.preventDefault(!0);break;case d?39:37:if(b=c.getParent().getPrevious())b=b.getChild(0),b.focus(),a.preventDefault(!0);else if(b=c.getParent().getParent().getPrevious())b=b.getLast().getChild(0),b.focus(),a.preventDefault(!0)}}),d=CKEDITOR.tools.getNextId()+"_smiley_emtions_label",d=['
    '+a.options+"",'"],l=h.length,a=0;a');var m="cke_smile_label_"+a+"_"+CKEDITOR.tools.getNextNumber();d.push('");a%g==g-1&&d.push("")}if(a");d.push("")}d.push("
    "); e={type:"html",id:"smileySelector",html:d.join(""),onLoad:function(a){i=a.sender},focus:function(){var a=this;setTimeout(function(){a.getElement().getElementsByTag("a").getItem(0).focus()},0)},onClick:k,style:"width: 100%; border-collapse: separate;"};return{title:f.lang.smiley.title,minWidth:270,minHeight:120,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[e]}],buttons:[CKEDITOR.dialog.cancelButton]}});rt-4.2.12/share/static/RichText/plugins/showblocks/images/000755 000765 000024 00000000000 12555754775 024132 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/showblocks/images/block_address.png000644 000765 000024 00000000253 12555754775 027437 0ustar00sartakstaff000000 000000 ‰PNG  IHDR,¨bÝ«PLTE€€€ÿÿÿçÖ¬tRNSÿå·0JRIDAT(‘Õ; À0 Ťû_ºCLð'2thã‡/_‡QÀB‚J¸ö÷àšÑLÒž¢1Â$¯®ý2í^CøÅ9 Hm„˹«ž~ÓÔ1Â#µ”IEND®B`‚rt-4.2.12/share/static/RichText/plugins/showblocks/images/block_blockquote.png000644 000765 000024 00000000265 12555754775 030165 0ustar00sartakstaff000000 000000 ‰PNG  IHDR:‚Ò,PLTE€€€ÿÿÿçÖ¬tRNSÿå·0J\IDAT(ÏÍ’K!C_ïéYðQÇÄ!l†FK ‚ÚÁ=*0grȸÉ„=RG䅳ƢºQM¹B%*Tó{Pí®÷Ê<ÁmÂn>ZX&Üû÷Ï•€.b/ÔMÛ i‡5IEND®B`‚rt-4.2.12/share/static/RichText/plugins/showblocks/images/block_div.png000644 000765 000024 00000000210 12555754775 026565 0ustar00sartakstaff000000 000000 ‰PNG  IHDR<„tYPLTE€€€ÿÿÿçÖ¬tRNSÿå·0J/IDATWc`ÄHe``3àP‚«(X »(T‚(²Ñhn€;”d_P$ ±¯8Qe2IEND®B`‚rt-4.2.12/share/static/RichText/plugins/showblocks/images/block_h1.png000644 000765 000024 00000000177 12555754775 026327 0ustar00sartakstaff000000 000000 ‰PNG  IHDR5oÔ#PLTE€€€ÿÿÿçÖ¬tRNSÿå·0J&IDATÓc`D ÄŠ0@ht¼j°ê"F¢•x’,x:æï¼RªIEND®B`‚rt-4.2.12/share/static/RichText/plugins/showblocks/images/block_h2.png000644 000765 000024 00000000206 12555754775 026321 0ustar00sartakstaff000000 000000 ‰PNG  IHDR5oÔ#PLTE€€€ÿÿÿçÖ¬tRNSÿå·0J-IDATWc`D ÄŠ0@š‚ÈÁ©g@ÐèæÀ¬E2Y+  –w ä=eIEND®B`‚rt-4.2.12/share/static/RichText/plugins/showblocks/images/block_h3.png000644 000765 000024 00000000203 12555754775 026317 0ustar00sartakstaff000000 000000 ‰PNG  IHDR5oÔ#PLTE€€€ÿÿÿçÖ¬tRNSÿå·0J*IDATWc`D ÄŠ0@š‚ÈÁ©gÀ¦‹Àj².@-vÄäO?kSIEND®B`‚rt-4.2.12/share/static/RichText/plugins/showblocks/images/block_h4.png000644 000765 000024 00000000205 12555754775 026322 0ustar00sartakstaff000000 000000 ‰PNG  IHDRÞXo PLTE€€€ÿÿÿçÖ¬tRNSÿå·0J,IDATWc`Ä Ä 1@ht!FB@Ó¬Š,f<¦Y(B¨€šBƒ«ð=Yõ\IEND®B`‚rt-4.2.12/share/static/RichText/plugins/showblocks/images/block_h5.png000644 000765 000024 00000000205 12555754775 026323 0ustar00sartakstaff000000 000000 ‰PNG  IHDR5oÔ#PLTE€€€ÿÿÿçÖ¬tRNSÿå·0J,IDATWc`D ÄŠ0€ ‰`Sƒ$â1 ¤18sÐÕ ›ƒ¨%táL@ªÊIEND®B`‚rt-4.2.12/share/static/RichText/plugins/showblocks/images/block_h6.png000644 000765 000024 00000000201 12555754775 026320 0ustar00sartakstaff000000 000000 ‰PNG  IHDR5oÔ#PLTE€€€ÿÿÿçÖ¬tRNSÿå·0J(IDAT•c`D ÄŠ0@š‚ƒAR ‚] xì"ÏÍDu£âPZM²IEND®B`‚rt-4.2.12/share/static/RichText/plugins/showblocks/images/block_p.png000644 000765 000024 00000000167 12555754775 026255 0ustar00sartakstaff000000 000000 ‰PNG  IHDR ýµEPLTE€€€ÿÿÿçÖ¬tRNSÿå·0JIDAT[c`D „x @€ÄCf ó0TǃryI"µ?‡ˆæIEND®B`‚rt-4.2.12/share/static/RichText/plugins/showblocks/images/block_pre.png000644 000765 000024 00000000210 12555754775 026571 0ustar00sartakstaff000000 000000 ‰PNG  IHDR׳ÏZPLTE€€€ÿÿÿçÖ¬tRNSÿå·0J/IDATWc`Ä Hf``@ a‚Œ…‘ AQ Wja ²K0-…¼þcæCãIEND®B`‚rt-4.2.12/share/static/RichText/plugins/scayt/dialogs/000755 000765 000024 00000000000 12555754775 023254 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/scayt/LICENSE.md000644 000765 000024 00000002704 12555754775 023241 0ustar00sartakstaff000000 000000 Software License Agreement ========================== **CKEditor SCAYT Plugin** Copyright © 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. Licensed under the terms of any of the following licenses at your choice: * GNU General Public License Version 2 or later (the "GPL"): http://www.gnu.org/licenses/gpl.html * GNU Lesser General Public License Version 2.1 or later (the "LGPL"): http://www.gnu.org/licenses/lgpl.html * Mozilla Public License Version 1.1 or later (the "MPL"): http://www.mozilla.org/MPL/MPL-1.1.html You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. Sources of Intellectual Property Included in this plugin -------------------------------------------------------- Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. Trademarks ---------- CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. rt-4.2.12/share/static/RichText/plugins/scayt/README.md000644 000765 000024 00000001712 12555754775 023112 0ustar00sartakstaff000000 000000 CKEditor SCAYT Plugin ===================== This plugin brings Spell Check As You Type (SCAYT) into CKEditor. SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. Installation ------------ 1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation. 2. Enable the "scayt" plugin in the CKEditor configuration file (config.js): config.extraPlugins = 'scayt'; That's all. SCAYT will appear on the editor toolbar and will be ready to use. License ------- Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). See LICENSE.md for more information. Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). rt-4.2.12/share/static/RichText/plugins/scayt/dialogs/options.js000644 000765 000024 00000017475 12555754775 025323 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add("scaytcheck",function(j){function w(){return"undefined"!=typeof document.forms["optionsbar_"+a]?document.forms["optionsbar_"+a].options:[]}function x(b,a){if(b){var e=b.length;if(void 0==e)b.checked=b.value==a.toString();else for(var d=0;d'+b+"")}function o(b){f.getById("dic_message_"+a).setHtml(''+b+"")} function p(b){for(var b=(""+b).split(","),a=0,e=b.length;a
    \t
    \t
    \t\t\t\t\t
    \t
    \t\t\t\t\t
    \t
    \t\t\t\t
    \t
    \t\t\t\t\t
    '}]},{id:"langs",label:g.languagesTab,elements:[{type:"html",id:"langs",html:'
    \t
    \t
    '}]},{id:"dictionaries",label:g.dictionariesTab,elements:[{type:"html",style:"",id:"dictionaries",html:'
    \t
    \t
    Dictionary name
    \t\t\t\t\t
    \t\t\t\t\t\t
    \t\t
    \t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \t
    '}]},{id:"about",label:g.aboutTab,elements:[{type:"html",id:"about",style:"margin: 5px 5px;",html:'
    '}]}],B={title:g.title,minWidth:360,minHeight:220,onShow:function(){var b=this;b.data=j.fire("scaytDialog",{});b.options=b.data.scayt_control.option();b.chosed_lang=b.sLang=b.data.scayt_control.sLang;if(!b.data||!b.data.scayt||!b.data.scayt_control)alert("Error loading application service"), b.hide();else{var a=0;s?b.data.scayt.getCaption(j.langCode||"en",function(e){0'+ h["button_"+d[c]]+"");f.getById("dic_info_"+a).setHtml(h.dic_info)}if(1==l[0])for(c in v)d="label_"+v[c],g=f.getById(d+"_"+a),"undefined"!=typeof g&&("undefined"!=typeof h[d]&&"undefined"!=typeof k.options[v[c]])&&(g.setHtml(h[d]),g.getParent().$.style.display="block");d='

    '+h.version+window.scayt.getAboutInfo().version.toString()+"

    "+h.about_throwt_copy+"

    ";f.getById("scayt_about_"+a).setHtml(d);d=function(a,b){var c=f.createElement("label"); c.setAttribute("for","cke_option"+a);c.setHtml(b[a]);k.sLang==a&&(k.chosed_lang=a);var d=f.createElement("div"),e=CKEDITOR.dom.element.createFromHtml('');e.on("click",function(){this.$.checked=true;k.chosed_lang=a});d.append(e);d.append(c);return{lang:b[a],code:a,radio:d}};if(1==l[1]){for(c in e.rtl)i[i.length]=d(c,e.ltr);for(c in e.ltr)i[i.length]=d(c,e.ltr);i.sort(function(a,b){return b.lang> a.lang?-1:1});e=f.getById("scayt_lcol_"+a);d=f.getById("scayt_rcol_"+a);for(c=0;c var doc = document; doc.open(); doc.write( window.opener._cke_htmlToLoad ); doc.close(); delete window.opener._cke_htmlToLoad; rt-4.2.12/share/static/RichText/plugins/pastefromword/filter/000755 000765 000024 00000000000 12555754775 024670 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/pastefromword/filter/default.js000644 000765 000024 00000033154 12555754775 026660 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ (function(){function z(a){for(var a=a.toUpperCase(),b=A.length,c=0,d=0;do)&&(w=a-o);o=a;b["cke:indent"]=w&&Math.ceil(a/w)+1||1}],[/^mso-list$/,null,function(a){var a=a.split(" "),c=Number(a[0].match(/\d+/)),a=Number(a[1].match(/\d+/));1==a&&(c!==x&&(b["cke:reset"]=1),x=c);b["cke:indent"]=a}]])(b.style,a)||""),b["cke:indent"]||(o=0,b["cke:indent"]= 1),CKEDITOR.tools.extend(b,c.attributes),!0;x=o=w=null;return!1},getStyleComponents:function(){var a=CKEDITOR.dom.element.createFromHtml('
    ',CKEDITOR.document);CKEDITOR.document.getBody().append(a);return function(b,c,d){a.setStyle(b,c);for(var b={},c=d.length,e=0;ef)a.push(g=new CKEDITOR.htmlParser.element(l)),g.add(c),h.add(g);else{if(eb.size?"small":"medium")+";",delete b.size),a.name= "span",a.addStyle(c))}},span:function(a){if(l(a.parent))return!1;a.filterChildren();if(k(a))return delete a.name,null;if(l(a)){var b=a.firstChild(function(a){return a.value||"img"==a.name}),c=(b=b&&(b.value||"l."))&&b.match(/^(?:[(]?)([^\s]+?)([.)]?)$/);if(c)return b=i(c,b),(a=a.getAncestor("span"))&&/ mso-hide:\s*all|display:\s*none /.test(a.attributes.style)&&(b.attributes["cke:ignored"]=1),b}if(c=(b=a.attributes)&&b.style)b.style=f([["line-height"],[/^font-family$/,null,!n?g(d.font_style,"family"): null],[/^font-size$/,null,!n?g(d.fontSize_style,"size"):null],[/^color$/,null,!n?g(d.colorButton_foreStyle,"color"):null],[/^background-color$/,null,!n?g(d.colorButton_backStyle,"color"):null]])(c,a)||"";b.style||delete b.style;CKEDITOR.tools.isEmpty(b)&&delete a.name;return null},b:h(d.coreStyles_bold),i:h(d.coreStyles_italic),u:h(d.coreStyles_underline),s:h(d.coreStyles_strike),sup:h(d.coreStyles_superscript),sub:h(d.coreStyles_subscript),a:function(a){var b=a.attributes;b&&!b.href&&b.name?delete a.name: CKEDITOR.env.webkit&&(b.href&&b.href.match(/file:\/\/\/[\S]+#/i))&&(b.href=b.href.replace(/file:\/\/\/[^#]+/i,""))},"cke:listbullet":function(a){a.getAncestor(/h\d/)&&!d.pasteFromWordNumberedHeadingToList&&delete a.name}},attributeNames:[[/^onmouse(:?out|over)/,""],[/^onload$/,""],[/(?:v|o):\w+/,""],[/^lang/,""]],attributes:{style:f(o?[[/^list-style-type$/,null],[/^margin$|^margin-(?!bottom|top)/,null,function(a,b,c){if(b.name in{p:1,div:1}){b="ltr"==d.contentsLangDirection?"margin-left":"margin-right"; if("margin"==c)a=s(c,a,[b])[b];else if(c!=b)return null;if(a&&!E.test(a))return[b,a]}return null}],[/^clear$/],[/^border.*|margin.*|vertical-align|float$/,null,function(a,b){if("img"==b.name)return a}],[/^width|height$/,null,function(a,b){if(b.name in{table:1,td:1,th:1,img:1})return a}]]:[[/^mso-/],[/-color$/,null,function(a){if("transparent"==a)return!1;if(CKEDITOR.env.gecko)return a.replace(/-moz-use-text-color/g,"transparent")}],[/^margin$/,E],["text-indent","0cm"],["page-break-before"],["tab-stops"], ["display","none"],n?[/font-?/]:null],o),width:function(a,c){if(c.name in b.$tableContent)return!1},border:function(a,c){if(c.name in b.$tableContent)return!1},"class":a,bgcolor:a,valign:o?a:function(a,b){b.addStyle("vertical-align",a);return!1}},comment:!CKEDITOR.env.ie?function(a,b){var c=a.match(//),d=a.match(/^\[if !supportLists\]([\s\S]*?)\[endif\]$/);return d?(d=(c=d[1]||c&&"l.")&&c.match(/>(?:[(]?)([^\s]+?)([.)]?)]*o:href=['"](.*?)['"]/))&&d[1])&&(c.attributes.src=d),c):!1}:a}}},G=function(){this.dataFilter=new CKEDITOR.htmlParser.filter};G.prototype={toHtml:function(a){var a=CKEDITOR.htmlParser.fragment.fromHtml(a),b=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(b,this.dataFilter);return b.getHtml(!0)}};CKEDITOR.cleanWord=function(a,b){CKEDITOR.env.gecko&&(a=a.replace(/(<\!--\[if[^<]*?\])--\>([\S\s]*?)<\!--(\[endif\]--\>)/gi,"$1$2$3"));CKEDITOR.env.webkit&& (a=a.replace(/(class="MsoListParagraph[^>]+><\!--\[if !supportLists\]--\>)([^<]+)(<\!--\[endif\]--\>)/gi,"$1$2$3"));var c=new G,d=c.dataFilter;d.addRules(CKEDITOR.plugins.pastefromword.getRules(b));b.fire("beforeCleanWord",{filter:d});try{a=c.toHtml(a)}catch(e){alert(b.lang.pastefromword.error)}a=a.replace(/cke:.*?".*?"/g,"");a=a.replace(/style=""/g,"");return a=a.replace(//g,"")}})();rt-4.2.12/share/static/RichText/plugins/pagebreak/images/000755 000765 000024 00000000000 12555754775 023675 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/pagebreak/images/pagebreak.gif000644 000765 000024 00000000066 12555754775 026307 0ustar00sartakstaff000000 000000 GIF89a€™™™ÿÿÿ!ù, DމÀío”\°²)A;rt-4.2.12/share/static/RichText/plugins/magicline/images/000755 000765 000024 00000000000 12555754775 023704 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/magicline/images/icon.png000644 000765 000024 00000000254 12555754775 025343 0ustar00sartakstaff000000 000000 ‰PNG  IHDR ft¾bKGDùC» pHYs  šœLIDATÓ…1À0ÏUþÿÚ¬‰»”¨BÐzb8Ì QÄvŒ Xú 0øŽ®bûèÜ´I Pun¤†ªm‡Óì¤ÒvcžÓB7/¬'ܸ–³êIEND®B`‚rt-4.2.12/share/static/RichText/plugins/liststyle/dialogs/000755 000765 000024 00000000000 12555754775 024165 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/liststyle/dialogs/liststyle.js000644 000765 000024 00000005575 12555754775 026573 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ (function(){function d(c,d){var b;try{b=c.getSelection().getRanges()[0]}catch(f){return null}b.shrink(CKEDITOR.SHRINK_TEXT);return c.elementPath(b.getCommonAncestor()).contains(d,1)}function e(c,e){var b=c.lang.liststyle;if("bulletedListStyle"==e)return{title:b.bulletedTitle,minWidth:300,minHeight:50,contents:[{id:"info",accessKey:"I",elements:[{type:"select",label:b.type,id:"type",align:"center",style:"width:150px",items:[[b.notset,""],[b.circle,"circle"],[b.disc,"disc"],[b.square,"square"]],setup:function(a){this.setValue(a.getStyle("list-style-type")|| h[a.getAttribute("type")]||a.getAttribute("type")||"")},commit:function(a){var b=this.getValue();b?a.setStyle("list-style-type",b):a.removeStyle("list-style-type")}}]}],onShow:function(){var a=this.getParentEditor();(a=d(a,"ul"))&&this.setupContent(a)},onOk:function(){var a=this.getParentEditor();(a=d(a,"ul"))&&this.commitContent(a)}};if("numberedListStyle"==e){var g=[[b.notset,""],[b.lowerRoman,"lower-roman"],[b.upperRoman,"upper-roman"],[b.lowerAlpha,"lower-alpha"],[b.upperAlpha,"upper-alpha"], [b.decimal,"decimal"]];(!CKEDITOR.env.ie||7²¯#¯¤µNR(„¤œ-/KÙqdϲdß²d?–Ï++r{~.$zÛÛÁÛ’¢µ†7 îV1=5…¦çÁÍdàº.þììàdk †ÇA'ʼš™ÁwÏKv*…‰\/³Y¸®‹í6¾5É{*þ‘{oŽmx ì©Öƒ¸ÿhp/ ·A'ð‹„ß×j˜’#Æ j——ør}´e¡uw‡‹›(jl Ï"x8 7hû>Ö®®ÚN.W }ñluu¼Q.ã°^"˜ž€cÿ†”Ïç%ZãÉ‘ï\"ùQºÝî× ¹m6}’ïIN’1æMìc‚èOÇJ©ì\±¨4Œ1¿GÞ`”Œ1µ~ä«°Y©T`󩀿×ÛŒ%m'IEND®B`‚rt-4.2.12/share/static/RichText/plugins/link/dialogs/anchor.js000644 000765 000024 00000003614 12555754775 024702 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add("anchor",function(c){var d=function(a){this._.selectedElement=a;this.setValueOf("info","txtName",a.data("cke-saved-name")||"")};return{title:c.lang.link.anchor.title,minWidth:300,minHeight:60,onOk:function(){var a=CKEDITOR.tools.trim(this.getValueOf("info","txtName")),a={id:a,name:a,"data-cke-saved-name":a};if(this._.selectedElement)this._.selectedElement.data("cke-realelement")?(a=c.document.createElement("a",{attributes:a}),c.createFakeElement(a,"cke_anchor","anchor").replace(this._.selectedElement)): this._.selectedElement.setAttributes(a);else{var b=c.getSelection(),b=b&&b.getRanges()[0];b.collapsed?(CKEDITOR.plugins.link.synAnchorSelector&&(a["class"]="cke_anchor_empty"),CKEDITOR.plugins.link.emptyAnchorFix&&(a.contenteditable="false",a["data-cke-editable"]=1),a=c.document.createElement("a",{attributes:a}),CKEDITOR.plugins.link.fakeAnchor&&(a=c.createFakeElement(a,"cke_anchor","anchor")),b.insertNode(a)):(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(a["class"]="cke_anchor"),a=new CKEDITOR.style({element:"a", attributes:a}),a.type=CKEDITOR.STYLE_INLINE,c.applyStyle(a))}},onHide:function(){delete this._.selectedElement},onShow:function(){var a=c.getSelection(),b=a.getSelectedElement();if(b)CKEDITOR.plugins.link.fakeAnchor?((a=CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b))&&d.call(this,a),this._.selectedElement=b):b.is("a")&&b.hasAttribute("name")&&d.call(this,b);else if(b=CKEDITOR.plugins.link.getSelectedLink(c))d.call(this,b),a.selectElement(b);this.getContentElement("info","txtName").focus()},contents:[{id:"info", label:c.lang.link.anchor.title,accessKey:"I",elements:[{type:"text",id:"txtName",label:c.lang.link.anchor.name,required:!0,validate:function(){return!this.getValue()?(alert(c.lang.link.anchor.errorName),!1):!0}}]}]}});rt-4.2.12/share/static/RichText/plugins/link/dialogs/link.js000644 000765 000024 00000037521 12555754775 024371 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add("link",function(n){var p,q;function r(a){return a.replace(/'/g,"\\$&")}function t(a){var g,c=p,d,e;g=[q,"("];for(var b=0;b0?this.getElement().show():this.getElement().hide()},children:[{type:"hbox",id:"selectAnchor",children:[{type:"select",id:"anchorName","default":"",label:b.anchorName,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");for(var b=0;b0?this.getElement().show():this.getElement().hide()}}]},{type:"html",id:"noAnchors",style:"text-align: center;",html:'
    '+CKEDITOR.tools.htmlEncode(b.noAnchors)+"
    ",focus:!0,setup:function(a){a.anchors.length<1?this.getElement().show():this.getElement().hide()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}},{type:"vbox",id:"emailOptions",padding:1,children:[{type:"text", id:"emailAddress",label:b.emailAddress,required:!0,validate:function(){var a=this.getDialog();return!a.getContentElement("info","linkType")||a.getValueOf("info","linkType")!="email"?true:CKEDITOR.dialog.validate.notEmpty(b.noEmail).apply(this)},setup:function(a){a.email&&this.setValue(a.email.address);(a=this.getDialog().getContentElement("info","linkType"))&&a.getValue()=="email"&&this.select()},commit:function(a){if(!a.email)a.email={};a.email.address=this.getValue()}},{type:"text",id:"emailSubject", label:b.emailSubject,setup:function(a){a.email&&this.setValue(a.email.subject)},commit:function(a){if(!a.email)a.email={};a.email.subject=this.getValue()}},{type:"textarea",id:"emailBody",label:b.emailBody,rows:3,"default":"",setup:function(a){a.email&&this.setValue(a.email.body)},commit:function(a){if(!a.email)a.email={};a.email.body=this.getValue()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}}]},{id:"target",label:b.target,title:b.target,elements:[{type:"hbox", widths:["50%","50%"],children:[{type:"select",id:"linkTargetType",label:i.target,"default":"notSet",style:"width : 100%;",items:[[i.notSet,"notSet"],[b.targetFrame,"frame"],[b.targetPopup,"popup"],[i.targetNew,"_blank"],[i.targetTop,"_top"],[i.targetSelf,"_self"],[i.targetParent,"_parent"]],onChange:s,setup:function(a){a.target&&this.setValue(a.target.type||"notSet");s.call(this)},commit:function(a){if(!a.target)a.target={};a.target.type=this.getValue()}},{type:"text",id:"linkTargetName",label:b.targetFrameName, "default":"",setup:function(a){a.target&&this.setValue(a.target.name)},commit:function(a){if(!a.target)a.target={};a.target.name=this.getValue().replace(/\W/gi,"")}}]},{type:"vbox",width:"100%",align:"center",padding:2,id:"popupFeatures",children:[{type:"fieldset",label:b.popupFeatures,children:[{type:"hbox",children:[{type:"checkbox",id:"resizable",label:b.popupResizable,setup:j,commit:l},{type:"checkbox",id:"status",label:b.popupStatusBar,setup:j,commit:l}]},{type:"hbox",children:[{type:"checkbox", id:"location",label:b.popupLocationBar,setup:j,commit:l},{type:"checkbox",id:"toolbar",label:b.popupToolbar,setup:j,commit:l}]},{type:"hbox",children:[{type:"checkbox",id:"menubar",label:b.popupMenuBar,setup:j,commit:l},{type:"checkbox",id:"fullscreen",label:b.popupFullScreen,setup:j,commit:l}]},{type:"hbox",children:[{type:"checkbox",id:"scrollbars",label:b.popupScrollBars,setup:j,commit:l},{type:"checkbox",id:"dependent",label:b.popupDependent,setup:j,commit:l}]},{type:"hbox",children:[{type:"text", widths:["50%","50%"],labelLayout:"horizontal",label:i.width,id:"width",setup:j,commit:l},{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:b.popupLeft,id:"left",setup:j,commit:l}]},{type:"hbox",children:[{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:i.height,id:"height",setup:j,commit:l},{type:"text",labelLayout:"horizontal",label:b.popupTop,widths:["50%","50%"],id:"top",setup:j,commit:l}]}]}]}]},{id:"upload",label:b.upload,title:b.upload,hidden:!0,filebrowser:"uploadButton", elements:[{type:"file",id:"upload",label:i.upload,style:"height:40px",size:29},{type:"fileButton",id:"uploadButton",label:i.uploadSubmit,filebrowser:"info:url","for":["upload","upload"]}]},{id:"advanced",label:b.advanced,title:b.advanced,elements:[{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",id:"advId",label:b.id,setup:k,commit:m},{type:"select",id:"advLangDir",label:b.langDir,"default":"",style:"width:110px",items:[[i.notSet,""],[b.langDirLTR,"ltr"], [b.langDirRTL,"rtl"]],setup:k,commit:m},{type:"text",id:"advAccessKey",width:"80px",label:b.acccessKey,maxLength:1,setup:k,commit:m}]},{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",label:b.name,id:"advName",setup:k,commit:m},{type:"text",label:b.langCode,id:"advLangCode",width:"110px","default":"",setup:k,commit:m},{type:"text",label:b.tabIndex,id:"advTabIndex",width:"80px",maxLength:5,setup:k,commit:m}]}]},{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","55%"],children:[{type:"text", label:b.advisoryTitle,"default":"",id:"advTitle",setup:k,commit:m},{type:"text",label:b.advisoryContentType,"default":"",id:"advContentType",setup:k,commit:m}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.cssClasses,"default":"",id:"advCSSClasses",setup:k,commit:m},{type:"text",label:b.charset,"default":"",id:"advCharset",setup:k,commit:m}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.rel,"default":"",id:"advRel",setup:k,commit:m},{type:"text",label:b.styles, "default":"",id:"advStyles",validate:CKEDITOR.dialog.validate.inlineStyle(n.lang.common.invalidInlineStyle),setup:k,commit:m}]}]}]}],onShow:function(){var a=this.getParentEditor(),b=a.getSelection(),c=null;(c=w.getSelectedLink(a))&&c.hasAttribute("href")?b.selectElement(c):c=null;this.setupContent(I.apply(this,[a,c]))},onOk:function(){var a={},b=[],c={},d=this.getParentEditor();this.commitContent(c);switch(c.type||"url"){case "url":var e=c.url&&c.url.protocol!=void 0?c.url.protocol:"http://",i=c.url&& CKEDITOR.tools.trim(c.url.url)||"";a["data-cke-saved-href"]=i.indexOf("/")===0?i:e+i;break;case "anchor":e=c.anchor&&c.anchor.id;a["data-cke-saved-href"]="#"+(c.anchor&&c.anchor.name||e||"");break;case "email":var f=c.email,e=f.address;switch(o){case "":case "encode":var i=encodeURIComponent(f.subject||""),h=encodeURIComponent(f.body||""),f=[];i&&f.push("subject="+i);h&&f.push("body="+h);f=f.length?"?"+f.join("&"):"";if(o=="encode"){e=["javascript:void(location.href='mailto:'+",u(e)];f&&e.push("+'", r(f),"'");e.push(")")}else e=["mailto:",e,f];break;default:e=e.split("@",2);f.name=e[0];f.domain=e[1];e=["javascript:",t(f)]}a["data-cke-saved-href"]=e.join("")}if(c.target)if(c.target.type=="popup"){for(var e=["window.open(this.href, '",c.target.name||"","', '"],j=["resizable","status","location","toolbar","menubar","fullscreen","scrollbars","dependent"],i=j.length,f=function(a){c.target[a]&&j.push(a+"="+c.target[a])},h=0;h>éÆÅìáßà……ß||ãÊÊæÜÜᇇᅅåÁÁ⸸ⱱ⪪㢢⬬ႂ人ÛQQ㸸ãËË䱱㿿Ýhhã§§ÛRR⎎Ýjjîëé㜜îðíãÔÔãÃÃÝabêÍËæ¯®îòð䥥ïòïâÉÉ⽽⮮âÄÄ⫫洴⢢㬬ìÛÙæ±±äµµä··â§§ã¦¦åº¹åÉÉà††ç»ºëÜÛëÛÚíãáàˆˆà‰‰ä¨¨âÊÊâËËãÀÀá„ƒàŠŠà‹‹ÚRRëÔÓᓓ㹹䠟ÚUUèÈÇÖ99Ø@@ÙJJåÎÎÖ77䪪ÙSSÙPPÞff躹似äÖÖ䲲᜜âÁÁâÃÃâ²²äÏÏâžá˜˜â‹‹çº¹âãššàŒŒàâ··ÞrsàzzYp¬ þIDATx^=аôH€ÑÛ6žmÛ¶mÛÆoÛ¶m۶͵í½ÉÌîWS™îÊé[IÐʯ¡‰£PPÐØ±c?BQQ±`4 M<b%:èââ蕸mÅ ­V« ă…^¯×jWlKLŒrtq9ˆF=Ôêõayyjõ¡ÿS«ÕypÀ„£FQУ“Z ©åäŒyüxü°°Å˜19àóŸ|ø#ŠÒž9fÇŽŒŒÐÐи¯L…Bp4f£Ð õ÷˜Ê‹³²JM}mÝŠ]S7§ZÅÅ™pΙ(ð;\Y¥Âý’´´ààà ü¥¥•”ÀЀ¢™§â¬^  ###CÌÁR(œœV‚ÛS3ѫԵ%0F)„\0 ƒÁ€]/  ¯}•ºõ¯MR\³±ÿ¶õôí¶Éx¶Û§[ßî?[Sö¯~´y‚p]qÀ°þzC‘È‚*œ´ o’j!*j¸nk€ýA¸]YW|ºeccòÜ)###EÔ’"ÕP‹`k1%†·jÖ]A—O·œM¶ÝuÍè·h:Am”Q(²Fê l·ÈÏxíªmròÆ–Ëè›õ¶WçÆNÚPù6ÜË>G£Ë†SPüÛZŠÑ;×výv$E¡†k‡ïXಹðÒ¥Âf“»óSY%‰B9k@Ÿ®¬-“Ñ:f˜¤¨¡A„;‹4™¬¬r˜D9ÿ)z@U^N£iºÌ²°ÐìºíÐ\Ë»Êj+IÐñʲ®r×¾Î×Ï$MÎÏW§Ñh|iå]²o£ ²Ÿi ^¾´ HÒI:²›ÿsÍÙ]R@€æ¥/͵k"¹âL§«—J[ÝÙ"“ew3VµJë›’’0JBû1–Ô$m•HV×µ÷š`á>c{]ÝjÉ*i½£ûÑïÀžIç­®+Ý­|}šx­ŒŽ)/‘´b´ uÿùìþ¼eóc¢ ùê1 æŽQ“«Œ˜Òeóî=ýƒ†žÞ»‰1U»wÓ]ó‡4Æ»¿x·g©pzßÙÝœ_ÍÈj¬–š]‘µu‘YJÿþg°§vh0Õ`®²Zå»xê“'TóÒ/«Zž;˜€šªå¹Jyµ×¯ö¸³¿¸éðáMÍ›/½*Â1ªªG«–*Ã+2ݽ^Xànv:¡§‡>—ñ/úܪ0*Au¹ò𪯞[Sq×K`Cü^\Úߢ÷¥»gz‡+KQ 6.½¯—®\:Õ~ê–‚€§øâl—Êé;÷zÙÀÐĨ€q{Y=„Ì£KÆ|ø|gg…3ŸïC¿ähf =‚Õ C«(kÀ¦¯—AgOv|ÑòIï&·±çÐ#`¨ûr4hÓ·“EŸÃ&¤‘X¼%!!a vÙ-}È|‚ê•‹ä{±qN)d2Q¼;ßÍgÎÍ-¿@LTùm¸”£ðt§6>-,Èwãyøû3‡:;;‡˜þþ< Ïß(ȧ9,oTŽÀWbŒÙÉåZZr8–K.wˆéÁ÷|!"§€¬Bt6¬ Œã}âr9ÏiXï=9—ÉôW`’îȆ݆;&— jñ,s‹¿çp¹ ?ÿ “騷-Eñw–žÓfÍz÷îSïÀbÔ,Yð2=s&ûˆóy<ÀÎ{'+c.lang.image.lockRatio+''+c.lang.image.resetSize+""}]},{type:"vbox",padding:1,children:[{type:"text",id:"txtBorder",width:"60px",label:c.lang.image.border,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateBorder),setup:function(a,b){if(a==f){var d;d=(d=(d=b.getStyle("border-width"))&&d.match(/^(\d+px)(?: \1 \1 \1)?$/))&& parseInt(d[1],10);isNaN(parseInt(d,10))&&(d=b.getAttribute("border"));this.setValue(d)}},commit:function(a,b,d){var c=parseInt(this.getValue(),10);a==f||4==a?(isNaN(c)?!c&&this.isChanged()&&b.removeStyle("border"):(b.setStyle("border-width",CKEDITOR.tools.cssLength(c)),b.setStyle("border-style","solid")),!d&&a==f&&b.removeAttribute("border")):8==a&&(b.removeAttribute("border"),b.removeStyle("border-width"),b.removeStyle("border-style"),b.removeStyle("border-color"))}},{type:"text",id:"txtHSpace", width:"60px",label:c.lang.image.hSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateHSpace),setup:function(a,b){if(a==f){var d,c;d=b.getStyle("margin-left");c=b.getStyle("margin-right");d=d&&d.match(o);c=c&&c.match(o);d=parseInt(d,10);c=parseInt(c,10);d=d==c&&d;isNaN(parseInt(d,10))&&(d=b.getAttribute("hspace"));this.setValue(d)}},commit:function(a,b,c){var e=parseInt(this.getValue(), 10);a==f||4==a?(isNaN(e)?!e&&this.isChanged()&&(b.removeStyle("margin-left"),b.removeStyle("margin-right")):(b.setStyle("margin-left",CKEDITOR.tools.cssLength(e)),b.setStyle("margin-right",CKEDITOR.tools.cssLength(e))),!c&&a==f&&b.removeAttribute("hspace")):8==a&&(b.removeAttribute("hspace"),b.removeStyle("margin-left"),b.removeStyle("margin-right"))}},{type:"text",id:"txtVSpace",width:"60px",label:c.lang.image.vSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this, "advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateVSpace),setup:function(a,b){if(a==f){var c,e;c=b.getStyle("margin-top");e=b.getStyle("margin-bottom");c=c&&c.match(o);e=e&&e.match(o);c=parseInt(c,10);e=parseInt(e,10);c=c==e&&c;isNaN(parseInt(c,10))&&(c=b.getAttribute("vspace"));this.setValue(c)}},commit:function(a,b,c){var e=parseInt(this.getValue(),10);a==f||4==a?(isNaN(e)?!e&&this.isChanged()&&(b.removeStyle("margin-top"),b.removeStyle("margin-bottom")): (b.setStyle("margin-top",CKEDITOR.tools.cssLength(e)),b.setStyle("margin-bottom",CKEDITOR.tools.cssLength(e))),!c&&a==f&&b.removeAttribute("vspace")):8==a&&(b.removeAttribute("vspace"),b.removeStyle("margin-top"),b.removeStyle("margin-bottom"))}},{id:"cmbAlign",type:"select",widths:["35%","65%"],style:"width:90px",label:c.lang.common.align,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.alignLeft,"left"],[c.lang.common.alignRight,"right"]],onChange:function(){g(this.getDialog());i.call(this, "advanced:txtdlgGenStyle")},setup:function(a,b){if(a==f){var c=b.getStyle("float");switch(c){case "inherit":case "none":c=""}!c&&(c=(b.getAttribute("align")||"").toLowerCase());this.setValue(c)}},commit:function(a,b,c){var e=this.getValue();if(a==f||4==a){if(e?b.setStyle("float",e):b.removeStyle("float"),!c&&a==f)switch(e=(b.getAttribute("align")||"").toLowerCase(),e){case "left":case "right":b.removeAttribute("align")}}else 8==a&&b.removeStyle("float")}}]}]},{type:"vbox",height:"250px",children:[{type:"html", id:"htmlPreview",style:"width:95%;",html:"
    "+CKEDITOR.tools.htmlEncode(c.lang.common.preview)+'
    '+(c.config.image_previewText||"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.")+ "
    "}]}]}]},{id:"Link",label:c.lang.image.linkTab,padding:0,elements:[{id:"txtUrl",type:"text",label:c.lang.common.url,style:"width: 100%","default":"",setup:function(a,b){if(2==a){var c=b.data("cke-saved-href");c||(c=b.getAttribute("href"));this.setValue(c)}},commit:function(a,b){if(2==a&&(this.getValue()||this.isChanged())){var d=decodeURI(this.getValue());b.data("cke-saved-href",d);b.setAttribute("href",d);if(this.getValue()||!c.config.image_removeLinkByEmptyURL)this.getDialog().addLink= !0}}},{type:"button",id:"browse",filebrowser:{action:"Browse",target:"Link:txtUrl",url:c.config.filebrowserImageBrowseLinkUrl},style:"float:right",hidden:!0,label:c.lang.common.browseServer},{id:"cmbTarget",type:"select",label:c.lang.common.target,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.targetNew,"_blank"],[c.lang.common.targetTop,"_top"],[c.lang.common.targetSelf,"_self"],[c.lang.common.targetParent,"_parent"]],setup:function(a,b){2==a&&this.setValue(b.getAttribute("target")|| "")},commit:function(a,b){2==a&&(this.getValue()||this.isChanged())&&b.setAttribute("target",this.getValue())}}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:c.lang.image.upload,elements:[{type:"file",id:"upload",label:c.lang.image.btnUpload,style:"height:40px",size:38},{type:"fileButton",id:"uploadButton",filebrowser:"info:txtUrl",label:c.lang.image.btnUpload,"for":["Upload","upload"]}]},{id:"advanced",label:c.lang.common.advancedTab,elements:[{type:"hbox",widths:["50%","25%","25%"], children:[{type:"text",id:"linkId",label:c.lang.common.id,setup:function(a,b){a==f&&this.setValue(b.getAttribute("id"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("id",this.getValue())}},{id:"cmbLangDir",type:"select",style:"width : 100px;",label:c.lang.common.langDir,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.langDirLtr,"ltr"],[c.lang.common.langDirRtl,"rtl"]],setup:function(a,b){a==f&&this.setValue(b.getAttribute("dir"))},commit:function(a, b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("dir",this.getValue())}},{type:"text",id:"txtLangCode",label:c.lang.common.langCode,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("lang"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("lang",this.getValue())}}]},{type:"text",id:"txtGenLongDescr",label:c.lang.common.longDescr,setup:function(a,b){a==f&&this.setValue(b.getAttribute("longDesc"))},commit:function(a,b){a==f&&(this.getValue()|| this.isChanged())&&b.setAttribute("longDesc",this.getValue())}},{type:"hbox",widths:["50%","50%"],children:[{type:"text",id:"txtGenClass",label:c.lang.common.cssClass,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("class"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("class",this.getValue())}},{type:"text",id:"txtGenTitle",label:c.lang.common.advisoryTitle,"default":"",onChange:function(){g(this.getDialog())},setup:function(a,b){a==f&&this.setValue(b.getAttribute("title"))}, commit:function(a,b){a==f?(this.getValue()||this.isChanged())&&b.setAttribute("title",this.getValue()):4==a?b.setAttribute("title",this.getValue()):8==a&&b.removeAttribute("title")}}]},{type:"text",id:"txtdlgGenStyle",label:c.lang.common.cssStyle,validate:CKEDITOR.dialog.validate.inlineStyle(c.lang.common.invalidInlineStyle),"default":"",setup:function(a,b){if(a==f){var c=b.getAttribute("style");!c&&b.$.style.cssText&&(c=b.$.style.cssText);this.setValue(c);var e=b.$.style.height,c=b.$.style.width, e=(e?e:"").match(k),c=(c?c:"").match(k);this.attributesInStyle={height:!!e,width:!!c}}},onChange:function(){i.call(this,"info:cmbFloat info:cmbAlign info:txtVSpace info:txtHSpace info:txtBorder info:txtWidth info:txtHeight".split(" "));g(this)},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("style",this.getValue())}}]}]}};CKEDITOR.dialog.add("image",function(c){return r(c,"image")});CKEDITOR.dialog.add("imagebutton",function(c){return r(c,"imagebutton")})})();rt-4.2.12/share/static/RichText/plugins/iframe/dialogs/000755 000765 000024 00000000000 12555754775 023374 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/iframe/images/000755 000765 000024 00000000000 12555754775 023217 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/iframe/images/placeholder.png000644 000765 000024 00000000701 12555754775 026205 0ustar00sartakstaff000000 000000 ‰PNG  IHDR;Më`Ò pHYs  šœ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFGIDATxÚì–Ñmƒ0@Ÿ«.àœÌ¬@Fˆä Â0B!¬àâ<Œà~pBUŠšJ¨>ùÃÂ~œÆ$çì¦9§{ ¥>Ø[dâLœ‰3ñ#G”âx( ”ZZQßQ2}/™®A.ÛöÁhJÝöJµ&%i·Û69 ÄH]K>B ,á[3¡xÖO§H kßiÅ8Ê”s9¦ÁéÏa Þ ±1ïôx’d³^sòp ª¸\bk±–Ó‰ï Ë’é:¼—Ex8Å$Þ¯Y1¯×”<Ÿ¥?Õ¸ëˆQ4ç^&ÎÄ™8¿Ÿ8‡R»áuîk÷¸ÍÄŒM:^IEND®B`‚rt-4.2.12/share/static/RichText/plugins/iframe/dialogs/iframe.js000644 000765 000024 00000005517 12555754775 025205 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ (function(){function c(b){var c=this instanceof CKEDITOR.ui.dialog.checkbox;b.hasAttribute(this.id)&&(b=b.getAttribute(this.id),c?this.setValue(e[this.id]["true"]==b.toLowerCase()):this.setValue(b))}function d(b){var c=""===this.getValue(),a=this instanceof CKEDITOR.ui.dialog.checkbox,d=this.getValue();c?b.removeAttribute(this.att||this.id):a?b.setAttribute(this.id,e[this.id][d]):b.setAttribute(this.att||this.id,d)}var e={scrolling:{"true":"yes","false":"no"},frameborder:{"true":"1","false":"0"}}; CKEDITOR.dialog.add("iframe",function(b){var f=b.lang.iframe,a=b.lang.common,e=b.plugins.dialogadvtab;return{title:f.title,minWidth:350,minHeight:260,onShow:function(){this.fakeImage=this.iframeNode=null;var a=this.getSelectedElement();a&&(a.data("cke-real-element-type")&&"iframe"==a.data("cke-real-element-type"))&&(this.fakeImage=a,this.iframeNode=a=b.restoreRealElement(a),this.setupContent(a))},onOk:function(){var a;a=this.fakeImage?this.iframeNode:new CKEDITOR.dom.element("iframe");var c={},d= {};this.commitContent(a,c,d);a=b.createFakeElement(a,"cke_iframe","iframe",!0);a.setAttributes(d);a.setStyles(c);this.fakeImage?(a.replace(this.fakeImage),b.getSelection().selectElement(a)):b.insertElement(a)},contents:[{id:"info",label:a.generalTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{id:"src",type:"text",label:a.url,required:!0,validate:CKEDITOR.dialog.validate.notEmpty(f.noUrl),setup:c,commit:d}]},{type:"hbox",children:[{id:"width",type:"text",style:"width:100%",labelLayout:"vertical", label:a.width,validate:CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1",a.width)),setup:c,commit:d},{id:"height",type:"text",style:"width:100%",labelLayout:"vertical",label:a.height,validate:CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1",a.height)),setup:c,commit:d},{id:"align",type:"select","default":"",items:[[a.notSet,""],[a.alignLeft,"left"],[a.alignRight,"right"],[a.alignTop,"top"],[a.alignMiddle,"middle"],[a.alignBottom,"bottom"]],style:"width:100%", labelLayout:"vertical",label:a.align,setup:function(a,b){c.apply(this,arguments);if(b){var d=b.getAttribute("align");this.setValue(d&&d.toLowerCase()||"")}},commit:function(a,b,c){d.apply(this,arguments);this.getValue()&&(c.align=this.getValue())}}]},{type:"hbox",widths:["50%","50%"],children:[{id:"scrolling",type:"checkbox",label:f.scrolling,setup:c,commit:d},{id:"frameborder",type:"checkbox",label:f.border,setup:c,commit:d}]},{type:"hbox",widths:["50%","50%"],children:[{id:"name",type:"text",label:a.name, setup:c,commit:d},{id:"title",type:"text",label:a.advisoryTitle,setup:c,commit:d}]},{id:"longdesc",type:"text",label:a.longDescr,setup:c,commit:d}]},e&&e.createAdvancedTab(b,{id:1,classes:1,styles:1})]}})})();rt-4.2.12/share/static/RichText/plugins/forms/dialogs/000755 000765 000024 00000000000 12555754775 023257 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/forms/images/000755 000765 000024 00000000000 12555754775 023102 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/forms/images/hiddenfield.gif000644 000765 000024 00000000151 12555754775 026025 0ustar00sartakstaff000000 000000 GIF89a‘ÿÿÿÿ€€€,BDŒ§™áã3¢Ú‹UÀÜÎ-HQ¨U"D*æˆ:(¥Û·Öµë˜d¸Ï¸ÍËù^:a/EÙén%™ êdJ§Ó«*a,¶Ú;rt-4.2.12/share/static/RichText/plugins/forms/dialogs/button.js000644 000765 000024 00000003351 12555754775 025132 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add("button",function(b){function d(a){var b=this.getValue();b?(a.attributes[this.id]=b,"name"==this.id&&(a.attributes["data-cke-saved-name"]=b)):(delete a.attributes[this.id],"name"==this.id&&delete a.attributes["data-cke-saved-name"])}return{title:b.lang.forms.button.title,minWidth:350,minHeight:150,onShow:function(){delete this.button;var a=this.getParentEditor().getSelection().getSelectedElement();a&&a.is("input")&&a.getAttribute("type")in{button:1,reset:1,submit:1}&&(this.button= a,this.setupContent(a))},onOk:function(){var a=this.getParentEditor(),b=this.button,d=!b,c=b?CKEDITOR.htmlParser.fragment.fromHtml(b.getOuterHtml()).children[0]:new CKEDITOR.htmlParser.element("input");this.commitContent(c);var e=new CKEDITOR.htmlParser.basicWriter;c.writeHtml(e);c=CKEDITOR.dom.element.createFromHtml(e.getHtml(),a.document);d?a.insertElement(c):(c.replace(b),a.getSelection().selectElement(c))},contents:[{id:"info",label:b.lang.forms.button.title,title:b.lang.forms.button.title,elements:[{id:"name", type:"text",label:b.lang.common.name,"default":"",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:d},{id:"value",type:"text",label:b.lang.forms.button.text,accessKey:"V","default":"",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:d},{id:"type",type:"select",label:b.lang.forms.button.type,"default":"button",accessKey:"T",items:[[b.lang.forms.button.typeBtn,"button"],[b.lang.forms.button.typeSbm,"submit"],[b.lang.forms.button.typeRst, "reset"]],setup:function(a){this.setValue(a.getAttribute("type")||"")},commit:d}]}]}});rt-4.2.12/share/static/RichText/plugins/forms/dialogs/checkbox.js000644 000765 000024 00000004231 12555754775 025403 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add("checkbox",function(d){return{title:d.lang.forms.checkboxAndRadio.checkboxTitle,minWidth:350,minHeight:140,onShow:function(){delete this.checkbox;var a=this.getParentEditor().getSelection().getSelectedElement();a&&"checkbox"==a.getAttribute("type")&&(this.checkbox=a,this.setupContent(a))},onOk:function(){var a,b=this.checkbox;b||(a=this.getParentEditor(),b=a.document.createElement("input"),b.setAttribute("type","checkbox"),a.insertElement(b));this.commitContent({element:b})},contents:[{id:"info", label:d.lang.forms.checkboxAndRadio.checkboxTitle,title:d.lang.forms.checkboxAndRadio.checkboxTitle,startupFocus:"txtName",elements:[{id:"txtName",type:"text",label:d.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"txtValue",type:"text",label:d.lang.forms.checkboxAndRadio.value, "default":"",accessKey:"V",setup:function(a){a=a.getAttribute("value");this.setValue(CKEDITOR.env.ie&&"on"==a?"":a)},commit:function(a){var b=a.element,c=this.getValue();c&&!(CKEDITOR.env.ie&&"on"==c)?b.setAttribute("value",c):CKEDITOR.env.ie?(c=new CKEDITOR.dom.element("input",b.getDocument()),b.copyAttributes(c,{value:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c):b.removeAttribute("value")}},{id:"cmbSelected",type:"checkbox",label:d.lang.forms.checkboxAndRadio.selected,"default":"", accessKey:"S",value:"checked",setup:function(a){this.setValue(a.getAttribute("checked"))},commit:function(a){var b=a.element;if(CKEDITOR.env.ie){var c=!!b.getAttribute("checked"),e=!!this.getValue();c!=e&&(c=CKEDITOR.dom.element.createFromHtml('",d.document),b.copyAttributes(c,{type:1,checked:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c)}else this.getValue()?b.setAttribute("checked","checked"):b.removeAttribute("checked")}}]}]}});rt-4.2.12/share/static/RichText/plugins/forms/dialogs/form.js000644 000765 000024 00000004120 12555754775 024555 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add("form",function(a){var d={action:1,id:1,method:1,enctype:1,target:1};return{title:a.lang.forms.form.title,minWidth:350,minHeight:200,onShow:function(){delete this.form;var b=this.getParentEditor().elementPath().contains("form",1);b&&(this.form=b,this.setupContent(b))},onOk:function(){var b,a=this.form,c=!a;c&&(b=this.getParentEditor(),a=b.document.createElement("form"),!CKEDITOR.env.ie&&a.append(b.document.createElement("br")));c&&b.insertElement(a);this.commitContent(a)},onLoad:function(){function a(b){this.setValue(b.getAttribute(this.id)|| "")}function e(a){this.getValue()?a.setAttribute(this.id,this.getValue()):a.removeAttribute(this.id)}this.foreach(function(c){d[c.id]&&(c.setup=a,c.commit=e)})},contents:[{id:"info",label:a.lang.forms.form.title,title:a.lang.forms.form.title,elements:[{id:"txtName",type:"text",label:a.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name", !1),a.removeAttribute("name"))}},{id:"action",type:"text",label:a.lang.forms.form.action,"default":"",accessKey:"T"},{type:"hbox",widths:["45%","55%"],children:[{id:"id",type:"text",label:a.lang.common.id,"default":"",accessKey:"I"},{id:"enctype",type:"select",label:a.lang.forms.form.encoding,style:"width:100%",accessKey:"E","default":"",items:[[""],["text/plain"],["multipart/form-data"],["application/x-www-form-urlencoded"]]}]},{type:"hbox",widths:["45%","55%"],children:[{id:"target",type:"select", label:a.lang.common.target,style:"width:100%",accessKey:"M","default":"",items:[[a.lang.common.notSet,""],[a.lang.common.targetNew,"_blank"],[a.lang.common.targetTop,"_top"],[a.lang.common.targetSelf,"_self"],[a.lang.common.targetParent,"_parent"]]},{id:"method",type:"select",label:a.lang.forms.form.method,accessKey:"M","default":"GET",items:[["GET","get"],["POST","post"]]}]}]}]}});rt-4.2.12/share/static/RichText/plugins/forms/dialogs/hiddenfield.js000644 000765 000024 00000003315 12555754775 026056 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add("hiddenfield",function(d){return{title:d.lang.forms.hidden.title,hiddenField:null,minWidth:350,minHeight:110,onShow:function(){delete this.hiddenField;var a=this.getParentEditor(),b=a.getSelection(),c=b.getSelectedElement();c&&(c.data("cke-real-element-type")&&"hiddenfield"==c.data("cke-real-element-type"))&&(this.hiddenField=c,c=a.restoreRealElement(this.hiddenField),this.setupContent(c),b.selectElement(this.hiddenField))},onOk:function(){var a=this.getValueOf("info","_cke_saved_name"); this.getValueOf("info","value");var b=this.getParentEditor(),a=CKEDITOR.env.ie&&!(8<=CKEDITOR.document.$.documentMode)?b.document.createElement(''):b.document.createElement("input");a.setAttribute("type","hidden");this.commitContent(a);a=b.createFakeElement(a,"cke_hidden","hiddenfield");this.hiddenField?(a.replace(this.hiddenField),b.getSelection().selectElement(a)):b.insertElement(a);return!0},contents:[{id:"info",label:d.lang.forms.hidden.title,title:d.lang.forms.hidden.title, elements:[{id:"_cke_saved_name",type:"text",label:d.lang.forms.hidden.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.setAttribute("name",this.getValue()):a.removeAttribute("name")}},{id:"value",type:"text",label:d.lang.forms.hidden.value,"default":"",accessKey:"V",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:function(a){this.getValue()?a.setAttribute("value",this.getValue()): a.removeAttribute("value")}}]}]}});rt-4.2.12/share/static/RichText/plugins/forms/dialogs/radio.js000644 000765 000024 00000003725 12555754775 024722 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add("radio",function(d){return{title:d.lang.forms.checkboxAndRadio.radioTitle,minWidth:350,minHeight:140,onShow:function(){delete this.radioButton;var a=this.getParentEditor().getSelection().getSelectedElement();a&&("input"==a.getName()&&"radio"==a.getAttribute("type"))&&(this.radioButton=a,this.setupContent(a))},onOk:function(){var a,b=this.radioButton,c=!b;c&&(a=this.getParentEditor(),b=a.document.createElement("input"),b.setAttribute("type","radio"));c&&a.insertElement(b);this.commitContent({element:b})}, contents:[{id:"info",label:d.lang.forms.checkboxAndRadio.radioTitle,title:d.lang.forms.checkboxAndRadio.radioTitle,elements:[{id:"name",type:"text",label:d.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"value",type:"text",label:d.lang.forms.checkboxAndRadio.value,"default":"", accessKey:"V",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:function(a){a=a.element;this.getValue()?a.setAttribute("value",this.getValue()):a.removeAttribute("value")}},{id:"checked",type:"checkbox",label:d.lang.forms.checkboxAndRadio.selected,"default":"",accessKey:"S",value:"checked",setup:function(a){this.setValue(a.getAttribute("checked"))},commit:function(a){var b=a.element;if(!CKEDITOR.env.ie&&!CKEDITOR.env.opera)this.getValue()?b.setAttribute("checked","checked"):b.removeAttribute("checked"); else{var c=b.getAttribute("checked"),e=!!this.getValue();c!=e&&(c=CKEDITOR.dom.element.createFromHtml('",d.document),b.copyAttributes(c,{type:1,checked:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c)}}}]}]}});rt-4.2.12/share/static/RichText/plugins/forms/dialogs/select.js000644 000765 000024 00000017666 12555754775 025114 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add("select",function(c){function h(a,b,e,d,c){a=f(a);d=d?d.createElement("OPTION"):document.createElement("OPTION");if(a&&d&&"option"==d.getName())CKEDITOR.env.ie?(isNaN(parseInt(c,10))?a.$.options.add(d.$):a.$.options.add(d.$,c),d.$.innerHTML=0c?0:c).insertBeforeMe(d):a.append(d),d.setText(0b)return!1;a=a.getChild(b);a.setText(e);a.setValue(d);return a}function k(a){for(a=f(a);a.getChild(0)&&a.getChild(0).remove(););}function j(a,b,e){var a=f(a),d=g(a);if(0>d)return!1;b=d+b;b=0>b?0:b;b=b>=a.getChildCount()?a.getChildCount()-1:b;if(d==b)return!1;var d=a.getChild(d),c=d.getText(),o=d.getValue();d.remove();d=h(a,c,o,!e?null:e,b);i(a,b);return d}function g(a){return(a=f(a))?a.$.selectedIndex:-1} function i(a,b){a=f(a);if(0>b)return null;var e=a.getChildren().count();a.$.selectedIndex=b>=e?e-1:b;return a}function l(a){return(a=f(a))?a.getChildren():!1}function f(a){return a&&a.domId&&a.getInputElement().$?a.getInputElement():a&&a.$?a:!1}return{title:c.lang.forms.select.title,minWidth:CKEDITOR.env.ie?460:395,minHeight:CKEDITOR.env.ie?320:300,onShow:function(){delete this.selectBox;this.setupContent("clear");var a=this.getParentEditor().getSelection().getSelectedElement();if(a&&"select"==a.getName()){this.selectBox= a;this.setupContent(a.getName(),a);for(var a=l(a),b=0;b"+CKEDITOR.tools.htmlEncode(c.lang.forms.select.lines)+"
    "}]},{type:"html",html:""+CKEDITOR.tools.htmlEncode(c.lang.forms.select.opAvail)+""},{type:"hbox",widths:["115px", "115px","100px"],children:[{type:"vbox",children:[{id:"txtOptName",type:"text",label:c.lang.forms.select.opText,style:"width:115px",setup:function(a){"clear"==a&&this.setValue("")}},{type:"select",id:"cmbName",label:"",title:"",size:5,style:"width:115px;height:75px",items:[],onChange:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbValue"),e=a.getContentElement("info","txtOptName"),a=a.getContentElement("info","txtOptValue"),d=g(this);i(b,d);e.setValue(this.getValue());a.setValue(b.getValue())}, setup:function(a,b){"clear"==a?k(this):"option"==a&&h(this,b.getText(),b.getText(),this.getDialog().getParentEditor().document)},commit:function(a){var b=this.getDialog(),e=l(this),d=l(b.getContentElement("info","cmbValue")),c=b.getContentElement("info","txtValue").getValue();k(a);for(var f=0;f',b.document),c.copyAttributes(d,{type:1}),d.replace(c),a.element=d)}else c.setAttribute("type",this.getValue())}}]}]}});rt-4.2.12/share/static/RichText/plugins/flash/dialogs/000755 000765 000024 00000000000 12555754775 023226 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/flash/images/000755 000765 000024 00000000000 12555754775 023051 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/flash/images/placeholder.png000644 000765 000024 00000000400 12555754775 026033 0ustar00sartakstaff000000 000000 ‰PNG  IHDR;õW·3PLTEÿ33ÿÿ""ÿÿDDÿˆˆÿªªÿÝÝÿwwÿÿÿÿîîÿ»»ÿ™™ÿUUÿiiÿÌÌÿffäM3jˆIDATx^í•I Ã0 5’׬ýÿkkÑÐ\ YzŒç"Ëx$ –…»,B½ q»»âH5Û„¥…À¦úÙ†ßîìawUÅÚÉ@ªJ¾äNÄHt7xû×I_×›šÖšmsªïÈV«ÙEˆWfž½@Ìr}uq"ꉲ&ñt¿o“‡t÷Ÿá €Ø/Ú=}•IEND®B`‚rt-4.2.12/share/static/RichText/plugins/flash/dialogs/flash.js000644 000765 000024 00000022616 12555754775 024670 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ (function(){function b(a,b,c){var k=n[this.id];if(k)for(var f=this instanceof CKEDITOR.ui.dialog.checkbox,e=0;e",a.getDocument());p.setAttributes({name:h.name,value:l});1>a.getChildCount()?p.appendTo(a):p.insertBefore(a.getFirst())}break;case i:if(!b)continue;l=this.getValue();f||e&&l===h["default"]?b.removeAttribute(h.name):b.setAttribute(h.name,l)}}}for(var g=1,o=2,i=4,n={id:[{type:g,name:"id"}],classid:[{type:g, name:"classid"}],codebase:[{type:g,name:"codebase"}],pluginspage:[{type:i,name:"pluginspage"}],src:[{type:o,name:"movie"},{type:i,name:"src"},{type:g,name:"data"}],name:[{type:i,name:"name"}],align:[{type:g,name:"align"}],"class":[{type:g,name:"class"},{type:i,name:"class"}],width:[{type:g,name:"width"},{type:i,name:"width"}],height:[{type:g,name:"height"},{type:i,name:"height"}],hSpace:[{type:g,name:"hSpace"},{type:i,name:"hSpace"}],vSpace:[{type:g,name:"vSpace"},{type:i,name:"vSpace"}],style:[{type:g, name:"style"},{type:i,name:"style"}],type:[{type:i,name:"type"}]},m="play loop menu quality scale salign wmode bgcolor base flashvars allowScriptAccess allowFullScreen".split(" "),j=0;j"+ CKEDITOR.tools.htmlEncode(a.lang.common.preview)+'
    ';return{title:a.lang.flash.title,minWidth:420,minHeight:310,onShow:function(){this.fakeImage=this.objectNode=this.embedNode=null;k=new CKEDITOR.dom.element("embed",a.document);var e=this.getSelectedElement();if(e&&e.data("cke-real-element-type")&& "flash"==e.data("cke-real-element-type")){this.fakeImage=e;var d=a.restoreRealElement(e),h=null,b=null,c={};if("cke:object"==d.getName()){h=d;d=h.getElementsByTag("embed","cke");0",a.document),e.setAttributes({classid:"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000",codebase:"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"})),i)d=CKEDITOR.dom.element.createFromHtml("",a.document),d.setAttributes({type:"application/x-shockwave-flash",pluginspage:"http://www.macromedia.com/go/getflashplayer"}),e&&d.appendTo(e); if(e)for(var b={},c=e.getElementsByTag("param","cke"),f=0,j=c.count();f')};a.preview=a.getContentElement("info","preview").getElement().getChild(3); this.on("change",function(a){a.data&&a.data.value&&b(a.data.value)});this.getInputElement().on("change",function(){b(this.getValue())},this)}},{type:"button",id:"browse",filebrowser:"info:src",hidden:!0,style:"display:inline-block;margin-top:10px;",label:a.lang.common.browseServer}]}]},{type:"hbox",widths:["25%","25%","25%","25%","25%"],children:[{type:"text",id:"width",style:"width:95px",label:a.lang.common.width,validate:CKEDITOR.dialog.validate.htmlLength(a.lang.common.invalidHtmlLength.replace("%1", a.lang.common.width)),setup:b,commit:c},{type:"text",id:"height",style:"width:95px",label:a.lang.common.height,validate:CKEDITOR.dialog.validate.htmlLength(a.lang.common.invalidHtmlLength.replace("%1",a.lang.common.height)),setup:b,commit:c},{type:"text",id:"hSpace",style:"width:95px",label:a.lang.flash.hSpace,validate:CKEDITOR.dialog.validate.integer(a.lang.flash.validateHSpace),setup:b,commit:c},{type:"text",id:"vSpace",style:"width:95px",label:a.lang.flash.vSpace,validate:CKEDITOR.dialog.validate.integer(a.lang.flash.validateVSpace), setup:b,commit:c}]},{type:"vbox",children:[{type:"html",id:"preview",style:"width:95%;",html:f}]}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:a.lang.common.upload,elements:[{type:"file",id:"upload",label:a.lang.common.upload,size:38},{type:"fileButton",id:"uploadButton",label:a.lang.common.uploadSubmit,filebrowser:"info:src","for":["Upload","upload"]}]},{id:"properties",label:a.lang.flash.propertiesTab,elements:[{type:"hbox",widths:["50%","50%"],children:[{id:"scale",type:"select",label:a.lang.flash.scale, "default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.scaleAll,"showall"],[a.lang.flash.scaleNoBorder,"noborder"],[a.lang.flash.scaleFit,"exactfit"]],setup:b,commit:c},{id:"allowScriptAccess",type:"select",label:a.lang.flash.access,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.accessAlways,"always"],[a.lang.flash.accessSameDomain,"samedomain"],[a.lang.flash.accessNever,"never"]],setup:b,commit:c}]},{type:"hbox",widths:["50%","50%"],children:[{id:"wmode", type:"select",label:a.lang.flash.windowMode,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.windowModeWindow,"window"],[a.lang.flash.windowModeOpaque,"opaque"],[a.lang.flash.windowModeTransparent,"transparent"]],setup:b,commit:c},{id:"quality",type:"select",label:a.lang.flash.quality,"default":"high",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.qualityBest,"best"],[a.lang.flash.qualityHigh,"high"],[a.lang.flash.qualityAutoHigh,"autohigh"], [a.lang.flash.qualityMedium,"medium"],[a.lang.flash.qualityAutoLow,"autolow"],[a.lang.flash.qualityLow,"low"]],setup:b,commit:c}]},{type:"hbox",widths:["50%","50%"],children:[{id:"align",type:"select",label:a.lang.common.align,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.common.alignLeft,"left"],[a.lang.flash.alignAbsBottom,"absBottom"],[a.lang.flash.alignAbsMiddle,"absMiddle"],[a.lang.flash.alignBaseline,"baseline"],[a.lang.common.alignBottom,"bottom"],[a.lang.common.alignMiddle, "middle"],[a.lang.common.alignRight,"right"],[a.lang.flash.alignTextTop,"textTop"],[a.lang.common.alignTop,"top"]],setup:b,commit:function(a,b,f,g,i){var j=this.getValue();c.apply(this,arguments);j&&(i.align=j)}},{type:"html",html:"
    "}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(a.lang.flash.flashvars),children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"menu",label:a.lang.flash.chkMenu,"default":!0,setup:b,commit:c},{type:"checkbox",id:"play",label:a.lang.flash.chkPlay, "default":!0,setup:b,commit:c},{type:"checkbox",id:"loop",label:a.lang.flash.chkLoop,"default":!0,setup:b,commit:c},{type:"checkbox",id:"allowFullScreen",label:a.lang.flash.chkFull,"default":!0,setup:b,commit:c}]}]}]},{id:"advanced",label:a.lang.common.advancedTab,elements:[{type:"hbox",children:[{type:"text",id:"id",label:a.lang.common.id,setup:b,commit:c}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",id:"bgcolor",label:a.lang.flash.bgcolor,setup:b,commit:c},{type:"text",id:"class", label:a.lang.common.cssClass,setup:b,commit:c}]},{type:"text",id:"style",validate:CKEDITOR.dialog.validate.inlineStyle(a.lang.common.invalidInlineStyle),label:a.lang.common.cssStyle,setup:b,commit:c}]}]}})})();rt-4.2.12/share/static/RichText/plugins/find/dialogs/000755 000765 000024 00000000000 12555754775 023051 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/find/dialogs/find.js000644 000765 000024 00000024204 12555754775 024331 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ (function(){function y(c){return c.type==CKEDITOR.NODE_TEXT&&0b.length){var d=this._.walker.textNode;if(d)a.setStartAfter(d);else return null}else d=b[0],b=b[b.length-1],a.setStart(d.textNode,d.offset),a.setEnd(b.textNode,b.offset+1);return a},updateFromDomRange:function(a){var b=new l(a);this._.cursors=[];do a=b.next(),a.character&&this._.cursors.push(a);while(a.character);this._.rangeLength=this._.cursors.length},setMatched:function(){this._.isMatched=!0},clearMatched:function(){this._.isMatched=!1},isMatched:function(){return this._.isMatched},highlight:function(){if(!(1> this._.cursors.length)){this._.highlightRange&&this.removeHighlight();var a=this.toDomRange(),b=a.createBookmark();v.applyToRange(a);a.moveToBookmark(b);this._.highlightRange=a;b=a.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b.scrollIntoView();this.updateFromDomRange(a)}},removeHighlight:function(){if(this._.highlightRange){var a=this._.highlightRange.createBookmark();v.removeFromRange(this._.highlightRange);this._.highlightRange.moveToBookmark(a);this.updateFromDomRange(this._.highlightRange); this._.highlightRange=null}},isReadOnly:function(){return!this._.highlightRange?0:this._.highlightRange.startContainer.isReadOnly()},moveBack:function(){var a=this._.walker.back(),b=this._.cursors;a.hitMatchBoundary&&(this._.cursors=b=[]);b.unshift(a);b.length>this._.rangeLength&&b.pop();return a},moveNext:function(){var a=this._.walker.next(),b=this._.cursors;a.hitMatchBoundary&&(this._.cursors=b=[]);b.push(a);b.length>this._.rangeLength&&b.shift();return a},getEndCharacter:function(){var a=this._.cursors; return 1>a.length?null:a[a.length-1].character},getNextCharacterRange:function(a){var b,d;d=this._.cursors;d=(b=d[d.length-1])&&b.textNode?new l(n(b)):this._.walker;return new r(d,a)},getCursors:function(){return this._.cursors}};var w=function(a,b){var d=[-1];b&&(a=a.toLowerCase());for(var c=0;c=b||8192<=b&&8202>=b||z.test(a)},e={searchRange:null,matchRange:null,find:function(a,b,d,f,e,A){this.matchRange? (this.matchRange.removeHighlight(),this.matchRange=this.matchRange.getNextCharacterRange(a.length)):this.matchRange=new r(new l(this.searchRange),a.length);for(var i=new w(a,!b),j=0,k="%";null!==k;){for(this.matchRange.moveNext();k=this.matchRange.getEndCharacter();){j=i.feedCharacter(k);if(2==j)break;this.matchRange.moveNext().hitMatchBoundary&&i.reset()}if(2==j){if(d){var h=this.matchRange.getCursors(),m=h[h.length-1],h=h[0],g=c.createRange();g.setStartAt(c.editable(),CKEDITOR.POSITION_AFTER_START); g.setEnd(h.textNode,h.offset);h=g;m=n(m);h.trim();m.trim();h=new l(h,!0);m=new l(m,!0);if(!x(h.back().character)||!x(m.next().character))continue}this.matchRange.setMatched();!1!==e&&this.matchRange.highlight();return!0}}this.matchRange.clearMatched();this.matchRange.removeHighlight();return f&&!A?(this.searchRange=q(1),this.matchRange=null,arguments.callee.apply(this,Array.prototype.slice.call(arguments).concat([!0]))):!1},replaceCounter:0,replace:function(a,b,d,f,e,g,i){o=1;a=0;if(this.matchRange&& this.matchRange.isMatched()&&!this.matchRange._.isReplaced&&!this.matchRange.isReadOnly()){this.matchRange.removeHighlight();b=this.matchRange.toDomRange();d=c.document.createText(d);if(!i){var j=c.getSelection();j.selectRanges([b]);c.fire("saveSnapshot")}b.deleteContents();b.insertNode(d);i||(j.selectRanges([b]),c.fire("saveSnapshot"));this.matchRange.updateFromDomRange(b);i||this.matchRange.highlight();this.matchRange._.isReplaced=!0;this.replaceCounter++;a=1}else a=this.find(b,f,e,g,!i);o=0;return a}}, f=c.lang.find;return{title:f.title,resizable:CKEDITOR.DIALOG_RESIZE_NONE,minWidth:350,minHeight:170,buttons:[CKEDITOR.dialog.cancelButton],contents:[{id:"find",label:f.find,title:f.find,accessKey:"",elements:[{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtFindFind",label:f.findWhat,isChanged:!1,labelLayout:"horizontal",accessKey:"F"},{type:"button",id:"btnFind",align:"left",style:"width:100%",label:f.find,onClick:function(){var a=this.getDialog();e.find(a.getValueOf("find","txtFindFind"), a.getValueOf("find","txtFindCaseChk"),a.getValueOf("find","txtFindWordChk"),a.getValueOf("find","txtFindCyclic"))||alert(f.notFoundMsg)}}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(f.findOptions),style:"margin-top:29px",children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"txtFindCaseChk",isChanged:!1,label:f.matchCase},{type:"checkbox",id:"txtFindWordChk",isChanged:!1,label:f.matchWord},{type:"checkbox",id:"txtFindCyclic",isChanged:!1,"default":!0,label:f.matchCyclic}]}]}]},{id:"replace", label:f.replace,accessKey:"M",elements:[{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtFindReplace",label:f.findWhat,isChanged:!1,labelLayout:"horizontal",accessKey:"F"},{type:"button",id:"btnFindReplace",align:"left",style:"width:100%",label:f.replace,onClick:function(){var a=this.getDialog();e.replace(a,a.getValueOf("replace","txtFindReplace"),a.getValueOf("replace","txtReplace"),a.getValueOf("replace","txtReplaceCaseChk"),a.getValueOf("replace","txtReplaceWordChk"),a.getValueOf("replace", "txtReplaceCyclic"))||alert(f.notFoundMsg)}}]},{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtReplace",label:f.replaceWith,isChanged:!1,labelLayout:"horizontal",accessKey:"R"},{type:"button",id:"btnReplaceAll",align:"left",style:"width:100%",label:f.replaceAll,isChanged:!1,onClick:function(){var a=this.getDialog();e.replaceCounter=0;e.searchRange=q(1);e.matchRange&&(e.matchRange.removeHighlight(),e.matchRange=null);for(c.fire("saveSnapshot");e.replace(a,a.getValueOf("replace", "txtFindReplace"),a.getValueOf("replace","txtReplace"),a.getValueOf("replace","txtReplaceCaseChk"),a.getValueOf("replace","txtReplaceWordChk"),!1,!0););e.replaceCounter?(alert(f.replaceSuccessMsg.replace(/%1/,e.replaceCounter)),c.fire("saveSnapshot")):alert(f.notFoundMsg)}}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(f.findOptions),children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"txtReplaceCaseChk",isChanged:!1,label:f.matchCase},{type:"checkbox",id:"txtReplaceWordChk",isChanged:!1, label:f.matchWord},{type:"checkbox",id:"txtReplaceCyclic",isChanged:!1,"default":!0,label:f.matchCyclic}]}]}]}],onLoad:function(){var a=this,b,c=0;this.on("hide",function(){c=0});this.on("show",function(){c=1});this.selectPage=CKEDITOR.tools.override(this.selectPage,function(f){return function(e){f.call(a,e);var g=a._.tabs[e],i;i="find"===e?"txtFindWordChk":"txtReplaceWordChk";b=a.getContentElement(e,"find"===e?"txtFindFind":"txtFindReplace");a.getContentElement(e,i);g.initialized||(CKEDITOR.document.getById(b._.inputId), g.initialized=!0);if(c){var j,e="find"===e?1:0,g=1-e,k,h=p.length;for(k=0;k=b;b++)c[b]=parseInt(a.substr(2*b,2),16);return"#"+ (165<=0.2126*c[0]+0.7152*c[1]+0.0722*c[2]?"000":"fff")}function v(a){!a.name&&(a=new CKEDITOR.event(a));var b=!/mouse/.test(a.name),c=a.data.getTarget(),e;if("td"==c.getName()&&(e=c.getChild(0).getHtml()))q(a),b?g=c:w=c,b&&(c.setStyle("border-color",y(e)),c.setStyle("border-style","dotted")),f.getById(k).setStyle("background-color",e),f.getById(l).setHtml(e)}function q(a){if(a=!/mouse/.test(a.name)&&g){var b=a.getChild(0).getHtml();a.setStyle("border-color",b);a.setStyle("border-style","solid")}!g&& !w&&(f.getById(k).removeStyle("background-color"),f.getById(l).setHtml(" "))}function z(a){var b=a.data,c=b.getTarget(),e=b.getKeystroke(),d="rtl"==t.lang.dir;switch(e){case 38:if(a=c.getParent().getPrevious())a=a.getChild([c.getIndex()]),a.focus();b.preventDefault();break;case 40:if(a=c.getParent().getNext())(a=a.getChild([c.getIndex()]))&&1==a.type&&a.focus();b.preventDefault();break;case 32:case 13:u(a);b.preventDefault();break;case d?37:39:if(a=c.getNext())1==a.type&&(a.focus(),b.preventDefault(!0)); else if(a=c.getParent().getNext())if((a=a.getChild([0]))&&1==a.type)a.focus(),b.preventDefault(!0);break;case d?39:37:if(a=c.getPrevious())a.focus(),b.preventDefault(!0);else if(a=c.getParent().getPrevious())a=a.getLast(),a.focus(),b.preventDefault(!0)}}var r=CKEDITOR.dom.element,f=CKEDITOR.document,h=t.lang.colordialog,p,x={type:"html",html:" "},j,g,w,m=function(a){return CKEDITOR.tools.getNextId()+"_"+a},k=m("hicolor"),l=m("hicolortext"),o=m("selhicolor"),i;(function(){function a(a,d){for(var s= a;sg;g++)b(e.$,"#"+c[f]+c[g]+c[s])}}function b(a,c){var b=new r(a.insertCell(-1));b.setAttribute("class","ColorCell");b.setAttribute("tabIndex",-1);b.setAttribute("role","gridcell");b.on("keydown",z);b.on("click",u);b.on("focus",v);b.on("blur",q);b.setStyle("background-color",c);b.setStyle("border","1px solid "+c);b.setStyle("width","14px");b.setStyle("height","14px");var d=m("color_table_cell"); b.setAttribute("aria-labelledby",d);b.append(CKEDITOR.dom.element.createFromHtml(''+c+"",CKEDITOR.document))}i=CKEDITOR.dom.element.createFromHtml('
    '+h.options+'
    ');i.on("mouseover",v);i.on("mouseout",q);var c="00 33 66 99 cc ff".split(" ");a(0,0);a(3,0);a(0, 3);a(3,3);var e=new r(i.$.insertRow(-1));e.setAttribute("role","row");for(var d=0;6>d;d++)b(e.$,"#"+c[d]+c[d]+c[d]);for(d=0;12>d;d++)b(e.$,"#000000")})();return{title:h.title,minWidth:360,minHeight:220,onLoad:function(){p=this},onHide:function(){n();var a=g.getChild(0).getHtml();g.setStyle("border-color",a);g.setStyle("border-style","solid");f.getById(k).removeStyle("background-color");f.getById(l).setHtml(" ");g=null},contents:[{id:"picker",label:h.title,accessKey:"I",elements:[{type:"hbox", padding:0,widths:["70%","10%","30%"],children:[{type:"html",html:"
    ",onLoad:function(){CKEDITOR.document.getById(this.domId).append(i)},focus:function(){(g||this.getElement().getElementsByTag("td").getItem(0)).focus()}},x,{type:"vbox",padding:0,widths:["70%","5%","25%"],children:[{type:"html",html:""+h.highlight+'\t\t\t\t\t\t\t\t\t\t\t\t
    \t\t\t\t\t\t\t\t\t\t\t\t
     
    '+h.selected+ '\t\t\t\t\t\t\t\t\t\t\t\t
    '},{type:"text",label:h.selected,labelStyle:"display:none",id:"selectedColor",style:"width: 74px",onChange:function(){try{f.getById(o).setStyle("background-color",this.getValue())}catch(a){n()}}},x,{type:"button",id:"clear",style:"margin-top: 5px",label:h.clear,onClick:n}]}]}]}]}});rt-4.2.12/share/static/RichText/plugins/clipboard/dialogs/000755 000765 000024 00000000000 12555754775 024070 5ustar00sartakstaff000000 000000 rt-4.2.12/share/static/RichText/plugins/clipboard/dialogs/paste.js000644 000765 000024 00000006621 12555754775 025547 0ustar00sartakstaff000000 000000 /* Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add("paste",function(c){function g(a){var b=new CKEDITOR.dom.document(a.document),d=b.getBody(),e=b.getById("cke_actscrpt");e&&e.remove();d.setAttribute("contenteditable",!0);if(CKEDITOR.env.ie&&8>CKEDITOR.env.version)b.getWindow().on("blur",function(){b.$.selection.empty()});b.on("keydown",function(a){var a=a.data,b;switch(a.getKeystroke()){case 27:this.hide();b=1;break;case 9:case CKEDITOR.SHIFT+9:this.changeFocus(1),b=1}b&&a.preventDefault()},this);c.fire("ariaWidget",new CKEDITOR.dom.element(a.frameElement)); b.getWindow().getFrame().removeCustomData("pendingFocus")&&d.focus()}var f=c.lang.clipboard,h=CKEDITOR.env.isCustomDomain();c.on("pasteDialogCommit",function(a){a.data&&c.fire("paste",{type:"auto",dataValue:a.data})},null,null,1E3);return{title:f.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:350,minHeight:CKEDITOR.env.quirks?250:245,onShow:function(){this.parts.dialog.$.offsetHeight;this.setupContent();this.parts.title.setHtml(this.customTitle||f.title);this.customTitle=null},onLoad:function(){(CKEDITOR.env.ie7Compat|| CKEDITOR.env.ie6Compat)&&"rtl"==c.lang.dir&&this.parts.contents.setStyle("overflow","hidden")},onOk:function(){this.commitContent()},contents:[{id:"general",label:c.lang.common.generalTab,elements:[{type:"html",id:"securityMsg",html:'
    '+f.securityMsg+"
    "},{type:"html",id:"pasteMsg",html:'
    '+f.pasteMsg+"
    "},{type:"html",id:"editing_area",style:"width:100%;height:100%",html:"",focus:function(){var a=this.getInputElement(), b=a.getFrameDocument().getBody();!b||b.isReadOnly()?a.setCustomData("pendingFocus",1):b.focus()},setup:function(){var a=this.getDialog(),b='
    autocomplete="off" />
    <%ARGS> $Name $Size => undef $Rows => 5 $Default => '' @Values => () $Class => '' rt-4.2.12/share/html/Widgets/FinalizeWidgetArguments000644 000765 000024 00000004775 12555754775 023112 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> my %args = %$WidgetArguments; %args = (%args, %{ $args{Callback}->() }) if $args{Callback}; $args{'Description'} = loc( $args{'Description'} ) if $args{'Description'}; $args{'Hints'} = loc( $args{'Hints'} ) if $args{'Hints'}; if ( $args{'ValuesLabel'} ) { my %labels; $labels{$_} = loc( $args{'ValuesLabel'}->{$_} ) for keys %{$args{'ValuesLabel'}}; $args{'ValuesLabel'} = \%labels; } return \%args; <%args> $WidgetArguments => {} rt-4.2.12/share/html/Widgets/Form/000755 000765 000024 00000000000 12555754775 017262 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Widgets/SavedSearch000644 000765 000024 00000016301 12555754775 020473 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%method new> <%init> return \%ARGS; <%method process> <%init> my @actions; $self->{SearchId} ||= $args->{'SavedChartSearchId'} || 'new'; my $SearchParams = { map { $_ => $args->{$_} } @{$self->{SearchFields}} }; if ( my ( $container_object, $search_id ) = _parse_saved_search( $args->{'SavedSearchLoad'} || $args->{'SavedChartSearchId'} ) ) { my $search = RT::Attribute->new( $session{'CurrentUser'} ); $search->Load($search_id); # We have a $search and now; import the others $self->{SearchId} = $args->{'SavedSearchLoad'} || $args->{'SavedChartSearchId'}; $self->{CurrentSearch}{Object} = $search; if ( $args->{'SavedSearchLoad'} ) { for ( @{ $self->{SearchFields} } ) { $args->{$_} = $search->SubValue($_) } } $args->{SavedChartSearchId} = $args->{'SavedSearchLoad'} if $args->{'SavedSearchLoad'}; # saved search in /Search/Chart.html is different from /Search/Build.html # the former is of type 'Chart', while the latter is of type 'Ticket'. # After loading a saved search from the former after loading one from the # latter, accessing /Search/Build.html will still show the old one, so we # need to delete $session{CurrentSearchHash} to let it not show the old one. # of course, the new one should not be shown there either because it's of # different type delete $session{'CurrentSearchHash'}; } # look for the current one in the available saved searches if ($self->{SearchId} eq 'new') { my @Objects = RT::SavedSearch->new( $session{CurrentUser} )->ObjectsForLoading; push @Objects, RT::System->new($session{'CurrentUser'}) if $session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser' ); for my $obj (@Objects) { for ( $m->comp( "/Search/Elements/SearchesForObject", Object => $obj ) ) { my ( $desc, $loc_desc, $search ) = @$_; use Data::Dumper; # FFS local $Data::Dumper::Sortkeys = 1; if ( Dumper( $search->Content ) eq Dumper( { %$SearchParams, SearchType => $self->{SearchType} } ) ) { $self->{CurrentSearch}{Object} = $search; $self->{SearchId} = $search->Id; } } } } if ( $args->{SavedSearchSave} ) { if ( my $search = $self->{CurrentSearch}{Object} ) { # rename $search->SetDescription( $args->{SavedSearchDescription} ); $search->SetSubValues(%$SearchParams); push @actions, loc( '[_1] [_2] updated.', loc($self->{SearchType}), $args->{SavedSearchDescription} ); } else { # new saved search my $saved_search = RT::SavedSearch->new( $session{'CurrentUser'} ); my ( $ok, $search_msg ) = $saved_search->Save( Privacy => $args->{'SavedSearchOwner'}, Name => $args->{'SavedSearchDescription'}, Type => $self->{'SearchType'}, SearchParams => $SearchParams ); if ($ok) { $self->{CurrentSearch}{Object} = $saved_search->{Attribute}; $self->{SearchId} = $args->{SavedChartSearchId} = 'RT::User-' . $session{CurrentUser}->id . '-SavedSearch-' . $saved_search->Id; push @actions, loc( '[_1] [_2] saved.', loc($self->{SearchType}), $args->{SavedSearchDescription} ); } else { push @actions, [ loc("Can't save [_1]", loc($self->{SearchType})) . ': ' . loc($search_msg), 0 ]; } } } if ( $args->{SavedSearchDelete} && $self->{CurrentSearch}{Object} ) { my ($ok, $msg) = $self->{CurrentSearch}{Object}->Delete; push @actions, $ok ? loc( '[_1] [_2] deleted.', loc($self->{SearchType}), $self->{CurrentSearch}{Object}->Description ) : $msg; delete $self->{CurrentSearch}{Object}; delete $self->{SearchId}; delete $args->{SavedChartSearchId}; } $self->{CurrentSearch}{Description} = $self->{CurrentSearch}{Object}->Description if $self->{CurrentSearch}{Object}; return @actions; <%ARGS> $self $args <%method show>
    <& /Search/Elements/EditSearches, Id => $self->{SearchId} || 'new', Type => $self->{SearchType}, CurrentSearch => $self->{CurrentSearch}, Title => $Title, AllowCopy => 0, $self->{CurrentSearch}{Object} ? ( Object => $self->{CurrentSearch}{Object}, Description => $self->{CurrentSearch}{Object}->Description, ) : (), &>
    <%PERL> foreach my $field ( @{$self->{SearchFields}} ) { if ( ref($ARGS{$field}) && ref($ARGS{$field}) ne 'ARRAY' ) { $RT::Logger->error("Couldn't store '$field'. it's reference to ". ref($ARGS{$field}) ); next; } foreach my $value ( grep defined, ref($ARGS{$field})? @{ $ARGS{$field} } : $ARGS{$field} ) { % } % }
    <%ARGS> $self => undef $Action => '' $Title => loc('Saved searches') <%init> rt-4.2.12/share/html/Widgets/SelectionBox000644 000765 000024 00000015442 12555754775 020706 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# The SelectionBox Widget %# %# SYNOPSIS %# %# <%init>: %# my $sel = $m->comp ('/Widgets/SelectionBox:new', %# Action => me.html', %# Name => 'my-selection', %# Available => \@items, %# # you can do things with @{$sel->{Current}} in the %# # OnSubmit callback %# OnSubmit => sub { my $sel = shift; }, %# Selected => \@selected); %# %# $m->comp ('/Widgets/SelectionBox:process', %ARGS, self => $sel) %# %# where @items is an arrayref, each element is [value, label], %# and @selected is an arrayref of selected values from @items. %# %# and in html: %# <& /Widgets/SelectionBox:show, self => $sel &> %# %# if the SelectionBox is created with AutoSave option, OnSubmit will be called %# on every button clicked <%method new> <%init> $ARGS{_item_map} = {map {$_->[0] => $_->[1]} @{$ARGS{Available}}}; return \%ARGS; <%method process> <%init> unless ($ARGS{$self->{Name}.'-Submit'}) { # init $self->{Current} = $self->{Selected}; $self->{Selected} = []; return; } $self->{Selected} = $ARGS{$self->{Name}.'-Selected'}; if ($self->{Selected} && !ref($self->{Selected})) { $self->{Selected} = [$self->{Selected}]; } my $current = $self->{Current} = $ARGS{$self->{Name}.'-Current'}; if ($current && !ref ($current)) { $current = [$current]; } unless ($self->{ReadOnly}) { ++$self->{Modified}; if ($ARGS{add}) { my $choosed = $ARGS{$self->{Name}.'-Available'}; for my $add (ref($choosed) ? @$choosed : $choosed) { next if grep { $_ eq $add } @$current; push @$current, $add; } } if ($ARGS{remove}) { my $choosed = $ARGS{$self->{Name}.'-Selected'}; for my $del (ref($choosed) ? @$choosed : $choosed) { @$current = map { $_ eq $del ? () : $_ } @$current; } } if ($ARGS{moveup} or $ARGS{movedown}) { my $offset = $ARGS{moveup} ? 1 : 0; my $choosed = $ARGS{$self->{Name}.'-Selected'}; $choosed = [$choosed] unless ref ($choosed); my $canmove = 0; # not in the cornor for my $i ($ARGS{moveup} ? 0..$#{$current} : reverse 0..$#{$current}) { if (grep {$_ eq $current->[$i]} @$choosed) { if ($canmove) { splice (@$current, $i-$offset, 2, @{$current}[$i+1-$offset,$i-$offset]); } } else { ++$canmove; } } } if ($ARGS{clear}) { $current = []; } $self->{Current} = $current; } @{$self->{Current}} = grep { exists $self->{_item_map}{$_} } @{$self->{Current}}; if ($self->{AutoSave} or $ARGS{$self->{Name}.'-Save'}) { $self->{OnSubmit}->($self); delete $self->{Modified}; } <%ARGS> $self => undef <%method current> % for (@{$self->{Current}}) { % } <%INIT> <%ARGS> $self => undef <%method show>
    <& SelectionBox:current, self => $self &> <&|/l&>Available:
    % unless ($self->{ReadOnly}) { % } % unless ($self->{'ReadOnly'}) { % unless ($ARGS{'NoArrows'}) { % } % if ($ARGS{'Clear'}) { % } % if ( $ARGS{'ShowUpdate'} ) { % } % } % my $caption = ""; % unless ($self->{'AutoSave'}) { % if ($self->{Modified}) { % $caption = loc('Selections modified. Please save your changes'); % } <& /Elements/Submit, Caption => loc($caption), Label => loc('Save'), Name => $name.'-Save' &> % }
    <%ARGS> $self => undef $size => 10 <%INIT> my $name = $self->{Name}; my %selected = map {$_ => 1} @{$self->{Selected}}; rt-4.2.12/share/html/Widgets/TitleBox000644 000765 000024 00000004336 12555754775 020042 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <& TitleBoxStart, %ARGS &><% $content | n %><& TitleBoxEnd &>
    <%ARGS> $class => '' $hide_empty => 0 <%INIT> my $content = $m->content; return if $hide_empty && $content =~ /^\s*$/s; rt-4.2.12/share/html/Widgets/TitleBoxEnd000644 000765 000024 00000004255 12555754775 020471 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    % #Manually flush the content buffer after each titlebox is displayed % $m->flush_buffer(); <%ARGS> $title => undef $content => undef rt-4.2.12/share/html/Widgets/TitleBoxStart000644 000765 000024 00000007027 12555754775 021060 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <% $rolledup ? " rolled-up" : ""%>" id="<% $id %>">
    "> % if ($hideable) { % } <% $title_href ? qq[] : '' | n %><% $title %><% $title_raw |n %><% $title_href ? "" : '' |n%> \ <% $titleright_href ? qq[] : '' | n %>\ <% $titleright %><% $titleright_raw |n%><% $titleright_href ? "" : '' |n%>\
    " id="<% $tid %>"> <%ARGS> $class => '' $bodyclass => '' $title_href => '' $title => '' $title_raw => '' $title_class => '' $titleright_href => '' $titleright => '' $titleright_raw => '' $id => '' $hideable => 1 $rolledup => 0 <%init> $hideable = 1 if $rolledup; # # This should be pretty bulletproof # my $page = $m->request_comp->path; my $title_b64 = MIME::Base64::encode_base64(Encode::encode( "UTF-8", $title), ''); my $tid = "TitleBox--$page--" . join '--', ($class, $bodyclass, $title_b64, $id); # Replace anything that ISN'T alphanumeric, a hyphen, or an underscore $tid =~ s{[^A-Za-z0-9\-_]}{_}g; my $i = 0; $i++ while $m->notes("$tid-$i"); $m->notes("$tid-$i" => 1); $tid = "$tid-$i"; rt-4.2.12/share/html/Widgets/Form/Boolean000644 000765 000024 00000006774 12555754775 020602 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%DOC> see docs/extending/using_forms_widgets.pod
    <% $Description %> <& SELF:InputOnly, %ARGS &> <% $Hints %>
    <%ARGS> $Name => undef, $Description => undef, $Hints => '' <%METHOD InputOnly> <%ARGS> $Name => undef, $Default => 0, $DefaultValue => 0, $DefaultLabel => loc( 'Use default ([_1])', $DefaultValue? loc('Yes'): loc('No') ), $CurrentValue => undef, % unless ( $Default ) { \ />\ % } else { />\ <% loc('Yes') %> />\ <% loc('No') %> />\ <% $DefaultLabel %> % } <%METHOD Process> <%ARGS> $Name $Arguments => {}, $Default => 0, $DefaultValue => 0, <%INIT> my $value = $Arguments->{ $Name }; if ( $Default ) { return undef if !defined $value || $value eq '__empty_value__'; return $value? 1: 0; } else { return $value? 1: 0 if defined $value; return $DefaultValue; } rt-4.2.12/share/html/Widgets/Form/Integer000644 000765 000024 00000006141 12555754775 020604 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%DOC> see docs/extending/using_forms_widgets.pod
    <% $Description %> <& SELF:InputOnly, %ARGS &> % if ( $Default ) { <% $DefaultLabel %> % } <% $Hints %>
    <%INIT> $_ = '' foreach grep !defined, $CurrentValue, $DefaultValue; $DefaultLabel ||= loc( 'Default: [_1]', $DefaultValue ); <%ARGS> $Name $Description => undef, $Hints => '' $CurrentValue => '', $Default => 0, $DefaultValue => 0, $DefaultLabel => undef <%METHOD InputOnly> \ <%ARGS> $Name $CurrentValue => '', <%INIT> $CurrentValue = '' unless defined $CurrentValue; <%METHOD Process> <%ARGS> $Name $Arguments => {}, $Default => 0, $DefaultValue => '', <%INIT> my $value = $Arguments->{ $Name }; if ( !defined $value || $value eq '' ) { return $DefaultValue unless $Default; return undef; } return $value; rt-4.2.12/share/html/Widgets/Form/Select000644 000765 000024 00000011503 12555754775 020424 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%DOC> see docs/extending/using_forms_widgets.pod
    % if ( $Description ) { <% $Description %> % } <& SELF:InputOnly, %ARGS &> <% $Hints %>
    <%ARGS> $Name $Description => undef, $Hints => '' <%METHOD InputOnly> <%ARGS> $Name $Description => undef, @Values => (), $ValuesCallback => undef, %ValuesLabel => (), @CurrentValue => (), $Default => 1, @DefaultValue => (), $DefaultLabel => undef, $Alternative => 0, $AlternativeLabel => loc('other...'), $Multiple => 0, % if ( $Alternative ) { % } <%INIT> my %CurrentValue = map {$_ => 1} grep defined, @CurrentValue; if ( $ValuesCallback ) { my $values = $ValuesCallback->( CurrentUser => $session{'CurrentUser'}, Name => $Name, ); if ( ref $values eq 'ARRAY' ) { @Values = @$values; } else { %ValuesLabel = %$values; @Values = keys %ValuesLabel; } } unless (defined $DefaultLabel ) { $DefaultLabel = loc('Use system default ([_1])', join ', ', map loc($ValuesLabel{$_} || $_), grep defined, @DefaultValue ); } <%METHOD Process> <%ARGS> $Name $Arguments => {}, @Values => (), %ValuesLabel => (), $Default => 0, @DefaultValue => (), $Alternative => 0, $Multiple => 0, <%INIT> my $value = $Arguments->{ $Name }; if( !defined $value || $value eq '__empty_value__' ) { return undef if $Default; return [ @DefaultValue ] if $Multiple; return $DefaultValue[0]; } $value = [$value] unless ref $value; if ( $Alternative ) { my $alt = $Arguments->{ "Alternative-". $Name }; if( $Multiple ) { push @$value, split /\s*,\s*/, $alt; } else { push @$value, $alt; } } splice @$value, 1 unless $Multiple; # XXX: check values return $value->[0] unless $Multiple; return $value; rt-4.2.12/share/html/Widgets/Form/String000644 000765 000024 00000006364 12555754775 020464 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%DOC> see docs/extending/using_forms_widgets.pod
    <% $Description %> <& SELF:InputOnly, %ARGS &> % if ( $Default ) { <% $DefaultLabel %> % } <% $Hints %>
    <%ARGS> $Name $Description => undef, $Hints => '' $CurrentValue => '', $Default => 0, $DefaultValue => '', $DefaultLabel => loc( 'Default: [_1]', $DefaultValue ), <%METHOD InputOnly> \ <%ARGS> $Name $CurrentValue => '', $Type => 'text' <%METHOD Process> <%ARGS> $Name $Arguments => {}, $Default => 0, $DefaultValue => '', <%INIT> my $value = $Arguments->{ $Name }; $value = '' unless defined $value; # canonicalize: delete leading and trailing spaces, replaces newlines # with one space and then replace all continuouse spaces with one ' ' # (including tabs and other fancy things) $value =~ s/^\s+//; $value =~ s/\s+$//; $value =~ s/\r*\n/ /g; $value =~ s/\s+$/ /g; if ( $value eq '' ) { return $DefaultValue unless $Default; return undef; } return $value; rt-4.2.12/share/html/User/Elements/000755 000765 000024 00000000000 12555754775 017443 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/User/History.html000644 000765 000024 00000004707 12555754775 020226 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('History of the user [_1]', $User->Format) &> <& /Elements/Tabs &> <& /Elements/ShowHistory, Object => $User, ShowDisplayModes => 0, DisplayPath => 'History.html', &> <%INIT> my $User = RT::User->new( $session{'CurrentUser'} ); my ($status, $msg) = $User->Load($id); unless ($status) { RT->Logger->error("Unable to load user $id: $msg"); Abort("Unable to load User $id"); } <%ARGS> $id => undef rt-4.2.12/share/html/User/Prefs.html000644 000765 000024 00000024061 12555754775 017637 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title=>loc("Preferences") &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    <&| /Widgets/TitleBox, title => loc('Identity'), id => "user-prefs-identity" &> <& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Identity', InTable => 1 &>
    <&|/l&>Email:
    <&|/l&>Real Name:
    <&|/l&>Nickname:
    <&|/l&>Language: <& /Elements/SelectLang, Name => 'Lang', Default => $UserObj->Lang &>
    <&|/l&>Timezone: <& /Elements/SelectTimezone, Name => 'Timezone', Default => $UserObj->Timezone &>
    <&| /Widgets/TitleBox, title => loc('Phone numbers'), id => "user-prefs-phone" &> <& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Phones', InTable => 1 &>
    <&|/l&>Residence:
    <&|/l&>Work:
    <&|/l&>Mobile:
    <&|/l&>Pager:
    %if ($UserObj->Privileged) { <&| /Widgets/TitleBox, title => loc('Signature'), id => "user-prefs-signature" &> % } % $m->callback( %ARGS, UserObj => $UserObj, CallbackName => 'FormLeftColumn' );
    <&| /Widgets/TitleBox, title => loc('Password'), id => "user-prefs-password" &> <& /Elements/EditPassword, User => $UserObj, Name => [qw(CurrentPass Pass1 Pass2)], &> <& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Access control' &> <&| /Widgets/TitleBox, title => loc('Location'), id => "user-prefs-location" &> <& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Location', InTable => 1 &>
    <&|/l&>Organization:
    <&|/l&>Address1:
    <&|/l&>Address2:
    <&|/l&>City:
    <&|/l&>State:
    <&|/l&>Zip:
    <&|/l&>Country:
    <& /Elements/EditCustomFieldCustomGroupings, Object => $UserObj &> <& /Elements/Submit, Label => loc('Save Preferences') &> <&| /Widgets/TitleBox, title => loc('Secret authentication token'), id => "user-prefs-feeds" &> <&|/l&>All iCal feeds embed a secret token which authorizes you. If the URL for one of your iCal feeds was exposed to the outside world, you can get a new secret, breaking all existing iCal feeds, below. <& /Elements/Submit, Label => loc('Reset secret authentication token'), Name => "ResetAuthToken", id => "ResetAuthTokenContainer" &> % $m->callback( %ARGS, UserObj => $UserObj, CallbackName => 'FormRightColumn' );
    % $m->callback( %ARGS, UserObj => $UserObj, CallbackName => 'FormEnd' );
    <%INIT> my $UserObj = RT::User->new( $session{'CurrentUser'} ); $UserObj->Load($id) if $id; $UserObj->Load($Name) if $Name && !$UserObj->id; unless ( $UserObj->id ) { Abort(loc("Couldn't load user #[_1] or user '[_2]'", $id, $Name)) if $id && $Name; Abort(loc("Couldn't load user #[_1]", $id)) if $id; Abort(loc("Couldn't load user '[_1]'", $Name)) if $Name; Abort(loc("Couldn't load user")); } $id = $UserObj->id; my @results; if ( $ARGS{'ResetAuthToken'} ) { my ($status, $msg) = $UserObj->GenerateAuthToken; push @results, $msg; } else { my @fields = qw( Name Comments Signature EmailAddress FreeformContactInfo Organization RealName NickName Lang EmailEncoding WebEncoding ExternalContactInfoId ContactInfoSystem Gecos ExternalAuthId AuthSystem HomePhone WorkPhone MobilePhone PagerPhone Address1 Address2 City State Zip Country Timezone ); $m->callback( CallbackName => 'UpdateLogic', fields => \@fields, results => \@results, UserObj => $UserObj, ARGSRef => \%ARGS, ); push @results, UpdateRecordObject ( AttributesRef => \@fields, Object => $UserObj, ARGSRef => \%ARGS, ); push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj ); # Deal with special fields: Privileged, Enabled, and Password if ( $SetPrivileged and $Privileged != $UserObj->Privileged ) { my ($code, $msg) = $UserObj->SetPrivileged( $Privileged ); push @results, loc('Privileged status: [_1]', loc_fuzzy($msg)); } my %password_cond = $UserObj->CurrentUserRequireToSetPassword; if (defined $Pass1 && length $Pass1 ) { my ($status, $msg) = $UserObj->SafeSetPassword( Current => $CurrentPass, New => $Pass1, Confirmation => $Pass2, ); push @results, loc("Password: [_1]", $msg); } } MaybeRedirectForResults( Actions => \@results, ); <%ARGS> $id => $session{'CurrentUser'}->Id $Name => undef $Comments => undef $Signature => undef $EmailAddress => undef $FreeformContactInfo => undef $Organization => undef $RealName => undef $NickName => undef $Privileged => undef $SetPrivileged => undef $Enabled => undef $SetEnabled => undef $Lang => undef $EmailEncoding => undef $WebEncoding => undef $ExternalContactInfoId => undef $ContactInfoSystem => undef $Gecos => undef $ExternalAuthId => undef $AuthSystem => undef $HomePhone => undef $WorkPhone => undef $MobilePhone => undef $PagerPhone => undef $Address1 => undef $Address2 => undef $City => undef $State => undef $Zip => undef $Country => undef $CurrentPass => undef $Pass1 => undef $Pass2 => undef $Create=> undef rt-4.2.12/share/html/User/Search.html000644 000765 000024 00000006652 12555754775 017773 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('User Search'), Focus => '#autocomplete-UserString' &> <& /Elements/Tabs &> <& /Elements/GotoUser, Default => $UserString||'' &>

    <&|/l&>This will search for users by looking in the following fields: <% $search_fields %>

    % if ($UserString) { % unless ( $users->Count ) {

    <&|/l&>No users matching search criteria found.

    % } else {

    <&|/l&>Select a user:

    <& /Elements/CollectionList, OrderBy => 'Name', Order => 'ASC', Rows => 100, %ARGS, Format => $Format, Collection => $users, AllowSorting => 1, PassArguments => [qw(Format Rows Page Order OrderBy UserString)], &> % } % } <%INIT> my $users; my $Format; if ( $UserString ) { my $exclude = [RT->Nobody->Id, RT->System->Id]; $users = RT::Users->new($session{'CurrentUser'}); $users->SimpleSearch( Return => 'Name', Term => $UserString, Max => 100, Exclude => $exclude ); my $first = $users->First; RT::Interface::Web::Redirect(RT->Config->Get('WebURL')."User/Summary.html?id=".$first->Id) if $users->Count == 1; $users->GotoFirstItem; $Format = RT->Config->Get('UserSearchResultFormat'); } my $search_fields = join ", ", sort map {s/^CF\.(?:\{(.*)}|(.*))/$1 || $2/e; loc($_)} keys %{RT->Config->Get('UserSearchFields')}; <%ARGS> $UserString => undef rt-4.2.12/share/html/User/Summary.html000644 000765 000024 00000007040 12555754775 020213 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('User: [_1]', $User->Format) &> <& /Elements/Tabs &> <& /Elements/GotoUser &> <& /Elements/ListActions, actions => \@results &> <%perl> $m->callback( CallbackName => 'BeforePortlets', User => $User ); for my $portlet (@$portlets) { $show_portlet->($portlet); } $m->callback( CallbackName => 'AfterPortlets', User => $User ); <%INIT> my $User = RT::User->new( $session{'CurrentUser'} ); my ($status, $msg) = $User->Load($id); unless ($status) { RT->Logger->error("Unable to load user $id: $msg"); Abort("Unable to load User $id"); } my @results; if ( $User->Disabled ){ if ( $session{'CurrentUser'}->HasRight( Object => RT->System, Right => 'AdminUsers' ) ){ push @results, loc('User [_1] is currently disabled. Edit the user and select "Let this user access RT" to enable.', $User->Name); } else{ push @results, loc('User [_1] is currently disabled.', $User->Name); } } my $portlets = RT->Config->Get('UserSummaryPortlets'); my $show_portlet = sub { my $portlet = shift; my $full_path = "/User/Elements/Portlets/$portlet"; unless ( RT::Interface::Web->ComponentPathIsSafe($full_path) ) { RT->Logger->error("unsafe portlet $portlet specified in UserSummaryPortlets"); return; } unless ( $m->comp_exists($full_path) ) { RT->Logger->error("Unable to find $portlet in /User/Elements/Portlets - specified in UserSummaryPortlets"); return; } $m->comp( $full_path, User => $User ); }; <%ARGS> $id => undef rt-4.2.12/share/html/User/Elements/Portlets/000755 000765 000024 00000000000 12555754775 021257 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/User/Elements/TicketList000644 000765 000024 00000006753 12555754775 021460 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ( $TitleBox ) { <& /Widgets/TitleBoxStart, title => $Title, title_href => $url, class => $Class &> % } else { <% $Title %>: % } <& /Elements/CollectionList, %QueryProperties, Class => 'RT::Tickets', Page => 1, AllowSorting => 0, ShowNavigation => 0, &> % if ( $TitleBox ) { <& /Widgets/TitleBoxEnd &> % } <%INIT> my $sql = ''; $sql = join(' OR ', map { "$_.id = ".$User->Id } @WatcherTypes ); $sql = "( $sql )"; $m->callback( CallbackName => 'ModifyWatcherSQL', %ARGS, sql => \$sql, ); if (@$conditions) { $sql .= " AND (".join( " OR ", map $_->{cond}, @$conditions).")"; } my %QueryProperties = ( Query => $sql, OrderBy => 'Priority|id', Order => 'DESC|DESC', Rows => $Rows || 10, ShowHeader => $ShowHeader, Format => $Format, ); $m->callback( CallbackName => 'ModifyQueryProperties', %ARGS, QueryProperties => \%QueryProperties, ); my $url = RT->Config->Get('WebPath') . '/Search/Results.html?'; $url .= $m->comp('/Elements/QueryString', Query => $QueryProperties{'Query'}, OrderBy => $QueryProperties{'OrderBy'}, Order => $QueryProperties{'Order'}, ); <%ARGS> $Title => '' $Class => '' @WatcherTypes => (qw(Watcher)) $User => undef $conditions $Rows => 10 $Description => '' $TitleBox => 0 $Format => '' $ShowHeader => 0 rt-4.2.12/share/html/User/Elements/UserInfo000644 000765 000024 00000004672 12555754775 021131 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/ShowRecord, Object => $User, Format => $format, TrustFormat => 1, # Only modifiable by the RT server admin, so no need to scrub. Class => "$ClassPrefix-extra", &> <%INIT> return unless blessed($User) and $User->id; return unless $FormatConfig; my $format = RT->Config->Get($FormatConfig); return unless $format; <%ARGS> $User => undef $FormatConfig => undef $ClassPrefix => undef rt-4.2.12/share/html/User/Elements/Portlets/ActiveTickets000644 000765 000024 00000005023 12555754775 023744 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /User/Elements/TicketList , User => $User, conditions => $conditions, Rows => $Rows, WatcherTypes => [qw(Watcher)], Class => "user active-tickets", Title => loc('Active Tickets'), TitleBox => 1, ShowHeader => 1, Format => RT->Config->Get('UserSummaryTicketListFormat'), &> <%INIT> unless ( @$conditions ) { foreach (RT::Queue->ActiveStatusArray()) { push @$conditions, { cond => "Status = '$_'", name => loc($_) }; } } <%ARGS> $User => undef $conditions => [] $Rows => 10 rt-4.2.12/share/html/User/Elements/Portlets/CreateTicket000644 000765 000024 00000004630 12555754775 023554 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| /Widgets/TitleBox, title => loc('Quick ticket creation'), class => "user create-ticket" &>
    <&|/l&>Create a ticket with this user as the Requestor in Queue <& /Elements/SelectNewTicketQueue &>
    <%ARGS> $User rt-4.2.12/share/html/User/Elements/Portlets/ExtraInfo000644 000765 000024 00000004437 12555754775 023111 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| /Widgets/TitleBox, title => loc('User Information'), class => "user extra-info" &> % $m->callback( User => $User, CallbackName => 'BeforeExtraInfo' ); <& /User/Elements/UserInfo, User => $User, FormatConfig => 'UserSummaryExtraInfo', ClassPrefix => 'user-summary' &> <%ARGS> $User rt-4.2.12/share/html/User/Elements/Portlets/InactiveTickets000644 000765 000024 00000005031 12555754775 024272 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /User/Elements/TicketList , User => $User, conditions => $conditions, Rows => $Rows, WatcherTypes => [qw(Watcher)], Class => "user inactive-tickets", Title => loc('Inactive Tickets'), TitleBox => 1, ShowHeader => 1, Format => RT->Config->Get('UserSummaryTicketListFormat'), &> <%INIT> unless ( @$conditions ) { foreach (RT::Queue->InactiveStatusArray()) { push @$conditions, { cond => "Status = '$_'", name => loc($_) }; } } <%ARGS> $User => undef $conditions => [] $Rows => 10 rt-4.2.12/share/html/Tools/index.html000644 000765 000024 00000004156 12555754775 020054 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Tools") &> <& /Elements/Tabs &> <& /Elements/ListMenu, menu => Menu()->child('tools') &> rt-4.2.12/share/html/Tools/MyDay.html000644 000765 000024 00000010544 12555754775 017766 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>

    <&|/l, $session{'CurrentUser'}->Name &>Active tickets for [_1]

    % while ( my $Ticket = $Tickets->Next()) { % $i++; % my $class = $i % 2 ? 'class="evenline"' : 'class="oddline"'; >>> % }

    <%$Ticket->Id%>: <%$Ticket->Subject%>

    <&|/l&>Worked: <&|/l&>minutes <&|/l&>Comments:
    <&|/l&>Status: <& /Ticket/Elements/SelectStatus, Name=> 'UpdateStatus-'.$Ticket->Id, TicketObj => $Ticket &>
    <& /Elements/Submit, Label => loc('Record all updates') , Reset => 1, ResetLabel => loc('Clear')&>
    <%INIT> my $title = loc("What I did today"); my $i = 0; my @results; foreach my $arg ( keys %ARGS ) { next unless ( $arg =~ /^UpdateStatus-(\d*)$/ ); my $id = $1; my $ticket = LoadTicket($id); next unless ( $ticket->id ); if ( my $content = $ARGS{'UpdateContent-'.$id} ) { my ( $val, $msg ) = $ticket->Comment( Content => $content, TimeTaken => $ARGS{ 'UpdateTimeWorked-' . $id } ); push @results, loc( "Ticket [_1]: [_2]", $id, $msg ); } elsif ( my $worked = $ARGS{ 'UpdateTimeWorked-' . $id } ) { my ( $val, $msg ) = $ticket->SetTimeWorked( $worked + $ticket->TimeWorked ); push @results, loc( "Ticket [_1]: [_2]", $id, $msg ); } if ( my $status = $ARGS{ 'UpdateStatus-' . $id } ) { if ( $status ne $ticket->Status ) { my ( $val, $msg ) = $ticket->SetStatus($status); push @results, loc( "Ticket [_1]: [_2]", $id, $msg ); } } } my $Tickets = RT::Tickets->new($session{'CurrentUser'}); $Tickets->LimitOwner(VALUE => $session{'CurrentUser'}->Id); $Tickets->LimitToActiveStatus; $Tickets->OrderBy ( FIELD => 'Priority', ORDER => 'DESC'); rt-4.2.12/share/html/Tools/MyReminders.html000644 000765 000024 00000004261 12555754775 021200 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('My reminders') &> <& /Elements/Tabs &> <& /Elements/ShowReminders, OnlyOverdue => 0 &> <%INIT> return unless RT->Config->Get('EnableReminders'); rt-4.2.12/share/html/Ticket/Attachment/000755 000765 000024 00000000000 12555754775 020264 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Ticket/autohandler000644 000765 000024 00000005033 12555754775 020426 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> # Redirect to the approvals view if we're trying to get an approvals ticket # Exceptions: # - Display handles redirecting for approvals itself after mobile redirect/processing # - Create doesn't have an existing ticket # - Forward and ShowEmailRecord are used by the approvals view # - anything not ending in a .html my $whitelist = qr{ (?:/(?:Display|Create|Forward|ShowEmailRecord)\.html |(? $whitelist, ARGSRef => \%ARGS, ); $m->call_next; rt-4.2.12/share/html/Ticket/Create.html000644 000765 000024 00000036404 12555754775 020274 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title, onload => "function () { hide('Ticket-Create-details') }" &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    % $m->callback( CallbackName => 'FormStart', QueueObj => $QueueObj, ARGSRef => \%ARGS ); % if ($gnupg_widget) { <& /Elements/Crypt/SignEncryptWidget:ShowIssues, self => $gnupg_widget &> % }
    <&| /Widgets/TitleBox, title => loc("Basics"), class=>'ticket-info-basics' &> <& /Ticket/Elements/EditBasics, InTable => 1, fields => [ { name => 'Queue', comp => '/Ticket/Elements/ShowQueue', args => { QueueObj => $QueueObj, }, }, { name => 'Status', comp => '/Ticket/Elements/SelectStatus', args => { Name => "Status", QueueObj => $QueueObj, }, }, { name => 'Owner', comp => '/Elements/SelectOwner', args => { Name => "Owner", Default => $ARGS{Owner} || RT->Nobody->Id, DefaultValue => 0, QueueObj => $QueueObj, }, } ] &> % $m->callback( CallbackName => 'AfterOwner', ARGSRef => \%ARGS ); <& /Elements/EditCustomFields, %ARGS, Object => $ticket, CustomFields => $QueueObj->TicketCustomFields, Grouping => 'Basics', InTable => 1, KeepValue => 1, &> <& /Ticket/Elements/EditTransactionCustomFields, %ARGS, QueueObj => $QueueObj, InTable => 1, KeepValue => 1, &>
    % $m->callback( CallbackName => 'AfterBasics', QueueObj => $QueueObj, ARGSRef => \%ARGS ); <& /Elements/EditCustomFieldCustomGroupings, %ARGS, Object => $ticket, CustomFieldGenerator => sub { $QueueObj->TicketCustomFields }, KeepValue => 1, &>
    <&| /Widgets/TitleBox, title => $title, class => 'messagedetails' &> <& /Elements/EditCustomFields, %ARGS, Object => $ticket, CustomFields => $QueueObj->TicketCustomFields, Grouping => 'People', InTable => 1, KeepValue => 1, &> % if ( $gnupg_widget ) { % } <& /Ticket/Elements/AddAttachments, %ARGS, QueueObj => $QueueObj &>
    <&|/l&>Requestors: <& /Elements/EmailInput, Name => 'Requestors', Size => undef, Default => $ARGS{Requestors} // $session{CurrentUser}->EmailAddress, AutocompleteMultiple => 1 &> % $m->callback( CallbackName => 'AfterRequestors', QueueObj => $QueueObj, ARGSRef => \%ARGS );
    <&|/l&>Cc: <& /Elements/EmailInput, Name => 'Cc', Size => undef, Default => $ARGS{Cc}, AutocompleteMultiple => 1 &>
      <&|/l&>(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people will receive future updates.)
    <&|/l&>Admin Cc: <& /Elements/EmailInput, Name => 'AdminCc', Size => undef, Default => $ARGS{AdminCc}, AutocompleteMultiple => 1 &>
      <&|/l&>(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people will receive future updates.)
    <&|/l&>Subject: % $m->callback( %ARGS, CallbackName => 'AfterSubject' );
      <& /Elements/Crypt/SignEncryptWidget, self => $gnupg_widget, QueueObj => $QueueObj &>
    <&|/l&>Describe the issue below:
    % if ( RT->Config->Get('ArticleOnTicketCreate')) { <& /Articles/Elements/BeforeMessageBox, %ARGS, QueueObj => $QueueObj &> % } % $m->callback( %ARGS, QueueObj => $QueueObj, CallbackName => 'BeforeMessageBox' ); % if (exists $ARGS{Content}) { <& /Elements/MessageBox, Default => $ARGS{Content}, IncludeSignature => 0 &> % } else { <& /Elements/MessageBox, QuoteTransaction => $QuoteTransaction &> %} % $m->callback( %ARGS, QueueObj => $QueueObj, CallbackName => 'AfterMessageBox' );
    <& /Elements/Submit, Label => loc("Create"), id => 'SubmitTicket' &>
    <&| /Widgets/TitleBox, title => loc('The Basics'), title_class=> 'inverse', color => "#993333" &>
    <&|/l&>Priority: <& /Elements/SelectPriority, Name => "InitialPriority", Default => $ARGS{InitialPriority} ? $ARGS{InitialPriority} : $QueueObj->InitialPriority, &>
    <&|/l&>Final Priority: <& /Elements/SelectPriority, Name => "FinalPriority", Default => $ARGS{FinalPriority} ? $ARGS{FinalPriority} : $QueueObj->FinalPriority, &>
    <&|/l&>Time Estimated: <& /Elements/EditTimeValue, Name => 'TimeEstimated', Default => $ARGS{TimeEstimated} || '' &>
    <&|/l&>Time Worked: <& /Elements/EditTimeValue, Name => 'TimeWorked', Default => $ARGS{TimeWorked} || '' &>
    <&|/l&>Time Left: <& /Elements/EditTimeValue, Name => 'TimeLeft', Default => $ARGS{TimeLeft} || '' &>

    <&|/Widgets/TitleBox, title => loc("Dates"), title_class=> 'inverse', color => "#663366" &> <& /Elements/EditCustomFields, %ARGS, Object => $ticket, CustomFields => $QueueObj->TicketCustomFields, Grouping => 'Dates', InTable => 1, KeepValue => 1, &>
    <&|/l&>Starts:<& /Elements/SelectDate, Name => "Starts", Default => $ARGS{Starts} || '' &>
    <&|/l&>Due:<& /Elements/SelectDate, Name => "Due", Default => $ARGS{Due} || '' &>


    <& /Elements/Submit, Label => loc("Create") &>
    <%INIT> $m->callback( CallbackName => "Init", ARGSRef => \%ARGS ); my $Queue = $ARGS{Queue}; $session{DefaultQueue} = $Queue; my $current_user = $session{'CurrentUser'}; if ($CloneTicket) { my $CloneTicketObj = RT::Ticket->new( $session{CurrentUser} ); $CloneTicketObj->Load($CloneTicket) or Abort( loc("Ticket could not be loaded") ); my $clone = { Requestors => join( ',', $CloneTicketObj->RequestorAddresses ), Cc => join( ',', $CloneTicketObj->CcAddresses ), AdminCc => join( ',', $CloneTicketObj->AdminCcAddresses ), InitialPriority => $CloneTicketObj->Priority, }; $clone->{$_} = $CloneTicketObj->$_() for qw/Owner Subject FinalPriority TimeEstimated TimeWorked Status TimeLeft/; $clone->{$_} = $CloneTicketObj->$_->AsString for grep { $CloneTicketObj->$_->IsSet } map { $_ . "Obj" } qw/Starts Started Due Resolved/; my $get_link_value = sub { my ($link, $type) = @_; my $uri_method = $type . 'URI'; my $local_method = 'Local' . $type; my $uri = $link->$uri_method; return if $uri->IsLocal and $uri->Object and $uri->Object->isa('RT::Ticket') and $uri->Object->Type eq 'reminder'; return $link->$local_method || $uri->URI; }; my (@refers, @refers_by); my $refers = $CloneTicketObj->RefersTo; while ( my $refer = $refers->Next ) { my $refer_value = $get_link_value->($refer, 'Target'); push @refers, $refer_value if defined $refer_value; } $clone->{'new-RefersTo'} = join ' ', @refers; my $refers_by = $CloneTicketObj->ReferredToBy; while ( my $refer_by = $refers_by->Next ) { my $refer_by_value = $get_link_value->($refer_by, 'Base'); push @refers_by, $refer_by_value if defined $refer_by_value; } $clone->{'RefersTo-new'} = join ' ', @refers_by; my $cfs = $CloneTicketObj->QueueObj->TicketCustomFields(); while ( my $cf = $cfs->Next ) { my $cf_id = $cf->id; my $cf_values = $CloneTicketObj->CustomFieldValues( $cf->id ); my @cf_values; while ( my $cf_value = $cf_values->Next ) { push @cf_values, $cf_value->Content; } if ( @cf_values > 1 && $cf->Type eq 'Select' ) { $clone->{GetCustomFieldInputName( CustomField => $cf )} = \@cf_values; } else { $clone->{GetCustomFieldInputName( CustomField => $cf )} = join "\n", @cf_values; } } for ( keys %$clone ) { $ARGS{$_} = $clone->{$_} if not defined $ARGS{$_}; } } my @results; my $title = loc("Create a new ticket"); my $QueueObj = RT::Queue->new($current_user); $QueueObj->Load($Queue) || Abort(loc("Queue [_1] could not be loaded.", $Queue||'')); $m->callback( QueueObj => $QueueObj, title => \$title, results => \@results, ARGSRef => \%ARGS ); $m->scomp( '/Articles/Elements/SubjectOverride', ARGSRef => \%ARGS, QueueObj => $QueueObj, results => \@results ); $QueueObj->Disabled && Abort(loc("Cannot create tickets in a disabled queue.")); my $ticket = RT::Ticket->new($current_user); # empty ticket object ProcessAttachments(ARGSRef => \%ARGS); my $checks_failure = 0; { my ($status, @msg) = $m->comp( '/Elements/ValidateCustomFields', CustomFields => $QueueObj->TicketCustomFields, ARGSRef => \%ARGS ); unless ($status) { $checks_failure = 1; push @results, @msg; } } my $gnupg_widget = $m->comp('/Elements/Crypt/SignEncryptWidget:new', Arguments => \%ARGS ); $m->comp( '/Elements/Crypt/SignEncryptWidget:Process', self => $gnupg_widget, QueueObj => $QueueObj, ); if ( !exists $ARGS{'AddMoreAttach'} && ($ARGS{'id'}||'') eq 'new' ) { my $status = $m->comp('/Elements/Crypt/SignEncryptWidget:Check', self => $gnupg_widget, Operation => 'Create', QueueObj => $QueueObj, ); $checks_failure = 1 unless $status; } # check email addresses for RT's { foreach my $field ( qw(Requestors Cc AdminCc) ) { my $value = $ARGS{ $field }; next unless defined $value && length $value; my @emails = Email::Address->parse( $value ); foreach my $email ( grep RT::EmailParser->IsRTAddress($_->address), @emails ) { push @results, loc("[_1] is an address RT receives mail at. Adding it as a '[_2]' would create a mail loop", $email->format, loc($field =~ /^(.*?)s?$/) ); $checks_failure = 1; $email = undef; } $ARGS{ $field } = join ', ', map $_->format, grep defined, @emails; } } my $skip_create = 0; $m->callback( CallbackName => 'BeforeCreate', ARGSRef => \%ARGS, skip_create => \$skip_create, checks_failure => $checks_failure, results => \@results ); $m->comp( '/Articles/Elements/CheckSkipCreate', ARGSRef => \%ARGS, skip_create => \$skip_create, checks_failure => $checks_failure, results => \@results ); if ((!exists $ARGS{'AddMoreAttach'}) and (defined($ARGS{'id'}) and $ARGS{'id'} eq 'new')) { # new ticket? if ( !$checks_failure && !$skip_create ) { $m->comp('Display.html', %ARGS); $RT::Logger->crit("After display call; error is $@"); $m->abort(); } } PageMenu->child( basics => raw_html => q[] . loc('Basics') . q[]); PageMenu->child( details => raw_html => q[] . loc('Details') . q[]); <%ARGS> $DependsOn => undef $DependedOnBy => undef $MemberOf => undef $QuoteTransaction => undef $CloneTicket => undef rt-4.2.12/share/html/Ticket/Crypt.html000644 000765 000024 00000006756 12555754775 020201 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> % $m->callback( CallbackName => 'BeforeActionList', %ARGS, Actions => \@results, ARGSRef => \%ARGS ); <& /Elements/ListActions, actions => \@results &>
    <% loc('Return back to the ticket') %> <& /Elements/Submit, Label => ($encrypted? loc('Decrypt'): loc('Encrypt')), Name => ($encrypted? 'Decrypt': 'Encrypt'), &>
    <%ARGS> $id => undef $Encrypt => 0 $Decrypt => 0 <%INIT> my $txn = RT::Transaction->new( $session{'CurrentUser'} ); $txn->Load( $id ); unless ( $txn->id ) { Abort(loc("Couldn't load transaction #[_1]", $id)); } $id = $txn->id; my @results; my $encrypted = 0; my $attachments = $txn->Attachments; while ( my $attachment = $attachments->Next ) { next unless $attachment->ContentType =~ m{^x-application-rt/[^-]+-encrypted\b}; $encrypted = 1; last; } $attachments->GotoFirstItem; if ( $Encrypt || $Decrypt ) { my $done = 1; while ( my $attachment = $attachments->Next ) { my ($status, $msg) = $Decrypt? $attachment->Decrypt : $attachment->Encrypt; push @results, $msg; unless ( $status ) { $done = 0; last; } } $encrypted = !$encrypted if $done; } my $title = loc("Encrypt/Decrypt transaction #[_1] of ticket #[_2]", $id, $txn->Ticket); rt-4.2.12/share/html/Ticket/Display.html000644 000765 000024 00000020435 12555754775 020473 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title, LinkRel => \%link_rel &> <& /Elements/Tabs &> % $m->callback(CallbackName => 'BeforeActionList', %ARGS, Actions => \@Actions, ARGSRef => \%ARGS, Ticket => $TicketObj); <& /Elements/ListActions, actions => \@Actions &> <& Elements/ShowUpdateStatus, Ticket => $TicketObj &> <& Elements/ShowDependencyStatus, Ticket => $TicketObj &> % $m->callback( %ARGS, Ticket => $TicketObj, Transactions => $transactions, Attachments => $attachments, CallbackName => 'BeforeShowSummary' );
    <&| /Widgets/TitleBox, title => loc('Ticket metadata') &> <& /Ticket/Elements/ShowSummary, Ticket => $TicketObj, Attachments => $attachments &>

    % $m->callback( Ticket => $TicketObj, %ARGS, Transactions => $transactions, Attachments => $attachments, CallbackName => 'BeforeShowHistory' ); % my $ShowHistory = RT->Config->Get("ShowHistory", $session{'CurrentUser'}); % if ($ShowHistory eq "delay") { <& /Ticket/Elements/DelayShowHistory, Ticket => $TicketObj, ShowHeaders => $ARGS{'ShowHeaders'}, &> % } elsif (not $ForceShowHistory and $ShowHistory eq "click") { <& /Ticket/Elements/ClickToShowHistory, Ticket => $TicketObj, ShowHeaders => $ARGS{'ShowHeaders'}, &> % } else { <& /Elements/ShowHistory , Object => $TicketObj, Transactions => $transactions, ShowHeaders => $ARGS{'ShowHeaders'}, Attachments => $attachments, AttachmentContent => $attachment_content &> % } % $m->callback( %ARGS, % Ticket => $TicketObj, % Transactions => $transactions, % Attachments => $attachments, % CallbackName => 'AfterShowHistory', % ); <%ARGS> $id => undef $TicketObj => undef $ShowHeaders => 0 $ForceShowHistory => 0 <%INIT> $m->callback( TicketObj => $TicketObj, ARGSRef => \%ARGS, CallbackName => 'Initial' ); if ( ! $ARGS{'NoRedirect'} && RT::Interface::Web->MobileClient()) { $id ||= $TicketObj->id if $TicketObj; RT::Interface::Web::Redirect(RT->Config->Get('WebURL').'m/ticket/show?id='.$id); $m->abort; } my (@Actions, $title); unless ($id || $TicketObj) { Abort('No ticket specified'); } if ($ARGS{'id'} eq 'new') { # Create a new ticket my $Queue = RT::Queue->new( $session{'CurrentUser'} ); $Queue->Load($ARGS{'Queue'}); unless ( $Queue->id ) { Abort('Queue not found'); } unless ( $Queue->CurrentUserHasRight('CreateTicket') ) { Abort('You have no permission to create tickets in that queue.'); } ($TicketObj, @Actions) = CreateTicket( %ARGS ); unless ( $TicketObj->CurrentUserHasRight('ShowTicket') ) { Abort("No permission to view newly created ticket #".$TicketObj->id."."); } } else { $TicketObj ||= LoadTicket($ARGS{'id'}); $TicketObj->CurrentUser->PrincipalObj->HasRights( Object => $TicketObj ); my $SkipProcessing; $m->callback( CallbackName => 'BeforeProcessArguments', TicketObj => $TicketObj, ActionsRef => \@Actions, ARGSRef => \%ARGS, SkipProcessing => \$SkipProcessing ); if ( !$SkipProcessing ) { if ( defined $ARGS{'Action'} ) { if ($ARGS{'Action'} =~ /^(Steal|Delete|Take|SetTold)$/) { my $action = $1; my ($res, $msg) = $TicketObj->$action(); push(@Actions, $msg); } } $m->callback(CallbackName => 'ProcessArguments', Ticket => $TicketObj, ARGSRef => \%ARGS, Actions => \@Actions); push @Actions, ProcessUpdateMessage( ARGSRef => \%ARGS, Actions => \@Actions, TicketObj => $TicketObj, ); #Process status updates push @Actions, ProcessTicketWatchers(ARGSRef => \%ARGS, TicketObj => $TicketObj ); push @Actions, ProcessTicketBasics( ARGSRef => \%ARGS, TicketObj => $TicketObj ); push @Actions, ProcessTicketLinks( ARGSRef => \%ARGS, TicketObj => $TicketObj ); push @Actions, ProcessTicketDates( ARGSRef => \%ARGS, TicketObj => $TicketObj ); push @Actions, ProcessObjectCustomFieldUpdates(ARGSRef => \%ARGS, TicketObj => $TicketObj ); push @Actions, ProcessTicketReminders( ARGSRef => \%ARGS, TicketObj => $TicketObj ); unless ($TicketObj->CurrentUserHasRight('ShowTicket')) { if (@Actions) { Abort("A change was applied successfully, but you no longer have permissions to view the ticket", Actions => \@Actions); } else { Abort("No permission to view ticket"); } } if ( $ARGS{'MarkAsSeen'} ) { $TicketObj->SetAttribute( Name => 'User-'. $TicketObj->CurrentUser->id .'-SeenUpTo', Content => $TicketObj->LastUpdated, ); push @Actions, loc('Marked all messages as seen'); } } } $title = loc("#[_1]: [_2]", $TicketObj->Id, $TicketObj->Subject || ''); $m->callback( CallbackName => 'BeforeDisplay', TicketObj => \$TicketObj, Actions => \@Actions, title => \$title, ARGSRef => \%ARGS, ); # This code does automatic redirection if any updates happen. MaybeRedirectForResults( Actions => \@Actions, $TicketObj->Type eq 'approval' && RT->Config->Get('ForceApprovalsView') ? (Path => "/Approvals/Display.html", Force => 1) : (Path => "/Ticket/Display.html") , Anchor => $ARGS{'Anchor'}, Arguments => { id => $TicketObj->id }, ); my $transactions = $TicketObj->SortedTransactions; my $attachments = $TicketObj->Attachments; my $attachment_content = $TicketObj->TextAttachments; my %link_rel; if (defined $session{'tickets'} and ($ARGS{'Query'} or $session{'CurrentSearchHash'}->{'Query'})) { my $item_map = $session{'tickets'}->ItemMap; $link_rel{first} = "Ticket/Display.html?id=" . $item_map->{first} if $item_map->{$TicketObj->Id}{prev}; $link_rel{prev} = "Ticket/Display.html?id=" . $item_map->{$TicketObj->Id}{prev} if $item_map->{$TicketObj->Id}{prev}; $link_rel{next} = "Ticket/Display.html?id=" . $item_map->{$TicketObj->Id}{next} if $item_map->{$TicketObj->Id}{next}; $link_rel{last} = "Ticket/Display.html?id=" . $item_map->{last} if $item_map->{$TicketObj->Id}{next} && $item_map->{last}; } rt-4.2.12/share/html/Ticket/Elements/000755 000765 000024 00000000000 12555754775 017750 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Ticket/Forward.html000644 000765 000024 00000012061 12555754775 020466 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $Title &> <& /Elements/Tabs &> % $m->callback(CallbackName => 'BeforeActionList', Actions => \@results, ARGSRef => \%ARGS, Ticket => $TicketObj); <& /Elements/ListActions, actions => \@results &>
    % $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS );
    <&|/l&>From: <% $from %>
    <&|/l&>Subject:
    <&|/l&>To: <& /Elements/EmailInput, Name => "To", AutocompleteMultiple => 1, Default => $ARGS{'To'} &>
    <&|/l&>Cc: <& /Elements/EmailInput, Name => "Cc", AutocompleteMultiple => 1, Default => $ARGS{'Cc'} &>
    <&|/l&>Bcc: <& /Elements/EmailInput, Name => "Bcc", AutocompleteMultiple => 1, Default => $ARGS{'Bcc'} &>
    <&|/l&>Content: % if (exists $ARGS{Content}) { <& /Elements/MessageBox, Default => $ARGS{Content}, IncludeSignature => 0 &> % } else { <& /Elements/MessageBox &> %}
    <& /Ticket/Elements/ShowAttachments, Ticket => $TicketObj, Attachments => $attachments &> <& /Elements/Submit, Label => loc('Forward Message and Return'), Name => 'ForwardAndReturn' &> <& /Elements/Submit, Label => loc('Forward Message'), Name => 'Forward' &>
    <%INIT> my $TicketObj = LoadTicket($id); $id = $ARGS{'id'} = $TicketObj->id; Abort( loc("Permission Denied") ) unless $TicketObj->CurrentUserHasRight('ForwardMessage'); my $txn; if ( $QuoteTransaction ) { $txn = RT::Transaction->new( $session{'CurrentUser'} ); $txn->Load( $QuoteTransaction ); Abort( loc("Couldn't load transaction #[_1]", $QuoteTransaction) ) unless $txn->id; } my @results; if ( $Forward || $ForwardAndReturn ) { my ( $status, $msg ) = $TicketObj->Forward( Transaction => $txn, %ARGS ); push @results, $msg; if ( $ForwardAndReturn ) { $session{'i'}++; my $key = Digest::MD5::md5_hex(rand(1024)); push @{ $session{"Actions"}->{$key} ||= [] }, @results; RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."Ticket/Display.html?id=". $id."&results=".$key); } } my $Title = $txn ? loc('Forward transaction #[_1]', $txn->id) : loc('Forward ticket #[_1]', $TicketObj->id); my $from = RT::Interface::Email::GetForwardFrom( $txn ? ( Transaction => $txn ) : ( Ticket => $TicketObj ) ); my $subject = "Fwd: ".($txn || $TicketObj)->Subject; my $attachments = RT::Interface::Email::GetForwardAttachments( Ticket => $TicketObj, $txn ? ( Transaction => $txn ) : (), ); <%ARGS> $id => undef $QuoteTransaction => undef $ForwardAndReturn => 0, $Forward => $ForwardAndReturn, rt-4.2.12/share/html/Ticket/Graphs/000755 000765 000024 00000000000 12555754775 017420 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Ticket/History.html000644 000765 000024 00000005413 12555754775 020526 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Ticket History # [_1] [_2]", $Ticket->Id, $Ticket->Subject) &> <& /Elements/Tabs &> % $m->callback( %ARGS, Ticket => $Ticket, CallbackName => 'BeforeActionList' );
    <& /Elements/ShowHistory, Object => $Ticket, ShowHeaders => $ARGS{'ShowHeaders'}, Attachments => $attachments, AttachmentContent => $attachment_content, DisplayPath => 'History.html', &> % $m->callback( %ARGS, CallbackName => 'AfterShowHistory', Ticket => $Ticket ); <%ARGS> $id => undef <%INIT> my $Ticket = LoadTicket ($id); unless ($Ticket->CurrentUserHasRight('ShowTicket')) { Abort("No permission to view ticket"); } my $attachments = $Ticket->Attachments; my $attachment_content = $Ticket->TextAttachments; rt-4.2.12/share/html/Ticket/Modify.html000644 000765 000024 00000011147 12555754775 020315 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Modify ticket #[_1]', $TicketObj->Id) &> <& /Elements/Tabs &> % $m->callback(CallbackName => 'BeforeActionList', Actions => \@results, ARGSRef => \%ARGS, Ticket => $TicketObj); <& /Elements/ListActions, actions => \@results &>
    % $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS ); <&| /Widgets/TitleBox, title => loc('Modify ticket #[_1]',$TicketObj->Id), class=>'ticket-info-basics' &> <& Elements/EditBasics, TicketObj => $TicketObj, defaults => \%ARGS, InTable => 1 &> <& /Elements/EditCustomFields, Object => $TicketObj, Grouping => 'Basics', InTable => 1 &>
    % $m->callback( CallbackName => 'AfterBasics', Ticket => $TicketObj ); <& /Elements/EditCustomFieldCustomGroupings, Object => $TicketObj &> <& /Elements/Submit, Name => 'SubmitTicket', Label => loc('Save Changes'), Caption => loc("If you've updated anything above, be sure to"), color => "#993333" &>
    % $m->callback(CallbackName => 'AfterForm', ARGSRef => \%ARGS, Ticket => $TicketObj); <%INIT> my $TicketObj = LoadTicket($id); my $CustomFields = $TicketObj->CustomFields; my @results; my $skip_update = 0; # Now let callbacks have a chance at editing %ARGS $m->callback( TicketObj => $TicketObj, CustomFields => $CustomFields, ARGSRef => \%ARGS, skip_update => \$skip_update, results => \@results ); { my ($status, @msg) = $m->comp( '/Elements/ValidateCustomFields', Object => $TicketObj, CustomFields => $CustomFields, ARGSRef => \%ARGS, ); unless ($status) { push @results, @msg; $skip_update = 1; } } unless ($skip_update) { push @results, ProcessTicketBasics(TicketObj => $TicketObj, ARGSRef => \%ARGS); push @results, ProcessObjectCustomFieldUpdates(Object => $TicketObj, ARGSRef => \%ARGS); $m->callback( CallbackName => 'ProcessUpdates', TicketObj => $TicketObj, ARGSRef => \%ARGS, Results => \@results ); $TicketObj->ApplyTransactionBatch; MaybeRedirectForResults( Actions => \@results, Path => "/Ticket/Modify.html", Arguments => { id => $TicketObj->id }, ); } unless ($TicketObj->CurrentUserHasRight('ShowTicket')) { if (@results) { Abort("A change was applied successfully, but you no longer have permissions to view the ticket", Actions => \@results); } else { Abort("No permission to view ticket"); } } <%ARGS> $id => undef rt-4.2.12/share/html/Ticket/ModifyAll.html000644 000765 000024 00000020032 12555754775 020737 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Ticket #[_1] Jumbo update: [_2]", $Ticket->Id, $Ticket->Subject) &> <& /Elements/Tabs &> % $m->callback(CallbackName => 'BeforeActionList', Actions => \@results, ARGSRef => \%ARGS, Ticket => $Ticket); <& /Elements/ListActions, actions => \@results &>
    % $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS ); <&| /Widgets/TitleBox, title => loc('Modify ticket # [_1]', $Ticket->Id), class=>'ticket-info-basics' &> <& Elements/EditBasics, TicketObj => $Ticket, defaults => \%ARGS &> <& /Elements/EditCustomFields, Object => $Ticket, Grouping => 'Basics' &> % $m->callback(CallbackName => 'AfterBasics', Ticket => $Ticket); <& /Elements/EditCustomFieldCustomGroupings, Object => $Ticket &> <&| /Widgets/TitleBox, title => loc('Dates'), class=>'ticket-info-dates'&> <& Elements/EditDates, TicketObj => $Ticket &>
    <&| /Widgets/TitleBox, title => loc('People'), class=>'ticket-info-people' &> <& Elements/EditPeople, Ticket => $Ticket, UserField => $UserField, UserString => $UserString, UserOp => $UserOp, GroupString => $GroupString, GroupOp => $GroupOp, GroupField => $GroupField &>
    <&| /Widgets/TitleBox, title => loc('Links'), class=>'ticket-info-links' &> <& /Elements/EditLinks, Object => $Ticket &>
    <&| /Widgets/TitleBox, title => loc('Merge'), class=>'ticket-info-merge' &> <& Elements/EditMerge, Ticket => $Ticket, %ARGS &>
    <&| /Widgets/TitleBox, title => loc('Update ticket') &> <& /Ticket/Elements/AddAttachments, %ARGS, TicketObj => $Ticket &>
    <&|/l&>Update Type: % $m->callback( %ARGS, CallbackName => 'AfterUpdateType' );
    <&|/l&>Subject: % $m->callback( %ARGS, CallbackName => 'AfterSubject' );
    <& /Ticket/Elements/EditTransactionCustomFields, %ARGS, TicketObj => $Ticket, KeepValue => 1, &>
    <&|/l&>Content: % $m->callback( %ARGS, CallbackName => 'BeforeMessageBox' ); % if (defined $ARGS{UpdateContent} && length($ARGS{UpdateContent})) { <& /Elements/MessageBox, Name=>"UpdateContent", Default=>$ARGS{UpdateContent}, IncludeSignature => 0 &> % } else { <& /Elements/MessageBox, Name=>"UpdateContent", QuoteTransaction=>$ARGS{QuoteTransaction} &> % }
    <& /Elements/Submit, Name => 'SubmitTicket', Label => loc('Save Changes'), Caption => loc("If you've updated anything above, be sure to"), color => "#333399" &>
    % $m->callback(CallbackName => 'AfterForm', ARGSRef => \%ARGS, Ticket => $Ticket); <%INIT> my $Ticket = LoadTicket($id); my $CustomFields = $Ticket->CustomFields; my $CanRespond = 0; my $CanComment = 0; $CanRespond = 1 if ( $Ticket->CurrentUserHasRight('ReplyToTicket') or $Ticket->CurrentUserHasRight('ModifyTicket') ); $CanComment = 1 if ( $Ticket->CurrentUserHasRight('CommentOnTicket') or $Ticket->CurrentUserHasRight('ModifyTicket') ); ProcessAttachments(ARGSRef => \%ARGS); my @results; my $skip_update = 0; $m->callback( TicketObj => $Ticket, ARGSRef => \%ARGS, skip_update => \$skip_update, results => \@results ); { my ($status, @msg) = $m->comp( '/Elements/ValidateCustomFields', Object => $Ticket, CustomFields => $CustomFields, ARGSRef => \%ARGS, ); unless ($status) { push @results, @msg; $skip_update = 1; } } # There might be two owners. if ( ref ($ARGS{'Owner'} )) { my @owners =@{$ARGS{'Owner'}}; delete $ARGS{'Owner'}; foreach my $owner(@owners){ if (defined($owner) && $owner =~ /\D/) { $ARGS{'Owner'} = $owner unless ($Ticket->OwnerObj->Name eq $owner); } elsif (length $owner) { $ARGS{'Owner'} = $owner unless ($Ticket->OwnerObj->id == $owner); } } } unless ($skip_update or $OnlySearchForPeople or $OnlySearchForGroup or $ARGS{'AddMoreAttach'} ) { push @results, ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS); push @results, ProcessObjectCustomFieldUpdates( Object => $Ticket, ARGSRef => \%ARGS); push @results, ProcessTicketDates( TicketObj => $Ticket, ARGSRef => \%ARGS); push @results, ProcessUpdateMessage( TicketObj => $Ticket, ARGSRef=>\%ARGS ); push @results, ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS ); push @results, ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS); $Ticket->ApplyTransactionBatch; MaybeRedirectForResults( Actions => \@results, Path => "/Ticket/ModifyAll.html", Arguments => { id => $Ticket->id }, ); } # If they've gone and moved the ticket to somewhere they can't see, etc... unless ($Ticket->CurrentUserHasRight('ShowTicket')) { if (@results) { Abort("A change was applied successfully, but you no longer have permissions to view the ticket", Actions => \@results); } else { Abort("No permission to view ticket"); } } <%ARGS> $OnlySearchForPeople => undef $OnlySearchForGroup => undef $UserField => undef $UserOp => undef $UserString => undef $GroupString => undef $GroupOp => undef $GroupField => undef $id => undef rt-4.2.12/share/html/Ticket/ModifyDates.html000644 000765 000024 00000006207 12555754775 021277 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Modify dates for ticket #[_1]', $TicketObj->Id) &> <& /Elements/Tabs &> % $m->callback(CallbackName => 'BeforeActionList', Actions => \@results, ARGSRef => \%ARGS, Ticket => $TicketObj); <& /Elements/ListActions, actions => \@results &>
    % $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS ); <&| /Widgets/TitleBox,title => loc('Modify dates for ticket #[_1]', $TicketObj->Id), class=> 'ticket-info-dates' &> <& Elements/EditDates, TicketObj => $TicketObj &> <& /Elements/Submit, Name => 'SubmitTicket', Label => loc('Save Changes') &>
    % $m->callback(CallbackName => 'AfterForm', ARGSRef => \%ARGS, Ticket => $TicketObj); <%INIT> my $TicketObj = LoadTicket($id); $m->callback( TicketObj => $TicketObj, ARGSRef => \%ARGS ); my @results = ProcessTicketDates( TicketObj => $TicketObj, ARGSRef => \%ARGS); push @results, ProcessObjectCustomFieldUpdates(Object => $TicketObj, ARGSRef => \%ARGS); $TicketObj->ApplyTransactionBatch; <%ARGS> $id => undef rt-4.2.12/share/html/Ticket/ModifyLinks.html000644 000765 000024 00000007044 12555754775 021317 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Link ticket #[_1]", $Ticket->Id) &> <& /Elements/Tabs &> % $m->callback(CallbackName => 'BeforeActionList', Actions => \@results, ARGSRef => \%ARGS, Ticket => $Ticket); <& /Elements/ListActions, actions => \@results &>
    % $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS ); % my (@extra); % push @extra, titleright_raw => ''.loc('Graph').'' unless RT->Config->Get('DisableGraphViz'); <&| /Widgets/TitleBox, title => loc('Edit Links'), class=>'ticket-info-links', @extra &> <& /Elements/EditLinks, Object => $Ticket &> <&| /Widgets/TitleBox, title => loc('Merge'), class=>'ticket-info-merge' &> <& Elements/EditMerge, Ticket => $Ticket, %ARGS &> <& /Elements/Submit, Name => 'SubmitTicket', Label => loc('Save Changes') &>
    % $m->callback(CallbackName => 'AfterForm', ARGSRef => \%ARGS, Ticket => $Ticket); <%INIT> my $Ticket = LoadTicket($id); my @results; $m->callback( TicketObj => $Ticket, ARGSRef => \%ARGS, Results => \@results ); push @results, ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS ); push @results, ProcessObjectCustomFieldUpdates( TicketObj => $Ticket, ARGSRef => \%ARGS ); $Ticket->ApplyTransactionBatch; MaybeRedirectForResults( Actions => \@results, Arguments => { id => $id }, ); <%ARGS> $id => undef rt-4.2.12/share/html/Ticket/ModifyPeople.html000644 000765 000024 00000013660 12555754775 021464 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Modify people related to ticket #[_1]', $Ticket->id) &> <& /Elements/Tabs &> % $m->callback(CallbackName => 'BeforeActionList', Actions => \@results, ARGSRef => \%ARGS, Ticket => $Ticket); <& /Elements/ListActions, actions => \@results &>
    % $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS ); <&| /Widgets/TitleBox, title => loc('Modify people related to ticket #[_1]', $Ticket->Id), width => "100%", color=> "#333399", class=>'ticket-info-people' &> <& Elements/EditPeople, Ticket => $Ticket, UserField => $UserField, UserString => $UserString, UserOp => $UserOp, GroupString => $GroupString, GroupOp => $GroupOp, GroupField => $GroupField &> <&| /Widgets/TitleBox, title => loc("Modify who receives mail for ticket #[_1]", $Ticket->Id), width => "100%", color=> "#333399", class=>'ticket-info-squelch' &>

    <&|/l&>The checked users may receive email related to this ticket depending on the action taken. Uncheck users to stop sending email to them about this ticket.

      % for my $addr (sort keys %recips) {
    • >
    • % }
    <& /Elements/Submit, Name => 'SubmitTicket', Label => loc('Save Changes'), Caption => loc("If you've updated anything above, be sure to"), color => "#333399" &>
    % $m->callback(CallbackName => 'AfterForm', ARGSRef => \%ARGS, Ticket => $Ticket); <%INIT> my @results; my $Ticket = LoadTicket($id); $m->callback( TicketObj => $Ticket, ARGSRef => \%ARGS ); # Update the squelch list my %squelched = map {$_->Content => 1} $Ticket->SquelchMailTo; my %checked = map {$_ => 1} grep {defined} (ref $ARGS{'checked_recipient'} eq "ARRAY" ? @{$ARGS{'checked_recipient'}} : defined $ARGS{'checked_recipient'} ? ($ARGS{'checked_recipient'}) : ()); my @all = grep {defined} (ref $ARGS{'autorecipient'} eq "ARRAY" ? @{$ARGS{'autorecipient'}} : defined $ARGS{'autorecipient'} ? ($ARGS{'autorecipient'}) : ()); $Ticket->UnsquelchMailTo($_) for grep {$squelched{$_}} keys %checked; $Ticket->SquelchMailTo($_) for grep {!$squelched{$_} and !$checked{$_}} @all; # if we're trying to search for watchers and nothing else unless ($OnlySearchForPeople or $OnlySearchForGroup) { push @results, ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS); push @results, ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS); push @results, ProcessObjectCustomFieldUpdates( TicketObj => $Ticket, ARGSRef => \%ARGS ); $Ticket->ApplyTransactionBatch; } # Use the ticket's scrips to figure out the new list of recipients. my @txns = grep {defined} map {$Ticket->DryRun( Action => $_ )} qw/comment respond/; my %recips=(); for my $scrip (map {@{$_->Scrips->Prepared}} @txns) { next unless $scrip->ActionObj->Action->isa('RT::Action::SendEmail'); for my $type (qw(To Cc Bcc)) { $recips{$_->address} = 1 for $scrip->ActionObj->Action->$type(); } } for my $rule (map {@{$_->Rules}} @txns) { next unless $rule->{hints} && $rule->{hints}{class} eq "SendEmail"; for my $type (qw(To Cc Bcc)) { $recips{$_} = 1 for @{$rule->{hints}{recips}{$type}}; } } # Use tkt squelch list to get recipients who will NOT get mail: $recips{$_->Content} = 0 for $Ticket->SquelchMailTo; <%ARGS> $OnlySearchForPeople => undef $OnlySearchForGroup => undef $UserField => undef $UserOp => undef $UserString => undef $GroupField => undef $GroupOp => undef $GroupString => undef $id => undef rt-4.2.12/share/html/Ticket/Reminders.html000644 000765 000024 00000005470 12555754775 021020 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Reminders for ticket #[_1]", $Ticket->Id) &> <& /Elements/Tabs &> % $m->callback(CallbackName => 'BeforeActionList', ARGSRef => \%ARGS, Ticket => $Ticket); <& /Elements/ListActions, actions => \@actions &>
    <&|/Widgets/TitleBox, title => loc("Reminders"), class=>'ticket-info-reminders' &> <& /Ticket/Elements/Reminders, Ticket => $Ticket, ShowCompleted => 1, Edit => 1, ShowSave => 0 &> <& /Elements/Submit, Label => loc('Save Changes') &>
    <%INIT> my $Ticket = LoadTicket($id); my @actions = ProcessTicketReminders( TicketObj => $Ticket, ARGSRef => \%ARGS ); <%ARGS> $id => undef rt-4.2.12/share/html/Ticket/ShowEmailRecord.html000644 000765 000024 00000010517 12555754775 022115 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Attachment => undef $Transaction => undef <%INIT> my $plain_text_mono = RT->Config->Get( 'PlainTextMono', $session{'CurrentUser'} ); my $use_brs = !$plain_text_mono; my $show_content = sub { my $attach = shift; if ( $attach->ContentType =~ m{^(?:text|message)/}i ) { my $content = $m->interp->apply_escapes( $attach->Content, 'h' ); $content =~ s{(\r?\n)}{
    }g if $use_brs; $m->out( $content ); return; } my $href = RT->Config->Get('WebPath') .'/Ticket/Attachment/' . $attach->TransactionId .'/'. $attach->id .'/' . $m->interp->apply_escapes( $attach->Filename, 'u' ); $m->out( ''. loc('download') .'' ); }; my $show; $show = sub { my $attach = shift; $m->out('
    '); $m->out('
    ') if $plain_text_mono; my $headers = $m->interp->apply_escapes( $attach->Headers, 'h' ); $headers =~ s{(\r?\n)}{
    }g if $use_brs; $m->out( $headers ); $m->out( $use_brs ? "

    " : "\n\n" ); if ( $attach->ContentType =~ m{^multipart/}i ) { my $children = $attach->Children; while ( my $child = $children->Next ) { $show->( $child ); } } else { $show_content->( $attach ); } $m->out('
    ') if $plain_text_mono; $m->out('
    '); }; # Set error for error message below. Abort doesn't display well # because ShowEmailRecord doesn't use the standard RT menus # and headers. my ($title, $error); my $AttachmentObj = RT::Attachment->new($session{'CurrentUser'}); $AttachmentObj->Load($Attachment); if ( not $AttachmentObj->id or not $AttachmentObj->TransactionId() == $Transaction ) { $title = loc("Error loading attachment"); $error = loc("Attachment '[_1]' could not be loaded", $Attachment); } elsif ( not $AttachmentObj->TransactionObj->CurrentUserCanSee("Transaction")){ $title = loc("Permission Denied"); $error = loc("Permission Denied"); } else{ $title = loc("Email Source for Ticket [_1], Attachment [_2]", $AttachmentObj->TransactionObj->ObjectId, $AttachmentObj->Id); } <& /Elements/Header, ShowBar => 0, Title => $title &> % if ( $error ){
    <% $error %>
    % } % else{ % $show->( $AttachmentObj ); % } % $m->abort; rt-4.2.12/share/html/Ticket/Update.html000644 000765 000024 00000026677 12555754775 020326 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> % $m->callback(CallbackName => 'BeforeActionList', ARGSRef => \%ARGS, Ticket => $TicketObj); <& /Elements/ListActions, actions => \@results &>
    % $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS, Ticket => $TicketObj, CanRespond => $CanRespond, CanComment => $CanComment, ResponseDefault => $ResponseDefault, CommentDefault => $CommentDefault ); <& /Elements/Crypt/SignEncryptWidget:ShowIssues, self => $gnupg_widget &>
    <&|/Widgets/TitleBox, title => loc('Ticket and Transaction') &> % $m->callback(CallbackName => 'AfterTableOpens', ARGSRef => \%ARGS, Ticket => $TicketObj); % my $skip; % $m->callback( %ARGS, CallbackName => 'BeforeUpdateType', skip => \$skip ); % if (!$skip) {
    % } <& /Ticket/Elements/EditBasics, TicketObj => $TicketObj, InTable => 1, fields => [ { name => 'Status', comp => '/Ticket/Elements/SelectStatus', args => { Name => 'Status', Default => $DefaultStatus, TicketObj => $TicketObj, }, }, { name => 'Owner', comp => '/Elements/SelectOwner', args => { Name => "Owner", TicketObj => $TicketObj, QueueObj => $TicketObj->QueueObj, DefaultLabel => loc("[_1] (Unchanged)", $TicketObj->OwnerObj->Format), Default => $ARGS{'Owner'} } }, { name => 'Worked', comp => '/Elements/EditTimeValue', args => { Name => 'UpdateTimeWorked', Default => $ARGS{UpdateTimeWorked}||'', } }, ] &> % $m->callback( %ARGS, CallbackName => 'AfterWorked', Ticket => $TicketObj ); <& /Ticket/Elements/EditTransactionCustomFields, %ARGS, TicketObj => $TicketObj, InTable => 1, KeepValue => 1, &>
    <&|/l&>Update Type: % $m->callback( %ARGS, CallbackName => 'AfterUpdateType' );
    <& /Ticket/Elements/ShowSimplifiedRecipients, TicketObj => $TicketObj, %ARGS &> <&|/Widgets/TitleBox, title => loc('Message'), class => 'messagedetails' &> <& /Ticket/Elements/UpdateCc, %ARGS, TicketObj => $TicketObj &> % if ( $gnupg_widget ) { % } % $m->callback( %ARGS, CallbackName => 'AfterGnuPG' ); <& /Ticket/Elements/AddAttachments, %ARGS, TicketObj => $TicketObj &>
      <& /Elements/Crypt/SignEncryptWidget, self => $gnupg_widget, TicketObj => $TicketObj, &>
    <&|/l&>Subject: % $m->callback( %ARGS, CallbackName => 'AfterSubject' );
    <&|/l&>Message: <& /Articles/Elements/BeforeMessageBox, %ARGS &> % $m->callback( %ARGS, CallbackName => 'BeforeMessageBox' ); % if (exists $ARGS{UpdateContent}) { % # preserve QuoteTransaction so we can use it to set up sane references/in/reply to % my $temp = $ARGS{'QuoteTransaction'}; % delete $ARGS{'QuoteTransaction'}; <& /Elements/MessageBox, Name=>"UpdateContent", Default=>$ARGS{UpdateContent}, IncludeSignature => 0, %ARGS&> % $ARGS{'QuoteTransaction'} = $temp; % } else { % my $IncludeSignature = 1; % $IncludeSignature = 0 if $Action ne 'Respond' && !RT->Config->Get('MessageBoxIncludeSignatureOnComment'); <& /Elements/MessageBox, Name=>"UpdateContent", IncludeSignature => $IncludeSignature, %ARGS &> % } % $m->callback( %ARGS, CallbackName => 'AfterMessageBox' );
    % $m->callback( %ARGS, CallbackName => 'BeforeSubmit', Ticket => $TicketObj ); <& /Elements/Submit, Label => loc('Update Ticket'), Name => 'SubmitTicket', id => 'SubmitTicket' &> % $m->callback( %ARGS, CallbackName => 'BeforeScrips', Ticket => $TicketObj ); % if ($TicketObj->CurrentUserHasRight('ShowOutgoingEmail')) { <&|/Widgets/TitleBox, title => loc('Scrips and Recipients'), id => 'previewscrips', rolledup => RT->Config->Get('SimplifiedRecipients', $session{'CurrentUser'}) &> <& /Ticket/Elements/PreviewScrips, TicketObj => $TicketObj, %ARGS &> % }
    % $m->callback( %ARGS, CallbackName => 'AfterScrips', Ticket => $TicketObj ); % if (my $recips = $m->notes("DryRun-Recipients-".$TicketObj->Id)) { " /> % }

    % $m->callback( %ARGS, CallbackName => 'AfterForm', Ticket => $TicketObj ); <%INIT> my $CanRespond = 0; my $CanComment = 0; my $checks_failure = 0; my $TicketObj = LoadTicket($id); my @results; $m->callback( Ticket => $TicketObj, ARGSRef => \%ARGS, checks_failure => \$checks_failure, results => \@results, CallbackName => 'Initial' ); $m->scomp( '/Articles/Elements/SubjectOverride', Ticket => $TicketObj, ARGSRef => \%ARGS, results => \@results ); unless($DefaultStatus){ $DefaultStatus=($ARGS{'Status'} ||$TicketObj->Status()); } my $title = loc("Update ticket #[_1] ([_2])", $TicketObj->id, $TicketObj->Subject||''); # Things needed in the template - we'll do the processing here, just # for the convenience: my ($CommentDefault, $ResponseDefault); if ($Action ne 'Respond') { $CommentDefault = qq[ selected="selected"]; $ResponseDefault = ""; } else { $CommentDefault = ""; $ResponseDefault = qq[ selected="selected"]; } my $type = $ARGS{'UpdateType'} ? $ARGS{'UpdateType'} : lc $Action eq 'respond' ? 'response' : lc $Action eq 'comment' ? 'private' : 'none' ; $CanRespond = 1 if ( $TicketObj->CurrentUserHasRight('ReplyToTicket') or $TicketObj->CurrentUserHasRight('ModifyTicket') ); $CanComment = 1 if ( $TicketObj->CurrentUserHasRight('CommentOnTicket') or $TicketObj->CurrentUserHasRight('ModifyTicket') ); ProcessAttachments(ARGSRef => \%ARGS); my %squelched = ProcessTransactionSquelching( \%ARGS ); $ARGS{'SquelchMailTo'} = [keys %squelched] if keys %squelched; my $gnupg_widget = $m->comp('/Elements/Crypt/SignEncryptWidget:new', Arguments => \%ARGS ); $m->comp( '/Elements/Crypt/SignEncryptWidget:Process', self => $gnupg_widget, TicketObj => $TicketObj, ); if ( $ARGS{'SubmitTicket'} ) { my ($status, @msg) = $m->comp( '/Elements/ValidateCustomFields', CustomFields => $TicketObj->TransactionCustomFields, Object => RT::Transaction->new( $session{'CurrentUser'} ), ARGSRef => \%ARGS ); unless ( $status ) { push @results, @msg; $checks_failure = 1; } $status = $m->comp('/Elements/Crypt/SignEncryptWidget:Check', self => $gnupg_widget, TicketObj => $TicketObj, ); $checks_failure = 1 unless $status; } # check email addresses for RT's { foreach my $field ( qw(UpdateCc UpdateBcc) ) { my $value = $ARGS{ $field }; next unless defined $value && length $value; my @emails = Email::Address->parse( $value ); foreach my $email ( grep RT::EmailParser->IsRTAddress($_->address), @emails ) { push @results, loc("[_1] is an address RT receives mail at. Adding it as a '[_2]' would create a mail loop", $email->format, loc(substr($field, 6)) ); $checks_failure = 1; $email = undef; } $ARGS{ $field } = join ', ', map $_->format, grep defined, @emails; } } my $skip_update = 0; $m->callback( CallbackName => 'BeforeUpdate', ARGSRef => \%ARGS, skip_update => \$skip_update, checks_failure => $checks_failure, results => \@results, TicketObj => $TicketObj ); if ( !$checks_failure && !$skip_update && exists $ARGS{SubmitTicket} ) { $m->callback( Ticket => $TicketObj, ARGSRef => \%ARGS, CallbackName => 'BeforeDisplay' ); return $m->comp('Display.html', TicketObj => $TicketObj, %ARGS); } <%ARGS> $id => undef $Action => '' $DefaultStatus => undef rt-4.2.12/share/html/Ticket/Graphs/dhandler000644 000765 000024 00000005144 12555754775 021130 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $arg = $m->dhandler_arg; my $id; if ( $arg =~ m{^(\d+)$}i ) { ($id) = ($1); } else { return $m->abort( 404 ); } my $ticket = RT::Ticket->new($session{'CurrentUser'} ); $ticket->Load( $id ); unless ( $ticket->id ) { $RT::Logger->error("Couldn't load ticket #$id"); return $m->abort( 404 ); } require RT::Graph::Tickets; my $graph = RT::Graph::Tickets->TicketLinks( %ARGS, Graph => undef, Ticket => $ticket, ); $r->content_type( 'image/png' ); $m->clear_buffer; my $png; use RT::Util 'safe_run_child'; safe_run_child { $graph->as_png(\$png) }; $m->out( $png ); $m->abort; rt-4.2.12/share/html/Ticket/Graphs/Elements/000755 000765 000024 00000000000 12555754775 021174 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Ticket/Graphs/index.html000644 000765 000024 00000007622 12555754775 021424 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &> <& Elements/ShowGraph, %ARGS, Ticket => $ticket &>
    <& Elements/EditGraphProperties, %ARGS, Ticket => $ticket &> <& /Search/Elements/EditSearches, %$saved_search, Title => loc('Manage saved graphs'), Type => 'Graph', SearchFields => \@save_arguments, CurrentSearch => { map { $_ => $ARGS{$_} } @save_arguments }, AllowCopy => 0, &>
    <%ARGS> <%INIT> use RT::Graph::Tickets; my @results; my @save_arguments = qw(id Direction LeadingLink ShowLinks MaxDepth FillUsing ShowLinkDescriptions); foreach my $level ( 0 .. 6 ) { push @save_arguments, "Level-". $level ."-Properties"; } my $saved_search = { Type => 'Graph' }; push @results, $m->comp( '/Search/Elements/EditSearches:Init', %ARGS, Query => \%ARGS, SavedSearch => $saved_search, SearchFields => \@save_arguments, ); my $id = $ARGS{'id'}; my $ticket = LoadTicket( $id ); $ARGS{'id'} = $id = $ticket->id; $ARGS{'LeadingLink'} ||= 'Members'; if ( $ARGS{'ShowLinks'} && !ref $ARGS{'ShowLinks'} ) { $ARGS{'ShowLinks'} = [$ARGS{'ShowLinks'}]; } elsif ( !$ARGS{'ShowLinks'} ) { $ARGS{'ShowLinks'} = [ qw(MemberOf DependsOn RefersTo) ]; } $ARGS{'ShowLinks'} = [ grep $_ ne $ARGS{'LeadingLink'}, @{ $ARGS{'ShowLinks'} } ]; $ARGS{'MaxDepth'} = 3 unless defined $ARGS{'MaxDepth'} && length $ARGS{'MaxDepth'}; push @results, $m->comp( '/Search/Elements/EditSearches:Save', %ARGS, Query => \%ARGS, SavedSearch => $saved_search, SearchFields => \@save_arguments, ); my $title = loc( "Ticket #[_1] relationships graph", $id ); rt-4.2.12/share/html/Ticket/Graphs/Elements/EditGraphProperties000644 000765 000024 00000013665 12555754775 025056 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| /Widgets/TitleBox, title => loc('Graph Properties') &> <% loc('Direction') %>
    <% loc('Main type of links') %> <% loc('maximum depth') %>
    <% loc('Show as well') %>: % foreach my $type ( @link_types ) { % my $checked = ''; % $checked = 'checked="checked"' if grep $type eq $_, @ShowLinks; /> % }
    % my @properties = RT::Graph::Tickets->TicketProperties( $session{'CurrentUser'} ); <% loc('Fill boxes with color using') %>:
    % if ( RT::Link->can('Description' ) ) { % my $checked = ''; % $checked = 'checked="checked"' if $ShowLinkDescriptions; />
    % } <%PERL> for my $i ( 1..($MaxDepth||6) ) { my @default; if ( my $tmp = $ARGS{ 'Level-'. $i .'-Properties' } ) { @default = ref $tmp? @$tmp : ($tmp); } $m->comp('SELF:Properties', Level => $i, Available => \@properties, Default => \@default, ); } <& /Elements/Submit, Label => loc('Update Graph'), Name => 'Update' &> <%ARGS> $id => undef $Direction => 'TB' $LeadingLink => 'Members' @ShowLinks => ('MemberOf', 'DependsOn', 'RefersTo') $MaxDepth => 3 $FillUsing => '' $ShowLinkDescriptions => 0 <%INIT> require RT::Graph::Tickets; require RT::Link; my @link_types = qw(Members MemberOf RefersTo ReferredToBy DependsOn DependedOnBy); #loc_qw @ShowLinks = grep $_ ne $LeadingLink, @ShowLinks; <%METHOD Properties> <%ARGS> @Available => () @Default => () $Level => 1, <%INIT> my $id = "graph-properties-box-$Level"; my $class = ''; $class = 'class="hidden"' if $Level != 1 && !@Default; <% loc('Show Tickets Properties on [_1] level', $Level) %> (<% loc('open/close') %>): > % while ( my ($group, $list) = (splice @Available, 0, 2) ) { % }
    <% loc($group) %>: % foreach my $prop ( @$list ) { % my $checked = ''; % $checked = 'checked="checked"' if grep $_ eq $prop, @Default; /> % }

    rt-4.2.12/share/html/Ticket/Graphs/Elements/ShowGraph000644 000765 000024 00000005306 12555754775 023025 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <% safe_run_child { Encode::decode( "UTF-8", $graph->as_cmapx ) } |n %>
    <& ShowLegends, %ARGS, Ticket => $ticket &> <%ARGS> $id => undef <%INIT> use RT::Util 'safe_run_child'; my $ticket = RT::Ticket->new( $session{'CurrentUser'} ); $ticket->Load( $id ); unless ( $ticket->id ) { $RT::Logger->error("Couldn't load ticket $id"); return; } $ARGS{'id'} = $id = $ticket->id; require RT::Graph::Tickets; my $graph = RT::Graph::Tickets->TicketLinks( %ARGS, Graph => undef, Ticket => $ticket, ); rt-4.2.12/share/html/Ticket/Graphs/Elements/ShowLegends000644 000765 000024 00000005456 12555754775 023353 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| /Widgets/TitleBox, title => loc('Legends'), hideable => $hideable &> % if ( $FillUsing ) { % }
    <% loc('Status') %>: % foreach my $status ( sort keys %RT::Graph::Tickets::ticket_status_style ) { % my $style = $RT::Graph::Tickets::ticket_status_style{ $status }; <% loc($status) %> % }
    <% loc($FillUsing) %>: % foreach my $value ( sort keys %RT::Graph::Tickets::fill_cache ) { % my $color = $RT::Graph::Tickets::fill_cache{ $value }; <% loc($value) %> % }
    <%ARGS> $FillUsing => '' $hideable => 1 rt-4.2.12/share/html/Ticket/Elements/AddAttachments000644 000765 000024 00000005647 12555754775 022573 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ( $attachments ) { <&|/l&>Attached file: <&|/l&>Check box to delete
    % foreach my $attach_name ( sort keys %$attachments ) {
    % } # end of foreach % } # end of if <&|/l&>Attach: % $m->callback( %ARGS, CallbackName => 'End' ); <%ARGS> $Token => '' <%INIT> my $attachments; if ( exists $session{'Attachments'}{ $Token } && keys %{ $session{'Attachments'}{ $Token } } ) { $attachments = $session{'Attachments'}{ $Token }; } rt-4.2.12/share/html/Ticket/Elements/AddWatchers000644 000765 000024 00000010702 12555754775 022064 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}

    <&|/l&>Add new watchers:
    % if ($Users and $Users->Count) { % while (my $u = $Users->Next ) { % } % } % if ($Groups and $Groups->Count) { % while (my $g = $Groups->Next ) { % } % } % my $counter = 4; % for my $email (@extras) { % $counter++; % }
    <&|/l&>Type <&|/l&>Username
    <&/Elements/SelectWatcherType, Name => "Ticket-AddWatcher-Principal-". $u->PrincipalId &><& '/Elements/ShowUser', User => $u, style=>'verbose' &>
    <&|/l&>Type <&|/l&>Group
    <&/Elements/SelectWatcherType, Name => "Ticket-AddWatcher-Principal-".$g->PrincipalId &><%$g->Name%> (<%$g->Description%>)
    <&|/l&>Type <&|/l&>Email
    <&/Elements/SelectWatcherType, Name => "WatcherTypeEmail".$counter &> <%$email->format%>
    <&/Elements/SelectWatcherType, Name => "WatcherTypeEmail1" &> <& /Elements/EmailInput, Name => 'WatcherAddressEmail1', Size => '20' &>
    <&/Elements/SelectWatcherType, Name => "WatcherTypeEmail2" &> <& /Elements/EmailInput, Name => 'WatcherAddressEmail2', Size => '20' &>
    <&/Elements/SelectWatcherType, Name => "WatcherTypeEmail3" &> <& /Elements/EmailInput, Name => 'WatcherAddressEmail3', Size => '20' &>
    <%INIT> my ($Users, $Groups); if ($UserString) { $Users = RT::Users->new($session{'CurrentUser'}); $Users->Limit(FIELD => $UserField, VALUE => $UserString, OPERATOR => $UserOp, CASESENSITIVE => 0); $Users->LimitToPrivileged if $PrivilegedOnly; } if ($GroupString) { $Groups = RT::Groups->new($session{'CurrentUser'}); $Groups->LimitToUserDefinedGroups; $Groups->Limit(FIELD => $GroupField, VALUE => $GroupString, OPERATOR => $GroupOp, CASESENSITIVE => 0); } my @extras; for my $addr ( values %{$Ticket->TransactionAddresses} ) { my $is_watcher; for my $type ( qw/Owner Requestor Cc AdminCc/ ) { if ($Ticket->IsWatcher( Email => $addr->address, Type => $type )) { $is_watcher = 1; last; } } push @extras, $addr unless $is_watcher; } <%ARGS> $UserField => 'Name' $UserOp => '=' $UserString => undef $GroupField => 'Name' $GroupOp => '=' $GroupString => undef $PrivilegedOnly => undef $Ticket => undef rt-4.2.12/share/html/Ticket/Elements/Bookmark000644 000765 000024 00000005665 12555754775 021454 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $ticket = RT::Ticket->new( $session{'CurrentUser'} ); $ticket->Load( $id ); my $is_bookmarked; if ($Toggle) { $is_bookmarked = $session{'CurrentUser'}->UserObj->ToggleBookmark($ticket); } else { $is_bookmarked = $session{'CurrentUser'}->UserObj->HasBookmark($ticket); } <%ARGS> $id $Toggle => 0 % my $url = RT->Config->Get('WebPath') ."/Helpers/Toggle/TicketBookmark?id=". $id; % if ( $is_bookmarked ) { <% loc('Remove Bookmark') %> % } else { <% loc('Add Bookmark') %> % } rt-4.2.12/share/html/Ticket/Elements/ClickToShowHistory000644 000765 000024 00000005172 12555754775 023453 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <& /Widgets/TitleBoxStart, title => loc('History') &> <% loc('Show ticket history') %> <& /Widgets/TitleBoxEnd &>
    <%ARGS> $Ticket <%INIT> my %params = %ARGS; delete $params{Ticket}; my $query = $m->comp('/Elements/QueryString', %params, id => $Ticket->id ); my $url = RT->Config->Get('WebPath')."/Helpers/TicketHistory?$query"; my $display = RT->Config->Get('WebPath')."/Ticket/Display.html?ForceShowHistory=1;$query"; rt-4.2.12/share/html/Ticket/Elements/DelayShowHistory000644 000765 000024 00000005624 12555754775 023163 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <& /Widgets/TitleBoxStart, title => loc('History') &> <&|/l&>Loading... <& /Widgets/TitleBoxEnd &>
    <%ARGS> $Ticket <%INIT> my %params = %ARGS; delete $params{Ticket}; my $url = JSON( RT->Config->Get('WebPath') . "/Helpers/TicketHistory?". $m->comp('/Elements/QueryString', %params, id => $Ticket->id ) ); rt-4.2.12/share/html/Ticket/Elements/EditBasics000644 000765 000024 00000011602 12555754775 021705 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $TicketObj => undef @fields => () $InTable => 0 %defaults => () <%INIT> unless ( @fields ) { my $subject = $defaults{'Subject'} || $TicketObj->Subject; @fields = ( { name => 'Subject', html => '', }, { name => 'Status', comp => '/Ticket/Elements/SelectStatus', args => { Name => 'Status', Default => $defaults{Status}, DefaultFromArgs => 0, TicketObj => $TicketObj, }, }, { name => 'Queue', comp => '/Elements/SelectQueue', args => { Name => 'Queue', Default => $defaults{'Queue'} || $TicketObj->QueueObj->Id, ShowNullOption => 0, } }, { name => 'Owner', comp => '/Elements/SelectOwner', args => { Name => 'Owner', QueueObj => $TicketObj->QueueObj, TicketObj => $TicketObj, Default => $defaults{'Owner'} || $TicketObj->OwnerObj->Id, DefaultValue => 0, } }, # Time Estimated, Worked, and Left ( map { (my $field = $_) =~ s/ //g; { name => $_, comp => '/Elements/EditTimeValue', args => { Name => $field, Default => $defaults{$field} || $TicketObj->$field, } } } ('Time Estimated', 'Time Worked', 'Time Left') ), # Priority and Final Priority ( map { (my $field = $_) =~ s/ //g; { name => $_, comp => '/Elements/SelectPriority', args => { Name => $field, Default => $defaults{$field} || $TicketObj->$field, } } } ('Priority', 'Final Priority') ), ); } $m->callback( CallbackName => 'MassageFields', %ARGS, TicketObj => $TicketObj, Fields => \@fields ); # Process the field list, skipping if html is provided and running the # components otherwise for my $field (@fields) { next if defined $field->{'html'}; if ( $field->{'comp'} ) { $field->{'html'} = $m->scomp($field->{'comp'}, %{$field->{'args'} || {}}); } } % unless ($InTable) { % } % for my $field (@fields) { \ \ \ % } % $m->callback( CallbackName => 'EndOfList', TicketObj => $TicketObj, %ARGS, Fields => \@fields ); % unless ($InTable) {
    <% loc($field->{'name'}) %>:<% $field->{'html'} |n %>
    % } rt-4.2.12/share/html/Ticket/Elements/EditCustomFields000644 000765 000024 00000005077 12555754775 023113 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> RT->Deprecated( Remove => "4.4", Instead => "/Elements/EditCustomFields" ); my $CustomFields; if ($TicketObj && !$OnCreate) { $CustomFields = $TicketObj->CustomFields; } else { $CustomFields = $QueueObj->TicketCustomFields; } $m->callback( %ARGS, CallbackName => 'MassageCustomFields', CustomFields => $CustomFields ); return $m->comp('/Elements/EditCustomFields', %ARGS, Object => $TicketObj || RT::Ticket->new( $session{'CurrentUser'} ), CustomFields => $CustomFields, ); <%ARGS> $TicketObj => undef $QueueObj => undef $OnCreate => undef rt-4.2.12/share/html/Ticket/Elements/EditDates000644 000765 000024 00000006002 12555754775 021537 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/EditCustomFields, Object => $TicketObj, Grouping => 'Dates', InTable => 1 &> % $m->callback( %ARGS, CallbackName => 'EndOfList', Ticket => $TicketObj );
    <&|/l&>Starts: <& /Elements/SelectDate, menu_prefix => 'Starts', current => 0 &> (<% $TicketObj->StartsObj->AsString %>)
    <&|/l&>Started: <& /Elements/SelectDate, menu_prefix => 'Started', current => 0 &> (<%$TicketObj->StartedObj->AsString %>)
    <&|/l&>Last Contact: <& /Elements/SelectDate, menu_prefix => 'Told', current => 0 &> (<% $TicketObj->ToldObj->AsString %>)
    <&|/l&>Due: <& /Elements/SelectDate, menu_prefix => 'Due', current => 0 &> (<% $TicketObj->DueObj->AsString %>)
    <%ARGS> $TicketObj => undef rt-4.2.12/share/html/Ticket/Elements/EditMerge000644 000765 000024 00000005332 12555754775 021543 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/l&>Warning: merging is a non-reversible action! Enter a single ticket number to be merged into.
    <&|/l&>Merge into:
    <%INIT> my @excludes; if ( $Ticket ) { $Name ||= $Ticket->id . '-MergeInto'; @excludes = $Ticket->id; } elsif ( $Tickets ) { $Name ||= 'Ticket-MergeInto'; while ( my $ticket = $Tickets->Next ) { push @excludes, $ticket->id; } } $Default ||= $ARGS{$Name}; <%ARGS> $Ticket => undef $Tickets => undef $Name => '' $Default => '' rt-4.2.12/share/html/Ticket/Elements/EditPeople000644 000765 000024 00000007237 12555754775 021736 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}

    <&|/l&>New watchers

    <&|/l&>Find people whose
    <& /Elements/SelectUsers &>
    <&|/l&>Find groups whose
    <& /Elements/SelectGroups &> <& AddWatchers, Ticket => $Ticket, UserString => $UserString, UserOp => $UserOp, UserField => $UserField, GroupString => $GroupString, GroupOp => $GroupOp, GroupField => $GroupField, PrivilegedOnly => $PrivilegedOnly &>

    <&|/l&>Owner

    <&|/l&>Owner: <& /Elements/SelectOwner, Name => 'Owner', QueueObj => $Ticket->QueueObj, TicketObj => $Ticket, Default => $Ticket->OwnerObj->Id, DefaultValue => 0&>

    <&|/l&>Current watchers

    <&|/l&>(Check box to delete)
    <& /Elements/EditCustomFields, Object => $Ticket, Grouping => 'People', InTable => 1 &>
    <&|/l&>Requestors: <& EditWatchers, TicketObj => $Ticket, Watchers => $Ticket->Requestors &>
    <&|/l&>Cc: <& EditWatchers, TicketObj => $Ticket, Watchers => $Ticket->Cc &>
    <&|/l&>Administrative Cc: <& EditWatchers, TicketObj => $Ticket, Watchers => $Ticket->AdminCc &>
    <%ARGS> $UserField => undef $UserOp => undef $UserString => undef $GroupField => undef $GroupOp => undef $GroupString => undef $PrivilegedOnly => undef $Ticket => undef rt-4.2.12/share/html/Ticket/Elements/EditTransactionCustomFields000644 000765 000024 00000007053 12555754775 025315 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->callback( CallbackName => 'BeforeTransactionCustomFields', TicketObj => $TicketObj, QueueObj => $QueueObj, InTable => $InTable ); % if ( $WRAP ) { <<% $WRAP %> class="edit-transaction-custom-fields"> % } % if ($CustomFields->Count) { % while (my $CF = $CustomFields->Next()) { % next unless $CF->CurrentUserHasRight('ModifyCustomField'); <<% $FIELD %>> <<% $CELL %> class="label cflabel"> <% $CF->Name %>:
    <% $CF->FriendlyType %> > <<% $CELL %>> <& /Elements/EditCustomField, %ARGS, CustomField => $CF, Object => RT::Transaction->new( $session{'CurrentUser'} ), &> % if (my $msg = $m->notes('InvalidField-' . $CF->Id)) {
    <% $msg %> % } > > % } % } % if ( $WRAP ) { > % } % $m->callback( CallbackName => 'AfterTransactionCustomFields', TicketObj => $TicketObj, QueueObj => $QueueObj, InTable => $InTable ); <%INIT> my $CustomFields; if ($TicketObj) { $CustomFields = $TicketObj->TransactionCustomFields(); } else { $CustomFields = $QueueObj->TicketTransactionCustomFields(); } $m->callback( CallbackName => 'MassageTransactionCustomFields', CustomFields => $CustomFields, InTable => $InTable ); $AsTable ||= $InTable; my $FIELD = $AsTable ? 'tr' : 'div'; my $CELL = $AsTable ? 'td' : 'div'; my $WRAP = ''; if ( $AsTable ) { $WRAP = 'table' unless $InTable; } else { $WRAP = 'div'; } <%ARGS> $TicketObj => undef $QueueObj => undef $AsTable => 0 $InTable => 0 rt-4.2.12/share/html/Ticket/Elements/EditWatchers000644 000765 000024 00000006600 12555754775 022263 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
      %# Print out a placeholder if there are none. % unless ( $Members->Count ) {
    • <&|/l&>none
    • % } % while ( my $watcher = $Members->Next ) { % my $member = $watcher->MemberObj->Object;
    • % if ( $member->isa( 'RT::User' ) ) { % if ( $session{CurrentUser}->HasRight( Right => 'AdminUsers', Object => $RT::System ) && % $session{CurrentUser}->HasRight( Right => 'ShowConfigTab', Object =>$RT::System ) ) { <& /Elements/ShowUser, User => $member &> <& /Elements/ShowUserEmailFrequency, User => $member, Ticket => $TicketObj &> % } else { <& /Elements/ShowUser, User => $member &> <& /Elements/ShowUserEmailFrequency, User => $member, Ticket => $TicketObj &> % } } % else { % if ( $session{CurrentUser}->HasRight( Right => 'AdminGroup', Object => $RT::System ) && % $session{CurrentUser}->HasRight( Right => 'ShowConfigTab', Object =>$RT::System ) ) { <% $member->Name %> % } else { <% $member->Name %> % } }
    • % }
    <%INIT> my $Members = $Watchers->MembersObj; <%ARGS> $TicketObj => undef $Watchers => undef rt-4.2.12/share/html/Ticket/Elements/LoadTextAttachments000644 000765 000024 00000004212 12555754775 023612 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> RT->Deprecated( Remove => "4.4", Instead => "RT::Ticket->TextAttachments" ); return $Ticket->TextAttachments; <%ARGS> $Ticket rt-4.2.12/share/html/Ticket/Elements/PreviewScrips000644 000765 000024 00000011164 12555754775 022503 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $TicketObj => undef <%init> my $Object = $m->notes("DryRun-".$TicketObj->Id) || $TicketObj->DryRun(%ARGS); my %recips = %{ $m->notes("DryRun-Recipients-".$TicketObj->Id) || {} }; return unless $Object; my %squelched = ProcessTransactionSquelching( \%ARGS );

    <&|/l, RT->Config->Get('WebPath')."/Ticket/ModifyPeople.html?id=".$TicketObj->Id, &>Uncheck boxes to disable notifications to the listed recipients for this transaction only; persistent squelching is managed on the People page.

    % if ( $Object->Scrips ) { % # Sort scrips with recipients before those without % my @scrips = map { $_->[0] } % sort { ($b->[1]?1:0) <=> ($a->[1]?1:0) } % map { [$_, $_->ActionObj->Action->To + $_->ActionObj->Action->Cc + $_->ActionObj->Action->Bcc] } % grep {$_->ActionObj->Action->isa('RT::Action::SendEmail')} % @{$Object->Scrips->Prepared}; % for my $scrip (@scrips) { <% $scrip->Description || loc('Scrip #[_1]',$scrip->id) %>
    <&|/l, loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->Template)&>[_1] [_2] with template [_3]
    % for my $type (qw(To Cc Bcc)) { % my @addresses = $scrip->ActionObj->Action->$type(); % next unless @addresses;
      % for my $addr (@addresses) {
    • % my $checked = not $squelched{$addr->address}; % $m->callback(CallbackName => 'BeforeAddress', Ticket => $TicketObj, Address => $addr, Type => $type, Checked => \$checked); % $recips{$addr->address}++; <%loc($type)%>: value="<%$addr->address%>" id="TxnSendMailTo-<% $addr->address %>-<% $recips{$addr->address} %>" /> % $m->callback(CallbackName => 'AfterAddress', Ticket => $TicketObj, Address => $addr, Type => $type);
    • % }
    % } % if (RT->Config->Get('PreviewScripMessages')) { % }
    % } % } % $m->callback( CallbackName => 'AfterRecipients', TicketObj => $TicketObj ); % $m->notes("DryRun-Recipients-".$TicketObj->Id, \%recips); rt-4.2.12/share/html/Ticket/Elements/Reminders000644 000765 000024 00000017623 12555754775 021634 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Ticket => undef $id => undef $ShowCompleted => 0 $Edit => 0 $ShowSave => 1 <%init> $Ticket = LoadTicket($id) if ($id); my $resolve_status = $Ticket->LifecycleObj->ReminderStatusOnResolve; my $count_reminders = RT::Reminders->new($session{'CurrentUser'}); $count_reminders->Ticket($Ticket->id); my $count_tickets = $count_reminders->Collection; if (!$ShowCompleted) { # XXX: don't break encapsulation if we can avoid it $count_tickets->FromSQL(q{Type = "reminder" AND RefersTo = "} . $Ticket->id . qq{" AND Status != "$resolve_status" }); } my $has_reminders = $count_tickets->Count; # We've made changes, let's reload our search my $reminder_collection = $count_reminders->Collection; % my $editable = 0; % if ($has_reminders) { > % if ( $Edit ) { % } else { % } % my $i = 0; % while ( my $reminder = $reminder_collection->Next ) { % $i++; % if ( $reminder->Status eq $resolve_status && !$ShowCompleted ) { % $i++; % } % else { % $editable = 1 if !$editable && $reminder->CurrentUserHasRight( 'ModifyTicket' ); % if ($Edit) { <& SELF:EditEntry, Reminder => $reminder, Ticket => $Ticket, Index => $i &> % } else { <& SELF:ShowEntry, Reminder => $reminder, Ticket => $Ticket, Index => $i &> % } % } % }
    <&|/l&>Reminders <&|/l&>Reminder <&|/l&>Due <&|/l&>Owner
    % if ( $editable ) { <&|/l&>(Check box to complete)

    % } % } else { %# we must always include resolved reminders due to the browser %# checkbox-with-false-value issue % while ( my $reminder = $reminder_collection->Next ) { % if ( $reminder->Status eq $resolve_status && !$ShowCompleted ) { % } % } % } % if (lc $Ticket->Status ne "deleted" and $Ticket->QueueObj->CurrentUserHasRight('CreateTicket') and $Ticket->CurrentUserHasRight('ModifyTicket') ) { <&|/l&>New reminder: <& SELF:NewReminder, Ticket => $Ticket &> % $editable = 1; % } % if ( $editable && $ShowSave ) {
    % } <%method NewReminder> <%args> $Ticket
    <&|/l&>Subject:
    <&|/l&>Owner: <& /Elements/SelectOwner, Name => 'NewReminder-Owner', QueueObj => $Ticket->QueueObj, Default=>$session{'CurrentUser'}->id, DefaultValue => 0 &>
    <&|/l&>Due: <& /Elements/SelectDate, Name => "NewReminder-Due", Default => "" &>
    <%method EditEntry> <%args> $Reminder $Ticket $Index % unless ( $Reminder->CurrentUserHasRight('ModifyTicket') ) { Status eq $Reminder->LifecycleObj->ReminderStatusOnResolve ? 1 : 0 %> /> % } Status eq $Reminder->LifecycleObj->ReminderStatusOnResolve ? 'checked="checked"' : '' |n %> % unless ( $Reminder->CurrentUserHasRight('ModifyTicket') ) { disabled="disabled" % } /> <&|/l&>Subject: CurrentUserHasRight('ModifyTicket') ) { readonly="readonly" % } />   <&|/l&>Owner: <& /Elements/SelectOwner, Name => 'Reminder-Owner-'.$Reminder->id, QueueObj => $Ticket->QueueObj, Default => $Reminder->Owner, DefaultValue => 0 &> <&|/l&>Due: % if ( $Reminder->CurrentUserHasRight('ModifyTicket') ) { <& /Elements/SelectDate, Name => 'Reminder-Due-'.$Reminder->id &> % } (<% $Reminder->DueObj->AsString %>) <%method ShowEntry> <%args> $Reminder $Ticket $Index % my $dueobj = $Reminder->DueObj; % my $overdue = $dueobj->IsSet && $dueobj->Diff < 0 ? 1 : 0; % unless ( $Reminder->CurrentUserHasRight('ModifyTicket') ) { Status eq $Reminder->LifecycleObj->ReminderStatusOnResolve ? 1 : 0 %> /> % } Status eq $Reminder->LifecycleObj->ReminderStatusOnResolve ? 'checked="checked"' : '' |n %> % unless ( $Reminder->CurrentUserHasRight('ModifyTicket') ) { disabled="disabled" % } /> <% $overdue ? '' : '' |n %><% $dueobj->AgeAsString || loc('Not set') %><% $overdue ? '' : '' |n %> <& /Elements/ShowUser, User => $Reminder->OwnerObj &> rt-4.2.12/share/html/Ticket/Elements/SelectStatus000644 000765 000024 00000005624 12555754775 022325 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/SelectStatus, %ARGS, Statuses => \@Statuses, Object => $TicketObj || $QueueObj, Lifecycles => \@Lifecycles, Type => 'ticket', &> <%INIT> my @Lifecycles; for my $id (keys %Queues) { my $queue = RT::Queue->new($session{'CurrentUser'}); $queue->Load($id); push @Lifecycles, $queue->LifecycleObj if $queue->id; } if ($TicketObj) { $ARGS{DefaultLabel} = loc("[_1] (Unchanged)", loc($TicketObj->Status)); if ($DefaultFromArgs and $DECODED_ARGS->{Status}) { $ARGS{Default} = $DECODED_ARGS->{Status}; } elsif (defined $ARGS{Default}) { $ARGS{Default} = undef if $TicketObj->Status eq $ARGS{Default}; } } elsif ($QueueObj) { $ARGS{DefaultValue} = 0; $ARGS{Default} ||= $DECODED_ARGS->{Status} || $QueueObj->LifecycleObj->DefaultOnCreate; } <%ARGS> $DefaultFromArgs => 1, @Statuses => () $TicketObj => undef $QueueObj => undef %Queues => () rt-4.2.12/share/html/Ticket/Elements/ShowAttachments000644 000765 000024 00000006264 12555754775 023017 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if (keys %documents) { <&| /Widgets/TitleBox, title => loc('Attachments'), title_class=> 'inverse', class => 'ticket-info-attachments', color => "#336699" &> % foreach my $key (sort { lc($a) cmp lc($b) } keys %documents) { <%$key%>
    % } % } <%INIT> # If we haven't been passed in an Attachments object (through the precaching mechanism) # then we need to find one $Attachments ||= $Ticket->Attachments; # XXX PERF: why doesn't this Limit on Filename to avoid fetching *all* the # attachments? my %documents; while ( my $attach = $Attachments->Next() ) { next unless defined $attach->Filename && length $attach->Filename; unshift( @{ $documents{ $attach->Filename } }, $attach ); } <%ARGS> $Ticket => undef $Attachments => undef rt-4.2.12/share/html/Ticket/Elements/ShowBasics000644 000765 000024 00000007352 12555754775 021747 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ($Ticket->TimeEstimated) { % } % $m->callback( %ARGS, CallbackName => 'AfterTimeEstimated', TicketObj => $Ticket ); % if ($Ticket->TimeWorked) { % } % $m->callback( %ARGS, CallbackName => 'AfterTimeWorked', TicketObj => $Ticket ); % if ($Ticket->TimeLeft) { % } %# This will check SeeQueue at the ticket role level, queue level, and global level % if ($Ticket->CurrentUserHasRight('SeeQueue')) { % } <& /Ticket/Elements/ShowCustomFields, Ticket => $Ticket, Grouping => 'Basics', Table => 0 &> % if ($UngroupedCFs) { <& /Ticket/Elements/ShowCustomFields, Ticket => $Ticket, Grouping => '', Table => 0 &> % } % $m->callback( %ARGS, CallbackName => 'EndOfList', TicketObj => $Ticket );
    <&|/l&>Id: <%$Ticket->Id %>
    <&|/l&>Status: <% loc($Ticket->Status) %>
    <&|/l&>Estimated: <& ShowTime, minutes => $Ticket->TimeEstimated &>
    <&|/l&>Worked: <& ShowTime, minutes => $Ticket->TimeWorked &>
    <&|/l&>Left: <& ShowTime, minutes => $Ticket->TimeLeft &>
    <&|/l&>Priority: <& ShowPriority, Ticket => $Ticket &>
    <&|/l&>Queue: <& ShowQueue, Ticket => $Ticket, QueueObj => $Ticket->QueueObj &>
    <%ARGS> $Ticket => undef $UngroupedCFs => 0 rt-4.2.12/share/html/Ticket/Elements/ShowCustomFields000644 000765 000024 00000004117 12555754775 023140 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/ShowCustomFields, %ARGS, Object => $Ticket &> <%ARGS> $Ticket => undef rt-4.2.12/share/html/Ticket/Elements/ShowDates000644 000765 000024 00000011326 12555754775 021577 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} \ % $m->callback( %ARGS, CallbackName => 'AfterCreated', TicketObj => $Ticket ); \ % $m->callback( %ARGS, CallbackName => 'AfterStarts', TicketObj => $Ticket ); \ % $m->callback( %ARGS, CallbackName => 'AfterStarted', TicketObj => $Ticket ); \ % $m->callback( %ARGS, CallbackName => 'AfterTold', TicketObj => $Ticket ); \ % my $due = $Ticket->DueObj; % if ( $due && $due->IsSet && $due->Diff < 0 && $Ticket->QueueObj->IsActiveStatus($Ticket->Status) ) { % } else { % } % $m->callback( %ARGS, CallbackName => 'AfterDue', TicketObj => $Ticket ); \ % $m->callback( %ARGS, CallbackName => 'AfterResolved', TicketObj => $Ticket ); \ % my $UpdatedString = $Ticket->LastUpdated ? loc("[_1] by [_2]", $Ticket->LastUpdatedAsString, $m->scomp('/Elements/ShowUser', User => $Ticket->LastUpdatedByObj)) : loc("Never"); % if ($UpdatedLink) { % } else { % } % $m->callback( %ARGS, CallbackName => 'AfterUpdated', TicketObj => $Ticket ); <& /Ticket/Elements/ShowCustomFields, Ticket => $Ticket, Grouping => 'Dates', Table => 0 &> % $m->callback( %ARGS, CallbackName => 'EndOfList', TicketObj => $Ticket );
    <&|/l&>Created:<% $Ticket->CreatedObj->AsString %>
    <&|/l&>Starts:<% $Ticket->StartsObj->AsString %>
    <&|/l&>Started:<% $Ticket->StartedObj->AsString %>
    <&|/l&>Last Contact:<% $Ticket->ToldObj->AsString %>
    <&|/l&>Due:<% $due->AsString %><% $due->AsString %>
    <&|/l&>Closed:<% $Ticket->ResolvedObj->AsString %>
    <&|/l&>Updated:<% $UpdatedString | n %><% $UpdatedString | n %>
    <%ARGS> $Ticket => undef $UpdatedLink => 1 <%INIT> if ($UpdatedLink and $Ticket) { my $txns = $Ticket->Transactions; $txns->OrderByCols( { FIELD => "Created", ORDER => "DESC" }, { FIELD => "id", ORDER => "DESC" }, ); $txns->RowsPerPage(1); if (my $latest = $txns->First) { $UpdatedLink = "#txn-" . $latest->id; } else { undef $UpdatedLink; } } rt-4.2.12/share/html/Ticket/Elements/ShowDependencyStatus000644 000765 000024 00000005543 12555754775 024025 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    % if ($approvals) { % if ($approvals == 1) { <&|/l&>Pending approval. % } else { <&|/l, $approvals &>Pending [quant,_1,approval,approvals]. % } <&|/l&>This ticket cannot be resolved until it is approved. % } else { <&|/l, $depends &>Pending [quant,_1,ticket,tickets]. <&|/l, $depends &>This ticket cannot be resolved until its [numerate,_1,dependency is,dependencies are] resolved. % }
    <%args> $Ticket <%init> # normal tickets my $deps = $Ticket->UnresolvedDependencies; $deps->LimitType( VALUE => 'ticket' ); my $depends = $deps->Count || 0; # approvals $deps = $Ticket->UnresolvedDependencies; $deps->LimitType( VALUE => 'approval' ); my $approvals = $deps->Count || 0; return unless $depends or $approvals; rt-4.2.12/share/html/Ticket/Elements/ShowGroupMembers000644 000765 000024 00000005040 12555754775 023142 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# Released under the terms of version 2 of the GNU Public License <%init> my $post_user = sub { my $user = shift; $m->comp("/Elements/ShowUserEmailFrequency", User => $user, Ticket => $Ticket); $m->callback( User => $user, Ticket => $Ticket, %ARGS, CallbackName => 'AboutThisUser', CallbackPage => '/Ticket/Elements/ShowGroupMembers' ); }; $m->comp("/Elements/ShowPrincipal", Object => $Group, Separator => "
    ", PostUser => $post_user, Link => $Link); <%ARGS> $Group => undef $Ticket => undef $Link => 1 rt-4.2.12/share/html/Ticket/Elements/ShowPeople000644 000765 000024 00000005730 12555754775 021765 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % my $owner = $Ticket->OwnerObj; <& /Ticket/Elements/ShowCustomFields, Ticket => $Ticket, Grouping => 'People', Table => 0 &>
    <&|/l&>Owner:<& /Elements/ShowUser, User => $owner, Ticket => $Ticket &> <& /Elements/ShowUserEmailFrequency, User => $owner, Ticket => $Ticket &> % $m->callback( User => $owner, Ticket => $Ticket, %ARGS, CallbackName => 'AboutThisUser' );
    <&|/l&>Requestors: <& ShowGroupMembers, Group => $Ticket->Requestors, Ticket => $Ticket &>
    <&|/l&>Cc: <& ShowGroupMembers, Group => $Ticket->Cc, Ticket => $Ticket &>
    <&|/l&>AdminCc: <& ShowGroupMembers, Group => $Ticket->AdminCc, Ticket => $Ticket &>
    <%INIT> <%ARGS> $Ticket => undef rt-4.2.12/share/html/Ticket/Elements/ShowPriority000644 000765 000024 00000004116 12555754775 022357 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <% $Ticket->Priority %>/<% $Ticket->FinalPriority || ''%> <%ARGS> $Ticket => undef rt-4.2.12/share/html/Ticket/Elements/ShowQueue000644 000765 000024 00000004573 12555754775 021631 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <% $value %> <%ARGS> $Ticket => undef $QueueObj <%INIT> my $value = $QueueObj->Name; if ( $Ticket and $Ticket->CurrentUserHasRight('SeeQueue') ) { # Grab the queue name anyway if the current user can # see the queue based on his role for this ticket $value = $QueueObj->__Value('Name'); } $value = '#'. $QueueObj->id unless defined $value && length $value; rt-4.2.12/share/html/Ticket/Elements/ShowRequestor000644 000765 000024 00000015022 12555754775 022525 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ($ShowTickets) { % } <&| /Widgets/TitleBox, title_raw => loc("More about the requestors"), class => 'ticket-info-requestor' &>
    % while ( my $requestor = $people->Next ) {

    <& /Elements/ShowUser, User => $requestor, Link => 0 &> User Summary

    %# Additional information about this user. Empty by default. % $m->callback( requestor => $requestor, %ARGS, CallbackName => 'AboutThisUser' ); <& ShowRequestorExtraInfo, Requestor => $requestor &> % if ( $ShowComments ) {
    <&|/l&>Comments about this user: <% ($requestor->Comments || loc("No comment entered about this user")) %>
    % } % $m->callback( requestor => $requestor, %ARGS, CallbackName => 'AfterComments' ); % if ( $ShowTickets ) {
    % $index = 1; % for my $status (@$status_order) { % if ( $status eq $DefaultTicketsTab ) {
    <& $TicketTemplate, Requestor => $requestor &> % } else { % }
    % } % my $grouplimit = RT->Config->Get('MoreAboutRequestorGroupsLimit'); % if ( $ShowGroups and defined $grouplimit ) {
    <&|/l&>Groups this user belongs to % if ( $session{CurrentUser}->HasRight( Right => 'AdminUsers', Object => $RT::System ) && % $session{CurrentUser}->HasRight( Right => 'ShowConfigTab', Object =>$RT::System ) ) { [Config->Get('WebPath') . '/Admin/Users/Memberships.html?id=' . $requestor->id %> ><&|/l&>Edit] % } <& /Elements/ShowMemberships, UserObj => $requestor, Limit => $grouplimit &>
    % } %# end of individual requestor details
    % } %# end of requestors loop % $m->callback( %ARGS, CallbackName => 'AfterRequestors' );
    <%INIT> my $show_privileged = RT->Config->Get('ShowMoreAboutPrivilegedUsers'); my $people = $Ticket->Requestors->UserMembersObj; $people->LimitToUnprivileged unless $show_privileged; my $count = $people->Count; return unless $count; my $has_right_adminusers = $session{'CurrentUser'}->HasRight( Object => $RT::System, Right => 'AdminUsers' ); $has_right_adminusers &&= $session{'CurrentUser'}->HasRight( Object => $RT::System, Right => 'ShowConfigTab' ); # Ticket list tabs my $selected = -1; $DefaultTicketsTab ||= RT->Config->Get('MoreAboutRequestorTicketList', $session{CurrentUser}) || 'Active'; my $status_link_text = {Active => loc('Active Tickets'), Inactive => loc('Inactive Tickets'), All => loc('All Tickets')}; my $status_order = [qw/Active Inactive All/]; $m->callback( CallbackName => 'AddStatus', status_link_text => \$status_link_text, status_order => \$status_order ); $ShowTickets = 0 if $DefaultTicketsTab eq 'None'; my $TicketTemplate; if ($ShowTickets) { for (0 .. (@$status_order - 1)) { $selected = $_ && last if $status_order->[$_] eq $DefaultTicketsTab; } $TicketTemplate = "ShowRequestorTickets$DefaultTicketsTab"; $TicketTemplate = "ShowRequestorTicketsActive" unless RT::Interface::Web->ComponentPathIsSafe($TicketTemplate) and $m->comp_exists($TicketTemplate); } <%ARGS> $Ticket=>undef $DefaultTicketsTab => undef $ShowComments => 1 $ShowTickets => 1 $ShowGroups => 1 $Title => 'More about [_1]' rt-4.2.12/share/html/Ticket/Elements/ShowRequestorExtraInfo000644 000765 000024 00000004237 12555754775 024353 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /User/Elements/UserInfo, User => $Requestor, FormatConfig => 'MoreAboutRequestorExtraInfo', ClassPrefix => 'more-about-requestor' &> <%ARGS> $Requestor => undef rt-4.2.12/share/html/Ticket/Elements/ShowRequestorTickets000644 000765 000024 00000004752 12555754775 024064 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /User/Elements/TicketList, User => $Requestor, conditions => $conditions, Rows => $Rows, Title => $Title, WatcherTypes => ['Requestor'], Format => => RT->Config->Get('MoreAboutRequestorTicketListFormat'), &> <%INIT> my $Title = loc("This user's [_1] highest priority [_2] tickets", $Rows, $Description ); $m->callback( CallbackName => 'ModifyTitle', %ARGS, Title => \$Title ); <%ARGS> $Requestor => undef $conditions $Rows => 10 $Description => '' rt-4.2.12/share/html/Ticket/Elements/ShowRequestorTicketsActive000644 000765 000024 00000004513 12555754775 025213 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& ShowRequestorTickets, %ARGS, Description => loc('active'), conditions => $conditions, Rows => $Rows &> <%INIT> unless ( @$conditions ) { foreach (RT::Queue->ActiveStatusArray()) { push @$conditions, { cond => "Status = '$_'", name => loc($_) }; } } <%ARGS> $Requestor => undef $conditions => [] $Rows => 10 rt-4.2.12/share/html/Ticket/Elements/ShowRequestorTicketsAll000644 000765 000024 00000004202 12555754775 024503 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& ShowRequestorTickets, %ARGS, conditions => $conditions, Rows => $Rows &> <%ARGS> $Requestor => undef $conditions => [] $Rows => 10 rt-4.2.12/share/html/Ticket/Elements/ShowRequestorTicketsInactive000644 000765 000024 00000004516 12555754775 025545 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& ShowRequestorTickets, %ARGS, Description => loc('inactive'), conditions => $conditions, Rows => $Rows &> <%INIT> unless ( @$conditions ) { foreach (RT::Queue->InactiveStatusArray()) { push @$conditions, { cond => "Status = '$_'", name => loc($_) }; } } <%ARGS> $Requestor => undef $conditions => [] $Rows => 10 rt-4.2.12/share/html/Ticket/Elements/ShowSimplifiedRecipients000644 000765 000024 00000010046 12555754775 024650 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $TicketObj <%init> return unless RT->Config->Get('SimplifiedRecipients', $session{'CurrentUser'}); my $Object = $m->notes("DryRun-".$TicketObj->Id) || $TicketObj->DryRun(%ARGS); $m->notes("DryRun-".$TicketObj->Id, $Object); return unless $Object; my %headers = (To => {}, Cc => {}, Bcc => {}); if ($Object->Scrips) { for my $scrip (grep $_->ActionObj->Action->isa('RT::Action::SendEmail'), @{$Object->Scrips->Prepared}) { for my $type (qw(To Cc Bcc)) { $headers{$type}{$_->address} = $_ for $scrip->ActionObj->Action->$type(); } } } my %recips; my %squelched = ProcessTransactionSquelching( \%ARGS ); <&|/Widgets/TitleBox, title => loc('Recipients'), id => 'recipients' &> % for my $type (qw(To Cc Bcc)) { % next unless keys %{$headers{$type}}; % } % $m->callback( CallbackName => 'AfterRecipients', TicketObj => $TicketObj );
    <% $type %>: % for my $addr (sort {$a->address cmp $b->address} values %{$headers{$type}}) { % my $checked = not $squelched{$addr->address}; % $m->callback(CallbackName => 'BeforeAddress', Ticket => $TicketObj, Address => $addr, Type => $type, Checked => \$checked); % $recips{$addr->address}++; value="<%$addr->address%>" id="TxnSendMailTo-<% $addr->address %>-<% $recips{$addr->address} %>" /> % $m->callback(CallbackName => 'AfterAddress', Ticket => $TicketObj, Address => $addr, Type => $type);
    % }

    <&|/l, RT->Config->Get('WebPath')."/Ticket/ModifyPeople.html?id=".$TicketObj->Id, &>Uncheck boxes to disable notifications to the listed recipients for this transaction only; persistent squelching is managed on the People page.

    % $m->notes("DryRun-Recipients-".$TicketObj->Id, \%recips); rt-4.2.12/share/html/Ticket/Elements/ShowSummary000644 000765 000024 00000012131 12555754775 022167 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    % $m->callback( %ARGS, CallbackName => 'LeftColumnTop' ); <&| /Widgets/TitleBox, title => loc('The Basics'), (($can_modify || $can_modify_cf) ? (title_href => RT->Config->Get('WebPath')."/Ticket/Modify.html?id=".$Ticket->Id) : ()), class => 'ticket-info-basics', &><& /Ticket/Elements/ShowBasics, Ticket => $Ticket &> <& /Elements/ShowCustomFieldCustomGroupings, Object => $Ticket, title_href => ($can_modify || $can_modify_cf) ? RT->Config->Get('WebPath')."/Ticket/Modify.html" : "", &> <&| /Widgets/TitleBox, title => loc('People'), (($can_modify || $can_modify_owner || $can_modify_people) ? (title_href => RT->Config->Get('WebPath')."/Ticket/ModifyPeople.html?id=".$Ticket->Id) : ()), class => 'ticket-info-people', &><& /Ticket/Elements/ShowPeople, Ticket => $Ticket &> <& /Ticket/Elements/ShowAttachments, Ticket => $Ticket, Attachments => $Attachments &> % $m->callback( %ARGS, CallbackName => 'AfterAttachments' ); <& /Ticket/Elements/ShowRequestor, Ticket => $Ticket &> % $m->callback( %ARGS, CallbackName => 'LeftColumn' ); % $m->callback( %ARGS, CallbackName => 'RightColumnTop' ); % if ( RT->Config->Get('EnableReminders') ) { <&|/Widgets/TitleBox, title => loc("Reminders"), title_href => RT->Config->Get('WebPath')."/Ticket/Reminders.html?id=".$Ticket->Id, class => 'ticket-info-reminders', &>
    <& /Ticket/Elements/Reminders, Ticket => $Ticket, ShowCompleted => 0 &>
    % } <&| /Widgets/TitleBox, title => loc("Dates"), ($can_modify ? (title_href => RT->Config->Get('WebPath')."/Ticket/ModifyDates.html?id=".$Ticket->Id) : ()), class => 'ticket-info-dates', &><& /Ticket/Elements/ShowDates, Ticket => $Ticket &> % my (@extra); % push @extra, titleright_raw => ''.loc('Graph').'' unless RT->Config->Get('DisableGraphViz'); % $m->callback( %ARGS, CallbackName => 'LinksExtra', extra => \@extra ); <&| /Widgets/TitleBox, title => loc('Links'), ($can_modify ? (title_href => RT->Config->Get('WebPath')."/Ticket/ModifyLinks.html?id=".$Ticket->Id) : ()), class => 'ticket-info-links', @extra, &><& /Elements/ShowLinks, Object => $Ticket &> % $m->callback( %ARGS, CallbackName => 'RightColumn' );
    <%ARGS> $Ticket => undef $Attachments => undef <%INIT> my $can_modify = $Ticket->CurrentUserHasRight('ModifyTicket'); my $can_modify_cf = $Ticket->CurrentUserHasRight('ModifyCustomField'); my $can_modify_owner = $Ticket->CurrentUserCanSetOwner(); my $can_modify_people = $Ticket->CurrentUserHasRight('Watch') || $Ticket->CurrentUserHasRight('WatchAsAdminCc'); rt-4.2.12/share/html/Ticket/Elements/ShowTime000644 000765 000024 00000004353 12555754775 021437 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ($minutes < 60) { <&|/l, $minutes &>[quant,_1,minute,minutes] % } else { <&|/l, sprintf("%.1f",$minutes / 60), $minutes &>[quant,_1,hour,hours] ([quant,_2,minute,minutes]) % } <%init> $minutes ||= 0; <%ARGS> $minutes rt-4.2.12/share/html/Ticket/Elements/ShowUpdateStatus000644 000765 000024 00000005431 12555754775 023165 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <&| /Widgets/TitleBox, title => loc('New messages'), title_href => "#txn-". $txn->id &> <&|/l&>There are unread messages on this ticket. <&|/l, RT->Config->Get('WebPath') ."/$DisplayPath/Display.html?id=". $Ticket->id. "#txn-".$txn->id, RT->Config->Get('WebPath') ."/$DisplayPath/Display.html?id=". $Ticket->id ."&MarkAsSeen=1&Anchor=txn-" . $txn->id &>You can jump to the first unread message or jump to the first unread message and mark all messages as seen.
    <%ARGS> $Ticket $DisplayPath => $session{'CurrentUser'}->Privileged ? 'Ticket' : 'SelfService' <%INIT> return unless (RT->Config->Get( 'ShowUnreadMessageNotifications', $session{'CurrentUser'})); my $txn = $Ticket->SeenUpTo or return; rt-4.2.12/share/html/Ticket/Elements/UpdateCc000644 000765 000024 00000007761 12555754775 021376 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->callback(CallbackName => 'BeforeCc', ARGSRef => \%ARGS, Ticket => $TicketObj, one_time_Ccs => \@one_time_Ccs, txn_addresses => \%txn_addresses); <&|/l&>One-time Cc:<& /Elements/EmailInput, Name => 'UpdateCc', Size => undef, Default => $ARGS{UpdateCc}, AutocompleteMultiple => 1 &>
    %if (scalar @one_time_Ccs) { (<&|/l&>check to add) %} %foreach my $addr ( @one_time_Ccs ) { format; onClick="checkboxToInput('UpdateCc', <% "UpdateCc-$addr" |n,j%>, <%$clean_addr|n,j%> );" <% $ARGS{'UpdateCc-'.$addr} ? 'checked="checked"' : ''%> > %} <&|/l&>One-time Bcc:<& /Elements/EmailInput, Name => 'UpdateBcc', Size => undef, Default => $ARGS{UpdateBcc}, AutocompleteMultiple => 1 &>
    %if (scalar @one_time_Ccs) { (<&|/l&>check to add) %} %foreach my $addr ( @one_time_Ccs ) { format; onClick="checkboxToInput('UpdateBcc', <% "UpdateBcc-$addr" |n,j%>, <%$clean_addr|n,j%> );" <% $ARGS{'UpdateBcc-'.$addr} ? 'checked="checked"' : ''%> > %} <%args> $TicketObj <%init> my %txn_addresses = %{$TicketObj->TransactionAddresses}; my @req_addresses = split /,/, $TicketObj->RequestorAddresses; my @one_time_Ccs; foreach my $addr ( keys %txn_addresses) { next if ( grep {$addr eq $_} @req_addresses ); push @one_time_Ccs,$addr; } rt-4.2.12/share/html/Ticket/Attachment/dhandler000644 000765 000024 00000007445 12555754775 022002 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%perl> my ( $ticket, $trans, $attach, $filename ); my $arg = $m->dhandler_arg; # get rest of path if ( $arg =~ m{^(\d+)/(\d+)} ) { $trans = $1; $attach = $2; } else { Abort("Corrupted attachment URL."); } my $AttachmentObj = RT::Attachment->new( $session{'CurrentUser'} ); $AttachmentObj->Load($attach) || Abort("Attachment '$attach' could not be loaded"); unless ( $AttachmentObj->id ) { Abort("Bad attachment id. Couldn't find attachment '$attach'\n"); } unless ( $AttachmentObj->TransactionId() == $trans ) { Abort("Bad transaction number for attachment. $trans should be". $AttachmentObj->TransactionId() . "\n"); } my $content = $AttachmentObj->OriginalContent; my $content_type = $AttachmentObj->ContentType || 'text/plain'; if ( RT->Config->Get('AlwaysDownloadAttachments') ) { $r->headers_out->{'Content-Disposition'} = "attachment"; } elsif ( !RT->Config->Get('TrustHTMLAttachments') ) { $content_type = 'text/plain' if ( $content_type =~ /^text\/html/i ); } elsif (lc $content_type eq 'text/html') { # If we're trusting and serving HTML for display not download, try to do # inline rewriting to be extra helpful. my $count = RT::Interface::Web::RewriteInlineImages( Content => \$content, Attachment => $AttachmentObj, ); RT->Logger->debug("Rewrote $count CID images when displaying original HTML attachment #$attach"); } my $enc = $AttachmentObj->OriginalEncoding || 'utf-8'; my $iana = Encode::find_encoding($enc); $iana = $iana ? $iana->mime_name : $enc; require MIME::Types; my $mimetype = MIME::Types->new->type($content_type); unless ( $mimetype && $mimetype->isBinary ) { $content_type .= ";charset=$iana"; } $r->content_type($content_type); $m->clear_buffer(); $m->out($content); $m->abort; <%attr> AutoFlush => 0 rt-4.2.12/share/html/Ticket/Attachment/WithHeaders/000755 000765 000024 00000000000 12555754775 022473 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Ticket/Attachment/WithHeaders/dhandler000644 000765 000024 00000005621 12555754775 024203 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%perl> # we don't need transaction id my ($id) = $m->dhandler_arg =~ /^(\d+)/; unless ( $id ) { # wrong url format Abort("Corrupted attachment URL"); } my $AttachmentObj = RT::Attachment->new( $session{'CurrentUser'} ); $AttachmentObj->Load( $id ); unless ( $AttachmentObj->id ) { Abort("Couldn't load attachment #$id"); } my $content_type = 'text/plain'; my $enc = $AttachmentObj->OriginalEncoding || 'utf-8'; my $iana = Encode::find_encoding($enc); $iana = $iana ? $iana->mime_name : $enc; $content_type .= ";charset=$iana"; # XXX: should we check handle html here and integrate headers into html? $r->content_type( $content_type ); $m->clear_buffer; $m->out( $AttachmentObj->EncodedHeaders( $enc ) ); $m->out( "\n\n" ); $m->out( $AttachmentObj->OriginalContent ); $m->abort; <%attr> AutoFlush => 0 rt-4.2.12/share/html/SelfService/Article/000755 000765 000024 00000000000 12555754775 020546 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/SelfService/Attachment/000755 000765 000024 00000000000 12555754775 021253 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/SelfService/Closed.html000644 000765 000024 00000004540 12555754775 021265 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /SelfService/Elements/Header, Title => loc('Closed tickets') &> <& /SelfService/Elements/MyRequests, %ARGS, status => [ RT::Queue->InactiveStatusArray ], title => loc('My closed tickets'), BaseURL => RT->Config->Get('WebPath') ."/SelfService/Closed.html?", Page => $Page, &> <%ARGS> $Page => 1 rt-4.2.12/share/html/SelfService/Create.html000644 000765 000024 00000011525 12555754775 021260 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& Elements/Header, Title => loc("Create a ticket") &> <& /Elements/ListActions, actions => \@results &>
    % for my $key (grep {defined $ARGS{$_}} map {+("new-$_", "$_-new")} keys %RT::Link::DIRMAP) { % } <% $m->callback( CallbackName => 'AfterQueue', %ARGS, QueueObj => $queue_obj ) %> <& /Ticket/Elements/AddAttachments, %ARGS, QueueObj => $queue_obj &>
    <&|/l&>Queue: <%$queue_obj->Name || ''%> <% $queue_obj->Description ? '('.$queue_obj->Description.')' : '' %>
    <&|/l&>Requestors: <& /Elements/EmailInput, Name => 'Requestors', Size => '20', Default => $ARGS{Requestors} || $session{CurrentUser}->EmailAddress, AutocompleteMultiple => 1 &>
    <&|/l&>Cc: <& /Elements/EmailInput, Name => 'Cc', Size => '20', Default => $ARGS{Cc} || '' &>
    <&|/l&>Subject:
    <& /Elements/EditCustomFields, %ARGS, Object => RT::Ticket->new($session{CurrentUser}), CustomFields => $queue_obj->TicketCustomFields, AsTable => 0, &>
    <&|/l&>Describe the issue below:
    <& /Elements/MessageBox, Default => $ARGS{Content} || '' &>
    <& /Elements/Submit, Label => loc("Create ticket")&>
    <%args> $Queue => undef <%init> my @results; my $queue_obj = RT::Queue->new($session{'CurrentUser'}); $queue_obj->Load($Queue); ProcessAttachments(ARGSRef => \%ARGS); my $skip_create = 0; { my ($status, @msg) = $m->comp( '/Elements/ValidateCustomFields', CustomFields => $queue_obj->TicketCustomFields, ARGSRef => \%ARGS ); unless ($status) { push @results, @msg; $skip_create = 1; } } $m->callback( CallbackName => 'BeforeCreate', ARGSRef => \%ARGS, skip_create => \$skip_create, results => \@results ); if ( !exists $ARGS{'AddMoreAttach'} and defined($ARGS{'id'}) and $ARGS{'id'} eq 'new' ) { # new ticket? if ( !$skip_create ) { $m->comp('Display.html', %ARGS); $RT::Logger->crit("After display call; error is $@"); $m->abort(); } } rt-4.2.12/share/html/SelfService/CreateTicketInQueue.html000644 000765 000024 00000004706 12555754775 023723 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& Elements/Header, Title => loc("Create a ticket") &>

    <&|/l&>Select a queue for your new ticket

    % while (my $queue = $queues->Next) { % next unless $queue->CurrentUserHasRight('CreateTicket');
    <%$queue->Name%>
    <%$queue->Description%>
    % }
    <%init> my $queues = RT::Queues->new($session{'CurrentUser'}); $queues->UnLimit; rt-4.2.12/share/html/SelfService/Display.html000644 000765 000024 00000013625 12555754775 021465 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /SelfService/Elements/Header, Title => loc('#[_1]: [_2]', $Ticket->id, $Ticket->Subject) &> % $m->callback(CallbackName => 'BeforeActionList', %ARGS, Actions => \@results, ARGSRef => \%ARGS, Ticket => $Ticket ); <& /Elements/ListActions, actions => \@results &> <& /Ticket/Elements/ShowUpdateStatus, Ticket => $Ticket &>
    <&| /Widgets/TitleBox, title => loc('The Basics'), class => 'ticket-info-basics', ($LinkBasicsTitle ? (title_href => $title_box_link) : ()), title_class=> 'inverse', color => "#993333" &> <& /Ticket/Elements/ShowBasics, Ticket => $Ticket, UngroupedCFs => 1 &> <& /Elements/ShowCustomFieldCustomGroupings, Object => $Ticket, title_href => ($LinkBasicsTitle ? RT->Config->Get('WebPath')."/SelfService/Update.html" : "" ), Groupings => [ grep {$_ !~ /^(Basics|Dates)$/} RT::CustomField->Groupings( "RT::Ticket" ) ], &> <&| /Widgets/TitleBox, title => loc("Dates"), class => 'ticket-info-dates', title_class=> 'inverse', color => "#663366" &> <& /Ticket/Elements/ShowDates, Ticket => $Ticket, UpdatedLink => 0 &>
    % $m->callback(CallbackName => 'BeforeShowHistory', ARGSRef=> \%ARGS, Ticket => $Ticket ); <& /Elements/ShowHistory, Object => $Ticket, ShowHeaders => $ARGS{'ShowHeaders'}, DownloadableHeaders => 0, &> <%INIT> my ( $field, @results ); $m->callback( ARGSRef => \%ARGS, CallbackName => 'Initial' ); # Load the ticket #If we get handed two ids, mason will make them an array. bleck. # We want teh first one. Just because there's no other sensible way # to deal my @id = ( ref $id eq 'ARRAY' ) ? @{$id} : ($id); my $Ticket = RT::Ticket->new( $session{'CurrentUser'} ); if ( ($id[0]||'') eq 'new' ) { my $Queue = RT::Queue->new( $session{'CurrentUser'} ); Abort( loc('Queue not found') ) unless $Queue->Load( $ARGS{'Queue'} ); Abort( loc('You have no permission to create tickets in that queue.') ) unless $Queue->CurrentUserHasRight('CreateTicket'); ( $Ticket, @results ) = CreateTicket( %ARGS ); Abort( join("\n", @results ) ) unless $Ticket->id; } else { $Ticket = LoadTicket($ARGS{'id'}); push @results, ProcessUpdateMessage( ARGSRef => \%ARGS, TicketObj => $Ticket ); my @cfupdates = ProcessObjectCustomFieldUpdates(Object => $Ticket, ARGSRef => \%ARGS); push (@results, @cfupdates); #Update the status if ( ( defined $ARGS{'Status'} ) and $ARGS{'Status'} and ( $ARGS{'Status'} ne $Ticket->Status ) ) { my ($code, $msg) = $Ticket->SetStatus( $ARGS{'Status'} ); push @results, "$msg"; } } # This code does automatic redirection if any updates happen. unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) { Abort( loc("No permission to display that ticket") ); } if ( $ARGS{'MarkAsSeen'} ) { $Ticket->SetAttribute( Name => 'User-'. $Ticket->CurrentUser->id .'-SeenUpTo', Content => $Ticket->LastUpdated, ); push @results, loc('Marked all messages as seen'); } MaybeRedirectForResults( Actions => \@results, Path => '/SelfService/Display.html', Anchor => $ARGS{'Anchor'}, Arguments => { 'id' => $Ticket->id }, ); my $LinkBasicsTitle = $Ticket->CurrentUserHasRight('ModifyTicket') || $Ticket->CurrentUserHasRight('ReplyToTicket'); my $title_box_link = RT->Config->Get('WebPath')."/SelfService/Update.html?id=".$Ticket->Id; $m->callback(CallbackName => 'BeforeDisplay', Ticket => \$Ticket, ARGSRef => \%ARGS, title_box_link => \$title_box_link); <%ARGS> $id => undef rt-4.2.12/share/html/SelfService/Elements/000755 000765 000024 00000000000 12555754775 020737 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/SelfService/Helpers/000755 000765 000024 00000000000 12555754775 020565 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/SelfService/index.html000644 000765 000024 00000004471 12555754775 021166 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /SelfService/Elements/Header, Title => loc('Open tickets') &> <& /SelfService/Elements/MyRequests, %ARGS, status => [ RT::Queue->ActiveStatusArray() ], title => loc('My open tickets'), BaseURL => RT->Config->Get('WebPath') ."/SelfService/?", Page => $Page, &> <%ARGS> $Page => 1 rt-4.2.12/share/html/SelfService/Prefs.html000644 000765 000024 00000010140 12555754775 021124 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /SelfService/Elements/Header, Title => loc('Preferences') &> <& /Elements/ListActions, actions => \@results &>
    <&| /Widgets/TitleBox, title => loc('Locale'), id => "user-prefs-identity" &>
    <&|/l&>Language: <& /Elements/SelectLang, Name => 'Lang', Default => $user->Lang &>
    <&|/l&>Timezone: <& /Elements/SelectTimezone, Name => 'Timezone', Default => $user->Timezone &>
    <&| /Widgets/TitleBox, title => loc('Change password') &> <& /Elements/EditPassword, User => $user, Name => [qw(CurrentPass NewPass1 NewPass2)], &>

    <& /Elements/Submit, Label => loc('Save Changes') &>
    <%INIT> my @results; my $user = $session{'CurrentUser'}->UserObj; if (defined $NewPass1 && length $NewPass1 ) { my ($status, $msg) = $user->SafeSetPassword( Current => $CurrentPass, New => $NewPass1, Confirmation => $NewPass2, ); push @results, loc("Password: [_1]", $msg); } my @fields = qw( Lang Timezone ); $m->callback( CallbackName => 'UpdateLogic', fields => \@fields, results => \@results, UserObj => $user, ARGSRef => \%ARGS, ); push @results, UpdateRecordObject ( AttributesRef => \@fields, Object => $user, ARGSRef => \%ARGS, ); if ( $Lang ) { $session{'CurrentUser'}->LanguageHandle($Lang); $session{'CurrentUser'} = $session{'CurrentUser'}; # force writeback } if ($Signature) { $Signature =~ s/(\r\n|\r)/\n/g; if ($Signature ne $user->Signature) { my ($val, $msg) = $user->SetSignature($Signature); push (@results, "Signature: ".$msg); } } #A hack to make sure that session gets rewritten. $session{'i'}++; <%ARGS> $Signature => undef $CurrentPass => undef $NewPass1 => undef $NewPass2 => undef $Lang => undef rt-4.2.12/share/html/SelfService/Update.html000644 000765 000024 00000011172 12555754775 021275 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /SelfService/Elements/Header, Title =>loc('Update ticket #[_1]', $Ticket->id) &> % $m->callback(CallbackName => 'BeforeForm', %ARGS, ARGSRef => \%ARGS, Ticket => $Ticket );
    <& /Ticket/Elements/AddAttachments, %ARGS, TicketObj => $Ticket &>
    <&|/l&>Status <& /Ticket/Elements/SelectStatus, Name => "Status", TicketObj => $Ticket, Default => $DefaultStatus &>
    <&|/l&>Subject
    <& /Elements/EditCustomFields, Object => $Ticket, AsTable => 0 &>
    % if (exists $ARGS{UpdateContent}) { % # preserve QuoteTransaction so we can use it to set up sane references/in/reply to % my $temp = $ARGS{'QuoteTransaction'}; % delete $ARGS{'QuoteTransaction'}; <& /Elements/MessageBox, Name=>"UpdateContent", Default=>$ARGS{UpdateContent}, IncludeSignature => 0, %ARGS&> % $ARGS{'QuoteTransaction'} = $temp; % } else { % my $IncludeSignature = 1; <& /Elements/MessageBox, Name=>"UpdateContent", IncludeSignature => $IncludeSignature, %ARGS &> % }
    <& /Elements/Submit, Label => loc('Update Ticket'), Name => 'SubmitTicket', id => 'SubmitTicket' &>
    <%INIT> my $Ticket = LoadTicket($id); $m->callback( Ticket => $Ticket, ARGSRef => \%ARGS, CallbackName => 'Initial' ); my $title = loc( "Update ticket #[_1]", $Ticket->id ); $DefaultStatus = $ARGS{Status} || $Ticket->Status() unless ($DefaultStatus); Abort( loc("No permission to view update ticket") ) unless ( $Ticket->CurrentUserHasRight('ReplyToTicket') or $Ticket->CurrentUserHasRight('ModifyTicket') ); ProcessAttachments(ARGSRef => \%ARGS); if ( exists $ARGS{SubmitTicket} ) { $m->callback(CallbackName => 'BeforeDisplay', Ticket => \$Ticket, ARGSRef => \%ARGS); return $m->comp('Display.html', TicketObj => $Ticket, %ARGS); } <%ARGS> $id => undef $Action => undef $DefaultStatus => undef rt-4.2.12/share/html/SelfService/Helpers/Autocomplete/000755 000765 000024 00000000000 12555754775 023226 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/SelfService/Helpers/Autocomplete/CustomFieldValues000644 000765 000024 00000004060 12555754775 026547 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->comp('/Helpers/Autocomplete/CustomFieldValues', %ARGS); rt-4.2.12/share/html/SelfService/Helpers/Autocomplete/Users000644 000765 000024 00000004044 12555754775 024254 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->comp('/Helpers/Autocomplete/Users', %ARGS); rt-4.2.12/share/html/SelfService/Elements/GotoTicket000644 000765 000024 00000004370 12555754775 022742 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    rt-4.2.12/share/html/SelfService/Elements/Header000644 000765 000024 00000004045 12555754775 022055 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, %ARGS &> <& /Elements/Tabs &> rt-4.2.12/share/html/SelfService/Elements/MyRequests000644 000765 000024 00000005436 12555754775 023013 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| /Widgets/TitleBox, title => $title &> <& /Elements/CollectionList, Title => $title, Format => $Format, Query => $Query, Order => @Order, OrderBy => @OrderBy, BaseURL => $BaseURL, AllowSorting => 1, Class => 'RT::Tickets', Rows => $Rows, Page => $Page &> <%INIT> $title ||= loc("My [_1] tickets", $friendly_status); my $id = $session{'CurrentUser'}->id; my $Query = "( Watcher.id = $id )"; if ( @status ) { @status = map {s/(['\\])/\\$1/g; "Status = '$_'"} @status; $Query .= " AND ( " . join(' OR ', @status ) . " )"; } my $Format = RT->Config->Get('DefaultSelfServiceSearchResultFormat'); <%ARGS> $title => undef $friendly_status => loc('open') @status => () $BaseURL => undef $Page => 1 @Order => ('ASC') @OrderBy => ('Created') $Rows => 50 rt-4.2.12/share/html/SelfService/Elements/SearchArticle000644 000765 000024 00000004371 12555754775 023400 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    rt-4.2.12/share/html/SelfService/Attachment/dhandler000644 000765 000024 00000004076 12555754775 022766 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> $m->comp('/Ticket/Attachment/dhandler', %ARGS); $m->abort; rt-4.2.12/share/html/SelfService/Article/autohandler000644 000765 000024 00000004411 12555754775 022777 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> if ( $session{'CurrentUser'}->HasRight( Right => 'ShowArticle', Object => $RT::System )) { $m->comp( { base_comp => $m->request_comp }, $m->fetch_next, %ARGS); } else { RT::Interface::Web::Redirect($RT::WebURL."SelfService/"); } rt-4.2.12/share/html/SelfService/Article/Display.html000644 000765 000024 00000005333 12555754775 023045 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /SelfService/Elements/Header, Title => loc('Display Article [_1]', $id) &> <%$article->Name || loc("(no name)")%>
    <%$article->Summary%> <& /Elements/ShowCustomFields, Object => $article &> <%init> my $article = RT::Article->new( $session{'CurrentUser'} ); if ($id) { $article->Load($id); } unless ( $article->Id ) { $m->comp( "/Elements/Error", Why => loc("Article not found") ); } unless ( $article->CurrentUserHasRight('ShowArticle') ) { $m->comp( "/Elements/Error", Why => loc("Permission Denied") ); } my $title = loc( "Article #[_1]: [_2]", $article->Id, $article->Name || loc("(no name)")); $id = $article->id; <%args> $id => undef rt-4.2.12/share/html/SelfService/Article/Search.html000644 000765 000024 00000010032 12555754775 022635 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /SelfService/Elements/Header, Title => loc('Search Articles') &> % my %dedupe_articles; % while (my $article = $articles_content->Next) { % $dedupe_articles{$article->Id}++; % } % while (my $article = $articles_basics->Next) { % next if $dedupe_articles{$article->Id}; % }
    <&|/l&>Search for Articles matching
      % if ($Articles_Content) { % if ($articles_basics->Count || $articles_content->Count) { <&|/l,$Articles_Content&>Articles matching [_1] % } else { <&|/l,$Articles_Content&>No Articles match [_1] % } % }
      <%$article->Name || loc('(no name)')%>: <%$article->Summary%>
      <%$article->Name || loc('(no name)')%>: <%$article->Summary%>
    <%init> use RT::Articles; my $articles_content = RT::Articles->new( $session{'CurrentUser'} ); my $articles_basics = RT::Articles->new( $session{'CurrentUser'} ); if ( $ARGS{'Articles_Content'} ) { $articles_content->LimitCustomField( VALUE => $ARGS{'Articles_Content'}, OPERATOR => 'LIKE' ); $articles_basics->Limit( SUBCLAUSE => 'all', FIELD => 'Name', OPERATOR => 'LIKE', VALUE => $ARGS{'Articles_Content'}, ENTRYAGGREGATOR => "OR" ); $articles_basics->Limit( SUBCLAUSE => 'all', FIELD => 'Summary', OPERATOR => 'LIKE', VALUE => $ARGS{'Articles_Content'}, ENTRYAGGREGATOR => "OR" ); } <%args> $Articles_Content => '' rt-4.2.12/share/html/Search/Article.html000644 000765 000024 00000004330 12555754775 020427 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> RT::Interface::Web::Redirect(RT->Config->Get('WebURL'). 'Articles/Article/Search.html?' . $m->comp( '/Elements/QueryString', %ARGS, Load => 'Load', CurrentSearch => $ARGS{LoadSavedSearch} ) ); rt-4.2.12/share/html/Search/Build.html000644 000765 000024 00000026102 12555754775 020104 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# %# Data flow here: %# The page receives a Query from the previous page, and maybe arguments %# corresponding to actions. (If it doesn't get a Query argument, it pulls %# one out of the session hash. Also, it could be getting just a raw query from %# Build/Edit.html (Advanced).) %# %# After doing some stuff with default arguments and saved searches, the ParseQuery %# function (which is similar to, but not the same as, _parser in lib/RT/Tickets.pm) %# converts the Query into a RT::Interface::Web::QueryBuilder::Tree. This mason file %# then adds stuff to or modifies the tree based on the actions that had been requested %# by clicking buttons. It then calls GetQueryAndOptionList on the tree to generate %# the SQL query (which is saved as a hidden input) and the option list for the Clauses %# box in the top right corner. %# %# Worthwhile refactoring: the tree manipulation code for the actions could use some cleaning %# up. The node-adding code is different in the "add" actions from in ParseQuery, which leads %# to things like ParseQuery correctly not quoting numbers in numerical fields, while the "add" %# action does quote it (this breaks SQLite). %# <& /Elements/Header, Title => $title &> <& /Elements/Tabs, %TabArgs &>
    <& Elements/PickCriteria, query => $query{'Query'}, queues => $queues &>
    <& /Elements/Submit, Label => loc('Add these terms'), SubmitId => 'AddClause', Name => 'AddClause'&> <& /Elements/Submit, Label => loc('Add these terms and Search'), SubmitId => 'DoSearch', Name => 'DoSearch'&>
    <& Elements/EditQuery, %ARGS, actions => \@actions, optionlist => $optionlist, Description => $saved_search{'Description'}, &>
    <& Elements/EditSearches, %saved_search, CurrentSearch => \%query &>
    <& Elements/DisplayOptions, %ARGS, %query, AvailableColumns => $AvailableColumns, CurrentFormat => $CurrentFormat, &> <& /Elements/Submit, Label => loc('Update format and Search'), Name => 'DoSearch', id=>"formatbuttons"&>
    <%INIT> use RT::Interface::Web::QueryBuilder; use RT::Interface::Web::QueryBuilder::Tree; $ARGS{SavedChartSearchId} ||= 'new'; my $title = loc("Query Builder"); my %query; for( qw(Query Format OrderBy Order RowsPerPage) ) { $query{$_} = $ARGS{$_}; } my %saved_search; my @actions = $m->comp( 'Elements/EditSearches:Init', %ARGS, Query => \%query, SavedSearch => \%saved_search); if ( $NewQuery ) { # Wipe all data-carrying variables clear if we want a new # search, or we're deleting an old one.. %query = (); %saved_search = ( Id => 'new' ); # ..then wipe the session out.. delete $session{'CurrentSearchHash'}; # ..and the search results. $session{'tickets'}->CleanSlate if defined $session{'tickets'}; } { # Attempt to load what we can from the session and preferences, set defaults my $current = $session{'CurrentSearchHash'}; my $prefs = $session{'CurrentUser'}->UserObj->Preferences("SearchDisplay") || {}; my $default = { Query => '', Format => '', OrderBy => RT->Config->Get('DefaultSearchResultOrderBy'), Order => RT->Config->Get('DefaultSearchResultOrder'), RowsPerPage => 50 }; for( qw(Query Format OrderBy Order RowsPerPage) ) { $query{$_} = $current->{$_} unless defined $query{$_}; $query{$_} = $prefs->{$_} unless defined $query{$_}; $query{$_} = $default->{$_} unless defined $query{$_}; } for( qw(Order OrderBy) ) { if (ref $query{$_} eq "ARRAY") { $query{$_} = join( '|', @{ $query{$_} } ); } } if ( $query{'Format'} ) { # Clean unwanted junk from the format $query{'Format'} = $m->comp( '/Elements/ScrubHTML', Content => $query{'Format'} ); } } my $ParseQuery = sub { my ($string, $results) = @_; my $tree = RT::Interface::Web::QueryBuilder::Tree->new('AND'); @$results = $tree->ParseSQL( Query => $string, CurrentUser => $session{'CurrentUser'} ); return $tree; }; my @parse_results; my $tree = $ParseQuery->( $query{'Query'}, \@parse_results ); # if parsing went poorly, send them to the edit page to fix it if ( @parse_results ) { push @actions, @parse_results; return $m->comp( "Edit.html", Query => $query{'Query'}, Format => $query{'Format'}, SavedSearchId => $saved_search{'Id'}, SavedChartSearchId => $ARGS{'SavedChartSearchId'}, actions => \@actions, ); } my @options = $tree->GetDisplayedNodes; my @current_values = grep defined, @options[@clauses]; my @new_values = (); my $cf_field_names = join "|", map quotemeta, grep { $RT::Tickets::FIELD_METADATA{$_}->[0] eq 'CUSTOMFIELD' } sort keys %RT::Tickets::FIELD_METADATA; # Try to find if we're adding a clause foreach my $arg ( keys %ARGS ) { next unless $arg =~ m/^ValueOf(\w+|($cf_field_names).\{.*?\})$/ && ( ref $ARGS{$arg} eq "ARRAY" ? grep $_ ne '', @{ $ARGS{$arg} } : $ARGS{$arg} ne '' ); # We're adding a $1 clause my $field = $1; my ($op, $value); #figure out if it's a grouping my $keyword = $ARGS{ $field . "Field" } || $field; my ( @ops, @values ); if ( ref $ARGS{ 'ValueOf' . $field } eq "ARRAY" ) { # we have many keys/values to iterate over, because there is # more than one CF with the same name. @ops = @{ $ARGS{ $field . 'Op' } }; @values = @{ $ARGS{ 'ValueOf' . $field } }; } else { @ops = ( $ARGS{ $field . 'Op' } ); @values = ( $ARGS{ 'ValueOf' . $field } ); } $RT::Logger->error("Bad Parameters passed into Query Builder") unless @ops == @values; for ( my $i = 0; $i < @ops; $i++ ) { my ( $op, $value ) = ( $ops[$i], $values[$i] ); next if !defined $value || $value eq ''; my $rawvalue = $value; if ( $value =~ /^NULL$/i && $op =~ /=/ ) { if ( $op eq '=' ) { $op = "IS"; } elsif ( $op eq '!=' ) { $op = "IS NOT"; } } elsif ($value =~ /\D/) { $value =~ s/(['\\])/\\$1/g; $value = "'$value'"; } if ($keyword =~ s/(['\\])/\\$1/g or $keyword =~ /[^{}\w\.]/) { $keyword = "'$keyword'"; } my $clause = { Key => $keyword, Op => $op, Value => $value, RawValue => $rawvalue, }; push @new_values, RT::Interface::Web::QueryBuilder::Tree->new($clause); } } push @actions, $m->comp('Elements/EditQuery:Process', %ARGS, Tree => $tree, Selected => \@current_values, New => \@new_values, ); # Rebuild $Query based on the additions / movements my $optionlist_arrayref; ($query{'Query'}, $optionlist_arrayref) = $tree->GetQueryAndOptionList(\@current_values); my $optionlist = join "\n", map { qq() } @$optionlist_arrayref; my $queues = $tree->GetReferencedQueues; # Deal with format changes my ( $AvailableColumns, $CurrentFormat ); ( $query{'Format'}, $AvailableColumns, $CurrentFormat ) = $m->comp( 'Elements/BuildFormatString', %ARGS, queues => $queues, Format => $query{'Format'}, ); # if we're asked to save the current search, save it push @actions, $m->comp( 'Elements/EditSearches:Save', %ARGS, Query => \%query, SavedSearch => \%saved_search); # Populate the "query" context with saved search data if ($ARGS{SavedSearchSave}) { $query{'SavedSearchId'} = $saved_search{'Id'}; } # Push the updates into the session so we don't lose 'em $session{'CurrentSearchHash'} = { %query, SearchId => $saved_search{'Id'}, Object => $saved_search{'Object'}, Description => $saved_search{'Description'}, }; # Show the results, if we were asked. if ( $ARGS{'DoSearch'} ) { my $redir_query_string = $m->comp( '/Elements/QueryString', %query, SavedChartSearchId => $ARGS{'SavedChartSearchId'}, SavedSearchId => $saved_search{'Id'}, ); RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Search/Results.html?' . $redir_query_string); $m->abort; } # Build a querystring for the tabs my %TabArgs = (); if ($NewQuery) { $TabArgs{QueryString} = 'NewQuery=1'; } elsif ( $query{'Query'} ) { $TabArgs{QueryArgs} = \%query; } <%ARGS> $NewQuery => 0 @clauses => () rt-4.2.12/share/html/Search/Bulk.html000644 000765 000024 00000027436 12555754775 017755 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    % foreach my $var (qw(Query Format OrderBy Order Rows Page SavedSearchId SavedChartSearchId Token)) { %} <& /Elements/CollectionList, Query => $Query, DisplayFormat => $DisplayFormat, Format => $Format, Verbatim => 1, AllowSorting => 1, OrderBy => $OrderBy, Order => $Order, Rows => $Rows, Page => $Page, BaseURL => RT->Config->Get('WebPath')."/Search/Bulk.html?", Class => 'RT::Tickets' &> % $m->callback(CallbackName => 'AfterTicketList', ARGSRef => \%ARGS);
    <& /Elements/Submit, Label => loc('Update'), CheckboxNameRegex => '/^UpdateTicket(All)?$/', CheckAll => 1, ClearAll => 1 &>
    <&|/Widgets/TitleBox, title => $title &>
    <&|/l&>Make Owner: <& /Elements/SelectOwner, Name => "Owner", Default => $ARGS{Owner} || '' &>
    <&|/l&>Add Requestor: <& /Elements/EmailInput, Name => "AddRequestor", Size=> 20, Default => $ARGS{AddRequestor} &>
    <&|/l&>Remove Requestor: <& /Elements/EmailInput, Name => "DeleteRequestor", Size=> 20, Default => $ARGS{DeleteRequestor} &>
    <&|/l&>Add Cc: <& /Elements/EmailInput, Name => "AddCc", Size=> 20, Default => $ARGS{AddCc} &>
    <&|/l&>Remove Cc: <& /Elements/EmailInput, Name => "DeleteCc", Size=> 20, Default => $ARGS{DeleteCc} &>
    <&|/l&>Add AdminCc: <& /Elements/EmailInput, Name => "AddAdminCc", Size=> 20, Default => $ARGS{AddAdminCc} &>
    <&|/l&>Remove AdminCc: <& /Elements/EmailInput, Name => "DeleteAdminCc", Size=> 20, Default => $ARGS{DeleteAdminCc} &>
    <&|/l&>Make subject:
    <&|/l&>Make priority: <& /Elements/SelectPriority, Name => "Priority", Default => $ARGS{Priority} &>
    <&|/l&>Make queue: <& /Elements/SelectQueue, Name => "Queue", Default => $ARGS{Queue} &>
    <&|/l&>Make Status: <& /Ticket/Elements/SelectStatus, Name => "Status", Default => $ARGS{Status}, Queues => $seen_queues &>
    <&|/l&>Make date Starts: <& /Elements/SelectDate, Name => "Starts_Date", Default => $ARGS{Starts_Date} || '' &>
    <&|/l&>Make date Started: <& /Elements/SelectDate, Name => "Started_Date", Default => $ARGS{Started_Date} || '' &>
    <&|/l&>Make date Told: <& /Elements/SelectDate, Name => "Told_Date", Default => $ARGS{Told_Date} || '' &>
    <&|/l&>Make date Due: <& /Elements/SelectDate, Name => "Due_Date", Default => $ARGS{Due_Date} || '' &>
    <&| /Widgets/TitleBox, title => loc('Add comments or replies to selected tickets') &> % $m->callback( CallbackName => 'BeforeTransactionCustomFields', CustomFields => $TxnCFs ); % while (my $CF = $TxnCFs->Next()) { % } # end if while <& /Ticket/Elements/AddAttachments, %ARGS &>
    <&|/l&>Update Type:
    <&|/l&>Subject: " /> % $m->callback( %ARGS, CallbackName => 'AfterUpdateSubject' );
    <% $CF->Name %>: <& /Elements/EditCustomField, CustomField => $CF, Object => RT::Transaction->new( $session{'CurrentUser'} ), &><% $CF->FriendlyType %>
    <&|/l&>Message: % $m->callback( %ARGS, CallbackName => 'BeforeMessageBox' ); %# Currently, bulk update always starts with Comment not Reply selected, so we check this unconditionally % my $IncludeSignature = RT->Config->Get('MessageBoxIncludeSignatureOnComment'); <& /Elements/MessageBox, Name => "UpdateContent", $ARGS{UpdateContent} ? ( Default => $ARGS{UpdateContent}, IncludeSignature => 0 ) : ( IncludeSignature => $IncludeSignature ), &>
    <%perl> my $cfs = RT::CustomFields->new($session{'CurrentUser'}); $cfs->LimitToGlobal(); $cfs->LimitToQueue($_) for keys %$seen_queues; $cfs->SetContextObject( values %$seen_queues ) if keys %$seen_queues == 1; % if ( $cfs->Count ) { <&|/Widgets/TitleBox, title => loc('Edit Custom Fields') &> <& /Elements/BulkCustomFields, $ARGS{'AddMoreAttach'} ? %ARGS : (), CustomFields => $cfs &> % } <&|/Widgets/TitleBox, title => loc('Edit Links'), color => "#336633"&> <&|/l&>Enter tickets or URIs to link tickets to. Separate multiple entries with spaces.
    <& /Elements/BulkLinks, Collection => $Tickets, $ARGS{'AddMoreAttach'} ? %ARGS : () &> <&| /Widgets/TitleBox, title => loc('Merge'), color => '#336633' &> <& /Ticket/Elements/EditMerge, Tickets => $Tickets, %ARGS &> <& /Elements/Submit, Label => loc('Update') &>
    <%INIT> unless ( defined $Rows ) { $Rows = $RowsPerPage; $ARGS{Rows} = $RowsPerPage; } my $title = loc("Update multiple tickets"); # Iterate through the ARGS hash and remove anything with a null value. map ( $ARGS{$_} =~ /^$/ && ( delete $ARGS{$_} ), keys %ARGS ); my (@results); ProcessAttachments(ARGSRef => \%ARGS); $Page ||= 1; $Format ||= RT->Config->Get('DefaultSearchResultFormat'); my $DisplayFormat = "'__CheckBox.{UpdateTicket}__',". $Format; $DisplayFormat =~ s/\s*,\s*('?__NEWLINE__'?)/,$1,''/gi; $DECODED_ARGS->{'UpdateTicketAll'} = 1 unless @UpdateTicket; my $Tickets = RT::Tickets->new( $session{'CurrentUser'} ); $Tickets->FromSQL($Query); if ( $OrderBy =~ /\|/ ) { # Multiple Sorts my @OrderBy = split /\|/, $OrderBy; my @Order = split /\|/, $Order; $Tickets->OrderByCols( map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } } ( 0 .. $#OrderBy ) ); } else { $Tickets->OrderBy( FIELD => $OrderBy, ORDER => $Order ); } $Tickets->RowsPerPage($Rows) if ($Rows); $Tickets->GotoPage( $Page - 1 ); # SB uses page 0 as the first page Abort( loc("No search to operate on.") ) unless ($Tickets); # build up a list of all custom fields for tickets that we're displaying, so # we can display sane edit widgets. my $fields = {}; my $seen_queues = {}; while ( my $ticket = $Tickets->Next ) { next if $seen_queues->{ $ticket->Queue }; $seen_queues->{ $ticket->Queue } ||= $ticket->QueueObj; my $custom_fields = $ticket->CustomFields; while ( my $field = $custom_fields->Next ) { $fields->{ $field->id } = $field; } } #Iterate through each ticket we've been handed my @linkresults; $Tickets->RedoSearch(); unless ( $ARGS{'AddMoreAttach'} ) { while ( my $Ticket = $Tickets->Next ) { my $tid = $Ticket->id; next unless grep $tid == $_, @UpdateTicket; #Update the links $ARGS{'id'} = $Ticket->id; my @updateresults = ProcessUpdateMessage( TicketObj => $Ticket, ARGSRef => \%ARGS, KeepAttachments => 1, ); #Update the basics. my @basicresults = ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS ); my @dateresults = ProcessTicketDates( TicketObj => $Ticket, ARGSRef => \%ARGS ); #Update the watchers my @watchresults = ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS ); @linkresults = ProcessTicketLinks( TicketObj => $Ticket, TicketId => 'Ticket', ARGSRef => \%ARGS ); my @cfresults = ProcessRecordBulkCustomFields( RecordObj => $Ticket, ARGSRef => \%ARGS ); my @tempresults = ( @watchresults, @basicresults, @dateresults, @updateresults, @linkresults, @cfresults ); @tempresults = map { loc( "Ticket [_1]: [_2]", $Ticket->Id, $_ ) } @tempresults; @results = ( @results, @tempresults ); } delete $session{'Attachments'}{ $ARGS{'Token'} }; $Tickets->RedoSearch(); } my $TxnCFs = RT::CustomFields->new( $session{CurrentUser} ); $TxnCFs->LimitToLookupType( RT::Transaction->CustomFieldLookupType ); $TxnCFs->LimitToGlobalOrObjectId( keys %$seen_queues ); $TxnCFs->SetContextObject( values %$seen_queues ) if keys %$seen_queues == 1; <%args> $Format => undef $Page => 1 $Rows => undef $RowsPerPage => undef $Order => 'ASC' $OrderBy => 'id' $Query => undef @UpdateTicket => () rt-4.2.12/share/html/Search/Chart000644 000765 000024 00000037035 12555754775 017152 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Cache => undef $Query => "id > 0" @GroupBy => () $ChartStyle => 'bar+table+sql' @ChartFunction => 'COUNT' $Width => undef $Height => undef <%init> use GD; use GD::Text; my %font_config = RT->Config->Get('ChartFont'); my $font = $font_config{ $session{CurrentUser}->UserObj->Lang || '' } || $font_config{'others'}; s/\D//g for grep defined, $Width, $Height; $Width ||= 600; $Height ||= ($ChartStyle =~ /\bpie\b/ ? $Width : 400); $Height = $Width if $ChartStyle =~ /\bpie\b/; my $plot_error = sub { my $text = shift; my ($plot, $error); my $create_plot = sub { my ($width, $height) = @_; my $plot = GD::Image->new($width => $height); $plot->colorAllocate(255, 255, 255); # background my $black = $plot->colorAllocate(0, 0, 0); require GD::Text::Wrap; my $error = GD::Text::Wrap->new($plot, color => $black, text => $text, align => "left", width => $width - 20, preserve_nl => 1, ); $error->set_font( $font, 16 ); return ($plot, $error); }; ($plot, $error) = $create_plot->($Width, $Height); my $text_height = ($error->get_bounds(0, 0))[3]; # GD requires us to replot it all with the new height ($plot, $error) = $create_plot->($Width, $text_height + 20); $error->draw(10, 10); $m->comp( 'SELF:Plot', plot => $plot, %ARGS ); }; use RT::Report::Tickets; my $report = RT::Report::Tickets->new( $session{'CurrentUser'} ); my %columns; if ( $Cache and my $data = delete $session{'charts_cache'}{ $Cache } ) { %columns = %{ $data->{'columns'} }; $report->Deserialize( $data->{'report'} ); $session{'i'}++; } else { %columns = $report->SetupGroupings( Query => $Query, GroupBy => \@GroupBy, Function => \@ChartFunction, ); $report->SortEntries; } my @data = ([],[]); my $max_value = 0; my $min_value; my $max_key_length = 0; while ( my $entry = $report->Next ) { push @{ $data[0] }, [ map $entry->LabelValue( $_ ), @{ $columns{'Groups'} } ]; my @values; foreach my $column ( @{ $columns{'Functions'} } ) { my $v = $entry->RawValue( $column ); unless ( ref $v ) { push @values, $v; next; } my @subs = $report->FindImplementationCode( $report->ColumnInfo( $column )->{'META'}{'SubValues'} )->( $report ); push @values, map $v->{$_}, @subs; } my $i = 0; push @{ $data[++$i] }, $_ foreach @values; foreach my $v ( @values ) { $max_value = $v if $max_value < $v; $min_value = $v if !defined $min_value || $min_value > $v; } } $ChartStyle =~ s/\bpie\b/bar/ if @data > 2; my $chart_class; if ($ChartStyle =~ /\bpie\b/) { require GD::Graph::pie; $chart_class = "GD::Graph::pie"; } else { require GD::Graph::bars; $chart_class = "GD::Graph::bars"; } # Pie charts don't like having no input, so we show a special image # that indicates an error message. Because this is used in an # context, it can't be a simple error message. Without this check, # the chart will just be a non-loading image. unless ( $report->Count ) { return $plot_error->(loc("No tickets found.")); } my $chart = $chart_class->new( $Width => $Height ); my %chart_options; if ($chart_class eq "GD::Graph::bars") { my $count = @{ $data[0] }; $chart_options{'bar_spacing'} = $count > 30 ? 1 : $count > 20 ? 2 : $count > 10 ? 3 : 5 ; if ( my $code = $report->LabelValueCode( $columns{'Functions'}[0] ) ) { my %info = %{ $report->ColumnInfo( $columns{'Functions'}[0] ) }; $chart_options{'values_format'} = $chart_options{'y_number_format'} = sub { return $code->($report, %info, VALUE => shift ); }; } $report->GotoFirstItem; # normalize min/max values to graph boundaries { my $integer = 1; $integer = 0 for grep $_ ne int $_, $min_value, $max_value; $max_value *= $max_value > 0 ? 1.1 : 0.9 if $max_value; $min_value *= $min_value > 0 ? 0.9 : 1.1 if $min_value; if ($integer) { $max_value = int($max_value + ($max_value > 0? 1 : 0) ); $min_value = int($min_value + ($min_value < 0? -1 : 0) ); my $span = abs($max_value - $min_value); $max_value += 5 - ($span % 5); } $chart_options{'y_label_skip'} = 2; $chart_options{'y_tick_number'} = 10; } my $text_size = sub { my ($size, $text) = (@_); my $font_handle = GD::Text::Align->new( $chart->get('graph'), valign => 'top', 'halign' => 'center', ); $font_handle->set_font($font, $size); $font_handle->set_text($text); return $font_handle; }; my $fitter = sub { my %args = @_; foreach my $font_size ( @{$args{'sizes'}} ) { my $line_height = $text_size->($font_size, 'Q')->get('height'); my $keyset_height = $line_height; if ( ref $args{data}->[0] ) { $keyset_height = $text_size->($font_size, join "\n", ('Q')x scalar @{ $args{data}->[0] }) ->get('height'); } my $status = 1; foreach my $e ( @{ $args{data} } ) { $status = $args{'cb'}->( element => $e, size => $font_size, line_height => $line_height, keyset_height => $keyset_height, ); last unless $status; } next unless $status; return $font_size; } return 0; }; # try to fit in labels on X axis values, aka key { # we have several labels layouts: # 1) horizontal, one line per label # 2) horizontal, multi-line - doesn't work, GD::Chart bug # 3) vertical, one line # 4) vertical, multi-line my %can = ( 'horizontal, one line' => 1, 'vertical, one line' => 1, 'vertical, multi line' => @{$data[0][0]} > 1, ); my $x_space_for_label = $Width*0.8/($count+1.5); my $y_space_for_label = $Height*0.4; my $found_solution = $fitter->( sizes => [12,11,10], data => $data[0], cb => sub { my %args = @_; # if horizontal space doesn't allow us to fit one vertical line, # then we need smaller font return 0 if $args{'line_height'} > $x_space_for_label; my $width = $text_size->( $args{'size'}, join ' - ', @{ $args{'element'} } ) ->get('width'); if ( $width > $x_space_for_label ) { $can{'horizontal, one line'} = 0; } if ( $width > $y_space_for_label ) { $can{'vertical, one line'} = 0; } if ( $args{'keyset_height'} >= $x_space_for_label ) { $can{'vertical, multi line'} = 0; } if ( $can{'vertical, multi line'} ) { my $width = $text_size->( $args{'size'}, join "\n", @{ $args{'element'} } ) ->get('width'); if ( $width > $y_space_for_label ) { $can{'vertical, multi line'} = 0; } } return 0 unless grep $_, values %can; return 1; }, ); if ( $found_solution ) { $chart_options{'x_axis_font'} = [$font, $found_solution]; if ( $can{'horizontal, one line'} ) { $chart_options{'x_labels_vertical'} = 0; $_ = join ' - ', @$_ foreach @{$data[0]}; } elsif ( $can{'vertical, multi line'} ) { $chart_options{'x_labels_vertical'} = 1; $_ = join "\n", @$_ foreach @{$data[0]}; } else { $chart_options{'x_labels_vertical'} = 1; $_ = join " - ", @$_ foreach @{$data[0]}; } } else { my $font_handle = $text_size->(10, 'Q'); my $line_height = $font_handle->get('height'); if ( $line_height > $x_space_for_label ) { $Width *= $line_height/$x_space_for_label; $Width = int( $Width+1 ); } $_ = join " - ", @$_ foreach @{$data[0]}; my $max_text_width = 0; foreach (@{$data[0]}) { $font_handle->set_text($_); my $width = $font_handle->get('width'); $max_text_width = $width if $width > $max_text_width; } if ( $max_text_width > $Height*0.4 ) { $Height = int($max_text_width / 0.4 + 1); } $chart_options{'x_labels_vertical'} = 1; $chart_options{'x_axis_font'} = [$font, 10]; } } # use the same size for y axis labels { $chart_options{'y_axis_font'} = $chart_options{'x_axis_font'}; } # try to fit in values above bars { # 0.8 is guess, labels for ticks on Y axis can be wider # 1.5 for paddings around bars that GD::Graph adds my $x_space_for_label = $Width*0.8/($count*(@data - 1)+1.5); my %can = ( 'horizontal, one line' => 1, 'vertical, one line' => 1, ); my %seen; my $found_solution = $fitter->( sizes => [ grep $_ <= $chart_options{'x_axis_font'}[1], 12, 11, 10, 9 ], data => [ map {@$_} @data[1..(@data-1)] ], cb => sub { my %args = @_; # if horizontal space doesn't allow us to fit one vertical line, # then we need smaller font return 0 if $args{'line_height'} > $x_space_for_label; my $value = $args{'element'}; $value = $chart_options{'values_format'}->($value) if $chart_options{'values_format'}; return 1 if $seen{$value}++; my $width = $text_size->( $args{'size'}, $value )->get('width'); if ( $width > $x_space_for_label ) { $can{'horizontal, one line'} = 0; } my $y_space_for_label = $Height * 0.6 *( 1 - ($args{'element'}-$min_value)/($max_value-$min_value) ); if ( $width > $y_space_for_label ) { $can{'vertical, one line'} = 0; } return 0 unless grep $_, values %can; return 1; }, ); $chart_options{'show_values'} = 1; $chart_options{'hide_overlapping_values'} = 1; if ( $found_solution ) { $chart_options{'values_font'} = [ $font, $found_solution ], $chart_options{'values_space'} = 2; $chart_options{'values_vertical'} = $can{'horizontal, one line'} ? 0 : 1; } else { $chart_options{'values_font'} = [ $font, 9 ], $chart_options{'values_space'} = 1; $chart_options{'values_vertical'} = 1; } } %chart_options = ( %chart_options, x_label => join( ' - ', map $report->Label( $_ ), @{ $columns{'Groups'} } ), x_label_position => 0.6, y_label => $report->Label( $columns{'Functions'}[0] ), y_label_position => 0.6, # use a top margin enough to display values over the top line if needed t_margin => 18, # the following line to make sure there's enough space for values to show y_max_value => $max_value, y_min_value => $min_value, # if there're too many bars or at least one key is too long, use vertical bargroup_spacing => $chart_options{'bar_spacing'}*5, ); } else { my $i = 0; while ( my $entry = $report->Next ) { push @{ $data[0][$i++] }, $entry->LabelValue( $columns{'Functions'}[0] ); } $_ = join ' - ', @$_ foreach @{$data[0]}; } if ($chart->get('width') != $Width || $chart->get('height') != $Height ) { $chart = $chart_class->new( $Width => $Height ); } %chart_options = ( '3d' => 0, title_font => [ $font, 16 ], legend_font => [ $font, 16 ], x_label_font => [ $font, 14 ], y_label_font => [ $font, 14 ], label_font => [ $font, 14 ], y_axis_font => [ $font, 12 ], values_font => [ $font, 12 ], value_font => [ $font, 12 ], %chart_options, ); foreach my $opt ( grep /_font$/, keys %chart_options ) { my $v = delete $chart_options{$opt}; next unless my $can = $chart->can("set_$opt"); $can->($chart, @$v); } $chart->set(%chart_options) if keys %chart_options; $chart->{dclrs} = [ RT->Config->Get("ChartColors") ]; { no warnings 'redefine'; *GD::Graph::pick_data_clr = sub { my $self = shift; my $color_hex = $self->{dclrs}[ $_[0] % @{ $self->{dclrs} } - 1 ]; return map { hex } ( $color_hex =~ /(..)(..)(..)/ ); }; } if (my $plot = eval { $chart->plot( \@data ) }) { $m->comp( 'SELF:Plot', plot => $plot, %ARGS ); } else { my $error = join "\n", grep defined && length, $chart->error, $@; $plot_error->(loc("Error plotting chart: [_1]", $error)); } <%METHOD Plot> <%ARGS> $plot => undef <%INIT> my @types = ('png', 'gif'); for my $type (@types) { $plot->can($type) or next; $r->content_type("image/$type"); $m->out( $plot->$type ); $m->abort(); } die "Your GD library appears to support none of the following image types: " . join(', ', @types); rt-4.2.12/share/html/Search/Chart.html000644 000765 000024 00000017725 12555754775 020121 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> my $default_value = { Query => 'id > 0', GroupBy => ['Status'], ChartStyle => ['bar+table+sql'], ChartFunction => ['COUNT'], }; $m->callback( ARGSRef => \%ARGS, CallbackName => 'Initial' ); my $title = loc( "Grouped search results"); my @search_fields = qw(Query GroupBy ChartStyle ChartFunction Width Height); my $saved_search = $m->comp( '/Widgets/SavedSearch:new', SearchType => 'Chart', SearchFields => [@search_fields], ); my @actions = $m->comp( '/Widgets/SavedSearch:process', args => \%ARGS, self => $saved_search ); my %query; { if ($saved_search->{'CurrentSearch'}->{'Object'}) { foreach my $search_field (@{ $saved_search->{'SearchFields'} }) { $query{$search_field} = $saved_search->{'CurrentSearch'}->{'Object'}->Content->{$search_field}; } } my $current = $session{'CurrentSearchHash'}; my @session_fields = qw( Query SavedChartSearchId SavedSearchDescription SavedSearchLoad SavedSearchLoadButton SavedSearchOwner ); for(@session_fields) { $query{$_} = $DECODED_ARGS->{$_} unless defined $query{$_}; $query{$_} = $current->{$_} unless defined $query{$_}; } if ($DECODED_ARGS->{'SavedSearchLoadSubmit'}) { $query{'SavedChartSearchId'} = $DECODED_ARGS->{'SavedSearchLoad'}; } if ($DECODED_ARGS->{'SavedSearchSave'}) { $query{'SavedChartSearchId'} = $saved_search->{'SearchId'}; } } foreach (@search_fields) { if ( ref $default_value->{$_} ) { $query{$_} = ref $ARGS{$_} ? $ARGS{$_} : [ $ARGS{$_} ]; $query{$_} = $default_value->{$_} unless defined $query{$_} && defined $query{$_}[0]; } else { $query{$_} = ref $ARGS{$_} ? $ARGS{$_} : $ARGS{$_}; $query{$_} = $default_value->{$_} unless defined $query{$_}; } } $m->callback( ARGSRef => \%ARGS, QueryArgsRef => \%query ); <& /Elements/Header, Title => $title &> <& /Elements/Tabs, QueryArgs => \%query &> <& /Elements/ListActions, actions => \@actions &> % $m->callback( ARGSRef => \%ARGS, CallbackName => 'BeforeChart' ); <& /Search/Elements/Chart, %ARGS &> % $m->callback( ARGSRef => \%ARGS, CallbackName => 'AfterChart' );
    <&| /Widgets/TitleBox, title => loc('Group by'), class => "chart-group-by" &>
    <% loc('Group tickets by') %> <& Elements/SelectGroupBy, Name => 'GroupBy', Query => $query{Query}, Default => $query{'GroupBy'}[0], &>
    <% loc('and then') %> <& Elements/SelectGroupBy, Name => 'GroupBy', Query => $query{Query}, Default => $query{'GroupBy'}[1] // q{}, ShowEmpty => 1, &>
    <% loc('and then') %> <& Elements/SelectGroupBy, Name => 'GroupBy', Query => $query{Query}, Default => $query{'GroupBy'}[2] // q{}, ShowEmpty => 1, &>
    <&| /Widgets/TitleBox, title => loc("Calculate"), class => "chart-calculate" &>
    <% loc('Calculate values of') %> <& Elements/SelectChartFunction, Default => $query{'ChartFunction'}[0] &>
    <% loc('and then') %> <& Elements/SelectChartFunction, Default => $query{'ChartFunction'}[1] // q{}, ShowEmpty => 1 &>
    <% loc('and then') %> <& Elements/SelectChartFunction, Default => $query{'ChartFunction'}[2] // q{}, ShowEmpty => 1 &>
    <&| /Widgets/TitleBox, title => loc('Picture'), class => "chart-picture" &> ×
    > <% loc('Include data table') %>
    > <% loc('Include TicketSQL query') %>
    <& /Elements/Submit, Label => loc('Update Chart'), Name => 'Update' &>
    rt-4.2.12/share/html/Search/Edit.html000644 000765 000024 00000006522 12555754775 017736 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title&> <& /Elements/Tabs &> <& Elements/NewListActions, actions => \@actions &>
    <&|/Widgets/TitleBox, title => loc('Query'), &> <&|/Widgets/TitleBox, title => loc('Format'), &> <& /Elements/Submit, Label => loc("Apply"), Reset => 1, Caption => loc("Apply your changes")&>
    <%INIT> my $title = loc("Edit Query"); $Format = $m->comp('/Elements/ScrubHTML', Content => $Format); my $QueryString = $m->comp('/Elements/QueryString', Query => $Query, Format => $Format, RowsPerPage => $Rows, OrderBy => $OrderBy, Order => $Order, ); <%ARGS> $SavedSearchId => 'new' $SavedChartSearchId => 'new' $Query => '' $Format => '' $Rows => '50' $OrderBy => 'id' $Order => 'ASC' @actions => () rt-4.2.12/share/html/Search/Elements/000755 000765 000024 00000000000 12555754775 017732 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Search/index.html000644 000765 000024 00000004214 12555754775 020154 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Searches') &> <& /Elements/Tabs &> <& /Elements/ListMenu, menu => Menu()->child('search'), show_children => 1 &> rt-4.2.12/share/html/Search/Results.html000644 000765 000024 00000020271 12555754775 020507 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title, Refresh => $refresh, LinkRel => \%link_rel &> <& /Elements/Tabs &> % my $DisplayFormat; % $m->callback( ARGSRef => \%ARGS, Format => \$Format, DisplayFormat => \$DisplayFormat, CallbackName => 'BeforeResults' ); % unless ($ok) { % $msg =~ s{ at .*? line .*}{}s; <&| /Widgets/TitleBox, title => loc("Error"), class => "error-titlebox" &> <&|/l_unsafe, "".$m->interp->apply_escapes($msg, "h")."" &>There was an error parsing your search query: [_1]. Your RT admin can find more information in the error logs. % } else { <& /Elements/CollectionList, Query => $Query, TotalFound => $ticketcount, AllowSorting => 1, OrderBy => $OrderBy, Order => $Order, Rows => $Rows, Page => $Page, Format => $Format, DisplayFormat => $DisplayFormat, # in case we set it in callbacks Class => 'RT::Tickets', BaseURL => $BaseURL, SavedSearchId => $ARGS{'SavedSearchId'}, SavedChartSearchId => $ARGS{'SavedChartSearchId'}, PassArguments => [qw(Query Format Rows Page Order OrderBy SavedSearchId SavedChartSearchId)], &> % } % $m->callback( ARGSRef => \%ARGS, CallbackName => 'AfterResults' ); % my %hiddens = (Query => $Query, Format => $Format, Rows => $Rows, OrderBy => $OrderBy, Order => $Order, HideResults => $HideResults, Page => $Page, SavedChartSearchId => $SavedChartSearchId );
    % foreach my $key (keys(%hiddens)) { % } <& /Elements/Refresh, Name => 'TicketsRefreshInterval', Default => $session{'tickets_refresh_interval'}||RT->Config->Get('SearchResultsRefreshInterval', $session{'CurrentUser'}) &>
    <%INIT> $m->callback( ARGSRef => \%ARGS, CallbackName => 'Initial' ); # Read from user preferences my $prefs = $session{'CurrentUser'}->UserObj->Preferences("SearchDisplay") || {}; # These variables are what define a search_hash; this is also # where we give sane defaults. $Format ||= $prefs->{'Format'} || RT->Config->Get('DefaultSearchResultFormat'); $Order ||= $prefs->{'Order'} || RT->Config->Get('DefaultSearchResultOrder'); $OrderBy ||= $prefs->{'OrderBy'} || RT->Config->Get('DefaultSearchResultOrderBy'); # Some forms pass in "RowsPerPage" rather than "Rows" # We call it RowsPerPage everywhere else. if ( !defined($Rows) ) { if (defined $ARGS{'RowsPerPage'} ) { $Rows = $ARGS{'RowsPerPage'}; } elsif ( defined $prefs->{'RowsPerPage'} ) { $Rows = $prefs->{'RowsPerPage'}; } else { $Rows = 50; } } $Page = 1 unless $Page && $Page > 0; $session{'i'}++; $session{'tickets'} = RT::Tickets->new($session{'CurrentUser'}) ; my ($ok, $msg) = $Query ? $session{'tickets'}->FromSQL($Query) : (1, "Vacuously OK"); # Provide an empty search if parsing failed $session{'tickets'}->FromSQL("id < 0") unless ($ok); if ($OrderBy =~ /\|/) { # Multiple Sorts my @OrderBy = split /\|/,$OrderBy; my @Order = split /\|/,$Order; $session{'tickets'}->OrderByCols( map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } } ( 0 .. $#OrderBy ) );; } else { $session{'tickets'}->OrderBy(FIELD => $OrderBy, ORDER => $Order); } $session{'tickets'}->RowsPerPage( $Rows ) if $Rows; $session{'tickets'}->GotoPage( $Page - 1 ); $session{'CurrentSearchHash'} = { Format => $Format, Query => $Query, Page => $Page, Order => $Order, OrderBy => $OrderBy, RowsPerPage => $Rows }; my ($title, $ticketcount) = (loc("Find tickets"), 0); if ( $session{'tickets'}->Query()) { $ticketcount = $session{tickets}->CountAll(); $title = loc('Found [quant,_1,ticket,tickets]', $ticketcount); } my $QueryString = "?".$m->comp('/Elements/QueryString', Query => $Query, Format => $Format, Rows => $Rows, OrderBy => $OrderBy, Order => $Order, Page => $Page); my $ShortQueryString = "?".$m->comp('/Elements/QueryString', Query => $Query); if ($ARGS{'TicketsRefreshInterval'}) { $session{'tickets_refresh_interval'} = $ARGS{'TicketsRefreshInterval'}; } my $refresh = $session{'tickets_refresh_interval'} || RT->Config->Get('SearchResultsRefreshInterval', $session{'CurrentUser'} ); # Check $m->request_args, not $DECODED_ARGS, to avoid creating a new CSRF token on each refresh if (RT->Config->Get('RestrictReferrer') and $refresh and not $m->request_args->{CSRF_Token}) { my $token = RT::Interface::Web::StoreRequestToken( $session{'CurrentSearchHash'} ); $m->notes->{RefreshURL} = RT->Config->Get('WebURL') . "Search/Results.html?CSRF_Token=" . $token; } my %link_rel; my $genpage = sub { return $m->comp( '/Elements/QueryString', Query => $Query, Format => $Format, Rows => $Rows, OrderBy => $OrderBy, Order => $Order, Page => shift(@_), ); }; if ( RT->Config->Get('SearchResultsAutoRedirect') && $ticketcount == 1 && $session{tickets}->First ) { # $ticketcount is not always precise unless $UseSQLForACLChecks is set to true, # check $session{tickets}->First here is to make sure the ticket is there. RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."Ticket/Display.html?id=". $session{tickets}->First->id ); } my $BaseURL = RT->Config->Get('WebPath')."/Search/Results.html?"; $link_rel{first} = $BaseURL . $genpage->(1) if $Page > 1; $link_rel{prev} = $BaseURL . $genpage->($Page - 1) if $Page > 1; $link_rel{next} = $BaseURL . $genpage->($Page + 1) if ($Page * $Rows) < $ticketcount; $link_rel{last} = $BaseURL . $genpage->(POSIX::ceil($ticketcount/$Rows)) if $Rows and ($Page * $Rows) < $ticketcount; <%CLEANUP> $session{'tickets'}->PrepForSerialization(); <%ARGS> $Query => undef $Format => undef $HideResults => 0 $Rows => undef $Page => 1 $OrderBy => undef $Order => undef $SavedSearchId => undef $SavedChartSearchId => undef rt-4.2.12/share/html/Search/Results.rdf000644 000765 000024 00000004037 12555754775 020320 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Search/Elements/ResultsRSSView, %ARGS &> rt-4.2.12/share/html/Search/Results.tsv000644 000765 000024 00000005171 12555754775 020361 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Format => undef $Query => '' $OrderBy => 'id' $Order => 'ASC' $PreserveNewLines => 0 <%INIT> my $Tickets = RT::Tickets->new( $session{'CurrentUser'} ); $Tickets->FromSQL( $Query ); if ( $OrderBy =~ /\|/ ) { # Multiple Sorts my @OrderBy = split /\|/, $OrderBy; my @Order = split /\|/, $Order; $Tickets->OrderByCols( map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } } ( 0 .. $#OrderBy ) ); } else { $Tickets->OrderBy( FIELD => $OrderBy, ORDER => $Order ); } $m->comp( "/Elements/TSVExport", Collection => $Tickets, Format => $Format, PreserveNewLines => $PreserveNewLines ); rt-4.2.12/share/html/Search/Simple.html000644 000765 000024 00000012237 12555754775 020302 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> % $m->callback( %ARGS, CallbackName => 'PreForm' );
    % my @strong = qw( );

    <&|/l_unsafe, @strong &>Search for tickets by entering [_1]id[_2] numbers, subject words [_1]"in quotes"[_2], [_1]queues[_2] by name, Owners by [_1]username[_2], Requestors by [_1]email address[_2], and ticket [_1]statuses[_2]. Searching for [_1]@domainname.com[_2] will return tickets with requestors from that domain.

    <&|/l&>Any word not recognized by RT is searched for in ticket subjects.

    % my $config = RT->Config->Get('FullTextSearch') || {}; % my $fulltext_keyword = 'fulltext:'; % if ( $config->{'Enable'} ) { % if ( $config->{'Indexed'} ) {

    <&|/l, $fulltext_keyword &>You can search for any word in full ticket history by typing [_1]word.

    % } else {

    <&|/l, $fulltext_keyword &>Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history by typing [_1]word.

    % } % }

    <&|/l_unsafe, map { "$_" } qw(initial active inactive any) &>Entering [_1], [_2], [_3], or [_4] limits results to tickets with one of the respective types of statuses. Any individual status name limits results to just the statuses named. % if (RT->Config->Get('OnlySearchActiveTicketsInSimpleSearch', $session{'CurrentUser'})) { % my $status_str = join ', ', map { loc($_) } RT::Queue->ActiveStatusArray; <&|/l, $status_str &>Unless you specify a specific status, only tickets with active statuses ([_1]) are searched. % }

    <&|/l_unsafe, map { "$_" } 'queue:"Example Queue"', 'owner:email@example.com' &>Start the search term with the name of a supported field followed by a colon, as in [_1] and [_2], to explicitly specify the search type.

    <&|/l_unsafe, 'cf.Name:value' &>CFs may be searched using a similar syntax as above with [_1].

    % my $link_start = ''; % my $link_end = '';

    <&|/l_unsafe, $link_start, $link_end &>For the full power of RT's searches, please visit the [_1]search builder interface[_2].

    % $m->callback( %ARGS, CallbackName => 'PostForm' );
    <%INIT> my $title = loc("Search for tickets"); use RT::Search::Simple; if ($q) { my $tickets = RT::Tickets->new( $session{'CurrentUser'} ); $m->callback( %ARGS, query => \$q, CallbackName => 'ModifyQuery' ); if ($q =~ /^#?(\d+)$/) { RT::Interface::Web::Redirect(RT->Config->Get('WebURL')."Ticket/Display.html?id=".$1); } my %args = ( Argument => $q, TicketsObj => $tickets, ); $m->callback( %ARGS, CallbackName => 'SearchArgs', args => \%args); my $search = RT::Search::Simple->new(%args); $m->comp( "Results.html", Query => $search->QueryToSQL() ); $m->comp( "/Elements/Footer" ); $m->abort(); } <%ARGS> $q => undef rt-4.2.12/share/html/Search/Elements/Article000644 000765 000024 00000005071 12555754775 021243 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/CollectionList, %ARGS, Collection => $articles, Class => 'RT::Articles', Format => q{ '__id__/TITLE:#', '__Name__/TITLE:Name', '__ClassName__', '__CreatedRelative__', '__LastUpdatedRelative__', '__Summary__', '__Topics__', } &> <%INIT> my $QueryString = "?".$m->comp('/Elements/QueryString', %{$ARGS{args}}); my $articles = RT::Articles->new( $session{CurrentUser} ); $articles->Search( %{$ARGS{args}} ); rt-4.2.12/share/html/Search/Elements/BuildFormatString000644 000765 000024 00000017605 12555754775 023265 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Format => RT->Config->Get('DefaultSearchResultFormat') %queues => () $Face => undef $Size => undef $Link => undef $Title => undef $AddCol => undef $RemoveCol => undef $ColUp => undef $ColDown => undef $SelectDisplayColumns => undef $CurrentDisplayColumns => undef <%init> # This can't be in a block, because otherwise we return the # same \@fields every request, and keep tacking more CustomFields onto # it -- and it grows per request. # All the things we can display in the format string by default my @fields = qw( id QueueName Subject Status ExtendedStatus UpdateStatus Type OwnerName Requestors Cc AdminCc CreatedBy LastUpdatedBy Priority InitialPriority FinalPriority TimeWorked TimeLeft TimeEstimated Starts StartsRelative Started StartedRelative Created CreatedRelative LastUpdated LastUpdatedRelative Told ToldRelative Due DueRelative Resolved ResolvedRelative RefersTo ReferredToBy DependsOn DependedOnBy MemberOf Members Parents Children Bookmark NEWLINE NBSP ); # loc_qw # This callback will only run once and will be removed in 4.4 # If you want to add a new item to @fields, use the Default callback below. $m->callback( CallbackOnce => 1, CallbackName => 'SetFieldsOnce', Fields => \@fields ); my $CustomFields = RT::CustomFields->new( $session{'CurrentUser'}); foreach my $id (keys %queues) { # Gotta load up the $queue object, since queues get stored by name now. my $queue = RT::Queue->new($session{'CurrentUser'}); $queue->Load($id); next unless $queue->Id; $CustomFields->LimitToQueue($queue->Id); $CustomFields->SetContextObject( $queue ) if keys %queues == 1; } $CustomFields->LimitToGlobal; while ( my $CustomField = $CustomFields->Next ) { push @fields, "CustomField.{" . $CustomField->Name . "}"; } $m->callback( Fields => \@fields, ARGSRef => \%ARGS ); my ( @seen); $Format ||= RT->Config->Get('DefaultSearchResultFormat'); my @format = $m->comp('/Elements/CollectionAsTable/ParseFormat', Format => $Format); foreach my $field (@format) { # "title" is for columns like NEWLINE, which doesn't have "attribute" $field->{Column} = $field->{attribute} || $field->{title} || ''; push @seen, $field; } if ( $RemoveCol ) { # we do this regex match to avoid a non-numeric warning my ($index) = ($CurrentDisplayColumns // '') =~ /^(\d+)/; if ( defined($index) ) { delete $seen[$index]; my @temp = @seen; @seen = (); foreach my $element (@temp) { next unless $element; push @seen, $element; } } } elsif ( $AddCol ) { if ( defined $SelectDisplayColumns ) { my $selected = $SelectDisplayColumns; my @columns; if (ref($selected) eq 'ARRAY') { @columns = @$selected; } else { push @columns, $selected; } foreach my $col (@columns) { my %column = (); $column{Column} = $col; if ( $Face eq "Bold" ) { $column{Prefix} .= ""; $column{Suffix} .= ""; } if ( $Face eq "Italic" ) { $column{Prefix} .= ""; $column{Suffix} .= ""; } if ($Size) { $column{Prefix} .= "<" . $m->interp->apply_escapes( $Size, 'h' ) . ">"; $column{Suffix} .= "interp->apply_escapes( $Size, 'h' ) . ">"; } if ( $Link eq "Display" ) { $column{Prefix} .= q{}; $column{Suffix} .= ""; } elsif ( $Link eq "Take" ) { $column{Prefix} .= q{}; $column{Suffix} .= ""; } elsif ( $Link eq "Respond" ) { $column{Prefix} .= q{}; $column{Suffix} .= ""; } elsif ( $Link eq "Comment" ) { $column{Prefix} .= q{}; $column{Suffix} .= ""; } elsif ( $Link eq "Resolve" ) { $column{Prefix} .= q{}; $column{Suffix} .= ""; } if ($Title) { $column{Suffix} .= "/TITLE:" . $m->interp->apply_escapes( $Title, 'h' ); } push @seen, \%column; } } } elsif ( $ColUp ) { my ($index) = ($CurrentDisplayColumns // '') =~ /^(\d+)/; if ( defined $index && ( $index - 1 ) >= 0 ) { my $column = $seen[$index]; $seen[$index] = $seen[ $index - 1 ]; $seen[ $index - 1 ] = $column; $CurrentDisplayColumns = $index - 1; } } elsif ( $ColDown ) { my ($index) = ($CurrentDisplayColumns // '') =~ /^(\d+)/; if ( defined $index && ( $index + 1 ) < scalar @seen ) { my $column = $seen[$index]; $seen[$index] = $seen[ $index + 1 ]; $seen[ $index + 1 ] = $column; $CurrentDisplayColumns = $index + 1; } } my @format_string; foreach my $field (@seen) { next unless $field; my $row = ""; if ( $field->{'original_string'} ) { $row = $field->{'original_string'}; } else { $row .= $field->{'Prefix'} if defined $field->{'Prefix'}; $row .= "__$field->{'Column'}__" unless ( $field->{'Column'} eq "" ); $row .= $field->{'Suffix'} if defined $field->{'Suffix'}; $row =~ s!([\\'])!\\$1!g; $row = "'$row'"; } push( @format_string, $row ); } $Format = join(",\n", @format_string); return($Format, \@fields, \@seen); rt-4.2.12/share/html/Search/Elements/Chart000644 000765 000024 00000006303 12555754775 020720 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Query => "id > 0" @GroupBy => () $ChartStyle => 'bar+table+sql' @ChartFunction => 'COUNT' <%init> use RT::Report::Tickets; my $report = RT::Report::Tickets->new( $session{'CurrentUser'} ); my %columns = $report->SetupGroupings( Query => $Query, GroupBy => \@GroupBy, Function => \@ChartFunction, ); $report->SortEntries; my $query_string = $m->comp('/Elements/QueryString', %ARGS, GroupBy => \@GroupBy );
    % if ( ($ChartStyle || '') =~ /\b(pie|bar)\b/ ) { % if (RT->Config->Get('DisableGD')) { <% loc('Graphical charts are not available.') %>
    % } else { % my $key = Digest::MD5::md5_hex( rand(1024) ); % $session{'charts_cache'}{$key} = { columns => \%columns, report => $report->Serialize }; % $session{'i'}++; % }
    % } % if ( ($ChartStyle || '') =~ /\btable\b/ ) { <& ChartTable, %ARGS, Table => { $report->FormatTable( %columns ) } &> % } % if ( ($ChartStyle || '') =~ /\bsql\b/ ) {
    <% loc('Query') %>:<% $Query %>
    % }
    rt-4.2.12/share/html/Search/Elements/ChartTable000644 000765 000024 00000010552 12555754775 021671 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> %Table => () $Query => undef <%INIT> my $base_query = $m->comp('/Elements/QueryString', Format => $ARGS{Format}, Rows => $ARGS{Rows}, OrderBy => $ARGS{OrderBy}, Order => $ARGS{Order}, ); my $interp = $m->interp; my $eh = sub { $interp->apply_escapes( @_, 'h' ) }; my $eu = sub { $interp->apply_escapes( @_, 'u' ) }; $m->out(''. "\n"); foreach my $section (qw(thead tbody tfoot)) { next unless $Table{ $section } && @{ $Table{ $section } }; $m->out("<$section>\n"); foreach my $row ( @{ $Table{ $section } } ) { $m->out(' out(' class="'. ($row->{'even'}? 'evenline' : 'oddline') .'"') if defined $row->{'even'}; $m->out(">"); foreach my $cell ( @{ $row->{'cells'} } ) { my $tag = $cell->{'type'} eq 'value'? 'td' : 'th'; $m->out("<$tag"); my @class = ('collection-as-table'); push @class, ($cell->{'type'}) unless $cell->{'type'} eq 'head'; push @class, $cell->{'even'} ? 'evenline' : 'oddline' if defined $cell->{'even'}; $m->out(' class="'. $eh->( join ' ', @class ) .'"'); foreach my $dir ( grep $cell->{$_}, qw(rowspan colspan) ) { my $value = int $cell->{ $dir }; $m->out(qq{ $dir="$value"}); } $m->out(' style="background-color: #'. $m->interp->apply_escapes($cell->{color}) .'"') if $cell->{color}; $m->out('>'); if ( defined $cell->{'value'} ) { if ( my $q = $cell->{'query'} ) { $m->out( '('&') . $base_query . '">' ); $m->out( $eh->( $cell->{'value'} ) ); $m->out(''); } else { $m->out( $eh->( $cell->{'value'} ) ); } } else { $m->out(' '); } $m->out(""); } $m->out("\n"); } $m->out("\n\n"); } $m->out("
    "); rt-4.2.12/share/html/Search/Elements/ConditionRow000644 000765 000024 00000007265 12555754775 022305 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <% $handle_block->( $Condition->{'Field'}, $Condition->{'Name'} .'Field' ) |n %> <% $handle_block->( $Condition->{'Op'}, $Condition->{'Name'} .'Op') |n %> <% $handle_block->( $Condition->{'Value'}, 'ValueOf'. $Condition->{'Name'} ) |n %> <%INIT> return unless $Condition && $Condition->{'Name'}; $m->callback( Condition => \$Condition ); return unless $Condition; my $handle_block; $handle_block = sub { my $box = shift; return $box unless ref $box; my $name = shift; if ( UNIVERSAL::isa($box, 'ARRAY') ) { my $res = ''; $res .= $handle_block->( $_, $name ) foreach @$box; return $res; } return undef unless UNIVERSAL::isa($box, 'HASH'); if ( $box->{'Type'} eq 'component' ) { $box->{'Arguments'} ||= {}, return $m->scomp( $box->{'Path'}, %{ $box->{'Arguments'} }, Name => $name ); } if ( $box->{'Type'} eq 'text' ) { $box->{id} ||= $box->{name} ||= $name; $box->{value} ||= delete($box->{Default}) || ''; return "interp->apply_escapes(lc($_),'h') .q{="}.$m->interp->apply_escapes($box->{$_},'h').q{"}} sort keys %$box)." />"; } if ( $box->{'Type'} eq 'select' ) { my $res = ''; $res .= qq{}; return $res; } }; <%ARGS> $Condition => {} rt-4.2.12/share/html/Search/Elements/DisplayOptions000644 000765 000024 00000004270 12555754775 022641 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| /Widgets/TitleBox, title => loc("Sorting"), id => 'sorting' &> <& EditSort, %ARGS &> <&| /Widgets/TitleBox, title => loc("Display Columns"), id => 'columns' &> <& EditFormat, %ARGS &> rt-4.2.12/share/html/Search/Elements/EditFormat000644 000765 000024 00000011001 12555754775 021704 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <&|/l&>Add Columns: <&|/l&>Format: <&|/l&>Show Columns:
    <&|/l&>Link:
    <&|/l&>Title:
    <&|/l&>Size:
    <&|/l&>Style:

    <%init> my $selected = $ARGS{SelectDisplayColumns}; $selected = [ $selected ] unless ref $selected; my %selected; $selected{$_}++ for grep {defined} @{ $selected }; <%ARGS> $CurrentFormat => undef $AvailableColumns => undef rt-4.2.12/share/html/Search/Elements/EditQuery000644 000765 000024 00000017162 12555754775 021577 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& NewListActions, actions => $actions &> <&|/Widgets/TitleBox, title => join(': ', grep defined, loc("Current search"), $Description) &>

    %#

    <%ARGS> $Description => undef $optionlist => '' $actions => [] <%METHOD Process> <%ARGS> $Tree $Selected @New => () <%INIT> my @NewSelection = (); my @results; if ( $ARGS{'Up'} || $ARGS{'Down'} ) { if (@$Selected) { foreach my $value (@$Selected) { my $parent = $value->getParent; my $index = $value->getIndex; my $newindex = $index; $newindex++ if $ARGS{'Down'}; $newindex-- if $ARGS{'Up'}; if ( $newindex < 0 || $newindex >= $parent->getChildCount ) { push( @results, [ loc("error: can't move up"), -1 ] ) if $ARGS{'Up'}; push( @results, [ loc("error: can't move down"), -1 ] ) if $ARGS{'Down'}; next; } $parent->removeChild( $index ); $parent->insertChild( $newindex, $value ); } } else { push( @results, [ loc("error: nothing to move"), -1 ] ); } } elsif ( $ARGS{"Left"} ) { if (@$Selected) { foreach my $value (@$Selected) { my $parent = $value->getParent; if( $value->isRoot || $parent->isRoot ) { push( @results, [ loc("error: can't move left"), -1 ] ); next; } my $grandparent = $parent->getParent; if( $grandparent->isRoot ) { push( @results, [ loc("error: can't move left"), -1 ] ); next; } my $index = $parent->getIndex; $parent->removeChild($value); $grandparent->insertChild( $index, $value ); if ( $parent->isLeaf ) { $grandparent->removeChild($parent); } } } else { push( @results, [ loc("error: nothing to move"), -1 ] ); } } elsif ( $ARGS{"Right"} ) { if (@$Selected) { foreach my $value (@$Selected) { my $parent = $value->getParent; my $index = $value->getIndex; my $newparent; if ( $index > 0 ) { my $sibling = $parent->getChild( $index - 1 ); $newparent = $sibling unless $sibling->isLeaf; } $newparent ||= RT::Interface::Web::QueryBuilder::Tree->new( $ARGS{'AndOr'} || 'AND', $parent ); $parent->removeChild($value); $newparent->addChild($value); } } else { push( @results, [ loc("error: nothing to move"), -1 ] ); } } elsif ( $ARGS{"DeleteClause"} ) { if (@$Selected) { my (@top); my %Selected = map { $_ => 1 } @$Selected; foreach my $node ( @$Selected ) { my $tmp = $node->getParent; while ( !$Selected{ $tmp } && !$tmp->isRoot ) { $tmp = $tmp->getParent; } next if $Selected{ $tmp }; push @top, $node; } my %seen; my @non_siblings_top = grep !$seen{ $_->getParent }++, @top; foreach ( @New ) { my $add = $_->clone; foreach my $selected( @non_siblings_top ) { my $newindex = $selected->getIndex + 1; $selected->insertSibling( $newindex, $add ); } $add->getParent->setNodeValue( $ARGS{'AndOr'} ); push @NewSelection, $add; } @New = (); while( my $node = shift @top ) { my $parent = $node->getParent; $parent->removeChild($node); $node->DESTROY; } @$Selected = (); } else { push( @results, [ loc("error: nothing to delete"), -1 ] ); } } elsif ( $ARGS{"Toggle"} ) { if (@$Selected) { my %seen; my @unique_nodes = grep !$seen{ $_ + 0 }++, map ref $_->getNodeValue? $_->getParent: $_, @$Selected; foreach my $node ( @unique_nodes ) { if ( $node->getNodeValue eq 'AND' ) { $node->setNodeValue('OR'); } else { $node->setNodeValue('AND'); } } } else { push( @results, [ loc("error: nothing to toggle"), -1 ] ); } } if ( @New && @$Selected ) { my %seen; my @non_siblings_selected = grep !$seen{ $_->getParent }++, @$Selected; foreach ( @New ) { my $add = $_->clone; foreach my $selected( @non_siblings_selected ) { my $newindex = $selected->getIndex + 1; $selected->insertSibling( $newindex, $add ); } $add->getParent->setNodeValue( $ARGS{'AndOr'} ); push @NewSelection, $add; } @$Selected = (); } elsif ( @New ) { foreach ( @New ) { my $add = $_->clone; $Tree->addChild( $add ); push @NewSelection, $add; } $Tree->setNodeValue( $ARGS{'AndOr'} ); } $_->DESTROY foreach @New; push @$Selected, @NewSelection; $Tree->PruneChildlessAggregators; return @results; rt-4.2.12/share/html/Search/Elements/EditSearches000644 000765 000024 00000026507 12555754775 022232 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <&| /Widgets/TitleBox, title => loc($Title)&> %# Hide all the save functionality if the user shouldn't see it. % if ( $can_modify ) { <&|/l&>Privacy: <& SelectSearchObject, Name => 'SavedSearchOwner', Objects => \@Objects, Object => ( $Object && $Object->id ) ? $Object->Object : '' &>
    <&|/l&>Description: % if ($Id ne 'new') { % if ( $Dirty ) { % } % if ( $AllowCopy ) { % } % } % if ( $Object && $Object->Id ) { % } else { %} % }

    <&|/l&>Load saved search: <& SelectSearchesForObjects, Name => 'SavedSearchLoad', Objects => \@Objects, SearchType => $Type &>
    <%INIT> return unless $session{'CurrentUser'}->HasRight( Right => 'LoadSavedSearch', Object => $RT::System, ); my $can_modify = $session{'CurrentUser'}->HasRight( Right => 'CreateSavedSearch', Object => $RT::System, ); use RT::SavedSearch; my @Objects = RT::SavedSearch->new($session{CurrentUser})->_PrivacyObjects; push @Objects, RT::System->new( $session{'CurrentUser'} ) if $session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser' ); my $is_dirty = sub { my %arg = ( Query => {}, SavedSearch => {}, SearchFields => [qw(Query Format OrderBy Order RowsPerPage)], @_ ); my $obj = $arg{'SavedSearch'}->{'Object'}; return 0 unless $obj && $obj->id; foreach( @{ $arg{'SearchFields'} } ) { return 1 if $obj->SubValue( $_ ) ne $arg{'Query'}->{$_}; } return 0; }; # If we're modifying an old query, check if it's been changed my $Dirty = $is_dirty->( Query => $CurrentSearch, SavedSearch => { Id => $Id, Object => $Object, Description => $Description }, SearchFields => \@SearchFields, ); <%ARGS> $Id => 'new' $Object => undef $Type => 'Ticket' $Description => '' $CurrentSearch => {} @SearchFields => () $AllowCopy => 1 $Title => loc('Saved searches') <%METHOD Init> <%ARGS> $Query => {} $SavedSearch => {} @SearchFields => qw(Query Format OrderBy Order RowsPerPage) <%INIT> $SavedSearch->{'Id'} = ( $ARGS{Type} && $ARGS{Type} eq 'Chart' ? $ARGS{'SavedChartSearchId'} : $ARGS{'SavedSearchId'} ) || 'new'; $SavedSearch->{'Description'} = $ARGS{'SavedSearchDescription'} || ''; $SavedSearch->{'Privacy'} = $ARGS{'SavedSearchOwner'} || undef; my @results; if ( $ARGS{'SavedSearchRevert'} ) { $ARGS{'SavedSearchLoad'} = $SavedSearch->{'Id'}; } if ( $ARGS{'SavedSearchLoad'} ) { my ($container, $id ) = _parse_saved_search ($ARGS{'SavedSearchLoad'}); if ( $container ) { my $search = RT::Attribute->new( $session{'CurrentUser'} ); $search->Load( $id ); $SavedSearch->{'Id'} = $ARGS{'SavedSearchLoad'}; $SavedSearch->{'Object'} = $search; $SavedSearch->{'Description'} = $search->Description; $Query->{$_} = $search->SubValue($_) foreach @SearchFields; if ( $ARGS{'SavedSearchRevert'} ) { push @results, loc('Loaded original "[_1]" saved search', $SavedSearch->{'Description'} ); } else { push @results, loc('Loaded saved search "[_1]"', $SavedSearch->{'Description'} ); } } else { push @results, loc( 'Can not load saved search "[_1]"', $ARGS{'SavedSearchLoad'} ); return @results; } } elsif ( $ARGS{'SavedSearchDelete'} ) { # We set $SearchId to 'new' above already, so peek into the %ARGS my ($container, $id) = _parse_saved_search( $SavedSearch->{'Id'} ); if ( $container && $container->id ) { # We have the object the entry is an attribute on; delete the entry... my ($val, $msg) = $container->Attributes->DeleteEntry( Name => 'SavedSearch', id => $id ); unless ( $val ) { push @results, $msg; return @results; } } $SavedSearch->{'Id'} = 'new'; $SavedSearch->{'Object'} = undef; $SavedSearch->{'Description'} = undef; push @results, loc("Deleted saved search"); } elsif ( $ARGS{'SavedSearchCopy'} ) { my ($container, $id ) = _parse_saved_search( $ARGS{'SavedSearchId'} ); $SavedSearch->{'Object'} = RT::Attribute->new( $session{'CurrentUser'} ); $SavedSearch->{'Object'}->Load( $id ); if ( $ARGS{'SavedSearchDescription'} && $ARGS{'SavedSearchDescription'} ne $SavedSearch->{'Object'}->Description ) { $SavedSearch->{'Description'} = $ARGS{'SavedSearchDescription'}; } else { $SavedSearch->{'Description'} = loc( "[_1] copy", $SavedSearch->{'Object'}->Description ); } $SavedSearch->{'Id'} = 'new'; $SavedSearch->{'Object'} = undef; } if ( $SavedSearch->{'Id'} && $SavedSearch->{'Id'} ne 'new' && !$SavedSearch->{'Object'} ) { my ($container, $id ) = _parse_saved_search( $ARGS{'SavedSearchId'} ); $SavedSearch->{'Object'} = RT::Attribute->new( $session{'CurrentUser'} ); $SavedSearch->{'Object'}->Load( $id ); $SavedSearch->{'Description'} ||= $SavedSearch->{'Object'}->Description; } return @results; <%METHOD Save> <%ARGS> $Query => {} $SavedSearch => {} @SearchFields => qw(Query Format OrderBy Order RowsPerPage) <%INIT> return unless $ARGS{'SavedSearchSave'} || $ARGS{'SavedSearchCopy'}; my @results; my $obj = $SavedSearch->{'Object'}; my $id = $SavedSearch->{'Id'}; my $desc = $SavedSearch->{'Description'}; my $privacy = $SavedSearch->{'Privacy'}; my %params = map { $_ => $Query->{$_} } @SearchFields; my ($new_obj_type, $new_obj_id) = split(/\-/, ($privacy || '')); if ( $obj && $obj->id ) { # permission check if ($obj->Object->isa('RT::System')) { unless ($session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser')) { push @results, loc("No permission to save system-wide searches"); return @results; } } $obj->SetSubValues( %params ); $obj->SetDescription( $desc ); my $obj_type = ref($obj->Object); # We need to get current obj_id now, because when we change obj_type to # RT::System, $obj->Object->Id returns 1, not the old one :( my $obj_id = $obj->Object->Id; if ( $new_obj_type && $new_obj_id ) { my ($val, $msg); # we need to check right before we change any of ObjectType and ObjectId, # or it will fail the 2nd change if we use SetObjectType and # SetObjectId sequentially if ( $obj->CurrentUserHasRight('update') ) { if ( $new_obj_type ne $obj_type ) { ( $val, $msg ) = $obj->__Set( Field => 'ObjectType', Value => $new_obj_type, ); push @results, loc( 'Unable to set privacy object: [_1]', $msg ) unless ($val); } if ( $new_obj_id != $obj_id ) { ( $val, $msg ) = $obj->__Set( Field => 'ObjectId', Value => $new_obj_id, ); push @results, loc( 'Unable to set privacy id: [_1]', $msg ) unless ($val); } } else { # two loc are just for convenience so we don't need to # write an extra i18n translation item push @results, loc( 'Unable to set privacy object or id: [_1]', loc('Permission Denied') ) } } else { push @results, loc('Unable to determine object type or id'); } push @results, loc('Updated saved search "[_1]"', $desc); } elsif ( $id eq 'new' and defined $desc and length $desc ) { my $saved_search = RT::SavedSearch->new( $session{'CurrentUser'} ); my ($status, $msg) = $saved_search->Save( Privacy => $privacy, Name => $desc, Type => $SavedSearch->{'Type'}, SearchParams => \%params, ); if ( $status ) { $SavedSearch->{'Object'} = RT::Attribute->new( $session{'CurrentUser'} ); $SavedSearch->{'Object'}->Load( $saved_search->Id ); # Build new SearchId $SavedSearch->{'Id'} = ref( $session{'CurrentUser'}->UserObj ) . '-' . $session{'CurrentUser'}->UserObj->Id . '-SavedSearch-' . $SavedSearch->{'Object'}->Id; } else { push @results, loc("Can't find a saved search to work with").': '.loc($msg); } } elsif ( $id eq 'new' ) { push @results, loc("Can't save a search without a Description"); } else { push @results, loc("Can't save this search"); } return @results; rt-4.2.12/share/html/Search/Elements/EditSort000644 000765 000024 00000010025 12555754775 021410 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % for my $o (0..3) { % $Order[$o] ||= ''; $OrderBy[$o] ||= ''; % }
    % if ($o == 0) { <&|/l&>Order by: % }
    <&|/l&>Rows per page: <& /Elements/SelectResultsPerPage, Name => "RowsPerPage", Default => $RowsPerPage &>
    <%INIT> my $tickets = RT::Tickets->new($session{'CurrentUser'}); my %FieldDescriptions = %{$tickets->FIELDS}; my %fields; for my $field (keys %FieldDescriptions) { next if $field eq 'EffectiveId'; next unless $FieldDescriptions{$field}->[0] =~ /^(?:ENUM|INT|DATE|STRING|ID)$/; $fields{$field} = $field; } $fields{'Owner'} = 'Owner'; $fields{ $_ . '.EmailAddress' } = $_ . '.EmailAddress' for qw(Requestor Cc AdminCc); # Add all available CustomFields to the list of sortable columns. my @cfs = grep /^CustomField/, @{$ARGS{AvailableColumns}}; $fields{$_} = $_ for @cfs; # Add PAW sort $fields{'Custom.Ownership'} = 'Custom.Ownership'; $m->callback(CallbackName => 'MassageSortFields', Fields => \%fields ); my @Order = split /\|/, $Order; my @OrderBy = split /\|/, $OrderBy; if ($Order =~ /\|/) { @Order = split /\|/, $Order; } else { @Order = ( $Order ); } <%ARGS> $Order => '' $OrderBy => '' $RowsPerPage => undef $Format => undef $GroupBy => 'id' rt-4.2.12/share/html/Search/Elements/Graph000644 000765 000024 00000004100 12555754775 020711 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> return $m->comp('/Ticket/Graphs/Elements/ShowGraph', %ARGS); rt-4.2.12/share/html/Search/Elements/NewListActions000644 000765 000024 00000004521 12555754775 022565 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%loc('Results')%>
    % foreach my $action (@actions) { % my @item = @$action; % if ($item[1] < 0) { % }  <%$item[0]%>
    % if ($item[1] < 0) {
    % } % }
    <%init> @actions = map ref $_? $_: [$_, 0], grep defined && length, @actions; return unless @actions; <%ARGS> @actions => undef rt-4.2.12/share/html/Search/Elements/PickBasics000644 000765 000024 00000015642 12555754775 021700 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % foreach( @lines ) { <& ConditionRow, Condition => $_ &> % } <%INIT> my @lines = ( { Name => 'id', Field => loc('id'), Op => { Type => 'component', Path => '/Elements/SelectEqualityOperator', }, Value => { Type => 'text', Size => 5 } }, { Name => 'Attachment', Field => { Type => 'component', Path => '/Elements/SelectAttachmentField', }, Op => { Type => 'component', Path => '/Elements/SelectBoolean', Arguments => { True => loc("matches"), False => loc("doesn't match"), TrueVal => 'LIKE', FalseVal => 'NOT LIKE', }, }, Value => { Type => 'text', Size => 20 }, }, { Name => 'Queue', Field => loc('Queue'), Op => { Type => 'component', Path => '/Elements/SelectBoolean', Arguments => { TrueVal=> '=', FalseVal => '!=' }, }, Value => { Type => 'component', Path => '/Elements/SelectQueue', Arguments => { NamedValues => 1, }, }, }, { Name => 'Status', Field => loc('Status'), Op => { Type => 'component', Path => '/Elements/SelectBoolean', Arguments => { TrueVal=> '=', FalseVal => '!=' }, }, Value => { Type => 'component', Path => '/Ticket/Elements/SelectStatus', Arguments => { SkipDeleted => 1, Queues => \%queues }, }, }, { Name => 'Actor', Field => { Type => 'select', Options => [ Owner => loc('Owner'), Creator => loc('Creator'), LastUpdatedBy => loc('Last updated by'), UpdatedBy => loc('Updated by'), ], }, Op => { Type => 'component', Path => '/Elements/SelectBoolean', Arguments => { TrueVal=> '=', FalseVal => '!=' }, }, Value => { Type => 'component', Path => '/Elements/SelectOwner', Arguments => { ValueAttribute => 'Name', Queues => \%queues }, }, }, { Name => 'Watcher', Field => { Type => 'component', Path => 'SelectPersonType', Arguments => { Default => 'Requestor' }, }, Op => { Type => 'component', Path => '/Elements/SelectMatch', }, Value => { Type => 'text', Size => 20 } }, { Name => 'WatcherGroup', Field => { Type => 'component', Path => 'SelectPersonType', Arguments => { Default => 'Owner', Suffix => 'Group' }, }, Op => { Type => 'select', Options => [ '=' => loc('is') ], }, Value => { Type => 'text', Size => 20, "data-autocomplete" => "Groups" } }, { Name => 'Date', Field => { Type => 'component', Path => '/Elements/SelectDateType', }, Op => { Type => 'component', Path => '/Elements/SelectDateRelation', }, Value => { Type => 'component', Path => '/Elements/SelectDate', Arguments => { ShowTime => 0, Default => '' }, }, }, { Name => 'Time', Field => { Type => 'select', Options => [ TimeWorked => loc('Time Worked'), TimeEstimated => loc('Time Estimated'), TimeLeft => loc('Time Left'), ], }, Op => { Type => 'component', Path => '/Elements/SelectEqualityOperator', }, Value => [ { Type => 'text', Size => 5 }, { Type => 'component', Path => '/Elements/SelectTimeUnits', }, ], }, { Name => 'Priority', Field => { Type => 'select', Options => [ Priority => loc('Priority'), InitialPriority => loc('Initial Priority'), FinalPriority => loc('Final Priority'), ], }, Op => { Type => 'component', Path => '/Elements/SelectEqualityOperator', }, Value => { Type => 'component', Path => '/Elements/SelectPriority', }, }, { Name => 'Links', Field => { Type => 'component', Path => 'SelectLinks' }, Op => { Type => 'component', Path => '/Elements/SelectBoolean', Arguments => { TrueVal=> '=', FalseVal => '!=' }, }, Value => { Type => 'text', Size => 5 } }, ); $m->callback( Conditions => \@lines ); <%ARGS> %queues => () rt-4.2.12/share/html/Search/Elements/PickCFs000644 000765 000024 00000006665 12555754775 021154 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % foreach( @lines ) { <& ConditionRow, Condition => $_ &> % } <%INIT> $m->callback( CallbackName => 'MassageCustomFields', CustomFields => $CustomFields, ); my @lines; while ( my $CustomField = $CustomFields->Next ) { my %line; $line{'Name'} = "$TicketSQLField.{" . $CustomField->Name . "}"; $line{'Field'} = $CustomField->Name; # Op if ($CustomField->Type =~ /^Date(Time)?$/ ) { $line{'Op'} = { Type => 'component', Path => '/Elements/SelectDateRelation', Arguments => {}, }; } elsif ($CustomField->Type =~ /^IPAddress(Range)?$/ ) { $line{'Op'} = { Type => 'component', Path => '/Elements/SelectIPRelation', Arguments => {}, }; } else { $line{'Op'} = { Type => 'component', Path => '/Elements/SelectCustomFieldOperator', Arguments => { True => loc("is"), False => loc("isn't"), TrueVal=> '=', FalseVal => '!=', }, }; } # Value $line{'Value'} = { Type => 'component', Path => '/Elements/SelectCustomFieldValue', Arguments => { CustomField => $CustomField }, }; push @lines, \%line; } $m->callback( Conditions => \@lines, Queues => \%queues ); <%ARGS> %queues => () $CustomFields $TicketSQLField => 'CF' rt-4.2.12/share/html/Search/Elements/PickCriteria000644 000765 000024 00000005251 12555754775 022231 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| /Widgets/TitleBox, title => loc('Add Criteria')&> % $m->callback( %ARGS, CallbackName => "BeforeBasics" ); <& PickBasics, queues => \%queues &> <& PickTicketCFs, queues => \%queues &> <& PickObjectCFs, Class => 'Transaction', queues => \%queues &> <& PickObjectCFs, Class => 'Queue', queues => \%queues &> % $m->callback( %ARGS, CallbackName => "AfterCFs" );

    <&|/l&>Aggregator <& SelectAndOr, Name => "AndOr" &>
    <%ARGS> $addquery => 0 $query => undef %queues => () rt-4.2.12/share/html/Search/Elements/PickObjectCFs000644 000765 000024 00000005437 12555754775 022277 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Class %queues => () <%init> my $CustomFields = RT::CustomFields->new( $session{'CurrentUser'} ); $CustomFields->ApplySortOrder; $CustomFields->LimitToLookupType( "RT::$Class"->CustomFieldLookupType ); $CustomFields->LimitToObjectId(0); foreach my $name (keys %queues) { my $queue = RT::Queue->new($session{'CurrentUser'}); $queue->Load($name); next unless $queue->Id; $CustomFields->LimitToObjectId($queue->Id); $CustomFields->SetContextObject( $queue ) if keys %queues == 1; } my $has_cf = $CustomFields->First ? 1 : 0; $CustomFields->GotoFirstItem; % if ($has_cf) {
    <% loc("[_1] CFs", loc($Class)) %> % } <& PickCFs, %ARGS, TicketSQLField => "${Class}CF", CustomFields => $CustomFields &> rt-4.2.12/share/html/Search/Elements/PickTicketCFs000644 000765 000024 00000005126 12555754775 022307 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> %queues => () <%init> my $CustomFields = RT::CustomFields->new( $session{'CurrentUser'}); foreach my $id (keys %queues) { # Gotta load up the $queue object, since queues get stored by name now. my $queue = RT::Queue->new($session{'CurrentUser'}); $queue->Load($id); next unless $queue->Id; $CustomFields->LimitToQueue($queue->Id); $CustomFields->SetContextObject( $queue ) if keys %queues == 1; } $CustomFields->LimitToGlobal; $CustomFields->OrderBy( FIELD => 'Name', ORDER => 'ASC' ); <& PickCFs, %ARGS, TicketSQLField => 'CF', CustomFields => $CustomFields &> rt-4.2.12/share/html/Search/Elements/ResultsRSSView000644 000765 000024 00000007741 12555754775 022552 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $Tickets = RT::Tickets->new($session{'CurrentUser'}); $Tickets->FromSQL($ARGS{'Query'}); if ($OrderBy =~ /\|/) { # Multiple Sorts my @OrderBy = split /\|/,$OrderBy; my @Order = split /\|/,$Order; $Tickets->OrderByCols( map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } } ( 0 .. $#OrderBy ) );; } else { $Tickets->OrderBy(FIELD => $OrderBy, ORDER => $Order); } $r->content_type('application/rss+xml; charset=utf-8'); use XML::RSS; my $rss = XML::RSS->new(version => '1.0'); my $url; if ( RT->Config->Get('CanonicalizeURLsInFeeds') ) { $url = RT->Config->Get('WebURL'); } else { $url = RT::Interface::Web::GetWebURLFromRequest(); } my $base_date = RT::Date->new( RT->SystemUser ); $base_date->SetToNow; $base_date->SetToMidnight; $rss->channel( title => RT->Config->Get('rtname').": Search " . $ARGS{'Query'}, link => $url, description => "", dc => { }, generator => "RT v" . $RT::VERSION, syn => { updatePeriod => "hourly", updateFrequency => "1", updateBase => $base_date->W3CDTF, }, ); while ( my $Ticket = $Tickets->Next()) { my $creator_str = $Ticket->CreatorObj->Format; $creator_str =~ s/[\r\n]//g; # Get the plain-text content; it is interpreted as HTML by RSS # readers, so it must be escaped (and is escaped _again_ when # inserted into the XML). my $content = $Ticket->Transactions->First->Content; $content = $m->interp->apply_escapes( $content, 'h'); $rss->add_item( title => $Ticket->Subject || loc('No Subject'), link => $url . "Ticket/Display.html?id=".$Ticket->id, description => $content, dc => { creator => $creator_str, date => $Ticket->CreatedObj->W3CDTF, }, guid => $Ticket->Queue . '_' . $Ticket->id, ); } $m->out($rss->as_string); $m->abort(); <%ARGS> $OrderBy => 'Created' $Order => 'ASC' rt-4.2.12/share/html/Search/Elements/SearchesForObject000644 000765 000024 00000004740 12555754775 023215 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Object => undef <%init> # Returns an array of search objects associated on $Object, # in the form of [Description, LocalizedDescription, searchObj] my @result; while (my $search = $Object->Attributes->Next) { my $desc; if ($search->Name eq 'SavedSearch') { push @result, [$search->Description, $search->Description, $search]; } elsif ($search->Name =~ m/^Search - (.*)/) { push @result, [$1, loc($1), $search]; } } return @result; rt-4.2.12/share/html/Search/Elements/SearchPrivacy000644 000765 000024 00000004511 12555754775 022421 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Object => undef <%init> my $label; if (ref($Object) eq 'RT::User') { $label = $Object->id == $session{'CurrentUser'}->Id ? loc("My saved searches") : loc("[_1]'s saved searches", $Object->Format); } else { $label = loc("[_1]'s saved searches", $Object->Name); } <% $label %>\ rt-4.2.12/share/html/Search/Elements/SelectAndOr000644 000765 000024 00000004346 12555754775 022027 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => "Operator" rt-4.2.12/share/html/Search/Elements/SelectChartFunction000644 000765 000024 00000005533 12555754775 023572 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => 'ChartFunction' $Default => 'COUNT' $ShowEmpty => 0 <%INIT> my @functions = RT::Report::Tickets->Statistics; $Default = '' unless defined $Default; rt-4.2.12/share/html/Search/Elements/SelectChartType000644 000765 000024 00000004464 12555754775 022730 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Name => 'ChartType' $Default => 'bar' rt-4.2.12/share/html/Search/Elements/SelectGroup000644 000765 000024 00000004762 12555754775 022122 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $groups = RT::Groups->new($session{'CurrentUser'}); $groups->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => $Domain, CASESENSITIVE => 0); <%ARGS> $AllowNull => 1 $Default=> '' $Name => 'Group' $Domain => 'UserDefined'; rt-4.2.12/share/html/Search/Elements/SelectGroupBy000644 000765 000024 00000005603 12555754775 022410 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Name => 'GroupBy' $Default => 'Status' $Query => '' $ShowEmpty => 0 <%init> use RT::Report::Tickets; my $report = RT::Report::Tickets->new( $session{'CurrentUser'} ); my @options = $report->Groupings( Query => $Query ); rt-4.2.12/share/html/Search/Elements/SelectLinks000644 000765 000024 00000004727 12555754775 022107 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => 'LinksField' <%INIT> my @fields = ( [ HasMember => loc("Child") ], [ MemberOf => loc("Parent") ], [ DependsOn => loc("Depends on") ], [ DependedOnBy => loc("Depended on by") ], [ RefersTo => loc("Refers to") ], [ ReferredToBy => loc("Referred to by") ], [ LinkedTo => loc("Links to") ], ); rt-4.2.12/share/html/Search/Elements/SelectPersonType000644 000765 000024 00000005665 12555754775 023141 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my @types; if ($Scope =~ /queue/) { @types = qw(Cc AdminCc); } elsif ($Suffix eq 'Group') { @types = qw(Owner Requestor Cc AdminCc Watcher); } else { @types = qw(Requestor Cc AdminCc Watcher Owner QueueCc QueueAdminCc QueueWatcher); } my @subtypes = @{ $RT::Tickets::SEARCHABLE_SUBFIELDS{'User'} }; <%ARGS> $AllowNull => 1 $Suffix => '' $Default=>undef $Scope => 'ticket' $Name => 'WatcherType' rt-4.2.12/share/html/Search/Elements/SelectSearchesForObjects000644 000765 000024 00000005242 12555754775 024536 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> @Objects => undef $Name => undef $SearchType => 'Ticket', rt-4.2.12/share/html/Search/Elements/SelectSearchObject000644 000765 000024 00000004722 12555754775 023356 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> @Objects => undef $Name => undef $Object => undef <%init> my $default_privacy = ''; if ( $Object && $Object->Id ) { $default_privacy = ref($Object).'-'.$Object->Id; } rt-4.2.12/share/html/REST/1.0/000755 000765 000024 00000000000 12555754775 016024 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/REST/1.0/autohandler000644 000765 000024 00000004236 12555754775 020262 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/autohandler %# <%INIT> use RT::Interface::REST; $r->content_type('text/plain; charset=utf-8'); $m->error_format('text'); $m->call_next(); $m->abort(); rt-4.2.12/share/html/REST/1.0/dhandler000644 000765 000024 00000025010 12555754775 017526 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/dhandler %# <%ARGS> @id => () $fields => undef $format => undef $content => undef <%INIT> use RT::Interface::REST; my $output = ""; my $status = "200 Ok"; my $object = $m->dhandler_arg; my $name = qr{[\w.-]+}; my $list = '(?:(?:\d+-)?\d+,)*(?:\d+-)?\d+'; my $label = '[^,\\/]+'; my $field = RT::Interface::REST->field_spec; my $labels = "(?:$label,)*$label"; # We must handle requests such as the following: # # 1. http://.../REST/1.0/show (with a list of object specifications). # 2. http://.../REST/1.0/edit (with a self-contained list of forms). # 3. http://.../REST/1.0/ticket/show (implicit type specification). # http://.../REST/1.0/ticket/edit # 4. http://.../REST/1.0/ticket/nn (all possibly with a single form). # http://.../REST/1.0/ticket/nn/history # http://.../REST/1.0/ticket/nn/comment # http://.../REST/1.0/ticket/nn/attachment/1 # # Objects are specified by their type, and either a unique numeric ID, # or a unique name (e.g. ticket/1, queue/foo). Multiple objects of the # same type may be specified by a comma-separated list of identifiers # (e.g., user/ams,rai or ticket/1-3,5-7). # # Ultimately, we want a list of object specifications to operate upon. # The URLs in (4) provide enough information to identify an object. We # will assemble submitted information into that format in other cases. # my (@objects, $forms); my $utype; if ($object eq 'show' || # $REST/show (($utype) = ($object =~ m{^($name)/show$}))) # $REST/ticket/show { # We'll convert type/range specifications ("ticket/1-3,7-9/history") # into a list of singular object specifications ("ticket/1/history"). # If the URL specifies a type, we'll accept only that one. foreach my $id (@id) { $id =~ s|^(?:$utype/)?|$utype/| if $utype; if (my ($type, $oids, $extra) = ($id =~ m#^($name)/($list|$labels)(?:(/.*))?$#o)) { $extra ||= ''; my ($attr, $args) = $extra =~ m{^(?:/($name)(?:/(.*))?)?$}o; my $tids; if ($attr and $attr eq 'history' and $args) { ($tids) = $args =~ m#id/(\d.*)#o; } # expand transaction and attachment range specifications # (if applicable) foreach my $oid (expand_list($oids)) { if ($tids) { push(@objects, "$type/$oid/$attr/id/$_") for expand_list($tids); } else { push(@objects, "$type/$oid$extra"); } } } else { $status = "400 Bad Request"; $output = "Invalid object ID specified: '$id'"; goto OUTPUT; } } } elsif ($object eq 'edit' || # $REST/edit (($utype) = ($object =~ m{^($name)/edit$}))) # $REST/ticket/edit { # We'll make sure each of the submitted forms is syntactically valid # and sufficiently identifies an object to operate upon, then add to # the object list as above. my @output; $forms = form_parse($content); foreach my $form (@$forms) { my ($c, $o, $k, $e) = @$form; if ($e) { push @output, [ "# Syntax error.", $o, $k, $e ]; } else { my ($type, $id); # Look for matching types in the ID, form, and URL. $type = $utype || $k->{id}; $type =~ s|^([^/]+)/\d+$|$1| if !$utype; $type =~ s|^(?:$utype)?|$utype/| if $utype; $type =~ s|/$|| if $type; if (exists $k->{id}) { $id = $k->{id}; $id =~ s|^(?:$type/)?|$type/| if $type; if ($id =~ m#^$name/(?:$label|\d+)(?:/.*)?#o) { push @objects, $id; } else { push @output, [ "# Invalid object ID: '$id'", $o, $k, $e ]; } } else { push @output, [ "# No object ID specified.", $o, $k, $e ]; } } } # If we saw any errors at this stage, we won't process any part of # the submitted data. if (@output) { unshift @output, [ "# Please resubmit with errors corrected." ]; $status = "409 Syntax Error"; $output = form_compose(\@output); goto OUTPUT; } } else { # We'll assume that this is in the correct format already. Otherwise # it will be caught by the loop below. push @objects, $object; if ($content) { $forms = form_parse($content); if (@$forms > 1) { $status = "400 Bad Request"; $output = "You may submit only one form to this object."; goto OUTPUT; } my ($c, $o, $k, $e) = @{ $forms->[0] }; if ($e) { $status = "409 Syntax Error"; $output = form_compose([ ["# Syntax error.", $o, $k, $e] ]); goto OUTPUT; } } } # Make sure we have something to do. unless (@objects) { $status = "400 Bad Request"; $output = "No objects specified."; goto OUTPUT; } # Parse and validate any field specifications. my (%fields, @fields); if ($fields) { unless ($fields =~ /^(?:$field,)*$field$/) { $status = "400 Bad Request"; $output = "Invalid field specification: $fields"; goto OUTPUT; } @fields = map lc, split /\s*,\s*/, $fields; @fields{@fields} = (); unless (exists $fields{id}) { unshift @fields, "id"; $fields{id} = (); } # canonicalize cf-foo to cf.{foo} for my $field (@fields) { if ($field =~ /^(c(?:ustom)?f(?:ield)?)-(.+)/) { $fields{"cf.{$2}"} = delete $fields{"$1-$2"}; # overwrite the element in @fields $field = "cf.{$2}"; } } } my (@comments, @output); foreach $object (@objects) { my ($handler, $type, $id, $attr, $args); my ($c, $o, $k, $e) = ("", ["id"], {id => $object}, 0); my $i = 0; if ($object =~ m{^($name)/(\d+|$label)(?:/($name)(?:/(.*))?)?$}o || $object =~ m{^($name)/(new)$}o) { ($type, $id, $attr, $args) = ($1, $2, ($3 || 'default'), $4); $handler = "Forms/$type/$attr"; unless ($m->comp_exists($handler)) { $args = defined $args ? "$attr/$args" : $attr; $handler = "Forms/$type/default"; unless ($m->comp_exists($handler)) { $i = 2; $c = "# Unknown object type: $type"; } } elsif ($id ne 'new' && $id !~ /^\d+$/) { my $ns = "Forms/$type/ns"; # Can we resolve named objects? unless ($m->comp_exists($ns)) { $i = 3; $c = "# Objects of type $type must be specified by numeric id."; } else { my ($n, $s) = $m->comp("Forms/$type/ns", id => $id); if ($n <= 0) { $i = 4; $c = "# $s"; } else { $i = 0; $id = $n; } } } else { $i = 0; } } else { $i = 1; $c = "# Invalid object specification: '$object'"; } if ($i != 0) { if ($content) { (undef, $o, $k, $e) = @{ shift @$forms }; } push @output, [ $c, $o, $k ]; next; } unless ($content) { my $d = $m->comp($handler, id => $id, args => $args, format => $format, fields => \%fields); my ($c, $o, $k, $e) = @$d; if (!$e && @$o && keys %fields) { my %lk = map { lc $_ => $_ } keys %$k; @$o = map { $lk{$_} } @fields; foreach my $key (keys %$k) { delete $k->{$key} unless exists $fields{lc $key}; } } push(@output, [ $c, $o, $k ]) if ($c || @$o || keys %$k); } else { my ($c, $o, $k, $e) = @{ shift @$forms }; my $d = $m->comp($handler, id => $id, args => $args, format => $format, changes => $k); ($c, $o, $k, $e) = @$d; # We won't pass $e through to compose, trusting instead that the # handler added suitable comments for the user. if ($e) { if (@$o) { $status = "409 Syntax Error"; } else { $status = "400 Bad Request"; } push @output, [ $c, $o, $k ]; } else { push @comments, $c; } } } unshift(@output, [ join "\n", @comments ]) if @comments; $output = form_compose(\@output); OUTPUT: $m->out("RT/".$RT::VERSION ." ".$status ."\n\n$output\n") if ($output || $status !~ /^200/); return; rt-4.2.12/share/html/REST/1.0/Forms/000755 000765 000024 00000000000 12555754775 017112 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/REST/1.0/logout000644 000765 000024 00000004234 12555754775 017263 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%PERL> if (keys %session) { RT::Interface::Web::InstantiateNewSession(); $session{CurrentUser} = RT::CurrentUser->new(); } RT/<% $RT::VERSION %> 200 Ok rt-4.2.12/share/html/REST/1.0/NoAuth/000755 000765 000024 00000000000 12555754775 017222 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/REST/1.0/search/000755 000765 000024 00000000000 12555754775 017271 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/REST/1.0/ticket/000755 000765 000024 00000000000 12555754775 017307 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/REST/1.0/ticket/comment000644 000765 000024 00000011401 12555754775 020671 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/ticket/comment %# <%ARGS> $content <%INIT> use MIME::Entity; use RT::Interface::REST; my $ticket = RT::Ticket->new($session{CurrentUser}); my $object = $r->path_info; my $status = "200 Ok"; my $output; my $action; # http://.../REST/1.0/ticket/1/comment my ($c, $o, $k, $e) = @{ form_parse($content)->[0] }; if ($e || !$o) { if (!$o) { $output = "Empty form submitted.\n"; } else { $c = "# Syntax error."; $output = form_compose([[$c, $o, $k, $e]]); } $status = "400 Bad Request"; goto OUTPUT; } $object =~ s#^/##; $object ||= $k->{Ticket}; unless ($object =~ /^\d+/) { $output = "Invalid ticket id: `$object'.\n"; $status = "400 Bad Request"; goto OUTPUT; } if ($k->{Ticket} && $object ne $k->{Ticket}) { $output = "The submitted form and URL specify different tickets.\n"; $status = "400 Bad Request"; goto OUTPUT; } ($action = $k->{Action}) =~ s/^(.)(.*)$/\U$1\L$2\E/; unless ($action =~ /^(?:Comment|Correspond)$/) { $output = "Invalid action: `$action'.\n"; $status = "400 Bad Request"; goto OUTPUT; } my $text = $k->{Text}; my @atts = @{ vsplit($k->{Attachment}) }; if (!$k->{Text} && @atts == 0) { $status = "400 Bad Request"; $output = "Empty comment with no attachments submitted.\n"; goto OUTPUT; } my $cgi = $m->cgi_object; my $ent = MIME::Entity->build( Type => "multipart/mixed", 'X-RT-Interface' => 'REST', ); $ent->attach( Type => "text/plain", Charset => "UTF-8", Data => Encode::encode( "UTF-8", $k->{Text} ), ) if $k->{Text}; { my ($res, $msg) = process_attachments($ent, @atts); unless ( $res ) { $status = "400 Bad Request"; $output = "$msg\n"; goto OUTPUT; } } $ticket->Load($object); unless ($ticket->Id) { $output = "Couldn't load ticket id: `$object'.\n"; $status = "404 Ticket not found"; goto OUTPUT; } unless ($ticket->CurrentUserHasRight('ModifyTicket') || ($action eq "Comment" && $ticket->CurrentUserHasRight("CommentOnTicket")) || ($action eq "Correspond" && $ticket->CurrentUserHasRight("ReplyToTicket"))) { $output = "You are not allowed to $action on ticket $object.\n"; $status = "403 Permission denied"; goto OUTPUT; } my $cc = join ", ", @{ vsplit($k->{Cc}) }; my $bcc = join ", ", @{ vsplit($k->{Bcc}) }; my ($n, $s) = $ticket->$action(MIMEObj => $ent, CcMessageTo => $cc, BccMessageTo => $bcc, TimeTaken => $k->{TimeWorked} || 0); $output = $s; if ($k->{Status}) { my ($status_n, $status_s) = $ticket->SetStatus($k->{'Status'} ); $output .= "\n".$status_s; } OUTPUT: RT/<% $RT::VERSION %> <% $status %> <% $output |n %> rt-4.2.12/share/html/REST/1.0/ticket/link000644 000765 000024 00000007532 12555754775 020176 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/ticket/link %# <%ARGS> $id => undef $del => 0 $rel $to <%INIT> use RT::Interface::REST; my $output; my $status = "200 Ok"; my $ticket = RT::Ticket->new($session{CurrentUser}); my $object = $r->path_info; my @fields = qw(DependsOn DependedOnBy RefersTo ReferredToBy HasMember MemberOf); my %fields = map { lc $_ => $_ } @fields; my %lfields = ( HasMember => { Type => 'MemberOf', Mode => 'Base' }, ReferredToBy => { Type => 'RefersTo', Mode => 'Base' }, DependedOnBy => { Type => 'DependsOn', Mode => 'Base' }, MemberOf => { Type => 'MemberOf', Mode => 'Target' }, RefersTo => { Type => 'RefersTo', Mode => 'Target' }, DependsOn => { Type => 'DependsOn', Mode => 'Target' }, ); # http://.../REST/1.0/ticket/link/1 $object =~ s#^/REST/1.0/ticket/link##; if ($id && $object && $id != $object) { $output = "Different ids in URL (`$object') and submitted form (`$id').\n"; $status = "400 Bad Request"; goto OUTPUT; } $id ||= $object; unless ($id =~ /^\d+$/) { $output = $r->path_info. "\n"; $output .= "Invalid ticket id: '$id'.\n"; $status = "400 Bad Request"; goto OUTPUT; } unless (exists $fields{lc $rel}) { $output = "Invalid link: '$rel'.\n"; $status = "400 Bad Request"; goto OUTPUT; } $rel = $fields{lc $rel}; $ticket->Load($id); unless ($ticket->Id) { $output = "Couldn't load ticket id: '$id'.\n"; $status = "404 Ticket not found"; goto OUTPUT; } my $type = $lfields{$rel}->{Type}; my $mode = $lfields{$rel}->{Mode}; my $n = 1; my $op = $del ? "DeleteLink" : "AddLink"; ($n, $output) = $ticket->$op(Type => $type, $mode => $to); if ($n == 0) { $status = "500 Error"; } else { my $action = $del ? "Deleted" : "Created"; $output .= " $action link " . $ticket->Id . " $rel $to"; } OUTPUT: RT/<% $RT::VERSION %> <% $status %> <% $output |n %> rt-4.2.12/share/html/REST/1.0/ticket/merge000644 000765 000024 00000006225 12555754775 020336 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/ticket/merge %# <%ARGS> $id => undef $into <%INIT> use RT::Interface::REST; my $output; my $status = "200 Ok"; my $ticket = RT::Ticket->new($session{CurrentUser}); my $object = $r->path_info; # http://.../REST/1.0/ticket/merge/1 $object =~ s#^/##; if ($id && $object && $id != $object) { $output = "Different ids in URL (`$object') and submitted form (`$id').\n"; $status = "400 Bad Request"; goto OUTPUT; } $id ||= $object; unless ($id =~ /^\d+$/ && $into =~ /^\d+$/) { my $bad = ($id !~ /^\d+$/) ? $id : $into; $output = $r->path_info. "\n"; $output .= "Invalid ticket id: `$bad'.\n"; $status = "400 Bad Request"; goto OUTPUT; } $ticket->Load($id); unless ($ticket->Id) { $output = "Couldn't load ticket id: `$id'.\n"; $status = "404 Ticket not found"; goto OUTPUT; } unless ($ticket->CurrentUserHasRight('ModifyTicket')) { $output = "You are not allowed to modify ticket $id.\n"; $status = "403 Permission denied"; goto OUTPUT; } my ($n, $s) = $ticket->MergeInto($into); if ($n == 0) { $status = "500 Error"; } $output = $s; OUTPUT: RT/<% $RT::VERSION %> <% $status %> <% $output |n %> rt-4.2.12/share/html/REST/1.0/search/dhandler000644 000765 000024 00000021745 12555754775 021006 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/search/dhandler %# <%ARGS> $query $format => undef $orderby => undef $fields => undef <%INIT> my $type = $m->dhandler_arg; my ( $status, $output ); if ( $type =~ /^(ticket|queue|user|group)$/i ) { $status = "200 Ok"; $output = ''; my $type = lc $1; if ( $type eq 'user' && !$session{CurrentUser}->HasRight( Object => $RT::System, Right => 'AdminUsers', ) ) { $status = "403 Forbidden"; $output = "Permission denied"; goto OUTPUT; } my $class = 'RT::' . ucfirst $type . 's'; my $objects = $class->new( $session{CurrentUser} ); # Parse and validate any field specifications. require RT::Interface::REST; my $field = RT::Interface::REST->field_spec; my ( %fields, @fields ); if ($fields) { $format ||= "l"; unless ( $fields =~ /^(?:$field,)*$field$/ ) { $status = "400 Bad Request"; $output = "Invalid field specification: $fields"; goto OUTPUT; } @fields = map lc, split /\s*,\s*/, $fields; @fields{@fields} = (); unless ( exists $fields{id} ) { unshift @fields, "id"; $fields{id} = (); } } $format ||= "s"; if ( $format !~ /^[isl]$/ ) { $status = "400 Bad request"; $output = "Unknown listing format: $format. (Use i, s, or l.)\n"; goto OUTPUT; } my ( $n, $s ); $n = 0; my @output; if ( $type eq 'group' ) { $objects->LimitToUserDefinedGroups; } if ( defined $query && length $query ) { if ( $type eq 'ticket' ) { my ( $n, $s ); eval { ( $n, $s ) = $objects->FromSQL($query); }; if ( $@ || $n == 0 ) { $s ||= $@; $status = "400 Bad request"; $output = "Invalid query: '$s'.\n"; goto OUTPUT; } } else { require Text::ParseWords; my ( $field, $op, $value ) = Text::ParseWords::shellwords($query); if ( $op !~ /^(?:[!<>]?=|[<>]|(NOT )?LIKE|STARTSWITH|ENDSWITH|MATCHES)$/i ) { $status = "400 Bad Request"; $output = "Invalid operator specification: $op"; goto OUTPUT; } if ( ! $search_whitelist{$type}{lc $field} ) { $status = "400 Bad Request"; $output = "Invalid field specification: $field"; goto OUTPUT; } if ( $field && $op && defined $value ) { if ( $field eq 'Disabled' ) { if ($value) { if ( $type eq 'queue' ) { $objects->FindAllRows; $objects->Limit( FIELD => $field, OPERATOR => uc $op, VALUE => $value ); } else { $objects->LimitToDeleted; } } else { if ( $type eq 'queue' ) { $objects->UnLimit; } else { $objects->LimitToEnabled; } } } else { $objects->Limit( FIELD => $field, OPERATOR => uc $op, VALUE => $value, CASESENSITIVE => 0, ); } } else { $output = "Invalid query specification: $query"; goto OUTPUT; } } } else { if ( $type eq 'queue' ) { $objects->UnLimit; } elsif ( $type eq 'user' ) { $objects->LimitToPrivileged; } } if ($orderby) { my ( $order, $field ) = $orderby =~ /^([\+\-])?(.+)/; $order = $order && $order eq '-' ? 'DESC' : 'ASC'; $objects->OrderBy( FIELD => $field, ORDER => $order ); } while ( my $object = $objects->Next ) { next if $type eq 'user' && ( $object->id == RT->SystemUser->id || $object->id == RT->Nobody->id ); $n++; my $id = $object->Id; if ( $format eq "i" ) { $output .= "$type/" . $id . "\n"; } elsif ( $format eq "s" ) { if ($fields) { my $result = $m->comp( "/REST/1.0/Forms/$type/default", id => $id, format => $format, fields => \%fields ); my ( $notes, $order, $key_values, $errors ) = @$result; # If it's the first time through, add our header if ( $n == 1 ) { $output .= join( "\t", @$order ) . "\n"; } # Cut off the annoying $type/ before the id; $key_values->{'id'} = $id; $output .= join( "\t", map { ref $key_values->{$_} eq 'ARRAY' ? join( ', ', @{ $key_values->{$_} } ) : $key_values->{$_} } @$order ) . "\n"; } else { if ( $type eq 'ticket' ) { $output .= $object->Id . ": " . $object->Subject . "\n"; } else { $output .= $object->Id . ": " . $object->Name . "\n"; } } } else { my $d = $m->comp( "/REST/1.0/Forms/$type/default", id => $id, format => $format, fields => \%fields ); my ( $c, $o, $k, $e ) = @$d; push @output, [ $c, $o, $k ]; } } if ( $n == 0 && $format ne "i" ) { $output = "No matching results.\n"; } $output = form_compose( \@output ) if @output; } else { $status = "500 Server Error"; $output = "Unsupported object type."; goto OUTPUT; } OUTPUT: $m->out("RT/". $RT::VERSION . " " . $status ."\n\n"); $m->out($output ); <%ONCE> my %search_whitelist = ( queue => { map { lc $_ => 1 } grep { $RT::Record::_TABLE_ATTR->{'RT::Queue'}{$_}{read} } keys %{ $RT::Record::_TABLE_ATTR->{'RT::Queue'} } }, user => { disabled => 1, map { lc $_ => 1 } grep { $RT::Record::_TABLE_ATTR->{'RT::User'}{$_}{read} } keys %{ $RT::Record::_TABLE_ATTR->{'RT::User'} } }, group => { disabled => 1, map { lc $_ => 1 } grep { $RT::Record::_TABLE_ATTR->{'RT::Group'}{$_}{read} } keys %{ $RT::Record::_TABLE_ATTR->{'RT::Group'} } } ); rt-4.2.12/share/html/REST/1.0/NoAuth/mail-gateway000644 000765 000024 00000006206 12555754775 021532 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%flags> inherit => undef # inhibit UTF8 conversion done in /autohandler <%ARGS> $queue => 1 $action => "correspond" $ticket => undef <%init> $m->callback( %ARGS, CallbackName => 'Pre' ); use RT::Interface::Email (); # It's an exporter, but we don't care $r->content_type('text/plain; charset=utf-8'); $m->error_format('text'); my ( $status, $error, $Ticket ) = RT::Interface::Email::Gateway( \%ARGS ); if ( $status == 1 ) { $m->out("ok\n"); if ( $Ticket && $Ticket->Id ) { $m->out( 'Ticket: ' . ($Ticket->Id || '') . "\n" ); $m->out( 'Queue: ' . ($Ticket->QueueObj->Name || '') . "\n" ); $m->out( 'Owner: ' . ($Ticket->OwnerObj->Name || '') . "\n" ); $m->out( 'Status: ' . ($Ticket->Status || '') . "\n" ); $m->out( 'Subject: ' . ($Ticket->Subject || '') . "\n" ); $m->out( 'Requestor: ' . ($Ticket->Requestors->MemberEmailAddressesAsString || '') . "\n" ); } } else { $RT::Logger->error( "Could not record email: " . $error ); if ( $status == -75 ) { $m->out( "temporary failure - $error\n" ); } else { $m->out( "not ok - $error\n" ); } } $m->abort(); rt-4.2.12/share/html/REST/1.0/Forms/attachment/000755 000765 000024 00000000000 12555754775 021242 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/REST/1.0/Forms/group/000755 000765 000024 00000000000 12555754775 020246 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/REST/1.0/Forms/queue/000755 000765 000024 00000000000 12555754775 020236 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/REST/1.0/Forms/ticket/000755 000765 000024 00000000000 12555754775 020375 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/REST/1.0/Forms/transaction/000755 000765 000024 00000000000 12555754775 021437 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/REST/1.0/Forms/user/000755 000765 000024 00000000000 12555754775 020070 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/REST/1.0/Forms/user/default000644 000765 000024 00000015143 12555754775 021443 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/user/default %# <%ARGS> $id $format => 's' $changes => {} $fields => undef <%perl> my @comments; my ($c, $o, $k, $e) = ("", [], {}, 0); my %data = %$changes; my $user = RT::User->new($session{CurrentUser}); my @fields = qw(Name EmailAddress RealName NickName Gecos Organization Address1 Address2 City State Zip Country HomePhone WorkPhone MobilePhone PagerPhone FreeformContactInfo Comments Signature Lang EmailEncoding WebEncoding ExternalContactInfoId ContactInfoSystem ExternalAuthId AuthSystem Privileged Disabled); if ( $fields && %$fields ) { @fields = grep { exists $fields->{ lc $_ } } @fields; } my %fields = map { lc $_ => $_ } @fields; if ($id ne 'new') { $user->Load($id); if (!$user->Id) { return [ "# User $id does not exist.", [], {}, 1 ]; } } else { if (keys %data == 0) { return [ "# Required: Name, EmailAddress", [ qw(id Name EmailAddress Organization Password Comments) ], { id => "user/new", Name => "", EmailAddress => "", Organization => "", Password => "", Comments => "" }, 0 ]; } else { my %v; my %create = %fields; $create{name} = "Name"; $create{password} = "Password"; $create{emailaddress} = "EmailAddress"; $create{contactinfo} = "FreeformContactInfo"; # Do any fields need to be excluded here? foreach my $k (keys %data) { if (exists $create{lc $k}) { $v{$create{lc $k}} = delete $data{$k}; } } $user->Create(%v); unless ($user->Id) { return [ "# Could not create user.", [], {}, 1 ]; } $id = $user->Id; delete $data{id}; push(@comments, "# User $id created."); goto DONE if keys %data == 0; } } if (keys %data == 0) { my @data; push @data, [ id => "user/".$user->Id ]; unless ( $fields && %$fields && !exists $fields->{'password'} ) { push @data, [ Password => '********' ]; } for my $key (@fields) { my $val = $user->$key; if ( ( $fields && exists $fields->{ lc $key } ) || ( defined $format && $format eq 'l' ) || ( defined $val && $val ne '' ) ) { $key = "ContactInfo" if $key eq 'FreeformContactInfo'; push @data, [ $key => $val ]; } } # Custom fields my $CustomFields = $user->CustomFields; while ( my $CustomField = $CustomFields->Next() ) { # show cf unless there are specified fields that don't include it next unless ( !%$fields || exists $fields->{ lc "CF-" . $CustomField->Name } ); next unless $CustomField->CurrentUserHasRight('SeeCustomField'); my $CFvalues = $user->CustomFieldValues( $CustomField->Id ); my @CFvalues; while ( my $CFvalue = $CFvalues->Next() ) { push @CFvalues, $CFvalue->Content; } push @data, [ "CF-" . $CustomField->Name => \@CFvalues ]; } my %k = map {@$_} @data; $o = [ map {$_->[0]} @data ]; $k = \%k; } else { my ($get, $set, $key, $val, $n, $s); my $updated; foreach $key (keys %data) { $val = $data{$key}; $key = lc $key; $n = 1; if ($key eq 'name' || $key eq 'emailaddress' || $key eq 'contactinfo' || exists $fields{$key}) { if (exists $fields{$key}) { $key = $fields{$key}; } else { $key = "FreeformContactInfo" if $key eq 'contactinfo'; $key = "EmailAddress" if $key eq 'emailaddress'; $key = "Name" if $key eq 'name'; } $set = "Set$key"; next if $val eq $user->$key; ($n, $s) = $user->$set($val); } elsif ($key eq 'password') { ($n, $s) = $user->SetPassword($val) unless $val =~ /^\**$/; } elsif ($key ne 'id') { $n = 0; $s = "Unknown field."; } SET: if ($n == 0) { $e = 1; push @comments, "# $key: $s"; unless (@$o) { my %o = keys %$changes; delete @o{"id", @fields}; @$o = ("id", @fields, keys %o); $k = $changes; } } else { $updated ||= 1; } } push(@comments, "# User $id updated.") if $updated; } DONE: $c ||= join("\n", @comments) if @comments; return [ $c, $o, $k, $e ]; rt-4.2.12/share/html/REST/1.0/Forms/user/ns000644 000765 000024 00000004552 12555754775 020441 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/user/ns %# <%ARGS> $id <%perl> use RT::Users; my $field = "Name"; $field = "EmailAddress" if $id =~ /\@/; my $users = RT::Users->new($session{CurrentUser}); $users->Limit(FIELD => $field, OPERATOR => '=', VALUE => $id, CASESENSITIVE => 0); if ($users->Count == 0) { return (0, "No user named $id exists."); } return $users->Next->Id; rt-4.2.12/share/html/REST/1.0/Forms/transaction/default000644 000765 000024 00000012017 12555754775 023007 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/transaction %# <%ARGS> $id $format => undef $fields => undef <%INIT> my $trans = RT::Transactions->new($session{CurrentUser}); my ($c, $o, $k, $e) = ("", [], {} , ""); my $tid = $id; $trans->Limit(FIELD => 'Id', OPERATOR => '=', VALUE => $tid); if ($tid) { my @data; my $t = RT::Transaction->new($session{CurrentUser}); $t->Load($tid); if ($format eq "l") { push @data, [ id => $t->Id ]; push @data, [ Ticket => $t->Ticket ] if (!%$fields || exists $fields->{lc 'Ticket'}); push @data, [ TimeTaken => $t->TimeTaken ] if (!%$fields || exists $fields->{lc 'TimeTaken'}); push @data, [ Type => $t->Type ] if (!%$fields || exists $fields->{lc 'Type'}); push @data, [ Field => $t->Field ] if (!%$fields || exists $fields->{lc 'Field'}); push @data, [ OldValue => $t->OldValue ] if (!%$fields || exists $fields->{lc 'OldValue'}); push @data, [ NewValue => $t->NewValue ] if (!%$fields || exists $fields->{lc 'NewValue'}); push @data, [ Data => $t->Data ] if (!%$fields || exists $fields->{lc 'Data'}); push @data, [ Description => $t->Description ] if (!%$fields || exists $fields->{lc 'Description'}); push @data, [ Content => $t->Content ] if (!%$fields || exists $fields->{lc 'Content'}); if (!%$fields || exists $fields->{lc 'Content'}) { my $creator = RT::User->new($session{CurrentUser}); $creator->Load($t->Creator); push @data, [ Creator => $creator->Name ]; } push @data, [ Created => $t->Created ] if (!%$fields || exists $fields->{lc 'Created'}); if (!%$fields || exists $fields->{lc 'Attachments'}) { my $attachlist; my $attachments = $t->Attachments; while (my $a = $attachments->Next) { my $size = length($a->Content); if ($size > 1024) { $size = int($size/102.4)/10 . "k"; } else { $size .= "b"; } my $name = (defined $a->Filename and length $a->Filename) ? $a->Filename : "untitled"; $attachlist .= "\n" . $a->Id.": $name ($size)"; } push @data, [Attachments => $attachlist]; } } else { push @data, [ id => $t->Id ]; push @data, [ Description => $t->Description ]; } my %k = map {@$_} @data; $o = [ map {$_->[0]} @data ]; $k = \%k; } #else { # my (@data, $tids); # $format ||= "s"; # $format = "l" if (%$fields); # # while (my $t = $trans->Next) { # my $tid = $t->Id; # if ($format eq "l") { # $tids .= "," if $tids; # $tids .= $tid; # } else { # push @$o, $tid; # $k->{$tid} = $t->Description; # } # } #} return [ $c, $o, $k, $e ]; rt-4.2.12/share/html/REST/1.0/Forms/ticket/attachments000644 000765 000024 00000011367 12555754775 022643 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/ticket/attachments %# <%ARGS> $id $args => undef <%INIT> my @data; my ($c, $o, $k, $e) = ("", [], {}, ""); my $ticket = RT::Ticket->new($session{CurrentUser}); $ticket->Load($id); unless ($ticket->Id) { return [ "# Ticket $id does not exist.", [], {}, 1 ]; } my @arglist = split('/', $args || ''); my ($aid, $content); if ( defined $arglist[1] && $arglist[1] eq 'content') { $aid = $arglist[0]; $content = 1; } else { $aid = $args; $content = 0; } if ($aid) { unless ($aid =~ /^\d+$/) { return [ "# Invalid attachment id: $aid", [], {}, 1 ]; } my $attachment = RT::Attachment->new($session{CurrentUser}); $attachment->Load($aid); unless ($attachment->Id eq $aid) { return [ "# Invalid attachment id: $aid", [], {}, 1 ]; } if ($content) { $c = $attachment->OriginalContent; # if we're sending a binary attachment (and only the attachment) # flag it so bin/rt knows to special case it if ($attachment->ContentType !~ /^text\//) { $r->content_type($attachment->ContentType); } } else { my @data; push @data, [ id => $attachment->Id ]; push @data, [ Subject => $attachment->Subject ]; push @data, [ Creator => $attachment->Creator ]; push @data, [ Created => $attachment->Created ]; push @data, [ Transaction => $attachment->TransactionId ]; push @data, [ Parent => $attachment->Parent ]; push @data, [ MessageId => $attachment->MessageId ]; push @data, [ Filename => $attachment->Filename ]; push @data, [ ContentType => $attachment->ContentType ]; push @data, [ ContentEncoding => $attachment->ContentEncoding ]; push @data, [ Headers => $attachment->Headers ]; push @data, [ Content => $attachment->Content ]; my %k = map {@$_} @data; $o = [ map {$_->[0]} @data ]; $k = \%k; } } else { my @attachments; my $transactions = $ticket->Transactions; while (my $t = $transactions->Next) { my $attachments = $t->Attachments; while (my $a = $attachments->Next) { my $size = length($a->Content || ''); if ($size > 1024) { $size = int($size/102.4)/10 . "k" } else { $size .= "b" } my $name = (defined $a->Filename and length $a->Filename) ? $a->Filename : "(Unnamed)"; push @attachments, $a->Id.": $name (".$a->ContentType . " / $size)"; } } if (@attachments) { $o = [ "id", "Attachments" ]; $k = { id => "ticket/".$ticket->Id."/attachments", Attachments => \@attachments }; } } return [ $c, $o, $k, $e ]; rt-4.2.12/share/html/REST/1.0/Forms/ticket/comment000644 000765 000024 00000010112 12555754775 021755 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/ticket/comment %# <%ARGS> $id %changes <%INIT> use MIME::Entity; use RT::Interface::REST; $RT::Logger->debug("Got ticket id=$id for comment"); $RT::Logger->debug("Got args @{[keys(%changes)]}."); my $ticket = RT::Ticket->new($session{CurrentUser}); my ($c, $o, $k, $e) = ("", [], {}, 0); # http://.../REST/1.0/ticket/1/comment $ticket->Load($id); if (!$ticket->Id) { $e = 1; $c = "# Ticket $id does not exist."; goto OUTPUT; } my $action; ($action = $changes{Action}) =~ s/^(.)(.*)$/\U$1\L$2\E/; unless ($action =~ /^(?:Comment|Correspond)$/) { $e = 1; $c = "# Invalid action: `$action'."; goto OUTPUT; } my $text = $changes{Text}; my @atts = @{ vsplit($changes{Attachment}) }; if (!$changes{Text} && @atts == 0) { $e = 1; $c = "# Empty comment with no attachments submitted."; goto OUTPUT; } my $ent = MIME::Entity->build( Type => "multipart/mixed", 'X-RT-Interface' => 'REST', ); $ent->attach( Type => $changes{'Content-Type'} || 'text/plain', Charset => "UTF-8", Data => Encode::encode("UTF-8", $changes{Text} ), ) if $changes{Text}; { my ($status, $msg) = process_attachments($ent, @atts); unless ( $status ) { $e = 1; $c = "# $msg"; goto OUTPUT; } } unless ($ticket->CurrentUserHasRight('ModifyTicket') || ($action eq "Comment" && $ticket->CurrentUserHasRight("CommentOnTicket")) || ($action eq "Correspond" && $ticket->CurrentUserHasRight("ReplyToTicket"))) { $e = 1; $c = "# You are not allowed to $action on ticket $id."; goto OUTPUT; } my $cc = join ", ", @{ vsplit($changes{Cc}) }; my $bcc = join ", ", @{ vsplit($changes{Bcc}) }; my ($n, $s) = $ticket->$action(MIMEObj => $ent, CcMessageTo => $cc, BccMessageTo => $bcc, TimeTaken => $changes{TimeWorked} || 0); $c = "# ".$s; if ($changes{Status}) { my ($status_n, $status_s) = $ticket->SetStatus($changes{'Status'} ); $c .= "\n# ".$status_s; } OUTPUT: return [ $c, $o, $k, $e ]; rt-4.2.12/share/html/REST/1.0/Forms/ticket/default000644 000765 000024 00000040766 12555754775 021761 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/ticket/default %# <%ARGS> $id $changes => {} $fields => undef $args => undef <%INIT> use MIME::Entity; use RT::Interface::REST; my $cf_spec = RT::Interface::REST->custom_field_spec(1); my @comments; my ($c, $o, $k, $e) = ("", [], {}, 0); my %data = %$changes; my $ticket = RT::Ticket->new($session{CurrentUser}); my @dates = qw(Created Starts Started Due Resolved Told LastUpdated); my @people = qw(Requestors Cc AdminCc); my @create = qw(Queue Requestor Subject Cc AdminCc Owner Status Priority InitialPriority FinalPriority TimeEstimated TimeWorked TimeLeft Starts Started Due Resolved Content-Type); my @simple = qw(Subject Status Priority Disabled TimeEstimated TimeWorked TimeLeft InitialPriority FinalPriority); my %dates = map {lc $_ => $_} @dates; my %people = map {lc $_ => $_} @people; my %create = map {lc $_ => $_} @create; my %simple = map {lc $_ => $_} @simple; # Are we dealing with an existing ticket? if ($id ne 'new') { $ticket->Load($id); if (!$ticket->Id) { return [ "# Ticket $id does not exist.", [], {}, 1 ]; } elsif ( %data ) { if ( $data{status} && lc $data{status} eq 'deleted' && ! grep { $_ ne 'id' && $_ ne 'status' } keys %data ) { if ( !$ticket->CurrentUserHasRight('DeleteTicket') ) { return [ "# You are not allowed to delete ticket $id.", [], {}, 1 ]; } } elsif ( !$ticket->CurrentUserHasRight('ModifyTicket') ) { return [ "# You are not allowed to modify ticket $id.", [], {}, 1 ]; } } elsif (!$ticket->CurrentUserHasRight('ShowTicket')) { return [ "# You are not allowed to display ticket $id.", [], {}, 1 ]; } } else { if (!keys(%data)) { # GET ticket/new: Return a suitable default form. # We get defaults from queue/1 (XXX: What if it isn't there?). my $queue = RT::Queue->new($session{CurrentUser}); $queue->Load(1); my $due; if ($queue->DefaultDueIn) { $due = RT::Date->new($session{CurrentUser}); $due->SetToNow; $due->AddDays($queue->DefaultDueIn); } my $starts = RT::Date->new($session{CurrentUser}); $starts->SetToNow; return [ "# Required: id, Queue", [ qw(id Queue Requestor Subject Cc AdminCc Owner Status Priority InitialPriority FinalPriority TimeEstimated Starts Due Attachment Text) ], { id => "ticket/new", Queue => $queue->Name, Requestor => $session{CurrentUser}->Name, Subject => "", Cc => [], AdminCc => [], Owner => "", Status => "new", Priority => $queue->InitialPriority, InitialPriority => $queue->InitialPriority, FinalPriority => $queue->FinalPriority, TimeEstimated => 0, Starts => $starts->ISO(Timezone => 'user'), Due => $due ? $due->ISO(Timezone => 'user') : undef, Attachment => '', Text => "", }, 0 ]; } else { # We'll create a new ticket, and fall through to set fields that # can't be set in the call to Create(). my (%v, $text, @atts); foreach my $k (keys %data) { # flexibly parse any dates if ($dates{lc $k}) { my $time = RT::Date->new($session{CurrentUser}); $time->Set(Format => 'unknown', Value => $data{$k}); $data{$k} = $time->ISO; } if (exists $create{lc $k}) { $v{$create{lc $k}} = delete $data{$k}; } # Set custom field elsif ($k =~ /^$cf_spec/) { my $key = $1 || $2; my $cf = RT::CustomField->new( $session{CurrentUser} ); $cf->LoadByName( Name => $key, LookupType => RT::Ticket->CustomFieldLookupType, ObjectId => $data{Queue} || $v{Queue}, IncludeGlobal => 1, ); if (not $cf->id) { push @comments, "# Invalid custom field name ($key)"; delete $data{$k}; next; } my $val = delete $data{$k}; next unless defined $val && length $val; $v{"CustomField-".$cf->Id()} = $cf->SingleValue ? $val : vsplit($val,1); } elsif (lc $k eq 'text') { $text = delete $data{$k}; } elsif (lc $k eq 'attachment') { push @atts, @{ vsplit(delete $data{$k}) }; } elsif ( $k !~ /^(?:id|requestors)$/i ) { $e = 1; push @$o, $k; push(@comments, "# $k: Unknown field"); } } if ( $e ) { unshift @comments, "# Could not create ticket."; $k = \%data; goto DONE; } # people fields allow multiple values $v{$_} = vsplit($v{$_}) foreach ( grep $create{lc $_}, @people ); if ($text || @atts) { $v{MIMEObj} = MIME::Entity->build( Type => "multipart/mixed", From => Encode::encode( "UTF-8", $session{CurrentUser}->EmailAddress ), Subject => Encode::encode( "UTF-8", $v{Subject}), 'X-RT-Interface' => 'REST', ); $v{MIMEObj}->attach( Type => $v{'Content-Type'} || 'text/plain', Charset => "UTF-8", Data => Encode::encode( "UTF-8", $text ), ) if $text; my ($status, $msg) = process_attachments($v{'MIMEObj'}, @atts); unless ($status) { push(@comments, "# $msg"); goto DONE; } $v{MIMEObj}->make_singlepart; } my($tid,$trid,$terr) = $ticket->Create(%v); unless ($tid) { push(@comments, "# Could not create ticket."); push(@comments, "# " . $terr); goto DONE; } delete $data{id}; $id = $ticket->Id; push(@comments, "# Ticket $id created."); # see if the hash is empty goto DONE if ! keys(%data); } } # Now we know we're dealing with an existing ticket. if (!keys(%data)) { my ($time, $key, $val, @data); push @data, [ id => "ticket/".$ticket->Id ]; push @data, [ Queue => $ticket->QueueObj->Name ] if (!%$fields || exists $fields->{lc 'Queue'}); push @data, [ Owner => $ticket->OwnerObj->Name ] if (!%$fields || exists $fields->{lc 'Owner'}); push @data, [ Creator => $ticket->CreatorObj->Name ] if (!%$fields || exists $fields->{lc 'Creator'}); foreach (qw(Subject Status Priority InitialPriority FinalPriority)) { next unless (!%$fields || (exists $fields->{lc $_})); push @data, [$_ => $ticket->$_ ]; } foreach $key (@people) { next unless (!%$fields || (exists $fields->{lc $key})); push @data, [ $key => [ $ticket->$key->MemberEmailAddresses ] ]; } $time = RT::Date->new ($session{CurrentUser}); foreach $key (@dates) { next unless (!%$fields || (exists $fields->{lc $key})); $time->Set(Format => 'sql', Value => $ticket->$key); push @data, [ $key => $time->AsString ]; } $time = RT::Date->new ($session{CurrentUser}); foreach $key (qw(TimeEstimated TimeWorked TimeLeft)) { next unless (!%$fields || (exists $fields->{lc $key})); $val = $ticket->$key || 0; $val = "$val minutes" if $val; push @data, [ $key => $val ]; } # Display custom fields my $CustomFields = $ticket->CustomFields; while (my $cf = $CustomFields->Next()) { next unless !%$fields || exists $fields->{"cf.{".lc($cf->Name)."}"} || exists $fields->{"cf-".lc $cf->Name}; my $vals = $ticket->CustomFieldValues($cf->Id()); my @out = (); if ( $cf->SingleValue ) { my $v = $vals->Next; push @out, $v->Content if $v; } else { while (my $v = $vals->Next()) { my $content = $v->Content; if ( $v->Content =~ /,/ ) { $content =~ s/([\\'])/\\$1/g; push @out, q{'} . $content . q{'}; } else { push @out, $content; } } } push @data, [ ('CF.{' . $cf->Name . '}') => join ',', @out ]; } my %k = map {@$_} @data; $o = [ map {$_->[0]} @data ]; $k = \%k; } else { my ($get, $set, $key, $val, $n, $s); my $updated; foreach $key (keys %data) { $val = $data{$key}; $key = lc $key; $n = 1; if (ref $val eq 'ARRAY') { unless ($key =~ /^(?:Requestors|Cc|AdminCc)$/i) { $n = 0; $s = "$key may have only one value."; goto SET; } } if ($key =~ /^queue$/i) { next if $val eq $ticket->QueueObj->Name; ($n, $s) = $ticket->SetQueue($val); } elsif ($key =~ /^owner$/i) { next if $val eq $ticket->OwnerObj->Name; ($n, $s) = $ticket->SetOwner($val); } elsif (exists $simple{$key}) { $key = $simple{$key}; $set = "Set$key"; my $current = $ticket->$key; $current = '' unless defined $current; next if ($val eq $current) or ($current =~ /^\d+$/ && $val =~ /^\d+$/ && $val == $current); ($n, $s) = $ticket->$set("$val"); } elsif (exists $dates{$key}) { $key = $dates{$key}; # We try to detect whether it should update a field by checking # whether its current value equals the entered value. Since the # LastUpdated field is automatically updated as other columns are # changed, it is not properly skipped. Users cannot update this # field anyway. next if $key eq 'LastUpdated'; $set = "Set$key"; my $time = RT::Date->new($session{CurrentUser}); $time->Set(Format => 'sql', Value => $ticket->$key); next if ($val =~ /^not set$/i || $val eq $time->AsString); $time->Set(Format => 'unknown', Value => $val); ($n, $s) = $ticket->$set($time->ISO); } elsif (exists $people{$key}) { $key = $people{$key}; my ($p, @msgs); my %new = map {$_=>1} @{ vsplit($val) }; my %old = map {$_=>1} $ticket->$key->MemberEmailAddresses; my $type = $key eq 'Requestors' ? 'Requestor' : $key; foreach $p (keys %old) { unless (exists $new{$p}) { ($s, $n) = $ticket->DeleteWatcher(Type => $type, Email => $p); push @msgs, [ $s, $n ]; } } foreach $p (keys %new) { unless ($ticket->IsWatcher(Type => $type, Email => $p)) { ($s, $n) = $ticket->AddWatcher(Type => $type, Email => $p); push @msgs, [ $s, $n ]; } } $n = 1; if (@msgs = grep {$_->[0] == 0} @msgs) { $n = 0; $s = join "\n", map {"# ".$_->[1]} @msgs; $s =~ s/^# //; } } # Set custom field elsif ($key =~ /^$cf_spec/) { $key = $1 || $2; my $cf = RT::CustomField->new( $session{CurrentUser} ); $cf->ContextObject( $ticket ); $cf->LoadByName( Name => $key, LookupType => RT::Ticket->CustomFieldLookupType, ObjectId => $ticket->Queue, IncludeGlobal => 1, ); if (not $cf->id) { $n = 0; $s = "Unknown custom field."; } else { my $vals = $ticket->CustomFieldValues($cf->id); if ( !defined $val || !length $val ) { while ( my $val = $vals->Next ) { ($n, $s) = $ticket->DeleteCustomFieldValue( Field => $cf, ValueId => $val->id, ); $s =~ s/^# // if defined $s; } } elsif ( $cf->SingleValue ) { ($n, $s) = $ticket->AddCustomFieldValue( Field => $cf, Value => $val ); $s =~ s/^# // if defined $s; } else { my @new = @{vsplit($val, 1)}; my %new; $new{$_}++ for @new; while (my $v = $vals->Next()) { my $c = $v->Content; if ( $new{$c} ) { $new{$c}--; } else { $ticket->DeleteCustomFieldValue( Field => $cf, ValueId => $v->id ); } } for ( @new ) { while ( $new{$_} && $new{$_}-- ) { ($n, $s) = $ticket->AddCustomFieldValue( Field => $cf, Value => $_ ); $s =~ s/^# // if defined $s; } } } } } elsif ($key ne 'id' && $key ne 'type' && $key ne 'creator' && $key ne 'content-type' ) { $n = 0; $s = "Unknown field."; } SET: if ($n == 0) { $e = 1; push @comments, "# $key: $s"; unless (@$o) { # move id forward @$o = ("id", grep { $_ ne 'id' } keys %$changes); $k = $changes; } } else { $updated ||= 1; } } push(@comments, "# Ticket ".$ticket->id." updated.") if $updated; } DONE: $c ||= join("\n", @comments) if @comments; return [$c, $o, $k, $e]; rt-4.2.12/share/html/REST/1.0/Forms/ticket/history000644 000765 000024 00000015111 12555754775 022020 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/ticket/history %# <%ARGS> $id $args => undef $format => undef $fields => undef <%INIT> my $ticket = RT::Ticket->new($session{CurrentUser}); my ($c, $o, $k, $e) = ("", [], {}, ""); $ticket->Load($id); unless ($ticket->Id) { return [ "# Ticket $id does not exist.", [], {}, 1 ]; } my $trans = $ticket->Transactions(); my $total = $trans->Count(); if ( $args ) { chomp $args; } else { $args = ''; } my @arglist = split('/', $args ); my ($type, $tid); if (defined $arglist[0] && $arglist[0] eq 'type') { $type = $arglist[1]; } elsif ( defined $arglist[0] && $arglist[0] eq 'id') { $tid = $arglist[1]; } else { $type = $args; } if ($type) { # Create, Set, Status, Correspond, Comment, Give, Steal, Take, Told # CustomField, AddLink, DeleteLink, AddWatcher, DelWatcher if ($args =~ /^links?$/) { $trans->Limit(FIELD => 'Type', OPERATOR => 'LIKE', VALUE => '%Link'); } elsif ($args =~ /^watchers?$/) { $trans->Limit(FIELD => 'Type', OPERATOR => 'LIKE', VALUE => '%Watcher'); } else { $trans->Limit(FIELD => 'Type', OPERATOR => '=', VALUE => $type); } } elsif ($tid) { $trans->Limit(FIELD => 'Id', OPERATOR => '=', VALUE => $tid); } if ($tid) { my @data; my $t = RT::Transaction->new($session{CurrentUser}); # this paragraph limits the transaction ID query to transactions on this ticket. # Otherwise you can query any transaction from any ticket, which makes no sense. my $Transactions = $ticket->Transactions; my $tok=0; while (my $T = $Transactions->Next()) { $tok=1 if ($T->Id == $tid) } if ($tok) { $t->Load($tid); } else { return [ "# Transaction $tid is not related to Ticket $id", [], {}, 1 ]; } push @data, [ id => $t->Id ]; push @data, [ Ticket => $t->Ticket ] if (!%$fields || exists $fields->{lc 'Ticket'}); push @data, [ TimeTaken => $t->TimeTaken ] if (!%$fields || exists $fields->{lc 'TimeTaken'}); push @data, [ Type => $t->Type ] if (!%$fields || exists $fields->{lc 'Type'}); push @data, [ Field => $t->Field ] if (!%$fields || exists $fields->{lc 'Field'}); push @data, [ OldValue => $t->OldValue ] if (!%$fields || exists $fields->{lc 'OldValue'}); push @data, [ NewValue => $t->NewValue ] if (!%$fields || exists $fields->{lc 'NewValue'}); push @data, [ Data => $t->Data ] if (!%$fields || exists $fields->{lc 'Data'}); push @data, [ Description => $t->Description ] if (!%$fields || exists $fields->{lc 'Description'}); push @data, [ Content => $t->Content ] if (!%$fields || exists $fields->{lc 'Content'}); if (!%$fields || exists $fields->{lc 'Content'}) { my $creator = RT::User->new($session{CurrentUser}); $creator->Load($t->Creator); push @data, [ Creator => $creator->Name ]; } push @data, [ Created => $t->Created ] if (!%$fields || exists $fields->{lc 'Created'}); if (!%$fields || exists $fields->{lc 'Attachments'}) { my $attachlist; my $attachments = $t->Attachments; while (my $a = $attachments->Next) { my $size = length($a->Content||''); if ($size > 1024) { $size = int($size/102.4)/10 . "k" } else { $size .= "b" } my $name = (defined $a->Filename and length $a->Filename) ? $a->Filename : "untitled"; $attachlist .= "\n" . $a->Id.": $name ($size)"; } push @data, [Attachments => $attachlist]; } my %k = map {@$_} @data; $o = [ map {$_->[0]} @data ]; $k = \%k; } else { my (@data, $tids); $format ||= "s"; $format = "l" if (%$fields); while (my $t = $trans->Next) { my $tid = $t->Id; if ($format eq "l") { $tids .= "," if $tids; $tids .= $tid; } else { push @$o, $tid; $k->{$tid} = $t->Description; } } if ($format eq "l") { my @tid; push @tid, "ticket/$id/history/id/$tids"; my $fieldstring; foreach my $key (keys %$fields) { $fieldstring .= "," if $fieldstring; $fieldstring .= $key; } my ($content, $forms); $m->subexec("/REST/1.0/show", id => \@tid, format => $format, fields => $fieldstring); return [ $c, $o, $k, $e ]; } } if (!$c) { my $sub = $trans->Count(); $c = "# $sub/$total ($args/total)"; } return [ $c, $o, $k, $e ]; rt-4.2.12/share/html/REST/1.0/Forms/ticket/links000644 000765 000024 00000013012 12555754775 021435 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/ticket/links %# <%ARGS> $id $format => 's' $changes => undef <%INIT> my @data; my $ticket = RT::Ticket->new($session{CurrentUser}); $ticket->Load($id); if (!$ticket->Id) { return [ "# Ticket $id does not exist.", [], {}, 1 ]; } my ($c, $o, $k, $e) = ("", [], {}, 0); my @fields = qw(DependsOn DependedOnBy RefersTo ReferredToBy Members MemberOf); my %fields = map { lc $_ => $_ } @fields; my %lfields = ( Members => { Type => 'MemberOf', Mode => 'Base' }, ReferredToBy => { Type => 'RefersTo', Mode => 'Base' }, DependedOnBy => { Type => 'DependsOn', Mode => 'Base' }, MemberOf => { Type => 'MemberOf', Mode => 'Target' }, RefersTo => { Type => 'RefersTo', Mode => 'Target' }, DependsOn => { Type => 'DependsOn', Mode => 'Target' }, ); if ($changes) { my ($get, $set, $key, $val, $n, $s); my %data = %$changes; my @comments; foreach $key (keys %data) { $val = $data{$key}; $key = lc $key; $n = 1; if (exists $fields{$key}) { $key = $fields{$key}; my %old; my $field = $lfields{$key}->{Mode}; while (my $link = $ticket->$key->Next) { $old{$link->$field} = 1; } my %new; foreach my $nkey (@{vsplit($val)}) { if ($nkey =~ /^\d+$/) { my $uri = RT::URI->new($session{CurrentUser}); my $tick = RT::Ticket->new($session{CurrentUser}); $tick->Load($nkey); if ($tick->Id) { $uri->FromObject($tick); $nkey = $uri->URI; } else { $n = 0; $s = "Ticket $nkey does not exist."; goto SET; } } $new{$nkey} = 1; } foreach my $u (keys %old) { if (exists $new{$u}) { delete $new{$u}; } else { my $type = $lfields{$key}->{Type}; my $mode = $lfields{$key}->{Mode}; ($n, $s) = $ticket->DeleteLink(Type => $type, $mode => $u); goto SET; } } foreach my $u (keys %new) { my $type = $lfields{$key}->{Type}; my $mode = $lfields{$key}->{Mode}; ($n, $s) = $ticket->AddLink(Type => $type, $mode => $u); goto SET; } } elsif ($key ne 'id' && $key ne 'type') { $n = 0; $s = "Unknown field: $key"; } SET: if ($n == 0) { $e = 1; push @comments, "# $key: $s"; unless (@$o) { @$o = ("id", @fields); %$k = %data; } } } push(@comments, "# Links for ticket $id updated.") unless @comments; $c = join("\n", @comments) if @comments; } else { my @data; push @data, [ id => "ticket/".$ticket->Id."/links" ]; foreach my $key (@fields) { my @val; my $field = $lfields{$key}->{Mode}; while (my $link = $ticket->$key->Next) { push @val, $link->$field; } push(@val, "") if (@val == 0 && defined $format && $format eq 'l'); push @data, [ $key => [ @val ] ] if @val; } my %k = map {@$_} @data; $o = [ map {$_->[0]} @data ]; $k = \%k; } return [ $c, $o, $k, $e ]; rt-4.2.12/share/html/REST/1.0/Forms/ticket/merge000644 000765 000024 00000005610 12555754775 021421 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/ticket/merge %# <%ARGS> $id $args <%INIT> use RT::Interface::REST; my $into = $args; my $ticket = RT::Ticket->new($session{CurrentUser}); my $ticket_into = RT::Ticket->new($session{CurrentUser}); my ($c, $o, $k, $e) = ("", [], {}, 0); # http://.../REST/1.0/ticket/1/merge/6 (merges ticket 1 into ticket 6) $ticket->Load($id); if (!$ticket->Id) { $e = 1; $c = "# Ticket $id does not exist."; goto OUTPUT; } $ticket_into->Load($into); if (!$ticket_into->Id) { $e = 1; $c = "# Ticket $into does not exist."; goto OUTPUT; } if (!$ticket->CurrentUserHasRight('ModifyTicket')) { $e = 1; $c = "# You are not allowed to modify ticket $id."; goto OUTPUT; } my ($n, $s) = $ticket->MergeInto($into); if ($n == 0) { $e = 1; $c = "# Could not complete the merge."; } else { $c = "# Merge completed."; } OUTPUT: return [ $c, $o, $k, $e ]; rt-4.2.12/share/html/REST/1.0/Forms/ticket/take000644 000765 000024 00000010066 12555754775 021247 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/ticket/take %# <%ARGS> $id %changes <%INIT> use RT::Interface::REST; my $ticket = RT::Ticket->new($session{CurrentUser}); my ($c, $o, $k, $e) = ("", [], {}, 0); # http://.../REST/1.0/ticket/1/take $ticket->Load( $id ); unless ( $ticket->Id ) { $e = 1; $c = "# Ticket $id does not exist."; goto OUTPUT; } my $action; my @comments; ($action = $changes{Action}) =~ s/^(.)(.*)$/\U$1\L$2\E/; unless ($action =~ /^(?:Take|Steal|Untake)$/) { $e = 1; $c = "# Invalid action: `$action'."; goto OUTPUT; } my ($status, $msg) = $ticket->$action(); $c = "# $msg"; $e = 1 unless $status; goto OUTPUT; #unless ($ticket->CurrentUserHasRight('ModifyTicket') || # ( ($action eq "Take" || $action eq 'Untake') && # $ticket->CurrentUserHasRight("TakeTicket")) || # ($action eq "Steal" && # $ticket->CurrentUserHasRight("StealTicket"))) #{ # $e = 1; # $c = "# You are not allowed to $action ticket $id."; # goto OUTPUT; #} #if ( keys %changes ) { #} #else { # # process the form data structure # my ($key, $val); # # foreach $key (keys %data) { # $val = $data{$key}; # # if ($key =~ /^force$/i) { # if ($val !~ /^(?:0|1)$/) { # push(@comments, "# invalid value for 'force': $val"); # goto DONE; # } # my ($ret_id, $msg); # # ### take # if ($val == 0) { # ($ret_id, $msg) = $ticket->Take; # if (!$ret_id) { # push(@comments, "# Couldn't take ticket $id: $msg"); # goto DONE; # } # push(@comments, "# Ticket $id taken."); # } # ### steal # else { # ($ret_id, $msg) = $ticket->Steal; # if (!$ret_id) { # push(@comments, "# Couldn't steal ticket $id: $msg"); # goto DONE; # } # push(@comments, "# Ticket $id stolen."); # } # } # } #} OUTPUT: return [ $c, $o, $k, $e ]; rt-4.2.12/share/html/REST/1.0/Forms/queue/customfields000644 000765 000024 00000006017 12555754775 022666 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/queue/customfields %# <%ARGS> $id $format => 's' $changes => {} <%perl> my @comments; my ($c, $o, $k, $e) = ("", [], {}, 0); my $queue = RT::Queue->new($session{CurrentUser}); $queue->Load($id); if (!$queue->Id) { return [ "# Queue $id does not exist.", [], {}, 1 ]; } if (%$changes) { $e = 1; $c = "Cannot modify Queue CF definitions via REST"; goto DONE; } my @data; push @data, [ id => "queue/" . $queue->Id ]; my $qcfs = $queue->CustomFields; while ( my $qcf = $qcfs->Next() ) { if ( $format eq "l" ) { my $cfadmin = ( $qcf->SingleValue ? 'SingleValue' : 'MultiValue' ) . $qcf->Type . ( $qcf->Pattern ? ( ' ' . $qcf->FriendlyPattern ) : '' ); push @data, [ $qcf->Name . ' (' . $qcf->Description . ')' => $cfadmin ]; } else { push @data, [ $qcf->Name => "" ]; } } my %k = map {@$_} @data; $o = [ map { $_->[0] } @data ]; $k = \%k; DONE: $c ||= join("\n", @comments) if @comments; return [ $c, $o, $k, $e ]; rt-4.2.12/share/html/REST/1.0/Forms/queue/default000644 000765 000024 00000013166 12555754775 021614 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/queue/default %# <%ARGS> $id $format => 's' $fields => undef # these are the fields passed to the rt "-f" flag. $changes => {} <%perl> my @comments; my ($c, $o, $k, $e) = ("", [], {}, 0); my %data = %$changes; my $queue = RT::Queue->new($session{CurrentUser}); my @fields = qw(Name Description CorrespondAddress CommentAddress InitialPriority FinalPriority DefaultDueIn Disabled); if ( $fields && %$fields ) { @fields = grep { exists $fields->{ lc $_ } } @fields; } my %fields = map { lc $_ => $_ } @fields; if ($id ne 'new') { $queue->Load($id); if (!$queue->Id) { return [ "# Queue $id does not exist.", [], {}, 1 ]; } } else { if (keys %data == 0) { return [ "# Required: Name", [ "id", @fields ], { id => 'queue/new', Name => '', Description => "", CommentAddress => "", CorrespondAddress => "", InitialPriority => "", FinalPriority => "", DefaultDueIn => "", }, 0 ]; } else { my %v; my %create = %fields; foreach my $k (keys %data) { if (exists $create{lc $k}) { $v{$create{lc $k}} = delete $data{$k}; } } if ($v{Name} eq '') { my %o = keys %$changes; delete @o{"id", @fields}; return [ "# Please set the queue name.", [ "id", @fields, keys %o ], $changes, 1 ]; } $queue->Create(%v); unless ($queue->Id) { return [ "# Could not create queue.", [], {}, 1 ]; } delete $data{id}; $id = $queue->Id; push(@comments, "# Queue $id created."); goto DONE if keys %data == 0; } } if ( keys %data == 0) { my @data; push @data, [ id => "queue/".$queue->Id ]; foreach my $key (@fields) { push @data, [ $key => $queue->$key ]; } # Custom fields my $CustomFields = $queue->CustomFields; while ( my $CustomField = $CustomFields->Next() ) { next unless ( !%$fields || exists $fields->{ lc "CF-" . $CustomField->Name } ); next unless $CustomField->CurrentUserHasRight('SeeCustomField'); my $CFvalues = $queue->CustomFieldValues( $CustomField->Id ); my @CFvalues; while ( my $CFvalue = $CFvalues->Next() ) { push @CFvalues, $CFvalue->Content; } push @data, [ "CF-" . $CustomField->Name => \@CFvalues ]; } my %k = map {@$_} @data; $o = [ map {$_->[0]} @data ]; $k = \%k; } else { my ($get, $set, $key, $val, $n, $s); my $updated; foreach $key (keys %data) { $val = $data{$key}; $key = lc $key; $n = 1; if (exists $fields{$key}) { $key = $fields{$key}; $set = "Set$key"; next if $val eq $queue->$key; ($n, $s) = $queue->$set($val); } elsif ($key ne 'id') { $n = 0; $s = "Unknown field."; } SET: if ($n == 0) { $e = 1; push @comments, "# $key: $s"; unless (@$o) { my %o = keys %$changes; delete @o{"id", @fields}; @$o = ("id", @fields, keys %o); $k = $changes; } } else { $updated ||= 1; } } push(@comments, "# Queue $id updated.") if $updated; } DONE: $c ||= join("\n", @comments) if @comments; return [ $c, $o, $k, $e ]; rt-4.2.12/share/html/REST/1.0/Forms/queue/ns000644 000765 000024 00000004466 12555754775 020613 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/queue/ns %# <%ARGS> $id <%perl> use RT::Queues; my $queues = RT::Queues->new($session{CurrentUser}); $queues->Limit(FIELD => 'Name', OPERATOR => '=', VALUE => $id, CASESENSITIVE => 0 ); if ($queues->Count == 0) { return (0, "No queue named $id exists."); } return $queues->Next->Id; rt-4.2.12/share/html/REST/1.0/Forms/queue/ticketcustomfields000644 000765 000024 00000006116 12555754775 024072 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/queue/ticketcustomfields %# <%ARGS> $id $format => 's' $changes => {} <%perl> my @comments; my ($c, $o, $k, $e) = ("", [], {}, 0); my $queue = RT::Queue->new($session{CurrentUser}); $queue->Load($id); if (!$queue->Id) { return [ "# Queue $id does not exist.", [], {}, 1 ]; } if (%$changes) { $e = 1; $c = "Cannot modify Queue CF definitions via REST"; goto DONE; } my @data; push @data, [ id => "queue/" . $queue->Id ]; my $qcfs = RT::CustomFields->new($session{CurrentUser});; $qcfs->LimitToGlobalOrQueue($id); while ( my $qcf = $qcfs->Next() ) { if ( $format eq "l" ) { my $cfadmin = ( $qcf->SingleValue ? 'SingleValue' : 'MultiValue' ) . $qcf->Type . ( $qcf->Pattern ? ( ' ' . $qcf->FriendlyPattern ) : '' ); push @data, [ $qcf->Name . ' (' . $qcf->Description . ')' => $cfadmin ]; } else { push @data, [ $qcf->Name => "" ]; } } my %k = map {@$_} @data; $o = [ map {$_->[0]} @data ]; $k = \%k; DONE: $c ||= join("\n", @comments) if @comments; return [ $c, $o, $k, $e ]; rt-4.2.12/share/html/REST/1.0/Forms/group/customfields000644 000765 000024 00000006017 12555754775 022676 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/group/customfields %# <%ARGS> $id $format => 's' $changes => {} <%perl> my @comments; my ($c, $o, $k, $e) = ("", [], {}, 0); my $group = RT::Group->new($session{CurrentUser}); $group->Load($id); if (!$group->Id) { return [ "# Group $id does not exist.", [], {}, 1 ]; } if (%$changes) { $e = 1; $c = "Cannot modify Group CF definitions via REST"; goto DONE; } my @data; push @data, [ id => "group/" . $group->Id ]; my $gcfs = $group->CustomFields; while ( my $gcf = $gcfs->Next() ) { if ( $format eq "l" ) { my $cfadmin = ( $gcf->SingleValue ? 'SingleValue' : 'MultiValue' ) . $gcf->Type . ( $gcf->Pattern ? ( ' ' . $gcf->FriendlyPattern ) : '' ); push @data, [ $gcf->Name . ' (' . $gcf->Description . ')' => $cfadmin ]; } else { push @data, [ $gcf->Name => "" ]; } } my %k = map {@$_} @data; $o = [ map { $_->[0] } @data ]; $k = \%k; DONE: $c ||= join("\n", @comments) if @comments; return [ $c, $o, $k, $e ]; rt-4.2.12/share/html/REST/1.0/Forms/group/default000644 000765 000024 00000014574 12555754775 021630 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/group/default %# <%ARGS> $id $format => 's' $fields => undef # these are the fields passed to the rt "-f" flag. $changes => {} <%perl> my @comments; my ($c, $o, $k, $e) = ("", [], {}, 0); my %data = %$changes; my $group = RT::Group->new($session{CurrentUser}); my @fields = qw(Name Description Disabled); if ( $fields && %$fields ) { @fields = grep { exists $fields->{ lc $_ } } @fields; } my %fields = map { lc $_ => $_ } @fields; if ($id ne 'new') { $group->Load($id); if (!$group->Id) { return [ "# Group $id does not exist.", [], {}, 1 ]; } } else { if (%data == 0) { return [ "# Required: Name", [ qw(id Name Description) ], { id => "group/new", Name => "", Description => "" }, 0 ]; } else { my %v; my %create = %fields; $create{name} = "Name"; $create{description} = "Description"; # Do any fields need to be excluded here? foreach my $k (keys %data) { if (exists $create{lc $k}) { $v{$create{lc $k}} = delete $data{$k}; } } $group->CreateUserDefinedGroup(%v); unless ($group->Id) { return [ "# Could not create group.", [], {}, 1 ]; } $id = $group->Id; delete $data{id}; push(@comments, "# Group $id created."); goto DONE if %data == 0; } } if (%data == 0) { my @data; push @data, [ id => "group/".$group->Id ]; foreach my $key (@fields) { push @data, [ $key => $group->$key ]; } # Members unless ( $fields && !exists $fields->{members} ) { my $gms = []; my $GroupMembers = $group->MembersObj(); while ( my $mo = $GroupMembers->Next() ) { if ( $mo->MemberObj->IsGroup ) { my $us = $mo->MemberObj->Object->UserMembersObj(); my @users; while ( my $u = $us->Next() ) { push @users, $u->RealName . ' <' . $u->EmailAddress . '>'; } push @$gms, 'GROUP [' . $mo->MemberObj->Object->Name . ']' . ' (' . join( ';', @users ) . ')'; } elsif ( $mo->MemberObj->IsUser ) { push @$gms, $mo->MemberObj->Object->RealName . ' <' . $mo->MemberObj->Object->EmailAddress . '>'; } } push @data, [ Members => $gms ]; } # Custom fields my $CustomFields = $group->CustomFields; while ( my $CustomField = $CustomFields->Next() ) { next unless ( !%$fields || exists $fields->{ lc "CF-" . $CustomField->Name } ); next unless $CustomField->CurrentUserHasRight('SeeCustomField'); my $CFvalues = $group->CustomFieldValues( $CustomField->Id ); my @CFvalues; while ( my $CFvalue = $CFvalues->Next() ) { push @CFvalues, $CFvalue->Content; } push @data, [ "CF-" . $CustomField->Name => \@CFvalues ]; } my %k = map {@$_} @data; $o = [ map {$_->[0]} @data ]; $k = \%k; } else { my ($get, $set, $key, $val, $n, $s); my $updated; foreach $key (keys %data) { $val = $data{$key}; $key = lc $key; $n = 1; if ($key eq 'name' || $key eq 'description' || exists $fields{$key}) { if (exists $fields{$key}) { $key = $fields{$key}; } else { $key = "Description" if $key eq 'description'; $key = "Name" if $key eq 'name'; } $set = "Set$key"; next if $val eq $group->$key; ($n, $s) = $group->$set($val); } elsif ($key ne 'id') { $n = 0; $s = "Unknown field."; } SET: if ($n == 0) { $e = 1; push @comments, "# $key: $s"; unless (@$o) { my %o = keys %$changes; delete @o{"id", @fields}; @$o = ("id", @fields, keys %o); $k = $changes; } } else { $updated ||= 1; } } push(@comments, "# Group $id updated.") if $updated; } DONE: $c ||= join("\n", @comments) if @comments; return [ $c, $o, $k, $e ]; rt-4.2.12/share/html/REST/1.0/Forms/group/ns000644 000765 000024 00000004465 12555754775 020622 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/group/ns %# <%ARGS> $id <%perl> use RT::Groups; my $groups = RT::Groups->new($session{CurrentUser}); $groups->Limit(FIELD => 'Name', OPERATOR => '=', VALUE => $id, CASESENSITIVE => 0); if ($groups->Count == 0) { return (0, "No group named $id exists."); } return $groups->Next->Id; rt-4.2.12/share/html/REST/1.0/Forms/attachment/default000644 000765 000024 00000007460 12555754775 022620 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# REST/1.0/Forms/attachment/default %# <%ARGS> $id $args => undef <%INIT> my @data; my ($c, $o, $k, $e) = ("", [], {}, ""); my $attachment = RT::Attachment->new($session{CurrentUser}); $attachment->Load($id); unless ( $attachment->Id ) { return [ "# Attachment $id does not exist.", [], {}, 1 ]; } unless ( $attachment->Id eq $id ) { return [ "# Invalid attachment id: $id", [], {}, 1 ]; } my @arglist = split( '/', $args || "" ); my $content; if ( @arglist and $arglist[0] eq 'content' ) { $c = $attachment->OriginalContent; $r->content_type($attachment->ContentType) if $attachment->ContentType !~ /^text\//; } else { my @data; push @data, [ id => "attachment/" . $attachment->Id ]; push @data, [ Subject => $attachment->Subject ]; push @data, [ Creator => $attachment->Creator ]; push @data, [ Created => $attachment->Created ]; push @data, [ Transaction => $attachment->TransactionId ]; push @data, [ Parent => "attachment/" . $attachment->Parent ]; push @data, [ MessageId => $attachment->MessageId ]; push @data, [ Filename => $attachment->Filename ]; push @data, [ ContentType => $attachment->ContentType ]; push @data, [ ContentEncoding => $attachment->ContentEncoding ]; push @data, [ Headers => $attachment->Headers ]; if ( $attachment->ContentType =~ m|^text/| ) { push @data, [ Content => $attachment->Content ]; } else { push @data, [ Content => "Content is not text and will not be displayed!\n" . "Use \"rt show attachment//content [> file.ext]\" to get the content." ]; } my %k = map {@$_} @data; $o = [ map { $_->[0] } @data ]; $k = \%k; } return [ $c, $o, $k, $e ]; rt-4.2.12/share/html/Prefs/DashboardsInMenu.html000644 000765 000024 00000007542 12555754775 022114 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    % for my $pane ( @panes ) { <&|/Widgets/TitleBox, title => loc('Dashboards in menu'), bodyclass => "" &> <& /Widgets/SelectionBox:show, self => $pane &> % } <&|/Widgets/TitleBox, title => loc("Reset dashboards in menu") &>
    <%INIT> my @results; my $title = loc("Customize").' '.loc("dashboards in menu"); my $user = $session{'CurrentUser'}->UserObj; if ($ARGS{Reset}) { my ($ok, $msg) = $user->SetPreferences('DashboardsInMenu', {}); push @results, $ok ? loc('Preferences saved.') : $msg; delete $session{'dashboards_in_menu'}; } my ($default_dashboards) = RT::System->new($session{'CurrentUser'})->Attributes->Named('DashboardsInMenu'); my $dashboard_pref = $session{CurrentUser}->UserObj->Preferences( 'DashboardsInMenu', $default_dashboards ? $default_dashboards->Content : () ); my $current_dashboards = $dashboard_pref->{dashboards} || []; my @dashboards = map { [$_->id, $_->Name] } $m->comp("/Dashboards/Elements/ListOfDashboards", IncludeSuperuserGroups => 0 ); my @panes = $m->comp( '/Admin/Elements/ConfigureDashboardsInMenu', Action => 'DashboardsInMenu.html', panes => ['dashboards_in_menu'], items => \@dashboards, current_portlets => $current_dashboards, OnSave => sub { my ( $conf ) = @_; my ( $ok, $msg ) = $user->SetPreferences( 'DashboardsInMenu', $conf ); push @results, $ok ? loc('Preferences saved for dashboards in menu.') : $msg; delete $session{'dashboards_in_menu'}; } ); $m->comp( '/Widgets/SelectionBox:process', %ARGS, self => $_ ) for @panes; rt-4.2.12/share/html/Prefs/MyRT.html000644 000765 000024 00000013455 12555754775 017561 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    % for my $pane ( @panes ) { <&|/Widgets/TitleBox, title => loc('RT at a glance') .': '. loc( $pane->{Name} ), bodyclass => "" &> <& /Widgets/SelectionBox:show, self => $pane &> % } <&|/Widgets/TitleBox, title => loc('Options'), bodyclass => "" &>
    <&|/l&>Rows per box:
    <&|/Widgets/TitleBox, title => loc("Reset RT at a glance") &>
    <%INIT> my @results; my $title = loc("Customize").' '.loc("RT at a glance"); my $user = $session{'CurrentUser'}->UserObj; if ( $ARGS{'UpdateSummaryRows'} ) { unless ( $ARGS{SummaryRows} && int $ARGS{SummaryRows} > 0 ) { push @results, loc ("Illegal '[_1]' preference value.", loc('summary rows')); $ARGS{SummaryRows} = 0; } else { my ($ok, $msg) = $user->SetPreferences( 'SummaryRows', int $ARGS{SummaryRows} ); push @results, $ok ? loc('Preferences saved for [_1].', loc('summary rows')) : $msg; } } $ARGS{'SummaryRows'} ||= $user->Preferences('SummaryRows', RT->Config->Get('DefaultSummaryRows')); if ($ARGS{Reset}) { for my $pref_name ('HomepageSettings', 'SummaryRows') { next unless $user->Preferences($pref_name); my ($ok, $msg) = $user->DeletePreferences($pref_name); push @results, $msg unless $ok; } push @results, loc('Preferences saved.') unless @results; } my $portlets = $user->Preferences('HomepageSettings'); unless ($portlets) { my ($defaults) = RT::System->new($session{'CurrentUser'})->Attributes->Named('HomepageSettings'); $portlets = $defaults ? $defaults->Content : {}; } my %seen; my @items = map ["component-$_", loc($_)], grep !$seen{$_}++, @{RT->Config->Get('HomepageComponents')}; my $sys = RT::System->new($session{'CurrentUser'}); my @objs = ($sys); push @objs, RT::SavedSearch->new( $session{CurrentUser} )->ObjectsForLoading if $session{'CurrentUser'}->HasRight( Right => 'LoadSavedSearch', Object => $RT::System ); my @sys_searches; for my $object (@objs) { for ($m->comp("/Search/Elements/SearchesForObject", Object => $object)) { my ($desc, $loc_desc, $search) = @$_; my $SearchType = 'Ticket'; if ((ref($search->Content)||'') eq 'HASH') { $SearchType = $search->Content->{'SearchType'} if $search->Content->{'SearchType'}; } else { $RT::Logger->debug("Search ".$search->id." ($desc) appears to have no Content"); } if ($object eq $sys && $SearchType eq 'Ticket') { push @items, ["system-$desc", $loc_desc]; push @sys_searches, [$desc, $search]; } else { my $oid = ref($object).'-'.$object->Id.'-SavedSearch-'.$search->Id; my $type = ($SearchType eq 'Ticket') ? 'Saved Search' # loc : $SearchType; push @items, ["saved-$oid", loc($type).": $loc_desc"]; } } } my @panes = $m->comp( '/Admin/Elements/ConfigureMyRT', panes => ['body', 'sidebar'], Action => 'MyRT.html', items => \@items, current_portlets => $portlets, OnSave => sub { my ( $conf, $pane ) = @_; my ($ok, $msg) = $user->SetPreferences( 'HomepageSettings', $conf ); push @results, $ok ? loc('Preferences saved for [_1].', $pane) : $msg; } ); $m->comp( '/Widgets/SelectionBox:process', %ARGS, self => $_ ) for @panes; rt-4.2.12/share/html/Prefs/Other.html000644 000765 000024 00000010275 12555754775 020004 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    % foreach my $section( RT->Config->Sections ) { <&|/Widgets/TitleBox, title => loc( $section ) &> % foreach my $option( RT->Config->Options( Section => $section ) ) { % next if $option eq 'EmailFrequency' && !RT->Config->Get('RecordOutgoingEmail'); % my $meta = RT->Config->Meta( $option ); <& $meta->{'Widget'}, Default => 1, %{ $m->comp('/Widgets/FinalizeWidgetArguments', WidgetArguments => $meta->{'WidgetArguments'} ) }, Name => $option, DefaultValue => scalar RT->Config->Get( $option ), CurrentValue => $preferences->{ $option }, &> % } % } % if ( RT->Config->Get('Crypt')->{'Enable'} ) { <&|/Widgets/TitleBox, title => loc( 'Cryptography' ) &> <&|/l&>Preferred key: <& /Elements/Crypt/SelectKeyForEncryption, EmailAddress => $UserObj->EmailAddress, Default => $UserObj->PreferredKey &> % } <& /Elements/Submit, Name => 'Update', Label => loc('Save Changes') &>
    <%INIT> my @results; my $title = loc("Preferences"); my $UserObj = $session{'CurrentUser'}->UserObj; my $preferences = $UserObj->Preferences( $RT::System ); if (defined($PreferredKey) and (not $UserObj->FirstAttribute('PreferredKey') or $PreferredKey ne $UserObj->FirstAttribute('PreferredKey')->Content)) { my ($code, $msg) = $UserObj->SetAttribute(Name => 'PreferredKey', Content => $PreferredKey); push @results, loc('Preferred Key: [_1]', $msg) unless $code; } if ( $Update ) { $preferences ||= {}; $m->comp( '/Widgets/BulkProcess', Meta => { map { $_ => RT->Config->Meta($_) } RT->Config->Options }, Store => $preferences, Types => [RT->Config->Options], Default => 1, Arguments => \%ARGS, DefaultValue => { map { $_ => RT->Config->Get($_) } RT->Config->Options }, ); my ($ok, $msg) = $UserObj->SetPreferences( $RT::System, $preferences ); push @results, $ok ? loc("Preferences saved.") : $msg; } <%ARGS> $Update => 0, $User => undef, $PreferredKey => undef, rt-4.2.12/share/html/Prefs/Quicksearch.html000644 000765 000024 00000007341 12555754775 021165 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@actions &>

    <&|/l&>Select queues to be displayed on the "RT at a glance" page

      % for my $queue (@queues) {
    • {$queue->Name}) { checked="checked" % } />
    • % }
    <& /Elements/Submit, Caption => loc("Save Changes"), Label => loc('Save'), Name => 'Save', Reset => 1, CheckAll => 1, ClearAll => 1, CheckboxNameRegex => '/^Want-/', &>
    <%INIT> my @actions; my $title = loc("Customize").' '.loc("Quick search"); my $user = $session{'CurrentUser'}->UserObj; my $unwanted = $user->Preferences('QuickSearch', {}); my $Queues = RT::Queues->new($session{'CurrentUser'}); $Queues->UnLimit; my $right = 'ShowTicket'; $m->callback( CallbackName => 'ModifyQueues', Queues => \$Queues, Right => \$right, Unwanted => $unwanted, ); my @queues = grep { $right ? $_->CurrentUserHasRight($right) : 1 } @{$Queues->ItemsArrayRef}; if ($ARGS{'Save'}) { for my $queue (@queues) { if ($ARGS{"Want-".$queue->Name}) { delete $unwanted->{$queue->Name}; } else { ++$unwanted->{$queue->Name}; } } my ($ok, $msg) = $user->SetPreferences('QuickSearch', $unwanted); push @actions, $ok ? loc('Preferences saved.') : $msg; } rt-4.2.12/share/html/Prefs/Search.html000644 000765 000024 00000011541 12555754775 020125 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@actions &> % if ($session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser')) {

    <&|/l&>You can also edit the predefined search itself: <% $search->Name %>

    % }
    <& /Search/Elements/DisplayOptions, %$SearchArg, %ARGS, AvailableColumns => $AvailableColumns, CurrentFormat => $CurrentFormat &> <& /Elements/Submit, Caption => loc("Save Changes"), Label => loc('Save'), Name => 'Save'&>
    <&|/Widgets/TitleBox, title => loc("Reset") &>
    <%INIT> my @actions; my $title = loc("Customize").' '; my @fields = qw(Format Order OrderBy RowsPerPage); $ARGS{name} ||= ''; my ($class, $id) = ( $ARGS{name} =~ m/^(.*)-(\d+)$/ ); Abort('No search specified') unless defined $class and $class eq 'RT::Attribute'; my $search = $class->new ($session{'CurrentUser'}); $search->LoadById ($id); # If we are resetting prefs, do so before attempting to load them if ($ARGS{'Reset'}) { my ($ok, $msg) = $session{'CurrentUser'}->UserObj->DeletePreferences($ARGS{name}); push @actions, $ok ? loc('Preferences reset.') : $msg; } $title .= loc (RT::SavedSearch->EscapeDescription($search->Description), loc ('"N"')); my $user = $session{'CurrentUser'}->UserObj; my $SearchArg = $user->Preferences($search, $search->Content); $ARGS{Order} = (ref $ARGS{Order} ? join('|',grep {/\S/} @{$ARGS{Order}}) : $ARGS{Order}); $ARGS{OrderBy} = (ref $ARGS{OrderBy} ? join('|',grep {/\S/} @{$ARGS{OrderBy}}) : $ARGS{OrderBy}); for (@fields) { $ARGS{$_} = $SearchArg->{$_} unless defined $ARGS{$_}; } $ARGS{'Order'} = join '|', grep defined && /\S/, (ref $ARGS{'Order'})? @{$ARGS{'Order'}}: $ARGS{'Order'}; $ARGS{'OrderBy'} = join '|', grep defined && /\S/, (ref $ARGS{'OrderBy'})? @{$ARGS{'OrderBy'}}: $ARGS{'OrderBy'}; my ( $AvailableColumns, $CurrentFormat ); ( $ARGS{Format}, $AvailableColumns, $CurrentFormat ) = $m->comp( '/Search/Elements/BuildFormatString', %ARGS ); if ($ARGS{'Save'}) { my $hash = {map { $_ => $ARGS{$_}} @fields}; my ($ok, $msg) = $user->SetPreferences($search, $hash); push @actions, $ok ? loc('Preferences saved.') : $msg; } rt-4.2.12/share/html/Prefs/SearchOptions.html000644 000765 000024 00000010013 12555754775 021472 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Search Preferences") &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@actions &>
    <& /Search/Elements/DisplayOptions, %ARGS, Format=> $Format, AvailableColumns => $AvailableColumns, CurrentFormat => $CurrentFormat, RowsPerPage => $RowsPerPage, OrderBy => $OrderBy, Order => $Order &> <& /Elements/Submit, Name => 'SavePreferences', Label => loc('Save Changes') &>
    <%INIT> my @actions; # If we're saving search preferences, do that now $Order = join '|', grep defined && /\S/, (ref $Order)? @{$Order}: $Order; $OrderBy = join '|', grep defined && /\S/, (ref $OrderBy)? @{$OrderBy}: $OrderBy; $Order = (ref $Order ? join('|',grep {/\S/} @{$Order}) : $Order); $OrderBy = (ref $OrderBy ? join('|',grep {/\S/} @{$OrderBy}) : $OrderBy); if ($ARGS{'SavePreferences'}) { my ($ok, $msg) = $session{'CurrentUser'}->UserObj->SetPreferences("SearchDisplay", { Format => $Format, Order => $Order, OrderBy => $OrderBy, RowsPerPage => $RowsPerPage, }); push @actions, $ok ? loc("Preferences saved.") : $msg; } # Read from user preferences my $prefs = $session{'CurrentUser'}->UserObj->Preferences("SearchDisplay") || {}; $Format ||= $prefs->{'Format'}; $Order ||= ($prefs->{'Order'} || RT->Config->Get('DefaultSearchResultOrder')); $OrderBy ||= ($prefs->{'OrderBy'} || RT->Config->Get('DefaultSearchResultOrderBy')); ($RowsPerPage = defined( $prefs->{'RowsPerPage'} ) ? $prefs->{'RowsPerPage'} : 50) unless defined ($RowsPerPage); my ( $AvailableColumns, $CurrentFormat ); ( $Format, $AvailableColumns, $CurrentFormat ) = $m->comp( '/Search/Elements/BuildFormatString', %ARGS, Format => $Format ); <%ARGS> $Format => undef $Description => undef $Order => undef $OrderBy => undef $RowsPerPage => undef rt-4.2.12/share/html/NoAuth/css/000755 000765 000024 00000000000 12555754775 016737 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/NoAuth/Helpers/000755 000765 000024 00000000000 12555754775 017551 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/NoAuth/iCal/000755 000765 000024 00000000000 12555754775 017017 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/NoAuth/js/000755 000765 000024 00000000000 12555754775 016563 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/NoAuth/Login.html000644 000765 000024 00000004416 12555754775 020112 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> my ($good, $msg) = RT::Interface::Web::AttemptPasswordAuthentication(\%ARGS); $ARGS{'actions'} = [$msg] if not $good and $msg; % if ( RT::Interface::Web::MobileClient() || $ARGS{mobile} ) { <& /m/_elements/login, %ARGS &> % } else { <& /Elements/Login, %ARGS &> % } rt-4.2.12/share/html/NoAuth/Logout.html000644 000765 000024 00000005720 12555754775 020312 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Logout'), Refresh => RT->Config->Get('LogoutRefresh') &>
    <& /Elements/Footer, Menu => 0 &> % $m->abort(); <%INIT> my $URL = RT->Config->Get('WebPath')."/"; # Allow a callback to modify the URL we redirect to, which is useful for # external webauth systems $m->callback( %ARGS, CallbackName => 'ModifyLoginRedirect', URL => \$URL ); $m->callback( %ARGS, CallbackName => 'BeforeSessionDelete' ); if (keys %session) { RT::Interface::Web::InstantiateNewSession(); $session{'CurrentUser'} = RT::CurrentUser->new; } $m->callback( %ARGS, CallbackName => 'AfterSessionDelete' ); $m->notes->{RefreshURL} = $URL; rt-4.2.12/share/html/NoAuth/RichText/000755 000765 000024 00000000000 12555754775 017701 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/NoAuth/rss/000755 000765 000024 00000000000 12555754775 016756 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/NoAuth/rss/dhandler000644 000765 000024 00000005531 12555754775 020466 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> my $path = $m->dhandler_arg; my $notfound = sub { my $mesg = shift; $r->headers_out->{'Status'} = '404 Not Found'; $RT::Logger->info("Error encountered in rss generation: $mesg"); $m->clear_and_abort; }; $notfound->("Invalid path: $path") unless $path =~ m!^([^/]+)/([^/]+)/?!; my ( $name, $auth ) = ( $1, $2 ); # Unescape parts $name =~ s/\%([0-9a-z]{2})/chr(hex($1))/gei; # convert to perl strings $name = Encode::decode( "UTF-8", $name); my $user = RT::User->new(RT->SystemUser); $user->Load($name); $notfound->("Invalid user: $user") unless $user->id; $notfound->("Invalid authstring") unless $user->ValidateAuthString( $auth, $ARGS{Query} . $ARGS{Order} . $ARGS{OrderBy} ); my $cu = RT::CurrentUser->new; $cu->Load($user); local $session{'CurrentUser'} = $cu; $m->comp("/Search/Elements/ResultsRSSView", %ARGS); rt-4.2.12/share/html/NoAuth/RichText/autohandler000644 000765 000024 00000004326 12555754775 022137 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> my $file = $m->base_comp->source_file; if ($file =~ m{RichText/+ckeditor}) { $RT::Logger->crit("Invalid request directly to the rich text editor: $file"); $m->abort(403); } else { $m->call_next(); } rt-4.2.12/share/html/NoAuth/js/autohandler000644 000765 000024 00000004204 12555754775 021014 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> RT::Interface::Web::StaticFileHeaders(); $r->content_type('application/x-javascript; charset=utf-8'); $m->call_next(); return(); rt-4.2.12/share/html/NoAuth/js/dhandler000644 000765 000024 00000004534 12555754775 020275 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $arg = $m->dhandler_arg; if ( $arg =~ m{squished-[a-f0-9]{32}\.js$} ) { my $squished = RT::Interface::Web::SquishedJS(); # Don't send Last-Modified since we don't handle If-Modified-Since #$r->header_out( 'Last-Modified' => $squished->ModifiedTimeString ); $m->out( $squished->Content ); } else { return $m->decline; } rt-4.2.12/share/html/NoAuth/iCal/dhandler000644 000765 000024 00000012517 12555754775 020531 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> use Data::ICal; use Data::ICal::Entry::Event; my $path = $m->dhandler_arg; my $notfound = sub { $r->headers_out->{'Status'} = '404 Not Found'; $m->clear_and_abort; }; $notfound->() unless $path =~ m!^([^/]+)/([^/]+)/(.*)(\.(ical|ics))?!; my ($name, $auth, $search) = ($1, $2, $3); # Unescape parts $_ =~ s/\%([0-9a-z]{2})/chr(hex($1))/gei for $name, $search; # Decode from bytes to characters $_ = Encode::decode( "UTF-8", $_ ) for $name, $search; my $user = RT::User->new( RT->SystemUser ); $user->Load( $name ); $notfound->() unless $user->id; $notfound->() unless $user->ValidateAuthString( $auth, $search ); my $cu = RT::CurrentUser->new; $cu->Load($user); my $tickets = RT::Tickets->new( $cu ); $tickets->FromSQL($search); $r->headers_out->{'Content-Type'} = 'text/calendar; charset=utf-8'; my $feed = Data::ICal->new(); $feed->add_properties('x-wr-calname' => ["RT due dates" => {value => "TEXT"}]); $feed->add_properties('x-wr-caldesc' => ["Due dates for RT tickets: $search" => {value => "TEXT"}]); $feed->add_properties('calscale' => ['gregorian']); $feed->add_properties('method' => ['publish']); $feed->add_properties('prodid' => ["-//" . RT->Config->Get('rtname') ."//"]); while (my $t = $tickets->Next) { next unless $t->DueObj->IsSet; my $starttime = $t->StartsObj->IsSet ? $t->StartsObj : $t->CreatedObj; my $url; if ( RT->Config->Get('CanonicalizeURLsInFeeds') ) { $url = RT->Config->Get('WebURL'); } else { $url = RT::Interface::Web::GetWebURLFromRequest(); } $url .= "Ticket/Display.html?id=".$t->id, my $now = RT::Date->new( $cu ); $now->SetToNow; my $start = Data::ICal::Entry::Event->new; my $end = Data::ICal::Entry::Event->new; $_->add_properties( url => $url, description => $url, organizer => $t->OwnerObj->Name, dtstamp => $now->iCal, created => $t->CreatedObj->iCal, 'last-modified' => $t->LastUpdatedObj->iCal, ) for $start, $end; my %time = ( Time => 0 ); my %ical_value = ( value => 'DATE' ); if ( defined $ARGS{Time} ? $ARGS{Time} : RT->Config->Get('TimeInICal', $user) ) { $time{Time} = 1; $ical_value{value} = 'DATE-TIME'; } if( $ARGS{SingleEvent} ){ $start->add_properties( summary => $t->Subject, dtstart => [$starttime->iCal( %time ) => \%ical_value ], dtend => [$t->DueObj->iCal( %time ) => \%ical_value ], ); $feed->add_entry($start); } else{ $start->add_properties( summary => "Start: ".$t->Subject, dtstart => [$starttime->iCal( %time ) => \%ical_value ], dtend => [$starttime->iCal( %time ) => \%ical_value ], ); $end->add_properties( summary => "Due: ".$t->Subject, dtstart => [$t->DueObj->iCal( %time ) => \%ical_value ], dtend => [$t->DueObj->iCal( %time ) => \%ical_value ], ); $feed->add_entry($start); $feed->add_entry($end); } } $m->clear_buffer; $m->out($feed->as_string); $m->abort; rt-4.2.12/share/html/NoAuth/Helpers/CustomLogo/000755 000765 000024 00000000000 12555754775 021644 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/NoAuth/Helpers/CustomLogo/dhandler000644 000765 000024 00000004564 12555754775 023361 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> if ( my $attr = $RT::System->FirstAttribute('UserLogo') ) { # The extra path in the url doesn't matter, we always want to serve the # latest logo if we have one. RT::Interface::Web::StaticFileHeaders(); my $content = $attr->Content; $r->content_type( $content->{type} ); $m->out( $content->{data} ); } else { # 404 return $m->decline; } rt-4.2.12/share/html/NoAuth/css/aileron/000755 000765 000024 00000000000 12555754775 020370 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/NoAuth/css/autohandler000644 000765 000024 00000004165 12555754775 021176 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> RT::Interface::Web::StaticFileHeaders(); $r->content_type('text/css; charset=utf-8') ; $m->call_next(); return(); rt-4.2.12/share/html/NoAuth/css/ballard/000755 000765 000024 00000000000 12555754775 020340 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/NoAuth/css/base/000755 000765 000024 00000000000 12555754775 017651 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/NoAuth/css/dhandler000644 000765 000024 00000004635 12555754775 020453 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ONCE> my $squisher; <%INIT> my $arg = $m->dhandler_arg; if ( $arg =~ m{(.*)/squished-[0-9a-f]{32}\.css$} ) { my $style = $1; my $squished = RT::Interface::Web::SquishedCSS( $style ); # Don't send Last-Modified since we don't handle If-Modified-Since #$r->header_out( 'Last-Modified' => $squished->ModifiedTimeString ); $m->out( $squished->Content ); } else { return $m->decline; } rt-4.2.12/share/html/NoAuth/css/rudder/000755 000765 000024 00000000000 12555754775 020224 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/NoAuth/css/web2/000755 000765 000024 00000000000 12555754775 017576 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/NoAuth/css/web2/AfterMenus000644 000765 000024 00000006323 12555754775 021576 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} rt-4.2.12/share/html/NoAuth/css/web2/InHeader000644 000765 000024 00000004434 12555754775 021205 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} rt-4.2.12/share/html/NoAuth/css/rudder/AfterMenus000644 000765 000024 00000005547 12555754775 022233 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} rt-4.2.12/share/html/NoAuth/css/rudder/InHeader000644 000765 000024 00000004210 12555754775 021623 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} rt-4.2.12/share/html/NoAuth/css/base/farbtastic.css000644 000765 000024 00000002772 12555754775 022515 0ustar00sartakstaff000000 000000 /** * Farbtastic Color Picker 1.2 * © 2008 Steven Wittens * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ .farbtastic { position: relative; } .farbtastic * { position: absolute; cursor: crosshair; } .farbtastic, .farbtastic .wheel { width: 195px; height: 195px; } .farbtastic .color, .farbtastic .overlay { top: 47px; left: 47px; width: 101px; height: 101px; } .farbtastic .wheel { background: url(<%RT->Config->Get('WebPath')%>/NoAuth/images/farbtastic/wheel.png) no-repeat; width: 195px; height: 195px; } .farbtastic .overlay { background: url(<%RT->Config->Get('WebPath')%>/NoAuth/images/farbtastic/mask.png) no-repeat; } .farbtastic .marker { width: 17px; height: 17px; margin: -8px 0 0 -8px; overflow: hidden; background: url(<%RT->Config->Get('WebPath')%>/NoAuth/images/farbtastic/marker.png) no-repeat; } rt-4.2.12/share/html/NoAuth/css/ballard/InHeader000644 000765 000024 00000004437 12555754775 021752 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} rt-4.2.12/share/html/NoAuth/css/aileron/AfterMenus000644 000765 000024 00000005535 12555754775 022374 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} rt-4.2.12/share/html/NoAuth/css/aileron/InHeader000644 000765 000024 00000004441 12555754775 021775 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} rt-4.2.12/share/html/m/_elements/000755 000765 000024 00000000000 12555754775 017160 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/m/dhandler000644 000765 000024 00000004223 12555754775 016712 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> # deal with users who don't have options indexes set right RT::Interface::Web::Redirect(RT->Config->Get('WebURL')."m/index.html"); $m->abort(); rt-4.2.12/share/html/m/index.html000644 000765 000024 00000004172 12555754775 017206 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| _elements/wrapper, title => loc("RT for [_1]",RT->Config->Get('rtname'))&> <& _elements/menu &> <& _elements/full_site_link &> rt-4.2.12/share/html/m/logout000644 000765 000024 00000004275 12555754775 016451 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> if (keys %session) { RT::Interface::Web::InstantiateNewSession(); $session{'CurrentUser'} = RT::CurrentUser->new; } RT::Interface::Web::Redirect(RT->Config->Get('WebURL')."m/"); rt-4.2.12/share/html/m/ticket/000755 000765 000024 00000000000 12555754775 016470 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/m/tickets/000755 000765 000024 00000000000 12555754775 016653 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/m/tickets/search000644 000765 000024 00000010023 12555754775 020037 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $page => 1 $order_by => 'id' $order => 'desc' $name => undef <%init> use RT::Search::Simple; my $query = $ARGS{'query'}; if ($ARGS{'q'}) { my $tickets = RT::Tickets->new( $session{'CurrentUser'} ); my %args = ( Argument => $ARGS{q}, TicketsObj => $tickets, ); my $search = RT::Search::Simple->new(%args); $query = $search->QueryToSQL(); } elsif ($ARGS{'name'}) { my $search_arg; my $search; if ($name) { ($search) = RT::System->new( $session{'CurrentUser'} )->Attributes->Named( 'Search - ' . $name ); unless ( $search && $search->Id ) { my (@custom_searches) = RT::System->new( $session{'CurrentUser'} )->Attributes->Named('SavedSearch'); foreach my $custom (@custom_searches) { if ( $custom->Description eq $name ) { $search = $custom; last } } unless ( $search && $search->id ) { $m->out(loc("Predefined search [_1] not found", $m->interp->apply_escapes($name, 'h'))); return; } } $search_arg = $session{'CurrentUser'}->UserObj->Preferences( $search, $search->Content ); } foreach ($search_arg) { if ( $_->{'Query'} =~ /__Bookmarks__/ ) { $_->{'Rows'} = 999; # DEPRECATED: will be here for a while up to 4.4 RT->Deprecated( Remove => "4.4", Instead => "id = '__Bookmarked__'", Message => "The __Bookmarks__ query syntax is deprecated", Object => $search, ); my @bookmarks = $session{'CurrentUser'}->UserObj->Bookmarks; my $query = join(" OR ", map " id = '$_' ", @bookmarks ) || 'id=0'; $_->{'Query'} =~ s/__Bookmarks__/( $query )/g; } } $query = $search_arg->{Query}; $order_by = $search_arg->{OrderBy}; $order = $search_arg->{Order}; } $m->comp('../_elements/ticket_list', query => $query, page => $page, order_by => $order_by, order => $order); $m->abort(); rt-4.2.12/share/html/m/ticket/autohandler000644 000765 000024 00000004317 12555754775 020726 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> # Redirect to the approvals view if we're trying to get an approvals ticket MaybeRedirectToApproval( Whitelist => qr{/(?:create|select_create_queue)$}i, ARGSRef => \%ARGS, ); $m->call_next; rt-4.2.12/share/html/m/ticket/create000644 000765 000024 00000032640 12555754775 017663 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $QuoteTransaction => undef $CloneTicket => undef <%init> $m->callback( CallbackName => "Init", ARGSRef => \%ARGS ); my $Queue = $ARGS{Queue}; my $escape = sub { $m->interp->apply_escapes(shift, 'h') }; my $showrows = sub { my @pairs = @_; while (@pairs) { my $key = shift @pairs; my $val = shift @pairs; $m->out("
    $key
    $val
    "); } }; my $CloneTicketObj; if ($CloneTicket) { $CloneTicketObj = RT::Ticket->new( $session{CurrentUser} ); $CloneTicketObj->Load($CloneTicket) or Abort( loc("Ticket could not be loaded") ); my $clone = { Requestors => join( ',', $CloneTicketObj->RequestorAddresses ), Cc => join( ',', $CloneTicketObj->CcAddresses ), AdminCc => join( ',', $CloneTicketObj->AdminCcAddresses ), InitialPriority => $CloneTicketObj->Priority, }; $clone->{$_} = $CloneTicketObj->$_() for qw/Owner Subject FinalPriority TimeEstimated TimeWorked Status TimeLeft/; $clone->{$_} = $CloneTicketObj->$_->AsString for grep { $CloneTicketObj->$_->IsSet } map { $_ . "Obj" } qw/Starts Started Due Resolved/; my $get_link_value = sub { my ($link, $type) = @_; my $uri_method = $type . 'URI'; my $local_method = 'Local' . $type; my $uri = $link->$uri_method; return if $uri->IsLocal and $uri->Object and $uri->Object->isa('RT::Ticket') and $uri->Object->Type eq 'reminder'; return $link->$local_method || $uri->URI; }; my (@refers, @refers_by); my $refers = $CloneTicketObj->RefersTo; while ( my $refer = $refers->Next ) { my $refer_value = $get_link_value->($refer, 'Target'); push @refers, $refer_value if defined $refer_value; } $clone->{'new-RefersTo'} = join ' ', @refers; my $refers_by = $CloneTicketObj->ReferredToBy; while ( my $refer_by = $refers_by->Next ) { my $refer_by_value = $get_link_value->($refer_by, 'Base'); push @refers_by, $refer_by_value if defined $refer_by_value; } $clone->{'RefersTo-new'} = join ' ', @refers_by; my $cfs = $CloneTicketObj->QueueObj->TicketCustomFields(); while ( my $cf = $cfs->Next ) { my $cf_id = $cf->id; my $cf_values = $CloneTicketObj->CustomFieldValues( $cf->id ); my @cf_values; while ( my $cf_value = $cf_values->Next ) { push @cf_values, $cf_value->Content; } $clone->{GetCustomFieldInputName( CustomField => $cf )} = join "\n", @cf_values; } for ( keys %$clone ) { $ARGS{$_} = $clone->{$_} if not defined $ARGS{$_}; } } my @results; my $title = loc("Create a ticket"); my $QueueObj = RT::Queue->new($session{'CurrentUser'}); $QueueObj->Load($Queue) || Abort(loc("Queue could not be loaded.")); $m->callback( QueueObj => $QueueObj, title => \$title, results => \@results, ARGSRef => \%ARGS ); $QueueObj->Disabled && Abort(loc("Cannot create tickets in a disabled queue.")); ProcessAttachments(ARGSRef => \%ARGS); my $checks_failure = 0; { my ($status, @msg) = $m->comp( '/Elements/ValidateCustomFields', CustomFields => $QueueObj->TicketCustomFields, ARGSRef => \%ARGS ); unless ( $status ) { $checks_failure = 1; push @results, @msg; } } my $gnupg_widget = $m->comp('/Elements/Crypt/SignEncryptWidget:new', Arguments => \%ARGS ); $m->comp( '/Elements/Crypt/SignEncryptWidget:Process', self => $gnupg_widget, QueueObj => $QueueObj, ); if ( !exists $ARGS{'AddMoreAttach'} && ($ARGS{'id'}||'') eq 'new' ) { my $status = $m->comp('/Elements/Crypt/SignEncryptWidget:Check', self => $gnupg_widget, Operation => 'Create', QueueObj => $QueueObj, ); $checks_failure = 1 unless $status; } # check email addresses for RT's { foreach my $field ( qw(Requestors Cc AdminCc) ) { my $value = $ARGS{ $field }; next unless defined $value && length $value; my @emails = Email::Address->parse( $value ); foreach my $email ( grep RT::EmailParser->IsRTAddress($_->address), @emails ) { push @results, loc("[_1] is an address RT receives mail at. Adding it as a '[_2]' would create a mail loop", $email->format, loc($field =~ /^(.*?)s?$/) ); $checks_failure = 1; $email = undef; } $ARGS{ $field } = join ', ', map $_->format, grep defined, @emails; } } my $skip_create = 0; $m->callback( CallbackName => 'BeforeCreate', ARGSRef => \%ARGS, skip_create => \$skip_create, checks_failure => $checks_failure, results => \@results ); if ((!exists $ARGS{'AddMoreAttach'}) and (defined($ARGS{'id'}) and $ARGS{'id'} eq 'new')) { # new ticket? if ( !$checks_failure && !$skip_create ) { $m->comp('show', %ARGS); $RT::Logger->crit("After display call; error is $@"); $m->abort(); } } <&| /m/_elements/wrapper, title => $title &> <& /Elements/ListActions, actions => \@results &>
    % $m->callback( CallbackName => 'FormStart', QueueObj => $QueueObj, ARGSRef => \%ARGS ); % if ($gnupg_widget) { <& /Elements/Crypt/SignEncryptWidget:ShowIssues, self => $gnupg_widget &> % }
    <&| /Widgets/TitleBox, title => $QueueObj->Name &> <%perl> $showrows->( loc("Subject") => ''); <& /Elements/MessageBox, exists $ARGS{Content} ? (Default => $ARGS{Content}, IncludeSignature => 0 ) : ( QuoteTransaction => $QuoteTransaction ), Height => 5 &> <&/Elements/Submit, Label => loc("Create") &>
    <&| /Widgets/TitleBox &> <%perl> $showrows->( # loc('Queue') => $m->scomp( '/Ticket/Elements/ShowQueue', QueueObj => $QueueObj ) , loc('Status') => $m->scomp( "/Ticket/Elements/SelectStatus", Name => "Status", QueueObj => $QueueObj, ), loc("Owner") => $m->scomp( "/Elements/SelectOwner", Name => "Owner", QueueObj => $QueueObj, Default => $ARGS{Owner} || RT->Nobody->Id, DefaultValue => 0 ), loc("Requestors") => $m->scomp( "/Elements/EmailInput", Name => 'Requestors', Size => '40', Default => $ARGS{Requestors} // $session{CurrentUser}->EmailAddress ), loc("Cc") => $m->scomp( "/Elements/EmailInput", Name => 'Cc', Size => '40', Default => $ARGS{Cc} ) . '' . loc( "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people will receive future updates.)" ) . '', loc("Admin Cc") => $m->scomp( "/Elements/EmailInput", Name => 'AdminCc', Size => '40', Default => $ARGS{AdminCc} ) . '' . loc( "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people will receive future updates.)" ) . '', ); <& /Elements/EditCustomFields, %ARGS, Object => RT::Ticket->new($session{CurrentUser}), CustomFields => $QueueObj->TicketCustomFields, AsTable => 0, &> <& /Ticket/Elements/EditTransactionCustomFields, %ARGS, QueueObj => $QueueObj &> % if ( my $attachments = $session{'Attachments'}{ $ARGS{'Token'} }) { <%loc("Attached file") %> <%loc("Check box to delete")%>
    % foreach my $attach_name ( keys %$attachments ) {
    % } # end of foreach % } # end of if <%perl> $showrows->( loc("Attach file") => ' ' ); % if ( $gnupg_widget ) { <& /Elements/Crypt/SignEncryptWidget, self => $gnupg_widget, QueueObj => $QueueObj &> % }
    <&| /Widgets/TitleBox, title => loc('The Basics'), title_class=> 'inverse', color => "#993333" &> <%perl> $showrows->( loc("Priority") => $m->scomp( "/Elements/SelectPriority", Name => "InitialPriority", Default => $ARGS{InitialPriority} ? $ARGS{InitialPriority} : $QueueObj->InitialPriority, ), loc("Final Priority") => $m->scomp( "/Elements/SelectPriority", Name => "FinalPriority", Default => $ARGS{FinalPriority} ? $ARGS{FinalPriority} : $QueueObj->FinalPriority, ), loc("Time Estimated") => ''.$m->scomp( "/Elements/EditTimeValue", Name => 'TimeEstimated', Default => $ARGS{TimeEstimated} || '', ).'', loc("Time Worked") => ''.$m->scomp( "/Elements/EditTimeValue", Name => 'TimeWorked', Default => $ARGS{TimeWorked} || '', ). '', loc("Time Left") => ''.$m->scomp( "/Elements/EditTimeValue", Name => 'TimeLeft', Default => $ARGS{TimeLeft} || '', ).'', ); <&|/Widgets/TitleBox, title => loc("Dates"), title_class=> 'inverse', color => "#663366" &> <%perl> $showrows->( loc("Starts") => $m->scomp( "/Elements/SelectDate", Name => "Starts", Default => ( $ARGS{Starts} || '' )), loc("Due") => $m->scomp( "/Elements/SelectDate", Name => "Due", Default => ($ARGS{Due} || '' )) ); <&|/Widgets/TitleBox, title => loc('Links'), title_class=> 'inverse' &> <%loc("(Enter ticket ids or URLs, separated with spaces)")%> <%perl> $showrows->( loc("Depends on") => '', loc("Depended on by") => '', loc("Parents") => '', loc("Children") => '', loc("Refers to") => '', loc("Referred to by") => '' ); <& /Elements/Submit, Label => loc("Create") &> rt-4.2.12/share/html/m/ticket/history000644 000765 000024 00000005310 12555754775 020113 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $id => undef <%init> my $t = RT::Ticket->new($session{CurrentUser}); $t->Load($id); my $history = $t->Transactions()->ItemsArrayRef; <&| /m/_elements/wrapper, title => loc("#[_1]: [_2]", $t->Id, $t->Subject || '') &>
    <& /m/_elements/ticket_menu, ticket => $t &> <&|/Widgets/TitleBox &>
      % for my $entry (reverse @$history) {
    • <% $entry->CreatedObj->AgeAsString() %> - <& /Elements/ShowUser, User => $entry->CreatorObj, Link => 0 &> - <%$entry->BriefDescription%> % if ($entry->Type !~ /EmailRecord/) { % if ($entry->ContentObj) {
      <%$entry->Content%>
      %} % }
    • % }
    rt-4.2.12/share/html/m/ticket/reply000644 000765 000024 00000021565 12555754775 017557 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/m/_elements/wrapper, title => loc('Update ticket #[_1]', $t->id) &> <& /m/_elements/ticket_menu, ticket => $t &> <& /Elements/ListActions, actions => \@results &>
    <&|/Widgets/TitleBox &>
    % if ($gnupg_widget) { <& /Elements/Crypt/SignEncryptWidget:ShowIssues, self => $gnupg_widget &> % }
    <&|/l&>Status:
    <& /Ticket/Elements/SelectStatus, Name=>"Status", TicketObj => $t, Default => $DefaultStatus &>
    <&|/l&>Owner:
    <& /Elements/SelectOwner, Name => "Owner", TicketObj => $t, QueueObj => $t->QueueObj, DefaultLabel => loc("[_1] (Unchanged)", $t->OwnerObj->Format), Default => $ARGS{'Owner'} &>
    <&|/l&>Worked: <& /Elements/EditTimeValue, Name => 'UpdateTimeWorked', Default => $ARGS{UpdateTimeWorked}||'', &>
    % $m->callback( %ARGS, CallbackName => 'AfterWorked', Ticket => $t );
    <&|/l&>Update Type:
    <&|/l&>Subject:
    % $m->callback( %ARGS, CallbackName => 'AfterSubject' );
    <&|/l&>One-time Cc:<& /Elements/EmailInput, Name => 'UpdateCc', Size => '60', Default => $ARGS{UpdateCc} &>
    <&|/l&>One-time Bcc:<& /Elements/EmailInput, Name => 'UpdateBcc', Size => '60', Default => $ARGS{UpdateBcc} &>
    <&|/l&>Message:
    % if (exists $ARGS{UpdateContent}) { % # preserve QuoteTransaction so we can use it to set up sane references/in/reply to % my $temp = $ARGS{'QuoteTransaction'}; % delete $ARGS{'QuoteTransaction'}; <& /Elements/MessageBox, Name=>"UpdateContent", Default=>$ARGS{UpdateContent}, IncludeSignature => 0, %ARGS&> % $ARGS{'QuoteTransaction'} = $temp; % } else { % my $IncludeSignature = 1; % $IncludeSignature = 0 if $Action ne 'Respond' && !RT->Config->Get('MessageBoxIncludeSignatureOnComment'); <& /Elements/MessageBox, Name=>"UpdateContent", IncludeSignature => $IncludeSignature, %ARGS &> % }
    % if (exists $session{'Attachments'}) { <%loc("Attached file") %> <%loc("Check box to delete")%>
    % foreach my $attach_name (keys %{$session{'Attachments'}}) { <%$attach_name%>
    % } # end of foreach % } # end of if
    <&|/l&>Attach file:
    " />
    % if ( $gnupg_widget ) { <& /Elements/Crypt/SignEncryptWidget, self => $gnupg_widget, QueueObj => $t->QueueObj &> % } <& /Elements/Submit, Label => loc('Update Ticket'), Name => 'SubmitTicket' &>
    <%INIT> my $CanRespond = 0; my $CanComment = 0; my $checks_failure = 0; my $title; my $t = LoadTicket($id); my @results; $m->callback( Ticket => $t, ARGSRef => \%ARGS, results => \@results, CallbackName => 'Initial' ); unless($DefaultStatus){ $DefaultStatus=($ARGS{'Status'} ||$t->Status()); } if ($DefaultStatus eq 'new'){ $DefaultStatus='open'; } if ($DefaultStatus eq 'resolved') { $title = loc("Resolve ticket #[_1] ([_2])", $t->id, $t->Subject); } else { $title = loc("Update ticket #[_1] ([_2])", $t->id, $t->Subject); } # Things needed in the template - we'll do the processing here, just # for the convenience: my ($CommentDefault, $ResponseDefault); if ($Action ne 'Respond') { $CommentDefault = qq[ selected="selected"]; $ResponseDefault = ""; } else { $CommentDefault = ""; $ResponseDefault = qq[ selected="selected"]; } $CanRespond = 1 if ( $t->CurrentUserHasRight('ReplyToTicket') or $t->CurrentUserHasRight('ModifyTicket') ); $CanComment = 1 if ( $t->CurrentUserHasRight('CommentOnTicket') or $t->CurrentUserHasRight('ModifyTicket') ); ProcessAttachments(ARGSRef => \%ARGS); # check email addresses for RT's { foreach my $field ( qw(UpdateCc UpdateBcc) ) { my $value = $ARGS{ $field }; next unless defined $value && length $value; my @emails = Email::Address->parse( $value ); foreach my $email ( grep RT::EmailParser->IsRTAddress($_->address), @emails ) { push @results, loc("[_1] is an address RT receives mail at. Adding it as a '[_2]' would create a mail loop", $email->format, loc(substr($field, 6)) ); $checks_failure = 1; $email = undef; } $ARGS{ $field } = join ', ', map $_->format, grep defined, @emails; } } my $gnupg_widget = $m->comp('/Elements/Crypt/SignEncryptWidget:new', Arguments => \%ARGS ); $m->comp( '/Elements/Crypt/SignEncryptWidget:Process', self => $gnupg_widget, TicketObj => $t, ); my $skip_update = 0; $m->callback( CallbackName => 'BeforeUpdate', ARGSRef => \%ARGS, skip_update => \$skip_update, checks_failure => $checks_failure, results => \@results, TicketObj => $t ); if ( !$checks_failure && !$skip_update && exists $ARGS{SubmitTicket} ) { my $status = $m->comp('/Elements/Crypt/SignEncryptWidget:Check', self => $gnupg_widget, TicketObj => $t, ); $checks_failure = 1 unless $status; $m->callback( Ticket => $t, ARGSRef => \%ARGS, CallbackName => 'BeforeDisplay' ); return $m->comp('/m/ticket/show', TicketObj => $t, %ARGS); } <%ARGS> $id => undef $Action => 'Respond' $DefaultStatus => undef rt-4.2.12/share/html/m/ticket/select_create_queue000644 000765 000024 00000004714 12555754775 022427 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> my $queues = RT::Queues->new($session{'CurrentUser'}); $queues->UnLimit(); <&| /m/_elements/wrapper, title => loc("Create a ticket") &>
    <&|/Widgets/TitleBox, title => loc("Select a queue") &>
    rt-4.2.12/share/html/m/ticket/show000644 000765 000024 00000036113 12555754775 017377 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $id => undef <%init> my $Ticket; my @Actions; unless ($id) { Abort('No ticket specified'); } if ($ARGS{'id'} eq 'new') { # {{{ Create a new ticket my $Queue = RT::Queue->new( $session{'CurrentUser'} ); $Queue->Load($ARGS{'Queue'}); unless ( $Queue->id ) { Abort('Queue not found'); } unless ( $Queue->CurrentUserHasRight('CreateTicket') ) { Abort('You have no permission to create tickets in that queue.'); } ($Ticket, @Actions) = CreateTicket( %ARGS ); unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) { Abort("No permission to view newly created ticket #".$Ticket->id."."); } } else { $Ticket ||= LoadTicket($ARGS{'id'}); $m->callback( CallbackName => 'BeforeProcessArguments', TicketObj => $Ticket, ActionsRef => \@Actions, ARGSRef => \%ARGS ); if ( defined $ARGS{'Action'} ) { if ($ARGS{'Action'} =~ /^(Steal|Delete|Take|SetTold)$/) { my $action = $1; my ($res, $msg) = $Ticket->$action(); push(@Actions, $msg); } } $m->callback(CallbackName => 'ProcessArguments', Ticket => $Ticket, ARGSRef => \%ARGS, Actions => \@Actions); push @Actions, ProcessUpdateMessage( ARGSRef => \%ARGS, Actions => \@Actions, TicketObj => $Ticket, ); #Process status updates push @Actions, ProcessTicketWatchers(ARGSRef => \%ARGS, TicketObj => $Ticket ); push @Actions, ProcessTicketBasics( ARGSRef => \%ARGS, TicketObj => $Ticket ); push @Actions, ProcessTicketLinks( ARGSRef => \%ARGS, TicketObj => $Ticket ); push @Actions, ProcessTicketDates( ARGSRef => \%ARGS, TicketObj => $Ticket ); push @Actions, ProcessObjectCustomFieldUpdates(ARGSRef => \%ARGS, TicketObj => $Ticket ); push @Actions, ProcessTicketReminders( ARGSRef => \%ARGS, TicketObj => $Ticket ); unless ($Ticket->CurrentUserHasRight('ShowTicket')) { if (@Actions) { Abort("A change was applied successfully, but you no longer have permissions to view the ticket", Actions => \@Actions); } else { Abort("No permission to view ticket"); } } if ( $ARGS{'MarkAsSeen'} ) { $Ticket->SetAttribute( Name => 'User-'. $Ticket->CurrentUser->id .'-SeenUpTo', Content => $Ticket->LastUpdated, ); push @Actions, loc('Marked all messages as seen'); } } $m->callback( CallbackName => 'BeforeDisplay', TicketObj => \$Ticket, Actions => \@Actions, ARGSRef => \%ARGS, ); # This code does automatic redirection if any updates happen. if (@Actions) { # We've done something, so we need to clear the decks to avoid # resubmission on refresh. # But we need to store Actions somewhere too, so we don't lose them. my $key = Digest::MD5::md5_hex( rand(1024) ); push @{ $session{"Actions"}->{$key} ||= [] }, @Actions; $session{'i'}++; my $url = RT->Config->Get('WebURL') . "m/ticket/show?id=" . $Ticket->id . "&results=" . $key; $url .= '#' . $ARGS{Anchor} if $ARGS{Anchor}; RT::Interface::Web::Redirect($url); } # If we haven't been passed in an Attachments object (through the precaching mechanism) # then we need to find one my $Attachments = $Ticket->Attachments; my %documents; while ( my $attach = $Attachments->Next() ) { next unless ($attach->Filename()); unshift( @{ $documents{ $attach->Filename } }, $attach ); } my $CustomFields = $Ticket->CustomFields; $m->callback( CallbackName => 'MassageCustomFields', Object => $Ticket, CustomFields => $CustomFields, ); my $print_value = sub { my ($cf, $value) = @_; my $linked = $value->LinkValueTo; if ( defined $linked && length $linked ) { my $linked = $m->interp->apply_escapes( $linked, 'h' ); $m->out(''); } my $comp = "ShowCustomField". $cf->Type; $m->callback( CallbackName => 'ShowComponentName', Name => \$comp, CustomField => $cf, Object => $Ticket, ); if ( $m->comp_exists( $comp ) ) { $m->comp( $comp, Object => $value ); } else { $m->out( $m->interp->apply_escapes( $value->Content, 'h' ) ); } $m->out('') if defined $linked && length $linked; # This section automatically populates a div with the "IncludeContentForValue" for this custom # field if it's been defined if ( $cf->IncludeContentForValue ) { my $vid = $value->id; $m->out( '\n} ); $m->out( qq{\n} ); } }; <&| /m/_elements/wrapper, title => loc("#[_1]: [_2]", $Ticket->Id, $Ticket->Subject || '') &>
    <& /m/_elements/ticket_menu, ticket => $Ticket &> <&| /Widgets/TitleBox, title => loc('The Basics'), class => 'ticket-info-basics', &>
    <&|/l&>Id:
    <%$Ticket->Id %>
    <&|/l&>Status:
    <% loc($Ticket->Status) %>
    % if ($Ticket->TimeEstimated) {
    <&|/l&>Estimated:
    <& /Ticket/Elements/ShowTime, minutes => $Ticket->TimeEstimated &>
    % } % if ($Ticket->TimeWorked) {
    <&|/l&>Worked:
    <& /Ticket/Elements/ShowTime, minutes => $Ticket->TimeWorked &>
    % } % if ($Ticket->TimeLeft) {
    <&|/l&>Left:
    <& /Ticket/Elements/ShowTime, minutes => $Ticket->TimeLeft &>
    % }
    <&|/l&>Priority:
    <& /Ticket/Elements/ShowPriority, Ticket => $Ticket &>
    <&|/l&>Queue:
    <& /Ticket/Elements/ShowQueue, QueueObj => $Ticket->QueueObj &>
    <&|/l&>Bookmark:
    <& /Ticket/Elements/Bookmark, id => $Ticket->id &>
    % if ($CustomFields->Count) { <&| /Widgets/TitleBox, title => loc('Custom Fields'), class => 'ticket-info-cfs', &> % while ( my $CustomField = $CustomFields->Next ) { % my $Values = $Ticket->CustomFieldValues( $CustomField->Id ); % my $count = $Values->Count;
    <% $CustomField->Name %>:
    % unless ( $count ) { <&|/l&>(no value) % } elsif ( $count == 1 ) { % $print_value->( $CustomField, $Values->First ); % } else {
      % while ( my $Value = $Values->Next ) {
    • % $print_value->( $CustomField, $Value );
    • % }
    % }
    % } % } <&| /Widgets/TitleBox, title => loc('People'), class => 'ticket-info-people' &>
    <&|/l&>Owner:
    <& /Elements/ShowUser, User => $Ticket->OwnerObj, Ticket => $Ticket, Link => 0 &>
    <&|/l&>Requestors:
    <& /Ticket/Elements/ShowGroupMembers, Group => $Ticket->Requestors, Ticket => $Ticket, Link => 0 &>
    <&|/l&>Cc:
    <& /Ticket/Elements/ShowGroupMembers, Group => $Ticket->Cc, Ticket => $Ticket, Link => 0 &>
    <&|/l&>AdminCc:
    <& /Ticket/Elements/ShowGroupMembers, Group => $Ticket->AdminCc, Ticket => $Ticket, Link => 0 &>
    % if (keys %documents) { <&| /Widgets/TitleBox, title => loc('Attachments'), title_class=> 'inverse', class => 'ticket-info-attachments', color => "#336699" &> % foreach my $key (keys %documents) { <%$key%>
    % } % } % # too painful to deal with reminders % if ( 0 && RT->Config->Get('EnableReminders') ) { <&|/Widgets/TitleBox, title => loc("Reminders"), class => 'ticket-info-reminders', &>
    <& /Ticket/Elements/Reminders, Ticket => $Ticket, ShowCompleted => 0 &>
    % } <&| /Widgets/TitleBox, title => loc("Dates"), class => 'ticket-info-dates', &>
    <&|/l&>Created:
    <% $Ticket->CreatedObj->AsString %>
    <&|/l&>Starts:
    <% $Ticket->StartsObj->AsString %>
    <&|/l&>Started:
    <% $Ticket->StartedObj->AsString %>
    <&|/l&>Last Contact:
    <% $Ticket->ToldObj->AsString %>
    <&|/l&>Due:
    % my $due = $Ticket->DueObj; % if ( $due && $due->IsSet && $due->Diff < 0 && $Ticket->QueueObj->IsActiveStatus($Ticket->Status) ) {
    <% $due->AsString %>
    % } else {
    <% $due->AsString %>
    % }
    <&|/l&>Closed:
    <% $Ticket->ResolvedObj->AsString %>
    <&|/l&>Updated:
    % my $UpdatedString = $Ticket->LastUpdated ? loc("[_1] by [_2]", $Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) : loc("Never");
    <% $UpdatedString | h %>
    <&| /Widgets/TitleBox, title => loc('Links'), class => 'ticket-info-links' &>
    <% loc('Depends on')%>:
    <%PERL> my ( @active, @inactive, @not_tickets ); for my $link ( @{ $Ticket->DependsOn->ItemsArrayRef } ) { my $target = $link->TargetObj; if ( $target && $target->isa('RT::Ticket') ) { if ( $target->QueueObj->IsInactiveStatus( $target->Status ) ) { push( @inactive, $link->TargetURI ); } else { push( @active, $link->TargetURI ); } } else { push( @not_tickets, $link->TargetURI ); } }
      % for my $Link (@not_tickets, @active, @inactive) {
    • <& /Elements/ShowLink, URI => $Link &>
    • % }
    <% loc('Depended on by')%>:
      % while (my $Link = $Ticket->DependedOnBy->Next) {
    • <& /Elements/ShowLink, URI => $Link->BaseURI &>
    • % }
    <% loc('Parents') %>:
    <& /Elements/ShowLinksOfType, Object => $Ticket, Type => 'MemberOf' &>
    <% loc('Children')%>:
    <& /Elements/ShowLinksOfType, Object => $Ticket, Type => 'Members' &>
    <% loc('Refers to')%>:
      % while (my $Link = $Ticket->RefersTo->Next) {
    • <& /Elements/ShowLink, URI => $Link->TargetURI &>
    • % }
    <% loc('Referred to by')%>:
      % while (my $Link = $Ticket->ReferredToBy->Next) { % next if (UNIVERSAL::isa($Link->BaseObj, 'RT::Ticket') && $Link->BaseObj->Type eq 'reminder');
    • <& /Elements/ShowLink, URI => $Link->BaseURI &>
    • % }
    rt-4.2.12/share/html/m/_elements/footer000644 000765 000024 00000004447 12555754775 020412 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Logo, ShowName => 1, OnlyCustom => 1 &>
    rt-4.2.12/share/html/m/_elements/full_site_link000644 000765 000024 00000004155 12555754775 022113 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/l&>Not using a mobile browser? rt-4.2.12/share/html/m/_elements/header000644 000765 000024 00000005525 12555754775 020342 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $title => loc('RT for [_1]', RT->Config->Get('rtname')) $show_home_button => 1 <%init> $r->headers_out->{'Pragma'} = 'no-cache'; $r->headers_out->{'Cache-control'} = 'no-cache'; <%$title%> % my ($jquery) = grep { /^jquery-\d+\./ } RT::Interface::Web->JSFiles; <& /Elements/Framekiller &> % if ($show_home_button) { % # The align is for older browsers, like the blackberry % } % if ($title) {

    <%$title%>

    % } rt-4.2.12/share/html/m/_elements/login000644 000765 000024 00000007265 12555754775 020225 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->callback( %ARGS, CallbackName => 'Header' ); <&| /m/_elements/wrapper, title => loc('RT for [_1]', RT->Config->Get('rtname')), show_home_button => 0 &> <& /m/_elements/full_site_link &> <%ARGS> $user => "" $pass => undef $goto => undef $actions => undef $next => "" rt-4.2.12/share/html/m/_elements/menu000644 000765 000024 00000010171 12555754775 020047 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| /Widgets/TitleBox, class => 'menu'&> <%init> my @menu = ( { html => '' }, { label => loc("New ticket"), url => '/m/ticket/select_create_queue', }, { label => loc("Bookmarked tickets"), url => '/m/tickets/search?name=Bookmarked%20Tickets', }, { label => loc("Tickets I own"), url => '/m/tickets/search?name=My%20Tickets', }, { label => loc("Unowned tickets"), url => '/m/tickets/search?name=Unowned%20Tickets', }, { label => loc("All tickets"), url => '/m/tickets/search?query=id!%3d0&order_by=id&order=DESC' }, ); if ( $session{'CurrentUser'}->HasRight( Right => 'LoadSavedSearch', Object => $RT::System)) { my @Objects = RT::SavedSearch->new( $session{CurrentUser} )->ObjectsForLoading; push @Objects, RT::System->new( $session{'CurrentUser'} ) if $session{'CurrentUser'}->HasRight( Object => $RT::System, Right => 'SuperUser' ); foreach my $object (@Objects) { my @searches = $object->Attributes->Named('SavedSearch'); foreach my $search (@searches) { next if $search->SubValue("SearchType") && $search->SubValue("SearchType") ne 'Ticket'; push @menu, { label => $search->Description, url => '/m/tickets/search?query=' . $search->SubValue("Query").'&order='.$search->SubValue("Order").'&order_by='.$search->SubValue("OrderBy") }; } } } push @menu, { label => loc("Logout"), url => '/m/logout', } ; $m->callback( CallbackName => 'MassageMenu', Menu => \@menu ); rt-4.2.12/share/html/m/_elements/ticket_list000644 000765 000024 00000010621 12555754775 021421 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $order => undef $order_by => undef $query => '' $page => 1 <%init> my $rows = 10; my $collection = RT::Tickets->new($session{'CurrentUser'}); $collection->FromSQL($query); $collection->RowsPerPage($rows); $collection->GotoPage($page-1); # XXX: ->{'order_by'} is hacky, but there is no way to check if # collection is ordered or not if ( $order_by) { my @order_by = split /\|/, $order_by; my @order = split /\|/,$order; $collection->OrderByCols( map { { FIELD => $order_by[$_], ORDER => $order[$_] } } ( 0 .. $#order_by ) ); } $collection->RedoSearch(); if ($page > 1 && ! @{$collection->ItemsArrayRef||[]}) { RT::Interface::Web::Redirect( RT->Config->Get('WebURL')."m/tickets/search?page=".($page-1)."&query=".$query."&order=$order&order_by=$order_by"); } <&| /m/_elements/wrapper, title => loc("Found [quant,_1,ticket,tickets]",$collection->CountAll) &> <&|/Widgets/TitleBox, class => 'search' &>
      % while (my $ticket = $collection->Next()) {
    • <%$ticket->id%>: <%$ticket->Subject%>
    • % }
    % if ($page > 1) { Back % } Page <%$page%> % if ($collection->CountAll > $page * $rows) { Next % }
    rt-4.2.12/share/html/m/_elements/ticket_menu000644 000765 000024 00000005052 12555754775 021414 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $ticket
    <%init> my @menu = ( { label => loc("Basics"), url => '/m/ticket/show?id='.$ticket->id }, { label => loc("History"), url => '/m/ticket/history?id='.$ticket->id }, #{ label => loc("Modify"), url => '/m/ticket/modify?id='.$ticket->id }, { label => loc("Reply"), url => '/m/ticket/reply?id='.$ticket->id } ); my $width = int(100/ ($#menu +1))-5; rt-4.2.12/share/html/m/_elements/wrapper000644 000765 000024 00000004450 12555754775 020566 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $title => '' $show_home_button => 1 <%init> if ($session{'NotMobile'}) { RT::Interface::Web::Redirect(RT->Config->Get('WebURL')); $m->abort(); } $m->comp('header', title => $title, show_home_button => $show_home_button); $m->out($m->content); $m->comp('footer'); $m->abort(); rt-4.2.12/share/html/Install/autohandler000644 000765 000024 00000004615 12555754775 020616 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%flags> inherit => undef <%init> if (RT->InstallMode) { $r->content_type("text/html; charset=utf-8"); require RT::Installer; $RT::Installer->{'CurrentUser'} = RT::CurrentUser->new(); $RT::Installer->{Meta} = RT::Installer->Meta; $m->call_next; } else { # redirect to login page if not in install mode RT::Interface::Web::Redirect(RT->Config->Get('WebURL')) } rt-4.2.12/share/html/Install/Basics.html000644 000765 000024 00000007445 12555754775 020463 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| Elements/Wrapper, Title => loc('Step [_1] of [_2]', 3, 7) .': '. loc('Customize Basics') &> <& Elements/Errors, Errors => \@errors &>

    <&|/l&>These configuration options cover some of the basics needed to get RT up and running. We need to know the name of your RT installation and the domain name where RT will live. You will also need to set a password for your default administrative user.

    <& /Widgets/BulkEdit, Types => \@Types,Meta => $RT::Installer->{Meta}, CurrentValue => RT::Installer->CurrentValues(@Types) &> <& /Elements/Submit, Label => loc('Next') .': '. loc('Customize Email Configuration'), Back => 1, BackLabel => loc('Back') .': '. loc('Check Database Credentials'), &>
    <%init> my @errors; my @Types = qw/rtname WebDomain WebPort Password/; if ( $Run ) { $m->comp('/Widgets/BulkProcess', Types => \@Types, Arguments => \%ARGS, Store => $RT::Installer->{InstallConfig}, Meta => $RT::Installer->{Meta} ); if ( $ARGS{WebPort} && $ARGS{WebPort} !~ /^\d+$/ ) { push @errors, loc("Invalid [_1]: it should be a number", 'WebPort'); } if ( !$ARGS{Password} ) { push @errors, loc("You must enter an Administrative password"); } else { my $dummy_user = RT::User->new($session{CurrentUser}); my ($ok, $msg) = $dummy_user->ValidatePassword($ARGS{Password}); unless ($ok) { push @errors, $msg; } } if ( $Back ) { RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/DatabaseDetails.html'); } unless ( @errors ) { RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/Sendmail.html'); } } <%args> $Run => undef $Back => undef rt-4.2.12/share/html/Install/DatabaseDetails.html000644 000765 000024 00000020104 12555754775 022254 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| Elements/Wrapper, Title => loc('Step [_1] of [_2]', 2, 7 ) .': '. loc('Check Database Credentials') &> % if ( @errors ) { <& Elements/Errors, Errors => \@errors &>

    <&|/l&>Tell us a little about how to find the database RT will be using

    <&|/l&>We need to know the name of the database RT will use and where to find it. We also need to know the username and password of the user RT should use. RT can create the database and user for you, which is why we ask for the username and password of a user with DBA privileges. During step 6 of the installation process we will use this information to create and initialize RT's database.

    <&|/l&>When you click on 'Check Database Connectivity' there may be a small delay while RT tries to connect to your database % } elsif ( @results ) { <& /Elements/ListActions, actions => \@results &>

    <&|/l&>We are able to find your database and connect as the DBA. You can click on 'Customize Basics' to continue customizing RT. % }

    % if ( @results && !@errors ) { <& /Elements/Submit, Label => loc('Next') .': '. loc('Customize Basics'), Back => 1, BackLabel => loc('Back') .': '. loc('Select Database Type'), Name => 'Next', &> % } else { <& /Widgets/BulkEdit, Types => \@Types, Meta => $RT::Installer->{Meta}, CurrentValue => { %{RT::Installer->CurrentValues(@Types)}, DatabaseAdmin => RT::Installer->CurrentValue( 'DatabaseAdmin' ) || $RT::Installer->{InstallConfig}{DatabaseAdmin} || ( $db_type eq 'mysql' ? 'root' : $db_type eq 'Pg' ? 'postgres' : '' ), } &> <& /Elements/Submit, Label => loc('Check Database Connectivity'), Back => 1, BackLabel => loc('Back') .': '. loc('Choose Database Engine'), &> % }
    <%init> my (@results, @errors); my $ConnectionSucceeded; my @Types = 'DatabaseName'; my $db_type = $RT::Installer->{InstallConfig}{DatabaseType}; unless ( $db_type eq 'SQLite' ) { push @Types, 'DatabaseHost', 'DatabasePort', 'DatabaseAdmin', 'DatabaseAdminPassword', 'DatabaseUser', 'DatabasePassword'; } if ( $Run ) { if ( $Back ) { RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/DatabaseType.html'); } if ( $ARGS{Next} ) { RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/Basics.html'); } $m->comp('/Widgets/BulkProcess', Types => \@Types, Arguments => \%ARGS, Store => $RT::Installer->{InstallConfig}, Meta => $RT::Installer->{Meta}, KeepUndef => 1 ); my ( $status, $msg ) = RT::Installer->SaveConfig; if ( $status ) { RT->LoadConfig; RT::Handle->FinalizeDatabaseType(); # dba connect systemdsn my $dbh = DBI->connect( RT::Handle->SystemDSN, $ARGS{DatabaseAdmin}, $ARGS{DatabaseAdminPassword}, { RaiseError => 0, PrintError => 0 }, ); if ( $dbh ) { push @results, loc('Connection succeeded'); # dba connect dsn, which has table info $dbh = DBI->connect( RT::Handle->DSN, $ARGS{DatabaseAdmin}, $ARGS{DatabaseAdminPassword}, { RaiseError => 0, PrintError => 0 }, ); if ( $dbh and $db_type eq "Oracle") { # The database _existing_ is itself insufficient for Oracle -- we need to check for the RT user my $sth = $dbh->prepare('SELECT username FROM dba_users WHERE username = ?'); $sth->execute( $ARGS{DatabaseUser} ); undef $dbh unless $sth->fetchrow_array; push @errors, loc("Oracle users cannot have empty passwords") unless $ARGS{DatabasePassword}; } if ( $dbh ) { # check if table Users exists eval { my $dbh = DBI->connect( RT::Handle->DSN, $ARGS{DatabaseAdmin}, $ARGS{DatabaseAdminPassword}, { RaiseError => 1, PrintError => 0 }, ); my $sth = $dbh->prepare('select * from Users'); $sth->execute(); }; unless ( $@ ) { my $sth = $dbh->prepare('select id from Users where Name=?'); $sth->execute('RT_System'); if ( $sth->fetchrow_array ) { $RT::Installer->{DatabaseAction} = 'none'; push @results, loc("[_1] appears to be fully initialized. We won't need to create any tables or insert metadata, but you can continue to customize RT by clicking 'Customize Basics' below", $RT::DatabaseName); } else { $RT::Installer->{DatabaseAction} = 'acl,coredata,insert'; push @results, loc("[_1] already exists and has RT's tables in place, but does not contain RT's metadata. The 'Initialize Database' step later on can insert metadata into this existing database. If this is acceptable, click 'Customize Basics' below to continue customizing RT.", $RT::DatabaseName); } } else { $RT::Installer->{DatabaseAction} = 'schema,acl,coredata,insert'; push @results, loc("[_1] already exists, but does not contain RT's tables or metadata. The 'Initialize Database' step later on can insert tables and metadata into this existing database. if this is acceptable, click 'Customize Basic' below to continue customizing RT.", $RT::DatabaseName ); } } else { $RT::Installer->{DatabaseAction} = 'create,schema,acl,coredata,insert'; } } else { $RT::Installer->{DatabaseAction} = 'error'; push @errors, loc("Failed to connect to database: [_1]", $DBI::errstr ); } } else { push @results, loc($msg); } } <%args> $Run => undef $Back => undef rt-4.2.12/share/html/Install/DatabaseType.html000644 000765 000024 00000007122 12555754775 021615 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|Elements/Wrapper, Title => loc('Step [_1] of [_2]', 1, 7 ) .': '. loc('Choose Database Engine') &>

    <&|/l&>RT works with a number of different databases. MySQL, PostgreSQL, Oracle and SQLite are all supported.

    <&|/l&>You should choose the database you or your local database administrator is most comfortable with.

    <&|/l&>SQLite is a database that doesn't need a server or any configuration whatsoever. RT's authors recommend it for testing, demoing and development, but it's not quite right for a high-volume production RT server.

    <&|/l_unsafe, 'CPAN' &>If your preferred database isn't listed in the dropdown below, that means RT couldn't find a database driver for it installed locally. You may be able to remedy this by using [_1] to download and install DBD::MySQL, DBD::Oracle or DBD::Pg.

    <& /Widgets/BulkEdit, Types => \@Types, Meta => $RT::Installer->{Meta}, CurrentValue => RT::Installer->CurrentValues(@Types) &> <& /Elements/Submit, Label => loc('Next') .': '. loc( 'Check Database Credentials') &>
    <%init> my @Types = 'DatabaseType'; if ( $Run ) { $m->comp('/Widgets/BulkProcess', Types => \@Types, Arguments => \%ARGS, Meta => $RT::Installer->{Meta}, Store => $RT::Installer->{InstallConfig} ); RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/DatabaseDetails.html'); } <%args> $Run => undef rt-4.2.12/share/html/Install/Elements/000755 000765 000024 00000000000 12555754775 020133 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Install/Finish.html000644 000765 000024 00000006537 12555754775 020500 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| Elements/Wrapper, Title => loc('Step [_1] of [_2]', 7, 7) .': '. loc('Finish') &>

    <&|/l&>Click "Finish Installation" below to complete this wizard.

    <&|/l_unsafe, 'root' &>You should be taken directly to a login page. You'll be able to log in with username of [_1] and the password you set earlier.

    <&|/l&>If you've changed the Port that RT runs on, you'll need to restart the server in order to log in.

    <&|/l, RT::Installer->ConfigFile &>The settings you've chosen are stored in [_1].

    <& /Elements/Submit, Label => 'Finish Installation' &>
    <%init> if ( $Run ) { RT->InstallMode(0); RT->ConnectToDatabase(); RT->InitSystemObjects(); RT->InitClasses(); RT->InitPlugins(); my $ret = chmod 0440, RT::Installer->ConfigFile; if ( !$ret ) { $RT::Logger->error( 'failed to make ' . RT::Installer->ConfigFile . ' readonly' ); } my $root = RT::User->new( RT->SystemUser ); $root->Load('root'); my ($ok, $val) = $root->SetPassword( $RT::Installer->{InstallConfig}{Password} ); $RT::Logger->warning("Unable to set root password: $val") if !$ok; RT::Interface::Web::Redirect(RT->Config->Get('WebURL')); } <%args> $Run => undef rt-4.2.12/share/html/Install/Global.html000644 000765 000024 00000010315 12555754775 020445 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| Elements/Wrapper, Title => loc('Step [_1] of [_2]', 5, 7 ) .': '. loc('Customize Email Addresses') &> <& Elements/Errors, Errors => \@errors &>

    <&|/l&>Help us set up some useful defaults for RT.

    <&|/l&>When RT sends an email it sets the From: and Reply-To: headers so users can add to the conversation by just hitting Reply in their mail client. It uses different addresses for Replies and Comments. These can be changed for each of your queues. These addresses will need to be configured to use the rt-mailgate program.

    <& /Widgets/BulkEdit, Types => \@Types,Meta => $RT::Installer->{Meta}, CurrentValue => RT::Installer->CurrentValues(@Types) &> <& /Elements/Submit, Label => $RT::Installer->{DatabaseAction} eq 'none' ? loc('Next') .': '. loc('Finish') : loc('Next') .': '. loc('Initialize Database'), Back => 1, BackLabel => loc('Back') .': '. loc('Customize Email Configuration'), &>
    <%init> my @errors; my @Types = qw/CommentAddress CorrespondAddress/; if ( $Run ) { $m->comp('/Widgets/BulkProcess', Types => \@Types, Arguments => \%ARGS, Store => $RT::Installer->{InstallConfig}, Meta => $RT::Installer->{Meta}, KeepUndef => 1 ); if ( $Back ) { RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/Sendmail.html'); } for ( qw/CommentAddress CorrespondAddress/ ) { if ( $ARGS{$_} && $ARGS{$_} !~ /.+@.+/ ) { push @errors, loc("Invalid [_1]: '[_2]' doesn't look like an email address", $_, $ARGS{$_}); } } unless ( @errors ) { my ( $status, $msg ) = RT::Installer->SaveConfig; if ( $status ) { RT->LoadConfig; if ( $RT::Installer->{DatabaseAction} ne 'none' ) { RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/Initialize.html'); } else { RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/Finish.html'); } } else { push @errors, loc($msg); } } } <%args> $Run => undef $Back => undef rt-4.2.12/share/html/Install/index.html000644 000765 000024 00000011671 12555754775 020362 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| Elements/Wrapper, Title => loc('Welcome to RT!') &> <& Elements/Errors, Errors => \@errors &> % return if $locked;

    <% loc('Language') %>

    <&|/l&>Select another language: <& /Elements/SelectLang, Name => 'Lang', Default => $lang_handle? $lang_handle->language_tag : undef, &>

    <% loc('What is RT?') %>

    <&|/l&>RT is an enterprise-grade issue tracking system designed to let you intelligently and efficiently manage tasks, issues, requests, defects or anything else that looks like an "action item."

    <&|/l&>RT is used by Fortune 100 companies, one-person businesses, government agencies, educational institutions, hospitals, nonprofits, NGOs, libraries, open source projects and all sorts of other organizations on all seven continents. (Yes, even Antarctica.)

    <% loc('Getting started') %>

    <&|/l, loc("Let's go!") &>You're seeing this screen because you started up an RT server without a working database. Most likely, this is the first time you're running RT. If you click "[_1]" below, RT will guide you through setting up your RT server and database.

    <&|/l&>If you already have a working RT server and database, you should take this opportunity to make sure that your database server is running and that the RT server can connect to it. Once you've done that, stop and start the RT server.

    <& /Elements/Submit, Label => loc( "Let's go!"), Name => 'Run' &>
    <%init> my @errors; my $locked; my $file = RT::Installer->ConfigFile; if ( ! -e $file ) { # write a blank RT_SiteConfig.pm open( my $fh, '>', $file ) or die $!; close $fh; } elsif ( ! -w $file ) { $locked = 1; } if ( $locked ) { push @errors, loc("Config file [_1] is locked", $file); } elsif ( $Run ) { $RT::Installer->{InstallConfig} ||= {}; for my $field ( qw/DatabaseType DatabaseName DatabaseHost DatabasePort DatabaseUser rtname Organization CommentAddress CorrespondAddress SendmailPath WebDomain WebPort/ ) { $RT::Installer->{InstallConfig}{$field} ||= RT->Config->Get($field); } for my $field ( qw/OwnerEmail Password DatabasePassword DatabaseAdminPassword/ ) { # stuff we don't want to keep null $RT::Installer->{InstallConfig}{$field} = ''; } RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/DatabaseType.html'); } elsif ( $ChangeLang && $Lang ) { # hackish, but works $session{'CurrentUser'} = RT::CurrentUser->new; $session{'CurrentUser'}->LanguageHandle( $Lang ); } my $lang_handle = do { local $@; eval { ($session{'CurrentUser'} || RT::CurrentUser->new(RT->SystemUser->Id)) ->LanguageHandle } }; <%args> $Run => 0 $ChangeLang => undef $Lang => undef rt-4.2.12/share/html/Install/Initialize.html000644 000765 000024 00000012070 12555754775 021346 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|Elements/Wrapper, Title => loc('Step [_1] of [_2]', 6, 7) .': '. loc('Initialize Database') &> <& Elements/Errors, Errors => \@errors &> % unless ( @errors ) {
    <&|/l&>Click "Initialize Database" to create RT's database and insert initial metadata. This may take a few moments
    % }
    <& /Elements/Submit, Label => loc('Initialize Database'), Back => 1, BackLabel => loc('Back') .': '. loc('Customize Email Addresses'), &>
    <%init> my @errors; if ( $Run ) { if ( $Back ) { RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/Global.html'); } my @actions = split /,/, $RT::Installer->{DatabaseAction}; # RT::Handle's ISA is dynamical, so we need to unshift the right one. my $class = 'DBIx::SearchBuilder::Handle::' . RT->Config->Get('DatabaseType'); $class->require or die $UNIVERSAL::require::ERROR; unshift @RT::Handle::ISA, $class; my $sysdbh = DBI->connect( RT::Handle->SystemDSN, $RT::Installer->{InstallConfig}{DatabaseAdmin}, $RT::Installer->{InstallConfig}{DatabaseAdminPassword}, { RaiseError => 0, PrintError => 0 }, ); die $DBI::errstr unless $sysdbh; my ( $status, $msg ) = ( 1, '' ); if ( $actions[0] eq 'create' ) { ($status, $msg) = RT::Handle->CreateDatabase( $sysdbh ); unless ( $status ) { push @errors, loc('ERROR: [_1]', $msg ); } shift @actions; # shift the 'create' action since its job is done. } if ( $status ) { my $dbh = DBI->connect( RT::Handle->DSN, $RT::Installer->{InstallConfig}{DatabaseAdmin}, $RT::Installer->{InstallConfig}{DatabaseAdminPassword}, { RaiseError => 0, PrintError => 0 }, ); die $DBI::errstr unless $dbh; foreach my $action ( @actions ) { ($status, $msg) = (1, ''); if ( $action eq 'schema' ) { ($status, $msg) = RT::Handle->InsertSchema( $dbh ); } elsif ( $action eq 'acl' ) { ($status, $msg) = RT::Handle->InsertACL( $dbh ); } elsif ( $action eq 'coredata' ) { $RT::Handle = RT::Handle->new; $RT::Handle->dbh( undef ); RT::ConnectToDatabase(); RT::InitLogging(); RT::InitClasses(); ($status, $msg) = $RT::Handle->InsertInitialData; } elsif ( $action eq 'insert' ) { $RT::Handle = RT::Handle->new; RT::Init(); my $file = $RT::EtcPath . "/initialdata"; ($status, $msg) = $RT::Handle->InsertData( $file, undef, disconnect_after => 0 ); } unless ( $status ) { push @errors, loc('ERROR: [_1]', $msg); last; } } } unless ( @errors ) { RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/Finish.html'); } } <%args> $Run => undef $Back => undef rt-4.2.12/share/html/Install/Sendmail.html000644 000765 000024 00000007337 12555754775 021013 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|Elements/Wrapper, Title => loc('Step [_1] of [_2]', 4, 7 ) .': '. loc('Customize Email Configuration') &> <& Elements/Errors, Errors => \@errors &>

    <&|/l&>RT can communicate with your users about new tickets or new correspondence on tickets. Tell us where to find sendmail (or a sendmail compatible binary such as the one provided by postifx). RT also needs to know who to notify when someone sends invalid email. This must not be an address that feeds back into RT.

    <& /Widgets/BulkEdit, Types => \@Types,Meta => $RT::Installer->{Meta}, CurrentValue => RT::Installer->CurrentValues(@Types) &> <& /Elements/Submit, Label => loc('Next') .': '. loc('Customize Email Addresses'), Back => 1, BackLabel => loc('Back' ) .': '. loc('Customize Basics'), &>
    <%init> my @errors; my @Types = qw/SendmailPath OwnerEmail/; if ( $Run ) { $m->comp('/Widgets/BulkProcess', Types => \@Types, Arguments => \%ARGS, Store => $RT::Installer->{InstallConfig}, Meta => $RT::Installer->{Meta}, KeepUndef => 1); if ( $Back ) { RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/Basics.html'); } unless ( -e $ARGS{SendmailPath} ) { push @errors, loc( "[_1] doesn't exist.", $ARGS{SendmailPath} ); } if ( ! $ARGS{OwnerEmail} || $ARGS{OwnerEmail} !~ /.+@.+/ ) { push @errors, loc("Invalid [_1]: '[_2]' doesn't look like an email address", 'Administrator Email', $ARGS{OwnerEmail} ); } unless ( @errors ) { RT::Interface::Web::Redirect(RT->Config->Get('WebURL') . 'Install/Global.html'); } } <%args> $Run => undef $Back => undef rt-4.2.12/share/html/Install/Elements/Errors000644 000765 000024 00000004300 12555754775 021327 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if (@Errors) { <&| "/Widgets/TitleBox", title => loc('Error'), hideable => 0, class => 'error' &>
      % for my $Error ( @Errors ) {
    • <% $Error %>
    • % }
    % } <%args> @Errors rt-4.2.12/share/html/Install/Elements/Wrapper000644 000765 000024 00000004361 12555754775 021502 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&/Elements/Header, title => $Title &> <& /Elements/PageLayout, title => $Title, show_menu => 1 &> <% $m->content() |n%> <& /Elements/Footer &> % $m->abort; <%args> $Title => 'Install RT' rt-4.2.12/share/html/Helpers/Autocomplete/000755 000765 000024 00000000000 12555754775 021014 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Helpers/autohandler000644 000765 000024 00000004135 12555754775 020607 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> RT::Interface::Web::CacheControlExpiresHeaders( Time => 'no-cache' ); $m->call_next; rt-4.2.12/share/html/Helpers/TicketHistory000644 000765 000024 00000005134 12555754775 021106 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $id <%INIT> my $TicketObj = RT::Ticket->new($session{'CurrentUser'}); $TicketObj->Load($id); my $attachments = $TicketObj->Attachments; my $attachment_content = $TicketObj->TextAttachments; my %extra_args; $m->callback( CallbackName => 'ExtraShowHistoryArguments', Ticket => $TicketObj, ExtraArgs => \%extra_args ); <& /Elements/ShowHistory, Object => $TicketObj, ShowHeaders => $ARGS{'ShowHeaders'}, Attachments => $attachments, AttachmentContent => $attachment_content, %extra_args, &> % $m->abort(); rt-4.2.12/share/html/Helpers/Toggle/000755 000765 000024 00000000000 12555754775 017574 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Helpers/UserInfo000644 000765 000024 00000005250 12555754775 020032 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $id <%init> my %users; $id = [$id] unless ref($id) eq 'ARRAY'; for my $uid (@$id) { next if exists $users{$uid}; my $user = RT::User->new($session{'CurrentUser'}); $user->Load($uid); unless ($user->id) { $users{$uid} = undef; next; } my %user = map { $_ => $user->$_ } qw(id Name EmailAddress RealName); $user{Privileged} = $user->Privileged ? JSON::true : JSON::false; $user{_formatted} = $user->Format; $user{_html} = $m->scomp('/Elements/ShowUser', User => $user); $users{$uid} = \%user; } $r->content_type('application/json; charset=utf-8'); $m->out( JSON(\%users) ); $m->abort; rt-4.2.12/share/html/Helpers/Toggle/ShowRequestor000644 000765 000024 00000005042 12555754775 022352 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $TicketTemplate = "/Ticket/Elements/ShowRequestorTickets$Status"; $TicketTemplate = "/Ticket/Elements/ShowRequestorTicketsActive" unless RT::Interface::Web->ComponentPathIsSafe($TicketTemplate) and $m->comp_exists($TicketTemplate); my $user_obj = RT::User->new($session{CurrentUser}); my ($val, $msg) = $user_obj->Load($Requestor); unless ($val) { $RT::Logger->error("Unable to load User $Requestor: $msg"); } else { $m->comp( $TicketTemplate, Requestor => $user_obj ); } $m->abort(); <%ARGS> $Status $Requestor rt-4.2.12/share/html/Helpers/Toggle/TicketBookmark000644 000765 000024 00000004170 12555754775 022432 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $id $Toggle => 1 <%INIT> $m->comp('/Ticket/Elements/Bookmark', id => $id, Toggle => $Toggle ); $m->abort(); rt-4.2.12/share/html/Helpers/Autocomplete/autohandler000644 000765 000024 00000004132 12555754775 023245 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> RT::Interface::Web::CacheControlExpiresHeaders( Time => 2 * 60 ); $m->call_next; rt-4.2.12/share/html/Helpers/Autocomplete/CustomFieldValues000644 000765 000024 00000011632 12555754775 024340 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $r->content_type('application/json; charset=utf-8'); <% JSON( \@suggestions ) |n %> % $m->abort; <%INIT> # Only autocomplete the last value my $term = (split /\n/, $ARGS{term} || '')[-1]; my $abort = sub { $r->content_type('application/json; charset=utf-8'); $m->out(JSON( [] )); $m->abort; }; unless ( exists $ARGS{ContextType} and exists $ARGS{ContextId} ) { RT->Logger->debug("No context provided"); $abort->(); } # Use _ParseObjectCustomFieldArgs to avoid duplicating the regex. # See the docs for _ParseObjectCustomFieldArgs for details on the data # structure returned. There will be only one CF, so drill down 2 layers # to get the cf id, if one is there. my %custom_fields = _ParseObjectCustomFieldArgs(\%ARGS); my $CustomField; foreach my $class ( keys %custom_fields ){ foreach my $id ( keys %{$custom_fields{$class}} ){ ($CustomField) = keys %{$custom_fields{$class}{$id}}; } } unless ( $CustomField ) { RT->Logger->debug("No CustomField provided"); $abort->(); } my $SystemCustomFieldObj = RT::CustomField->new( RT->SystemUser ); my ($id, $msg) = $SystemCustomFieldObj->LoadById( $CustomField ) ; unless ( $id ) { RT->Logger->debug("Invalid CustomField provided: $msg"); $abort->(); } my $context_object = $SystemCustomFieldObj->LoadContextObject( $ARGS{ContextType}, $ARGS{ContextId} ); $abort->() unless $context_object; my $CustomFieldObj = RT::CustomField->new( $session{'CurrentUser'} ); if ( $SystemCustomFieldObj->ValidateContextObject($context_object) ) { # drop our privileges that came from calling LoadContextObject as the System User $context_object->new($session{'CurrentUser'}); $context_object->LoadById($ARGS{ContextId}); $CustomFieldObj->SetContextObject( $context_object ); } else { RT->Logger->debug("Invalid Context Object ".$context_object->id." for Custom Field ".$SystemCustomFieldObj->id); $abort->(); } ($id, $msg) = $CustomFieldObj->LoadById( $CustomField ); unless ( $CustomFieldObj->Name ) { RT->Logger->debug("Current User cannot see this Custom Field, terminating"); $abort->(); } my $values = $CustomFieldObj->Values; $values->Limit( FIELD => 'Name', OPERATOR => 'LIKE', VALUE => $term, SUBCLAUSE => 'autocomplete', CASESENSITIVE => 0, ); $values->Limit( ENTRYAGGREGATOR => 'OR', FIELD => 'Description', OPERATOR => 'LIKE', VALUE => $term, SUBCLAUSE => 'autocomplete', CASESENSITIVE => 0, ); $m->callback( CallbackName => 'ModifyMaxResults', max => \$ARGS{max}, term => $term, CustomField => $CustomFieldObj, ); $values->RowsPerPage( $ARGS{max} // 10 ); my @suggestions; while( my $value = $values->Next ) { push @suggestions, { value => $value->Name, label => $value->Description ? $value->Name . ' (' . $value->Description . ')' : $value->Name, }; } rt-4.2.12/share/html/Helpers/Autocomplete/Groups000644 000765 000024 00000006311 12555754775 022217 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $r->content_type('application/json; charset=utf-8'); <% JSON( \@suggestions ) |n %> % $m->abort; <%ARGS> $term => undef $max => undef $exclude => '' $op => 'LIKE' <%INIT> $m->abort unless defined $term and length $term; my $CurrentUser = $session{'CurrentUser'}; # Require privileged users $m->abort unless $CurrentUser->Privileged; # Sanity check the operator $op = 'LIKE' unless $op =~ /^(?:LIKE|(?:START|END)SWITH|=|!=)$/i; $m->callback( CallbackName => 'ModifyMaxResults', max => \$max ); $max //= 10; my $groups = RT::Groups->new( $CurrentUser ); $groups->RowsPerPage( $max ); $groups->LimitToUserDefinedGroups(); $groups->Limit( FIELD => 'Name', OPERATOR => $op, VALUE => $term, CASESENSITIVE => 0, ); # Exclude groups we don't want foreach (split /\s*,\s*/, $exclude) { $groups->Limit(FIELD => 'id', VALUE => $_, OPERATOR => '!=', ENTRYAGGREGATOR => 'AND'); } my @suggestions; while ( my $group = $groups->Next ) { my $suggestion = { id => $group->Id, label => $group->Name, value => $group->Name }; $m->callback( CallbackName => "ModifySuggestion", suggestion => $suggestion, group => $group ); push @suggestions, $suggestion; } rt-4.2.12/share/html/Helpers/Autocomplete/Owners000644 000765 000024 00000010630 12555754775 022214 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $r->content_type('application/json; charset=utf-8'); <% JSON( \@suggestions ) |n %> % $m->abort; <%ARGS> $return => 'Name' $limit => undef $term => undef $max => undef <%INIT> # Only allow certain return fields $return = 'Name' unless $return =~ /^(?:EmailAddress|Name|RealName|id)$/; $m->abort unless defined $return and defined $term and defined $limit; my $CurrentUser = $session{'CurrentUser'}; my %user_uniq_hash; my $isSU = $session{CurrentUser} ->HasRight( Right => 'SuperUser', Object => $RT::System ); $m->callback( CallbackName => 'ModifyMaxResults', max => \$max ); $max //= 10; # Turn RT::Ticket-1|RT::Queue-2 into ['RT::Ticket', 1], ['RT::Queue', 2] foreach my $spec (map { [split /\-/, $_, 2] } split /\|/, $limit) { next unless $spec->[0] =~ /^RT::(Ticket|Queue)$/; my $object = $spec->[0]->new( $session{'CurrentUser'} ); if ( $spec->[1] ) { $object->Load( $spec->[1] ); # Warn if we couldn't load an object unless ( $object->id ) { $RT::Logger->warn("Owner autocomplete couldn't load an '$spec->[0]' with id '$spec->[1]'"); next; } } my $Users = RT::Users->new( $session{CurrentUser} ); # Limit by our autocomplete term BEFORE we limit to OwnTicket because that # does a funky union hack $Users->SimpleSearch( Max => $max, Term => $term, Return => $return, ); $Users->WhoHaveRight( Right => 'OwnTicket', Object => $object, IncludeSystemRights => 1, IncludeSuperusers => $isSU ); while ( my $User = $Users->Next() ) { next if $user_uniq_hash{ $User->Id }; $user_uniq_hash{ $User->Id() } = [ $User, $User->Format, ]; } } # Make sure we add Nobody if we don't already have it my $nobody = qr/^n(?:o(?:b(?:o(?:d(?:y)?)?)?)?)?$/i; if ( not $user_uniq_hash{RT->Nobody->id} and $term =~ $nobody ) { $user_uniq_hash{RT->Nobody->id} = [ RT->Nobody, RT->Nobody->Format, ]; } my @users = sort { lc $a->[1] cmp lc $b->[1] } values %user_uniq_hash; my @suggestions; my $count = 1; for my $tuple ( @users ) { last if $count > $max; my $formatted = $tuple->[1]; $formatted =~ s/\n//g; push @suggestions, { label => $formatted, value => $tuple->[0]->$return }; $count++; } rt-4.2.12/share/html/Helpers/Autocomplete/Tickets000644 000765 000024 00000007010 12555754775 022343 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $r->content_type('application/json; charset=utf-8'); <% JSON( \@suggestions ) |n %> % $m->abort; <%ARGS> $return => '' $term => undef $max => undef $exclude => '' <%INIT> # Only allow certain return fields $return = 'id' unless $return =~ /^(?:id|Subject)$/; $m->abort unless defined $return and defined $term and length $term; my $CurrentUser = $session{'CurrentUser'}; # Require privileged users $m->abort unless $CurrentUser->Privileged; my @excludes; (my $prev, $term) = $term =~ /^((?:\d+\s+)*)(.*)/; @excludes = split ' ', $prev if $prev; push @excludes, split ' ', $exclude if $exclude; $m->abort unless $term; my %fields = %{ RT->Config->Get('TicketAutocompleteFields') || { id => 'STARTSWITH', Subject => 'LIKE' } }; my $tickets = RT::Tickets->new( $CurrentUser ); my @clauses; $term =~ s/(['\\])/\\$1/g; #' while (my ($name, $op) = each %fields) { $op = 'STARTSWITH' unless $op =~ /^(?:LIKE|(?:START|END)SWITH|=|!=)$/i; push @clauses, qq{$name $op '$term'}; } my $sql = join ' OR ', @clauses; if ( @excludes ) { # exclude ids already these $sql = join ' AND ', "($sql)", map { qq{id != '$_'} } @excludes; } $m->callback( CallbackName => 'ModifyMaxResults', max => \$max ); $max //= 10; $tickets->FromSQL($sql); $tickets->RowsPerPage( $max ); my @suggestions; while ( my $ticket = $tickets->Next ) { my $formatted = loc("#[_1]: [_2]", $ticket->Id, $ticket->Subject); push @suggestions, { label => $formatted, value => $ticket->$return }; } rt-4.2.12/share/html/Helpers/Autocomplete/Users000644 000765 000024 00000007622 12555754775 022047 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $r->content_type('application/json; charset=utf-8'); <% JSON( \@suggestions ) |n %> % $m->abort; <%ARGS> $return => '' $term => undef $delim => undef $max => undef $privileged => undef $exclude => '' $op => undef <%INIT> # Only allow certain return fields $return = 'EmailAddress' unless $return =~ /^(?:EmailAddress|Name|RealName)$/; $m->abort unless defined $return and defined $term and length $term; # Use our delimeter if we have one if ( defined $delim and length $delim ) { if ( $delim eq ',' ) { $delim = qr/,\s*/; } else { $delim = qr/\Q$delim\E/; } # If the field handles multiple values, pop the last one off $term = (split $delim, $term)[-1] if $term =~ $delim; } my $CurrentUser = $session{'CurrentUser'}; # Require privileged users or overriding config $m->abort unless $CurrentUser->Privileged or RT->Config->Get('AllowUserAutocompleteForUnprivileged'); # the API wants a list of ids my @exclude = split /\s*,\s*/, $exclude; push @exclude, RT->SystemUser->id, RT->Nobody->id; $m->callback( CallbackName => 'ModifyMaxResults', max => \$max ); $max //= 10; my $users = RT::Users->new($CurrentUser); $users->SimpleSearch( Privileged => $privileged, Return => $return, Term => $term, Max => $max, Exclude => \@exclude, # If an operator is provided, check against only # the returned field using that operator $op ? ( Fields => { $return => $op } ) : (), ); my @suggestions; while ( my $user = $users->Next ) { my $suggestion = { id => $user->id, label => $user->Format, value => $user->$return }; $m->callback( CallbackName => "ModifySuggestion", suggestion => $suggestion, user => $user ); push @suggestions, $suggestion; } rt-4.2.12/share/html/Errors/WebRemoteUser/000755 000765 000024 00000000000 12555754775 020755 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Errors/WebRemoteUser/Deauthorized000644 000765 000024 00000004314 12555754775 023331 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| Wrapper, %ARGS, Title => loc("No longer authorized") &>

    <&|/l&>You were logged out of RT by your authentication system. This may be a temporary hiccup, in which case refreshing this page may help.

    rt-4.2.12/share/html/Errors/WebRemoteUser/NoInternalUser000644 000765 000024 00000004164 12555754775 023615 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| Wrapper, %ARGS, Title => loc("Unauthorized") &>

    <&|/l, $ARGS{User} &>You ([_1]) are not authorized to use RT.

    rt-4.2.12/share/html/Errors/WebRemoteUser/NoRemoteUser000644 000765 000024 00000004137 12555754775 023274 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| Wrapper, %ARGS, Title => loc("Unauthorized") &>

    <&|/l&>You are not authorized to use RT.

    rt-4.2.12/share/html/Errors/WebRemoteUser/UserAutocreateDefaultsOnLogin000644 000765 000024 00000004317 12555754775 026616 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| Wrapper, %ARGS, Title => loc("Automatic account setup failed") &>

    <&|/l&>Unfortunately, RT couldn't automatically setup an account for you. Your RT administator will find more information in the logs.

    rt-4.2.12/share/html/Errors/WebRemoteUser/Wrapper000644 000765 000024 00000005666 12555754775 022335 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Title => loc("An error occurred") $Error => '' <%init> my $login_url = $m->interp->apply_escapes(RT::Interface::Web::TangentForLoginURL(\%ARGS), 'h'); <% $Title %>

    <% $Title %>

    <% $m->content |n%>

    % if (my $owner = RT->Config->Get('OwnerEmail')) { % $owner = $m->interp->apply_escapes($owner, 'h'); <&|/l_unsafe, qq[], $owner, '' &>Contact your RT administrator via [_1]email to [_2][_3]. % } else { <&|/l&>Contact your RT administrator. % }

    % if (RT->Config->Get('WebRemoteUserAuth') and RT->Config->Get('WebFallbackToRTLogin')) {

    <&|/l_unsafe, qq[], '' &>If you have an internal RT login, you may [_1]try it instead[_2].

    % }

    rt-4.2.12/share/html/Elements/AddLinks000644 000765 000024 00000011352 12555754775 020143 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Object => undef $CustomFields => undef $ARGSRef => $DECODED_ARGS <%init> my $id = ($Object and $Object->id) ? $Object->id : "new"; my $exclude = qq| data-autocomplete="Tickets" data-autocomplete-multiple="1"|; $exclude .= qq| data-autocomplete-exclude="$id"| if $Object->id; % if (ref($Object) eq 'RT::Ticket') { <&|/l&>Enter tickets or URIs to link tickets to. Separate multiple entries with spaces.
    <&|/l&>You may enter links to Articles as "a:###", where ### represents the number of the Article. % $m->callback( CallbackName => 'ExtraLinkInstructions' );

    % } elsif (ref($Object) eq 'RT::Queue') { <&|/l&>Enter queues or URIs to link queues to. Separate multiple entries with spaces.
    % } else { <&|/l&>Enter objects or URIs to link objects to. Separate multiple entries with spaces.
    % } <& /Elements/EditCustomFields, Object => $Object, Grouping => 'Links', InTable => 1, ($CustomFields ? (CustomFields => $CustomFields) : ()), &> % $m->callback( CallbackName => 'NewLink' );
    <& ShowRelationLabel, Object => $Object, Label => loc('Depends on').':', Relation => 'DependsOn' &> " <% $exclude |n%>/>
    <& ShowRelationLabel, Object => $Object, Label => loc('Depended on by').':', Relation => 'DependedOnBy' &> " <% $exclude |n%>/>
    <& ShowRelationLabel, Object => $Object, Label => loc('Parents').':', Relation => 'Parents' &> " <% $exclude |n%>/>
    <& ShowRelationLabel, Object => $Object, Label => loc('Children').':', Relation => 'Children' &> " <% $exclude |n%>/>
    <& ShowRelationLabel, Object => $Object, Label => loc('Refers to').':', Relation => 'RefersTo' &> " <% $exclude |n%>/>
    <& ShowRelationLabel, Object => $Object, Label => loc('Referred to by').':', Relation => 'ReferredToBy' &> " <% $exclude |n%>/>
    rt-4.2.12/share/html/Elements/BulkCustomFields000644 000765 000024 00000010362 12555754775 021671 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % my $i = 0; % while (my $cf = $CustomFields->Next) { % my $rows = 5; % my $cf_id = $cf->id; % my @add = (NamePrefix => 'Bulk-Add-CustomField-', CustomField => $cf, Rows => $rows, % Multiple => ($cf->MaxValues ==1 ? 0 : 1) , Cols => 25, % Default => $ARGS{"Bulk-Add-CustomField-$cf_id-Values"} || $ARGS{"Bulk-Add-CustomField-$cf_id-Value"}, ); % my @del = (NamePrefix => 'Bulk-Delete-CustomField-', CustomField => $cf, % Rows => $rows, Multiple => 1, Cols => 25, % Default => $ARGS{"Bulk-Delete-CustomField-$cf_id-Values"} || $ARGS{"Bulk-Delete-CustomField-$cf_id-Value"}, ); % if ($cf->Type eq 'Select') { % }
    <&|/l&>Name <&|/l&>Add values <&|/l&>Delete values
    <% $cf->Name %>
    (<% $cf->FriendlyType %>)
    <& /Elements/EditCustomFieldSelect, @add &> <& /Elements/EditCustomFieldSelect, @del &>
    % } elsif ($cf->Type eq 'Combobox') {
    <& /Elements/EditCustomFieldCombobox, @add &> <& /Elements/EditCustomFieldCombobox, @del &>
    % } elsif ($cf->Type eq 'Freeform') {
    <& /Elements/EditCustomFieldFreeform, @add &> <& /Elements/EditCustomFieldFreeform, @del &>
    % } elsif ($cf->Type eq 'Text') {
    <& /Elements/EditCustomFieldText, @add &> % } elsif ($cf->Type eq 'Wikitext') { <& /Elements/EditCustomFieldWikitext, @add &> % } elsif ($cf->Type eq 'Date') { <& /Elements/EditCustomFieldDate, @add, Default => undef &> <& /Elements/EditCustomFieldDate, @del, Default => undef &>
    % } elsif ($cf->Type eq 'DateTime') { % # Pass datemanip format to prevent another tz date conversion
    <& /Elements/EditCustomFieldDateTime, @add, Default => undef, Format => 'datemanip' &> <& /Elements/EditCustomFieldDateTime, @del, Default => undef, Format => 'datemanip' &>
    % } else { % $RT::Logger->crit("Unknown CustomField type: " . $cf->Type); % next % }
    <%ARGS> $CustomFields <%INIT> return unless $CustomFields->Count; rt-4.2.12/share/html/Elements/BulkLinks000644 000765 000024 00000017725 12555754775 020362 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}

    <&|/l&>Current Links

    <&|/l&>Depends on: % if ( $hash{DependsOn} ) { % for my $link ( values %{$hash{DependsOn}} ) {
    % } }
    <&|/l&>Depended on by: % if ( $hash{DependedOnBy} ) { % for my $link ( values %{$hash{DependedOnBy}} ) {
    % } }
    <&|/l&>Parents: % if ( $hash{MemberOf} ) { % for my $link ( values %{$hash{MemberOf}} ) {
    % } }
    <&|/l&>Children: % if ( $hash{Members} ) { % for my $link ( values %{$hash{Members}} ) {
    % } }
    <&|/l&>Refers to: % if ( $hash{RefersTo} ) { % for my $link ( values %{$hash{RefersTo}} ) {
    % } }
    <&|/l&>Referred to by: % if ( $hash{ReferredToBy} ) { % for my $link ( values %{$hash{ReferredToBy}} ) { % # Skip reminders % next if (UNIVERSAL::isa($link->BaseObj, 'RT::Ticket') && $link->BaseObj->Type eq 'reminder');
    % } }
    <&|/l&>(Check box to delete)

    <&|/l&>New Links

    <&|/l&>Enter tickets or URIs to link to. Separate multiple entries with spaces.
    <&|/l&>Depends on:
    <&|/l&>Depended on by:
    <&|/l&>Parents:
    <&|/l&>Children:
    <&|/l&>Refers to:
    <&|/l&>Referred to by:
    <%ARGS> $Collection <%INIT> my @types = qw/DependsOn DependedOnBy Members MemberOf RefersTo ReferredToBy/; my $record_type = $Collection->RecordClass; $record_type =~ s/^RT:://; $record_type =~ s/::/-/g; my %hash; if ( $Collection->Count ) { my $first_record = $Collection->Next; # we only show current links that exist on all the records for my $type ( @types ) { my $target_or_base = $type =~ /DependsOn|MemberOf|RefersTo/ ? 'Target' : 'Base'; my $links = $first_record->$type; while ( my $link = $links->Next ) { $hash{$type}{$link->$target_or_base} = $link; } } while ( my $record = $Collection->Next ) { for my $type ( @types ) { my $target_or_base = $type =~ /DependsOn|MemberOf|RefersTo/ ? 'Target' : 'Base'; # if $hash{$type} is empty, no need to check any more next unless $hash{$type} && keys %{$hash{$type}}; my %exists; while ( my $link = $record->$type->Next ) { $exists{$link->$target_or_base}++; } for ( keys %{$hash{$type}} ) { delete $hash{$type}{$_} unless $exists{$_}; } } } } rt-4.2.12/share/html/Elements/Callback000644 000765 000024 00000004345 12555754775 020152 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> $ARGS{'CallbackPage'} = delete $ARGS{'Page'} || $m->callers(1)->path; $ARGS{'CallbackName'} = delete $ARGS{'_CallbackName'}; RT->Deprecated( Instead => '$m->callback', Remove => "4.4", ); return $m->callback( %ARGS ); rt-4.2.12/share/html/Elements/Checkbox000644 000765 000024 00000004431 12555754775 020200 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} /> <%ARGS> $Name => undef $Default => undef $True => undef $False => undef $IsChecked => undef <%INIT> $IsChecked = ($Default && $Default =~ /checked/i) ? ' checked="checked" ' : ""; 1; rt-4.2.12/share/html/Elements/CollectionAsTable/000755 000765 000024 00000000000 12555754775 022054 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Elements/CollectionList000644 000765 000024 00000014712 12555754775 021404 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> if (!$Collection && $Class eq 'RT::Tickets') { $Collection = RT::Tickets->new( $session{'CurrentUser'} ); $Collection->FromSQL($Query); } $TotalFound = $Collection->CountAll() unless defined $TotalFound; return '' if !$TotalFound && !$ShowEmpty; if ( $Rows ) { if ( $TotalFound <= $Rows ) { $Page = 1; } else { my $MaxPage = int( $TotalFound / $Rows ) + ( $TotalFound % $Rows ? 1 : 0 ); $Page = $MaxPage if $Page > $MaxPage; } } # XXX: ->{'order_by'} is hacky, but there is no way to check if # collection is ordered or not if ( @OrderBy && ($AllowSorting || !$Collection->{'order_by'}) ) { if ( $OrderBy[0] =~ /\|/ ) { @OrderBy = split /\|/, $OrderBy[0]; @Order = split /\|/,$Order[0]; } @OrderBy = grep length, @OrderBy; $Collection->OrderByCols( map { { FIELD => $OrderBy[$_], ORDER => $Order[$_] } } ( 0 .. $#OrderBy ) ); } $Collection->RowsPerPage( $Rows ) if $Rows; $Page = 1 unless $Page && $Page > 0; # workaround problems with $Page = '' or undef $Collection->GotoPage( $Page - 1 ); # SB uses page 0 as the first page # DisplayFormat lets us use a "temporary" format for display, while # still using our original format for next/prev page links. # bulk update uses this feature to add checkboxes $DisplayFormat ||= $Format; # Scrub the html of the format string to remove any potential nasties. $Format = $m->comp('/Elements/ScrubHTML', Content => $Format); $DisplayFormat = $m->comp('/Elements/ScrubHTML', Content => $DisplayFormat); my @Format = $m->comp('/Elements/CollectionAsTable/ParseFormat', Format => $DisplayFormat); # Find the maximum number of items in any row, so we can pad the table. my ($maxitems, $item) = (0, 0); foreach my $col (@Format) { $item++; if ( $col->{title} && ($col->{title} eq 'NEWLINE') ) { $item = 0; } else { $maxitems = $item if $item > $maxitems; } } $Class ||= $Collection->ColumnMapClassName; if ($Class =~ /::/) { # older passed in value $Class =~ s/s$//; $Class =~ s/:/_/g; } $m->out(''); if ( $ShowHeader ) { $m->comp('/Elements/CollectionAsTable/Header', %ARGS, Class => $Class, Format => \@Format, FormatString => $Format, Order => \@Order, OrderBy => \@OrderBy, Rows => $Rows, Page => $Page, AllowSorting => $AllowSorting, BaseURL => $BaseURL, GenericQueryArgs => $GenericQueryArgs, maxitems => $maxitems, PassArguments => \@PassArguments, ); } my ($i, $column_map) = (0, {}); while ( my $record = $Collection->Next ) { # Every ten rows, flush the buffer and put something on the page. $m->flush_buffer unless ++$i % 10; my $warning = 0; my $Classes = ''; $m->callback( CallbackName => 'EachRow', Record => $record, Warning => \$warning, Classes => \$Classes, Format => \@Format, ); $m->comp('/Elements/CollectionAsTable/Row', i => $i, Format => \@Format, record => $record, maxitems => $maxitems, ColumnMap => $column_map, Class => $Class, Warning => $warning, Classes => $Classes, ); } $m->out('
    '); if ( $Rows && $ShowNavigation && $TotalFound > $Rows ) { my $oddRows = ($TotalFound && $TotalFound % $Rows == 0 )? 0 : 1; my $pages = int( $TotalFound / $Rows ) + $oddRows; $pages = 1 if $pages < 1; my %query_args = map { $_ => $ARGS{$_} } @PassArguments; $m->comp( '/Elements/CollectionListPaging', BaseURL => $BaseURL, Rows => $Rows, TotalFound => $TotalFound, CurrentPage => $Page, Pages => $pages, URLParams => \%query_args ); } <%ARGS> $Class => '' $Collection => undef $TotalFound => undef $Format => undef $DisplayFormat => undef @Order => () @OrderBy => () $GenericQueryArgs => undef $Rows => undef $Page => 1 $Title => loc('Ticket Search') $BaseURL => RT->Config->Get('WebPath') . $m->request_comp->path .'?' @PassArguments => qw( Query Format Rows Page Order OrderBy) $AllowSorting => 0 $ShowNavigation => 1 $ShowHeader => 1 $ShowEmpty => 0 $Query => 0 rt-4.2.12/share/html/Elements/CollectionListPaging000644 000765 000024 00000007217 12555754775 022534 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $BaseURL => undef $Rows => undef $TotalFound => undef $CurrentPage => undef $Pages => undef $URLParams => undef <%INIT> $BaseURL = $m->interp->apply_escapes($BaseURL, 'h'); $m->out(qq{
    }); if ($Pages == 1) { $m->out(loc('Page 1 of 1')); } else{ $m->out(loc('Page') . ' '); my $prev = $m->interp->apply_escapes($m->comp( '/Elements/QueryString', %$URLParams, Page => ( $CurrentPage - 1 ) ), 'h'); my $next = $m->interp->apply_escapes($m->comp( '/Elements/QueryString', %$URLParams, Page => ( $CurrentPage + 1 ) ), 'h'); my %show; $show{1} = 1; $show{$_} = 1 for (($CurrentPage - 2)..($CurrentPage + 2)); $show{$Pages} = 1; my $dots; for my $number ( 1 .. $Pages ) { if ( $show{$number} ) { $dots = undef; my $qs = $m->interp->apply_escapes($m->comp( '/Elements/QueryString', %$URLParams, Page => $number ), 'h'); $m->out(qq{}); if ( $number == $CurrentPage ) { $m->out(qq{$number }); } else { $m->out(qq{$number }); } } elsif ( not $dots ) { $dots = 1; $m->out(qq{...}); } $m->out(qq{}); } if ($CurrentPage > 1) { $m->out(qq{}.loc('Previous') . qq{}); } if (($CurrentPage * $Rows) < $TotalFound) { $m->out(qq{}.loc('Next').qq{}); } } $m->out(qq{
    }); rt-4.2.12/share/html/Elements/ColumnMap000644 000765 000024 00000021470 12555754775 020347 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Class => 'RT__Ticket' $Name $Attr => undef <%ONCE> use Scalar::Util; # This is scary and should totally be refactored -- jesse my ($COLUMN_MAP, $WCOLUMN_MAP); $WCOLUMN_MAP = $COLUMN_MAP = { id => { attribute => 'id', title => '#', # loc align => 'right', value => sub { return $_[0]->id } }, Created => { attribute => 'Created', title => 'Created', # loc value => sub { return $_[0]->CreatedObj->AsString } }, CreatedRelative => { attribute => 'Created', title => 'Created', # loc value => sub { return $_[0]->CreatedObj->AgeAsString } }, CreatedBy => { attribute => 'Creator', title => 'Created By', # loc value => sub { return $_[0]->CreatorObj->Name } }, LastUpdated => { attribute => 'LastUpdated', title => 'Last Updated', # loc value => sub { return $_[0]->LastUpdatedObj->AsString } }, LastUpdatedRelative => { attribute => 'LastUpdated', title => 'Last Updated', # loc value => sub { return $_[0]->LastUpdatedObj->AgeAsString } }, LastUpdatedBy => { attribute => 'LastUpdatedBy', title => 'Last Updated By', # loc value => sub { return $_[0]->LastUpdatedByObj->Name } }, CustomField => { attribute => sub { return shift @_ }, title => sub { return pop @_ }, value => sub { my $self = $WCOLUMN_MAP->{CustomField}; my $cf = $self->{load}->(@_); return unless $cf->Id; return $self->{render}->( $cf, $cf->ValuesForObject($_[0])->ItemsArrayRef ); }, load => sub { # Cache the CF object on a per-request basis, to avoid # having to load it for every row my $key = join("-","CF", $_[0]->CustomFieldLookupType, $_[0]->CustomFieldLookupId, $_[-1]); my $cf = $m->notes($key); unless ($cf) { $cf = $_[0]->LoadCustomFieldByIdentifier($_[-1]); RT->Logger->notice("Unable to load $_[-1] for ".$_[0]->CustomFieldLookupType." ".$_[0]->CustomFieldLookupId) unless $cf->Id; $m->notes($key, $cf); } return $cf; }, render => sub { my ($cf, $ocfvs) = @_; my $comp = $m->comp_exists("/Elements/ShowCustomField".$cf->Type) ? "/Elements/ShowCustomField".$cf->Type : undef; my @values = map { $comp ? \($m->scomp( $comp, Object => $_ )) : $_->Content } @$ocfvs; if (@values > 1) { for my $value (splice @values) { push @values, \"
  • ", $value, \"
  • \n"; } @values = (\"
      ", @values, \"
    "); } return @values; }, }, CheckBox => { title => sub { my $name = $_[1] || 'SelectedTickets'; my $checked = $DECODED_ARGS->{ $name .'All' }? 'checked="checked"': ''; return \qq{}; }, value => sub { my $id = $_[0]->id; my $name = $_[2] || 'SelectedTickets'; return \qq{} if $DECODED_ARGS->{ $name . 'All'}; my $arg = $DECODED_ARGS->{ $name }; my $checked = ''; if ( $arg && ref $arg ) { $checked = 'checked="checked"' if grep $_ == $id, grep { defined and length } @$arg; } elsif ( $arg ) { $checked = 'checked="checked"' if $arg == $id; } return \qq{} }, }, RadioButton => { title => \' ', value => sub { my $id = $_[0]->id; my $name = $_[2] || 'SelectedTicket'; my $arg = $DECODED_ARGS->{ $name }; my $checked = ''; $checked = 'checked="checked"' if $arg && $arg == $id; return \qq{}; }, }, (map { my $value = RT->Config->Get($_); $_ => { value => sub { return \$value } }; } qw(WebPath WebBaseURL WebURL)), WebRequestPath => { value => sub { substr( $m->request_path, 1 ) } }, WebRequestPathDir => { value => sub { substr( $m->request_comp->dir_path, 1 ) } }, WebHomePath => { value => sub { my $path = RT->Config->Get("WebPath"); if (not $session{CurrentUser}->Privileged) { $path .= "/SelfService"; } return \$path; }, }, CurrentUser => { value => sub { $session{CurrentUser}->id } }, CurrentUserName => { value => sub { $session{CurrentUser}->Name } }, }; $COLUMN_MAP->{'CF'} = $COLUMN_MAP->{'CustomField'}; Scalar::Util::weaken($WCOLUMN_MAP); my $ROLE_MAP = {}; <%INIT> $m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'Once', CallbackOnce => 1 ); my $generic_with_roles; # Add in roles my $RecordClass = $Class; $RecordClass =~ s/_/:/g; if ($RecordClass->DOES("RT::Record::Role::Roles")) { unless ($ROLE_MAP->{$RecordClass}) { for my $role ($RecordClass->Roles) { my $attrs = $RecordClass->Role($role); $ROLE_MAP->{$RecordClass}{$role} = { title => $role, attribute => $attrs->{Column} || "$role.EmailAddress", value => sub { return \($m->scomp("/Elements/ShowPrincipal", Object => $_[0]->RoleGroup($role) ) ) }, }; $ROLE_MAP->{$RecordClass}{$role . "s"} = $ROLE_MAP->{$RecordClass}{$role} unless $attrs->{Single}; } } $generic_with_roles = { %{$COLUMN_MAP}, %{$ROLE_MAP->{$RecordClass}} }; } else { $generic_with_roles = { %{$COLUMN_MAP} }; } $m->callback( COLUMN_MAP => $generic_with_roles ); # first deal with class specific things if (RT::Interface::Web->ComponentPathIsSafe($Class) and $m->comp_exists("/Elements/$Class/ColumnMap")) { my $class_map = $m->comp("/Elements/$Class/ColumnMap", Attr => $Attr, Name => $Name, GenericMap => $generic_with_roles ); return $class_map if defined $class_map; } return GetColumnMapEntry( Map => $generic_with_roles, Name => $Name, Attribute => $Attr ); rt-4.2.12/share/html/Elements/CreateTicket000644 000765 000024 00000005120 12555754775 021015 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    callback(CallbackName => 'InFormElement'); > % my $button_start = ''; % my $queue_selector = $m->scomp('/Elements/SelectNewTicketQueue', OnChange => 'document.CreateTicketInQueue.submit()', SendTo => $SendTo ); <&|/l_unsafe, $button_start, $button_end, $queue_selector &>[_1]New ticket in[_2] [_3] % $m->callback(CallbackName => 'BeforeFormEnd');
    <%ARGS> $SendTo => '/Ticket/Create.html', rt-4.2.12/share/html/Elements/Crypt/000755 000765 000024 00000000000 12555754775 017626 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Elements/CryptStatus000644 000765 000024 00000016212 12555754775 020757 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Message $WarnUnsigned => undef $Reverify => 1 <%INIT> my @runs; my $needs_unsigned_warning = $WarnUnsigned; my @protocols = RT::Crypt->EnabledProtocols; my $re_protocols = join '|', map "\Q$_\E", @protocols; foreach ( $Message->SplitHeaders ) { if ( s/^X-RT-($re_protocols)-Status:\s*//io ) { push @runs, [ $1, RT::Crypt->ParseStatus( Protocol => "$1", Status => $_ ) ]; } $needs_unsigned_warning = 0 if /^X-RT-Incoming-Signature:/; # if this is not set, then the email is generated by RT, and so we don't # need "email is unsigned" warnings $needs_unsigned_warning = 0 if not /^Received:/; } return unless @runs or $needs_unsigned_warning; my $reverify_cb = sub { my $top = shift; my $txn = $top->TransactionObj; unless ( $txn && $txn->id ) { return (0, "Couldn't get transaction of attachment #". $top->id); } my $attachments = $txn->Attachments->Clone; $attachments->Limit( FIELD => 'ContentType', VALUE => 'application/x-rt-original-message' ); my $original = $attachments->First; unless ( $original ) { return (0, "Couldn't find attachment with original email of transaction #". $txn->id); } my $parser = RT::EmailParser->new(); $parser->SmartParseMIMEEntityFromScalar( Message => $original->Content, Decode => 0, Exact => 1, ); my $entity = $parser->Entity; unless ( $entity ) { return (0, "Couldn't parse content of attachment #". $original->id); } my @res = RT::Crypt->VerifyDecrypt( Entity => $entity ); return (0, "Content of attachment #". $original->id ." is not signed and/or encrypted") unless @res; $top->DelHeader("X-RT-$_-Status") for RT::Crypt->Protocols; $top->AddHeader(map { ("X-RT-". $_->{Protocol} ."-Status" => $_->{'status'} ) } @res); $top->DelHeader("X-RT-Privacy"); my %protocols; $protocols{$_->{Protocol}}++ for @res; $top->AddHeader('X-RT-Privacy' => $_ ) for sort keys %protocols; $top->DelHeader('X-RT-Incoming-Signature'); my @status = RT::Crypt->ParseStatus( Protocol => $res[0]{'Protocol'}, Status => $res[0]{'status'}, ); for ( @status ) { if ( $_->{'Operation'} eq 'Verify' && $_->{'Status'} eq 'DONE' ) { $top->AddHeader( 'X-RT-Incoming-Signature' => $_->{'UserString'} ); $needs_unsigned_warning = 0; } } return (1, "Reverified original message"); }; my @messages; foreach my $run ( @runs ) { my $protocol = shift @$run; $protocol = $RT::Crypt::PROTOCOLS{lc $protocol}; foreach my $line ( @$run ) { if ( $line->{'Operation'} eq 'KeyCheck' ) { next unless $Reverify; # if a public key was missing during verification then we want try again next unless $line->{'KeyType'} eq 'public' && $line->{'Status'} eq 'MISSING'; # but only if we have key my %key = RT::Crypt->GetPublicKeyInfo( Protocol => $protocol, Key => $line->{'Key'} ); if ( $key{'info'} ) { my ($status, $msg) = $reverify_cb->($Message); unless ($status) { $RT::Logger->error($msg); } else { return $m->comp('SELF', %ARGS, Reverify => 0); } } else { push @messages, { Tag => $protocol, Classes => [qw/keycheck bad/], Value => $m->interp->apply_escapes( loc( "Public key '0x[_1]' is required to verify signature", $line->{'Key'} ), 'h'), }; } } elsif ( $line->{'Operation'} eq 'PassphraseCheck' ) { next if $line->{'Status'} eq 'DONE'; push @messages, { Tag => $protocol, Classes => ['passphrasecheck', lc $line->{Status}], Value => $m->interp->apply_escapes( loc( $line->{'Message'} ), 'h'), }; } elsif ( $line->{'Operation'} eq 'Decrypt' ) { push @messages, { Tag => $protocol, Classes => ['decrypt', lc $line->{Status}], Value => $m->interp->apply_escapes( loc( $line->{'Message'} ), 'h'), }; } elsif ( $line->{'Operation'} eq 'Verify' ) { push @messages, { Tag => $protocol, Classes => ['verify', lc $line->{Status}, 'trust-'.($line->{Trust} || 'UNKNOWN')], Value => $m->interp->apply_escapes( loc( $line->{'Message'} ), 'h'), }; } else { next if $line->{'Status'} eq 'DONE'; push @messages, { Tag => $protocol, Classes => [lc $line->{Operation}, lc $line->{Status}], Value => $m->interp->apply_escapes( loc( $line->{'Message'} ), 'h'), } } } } push @messages, { Tag => "Signing", Classes => ['verify', 'bad'], Value => loc('Warning! This is NOT signed!') } if $needs_unsigned_warning; return unless @messages; my %seen; @messages = grep !$seen{$_->{Value}}++, @messages; return @messages; rt-4.2.12/share/html/Elements/CSRF000644 000765 000024 00000006252 12555754775 017212 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Possible cross-site request forgery') &> <& /Elements/Tabs &>

    <&|/l&>Possible cross-site request forgery

    % my $strong_start = ""; % my $strong_end = "";

    <&|/l_unsafe, $strong_start, $strong_end, $Reason, $action &>RT has detected a possible [_1]cross-site request forgery[_2] for this request, because [_3]. A malicious attacker may be trying to [_1][_4][_2] on your behalf. If you did not initiate this request, then you should alert your security team.

    % my $start = qq||; % my $end = qq||;

    <&|/l_unsafe, $escaped_path, $action, $start, $end &>If you really intended to visit [_1] and [_2], then [_3]click here to resume your request[_4].

    <& /Elements/Footer, %ARGS &> % $m->abort; <%ARGS> $OriginalURL => '' $Reason => '' $Token => '' <%INIT> my $escaped_path = $m->interp->apply_escapes($OriginalURL, 'h'); $escaped_path = "$escaped_path"; my $url_with_token = URI->new($OriginalURL); $url_with_token->query_form([CSRF_Token => $Token]); my $action = RT::Interface::Web::PotentialPageAction($OriginalURL) || loc("perform actions"); rt-4.2.12/share/html/Elements/Dashboards000644 000765 000024 00000004453 12555754775 020530 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/Widgets/TitleBox, title => loc('Dashboards'), title_href => RT->Config->Get('WebPath').'/Dashboards/index.html', titleright => loc("Edit"), titleright_href => RT->Config->Get('WebPath').'/Dashboards/index.html', &> <& /Dashboards/Elements/ShowDashboards, IncludeSuperuserGroups => 0 &> rt-4.2.12/share/html/Elements/EditCustomField000644 000765 000024 00000012160 12555754775 021474 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $Type = $CustomField->Type; unless ( $Type ) { # if we can't see the type, all hell will break loose. $RT::Logger->error( "Custom field #". $CustomField->id ." has empty type" ); return; } my $Values; if ( $Object ) { $Grouping =~ s/\W//g if $Grouping; if ( $Object->Id ) { $Values = $Object->CustomFieldValues( $CustomField->id ); $Values->Columns( qw( id CustomField ObjectType ObjectId Disabled Content ContentType ContentEncoding SortOrder Creator Created LastUpdatedBy LastUpdated ) ); # Don't take care of $Values if there isn't values inside undef ( $Values ) unless ( $Values->Count ); } } my $Name; if ( !$NamePrefix ) { $Name = GetCustomFieldInputName(Object => $Object, CustomField => $CustomField, Grouping => $Grouping ); } # Always fill $Default with submited values if it's empty if ( ( !defined $Default || !length $Default ) && $DefaultsFromTopArguments ) { my %TOP = %$DECODED_ARGS; $Default = $TOP{ $Name } if $Name; # check both -Values and -Value for back compatibility if ( $NamePrefix ) { $Default //= $TOP{ $NamePrefix . $CustomField->Id . '-Values' } // $TOP{ $NamePrefix . $CustomField->Id . '-Value' }; } else { my $prefix = GetCustomFieldInputNamePrefix(Object => $Object, CustomField => $CustomField, Grouping => $Grouping ); $Default //= $TOP{ $prefix . 'Values' } // $TOP{ $prefix . 'Value' }; } } my $MaxValues = $CustomField->MaxValues; if ($MaxValues == 1 && $Values) { # what exactly is this doing? Without the "unless" it breaks RTFM # transaction extraction into articles. $Default = ($Values->First ? $Values->First->Content : '') unless $Default; $Values->GotoFirstItem; } # The "Magic" hidden input causes RT to know that we were trying to edit the field, even if # we don't see a value later, since browsers aren't compelled to submit empty form fields $m->out("\n".''."\n"); my $EditComponent = "EditCustomField$Type"; $m->callback( %ARGS, CallbackName => 'EditComponentName', Name => \$EditComponent, CustomField => $CustomField, Object => $Object, Rows => \$Rows, Cols => \$Cols); $EditComponent = "EditCustomField$Type" unless $m->comp_exists($EditComponent); return $m->comp( $EditComponent, %ARGS, Rows => $Rows, Cols => $Cols, Default => $Default, Object => $Object, Values => $Values, MaxValues => $MaxValues, Multiple => ($MaxValues != 1), NamePrefix => $NamePrefix, CustomField => $CustomField, Name => $Name, $CustomField->BasedOn && $Name ? ( BasedOnName => GetCustomFieldInputName(Object => $Object, CustomField => $CustomField->BasedOnObj, Grouping => $Grouping) ) : (), ); <%ARGS> $Grouping => undef $Object => undef $CustomField => undef $NamePrefix => undef $Rows => 5 $Cols => 15 $Default => undef $DefaultsFromTopArguments => 1, rt-4.2.12/share/html/Elements/EditCustomFieldAutocomplete000644 000765 000024 00000007752 12555754775 024071 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ( $Multiple ) { <%INIT> my $name = $Name || $NamePrefix . $CustomField->Id . ( $Multiple ? '-Values' : '-Value' ); if ( $Default && !$Multiple ) { $Default =~ s/\s*\r*\n\s*/ /g; } if ( $Multiple and $Values ) { $Default = ''; while (my $value = $Values->Next ) { $Default .= $value->Content ."\n"; } } my $Context = ""; if ($CustomField->ContextObject) { $Context .= "ContextId=" . $CustomField->ContextObject->Id . "&"; $Context .= "ContextType=". ref($CustomField->ContextObject) . "&"; } <%ARGS> $CustomField => undef $NamePrefix => undef $Name => undef $Default => undef $Values => undef $Multiple => undef $Rows => undef $Cols => undef rt-4.2.12/share/html/Elements/EditCustomFieldBinary000644 000765 000024 00000005601 12555754775 022643 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % while ( $Values and my $value = $Values->Next ) { %# XXX - let user download the file(s) here? <% $value->Content %>
    % } % if ($MaxValues && $Values && $Values->Count >= $MaxValues ) {
    <&|/l&>Reached maximum number, so new values will override old ones.
    % } <%INIT> my $name = $Name || $NamePrefix . $CustomField->Id . '-Upload'; my $delete_name = $name; $delete_name =~ s!-Upload$!-DeleteValueIds!; <%ARGS> $Object => undef $CustomField => undef $NamePrefix => undef $Name => undef $Default => undef $Values => undef $MaxValues => undef rt-4.2.12/share/html/Elements/EditCustomFieldCombobox000644 000765 000024 00000005636 12555754775 023177 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % while ($Values and my $value = $Values->Next and $Multiple) {
    % } % (!$Multiple or !$MaxValues or !$Values or $Values->Count < $MaxValues) or return; <& /Widgets/ComboBox, Name => $name, Default => $Default, Rows => $Rows, Class => "CF-".$CustomField->id."-Edit", Values => [map {$_->Name} @{$CustomField->Values->ItemsArrayRef}], &> <%INIT> my $name = $Name || $NamePrefix . $CustomField->Id . '-Value'; my $delete_name = $name; $delete_name =~ s!-Value$!-DeleteValueIds!; <%ARGS> $Object => undef $CustomField => undef $NamePrefix => undef $Default => undef $Values => undef $Multiple => 0 $Rows => undef $MaxValues => undef $Name => undef rt-4.2.12/share/html/Elements/EditCustomFieldCustomGroupings000644 000765 000024 00000005427 12555754775 024575 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % foreach my $group ( @Groupings ) { <&| /Widgets/TitleBox, title => $group? loc($group) : loc('Custom Fields'), class => $css_class .' '. ($group? CSSClass("$css_class-$group") : ''), id => ($group ? CSSClass("$css_class-$group") : $css_class), hide_empty => 1, %$TitleBoxARGS, &> % $ARGS{CustomFields} = $CustomFieldGenerator->() if $CustomFieldGenerator; <& EditCustomFields, %ARGS, Object => $Object, Grouping => $group &> % } <%ARGS> $Object $CustomFieldGenerator => undef, @Groupings => (RT::CustomField->CustomGroupings( $Object ), '') <%INIT> my $css_class = lc(ref($Object)||$Object); $css_class =~ s/^rt:://; $css_class =~ s/::/-/g; $css_class = CSSClass($css_class); $css_class .= '-info-cfs'; my $TitleBoxARGS = delete $ARGS{TitleBoxARGS} || {}; rt-4.2.12/share/html/Elements/EditCustomFieldDate000644 000765 000024 00000005037 12555754775 022277 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % my $name = $Name || $NamePrefix.$CustomField->Id.'-Values'; <& /Elements/SelectDate, Name => "$name", current => 0, ShowTime => 0, $KeepValue && $Default ? (Default => $Default) : () &> (<%$DateObj->AsString(Time => 0, Timezone => 'utc')%>) <%INIT> my $DateObj = RT::Date->new ( $session{'CurrentUser'} ); $DateObj->Set( Format => 'unknown', Value => $Default, Timezone => 'utc' ); <%ARGS> $Object => undef $CustomField => undef $NamePrefix => undef $Default => undef $Values => undef $MaxValues => 1 $Name => undef $KeepValue => undef rt-4.2.12/share/html/Elements/EditCustomFieldDateTime000644 000765 000024 00000005030 12555754775 023107 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % my $name = $Name || $NamePrefix.$CustomField->Id.'-Values'; <& /Elements/SelectDate, Name => "$name", current => 0, $KeepValue && $Default ? (Default => $Default) : () &> (<%$DateObj->AsString($KeepValue ? ( Timezone => 'utc' ) : () )%>) <%INIT> my $DateObj = RT::Date->new ( $session{'CurrentUser'} ); $DateObj->Set( Format => $Format, Value => $Default ); <%ARGS> $Object => undef $CustomField => undef $NamePrefix => undef $Default => undef $Values => undef $MaxValues => 1 $Name => undef $Format => 'ISO' $KeepValue => undef rt-4.2.12/share/html/Elements/EditCustomFieldFreeform000644 000765 000024 00000005600 12555754775 023163 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % my $name = $Name || $NamePrefix . $CustomField->Id . ( $Multiple ? '-Values' : '-Value' ); % if ($Multiple) { % } else { % } <%INIT> if ( $Multiple and $Values ) { $Default = join "\n", map $_->Content, @{ $Values->ItemsArrayRef }; } unless ( $Multiple ) { $Default =~ s/\s*\n+\s*/ /g if $Default; } <%ARGS> $Object => undef $CustomField => undef $NamePrefix => undef $Name => undef $Default => undef $Values => undef $Multiple => undef $Cols $Rows rt-4.2.12/share/html/Elements/EditCustomFieldImage000644 000765 000024 00000005375 12555754775 022451 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % while ($Values and my $value = $Values->Next ) { <& ShowCustomFieldImage, Object => $value &>
    % } % if ($MaxValues && $Values && $Values->Count >= $MaxValues ) {
    <&|/l&>Reached maximum number, so new values will override old ones.
    % } <%INIT> my $name = $Name || $NamePrefix . $CustomField->Id . '-Upload'; my $delete_name = $name; $delete_name =~ s!-Upload$!-DeleteValueIds!; <%ARGS> $Object => undef $CustomField => undef $NamePrefix => undef $Name => undef $Default => undef $Values => undef $MaxValues => undef rt-4.2.12/share/html/Elements/EditCustomFieldIPAddress000644 000765 000024 00000004070 12555754775 023234 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> return $m->comp( 'EditCustomFieldFreeform', %ARGS ); rt-4.2.12/share/html/Elements/EditCustomFieldIPAddressRange000644 000765 000024 00000004070 12555754775 024211 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> return $m->comp( 'EditCustomFieldFreeform', %ARGS ); rt-4.2.12/share/html/Elements/EditCustomFields000644 000765 000024 00000010336 12555754775 021662 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->callback( CallbackName => 'BeforeCustomFields', Object => $Object, % Grouping => $Grouping, ARGSRef => \%ARGS, CustomFields => $CustomFields); % if ( $WRAP ) { <<% $WRAP %> class="edit-custom-fields"> % } % while ( my $CustomField = $CustomFields->Next ) { % next unless $CustomField->CurrentUserHasRight('ModifyCustomField'); % my $Type = $CustomField->Type || 'Unknown'; <<% $FIELD %> class="edit-custom-field cftype-<% $Type %>"> <<% $CELL %> class="cflabel"> <% $CustomField->Name %>:
    <% $CustomField->FriendlyType %> > <<% $CELL %> class="entry"> % my $default = $m->notes('Field-' . $CustomField->Id); % $default ||= $ARGS{"CustomField-". $CustomField->Id }; <& /Elements/EditCustomField, %ARGS, CustomField => $CustomField, Default => $default, Object => $Object, &> % if (my $msg = $m->notes('InvalidField-' . $CustomField->Id)) {
    <% $msg %> % } elsif ($ShowHints and $CustomField->FriendlyPattern) {
    <&|/l, $CustomField->FriendlyPattern &>Input must match [_1] % } > % $m->callback( CallbackName => 'AfterCustomFieldValue', CustomField => $CustomField, Object => $Object, Grouping => $Grouping ); > % } % if ( $WRAP ) { > % } % $m->callback( CallbackName => 'AfterCustomFields', Object => $Object, % Grouping => $Grouping, ARGSRef => \%ARGS ); <%INIT> $CustomFields ||= $Object->CustomFields; $CustomFields->LimitToGrouping( $Object => $Grouping ) if defined $Grouping; $m->callback( %ARGS, CallbackName => 'MassageCustomFields', CustomFields => $CustomFields ); # don't print anything if there is no custom fields return unless $CustomFields->First; $CustomFields->GotoFirstItem; $AsTable ||= $InTable; my $FIELD = $AsTable ? 'tr' : 'div'; my $CELL = $AsTable ? 'td' : 'div'; my $WRAP = ''; if ( $AsTable ) { $WRAP = 'table' unless $InTable; } else { $WRAP = 'div'; } <%ARGS> $Object $CustomFields => undef $Grouping => undef $AsTable => 1 $InTable => 0 $ShowHints => 1 rt-4.2.12/share/html/Elements/EditCustomFieldSelect000644 000765 000024 00000017113 12555754775 022637 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# Build up the set of cascading select boxes as "guides" %# each one limits the options of the final one a bit %# (perhaps by tweaking the .display style?) % my $selected = 0; % my @category; % my $out = $m->scomp('SELF:options', %ARGS, SelectedRef => \$selected, CategoryRef => \@category); % if (!$HideCategory and @category and not $CustomField->BasedOnObj->id) { %# XXX - Hide this select from w3m?
    % } elsif ($CustomField->BasedOnObj->id) { % } % if ( $RenderType eq 'List' ) {
    % if ( $checktype eq 'radio' ) {
    />
    % } % my $CFVs = $CustomField->Values; % while ( my $value = $CFVs->Next ) { % my $content = $value->Name; % my $labelid = "$name-". $value->id;
    />
    % }
    % } else { % if (@category) { %# this hidden select is to supply a full list of values, %# see filter_cascade_select() in js/cascaded.js % } % } <%init> # Handle render types $RenderType ||= $CustomField->RenderType; if ( $RenderType eq 'Dropdown' ) { # Turn it into a dropdown $Rows = 0; } my ($checktype, $name); if ( $MaxValues == 1 and $RenderType eq 'List' ) { ($checktype, $name) = ('radio', $Name || $NamePrefix . $CustomField->Id . '-Value'); } else { ($checktype, $name) = ('checkbox', $Name || $NamePrefix . $CustomField->Id . '-Values'); } @Default = grep defined && length, @Default; if ( !@Default && $Values ) { @Default = map $_->Content, @{ $Values->ItemsArrayRef }; } my %default = map {lc $_ => 1} @Default; <%ARGS> $Object => undef $CustomField => undef $NamePrefix => undef $Name => undef $BasedOnName => undef @Default => () $Values => undef $Multiple => 0 $Rows => undef $HideCategory => 0 $RenderType => undef $MaxValues => 1 <%METHOD options> % @Default = grep defined && length, @Default; % # $Values->HasEntry is too slow here % if ( !@Default && $Values ) { % @Default = map $_->Content, @{$Values->ItemsArrayRef}; % } % $_ = lc $_ foreach @Default; % my $selected; % my $CFVs = $CustomField->Values; % my @levels; % while ( my $value = $CFVs->Next ) { % my $name = $value->Name; % my $category = $value->Category || ''; % my $level = (split /:/, $category, 2)[0] || ''; % while (@levels) { % if ($levels[-1] eq $level) { % $level = ''; % last; % } elsif (index($level, $levels[-1]) != 0) { % $m->out(''); % pop @levels; % } else { % last; % } % } % if ( length $level ) { % push @$CategoryRef, [0+@levels, $level]; % push @levels, $level; % } % } % for (@levels) { % } <%ARGS> $CustomField => undef @Default => () $Values => undef $SelectedRef => undef $CategoryRef => undef rt-4.2.12/share/html/Elements/EditCustomFieldText000644 000765 000024 00000005501 12555754775 022342 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % while ($Values and my $value = $Values->Next ) {
    % } % if (!$MaxValues or !$Values or $Values->Count < $MaxValues) { % } <%INIT> # XXX - MultiValue textarea is for now outlawed. $MaxValues = 1; my $name = $Name || $NamePrefix . $CustomField->Id . '-Values'; <%ARGS> $Object => undef $CustomField => undef $NamePrefix => '' $Name => undef $Default => undef $Values => undef $MaxValues => undef $Cols $Rows rt-4.2.12/share/html/Elements/EditCustomFieldWikitext000644 000765 000024 00000005453 12555754775 023234 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % while ($Values and my $value = $Values->Next ) {
    % } % if (!$MaxValues or !$Values or $Values->Count < $MaxValues) { % } <%INIT> # XXX - MultiValue textarea is for now outlawed. $MaxValues = 1; my $name = $Name || $NamePrefix . $CustomField->Id . '-Values'; <%ARGS> $Object => undef $CustomField => undef $NamePrefix => undef $Name => undef $Default => undef $Values => undef $MaxValues => undef $Cols $Rows rt-4.2.12/share/html/Elements/EditLinks000644 000765 000024 00000012641 12555754775 020342 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}

    <&|/l&>Current Links

    <& ShowRelationLabel, Object => $Object, Label => loc('Depends on').':', Relation => 'DependsOn' &> % while (my $link = $Object->DependsOn->Next) {
    % }
    <& ShowRelationLabel, Object => $Object, Label => loc('Depended on by').':', Relation => 'DependedOnBy' &> % while (my $link = $Object->DependedOnBy->Next) {
    % }
    <& ShowRelationLabel, Object => $Object, Label => loc('Parents').':', Relation => 'Parents' &> % while (my $link = $Object->MemberOf->Next) {
    % }
    <& ShowRelationLabel, Object => $Object, Label => loc('Children').':', Relation => 'Children' &> % while (my $link = $Object->Members->Next) {
    % }
    <& ShowRelationLabel, Object => $Object, Label => loc('Refers to').':', Relation => 'RefersTo' &> % while (my $link = $Object->RefersTo->Next) {
    %}
    <& ShowRelationLabel, Object => $Object, Label => loc('Referred to by').':', Relation => 'ReferredToBy' &> % while (my $link = $Object->ReferredToBy->Next) { % # Skip reminders % next if (UNIVERSAL::isa($link->BaseObj, 'RT::Ticket') && $link->BaseObj->Type eq 'reminder');
    % }
    <&|/l&>(Check box to delete)

    <&|/l&>New Links

    <& AddLinks, %ARGS &>
    <%ARGS> $Object => undef rt-4.2.12/share/html/Elements/EditPassword000644 000765 000024 00000005415 12555754775 021065 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % unless ( $cond{'CanSet'} ) { <% $cond{'Reason'} %>
    % } else { % if ( $cond{'RequireCurrent'} ) { % }
    <&|/l, $session{'CurrentUser'}->Name()&>[_1]'s current password:
    <&|/l&>New password:
    <&|/l&>Retype Password:
    % } <%ARGS> $User @Name => qw(CurrentPass NewPass1 NewPass2) <%INIT> my %cond = $User->CurrentUserRequireToSetPassword; rt-4.2.12/share/html/Elements/EditTimeValue000644 000765 000024 00000005137 12555754775 021157 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/SelectTimeUnits, Name => $UnitName, Default => $InUnits &> <%ARGS> $Default => '' $Name => '' $ValueName => '' $UnitName => '' $InUnits => '' <%INIT> $ValueName ||= $Name; $UnitName ||= ($Name||$ValueName) . '-TimeUnits'; $InUnits ||= $m->request_args->{ $UnitName }; $InUnits ||= RT->Config->Get('DefaultTimeUnitsToHours', $session{'CurrentUser'}) ? 'hours' : 'minutes'; if ($Default && $InUnits eq 'hours') { # 0+ here is to remove the ending 0s $Default = 0 + sprintf '%.3f', $Default / 60; } rt-4.2.12/share/html/Elements/EmailInput000644 000765 000024 00000004530 12555754775 020521 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} value="<% $Default || '' %>" <% $Autocomplete ? q{data-autocomplete="Users"} : '' |n%> <% $AutocompleteMultiple ? q{data-autocomplete-multiple} : '' |n%> /> <%ARGS> $Name $Size => 40 $Default => '' $Autocomplete => 1 $AutocompleteMultiple => 0 rt-4.2.12/share/html/Elements/Error000644 000765 000024 00000005370 12555754775 017546 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->callback( %ARGS, error => $error ); % unless ($SuppressHeader) { <& /Elements/Header, Title => $Title &> <& /Elements/Tabs &> % } <& /Elements/ListActions, actions => $Actions &>
    <%$Why%>
    <%$Details%>
    <& /Elements/Footer &> % $m->abort; <%args> $Actions => [] $Details => '' $Title => loc("RT Error") $Why => loc("the calling component did not specify why"), $SuppressHeader => 0, <%INIT> my $error = $Why; $error .= " ($Details)" if defined $Details && length $Details; $RT::Logger->error( $error ); if ( $session{'REST'} ) { $r->content_type('text/plain; charset=utf-8'); $m->out( "Error: " . $Why . "\n" ); $m->out( $Details . "\n" ) if defined $Details && length $Details; $m->abort(); } rt-4.2.12/share/html/Elements/FindUser000644 000765 000024 00000004104 12555754775 020166 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/Widgets/TitleBox, title => loc('Find a user')&> <& /Elements/GotoUser &> rt-4.2.12/share/html/Elements/FoldStanzaJS000644 000765 000024 00000004257 12555754775 020762 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <%loc('Show quoted text')%>
    rt-4.2.12/share/html/Elements/Footer000644 000765 000024 00000006036 12555754775 017713 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# End of div#body from /Elements/PageLayout
    % $m->callback( %ARGS ); % if ($Debug >= 2 ) { % require Data::Dumper; % my $d = Data::Dumper->new([\%ARGS], [qw(%ARGS)]);
    <%$d->Dump() %>
    
    % } <%ARGS> $Debug => 0 $Menu => 1 rt-4.2.12/share/html/Elements/Framekiller000644 000765 000024 00000004754 12555754775 020717 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ( RT->Config->Get('Framebusting') ) { %# This is defeatable. The current best known implemention uses CSS to hide %# the content and JS to re-show it, but that fails poorly for clients that %# don't run JS. % } rt-4.2.12/share/html/Elements/GotoTicket000644 000765 000024 00000004265 12555754775 020533 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
     
    rt-4.2.12/share/html/Elements/GotoUser000644 000765 000024 00000005222 12555754775 020220 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <%ARGS> $Default => '' rt-4.2.12/share/html/Elements/Header000644 000765 000024 00000012063 12555754775 017642 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# index.html gets two doctypes unless we can skip it here % unless ($SkipDoctype) { % } <%$Title%> % if ($Refresh && $Refresh =~ /^(\d+)/ && $1 > 0) { % my $URL = $m->notes->{RefreshURL}; $URL = $URL ? ";URL=$URL" : ""; " /> % } <& JavascriptConfig &> % for my $cssfile ( @css_files ) { % } % for (keys %{$LinkRel || {}}) { % } % if ( $RSSAutoDiscovery ) { % } % my $stylesheet_plugin = "/NoAuth/css/".$style."/InHeader"; % if ($m->comp_exists($stylesheet_plugin) ) { <& $stylesheet_plugin &> % } % # Leave %ARGS for backward compatibility % $m->callback( %ARGS, CallbackName => 'Head', ARGSRef => \%ARGS ); <& HeaderJavascript, focus => $Focus, onload => $onload, RichText => $RichText &> <& /Elements/Framekiller &> > % if ($ShowBar) { <& /Elements/Logo, %ARGS &>
    <& /Elements/PersonalQuickbar, %ARGS &>
    % } <%INIT> $r->headers_out->{'Pragma'} = 'no-cache'; $r->headers_out->{'Cache-control'} = 'no-cache'; my $id = $m->request_comp->path; $id =~ s|^/||g; $id =~ s|/|-|g; $id =~ s|\.html$||g; $id =~ s|index$||g if $id ne 'index'; $id =~ s|-$||g; my $style = $session{'CurrentUser'} ? $session{'CurrentUser'}->Stylesheet : RT->Config->Get('WebDefaultStylesheet'); my @css_files; if ( RT->Config->Get('DevelMode') ) { @css_files = map { "/static/css/$_" } "$style/main.css", RT->Config->Get('CSSFiles'); } else { my $key = RT::Interface::Web::SquishedCSS( $style )->Key; @css_files = "/NoAuth/css/$style/squished-$key.css"; } # We use BodyClass in its $ARGS form so that callbacks have a chance to # massage it push @{$ARGS{'BodyClass'}}, lc $style; if (RT->Config->Get("UseSideBySideLayout", $session{'CurrentUser'})) { push @{$ARGS{'BodyClass'}}, 'sidebyside'; } <%ARGS> #$Focus => 'focus' $Focus => '' $Title => 'RT' $Refresh => 0 $ShowBar => 1 $URL => undef $RSSAutoDiscovery => undef $onload => undef $LinkRel => undef $SkipDoctype => 0 $RichText => 1 $BodyClass => undef rt-4.2.12/share/html/Elements/HeaderJavascript000644 000765 000024 00000005220 12555754775 021666 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $focus => undef $onload => undef % for my $jsfile ( @js_files ) { % } <%INIT> my @js_files; if ( RT->Config->Get('DevelMode') ) { @js_files = map { $_ =~ m{^/} ? $_ : "/static/js/$_" } RT::Interface::Web->JSFiles(); } else { my $key = RT::Interface::Web::SquishedJS()->Key; @js_files = "/NoAuth/js/squished-$key.js"; } rt-4.2.12/share/html/Elements/JavascriptConfig000644 000765 000024 00000005775 12555754775 021722 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> my $Config = {}; $Config->{$_} = RT->Config->Get( $_, $session{CurrentUser} ) for qw(rtname WebPath MessageBoxRichTextHeight); my $CurrentUser = {}; if ($session{CurrentUser} and $session{CurrentUser}->id) { $CurrentUser->{$_} = $session{CurrentUser}->$_ for qw(id Name EmailAddress RealName); $CurrentUser->{Privileged} = $session{CurrentUser}->Privileged ? JSON::true : JSON::false; $Config->{WebHomePath} = RT->Config->Get("WebPath") . (!$session{CurrentUser}->Privileged ? "/SelfService" : ""); } my $Catalog = { quote_in_filename => "Filenames with double quotes can not be uploaded.", #loc }; $_ = loc($_) for values %$Catalog; $m->callback( CallbackName => "Data", CurrentUser => $CurrentUser, Config => $Config, Catalog => $Catalog, ); rt-4.2.12/share/html/Elements/ListActions000644 000765 000024 00000006341 12555754775 020710 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->out($$_) for grep {ref $_} @actions; % if (grep {not ref $_} @actions) {
    <&| /Widgets/TitleBox, title => loc('Results'), %{$titlebox || {}} &>
      % foreach my $action (grep {not ref $_} @actions) {
    • <%$action%>
    • % }
    % } <%init> # backward compatibility, don't use array in new code, but use keyed hash if ( ref( $session{'Actions'} ) eq 'ARRAY' ) { unshift @actions, @{ delete $session{'Actions'} }; $session{'i'}++; } if ( ref( $session{'Actions'}{''} ) eq 'ARRAY' ) { unshift @actions, @{ delete $session{'Actions'}{''} }; $session{'i'}++; } my $actions_pointer = $DECODED_ARGS->{'results'}; if ($actions_pointer && ref( $session{'Actions'}->{$actions_pointer} ) eq 'ARRAY' ) { unshift @actions, @{ delete $session{'Actions'}->{$actions_pointer} }; $session{'i'}++; } # XXX: run callbacks per row really crazy idea @actions = grep $_, grep { my $skip; $m->callback( %ARGS, row => \$_, skip => \$skip, CallbackName => 'ModifyRow', ); !$skip; } grep $_, @actions; return unless @actions; <%ARGS> $titlebox => {} @actions => undef rt-4.2.12/share/html/Elements/ListMenu000644 000765 000024 00000006077 12555754775 020222 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $menu $show_children => undef
      % for my $child ($menu->children) {
    • <% $show_link->( $child ) |n %>
      % if ( my $description = $child->description ) { <% $description %>\ % }
    • % if ($show_children && $child->children) { <& /Elements/ListMenu, menu => $child &> % } % }
    <%INIT> my $web_path = RT->Config->Get('WebPath'); my $interp = $m->interp; my $show_link = sub { my $e = shift; my $res = ''; if ( $e->path) { $res .= 'path or $e->path =~ m{^\w+:/}) ? $e->path : $web_path . $e->path; $res .= ' href="'. $interp->apply_escapes($url, 'h') .'"' if $url; if ( $e->target ) { $res .= ' target="'. $interp->apply_escapes( $e->target, 'h' ) .'"'; } $res .= '>'; } my $title = $e->title; $title = $interp->apply_escapes( $title, 'h' ); $res .= $title; if ( $e->path) { $res .= ''; } return $res; }; rt-4.2.12/share/html/Elements/Login000644 000765 000024 00000007515 12555754775 017530 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->callback( %ARGS, CallbackName => 'Header' ); <& /Elements/Header, Title => loc('Login'), Focus => '#user', RichText => 0 &> <& /Elements/Footer, Menu => 0 &> <%ARGS> $next => '' $user => "" $actions => undef rt-4.2.12/share/html/Elements/LoginHelp000644 000765 000024 00000004345 12555754775 020337 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> my $source = RT->Config->Meta('OwnerEmail')->{Source}; return unless $source->{SiteConfig} or $source->{Extension}; rt-4.2.12/share/html/Elements/LoginRedirectWarning000644 000765 000024 00000005351 12555754775 022534 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $next => undef <%init> return unless $next; my $destination = RT::Interface::Web::FetchNextPage($next); return unless ref $destination and $destination->{'HasSideEffects'}; my $consequence = RT::Interface::Web::PotentialPageAction($destination->{'url'}) || loc("perform actions"); $consequence = $m->interp->apply_escapes($consequence => "h");

    <&|/l&>After logging in you'll be sent to your original destination: <% $destination->{'url'} %> <&|/l_unsafe, "$consequence" &>which may [_1] on your behalf.

    <&|/l&>If this is not what you expect, leave this page now without logging in.

    rt-4.2.12/share/html/Elements/Logo000644 000765 000024 00000006472 12555754775 017361 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    % if ($user_logo) { <%loc($ARGS{'LogoAltText'}||RT->Config->Get('LogoAltText'))%> % } else { <%loc($ARGS{'LogoAltText'}||RT->Config->Get('LogoAltText'))%> % } % if ( $ShowName ) { <% $Name || loc("RT for [_1]", RT->Config->Get('rtname')) %> % }
    <%INIT> if ( exists $ARGS{'show_name'} ) { $RT::Logger->warning('show_name argument was renamed, use ShowName'); $ShowName = delete $ARGS{'show_name'}; } my $user_logo = blessed $RT::System ? $RT::System->FirstAttribute('UserLogo') : undef; # If we have the attribute, but no content, we don't really have a user logo if ($user_logo) { my $content = $user_logo->Content; undef $user_logo unless ref $content eq 'HASH' and defined $content->{'data'}; } if ($OnlyCustom and not $user_logo and ($ARGS{LogoURL}||RT->Config->Get('LogoURL')) =~ /bpslogo\.png$/) { return; } <%ARGS> $ShowName => 1 $OnlyCustom => 0 $Name => undef $id => 'logo' rt-4.2.12/share/html/Elements/MakeClicky000644 000765 000024 00000013272 12555754775 020471 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ONCE> use Regexp::Common qw(URI); my $escaper = sub { my $content = shift; RT::Interface::Web::EscapeHTML( \$content ); return $content; }; my %actions = ( default => sub { my %args = @_; return $escaper->($args{value}); }, url => sub { my %args = @_; my $post = ""; $post = ")" if $args{value} !~ /\(/ and $args{value} =~ s/\)$//; $args{value} = $escaper->($args{value}); my $result = qq{[}. loc('Open URL') .qq{]}; return $args{value} . qq{ $result$post}; }, url_overwrite => sub { my %args = @_; my $post = ""; $post = ")" if $args{value} !~ /\(/ and $args{value} =~ s/\)$//; $args{value} = $escaper->($args{value}); my $result = qq{$args{value}}; return qq{$result$post}; }, ); my @types = ( { name => "httpurl", regex => qr/$RE{URI}{HTTP}{-keep}{-scheme => 'https?'}(?:#[^\s<]+)?(? "url", }, { name => "httpurl_overwrite", regex => qr/$RE{URI}{HTTP}{-keep}{-scheme => 'https?'}(?:#[^\s<]+)?(? "url_overwrite", }, ); my $handle = sub { my %args = @_; for my $rec( @types ) { return $rec->{action}->( %args, all_matches => [ $args{value}, $1, $2, $3, $4, $5, $6, $7, $8, $9 ], ) if $args{value} =~ $rec->{regex}; } }; my $cache; # only defined via callback # Hook to add more Clicky types # XXX Have to have Page argument, as Mason gets caller wrong in Callback? # This happens as we are in <%ONCE> block $m->callback( CallbackPage => "/Elements/MakeClicky", types => \@types, actions => \%actions, handle => \$handle, cache => \$cache, ); # Filter my %active; $active{$_}++ for RT->Config->Get('Active_MakeClicky'); @types = grep $active{$_->{name}}, @types; # Build up the whole match my $regexp = join "|", map $_->{regex}, @types; # Make sure we have a default $actions{default} ||= sub {}; # Anchor the regexes and look up the actions foreach my $type ( @types ) { $type->{regex} = qr/^$type->{regex}$/; $type->{action} = $actions{$type->{action}} || $actions{default}; } <%ARGS> $content => undef $html => undef <%INIT> return unless defined $$content; if ( defined $cache ) { my $cached_content = $cache->(fetch => $content); if ( $cached_content ) { RT->Logger->debug("Found MakeClicky cache"); $$content = $cached_content; return; } } unless ( $regexp ) { RT::Interface::Web::EscapeHTML( $content ) unless $html; return; } my $pos = 0; while ( $$content =~ /($regexp)/gsio ) { my $match = $1; next if $` =~ /\w+=(?:"|")$/; my $skipped_len = pos($$content) - $pos - length($match); if ( $skipped_len > 0 ) { my $plain; if ( $html ) { $plain = substr( $$content, $pos, $skipped_len ); } else { $plain = $escaper->( substr( $$content, $pos, $skipped_len ) ) } substr( $$content, $pos, $skipped_len ) = $plain; $pos += length($plain); } my $plain = $handle->( %ARGS, value => $match, all_matches => [ $1, $2, $3, $4, $5, $6, $7, $8, $9 ], ); substr( $$content, $pos, length($match) ) = $plain; pos($$content) = ( $pos += length($plain) ); } substr( $$content, $pos ) = $escaper->( substr( $$content, $pos ) ) unless ($pos == length $$content) || $html; pos($$content) = 0; $cache->(store => $content) if defined $cache; rt-4.2.12/share/html/Elements/Menu000644 000765 000024 00000004150 12555754775 017354 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $menu $id => undef $toplevel => 1 $parent_id => '' $depth => 0 <%INIT> RenderMenu( %ARGS ); rt-4.2.12/share/html/Elements/MessageBox000644 000765 000024 00000010070 12555754775 020503 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->callback( %ARGS, CallbackName => 'AfterTextArea' ); % if ($Type eq 'text/html') { " /> % } <%INIT> my $message = ''; if ( $QuoteTransaction ) { my $transaction = RT::Transaction->new( $session{'CurrentUser'} ); $transaction->Load( $QuoteTransaction ); $message = $transaction->Content( Quote => 1, Type => $Type ); } my $signature = ''; if ( $IncludeSignature and my $text = $session{'CurrentUser'}->UserObj->Signature ) { $signature = "-- \n". $text; if ($Type eq 'text/html') { $signature =~ s/&/&/g; $signature =~ s//>/g; $signature =~ s/"/"/g; # "//; $signature =~ s/'/'/g; # '//; $signature =~ s{\n}{
    }g; $signature = "

    $signature

    "; } } # wrap="something" seems to really break IE + richtext my $wrap_type = $Type eq 'text/html' ? '' : 'wrap="soft"'; # If there's no cols specified, we want to set the width to 100% in CSS my $width_attr; if ($Width) { $width_attr = 'cols'; } else { $width_attr = 'style'; $Width = 'width: 100%'; } <%ARGS> $QuoteTransaction => undef $Name => 'Content' $Default => '' $Width => RT->Config->Get('MessageBoxWidth', $session{'CurrentUser'} ) $Height => RT->Config->Get('MessageBoxHeight', $session{'CurrentUser'} ) || 15 $IncludeSignature => RT->Config->Get('MessageBoxIncludeSignature'); $IncludeArticle => 1; $Type => RT->Config->Get('MessageBoxRichText', $session{'CurrentUser'}) ? 'text/html' : 'text/plain'; rt-4.2.12/share/html/Elements/MyAdminQueues000644 000765 000024 00000004255 12555754775 021204 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/Widgets/TitleBox, title => loc("Queues I administer"), bodyclass => "" &> <& /Elements/QueueSummaryByStatus, queue_filter => sub { $_->CurrentUserHasRight('AdminQueue') }, &> rt-4.2.12/share/html/Elements/MyReminders000644 000765 000024 00000004371 12555754775 020713 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/Widgets/TitleBox, class => 'reminders', title => loc("My reminders"), title_href => RT->Config->Get('WebPath') . '/Tools/MyReminders.html' &> <& /Elements/ShowReminders &> <%init> return unless RT->Config->Get('EnableReminders'); rt-4.2.12/share/html/Elements/MyRT000644 000765 000024 00000007437 12555754775 017316 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->callback( ARGSRef => \%ARGS, CallbackName => 'BeforeTable' ); % if ( $sidebar ) { % }
    % $show_cb->($_) foreach @$body; % $show_cb->($_) foreach @$sidebar;
    % $m->callback( ARGSRef => \%ARGS, CallbackName => 'AfterTable' ); <%INIT> my %allowed_components = map {$_ => 1} @{RT->Config->Get('HomepageComponents')}; my $user = $session{'CurrentUser'}->UserObj; unless ( $Portlets ) { my ($defaults) = RT::System->new($session{'CurrentUser'})->Attributes->Named('HomepageSettings'); $Portlets = $user->Preferences( HomepageSettings => $defaults ? $defaults->Content : {} ); } $m->callback( CallbackName => 'MassagePortlets', Portlets => $Portlets ); my ($body, $sidebar) = @{$Portlets}{qw(body sidebar)}; unless( $body && @$body ) { $body = $sidebar || []; $sidebar = undef; } $sidebar = undef unless $sidebar && @$sidebar; my $Rows = $user->Preferences( 'SummaryRows', ( RT->Config->Get('DefaultSummaryRows') || 10 ) ); my $show_cb = sub { my $entry = shift; my $type = $entry->{type}; my $name = $entry->{'name'}; if ( $type eq 'component' ) { if (!$allowed_components{$name}) { $m->out( $m->interp->apply_escapes( loc("Invalid portlet [_1]", $name), "h" ) ); } else { $m->comp( $name, %{ $entry->{arguments} || {} } ); } } elsif ( $type eq 'system' ) { $m->comp( '/Elements/ShowSearch', Name => $name, Override => { Rows => $Rows } ); } elsif ( $type eq 'saved' ) { $m->comp( '/Elements/ShowSearch', SavedSearch => $name, Override => { Rows => $Rows } ); } else { $RT::Logger->error("unknown portlet type '$type'"); } }; <%ARGS> $Portlets => undef rt-4.2.12/share/html/Elements/MySupportQueues000644 000765 000024 00000004270 12555754775 021625 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/Widgets/TitleBox, title => loc("Queues I'm an AdminCc for"), bodyclass => "" &> <& /Elements/QueueSummaryByStatus, queue_filter => sub { $_->IsAdminCc($session{'CurrentUser'}->Id) }, &> rt-4.2.12/share/html/Elements/PageLayout000644 000765 000024 00000005432 12555754775 020526 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ( $show_menu ) { % }
    <& /Elements/WidgetBar, menu => PageWidgets() &>
    % if ($m->comp_exists($stylesheet_plugin) ) { <& $stylesheet_plugin &> % }
    % $m->callback( %ARGS, CallbackName => 'BeforeBody' ); % $m->flush_buffer(); # we've got the page laid out, let's flush the buffer; <%ARGS> $title => $m->callers(-1)->path $show_menu => 1 <%init> my $style = $session{'CurrentUser'} ? $session{'CurrentUser'}->Stylesheet : RT->Config->Get('WebDefaultStylesheet'); my $stylesheet_plugin = "/NoAuth/css/".$style."/AfterMenus"; rt-4.2.12/share/html/Elements/PersonalQuickbar000644 000765 000024 00000004423 12555754775 021720 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Prefs => '/Prefs/Other.html'
    <&|/l&>Skip Menu | % unless ($session{'CurrentUser'}->Id) { <&|/l&>Not logged in. % } % $m->callback( %ARGS );
    rt-4.2.12/share/html/Elements/QueriesAsComment000644 000765 000024 00000004536 12555754775 021704 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> return unless RT->Config->Get('StatementLog') && $session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser'); rt-4.2.12/share/html/Elements/QueryString000644 000765 000024 00000004733 12555754775 020753 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my @params; for my $key (sort keys %ARGS) { my $value = $ARGS{$key}; next unless defined $value; $key = $m->interp->apply_escapes( $key, 'u' ); if( UNIVERSAL::isa( $value, 'ARRAY' ) ) { push @params, map $key ."=". $m->interp->apply_escapes( $_, 'u' ), map defined $_? $_ : '', @$value; } else { push @params, $key ."=". $m->interp->apply_escapes($value, 'u'); } } return join '&', @params; rt-4.2.12/share/html/Elements/QueueSummaryByLifecycle000644 000765 000024 00000012470 12555754775 023231 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%perl> foreach my $lifecycle ( map $lifecycle{$_}, sort keys %lifecycle ) { my @cur_statuses = grep $lifecycle->IsValid($_), @statuses; next unless @cur_statuses; % for my $status ( @cur_statuses ) { % } <%PERL> my $i = 0; for my $queue (@queues) { next if lc($queue->{Lifecycle} || '') ne lc $lifecycle->Name; $i++; % for my $status (@cur_statuses) { % } % }
    <&|/l&>Queue<% loc($status) %>
    <% $queue->{Name} %> <% $data->{$queue->{id}}->{lc $status} || '-' %>
    % } <%INIT> my $build_search_link = sub { my ($queue_name, $extra_query) = @_; $queue_name =~ s/(['\\])/\\$1/g; #' return RT->Config->Get('WebPath') . "/Search/Results.html?Query=" . $m->interp->apply_escapes("Queue = '$queue_name' AND $extra_query", 'u'); }; my $link_all = sub { my ($queue, $all_statuses) = @_; my @escaped = @{$all_statuses}; s{(['\\])}{\\$1}g for @escaped; return $build_search_link->($queue->{Name}, "(".join(" OR ", map "Status = '$_'", @escaped).")"); }; my $link_status = sub { my ($queue, $status) = @_; $status =~ s{(['\\])}{\\$1}g; return $build_search_link->($queue->{Name}, "Status = '$status'"); }; $m->callback( CallbackName => 'LinkBuilders', build_search_link => \$build_search_link, link_all => \$link_all, link_status => \$link_status, ); my $Queues = RT::Queues->new( $session{'CurrentUser'} ); $Queues->UnLimit(); $m->callback( CallbackName => 'SQLFilter', Queues => $Queues ); my @queues = grep $queue_filter->($_), @{ $Queues->ItemsArrayRef }; $m->callback( CallbackName => 'Filter', Queues => \@queues ); @queues = map { { id => $_->Id, Name => $_->Name, Description => $_->Description || '', Lifecycle => $_->Lifecycle, } } grep $_, @queues; my %lifecycle; for my $queue (@queues) { my $cycle = RT::Lifecycle->Load( Name => $queue->{'Lifecycle'} ); $lifecycle{ lc $cycle->Name } = $cycle; } unless (@statuses) { my %seen; foreach my $set ( 'initial', 'active' ) { foreach my $lifecycle ( map $lifecycle{$_}, sort keys %lifecycle ) { push @statuses, grep !$seen{ lc $_ }++, $lifecycle->Valid($set); } } } my $data = {}; my $statuses = {}; use RT::Report::Tickets; my $report = RT::Report::Tickets->new( RT->SystemUser ); my @escaped = @statuses; s{(['\\])}{\\$1}g for @escaped; my $query = "(". join(" OR ", map {"Status = '$_'"} @escaped) #' .") AND (". join(' OR ', map "Queue = ".$_->{id}, @queues) .")"; $query = 'id < 0' unless @queues; $report->SetupGroupings( Query => $query, GroupBy => [qw(Status Queue)] ); while ( my $entry = $report->Next ) { $data->{ $entry->__Value("Queue") }->{ $entry->__Value("Status") } = $entry->__Value('id'); $statuses->{ $entry->__Value("Status") } = 1; } <%ARGS> $queue_filter => undef @statuses => () rt-4.2.12/share/html/Elements/QueueSummaryByStatus000644 000765 000024 00000012220 12555754775 022606 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % for my $status ( @statuses ) { % } <%PERL> my $i = 0; for my $queue (@queues) { $i++; my $lifecycle = $lifecycle{ lc $queue->{'Lifecycle'} }; my @queue_statuses = grep { $lifecycle->IsValid($_) } @statuses; <%perl> for my $status (@statuses) { if ( $lifecycle->IsValid( $status ) ) { % } else { % } % } % }
    <&|/l&>Queue<% loc($status) %>
    <% $queue->{Name} %> <% $data->{$queue->{id}}->{lc $status} || '-' %> -
    <%INIT> my $build_search_link = sub { my ($queue_name, $extra_query) = @_; $queue_name =~ s/(['\\])/\\$1/g; #' return RT->Config->Get('WebPath') . "/Search/Results.html?Query=" . $m->interp->apply_escapes("Queue = '$queue_name' AND $extra_query", 'u'); }; my $link_all = sub { my ($queue, $all_statuses) = @_; return $build_search_link->($queue->{Name}, "(".join(" OR ", map "Status = '$_'", @$all_statuses).")"); }; my $link_status = sub { my ($queue, $status) = @_; return $build_search_link->($queue->{Name}, "Status = '$status'"); }; $m->callback( CallbackName => 'LinkBuilders', build_search_link => \$build_search_link, link_all => \$link_all, link_status => \$link_status, ); my $Queues = RT::Queues->new( $session{'CurrentUser'} ); $Queues->UnLimit(); $m->callback( CallbackName => 'SQLFilter', Queues => $Queues ); my @queues = grep $queue_filter->($_), @{ $Queues->ItemsArrayRef }; $m->callback( CallbackName => 'Filter', Queues => \@queues ); @queues = map { { id => $_->Id, Name => $_->Name, Description => $_->Description || '', Lifecycle => $_->Lifecycle, } } grep $_, @queues; my %lifecycle; for my $queue (@queues) { my $cycle = RT::Lifecycle->Load( Name => $queue->{'Lifecycle'} ); $lifecycle{ lc $cycle->Name } = $cycle; } unless (@statuses) { my %seen; foreach my $set ( 'initial', 'active' ) { foreach my $lifecycle ( map $lifecycle{$_}, sort keys %lifecycle ) { push @statuses, grep !$seen{ lc $_ }++, $lifecycle->Valid($set); } } } my $data = {}; my $statuses = {}; use RT::Report::Tickets; my $report = RT::Report::Tickets->new( RT->SystemUser ); my $query = "(". join(" OR ", map {s{(['\\])}{\\$1}g; "Status = '$_'"} @statuses) #' .") AND (". join(' OR ', map "Queue = ".$_->{id}, @queues) .")"; $query = 'id < 0' unless @queues; $report->SetupGroupings( Query => $query, GroupBy => [qw(Status Queue)] ); while ( my $entry = $report->Next ) { $data->{ $entry->__Value("Queue") }->{ $entry->__Value("Status") } = $entry->__Value('id'); $statuses->{ $entry->__Value("Status") } = 1; } <%ARGS> $queue_filter => undef @statuses => () rt-4.2.12/share/html/Elements/QuickCreate000644 000765 000024 00000007310 12555754775 020651 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <&| /Widgets/TitleBox, title => loc('Quick ticket creation') &>
    callback(CallbackName => 'InFormElement'); >
    <&|/l&>Subject:
    <&|/l&>Queue:<& /Elements/SelectNewTicketQueue, Name => 'Queue', Default => $args->{Queue} &> <&|/l&>Owner:
    <&|/l&>Requestors: <& /Elements/EmailInput, Name => 'Requestors', Size => '40', Default => $args->{Requestors} || $session{CurrentUser}->EmailAddress, AutocompleteMultiple => 1 &>
    <&|/l&>Content:
    <& /Elements/Submit, Label => loc('Create') &>
    <%INIT> my $args = delete $session{QuickCreate} || {}; rt-4.2.12/share/html/Elements/Quicksearch000644 000765 000024 00000005070 12555754775 020714 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <&|/Widgets/TitleBox, title => loc("Quick search"), bodyclass => "", titleright => loc("Edit"), titleright_href => RT->Config->Get('WebPath').'/Prefs/Quicksearch.html', &> <& $comp, queue_filter => sub { $_->CurrentUserHasRight('ShowTicket') && !exists $unwanted->{$_->Name} }, &>
    <%INIT> my $unwanted = $session{'CurrentUser'}->UserObj->Preferences('QuickSearch', {}); my $comp = $SplitByLifecycle? '/Elements/QueueSummaryByLifecycle' : '/Elements/QueueSummaryByStatus'; <%ARGS> $SplitByLifecycle => 1 rt-4.2.12/share/html/Elements/Refresh000644 000765 000024 00000004722 12555754775 020053 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my @refreshevery = qw(120 300 600 1200 3600 7200); <%ARGS> $Name => undef $Default => 0 rt-4.2.12/share/html/Elements/RefreshHomepage000644 000765 000024 00000004534 12555754775 021522 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/Widgets/TitleBox, title => loc('Refresh')&>
    <& /Elements/Refresh, Name => 'HomeRefreshInterval', Default => $session{'home_refresh_interval'}||RT->Config->Get('HomePageRefreshInterval', $session{'CurrentUser'}) &> <& /Elements/Submit, Label => loc('Go!') &>
    rt-4.2.12/share/html/Elements/RT__Article/000755 000765 000024 00000000000 12555754775 020654 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Elements/RT__Class/000755 000765 000024 00000000000 12555754775 020336 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Elements/RT__CustomField/000755 000765 000024 00000000000 12555754775 021507 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Elements/RT__Dashboard/000755 000765 000024 00000000000 12555754775 021160 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Elements/RT__Group/000755 000765 000024 00000000000 12555754775 020365 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Elements/RT__Queue/000755 000765 000024 00000000000 12555754775 020355 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Elements/RT__SavedSearch/000755 000765 000024 00000000000 12555754775 021461 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Elements/RT__Scrip/000755 000765 000024 00000000000 12555754775 020351 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Elements/RT__Template/000755 000765 000024 00000000000 12555754775 021044 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Elements/RT__Ticket/000755 000765 000024 00000000000 12555754775 020514 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Elements/RT__User/000755 000765 000024 00000000000 12555754775 020207 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Elements/SavedSearches000644 000765 000024 00000006076 12555754775 021201 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/Widgets/TitleBox, title => loc('Saved Searches') &> % foreach my $Object (@Objects) { % my $SavedSearches = RT::SavedSearches->new($session{CurrentUser}); % $SavedSearches->LimitToPrivacy(join('-',ref($Object),$Object->Id),'Ticket'); % my $title; % if (ref $Object eq 'RT::User' && $Object->Id == $session{CurrentUser}->Id) { % $title = loc("My saved searches"); % } else { % $title = loc("[_1]'s saved searches",$Object->Name); % } % $title = $m->interp->apply_escapes($title, 'h'); <& /Elements/CollectionList, %ARGS, Class => 'RT::SavedSearch', Format => qq{'__Name__/TITLE:$title'}, Collection => $SavedSearches, PassArguments => [qw(Format Name id)], &> % } <%init> my @Objects = RT::SavedSearch->new($session{CurrentUser})->ObjectsForLoading; push @Objects, RT::System->new( $session{'CurrentUser'} ) if $session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser' ); <%ARGS> $user_attrs => undef rt-4.2.12/share/html/Elements/ScrubHTML000644 000765 000024 00000004102 12555754775 020210 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> return ScrubHTML($Content); <%args> $Content => undef rt-4.2.12/share/html/Elements/Section000644 000765 000024 00000004047 12555754775 020061 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}

    <%$title%>

    <%ARGS> $title => undef rt-4.2.12/share/html/Elements/SelectAttachmentField000644 000765 000024 00000004532 12555754775 022650 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => 'AttachmentField' rt-4.2.12/share/html/Elements/SelectBoolean000644 000765 000024 00000004741 12555754775 021175 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => undef $True => loc("is") $Default => 'true' $TrueVal => 1 $FalseVal => 0 $False => loc("isn't") <%INIT> my $TrueDefault = ''; my $FalseDefault = ''; if ($Default && $Default !~ /true/i) { $FalseDefault = 'selected="selected"'; } else { $TrueDefault = 'selected="selected"'; } rt-4.2.12/share/html/Elements/SelectCustomFieldOperator000644 000765 000024 00000004643 12555754775 023551 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => undef @Options => ( loc('matches'), loc("doesn't match"), loc('is'), loc("isn't"), loc('less than'), loc('greater than')) @Values => ('LIKE', 'NOT LIKE', '=', '!=', '<', '>') $Default => '' rt-4.2.12/share/html/Elements/SelectCustomFieldValue000644 000765 000024 00000006503 12555754775 023027 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->callback( Name => $Name, CustomField => $CustomField, Default => \$Default ); % $Default = "" unless defined $Default; % if ($CustomField->Type =~ /Select/i) { % my $values = $CustomField->Values; % } elsif ($CustomField->Type =~ /^Date(Time)?$/) { <& /Elements/SelectDate, ShowTime => ($1 ? 1 : 0), Name => $Name, Value => $Default &> % } elsif ( $CustomField->Type eq 'Autocomplete' ) { % } else { % } <%args> $Name => undef $CustomField => undef $Default => undef rt-4.2.12/share/html/Elements/SelectDate000644 000765 000024 00000005465 12555754775 020477 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->callback( %ARGS, Name => $Name, CallbackName => 'BeforeDateInput' ); % $m->callback( %ARGS, Name => $Name, CallbackName => 'AfterDateInput' ); <%init> unless ((defined $Default) or ($current <= 0)) { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($current); $Default = sprintf("%04d-%02d-%02d %02d:%02d", $year+1900,$mon+1,$mday, $hour,$min); } $Value = $Value || $Default; unless ($Name) { $Name = $menu_prefix. "_Date"; } <%args> $ShowTime => 1 $menu_prefix=>'' $current=>time $Default => '' $Value => '' $Name => undef $Size => 16 rt-4.2.12/share/html/Elements/SelectDateRelation000644 000765 000024 00000004400 12555754775 022161 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => undef $Default => undef $Before => loc('before') $On => loc('on') $After => loc('after') rt-4.2.12/share/html/Elements/SelectDateType000644 000765 000024 00000004740 12555754775 021334 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => 'DateType' rt-4.2.12/share/html/Elements/SelectEqualityOperator000644 000765 000024 00000004546 12555754775 023132 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => undef @Options => (loc('less than'), loc('equal to'), loc('greater than'), loc('not equal to')) @Values => qw(< = > !=) $Default =>'' rt-4.2.12/share/html/Elements/SelectGroups000644 000765 000024 00000005367 12555754775 021102 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/SelectMatch, Name => 'GroupOp', Default => $GroupOp &> <%INIT> my $CFs = RT::CustomFields->new($session{'CurrentUser'}); $CFs->LimitToChildType('RT::Group'); $CFs->OrderBy( FIELD => 'Name' ); <%ARGS> $GroupField => '' $GroupOp => '' $GroupString => '' rt-4.2.12/share/html/Elements/SelectIPRelation000644 000765 000024 00000004551 12555754775 021623 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => undef @Options => ( loc('is'), loc("isn't"), loc('less than'), loc('greater than')) @Values => ('=', '!=', '<', '>') $Default => '' rt-4.2.12/share/html/Elements/SelectLang000644 000765 000024 00000005604 12555754775 020476 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $ShowNullOption => 1 $Name => undef $Verbose => undef $Default => 0 <%ONCE> use I18N::LangTags::List; my (@lang, %lang_to_desc); foreach my $lang (map { s/:://; s/_/-/g; $_ } grep { /^\w+::$/ } keys %RT::I18N::) { next if $lang =~ /i-default|en-us/; my $desc = I18N::LangTags::List::name($lang); next unless ($desc); $desc =~ s/(.*) (.*)/$2 ($1)/ unless ( $desc =~ /.* \(.*\)/ ); $lang_to_desc{$lang} = $desc; } @lang = sort { $lang_to_desc{$a} cmp $lang_to_desc{$b} } keys %lang_to_desc; rt-4.2.12/share/html/Elements/SelectMatch000644 000765 000024 00000005536 12555754775 020655 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => undef $Like => loc('matches') $NotLike => loc("doesn't match") $True => loc('is') $False => loc("isn't") $Default => undef <%INIT> my $TrueDefault = ''; my $FalseDefault=''; my $LikeDefault=''; my $NotLikeDefault =''; if ($Default && $Default =~ /false|!=/i) { $FalseDefault = qq[ selected="selected"]; } elsif ($Default && $Default =~ /true|=/i) { $TrueDefault = qq[ selected="selected"]; } elsif ($Default && $Default =~ /notlike|NOT LIKE/i) { $NotLikeDefault = qq[ selected="selected"]; } else { $LikeDefault = qq[ selected="selected"]; } rt-4.2.12/share/html/Elements/SelectNewTicketQueue000644 000765 000024 00000004711 12555754775 022515 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $queue = RT->Config->Get("DefaultQueue", $session{'CurrentUser'}); if (RT->Config->Get("RememberDefaultQueue", $session{'CurrentUser'})) { if (my $session_default = $session{'DefaultQueue'}) { $queue = $session_default; } } $m->callback(Queue => \$queue, CallbackName => 'DefaultQueue'); rt-4.2.12/share/html/Elements/SelectObject000644 000765 000024 00000011752 12555754775 021024 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ($Lite) { % my $d = $ObjectType->new($session{'CurrentUser'}); % $d->Load($Default); % } % else { % } <%args> $ObjectType $CheckRight => undef $ShowNullOption => 1 $ShowAll => 1 $Name => undef $Verbose => undef $NamedValues => 0 $DefaultLabel => "-" $Default => 0 $Lite => 0 $OnChange => undef $Multiple => 0 $Size => 6 $Class => "" $CacheNeedsUpdate => undef <%init> $ObjectType = "RT::$ObjectType" unless $ObjectType =~ /::/; $Class ||= "select-" . CSSClass("\L$1") if $ObjectType =~ /RT::(.+)$/; my $cache_key = join "---", "SelectObject", $ObjectType, $session{'CurrentUser'}->Id, $CheckRight || "", $ShowAll; if ( defined $session{$cache_key} && ref $session{$cache_key} eq 'ARRAY') { delete $session{$cache_key}; } if ( defined $session{$cache_key} && defined $CacheNeedsUpdate && $session{$cache_key}{lastupdated} <= $CacheNeedsUpdate ) { delete $session{$cache_key}; } if ( not defined $session{$cache_key} and not $Lite ) { my $collection = "${ObjectType}s"->new($session{'CurrentUser'}); $collection->UnLimit; $m->callback( CallbackName => 'ModifyCollection', ARGSRef => \%ARGS, Collection => $collection, ObjectType => $ObjectType ); if ( $Default ) { my $object = $ObjectType->new($session{'CurrentUser'}); $object->Load( $Default ); unless ( $ShowAll or not $CheckRight or $session{CurrentUser}->HasRight( Object => $object, Right => $CheckRight ) ) { if ( $object->id ) { push @{$session{$cache_key}{objects}}, { Id => $object->id, Name => '#' . $object->id, Description => '#' . $object->id, }; } } } while (my $object = $collection->Next) { if ($ShowAll or not $CheckRight or $session{CurrentUser}->HasRight( Object => $object, Right => $CheckRight )) { push @{$session{$cache_key}{objects}}, { Id => $object->Id, Name => $object->Name, Description => $object->_Accessible("Description" => "read") ? $object->Description : undef, }; } } $session{$cache_key}{lastupdated} = time(); } rt-4.2.12/share/html/Elements/SelectOwner000644 000765 000024 00000005700 12555754775 020704 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& "SelectOwner$Widget", %ARGS, Objects => \@objects &> <%INIT> my $Widget; if ( !$QueueObj && !$TicketObj && RT->Config->Get('AutocompleteOwnersForSearch') ) { $Widget = 'Autocomplete'; } $Widget ||= RT->Config->Get('AutocompleteOwners', $session{'CurrentUser'}) ? 'Autocomplete' : 'Dropdown'; my @objects; if ($TicketObj) { @objects = ($TicketObj); } elsif ($QueueObj) { @objects = ($QueueObj); } elsif (%Queues) { for my $name (keys %Queues) { my $q = RT::Queue->new($session{'CurrentUser'}); $q->Load($name); push @objects, $q; } } else { # Let's check rights on an empty queue object. that will do a search # for any queue. my $queue = RT::Queue->new( $session{'CurrentUser'} ); push( @objects, $queue ); } $m->callback( %ARGS, objects => \@objects, CallbackName => 'UpdateObjectList' ); <%ARGS> $TicketObj => undef $QueueObj => undef %Queues => () rt-4.2.12/share/html/Elements/SelectOwnerAutocomplete000644 000765 000024 00000007116 12555754775 023271 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => undef $Objects => [] $Default => 0 $ValueAttribute => 'Name' $TicketObj => undef <%INIT> $ValueAttribute = 'Name' unless $ValueAttribute =~ /^(?:id|Name)$/; my $value = ''; if ( $Default and not $Default =~ /\D/ ) { my $user = RT::User->new( $session{'CurrentUser'} ); $user->Load($Default); $value = $user->$ValueAttribute; } elsif (defined $TicketObj) { $value = $TicketObj->OwnerObj->$ValueAttribute; } # Map to a string of RT::Ticket-1|RT::Queue-5|... my $limit = join '|', map { join '-', ref($_), ($_->id || '') } @$Objects; my $query = $m->comp('/Elements/QueryString', return => $ValueAttribute, limit => $limit, ); rt-4.2.12/share/html/Elements/SelectOwnerDropdown000644 000765 000024 00000010340 12555754775 022415 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my %user_uniq_hash; my $isSU = $session{CurrentUser} ->HasRight( Right => 'SuperUser', Object => $RT::System ); foreach my $object (@$Objects) { my $Users = RT::Users->new( $session{CurrentUser} ); $Users->LimitToPrivileged; $Users->WhoHaveRight( Right => 'OwnTicket', Object => $object, IncludeSystemRights => 1, IncludeSuperusers => $isSU ); while ( my $User = $Users->Next() ) { $user_uniq_hash{ $User->Id() } = $User; } } my $dropdown_limit = 50; $m->callback( CallbackName => 'ModifyDropdownLimit', DropdownLimit => \$dropdown_limit ); if (keys(%user_uniq_hash) > $dropdown_limit ) { if ($Objects->[0]->id) { my $desc = $Objects->[0]->RecordType." ".$Objects->[0]->id; RT->Logger->notice("More than $dropdown_limit possible Owners found for $desc; switching to autocompleter. See the \$AutocompleteOwners configuration option"); } $m->comp("/Elements/SelectOwnerAutocomplete", %ARGS); return; } if ($Default && $Default != RT->Nobody->id && !$user_uniq_hash{$Default}) { $user_uniq_hash{$Default} = RT::User->new($session{CurrentUser}); $user_uniq_hash{$Default}->Load($Default); } $Default = 0 unless defined $Default && $Default =~ /^\d+$/; my @formatednames = sort {lc $a->[1] cmp lc $b->[1]} map {[$_, $_->Format]} grep { $_->id != RT->Nobody->id } values %user_uniq_hash; my $nobody_user = RT::User->new( $session{CurrentUser} ); $nobody_user->Load( RT->Nobody->id ); my $nobody = [$nobody_user, $nobody_user->Format]; unshift @formatednames, $nobody; <%ARGS> $Name => undef $Objects => [] $Default => 0 $DefaultValue => 1 $DefaultLabel => "-" $ValueAttribute => 'id' rt-4.2.12/share/html/Elements/SelectPriority000644 000765 000024 00000004233 12555754775 021433 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => 'Priority' $Default => '' <%INIT> $Default = '' unless defined $Default; rt-4.2.12/share/html/Elements/SelectQueue000644 000765 000024 00000004374 12555754775 020704 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& SelectObject, %ARGS, ObjectType => "Queue", CheckRight => $CheckQueueRight, ShowAll => $ShowAllQueues, CacheNeedsUpdate => RT->System->QueueCacheNeedsUpdate, &> <%args> $CheckQueueRight => 'CreateTicket' $ShowAllQueues => 1 rt-4.2.12/share/html/Elements/SelectResultsPerPage000644 000765 000024 00000004620 12555754775 022517 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# TODO: Better default handling <%INIT> my @values = qw(0 10 25 50 100); my @labels = (loc('Unlimited'), qw(10 25 50 100)); $Default = 50 unless defined $Default; <%ARGS> $Name => undef $Default => 50 rt-4.2.12/share/html/Elements/SelectStatus000644 000765 000024 00000011602 12555754775 021073 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> ### XXX: no cover for Tools/MyDay.html my %statuses_by_lifecycle; if ( @Statuses ) { $statuses_by_lifecycle{''} = \@Statuses; } else { if ( $Object ) { my $lifecycle = $Object->LifecycleObj; if ($Object->_Accessible("Status", "read")) { my $current = $Object->Status; my @status; push @status, $current; my %has = (); foreach my $next ( $lifecycle->Transitions( $current ) ) { my $check = $lifecycle->CheckRight( $current => $next ); $has{ $check } = $Object->CurrentUserHasRight( $check ) unless exists $has{ $check }; push @status, $next if $has{ $check }; } $statuses_by_lifecycle{$lifecycle->Name} = \@status; } else { $statuses_by_lifecycle{$lifecycle->Name} = [ $lifecycle->Transitions('') ]; } } for my $lifecycle ( @Lifecycles ) { $statuses_by_lifecycle{$lifecycle->Name} ||= [ $lifecycle->Valid ]; } if (not keys %statuses_by_lifecycle) { for my $lifecycle (map { RT::Lifecycle->Load($_) } RT::Lifecycle->List($Type)) { $statuses_by_lifecycle{$lifecycle->Name} = [ $lifecycle->Valid ]; } } } if (keys %statuses_by_lifecycle) { my %simplified; my $key = sub { join "\0", sort @{$_[0]}; }; for my $name (sort keys %statuses_by_lifecycle) { my $matched; my $statuses = $statuses_by_lifecycle{$name}; for my $simple (sort keys %simplified) { if ($key->($statuses) eq $key->($simplified{$simple})) { # Statuses are the same, join 'em! $simplified{"$simple, $name"} = delete $simplified{$simple}; $matched++; last; } } unless ($matched) { $simplified{$name} = $statuses; } } %statuses_by_lifecycle = %simplified; } my $group_by_lifecycle = keys %statuses_by_lifecycle > 1; <%ARGS> $Name => undef $Type => undef, @Statuses => () $Object => undef, @Lifecycles => (), $Default => '' $SkipDeleted => 0 $DefaultValue => 1 $DefaultLabel => "-" $Multiple => 0 $Size => 6 rt-4.2.12/share/html/Elements/SelectTimeUnits000644 000765 000024 00000004760 12555754775 021540 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> $Name .= '-TimeUnits' unless $Name =~ /-TimeUnits$/io; <%ARGS> $Name => '' $Default => RT->Config->Get('DefaultTimeUnitsToHours', $session{'CurrentUser'}) ? 'hours' : 'minutes' rt-4.2.12/share/html/Elements/SelectTimezone000644 000765 000024 00000005031 12555754775 021401 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ONCE> use DateTime; my @names = DateTime::TimeZone->all_names; my %label; my $dt = DateTime->now; for ( @names ) { $dt->set_time_zone( $_ ); $label{$_} = $_ . ' ' . $dt->strftime('%z'); } <%ARGS> $ShowNullOption => 1 $Name => undef $Default => 0 rt-4.2.12/share/html/Elements/SelectUsers000644 000765 000024 00000005772 12555754775 020724 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/SelectMatch, Name => 'UserOp', Default => $UserOp &> <%INIT> my $CFs = RT::CustomFields->new($session{'CurrentUser'}); $CFs->LimitToChildType('RT::User'); $CFs->OrderBy( FIELD => 'Name' ); my @fields = RT::User->BasicColumns; if ( $Fields and ref $Fields eq 'ARRAY' ) { if ( ref $Fields->[0] eq 'ARRAY' ) { @fields = @$Fields; } else { # make the name equal the label @fields = [ @$Fields, @$Fields ]; } } <%ARGS> $UserField => '' $UserOp => '' $UserString => '' $Fields => undef rt-4.2.12/share/html/Elements/SelectWatcherType000644 000765 000024 00000004736 12555754775 022061 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my @types; if ($Scope =~ /queue/) { @types = RT::Queue->ManageableRoleGroupTypes; } else { @types = qw(Requestor Cc AdminCc); } <%ARGS> $AllowNull => 1 $Default=>undef $Scope => 'ticket' $Name => 'WatcherType' rt-4.2.12/share/html/Elements/SetupSessionCookie000644 000765 000024 00000004261 12555754775 022251 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> return if $m->is_subrequest; # avoid reentrancy, as suggested by masonbook RT::Interface::Web::LoadSessionFromCookie(); return (); <%ARGS> $SessionCookie => undef rt-4.2.12/share/html/Elements/ShowCustomFieldBinary000644 000765 000024 00000004237 12555754775 022702 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <% $Object->Content %> <%ARGS> $Object => undef rt-4.2.12/share/html/Elements/ShowCustomFieldCustomGroupings000644 000765 000024 00000006025 12555754775 024623 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%perl> for my $group ( @Groupings ) { my %grouping_args = ( title => $group? loc($group) : loc('Custom Fields'), class => $css_class .' '. ($group? CSSClass("$css_class-$group") : ''), hide_empty => 1, title_href => $title_href ? "$title_href?id=".$Object->id.($group?";Grouping=".$m->interp->apply_escapes($group,'u')."#".CSSClass("$css_class-$group") : "#".$css_class) : undef, %$TitleBoxARGS, ); $m->callback( CallbackName => 'TitleBox', Object => $Object, Grouping => $group, ARGSRef => \%grouping_args ); <&| /Widgets/TitleBox, %grouping_args &> <& ShowCustomFields, %ARGS, Object => $Object, Grouping => $group &> % } <%ARGS> $Object $title_href => "" @Groupings => () <%INIT> my $css_class = lc(ref($Object)||$Object); $css_class =~ s/^rt:://; $css_class =~ s/::/-/g; $css_class = CSSClass($css_class); $css_class .= '-info-cfs'; my $TitleBoxARGS = delete $ARGS{TitleBoxARGS} || {}; @Groupings = (RT::CustomField->CustomGroupings( $Object ), '') unless @Groupings; rt-4.2.12/share/html/Elements/ShowCustomFieldDate000644 000765 000024 00000004422 12555754775 022327 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $content = $Object->Content; my $DateObj = RT::Date->new ( $session{'CurrentUser'} ); $DateObj->Set( Format => 'unknown', Value => $content, Timezone => 'utc' ); $content = $DateObj->AsString(Time => 0, Timezone => 'utc'); <%$content|n%> <%ARGS> $Object rt-4.2.12/share/html/Elements/ShowCustomFieldDateTime000644 000765 000024 00000004334 12555754775 023150 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $content = $Object->Content; my $DateObj = RT::Date->new ( $session{'CurrentUser'} ); $DateObj->Set( Format => 'ISO', Value => $content ); $content = $DateObj->AsString; <%$content|n%> <%ARGS> $Object rt-4.2.12/share/html/Elements/ShowCustomFieldImage000644 000765 000024 00000004441 12555754775 022475 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % my $url = RT->Config->Get('WebPath') . "/Download/CustomFieldValue/".$Object->Id.'/'.$m->interp->apply_escapes($Object->Content, 'u'); <% $Object->Content %>
    <%ARGS> $Object rt-4.2.12/share/html/Elements/ShowCustomFields000644 000765 000024 00000012060 12555754775 021711 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->callback( CallbackName => 'BeforeCustomFields', Object => $Object, % Grouping => $Grouping, ARGSRef => \%ARGS, CustomFields => $CustomFields, Table => $Table ); % if ($Table) { % } % while ( my $CustomField = $CustomFields->Next ) { % my $Values = $Object->CustomFieldValues( $CustomField->Id ); % my $count = $Values->Count; % next if $HideEmpty and not $count; % $m->callback( CallbackName => 'AfterCustomFieldValue', CustomField => $CustomField, % Object => $Object, Grouping => $Grouping, Table => $Table ); % } % if ($Table) {
    <% $CustomField->Name %>: % unless ( $count ) { <&|/l&>(no value) % } elsif ( $count == 1 ) { % $print_value->( $CustomField, $Values->First ); % } else {
      % while ( my $Value = $Values->Next ) {
    • % $print_value->( $CustomField, $Value );
    • % }
    % }
    % } % $m->callback( CallbackName => 'AfterCustomFields', Object => $Object, % Grouping => $Grouping, ARGSRef => \%ARGS, Table => $Table ); <%INIT> $m->callback( %ARGS, CallbackName => 'MassageCustomFields', Object => $Object, CustomFields => $CustomFields, Table => $Table, ); $CustomFields->LimitToGrouping( $Object => $Grouping ) if defined $Grouping; # don't print anything if there is no custom fields return unless $CustomFields->First; $CustomFields->GotoFirstItem; my $print_value = sub { my ($cf, $value) = @_; my $linked = $value->LinkValueTo; if ( defined $linked && length $linked ) { my $linked = $m->interp->apply_escapes( $linked, 'h' ); $m->out(''); } my $comp = "ShowCustomField". $cf->Type; $m->callback( CallbackName => 'ShowComponentName', Name => \$comp, CustomField => $cf, Object => $Object, Table => $Table, ); if ( $m->comp_exists( $comp ) ) { $m->comp( $comp, Object => $value ); } else { $m->out( $m->interp->apply_escapes( $value->Content, 'h' ) ); } $m->out('') if defined $linked && length $linked; # This section automatically populates a div with the "IncludeContentForValue" for this custom # field if it's been defined if ( $cf->IncludeContentForValue ) { my $vid = $value->id; $m->out( '\n} ); $m->out( qq{\n} ); } }; <%ARGS> $Object => undef $CustomFields => $Object->CustomFields $Grouping => undef $Table => 1 $HideEmpty => 0 rt-4.2.12/share/html/Elements/ShowCustomFieldText000644 000765 000024 00000004303 12555754775 022374 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> my $content = $Object->LargeContent || $Object->Content; $content = $m->comp('/Elements/ScrubHTML', Content => $content); $content =~ s|\n|
    |g; <%$content|n%> <%ARGS> $Object rt-4.2.12/share/html/Elements/ShowCustomFieldWikitext000644 000765 000024 00000004642 12555754775 023266 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % my $content = $Object->LargeContent || $Object->Content; % $content = $m->comp('/Elements/ScrubHTML', Content => $content); % my $base = $Object->Object->WikiBase; % my $wiki_content = Text::WikiFormat::format( $content."\n" , {}, { extended => 1, absolute_links => 1, implicit_links => RT->Config->Get('WikiImplicitLinks'), prefix => $base} ); <%$wiki_content|n%> <%init> use Text::WikiFormat; <%ARGS> $Object rt-4.2.12/share/html/Elements/ShowHistory000644 000765 000024 00000015753 12555754775 020765 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <%perl> if ( $ShowDisplayModes or $ShowTitle ) { my $title = $ShowTitle ? loc('History') : ' '; my $titleright = ''; if ( $ShowDisplayModes ) { if ( RT->Config->Get( 'QuoteFolding', $session{CurrentUser} ) ) { my $open_all = $m->interp->apply_escapes( loc("Show all quoted text"), 'j' ); my $open_html = $m->interp->apply_escapes( loc("Show all quoted text"), 'h' ); my $close_all = $m->interp->apply_escapes( loc("Hide all quoted text"), 'j' ); $titleright .= '$open_html — "; } if ($ShowHeaders) { $titleright .= qq{} . loc("Show brief headers") . qq{}; } else { $titleright .= qq{} . loc("Show full headers") . qq{}; } } <& /Widgets/TitleBoxStart, title => $title, titleright_raw => $titleright &> % }
    <%perl> $m->callback( %ARGS, Object => $Object, CallbackName => 'BeforeTransactions' ); my $i = 1; while ( my $Transaction = $Transactions->Next ) { my $skip = 0; # Skip display of SetWatcher transactions for ticket Owner groups. Owner # was a single member role group and denormalized into a column well before # the generic role group handling and transactions came about. For # tickets, we rely on rendering ownership changes using the Set-Owner # transaction. For all other record types, or even potential ticket single # role groups which aren't Owner, we use SetWatcher to render history and # skip the Set transactions. This complication is necessary to avoid # creating backdated transactions on upgrade which normalize to one type or # another. # # These conditions assumes ticket Owner is a single-member denormalized # role group, which is safe since that is unlikely to ever change in the # future. if ($Object->isa("RT::Ticket") and ($Transaction->Field || '') eq "Owner") { $skip = 1 if $Transaction->Type eq "SetWatcher"; } else { $skip = 1 if $Transaction->Type eq "Set" and $Transaction->Field and $Object->DOES("RT::Record::Role::Roles") and $Object->HasRole( $Transaction->Field ) and $Object->RoleGroup( $Transaction->Field )->SingleMemberRoleGroupColumn; } $m->callback( %ARGS, Transaction => $Transaction, skip => \$skip, CallbackName => 'SkipTransaction', ); next if $skip; # ARGS is first because we're clobbering the "Attachments" parameter $m->comp( 'ShowTransaction', %ARGS, Object => $Object, Transaction => $Transaction, ShowHeaders => $ShowHeaders, RowNum => $i, Attachments => $trans_attachments->{$Transaction->id} || {}, AttachmentContent => $trans_content, HasTxnCFs => $HasTxnCFs, ); # manually flush the content buffer after each txn, # so the user sees some update $m->flush_buffer; $i++; }
    % if ($ShowDisplayModes or $ShowTitle) { <& /Widgets/TitleBoxEnd &> % }
    <%INIT> my $trans_content = {}; my $trans_attachments = {}; for my $content (@{$AttachmentContent->ItemsArrayRef()}) { $trans_content->{$content->TransactionId}->{$content->Id} = $content; } for my $attachment (@{$Attachments->ItemsArrayRef()}) { my $tmp = $trans_attachments->{ $attachment->TransactionId } ||= {}; push @{ $tmp->{ $attachment->Parent || 0 } ||= [] }, $attachment; } { my %tmp = ( DisplayPath => 'Display.html', AttachmentPath => 'Attachment', UpdatePath => 'Update.html', ForwardPath => 'Forward.html', EmailRecordPath => 'ShowEmailRecord.html', EncryptionPath => 'Crypt.html', ); my $prefix = $ARGS{PathPrefix}||''; while ( my ($arg, $path) = each %tmp ) { next if defined $ARGS{ $arg }; $ARGS{ $arg } = $prefix.$path; } } my $record_type = $Object->RecordType; my $histid = "\L$record_type\E-" . $Object->id . "-history"; my $HasTxnCFs = ($Object->can("TransactionCustomFields") and $Object->TransactionCustomFields->Count); <%ARGS> $Object $Transactions => $Object->SortedTransactions $Attachments => $Object->Attachments( WithHeaders => 1 ) $AttachmentContent => $Object->TextAttachments $ShowHeaders => 0 $ShowTitle => 1 $ShowDisplayModes => 1 $PathPrefix => '' rt-4.2.12/share/html/Elements/ShowLink000644 000765 000024 00000005402 12555754775 020207 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % my $member = $URI->Object; % if (blessed($member) and $member->isa("RT::Ticket") and $member->CurrentUserHasRight('ShowTicket')) { % my $class = $member->QueueObj->IsInactiveStatus($member->Status) % ? 'ticket-inactive' % : 'ticket-active'; % $class .= ' '.CSSClass($member->Status); <%$member->Id%>: <%$member->Subject || ''%> [<% loc($member->Status) %>] (<& /Elements/ShowUser, User => $member->OwnerObj &>) % } else { <%$URI->AsString%> % } <%ARGS> $URI => undef <%INIT> my $href = $URI->AsHREF; if ( $URI->IsLocal ) { my $base = RT->Config->Get('WebBaseURL'); # URI->rel doesn't contain the leading '/' $href = '/' . URI->new($href)->rel($base); } rt-4.2.12/share/html/Elements/ShowLinks000644 000765 000024 00000007611 12555754775 020376 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % for my $type (@display) { % } % # Allow people to add more rows to the table % $m->callback( %ARGS ); <& /Elements/ShowCustomFields, Object => $Object, Grouping => 'Links', Table => 0 &>
    <& ShowRelationLabel, Object => $Object, Label => $labels{$type}.':', Relation => $type &> % if ($clone{$type}) { (<% loc('Create') %>) % } <& ShowLinksOfType, Object => $Object, Type => $type, Recurse => ($type eq 'Members') &>
    <%INIT> my @display = qw(DependsOn DependedOnBy MemberOf Members RefersTo ReferredToBy); $m->callback( %ARGS, CallbackName => 'ChangeDisplay', display => \@display ); my %labels = ( DependsOn => loc('Depends on'), DependedOnBy => loc('Depended on by'), MemberOf => loc('Parents'), Members => loc('Children'), RefersTo => loc('Refers to'), ReferredToBy => loc('Referred to by'), ); my %clone; if ( $Object->isa("RT::Ticket") and $Object->QueueObj->CurrentUserHasRight('CreateTicket')) { my $id = $Object->id; my $path = RT->Config->Get('WebPath') . '/Ticket/Create.html?Queue=' . $Object->Queue . '&CloneTicket=' . $id; for my $relation (@display) { my $mode = $RT::Link::TYPEMAP{$relation}->{Mode}; my $type = $RT::Link::TYPEMAP{$relation}->{Type}; my $field = $mode eq 'Base' ? 'new-' . $type : $type . '-new'; my @copy = ($id); # Canonicalized type captures both directions if ($type eq "RefersTo") { my $other = "Local" . $mode; push @copy, map { $_->$other() } @{ $Object->$relation->ItemsArrayRef }; } $clone{$relation} = "$path&$field=" . join('%20', grep { $_ } @copy); } } <%ARGS> $Object rt-4.2.12/share/html/Elements/ShowLinksOfType000644 000765 000024 00000007346 12555754775 021532 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
      % for my $link (@not_tickets, @active, @inactive) {
    • <& ShowLink, URI => $link->$ModeURI &> <%perl> next unless $Recurse; my $ToObj = $link->$ModeObj; next if $ToObj and $checked->{$ToObj->id}; if ($depth <= $MaxDepth) { <& ShowLinksOfType, %ARGS, Object => $ToObj, depth => ($depth + 1), checked => $checked &> % }
    • % }
    <%INIT> return unless $Object; unless ($RT::Link::TYPEMAP{$Type}) { RT->Logger->error("Unknown link Type '$ARGS{Type}'"); return; } unless ($Object->can($Type)) { RT->Logger->error("Don't know how to fetch links of '$Type' for object '$Object'"); return; } my $links = $Object->$Type; return unless $links->Count; return if $checked->{$Object->id}; $checked->{$Object->id} = 1; my $mode = $RT::Link::TYPEMAP{$Type}->{'Mode'}; my $ModeURI = "${mode}URI"; my $ModeObj = "${mode}Obj"; # Filter and bucket my (@active, @inactive, @not_tickets); while (my $link = $links->Next) { my $ToObj = $link->$ModeObj; if ($ToObj and $ToObj->isa('RT::Ticket')) { next if $Type eq "ReferredToBy" and $ToObj->Type eq 'reminder'; if ( $ToObj->QueueObj->IsInactiveStatus( $ToObj->Status ) ) { push @inactive, $link; } else { push @active, $link; } } else { push @not_tickets, $link; } } $m->callback( CallbackName => "Init", ARGSRef => \%ARGS, Object => $Object, $Type => $Type, $Recurse => \$Recurse, $MaxDepth => \$MaxDepth, active => \@active, inactive => \@inactive, not_tickets => \@not_tickets, ); <%ARGS> $Object => undef $Type $Recurse => 0 $MaxDepth => 7 $depth => 1 $checked => {} rt-4.2.12/share/html/Elements/ShowMemberships000644 000765 000024 00000006370 12555754775 021575 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
      % while ( my $GroupMember = $GroupMembers->Next ) { % my $Group = RT::Group->new($session{'CurrentUser'}); % $Group->Load($GroupMember->GroupId) or next; % if ($Group->Domain eq 'UserDefined') {
    • <% $Group->Name %>
    • % } elsif ($Group->Domain eq 'SystemInternal') {
    • <% loc($Group->Name) %>
    • % } % }
    <%INIT> my $GroupMembers = RT::GroupMembers->new($session{'CurrentUser'}); $GroupMembers->Limit( FIELD => 'MemberId', VALUE => $UserObj->Id ); my $alias = $GroupMembers->Join( TYPE => 'left', ALIAS1 => 'main', FIELD1 => 'GroupId', TABLE2 => 'Groups', FIELD2 => 'id' ); $GroupMembers->Limit( ALIAS => $alias, FIELD => 'Domain', OPERATOR => '=', VALUE => 'SystemInternal', CASESENSITIVE => 0, ); $GroupMembers->Limit( ALIAS => $alias, FIELD => 'Domain', OPERATOR => '=', VALUE => 'UserDefined', CASESENSITIVE => 0, ); $GroupMembers->OrderByCols( { ALIAS => $alias, FIELD => 'Domain' }, { ALIAS => $alias, FIELD => 'Name' }, ); $GroupMembers->RowsPerPage($Limit) if $Limit; <%ARGS> $UserObj $Limit => undef rt-4.2.12/share/html/Elements/ShowMessageHeaders000644 000765 000024 00000006667 12555754775 022210 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ( @headers ) { % foreach my $header (@headers) { % }
    <% $header->{'Tag'} %>: <% $header->{'Value'} | n %>
    % $m->callback( CallbackName => 'AfterHeaders', message => $Message ); % } <%INIT> my @headers; foreach my $field( RT->Config->Get('ShowBccHeader')? $Message->_SplitHeaders : $Message->SplitHeaders ) { my ($tag, $value) = split /:/, $field, 2; next unless $tag && $value; push @headers, { Tag => $tag, Value => $value }; } my %display_headers = map { lc($_) => 1 } @DisplayHeaders; $m->callback( message => $Message, headers => \@headers, display_headers => \%display_headers, ); unless ( $display_headers{'_all'} ) { @headers = grep $display_headers{ lc $_->{'Tag'} }, @headers; } my $object = $Message->TransactionObj->Object; foreach my $f (@headers) { $m->comp('/Elements/MakeClicky', content => \$f->{'Value'}, object => $object, %ARGS); } unshift @headers, $m->comp( 'CryptStatus', Message => $Message, WarnUnsigned => $WarnUnsigned ); $m->callback( CallbackName => 'BeforeLocalization', headers => \@headers, ); if ( $Localize ) { $_->{'Tag'} = loc($_->{'Tag'}) foreach @headers; } <%ARGS> $WarnUnsigned => 0 $Message => undef $Localize => 1 @DisplayHeaders => ('_all') rt-4.2.12/share/html/Elements/ShowMessageStanza000644 000765 000024 00000015324 12555754775 022063 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $plain_text_mono = RT->Config->Get( 'PlainTextMono', $session{'CurrentUser'} ); my $Depth = 0; my $object = $Transaction ? $Transaction->Object : undef; my $print_content = sub { my $ref = shift; return unless defined $$ref && length $$ref; $m->callback( content => $ref, %ARGS ); if ( $ContentType eq 'text/plain' ) { $m->comp( '/Elements/MakeClicky', content => $ref, object => $object, %ARGS ); if ( defined $$ref && !$plain_text_mono ) { $$ref =~ s{(\r?\n)}{
    }g; } } else { if ( defined $$ref ) { $$ref =~ s/^[\r\n]+//g; } } $m->out($$ref); }; $m->out( '
    ' ); if ( ref $Message ) { my @stack; my $para = ''; my $i = 0; AGAIN: foreach ( ; $i < @$Message; $i++ ) { my $stanza = $Message->[$i]; if ( ref $stanza eq "HASH" ) { # Fix message stanza nesting for Outlook's quoting styles if ( $stanza->{raw} and not $stanza->{_outlooked} and $stanza->{raw} =~ /^ # start of an internal line \s* # optional whitespace (?: -{3,} # at least three hyphens \s* # whitespace varies between Outlook versions # don't trigger on PGP signed message or signature blocks (?!(?:BEGIN|END)\s+PGP) \w # at least one word character [\w\s]{3,}? # the rest of the word(s), totalling at least 5 characters, # loose to get different languages \w # at least one ending word character \s* # whitespace varies between Outlook versions -{3,} # at least three hyphens again | _{6,} # OR: six or more underscores ) \s*$ # optional whitespace until the end of the line /xm ) { # There's content before the quoted message, but in the # same stanza. Break it out! if ( my $start = $-[0] ) { my %preceding = %$stanza; # We don't process $stanza->{text} because we don't use it # and it isn't given to us by HTML::Quoted. If we ever # need to, we can process it the same way as 'raw'. $preceding{raw} = substr($stanza->{raw}, 0, $start, ''); # Replace the current stanza with the two we just created splice @$Message, $i, 1, \%preceding, $stanza; # Try it again from the top now that we've rejiggered our # stanzas. We'll process the Outlook stanza again, and hit # the else below this time. redo; } else { # Nest the current stanza and everything that follows $stanza->{_outlooked}++; $stanza = $Message->[ $i ] = [ splice @$Message, $i ]; } } else { $para .= ( defined $stanza->{raw} ? $stanza->{raw} : '' )."\n"; } } next unless ref $stanza eq "ARRAY"; $print_content->( \$para ); $para = ''; $Depth++; push @stack, [ $Message, $i + 1 ]; ( $Message, $i ) = ( $stanza, -1 ); if ( $Depth == 1 ) { $m->comp('FoldStanzaJS'); } my @classes = ('message-stanza'); push @classes, $Depth == 1 ? 'closed' : 'open'; $m->out( '
    ' ); } if ( length $para ) { $print_content->( \$para ); $para = ''; } if (@stack) { ( $Message, $i ) = @{ pop @stack }; $Depth--; $m->out('
    '); goto AGAIN; } } else { $print_content->( \$Message ); } $m->out('
    '); <%ARGS> $Message => undef $Transaction => undef $ContentType => 'text/plain' rt-4.2.12/share/html/Elements/ShowPrincipal000644 000765 000024 00000005504 12555754775 021236 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# Released under the terms of version 2 of the GNU Public License <%args> $Object $PostUser => undef $Separator => ", " $Link => 1 <%init> if ($Object->isa("RT::Group")) { # Link the users (non-recursively) my @ret = map {$m->scomp("ShowPrincipal", Object => $_->[1], PostUser => $PostUser, Link => $Link)} sort {$a->[0] cmp $b->[0]} map {+[($_->EmailAddress||''), $_]} @{ $Object->UserMembersObj( Recursively => 0 )->ItemsArrayRef }; # But don't link the groups push @ret, sort map {$m->interp->apply_escapes( loc("Group: [_1]", $_->Name), 'h' )} @{ $Object->GroupMembersObj( Recursively => 0)->ItemsArrayRef }; $m->out( join($Separator, @ret) ); } else { $m->comp("/Elements/ShowUser", User => $Object, Link => $Link); $m->out( $PostUser->($Object) ) if $PostUser; } rt-4.2.12/share/html/Elements/ShowRecord000644 000765 000024 00000007274 12555754775 020541 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Object $Format $TrustFormat => 0 $Class => "" <%init> $Format = ScrubHTML($Format) unless $TrustFormat; my @columns = $m->comp('/Elements/CollectionAsTable/ParseFormat', Format => $Format); my $fetch_columnmap = sub { my ($name, $attr, $arguments, $no_escape) = @_; my $tmp = $m->comp( '/Elements/ColumnMap', Class => $Object->ColumnMapClassName, Name => $name, Attr => $attr, ); return ProcessColumnMapValue( $tmp, Arguments => $arguments, Escape => !$no_escape ); };
    <%perl> for my $column (@columns) { my $title = $m->interp->apply_escapes($column->{title} || '', 'h'); my $attr = $column->{'attribute'} || $column->{'last_attribute'}; unless (defined $column->{title}) { # No format-supplied title, so use the one from the column map as-is. It's # trustworthy. $title = $fetch_columnmap->($attr,'title',[$attr]); }
    <% CSSClass($fetch_columnmap->($attr,'attribute',[$attr],'no_escape')) %>"> <% loc($title) |n %> <%perl> my @out; foreach my $subcol ( @{ $column->{output} } ) { my ($col) = ($subcol =~ /^__(.*?)__$/); unless ( $col ) { push @out, $subcol; next; } push @out, $fetch_columnmap->($col, 'value', [$Object]); } @out = grep { defined $_ and length $_ } @out; <% join('',@out) |n %> % $m->callback(CallbackName => 'AfterValue', Object => $Object, attribute => $attr, column => $column );
    % }
    rt-4.2.12/share/html/Elements/ShowRelationLabel000644 000765 000024 00000005357 12555754775 022040 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ($SearchURL) { <% $Label %> % } else { <% $Label %> % } <%INIT> my $typemap = $RT::Link::TYPEMAP{$Relation}; my $search_mode = $typemap->{Mode}; my $search_type = $typemap->{Type}; my $search_relation = $RT::Link::DIRMAP{$search_type}->{$search_mode}; my $SearchURL; if ($Object and $Object->id) { my $id = $Object->id; if ($Object->isa("RT::Ticket")) { $SearchURL = RT->Config->Get('WebPath') . '/Search/Results.html?' . $m->comp('/Elements/QueryString', Query => "$search_relation = $id"); } } $m->callback( CallbackName => "ModifySearchURL", SearchURL => \$SearchURL, ARGSRef => \%ARGS, ); <%ARGS> $Object => undef $Label $Relation rt-4.2.12/share/html/Elements/ShowReminders000644 000765 000024 00000007525 12555754775 021252 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ( $reminders->Count ) { <%PERL> my $i =0; while ( my $reminder = $reminders->Next ) { $i++; my $dueobj = $reminder->DueObj; my $overdue = $dueobj->IsSet && $dueobj->Diff < 0 ? 1 : 0; my $targets = RT::Tickets->new($session{'CurrentUser'}); $targets->{'allow_deleted_search'} = 1; $targets->FromSQL( "ReferredToBy = " . $reminder->id ); if ( my $ticket= $targets->First ) { % } else { % } % }
    <&|/l&>Reminder <&|/l&>Due <&|/l&>Ticket
    <% $reminder->Subject %> <% $overdue ? '' : '' |n %><% $dueobj->AgeAsString || loc('Not set') %><% $overdue ? '' : '' |n %> #<% $ticket->Id %>: <% $ticket->Subject %>
    Couldn't find Ticket for reminder <% $reminder->id %>. Please contact administrator.
    % } <%INIT> my $reminders = RT::Tickets->new($session{'CurrentUser'}); my $tsql = 'Type = "reminder"' . ' AND ( Owner = "Nobody" OR Owner ="' . $session{'CurrentUser'}->id . '")' . ' AND ( Status = "new" OR Status = "open" )'; $tsql .= ' AND ( Due < "now" OR Due IS NULL )' if $OnlyOverdue; $reminders->FromSQL($tsql); $reminders->OrderBy( FIELD => 'Due', ORDER => 'ASC' ); <%ARGS> $OnlyOverdue => 0 rt-4.2.12/share/html/Elements/ShowSearch000644 000765 000024 00000013777 12555754775 020535 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/Widgets/TitleBox, title => loc(RT::SavedSearch->EscapeDescription($search->Description), $ProcessedSearchArg->{'Rows'}), title_href => $query_link_url.$QueryString, titleright => $customize ? loc('Edit') : '', titleright_href => $customize, hideable => $hideable &> <& $query_display_component, hideable => $hideable, %$ProcessedSearchArg, ShowNavigation => 0, Class => 'RT::Tickets' &> <%init> my $search; my $user = $session{'CurrentUser'}->UserObj; my $SearchArg; my $customize; my $query_display_component = '/Elements/CollectionList'; my $query_link_url = RT->Config->Get('WebPath').'/Search/Results.html'; if ($SavedSearch) { my ( $container_object, $search_id ) = _parse_saved_search($SavedSearch); unless ( $container_object ) { $m->out(loc("Either you have no rights to view saved search [_1] or identifier is incorrect", $m->interp->apply_escapes($SavedSearch, 'h'))); return; } $search = RT::Attribute->new( $session{'CurrentUser'} ); $search->Load($search_id); unless ( $search->Id && ref( $SearchArg = $search->Content ) eq 'HASH' ) { $m->out(loc("Saved search [_1] not found", $m->interp->apply_escapes($SavedSearch, 'h'))) unless $IgnoreMissing; return; } $SearchArg->{'SavedSearchId'} ||= $SavedSearch; $SearchArg->{'SearchType'} ||= 'Ticket'; if ( $SearchArg->{SearchType} ne 'Ticket' ) { # XXX: dispatch to different handler here $query_display_component = '/Search/Elements/' . $SearchArg->{SearchType}; $query_link_url = RT->Config->Get('WebPath') . "/Search/$SearchArg->{SearchType}.html"; } elsif ($ShowCustomize) { $customize = RT->Config->Get('WebPath') . '/Search/Build.html?' . $m->comp( '/Elements/QueryString', SavedSearchLoad => $SavedSearch ); } } else { ($search) = RT::System->new( $session{'CurrentUser'} ) ->Attributes->Named( 'Search - ' . $Name ); unless ( $search && $search->Id ) { my (@custom_searches) = RT::System->new( $session{'CurrentUser'} )->Attributes->Named('SavedSearch'); foreach my $custom (@custom_searches) { if ($custom->Description eq $Name) { $search = $custom; last } } unless ($search && $search->id) { $m->out(loc("Predefined search [_1] not found", $m->interp->apply_escapes($Name, 'h'))); return; } } $SearchArg = $user->Preferences( $search, $search->Content ); if ($ShowCustomize) { $customize = RT->Config->Get('WebPath') . '/Prefs/Search.html?' . $m->comp( '/Elements/QueryString', name => ref($search) . '-' . $search->Id ); } } # ProcessedSearchArg is a search with overridings, but for link we use # orginal search's poperties my $ProcessedSearchArg = $SearchArg; $ProcessedSearchArg = { %$SearchArg, %Override } if keys %Override; $m->callback( %ARGS, CallbackName => 'ModifySearch', OriginalSearch => $SearchArg, Search => $ProcessedSearchArg, ); foreach ( $SearchArg, $ProcessedSearchArg ) { $_->{'Format'} ||= ''; $_->{'Query'} ||= ''; # extract-message-catalog would "$1", so we avoid quotes for loc calls $_->{'Format'} =~ s/__loc\(["']?(\w+)["']?\)__/my $f = "$1"; loc($f)/ge; if ( $_->{'Query'} =~ /__Bookmarks__/ ) { $_->{'Rows'} = 999; # DEPRECATED: will be here for a while up to 4.4 RT->Deprecated( Remove => "4.4", Instead => "id = '__Bookmarked__'", Message => "The __Bookmarks__ query syntax is deprecated", Object => $search, ); my @bookmarks = $session{'CurrentUser'}->UserObj->Bookmarks; my $query = join(" OR ", map " id = '$_' ", @bookmarks ) || 'id=0'; $_->{'Query'} =~ s/__Bookmarks__/( $query )/g; } } my $QueryString = '?' . $m->comp( '/Elements/QueryString', %$SearchArg ); <%ARGS> $Name => undef $SavedSearch => undef %Override => () $IgnoreMissing => undef $hideable => 1 $ShowCustomize => 1 rt-4.2.12/share/html/Elements/ShowTransaction000644 000765 000024 00000017562 12555754775 021611 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <%PERL> $m->comp('/Elements/ShowCustomFields', Object => $Transaction, HideEmpty => 1 ) if $HasTxnCFs; $m->comp( 'ShowTransactionAttachments', %ARGS, Parent => 0 ) if $ShowBody;
    % $m->callback( %ARGS, Transaction => $Transaction, CallbackName => 'AfterContent' );
    <%ARGS> $Transaction $Object => $Transaction->Object $Attachments => undef $AttachmentContent => undef $HasTxnCFs => 1 $ShowBody => 1 $ShowActions => 1 $RowNum => 1 $DisplayPath => undef $AttachmentPath => undef $UpdatePath => undef $ForwardPath => undef $EncryptionPath => undef $EmailRecordPath => undef <%ONCE> <%INIT> my $record_type = $Object->RecordType; my $type_class = $Object->ClassifyTransaction( $Transaction ); $m->callback( CallbackName => 'MassageTypeClass', Transaction => $Transaction, TypeClassRef => \$type_class, ARGSRef => \%ARGS, ); my @classes = ( "transaction", "$record_type-transaction", $type_class, ($RowNum % 2 ? 'odd' : 'even') ); my $desc = $Transaction->BriefDescriptionAsHTML; if ( $Object->id != $Transaction->ObjectId ) { # merged objects $desc = join " - ", $m->interp->apply_escapes( loc("[_1] #[_2]:", loc($record_type), $Transaction->ObjectId), 'h'), $desc; } my $date = $Transaction->CreatedAsString; my $time = ''; $time = loc('[quant,_1,minute,minutes]', $Transaction->TimeTaken) if $Transaction->TimeTaken; if ( $ShowBody && !$Attachments ) { $ARGS{'Attachments'} = $Attachments = {}; my $attachments = $Transaction->Attachments( WithHeaders => 1 ); push @{ $Attachments->{ $_->Parent || 0 } ||= [] }, $_ foreach @{ $attachments->ItemsArrayRef }; } my @actions = (); my $txn_type = $Transaction->Type; if ( $txn_type =~ /EmailRecord$/ ) { push @actions, { title => loc('Show'), target => '_blank', path => $EmailRecordPath .'?id='. $Object->id .'&Transaction='. $Transaction->id .'&Attachment='. ( $Attachments->{0}[0] && $Attachments->{0}[0]->id ), } if $EmailRecordPath; $ShowBody = 0; } # If the transaction has anything attached to it at all elsif ( %$Attachments && $ShowActions ) { my %has_right = map { $_ => RT::ACE->CanonicalizeRightName( $_ . $record_type ) } qw(Modify CommentOn ReplyTo); $has_right{'Forward'} = RT::ACE->CanonicalizeRightName('ForwardMessage'); my $can_modify = $has_right{'Modify'} && $Object->CurrentUserHasRight( $has_right{'Modify'} ); if ( $UpdatePath && $has_right{'ReplyTo'} && ( $can_modify || $Object->CurrentUserHasRight( $has_right{'ReplyTo'} ) ) ) { push @actions, { class => "reply-link", title => loc('Reply'), path => $UpdatePath .'?id='. $Object->id .'&QuoteTransaction='. $Transaction->id .'&Action=Respond' , }; } if ( $UpdatePath && $has_right{'CommentOn'} && ( $can_modify || $Object->CurrentUserHasRight( $has_right{'CommentOn'} ) ) ) { push @actions, { class => "comment-link", title => loc('Comment'), path => $UpdatePath .'?id='. $Object->id .'&QuoteTransaction='. $Transaction->id .'&Action=Comment' , }; } if ( $ForwardPath && $has_right{'Forward'} && $Object->CurrentUserHasRight( $has_right{'Forward'} ) ) { push @actions, { class => "forward-link", title => loc('Forward'), path => $ForwardPath .'?id='. $Object->id .'&QuoteTransaction='. $Transaction->id , }; } if ( $EncryptionPath && $can_modify && RT->Config->Get('Crypt')->{'Enable'} && RT->Config->Get('Crypt')->{'AllowEncryptDataInDB'} ) { push @actions, { class => "encryption-link", title => loc('Encrypt/Decrypt'), path => $EncryptionPath .'?id='. $Transaction->id .'&QuoteTransaction='. $Transaction->id , }; } } $m->callback( %ARGS, Transaction => $Transaction, Object => $Object, Classes => \@classes, Actions => \@actions, Created => \$date, TimeTaken => \$time, Description => \$desc, ShowBody => \$ShowBody, ); my $actions = ''; if ( @actions ) { my $i = $m->interp; foreach my $a ( @actions ) { $a = '{'target'} ? ' target="'. $i->apply_escapes( $a->{'target'}, 'h' ) .'"' : '' ) . ($a->{'class'} ? ' class="'. $i->apply_escapes( $a->{'class'}, 'h' ) .'"' : '' ) .'>'. $i->apply_escapes( $a->{'title'}, 'h' ) .'' ; } $actions = join ' ', map "[$_]", @actions; } # make date unbreakable $date = $m->interp->apply_escapes( $date, 'h' ); $date =~ s/\s/ /g; rt-4.2.12/share/html/Elements/ShowTransactionAttachments000644 000765 000024 00000025603 12555754775 024000 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%PERL> # Find all the attachments which have parent $Parent # For each of these attachments foreach my $message ( @{ $Attachments->{ $Parent || 0 } || [] } ) { $m->comp( 'ShowMessageHeaders', WarnUnsigned => $WarnUnsigned, Message => $message, DisplayHeaders => \@DisplayHeaders, ); my $name = defined $message->Filename && length $message->Filename ? $message->Filename : ''; if ( $message->ContentLength or $name ) {
    <&|/l&>Download <% length $name ? $name : loc('(untitled)') %>\ % if ( $DownloadableHeaders && ! length $name && $message->ContentType =~ /text/ ) { / <% loc('with headers') %> % } % $m->callback(CallbackName => 'AfterDownloadLinks', ARGSRef => \%ARGS, Object => $Object, Transaction => $Transaction, Attachment => $message);
    <% $message->ContentType %> <% $message->FriendlyContentLength %>
    % } %# If there is sub-messages, open a dedicated div % if ( $Attachments->{ $message->id } ) {
    % } else {
    % } <%PERL> $render_attachment->( $message ); $m->comp( $m->current_comp, %ARGS, Parent => $message->id, ParentObj => $message, displayed_inline => $displayed_inline, );
    % } <%ARGS> $Transaction $Object => $Transaction->Object $ShowHeaders => 0 $DownloadableHeaders => 1 $AttachmentPath => undef $Attachments => {} $AttachmentContent => {} $Parent => 0 $ParentObj => undef $WarnUnsigned => 0 # Keep track of CID images we display inline $displayed_inline => {} <%INIT> my @DisplayHeaders=qw(_all); if ( $Transaction->Type =~ /EmailRecord$/ ) { @DisplayHeaders = qw(To Cc Bcc); } # If the transaction has anything attached to it at all elsif (!$ShowHeaders) { @DisplayHeaders = qw(To From RT-Send-Cc Cc Bcc Date Subject); push @DisplayHeaders, 'RT-Send-Bcc' if RT->Config->Get('ShowBccHeader'); } $m->callback(CallbackName => 'MassageDisplayHeaders', DisplayHeaders => \@DisplayHeaders, Transaction => $Transaction, ShowHeaders => $ShowHeaders); my $render_attachment = sub { my $message = shift; my $name = defined $message->Filename && length $message->Filename ? $message->Filename : ''; my $content_type = lc $message->ContentType; # if it has a content-disposition: attachment, don't show inline my $disposition = $message->GetHeader('Content-Disposition'); if ( $disposition && $disposition =~ /^\s*attachment/i ) { $disposition = 'attachment'; } else { $disposition = 'inline'; } # If it's text if ( $content_type =~ m{^(text|message)/} ) { my $max_size = RT->Config->Get( 'MaxInlineBody', $session{'CurrentUser'} ); if ( $disposition ne 'inline' ) { $m->out('

    '. loc( 'Message body is not shown because sender requested not to inline it.' ) .'

    '); return; } elsif ( length $name && RT->Config->Get('SuppressInlineTextFiles', $session{'CurrentUser'} ) ) { $m->out('

    '. loc( 'Text file is not shown because it is disabled in preferences.' ) .'

    '); return; } elsif ( $max_size && $message->ContentLength > $max_size ) { $m->out('

    '. loc( 'Message body is not shown because it is too large.' ) .'

    '); return; } if ( # it's a toplevel object !$ParentObj # or its parent isn't a multipart alternative || ( $ParentObj->ContentType !~ m{^multipart/(?:alternative|related)$}i ) # or it's of our prefered alterative type || ( ( RT->Config->Get('PreferRichText', $session{CurrentUser}) && ( $content_type =~ m{^text/(?:html|enriched)$} ) ) || ( !RT->Config->Get('PreferRichText', $session{CurrentUser}) && ( $content_type !~ m{^text/(?:html|enriched)$} ) ) ) ) { my $content; # If we've cached the content, use it from there if (my $x = $AttachmentContent->{ $Transaction->id }->{$message->id}) { $content = $x->Content; } else { $content = $message->Content; } $RT::Logger->debug( "Rendering attachment #". $message->id ." of '$content_type' type" ); # if it's a text/html clean the body and show it if ( $content_type eq 'text/html' ) { $content = $m->comp( '/Elements/ScrubHTML', Content => $content ); if (RT->Config->Get('ShowTransactionImages')) { my @rewritten = RT::Interface::Web::RewriteInlineImages( Content => \$content, Attachment => $message, # Not technically correct to search all parts of the # MIME structure, but it saves having to go to the # database again and is unlikely to break display. Related => [ map { @$_ } values %$Attachments ], AttachmentPath => $AttachmentPath, ); $displayed_inline->{$_}++ for @rewritten; } $m->comp( '/Elements/MakeClicky', content => \$content, html => 1, object => $Object, ); if ( !length $name && RT->Config->Get( 'QuoteFolding', $session{CurrentUser} ) ) { eval { require HTML::Quoted; $content = HTML::Quoted->extract($content) }; if ($@) { RT->Logger->error( "HTML::Quoted couldn't process attachment #@{[$message->id]}: $@." . " This is a bug, please report it to rt-bugs\@bestpractical.com."); } } $m->comp( 'ShowMessageStanza', Message => $content, Transaction => $Transaction, ContentType => 'text/html', ); } elsif ( $content_type eq 'text/enriched' ) { $content = $m->comp( '/Elements/ScrubHTML', Content => $content ); $m->out( $content ); } # It's a text type we don't have special handling for else { if ( !length $name && RT->Config->Get( 'QuoteFolding', $session{CurrentUser} ) ) { eval { require Text::Quoted; Text::Quoted::set_quote_characters(undef); $content = Text::Quoted::extract($content); }; if ($@) { RT->Logger->error( "Text::Quoted couldn't process attachment #@{[$message->id]}: $@." . " This is a bug, please report it to rt-bugs\@bestpractical.com."); } } $m->comp( 'ShowMessageStanza', Message => $content, Transaction => $Transaction, ContentType => 'text/plain', ); } } } # if it's an image, show it as an image elsif ( $content_type =~ m{^image/} ) { if (not RT->Config->Get('ShowTransactionImages')) { $m->out('

    '. loc( 'Image not shown because display is disabled in system configuration.' ) .'

    '); return; } elsif ( $displayed_inline->{$message->Id} ) { $m->out('

    '. loc( 'Image displayed inline above' ) .'

    '); return; } elsif ( $disposition ne 'inline' ) { $m->out('

    '. loc( 'Image not shown because sender requested not to inline it.' ) .'

    '); return; } my $filename = length $name ? $name : loc('(untitled)'); my $efilename = $m->interp->apply_escapes( $filename, 'h' ); $m->out( qq{$efilename' ); } elsif ( $message->ContentLength && $message->ContentLength > 0 ) { $m->out( '

    ' . loc( 'Message body not shown because it is not plain text.' ) . '

    ' ); } }; rt-4.2.12/share/html/Elements/ShowUser000644 000765 000024 00000006332 12555754775 020233 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> # $User is an RT::User object # $Address is Email::Address object my $display = RT::User->Format( User => $User, Address => $Address, CurrentUser => $session{CurrentUser}, Format => $style, ); # RT::User->Format does this itself, but we want to make sure we have a $User # if at all possible for the rest of our code below. if ($Address and not $User) { $User = RT::User->new( $session{CurrentUser} ); $User->LoadByEmail( $Address->address ); undef $User unless $User->id; } my %system_user = ( RT->Nobody->id => 1, RT->SystemUser->id => 1, ); $m->callback( ARGSRef => \%ARGS, User => $User, Address => $Address, display => \$display, system_user => \%system_user, CallbackName => 'Modify', ); <%ARGS> $User => undef $Address => undef $style => undef $Link => 1 id ? 'data-user-id="'.$User->id.'"' : "" |n %>>\ % if ($Link and $User and $User->id and not $system_user{$User->id} and $session{CurrentUser}->Privileged) { /User/Summary.html?id=<% $User->id %>">\ <% $display %>\ \ % } else { <% $display %>\ % } \ rt-4.2.12/share/html/Elements/ShowUserEmailFrequency000644 000765 000024 00000004231 12555754775 023061 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} (<% loc($frequency) %>) <%INIT> my $frequency = $User->EmailFrequency( Ticket => $Ticket ); return unless $frequency; <%ARGS> $User $Ticket => undef rt-4.2.12/share/html/Elements/SimpleSearch000644 000765 000024 00000004542 12555754775 021034 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> my $value = defined $DECODED_ARGS->{q} ? $DECODED_ARGS->{q} : ''; <%ARGS> $SendTo => '/Search/Simple.html' $Placeholder => loc('Search') rt-4.2.12/share/html/Elements/Submit000644 000765 000024 00000010137 12555754775 017715 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    % if ($CheckAll) { % } % if ($ClearAll) { % } % if ($Reset) { % }
    % if ( $Back ) { % } % if ( $Back ) {
    <%$BackCaption%> <% $BackName ? qq[ name="$BackName"] : '' | n %> value="<%$BackLabel%>" class="button" />
    % }
    <%ARGS> $color => undef $Caption => '' $AlternateCaption => undef $AlternateLabel => undef $Label => loc('Submit') $Name => undef $CheckAll => undef $CheckAllLabel => loc('Check All') $ClearAll => undef $ClearAllLabel => loc('Clear All') $CheckboxName => '' $CheckboxNameRegex => '' $Back => undef $BackName => 'Back' $BackLabel => loc('Back') $BackCaption => '' $BackOnClick => undef $OnClick => undef $Reset => undef $ResetLabel => loc('Reset') $SubmitId => undef $id => undef <%init> my $match; if (length $CheckboxName) { $match = $m->interp->apply_escapes($CheckboxName,'j'); } elsif (length $CheckboxNameRegex) { $match = $CheckboxNameRegex; } else { $match = q{''}; } rt-4.2.12/share/html/Elements/Tabs000644 000765 000024 00000137132 12555754775 017350 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/PageLayout, show_menu => $show_menu &> <%INIT> my $request_path = $HTML::Mason::Commands::r->path_info; $request_path =~ s!/{2,}!/!g; my $query_string = sub { my %args = @_; my $u = URI->new(); $u->query_form(map { $_ => $args{$_} } sort keys %args); return $u->query; }; my $build_admin_menu = sub { my $top = shift; my $admin = $top->child( admin => title => loc('Admin'), path => '/Admin/' ); if ( $session{'CurrentUser'}->HasRight( Object => RT->System, Right => 'AdminUsers' ) ) { my $users = $admin->child( users => title => loc('Users'), description => loc('Manage users and passwords'), path => '/Admin/Users/', ); $users->child( select => title => loc('Select'), path => "/Admin/Users/" ); $users->child( create => title => loc('Create'), path => "/Admin/Users/Modify.html?Create=1" ); } my $groups = $admin->child( groups => title => loc('Groups'), description => loc('Manage groups and group membership'), path => '/Admin/Groups/', ); $groups->child( select => title => loc('Select'), path => "/Admin/Groups/" ); $groups->child( create => title => loc('Create'), path => "/Admin/Groups/Modify.html?Create=1" ); my $queues = $admin->child( queues => title => loc('Queues'), description => loc('Manage queues and queue-specific properties'), path => '/Admin/Queues/', ); $queues->child( select => title => loc('Select'), path => "/Admin/Queues/" ); $queues->child( create => title => loc('Create'), path => "/Admin/Queues/Modify.html?Create=1" ); if ( $session{'CurrentUser'}->HasRight( Object => RT->System, Right => 'AdminCustomField' ) ) { my $cfs = $admin->child( 'custom-fields' => title => loc('Custom Fields'), description => loc('Manage custom fields and custom field values'), path => '/Admin/CustomFields/', ); $cfs->child( select => title => loc('Select'), path => "/Admin/CustomFields/" ); $cfs->child( create => title => loc('Create'), path => "/Admin/CustomFields/Modify.html?Create=1" ); } if ( $session{'CurrentUser'}->HasRight( Object => RT->System, Right => 'ModifyScrips' ) ) { my $scrips = $admin->child( 'scrips' => title => loc('Scrips'), description => loc('Manage scrips'), path => '/Admin/Scrips/', ); $scrips->child( select => title => loc('Select'), path => "/Admin/Scrips/" ); $scrips->child( create => title => loc('Create'), path => "/Admin/Scrips/Create.html" ); } my $admin_global = $admin->child( global => title => loc('Global'), description => loc('Manage properties and configuration which apply to all queues'), path => '/Admin/Global/', ); my $scrips = $admin_global->child( scrips => title => loc('Scrips'), description => loc('Modify scrips which apply to all queues'), path => '/Admin/Global/Scrips.html', ); $scrips->child( select => title => loc('Select'), path => "/Admin/Global/Scrips.html" ); $scrips->child( create => title => loc('Create'), path => "/Admin/Scrips/Create.html?Global=1" ); my $templates = $admin_global->child( templates => title => loc('Templates'), description => loc('Edit system templates'), path => '/Admin/Global/Templates.html', ); $templates->child( select => title => loc('Select'), path => "/Admin/Global/Templates.html" ); $templates->child( create => title => loc('Create'), path => "/Admin/Global/Template.html?Create=1" ); my $cfadmin = $admin_global->child( 'custom-fields' => title => loc('Custom Fields'), description => loc('Modify global custom fields'), path => '/Admin/Global/CustomFields/index.html', ); $cfadmin->child( users => title => loc('Users'), description => loc('Select custom fields for all users'), path => '/Admin/Global/CustomFields/Users.html', ); $cfadmin->child( groups => title => loc('Groups'), description => loc('Select custom fields for all user groups'), path => '/Admin/Global/CustomFields/Groups.html', ); $cfadmin->child( queues => title => loc('Queues'), description => loc('Select custom fields for all queues'), path => '/Admin/Global/CustomFields/Queues.html', ); $cfadmin->child( tickets => title => loc('Tickets'), description => loc('Select custom fields for tickets in all queues'), path => '/Admin/Global/CustomFields/Queue-Tickets.html', ); $cfadmin->child( transactions => title => loc('Ticket Transactions'), description => loc('Select custom fields for transactions on tickets in all queues'), path => '/Admin/Global/CustomFields/Queue-Transactions.html', ); $cfadmin->child( 'custom-fields' => title => loc('Articles'), description => loc('Select Custom Fields for Articles in all Classes'), path => '/Admin/Global/CustomFields/Class-Article.html', ); my $article_admin = $admin->child( articles => title => loc('Articles'), path => "/Admin/Articles/index.html" ); my $class_admin = $article_admin->child(classes => title => loc('Classes'), path => '/Admin/Articles/Classes/' ); $class_admin->child( select => title => loc('Select'), description => loc('Modify and Create Classes'), path => '/Admin/Articles/Classes/', ); $class_admin->child( create => title => loc('Create'), description => loc('Modify and Create Custom Fields for Articles'), path => '/Admin/Articles/Classes/Modify.html?Create=1', ); my $cfs = $article_admin->child( 'custom-fields' => title => loc('Custom Fields'), path => '/Admin/CustomFields/index.html?'.$m->comp('/Elements/QueryString', Type => 'RT::Class-RT::Article'), ); $cfs->child( select => title => loc('Select'), path => '/Admin/CustomFields/index.html?'.$m->comp('/Elements/QueryString', Type => 'RT::Class-RT::Article'), ); $cfs->child( create => title => loc('Create'), path => '/Admin/CustomFields/Modify.html?'.$m->comp("/Elements/QueryString", Create=>1, LookupType=> "RT::Class-RT::Article" ), ); $admin_global->child( 'group-rights' => title => loc('Group Rights'), description => loc('Modify global group rights'), path => '/Admin/Global/GroupRights.html', ); $admin_global->child( 'user-rights' => title => loc('User Rights'), description => loc('Modify global user rights'), path => '/Admin/Global/UserRights.html', ); $admin_global->child( 'my-rt' => title => loc('RT at a glance'), description => loc('Modify the default "RT at a glance" view'), path => '/Admin/Global/MyRT.html', ); $admin_global->child( 'dashboards-in-menu' => title => loc('Dashboards in menu'), description => loc('Customize dashboards in menu'), path => '/Admin/Global/DashboardsInMenu.html', ); $admin_global->child( 'topics' => title => loc('Topics'), description => loc('Modify global article topics'), path => '/Admin/Global/Topics.html', ); my $admin_tools = $admin->child( tools => title => loc('Tools'), description => loc('Use other RT administrative tools'), path => '/Admin/Tools/', ); $admin_tools->child( configuration => title => loc('System Configuration'), description => loc('Detailed information about your RT setup'), path => '/Admin/Tools/Configuration.html', ); $admin_tools->child( theme => title => loc('Theme'), description => loc('Customize the look of your RT'), path => '/Admin/Tools/Theme.html', ); if (RT->Config->Get('StatementLog') && $session{'CurrentUser'}->HasRight( Right => 'SuperUser', Object => RT->System )) { $admin_tools->child( 'sql-queries' => title => loc('SQL Queries'), description => loc('Browse the SQL queries made in this process'), path => '/Admin/Tools/Queries.html', ); } $admin_tools->child( shredder => title => loc('Shredder'), description => loc('Permanently wipeout data from RT'), path => '/Admin/Tools/Shredder', ); if ( $request_path =~ m{^/Admin/(Queues|Users|Groups|CustomFields)} ) { my $type = $1; my $tabs = PageMenu(); my %labels = ( Queues => loc("Queues"), Users => loc("Users"), Groups => loc("Groups"), CustomFields => loc("Custom Fields"), ); my $section; if ( $request_path =~ m|^/Admin/$type/?(?:index.html)?$| || ( $request_path =~ m|^/Admin/$type/(?:Modify.html)$| && $DECODED_ARGS->{'Create'} ) ) { $section = $tabs; } else { $section = $tabs->child( select => title => $labels{$type}, path => "/Admin/$type/" ); } $section->child( select => title => loc('Select'), path => "/Admin/$type/" ); $section->child( create => title => loc('Create'), path => "/Admin/$type/Modify.html?Create=1" ); } if ( $request_path =~ m{^/Admin/Queues} ) { if ( $DECODED_ARGS->{'id'} && $DECODED_ARGS->{'id'} =~ /^\d+$/ || $DECODED_ARGS->{'Queue'} && $DECODED_ARGS->{'Queue'} =~ /^\d+$/ ) { my $id = $DECODED_ARGS->{'Queue'} || $DECODED_ARGS->{'id'}; my $queue_obj = RT::Queue->new( $session{'CurrentUser'} ); $queue_obj->Load($id); if ( $queue_obj and $queue_obj->id ) { my $queue = PageMenu(); $queue->child( basics => title => loc('Basics'), path => "/Admin/Queues/Modify.html?id=" . $id ); $queue->child( people => title => loc('Watchers'), path => "/Admin/Queues/People.html?id=" . $id ); my $templates = $queue->child(templates => title => loc('Templates'), path => "/Admin/Queues/Templates.html?id=" . $id); $templates->child( select => title => loc('Select'), path => "/Admin/Queues/Templates.html?id=".$id); $templates->child( create => title => loc('Create'), path => "/Admin/Queues/Template.html?Create=1;Queue=".$id); my $scrips = $queue->child( scrips => title => loc('Scrips'), path => "/Admin/Queues/Scrips.html?id=" . $id); $scrips->child( select => title => loc('Select'), path => "/Admin/Queues/Scrips.html?id=" . $id ); $scrips->child( create => title => loc('Create'), path => "/Admin/Scrips/Create.html?Queue=" . $id); my $cfs = $queue->child( 'custom-fields' => title => loc('Custom Fields') ); my $ticket_cfs = $cfs->child( 'tickets' => title => loc('Tickets'), path => '/Admin/Queues/CustomFields.html?SubType=RT::Ticket&id=' . $id ); my $txn_cfs = $cfs->child( 'transactions' => title => loc('Transactions'), path => '/Admin/Queues/CustomFields.html?SubType=RT::Ticket-RT::Transaction&id='.$id ); $queue->child( 'group-rights' => title => loc('Group Rights'), path => "/Admin/Queues/GroupRights.html?id=".$id ); $queue->child( 'user-rights' => title => loc('User Rights'), path => "/Admin/Queues/UserRights.html?id=" . $id ); $queue->child( 'history' => title => loc('History'), path => "/Admin/Queues/History.html?id=" . $id ); $m->callback( CallbackName => 'PrivilegedQueue', queue_id => $id, page_menu => $queue); } } } if ( $request_path =~ m{^(/Admin/Users|/User/(Summary|History)\.html)} and $admin->child("users") ) { if ( $DECODED_ARGS->{'id'} && $DECODED_ARGS->{'id'} =~ /^\d+$/ ) { my $id = $DECODED_ARGS->{'id'}; my $obj = RT::User->new( $session{'CurrentUser'} ); $obj->Load($id); if ( $obj and $obj->id ) { my $tabs = PageMenu(); $tabs->child( basics => title => loc('Basics'), path => "/Admin/Users/Modify.html?id=" . $id ); $tabs->child( memberships => title => loc('Memberships'), path => "/Admin/Users/Memberships.html?id=" . $id ); $tabs->child( history => title => loc('History'), path => "/Admin/Users/History.html?id=" . $id ); $tabs->child( 'my-rt' => title => loc('RT at a glance'), path => "/Admin/Users/MyRT.html?id=" . $id ); $tabs->child( 'dashboards-in-menu' => title => loc('Dashboards in menu'), path => '/Admin/Users/DashboardsInMenu.html?id=' . $id, ); if ( RT->Config->Get('Crypt')->{'Enable'} ) { $tabs->child( keys => title => loc('Private keys'), path => "/Admin/Users/Keys.html?id=" . $id ); } $tabs->child( 'summary' => title => loc('User Summary'), path => "/User/Summary.html?id=" . $id ); } } } if ( $request_path =~ m{^/Admin/Groups} ) { if ( $DECODED_ARGS->{'id'} && $DECODED_ARGS->{'id'} =~ /^\d+$/ ) { my $id = $DECODED_ARGS->{'id'}; my $obj = RT::Group->new( $session{'CurrentUser'} ); $obj->Load($id); if ( $obj and $obj->id ) { my $tabs = PageMenu(); $tabs->child( basics => title => loc('Basics'), path => "/Admin/Groups/Modify.html?id=" . $obj->id ); $tabs->child( members => title => loc('Members'), path => "/Admin/Groups/Members.html?id=" . $obj->id ); $tabs->child( memberships => title => loc('Memberships'), path => "/Admin/Groups/Memberships.html?id=" . $obj->id ); $tabs->child( 'group-rights' => title => loc('Group Rights'), path => "/Admin/Groups/GroupRights.html?id=" . $obj->id ); $tabs->child( 'user-rights' => title => loc('User Rights'), path => "/Admin/Groups/UserRights.html?id=" . $obj->id ); $tabs->child( history => title => loc('History'), path => "/Admin/Groups/History.html?id=" . $obj->id ); } } } if ( $request_path =~ m{^/Admin/CustomFields/} ) { if ( $DECODED_ARGS->{'id'} && $DECODED_ARGS->{'id'} =~ /^\d+$/ ) { my $id = $DECODED_ARGS->{'id'}; my $obj = RT::CustomField->new( $session{'CurrentUser'} ); $obj->Load($id); if ( $obj and $obj->id ) { my $tabs = PageMenu(); $tabs->child( basics => title => loc('Basics'), path => "/Admin/CustomFields/Modify.html?id=".$id ); $tabs->child( 'group-rights' => title => loc('Group Rights'), path => "/Admin/CustomFields/GroupRights.html?id=" . $id ); $tabs->child( 'user-rights' => title => loc('User Rights'), path => "/Admin/CustomFields/UserRights.html?id=" . $id ); unless ( $obj->IsOnlyGlobal ) { $tabs->child( 'applies-to' => title => loc('Applies to'), path => "/Admin/CustomFields/Objects.html?id=" . $id ); } } } } if ( $request_path =~ m{^/Admin/Scrips/} ) { if ( $m->request_args->{'id'} && $m->request_args->{'id'} =~ /^\d+$/ ) { my $id = $m->request_args->{'id'}; my $obj = RT::Scrip->new( $session{'CurrentUser'} ); $obj->Load($id); my $tabs = PageMenu(); my ( $admin_cat, $create_path_arg, $from_query_param ); my $from_arg = $DECODED_ARGS->{'From'} || q{}; my ($from_queue) = $from_arg =~ /^(\d+)$/; if ( $from_queue ) { $admin_cat = "Queues/Scrips.html?id=$from_queue"; $create_path_arg = "?Queue=$from_queue"; $from_query_param = "&From=$from_queue"; } elsif ( $from_arg eq 'Global' ) { $admin_cat = 'Global/Scrips.html'; $create_path_arg = '?Global=1'; $from_query_param = '&From=Global'; } else { $admin_cat = 'Scrips'; $from_query_param = $create_path_arg = q{}; } my $scrips = $tabs->child( scrips => title => loc('Scrips'), path => "/Admin/${admin_cat}" ); $scrips->child( select => title => loc('Select'), path => "/Admin/${admin_cat}" ); $scrips->child( create => title => loc('Create'), path => "/Admin/Scrips/Create.html${create_path_arg}" ); $tabs->child( basics => title => loc('Basics') => path => "/Admin/Scrips/Modify.html?id=" . $id . $from_query_param ); $tabs->child( 'applies-to' => title => loc('Applies to'), path => "/Admin/Scrips/Objects.html?id=" . $id . $from_query_param ); } elsif ( $request_path =~ m{^/Admin/Scrips/(index\.html)?$} ) { PageMenu->child( select => title => loc('Select') => path => "/Admin/Scrips/" ); PageMenu->child( create => title => loc('Create') => path => "/Admin/Scrips/Create.html" ); } elsif ( $request_path =~ m{^/Admin/Scrips/Create\.html$} ) { my ($queue) = $DECODED_ARGS->{'Queue'} && $DECODED_ARGS->{'Queue'} =~ /^(\d+)$/; my $global_arg = $DECODED_ARGS->{'Global'}; if ($queue) { PageMenu->child( select => title => loc('Select') => path => "/Admin/Queues/Scrips.html?id=$queue" ); PageMenu->child( create => title => loc('Create') => path => "/Admin/Scrips/Create.html?Queue=$queue" ); } elsif ($global_arg) { PageMenu->child( select => title => loc('Select') => path => "/Admin/Global/Scrips.html" ); PageMenu->child( create => title => loc('Create') => path => "/Admin/Scrips/Create.html?Global=1" ); } else { PageMenu->child( select => title => loc('Select') => path => "/Admin/Scrips" ); PageMenu->child( create => title => loc('Create') => path => "/Admin/Scrips/Create.html" ); } } } if ( $request_path =~ m{^/Admin/Global/Scrips\.html} ) { my $tabs = PageMenu(); $tabs->child( select => title => loc('Select'), path => "/Admin/Global/Scrips.html" ); $tabs->child( create => title => loc('Create'), path => "/Admin/Scrips/Create.html?Global=1" ); } if ( $request_path =~ m{^/Admin/Global/Templates?\.html} ) { my $tabs = PageMenu(); $tabs->child( select => title => loc('Select'), path => "/Admin/Global/Templates.html" ); $tabs->child( create => title => loc('Create'), path => "/Admin/Global/Template.html?Create=1" ); } if ( $request_path =~ m{^/Admin/Articles/Classes/} ) { my $tabs = PageMenu(); if ( my $id = $DECODED_ARGS->{'id'} ) { my $obj = RT::Class->new( $session{'CurrentUser'} ); $obj->Load($id); if ( $obj and $obj->id ) { my $section = $tabs->child( select => title => loc("Classes"), path => "/Admin/Articles/Classes/" ); $section->child( select => title => loc('Select'), path => "/Admin/Articles/Classes/" ); $section->child( create => title => loc('Create'), path => "/Admin/Articles/Classes/Modify.html?Create=1" ); $tabs->child( basics => title => loc('Basics'), path => "/Admin/Articles/Classes/Modify.html?id=".$id ); $tabs->child( topics => title => loc('Topics'), path => "/Admin/Articles/Classes/Topics.html?id=".$id ); $tabs->child( 'custom-fields' => title => loc('Custom Fields'), path => "/Admin/Articles/Classes/CustomFields.html?id=".$id ); $tabs->child( 'group-rights' => title => loc('Group Rights'), path => "/Admin/Articles/Classes/GroupRights.html?id=".$id ); $tabs->child( 'user-rights' => title => loc('User Rights'), path => "/Admin/Articles/Classes/UserRights.html?id=".$id ); $tabs->child( 'applies-to' => title => loc('Applies to'), path => "/Admin/Articles/Classes/Objects.html?id=$id" ); } } else { $tabs->child( select => title => loc('Select'), path => "/Admin/Articles/Classes/" ); $tabs->child( create => title => loc('Create'), path => "/Admin/Articles/Classes/Modify.html?Create=1" ); } } }; my $build_main_nav = sub { PageWidgets()->child( simple_search => raw_html => $m->scomp('SimpleSearch') ); PageWidgets()->child( create_ticket => raw_html => $m->scomp('CreateTicket') ); my $home = Menu->child( home => title => loc('Homepage'), path => '/' ); unless ($session{'dashboards_in_menu'}) { my $dashboards_in_menu = $session{CurrentUser}->UserObj->Preferences( 'DashboardsInMenu', {}, ); unless ($dashboards_in_menu->{dashboards}) { my ($default_dashboards) = RT::System->new( $session{'CurrentUser'} ) ->Attributes ->Named('DashboardsInMenu'); if ($default_dashboards) { $dashboards_in_menu = $default_dashboards->Content; } } $session{'dashboards_in_menu'} = $dashboards_in_menu->{dashboards} || []; } my @dashboards; for my $id ( @{$session{'dashboards_in_menu'}} ) { my $dash = RT::Dashboard->new( $session{CurrentUser} ); my ( $status, $msg ) = $dash->LoadById($id); if ( $status ) { push @dashboards, $dash; } else { $RT::Logger->warning( "Failed to load dashboard $id: $msg" ); } } my $dashes = Menu()->child('home'); if (@dashboards) { for my $dash (@dashboards) { $home->child( 'dashboard-' . $dash->id, title => $dash->Name, path => '/Dashboards/' . $dash->id . '/' . $dash->Name ); } } $dashes->child( edit => title => loc('Update This Menu'), path => 'Prefs/DashboardsInMenu.html' ); $dashes->child( more => title => loc('All Dashboards'), path => 'Dashboards/index.html' ); my $dashboard = RT::Dashboard->new( $session{CurrentUser} ); if ( $dashboard->CurrentUserCanCreateAny ) { $dashes->child('dashboard_create' => title => loc('New Dashboard'), path => "/Dashboards/Modify.html?Create=1" ); } my $search = Menu->child( search => title => loc('Search'), path => '/Search/Simple.html' ); my $tickets = $search->child( tickets => title => loc('Tickets'), path => '/Search/Build.html' ); $tickets->child( simple => title => loc('Simple Search'), path => "/Search/Simple.html" ); $tickets->child( new => title => loc('New Search'), path => "/Search/Build.html?NewQuery=1" ); $search->child( articles => title => loc('Articles'), path => "/Articles/Article/Search.html" ) if $session{CurrentUser}->HasRight( Right => 'ShowArticlesMenu', Object => RT->System ); $search->child( users => title => loc('Users'), path => "/User/Search.html" ); if ($session{CurrentUser}->HasRight( Right => 'ShowArticlesMenu', Object => RT->System )) { my $articles = Menu->child( articles => title => loc('Articles'), path => "/Articles/index.html"); $articles->child( articles => title => loc('Overview'), path => "/Articles/index.html" ); $articles->child( topics => title => loc('Topics'), path => "/Articles/Topics.html" ); $articles->child( create => title => loc('Create'), path => "/Articles/Article/PreCreate.html" ); $articles->child( search => title => loc('Search'), path => "/Articles/Article/Search.html" ); } my $tools = Menu->child( tools => title => loc('Tools'), path => '/Tools/index.html' ); $tools->child( my_day => title => loc('My Day'), description => loc('Easy updating of your open tickets'), path => '/Tools/MyDay.html', ); if ( RT->Config->Get('EnableReminders') ) { $tools->child( my_reminders => title => loc('My Reminders'), description => loc('Easy viewing of your reminders'), path => '/Tools/MyReminders.html', ); } if ( $session{'CurrentUser'}->HasRight( Right => 'ShowApprovalsTab', Object => RT->System ) ) { $tools->child( approval => title => loc('Approval'), description => loc('My Approvals'), path => '/Approvals/', ); } if ( $session{'CurrentUser'}->HasRight( Right => 'ShowConfigTab', Object => RT->System ) ) { $build_admin_menu->(Menu()); } my $username = '' . $m->interp->apply_escapes($session{'CurrentUser'}->Name, 'h') . ''; my $about_me = Menu->child( 'preferences' => title => loc('Logged in as [_1]', $username), escape_title => 0, path => '/User/Summary.html?id=' . $session{CurrentUser}->id, sort_order => 99, ); if ( $session{'CurrentUser'}->UserObj && $session{'CurrentUser'}->HasRight( Right => 'ModifySelf', Object => RT->System )) { my $settings = $about_me->child( settings => title => loc('Settings'), path => '/Prefs/Other.html' ); $settings->child( options => title => loc('Preferences'), path => '/Prefs/Other.html' ); $settings->child( about_me => title => loc('About me'), path => '/User/Prefs.html' ); $settings->child( search_options => title => loc('Search options'), path => '/Prefs/SearchOptions.html' ); $settings->child( myrt => title => loc('RT at a glance'), path => '/Prefs/MyRT.html' ); $settings->child( dashboards_in_menu => title => loc('Dashboards in menu'), path => '/Prefs/DashboardsInMenu.html', ); $settings->child( quicksearch => title => loc('Quick search'), path => '/Prefs/Quicksearch.html' ); my $search_menu = $settings->child( 'saved-searches' => title => loc('Saved Searches') ); my $searches = [ $m->comp( "/Search/Elements/SearchesForObject", Object => RT::System->new( $session{'CurrentUser'} )) ]; my $i = 0; for my $search (@$searches) { $search_menu->child( "search-" . $i++ => title => $search->[1], path => "/Prefs/Search.html?" . $query_string->( name => ref( $search->[2] ) . '-' . $search->[2]->Id ), ); } } if ( $session{'CurrentUser'}->Name && ( !RT->Config->Get('WebRemoteUserAuth') || RT->Config->Get('WebFallbackToRTLogin') )) { $about_me->child( logout => title => loc('Logout'), path => '/NoAuth/Logout.html' ); } if ( $request_path =~ m{^/Dashboards/(\d+)?}) { if ( my $id = ( $1 || $DECODED_ARGS->{'id'} ) ) { my $obj = RT::Dashboard->new( $session{'CurrentUser'} ); $obj->LoadById($id); if ( $obj and $obj->id ) { my $tabs = PageMenu; $tabs->child( basics => title => loc('Basics'), path => "/Dashboards/Modify.html?id=" . $obj->id); $tabs->child( content => title => loc('Content'), path => "/Dashboards/Queries.html?id=" . $obj->id); $tabs->child( subscription => title => loc('Subscription'), path => "/Dashboards/Subscription.html?id=" . $obj->id) if $obj->CurrentUserCanSubscribe; $tabs->child( show => title => loc('Show'), path => "/Dashboards/" . $obj->id . "/" . $obj->Name) } } } if ( $request_path =~ m{^/Ticket/} ) { if ( ( $DECODED_ARGS->{'id'} || '' ) =~ /^(\d+)$/ ) { my $id = $1; my $obj = RT::Ticket->new( $session{'CurrentUser'} ); $obj->Load($id); if ( $obj and $obj->id ) { my $actions = PageMenu()->child( actions => title => loc('Actions'), sort_order => 95 ); my $tabs = PageMenu(); $tabs->child( bookmark => raw_html => $m->scomp( '/Ticket/Elements/Bookmark', id => $id ), sort_order => 99 ); $tabs->child( display => title => loc('Display'), path => "/Ticket/Display.html?id=" . $id ); $tabs->child( history => title => loc('History'), path => "/Ticket/History.html?id=" . $id ); my %can = %{ $obj->CurrentUser->PrincipalObj->HasRights( Object => $obj ) }; $can{'_ModifyOwner'} = $obj->CurrentUserCanSetOwner(); my $can = sub { unless ($_[0] eq 'ExecuteCode') { return $can{$_[0]} || $can{'SuperUser'}; } else { return !RT->Config->Get('DisallowExecuteCode') && ( $can{'ExecuteCode'} || $can{'SuperUser'} ); } }; # comment out until we can do it for an individual custom field #if ( $can->('ModifyTicket') || $can->('ModifyCustomField') ) { $tabs->child( basics => title => loc('Basics'), path => "/Ticket/Modify.html?id=" . $id ); #} if ( $can->('ModifyTicket') || $can->('_ModifyOwner') || $can->('Watch') || $can->('WatchAsAdminCc') ) { $tabs->child( people => title => loc('People'), path => "/Ticket/ModifyPeople.html?id=" . $id ); } if ( $can->('ModifyTicket') ) { $tabs->child( dates => title => loc('Dates'), path => "/Ticket/ModifyDates.html?id=" . $id ); $tabs->child( links => title => loc('Links'), path => "/Ticket/ModifyLinks.html?id=" . $id ); } #if ( $can->('ModifyTicket') || $can->('ModifyCustomField') || $can->('_ModifyOwner') ) { $tabs->child( jumbo => title => loc('Jumbo'), path => "/Ticket/ModifyAll.html?id=" . $id ); #} if ( RT->Config->Get('EnableReminders') ) { $tabs->child( reminders => title => loc('Reminders'), path => "/Ticket/Reminders.html?id=" . $id ); } if ( $can->('ModifyTicket') or $can->('ReplyToTicket') ) { $actions->child( reply => title => loc('Reply'), path => "/Ticket/Update.html?Action=Respond;id=" . $id ); } if ( $can->('ModifyTicket') or $can->('CommentOnTicket') ) { $actions->child( comment => title => loc('Comment'), path => "/Ticket/Update.html?Action=Comment;id=" . $id ); } if ( $can->('ForwardMessage') ) { $actions->child( forward => title => loc('Forward'), path => "/Ticket/Forward.html?id=" . $id ); } my $hide_resolve_with_deps = RT->Config->Get('HideResolveActionsWithDependencies') && $obj->HasUnresolvedDependencies; my $current = $obj->Status; my $lifecycle = $obj->LifecycleObj; my $i = 1; foreach my $info ( $lifecycle->Actions($current) ) { my $next = $info->{'to'}; next unless $lifecycle->IsTransition( $current => $next ); my $check = $lifecycle->CheckRight( $current => $next ); next unless $can->($check); next if $hide_resolve_with_deps && $lifecycle->IsInactive($next) && !$lifecycle->IsInactive($current); my $action = $info->{'update'} || ''; my $url = '/Ticket/'; $url .= "Update.html?". $query_string->( $action ? (Action => $action) : (SubmitTicket => 1, Status => $next), DefaultStatus => $next, id => $id, ); my $key = $info->{'label'} || ucfirst($next); $actions->child( $key => title => loc( $key ), path => $url); } my ($can_take, $tmsg) = $obj->CurrentUserCanSetOwner( Type => 'Take' ); my ($can_steal, $smsg) = $obj->CurrentUserCanSetOwner( Type => 'Steal' ); if ( $can_take ){ $actions->child( take => title => loc('Take'), path => "/Ticket/Display.html?Action=Take;id=" . $id ); } elsif ( $can_steal ){ $actions->child( steal => title => loc('Steal'), path => "/Ticket/Display.html?Action=Steal;id=" . $id ); } # TODO needs a "Can extract article into a class applied to this queue" check $actions->child( 'extract-article' => title => loc('Extract Article'), path => "/Articles/Article/ExtractIntoClass.html?Ticket=".$obj->id, ) if $session{CurrentUser}->HasRight( Right => 'ShowArticlesMenu', Object => RT->System ); if ( defined $session{"tickets"} ) { # we have to update session data if we get new ItemMap my $updatesession = 1 unless ( $session{"tickets"}->{'item_map'} ); my $item_map = $session{"tickets"}->ItemMap; if ($updatesession) { $session{"tickets"}->PrepForSerialization(); } my $search = Menu()->child('search')->child('tickets'); # Don't display prev links if we're on the first ticket if ( $item_map->{$id}->{prev} ) { $search->child( first => title => '<< ' . loc('First'), class => "nav", path => "/Ticket/Display.html?id=" . $item_map->{first}); $search->child( prev => title => '< ' . loc('Prev'), class => "nav", path => "/Ticket/Display.html?id=" . $item_map->{$id}->{prev}); } # Don't display next links if we're on the last ticket if ( $item_map->{$id}->{next} ) { $search->child( next => title => loc('Next') . ' >', class => "nav", path => "/Ticket/Display.html?id=" . $item_map->{$id}->{next}); if ( $item_map->{last} ) { $search->child( last => title => loc('Last') . ' >>', class => "nav", path => "/Ticket/Display.html?id=" . $item_map->{last}); } } } } } } if ( ( $request_path =~ m{^/(?:Ticket|Search)/} && $request_path !~ m{^/Search/Simple\.html} ) || ( $request_path =~ m{^/Search/Simple\.html} && $DECODED_ARGS->{'q'} ) ) { my $search = Menu()->child('search')->child('tickets'); my $args = ''; my $has_query = ''; my $current_search = $session{"CurrentSearchHash"} || {}; my $search_id = $DECODED_ARGS->{'SavedSearchLoad'} || $DECODED_ARGS->{'SavedSearchId'} || $current_search->{'SearchId'} || ''; my $chart_id = $DECODED_ARGS->{'SavedChartSearchId'} || $current_search->{SavedChartSearchId}; $has_query = 1 if ( $DECODED_ARGS->{'Query'} or $current_search->{'Query'} ); my %query_args; my %fallback_query_args = ( SavedSearchId => ( $search_id eq 'new' ) ? undef : $search_id, SavedChartSearchId => $chart_id, ( map { my $p = $_; $p => $DECODED_ARGS->{$p} || $current_search->{$p} } qw(Query Format OrderBy Order Page) ), RowsPerPage => ( defined $DECODED_ARGS->{'RowsPerPage'} ? $DECODED_ARGS->{'RowsPerPage'} : $current_search->{'RowsPerPage'} ), ); if ($QueryString) { $args = '?' . $QueryString; } else { my %final_query_args = (); # key => callback to avoid unnecessary work for my $param (keys %fallback_query_args) { $final_query_args{$param} = defined($QueryArgs->{$param}) ? $QueryArgs->{$param} : $fallback_query_args{$param}; } for my $field (qw(Order OrderBy)) { if ( ref( $final_query_args{$field} ) eq 'ARRAY' ) { $final_query_args{$field} = join( "|", @{ $final_query_args{$field} } ); } elsif (not defined $final_query_args{$field}) { delete $final_query_args{$field}; } else { $final_query_args{$field} ||= ''; } } $args = '?' . $query_string->(%final_query_args); } my $current_search_menu; if ( $request_path =~ m{^/Ticket} ) { $current_search_menu = $search->child( current_search => title => loc('Current Search') ); $current_search_menu->path("/Search/Results.html$args") if $has_query; } else { $current_search_menu = PageMenu(); } $current_search_menu->child( edit_search => title => loc('Edit Search'), path => "/Search/Build.html" . ( ($has_query) ? $args : '' ) ); $current_search_menu->child( advanced => title => loc('Advanced'), path => "/Search/Edit.html$args" ); if ($has_query) { $current_search_menu->child( results => title => loc('Show Results'), path => "/Search/Results.html$args" ); } if ( $has_query ) { $current_search_menu->child( bulk => title => loc('Bulk Update'), path => "/Search/Bulk.html$args" ); $current_search_menu->child( chart => title => loc('Chart'), path => "/Search/Chart.html$args" ); my $more = $current_search_menu->child( more => title => loc('Feeds') ); $more->child( spreadsheet => title => loc('Spreadsheet'), path => "/Search/Results.tsv$args" ); my %rss_data = map { $_ => $QueryArgs->{$_} || $fallback_query_args{$_} || '' } qw(Query Order OrderBy); my $RSSQueryString = "?" . $query_string->( Query => $rss_data{Query}, Order => $rss_data{Order}, OrderBy => $rss_data{OrderBy} ); my $RSSPath = join '/', map $m->interp->apply_escapes( $_, 'u' ), $session{'CurrentUser'}->UserObj->Name, $session{'CurrentUser'} ->UserObj->GenerateAuthString( $rss_data{Query} . $rss_data{Order} . $rss_data{OrderBy} ); $more->child( rss => title => loc('RSS'), path => "/NoAuth/rss/$RSSPath/$RSSQueryString"); my $ical_path = join '/', map $m->interp->apply_escapes($_, 'u'), $session{'CurrentUser'}->UserObj->Name, $session{'CurrentUser'}->UserObj->GenerateAuthString( $rss_data{Query} ), $rss_data{Query}; $more->child( ical => title => loc('iCal'), path => '/NoAuth/iCal/'.$ical_path); if ($request_path =~ m{^/Search/Results.html} && #XXX TODO better abstraction $session{'CurrentUser'}->HasRight( Right => 'SuperUser', Object => RT->System )) { my $shred_args = $query_string->( Search => 1, Plugin => 'Tickets', 'Tickets:query' => $rss_data{'Query'}, 'Tickets:limit' => $QueryArgs->{'Rows'}, ); $more->child( shredder => title => loc('Shredder'), path => '/Admin/Tools/Shredder/?' . $shred_args); } } } if ( $request_path =~ m{^/Article/} ) { if ( $DECODED_ARGS->{'id'} && $DECODED_ARGS->{'id'} =~ /^\d+$/ ) { my $id = $DECODED_ARGS->{'id'}; my $tabs = PageMenu(); $tabs->child( display => title => loc('Display'), path => "/Articles/Article/Display.html?id=".$id ); $tabs->child( history => title => loc('History'), path => "/Articles/Article/History.html?id=".$id ); $tabs->child( modify => title => loc('Modify'), path => "/Articles/Article/Edit.html?id=".$id ); $tabs->child( delete => title => loc('Delete'), path => "/Articles/Article/Delete.html?id=".$id ); } } if ( $request_path =~ m{^/Articles/} ) { PageWidgets()->child( article_search => raw_html => $m->scomp('/Articles/Elements/GotoArticle') ); PageWidgets()->delete('create_ticket'); PageWidgets()->delete('simple_search'); my $tabs = PageMenu(); $tabs->child( search => title => loc("Search"), path => "/Articles/Article/Search.html" ); $tabs->child( create => title => loc("New Article" ), path => "/Articles/Article/PreCreate.html" ); if ( $request_path =~ m{^/Articles/Article/} and ( $DECODED_ARGS->{'id'} || '' ) =~ /^(\d+)$/ ) { my $id = $1; my $obj = RT::Article->new( $session{'CurrentUser'} ); $obj->Load($id); if ( $obj and $obj->id ) { $tabs->child( display => title => loc("Display"), path => "/Articles/Article/Display.html?id=" . $id ); $tabs->child( history => title => loc('History'), path => '/Articles/Article/History.html?id=' . $id ); if ( $obj->CurrentUserHasRight('ModifyArticle') ) { $tabs->child(modify => title => loc('Modify'), path => '/Articles/Article/Edit.html?id=' . $id ); } if ( $obj->CurrentUserHasRight('DeleteArticle') ) { $tabs->child(delete => title => loc('Delete'), path => '/Articles/Article/Delete.html?id=' . $id ); } } } } if ( $request_path =~ m{^/User/(Summary|History)\.html} ) { if (PageMenu()->child('summary')) { # Already set up from having AdminUser and ShowConfigTab; # but rename "Basics" to "Edit" in this context PageMenu()->child( 'basics' )->title( loc('Edit') ); } elsif ( $session{'CurrentUser'}->HasRight( Object => $RT::System, Right => 'ShowUserHistory' ) ) { PageMenu()->child( display => title => loc('Summary'), path => '/User/Summary.html?id=' . $DECODED_ARGS->{'id'} ); PageMenu()->child( history => title => loc('History'), path => '/User/History.html?id=' . $DECODED_ARGS->{'id'} ); } } if ( $request_path =~ /^\/(?:index.html|$)/ ) { PageMenu()->child( edit => title => loc('Edit'), path => '/Prefs/MyRT.html' ); } $m->callback( CallbackName => 'Privileged', Path => $request_path ); }; my $build_selfservice_nav = sub { my $queues = RT::Queues->new( $session{'CurrentUser'} ); $queues->UnLimit; my $queue_count = 0; my $queue_id; while ( my $queue = $queues->Next ) { next unless $queue->CurrentUserHasRight('CreateTicket'); $queue_id = $queue->id; $queue_count++; last if ( $queue_count > 1 ); } if ( $queue_count > 1 ) { Menu->child( new => title => loc('New ticket'), path => '/SelfService/CreateTicketInQueue.html' ); } elsif ( $queue_id ) { Menu->child( new => title => loc('New ticket'), path => '/SelfService/Create.html?Queue=' . $queue_id ); } my $tickets = Menu->child( tickets => title => loc('Tickets'), path => '/SelfService/' ); $tickets->child( open => title => loc('Open tickets'), path => '/SelfService/' ); $tickets->child( closed => title => loc('Closed tickets'), path => '/SelfService/Closed.html' ); my $username = '' . $m->interp->apply_escapes($session{'CurrentUser'}->Name, 'h') . ''; my $about_me = Menu->child( preferences => title => loc('Logged in as [_1]', $username), escape_title => 0, sort_order => 99, ); if ( $session{'CurrentUser'}->HasRight( Right => 'ModifySelf', Object => RT->System ) ) { $about_me->child( prefs => title => loc('Preferences'), path => '/SelfService/Prefs.html' ); } if ( $session{'CurrentUser'}->Name && ( !RT->Config->Get('WebRemoteUserAuth') || RT->Config->Get('WebFallbackToRTLogin') )) { $about_me->child( logout => title => loc('Logout'), path => '/NoAuth/Logout.html' ); } if ($session{'CurrentUser'}->HasRight( Right => 'ShowArticle', Object => RT->System )) { PageWidgets->child( 'goto-article' => raw_html => $m->scomp('/SelfService/Elements/SearchArticle') ); } PageWidgets->child( goto => raw_html => $m->scomp('/SelfService/Elements/GotoTicket') ); $m->callback( CallbackName => 'SelfService', Path => $request_path ); }; if ( $request_path !~ m{^/SelfService/} ) { $build_main_nav->(); } else { $build_selfservice_nav->(); } <%ARGS> $show_menu => 1 $QueryString => '' $QueryArgs => {} rt-4.2.12/share/html/Elements/TicketList000644 000765 000024 00000004775 12555754775 020544 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> RT->Deprecated( Remove => "4.4", Instead => "/Elements/CollectionList", ); $m->comp( '/Elements/CollectionList', %ARGS, Class => 'RT::Tickets' ); <%ARGS> $Collection => undef $Query => undef $Format => RT->Config->Get('DefaultSearchResultFormat') $DisplayFormat => undef $Order => undef $OrderBy => undef $Rows => 50 $Page => 1 $Title => loc('Ticket Search') $BaseURL => undef $AllowSorting => undef $ShowNavigation => 1 $ShowHeader => 1 $ShowEmpty => 0 rt-4.2.12/share/html/Elements/TitleBox000644 000765 000024 00000004210 12555754775 020177 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> # For compatibility with 3.4 RT->Deprecated( Remove => 4.4, Instead => "/Widgets/TitleBox" ); $m->comp('/Widgets/TitleBox', %ARGS ); rt-4.2.12/share/html/Elements/TitleBoxEnd000644 000765 000024 00000004216 12555754775 020634 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> # For compatibility with 3.4 RT->Deprecated( Remove => 4.4, Instead => "/Widgets/TitleBoxEnd" ); $m->comp('/Widgets/TitleBoxEnd', %ARGS ); rt-4.2.12/share/html/Elements/TitleBoxStart000644 000765 000024 00000004222 12555754775 021220 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> # For compatibility with 3.4 RT->Deprecated( Remove => 4.4, Instead => "/Widgets/TitleBoxStart" ); $m->comp('/Widgets/TitleBoxStart', %ARGS ); rt-4.2.12/share/html/Elements/TSVExport000644 000765 000024 00000010134 12555754775 020325 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Class => undef $Collection $Format $PreserveNewLines => 0 <%ONCE> my $no_html = HTML::Scrubber->new( deny => '*' ); <%INIT> require HTML::Entities; $Class ||= $Collection->ColumnMapClassName; $r->content_type('application/vnd.ms-excel'); my $DisplayFormat = $m->comp('/Elements/ScrubHTML', Content => $Format); my @Format = $m->comp('/Elements/CollectionAsTable/ParseFormat', Format => $DisplayFormat); my @columns; my $should_loc = { map { $_ => 1 } qw(Status) }; my $col_entry = sub { my $col = shift; # in tsv output, "#" is often a comment character but we use it for "id" delete $col->{title} if $col->{title} and $col->{title} =~ /^\s*#\s*$/; return { header => loc($col->{title} || $col->{attribute}), map => $m->comp( "/Elements/ColumnMap", Name => $col->{attribute}, Attr => 'value', Class => $Class, ), should_loc => $should_loc->{$col->{attribute}}, } }; if ($PreserveNewLines) { my $col = []; push @columns, $col; for (@Format) { if ($_->{title} eq 'NEWLINE') { $col = []; push @columns, $col; } else { push @$col, $col_entry->($_); } } } else { push @columns, [map { $_->{attribute} ? $col_entry->($_) : () } @Format]; } for (@columns) { $m->out(join("\t", map { $_->{header} } @$_)."\n"); } my $i = 0; my $ii = 0; while (my $row = $Collection->Next) { for my $col (@columns) { $m->out(join("\t", map { my $val = ProcessColumnMapValue($_->{map}, Arguments => [$row, $ii++], Escape => 0); $val = loc($val) if $_->{should_loc}; # remove tabs from all field values, they screw up the tsv $val = '' unless defined $val; $val =~ s/(?:\n|\r)+/ /g; $val =~ s{\t}{ }g; $val = $no_html->scrub($val); $val = HTML::Entities::decode_entities($val); $val; } @$col)."\n"); } $m->flush_buffer unless ++$i % 10; } $m->abort(); rt-4.2.12/share/html/Elements/ValidateCustomFields000644 000765 000024 00000010724 12555754775 022527 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my ($valid, @res) = (1, ()); $CustomFields->GotoFirstItem; my $CFArgs = _ParseObjectCustomFieldArgs( $ARGSRef )->{ref($Object)}{$Object->Id || 0} || {}; while ( my $CF = $CustomFields->Next ) { my $submitted = $CFArgs->{$CF->Id}; # Pick the first grouping $submitted = $submitted ? $submitted->{(keys %$submitted)[0]} : {}; # If we don't have a value and we don't see the Magic, then we're not # submitting a field. next if not $ValidateUnsubmitted and not exists $submitted->{"Value"} and not exists $submitted->{"Upload"} and not exists $submitted->{"Values"} and not $submitted->{"Values-Magic"}; # We only validate Single Combos -- multis can never be user input next if $submitted->{"Values-Magic"} and exists $submitted->{"Values"} and ref $submitted->{"Values"}; $m->notes(('Field-' . $CF->Id) => $submitted->{Values} // $submitted->{Value}); my @values = _NormalizeObjectCustomFieldValue( CustomField => $CF, Value => ($submitted->{Values} // $submitted->{Value} // $submitted->{Upload}), ); if ($CF->Type =~ /^Date(?:Time)?$/) { if (not @values) { my $values = $Object->CustomFieldValues($CF->Id); while (my $ocfv = $values->Next) { push @values, $ocfv->Content; } } @values = grep { my $DateObj = RT::Date->new ( $session{'CurrentUser'} ); $DateObj->Set( Format => 'unknown', Value => $_, ($CF->Type eq "Date" ? (Timezone => 'utc') : ()) ); $DateObj->IsSet } @values; } push @values, '' unless @values; for my $value( @values ) { if ($value) { my $ref = { Content => $value }; my ($ok, $msg) = $CF->_CanonicalizeValue( $ref ); unless ($ok) { $m->notes( ( 'InvalidField-' . $CF->Id ) => $msg ); push @res, $CF->Name .': '. $msg; $valid = 0; } } next if $CF->MatchPattern($value); my $msg = loc("Input must match [_1]", $CF->FriendlyPattern); $m->notes( ('InvalidField-' . $CF->Id) => $msg ); push @res, $CF->Name .': '. $msg; $valid = 0; } } $m->notes('ValidFields', $valid); return wantarray? ($valid, @res): $valid; <%ARGS> $Object => RT::Ticket->new( $session{'CurrentUser'}) $CustomFields $ARGSRef $ValidateUnsubmitted => 0 rt-4.2.12/share/html/Elements/WidgetBar000644 000765 000024 00000004252 12555754775 020323 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % return unless ($menu); % for my $child ($menu->children) { % if (defined $child->raw_html) { <% $child->raw_html |n %> % } else { <% $child->title %>\ % } % } <%ARGS> $menu rt-4.2.12/share/html/Elements/RT__User/ColumnMap000644 000765 000024 00000012233 12555754775 022026 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name $Attr => undef $GenericMap => {} <%ONCE> my $COLUMN_MAP = { Name => { title => 'Name', # loc attribute => 'Name', value => sub { return $_[0]->Name() }, }, RealName => { title => 'Real Name', # loc attribute => 'RealName', value => sub { return $_[0]->RealName() }, }, NickName => { title => 'Nickname', # loc attribute => 'NickName', value => sub { return $_[0]->NickName() }, }, EmailAddress => { title => 'Email Address', # loc attribute => 'EmailAddress', value => sub { return $_[0]->EmailAddress() }, }, Organization => { title => 'Organization', # loc attribute => 'Organization', value => sub { return $_[0]->Organization() }, }, HomePhone => { title => 'Home Phone', # loc attribute => 'HomePhone', value => sub { return $_[0]->HomePhone() }, }, WorkPhone => { title => 'Work Phone', # loc attribute => 'WorkPhone', value => sub { return $_[0]->WorkPhone() }, }, MobilePhone => { title => 'Mobile Phone', # loc attribute => 'MobilePhone', value => sub { return $_[0]->MobilePhone() }, }, PagerPhone => { title => 'Pager Phone', # loc attribute => 'PagerPhone', value => sub { return $_[0]->PagerPhone() }, }, Address1 => { title => 'Address', # loc attribute => 'Address1', value => sub { return $_[0]->Address1() }, }, Address2 => { title => 'Address 2', # loc attribute => 'Address2', value => sub { return $_[0]->Address2() }, }, City => { title => 'City', # loc attribute => 'City', value => sub { return $_[0]->City() }, }, State => { title => 'State', # loc attribute => 'State', value => sub { return $_[0]->State() }, }, Zip => { title => 'Zip', # loc attribute => 'Zip', value => sub { return $_[0]->Zip() }, }, Country => { title => 'Country', # loc attribute => 'Country', value => sub { return $_[0]->Country() }, }, Gecos => { title => 'Unix login', #loc attribute => 'Gecos', value => sub { return $_[0]->Gecos() }, }, Lang => { title => 'Language', #loc attribute => 'Lang', value => sub { return $_[0]->Lang() }, }, FreeformContactInfo => { title => 'Extra Info', #loc attribute => 'FreeformContactInfo', value => sub { return $_[0]->FreeformContactInfo() }, }, Disabled => { title => 'Status', # loc value => sub { return $_[0]->Disabled? $_[0]->loc('Disabled'): $_[0]->loc('Enabled') }, }, }; <%INIT> $m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 ); return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr ); rt-4.2.12/share/html/Elements/RT__Ticket/ColumnMap000644 000765 000024 00000026422 12555754775 022340 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => undef $Attr => undef $GenericMap => {} <%ONCE> my $COLUMN_MAP; my $LinkCallback = sub { my $method = shift; my $mode = $RT::Link::TYPEMAP{$method}{Mode}; my $type = $RT::Link::TYPEMAP{$method}{Type}; my $other_mode = ($mode eq "Target" ? "Base" : "Target"); my $mode_uri = $mode.'URI'; return sub { my $ObjectType = $_[2]||''; map { \'', ( $_->$mode_uri->AsString ), \'
    ', } # if someone says __RefersTo.{Ticket}__ filter for only local links that are tickets grep { $ObjectType ? ( $_->$mode_uri->IsLocal && ( $_->$mode_uri->Object->RecordType eq $ObjectType )) : 1 } @{ $_[0]->Links($other_mode,$type)->ItemsArrayRef } } }; my $trustSub = sub { my $user = shift; my %key = RT::Crypt->GetKeyInfo( Key => $user->EmailAddress ); if (!defined $key{'info'}) { return $m->interp->apply_escapes(' ' . loc("(no pubkey!)"), "h"); } elsif ($key{'info'}{'TrustLevel'} == 0) { return $m->interp->apply_escapes(' ' . loc("(untrusted!)"), "h"); } }; $COLUMN_MAP = { Queue => { attribute => 'Queue', title => 'Queue id', # loc value => sub { return $_[0]->Queue } }, QueueName => { attribute => 'Queue', title => 'Queue', # loc value => sub { return $_[0]->QueueObj->Name } }, OwnerName => { title => 'Owner', # loc attribute => 'Owner', value => sub { return $_[0]->OwnerObj->Name } }, Status => { title => 'Status', # loc attribute => 'Status', value => sub { return loc($_[0]->Status) } }, Subject => { title => 'Subject', # loc attribute => 'Subject', value => sub { return $_[0]->Subject || "(" . loc('No subject') . ")" } }, ExtendedStatus => { title => 'Status', # loc attribute => 'Status', value => sub { my $Ticket = shift; if ( my $count = $Ticket->HasUnresolvedDependencies ) { if ( $Ticket->HasUnresolvedDependencies( Type => 'approval' ) or $Ticket->HasUnresolvedDependencies( Type => 'code' ) ) { return \'', loc('(pending approval)'), \''; } else { my $Query = "DependedOnBy = " . $Ticket->id; $Query .= " AND (" . join(" OR ", map { "Status = '$_'" } RT::Queue->ActiveStatusArray) . ")"; my $SearchURL = RT->Config->Get('WebPath') . '/Search/Results.html?' . $m->comp('/Elements/QueryString', Query => $Query); return \'', loc('(pending [quant,_1,other ticket,other tickets])',$count), \''; } } else { return loc( $Ticket->Status ); } } }, Priority => { title => 'Priority', # loc attribute => 'Priority', value => sub { return $_[0]->Priority } }, InitialPriority => { title => 'InitialPriority', # loc attribute => 'InitialPriority', name => 'Initial Priority', value => sub { return $_[0]->InitialPriority } }, FinalPriority => { title => 'FinalPriority', # loc attribute => 'FinalPriority', name => 'Final Priority', value => sub { return $_[0]->FinalPriority } }, EffectiveId => { title => 'EffectiveId', # loc attribute => 'EffectiveId', value => sub { return $_[0]->EffectiveId } }, Type => { title => 'Type', # loc attribute => 'Type', value => sub { return $_[0]->Type } }, TimeWorked => { attribute => 'TimeWorked', title => 'Time Worked', # loc value => sub { return $_[0]->TimeWorked } }, TimeLeft => { attribute => 'TimeLeft', title => 'Time Left', # loc value => sub { return $_[0]->TimeLeftAsString } }, TimeEstimated => { attribute => 'TimeEstimated', title => 'Time Estimated', # loc value => sub { return $_[0]->TimeEstimated } }, StartsRelative => { title => 'Starts', # loc attribute => 'Starts', value => sub { return $_[0]->StartsObj->AgeAsString } }, StartedRelative => { title => 'Started', # loc attribute => 'Started', value => sub { return $_[0]->StartedObj->AgeAsString } }, ToldRelative => { title => 'Told', # loc attribute => 'Told', value => sub { return $_[0]->ToldObj->AgeAsString } }, DueRelative => { title => 'Due', # loc attribute => 'Due', value => sub { my $date = $_[0]->DueObj; # Highlight the date if it was due in the past, and it's still active if ( $date && $date->IsSet && $date->Diff < 0 && $_[0]->QueueObj->IsActiveStatus($_[0]->Status)) { return (\'' , $date->AgeAsString , \''); } else { return $date->AgeAsString; } } }, ResolvedRelative => { title => 'Resolved', # loc attribute => 'Resolved', value => sub { return $_[0]->ResolvedObj->AgeAsString } }, Starts => { title => 'Starts', # loc attribute => 'Starts', value => sub { return $_[0]->StartsObj->AsString } }, Started => { title => 'Started', # loc attribute => 'Started', value => sub { return $_[0]->StartedObj->AsString } }, Told => { title => 'Told', # loc attribute => 'Told', value => sub { return $_[0]->ToldObj->AsString } }, Due => { title => 'Due', # loc attribute => 'Due', value => sub { my $date = $_[0]->DueObj; # Highlight the date if it was due in the past, and it's still active if ( $date && $date->IsSet && $date->Diff < 0 && $_[0]->QueueObj->IsActiveStatus($_[0]->Status)) { return (\'' , $date->AsString , \''); } else { return $date->AsString; } } }, Resolved => { title => 'Resolved', # loc attribute => 'Resolved', value => sub { return $_[0]->ResolvedObj->AsString } }, UpdateStatus => { title => 'New messages', # loc value => sub { my $txn = $_[0]->SeenUpTo or return $_[0]->loc('No'); return \(''), $_[0]->loc('New'), \''; }, }, KeyRequestors => { title => 'Requestors', # loc attribute => 'Requestor.EmailAddress', value => sub { return \($m->scomp("/Elements/ShowPrincipal", Object => $_[0]->Requestor, PostUser => $trustSub ) ) } }, KeyOwnerName => { title => 'Owner', # loc attribute => 'Owner', value => sub { my $t = shift; my $name = $t->OwnerObj->Name; my %key = RT::Crypt->GetKeyInfo( Key => $t->OwnerObj->EmailAddress ); if (!defined $key{'info'}) { $name .= ' '. loc("(no pubkey!)"); } elsif ($key{'info'}{'TrustLevel'} == 0) { $name .= ' '. loc("(untrusted!)"); } return $name; } }, KeyOwner => { title => 'Owner', # loc attribute => 'Owner', value => sub { return \($m->scomp("/Elements/ShowPrincipal", Object => $_[0]->OwnerObj, PostUser => $trustSub ) ) } }, # Everything from LINKTYPEMAP (map { $_ => { value => $LinkCallback->( $_ ) } } keys %RT::Link::TYPEMAP), '_CLASS' => { value => sub { return $_[1] % 2 ? 'oddline' : 'evenline' } }, '_CHECKBOX' => { attribute => 'checkbox', title => 'Update', # loc align => 'right', value => sub { return \('') } }, Bookmark => { title => ' ', value => sub { my $bookmark = $m->scomp( '/Ticket/Elements/Bookmark', id => $_[0]->id ); # the CollectionAsTable/Row template replaces newlines with
    $bookmark =~ s/\n//g; return \$bookmark; }, }, }; <%init> # if no encryption support, then KeyOwnerName and KeyRequestors fall back to the regular # versions unless (RT->Config->Get('Crypt')->{'Enable'}) { $COLUMN_MAP->{KeyOwnerName} = $COLUMN_MAP->{OwnerName}; $COLUMN_MAP->{KeyRequestors} = $GenericMap->{Requestors}; } $m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'Once', CallbackOnce => 1 ); return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr ); rt-4.2.12/share/html/Elements/RT__Template/ColumnMap000644 000765 000024 00000007045 12555754775 022670 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name $Attr => undef $GenericMap => {} <%ONCE> my $COLUMN_MAP = { Name => { title => 'Name', # loc attribute => 'Name', value => sub { return $_[0]->Name() }, }, Description => { title => 'Description', # loc attribute => 'Description', value => sub { return $_[0]->Description() }, }, Queue => { title => 'Queue', # loc value => sub { return $_[0]->QueueObj->Name if $_[0]->Queue; return $_[0]->loc('Global'); }, }, QueueId => { title => 'Queue', # loc value => sub { $_[0]->Queue }, }, IsEmpty => { title => 'Empty', # loc value => sub { $_[0]->IsEmpty? $_[0]->loc('Yes') : $_[0]->loc('No') }, }, UsedBy => { title => 'Used by scrips', # loc value => sub { my @res; my $scrips = $_[0]->UsedBy; while ( my $scrip = $scrips->Next ) { push @res, ', ' if @res; push @res, \'', $scrip->id, \''; } return @res; }, }, }; <%INIT> $m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 ); return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr ); rt-4.2.12/share/html/Elements/RT__Scrip/ColumnMap000644 000765 000024 00000014754 12555754775 022202 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name $Attr => undef $GenericMap => {} <%ONCE> my $COLUMN_MAP = { Queue => { title => 'Queue', # loc value => sub { return $_[0]->loc('Global') if $_[0]->IsGlobal; return join(", ", map {$_->Name} @{$_[0]->AddedTo->ItemsArrayRef}); }, }, QueueId => { title => 'Queue', # loc value => sub { return 0 if $_[0]->IsGlobal; return join(", ", map {$_->Id} @{$_[0]->AddedTo->ItemsArrayRef}); }, }, From => { title => 'Queue', value => sub { my $request_path = $HTML::Mason::Commands::r->path_info; my $queue_id = $m->request_args->{'id'}; if ( $request_path =~ m{/Admin/Queues/Scrips\.html} and $queue_id ) { return '&From=' . $queue_id; } elsif ( $request_path =~ m{/Admin/Global/Scrips\.html} ) { return '&From=Global'; } else { return q{}; } }, }, Condition => { title => 'Condition', # loc value => sub { return $_[0]->loc( $_[0]->ScripConditionObj->Name ) }, }, Action => { title => 'Action', # loc value => sub { return $_[0]->loc( $_[0]->ScripActionObj->Name ) }, }, Template => { title => 'Template', # loc value => sub { return $_[0]->loc( $_[0]->Template ) }, }, AutoDescription => { title => 'Condition, Action and Template', # loc value => sub { return $_[0]->loc( "[_1] [_2] with template [_3]", $_[0]->loc($_[0]->ConditionObj->Name), $_[0]->loc($_[0]->ActionObj->Name), $_[0]->loc($_[0]->Template), ) }, }, Description => { title => 'Description', # loc attribute => 'Description', value => sub { return $_[0]->Description() }, }, Disabled => { title => 'Status', # loc attribute => 'Disabled', value => sub { return $_[0]->Disabled? $_[0]->loc('Disabled'): $_[0]->loc('Enabled') }, }, RemoveCheckBox => { title => sub { my $name = 'RemoveScrip'; my $checked = $m->request_args->{ $name .'All' }? 'checked="checked"': ''; return \qq{}; }, value => sub { my $id = $_[0]->id; return '' if $_[0]->IsGlobal; my $name = 'RemoveScrip'; my $arg = $m->request_args->{ $name }; my $checked = ''; if ( $arg && ref $arg ) { $checked = 'checked="checked"' if grep $_ == $id, @$arg; } elsif ( $arg ) { $checked = 'checked="checked"' if $arg == $id; } return \qq{} }, }, Move => { title => 'Move', # loc value => sub { my $id = $_[0]->id; my $context = $_[2] || 0; return '' unless $_[0]->IsAdded( $context ); my $name = 'MoveScrip'; my $args = $m->caller_args( 1 ); my @pass = ref $args->{'PassArguments'} ? @{$args->{'PassArguments'}} : ($args->{'PassArguments'}); my %pass = map { $_ => $args->{$_} } grep exists $args->{$_}, @pass; my $uri = RT->Config->Get('WebPath') . $m->request_path; my @res = ( \' $id ), \'">', loc('[Up]'), \'', \' $id ), \'">', loc('[Down]'), \'' ); return @res; }, }, Stage => { title => 'Stage', # loc value => sub { my $os = RT::ObjectScrip->new( $_[0]->CurrentUser ); my $id = $_[0]->IsGlobal ? 0 : $_[-1]; $os->LoadByCols( Scrip => $_[0]->id, ObjectId => $id ); return $_[0]->loc( $os->FriendlyStage ); }, }, }; <%INIT> $m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 ); return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr ); rt-4.2.12/share/html/Elements/RT__SavedSearch/ColumnMap000644 000765 000024 00000005760 12555754775 023307 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name $Attr => undef $GenericMap => {} <%ONCE> my $COLUMN_MAP = { Name => { title => 'Name', # loc attribute => 'Name', value => sub { return $_[0]->Name()||loc("Unnamed search") }, }, Query => { title => 'Query', # loc attribute => 'Query', value => sub { return $_[0]->GetParameter('Query') }, }, ResultsURL => { title => '', attribute => 'ResultsURL', value => sub { my $search = shift; return $m->comp('/Elements/QueryString', map { $_ => $search->GetParameter($_) } qw(Query Format Rows Order OrderBy)); }, } }; <%INIT> $m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 ); return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr ); rt-4.2.12/share/html/Elements/RT__Queue/ColumnMap000644 000765 000024 00000007723 12555754775 022204 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => undef $Attr => undef $GenericMap => {} <%ONCE> my $COLUMN_MAP = { Disabled => { title => 'Status', # loc attribute => 'Disabled', value => sub { return $_[0]->Disabled? $_[0]->loc('Disabled'): $_[0]->loc('Enabled') }, }, Priority => { title => 'Priority', # loc value => sub { return $_[0]->InitialPriority .'-'. $_[0]->FinalPriority }, }, Address => { title => 'Address', # loc value => sub { return ($_[0]->CorrespondAddress||'-') .'/'. ($_[0]->CommentAddress||'-') }, }, # SubjectTag is special as we can not sort SubjectTag => { title => 'SubjectTag', # loc attribute => 'SubjectTag', value => sub { return $_[0]->SubjectTag }, }, Sign => { title => 'Sign', # loc value => sub { return $_[0]->Sign? $_[0]->loc('yes') : $_[0]->loc('no') }, }, Encrypt => { title => 'Encrypt', # loc value => sub { return $_[0]->Encrypt? $_[0]->loc('yes') : $_[0]->loc('no') }, }, Lifecycle => { title => 'Lifecycle', attribute => 'Lifecycle', value => sub { return $_[0]->Lifecycle }, }, ScripStage => { title => 'Stage', # loc value => sub { my $os = RT::ObjectScrip->new( $_[0]->CurrentUser ); $os->LoadByCols( Scrip => $_[-1], ObjectId => $_[0]->id ); return $_[0]->loc( $os->FriendlyStage ); }, }, }; foreach my $field (qw( Name Description CorrespondAddress CommentAddress InitialPriority FinalPriority DefaultDueIn )) { $COLUMN_MAP->{$field} = { title => $field, attribute => $field, value => sub { return $_[0]->$field() }, }, } <%INIT> $m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 ); return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr ); rt-4.2.12/share/html/Elements/RT__Group/ColumnMap000644 000765 000024 00000006440 12555754775 022207 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name $Attr => undef $GenericMap => {} <%ONCE> my $COLUMN_MAP = { HasMember => { title => 'Member', # loc value => sub { my $group = $_[0]; my $uid = $_[2] || return ''; return $group->HasMember( $uid )? $_[0]->loc('yes'): $_[0]->loc('no'); }, }, HasMemberRecursively => { title => 'Recursive member', # loc value => sub { my $group = $_[0]; my $uid = $_[2] || return ''; return $group->HasMemberRecursively( $uid )? $_[0]->loc('yes'): $_[0]->loc('no'); }, }, Name => { title => 'Name', # loc attribute => 'Name', value => sub { return $_[0]->Name() }, }, Description => { title => 'Description', # loc attribute => 'Description', value => sub { return $_[0]->Description() }, }, Disabled => { title => 'Status', # loc value => sub { return $_[0]->Disabled? $_[0]->loc('Disabled'): $_[0]->loc('Enabled') }, }, }; <%INIT> $m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 ); return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr ); rt-4.2.12/share/html/Elements/RT__Dashboard/ColumnMap000644 000765 000024 00000011227 12555754775 023001 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name $Attr => undef $GenericMap => {} <%ONCE> my $COLUMN_MAP = { Name => { title => 'Name', # loc attribute => 'Name', value => sub { return $_[0]->Name()||loc("Unnamed dashboard") }, }, Subscription => { title => 'Subscription', # loc attribute => 'Subscription', value => sub { my $Dashboard = shift; my $Subscription = $Dashboard->Subscription; my $url = sprintf '%s/Dashboards/Subscription.html?id=%d', RT->Config->Get('WebPath'), $Dashboard->Id; my $frequency = loc("None"); if (defined $Subscription) { my $freq = $Subscription->SubValue('Frequency'); my $hour = $Subscription->SubValue('Hour'); if (my ($integer_hour) = $hour =~ /^(\d\d):00$/) { my $formatter = RT::Date->new($session{CurrentUser})->LocaleObj; my $dt = DateTime->now; $dt->set_minute(0); $dt->set_second(0); $dt->set_hour($integer_hour); # use the formatted hour instead $hour = $dt->format_cldr($formatter->time_format_short); } if ($freq eq 'weekly') { my $day = $Subscription->SubValue('Dow'); $frequency = loc("weekly (on [_1]) at [_2]", loc($day), $hour); } elsif ($freq eq 'monthly') { $frequency = loc("monthly (day [_1]) at [_2]", $Subscription->SubValue('Dom'), $hour); } elsif ($freq eq 'daily') { $frequency = loc("daily at [_1]", $hour); } elsif ($freq eq 'm-f') { $frequency = loc("M-F at [_1]", $hour); } elsif ($freq eq 'never') { $frequency = loc("Never"); } else { $frequency = loc($freq); } } return \'', $frequency, \''; }, }, ShowURL => { title => '', attribute => 'ShowURL', value => sub { my $dashboard = shift; my $id = $dashboard->Id; my $name = $dashboard->Name; return "Dashboards/$id/$name"; }, } }; <%INIT> $m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 ); return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr ); rt-4.2.12/share/html/Elements/RT__CustomField/ColumnMap000644 000765 000024 00000014004 12555754775 023324 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => undef $Attr => undef $GenericMap => {} <%ONCE> my $COLUMN_MAP = { Disabled => { title => 'Status', # loc attribute => 'Disabled', value => sub { return $_[0]->Disabled? $_[0]->loc('Disabled'): $_[0]->loc('Enabled') }, }, map( { my $c = $_; $c => { title => $c, attribute => $c, value => sub { return $_[0]->$c() }, } } qw(Name Description Type LookupType Pattern) ), map( { my $c = $_; my $short = $c; $short =~ s/^Friendly//; $c => { title => $short, attribute => $short, value => sub { return $_[0]->$c() }, } } qw(FriendlyLookupType FriendlyType FriendlyPattern) ), MaxValues => { title => 'MaxValues', # loc attribute => 'MaxValues', value => sub { my $v = $_[0]->MaxValues; return !$v ? $_[0]->loc('unlimited') : $v == 0 ? $_[0]->loc('one') : $v; }, }, AddedTo => { title => 'Added', # loc value => sub { if ( $_[0]->IsGlobal ) { return $_[0]->loc('Global'); } my $collection = $_[0]->AddedTo; return '' unless $collection; $collection->RowsPerPage(10); my $found = 0; my $res = ''; while ( my $record = $collection->Next ) { $res .= ', ' if $res; my $id = ''; $id = $record->Name if $record->_Accessible('Name','read'); $id ||= "#". $record->id; $res .= $id; $found++; } $res .= ', ...' if $found >= 10; return $res; }, }, RemoveCheckBox => { title => sub { my $name = 'RemoveCustomField'; my $checked = $DECODED_ARGS->{ $name .'All' }? 'checked="checked"': ''; return \qq{}; }, value => sub { my $id = $_[0]->id; return '' if $_[0]->IsGlobal; my $name = 'RemoveCustomField'; my $arg = $DECODED_ARGS->{ $name }; my $checked = ''; if ( $arg && ref $arg ) { $checked = 'checked="checked"' if grep $_ == $id, @$arg; } elsif ( $arg ) { $checked = 'checked="checked"' if $arg == $id; } return \qq{} }, }, MoveCF => { title => 'Move', value => sub { my $id = $_[0]->id; my $context = $_[2] || 0; return '' unless $_[0]->IsAdded( $context ); my $name = 'MoveCustomField'; my $args = $m->caller_args( 1 ); my @pass = ref $args->{'PassArguments'} ? @{$args->{'PassArguments'}} : ($args->{'PassArguments'}); my %pass = map { $_ => $args->{$_} } grep exists $args->{$_}, @pass; my $uri = RT->Config->Get('WebPath') . $m->request_path; my @res = ( \' $id ), \'">', loc('~[Up~]'), \'', \' $id ), \'">', loc('~[Down~]'), \'' ); return @res; }, }, }; $COLUMN_MAP->{'AppliedTo'} = $COLUMN_MAP->{'AddedTo'}; <%INIT> $m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 ); return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr ); rt-4.2.12/share/html/Elements/RT__Class/ColumnMap000644 000765 000024 00000005434 12555754775 022162 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name $Attr => undef $GenericMap => {} <%ONCE> my $COLUMN_MAP = { Name => { title => 'Name', # loc attribute => 'Name', value => sub { return $_[0]->Name() }, }, Description => { title => 'Description', # loc attribute => 'Description', value => sub { return $_[0]->Description() }, }, Disabled => { title => 'Status', # loc attribute => 'Disabled', value => sub { return $_[0]->Disabled? $_[0]->loc('Disabled'): $_[0]->loc('Enabled') }, }, }; <%INIT> $m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 ); return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr ); rt-4.2.12/share/html/Elements/RT__Article/ColumnMap000644 000765 000024 00000006532 12555754775 022500 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => undef $Attr => undef $GenericMap => {} <%ONCE> my $COLUMN_MAP; $COLUMN_MAP = { Name => { attribute => 'Name', title => 'Name', # loc value => sub { $_[0]->Name }, }, Summary => { attribute => 'Summary', title => 'Summary', # loc value => sub { $_[0]->Summary }, }, Class => { attribute => 'Class', title => 'Class id', # loc value => sub { $_[0]->Class }, }, ClassName => { attribute => 'Class', title => 'Class', # loc value => sub { $_[0]->ClassObj->Name }, }, Topics => { title => 'Topics', # loc value => sub { my $topics = ''; my $Topics = $_[0]->Topics; while ( my $t = $Topics->Next ) { $topics .= $m->scomp( '/Articles/Elements/ShowTopic', topic => $t->TopicObj ) . '
    '; } return \$topics; }, } }; <%init> $m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'Once', CallbackOnce => 1 ); return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr ); rt-4.2.12/share/html/Elements/Crypt/KeyIssues000644 000765 000024 00000007504 12555754775 021503 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ( @$Issues || @$SignAddresses ) {
    <&| /Widgets/TitleBox, title => loc('[_1] issues', RT->Config->Get('Crypt')->{'Outgoing'}) &> % if ( @$SignAddresses ) { <% loc("The system is unable to sign outgoing email messages. This usually indicates that the passphrase was mis-set, or that GPG Agent is down. Please alert your system administrator immediately. The problem addresses are:") %>
      % for my $address (@$SignAddresses) {
    • <% $address %>
    • % }
    % } % if (@$Issues == 1) { <% loc("You are going to encrypt outgoing email messages, but there is a problem with a recipient's public key/certificate. You have to fix the problem with the key/certificate, disable sending a message to that recipient, or disable encryption.") %> % } elsif (@$Issues > 1) { <% loc("You are going to encrypt outgoing email messages, but there are problems with recipients' public keys/certificates. You have to fix the problems with the keys/certificates, disable sending a message to the recipients with problems, or disable encryption.") %> % }
      % foreach my $issue ( @$Issues ) {
    • % if ( $issue->{'User'} ) { User <&/Elements/ShowUser, User => $issue->{'User'} &> has a problem. % } else { There is a problem with key/certificate(s) for address <% $issue->{'EmailAddress'} %>, but there is no user in the DB for this address. % } <% $issue->{'Message'} %>
      Select a key/certificate you want to use for encryption: <& /Elements/Crypt/SelectKeyForEncryption, Name => 'UseKey-'. $issue->{'EmailAddress'}, EmailAddress => $issue->{'EmailAddress'}, Default => ( $issue->{'User'}? $issue->{'User'}->PreferredKey : undef ), &>
    • % }
    % } <%ARGS> $Issues => [] $SignAddresses => [] rt-4.2.12/share/html/Elements/Crypt/SelectKeyForEncryption000644 000765 000024 00000005374 12555754775 024174 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if (!@keys) { <% loc("No usable keys.") %> % } else { % } <%INIT> my $d; my %res = RT::Crypt->GetKeysForEncryption($EmailAddress); # move the preferred key to the top of the list my @keys = map { $_->{'Fingerprint'} eq ( $Default || '' ) ? do { $d = $_; () } : $_ } @{ $res{'info'} }; @keys = sort { $b->{'TrustLevel'} <=> $a->{'TrustLevel'} } @keys; unshift @keys, $d if defined $d; <%ARGS> $Name => 'PreferredKey' $EmailAddress => undef $Default => undef rt-4.2.12/share/html/Elements/Crypt/SelectKeyForSigning000644 000765 000024 00000004742 12555754775 023436 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ( $user_key ) { % } else { <% loc("Queue's key") %> % } <%ARGS> $Name => 'SignUsing', $User => undef, <%INIT> return unless RT->Config->Get('Crypt')->{'Enable'}; # XXX: Only GnuPG at this moment supports user's private keys my $user_key; $user_key = $User->PrivateKey if RT->Config->Get('Crypt')->{'Outgoing'} eq 'GnuPG'; rt-4.2.12/share/html/Elements/Crypt/SignEncryptWidget000644 000765 000024 00000012644 12555754775 023171 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % my $columnsplit = " % } else { % }
    "; % if ( RT->Config->Get('Crypt')->{'Outgoing'} eq 'GnuPG' ) { <% loc( 'Sign[_1][_2] using [_3]', $columnsplit, $m->scomp('/Widgets/Form/Boolean:InputOnly', Name => 'Sign', CurrentValue => $self->{'Sign'} ), $m->scomp('SelectKeyForSigning', User => $session{'CurrentUser'}->UserObj ), ) |n %><% loc( 'Sign[_1][_2]', $columnsplit, $m->scomp('/Widgets/Form/Boolean:InputOnly', Name => 'Sign', CurrentValue => $self->{'Sign'} ), ) |n %><% loc('Encrypt')%> <& /Widgets/Form/Boolean:InputOnly, Name => 'Encrypt', CurrentValue => $self->{'Encrypt'} &>
    <%ARGS> $self => undef, <%INIT> return unless $self; <%METHOD new> <%ARGS> $Arguments => {} <%INIT> return undef unless RT->Config->Get('Crypt')->{'Enable'}; return { %$Arguments }; <%METHOD ShowIssues> <%ARGS> $self => undef, <%INIT> return unless $self; return $m->comp( '/Elements/Crypt/KeyIssues', Issues => $self->{'GnuPGRecipientsKeyIssues'} || [], SignAddresses => $self->{'GnuPGCanNotSignAs'} || [], ); <%METHOD Process> <%ARGS> $self => undef $QueueObj => undef $TicketObj => undef <%INIT> return unless $self; $QueueObj ||= $TicketObj->QueueObj if $TicketObj; foreach ( qw(Sign Encrypt) ) { $self->{ $_ } = $m->comp( '/Widgets/Form/Boolean:Process', Name => $_, DefaultValue => $QueueObj->$_, Arguments => $self, ); } <%METHOD Check> <%ARGS> $self => undef $Operation => 'Update' $TicketObj => undef $QueueObj => undef <%INIT> return 1 unless $self; my $checks_failure = 0; if ( $self->{'Sign'} ) { $QueueObj ||= $TicketObj->QueueObj if $TicketObj; my $private = $session{'CurrentUser'}->UserObj->PrivateKey || ''; my $queue = ($self->{'UpdateType'} && $self->{'UpdateType'} eq "private") ? ( $QueueObj->CommentAddress || RT->Config->Get('CommentAddress') ) : ( $QueueObj->CorrespondAddress || RT->Config->Get('CorrespondAddress') ); my $address = $self->{'SignUsing'} || $queue; if ($address ne $private and $address ne $queue) { push @{ $self->{'GnuPGCanNotSignAs'} ||= [] }, $address; $checks_failure = 1; } elsif ( not RT::Crypt->DrySign( Signer => $address ) ) { push @{ $self->{'GnuPGCanNotSignAs'} ||= [] }, $address; $checks_failure = 1; } else { RT::Crypt->UseKeyForSigning( $self->{'SignUsing'} ) if $self->{'SignUsing'}; } } if ( $self->{'Encrypt'} ) { my @recipients; if ( $Operation eq 'Update' ) { @recipients = $TicketObj->DryRun(%$self)->Recipients; } elsif ( $Operation eq 'Create' ) { $TicketObj = RT::Ticket->new( $session{'CurrentUser'} ); @recipients = $TicketObj->DryRunCreate(%$self)->Recipients; } else { $RT::Logger->crit('Incorrect operation: '. $Operation ); } my %seen; @recipients = grep !$seen{ lc $_ }++, @recipients; RT::Crypt->UseKeyForEncryption( map { (/^UseKey-(.*)$/)[0] => $self->{ $_ } } grep $self->{ $_ } && /^UseKey-/, keys %$self ); my ($status, @issues) = RT::Crypt->CheckRecipients( @recipients ); push @{ $self->{'GnuPGRecipientsKeyIssues'} ||= [] }, @issues; $checks_failure = 1 unless $status; } return $checks_failure ? 0 : 1; rt-4.2.12/share/html/Elements/CollectionAsTable/Header000644 000765 000024 00000012532 12555754775 023172 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Class => 'RT__Ticket' @Format => undef $FormatString => undef @OrderBy => () @Order => () $Query => undef $Rows => undef $Page => undef $GenericQueryArgs => undef $maxitems => undef $AllowSorting => undef $BaseURL => undef @PassArguments => qw(Query Format Rows Page Order OrderBy) <%PERL> my $generic_query_args = $GenericQueryArgs || {map { $_ => $ARGS{$_} } @PassArguments}; # backward compatibility workaround $generic_query_args->{'Format'} = $FormatString if grep $_ eq 'Format', @PassArguments; my $item = 0; foreach my $col ( @Format ) { my $attr = $col->{'attribute'} || $col->{'last_attribute'}; my $title = $col->{'title'} || ''; if ( $title eq 'NEWLINE' ) { while ( $item < $maxitems ) { $m->out(qq{ \n}); $item++; } $item = 0; $m->out(qq{\n}); next; } elsif ( $title eq 'NBSP' ) { $item++; $m->out(qq{ \n}); next; } my $span = $col->{'span'}; $item += ($span || 1); $m->out('out(' colspan="' . $m->interp->apply_escapes($span => 'h') . '"') if $span; my $align = $col->{'align'} || do { my $tmp_columnmap = $m->comp( '/Elements/ColumnMap', Class => $Class, Name => $attr, Attr => 'align', ); ProcessColumnMapValue( $tmp_columnmap, Arguments => [ $attr ] ); }; $m->out(qq{ style="text-align: $align"}) if $align; $m->out('>'); my $loc_title; # if title is not defined then use defined attribute or last # one we saw in the format unless ( defined $col->{'title'} ) { my $tmp = $m->comp( '/Elements/ColumnMap', Class => $Class, Name => $attr, Attr => 'title', ); $title = ProcessColumnMapValue( $tmp, Arguments => [ $attr ] ); # in case title is not defined in ColumnMap # the following regex changes $attr like from "ReferredToBy" to "Referred To By" $title = join ' ', split /(?<=[a-z])(?=[A-Z])/, $attr unless defined $title; $loc_title = $attr =~ /^(?:CustomField|CF)\./ ? $title : loc($title); } else { $loc_title = loc($m->comp('/Elements/ScrubHTML', Content => $title)); } if ( $AllowSorting and $col->{'attribute'} and my $attr = $m->comp( "/Elements/ColumnMap", Class => $Class, Name => $col->{'attribute'}, Attr => 'attribute' ) ) { $attr = ProcessColumnMapValue( $attr, Arguments => [ $col->{'attribute'} ], Escape => 0 ); my $new_order = 'ASC'; $new_order = $Order[0] eq 'ASC'? 'DESC': 'ASC' if $OrderBy[0] && ($OrderBy[0] eq $attr or "$attr|$OrderBy[0]" =~ /^(Created|id)\|(Created|id)$/); $m->out( ''. $loc_title .'' ); } else { $m->out( $loc_title ); } $m->out(''); } rt-4.2.12/share/html/Elements/CollectionAsTable/ParseFormat000644 000765 000024 00000007422 12555754775 024227 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Format <%init> use Regexp::Common qw/delimited/; my @Columns; while ($Format =~ /($RE{delimited}{-delim=>qq{\'"}}|[{}\w.]+)/go) { my $col = $1; my $colref = { original_string => $col }; if ($col =~ /^$RE{quoted}$/o) { substr($col,0,1) = ""; substr($col,-1,1) = ""; $col =~ s/\\(.)/$1/g; } $m->callback(CallbackName => 'PreColumn', Column => $colref, col => \$col); while ( $col =~ s{/(STYLE|CLASS|TITLE|ALIGN|SPAN|ATTRIBUTE):([^/]*)}{}i ) { $colref->{ lc $1 } = $2; } $colref->{'last_attribute'} = $colref->{'attribute'}; unless ( length $col ) { $colref->{'output'} = []; $colref->{'last_attribute'} = $colref->{'attribute'} = '' unless defined $colref->{'attribute'}; } elsif ( $col =~ /^__(NEWLINE|NBSP)__$/ || $col =~ /^(NEWLINE|NBSP)$/ ) { $colref->{'title'} = $1; $colref->{'last_attribute'} = ''; } elsif ( $col =~ /__(.*?)__/io ) { my @subcols; while ( $col =~ s/^(.*?)__(.*?)__//o ) { push ( @subcols, $1 ) if $1; push ( @subcols, "__$2__" ); $colref->{'last_attribute'} = $2; } push @subcols, $col; $colref->{'output'} = \@subcols; $colref->{'attribute'} = $colref->{'last_attribute'} unless defined $colref->{'attribute'}; } else { $colref->{'output'} = [ "__" . $col . "__" ]; $colref->{'last_attribute'} = $col; $colref->{'attribute'} = $col unless defined $colref->{'attribute'}; } $m->callback(CallbackName => 'PostColumn', Column => $colref, col => \$col); push @Columns, $colref; } $m->callback(CallbackName => 'PostProcess', Columns => \@Columns, Format => $Format); return(@Columns); rt-4.2.12/share/html/Elements/CollectionAsTable/Row000644 000765 000024 00000011121 12555754775 022542 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $i => undef @Format => undef $record => undef $maxitems => undef $Depth => undef $Warning => undef $ColumnMap => {} $Class => 'RT__Ticket' $Classes => '' <%init> $m->out( '' . "\n" ); my $item; foreach my $column (@Format) { if ( defined $column->{title} && $column->{title} eq 'NEWLINE' ) { while ( $item < $maxitems ) { $m->out(qq{ \n}); $item++; } $item = 0; $m->out( '' . "\n" ); $m->out( '' . "\n" ); next; } my $class = $column->{class} ? $m->interp->apply_escapes($column->{class}, 'h') : 'collection-as-table'; $m->out(qq{{ $attr } ) { $attrs{ $attr } = $column->{ $attr }; next; } # if it's not defined then use column map my $col = $column->{'attribute'} || $column->{'last_attribute'}; unless ( exists $ColumnMap->{$col}{$attr} ) { next unless $col; $ColumnMap->{$col}{$attr} = $m->comp( "/Elements/ColumnMap", Class => $Class, Name => $col, Attr => $attr, ); } $attrs{ $attr } = ProcessColumnMapValue( $ColumnMap->{$col}{$attr}, Arguments => [$record, $i], Escape => 0, ); } $attrs{colspan} = $column->{span}; $item += ($attrs{'colspan'} || 1); my @out; foreach my $subcol ( @{ $column->{output} } ) { my ($col) = ($subcol =~ /^__(.*?)__$/); unless ( $col ) { push @out, $subcol; next; } unless ( exists $ColumnMap->{$col}{'value'} ) { $ColumnMap->{$col}{'value'} = $m->comp( "/Elements/ColumnMap", Class => $Class, Name => $col, Attr => 'value' ); } push @out, ProcessColumnMapValue( $ColumnMap->{$col}{'value'}, Arguments => [$record, $i], ); } $m->out( $_ .'="'. $m->interp->apply_escapes( $attrs{$_} => 'h' ) .'"' ) foreach grep $attrs{$_}, qw(align style colspan); $m->out('>'); $m->out(@out) if @out; $m->out( '' . "\n" ); } $m->out(''); rt-4.2.12/share/html/Download/CustomFieldValue/000755 000765 000024 00000000000 12555754775 021733 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Download/CustomFieldValue/dhandler000644 000765 000024 00000005506 12555754775 023445 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%perl> my $id; my $arg = $m->dhandler_arg; # get rest of path if ($arg =~ /^(\d+)\//) { $id = $1; } else { Abort("Corrupted customfieldvalue URL."); } my $OCFV = RT::ObjectCustomFieldValue->new($session{'CurrentUser'}); $OCFV->Load($id) || Abort("OCFV '$id' could not be loaded"); unless ($OCFV->id) { Abort("Bad OCFV id. Couldn't find OCFV '$id'\n"); } my $content_type = $OCFV->ContentType || 'text/plain; charset=utf-8'; if (RT->Config->Get('AlwaysDownloadAttachments')) { $r->headers_out->{'Content-Disposition'} = "attachment"; } elsif (!RT->Config->Get('TrustHTMLAttachments')) { $content_type = 'text/plain; charset=utf-8' if ($content_type =~ /^text\/html/i); } $r->content_type( $content_type ); $m->clear_buffer(); $m->out($OCFV->LargeContent); $m->abort; <%attr> AutoFlush => 0 rt-4.2.12/share/html/Dashboards/dhandler000644 000765 000024 00000004176 12555754775 020537 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> if ($m->dhandler_arg =~ /^(\d+)/) { $m->comp('/Dashboards/Render.html', id => $1, %ARGS); } else { $m->decline; } rt-4.2.12/share/html/Dashboards/Elements/000755 000765 000024 00000000000 12555754775 020577 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Dashboards/index.html000644 000765 000024 00000004202 12555754775 021016 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Dashboards") &> <& /Elements/Tabs &> <& /Elements/ListActions &> <& /Dashboards/Elements/ShowDashboards &> rt-4.2.12/share/html/Dashboards/Modify.html000644 000765 000024 00000012477 12555754775 021153 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    %unless ($Dashboard->Id) { % } else { % } <&|/Widgets/TitleBox, title => loc('Basics') &>
    <&|/l&>Name:
    <&|/l&>Privacy: <& /Dashboards/Elements/SelectPrivacy, Name => "Privacy", Objects => \@privacies, Default => $Dashboard->Privacy &>
    <& /Elements/Submit, Name => 'Save', Label =>( $Create ? loc('Create') : loc('Save Changes') ) &> % if ($Dashboard->Id && $can_delete) { <& /Elements/Submit, Name => 'Delete', Label => loc('Delete') &> % }
    <%INIT> my ($title, @results); my $tried_create = 0; # user went directly to Modify.html $Create = 1 if !$id; my $redirect_to ='/Dashboards/Modify.html'; use RT::Dashboard; my $Dashboard = RT::Dashboard->new($session{'CurrentUser'}); my $method = $Create ? 'ObjectsForCreating' : 'ObjectsForModifying'; my @privacies = $Dashboard->$method; Abort(loc("Permission Denied")) if @privacies == 0; if ($Create) { $title = loc("Create a new dashboard"); } else { if ($id eq 'new') { $tried_create = 1; my ($val, $msg) = $Dashboard->Save( Name => $ARGS{'Name'}, Privacy => $ARGS{'Privacy'}, ); if (!$val) { Abort(loc("Dashboard could not be created: [_1]", $msg)); } push @results, $msg; $id = $Dashboard->Id; if (!$Dashboard->id || ! $Dashboard->CurrentUserCanSee) { $redirect_to='/Dashboards/index.html'; } } else { my ($ok, $msg) = $Dashboard->LoadById($id); $ok || Abort(loc("Couldn't load dashboard [_1]: [_2]", $id, $msg)); } if ($id) { $title = loc("Modify the dashboard [_1]", $Dashboard->Name); } # If the create failed else { $Create = 1; $title = loc("Create a new dashboard"); } } if (!$Create && !$tried_create && $id && $ARGS{'Save'}) { my ($ok, $msg) = $Dashboard->Update(Privacy => $ARGS{'Privacy'}, Name => $ARGS{'Name'}); if ($ok) { push @results, loc("Dashboard [_1] updated", $Dashboard->Name); } else { push @results, loc("Dashboard [_1] could not be updated: [_2]", $Dashboard->Name, $msg); } } my $can_delete = $Dashboard->CurrentUserCanDelete; if (!$Create && !$tried_create && $id && $ARGS{'Delete'}) { my ($ok, $msg) = $Dashboard->Delete(); if (!$ok) { Abort(loc("Couldn't delete dashboard [_1]: [_2]", $id, $msg)); } push @results, $msg; $redirect_to = '/Dashboards/index.html'; } # This code does automatic redirection if any updates happen. MaybeRedirectForResults( Actions => \@results, Path => $redirect_to, Arguments => { id => $id }, ); <%ARGS> $Create => undef $Name => undef $id => '' unless defined $id $Delete => undef rt-4.2.12/share/html/Dashboards/Queries.html000644 000765 000024 00000022131 12555754775 021325 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &> <& Elements/Deleted, searches => \@deleted, Dashboard => $Dashboard &> <& Elements/HiddenSearches, searches => \@hidden_searches, Dashboard => $Dashboard &> % for my $pane (@panes) { % }
    <&| /Widgets/TitleBox, title => $pane->{DisplayName} &> % my ( $pane_name ) = $pane->{Name} =~ /Searches-(.+)/; <& /Widgets/SelectionBox:show, self => $pane, grep( { $_->{pane} eq $pane_name} @deleted ) ? ( ShowUpdate => 1 ) : () &>
    <%INIT> my @results; use RT::Dashboard; my $Dashboard = RT::Dashboard->new($session{'CurrentUser'}); my ($ok, $msg) = $Dashboard->LoadById($id); $ok || Abort(loc("Couldn't load dashboard [_1]: [_2]", $id, $msg)); my $title = loc("Modify the content of dashboard [_1]", $Dashboard->Name); my %desc_of; my @items; my %selected; my %still_exists; # add portlets (homepage componenets) my @components = @{ RT->Config->Get('HomepageComponents') }; for my $desc (@components) { my $name = "component-$desc"; push @items, [$name, loc($desc)]; $desc_of{$name} = loc($desc); $still_exists{$name} = 1; } # add dashboards my @dashboards = $m->comp("/Dashboards/Elements/ListOfDashboards"); for my $dashboard (@dashboards) { # Users *can* set up mutually recursive dashboards, but don't make it THIS # easy for them to shoot themselves in the foot. next if $dashboard->Id == $Dashboard->Id; my $name = 'dashboard-' . $dashboard->Id . '-' . $dashboard->Privacy; my $type = loc('Dashboard'); # loc my $desc = "$type: " . $dashboard->Name; push @items, [$name, $desc]; $desc_of{$name} = $desc; $still_exists{$name} = 1; } # add saved searches my @objs = RT::System->new($session{'CurrentUser'}); push @objs, RT::SavedSearch->new( $session{CurrentUser} )->ObjectsForLoading if $session{'CurrentUser'}->HasRight( Right => 'LoadSavedSearch', Object => $RT::System ); for my $object (@objs) { for ($m->comp("/Search/Elements/SearchesForObject", Object => $object)) { my ($desc, $loc_desc, $search) = @$_; my $SearchType = $search->Content->{'SearchType'} || 'Ticket'; my $type = ( $SearchType eq 'Ticket' ) ? 'Saved Search' # loc : $SearchType; $desc = loc($type) . ": $loc_desc"; my $privacy = $Dashboard->_build_privacy($object); my $name = 'search-' . $search->Id . '-' . $privacy; push @items, [$name, $desc]; $desc_of{$name} = $desc; $still_exists{$name} = 1; } } # Get the list of portlets already in use my @deleted; do { my $panes = $Dashboard->Panes; for my $pane (keys %$panes) { for my $portlet (@{ $panes->{$pane} }) { my $name; my $type = $portlet->{portlet_type}; if ($type eq 'search' || $type eq 'dashboard') { $name = join '-', $type, $portlet->{id}, $portlet->{privacy}; } elsif ($type eq 'component') { $name = join '-', 'component', $portlet->{component}; } if (!$still_exists{$name}) { push @deleted, { pane => $pane, name => $name, description => $portlet->{description}, }; next; } push @{ $selected{$pane} }, $name; $desc_of{$name} = $portlet->{description}; } } }; $m->callback( CallbackName => 'PopulatePossibilities', Dashboard => $Dashboard, items => \@items, desc_of => \%desc_of, still_exists => \%still_exists, selected => \%selected, ); # Create selectionbox widgets for those portlets my %pane_name = ( 'body' => loc('Body'), 'sidebar' => loc('Sidebar'), ); $m->callback( CallbackName => 'Panes', Dashboard => $Dashboard, panes => \%pane_name, ); my @panes; for my $pane (sort keys %pane_name) { my $sel = $m->comp( '/Widgets/SelectionBox:new', Action => 'Queries.html', Name => "Searches-$pane", DisplayName => $pane_name{$pane}, Available => \@items, Selected => $selected{$pane}, AutoSave => 1, OnSubmit => sub { my $self = shift; $m->callback( CallbackName => 'Submit', Dashboard => $Dashboard, Selected => $self->{Current}, pane => $pane, ); my @portlets; for (@{ $self->{Current} }) { my $item = $_; my $desc = $desc_of{$item}; my $portlet_type = $1 if $item =~ s/^(\w+)-//; if ($portlet_type eq 'search' || $portlet_type eq 'dashboard') { my ($id, $privacy) = split '-', $item, 2; push @portlets, { portlet_type => $portlet_type, privacy => $privacy, id => $id, description => $desc, pane => $pane, }; } elsif ($portlet_type eq 'component') { # Absolute paths stay absolute, relative paths go into # /Elements. This way, extensions that add portlets work. my $path = $item; $path = "/Elements/$path" if substr($path, 0, 1) ne '/'; push @portlets, { portlet_type => $portlet_type, component => $item, path => $path, description => $item, pane => $pane, }; } } # we want to keep all the other panes the same my $panes = $Dashboard->Panes; $panes->{$pane} = \@portlets; # remove "deleted" warnings about this pane @deleted = grep { $_->{pane} ne $pane } @deleted; $m->callback( CallbackName => 'BeforeUpdate', Dashboard => $Dashboard, panes => $panes, ); my ($ok, $msg) = $Dashboard->Update(Panes => $panes); if ($ok) { push @results, loc("Dashboard updated"); } else { push @results, loc("Dashboard could not be updated: [_1]", $msg); } }, ); push @panes, $sel; } $m->comp('/Widgets/SelectionBox:process', %ARGS, self => $_ ) for @panes; my @hidden_searches = $Dashboard->PossibleHiddenSearches; <%ARGS> $id => '' unless defined $id rt-4.2.12/share/html/Dashboards/Render.html000644 000765 000024 00000011244 12555754775 021132 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title, ShowBar => $Preview, Refresh => $Refresh, &> % if ($Preview) { <& /Elements/Tabs &> % } % $m->callback(CallbackName => 'BeforeTable', Dashboard => $Dashboard, show_cb => $show_cb); % $m->callback(CallbackName => 'BeforePanes', Dashboard => $Dashboard, show_cb => $show_cb); % $m->callback(CallbackName => 'AfterPanes', Dashboard => $Dashboard, show_cb => $show_cb);
    % $show_cb->('body'); % $show_cb->('sidebar');
    % $m->callback(CallbackName => 'AfterTable', Dashboard => $Dashboard, show_cb => $show_cb); % if (!$Preview) { % my $edit = RT->Config->Get('WebPath') . '/Dashboards/Modify.html?id='.$id; % my $subscription = RT->Config->Get('WebPath') . '/Dashboards/Subscription.html?id='.$id;

    <&|/l, $edit, $subscription &>You may edit this dashboard and your subscription to it in RT.

    %# We disable autohandlers when mailing (!$Preview) so /Elements/Footer isn't %# run for us. Tidy up the end of the HTML. We don't use /Elements/Tabs (and %# hence PageLayout) so we don't need to close any other tags. % } <%INIT> use RT::Dashboard; my $Dashboard = RT::Dashboard->new($session{'CurrentUser'}); my ($ok, $msg) = $Dashboard->LoadById($id); $ok || Abort(loc("Couldn't load dashboard [_1]: [_2]", $id, $msg)); my $SubscriptionObj = RT::Attribute->new($session{'CurrentUser'}); my $rows; # try to load the subscription to this id to get a better idea of number of rows for my $sub ($session{'CurrentUser'}->UserObj->Attributes->Named('Subscription')) { next unless $sub->SubValue('DashboardId') == $id; $SubscriptionObj = $sub; $rows = $SubscriptionObj->SubValue('Rows'); last; } # otherwise honor their search preferences.. otherwise 50 rows # $rows == 0 means unlimited, which we don't want to ignore from above unless (defined($rows)) { my $prefs = $session{'CurrentUser'}->UserObj->Preferences("SearchDisplay") || {}; $rows = defined($prefs->{'RowsPerPage'}) ? $prefs->{'RowsPerPage'} : 50; } my $title = loc '[_1] Dashboard', $Dashboard->Name; my $show_cb = sub { my $pane = shift; $m->comp('Elements/ShowPortlet/dashboard', Portlet => $Dashboard, Rows => $rows, Preview => $Preview, Dashboard => $Dashboard, Pane => $pane, Depth => 0, ); }; my $Refresh = $Preview ? $session{'home_refresh_interval'} || RT->Config->Get('HomePageRefreshInterval', $session{'CurrentUser'}) : 0; <%ARGS> $id => undef $Preview => 1 rt-4.2.12/share/html/Dashboards/Subscription.html000644 000765 000024 00000024012 12555754775 022374 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    <&| /Widgets/TitleBox, title => loc('Dashboard') &>
    <&|/l&>Dashboard: <% $Dashboard->Name %>
    <&|/l&>Queries: % my @portlets = grep { defined } $Dashboard->Portlets; % if (!@portlets) { (<&|/l&>none) % } else {
      % for my $portlet (@portlets) {
    1. <% loc($portlet->{description}, $fields{'Rows'}) %>
    2. % }
    % }
    <&| /Widgets/TitleBox, title => loc('Subscription') &>
    <&|/l&>Frequency: >
    >
    >
    >
    >
    <&|/l&>Hour: (<%$timezone%>)
    <&|/l&>Rows:
    <&|/l&>Recipient:
    <% loc("Leave blank to send to your current email address ([_1])", $session{'CurrentUser'}->EmailAddress) %>
    % if ($SubscriptionObj) { <& /Elements/Submit, Name => "Save", Label => loc('Save Changes') &> % } else { <& /Elements/Submit, Name => "Save", Label => loc('Subscribe') &> % }
    <%INIT> my ($title, @results); my $Loaded = 0; my $timezone = $session{'CurrentUser'}->UserObj->Timezone || RT->Config->Get('Timezone'); use RT::Dashboard; my $Dashboard = RT::Dashboard->new($session{'CurrentUser'}); my ($ok, $msg) = $Dashboard->LoadById($id); $ok || Abort(loc("Couldn't load dashboard [_1]: [_2]", $id, $msg)); my $SubscriptionObj = $Dashboard->Subscription; $id = $SubscriptionObj ? $SubscriptionObj->SubValue('DashboardId') : $ARGS{'id'}; my %fields = ( DashboardId => $id, Frequency => 'daily', Hour => '06:00', Dow => 'Monday', Dom => 1, Rows => 20, Recipient => '', Fow => 1, Counter => 0, ); # update any fields with the values from the subscription object if ($SubscriptionObj) { for my $field (keys %fields) { $fields{$field} = $SubscriptionObj->SubValue($field); } } # finally, update any fields with arguments passed in by the user for my $field (keys %fields) { next if $field eq 'DashboardId'; # but this one is immutable $fields{$field} = $ARGS{$field} if defined($ARGS{$field}); } # this'll be defined on submit if (defined $ARGS{Save}) { my $ok = 1; # validation if ($fields{Recipient}) { my @addresses = Email::Address->parse($fields{Recipient}); if (@addresses == 0) { push @results, loc('Recipient must be an email address'); $ok = 0; } } if ($ok) { # update if ($SubscriptionObj) { $id = delete $fields{'DashboardId'}; # immutable ($ok, $msg) = $SubscriptionObj->SetSubValues(%fields); $fields{'DashboardId'} = $id; $msg = loc("Subscription updated") if $ok; push @results, $msg; } # create else { Abort(loc("Unable to subscribe to dashboard [_1]: Permission Denied", $id)) unless $Dashboard->CurrentUserCanSubscribe; $SubscriptionObj = RT::Attribute->new($session{CurrentUser}); ($ok, $msg) = $SubscriptionObj->Create( Name => 'Subscription', Description => 'Subscription to dashboard ' . $id, ContentType => 'storable', Object => $session{'CurrentUser'}->UserObj, Content => \%fields, ); if ($ok) { push @results, loc("Subscribed to dashboard [_1]", $Dashboard->Name); push @results, loc("Warning: you have no email address set, so you will not receive this dashboard until you have it set") unless $session{'CurrentUser'}->EmailAddress || $fields{Recipient}; } else { push @results, loc('Subscription could not be created: [_1]', $msg); } } } } if ($SubscriptionObj) { $title = loc("Modify the subscription to dashboard [_1]", $Dashboard->Name); } else { $title = loc("Subscribe to dashboard [_1]", $Dashboard->Name); } <%ARGS> $id => undef $Frequency => undef $Hour => undef $Dow => undef $Dom => undef $Rows => undef $Recipient => undef rt-4.2.12/share/html/Dashboards/Elements/DashboardsForObject000644 000765 000024 00000005660 12555754775 024401 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Object => undef <%init> # Returns a hash of dashboards associated on $Object use RT::Dashboard; my %dashboards; my $privacy = RT::Dashboard->_build_privacy($Object); while (my $attr = $Object->Attributes->Next) { if ($attr->Name =~ /^Dashboard\b/) { my $dashboard = RT::Dashboard->new($User); my ($ok, $msg) = $dashboard->Load($privacy, $attr->id); if (!$ok) { $RT::Logger->debug("Unable to load dashboard $ok (privacy $privacy): $msg"); next; } if ($Object->isa('RT::System')) { push @{ $dashboards{system} }, $dashboard; } elsif ($Object->isa('RT::User')) { push @{ $dashboards{personal} }, $dashboard; } elsif ($Object->isa('RT::Group')) { push @{ $dashboards{group}{$Object->Name} }, $dashboard; } } } return \%dashboards; <%args> $User => $session{'CurrentUser'} rt-4.2.12/share/html/Dashboards/Elements/Deleted000644 000765 000024 00000004551 12555754775 022075 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> @searches % if (@searches) { <&| /Widgets/TitleBox, title => loc('Deleted queries') &>

    <% loc("The following queries have been deleted and each will be removed from the dashboard once its pane is updated.") %>

      % for (@searches) {
    • <% loc('[_1] (from pane [_2])', ($_->{description} || $_->{name}), $_->{pane}) %>
    • % }
    % } rt-4.2.12/share/html/Dashboards/Elements/HiddenSearches000644 000765 000024 00000005254 12555754775 023401 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> @searches $Dashboard <%init> # eliminate deleted searches (id=0) because they confuse this logic @searches = grep { $_->Id } @searches; return if @searches == 0; my @display; for my $search (@searches) { if ($search->Name eq 'SavedSearch') { push @display, $search->Description; } elsif ($search->Name =~ m/^Search - (.*)/) { push @display, $1; } else { push @display, $search->Name; } } <&| /Widgets/TitleBox, title => loc('Possible hidden searches') &>

    <% loc("The following queries may not be visible to all users who can see this dashboard.") %>

      % for (@display) {
    • <% $_ %>
    • % }
    rt-4.2.12/share/html/Dashboards/Elements/ListOfDashboards000644 000765 000024 00000006065 12555754775 023724 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> # put the list of dashboards into the navigation use RT::Dashboard; my @objs = RT::Dashboard->new($User)->ObjectsForLoading( IncludeSuperuserGroups => $IncludeSuperuserGroups ); my %dashboard_map; for my $object (@objs) { my $new_dashboards = $m->comp("/Dashboards/Elements/DashboardsForObject", Object => $object, User => $User ); push @{ $dashboard_map{$_} }, @{ $new_dashboards->{$_} || [] } for qw/personal system/; push @{ $dashboard_map{group}{$_} }, @{ $new_dashboards->{group}{$_} } for keys %{ $new_dashboards->{group} || {} }; } my @dashboards = ( (sort { $a->Id <=> $b->Id } @{ $dashboard_map{personal} || [] }), (sort { $a->Id <=> $b->Id } @{ $dashboard_map{system} || [] }), map { sort { $a->Id <=> $b->Id } @{ $dashboard_map{group}{$_} } } keys %{ $dashboard_map{group} || {} }, ); $m->callback(%ARGS, dashboards => \@dashboards, CallbackName => 'ModifyDashboards'); return @dashboards; <%args> $User => $session{CurrentUser} $IncludeSuperuserGroups => 1 rt-4.2.12/share/html/Dashboards/Elements/SelectPrivacy000644 000765 000024 00000005177 12555754775 023311 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> @Objects => undef $Name => undef $Default => undef rt-4.2.12/share/html/Dashboards/Elements/ShowDashboards000644 000765 000024 00000005506 12555754775 023443 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % foreach my $Object (@Objects) { % my $Dashboards = RT::Dashboards->new($session{CurrentUser}); % $Dashboards->LimitToPrivacy(join('-',ref($Object),$Object->Id)); % my $title; % if (ref $Object eq 'RT::User' && $Object->Id == $session{CurrentUser}->Id) { % $title = loc("My dashboards"); % } else { % $title = loc("[_1]'s dashboards",$Object->Name); % } % $title =~ s/([\\'])/\\$1/g; % $title = $m->interp->apply_escapes($title, 'h'); <& /Elements/CollectionList, %ARGS, Format => qq{'__Name__/TITLE:$title', __Subscription__}, Collection => $Dashboards, &> % } <%init> use RT::Dashboards; my @Objects = RT::Dashboard->new($session{CurrentUser})->ObjectsForLoading(IncludeSuperuserGroups => $IncludeSuperuserGroups); <%args> $IncludeSuperuserGroups => 1 rt-4.2.12/share/html/Dashboards/Elements/ShowPortlet/000755 000765 000024 00000000000 12555754775 023071 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Dashboards/Elements/ShowPortlet/component000644 000765 000024 00000004564 12555754775 025027 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Dashboard $Portlet $Rows => 20 $Preview => 0 <%init> my $full_path = $Portlet->{path}; (my $path = $full_path) =~ s{^/Elements/}{}; my $allowed = grep { $_ eq $path } @{RT->Config->Get('HomepageComponents')}; % if (!$allowed) { % $m->out( $m->interp->apply_escapes( loc("Invalid portlet [_1]", $path), "h" ) ); % } else { % $m->comp($full_path); % } rt-4.2.12/share/html/Dashboards/Elements/ShowPortlet/dashboard000644 000765 000024 00000005463 12555754775 024753 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Dashboard $Pane $Portlet $Rows => 20 $Preview => 0 $Depth => 0 <%init> my $current_dashboard; if (blessed($Portlet) && $Portlet->isa('RT::Dashboard')) { $current_dashboard = $Portlet; } else { $current_dashboard = RT::Dashboard->new($session{CurrentUser}); my ($ok, $msg) = $current_dashboard->LoadById($Portlet->{id}); if (!$ok) { $m->out($msg); return; } } my @panes = @{ $current_dashboard->Panes->{$Pane} || [] }; Abort("Possible recursive dashboard detected.") if $Depth > 8; <%perl> for my $portlet (@panes) { $m->comp($portlet->{portlet_type}, Portlet => $portlet, Rows => $Rows, Preview => $Preview, Dashboard => $current_dashboard, Pane => $Pane, Depth => $Depth + 1, ); } rt-4.2.12/share/html/Dashboards/Elements/ShowPortlet/search000644 000765 000024 00000004427 12555754775 024270 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Dashboard $Portlet $Rows => 20 $Preview => 0 <%init> my @for_showsearch = $Dashboard->ShowSearchName($Portlet); <& /Elements/ShowSearch, @for_showsearch, Override => { Rows => $Rows }, hideable => $Preview, ShowCustomize => $Preview, &> rt-4.2.12/share/html/Articles/Article/000755 000765 000024 00000000000 12555754775 020102 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Articles/Elements/000755 000765 000024 00000000000 12555754775 020273 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Articles/index.html000644 000765 000024 00000004561 12555754775 020522 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Articles') &> <& /Elements/Tabs &> <& /Articles/Elements/MaybeNeedsSetup &>
    <& /Articles/Elements/NewestArticles &>
    <& /Articles/Elements/UpdatedArticles &>
    <& /Articles/Elements/QuickSearch &>
    <& /Articles/Elements/CreateArticle &>
    rt-4.2.12/share/html/Articles/Topics.html000644 000765 000024 00000014413 12555754775 020651 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Browse by topic') &> <& /Elements/Tabs &> <&|/l&>All topics % if (defined $class) { > <% $currclass_name %> % } % if ($id != 0) { > <& /Articles/Elements/ShowTopic, topic => $currtopic &> % }

    <&|/l&>Browse by topic

    % if (defined $class) {

    <% $currclass_name %>

    % my $rtopic = RT::Topic->new( $session{'CurrentUser'} ); % $rtopic->Load($id); % unless ( $rtopic->Id() % && $rtopic->ObjectId() == $currclass->Id ) % { % # Show all of them % $ProduceTree->( 0 ); % } else { % my @showtopics = ( $rtopic ); % my $parent = $rtopic->ParentObj; % while ( $parent->Id ) { % unshift @showtopics, $parent; % $parent = $parent->ParentObj; % } % # List the topics. % for my $t ( @showtopics ) {
    • <& /Articles/Elements/ShowTopicLink, Topic => $t, Class => $currclass_id &> % $ProduceTree->( $id ) if $t->Id == $id; % } % for ( @showtopics ) {
    % } % } % } else { % }
    % if (@articles) { % if ($id) {

    <&|/l, $currtopic->Name&>Articles in [_1]

    % } elsif ($class) {

    <&|/l&>Articles with no topics

    % } % } <%init> my $Classes; my $currclass; my $currclass_id; my $currclass_name; my $currtopic; if ( defined $class ) { if ($class) { $currclass = RT::Class->new( $session{'CurrentUser'} ); $currclass->Load($class); $currclass_id = $currclass->Id; $currclass_name = $currclass->Name; } else { $currclass = $RT::System; $currclass_id = 0; $currclass_name = 'Global Topics'; } } else { $Classes = RT::Classes->new( $session{'CurrentUser'} ); $Classes->LimitToEnabled(); } if ($id) { $currtopic = RT::Topic->new( $session{'CurrentUser'} ); $currtopic->Load($id); } my $ProduceTree; $ProduceTree = sub { my ( $parentid ) = @_; my $topics = RT::Topics->new( $session{'CurrentUser'} ); $topics->LimitToObject($currclass); $topics->LimitToKids($parentid || 0); $topics->OrderBy( FIELD => 'Name' ); return unless $topics->Count; $m->out("
      "); while ( my $t = $topics->Next ) { $m->out("
    • "); $m->comp("/Articles/Elements/ShowTopicLink", Topic => $t, Class => $currclass_id, ); $ProduceTree->( $t->Id ) if $t->Children->Count; $m->out("
    • "); } $m->out("
    "); }; my @articles; if ($id) { my $Articles = RT::ObjectTopics->new($session{'CurrentUser'}); $Articles->Limit(FIELD => 'ObjectType', VALUE => 'RT::Article'); $Articles->Limit(FIELD => 'Topic', VALUE => $id); while (my $objtopic = $Articles->Next) { my $a = RT::Article->new($session{'CurrentUser'}); $a->Load($objtopic->ObjectId); push @articles, $a; } } elsif ($class) { my $Articles = RT::Articles->new($session{'CurrentUser'}); my $TopicsAlias = $Articles->Join( TYPE => 'left', ALIAS1 => 'main', FIELD1 => 'id', TABLE2 => 'ObjectTopics', FIELD2 => 'ObjectId', ); $Articles->Limit( LEFTJOIN => $TopicsAlias, FIELD => 'ObjectType', VALUE => 'RT::Article', ); $Articles->Limit( ALIAS => $TopicsAlias, FIELD => 'Topic', OPERATOR => 'IS', VALUE => 'NULL', QUOTEVALUE => 0, ); $Articles->Limit( FIELD => 'Class', OPERATOR => '=', VALUE => $class, ); @articles = @{$Articles->ItemsArrayRef}; } <%args> $id => 0 $class => undef $showall => undef rt-4.2.12/share/html/Articles/Elements/BeforeMessageBox000644 000765 000024 00000020015 12555754775 023374 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ( $ARGS{id} && $ARGS{id} ne 'new' ) { % } % unless (RT->Config->Get('HideArticleSearchOnReplyCreate')) { % } % if ($hotlist->Count) { % } % my %dedupe_articles; % while (my $article = $articles_content->Next) { % $dedupe_articles{$article->Id}++; % } % while (my $article = $articles_basics->Next) { % next if $dedupe_articles{$article->Id}; % } % if ( @$topics ) { % if ( $ARGS{$name_prefix .'Articles-Include-Topic'} ) { % } % }
    <&|/l&>Search for Articles matching
    <&|/l&>Include Article:
    <&|/l&>Select an Article to include
      <%$article->Name|| loc('(no name)')%>: <%$article->Summary%>
      <%$article->Name || loc('(no name)')%>: <%$article->Summary || ''%>
    <&|/l, $QueueObj->Name &>Choose from Topics for [_1]
    <&|/l, $included_topic->Name &>Select an Article from [_1]
    <%init> my $QueueObj = $ARGS{QueueObj}; if ( $ARGS{id} && $ARGS{id} ne 'new' && !$QueueObj ) { my $ticket = RT::Ticket->new( $session{CurrentUser} ); $ticket->Load( $ARGS{id} ); $QueueObj = $ticket->QueueObj; } my $skip = 0; $m->callback(CallbackName => "Init", skip => \$skip, Queue => $QueueObj); return if $skip; my $name_prefix = ''; if ( $ARGS{'MessageBoxName'} ) { $name_prefix = $ARGS{'MessageBoxName'} .'-'; } # convert Articles-Include-Article => $id to Articles-Include-Article-$id if ( my $tmp = $ARGS{$name_prefix ."Articles-Include-Article"} ) { $ARGS{$name_prefix ."Articles-Include-Article-$tmp"}++; } my %uri; if ( $ARGS{id} && $ARGS{id} ne 'new' ) { $uri{$_}++ for split ' ', ($ARGS{$ARGS{'id'}.'-RefersTo'} || ''); foreach my $arg (keys %ARGS) { next if $name_prefix && substr($arg, 0, length($name_prefix)) ne $name_prefix; my $article = RT::Article->new($session{'CurrentUser'}); $article->LoadByInclude( Field => substr($arg, length($name_prefix)), Value => $ARGS{$arg}, ); if ($article->Id) { $uri{$article->URI}++; } } } use RT::Articles; my $articles_content = RT::Articles->new( $session{'CurrentUser'} ); my $articles_basics = RT::Articles->new( $session{'CurrentUser'} ); if ( my $tmp = $ARGS{ $name_prefix ."Articles_Content" } ) { $articles_content->LimitCustomField( VALUE => $tmp, OPERATOR => 'LIKE' ); $articles_content->LimitAppliedClasses( Queue => $QueueObj ); $articles_basics->Limit( SUBCLAUSE => 'all', FIELD => 'Name', OPERATOR => 'LIKE', VALUE => $tmp, ENTRYAGGREGATOR => "OR" ); $articles_basics->Limit( SUBCLAUSE => 'all', FIELD => 'Summary', OPERATOR => 'LIKE', VALUE => $tmp, ENTRYAGGREGATOR => "OR" ); $articles_basics->LimitAppliedClasses( Queue => $QueueObj ); } my $hotlist = RT::Articles->new( $session{'CurrentUser'} ); $hotlist->LimitHotlistClasses; $hotlist->LimitAppliedClasses( Queue => $QueueObj ); my ( $topic_articles, $topics, $included_topic ); $topic_articles = RT::Articles->new( $session{CurrentUser} ); $topics = []; my $top_topic = RT::Topic->new( $session{CurrentUser} ); $top_topic->LoadByCols( Name => 'Queues', Parent => 0 , ObjectType => 'RT::System', ObjectId => 1); if ( $top_topic->id ) { my $queue_topic = RT::Topic->new( $session{CurrentUser} ); $queue_topic->LoadByCols( Name => $QueueObj->Name, Parent => $top_topic->id ); if ( $queue_topic->id ) { # store all topics below $queue_topic to $topics topics( $queue_topic, $topics, 0 ); if ( my $tmp = $ARGS{ $name_prefix .'Articles-Include-Topic'} ) { $included_topic = RT::Topic->new( $session{CurrentUser} ); $included_topic->Load( $tmp ); $topic_articles->LimitTopics( $tmp ); $topic_articles->OrderBy( FIELD => 'Name' ); } } } # recursively get all the topics given a top topic sub topics { my $parent = shift; my $out = shift; my $depth = shift; while ( my $topic = $parent->Children->Next ) { push @$out, { id => $topic->id, name => $topic->Name, depth => $depth }; topics( $topic, $out, $depth+1 ); } } rt-4.2.12/share/html/Articles/Elements/CheckSkipCreate000644 000765 000024 00000005254 12555754775 023214 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> return if $checks_failure; # we're already skipping Create return unless RT->Config->Get('ArticleOnTicketCreate'); my $article = RT::Article->new($session{'CurrentUser'}); foreach my $arg ( keys %$ARGSRef) { if ( $ARGSRef->{Articles_Content} || # search for an article $ARGSRef->{'Articles-Include-Topic'} || # using Queue Topics ( $article->LoadByInclude( Field => $arg, Value => $ARGSRef->{$arg} ) && $article->id ) ) { # including an article $$skip_create = 1; last; } } return; <%ARGS> $ARGSRef => undef $skip_create => undef $checks_failure => undef $results => undef rt-4.2.12/share/html/Articles/Elements/CreateArticle000644 000765 000024 00000004471 12555754775 022733 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Widgets/TitleBoxStart, title => loc('Create an article') &> <& /Widgets/TitleBoxEnd &> <%init> my $Classes = RT::Classes->new($session{'CurrentUser'}); $Classes->LimitToEnabled; rt-4.2.12/share/html/Articles/Elements/GotoArticle000644 000765 000024 00000005561 12555754775 022441 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    % if ($class or $topic) { % }
    <%args> $topic => "" $class => "" rt-4.2.12/share/html/Articles/Elements/IncludeArticle000644 000765 000024 00000007107 12555754775 023112 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $parent_args = $m->caller_args(-1); my $name_prefix = ''; $name_prefix = $ARGS{'Name'} .'-' if $ARGS{'Name'} && grep rindex($_, "$ARGS{'Name'}-Articles-", 0) == 0, keys %$parent_args; foreach my $arg ( keys %$parent_args ) { next if $name_prefix && substr($arg, 0, length($name_prefix)) ne $name_prefix; my $Ticket = $ARGS{Ticket}; if ( !$Ticket and $parent_args->{id} and $parent_args->{id} ne 'new' ) { $Ticket = RT::Ticket->new($session{'CurrentUser'}); $Ticket->Load($parent_args->{id}); unless ( $Ticket->id ) { $RT::Logger->error("Couldn't load ticket ". $parent_args->{id} ) } } my $Queue = RT::Queue->new($session{CurrentUser}); if ($Ticket && $Ticket->Id) { $Queue = $Ticket->QueueObj; } my $article = RT::Article->new($session{'CurrentUser'}); $article->LoadByInclude( Field => substr($arg, length($name_prefix)), Value => $parent_args->{$arg}, Queue => $Queue->Id, ); next unless $article && $article->id; my $formatted_article = $m->scomp('/Articles/Article/Elements/Preformatted', Article => $article, Ticket => $Ticket ); $m->callback( Article => $article, Ticket => $Ticket, formatted_article => \$formatted_article ); if (RT->Config->Get('MessageBoxRichText', $session{'CurrentUser'})) { $formatted_article =~ s/>/>/g; $formatted_article =~ s//g; } $m->print($formatted_article); } return; rt-4.2.12/share/html/Articles/Elements/MaybeNeedsSetup000644 000765 000024 00000004420 12555754775 023253 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> my $Classes = RT::Classes->new( $session{'CurrentUser'} ); $Classes->LimitToEnabled(); # This is a COUNT(), which doesn't apply ACLs; as such, we don't display # the warning if there are classes, but the user can't see them. return if $Classes->Count; <& NeedsSetup &> rt-4.2.12/share/html/Articles/Elements/NeedsSetup000644 000765 000024 00000005470 12555754775 022303 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# Stupidly long lines because our extract-message-catalog doesn't handle multiple lines! <&|/Widgets/TitleBox, id => "articles-needs-setup", class => "error-titlebox", title => loc("Setup needed") &>

    <&|/l_unsafe, qq[], '' &>Before Articles can be used, your RT administrator must [_1]create Classes[_2], apply Article custom fields to them, and grant users rights on the classes and CFs.

    <&|/l_unsafe, qq[], qq[], '' &>An [_1]introduction to getting started with articles[_3] is available from [_2]Best Practical's online documentation[_3].

    rt-4.2.12/share/html/Articles/Elements/NewestArticles000644 000765 000024 00000006321 12555754775 023154 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Widgets/TitleBoxStart, title => loc("[_1] newest articles", $rows), bodyclass=> '' &> % while (my $Article = $MyArticles->Next) { % $i++; % }
    <&|/l&># <&|/l&>Name <&|/l&>Created by  
    <%$Article->Id%> <%$Article->Name || loc('(no name)')%> <%$Article->CreatorObj->Name%> [<&|/l&>Update]
      <%$Article->Summary || loc('(no Summary)')%>
    <& /Widgets/TitleBoxEnd &> <%INIT> my $rows = 10; my $i; my $MyArticles; $MyArticles = RT::Articles->new($session{'CurrentUser'}); $MyArticles->UnLimit; $MyArticles->RowsPerPage($rows); $MyArticles->OrderBy(FIELD => 'LastUpdated', ORDER => 'DESC'); rt-4.2.12/share/html/Articles/Elements/QuickSearch000644 000765 000024 00000004565 12555754775 022432 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Widgets/TitleBoxStart, title => loc('Quick search') &> <& /Widgets/TitleBoxEnd &> <%init> my $classes = RT::Classes->new($session{'CurrentUser'}); $classes->LimitToEnabled; rt-4.2.12/share/html/Articles/Elements/SelectClass000644 000765 000024 00000006051 12555754775 022425 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ($Lite) { % } else { % } <%ARGS> $Multiple => undef $Size => undef $ShowNullOption => 1 $ShowAllClasses => 1 $Name => undef $Verbose => undef $Default => undef $Lite => 0 <%INIT> my @Default = ref($Default) eq 'ARRAY' ? @$Default : ( $Default); my $Classes= RT::Classes->new($session{'CurrentUser'}); $Classes->LimitToEnabled(); my $d = RT::Class->new($session{'CurrentUser'}); $d->Load($Default[0]); rt-4.2.12/share/html/Articles/Elements/ShowTopic000644 000765 000024 00000004676 12555754775 022152 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % for (@path) { %# this isn't always a class, it can be the system object % my $class_id = ($_->ObjectType eq 'RT::Class' ? $_->ObjectId : 0 ); <% $_->ParentObj->Id ? " > " : "" %><% $_->Name || loc("(no name)") %> % } <%args> $topic <%init> my @path; while ($topic->Id) { unshift @path, $topic; $topic = $topic->ParentObj; } rt-4.2.12/share/html/Articles/Elements/ShowTopicLink000644 000765 000024 00000005125 12555754775 022756 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Topic $Class => 0 % if ($Link) { \ % } <% $Topic->Name() || loc("(no name)") %>\ % if ($Topic->Description) { : <% $Topic->Description %> % } % if ( $Articles->Count ) { (<&|/l, $Articles->Count &>[quant,_1,article,articles]) % } % if ($Link) { % } <%init> my $Articles = RT::ObjectTopics->new( $session{'CurrentUser'} ); $Articles->Limit( FIELD => 'ObjectType', VALUE => 'RT::Article' ); $Articles->Limit( FIELD => 'Topic', VALUE => $Topic->Id ); my $Link = $Topic->Children->Count || $Articles->Count; rt-4.2.12/share/html/Articles/Elements/SubjectOverride000644 000765 000024 00000006137 12555754775 023324 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> foreach my $arg ( keys %$ARGSRef) { my $Queue = $QueueObj || RT::Queue->new($session{CurrentUser}); if (!$Queue->Id && $Ticket && $Ticket->Id) { $Queue = $Ticket->QueueObj; } my $article = RT::Article->new($session{'CurrentUser'}); $article->LoadByInclude( Field => $arg, Value => $ARGSRef->{$arg}, Queue => $Queue->Id, ); next unless $article && $article->id; my $class = $article->ClassObj; next unless $class->SubjectOverride; my $cfs = $class->ArticleCustomFields; $cfs->Limit( FIELD => 'id', VALUE => $class->SubjectOverride ); my $subjectCF = $cfs->First; next unless $subjectCF; my $subject = $article->CustomFieldValuesAsString($subjectCF->Id); $m->callback( CallbackName => 'ProcessContent', Ticket => $Ticket, Article => $article, content => \$subject); if ( exists $ARGSRef->{UpdateSubject} ) { $ARGSRef->{UpdateSubject} = $subject; } else { $ARGSRef->{Subject} = $subject; } } return; <%ARGS> $Ticket => undef $ARGSRef => undef $results => undef $QueueObj => undef rt-4.2.12/share/html/Articles/Elements/UpdatedArticles000644 000765 000024 00000006476 12555754775 023310 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Widgets/TitleBoxStart, title => loc("[_1] most recently updated articles", $rows), bodyclass=> '' &> % while (my $Article = $MyArticles->Next) { % $i++; % }
    <&|/l&># <&|/l&>Name <&|/l&>Created by  
    <%$Article->Id%> <%$Article->Name || loc('(no name)')%> <%$Article->CreatorObj->Name%> [<&|/l&>Update]
      <%$Article->Summary || loc('(no Summary)')%>
    <& /Widgets/TitleBoxEnd &> <%INIT> my $rows = 10; my $i; my $MyArticles; $MyArticles = RT::Articles->new($session{'CurrentUser'}); $MyArticles->RowsPerPage($rows); $MyArticles->Limit(FIELD => 'Created', OPERATOR => '!=', VALUE => 'LastUpdated', QUOTEVALUE => 0 ); $MyArticles->OrderBy(FIELD => 'Created', ORDER => 'DESC'); rt-4.2.12/share/html/Articles/Article/Delete.html000644 000765 000024 00000006363 12555754775 022202 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> % if ($ARGS{'Delete'}) { <%$title%> <& /Elements/ListActions, actions => \@results &> % } else { <&|/l&>Are you sure you want to delete this article?
    % } <%INIT> my @results; my $title; my $ArticleObj = RT::Article->new( $session{'CurrentUser'} ); $ArticleObj->Load($id); unless ( $ArticleObj->id ) { $m->comp("/Elements/Error", Why => loc("Unable to load article") ); } unless ( $ArticleObj->CurrentUserHasRight('ModifyArticle') ) { $m->comp("/Elements/Error", Why => loc("No permission to modify article")); } if ($ARGS{'Delete'} eq 'yes') { $ArticleObj->Delete(); $title = loc('Article #[_1] deleted', $ArticleObj->Id); } else { $title = loc('Delete article #[_1]', $ArticleObj->Id); } <%ARGS> $id => undef rt-4.2.12/share/html/Articles/Article/Display.html000644 000765 000024 00000006165 12555754775 022405 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &>

    <&|/l&>Basics

    <&|/l&>Class: <%$article->ClassObj->Name%>
    <%$article->Summary%>

    <&|/l&>Content

    <& /Elements/ShowCustomFields, Object => $article &>

    <&|/l&>Links

    <& Elements/ShowLinks, article => $article &>

    <&|/l&>Topics

    <& Elements/ShowTopics, article => $article &> <%init> my $article = RT::Article->new( $session{'CurrentUser'} ); if ($Name) { $article->LoadByCols( Name => $Name ); } elsif ($id) { $article->Load($id); } unless ( $article->Id ) { if ( $ARGS{'Name'} ) { $m->comp( 'Edit.html', %ARGS ); return (); } else { $m->comp( "/Elements/Error", Why => loc("Article not found") ); } } unless ( $article->CurrentUserHasRight('ShowArticle') ) { $m->comp( "/Elements/Error", Why => loc("Permission Denied") ); } my $title = loc( "Article #[_1]: [_2]", $article->Id, $article->Name || loc("(no name)")); $id = $article->id; <%args> $id => undef $Name => undef rt-4.2.12/share/html/Articles/Article/Edit.html000644 000765 000024 00000021134 12555754775 021656 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    <& Elements/EditBasics, ArticleObj => $ArticleObj, EditClass =>$EditClass, ClassObj => $ClassObj, %ARGS , id => $id &> <& Elements/EditCustomFields, ArticleObj => $ArticleObj, CFContent => \%CFContent, ClassObj => $ClassObj, %ARGS, id =>$id, &> <& Elements/EditLinks, ArticleObj => $ArticleObj, %ARGS, id => $id &>

    <&|/l&>Basics

    <&|/l&>Content

    <&|/l&>Links

    <&|/l&>Topics

    <&|/l&>Topics <& Elements/EditTopics, ArticleObj => $ArticleObj, Classes => [$ArticleObj->Id ? $ArticleObj->ClassObj : $ClassObj], OnlyThisClass => 1, %ARGS, id => $id &>
    <& /Elements/Submit, Label => ($id eq 'new' ? loc('Create') : loc('Save Changes')), color => "#993333" &>
    <%INIT> if ( exists $ARGS{'Topics'} ) { $ARGS{'Topics'} = ref( $ARGS{'Topics'} ) ? $ARGS{'Topics'} : [ $ARGS{'Topics'} ]; } my @results; my $title; my $Entries = {}; my $ArticleObj = RT::Article->new( $session{'CurrentUser'} ); my $ClassObj = RT::Class->new( $session{'CurrentUser'} ); if ($Class) { $ClassObj->Load($Class); Abort(loc("'[_1]' isn't a valid class", $Class)) unless $ClassObj->Id; } my %create_args; my %CFContent; my $EditClass = 1; if ( !$id ) { $title = loc('Create a new article'); foreach my $arg ( sort keys %ARGS ) { if ( $arg =~ /^Transaction-(\d+)$/ ) { my $trans = RT::Transaction->new( $session{'CurrentUser'} ); $trans->Load($1); $CFContent{ $ARGS{$arg} } .= "\n\n" if $CFContent{ $ARGS{$arg} }; $CFContent{ $ARGS{$arg} } .= $trans->Content; } } $EditClass = 0; $id = 'new'; } elsif ( $id eq 'new' ) { if ( $ARGS{'RefersTo-new'} ) { @{ $create_args{'RefersTo-new'} } = split( /\s+/, $ARGS{'RefersTo-new'} ); } if ( $ARGS{'new-RefersTo'} ) { @{ $create_args{'new-RefersTo'} } = split( /\s+/, $ARGS{'new-RefersTo'} ); } my %cfs = ProcessObjectCustomFieldUpdatesForCreate( ARGSRef => \%ARGS, ContextObject => $ClassObj, ); my $msg; ( $id, $msg ) = $ArticleObj->Create( Summary => $ARGS{'Summary'}, Name => $ARGS{'Name'}, Class => $ARGS{'Class'}, Topics => $ARGS{'Topics'}, %create_args, %cfs ); push( @results, $msg ); if ($id) { $ArticleObj->Load($id); $title = loc( 'Modify article #[_1]', $ArticleObj->Id ); delete $ARGS{id}; if ( $ARGS{next} ) { $m->redirect($ARGS{next}); } else { MaybeRedirectForResults( Actions => \@results, Arguments => { id => $ArticleObj->id }, ); } } else { $ArticleObj = RT::Article->new( $session{'CurrentUser'} ); $id = 'new'; $EditClass = 0; $title = loc('Create a new article'); } } else { $ArticleObj->Load($id); unless ( $ArticleObj->id ) { $m->comp( "/Elements/Error", Why => loc("Unable to load article") ); } my @attribs = qw(Name Summary Class); @results = UpdateRecordObject( AttributesRef => \@attribs, Object => $ArticleObj, ARGSRef => \%ARGS ); my @cf_results = ProcessObjectCustomFieldUpdates( Object => $ArticleObj, ARGSRef => \%ARGS ); @results = ( @results, @cf_results ); # Delete links that are gone gone gone. foreach my $arg ( keys %ARGS ) { if ( $arg =~ /DeleteLink-(.*?)-(RefersTo|MemberOf|RefersTo)-(.*)$/ ) { my $base = $1; my $type = $2; my $target = $3; my ( $val, $msg ) = $ArticleObj->DeleteLink( Base => $base, Type => $type, Target => $target ); push @results, $msg; } } my @linktypes = qw(DependsOn MemberOf RefersTo ); foreach my $linktype (@linktypes) { for my $luri ( split( / /, ( $ARGS{ $ArticleObj->Id . "-$linktype" } || '' )) ) { $luri =~ s/\s*$//; # Strip trailing whitespace my ( $val, $msg ) = $ArticleObj->AddLink( Target => $luri, Type => $linktype ); push @results, $msg; delete $ARGS{ $ArticleObj->Id . "-$linktype" } if $val; } for my $luri ( split( / /, ( $ARGS{ "$linktype-" . $ArticleObj->Id } || '' )) ) { my ( $val, $msg ) = $ArticleObj->AddLink( Base => $luri, Type => $linktype ); push @results, $msg; delete $ARGS{ "$linktype-" . $ArticleObj->Id } if $val; } } my %topics; if ( $ARGS{'EditTopics'} ) { $topics{$_}++ for @{ $ARGS{'Topics'} }; my $objTopics = RT::ObjectTopics->new( $session{'CurrentUser'} ); $objTopics->LimitToObject($ArticleObj); while ( my $t = $objTopics->Next ) { $topics{ $t->Topic }--; } for my $id ( keys %topics ) { if ( $topics{$id} > 0 ) { my ( $val, $msg ) = $ArticleObj->AddTopic( Topic => $id ); push @results, $msg; } elsif ( $topics{$id} < 0 ) { my ( $val, $msg ) = $ArticleObj->DeleteTopic( Topic => $id ); push @results, $msg; } } } $title = loc( 'Modify article #[_1]', $ArticleObj->Id ); } # if they're working on an existing article if ( $ArticleObj->id ) { unless ( $ArticleObj->CurrentUserHasRight('ShowArticle') ) { $m->comp( "/Elements/Error", Why => loc("No permission to view Article") ); } } <%ARGS> $id => undef $Class => undef rt-4.2.12/share/html/Articles/Article/Elements/000755 000765 000024 00000000000 12555754775 021656 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Articles/Article/ExtractFromTicket.html000644 000765 000024 00000007704 12555754775 024402 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Extract article from ticket #[_1] into class [_2]',$Ticket, $ClassObj->Name) &> <& /Elements/Tabs &>
    % for (@Topics) { % }

    <&|/l&>Use the dropdown menus to select which ticket updates you want to extract into a new article. <&|/l&>You can insert ticket content into any freeform, text or wiki field.

    % my $i; % while ( my $trans = $transactions->Next ) { % next unless $trans->Content; % }
    <&|/l&>Field <&|/l&>Ticket update
    <%$trans->CreatedObj->AsString%>: <%$trans->Description%>
    <%$trans->Content%>
    <& /Elements/Submit, Label => loc('Create'), color => "#993333" &>
    <%INIT> my $ticket=LoadTicket($Ticket); my $transactions = $ticket->Transactions; my $ClassObj = RT::Class->new($session{'CurrentUser'}); $ClassObj->Load($Class); unless ($ClassObj->Id) { $m->comp("/Elements/Error", Why => loc("'[_1]' isn't a valid class identifier", $Class)); } my $CustomFields = $ClassObj->ArticleCustomFields(); $CustomFields->Limit(FIELD => 'Type', OPERATOR => '=', VALUE => 'Text'); $CustomFields->Limit(FIELD => 'Type', OPERATOR => '=', VALUE => 'Wikitext'); $CustomFields->Limit(FIELD => 'Type', OPERATOR => '=', VALUE => 'Freeform'); <%ARGS> $Class => undef $Ticket => undef @Topics => () rt-4.2.12/share/html/Articles/Article/ExtractIntoClass.html000644 000765 000024 00000006313 12555754775 024225 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Extract a new article from ticket #[_1]',$Ticket) &> <& /Elements/Tabs &>

    <&|/l&>Create a new article in:

      % my $Classes = RT::Classes->new($session{'CurrentUser'}); % $Classes->LimitToEnabled(); % while (my $Class = $Classes->Next) {
    • <%$Class->Name%>: <%$Class->Description || ''%>
    • % }
    <%args> $Ticket => undef rt-4.2.12/share/html/Articles/Article/ExtractIntoTopic.html000644 000765 000024 00000005440 12555754775 024236 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Extract a new article from ticket #[_1]',$Ticket) &> <& /Elements/Tabs &> <&|/l&>Select topics for this article:
    <& Elements/EditTopics, Classes => [$ClassObj], OnlyThisClass => 1, id => 'new', &>
    <%args> $Ticket => undef $Class => undef <%init> my $ClassObj = RT::Class->new($session{'CurrentUser'}); $ClassObj->Load($Class); unless ($ClassObj->Id) { $m->comp("/Elements/Error", Why => loc("'[_1]' isn't a valid class identifier", $Class)); } rt-4.2.12/share/html/Articles/Article/History.html000644 000765 000024 00000005015 12555754775 022432 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('History for article #[_1]', $id) &> <& /Elements/Tabs &> <& /Elements/ShowHistory, Object => $article, ShowHeaders => 0, ShowDisplayModes => 0, ShowActions => 0, DisplayPath => 'History.html', &> <%init> my $article = RT::Article->new($session{'CurrentUser'}); $article->Load($id); Abort(loc("Article #[_1] not found", $id)) unless $article->Id; Abort(loc("Permission Denied")) unless $article->CurrentUserHasRight('ShowArticle'); <%args> $id => undef rt-4.2.12/share/html/Articles/Article/PreCreate.html000644 000765 000024 00000006161 12555754775 022646 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Create an article in class...') &> <& /Elements/Tabs &> % if (not $classes_configured) { <& /Articles/Elements/NeedsSetup &> % } elsif (not @classes) { <&|/l&>You don't have permission to create Articles in any Class % } else { % } <%init> my $Classes = RT::Classes->new($session{'CurrentUser'}); $Classes->LimitToEnabled(); # This is a COUNT(), which doesn't apply ACLs; as such, we don't display # the warning if there are classes, but the user can't see them. my $classes_configured = $Classes->Count; # ->Next applies SeeClass, but we also want to check CreateArticle my @classes; while (my $class = $Classes->Next) { push @classes, $class if $class->CurrentUserHasRight("CreateArticle"); } # If there is only one, redirect to it MaybeRedirectForResults( Path => "/Articles/Article/Edit.html", Force => 1, Arguments => { Class => $classes[0]->id }, ) if @classes == 1; rt-4.2.12/share/html/Articles/Article/Search.html000644 000765 000024 00000023334 12555754775 022202 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Search for articles") &> <& /Elements/Tabs &> % unless ( keys %ARGS ) {
    % if (not $classes_configured) { <& /Articles/Elements/NeedsSetup &> % } elsif (not @classes) { <&|/l&>You don't have permission to view Articles in any Class % } else { % }
    <& /Widgets/TitleBoxStart, title => loc('Saved searches') &> <&|/l&>Load saved search:
    <& Elements/SelectSavedSearches, Name => 'LoadSavedSearch', Default => $CurrentSearch &> <& /Widgets/TitleBoxEnd &>
    % return; % } <& /Elements/ListActions, actions => \@results &> % if ($articles->BuildSelectCountQuery =~ /WHERE/i) {

    <&|/l&>Search results

    <& /Elements/CollectionList, Collection => $articles, AllowSorting => 1, OrderBy => \@OrderBy, Order => \@Order, Format => $format, GenericQueryArgs => { %filtered, Format => $format, }, &> % }


    <& Elements/ShowSearchCriteria, dates => \%dates, RefersTo => $RefersTo, customfields => $customfields, ReferredToBy => $ReferredToBy, %ARGS &>

    <& Elements/ShowSavedSearches, CurrentSearch => $CurrentSearch, Name => ($search ? $search->Name : undef), Privacy => ($search ? $search->Privacy : undef) &>
    <%init> my $Classes = RT::Classes->new($session{'CurrentUser'}); $Classes->LimitToEnabled(); # This is a COUNT(), which doesn't apply ACLs; as such, we don't display # the warning if there are classes, but the user can't see them. my $classes_configured = $Classes->Count; my @classes = @{ $Classes->ItemsArrayRef }; $ARGS{Class} = $classes[0]->id if @classes == 1; use RT::SavedSearch; my @results; my $articles = RT::Articles->new( $session{'CurrentUser'} ); my $format = q{ '__id__/TITLE:#', '__Name__/TITLE:Name', '__ClassName__', '__CreatedRelative__', '__LastUpdatedRelative__', '__Summary__', '__Topics__', }; # {{{ Quicksearch logic # If it is a number, load the article with that ID. Otherwise, search # on name and summary. if ($ARGS{'q'} && $ARGS{'q'} =~ /^(\d+)$/) { return $m->comp("/Articles/Article/Display.html", id => $1); } # }}} # {{{ Saved search logic my $search; # The keys in %ARGS that are not saved and loaded with named searches. # These need to be treated specially. my @metakeys = qw/NewSearchName CurrentSearch SearchPrivacy Save Load Update Delete/; if ($CurrentSearch =~ /^(.*-\d+)-SavedSearch-(\d+)$/) { $search = RT::SavedSearch->new($session{'CurrentUser'}); $search->Load($1, $2); } # Have we been asked to load a search? if ($ARGS{'Load'}) { if ($ARGS{'LoadSavedSearch'} =~ /^(.*-\d+)-SavedSearch-(\d+)$/ ) { my $privacy = $1; my $search_id = $2; $search = RT::SavedSearch->new($session{'CurrentUser'}); my ($ret, $msg) = $search->Load($privacy, $search_id); if ($ret) { my $searchargs = $search->GetParameter('args'); # Clean out ARGS and fill it in with the saved args from the # loaded search. foreach my $key (@metakeys) { $searchargs->{$key} = $ARGS{$key}; } %ARGS = %{$searchargs}; $CurrentSearch = "$privacy-SavedSearch-$search_id"; } else { push(@results, loc("Error: could not load saved search [_1]: [_2]", $ARGS{'LoadSavedSearch'}, $msg)); } } else { push(@results, loc("Invalid [_1] argument", 'LoadSavedSearch')); } } # ...or have we been asked to save, update, or delete a search? if ($ARGS{'Save'}) { my %searchargs = %ARGS; foreach my $key (@metakeys) { delete $searchargs{$key}; } $search = RT::SavedSearch->new($session{'CurrentUser'}); unless ($ARGS{'SearchPrivacy'} =~ /^(.*)-(\d+)$/) { # This shouldn't really happen, but hey. push(@results, loc("WARNING: Saving search to user-level privacy")); $ARGS{'SearchPrivacy'} = 'RT::User-'.$session{'CurrentUser'}->Id; } my ($ret, $msg) = $search->Save(Privacy => $ARGS{'SearchPrivacy'}, Type => 'Article', Name => $ARGS{'NewSearchName'}, SearchParams => {'args' => \%searchargs}); if ($ret) { $CurrentSearch = $ARGS{'SearchPrivacy'} . "-SavedSearch-" . $search->Id; push(@results, loc("Created search [_1]", $search->Name)); } else { undef $search; # if we bomb out creating a search # we don't want to have the empty object hang around push(@results, loc("Could not create search: [_1]", $msg)); } } elsif ($ARGS{'Update'}) { if ($ARGS{'SearchPrivacy'} != $search->Privacy) { push(@results, loc("Error: cannot change privacy value of existing search")); } else { my %searchargs = %ARGS; foreach my $key (@metakeys) { delete $searchargs{$key}; } # We already have a search loaded, because CurrentSearch is set, # or else we would not have gotten here. my ($ret, $msg) = $search->Update(Name => $ARGS{'NewSearchName'}, SearchParams => \%searchargs); if ($ret) { push(@results, loc("Search [_1] updated", $search->Name)); } else { push(@results, loc("Error: search [_1] not updated: [_2]", $search->Name, $msg)); } } } elsif ($ARGS{'Delete'}) { # Keep track of this, as we are about to delete the search. my $searchname = $search->Name; my ($ret, $msg) = $search->Delete; if ($ret) { $ARGS{'CurrentSearch'} = undef; push(@results, loc("Deleted search [_1]", $searchname)); # Get rid of all the state. foreach my $key (keys %ARGS) { delete $ARGS{$key}; } $CurrentSearch = 'new'; $search = undef; $RefersTo = undef; $ReferredToBy = undef; } else { push(@results, loc("Could not delete search [_1]: [_2]", $searchname, $msg)); } } # }}} # Don't want to search for a null class when there is no class specced my $customfields = RT::CustomFields->new( $session{'CurrentUser'} ); my %dates; $articles->Search( %ARGS, CustomFields => $customfields, Dates => \%dates, OrderBy => \@OrderBy, Order => \@Order, ); $m->callback( %ARGS, _Search => $articles ); my %filtered = %ARGS; delete $filtered{$_} for (@metakeys, "EditTopics", "ExpandTopics"); delete $filtered{$_} for grep {$filtered{$_} !~ /\S/} keys %filtered; @filtered{qw(OrderBy Order)} = (\@OrderBy, \@Order); my $QueryString = "?".$m->comp('/Elements/QueryString', %filtered); <%ARGS> $CreatedBefore => '' $CreatedAfter => '' $LastUpdatedBefore => '' $LastUpdatedAfter => '' $RefersTo => undef $ReferredToBy => undef $CurrentSearch => 'new' @OrderBy => () @Order => () rt-4.2.12/share/html/Articles/Article/Elements/EditBasics000644 000765 000024 00000005306 12555754775 023617 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/l&>Name <&|/l&>Summary <&|/l&>Class % if ($EditClass) { <& /Articles/Elements/SelectClass, Name => 'Class', Default =>$ArticleObj->ClassObj->Id&> % } else { <%$ClassObj->Name%> % } <%INIT> <%ARGS> $EditClass => 1 $ClassObj => undef $ArticleObj => undef rt-4.2.12/share/html/Articles/Article/Elements/EditCustomFields000644 000765 000024 00000005245 12555754775 025016 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % while (my $CustomField = $CustomFields->Next()) { <%$CustomField->Name%>
    <%$CustomField->FriendlyType%> <& /Elements/EditCustomField, Object => $ArticleObj, CustomField => $CustomField, Default => $CFContent->{$CustomField->Id}, Rows => 15, Cols => 70 &> % } <%INIT> my $CustomFields; if ($ArticleObj->id && $ArticleObj->ClassObj->id) { $CustomFields = $ArticleObj->CustomFields(); } else { $CustomFields = $ClassObj->ArticleCustomFields(); } <%ARGS> $ArticleObj => undef $ClassObj => undef $CFContent => undef $id => undef rt-4.2.12/share/html/Articles/Article/Elements/EditLinks000644 000765 000024 00000010032 12555754775 023463 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/l&>Enter articles, tickets, or other URLs related to this article. <& LinkEntryInstructions &> % unless ($id eq 'new') { <&|/l&>(Check boxes to delete)
    % } <&|/l&>Refers to:
      % if ($id ne 'new') { % my $refersto = $ArticleObj->RefersTo; % while (my $link = $refersto->Next) { % my $member = $link->TargetURI;
    • % if ($link->TargetURI->IsLocal) { <% loc($member->Object->RecordType) %> <%$member->Object->Id%>: % if (UNIVERSAL::isa($member->Object, "RT::Article") or UNIVERSAL::can($member->Object, 'Name')) { <%$member->Object->Name%> % } elsif (UNIVERSAL::isa($member->Object, "RT::Ticket") or UNIVERSAL::can($member->Object, 'Subject')) { <%$member->Object->Subject%> % } % } else { <%$link->Target%> % } % } % }
    <&|/l&>Referred to by:
    <%ARGS> $ArticleObj => undef $id => undef rt-4.2.12/share/html/Articles/Article/Elements/EditTopics000644 000765 000024 00000011302 12555754775 023645 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> use Tree::Simple; my $inClass = RT::Topics->new($session{'CurrentUser'}); # global topics should always be available push @Classes,$RT::System unless grep { $_ == $RT::System } @Classes; $inClass->LimitToObject($_) for @Classes; $inClass->OrderByCols({FIELD => 'Name'}); my $inTree = buildTree($inClass); my $otherClass = RT::Topics->new($session{'CurrentUser'}); if (@Classes) { $otherClass->Limit(FIELD => 'ObjectType', VALUE => 'RT::Class'); for (@Classes) { $otherClass->Limit(FIELD => 'ObjectId', OPERATOR => '!=', VALUE => $_->Id); } } else { $otherClass->UnLimit; } my $otherTree = buildTree($otherClass); my $articleTopics = RT::ObjectTopics->new($session{'CurrentUser'}); $articleTopics->LimitToObject($ArticleObj); my %topics; while (my $topicObj = $articleTopics->Next) { $topics{$topicObj->Topic} = 1; } $topics{$_} = 1 for @Topics; sub buildTree { my $query = shift; use Tree::Simple; my $tree = Tree::Simple->new(Tree::Simple->ROOT); my %lookup = (0 => $tree); my @todo; while (my $topic = $query->Next) { push @todo, $topic; } { my $changed = 0; my @work = @todo; @todo = (); for my $topic (@work) { if (defined $lookup{$topic->Parent}) { $lookup{$topic->Id} = Tree::Simple->new($topic, $lookup{$topic->Parent}); $changed = 1; } else { push @todo, $topic; } } redo unless $changed == 0; } return $tree; } <%ARGS> $ArticleObj => RT::Article->new($session{'CurrentUser'}) @Classes => () @Topics => () $OnlyThisClass => undef rt-4.2.12/share/html/Articles/Article/Elements/LinkEntryInstructions000644 000765 000024 00000004172 12555754775 026151 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/l&>Type a: before article numbers and t: before ticket numbers. <&|/l&>Separate multiple entries with spaces. rt-4.2.12/share/html/Articles/Article/Elements/Preformatted000644 000765 000024 00000007517 12555754775 024247 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ($include{Name}) { #<%$Article->Id%>: <%$Article->Name || loc('(no name)')%> <%'-' x length("#".$Article->Id.": ".($Article->Name || loc('(no name)'))) %> % } % if ( $include{Summary} && ($Article->Summary||'') =~ /\S/ ) { <% $Article->Summary %> % } % while (my $cf = $cfs->Next) { % next unless $include{"CF-Title-".$cf->Id} or $include{"CF-Value-".$cf->Id}; % my $values = $Article->CustomFieldValues($cf->Id); % if ($values->Count == 1) { % my $value = $values->First; % if ($include{"CF-Title-".$cf->Id}) { <% $cf->Name%>: <% '-' x length($cf->Name) %> % } % if ($value && $include{"CF-Value-".$cf->Id}) { <% $get_content->( $value ) %> % } % } else { % my $val = $values->Next; % if ($include{"CF-Title-".$cf->Id}) { <% $cf->Name%>: \ % } % if ($val && $include{"CF-Value-".$cf->Id}) { <% $get_content->( $val ) %> % } % while ($val = $values->Next) { % if ($include{"CF-Title-".$cf->Id}) { <% ' ' x length($cf->Name)%> \ % } % if ($include{"CF-Value-".$cf->Id}) { <% $get_content->( $val ) %> % } % } % } % } <%init> my $class = $Article->ClassObj; my %include = (Name => 1, Summary => 1); my $cfs = $class->ArticleCustomFields; $include{"CF-Title-".$_->Id} = $include{"CF-Value-".$_->Id} = 1 while $_ = $cfs->Next; $include{$_} = not $class->FirstAttribute("Skip-$_") for keys %include; my $get_content = sub { my $value = shift; return '' unless $value; my $content = $value->Content; return '' unless defined $content && length $content; $m->callback( %ARGS, CallbackName => 'ProcessContent', content => \$content, ); if ( $content =~ /<.{1,5}>/ ) { $content = RT::Interface::Email::ConvertHTMLToText( $content ); } return $content; }; <%args> $Article rt-4.2.12/share/html/Articles/Article/Elements/SearchByCustomField000644 000765 000024 00000005276 12555754775 025452 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %# if the custom field is a select, enumerate the options % if ($Field->Type =~ /^Select/) { % my $CustomFieldValues = $Field->ValuesObj(); % } %# otherwise, put in a textedity field % else { % } <%init> my @Values =ref( $Values ) ? @{ $Values } : ( $Values ); <%ARGS> $Field => undef $Name => 'CustomField' $Values => undef rt-4.2.12/share/html/Articles/Article/Elements/SelectSavedSearches000644 000765 000024 00000005744 12555754775 025473 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> use RT::SavedSearches; my $groups = $session{'CurrentUser'}->UserObj->OwnGroups; my %privacies; $privacies{'RT::User-' . $session{'CurrentUser'}->UserObj->Id} = 1; map { $privacies{'RT::Group-'.$_->Id} = $_ } @{$groups->ItemsArrayRef}; <%args> $Name => undef $Default => undef rt-4.2.12/share/html/Articles/Article/Elements/SelectSearchPrivacy000644 000765 000024 00000005033 12555754775 025505 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $user = $session{'CurrentUser'}->UserObj; my $groups = $session{'CurrentUser'}->UserObj->OwnGroups; $Default = '' unless defined $Default; <%ARGS> $Name => 'GroupField' $Default => '' rt-4.2.12/share/html/Articles/Article/Elements/ShowLinks000644 000765 000024 00000006527 12555754775 023534 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/l&>Refers to:
    <&|/l&>Referred to by:
    <%args> $article => undef rt-4.2.12/share/html/Articles/Article/Elements/ShowSavedSearches000644 000765 000024 00000006643 12555754775 025173 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Widgets/TitleBoxStart, title => loc('Saved searches') &> %# Keep track of what our current search ID is. %# Hide all the save functionality if the user shouldn't see it. % if ($session{'CurrentUser'}->HasRight( Right => 'CreateSavedSearch', % Object=> $RT::System )) {

    <&|/l&>Save this search

    <&|/l&>Name: <&|/l&>Privacy: <& SelectSearchPrivacy, Name => 'SearchPrivacy', Default => $Privacy &>
    % if ($CurrentSearch && $CurrentSearch ne 'new') {       % } else { % }
    % } # if HasRight 'CreateSavedSearch'

    <&|/l&>Load a saved search

    <& SelectSavedSearches, Name => 'LoadSavedSearch', Default => $CurrentSearch &> <& /Widgets/TitleBoxEnd &> <%INIT> unless ($session{'CurrentUser'}->HasRight( Right => 'LoadSavedSearch', Object=> $RT::System )) { return; } <%ARGS> $CurrentSearch => undef $Name => undef $Privacy => undef rt-4.2.12/share/html/Articles/Article/Elements/ShowSearchCriteria000644 000765 000024 00000014154 12555754775 025337 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ($ARGS{'HideOptions'}) { <& /Widgets/TitleBoxStart, title => loc('Advanced search'), class => "rolled-up", bodyclass => "hidden" &> % } else { <& /Widgets/TitleBoxStart, title => loc('Advanced search') &> % } % while (my $field = $customfields->Next ) { % }

    <&|/l&>Basics

    <&|/l&>Classis <& /Articles/Elements/SelectClass, Name => 'Class', Multiple =>1, Size => 5 , ShowNullOption => undef, Default => $ARGS{'Class'} &> <&|/l&>and not <& /Articles/Elements/SelectClass, Name => 'Class!', Multiple =>1, Size => 5 , ShowNullOption => undef, Default => $ARGS{'Class!'} &>
    <&|/l&>Name <&|/l&>matches <&|/l&>and not
    <&|/l&>Summary <&|/l&>matches <&|/l&>and not

    <&|/l&>Content

    <&|/l&>Any field <&|/l&>matches <&|/l&>and not
    <% $field->Name %> <&|/l&>matches % my $matches = $field->Name."~"; % my $nomatches = $field->Name."!~"; <& /Articles/Article/Elements/SearchByCustomField, Field => $field, Name => $matches, Values => $ARGS{$matches} &> <&|/l&>and not <& /Articles/Article/Elements/SearchByCustomField, Field => $field, Name => $nomatches, Values => $ARGS{$nomatches} &>

    <&|/l&>Dates

    <&|/l&>Created <&|/l&>after <& /Elements/SelectDate, Name=>"Created>", Default => ($dates->{'Created>'} ? $dates->{'Created>'}->ISO : '') &> <&|/l&>and before <& /Elements/SelectDate, Name=>"Created<", Default => ($dates->{'Created<'} ? $dates->{'Created<'}->ISO:'')&>
    <&|/l&>Last updated <&|/l&>after <& /Elements/SelectDate, Name=>"LastUpdated>", Default => ($dates->{'LastUpdated>'} ? $dates->{'LastUpdated>'}->AsString:'')&> <&|/l&>and before <& /Elements/SelectDate, Name=>"LastUpdated<", Default => ($dates->{'LastUpdated<'} ? $dates->{'LastUpdated<'}->AsString:'')&>

    <&|/l&>Links

    <& LinkEntryInstructions &>
    <&|/l&>Refer to
    <&|/l&>Referred to by

    <&|/l&>Topics

    <& /Articles/Article/Elements/EditTopics, %ARGS, Classes => \@Classes, OnlyThisClass => 1 &>
    />
    <& /Elements/Submit, Label => loc('Search') &> <& /Widgets/TitleBoxEnd &> <%init> my @Classes = ( ref $ARGS{'Class'} eq 'ARRAY' ) ? @{ $ARGS{'Class'} } : ( $ARGS{'Class'} ); for (@Classes) { my $class = RT::Class->new( $session{'CurrentUser'} ); $class->LoadById($_); $_ = $class; } for my $field ( qw/Class Name Summary Article/ ) { $ARGS{"$field~"} = '' unless defined $ARGS{"$field~"}; $ARGS{"$field!~"} = '' unless defined $ARGS{"$field!~"}; } $RefersTo = '' unless defined $RefersTo; $ReferredToBy = '' unless defined $ReferredToBy; <%ARGS> $dates =>undef $RefersTo => '' $ReferredToBy => '' $customfields => undef rt-4.2.12/share/html/Articles/Article/Elements/ShowTopics000644 000765 000024 00000004364 12555754775 023712 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % my $topics = RT::ObjectTopics->new($session{'CurrentUser'}); % $topics->LimitToObject($article); % my @topics; % while (my $t = $topics->Next) { <& /Articles/Elements/ShowTopic, topic => $t->TopicObj &>
    % }
    <%args> $article => undef rt-4.2.12/share/html/Approvals/autohandler000644 000765 000024 00000004310 12555754775 021147 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> if ( $session{'CurrentUser'}->UserObj->HasRight( Right => 'ShowApprovalsTab', Object => $RT::System, ) ) { $m->call_next(%ARGS); } else { Abort("No permission to view approval"); } rt-4.2.12/share/html/Approvals/Display.html000644 000765 000024 00000005216 12555754775 021217 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &>
    <&| /Widgets/TitleBox, title => $title &> <& /Elements/ShowHistory , Object => $Ticket, ShowTitle => 0, ShowHeaders => 0, ShowDisplayModes => 0, ShowActions => 0, PathPrefix => RT->Config->Get('WebPath')."/Ticket/" &>
    <& Elements/Approve, ticket => $Ticket, ShowApproving => 0 &> <& /Elements/Submit&>
    <& Elements/ShowDependency, Ticket => $Ticket &> <%init> my $Ticket = LoadTicket($id); my $title = loc("Approval #[_1]: [_2]", $Ticket->Id, $Ticket->Subject); <%ARGS> $id => undef rt-4.2.12/share/html/Approvals/Elements/000755 000765 000024 00000000000 12555754775 020474 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Approvals/index.html000644 000765 000024 00000006750 12555754775 020725 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("My approvals") &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@actions &>
    <& Elements/PendingMyApproval, %ARGS &> <& /Elements/Submit, Label => loc('Go!') &>
    <%init> my (@actions); foreach my $arg ( keys %ARGS ) { next unless ( $arg =~ /Approval-(\d+)-Action/ ); my ( $notesval, $notesmsg ); my $ticket = LoadTicket($1); my $skip_update = 0; $m->callback( CallbackName => 'BeforeApproval', skip_update => \$skip_update, Ticket => $ticket, actions => \@actions); next if $skip_update; if ( $ARGS{ "Approval-" . $ticket->Id . "-Notes" } ) { my ( $notesval, $notesmsg ) = $ticket->Correspond( Content => $ARGS{ "Approval-" . $ticket->Id . "-Notes" } ); if ($notesval) { push ( @actions, loc("Approval #[_1]: Notes recorded",$ticket->Id )); } else { push ( @actions, loc("Approval #[_1]: Notes not recorded due to a system error",$ticket->Id )); } } my ($val, $msg); if ( $ARGS{$arg} eq 'deny' && $ticket->Status !~ /^(rejected|deleted)/ ) { ( $val, $msg ) = $ticket->SetStatus('rejected'); } elsif ( $ARGS{$arg} eq 'approve' && $ticket->Status ne 'resolved') { ( $val, $msg ) = $ticket->SetStatus('resolved'); } push ( @actions, loc("Approval #[_1]: [_2]",$ticket->id, $msg )) if ($msg); } rt-4.2.12/share/html/Approvals/Elements/Approve000644 000765 000024 00000011542 12555754775 022036 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    % if ($ShowApproving) { % foreach my $approving ( $ticket->AllDependedOnBy( Type => 'ticket' ) ) {
    <&|/l, $approving->Id, $approving->Subject &>Originating ticket: #[_1]
    % if ($ShowCustomFields) { <& /Ticket/Elements/ShowCustomFields, Ticket => $approving &> % } % if ($ShowHistory) { <& /Elements/ShowHistory, Object => $approving, ShowTitle => 0, ShowHeaders => 0, ShowDisplayModes => 0, ShowActions => 0, PathPrefix => RT->Config->Get('WebPath')."/Ticket/" &> % }
    % } % }
    % if ( $inactive && $status eq 'resolved' ) { % } else { % }
    % if ( $inactive && $status ne 'resolved' ) { % } else { % }
    % unless ( $inactive ) {
    % }
    <%ARGS> $ShowApproving => 1 $ShowCustomFields => 1 $ShowHistory => 1 $ticket => undef <%INIT> my $status = $ticket->Status; my $inactive = $ticket->LifecycleObj->IsInactive( $status ); rt-4.2.12/share/html/Approvals/Elements/PendingMyApproval000644 000765 000024 00000012365 12555754775 024025 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % my %done; % foreach ($tickets, $group_tickets) { % while (my $ticket = $_->Next() ) { % next if !$ARGS{'ShowDependent'} and $ticket->HasUnresolvedDependencies( Type => 'approval' ); % next if $done{$ticket->Id}++; # don't show duplicate tickets <& Approve, ticket => $ticket &> % } % } <&| /Widgets/TitleBox, title => loc("Search for approvals") &> />
    />
    />
    />
    <&|/l_unsafe, qq{"&>Only show approvals for requests created before [_1]
    <&|/l_unsafe, qq{"&>Only show approvals for requests created after [_1] <%init> my $tickets = RT::Tickets->new( $session{'CurrentUser'} ); $tickets->LimitOwner( VALUE => $session{'CurrentUser'}->Id ); # also consider AdminCcs as potential approvers. my $group_tickets = RT::Tickets->new( $session{'CurrentUser'} ); $group_tickets->LimitWatcher( VALUE => $session{'CurrentUser'}->EmailAddress, TYPE => 'AdminCc' ); my $created_before = RT::Date->new( $session{'CurrentUser'} ); my $created_after = RT::Date->new( $session{'CurrentUser'} ); foreach ($tickets, $group_tickets) { $_->LimitType( VALUE => 'approval' ); if ( $ARGS{'ShowResolved'} ) { $_->LimitStatus( VALUE => 'resolved' ); } if ( $ARGS{'ShowRejected'} ) { $_->LimitStatus( VALUE => 'rejected' ); } if ( $ARGS{'ShowPending'} || ( !$ARGS{'ShowRejected'} && !$ARGS{'Resolved'} ) ) { $_->LimitStatus( VALUE => 'open' ); $_->LimitStatus( VALUE => 'new' ); $_->LimitStatus( VALUE => 'stalled' ); } if ( $ARGS{'CreatedBefore'} ) { $created_before->Set( Format => 'unknown', Value => $ARGS{'CreatedBefore'} ); $_->LimitCreated( OPERATOR => "<=", VALUE => $created_before->ISO ); } if ( $ARGS{'CreatedAfter'} ) { $created_after->Set( Format => 'unknown', Value => $ARGS{'CreatedAfter'} ); $_->LimitCreated( OPERATOR => ">=", VALUE => $created_after->ISO ); } $_->OrderBy( FIELD => 'id' ); } rt-4.2.12/share/html/Approvals/Elements/ShowDependency000644 000765 000024 00000007636 12555754775 023352 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % my $approving = $Ticket->DependedOnBy(); % if ($approving->Count) {

    <&|/l&>Tickets which depend on this approval:

      <%PERL> my %show; while (my $link = $approving->Next()) { next unless ($link->BaseURI->IsLocal()); my $text = ''; my $head = ''; my $type = $link->BaseObj->Type; my $dep = $m->scomp('ShowDependency', Ticket => $link->BaseObj, _seen => $_seen); if ($type eq 'approval') { $head .= $m->scomp('/Widgets/TitleBoxStart', title => loc("Approval #[_1]: [_2]", $link->BaseObj->Id, $link->BaseObj->Subject)); $text .= $head; $text .= $m->scomp('/Ticket/Elements/ShowCustomFields', Ticket => $link->BaseObj); } elsif ($type eq 'ticket') { $head .= $m->scomp('/Widgets/TitleBoxStart', title => loc("Ticket #[_1]: [_2]", $link->BaseObj->Id, $link->BaseObj->Subject)); $text .= $head; $text .= $m->scomp('/Ticket/Elements/ShowSummary', Ticket => $link->BaseObj); } else { $head .= $m->scomp('/Widgets/TitleBoxStart', title => loc("#[_1]: [_2]", $link->BaseObj->Id, $link->BaseObj->Subject)); $text .= $head; } $text .= $m->scomp('/Elements/ShowHistory' , Object => $link->BaseObj, ShowTitle => 0, ShowHeaders => 0, ShowDisplayModes => 0, ShowActions => 0, PathPrefix => RT->Config->Get('WebPath')."/Ticket/"); $head .= $m->scomp('/Widgets/TitleBoxEnd'); $text .= $m->scomp('/Widgets/TitleBoxEnd'); $text .= $dep; $text .= ''; $show{$link->BaseObj->Id} = { text => $text, head => $head, }; } my $refer; foreach my $id (sort keys %show) { if ($_seen->{$id}++) { $refer .= "" . $show{$id}{head} . ""; next; } $m->print($show{$id}{text}); } $m->print($refer);
    % } <%ARGS> $Ticket $_seen => {} rt-4.2.12/share/html/Admin/Articles/000755 000765 000024 00000000000 12555754775 017547 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/autohandler000644 000765 000024 00000004245 12555754775 020237 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> return $m->call_next(%ARGS) if $session{'CurrentUser'}->UserObj->HasRight( Right => 'ShowConfigTab', Object => $RT::System, ); $m->clear_and_abort(403); rt-4.2.12/share/html/Admin/CustomFields/000755 000765 000024 00000000000 12555754775 020402 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Elements/000755 000765 000024 00000000000 12555754775 017555 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Global/000755 000765 000024 00000000000 12555754775 017201 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Groups/000755 000765 000024 00000000000 12555754775 017260 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/index.html000644 000765 000024 00000004313 12555754775 017777 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('RT Administration') &> <& /Elements/Tabs &> <& /Elements/ListMenu, menu => Menu()->child('admin') &> % if (RT->Config->Get('ShowRTPortal')) { <& /Admin/Elements/Portal &> % } rt-4.2.12/share/html/Admin/Queues/000755 000765 000024 00000000000 12555754775 017250 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Scrips/000755 000765 000024 00000000000 12555754775 017244 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Tools/000755 000765 000024 00000000000 12555754775 017101 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Users/000755 000765 000024 00000000000 12555754775 017102 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Users/CustomFields.html000644 000765 000024 00000005042 12555754775 022372 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, Object => $Object, ObjectType => 'RT::User' &> <%INIT> my $Object = RT::User->new( $session{'CurrentUser'} ); $Object->Load($id) || Abort( loc( "Couldn't load object [_1]", $id ) ); my $FriendlySubTypes = RT::CustomField->new( $session{'CurrentUser'} ) ->FriendlyLookupType( $Object->CustomFieldLookupType ); my $title = loc( 'Edit Custom Fields for [_1]', $Object->Name ); <%ARGS> $id => undef rt-4.2.12/share/html/Admin/Users/DashboardsInMenu.html000644 000765 000024 00000010114 12555754775 023153 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@actions &>

    % for my $pane (@panes) { <&|/Widgets/TitleBox, title => loc('Dashboards in menu'), bodyclass => "" &> <& /Widgets/SelectionBox:show, self => $pane &>
    % } <%init> my @actions; my $UserObj = RT::User->new($session{'CurrentUser'}); $UserObj->Load($id) || Abort("Couldn't load user '" . ($id || '') . "'"); my $title = loc("Dashboards in menu for the user [_1]", $UserObj->Name); if ($ARGS{Reset}) { my ($ok, $msg) = $UserObj->SetPreferences('DashboardsInMenu', {}); push @actions, $ok ? loc('Preferences saved for user [_1].', $UserObj->Name) : $msg; } my ($default_dashboards) = RT::System->new($session{'CurrentUser'})->Attributes->Named('DashboardsInMenu'); my $user = RT::CurrentUser->new( $session{CurrentUser} ); $user->Load( $UserObj->id ); my @dashboards = map { [ $_->id, $_->Name ] } $m->comp( "/Dashboards/Elements/ListOfDashboards", User => $user, IncludeSuperuserGroups => 0 ); my $current_pref = $UserObj->Preferences( 'DashboardsInMenu', $default_dashboards ? $default_dashboards->Content : () ); my $current_portlets = $current_pref && $current_pref->{dashboards} ? $current_pref->{dashboards} : []; my @panes = $m->comp( '/Admin/Elements/ConfigureDashboardsInMenu', Action => "DashboardsInMenu.html?id=$id", panes => ['dashboards_in_menu'], items => \@dashboards, current_portlets => $current_portlets, OnSave => sub { my ($conf) = @_; my ( $ok, $msg ) = $UserObj->SetPreferences( 'DashboardsInMenu', $conf ); push @actions, $ok ? loc('Preferences saved for dashboards in menu.') : $msg; } ); $m->comp( '/Widgets/SelectionBox:process', %ARGS, self => $_ ) for @panes; <%ARGS> $id => undef rt-4.2.12/share/html/Admin/Users/History.html000644 000765 000024 00000004604 12555754775 021435 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ShowHistory, Object => $UserObj, ShowDisplayModes => 0, DisplayPath => 'History.html', &> <%INIT> my $UserObj = RT::User->new($session{'CurrentUser'}); $UserObj->Load($id) || Abort("Couldn't load user '$id'"); my $title = loc("History of the user [_1]", $UserObj->Name); <%ARGS> $id => '' rt-4.2.12/share/html/Admin/Users/index.html000644 000765 000024 00000013616 12555754775 021106 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Select a user') &> <& /Elements/Tabs &>

    <% $caption %>

    % foreach my $field( qw(Format Rows Page Order OrderBy) ) { % next unless defined $ARGS{ $field } && length $ARGS{ $field }; % } <&|/l&>Go to user
    % foreach my $field( qw(Format Rows Page Order OrderBy) ) { % next unless defined $ARGS{ $field } && length $ARGS{ $field }; % } <&|/l&>Find all users whose <& /Elements/SelectUsers, %ARGS, Fields => \@fields &>
    />
    % unless ( $users->Count ) { <&|/l&>No users matching search criteria found. % } else {

    <&|/l&>Select a user:

    <& /Elements/CollectionList, OrderBy => 'Name', Order => 'ASC', Rows => $Rows, %ARGS, Format => $Format, Collection => $users, AllowSorting => 1, PassArguments => [qw(Format Rows Page Order OrderBy UserString UserOp UserField IdLike EmailLike FindDisabledUsers)], &> % } <%INIT> my $caption; my $users = RT::Users->new( $session{'CurrentUser'} ); $users->FindAllRows if $FindDisabledUsers; if ( defined($UserString) && length $UserString ) { $caption = loc("Users matching search criteria"); if ( $UserField =~ /^CustomField-(\d+)/ ) { $users->LimitCustomField( CUSTOMFIELD => $1, OPERATOR => $UserOp, VALUE => $UserString, ); } else { $users->Limit( FIELD => $UserField, OPERATOR => $UserOp, VALUE => $UserString, ); } RT::Interface::Web::Redirect(RT->Config->Get('WebURL')."Admin/Users/Modify.html?id=".$users->First->id) if $users->Count == 1; } else { $caption = loc("Privileged users"); $users->LimitToPrivileged; } $Format ||= RT->Config->Get('AdminSearchResultFormat')->{'Users'}; my $Rows = RT->Config->Get('AdminSearchResultRows')->{'Users'} || 50; # Build up the list of fields to display for searching my $i = 0; my %sorted = map { $_ => $i++ } qw( Name EmailAddress RealName Organization NickName WorkPhone HomePhone MobilePhone PagerPhone Address1 Address2 City State Zip Country Timezone Lang Gecos SMIMECertificate Comments ); my @attrs = sort { $sorted{$a} <=> $sorted{$b} } grep { !/(?:^id$|ContactInfo|Encoding|^External|System|PGPKey|AuthToken|^Last|^Creat(?:ed|or)$|^Signature$)/ } RT::User->ReadableAttributes; my @fields; for my $name (@attrs) { my $label = $m->comp( '/Elements/ColumnMap', Class => 'RT__User', Name => $name, Attr => 'title' ); push @fields, [ $name, $label || $name ]; } <%ARGS> $Format => undef, $UserString => undef $UserOp => '=' $UserField => 'Name' $IdLike => undef $EmailLike => undef $FindDisabledUsers => 0 rt-4.2.12/share/html/Admin/Users/Keys.html000644 000765 000024 00000011025 12555754775 020702 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc("[_1]'s encryption keys",$UserObj->Name) &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &> % if ( $email ) { <& /Admin/Elements/ShowKeyInfo, EmailAddress => $email &> % } else {

    <% loc("User has empty email address") %>

    % }
    % if (RT::Crypt->UseForOutgoing eq 'GnuPG') { <&|/Widgets/TitleBox, title => loc('GnuPG private key') &> <& /Widgets/Form/Select, Name => 'PrivateKey', Description => loc('Private Key'), Values => \@potential_keys, CurrentValue => $UserObj->PrivateKey, DefaultLabel => loc('No private key'), &> % } % if (RT::Crypt->UseForOutgoing eq 'SMIME') { <&|/Widgets/TitleBox, title => loc('SMIME Certificate') &> % } <& /Elements/Submit, Name => 'Update', Label => loc('Save Changes') &>
    <%ARGS> $id => undef $Update => undef <%INIT> return unless RT->Config->Get('Crypt')->{'Enable'}; my @results; my $UserObj = RT::User->new( $session{'CurrentUser'} ); $UserObj->Load( $id ); unless ( $UserObj->id ) { Abort( loc("Couldn't load user #[_1]", $id) ); } $id = $ARGS{'id'} = $UserObj->id; my @potential_keys; my $email = $UserObj->EmailAddress; if (RT::Crypt->UseForOutgoing eq 'GnuPG') { my %keys_meta = RT::Crypt->GetKeysForSigning( Signer => $email, Protocol => 'GnuPG' ); @potential_keys = map $_->{'Key'}, @{ $keys_meta{'info'} || [] }; $ARGS{'PrivateKey'} = $m->comp('/Widgets/Form/Select:Process', Name => 'PrivateKey', Arguments => \%ARGS, Default => 1, ); if ( $Update ) { if (not $ARGS{'PrivateKey'} or grep {$_ eq $ARGS{'PrivateKey'}} @potential_keys) { if (($ARGS{'PrivateKey'}||'') ne ($UserObj->PrivateKey||'')) { my ($status, $msg) = $UserObj->SetPrivateKey( $ARGS{'PrivateKey'} ); push @results, $msg; } } else { push @results, loc("Invalid key [_1] for address '[_2]'", $ARGS{'PrivateKey'}, $email); } } } if (RT::Crypt->UseForOutgoing eq 'SMIME') { if ( $Update and ($ARGS{'SMIMECertificate'}||'') ne ($UserObj->SMIMECertificate||'') ) { my ($status, $msg) = $UserObj->SetSMIMECertificate( $ARGS{'SMIMECertificate'} ); push @results, $msg; } } rt-4.2.12/share/html/Admin/Users/Memberships.html000644 000765 000024 00000004037 12555754775 022252 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/MembershipsPage, %ARGS &> rt-4.2.12/share/html/Admin/Users/Modify.html000644 000765 000024 00000025252 12555754775 021225 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    %if ($Create) { % } else { % }
    <&| /Widgets/TitleBox, title => loc('Identity'), class => 'user-info-identity' &> <& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Identity', InTable => 1 &>
    <&|/l&>Username: <&|/l&>(required)
    <&|/l&>Email:
    <&|/l&>Real Name:
    <&|/l&>Nickname:
    <&|/l&>Unix login:
    <&|/l&>Language: <& /Elements/SelectLang, Name => 'Lang', Default => $UserObj->Lang//$ARGS{Lang} &>
    <&|/l&>Extra info:

    <&| /Widgets/TitleBox, title => loc('Access control'), class => 'user-info-access-control' &> Id && $UserObj->Disabled) ? '' : 'checked="checked"' |n%> />
    % my $PrivilegedChecked = ((!$Create && $UserObj->Privileged()) or (!$UserObj->Id and $ARGS{Privileged})) ? 'checked="checked"' : ''; />
    <& /Elements/EditPassword, User => $UserObj, Name => [qw(CurrentPass Pass1 Pass2)], &> <& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Access control' &> % $m->callback( %ARGS, CallbackName => 'LeftColumnBottom', UserObj => $UserObj );
    <&| /Widgets/TitleBox, title => loc('Location'), class => 'user-info-location' &> <& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Location', InTable => 1 &>
    <&|/l&>Organization:
    <&|/l&>Address1:
    <&|/l&>Address2:
    <&|/l&>City:
    <&|/l&>State:
    <&|/l&>Zip:
    <&|/l&>Country:

    <&| /Widgets/TitleBox, title => loc('Phone numbers'), class => 'user-info-phones' &> <& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Phones', InTable => 1 &>
    <&|/l&>Residence:
    <&|/l&>Work:
    <&|/l&>Mobile:
    <&|/l&>Pager:

    <& /Elements/EditCustomFieldCustomGroupings, Object => $UserObj &> % $m->callback( %ARGS, CallbackName => 'RightColumnBottom', UserObj => $UserObj );
    <&| /Widgets/TitleBox, title => loc('Comments about this user'), class => 'user-info-comments' &> %if (!$Create && $UserObj->Privileged) {
    <&| /Widgets/TitleBox, title => loc('Signature'), class => 'user-info-signature' &> % }
    % if ( $Create ) { <& /Elements/Submit, Label => loc('Create') &> % } else { <& /Elements/Submit, Label => loc('Save Changes') &> % }
    <%INIT> my $UserObj = RT::User->new($session{'CurrentUser'}); my ($title, @results); my ($val, $msg); $ARGS{Privileged} = $ARGS{Privileged} ? 1 : 0; delete $ARGS{Privileged} unless $ARGS{SetPrivileged}; $ARGS{Disabled} = $ARGS{Enabled} ? 0 : 1; delete $ARGS{Disabled} unless $ARGS{SetEnabled}; my @fields = qw(Name Comments Signature EmailAddress FreeformContactInfo Organization RealName NickName Lang EmailEncoding WebEncoding ExternalContactInfoId ContactInfoSystem Gecos ExternalAuthId AuthSystem HomePhone WorkPhone MobilePhone PagerPhone Address1 Address2 City State Zip Country ); if ($Create) { $title = loc("Create a new user"); } elsif ( defined $id && $id eq 'new') { ( $val, $msg ) = $UserObj->Create( (map {($_ => $ARGS{$_})} @fields), Privileged => $ARGS{'Privileged'}, Disabled => $ARGS{'Disabled'}, ); if ($val) { push @results, $msg; push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj ); $title = loc("Modify the user [_1]", $UserObj->Name); } else { push @results, loc('User could not be created: [_1]', $msg); $title = loc("Create a new user"); $Create = 1; } } else { $UserObj->Load($id) || $UserObj->Load($ARGS{Name}) || Abort("Couldn't load user '" . ( $ARGS{Name} || '') . "'"); $title = loc("Modify the user [_1]", $UserObj->Name); $m->callback( %ARGS, CallbackName => 'BeforeUpdate', User => $UserObj, ARGSRef => \%ARGS, Results => \@results ); my @fieldresults = UpdateRecordObject ( AttributesRef => \@fields, Object => $UserObj, ARGSRef => \%ARGS ); push (@results,@fieldresults); push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj ); if ( defined $ARGS{Privileged} and $ARGS{Privileged} != ($UserObj->Privileged || 0) ) { my ($code, $msg) = $UserObj->SetPrivileged($ARGS{Privileged}); push @results, loc('Privileged status: [_1]', loc_fuzzy($msg)); } if ( defined $ARGS{Disabled} and $ARGS{Disabled} != $UserObj->Disabled ) { my ($code, $msg) = $UserObj->SetDisabled($ARGS{Disabled}); push @results, $msg; } } if ( $UserObj->Id ) { # Deal with Password field my ($status, $msg) = $UserObj->SafeSetPassword( Current => $CurrentPass, New => $Pass1, Confirmation => $Pass2, ); push @results, $msg; if ( $id eq 'new' && !$status ) { push @results, loc("A password was not set, so user won't be able to login."); } } # This code does automatic redirection if any updates happen. MaybeRedirectForResults( Actions => \@results, Arguments => { id => $UserObj->Id }, ) if $UserObj->Id; <%ARGS> $id => undef $CurrentPass => undef $Pass1 => undef $Pass2 => undef $Create=> undef rt-4.2.12/share/html/Admin/Users/MyRT.html000644 000765 000024 00000011164 12555754775 020626 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@actions &>

    % for my $pane (@panes) { <&|/Widgets/TitleBox, title => loc('RT at a glance').': '.loc($pane->{Name}), bodyclass => "" &> <& /Widgets/SelectionBox:show, self => $pane &>
    % } <%init> my @actions; my $UserObj = RT::User->new($session{'CurrentUser'}); $UserObj->Load($id) || Abort("Couldn't load user '" . ($id || '') . "'"); my $title = loc("RT at a glance for the user [_1]", $UserObj->Name); if ($ARGS{Reset}) { my ($ok, $msg) = $UserObj->SetPreferences('HomepageSettings', {}); push @actions, $ok ? loc('Preferences saved for user [_1].', $UserObj->Name) : $msg; } my ($default_portlets) = RT::System->new($session{'CurrentUser'})->Attributes->Named('HomepageSettings'); my $portlets = $UserObj->Preferences('HomepageSettings', $default_portlets ? $default_portlets->Content : {}); my %allowed_components = map {$_ => 1} @{ RT->Config->Get('HomepageComponents') }; my @items; push @items, map {["component-$_", loc($_)]} sort keys %allowed_components; my $sys = RT::System->new( RT::CurrentUser->new($UserObj) ); my @objs = ($sys); push @objs, RT::SavedSearch->new( RT::CurrentUser->new( $UserObj ) )->ObjectsForLoading; for my $object (@objs) { for ($m->comp("/Search/Elements/SearchesForObject", Object => $object)) { my ($desc, $loc_desc, $search) = @$_; my $SearchType = $search->Content->{'SearchType'} || 'Ticket'; if ($object eq $sys && $SearchType eq 'Ticket') { push @items, ["system-$desc", $loc_desc]; } else { my $oid = ref($object).'-'.$object->Id.'-SavedSearch-'.$search->Id; my $type = ($SearchType eq 'Ticket') ? 'Saved Search' # loc : $SearchType; push @items, ["saved-$oid", loc($type).": $loc_desc"]; } } } my @panes = $m->comp( '/Admin/Elements/ConfigureMyRT', panes => ['body', 'sidebar'], Action => "MyRT.html?id=$id", items => \@items, current_portlets => $portlets, OnSave => sub { my ( $conf, $pane ) = @_; my ($ok, $msg) = $UserObj->SetPreferences( 'HomepageSettings', $conf ); push @actions, $ok ? loc('Preferences [_1] for user [_2].', $pane, $UserObj->Name) : $msg; } ); $m->comp( '/Widgets/SelectionBox:process', %ARGS, self => $_ ) for @panes; <%ARGS> $id => undef rt-4.2.12/share/html/Admin/Tools/Configuration.html000644 000765 000024 00000026242 12555754775 022604 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> require Module::Versions::Report; my $title = loc('System Configuration'); unless ($session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser')) { Abort(loc('This feature is only available to system administrators')); } <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <&|/Widgets/TitleBox, title => loc("RT Configuration") &> <%PERL> my $index_conf; foreach my $key ( RT->Config->Options( Overridable => undef, Sorted => 0 ) ) { my $val = RT->Config->GetObfuscated( $key, $session{'CurrentUser'} ); next unless defined $val; my $meta = RT->Config->Meta( $key ); my $description = ''; if ( $meta->{'Source'}{'Extension'} && $meta->{'Source'}{'SiteConfig'} ) { $description = loc("[_1] site config", $meta->{'Source'}{'Extension'}); } elsif ( $meta->{'Source'}{'Extension'} ) { $description = loc("[_1] core config", $meta->{'Source'}{'Extension'}); } elsif ( $meta->{'Source'}{'SiteConfig'} ) { $description = loc("site config"); } else { $description = loc("core config"); } $index_conf++; % }
    <&|/l&>Option <&|/l&>Value <&|/l&>Source
    <% $key %> % if ( $key =~ /Password/i and $key !~ /MinimumPasswordLength|AllowLoginPasswordAutoComplete/ ) { <% loc('Password not printed' ) %>\ % } else { <% stringify($val) |n %>\ % } % if ( $meta->{'Source'}{'SiteConfig'} ) { <% $description %> % } else { <% $description %> % }
    <&|/Widgets/TitleBox, title=> loc("RT core variables") &> <%PERL> { no strict qw/refs/; my %config_opt = map { $_ => 1 } RT->Config->Options( Overridable => undef ); my $index_var; foreach my $key ( sort keys %{*RT::} ) { next if !${'RT::'.$key} || ref ${'RT::'.$key} || $config_opt{ $key }; $index_var++; % } % }
    <&|/l&>Variable <&|/l&>Value
    RT::<% $key %> % if ( $key =~ /Password(?!Length)/i ) { <% loc('Password not printed' ) %>\ % } else { <% ${'RT::'.$key} %> % }
    <&|/Widgets/TitleBox, title => loc("RT Size") &> <%PERL> my ($index_size, $user_count, $privileged_count); for my $type (qw/Tickets Queues Transactions Groups PrivilegedUsers UnprivilegedUsers/) { my $count; my $class = 'RT::' . $type; $class =~ s/Privileged|Unprivileged//; my $collection = $class->new(RT->SystemUser); $collection->UnLimit; $collection->FindAllRows; # find disabled if ($type =~ /PrivilegedUsers/) { $user_count = $collection->CountAll; $collection->LimitToPrivileged; $count = $privileged_count = $collection->CountAll; } elsif ($type =~ /UnprivilegedUsers/) { $count = $user_count - $privileged_count; } else { $count = $collection->CountAll; } $index_size++; % }
    <&|/l&>Object <&|/l&>Size
    <% $type %> <% $count %>
    <&|/Widgets/TitleBox, title => loc("Mason template search order") &>
      % foreach my $path ( RT::Interface::Web->ComponentRoots ) {
    1. <% $path %>
    2. % }
    <&|/Widgets/TitleBox, title => loc("Static file search order") &>
      % foreach my $path ( (map {$_->{root}} RT->Config->Get('StaticRoots')), % RT::Interface::Web->StaticRoots ) {
    1. <% $path %>
    2. % }
    <&|/Widgets/TitleBox, title => loc("Perl library search order") &>
      % foreach my $inc (@INC) {
    1. <% $inc %>
    2. % }
    <&|/Widgets/TitleBox, title=> loc("Loaded config files") &>
      % foreach my $config (RT->Config->LoadedConfigs) { % if ($config->{site}) {
    1. <% $config->{filename} %>
    2. % } else {
    3. <% $config->{filename} %>
    4. % } % }
    <&|/Widgets/TitleBox, title=> loc("Logging summary") &> <& /Admin/Elements/LoggingSummary &>
    <&|/Widgets/TitleBox, title => loc("Global Attributes") &> % my $attrs = $RT::System->Attributes; % my $index_size = 0; % while ( my $attr = $attrs->Next ) { % next if $attr->Name eq 'UpgradeHistory'; % if ($attr->Name eq 'UserLogo') { % my $content = $attr->Content; % $content->{data} = defined $content->{data} ? 'DATA' : 'undef' % if exists $content->{data}; % } else { % } % $index_size++; % }
    <&|/l&>Name <&|/l&>Value
    <% $attr->Name %><% stringify($content) |n %><% $attr->Name %><% stringify($attr->Content) |n %>
    <&|/Widgets/TitleBox, title => loc("Loaded perl modules")&> <%perl> my $i = 0; my $report = Module::Versions::Report::report(); my @report = grep /v\d/, split("\n",$report); shift @report; # throw away the perl version my ($ver, $source, $distfile); foreach my $item (@report) { if ($item =~ /^\s*(.*?)\s*v(\S+);/) { $item = $1; $ver = $2; $distfile = $item.".pm"; $distfile =~ s|::|/|g; } % }
    <&|/l&>Module <&|/l&>Version <&|/l&>Source
    <% $item %> <%$ver%> <% $INC{$distfile} || '' %>
    <&|/Widgets/TitleBox, title => loc("RT upgrade history")&> <& /Admin/Elements/UpgradeHistory &> <&|/Widgets/TitleBox, title => loc("Perl configuration") &> % require Config;
    <% Config::myconfig() %>
    
    <&|/Widgets/TitleBox, title=> loc("Environment variables") &> % my $row = 0; % for my $key (sort keys %ENV) { % }
    <&|/l&>Variable <&|/l&>Value
    <% $key %> <% $ENV{$key} %>
    <&|/Widgets/TitleBox, title => loc("Operating System") &> <%perl> my @os = ( "Distribution" => 'lsb_release --all', "uname -a" => 'uname -a', "SELinux status" => 'getenforce', "Apache" => [map { "$_ -V" } qw(apache2ctl apachectl httpdctl)], "nginx" => 'nginx -V 2>&1', "lighttpd" => 'lighttpd -V', ); my @os_info; while (my ($name, $cmd) = splice @os, 0, 2) { $cmd = [$cmd] unless ref $cmd eq 'ARRAY'; for my $run (@$cmd) { $run .= " /; my $result = `$run`; if (defined $result and $result =~ /\S/) { push @os_info, $name => $result; last; } } } my $row = 1; % while (my ($name, $output) = splice @os_info, 0, 2) { "> % }
    Deployment type <% $INC{'mod_perl.pm'} ? "mod_perl" : $INC{'FCGI.pm'} ? "fastcgi" : "standalone" %>
    <% $name %> <% $output %>
    <%INIT> use Data::Dumper; local $Data::Dumper::Terse = 1; local $Data::Dumper::Indent = 2; sub stringify { my $value = shift; my $output = Dumper $value; RT::Interface::Web::EscapeHTML(\$output); $output =~ s/ / /g; $output =~ s!\n!
    !g; return $output; } rt-4.2.12/share/html/Admin/Tools/index.html000644 000765 000024 00000004213 12555754775 021076 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('System Tools') &> <& /Elements/Tabs &> <& /Elements/ListMenu, menu => Menu()->child('admin')->child('tools') &> rt-4.2.12/share/html/Admin/Tools/Queries.html000644 000765 000024 00000012716 12555754775 021413 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> my $title = loc('SQL Queries'); unless ($session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser')) { Abort(loc('This feature is only available to system administrators.')); } <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <&|/Widgets/TitleBox, title => loc('SQL Queries') &> % my $history = $RT::Handle->QueryHistory; % if (!RT->Config->Get('StatementLog')) {

    <&|/l&>You must set StatementLog to true to enable this query history page.

    % } elsif (!$history) {

    <&|/l&>This server process has recorded no SQL queries.

    % } else {
      % my $r = 0; % for my $request (@$history) { % ++$r; % my ($seconds, $count) = (0, 0); % for my $statement (@{ $request->{Queries} }) { % $seconds += $statement->[3]; % $count++; % }
    1. <% $request->{Path} %> - <&|/l, sprintf('%.4f', $seconds) &>[_1]s );"><&|/l, $count &>Toggle [quant,_1,query,queries] % my $s = 0; % my @undup; % for my $statement (@{ $request->{Queries} }) { % my ($dup) = grep {$_->[1] eq $statement->[1]} @undup[-(@undup > 3?3:@undup)..-1]; % if ($dup) { % $dup->[2] = [$dup->[2]] unless $dup->[5]; % push @{$dup->[2]}, $statement->[2]; % $dup->[3] += $statement->[3]; % $dup->[5] ||= 1; $dup->[5]++; % } else { % push @undup, $statement; % } % } % for my $statement (@undup) { % my ( $time, $sql, $bind, $duration, $trace, $dup ) = @$statement; % $sql = $RT::Handle->FillIn($sql, $bind) unless $dup; % }
    2. % }
    % } rt-4.2.12/share/html/Admin/Tools/Shredder/000755 000765 000024 00000000000 12555754775 020641 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Tools/Theme.html000644 000765 000024 00000032355 12555754775 021041 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc("Theme"), &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>

    <&|/l&>Customize the RT theme

    1. <&|/l&>Select a color for the section:
      % if ($colors) {
      % for (@$colors) { % my $fg = $_->{l} >= $text_threshold ? 'black' : 'white'; % }
      % }

    <&|/l&>Custom CSS (Advanced)


    <%ONCE> my @sections = ( ['Page' => ['body', 'div#body']], ['Menu bar' => ['div#quickbar', '#main-navigation #app-nav.sf-shadow > li, #main-navigation #app-nav.sf-shadow > li > a, #prefs-menu > li, #prefs-menu > li > a, #logo .rtname']], ['Title bar' => ['div#header']], ['Page title' => ['div#header h1']], ['Page content' => ['div#body']], ['Buttons' => ['input[type="reset"], input[type="submit"], input[class="button"]']], ['Button hover' => ['input[type="reset"]:hover, input[type="submit"]:hover, input[class="button"]:hover']], ); <%INIT> unless ($session{'CurrentUser'}->HasRight( Object=> RT->System, Right => 'SuperUser')) { Abort(loc('This feature is only available to system administrators.')); } use Digest::MD5 'md5_hex'; my $text_threshold = 0.6; my @results; my $imgdata; my $colors; my $valid_image_types; if (not RT->Config->Get('DisableGD') and Convert::Color->require) { require GD; # Always find out what GD can read... my %gd_can; for my $type (qw(Png Jpeg Gif)) { $gd_can{$type}++ if GD::Image->can("newFrom${type}Data"); } $valid_image_types = join(", ", map { uc } sort { lc $a cmp lc $b } keys %gd_can); } my $analyze_img = sub { return undef unless $valid_image_types; my $imgdata = shift; return undef unless $imgdata; # ...but only analyze the image if we have data my $img = GD::Image->new($imgdata); unless ($img) { # This has to be one damn long line because the loc() needs to be # source parsed correctly. push @results, loc("Automatically suggested theme colors aren't available for your image. This might be because you uploaded an image type that your installed version of GD doesn't support. Supported types are: [_1]. You can recompile libgd and GD.pm to include support for other image types.", $valid_image_types); return undef; } my %colors; my @wsamples; my @hsamples; if ($img->width > 200) { @wsamples = map { int($img->width*($_/200)) } (0..199); } else { @wsamples = ( 0 .. $img->width - 1 ); } if ($img->height > 200) { @hsamples = map { int($img->height*($_/200)) } (0..199); } else { @hsamples = ( 0 .. $img->height - 1 ); } for my $i (@wsamples) { for my $j (@hsamples) { my @color = $img->rgb( $img->getPixel($i,$j) ); my $hsl = Convert::Color->new('rgb:'.join(',',map { $_ / 255 } @color))->convert_to('hsl'); my $c = join(',',@color); next if $hsl->lightness < 0.1; $colors{$c} ||= { h => $hsl->hue, s => $hsl->saturation, l => $hsl->lightness, cnt => 0, c => $c}; $colors{$c}->{cnt}++; } } for (values %colors) { $_->{rank} = $_->{s} * $_->{cnt}; } my @top5 = grep { defined and $_->{'l'} and $_->{'c'} } (sort { $b->{rank} <=> $a->{rank} } values %colors)[0..5]; return \@top5; }; if (my $file_hash = _UploadedFile( 'logo-upload' )) { $colors = $analyze_img->($file_hash->{LargeContent}); my $my_system = RT::System->new( $session{CurrentUser} ); my ( $id, $msg ) = $my_system->SetAttribute( Name => "UserLogo", Description => "User-provided logo", Content => { type => $file_hash->{ContentType}, data => $file_hash->{LargeContent}, hash => md5_hex($file_hash->{LargeContent}), colors => $colors, }, ); push @results, loc("Unable to set UserLogo: [_1]", $msg) unless $id; $imgdata = $file_hash->{LargeContent}; } elsif ($ARGS{'reset_logo'}) { RT->System->DeleteAttribute('UserLogo'); } else { if (my $attr = RT->System->FirstAttribute('UserLogo')) { my $content = $attr->Content; if (ref($content) eq 'HASH') { $imgdata = $content->{data}; $colors = $content->{colors}; unless ($colors) { # No colors cached; attempt to generate them $colors = $content->{colors} = $analyze_img->($content->{data}); if ($content->{colors}) { # Found colors; update the attribute RT->System->SetAttribute( Name => "UserLogo", Description => "User-provided logo", Content => $content, ); } } } else { RT->System->DeleteAttribute('UserLogo'); } } } if ($user_css) { if ($ARGS{'reset_css'}) { RT->System->DeleteAttribute('UserCSS'); undef $user_css; } else { my ($id, $msg) = RT->System->SetAttribute( Name => "UserCSS", Description => "User-provided css", Content => $user_css ); push @results, loc("Unable to set UserCSS: [_1]", $msg) unless $id; } } if (!$user_css) { my $attr = RT->System->FirstAttribute('UserCSS'); $user_css = $attr ? $attr->Content : join( "\n\n" => map { join "\n" => "/* ". $_->[0] ." */", map { "$_ {}" } @{$_->[1]} } @sections ); } <%ARGS> $user_css => '' rt-4.2.12/share/html/Admin/Tools/Shredder/autohandler000644 000765 000024 00000004510 12555754775 023072 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> unless( $session{'CurrentUser'}->HasRight( Right => 'SuperUser', Object => $RT::System ) ) { return $m->comp( 'Elements/Error/NoRights' ); } use RT::Shredder (); my $path = RT::Shredder->StoragePath; unless( -d $path && -w _ ) { return $m->comp( 'Elements/Error/NoStorage', Path => $path ); } $m->call_next(%ARGS); rt-4.2.12/share/html/Admin/Tools/Shredder/Dumps/000755 000765 000024 00000000000 12555754775 021731 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Tools/Shredder/Elements/000755 000765 000024 00000000000 12555754775 022415 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Tools/Shredder/index.html000644 000765 000024 00000013740 12555754775 022643 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Plugin => '' $Search => '' $Wipeout => '' @WipeoutObject => () <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &>
    <& /Elements/ListActions, actions => $messages{'Errors'} &> <& /Elements/ListActions, actions => $messages{'Success'} &> <& Elements/DumpFileLink, File => $dump_file &> <& Elements/SelectPlugin, Plugin => $Plugin, %ARGS &>
    <& /Elements/Submit, Name => 'Search', Label => loc('Search') &>

    % if( $Search || $Wipeout ) { <& Elements/SelectObjects, Objects => \@objs &> % }
    <%INIT> require RT::Shredder; my $title = loc('Shredder'); my %messages = ( Errors => [], Success => [] ); my ($plugin_obj, @objs); my $catch_non_fatals = sub { require RT::Shredder::Exceptions; if ( my $e = RT::Shredder::Exception::Info->caught ) { push @{ $messages{Errors} }, "$e"; $Search = ''; @objs = (); return 1; } if ( UNIVERSAL::isa( $@, 'Class::Exception' ) ) { $@->rethrow; } else { die $@; } }; if( $Plugin ) { { # use additional block({}) to effectively exit block on errors use RT::Shredder::Plugin; $plugin_obj = RT::Shredder::Plugin->new; my( $status, $msg ) = $plugin_obj->LoadByName( $Plugin ); unless( $status ) { push @{ $messages{Errors} }, $msg; $Search = ''; last; } my %args; foreach my $k( keys %ARGS ) { next unless $k =~ /^\Q$Plugin\E:(.*)$/; $args{ $1 } = $ARGS{$k}; } ( $status, $msg ) = $plugin_obj->HasSupportForArgs( keys %args ); unless( $status ) { push @{ $messages{Errors} }, $msg; $Search = ''; last; } ($status, $msg) = eval { $plugin_obj->TestArgs( %args ) }; $catch_non_fatals->() && last if $@; unless( $status ) { push @{ $messages{Errors} }, $msg; $Search = ''; last; } } } my $dump_file = ''; if( $Plugin && $Wipeout ) { { # use additional block({}) to effectively exit block on errors my $shredder = RT::Shredder->new( force => 1 ); my $backup_plugin = RT::Shredder::Plugin->new; my ($status, $msg) = $backup_plugin->LoadByName('SQLDump'); unless( $status ) { push @{ $messages{Errors} }, $msg; $Search = ''; @objs = (); last; } ($status, $msg) = $backup_plugin->TestArgs; unless( $status ) { push @{ $messages{Errors} }, $msg; $Search = ''; @objs = (); last; } ($dump_file) = $backup_plugin->FileName; push @{ $messages{'Success'} }, "SQL dump file is '$dump_file'"; $shredder->AddDumpPlugin( Object => $backup_plugin ); $shredder->PutObjects( Objects => \@WipeoutObject ); ($status, $msg) = $plugin_obj->SetResolvers( Shredder => $shredder ); unless( $status ) { push @{ $messages{Errors} }, $msg; $Search = ''; @objs = (); last; } eval { $shredder->WipeoutAll }; $catch_non_fatals->() && last if $@; push @{ $messages{Success} }, loc('objects were successfuly removed'); } } if( $Plugin && ( $Search || $Wipeout ) ) { { # use additional block({}) to effectively exit block on errors my $status; ($status, @objs) = eval { $plugin_obj->Run }; $catch_non_fatals->() && last if $@; unless( $status ) { push @{ $messages{Errors} }, $objs[0]; $Search = ''; @objs = (); last; } push @{ $messages{Success} }, loc('executed plugin successfuly'); my $shredder = RT::Shredder->new; foreach my $o( grep defined, splice @objs ) { eval { push @objs, $shredder->CastObjectsToRecords( Objects => $o ) }; $catch_non_fatals->() && last if $@; } unless( @objs ) { push @{ $messages{Success} }, loc('plugin returned empty list'); } else { push @{ $messages{Success} }, loc('see object list below'); } } } rt-4.2.12/share/html/Admin/Tools/Shredder/Elements/DumpFileLink000644 000765 000024 00000004604 12555754775 024667 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $File => '' <%INIT> return unless $File; use File::Spec (); use RT::Shredder (); $File = File::Spec->abs2rel( $File, RT::Shredder->StoragePath ) if File::Spec->file_name_is_absolute($File); rt-4.2.12/share/html/Admin/Tools/Shredder/Elements/Error/000755 000765 000024 00000000000 12555754775 023506 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Tools/Shredder/Elements/Object/000755 000765 000024 00000000000 12555754775 023623 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Tools/Shredder/Elements/ObjectCheckBox000644 000765 000024 00000004560 12555754775 025162 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Object => undef % if( $m->comp_exists( $path ) ) { % $m->comp( $path, Object => $Object ); % } else { <% $Object->UID %> % }
    <%ONCE> require File::Spec; <%INIT> my $path = ref $Object; $path =~ s/:/-/g; $path = File::Spec->catfile( 'Object', $path ); rt-4.2.12/share/html/Admin/Tools/Shredder/Elements/PluginArguments000644 000765 000024 00000004747 12555754775 025500 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Plugin => ''
    <% loc('Fill arguments') %>:
    % foreach my $a( $plugin_obj->SupportArgs ) { <% loc($a) %>:" value="<% $ARGS{ "$Plugin:$a" } || '' %>" />
    % }
    <%INIT> use RT::Shredder::Plugin; my $plugin_obj = RT::Shredder::Plugin->new; my ($status, $msg) = $plugin_obj->LoadByName( $Plugin ); die $msg unless $status; rt-4.2.12/share/html/Admin/Tools/Shredder/Elements/PluginHelp000644 000765 000024 00000005257 12555754775 024420 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Plugin => ''
    <% $text |n%>
    <%ONCE> use RT::Shredder::Plugin; my $plugin_obj = RT::Shredder::Plugin->new; my %plugins = $plugin_obj->List; <%INIT> my $file = $plugins{ $Plugin }; unless( $file ) { $RT::Logger->error( "Couldn't find plugin '$Plugin'" ); return; } use RT::Shredder::POD qw(); my $text = ''; open( my $io_handle, ">:scalar", \$text ) or die "Can't open scalar for write: $!"; RT::Shredder::POD::plugin_html( $file, $io_handle ); if ( $Plugin eq 'Base' ) { $file =~ s/\.pm$/\/Search.pm/; RT::Shredder::POD::plugin_html( $file, $io_handle ); } close $io_handle; rt-4.2.12/share/html/Admin/Tools/Shredder/Elements/SelectObjects000644 000765 000024 00000005051 12555754775 025072 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> @Objects => ()
    % unless( @Objects ) { <& /Elements/ListActions, actions => [loc("Objects list is empty")] &> % } else {
    <% loc("click to check/uncheck all objects at once") %>
    % foreach my $o( @Objects ) { <& ObjectCheckBox, Object => $o &> % }
    <& /Elements/Submit, Name => 'Wipeout', Label => loc('Wipeout') &> % }
    <%INIT> rt-4.2.12/share/html/Admin/Tools/Shredder/Elements/SelectPlugin000644 000765 000024 00000005400 12555754775 024735 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Plugin => '' <& PluginHelp, %ARGS, Plugin => 'Base' &>
    Select plugin:
    % foreach my $p( keys %plugins ) {
    <& PluginHelp, %ARGS, Plugin => $p &> <& PluginArguments, %ARGS, Plugin => $p &>
    % }
    <%ONCE> use RT::Shredder::Plugin; my $plugin_obj = RT::Shredder::Plugin->new; my %plugins = $plugin_obj->List('Search'); rt-4.2.12/share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment000644 000765 000024 00000004560 12555754775 026243 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Object => undef % my $name = (defined $Object->Filename and length $Object->Filename) ? $Object->Filename : loc("(no value)"); <% loc('Attachment') %>(<% loc('id') %>:<% $Object->id %>, <% loc('Filename') %>: <% $name %>) rt-4.2.12/share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket000644 000765 000024 00000004345 12555754775 025377 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Object => undef <% loc('Ticket') %>(<% loc('id') %>:<% $Object->id %>, <% loc('Subject') %>: <% substr($Object->Subject, 0, 30) %>...) rt-4.2.12/share/html/Admin/Tools/Shredder/Elements/Object/RT--User000644 000765 000024 00000004317 12555754775 025071 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Object => undef <% loc('User') %>(<% loc('id') %>:<% $Object->id %>, <% loc('Name') %>: <% $Object->Name %>) rt-4.2.12/share/html/Admin/Tools/Shredder/Elements/Error/NoRights000644 000765 000024 00000004206 12555754775 025170 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => 'Error' &> <& /Elements/Tabs &>
    <% loc("You don't have SuperUser right.") |n%>
    rt-4.2.12/share/html/Admin/Tools/Shredder/Elements/Error/NoStorage000644 000765 000024 00000004566 12555754775 025345 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Path => '' <& /Admin/Elements/Header, Title => 'Error' &> <& /Elements/Tabs &>
    % my $path_tag = q{} . $m->interp->apply_escapes($Path, 'h') . q{}; <&|/l_unsafe, $path_tag &>Shredder needs a directory to write dumps to. Please ensure that the directory [_1] exists and that it is writable by your web server.
    rt-4.2.12/share/html/Admin/Tools/Shredder/Dumps/dhandler000644 000765 000024 00000004577 12555754775 023452 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ATTR> AutoFlush => 0 <%INIT> my $arg = $m->dhandler_arg; $m->abort(404) if $arg =~ m{\.\.|/|\\}; use File::Spec (); use RT::Shredder (); my $File = File::Spec->catfile( RT::Shredder->StoragePath, $arg ); $r->content_type('application/octets-stream'); open my $fh, "<:raw", $File or $m->abort(404); my $buf; while( read $fh, $buf, 1024*1024 ) { $m->out($buf); } $m->abort; rt-4.2.12/share/html/Admin/Scrips/Create.html000644 000765 000024 00000011421 12555754775 021334 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    <&| /Widgets/TitleBox, title => loc('Basics') &> <& Elements/EditBasics, %ARGS, Scrip => $scrip, Queue => $queue_obj &>
    <&|/l&>Stage:\ <& /Admin/Elements/SelectStage, Default => $ARGS{"Stage"} &>
      />
    <& /Elements/Submit, Label => loc('Create'), Name => 'Create', &> % if ($session{CurrentUser}->HasRight(Object => $RT::System, Right => 'ExecuteCode')) { <& Elements/EditCustomCode, %ARGS, Scrip => $scrip &> <& /Elements/Submit, Label => loc('Create'), Name => 'Create', &> % }
    <%ARGS> $Queue => 0 $Create => undef $Global => undef <%INIT> my @results; $ARGS{'Enabled'} = 1 unless $ARGS{'SetEnabled'}; my $queue_obj; if ( $Queue ) { $queue_obj = RT::Queue->new( $session{'CurrentUser'} ); $queue_obj->Load( $Queue ); Abort( loc("Couldn't load queue [_1]", $Queue) ) unless $queue_obj->id; } my $title; if ( $queue_obj ) { $title = loc('Create a scrip and add to queue [_1]', $queue_obj->Name ); } else { $title = loc('Create a global scrip'); } my $scrip = RT::Scrip->new( $session{'CurrentUser'} ); if ( $Create ) { my ($status, $msg) = $scrip->Create( Description => $ARGS{"Description"}, Queue => $Queue || 0, Stage => $ARGS{"Stage"}, Disabled => $ARGS{"Disabled"}, ScripAction => $ARGS{"ScripAction"}, ScripCondition => $ARGS{"ScripCondition"}, Template => $ARGS{"Template"}, CustomPrepareCode => $ARGS{"CustomPrepareCode"}, CustomCommitCode => $ARGS{"CustomCommitCode"}, CustomIsApplicableCode => $ARGS{"CustomIsApplicableCode"}, ); MaybeRedirectForResults( Force => 1, Actions => [ $msg ], Path => 'Admin/Scrips/Modify.html', Arguments => { id => $scrip->id, $Queue ? ( From => $Queue, ) : $Global ? ( From => 'Global', ) : () }, ) if $status; push @results, $msg; } rt-4.2.12/share/html/Admin/Scrips/Elements/000755 000765 000024 00000000000 12555754775 021020 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Scrips/index.html000644 000765 000024 00000005175 12555754775 021251 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Select a Scrip') &> <& /Elements/Tabs &> <& /Elements/CollectionList, OrderBy => 'Description', Order => 'ASC', Rows => $Rows, %ARGS, Collection => $scrips, Format => $Format, AllowSorting => 1, &> <%args> $Format => undef <%INIT> my $scrips = RT::Scrips->new( $session{'CurrentUser'} ); $scrips->FindAllRows; $scrips->UnLimit; $m->callback(CallbackName => 'Massage', Scrips => $scrips); $Format ||= RT->Config->Get('AdminSearchResultFormat')->{'Scrips'}; my $Rows = RT->Config->Get('AdminSearchResultRows')->{'Scrips'} || 50; rt-4.2.12/share/html/Admin/Scrips/Modify.html000644 000765 000024 00000011370 12555754775 021363 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc("Modify scrip #[_1]", $id) &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    <&| /Widgets/TitleBox, title => loc('Basics') &> <& Elements/EditBasics, %ARGS, Scrip => $scrip &> % if ( not $disabled ) { % }
    <&|/l&>Applies to: \ % if ( $scrip->IsGlobal ) { <% loc('Global') %> % } else { % my $added_to = $scrip->AddedTo; % my $found = 0; % while ( my $queue = $added_to->Next ) { % $m->out(', ') if $found++; \ <% $queue->Name %>\ % last if $found == 10; % } % $m->out(', ...') if $found == 10; % }
      />
    <& /Elements/Submit, Label => loc('Save Changes'), Name => 'Update', Reset => 1 &> % if ($session{CurrentUser}->HasRight(Object => $RT::System, Right => 'ExecuteCode')) { <& Elements/EditCustomCode, %ARGS, Scrip => $scrip &> <& /Elements/Submit, Label => loc('Save Changes'), Name => 'Update', Reset => 1 &> % }
    <%ARGS> $id => undef $Update => undef $From => undef <%INIT> my $scrip = RT::Scrip->new( $session{'CurrentUser'} ); $scrip->Load( $id ); Abort(loc("Couldn't load scrip #[_1]", $id)) unless $scrip->id; my $disabled = $scrip->Disabled; if ( $Update ) { my @attribs = qw( Description ScripAction ScripCondition CustomPrepareCode CustomCommitCode CustomIsApplicableCode ); push @attribs, "Template" if defined $ARGS{Template} and length $ARGS{Template}; if ($ARGS{"SetEnabled"}) { push @attribs, "Disabled"; $ARGS{"Disabled"} = not $ARGS{"Enabled"}; } my @results = UpdateRecordObject( AttributesRef => \@attribs, Object => $scrip, ARGSRef => \%ARGS ); MaybeRedirectForResults( Actions => \@results, Arguments => { id => $scrip->id, From => $From, }, ); } my $EnabledChecked = qq[checked="checked"]; $EnabledChecked = '' if $disabled; my @results; my ($ok, $msg) = $scrip->CompileCheck; push @results, $msg if !$ok; rt-4.2.12/share/html/Admin/Scrips/Objects.html000644 000765 000024 00000012636 12555754775 021533 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions &>
    % if ( $global ) {

    <&|/l&>Applies to all objects

    <& /Admin/Elements/SelectStageForAdded, Default => $Stage || $global->Stage, Label => loc("Select global scrip stage:") &> % } else {

    <&|/l&>Apply globally

    <&|/l&>Selected objects

    <& /Elements/CollectionList, OrderBy => 'id', Order => 'ASC', %ARGS, Collection => $added, Rows => 0, Page => 1, Format => $format, DisplayFormat => "'__CheckBox.{RemoveScrip-$id}__','__ScripStage.{$id}__',". $format, AllowSorting => 0, ShowEmpty => 0, PassArguments => [ qw(id Stage Format Rows Page Order OrderBy), ], &>

    <&|/l&>Unselected objects

    <& /Elements/CollectionList, OrderBy => 'Name', Order => 'ASC', %ARGS, Collection => $not_added, Rows => $rows, Format => $format, DisplayFormat => "'__CheckBox.{AddScrip-". $id ."}__',". $format, AllowSorting => 1, ShowEmpty => 0, PassArguments => [ qw(id Stage Format Rows Page Order OrderBy), ], &> <& /Admin/Elements/SelectStageForAdded, Default => $Stage &>
    <% loc('You can change template if needed') %>: <& Elements/SelectTemplate, Scrip => $scrip, Default => $Template &>
    % } <& /Elements/Submit, Name => 'Update' &>
    <%ARGS> $id => undef $Stage => undef $Template => '' $Update => 0 $From => undef <%INIT> my $scrip = RT::Scrip->new( $session{'CurrentUser'} ); $scrip->Load($id) or Abort(loc("Could not load scrip #[_1]", $id)); $id = $scrip->id; my $global = $scrip->IsGlobal; if ( $Update ) { my (@results); if ( $Template ) { my ($status, $msg) = $scrip->SetTemplate( $Template ); push @results, loc('Template: [_1]', $msg); } if ( defined (my $del = $ARGS{"RemoveScrip-$id"}) ) { foreach my $id ( ref $del? (@$del) : ($del) ) { my ($status, $msg) = $scrip->RemoveFromObject( $id ); push @results, $msg; } } if ( defined (my $add = $ARGS{"AddScrip-$id"}) ) { foreach my $id ( ref $add? (@$add) : ($add) ) { my ($status, $msg) = $scrip->AddToObject( $id, Stage => $Stage ); push @results, $msg; } } if ($global and $global->Stage ne $Stage) { my ($status, $msg) = $global->SetStage($Stage); push @results, $msg; } MaybeRedirectForResults( Actions => \@results, Arguments => { id => $id, From => $From, }, ); } my $added = $scrip->AddedTo; my $not_added = $scrip->NotAddedTo; my $format = RT->Config->Get('AdminSearchResultFormat')->{'Queues'}; my $rows = RT->Config->Get('AdminSearchResultRows')->{'Queues'} || 50; my $title = loc('Modify associated objects for scrip #[_1]', $id); rt-4.2.12/share/html/Admin/Scrips/Elements/EditBasics000644 000765 000024 00000005412 12555754775 022757 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&|/l&>Description:\ Description || '' %>" /> <&|/l&>Condition:\ <& /Admin/Elements/SelectScripCondition, Default => $ARGS{"ScripCondition"} || $Scrip->ConditionObj->Id, &> <&|/l&>Action:\ <& /Admin/Elements/SelectScripAction, Default => $ARGS{"ScripAction"} || $Scrip->ActionObj->Id, &> <&|/l&>Template:\ <& SelectTemplate, Default => $ARGS{"Template"}, Scrip => $Scrip, Queue => $Queue, &> <%ARGS> $Scrip $Queue => undef <%INIT> rt-4.2.12/share/html/Admin/Scrips/Elements/EditCustomCode000644 000765 000024 00000005532 12555754775 023623 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| /Widgets/TitleBox, title => loc('User Defined conditions and results') &> % while ( my ($method, $desc) = splice @list, 0, 2 ) { % }
    <&|/l&>(Use these fields when you choose 'User Defined' for a condition or action)
    <% $desc %>: % my $code = $ARGS{ $method } || $Scrip->$method() || ''; % my $lines = @{[ $code =~ /\n/gs ]} + 3; % $lines = $min_lines if $lines < $min_lines;
    <%ARGS> $Scrip <%INIT> my @list = ( CustomIsApplicableCode => loc('Custom condition'), CustomPrepareCode => loc('Custom action preparation code'), CustomCommitCode => loc('Custom action commit code'), ); my $min_lines = 10; rt-4.2.12/share/html/Admin/Scrips/Elements/SelectTemplate000644 000765 000024 00000007071 12555754775 023663 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Name => 'Template' $Queue => undef $Scrip => undef $Default => undef <%INIT> my $current; $current = $Scrip->Template if $Scrip; my @list; if ( $Scrip && $Scrip->id && !$Scrip->IsAddedToAny ) { my $templates = RT::Templates->new($session{'CurrentUser'}); $templates->UnLimit; @list = $templates->DistinctFieldValues('Name'); } else { my $global = RT::Templates->new($session{'CurrentUser'}); $global->LimitToGlobal; my %global; while (my $t = $global->Next) { $global{ lc $t->Name } = $t->Name } my @queues; push @queues, @{ $Scrip->AddedTo->ItemsArrayRef } if $Scrip && $Scrip->id; push @queues, $Queue if $Queue && $Queue->id; my (%names, %counters); foreach my $queue ( @queues ) { my $templates = RT::Templates->new($session{'CurrentUser'}); $templates->LimitToQueue( $queue->id ); foreach my $name ( map $_->Name, @{ $templates->ItemsArrayRef } ) { next if $global{ lc $name }; $counters{ lc $name }++; $names{lc $name} = $name; } } delete $counters{ $_ } foreach grep $counters{$_} != @queues, keys %counters; @list = map $global{$_} || $names{$_}, keys %global, keys %counters; } @list = sort { lc loc($a) cmp lc loc($b) } @list if @list; rt-4.2.12/share/html/Admin/Queues/CustomField.html000644 000765 000024 00000005073 12555754775 022361 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Elements/EditCustomField, title => $title, %ARGS &> <%INIT> my $QueueObj = RT::Queue->new($session{'CurrentUser'}); $QueueObj->Load($Queue); my ($title); unless($QueueObj->id) { Abort(loc("Queue [_1] not found", $Queue)); } if ($CustomField) { $title = loc('Modify a CustomField for queue [_1]', $QueueObj->Name()); }else { $title = loc('Create a CustomField for queue [_1]', $QueueObj->Name()); } <%ARGS> $CustomField => undef $Queue => 0 <%ATTR> AutoFlush => 0 rt-4.2.12/share/html/Admin/Queues/CustomFields.html000644 000765 000024 00000005110 12555754775 022534 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, Object => $Object, ObjectType => 'RT::Queue' &> <%INIT> my $Object = RT::Queue->new( $session{'CurrentUser'} ); $Object->Load($id) || Abort( loc( "Couldn't load object [_1]", $id ) ); my $FriendlySubTypes = RT::CustomField->new( $session{'CurrentUser'} ) ->FriendlyLookupType( $Object->CustomFieldLookupType ); my $title = loc( 'Custom Fields for queue [_1]', $Object->Name ); <%ARGS> $id => undef $SubType => 'RT::Queue-RT::Ticket' rt-4.2.12/share/html/Admin/Queues/GroupRights.html000644 000765 000024 00000005701 12555754775 022416 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Modify group rights for queue [_1]', $QueueObj->Name) &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    % $m->callback( %ARGS, QueueObj => $QueueObj, results => \@results, principals => \@principals ); <& /Admin/Elements/EditRights, Context => $QueueObj, Principals => \@principals &> <& /Elements/Submit, Label => loc('Save Changes') &>
    <%INIT> # Update the acls. my @results = ProcessACLs(\%ARGS); if (!defined $id) { Abort(loc("No Queue defined")); } my $QueueObj = RT::Queue->new($session{'CurrentUser'}); $QueueObj->Load($id) || Abort(loc("Couldn't load queue [_1]",$id)); # Principal collections my @principals = GetPrincipalsMap($QueueObj, qw(System Roles Groups)); <%ARGS> $id => undef rt-4.2.12/share/html/Admin/Queues/History.html000644 000765 000024 00000004636 12555754775 021610 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ShowHistory, Object => $QueueObj, ShowDisplayModes => 0, DisplayPath => 'History.html', &> <%INIT> my $QueueObj = RT::Queue->new($session{'CurrentUser'}); $QueueObj->Load($id) || Abort("Couldn't load queue '$id'"); my $title = loc("History of the queue [_1]", $QueueObj->Name); <%ARGS> $id => '' unless defined $id rt-4.2.12/share/html/Admin/Queues/index.html000644 000765 000024 00000011114 12555754775 021243 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc("Admin queues") &> <& /Elements/Tabs &>

    <%$caption%>

    % foreach my $field( qw(Format Rows Page Order OrderBy) ) { % next unless defined $ARGS{ $field } && length $ARGS{ $field }; % } <& /Elements/SelectMatch, Name => 'QueueOp', Default => $QueueOp &>
    />

    <&|/l&>Select a queue:

    % unless ( $queues->Count ) { <&|/l&>No queues matching search criteria found. % } else { <& /Elements/CollectionList, OrderBy => 'Name', Order => 'ASC', Rows => $Rows, %ARGS, Format => $Format, Collection => $queues, AllowSorting => 1, PassArguments => [qw( Format Rows Page Order OrderBy FindDisabledQueues QueueString QueueOp QueueField )], &> % } <%INIT> my $queues = RT::Queues->new($session{'CurrentUser'}); $queues->FindAllRows if $FindDisabledQueues; my ($caption); if ( defined $QueueString && length $QueueString ) { $caption = $FindDisabledQueues ? loc("All queues matching search criteria") : loc("Enabled queues matching search criteria"); $queues->Limit( FIELD => $QueueField, OPERATOR => $QueueOp, VALUE => $QueueString, ); RT::Interface::Web::Redirect(RT->Config->Get('WebURL')."Admin/Queues/Modify.html?id=".$queues->First->id) if $queues->Count == 1; } else { $queues->UnLimit; $caption = $FindDisabledQueues ? loc("All Queues") : loc("Enabled Queues"); } $Format ||= RT->Config->Get('AdminSearchResultFormat')->{'Queues'}; my $Rows = RT->Config->Get('AdminSearchResultRows')->{'Queues'} || 50; <%ARGS> $FindDisabledQueues => 0 $Format => undef $QueueField => 'Name' $QueueOp => 'LIKE' $QueueString => '' rt-4.2.12/share/html/Admin/Queues/Modify.html000644 000765 000024 00000024305 12555754775 021371 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    % my $CFs = $QueueObj->CustomFields; % while (my $CF = $CFs->Next) { % } % if ( RT->Config->Get('Crypt')->{'Enable'} ) { % } % unless ($InternalQueue) { % } % if ( RT->Config->Get('Crypt')->{'Enable'} ) { % }
    <&|/l&>Queue Name: % if ($InternalQueue) { <% $QueueObj->Name %> % } else { Name || $Name %>" /> % }
    <&|/l&>Description: Description || $Description || '' %>" size="60" />
    <&|/l&>Lifecycle: % if ($InternalQueue) { <% $QueueObj->Lifecycle %> % } else { <& /Widgets/Form/Select:InputOnly, Name => 'Lifecycle', Values => [ sort { loc($a) cmp loc($b) } RT::Lifecycle->List ], CurrentValue => $Create ? "default" : $QueueObj->Lifecycle || $ARGS{'Lifecycle'}, Default => 0, &> % }
    <&|/l&>Subject Tag: SubjectTag || '' ) %>" size="60" />
    <&|/l&>Reply Address: CorrespondAddress || $CorrespondAddress || '' %>" />
    <&|/l , RT->Config->Get('CorrespondAddress')&>(If left blank, will default to [_1])
    <&|/l&>Comment Address: CommentAddress || $CommentAddress || '' %>" />
    <&|/l , RT->Config->Get('CommentAddress')&>(If left blank, will default to [_1])
    <&|/l&>Priority starts at: <& /Elements/SelectPriority, Name => "InitialPriority", Default => $Create? 0: $QueueObj->InitialPriority || $InitialPriority, &> <&|/l&>Over time, priority moves toward: <& /Elements/SelectPriority, Name => "FinalPriority", Default => $Create? 0: $QueueObj->FinalPriority || $FinalPriority, &>
    <&|/l&>requires running rt-crontool
    <&|/l&>Requests should be due in: DefaultDueIn || $DefaultDueIn || "" %>" /> <&|/l&>days.
    <% $CF->Name %>: <& /Elements/EditCustomField, CustomField => $CF, Object => $QueueObj, &>
    Sign? 'checked="checked"': '' |n%> /> Encrypt? 'checked="checked"': '' |n%> />
    SignAuto? 'checked="checked"': '' |n%> />
    />
    % $m->callback( %ARGS, QueueObj => $QueueObj, results => \@results );
    % if ( my $email = $QueueObj->CorrespondAddress || RT->Config->Get('CorrespondAddress') ) { <& /Admin/Elements/ShowKeyInfo, Type => 'private', EmailAddress => $email &> % } else { <&|/Widgets/TitleBox, title => loc( 'Private keys') &> <&|/l&>You have enabled encryption support but have not set a correspondence address for this queue. <&|/l&>You must set a correspondence address for this queue in order to configure a private key. % }
    % if ( my $email = $QueueObj->CommentAddress || RT->Config->Get('CommentAddress') ) { <& /Admin/Elements/ShowKeyInfo, Type => 'private', EmailAddress => $email &> % } else { <&|/Widgets/TitleBox, title => loc( 'Private keys') &> <&|/l&>You have enabled encryption support but have not set a comment address for this queue. <&|/l&>You must set a comment address for this queue in order to configure a private key. %}
    % if ( $Create ) { <& /Elements/Submit, Label => loc('Create') &> % } else { <& /Elements/Submit, Label => loc('Save Changes') &> % }
    <%INIT> my ($title, @results, @no_redirect_results, $Disabled, $EnabledChecked); my $QueueObj = RT::Queue->new( $session{'CurrentUser'} ); $QueueObj->Load( $id ) if !$id || $id eq 'new'; $EnabledChecked = 'checked="checked"'; unless ($Create) { if ( defined $id && $id eq 'new' ) { my ($val, $msg) = $QueueObj->Create( Name => $Name ); if (!$val) { $Create = 1; # Create failed, so bring us back to step 1 } push @results, $msg; } else { $QueueObj->Load($id) || $QueueObj->Load($Name) || Abort(loc("Couldn't load queue '[_1]'", $Name)); } } if ( $QueueObj->Id ) { $title = loc('Configuration for queue [_1]', $QueueObj->Name ); my @attribs= qw(Description CorrespondAddress CommentAddress Name InitialPriority FinalPriority DefaultDueIn Sign SignAuto Encrypt Lifecycle SubjectTag Disabled); # we're asking about enabled on the web page but really care about disabled if ( $SetEnabled ) { $Disabled = $ARGS{'Disabled'} = $Enabled? 0: 1; } if ( $SetCrypt ) { $ARGS{$_} = 0 foreach grep !defined $ARGS{$_} || !length $ARGS{$_}, qw(Sign SignAuto Encrypt); } $m->callback( CallbackName => 'BeforeUpdate', Queue => $QueueObj, AttributesRef => \@attribs, ARGSRef => \%ARGS, ); push @results, UpdateRecordObject( AttributesRef => \@attribs, Object => $QueueObj, ARGSRef => \%ARGS ); $Disabled = $ARGS{'Disabled'} = $Enabled? 0: 1; $EnabledChecked = "" if $QueueObj->Disabled; my @linkresults; $m->callback( results => \@linkresults, RecordObj => $QueueObj, ARGSRef => \%ARGS, CallbackName => 'ProcessLinks' ); push @results, @linkresults; push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $QueueObj ); if ( RT->Config->Get('RTAddressRegexp') ) { foreach my $address ( $QueueObj->CorrespondAddress, $QueueObj->CommentAddress ) { next unless defined $address && length $address; next if RT::EmailParser->IsRTAddress( $address ); push @no_redirect_results, loc("RTAddressRegexp option in the config doesn't match [_1]", $address ); } } } else { $title = loc("Create a queue"); } my $InternalQueue = ($QueueObj->Id and $QueueObj->Disabled == 2); # This code does automatic redirection if any updates happen. MaybeRedirectForResults( Actions => \@results, Arguments => { id => $QueueObj->Id }, ) if $QueueObj->id; push @results, @no_redirect_results; <%ARGS> $id => undef $result => undef $Name => undef $Create => undef $Description => undef $CorrespondAddress => undef $CommentAddress => undef $InitialPriority => undef $FinalPriority => undef $DefaultDueIn => undef $SetEnabled => undef $SetCrypt => undef $Enabled => undef rt-4.2.12/share/html/Admin/Queues/People.html000644 000765 000024 00000013315 12555754775 021365 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>

    <&|/l&>Current watchers

    % for my $Name (RT::Queue->ManageableRoleGroupTypes) { <& /Admin/Elements/EditQueueWatcherGroup, Label => loc($Name), QueueObj => $QueueObj, Watchers => $QueueObj->$Name &> % } % $m->callback(CallbackName => 'CurrentWatchers', QueueObj => $QueueObj);

    <&|/l&>New watchers

    <&|/l&>Find people whose
    <& /Elements/SelectUsers &>
    <&|/l&>Find groups whose
    <& /Elements/SelectGroups &>

    <&|/l&>Add new watchers:

    <&|/l&>Users % if ($user_msg) {
    <%$user_msg%> % } elsif ($Users) {

      % while (my $u = $Users->Next ) {
    • <& /Elements/SelectWatcherType, Scope => 'queue', Name => "Queue-AddWatcher-Principal-". $u->PrincipalId, &> <& /Elements/ShowUser, User => $u &>
    • % }
    % }

    <&|/l&>Groups % if ($group_msg) {
    <%$group_msg%> % } elsif ($Groups) {

      % while (my $g = $Groups->Next ) {
    • <&/Elements/SelectWatcherType, Scope=>'queue', Name => "Queue-AddWatcher-Principal-".$g->PrincipalId &> <%$g->Name%> (<%$g->Description%>) % }
    % }
    <& /Elements/Submit, Label => loc('Save Changes'), Caption => loc("If you've updated anything above, be sure to"), Reset => 1 &>
    <%INIT> my ($field, @results, $User, $Users, $Groups, $watcher, $user_msg, $group_msg); my $QueueObj = RT::Queue->new($session{'CurrentUser'}); $QueueObj->Load($id) || Abort(loc("Couldn't load queue", $id)); unless ($OnlySearchForPeople or $OnlySearchForGroup) { # Delete deletable watchers foreach my $key (keys %ARGS) { my $id = $QueueObj->Id; if (($key =~ /^Queue-$id-DeleteWatcher-Type-(.*?)-Principal-(\d*)$/)) {; my ($code, $msg) = $QueueObj->DeleteWatcher(Type => $1, PrincipalId => $2); push @results, $msg; } } # Add new watchers foreach my $key (keys %ARGS) { my $type = $ARGS{$key}; next unless $key =~ /^Queue-AddWatcher-Principal-(\d*)$/; my $id = $1; next unless RT::Queue->IsManageableRoleGroupType($type); my ($code, $msg) = $QueueObj->AddWatcher( Type => $type, PrincipalId => $id, ); push @results, $msg; } } if ( $ARGS{'UserString'} ) { $Users = RT::Users->new( $session{'CurrentUser'} ); $Users->Limit( FIELD => $ARGS{'UserField'}, VALUE => $ARGS{'UserString'}, OPERATOR => $ARGS{'UserOp'} ); } else { $user_msg = loc("No principals selected."); } if ( $ARGS{'GroupString'} ) { $Groups = RT::Groups->new( $session{'CurrentUser'} ); $Groups->LimitToUserDefinedGroups; $Groups->Limit( FIELD => $ARGS{'GroupField'}, VALUE => $ARGS{'GroupString'}, OPERATOR => $ARGS{'GroupOp'} ); } else { $group_msg = loc("No principals selected."); } my $title = loc('People related to queue [_1]', $QueueObj->Name); <%ARGS> $OnlySearchForPeople => undef $OnlySearchForGroup => undef $UserField => 'Name' $UserOp => '=' $UserString => undef $GroupField => 'Name' $GroupOp => '=' $GroupString => undef $Type => undef $id => undef rt-4.2.12/share/html/Admin/Queues/Scrips.html000644 000765 000024 00000004631 12555754775 021405 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Elements/EditScrips, title => $title, %ARGS &> <%init> my $QueueObj = RT::Queue->new($session{'CurrentUser'}); $QueueObj->Load($id); Abort(loc("Queue [_1] not found",$id)) unless $QueueObj->id; my $title = loc("Modify scrips for queue [_1]", $QueueObj->Name); <%ARGS> $id => undef #some identifier that a Queue could rt-4.2.12/share/html/Admin/Queues/Template.html000644 000765 000024 00000010312 12555754775 021706 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    %if ($Create ) { % } else { % } %# hang onto the queue id <& /Admin/Elements/ModifyTemplate, Name => $TemplateObj->Name // $ARGS{Name}, Description => $TemplateObj->Description // $ARGS{Description}, Content => $TemplateObj->Content // $ARGS{Content}, Type => $TemplateObj->Type // $ARGS{Type}, &> <& /Elements/Submit, Label => $SubmitLabel, Reset => 1 &>
    <%INIT> my $TemplateObj = RT::Template->new( $session{'CurrentUser'} ); my $QueueObj; my $SubmitLabel; my $title; my @results; if ( !$Create ) { if ( $Template eq 'new' ) { my ( $val, $msg ) = $TemplateObj->Create( Queue => $Queue, Name => $Name, Type => $Type ); push @results, $msg; } else { $TemplateObj->Load($Template) || Abort( loc('No Template') ); } } if ( $TemplateObj->Id() ) { $Queue = $TemplateObj->Queue; $QueueObj = $TemplateObj->QueueObj; my @attribs = qw( Name Description Queue Type Content ); my @aresults = UpdateRecordObject( AttributesRef => \@attribs, Object => $TemplateObj, ARGSRef => \%ARGS ); push @results, @aresults; my ( $ok, $msg ) = $TemplateObj->CompileCheck; push @results, $msg if !$ok; } else { $Create = 1; $QueueObj = RT::Queue->new( $session{'CurrentUser'} ); $QueueObj->Load($Queue); } if ($Create) { $title = loc( 'Create a new template for queue [_1]', $QueueObj->Name ); $SubmitLabel = loc('Create'); } else { $title = loc( 'Modify template [_1] for queue [_2]', loc( $TemplateObj->Name()), $QueueObj->Name ); $SubmitLabel = loc('Save Changes'); } <%ARGS> $Queue => '' $Template => '' $Create => undef $Name => undef $Type => undef rt-4.2.12/share/html/Admin/Queues/Templates.html000644 000765 000024 00000004641 12555754775 022101 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Elements/EditTemplates, title => $title, %ARGS &> <%INIT> my $QueueObj = RT::Queue->new($session{'CurrentUser'}); $QueueObj->Load($id); if (!$QueueObj->id) { Abort(loc("Queue [_1] not found",$id)); } my $title = loc("Templates for queue [_1]", $QueueObj->Name); <%ARGS> $id => undef #some identifier that a Queue could rt-4.2.12/share/html/Admin/Queues/UserRights.html000644 000765 000024 00000005753 12555754775 022247 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Modify user rights for queue [_1]', $QueueObj->Name) &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    %# XXX TODO put this somewhere more reasonable % $m->callback( %ARGS, QueueObj => $QueueObj, results => \@results ); <& /Admin/Elements/EditRights, Context => $QueueObj, Principals => \@principals &> <& /Elements/Submit, Label => loc('Save Changes') &>
    <%INIT> # Update the acls. my @results = ProcessACLs(\%ARGS); if (!defined $id) { Abort(loc("No Queue defined")); } my $QueueObj = RT::Queue->new($session{'CurrentUser'}); $QueueObj->Load($id) || Abort(loc("Couldn't load queue [_1]",$id)); my @principals = GetPrincipalsMap($QueueObj, 'Users'); <%ARGS> $id => undef $UserString => undef $UserOp => undef $UserField => undef rt-4.2.12/share/html/Admin/Groups/GroupRights.html000644 000765 000024 00000005511 12555754775 022425 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Modify group rights for group [_1]', $GroupObj->Name) &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    <& /Admin/Elements/EditRights, Context => $GroupObj, Principals => \@principals &> <& /Elements/Submit, Label => loc('Save Changes') &>
    <%INIT> # Update the acls. my @results = ProcessACLs(\%ARGS); if (!defined $id) { Abort(loc("No Group defined")); } my $GroupObj = RT::Group->new($session{'CurrentUser'}); $GroupObj->Load($id) || Abort(loc("Couldn't load group [_1]",$id)); my @principals = GetPrincipalsMap($GroupObj, 'System', 'Groups'); <%ARGS> $id => undef rt-4.2.12/share/html/Admin/Groups/History.html000644 000765 000024 00000004636 12555754775 021620 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ShowHistory, Object => $GroupObj, ShowDisplayModes => 0, DisplayPath => 'History.html', &> <%INIT> my $GroupObj = RT::Group->new($session{'CurrentUser'}); $GroupObj->Load($id) || Abort("Couldn't load group '$id'"); my $title = loc("History of the group [_1]", $GroupObj->Name); <%ARGS> $id => '' unless defined $id rt-4.2.12/share/html/Admin/Groups/index.html000644 000765 000024 00000011366 12555754775 021264 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &>

    <% $caption %>

    <&|/l&>Go to group
    <&|/l&>Find groups whose <& /Elements/SelectGroups &>
    />
    % unless ( $Groups->Count ) { <&|/l&>No groups matching search criteria found. % } else {

    <&|/l&>Select a group:

    <& /Elements/CollectionList, OrderBy => 'Name', Order => 'ASC', Rows => $Rows, %ARGS, Format => $Format, Collection => $Groups, AllowSorting => 1, PassArguments => [qw(Format Rows Page Order OrderBy GroupString GroupOp GroupField FindDisabledGroups)], &> % } <%INIT> my $Groups = RT::Groups->new($session{'CurrentUser'}); $Groups->LimitToUserDefinedGroups(); my $title = loc('Select a group'); my $caption; if ($FindDisabledGroups) { $Groups->FindAllRows(); } if (length $GroupString) { $caption = loc("Groups matching search criteria"); if ($GroupField =~ /^CustomField-(\d+)/) { $Groups->LimitCustomField( CUSTOMFIELD => $1, OPERATOR => $GroupOp, VALUE => $GroupString, ); } else { $Groups->Limit( FIELD => $GroupField, OPERATOR => $GroupOp, VALUE => $GroupString, ); } RT::Interface::Web::Redirect(RT->Config->Get('WebURL')."Admin/Groups/Modify.html?id=".$Groups->First->id) if $Groups->Count == 1 and $Groups->First; } else { $caption = loc("User-defined groups"); } $Format ||= RT->Config->Get('AdminSearchResultFormat')->{'Groups'}; my $Rows = RT->Config->Get('AdminSearchResultRows')->{'Groups'} || 50; <%ARGS> $Format => undef, $GroupString => '' unless defined $GroupString $GroupOp => '=' $GroupField => 'Name' $FindDisabledGroups => 0 rt-4.2.12/share/html/Admin/Groups/Members.html000644 000765 000024 00000012536 12555754775 021547 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    <&| /Widgets/TitleBox, title => loc('Editing membership for group [_1]', $Group->Name) &>

    <&|/l&>Current members

    <&|/l&>Add members

    % if ($Group->MembersObj->Count == 0 ) { <&|/l&>(No members) % } else { <&|/l&>Users % my $Users = $Group->UserMembersObj( Recursively => 0 ); <%perl> my @users = sort { lc($a->[0]) cmp lc($b->[0]) } map { [$m->scomp("/Elements/ShowUser", User => $_), $_] } @{ $Users->ItemsArrayRef };
      % for (@users) { % my ($rendered, $user) = @$_; % $UsersSeen{ $user->id } = 1 if $SkipSeenUsers;
    • <% $rendered |n%>
    • % }
    <&|/l&>Groups
      % my $GroupMembers = $Group->MembersObj; % $GroupMembers->LimitToGroups(); % while ( my $member = $GroupMembers->Next ) { % $GroupsSeen{ $member->MemberId } = 1 if $SkipSeenGroups;
    • <% $member->MemberObj->Object->Name %> % }
    % }
    <& /Admin/Elements/SelectNewGroupMembers, Name => "AddMembers", Group => $Group, SkipUsers => \%UsersSeen, SkipGroups => \%GroupsSeen &>
    <&|/l&>(Check box to delete) <& /Elements/Submit, Label => loc('Modify Members'), Reset => 1 &>
    <%INIT> my $Group = RT::Group->new($session{'CurrentUser'}); $Group->Load($id) || Abort(loc('Could not load group')); my $title = loc("Modify the group [_1]", $Group->Name); my (%UsersSeen, %GroupsSeen); $GroupsSeen{ $Group->id } = 1; # can't be a member of ourself my (@results); # XXX: safe member id in value instead of name foreach my $key (keys %ARGS) { next unless $key =~ /^DeleteMember-(\d+)$/; my ($val,$msg) = $Group->DeleteMember($1); push (@results, $msg); } # Process new users foreach my $member (grep $_, @AddMembersUsers) { my $principal = RT::User->new($session{'CurrentUser'}); if ($member =~ /^User-(\d+)$/) { # Old style, using id $principal->Load($1); } else { # New style, just a username $principal->Load($member); } my ($val, $msg) = $Group->AddMember($principal->PrincipalId); push (@results, $msg); } # Process new groups foreach my $member (grep $_, @AddMembersGroups) { my $principal = RT::Group->new($session{'CurrentUser'}); if ($member =~ /^Group-(\d+)$/) { # Old style, using id $principal->Load($1); } else { # New style, just a group name $principal->LoadUserDefinedGroup($member); } my ($val, $msg) = $Group->AddMember($principal->PrincipalId); push (@results, $msg); } <%ARGS> @AddMembersUsers => () @AddMembersGroups => () $id => undef $SkipSeenUsers => 1 $SkipSeenGroups => 1 rt-4.2.12/share/html/Admin/Groups/Memberships.html000644 000765 000024 00000004037 12555754775 022430 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/MembershipsPage, %ARGS &> rt-4.2.12/share/html/Admin/Groups/Modify.html000644 000765 000024 00000013471 12555754775 021403 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    %unless ($Group->Id) { % } else { % } % my $CFs = $Group->CustomFields; % while (my $CF = $CFs->Next) { % } % $m->callback( %ARGS, GroupObj => $Group, results => \@results );
    <&|/l&>Name:
    <&|/l&>Description:
    <% $CF->Name %>: <& /Elements/EditCustomField, CustomField => $CF, Object => $Group, &>
    />
    % if ( $Create ) { <& /Elements/Submit, Label => loc('Create'), Reset => 1 &> % } else { <& /Elements/Submit, Label => loc('Save Changes'), Reset => 1 &> % }
    <%INIT> my ($title, @results, @warnings, $Disabled, $EnabledChecked); my $Group = RT::Group->new($session{'CurrentUser'}); if ($Create) { $title = loc("Create a new group"); } else { if ($id eq 'new' ) { my ($create_id, $create_msg) = $Group->CreateUserDefinedGroup(Name => $Name ); if ($create_id) { $id = $Group->Id; push @results, $create_msg; } else { push @results, loc("Group could not be created: [_1]", $create_msg); } } else { $Group->Load($id) || Abort('Could not load group'); } if ($Group->Id) { $title = loc("Modify the group [_1]", $Group->Name); } # If the create failed else { $title = loc("Create a new group"); $Create = 1; } } if ($Group->Id) { my @fields = qw(Description Name ); my @fieldresults = UpdateRecordObject ( AttributesRef => \@fields, Object => $Group, ARGSRef => \%ARGS ); push (@results,@fieldresults); push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $Group ); # Warn about duplicate groups my $dupcheck = RT::Groups->new(RT->SystemUser); $dupcheck->LimitToUserDefinedGroups(); $dupcheck->Limit( FIELD => 'Name', VALUE => $Group->Name, CASESENSITIVE => 0 ); if ($dupcheck->Count > 1) { push @warnings, loc("There is more than one group with the name '[_1]'. This may cause inconsistency in parts of the admin interface, and therefore it's recommended you rename the conflicting groups.", $Group->Name); } } #we're asking about enabled on the web page but really care about disabled. if (defined $Enabled && $Enabled == 1) { $Disabled = 0; } else { $Disabled = 1; } if ( $Group->Id and ($SetEnabled) and ( $Disabled != $Group->Disabled) ) { my ($code, $msg) = $Group->SetDisabled($Disabled); push @results, $msg; } # This code does automatic redirection if any updates happen. MaybeRedirectForResults( Actions => \@results, Arguments => { id => $Group->id }, ) if $Group->Id; push @results, @warnings; $EnabledChecked = ( $Group->Disabled() ? '' : 'checked="checked"' ); <%ARGS> $Create => undef $Name => undef $Description => undef $SetEnabled => undef $Enabled => undef $id => '' unless defined $id rt-4.2.12/share/html/Admin/Groups/UserRights.html000644 000765 000024 00000005473 12555754775 022256 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Modify user rights for group [_1]', $GroupObj->Name) &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    <& /Admin/Elements/EditRights, Context => $GroupObj, Principals => \@principals &> <& /Elements/Submit, Label => loc('Save Changes') &>
    <%INIT> # Update the acls. my @results = ProcessACLs(\%ARGS); if (!defined $id) { Abort(loc("No Group defined")); } my $GroupObj = RT::Group->new($session{'CurrentUser'}); $GroupObj->Load($id) || Abort(loc("Couldn't load group [_1]",$id)); my @principals = GetPrincipalsMap($GroupObj, 'Users'); <%ARGS> $id => undef rt-4.2.12/share/html/Admin/Global/CustomFields/000755 000765 000024 00000000000 12555754775 021602 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Global/DashboardsInMenu.html000644 000765 000024 00000007622 12555754775 023264 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc("Dashboards in menu") &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@actions &>
    % for my $pane (@panes) { <&|/Widgets/TitleBox, title => loc('Dashboards in menu'), bodyclass => "" &> <& /Widgets/SelectionBox:show, self => $pane &>
    % } <%init> my @actions; my $sys = RT::System->new( $session{'CurrentUser'} ); my $has_right = $session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser'); my ($dashboard_attr) = $sys->Attributes->Named('DashboardsInMenu'); my $default_dashboards_in_menu = $dashboard_attr && $dashboard_attr->Content->{dashboards} ? $dashboard_attr->Content->{dashboards} : []; use RT::Dashboards; my $dashboards = RT::Dashboards->new( $RT::SystemUser ); $dashboards->LimitToPrivacy('RT::System-' . $sys->id); my @dashboards; while ( my $dashboard = $dashboards->Next ) { push @dashboards, [$dashboard->id, $dashboard->Name]; } my @panes = $m->comp( '/Admin/Elements/ConfigureDashboardsInMenu', Action => 'DashboardsInMenu.html', panes => ['dashboards_in_menu'], ReadOnly => !$has_right, items => \@dashboards, current_portlets => $default_dashboards_in_menu, OnSave => sub { my ( $conf ) = @_; my ( $status, $msg ); if (!$has_right) { push @actions, loc( 'Permission Denied' ); } elsif ( $dashboard_attr ) { ($status, $msg) = $dashboard_attr->SetContent($conf); } else { $dashboard_attr = RT::Attribute->new($RT::SystemUser); ( $status, $msg ) = $dashboard_attr->Create( Name => 'DashboardsInMenu', Object => $sys, Content => $conf, ); } push @actions, $status ? loc('Global dashboards in menu saved.') : $msg; } ); $m->comp( '/Widgets/SelectionBox:process', %ARGS, self => $_ ) for @panes; rt-4.2.12/share/html/Admin/Global/GroupRights.html000644 000765 000024 00000005044 12555754775 022347 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Modify global group rights') &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    <& /Admin/Elements/EditRights, Context => $RT::System, Principals => \@principals &> <& /Elements/Submit, Label => loc('Save Changes') &>
    <%INIT> # Update the acls. my @results = ProcessACLs(\%ARGS); # Principal collections my @principals = GetPrincipalsMap($RT::System, qw(System Roles Groups)); rt-4.2.12/share/html/Admin/Global/index.html000644 000765 000024 00000004232 12555754775 021177 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Admin/Global configuration') &> <& /Elements/Tabs &> <& /Elements/ListMenu, menu => Menu()->child('admin')->child('global') &> rt-4.2.12/share/html/Admin/Global/MyRT.html000644 000765 000024 00000007600 12555754775 020725 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc("RT at a glance") &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@actions &>
    % for my $pane (@panes) { <&|/Widgets/TitleBox, title => loc('RT at a glance').': '.loc($pane->{Name}), bodyclass => "" &> <& /Widgets/SelectionBox:show, self => $pane &>
    % } <%init> my @actions; my @items = map { [ "component-$_", loc($_) ] } sort @{ RT->Config->Get('HomepageComponents') }; my $sys = RT::System->new( $session{'CurrentUser'} ); # XXX: put this in savedsearches_to_portlet_items for ( $m->comp( "/Search/Elements/SearchesForObject", Object => $sys )) { my ( $desc, $loc_desc, $search ) = @$_; my $SearchType = $search->Content->{'SearchType'} || 'Ticket'; if ( $SearchType eq 'Ticket' ) { push @items, [ "system-$desc", $loc_desc ]; } else { my $oid = ref($sys) . '-' . $sys->Id . '-SavedSearch-' . $search->Id; my $type = ( $SearchType eq 'Ticket' ) ? 'Saved Search' # loc : $SearchType; push @items, [ "saved-$oid", loc($type) . ": $loc_desc" ]; } } my ($default_portlets) = $sys->Attributes->Named('HomepageSettings'); my $has_right = $session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser'); my @panes = $m->comp( '/Admin/Elements/ConfigureMyRT', panes => [ 'body', #loc 'sidebar', #loc ], Action => 'MyRT.html', items => \@items, ReadOnly => !$has_right, current_portlets => $default_portlets->Content, OnSave => sub { my ( $conf, $pane ) = @_; if (!$has_right) { push @actions, loc( 'Permission Denied' ); } else { $default_portlets->SetContent( $conf ); push @actions, loc( 'Global portlet [_1] saved.', $pane ); } } ); $m->comp( '/Widgets/SelectionBox:process', %ARGS, self => $_ ) for @panes; rt-4.2.12/share/html/Admin/Global/Scrips.html000644 000765 000024 00000004370 12555754775 021336 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Elements/EditScrips, title => $title, id => $id, %ARGS &> <%init> my $title = loc("Modify scrips which apply to all queues"); my (@actions); <%ARGS> $id => 0 rt-4.2.12/share/html/Admin/Global/Template.html000644 000765 000024 00000007610 12555754775 021646 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    %if ($Create ) { % } else { % } %# hang onto the queue id <& /Admin/Elements/ModifyTemplate, Name => $TemplateObj->Name // $ARGS{Name}, Description => $TemplateObj->Description // $ARGS{Description}, Content => $TemplateObj->Content // $ARGS{Content}, Type => $TemplateObj->Type // $ARGS{Type}, &> <& /Elements/Submit, Label => $SubmitLabel, Reset => 1 &>
    <%INIT> my $TemplateObj = RT::Template->new($session{'CurrentUser'}); my ($title, @results, $SubmitLabel); if (!$Create) { if (defined ($Template) && $Template eq 'new') { my ($val, $msg) = $TemplateObj->Create(Queue => $Queue, Name => $Name, Type => $Type); push @results, $msg; } else { $TemplateObj->Load($Template) || Abort(loc('No Template')); } } if ($TemplateObj->Id()) { my @attribs = qw( Name Description Queue Type Content ); my @aresults = UpdateRecordObject( AttributesRef => \@attribs, Object => $TemplateObj, ARGSRef => \%ARGS); push @results, @aresults; my ($ok, $msg) = $TemplateObj->CompileCheck; push @results, $msg if !$ok; } else { $Create = 1; } if ($Create) { $title = loc("Create a template"); $SubmitLabel = loc('Create'); } else { $title = loc('Modify template [_1]', loc($TemplateObj->Name())); $SubmitLabel = loc('Save Changes'); } <%ARGS> $Queue => '' $Template => '' $Create => '' $Name => '' $Type => '' rt-4.2.12/share/html/Admin/Global/Templates.html000644 000765 000024 00000004416 12555754775 022032 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title, FeedURI => 'templates' &> <& /Elements/Tabs &> <& /Admin/Elements/EditTemplates, title => $title, %ARGS &> <%init> my $title = loc("Modify templates which apply to all queues"); my (@actions); <%ARGS> $id => undef rt-4.2.12/share/html/Admin/Global/Topics.html000644 000765 000024 00000004451 12555754775 021334 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Articles/Elements/Topics, RootObj => $RT::System, title => $title, %ARGS &> <%INIT> my $title = $Modify ? loc("Modify global topics") : loc("Edit global topic hierarchy"); <%ARGS> $id => undef $Modify => "" rt-4.2.12/share/html/Admin/Global/UserRights.html000644 000765 000024 00000004741 12555754775 022174 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Modify global user rights') &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
    <& /Admin/Elements/EditRights, Context => $RT::System, Principals => \@principals &> <& /Elements/Submit, Label => loc('Save Changes') &>
    <%INIT> my @results = ProcessACLs(\%ARGS); my @principals = GetPrincipalsMap($RT::System, 'Users'); rt-4.2.12/share/html/Admin/Global/CustomFields/Class-Article.html000644 000765 000024 00000004513 12555754775 025121 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::Class', Object => $object, SubType => 'RT::Article' &> <%INIT> my $title = loc( 'Edit Custom Fields for articles in all classes'); my $object = RT::Class->new($session{'CurrentUser'}); rt-4.2.12/share/html/Admin/Global/CustomFields/Groups.html000644 000765 000024 00000004453 12555754775 023755 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::Group', Object=> $object &> <%INIT> my $title = loc( 'Edit Custom Fields for all groups'); my $object = RT::Group->new($session{'CurrentUser'}); rt-4.2.12/share/html/Admin/Global/CustomFields/index.html000644 000765 000024 00000006514 12555754775 023605 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % $m->callback( %ARGS, tabs => $tabs ); <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <%INIT> my $title = loc("Global custom field configuration"); my $tabs = { A => { title => loc('Users'), text => loc('Select custom fields for all users'), path => 'Users.html', }, B => { title => loc('Groups'), text => loc('Select custom fields for all user groups'), path => 'Groups.html', }, C => { title => loc('Queues'), text => loc('Select custom fields for all queues'), path => 'Queues.html', }, F => { title => loc('Tickets'), text => loc('Select custom fields for tickets in all queues'), path => 'Queue-Tickets.html', }, G => { title => loc('Ticket Transactions'), text => loc('Select custom fields for transactions on tickets in all queues'), path => 'Queue-Transactions.html', }, H => { title => loc('Articles'), text => loc('Select Custom Fields for Articles in all Classes'), path => 'Class-Article.html' }, }; $m->callback( tabs => $tabs ); rt-4.2.12/share/html/Admin/Global/CustomFields/Queue-Tickets.html000644 000765 000024 00000004517 12555754775 025167 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::Queue', Object=> $object, SubType => 'RT::Ticket' &> <%INIT> my $title = loc( 'Edit Custom Fields for tickets in all queues'); my $object = RT::Queue->new($session{'CurrentUser'}); rt-4.2.12/share/html/Admin/Global/CustomFields/Queue-Transactions.html000644 000765 000024 00000004537 12555754775 026233 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::Queue', Object=> $object, SubType => 'RT::Ticket-RT::Transaction' &> <%INIT> my $title = loc( 'Edit Custom Fields for tickets in all queues'); my $object = RT::Queue->new($session{'CurrentUser'}); rt-4.2.12/share/html/Admin/Global/CustomFields/Queues.html000644 000765 000024 00000004453 12555754775 023745 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::Queue', Object=> $object &> <%INIT> my $title = loc( 'Edit Custom Fields for all queues'); my $object = RT::Queue->new($session{'CurrentUser'}); rt-4.2.12/share/html/Admin/Global/CustomFields/Users.html000644 000765 000024 00000004450 12555754775 023574 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::User', Object=> $object &> <%INIT> my $title = loc( 'Edit Custom Fields for all users'); my $object = RT::User->new($session{'CurrentUser'}); rt-4.2.12/share/html/Admin/Elements/AddCustomFieldValue000644 000765 000024 00000006313 12555754775 023327 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}

    <&|/l&>Add Value

    % if ( $CustomField->Type ne 'Combobox' ) { % } % my $paramtag = "CustomField-". $CustomField->Id ."-Value-new"; % if ( $CustomField->Type ne 'Combobox' ) { % } % $m->callback(CallbackName => 'AfterCustomFieldValueInput', CustomFieldObj => $CustomField, ARGSRef => \%ARGS );
    <&|/l&>Sort <&|/l&>Name <&|/l&>Description<&|/l&>Category
    % my $BasedOnObj = $CustomField->BasedOnObj; % if ( $BasedOnObj and $BasedOnObj->id ) { % my $Categories = $BasedOnObj->Values; % }
    <%args> $CustomField => undef rt-4.2.12/share/html/Admin/Elements/ConfigureDashboardsInMenu000644 000765 000024 00000005037 12555754775 024535 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Action $OnSave $items $panes $current_portlets $ReadOnly => 0 <%init> my $portlets = $current_portlets; my @panes; for my $pane (@$panes) { push @panes, $m->comp( '/Widgets/SelectionBox:new', Action => $Action, Name => $pane, Available => $items, AutoSave => 1, ReadOnly => $ReadOnly, OnSubmit => sub { my $sel = shift; $OnSave->( { dashboards => $sel->{Current} } ); }, Selected => $portlets, ); } return @panes; rt-4.2.12/share/html/Admin/Elements/ConfigureMyRT000644 000765 000024 00000005427 12555754775 022205 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Action $OnSave $items $panes $current_portlets $ReadOnly => 0 <%init> my $portlets = $current_portlets; my @panes; for my $pane (@$panes) { push @panes, $m->comp( '/Widgets/SelectionBox:new', Action => $Action, Name => $pane, Available => $items, AutoSave => 1, ReadOnly => $ReadOnly, OnSubmit => sub { my $sel = shift; $portlets->{$pane} = [ map { m/(\w+)-(.*)$/; { type => $1, name => $2 } } @{ $sel->{Current} } ]; $OnSave->( $portlets, $pane ); }, Selected => [ map { join( '-', @{$_}{qw/type name/} ) } @{ $portlets->{$pane} } ] ); } return @panes; rt-4.2.12/share/html/Admin/Elements/EditCustomField000644 000765 000024 00000012576 12555754775 022537 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/ListActions, actions => \@results &>
    <&|/l&>Name:
    <&|/l&>Description:
    <&|/l&>Type: <& /Admin/Elements/SelectCustomFieldType, Name => "Type", Default => $CustomFieldObj->Type &>
    />

    % if ($CustomFieldObj->Id and $CustomFieldObj->Type =~ /Select/) {

    <&|/l&>Values

    <& /Admin/Elements/EditCustomFieldValues, CustomField => $CustomFieldObj &> <& /Admin/Elements/AddCustomFieldValue, CustomField => $CustomFieldObj &> % } <&/Elements/Submit, Label => loc('Create') &>
    <%INIT> my $CustomFieldObj = RT::CustomField->new($session{'CurrentUser'}); my $EnabledChecked = 'checked="checked"'; my (@results); if (! $CustomField ) { $title = loc("Create a CustomField"); $id = 'new'; } else { if ($CustomField eq 'new') { my ($val, $msg) = $CustomFieldObj->Create(Queue => $Queue, Name => $Name, Type => $Type, Description => $Description, ); # if there is an error, then abort. But since at this point there's # stuff already printed, clear it out. # (This only works in conjunction with temporarily turning autoflush # off in the files that use this component.) unless ($val) { $m->clear_buffer; Abort(loc("Could not create CustomField: [_1]", $msg), SuppressHeader => 1); } push @results, $msg; $CustomFieldObj->SetSortOrder($CustomFieldObj->id); $title = loc('Created CustomField [_1]', $CustomFieldObj->Name()); } else { $CustomFieldObj->Load($CustomField) || Abort(loc('No CustomField'), SuppressHeader => 1); $title = loc('Editing CustomField [_1]', $CustomFieldObj->Name()); my @aresults = ProcessCustomFieldUpdates ( CustomFieldObj => $CustomFieldObj, ARGSRef => \%ARGS ); push @results, @aresults; } $id = $CustomFieldObj->id; #we're asking about enabled on the web page but really care about disabled. my $Disabled = ($Enabled ? 0 : 1); if ( ($SetEnabled) and ( $Disabled != $CustomFieldObj->Disabled) ) { my ($code, $msg) = $CustomFieldObj->SetDisabled($Disabled); push @results, loc('Enabled status [_1]', loc_fuzzy($msg)); } if ($CustomFieldObj->Disabled()) { $EnabledChecked =""; } } <%ARGS> $id => undef $title => undef $Queue => undef $CustomField => undef $Type => undef $Description => undef $Name => undef $SetEnabled => undef $Enabled => undef rt-4.2.12/share/html/Admin/Elements/EditCustomFields000644 000765 000024 00000014433 12555754775 022714 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/ListActions, actions => \@results &>

    <&|/l&>Selected Custom Fields

    <& /Elements/CollectionList, %ARGS, Collection => $added_cfs, Rows => 0, Page => 1, Format => $format, DisplayFormat => $display_format, AllowSorting => 0, ShowEmpty => 0, PassArguments => [ qw(Page Order OrderBy), qw(id ObjectType SubType), ], &>

    <&|/l&>Unselected Custom Fields

    <& /Elements/CollectionList, OrderBy => 'Name', Order => 'ASC', %ARGS, Collection => $not_added_cfs, Rows => $rows, Format => $format, DisplayFormat => "'__CheckBox.{AddCustomField}__',". $format, AllowSorting => 1, ShowEmpty => 0, PassArguments => [ qw(Page Order OrderBy), qw(id ObjectType SubType), ], &> <& /Elements/Submit, Name => 'UpdateCFs' &>
    <%INIT> my $id = $Object->Id || 0; if ($id and !$Object->CurrentUserHasRight('AssignCustomFields')) { $m->out('

    ', loc('(No custom fields)'), '

    '); return; } my @results; my $lookup = $ObjectType; $lookup .= "-$SubType" if $SubType; ## deal with moving sortorder of custom fields if ( $MoveCustomFieldUp ) { { my $record = RT::ObjectCustomField->new( $session{'CurrentUser'} ); $record->LoadByCols( ObjectId => $id, CustomField => $MoveCustomFieldUp ); unless ( $record->id ) { push @results, loc("Custom field #[_1] is not applied to this object", $MoveCustomFieldUp); last; } my ($status, $msg) = $record->MoveUp; push @results, $msg; } } if ( $MoveCustomFieldDown ) { { my $record = RT::ObjectCustomField->new( $session{'CurrentUser'} ); $record->LoadByCols( ObjectId => $id, CustomField => $MoveCustomFieldDown ); unless ( $record->id ) { push @results, loc("Custom field #[_1] is not applied to this object", $MoveCustomFieldDown); last; } my ($status, $msg) = $record->MoveDown; push @results, $msg; } } if ( $UpdateCFs ) { foreach my $cf_id ( @AddCustomField ) { my $CF = RT::CustomField->new( $session{'CurrentUser'} ); $CF->SetContextObject( $Object ); $CF->Load( $cf_id ); unless ( $CF->id ) { push @results, loc("Couldn't load CustomField #[_1]", $cf_id); next; } my ($status, $msg) = $CF->AddToObject( $Object ); push @results, $msg; } foreach my $cf_id ( @RemoveCustomField ) { my $CF = RT::CustomField->new( $session{'CurrentUser'} ); $CF->SetContextObject( $Object ); $CF->Load( $cf_id ); unless ( $CF->id ) { push @results, loc("Couldn't load CustomField #[_1]", $cf_id); next; } my ($status, $msg) = $CF->RemoveFromObject( $Object ); push @results, $msg; } } $m->callback(CallbackName => 'UpdateExtraFields', Results => \@results, Object => $Object, %ARGS); my $added_cfs = RT::CustomFields->new( $session{'CurrentUser'} ); $added_cfs->LimitToLookupType($lookup); $added_cfs->LimitToGlobalOrObjectId($id); $added_cfs->SetContextObject( $Object ); $added_cfs->ApplySortOrder; my $not_added_cfs = RT::CustomFields->new( $session{'CurrentUser'} ); $not_added_cfs->LimitToLookupType($lookup); $not_added_cfs->LimitToNotAdded( $id ? ($id, 0) : (0) ); my $format = RT->Config->Get('AdminSearchResultFormat')->{'CustomFields'}; my $rows = RT->Config->Get('AdminSearchResultRows')->{'CustomFields'} || 50; my $display_format = $id ? ("'__RemoveCheckBox.{$id}__',". $format .", '__MoveCF.{$id}__'") : ("'__CheckBox.{RemoveCustomField}__',". $format .", '__MoveCF.{$id}__'"); $m->callback(CallbackName => 'EditDisplayFormat', DisplayFormat => \$display_format, id => $id); <%ARGS> $Object $ObjectType $SubType => '' $UpdateCFs => undef @RemoveCustomField => () @AddCustomField => () $MoveCustomFieldUp => undef $MoveCustomFieldDown => undef rt-4.2.12/share/html/Admin/Elements/EditCustomFieldValues000644 000765 000024 00000007553 12555754775 023716 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % unless ( $values->Count ) {

    <&|/l&>(no values)

    % return; % } % if ($CustomField->Type ne 'Combobox') { % } % while ( my $value = $values->Next ) { % my $paramtag = "CustomField-". $CustomField->Id ."-Value-". $value->Id; % if ( $CustomField->Type ne 'Combobox' ) { % } % $m->callback(CallbackName => 'AfterCustomFieldValueInput', CustomFieldObj => $CustomField, CustomFieldValueObj => $value, ARGSRef => \%ARGS ); % }
      <&|/l&>Sort <&|/l&>Name <&|/l&>Description<&|/l&>Category
    % if ( $Categories ) { % my $selected = $value->Category; % $selected = '' unless defined $selected; % }
    <&|/l&>(Check box to delete) <%init> my $values = $CustomField->ValuesObj(); my $BasedOnObj = $CustomField->BasedOnObj; my $Categories; if ($BasedOnObj and $BasedOnObj->Id) { $Categories = $BasedOnObj->Values; } <%args> $CustomField => undef rt-4.2.12/share/html/Admin/Elements/EditCustomFieldValuesSource000644 000765 000024 00000005713 12555754775 025073 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
    <%INIT> return unless $CustomField->IsSelectionType; my @sources; foreach my $class( 'RT::CustomFieldValues', RT->Config->Get('CustomFieldValuesSources') ) { next unless $class; unless ($class->require) { $RT::Logger->crit("Couldn't load class '$class': $@"); next; } my %res = ( Class => $class ); $res{'Description'} = $class->SourceDescription if $class->can('SourceDescription'); $res{'Description'} ||= $class; $res{'Description'} = 'Provide list of values below' if $class eq 'RT::CustomFieldValues'; push @sources, \%res; } return unless grep $_->{'Class'} ne 'RT::CustomFieldValues', @sources; <%ARGS> $CustomField => undef rt-4.2.12/share/html/Admin/Elements/EditQueueWatcherGroup000644 000765 000024 00000004221 12555754775 023724 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%ARGS> $Label $QueueObj $Watchers <% $Label %>: <& /Admin/Elements/EditQueueWatchers, QueueObj => $QueueObj, Watchers => $Watchers &> rt-4.2.12/share/html/Admin/Elements/EditQueueWatchers000644 000765 000024 00000005315 12555754775 023077 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} %if ($Members->Count == 0 ) {
    • <&|/l&>none % } else {
        % while (my $watcher=$Members->Next) {
      • % if ($watcher->MemberObj->IsUser) { <& /Elements/ShowUser, User => $watcher->MemberObj->Object &> % } else { <%$watcher->MemberObj->Object->Name%> % } % } % }
      <&|/l&>(Check box to delete)

      <%INIT> my $Members = $Watchers->MembersObj; <%ARGS> $QueueObj => undef $Watchers => undef rt-4.2.12/share/html/Admin/Elements/EditRights000644 000765 000024 00000016357 12555754775 021562 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Context $Principals $AddPrincipal => undef <%init> # Let callbacks get at principals and context before we do anything with them $m->callback( Principals => $Principals, Context => $Context ); # Try to detect if we want to include an add user/group box unless ( $AddPrincipal ) { my $last = $Principals->[-1]; if ( $last->[0] =~ /Groups/i ) { $AddPrincipal = 'group'; # loc } elsif ( $last->[0] =~ /Users/i ) { $AddPrincipal = 'user'; # loc } } my $anchor = $DECODED_ARGS->{Anchor} || ''; if ($anchor =~ /AddPrincipal/) { for my $type ("group", "user") { my $record = _ParseACLNewPrincipal($DECODED_ARGS, $type) or next; if ($record->PrincipalId) { $anchor = "#acl-" . $record->PrincipalId; last; } } } %# Principals is an array of arrays, where the inner arrays are like: %# [ 'Category name' => $CollectionObj => 'DisplayColumn' => 1 ] %# The last value is a boolen determining if the value of DisplayColumn %# should be loc()-ed before display.
      <%perl> # Now generate our rights panels for each principal for my $category (@$Principals) { my ($name, $collection, $col, $loc) = @$category; while ( my $obj = $collection->Next ) { my $display = ref $col eq 'CODE' ? $col->($obj) : $obj->$col; my $id = "acl-" . $obj->PrincipalId;

      <% $loc ? loc($display) : $display %> <%perl> if ($obj->isa('RT::Group') and $obj->Domain eq 'UserDefined') { my $subgroups = $obj->GroupMembersObj( Recursively => 1 ); $subgroups->LimitToUserDefinedGroups; $subgroups->Limit( FIELD => 'Name', OPERATOR => '!=', VALUE => $obj->Name, CASESENSITIVE => 0 ); if ( $subgroups->Count ) { my $inc = join ", ", map $_->Name, @{$subgroups->ItemsArrayRef}; <&|/l, $inc &>includes [_1]\ <%perl> } }

      <& EditRightsCategoryTabs, Context => $Context, Principal => $obj, id => $id &>
      <%perl> } } if ( $AddPrincipal ) {

      <&|/l, loc($AddPrincipal) &>Add rights for this [_1]

      <& EditRightsCategoryTabs, Context => $Context, id => 'acl-AddPrincipal' &>
      % }
      rt-4.2.12/share/html/Admin/Elements/EditRightsCategoryTabs000644 000765 000024 00000011423 12555754775 024057 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%args> $Context $Principal => undef $id $acldesc => '' <%init> # Find all our available rights... my (%available_rights, %categories); if ( blessed($Context) and $Context->can('AvailableRights') ) { %available_rights = %{$Context->AvailableRights( $Principal ? $Principal->PrincipalObj : undef )}; } else { %available_rights = ( loc('System Error') => loc("No rights found") ); } # ...and their categories if ( blessed($Context) and $Context->can('RightCategories') ) { my %right_categories = %{$Context->RightCategories}; for my $right (keys %available_rights) { my $category = $right_categories{$right} || 'Miscellaneous'; # loc push @{$categories{$category}}, $right; } } # Find all the current rights for this principal my %current_rights; if ($Principal) { my $acls = RT::ACL->new($session{'CurrentUser'}); $acls->LimitToObject( $Context ); $acls->LimitToPrincipal( Id => $Principal->PrincipalId ); while ( my $ace = $acls->Next ) { my $right = $ace->RightName; $current_rights{$right} = 1; } } my %category_desc = ( 'General' => loc('General rights'), 'Staff' => loc('Rights for Staff'), 'Admin' => loc('Rights for Administrators'), 'Status' => loc('Status changes'), ); my %catsort = ( General => 1, Staff => 2, Admin => 3, Status => 4, Miscellaneous => 999 ); my $i = 5; for my $category ( sort keys %categories ) { next if $catsort{$category}; $catsort{$category} = $i++; } $acldesc ||= join '-', ($Principal ? $Principal->PrincipalId : 'addprincipal'), ref($Context), $Context->Id; $available_rights{$_} = loc( $available_rights{$_} ) for keys %available_rights;
      % for my $category (sort { $catsort{$a} <=> $catsort{$b} } keys %categories) {
      ">
        % for my $right (sort { $available_rights{$a} cmp $available_rights{$b} } @{$categories{$category}}) {
      • />
      • % }
      % }
      rt-4.2.12/share/html/Admin/Elements/EditScrips000644 000765 000024 00000013675 12555754775 021565 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/ListActions, actions => \@actions &>

      <&|/l&>Scrips

      <&|/l&>Scrips normally run after each individual change to a ticket.
      % my $scrips = $find_scrips->(Stage => 'TransactionCreate'); <& /Elements/CollectionList, %common_applied_args, Collection => $scrips &> % unless ( $scrips->Count ) {

      <&|/l&>(No scrips)

      % }

      <&|/l&>Batch scrips

      <&|/l&>Batch scrips run after a set of related changes to a ticket.
      % $scrips = $find_scrips->(Stage => 'TransactionBatch'); <& /Elements/CollectionList, %common_applied_args, Collection => $scrips &> % unless ( $scrips->Count ) {

      <&|/l&>(No scrips)

      % } <& /Elements/Submit, Name => 'RemoveScrips', Caption => loc("Un-apply selected scrips"), Label => loc("Update"), &>

      <&|/l&>Not applied scrips

      % $scrips = $find_scrips->(Added => 0); <& /Elements/CollectionList, Rows => $Rows, Page => 1, %ARGS, Collection => $scrips, Format => $Format, DisplayFormat => "__CheckBox.{AddScrip}__, $Format", AllowSorting => 1, PassArguments => [ qw(Format Rows Page Order OrderBy id) ], &> % unless ( $scrips->Count ) {

      <&|/l&>(No scrips)

      % } <& SelectStageForAdded &> <& /Elements/Submit, Name => 'AddScrips', Caption => loc("Apply selected scrips"), Label => loc("Update"), &>
      <%init> my (@actions); if ( $id ) { my $QueueObj = RT::Queue->new($session{'CurrentUser'}); $QueueObj->Load( $id ); Abort(loc("Couldn't load queue #[_1]", $id)) unless $QueueObj->id; } $id ||= 0; my $find_scrips = sub { my %args = (Added => 1, @_); my $scrips = RT::Scrips->new($session{'CurrentUser'}); $scrips->LimitByStage( $args{'Stage'} ) if $args{'Stage'}; my $method = $args{'Added'}? 'LimitToAdded' : 'LimitToNotAdded'; $scrips->$method(0, $id); $scrips->ApplySortOrder if $args{'Added'}; $scrips->FindAllRows; return $scrips; }; $Format ||= RT->Config->Get('AdminSearchResultFormat')->{'Scrips'}; my $Rows = RT->Config->Get('AdminSearchResultRows')->{'Scrips'} || 50; my $DisplayFormat = $Format; if ( $id ) { $DisplayFormat = "__RemoveCheckBox__, $DisplayFormat"; } else { $DisplayFormat = "__CheckBox.{RemoveScrip}__, $DisplayFormat"; } $DisplayFormat .= ", __Move.{$id}__"; my %common_applied_args = ( %ARGS, Format => $Format, DisplayFormat => $DisplayFormat, Rows => 0, Page => 1, AllowSorting => 0, PassArguments => [ qw(Format id) ], ); if ( $RemoveScrips ) { foreach my $sid ( @RemoveScrip ) { my $scrip = RT::Scrip->new( $session{'CurrentUser'} ); $scrip->Load( $sid ); next unless $scrip->id; my ($status, $msg) = $scrip->RemoveFromObject( $id ); push @actions, $msg; } } if ( $AddScrips ) { foreach my $sid ( @AddScrip ) { my $scrip = RT::Scrip->new( $session{'CurrentUser'} ); $scrip->Load( $sid ); next unless $scrip->id; my ($status, $msg) = $scrip->AddToObject( $id, Stage => $Stage ); push @actions, $msg; } } if ( $MoveScripUp ) { my $scrip = RT::ObjectScrip->new( $session{'CurrentUser'} ); $scrip->LoadByCols( Scrip => $MoveScripUp, ObjectId => $id ); if ( $scrip->id ) { my ($status, $msg) = $scrip->MoveUp; push @actions, $msg; } } if ( $MoveScripDown ) { my $scrip = RT::ObjectScrip->new( $session{'CurrentUser'} ); $scrip->LoadByCols( Scrip => $MoveScripDown, ObjectId => $id ); if ( $scrip->id ) { my ($status, $msg) = $scrip->MoveDown; push @actions, $msg; } } <%ARGS> $id => undef $title => undef $Format => undef @RemoveScrip => () $RemoveScrips => undef @AddScrip => () $AddScrips => undef $Stage => 'TransactionCreate' $MoveScripUp => undef $MoveScripDown => undef rt-4.2.12/share/html/Admin/Elements/EditTemplates000644 000765 000024 00000007661 12555754775 022256 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/ListActions, actions => \@actions &>
      % unless ( $Templates->Count ) {

      <&|/l&>(No templates)

      % } else { <& /Elements/CollectionList, OrderBy => 'id', Order => 'ASC', Rows => $Rows, %ARGS, DisplayFormat => '__CheckBox.{DeleteTemplates}__,'. $Format, Format => $Format, Collection => $Templates, AllowSorting => 1, PassArguments => [qw(Format Rows Page Order OrderBy FindDisabledQueues)], &> <&|/l&>(Check box to delete) % } <& /Elements/Submit, Label => loc('Delete Template') &>
      <%INIT> $Format ||= RT->Config->Get('AdminSearchResultFormat')->{'Templates'}; my $Rows = RT->Config->Get('AdminSearchResultRows')->{'Templates'} || 50; my $QueueObj = RT::Queue->new( $session{'CurrentUser'} ); $QueueObj->Load( $id ) if $id; my $Templates = RT::Templates->new($session{'CurrentUser'}); if ( $QueueObj->id ) { $Templates->LimitToQueue( $id ); } else { $Templates->LimitToGlobal; } # Now let callbacks add their extra limits $m->callback( %ARGS, Templates => $Templates ); $Templates->RedoSearch; # deal with deleting existing templates my @actions; # backwards compatibility, use DeleteTemplates array for this foreach my $key (keys %ARGS) { next unless $key =~ /^DeleteTemplate-(\d+)/; push @DeleteTemplates, $1; } foreach my $id( @DeleteTemplates ) { my $TemplateObj = RT::Template->new( $session{'CurrentUser'} ); $TemplateObj->Load( $id ); unless ( $TemplateObj->id ) { push @actions, loc("Couldn't load template #[_1]", $id); next; } my ($retval, $msg) = $TemplateObj->Delete; if ( $retval ) { push @actions, loc("Template #[_1] deleted", $id); } else { push @actions, $msg; } } <%ARGS> $id => 0 $Format => undef @DeleteTemplates => () rt-4.2.12/share/html/Admin/Elements/Header000644 000765 000024 00000004062 12555754775 020672 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, %ARGS &> <%ARGS> $Title => undef rt-4.2.12/share/html/Admin/Elements/LoggingSummary000644 000765 000024 00000007321 12555754775 022447 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%init> my @summary; if (my $level = RT->Config->Get("LogToSTDERR")) { push @summary, loc("Logging [_1] level messages and higher to STDERR, which will usually end up in your webserver's error logs.", $level); } if (my $level = RT->Config->Get("LogToFile") and my $logger = RT->Logger->output("file")) { # Using the Log::Dispatch::File object let's us avoid duplicating # filename logic from RT::InitLogging() push @summary, loc("Logging [_1] level messages and higher to [_2]", $level, $logger->{filename}); } if (my $level = RT->Config->Get("LogToSyslog")) { my %conf = RT->Config->Get("LogToSyslogConf"); my $conf = join ", ", map { "$_=$conf{$_}" } keys %conf; if ($conf) { push @summary, loc("Logging [_1] level messages and higher to syslog with the following configuration: [_2]", $level, $conf); } else { push @summary, loc("Logging [_1] level messages and higher to syslog.", $level); } } if (my $level = RT->Config->Get("LogStackTraces")) { push @summary, loc("Stack traces are added to message levels [_1] and higher.", $level); } else { push @summary, loc("Stack traces are not logged."); } if (my $level = RT->Config->Get("StatementLog")) { my $url = RT->Config->Get("WebPath") . "/Admin/Tools/Queries.html"; push @summary, \loc("SQL queries are logged at the [_1] level and also available in the [_2]query tool[_3].", $m->interp->apply_escapes($level, 'h'), qq[], ''); } else { push @summary, loc("SQL queries are not logged."); }

      <&|/l&>RT's logging configuration is summarized below:

        % for my $msg (@summary) {
      • <% ref($msg) ? $$msg : $m->interp->apply_escapes($msg, 'h') |n %>
      • % }

      rt-4.2.12/share/html/Admin/Elements/MembershipsPage000644 000765 000024 00000011712 12555754775 022555 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions &>

      <&|/l&>Groups the principal is member of (check box to delete)

      <& /Elements/CollectionList, OrderBy => 'Name', Order => 'ASC', %ARGS, Rows => $Rows, DisplayFormat => "__CheckBox.{Delete}__,$Format", Format => $Format, Collection => $is_member, AllowSorting => 1, PassArguments => [qw(Format Rows Page Order OrderBy id)], &>

      <&|/l&>Groups the principal is not member of (check box to add)

      <& /Elements/CollectionList, OrderBy => 'Name', Order => 'ASC', Rows => $Rows, %ARGS, DisplayFormat => "__CheckBox.{Add}__,'__HasMemberRecursively.{$id}__/TITLE:Recursive member',$Format", Format => $Format, Collection => $is_not_member, AllowSorting => 1, PassArguments => [qw(Format Rows Page Order OrderBy id)], &> <& /Elements/Submit, Label => loc('Update'), Name => 'Update' &>
      <%INIT> my $principal = RT::Principal->new( $session{'CurrentUser'} ); $principal->Load( $id ) || Abort(loc("Couldn't load principal #[_1]", $id)); my $object = $principal->Object; $id = $object->id; if ( $Update ) { my @results; foreach my $gid( @Add ) { my $group = RT::Group->new( $session{'CurrentUser'} ); $group->LoadUserDefinedGroup( $gid ); unless ( $group->id ) { push @results, loc( "Couldn't load group #[_1]", $gid ); next; } my ($status, $msg) = $group->AddMember( $id ); push @results, $msg; } foreach my $gid( @Delete ) { my $group = RT::Group->new( $session{'CurrentUser'} ); $group->LoadUserDefinedGroup( $gid ); unless ( $group->id ) { push @results, loc( "Couldn't load group #[_1]", $gid ); next; } my ($status, $msg) = $group->DeleteMember( $id ); push @results, $msg; } MaybeRedirectForResults( Arguments => { id => $id }, Actions => \@results, ); } my $is_member = RT::Groups->new( $session{'CurrentUser'} ); $is_member->LimitToUserDefinedGroups; $is_member->WithMember( PrincipalId => $id ); my $is_not_member = RT::Groups->new( $session{'CurrentUser'} ); $is_not_member->LimitToUserDefinedGroups; $is_not_member->WithoutMember( PrincipalId => $id ); $is_not_member->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => $id ); $Format ||= RT->Config->Get('AdminSearchResultFormat')->{'Groups'}; my $Rows = RT->Config->Get('AdminSearchResultRows')->{'Groups'} || 50; my $title; if ( $principal->IsUser ) { $title = loc("Memberships of the user [_1]", $object->Name); } elsif ( $principal->IsGroup ) { $title = loc("Memberships of the group [_1]", $object->Name); } else { $title = loc("Memberships of the principal #[_1]", $id); } <%ARGS> $id => undef $Update => 0, @Add => (), @Delete => (), $Format => undef rt-4.2.12/share/html/Admin/Elements/ModifyTemplate000644 000765 000024 00000006142 12555754775 022426 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
      <&|/l&>Name:
      <&|/l&>Description:
      <&|/l&>Type: >
      >
      <&|/l&>Content:
      <%INIT> unless ($Type) { $Type = $session{'CurrentUser'}->HasRight(Right => 'ExecuteCode', Object => $RT::System) ? 'Perl' : 'Simple'; } <%ARGS> $Name => '' $Description => '' $Content => '' $Type => '' rt-4.2.12/share/html/Admin/Elements/Portal000644 000765 000024 00000004313 12555754775 020742 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
      <&| /Widgets/TitleBox, title => loc('RT Portal') &>
      rt-4.2.12/share/html/Admin/Elements/SelectCustomField000644 000765 000024 00000005523 12555754775 023063 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $CustomFields = RT::CustomFields->new($session{'CurrentUser'}); $CustomFields->UnLimit; $CustomFields->LimitToLookupType( $LookupType ) if $LookupType; $CustomFields->OrderByCols( { FIELD => 'LookupType' }, { FIELD => 'Name' } ); $Default = $Default->id || 0 if ref $Default; <%ARGS> $None => 1 $Name => 'BasedOn' $Default => 0 $LookupType => 'RT::Queue-RT::Ticket' $OnlySelectionType => 1 $Not => 0 rt-4.2.12/share/html/Admin/Elements/SelectCustomFieldLookupType000644 000765 000024 00000004527 12555754775 025122 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $cf = RT::CustomField->new($session{'CurrentUser'}); <%ARGS> $Default=> '' $Name => 'LookupType' rt-4.2.12/share/html/Admin/Elements/SelectCustomFieldRenderType000644 000765 000024 00000004657 12555754775 025074 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $cf = RT::CustomField->new($session{'CurrentUser'}); $Default ||= $cf->DefaultRenderType($TypeComposite); my @types = $cf->RenderTypes($TypeComposite); <%ARGS> $Default => undef $TypeComposite => 'Select-0' $Name => 'RenderType' $BasedOn => 0 rt-4.2.12/share/html/Admin/Elements/SelectCustomFieldType000644 000765 000024 00000004566 12555754775 023733 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $cf = RT::CustomField->new($session{'CurrentUser'}); $Default = "Freeform-1" if $Default eq "-0"; <%ARGS> $Default=>undef $Name => 'TypeComposite' rt-4.2.12/share/html/Admin/Elements/SelectGroups000644 000765 000024 00000004557 12555754775 022132 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $groups = RT::Groups->new($session{'CurrentUser'}); $groups->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => $Domain, CASESENSITIVE => 0 ); <%ARGS> $Name => 'groups' $Domain => 'UserDefined'; rt-4.2.12/share/html/Admin/Elements/SelectNewGroupMembers000644 000765 000024 00000006754 12555754775 023735 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ( $Show ne 'Groups' ) { % } % if ( $Show ne 'Users' ) { % }
      <%INIT> my $user_ids = join(',', grep { $SkipUsers->{$_} } keys %$SkipUsers); my $group_ids = join(',', grep { $SkipGroups->{$_} } keys %$SkipGroups); <%ARGS> $Name => 'Users' $Show => 'All' $Group $SkipUsers => {} $SkipGroups => {} rt-4.2.12/share/html/Admin/Elements/SelectScripAction000644 000765 000024 00000005462 12555754775 023065 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $ScripActions = RT::ScripActions->new($session{'CurrentUser'}); # hide user-defined if the user can't execute code if ($session{CurrentUser}->HasRight(Object => $RT::System, Right => 'ExecuteCode')) { $ScripActions->UnLimit; } else { $ScripActions->Limit( FIELD => 'ExecModule', OPERATOR => '!=', VALUE => 'UserDefined', ); } $ScripActions->OrderBy(FIELD => 'Name'); <%ARGS> $Default => undef $Name => 'ScripAction' rt-4.2.12/share/html/Admin/Elements/SelectScripCondition000644 000765 000024 00000005515 12555754775 023575 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $ScripConditions = RT::ScripConditions->new($session{'CurrentUser'}); # hide user-defined if the user can't execute code if ($session{CurrentUser}->HasRight(Object => $RT::System, Right => 'ExecuteCode')) { $ScripConditions->UnLimit; } else { $ScripConditions->Limit( FIELD => 'ExecModule', OPERATOR => '!=', VALUE => 'UserDefined', ); } $ScripConditions->OrderBy(FIELD => 'Name'); <%ARGS> $Default => undef $Name => 'ScripCondition' rt-4.2.12/share/html/Admin/Elements/SelectStage000644 000765 000024 00000005014 12555754775 021703 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> if ( !defined $Default || $Default eq '') { $Default = 'TransactionCreate'; } my @stages = ('TransactionCreate', 'TransactionBatch'); <%ARGS> $Default => 'TransactionCreate' $Name => 'Stage' rt-4.2.12/share/html/Admin/Elements/SelectStageForAdded000644 000765 000024 00000004213 12555754775 023274 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}}
      <% $Label %> <& SelectStage, %ARGS &>
      <%args> $Label => loc('Select scrip stage for newly added queues:') rt-4.2.12/share/html/Admin/Elements/SelectUsers000644 000765 000024 00000004726 12555754775 021752 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <%INIT> my $users = RT::Users->new($session{'CurrentUser'}); $users->Limit(FIELD => 'id', VALUE => RT->SystemUser->id, OPERATOR => '!=' ); $users->Limit(FIELD => 'id', VALUE => RT->Nobody->id, OPERATOR => '!=' ); $users->LimitToPrivileged(); <%ARGS> $Name => 'Users' rt-4.2.12/share/html/Admin/Elements/ShowKeyInfo000644 000765 000024 00000010210 12555754775 021677 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <&| /Widgets/TitleBox, title => $title &> % while ( my $protocol = shift @protocols ) { % my %res = RT::Crypt->GetKeyInfo( % Protocol => $protocol, % Key => $EmailAddress, % Type => $Type, % ); % if ( $res{'exit_code'} ) { % } elsif ( !keys %{ $res{'info'} } ) { % } else { % if ( $Type ne 'private' && $res{'info'}{'Trust'} ) { % } % $_->CurrentUser( $session{CurrentUser} ) for grep {$_} (@{$res{'info'}}{qw|Created Expire|}); % foreach my $uinfo( @{ $res{'info'}{'User'} } ) { % if ($uinfo->{'Created'} or $uinfo->{'Expire'}) { % $_->CurrentUser( $session{CurrentUser} ) for grep {$_} ($uinfo->{'Created'}, $uinfo->{'Expire'}); % } else { % } % } % } % if ( @protocols ) { % } % }
      <% loc("Couldn't get [_1] keys information", $protocol) %>
      <% loc('No [_1] keys for this address', $protocol) %>
      <% loc("[_1] key '[_2]'", $protocol, $res{'info'}{'Formatted'} ) %>
      <% loc('Trust') %>: <% loc( $res{'info'}{'Trust'} ) %>
      <% loc('Fingerprint') %>: <% $res{'info'}{'Fingerprint'} %>
      <% loc('Created') %>: <% $res{'info'}{'Created'}? $res{'info'}{'Created'}->AsString( Time => 0 ): loc('never') %>
      <% loc('Expire') %>: <% $res{'info'}{'Expire'}? $res{'info'}{'Expire'}->AsString( Time => 0 ): loc('never') %>
      <% loc('User (created - expire)') %>: <% $uinfo->{'String'} %> \ (<% $uinfo->{'Created'}? $uinfo->{'Created'}->AsString( Time => 0 ): loc('never') %> - \ <% $uinfo->{'Expire'}? $uinfo->{'Expire'}->AsString( Time => 0 ): loc('never') %>)
      <% loc('User') %>: <% $uinfo->{'String'} %>
       
      <%ARGS> $EmailAddress $Type => 'public' <%INIT> my @protocols = RT::Crypt->EnabledProtocols; my $title; unless ( $Type eq 'private' ) { $title = loc('Public key(s) for [_1]', $EmailAddress); } else { $title = loc('Private key(s) for [_1]', $EmailAddress); } rt-4.2.12/share/html/Admin/Elements/UpgradeHistory000644 000765 000024 00000005476 12555754775 022465 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % for my $package (@packages) { % my ($version_status, @lines) = RT->System->ParsedUpgradeHistory($package);

      <% $package %> (<% $version_status %>)

      % my $i = 0; % for my $upgrade (@lines) { <& UpgradeHistoryRow, i => \$i, row => $upgrade &> % }
        <&|/l&>Action <&|/l&>Date <&|/l&>Elapsed <&|/l, $package &>[_1] Version
      % } <%init> my $upgrade_history = RT->System->UpgradeHistory; my @packages = ('RT', sort grep { $_ ne 'RT' } keys %$upgrade_history); rt-4.2.12/share/html/Admin/Elements/UpgradeHistoryRow000644 000765 000024 00000007731 12555754775 023151 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} % if ($top) { % } % if ($row->{'action'} eq 'upgrade') { # type is more specific for upgrades <&|/l, $row->{'from'}, $row->{'to'} &>Upgrade from [_1] to [_2] % } elsif ( $row->{'action'} eq 'insert' ) { <&|/l, $row->{filename} &>Insert from [_1] % } elsif ( $row->{'action'} eq 'schema' ) { <&|/l, $row->{filename} &>Schema updates from [_1] % } elsif ( $row->{'action'} eq 'acl' ) { <&|/l, $row->{filename} &>ACL updates from [_1] % } elsif ( $row->{'action'} eq 'indexes' ) { <&|/l, $row->{filename} &>Index updates from [_1] % } else { <% ucfirst($row->{action}) %> % } % if (not $complete) { <&|/l&>(Incomplete) % } <% $timestamp->AsString %> <% $duration %> <% $row->{ext_version} || $row->{rt_version} %> % for (@{$kids || []}) { <& UpgradeHistoryRow, row => $_, indent => $indent+1, i => $i &> % } <%args> $indent => 0 $i $row <%init> my $complete = $row->{return_value} ? $row->{return_value}[0] : $row->{end}; my $kids = $row->{sub_events}; my $top = $row->{full_id} eq $row->{individual_id}; my @classes; push @classes, $complete ? 'complete' : 'incomplete'; push @classes, $$i++ % 2 ? 'oddline' : 'evenline'; push @classes, 'upgrade-history-'.$row->{full_id} unless $top; my $timestamp = RT::Date->new($session{CurrentUser}); $timestamp->Set(Value => $row->{timestamp}); my $duration = $row->{end} ? $timestamp->DurationAsString($row->{end} - $row->{timestamp}) : ''; rt-4.2.12/share/html/Admin/CustomFields/GroupRights.html000644 000765 000024 00000005744 12555754775 023557 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
      <& /Admin/Elements/EditRights, Context => $CustomFieldObj, Principals => \@principals &> <& /Elements/Submit, Label => loc('Save Changes') &>
      <%INIT> if (!defined $id) { $m->comp("/Elements/Error", Why => loc("No CustomField defined")); } my $CustomFieldObj = RT::CustomField->new($session{'CurrentUser'}); $CustomFieldObj->Load($id) || $m->comp("/Elements/Error", Why => loc("Couldn't load CustomField [_1]",$id)); my @results = ProcessACLs( \%ARGS ); my $title = loc('Modify group rights for custom field [_1]', $CustomFieldObj->Name); # Principal collections my @principals = GetPrincipalsMap($CustomFieldObj, qw(System Roles Groups)); <%ARGS> $id => undef rt-4.2.12/share/html/Admin/CustomFields/index.html000644 000765 000024 00000007632 12555754775 022407 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> % my $tmp = RT::CustomField->new( $session{'CurrentUser'} );

      <% $Type ? loc("Custom Fields for [_1]", $Type) : loc('All Custom Fields') %>

      <&|/l&>Only show custom fields for:
      />
      % $m->callback(CallbackName => 'BeforeSubmit');
      <& /Elements/CollectionList, OrderBy => 'LookupType|Name', Order => 'ASC|ASC', Rows => $Rows, %ARGS, Collection => $CustomFields, Format => $Format, DisplayFormat => ($Type? '' : '__FriendlyLookupType__,'). $Format, AllowSorting => 1, PassArguments => [ qw(Format Rows Page Order OrderBy), qw(Type ShowDisabled) ], &> <%args> $Type => '' $ShowDisabled => 0 $Format => undef <%INIT> my $title = loc('Select a Custom Field'); my $CustomFields = RT::CustomFields->new($session{'CurrentUser'}); $CustomFields->UnLimit; $CustomFields->FindAllRows if $ShowDisabled; $CustomFields->LimitToLookupType( $Type ) if $Type; $m->callback(CallbackName => 'MassageCustomFields', CustomFields => $CustomFields); $Format ||= RT->Config->Get('AdminSearchResultFormat')->{'CustomFields'}; my $Rows = RT->Config->Get('AdminSearchResultRows')->{'CustomFields'} || 50; rt-4.2.12/share/html/Admin/CustomFields/Modify.html000644 000765 000024 00000031263 12555754775 022524 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title, Focus => (($added_cfv or $ARGS{FocusAddValue}) ? "input[name=CustomField-$id-Value-new-Name]" : undef), &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
      % if ( $CustomFieldObj->Id and $CustomFieldObj->HasRenderTypes ) { % } % if ( $CustomFieldObj->Id and $CustomFieldObj->IsSelectionType and RT->Config->Get('CustomFieldValuesSources') and ( scalar(@{RT->Config->Get('CustomFieldValuesSources')}) > 0 ) ) { % } % if ( $CustomFieldObj->Id && $CustomFieldObj->IsSelectionType ) { % } % $m->callback(CallbackName => 'BeforeEnabled', CustomField => $CustomFieldObj, CFvalidations => \@CFvalidations); % $m->callback(CallbackName => 'EndOfTable', CustomField => $CustomFieldObj, CFvalidations => \@CFvalidations);
      <&|/l&>Name
      <&|/l&>Description
      <&|/l&>Type <& /Admin/Elements/SelectCustomFieldType, Name => "TypeComposite", Default => $CustomFieldObj->TypeComposite, &>
      <&|/l&>Render Type <& /Admin/Elements/SelectCustomFieldRenderType, Name => "RenderType", TypeComposite => $CustomFieldObj->TypeComposite, Default => $CustomFieldObj->RenderType, BasedOn => $CustomFieldObj->BasedOnObj->id, &>
      <&|/l&>Field values source: <& /Admin/Elements/EditCustomFieldValuesSource, CustomField => $CustomFieldObj &>
      <&|/l&>Applies to <& /Admin/Elements/SelectCustomFieldLookupType, Name => "LookupType", Default => $CustomFieldObj->LookupType || $LookupType, &>
      <&|/l&>Validation <& /Widgets/ComboBox, Name => 'Pattern', Default => $CustomFieldObj->Pattern || $Pattern, Size => 20, Values => \@CFvalidations, &>
      <&|/l&>Link values to
      <&|/l&>RT can make this custom field's values into hyperlinks to another service. <&|/l&>Fill in this field with a URL. <&|/l_unsafe, '__id__', '__CustomField__' &>RT will replace [_1] and [_2] with the record's id and the custom field's value, respectively.
      <&|/l&>Include page
      <&|/l&>RT can include content from another web service when showing this custom field. <&|/l&>Fill in this field with a URL. <&|/l_unsafe, '__id__', '__CustomField__' &>RT will replace [_1] and [_2] with the record's id and the custom field's value, respectively. <&|/l&>Some browsers may only load content from the same domain as your RT server.
      <&|/l&>Categories are based on <& /Admin/Elements/SelectCustomField, Name => "BasedOn", LookupType => $CustomFieldObj->LookupType, Default => $CustomFieldObj->BasedOnObj || $BasedOn, Not => $CustomFieldObj->id, &>
        />
      % if ( $CustomFieldObj->Id && $CustomFieldObj->IsSelectionType && !$CustomFieldObj->IsExternalValues ) {

      <&|/l&>Values

      <& /Admin/Elements/EditCustomFieldValues, CustomField => $CustomFieldObj &> <& /Admin/Elements/AddCustomFieldValue, CustomField => $CustomFieldObj &>
      % } <& /Elements/Submit, Name => 'Update', Label => $id eq 'new'? loc('Create'): loc('Save Changes') &>
      <%INIT> my ($title, @results, $added_cfv); my $CustomFieldObj = RT::CustomField->new( $session{'CurrentUser'} ); $m->callback(CallbackName => 'Initial', Pattern => \$Pattern, ARGSRef => \%ARGS); unless ( $id ) { $title = loc("Create a CustomField"); $id = 'new'; } else { if ( $id eq 'new' ) { my ( $val, $msg ) = $CustomFieldObj->Create( Name => $Name, TypeComposite => $TypeComposite, LookupType => $LookupType, Description => $Description, Pattern => $Pattern, LinkValueTo => $LinkValueTo, IncludeContentForValue => $IncludeContentForValue, BasedOn => $BasedOn, Disabled => ($Enabled ? 0 : 1), ); if (!$val) { push @results, loc("Could not create CustomField: [_1]", $msg); $title = loc( 'Create a CustomField'); } else { push @results, loc("Object created"); $title = loc( 'Created CustomField [_1]', $CustomFieldObj->Name ); } } else { push @results, loc('No CustomField') unless $CustomFieldObj->Load( $id ); $title = loc( 'Editing CustomField [_1]', $CustomFieldObj->Name ); } } if ( $ARGS{'Update'} && $id ne 'new' ) { #we're asking about enabled on the web page but really care about disabled. $ARGS{'Disabled'} = $Enabled? 0 : 1; my @attribs = qw(Disabled Pattern Name TypeComposite LookupType Description LinkValueTo IncludeContentForValue); push @results, UpdateRecordObject( AttributesRef => \@attribs, Object => $CustomFieldObj, ARGSRef => \%ARGS ); if ( ($ValuesClass||'RT::CustomFieldValues') ne $CustomFieldObj->ValuesClass ) { my $original = $CustomFieldObj->ValuesClass; my ($good, $msg) = $CustomFieldObj->SetValuesClass( $ValuesClass ); if ( $good ) { $msg = loc("[_1] changed from '[_2]' to '[_3]'", loc("Field values source"), $original, $ValuesClass ); } push @results, $msg; } # Set the render type if we have it, but unset it if the new type doesn't # support render types if ( $CustomFieldObj->HasRenderTypes($TypeComposite) ) { my $original = $CustomFieldObj->RenderType; if ( defined $RenderType and $RenderType ne $original ) { # It's changed! Let's update it. my ($good, $msg) = $CustomFieldObj->SetRenderType( $RenderType ); if ( $good ) { $msg = loc("[_1] changed from '[_2]' to '[_3]'", loc("Render Type"), $original, $RenderType ); } push @results, $msg; } } else { # Delete it if we no longer support render types $CustomFieldObj->SetRenderType( undef ); } if (($CustomFieldObj->BasedOn||'') ne ($BasedOn||'')) { my ($good, $msg) = $CustomFieldObj->SetBasedOn( $BasedOn ); push @results, $msg; } my $paramtag = "CustomField-". $CustomFieldObj->Id ."-Value"; # Delete any fields that want to be deleted foreach my $key ( keys %ARGS ) { next unless $key =~ /^Delete-$paramtag-(\d+)$/; my ($val, $msg) = $CustomFieldObj->DeleteValue( $1 ); push (@results, $msg); } # Update any existing values my $values = $CustomFieldObj->ValuesObj; while ( my $value = $values->Next ) { foreach my $attr (qw(Name Description SortOrder Category)) { my $param = join("-", $paramtag, $value->Id, $attr); next unless exists $ARGS{$param}; $ARGS{$param} =~ s/^\s+//; $ARGS{$param} =~ s/\s+$//; next if ($value->$attr()||'') eq ($ARGS{$param}||''); my $mutator = "Set$attr"; my ($id, $msg) = $value->$mutator( $ARGS{$param} ); push (@results, $msg); } $m->callback(CallbackName => 'AfterUpdateCustomFieldValue', CustomFieldObj => $CustomFieldObj, CustomFieldValueObj => $value, ARGSRef => \%ARGS ); } # Add any new values if ( defined $ARGS{ $paramtag ."-new-Name" } && length $ARGS{ $paramtag ."-new-Name" } ) { my ($id, $msg) = $CustomFieldObj->AddValue( map { $ARGS{$paramtag."-new-$_"} =~ s/^\s+//; $ARGS{$paramtag."-new-$_"} =~ s/\s+$//; $_ => $ARGS{ $paramtag ."-new-$_" } } qw/ Name Description SortOrder Category/ ); push (@results, $msg); $added_cfv = 1 if $id; my $cfv = RT::CustomFieldValue->new( $session{CurrentUser} ); $cfv->Load($id); $m->callback(CallbackName => 'AfterCreateCustomFieldValue', CustomFieldObj => $CustomFieldObj, CustomFieldValueObj => $cfv, ARGSRef => \%ARGS ); } } if ( $CustomFieldObj->id && $CustomFieldObj->IsOnlyGlobal ) { my ( $ret, $msg ); my $object = $CustomFieldObj->RecordClassFromLookupType->new( $session{'CurrentUser'} ); if ( $CustomFieldObj->Disabled && $CustomFieldObj->IsGlobal ) { ( $ret, $msg ) = $CustomFieldObj->RemoveFromObject($object); } elsif ( !$CustomFieldObj->Disabled && !$CustomFieldObj->IsGlobal ) { ( $ret, $msg ) = $CustomFieldObj->AddToObject($object); } # successful msg("object created" or "object deleted ) is useless here push @results, $msg unless $ret; } $id = $CustomFieldObj->id if $CustomFieldObj->id; # This code does automatic redirection if any updates happen. MaybeRedirectForResults( Actions => \@results, Arguments => { id => $id, FocusAddValue => ($added_cfv ? 1 : 0) }, ) if $CustomFieldObj->id; my $EnabledChecked = qq[checked="checked"]; $EnabledChecked = '' if $CustomFieldObj->Disabled; my @CFvalidations = ( '(?#Mandatory).', '(?#Digits)^[\d.]+$', '(?#Year)^[12]\d{3}$', ); $m->callback(CallbackName => 'ValidationPatterns', Values => \@CFvalidations); <%ARGS> $id => undef $TypeComposite => undef $LookupType => RT::Ticket->CustomFieldLookupType $MaxValues => undef $SortOrder => undef $Description => undef $Pattern => undef $Name => undef $SetEnabled => undef $Enabled => 0 $ValuesClass => 'RT::CustomFieldValues' $RenderType => undef $LinkValueTo => undef $IncludeContentForValue => undef $BasedOn => undef rt-4.2.12/share/html/Admin/CustomFields/Objects.html000644 000765 000024 00000012444 12555754775 022666 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
      % if ( $CF->IsGlobal ) {

      <&|/l&>Applies to all objects

      % } else {

      <&|/l&>Apply globally

      % unless ( $CF->IsOnlyGlobal ) {

      <&|/l&>Selected objects

      <& /Elements/CollectionList, OrderBy => 'id', Order => 'ASC', %ARGS, Collection => $added, Rows => 0, Page => 1, Format => $format, DisplayFormat => "'__CheckBox.{RemoveCustomField-". $CF->id ."}__',". $format, AllowSorting => 0, ShowEmpty => 0, PassArguments => [ qw(id Format Rows Page Order OrderBy), ], &>

      <&|/l&>Unselected objects

      <& /Elements/CollectionList, OrderBy => 'id', Order => 'ASC', %ARGS, Collection => $not_added, Rows => $rows, Format => $format, DisplayFormat => "'__CheckBox.{AddCustomField-". $CF->id ."}__',". $format, AllowSorting => 1, ShowEmpty => 0, PassArguments => [ qw(id Format Rows Page Order OrderBy), ], &> % } % } <& /Elements/Submit, Name => 'UpdateObjs' &>
      <%INIT> my $CF = RT::CustomField->new($session{'CurrentUser'}); $CF->Load($id) or Abort(loc("Could not load CustomField [_1]", $id)); my $class = $CF->RecordClassFromLookupType; Abort(loc("Something wrong. Contact system administrator")) unless $class; my (@results); if ( $UpdateObjs ) { if ( defined (my $del = $ARGS{'RemoveCustomField-'.$CF->id}) ) { foreach my $id ( ref $del? (@$del) : ($del) ) { my $object = $class->new( $session{'CurrentUser'} ); if ( $id ) { $object->Load( $id ); next unless $object->id; } my ($status, $msg) = $CF->RemoveFromObject( $object ); push @results, $msg; } } if ( defined (my $add = $ARGS{'AddCustomField-'.$CF->id}) ) { foreach my $id ( ref $add? (@$add) : ($add) ) { my $object = $class->new( $session{'CurrentUser'} ); if ( $id ) { $object->Load( $id ); next unless $object->id; } my ($status, $msg) = $CF->AddToObject( $object ); push @results, $msg; } } } my $added = $CF->AddedTo; my $not_added = $CF->NotAddedTo; my $collection_class = ref($added); $collection_class =~ s/^RT:://; my $format = RT->Config->Get('AdminSearchResultFormat')->{$collection_class} || '__id__,__Name__'; my $rows = RT->Config->Get('AdminSearchResultRows')->{$collection_class} || 50; my $title = loc('Modify associated objects for [_1]', $CF->Name); <%ARGS> $id => undef $FindDisabledObjects => 0 $UpdateObjs => 0 rt-4.2.12/share/html/Admin/CustomFields/UserRights.html000644 000765 000024 00000005726 12555754775 023401 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
      <& /Admin/Elements/EditRights, Context => $CustomFieldObj, Principals => \@principals &> <& /Elements/Submit, Label => loc('Save Changes') &>
      <%INIT> # Update the acls. my @results = ProcessACLs( \%ARGS ); if (!defined $id) { $m->comp("/Elements/Error", Why => loc("No Class defined")); } my $CustomFieldObj = RT::CustomField->new($session{'CurrentUser'}); $CustomFieldObj->Load($id) || $m->comp("/Elements/Error", Why => loc("Couldn't load Class [_1]",$id)); my $title = loc('Modify user rights for custom field [_1]', $CustomFieldObj->Name); # Principal collections my @principals = GetPrincipalsMap($CustomFieldObj, qw(Users)); <%ARGS> $id => undef rt-4.2.12/share/html/Admin/Articles/Classes/000755 000765 000024 00000000000 12555754775 021144 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Articles/Elements/000755 000765 000024 00000000000 12555754775 021323 5ustar00sartakstaff000000 000000 rt-4.2.12/share/html/Admin/Articles/index.html000644 000765 000024 00000004222 12555754775 021544 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Article Administration') &> <& /Elements/Tabs &> <& /Elements/ListMenu, menu => Menu()->child('admin')->child('articles') &> rt-4.2.12/share/html/Admin/Articles/Elements/Topics000644 000765 000024 00000015441 12555754775 022514 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/ListActions, actions => \@results &>
      % if (!$Modify) {
      <&|/l&>Topic Name
      <&|/l&>Description
      % } else { New topic % } <& .tree, Element => $tree, Action => $Modify ? "Move" : "Add", Prefix => $Modify ? "Topic-$Modify-Parent" : "Insert", RootObj => $RootObj, Modify => $Modify &>
      <%def .edit>  
      Topic Name:
      Description:
      <%args> $topic <%def .tree> % my $topic = $Element->getNodeValue; % unless ($Element->isRoot) { % if ($Modify and $topic->Id == $Modify) { % $Action = ""; <& .edit, topic => $topic &> % } else { <%$topic->Name || loc("(no name)") %> % } % }
        % for my $e (sort {$a->getNodeValue->Name cmp $b->getNodeValue->Name} $Element->getAllChildren) {
      • <& .tree, Element => $e, Action => $Action, Prefix => $Prefix, RootObj => $RootObj, Modify => $Modify &>
      • % } % if ($Action) { % unless ($Action eq "Move" and grep {$_->getNodeValue->Id == $Modify} $Element->getAllChildren) {
      • Id%>" value="<% $Action eq 'Move' ? loc('Move here') : loc('Add here') %>" />
      • % } % }
      <%args> $Element $Action $Prefix $RootObj $Modify <%INIT> my @results; for my $k (keys %ARGS) { if ($k =~ /^Topic-(\d+)-(Name|Description)/) { my $topic = RT::Topic->new($session{'CurrentUser'}); $topic->Load($1); if ($topic->Id) { next if $ARGS{$k} eq $topic->$2; my $proc = "Set$2"; my ($val, $msg) = $topic->$proc($ARGS{$k}); push @results, $msg; } else { $m->comp("/Elements/Error", Why => loc("Topic not found")); } } elsif ($k =~ /^Topic-(\d+)-Parent-(\d+)/) { my $topic = RT::Topic->new($session{'CurrentUser'}); $topic->Load($1); if ($topic->Id) { next if $2 eq $topic->Parent; my $old = $topic->Parent; my $new = "$2"; my ($val, $msg) = $topic->setParent($new); push @results, $msg; } else { $m->comp("/Elements/Error", Why => loc("Topic not found")); } } elsif ($k =~ /^Insert-(\d+)/) { my $topic = RT::Topic->new($session{'CurrentUser'}); my ($id, $msg) = $topic->Create( Parent => $1, Name => $ARGS{'Name'}, Description => $ARGS{'Description'}, ObjectType => ref($RootObj), ObjectId => $RootObj->Id, ); push @results, $msg; } } for my $k (keys %ARGS) { next unless $k =~ /^Delete-Topic-(\d+)/; my $topic = RT::Topic->new($session{'CurrentUser'}); $topic->Load($1); if ($topic->Id) { my ($val, $msg) = $topic->DeleteAll(); push @results, $msg; } else { $m->comp("/Elements/Error", Why => loc("Topic not found")); } } my $topics = RT::Topics->new($session{'CurrentUser'}); $topics->LimitToObject($RootObj); $topics->OrderByCols({FIELD => 'Parent'}, {FIELD => 'id'}); use Tree::Simple; my $tree = Tree::Simple->new(Tree::Simple->ROOT); my %lookup = (0 => $tree); my @todo; while (my $topic = $topics->Next) { push @todo, $topic; } { my $changed = 0; my @work = @todo; @todo = (); for my $topic (@work) { if (defined $lookup{$topic->Parent}) { $lookup{$topic->Id} = Tree::Simple->new($topic, $lookup{$topic->Parent}); $changed = 1; } else { push @todo, $topic; } } redo unless $changed == 0; } for my $topic (@todo) { $topic->setParent(0); $lookup{$topic->Id} = Tree::Simple->new($topic, $tree); push @results, "Reparented orphan ".$topic->Id." to root"; } <%ARGS> $RootObj => undef $title => "" $Modify => "" rt-4.2.12/share/html/Admin/Articles/Classes/CustomFields.html000644 000765 000024 00000005054 12555754775 024437 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, Object => $Object, ObjectType => 'RT::Class', SubType => 'RT::Article' &> <%INIT> my $Object = RT::Class->new( $session{'CurrentUser'} ); $Object->Load($id) || Abort( loc( "Couldn't load object [_1]", $id ) ); my $FriendlySubTypes = RT::CustomField->new( $session{'CurrentUser'} ) ->FriendlyLookupType( $Object->CustomFieldLookupType ); my $title = loc( 'Edit Custom Fields for [_1]', $Object->Name ); <%ARGS> $id => undef rt-4.2.12/share/html/Admin/Articles/Classes/GroupRights.html000644 000765 000024 00000005526 12555754775 024317 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Modify group rights for Class [_1]', $ClassObj->Name) &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
      <& /Admin/Elements/EditRights, Context => $ClassObj, Principals => \@principals &> <& /Elements/Submit, Label => loc('Save Changes') &>
      <%INIT> if (!defined $id) { $m->comp("/Elements/Error", Why => loc("No Class defined")); } my $ClassObj = RT::Class->new($session{'CurrentUser'}); $ClassObj->Load($id) || $m->comp("/Elements/Error", Why => loc("Couldn't load Class [_1]",$id)); my @results = ProcessACLs(\%ARGS); my @principals = GetPrincipalsMap($ClassObj, qw(System Groups)); <%ARGS> $id => undef rt-4.2.12/share/html/Admin/Articles/Classes/index.html000644 000765 000024 00000006522 12555754775 023146 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc("Select a Class") &> <& /Elements/Tabs &>

      <%$caption%>:

      <&|/l&>Select a Class:

      % unless ($Classes->Count) { <&|/l&>No Classes matching search criteria found. % } else { <& /Elements/CollectionList, OrderBy => 'Name', Order => 'ASC', Rows => $Rows, %ARGS, Format => $Format, Collection => $Classes, AllowSorting => 1, PassArguments => [qw( Format Rows Page Order OrderBy FindDisabledClasses )], &> % }

      <%INIT> my $caption; my $Classes = RT::Classes->new($session{'CurrentUser'}); if ($FindDisabledClasses) { $caption = loc("All Classes"); $Classes->{'find_disabled_rows'} = 1; $Classes->UnLimit(); } else { $caption = loc("Enabled Classes"); $Classes->LimitToEnabled(); } $Format ||= RT->Config->Get('AdminSearchResultFormat')->{'Classes'}; my $Rows = RT->Config->Get('AdminSearchResultRows')->{'Classes'} || 50; <%ARGS> $FindDisabledClasses => 0 $Format => undef rt-4.2.12/share/html/Admin/Articles/Classes/Modify.html000644 000765 000024 00000017621 12555754775 023270 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
      %if ($Create ) { % } else { % }
      <&|/l&>Class Name:
      <&|/l&>Description:
        >
        >

      <&|/l&>When inserting articles in this class into emails:

      • >
      • >
      • % if ( $cfs ) { % while (my $cf = $cfs->Next) {
      • <&|/l, $cf->Name &>Include custom field '[_1]'
        • Id} %> />
        • Id} %> />
      • % } }
      % if ( @$subject_cfs ) {

      <&|/l&>Change email subject:

      <&|/l&>If a Custom Field is selected, the Subject of your outgoing email will be overridden by this article.

      <& /Widgets/Form/Select, Name => 'SubjectOverride', DefaultLabel => loc('No Subject Override'), Values => $subject_cfs, ValuesLabel => $subject_cf_labels, CurrentValue => $ClassObj->SubjectOverride, &> % } %$m->callback( CallbackName => 'BeforeSubmit', CustomFields => $cfs, ClassObj => $ClassObj ); % if ( $Create ) { <& /Elements/Submit, Label => loc('Create') &> % } else { <& /Elements/Submit, Label => loc('Save Changes') &> % }
      <%INIT> my $ClassObj = RT::Class->new($session{'CurrentUser'}); my ($title, @results, $Disabled); if ($Create) { $title = loc("Create a Class"); } else { my ( $val, $msg ); if ($id eq 'new') { ($val, $msg) = $ClassObj->Create(Name => $Name); if ( $val ) { push @results, $msg; } else { push @results, loc('Class could not be created: [_1]', $msg); } } else { $ClassObj->Load($id) || $ClassObj->Load($Name) || $m->comp("/Elements/Error", Why => "Couldn't load class '$Name'"); $val = $ClassObj->id; } if ( $val ) { $title = loc('Modify the Class [_1]', $ClassObj->Name); } else { $title = loc("Create a Class"); $Create = 1; } } if ($ClassObj->Id()) { if ($ARGS{SubjectOverride}) { $ARGS{SubjectOverride} = $m->comp('/Widgets/Form/Select:Process', Arguments => \%ARGS, Name => 'SubjectOverride', DefaultValue => (''), ); } $ARGS{HotList} ||= 0 if $Submitted; my @attribs= qw(Description Name HotList SubjectOverride); $m->callback( CallbackName => 'AttributeList', Attributes => \@attribs, ARGSRef => \%ARGS ); push @results, UpdateRecordObject( AttributesRef => \@attribs, Object => $ClassObj, ARGSRef => \%ARGS); } #we're asking about enabled on the web page but really care about disabled. if ((defined $Enabled && $Enabled == 1) or (not defined $Enabled and $Create)) { $Disabled = 0; } else { $Disabled = 1; } my %include = (Name => 1, Summary => 1); my $subject_cfs = []; my $subject_cf_labels = {}; my $cfs; if ( $ClassObj->id ) { $cfs = $ClassObj->ArticleCustomFields; while ( my $cf = $cfs->Next ) { $include{"CF-Title-".$cf->Id} = $include{"CF-Value-".$cf->Id} = 1; push @$subject_cfs,$cf->Id; $subject_cf_labels->{$cf->Id} = $cf->Name; } } if ( $ClassObj->id && $Submitted ) { if ( $Disabled != $ClassObj->Disabled) { my ($code, $msg) = $ClassObj->SetDisabled($Disabled); push @results, loc('Enabled status [_1]', loc_fuzzy($msg)); } for (keys %include) { if ($ARGS{"Include-$_"}) { $ClassObj->DeleteAttribute("Skip-$_"); } else { $ClassObj->SetAttribute(Name => "Skip-$_", Content => 1); } } } # This code does automatic redirection if any updates happen. MaybeRedirectForResults( Actions => \@results, Arguments => { id => $ClassObj->Id }, ) if $ClassObj->id; if ( $ClassObj->id ) { $include{$_} = not $ClassObj->FirstAttribute("Skip-$_") for keys %include; } $include{$_} = $include{$_} ? " CHECKED" : "" for keys %include; my $EnabledChecked = ($Create ? $Disabled : $ClassObj->Disabled()) ? "" : "CHECKED"; my $HotListChecked = $ClassObj->id && $ClassObj->HotList ? "CHECKED" : ""; <%ARGS> $id => undef $result => undef $Name => undef $Create => undef $Description => undef $Submitted => undef $Enabled => undef rt-4.2.12/share/html/Admin/Articles/Classes/Objects.html000644 000765 000024 00000012223 12555754775 023423 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
      % if ( $is_global ) {

      <&|/l&>Applies to all objects

      % } else {

      <&|/l&>Apply globally

      <&|/l&>Selected Queues

      <& /Elements/CollectionList, OrderBy => 'id', Order => 'ASC', %ARGS, Collection => $applied, Rows => 0, Page => 1, Format => $format, DisplayFormat => "'__CheckBox.{RemoveClass-". $Class->id ."}__',". $format, AllowSorting => 0, ShowEmpty => 0, PassArguments => [ qw(id Format Rows Page Order OrderBy), ], &>

      <&|/l&>Unselected Queues

      <& /Elements/CollectionList, OrderBy => 'id', Order => 'ASC', %ARGS, Collection => $not_applied, Rows => $rows, Format => $format, DisplayFormat => "'__CheckBox.{AddClass-". $Class->id ."}__',". $format, AllowSorting => 1, ShowEmpty => 0, PassArguments => [ qw(id Format Rows Page Order OrderBy), ], &> % } <& /Elements/Submit, Name => 'UpdateObjs' &>
      <%INIT> my $Class = RT::Class->new($session{'CurrentUser'}); $Class->Load($id) or Abort(loc("Could not load Class [_1]"), $id); my (@results); if ( $UpdateObjs ) { if ( defined (my $del = $ARGS{'RemoveClass-'.$Class->id}) ) { foreach my $id ( ref $del? (@$del) : ($del) ) { my $object = RT::Queue->new( $session{'CurrentUser'} ); if ( $id ) { $object->Load( $id ); next unless $object->id; } my ($status, $msg) = $Class->RemoveFromObject( $object ); push @results, $msg; } } if ( defined (my $add = $ARGS{'AddClass-'.$Class->id}) ) { foreach my $id ( ref $add? (@$add) : ($add) ) { my $object = RT::Queue->new( $session{'CurrentUser'} ); if ( $id ) { $object->Load( $id ); next unless $object->id; } my ($status, $msg) = $Class->AddToObject( $object ); push @results, $msg; } } } my $is_global = $Class->IsApplied(0); my $applied = $Class->AppliedTo; my $not_applied = $Class->NotAppliedTo; my $collection_class = ref($applied); $collection_class =~ s/^RT:://; my $format = RT->Config->Get('AdminSearchResultFormat')->{$collection_class} || '__id__,__Name__'; my $rows = RT->Config->Get('AdminSearchResultRows')->{$collection_class} || 50; my $title = loc('Modify associated objects for [_1]', $Class->Name); <%ARGS> $id => undef $FindDisabledObjects => 0 $UpdateObjs => 0 rt-4.2.12/share/html/Admin/Articles/Classes/Topics.html000644 000765 000024 00000004751 12555754775 023302 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> <& /Admin/Articles/Elements/Topics, title => $title, RootObj => $ClassObj, %ARGS &> <%INIT> my $ClassObj = RT::Class->new($session{'CurrentUser'}); $ClassObj->Load($ARGS{'id'}) || $m->comp("/Elements/Error", Why => "Couldn't load class '$id'"); my $title = $Modify ? loc("Modify topic for [_1]", $ClassObj->Name) : loc("Edit topic hierarchy for [_1]", $ClassObj->Name); <%ARGS> $id => undef $Modify => "" rt-4.2.12/share/html/Admin/Articles/Classes/UserRights.html000644 000765 000024 00000005501 12555754775 024132 0ustar00sartakstaff000000 000000 %# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Modify user rights for class [_1]', $ClassObj->Name) &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &>
      <& /Admin/Elements/EditRights, Context => $ClassObj, Principals => \@principals &> <& /Elements/Submit, Label => loc('Save Changes') &> <%INIT> my @results = ProcessACLs(\%ARGS); if (!defined $id) { $m->comp("/Elements/Error", Why => loc("No Class defined")); } my $ClassObj = RT::Class->new($session{'CurrentUser'}); $ClassObj->Load($id) || $m->comp("/Elements/Error", Why => loc("Couldn't load Class [_1]",$id)); my @principals = GetPrincipalsMap($ClassObj, 'Users'); <%ARGS> $id => undef rt-4.2.12/share/fonts/Droid.README000644 000765 000024 00000000711 12555754775 017055 0ustar00sartakstaff000000 000000 Droid is a font family created by Ascender Corporation for use by the Open Handset Alliance platform Android and licensed under the Apache license. The fonts are intended for use on the small screens of mobile handsets and were designed by Steve Matteson of Ascender Corporation. The name was derived from the Open Handset Alliance platform name Android. Droid Sans Fallback is a font with CJK support. See Also: http://en.wikipedia.org/wiki/Droid_(font) rt-4.2.12/share/fonts/DroidSans.ttf000644 000765 000024 00000443124 12555754775 017553 0ustar00sartakstaff000000 000000 LTSH"mý tcOS/2Ÿƒ•[˜`cmapÕeA;L8cvt 9’=ÀIlüfpgmsÓ#°?„gaspFH glyf÷àÜP( @hdmxV‚ý Ø-theadëÑWû6hheaxT$hmtxe…ðûø zkernÙ‰æ]hËîloca>É‚>KhÀmaxpx nameùȤ)X jpostJœOÖ4Ä„prep;ùî©FŒÝÁ=ØÍ_<õÁš3ÃuÚRþ ýÕôÙmþ Zþ þ¢ô^_‘z/ZÝkš3š3Ðfò à¯@ [(1ASC@ ÿýþ„mã ŸJ¶ ÍÁ'“7…+3h{šfžmÏ…hRh=hRhf?“R%“ühbh²h`hRhhƒhqhZhjhj%“%?hfhfhfh%îmÝøÇÓ}yÇ9ÇîÇ…}œÇ¶R+ÿH¢ÇîÇöÇÕÇð}œÇî}¸Ç'h'–¸‹`7PRm¤üm3B)Jÿüž‰?^°®´q°qHq¢%%¶® ÿ¼ø®®+®¶®žq°®°q1®œZ¶!¶¤Õø#é ‡RÕ=héÕ3hf'“h¼hDh{hhéãyž3¨d¦DåRhf“R¨dÿúm{hf¦1¦ž‰Á®=q%“¤#¦?ÍBåTå?å,åhDÝÝÝÝÝÝÑÿþÓ}9Ç9Ç9Ç9Ƕ>¶R¶¶@y/ÕÇð}ð}ð}ð}ð}hð}–¸–¸–¸–¸7œÇÑ®?^?^?^?^?^?^ª^´qHqHqHqHqÿÞ®ÿ½ÿîžo¶®žqžqžqžqžqhfžs¶¤¶¤¶¤¶¤é °®é Ý?^Ý?^Ý?^Ó}´qÓ}´qÓ}´qÓ}´qyǰqy/°q9ÇHq9ÇHq9ÇHq9ÇHq9ÇHq…}%%…}%%…}%%…}%%œÇ¶®œ¶¶ÿõÿ£¶=ÿë¶0ÿÞ¶RD¶R®áR% +ÿHÿ¼¢Çø®ø®îÇ«îÇfîÇ®îÇf®îÿöÕǶ®ÕǶ®ÕǶ®FÿÿÕǶ®ð}žqð}žqð}žq}Hq¸Ç1®¸Ç1`¸Ç1r'hœZ'hœZ'hœZ'hœZ'¶!'¶!'¶!–¸¶¤–¸¶¤–¸¶¤–¸¶¤–¸¶¤–¸¶¤ø7é 7PR‡RPR‡RPR‡RL®hËÝ?^Ñÿþª^ð}žs'hœZžžuž! žm{žžßžøžÝÿé%“Éÿçÿç²ÿçBÿçTÿçJÿçžÿäÝøÇîÇ‹%9ÇPRœÇð}¶R¢Ç‹öÇÕÇ?Rð}‡ÇœÇBN'7#h`#hðN¶@7°q Z¶®ž¤¸¤°qÑ®é žo Z¤q¶®‡qž¤ø®ÿòÁ®#¤qžq ž¤¤q´q˜¸¤–q1ÿìì¤qž¸¤žq¸¤q9Ç îÇÓ}'h¶R¶@+ÿHHuÇ ¢Ç®‡ÇÝœÇøÇîÇ39Ç…\HÕÉÕÉ¢ÇZöÇœÇð}‡ÇœÇÓ}'®#h`šÇH¦úÇúÇ=–ÇœÇÁ;Ǹ?^u‰®3®`)HqîDé®é®î®^¾®é®žqÁ®°®´q‡)é “q#Ñ®¬šô®®m)þ®‰®²7y®?#Hq¶3®´qœZ ÿîÿ¼ƒå®¶î®é Á®îÇ3®øøø7é RRRJÿüff?fçç?ã{ø{–o“ ZfÏ…7…NRNRö“ þ øjh`hD–h?hwçÇþ%ðNôfS3Oq¦b‹)îÇ Jhfd%¨whfhfhfhfªm´´žÏÿ¼‡o}¦%¦ ¦;¦%¦/¦1¦!«Uh%šÍTTÿ¼fÍ R öÇ+®Ý?^BþÓªs3“V_( +    &"  "&   *. . * .  ( '    ' &&&&&& """"" "& . .... &&&     ..          $ ...."""*(****   ...... &&0 &"*$&-  &""" &"& . . -(0&""0$  .* .    &+   *" &+  . &d                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ,~@>~’ðÿ¼ÇÉÝ󊌡ÎÒÖ O\_‘?…óM   " & 0 3 : < D  ¤ § ¬!!!!"!&!.!^"""""""+"H"`"e%Êûþÿÿýÿÿ  ’ðú¼ÆÉØó„ŒŽ£ÑÖQ^>€òM   & 0 2 9 < D  £ § ¬!!!!"!&!.!["""""""+"H"`"d%ÊûþÿÿüÿÿÿãÿÂÿ°aÿIÿ1ÿ–þ…þ„þvÿhýÐýÏýÎýÍþ‚þý›ýšý™ý˜ýhäXäãzãã âBáïáîáíáêáááàáÛáÚáÓá™ávátápáá á àþàûàôàÈà%à"àààààßçßÐßÍÜiOS45]^   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a†‡‰‹“˜ž£¢¤¦¥§©«ª¬­¯®°±³µ´¶¸·¼»½¾ rdeix¡pk vj0ˆš-s12gw'*).l|!¨ºcn,B/(m}‚…—  ¹3Á:f45y „ŒƒŠ‘Ž•–”œ›óKRqNOPzSQL@EYXUTSRQPONMLKJIHGFEDCBA@?>=<;:9876510/.-,('&%$#"! ,E#F` °&`°&#HH-,E#F#a °&a°&#HH-,E#F`° a °F`°&#HH-,E#F#a° ` °&a° a°&#HH-,E#F`°@a °f`°&#HH-,E#F#a°@` °&a°@a°&#HH-, <<-, E# °ÍD# ¸ZQX# °D#Y °íQX# °MD#Y °&QX# ° D#Y!!-, EhD °` E°FvhŠE`D-,± C#Ce -,± C#C -,°(#p±(>°(#p±(E:± -, E°%Ead°PQXED!!Y-,I°#D-, E°C`D-,°C°Ce -, i°@a°‹ ±,ÀŠŒ¸b`+ d#da\X°aY-,ŠEŠŠ‡°+°)#D°)zä-,Ee°,#DE°+#D-,KRXED!!Y-,KQXED!!Y-,°%# Šõ°`#íì-,°%# Šõ°a#íì-,°%õíì-,F#F`ŠŠF# FŠ`Ša¸ÿ€b# #б ŠpE` °PX°a¸ÿº‹°FŒY°`h:-, E°%FRK°Q[X°%F ha°%°%?#!8!Y-, E°%FPX°%F ha°%°%?#!8!Y-,°C°C -,!! d#d‹¸@b-,!°€QX d#d‹¸ b²@/+Y°`-,!°ÀQX d#d‹¸Ub²€/+Y°`-, d#d‹¸@b`#!-,KSXа%Id#Ei°@‹a°€b° aj°#D#°ö!#Š 9/Y-,KSX °%Idi °&°%Id#a°€b° aj°#D°&°öа#D°ö°#D°íа& 9# 9//Y-,E#E`#E`#E`#vh°€b -,°H+-, E°TX°@D E°@aD!!Y-,E±0/E#Ea`°`iD-,KQX°/#p°#B!!Y-,KQX °%EiSXD!!Y!!Y-,E°C°`c°`iD-,°/ED-,E# EŠ`D-,E#E`D-,K#QX¹3ÿà±4 ³34YDD-,°CX°&EŠXdf°`d° `f X!°@Y°aY#XeY°)#D#°)à!!!!!Y-,°CTXKS#KQZX8!!Y!!!!Y-,°CX°%Ed° `f X!°@Y°a#XeY°)#D°%°% XY°%°% F°%#B<°%°%°%°% F°%°`#B< XY°%°%°)à°) EeD°%°%°)à°%°% XY°%°%CH°%°%°%°%°`CH!Y!!!!!!!-,°% F°%#B°%°%EH!!!!-,°% °%°%CH!!!-,E# E °P X#e#Y#h °@PX!°@Y#XeYŠ`D-,KS#KQZX EŠ`D!!Y-,KTX EŠ`D!!Y-,KS#KQZX8!!Y-,°!KTX8!!Y-,°CTX°F+!!!!Y-,°CTX°G+!!!Y-,°CTX°H+!!!!Y-,°CTX°I+!!!Y-, Š#KSŠKQZX#8!!Y-,°%I°SX °@8!Y-,F#F`#Fa#  FŠa¸ÿ€bб@@ŠpE`h:-, Š#IdŠ#SX<!Y-,KRX}zY-,°KKTB-,±B±#ˆQ±@ˆSZX¹ ˆTX²C`BY±$ˆQX¹ @ˆTX²C`B±$ˆTX² C`BKKRX²C`BY¹@€ˆTX²C`BY¹@€c¸ˆTX²C`BY¹@c¸ˆTX²C`BY¹@c¸ˆTX²@C`BYYYYY-,Eh#KQX# E d°@PX|YhŠ`YD-,°°%°%°#>°#>± ° #eB° #B°#?°#?± °#eB°#B°-,zŠE#õ-@ øÿ÷Ÿ÷ó`ò¸ÿè@+ë Fß3ÝUÞÿÜU0ÝÝUÜú0ÂoÀïÀü¶0·`·€·¸ÿÀ@8·F籯/¯?¯O¯_¯o¯@¯F¬Qœ_œà›+ššš šsšƒš¸ÿê@š F¯—¿—+––Ÿ–¯–|–¸ÿê@…– F/’?’O’@’ F/‘Ÿ‘‡†@|P|t t0ttòt oÿo©o—ouo…oKo nÿn©n—nKnUÿÿÿ?gg/g?gÿg@fPf f°f?ee¯e dàd¸ÿÀ@Kd F`_G_P"÷[ì[T[„[I[;[ùZïZkZKZ;Z3UU3U?¯WW/W¸ÿÀ³VF¸ÿà³V F¸ÿÀ³TF¸ÿÀ@eT F?POP_PúHïH‡HeHVH:HúGïG‡G;Gÿ3UU3UUGUúÏÿo¯ï€¸±TS++K¸ÿRK°P[°ˆ°%S°ˆ°@QZ°ˆ°UZ[X±ŽY…BK°2SX°`YK°dSX°@YK°€SX°±BYss^stu+++++++_sssssssssss++++_sst+++_ssssssssss+++_s^stsst++++_sssstssssststt_s+st+s+_sstt_s+_sstt_ss++sts+st+ss++s+++sss+^ N¶u¶ÍJÿìÿìÿìþþ¬¶¼ÕUƒ—Ÿ}å®®qqºÅº¤ŸÇÇ}}°¹Š›¦w–in´ÁÕfox–ÀÕGþ:Åxþöî–ˆ®–‰ –”Z‚–¨ŒyÙ´ ƒm mˆ“ ‚‰¶ü”ÿïƒm{¼ªT¼¶×•–®¶þ¼þoþƒo­****o¡)âq)M|¬âD[•´?”eÌ?g‚Ú = y » ÷ j 4    t ³ ì 9 — ÍI—·+|Õ"‹üf§å8îMžÑ÷;Yp•i®k΢ã_¯È9wÀ"ƒÉ9ŽÏ'ÔeÎu™õHHô j!!t!¤"]"¡#J#´$$5$=% %#%~%º& &&¤&î'+'e'«'â(*(z(£(È(÷)m)…)œ)´)Ë)ä* *r*…**´*Ì*å*ý++++D+¨+¿+×+î,,,6,›--4-K-c-|-“-Ý.x..¥.».Ñ.é//±/Ä/Û/ñ00070N0e0~11$1;1Q1h11˜2 2‚2™2¯2Å2Þ2ô3Y3q3‰3Ÿ3¶3Ì3ã444/4F4^4u4Ž4¥4½4Õ4è4ð5i5€5–5­5Ã5Ú5ñ66&6=6S6j6€6—6®6Å6Ý6ð777;7Œ7ç7þ88,8C8Z8q8„8˜8¯8È8ñ99,9C9V9i9²9Ê9ç9ú::&:>:Q:t:Á;;%;;;O;b;y;;²<>%>8>L>d>|>“>©>À>Ö>ê>ý??*?=?Q?h?z?Ñ@;@S@i@@—@®@Ä@Ý@õAA&A9ALAcAzA‘A§AÀA×AíBBB2BHB{BßCÁD–D®DÅDÜDòEEENE„EœE×EþFNF{FÂGG2G£G¼GöHHAH‚H³HçII(I0I8IjI¶I¾IÆIÎJ=JEJMJ™J¡J©JöJþK)K1KyKK‰LL LŽMM)MBMXMnM„MœM±N#N¥OOŒPPnP®Q Q^QfQâR0RrSSSnSÈT7TTÚUUšV.VWW2WKWaWwW•W®X(X?XªX²XºXÓXÛYrYÑZ/ZFZ]Z¦Z®[[ [[„[Œ\\œ\û]][]¿]Ç]Ï]×]ß]ç]ï]÷^g^o^w^¬^ó_;_‘_ç`=`‹`îaeaâaêbeb×bÿcecmcâd`d¤d»dõe@e¥eëeóff$f,fkfsfðføg2grg½hhshÕiiˆiüjSjkjÚjðkLkTk\kuk}kõlTl®lÄlÚmmTmm—m®mÅmÜmönn(n@n[nvn‘nºnåooDoroÎp*p”pïquq¸r]s*s2s:sms¢s´sÒttpt÷uvvÃwAw÷x~x†xéyyAypy›zzbz‘zÛ{{-{É||£}}`}¤}ð~~-~p~£~É~îVŸü€[€Š'‘‘‘‘‘‘‘‘‘‘‘‘‘‘‚ÛƒNƒZƒb„ „ˆ…$…;…R…f…z…§…ô†G†t† Á ¶+@  p€¸ÿÀ@  H?2/3/+]33/310!!7!!ÁIü·hyý‡¶úJhæ“ÿã‘¶:¹ÿð@ H€ š¸ÿÀ@  H ›?/õÎ/+3/á2]10+#34>32#".Py3ßð"./""/."žú¹&5!!5&%5""5…¦²¶7@#˜ Ð à / o  ˜àð?33/3/]á]]9/á10#!#J)s)-)r)¶ýðýð3ø¶™@X±!  ± P P  H  ®  ®?Oß   /3?399//]33á2233á]22/]33/3/]ä9293/ä92393/3/10!!#!#!5!!5!3!3!!!×?þÍR“TþÝRNþþAþî+R“R%TTüë#@þÝ}þ¸‰þT¬þT¬‰H‰°þP°þP‰þ¸H{ÿ‰Ù-6?´@34/))/!!p/<753&&'4.'66Ù2]…TŠ2f`T !W`e/YƒV*1[OŠd©CB8ŒJX‡[.°+F3][þ(B1YS¾FrT7 æÝ ¬!²BUnJCoS5 ´°*‘)þZBSkH!7-&þ‹b£$9/&qYfÿì3Ë ';?]²<>¸ÿð@3<><>(´2µ#´(AA´ µ´ 0?>%¶7·!¶-¶·¶?áôá?áôá??/]áôá]Þáôá99//881032#"#".54>3232#"#".54>32#úGPœœPGÇ$JsOIpL&#IqNKqM'¬GPœœPGÆ#JsOJpK&#IqNKqL'ÿüÕž,¥¥JH£¥l¬v??v¬llªu>>uªýJ¥¤IH£¥l«v??v«llªu>>uª’úJ¶mÿì}Í!S€@M'JI,IH G6AGB B6B6B;54.#"2>7%4>7.54>32>73#'#".¦!4$;V8/B*Vd‡:bTH þ}4P7#B`þ}(MoG<-2^ŠXSƒ[02Tm<`+" ¸)5A'á¨1`l|Ni§s="AAC%#>@F)$=,Yû¯(6—!?HU86[A$ðNzdV*$MWc9KwS++SwK@m]O$þŒ73#.R$JqN¬Œ‘%GjEªNqJ$1}óåÓ]Áþ2ôwìâÔ^ZÎáð=þ¼¶@ò ð°øù??Þ]áä210#>54'3$KqNªEjH$¬NqK$1|ðáÎZ^ÔâìwôÎÁ]ÓåóRw$@˜€?2/]/^]å]10%'%7˜+þ†õ²°ž¸òþ‰‡+þwoÁþº`fþš`FÁo‰f¢ )@  ªï `  ­³?3á2/]]2á2]10!5!3!!#éþ}ƒ–ƒþ}–‡–…þ{–þ?þøyî 8@Ï  +  —¸ÿÀ@ H_œ /í/]]+3í2]]]10%#>7j'/3Šî6z|{8=„ƒ}5RÑBy@ @¹/á/]Î105!RðѨ¨“ÿã‘ú5@€  –ÀÐ4Ddt¸ÿÀ¶ H›/í/+]]í]]1074>32#".“"./""/."o&5!!5&%5""5ç¶±¸ÿð@ ?/382/8310#çýà³!¶úJ¶bÿìÍ'&@o))o  #ss?á?á/]á]Þá10#"&&54663232>54.#"3q²v¯s93o±~w°t:ýBkMMlEElMMkBݱþèÂff±±ÁfeÁþè²–à•KJ”á—–à”JJ”à²Ç¶5@!@n¿ÿ~ @ ??Í/^]]]á3/3]10!#4>7'3ǰ”`–‘+baY"y{+`ðË#<@ #o%%"o! " s"t?á2?á39/]3/3í]3/á310!!5>54.#"'>32!ðüp^KvS,"?V5_™Ef(\jvA`›l;5]Kþ籜}Q†€L;Z? M54.##532>54.#"'>32Á.StG±¸A„ÊŠmÁUWË]\†W)5bY……Q~U,$B\8k£J\&]n}Fl£n8`IxX9 µ‘` t@"-ª.2(JlCDa?—(Jf=4R9C6}6)6a…?¾ N@, Vn  w‡_ t??39/3á22/]3]]9/]3333á2/]210##!533!4>7#?Õ°ý]—¼Õþ{  þeHþ¸HŸ×ü0d8{uf"11.ý ƒÿìö¶*N@&o,,'$$(h#Y###ð¸ÿÀ@ Hs't$s ?3á?á9/á/+]3/]]333]Þá3102#".'532>54&#"'!!66!c«HD†Å€3c[R!!Ybc*O|V.°¨??9Z7²ýì' i7l ir¶~C ¬$ %NvQ— 9°¦þ]qÿì Ë+?7@ 1n "AA;o 6u,s's?á?á9/á/]á2]Þ2á104>32&&#"3>32#".2>54.#"q5\ŽÆ…./+#X+Z‰dC* 9L_;_šl;>t¤fd¯€JÛnÕ#Ì#º###  h8˜8Y8(888H88“C&CVCCC-s;s?á?á9/]]Á]]]99/]3/]]]áá]Î2/]]á9á9102#".54>7.54>32>54.''">54&5T•qB(F`8:oW5Cy©fn«u=-Lh:1V?%Cr•Ç DhHFkH$'If?~€j}#>W30U?$~Í,X„XClWEL_vI\•h86e’\Kx`JIZmBWƒX,û¦5Y?##A\84TH@<›Tje9R@34BT6ejjÿìË)=5@9o??/n   4u*s%u?á?á9/á/]3á]Þá210#".'532>7##".54>32"32>54.5\ŽÆ…..,#X+‡®f+ 8L`;_šl;?s¥fe®€Jþ%.;r¥jr·DN óG(TWFoN*/K`0C…kB“ÿã‘f'>@)€)) ) –ÀÐ4Ddt¸ÿÀ@  H#››/í?í/+]]3å2]1074>32#".4>32#".“"./""/.""./""/."o&5!!5&%5""5‘'5!!5'%4""4?þø‘f a@/"€"" "–À Ð d t P D ;  /   +  —¸ÿÀ@H_›œ /í?í/]]+3í2]3/]]]]]]å]10%#>74>32#".j'/3Š"./""/."î6z|{8=„ƒ}5í'5!!5'%4""4fîÝN@0@@o0 Pp€Ðð?/^]]]q33/]]29=/33/]]Î10%5üdœý!ßî¨fá þ”þ¾fºé\@= @ Æ»©†{hB9­/­ðo/]]á3/^]]qá/]]]]]]]]3]Î2105!5!fœüdœT••þf––fîÝN@0@@o0 Pp€Ðð?/^]]]q33/]]39=/33/]]Î105fàý œüdBl þfþX%ÿã%Ë';>@!2š(('F F=/= -›7Q?á3/å2/^]9/]Þá9/á3/á1054>7>54.#"'66324>32#".'B20D+9U8S–F?Q¼a]•h86P64B&»"./""/."ž%9\PM*)CEO50O94"‘*;3`‹WCiZT/-C?B,þÑ&5!!5&%5""5mÿJ¶Who@?X`'''FF'N1 j@j;@NN, [d¿@6S@EI/3Á?Á99//^]^]Á3Á22/]Á]ÞqÁ9///]]ÁÁ10#".'##".54>3232>54.#"32>7#"$&546$3232>77&&#"%9La:-I4!6GY5MwR+;ožb-ZRE"+.F/V˜Ñ{©þþ¯ZO™ã“=wod+VØ‚³þçÃfvÛ7Áœ¿jüeU7N2M*Je?Û>}qaH)2A#%B18eŽVe¨zDþ`5D(=hŒNŽÝ˜OoÇþê R&,fó¼Eîˆe½þñþÕ…w-SsEý :^xݼ„@$FFII€Ð¸ÿÀ@ H/Ÿß¸ÿð@_ H?2?9/9+á/83^]3/8+]q39=/99]]99]]3310!!#3.' ýߢ¼ªþg”‘Åþ;¼úDj¨4 ZåõÖ$*[p€g1111$Zd0 #`y $`"`?á?á9/^]]á9öá2]]ö]á9/]]qá210!2#!32>54&##!2>54.#ǀÃB'JmEEyZ4A{°oþºôTrFš¦ß XwI !K|\¶'Wg>lR7 -OxVdm:J;Y;xhý—ýð(He=8^C%}ÿì˜Ë#L@¯@Hº ` p  ¸ÿÀ@ H %¯%[f$!_ _?á3?á3öá]3/+]]9/+]10"3267#"&&546632&&k®{C;v°vY N'NUa;¤ðLW©ú¢lÄON?”'Q˜Ú‰Û–N#¢lÆ©¦Æn,*œ .Çü¶ &@ [gZd``?á?áöá]öá10#!!24.##3 ü`¶þ÷¨þ’—™ø®_ÅB~¸uÉ¢ é¹þé»^¶\µþô¶’ÕŠCû‰$Ǿ¶ B@&g  Zd _O¯ _ _?á?á9/^]qáöá2æ29/]10!!!!!!!¾ý ÷ýÃýé=¶¤þ<¢ýøÇ¾¶ p@ÿ€Ð¸ÿÀ@8 H  / ¯ Zd _?oÿ@H@H_??á9/++^]qáöá2^]3/+]]q9/10!#!!!!º÷ýÃý鶤ýü¤}ÿìòË+7@++ )Zg--[ f,+_$_$_?á?á9/áöá]ö2á9/10!#"&&546$32.#"32>7!ä7pv‚Kò¦V_¶ «oÌXH$SX].z¼B7x¾†,I>7þÕý3 iî¬Ãi,*¢Q˜Ú‰‚ØœV ´ÇÕ¶ =@# Ze À ¿  Zd _ ?2?39/^]áöá2]]]öá210!#!#3!3ÕºýfººšºªýV¶ý˜hRd¶ W@& + { › « û T + ; K   Zɸÿø@ H  ?Á2?Á2/^]+]Á2ñÁ2_]]]]q10!!57'5!dý¬¬f)˜)ff)ûh)ÿHþ{s¶/@ß`p/Z    _/á?/^]3/á]]]10"&'532>533L"N-%K=&»;i“þ{   2XD¶ú^iše1Ç¢¶ d@- f   °/Zd  H¸ÿð@ H ?3?399++öá2]]]3/8^]33/839]310!##373¢Óþ=‹ººyÄÑýøºrý¸¶ý%¨3ýƒÇ¾¶#@¯Zd_?á?öá]]31033!Ǻ=¶úð¦Ç/¶‹@69 H9Z¸ÿø@ H H eO  ¸ÿø@ H&  Z d H  ¸ÿð¶ H ?22+2?33+3öá22]+^]]]ö993+3+á2]+210]]!##!3!#46767##þE¬œžºþAJI?‹9ü–¶ûX¨úJw4†=GIûǶQ@)(Ze°'   Z dH  ¸ÿð¶H ?22+?3+3öá22]]]]öá2]210!###33&'.53×ý1¬ÕÌ®ºMLAŽ9üç¶ûLLJ CC> }ÿìqÍ'4@ [g)À)¿)p)/)_)[ f(#__?á?áöá]]]]öá10#"&&54663232>54.#"qQ í›£ïLLžð£›ë QûÑ4k¥rr¥k22j¤rr¦l4Ý©þêÆllƪªÄkkÅþ뫉ۙQQ™Û‰ŠÚ—QQ—ÚÇ3¶F@,[(8HgÏ@Zd`0@` ??á9/]áöá2^]]]ö]á10###!232>54&##37~Ϙ–ºj†Â~<ýN]‹[.¤®  [¨MýǶ9m þg GqQމ}þbqÍ18@"([g3À3¿3p3/3_3[f2-_#_ /?3á?áöá]]]]öá10&&'#"&&54663232>54.#"q1_Ž]+‰Zyg­3)£ïLLžð£›ë QûÑ4k¥rr¥k22j¤rr¦l4݃ⵄ&^<ŽIÆlƪªÄkkÅþ뫉ۙQQ™Û‰ŠÚ—QQ—ÚÇ ¶‚@V ù H  [ éù H  ?Ÿ¿ß Zd ``?3?á9/^]á9öá2]]Î82+]q2/]á9^]3+]q10#! #'32>54.##ºd þ1Qh7ŽÛþ¡å¤Z~Q%)SW \ý¤¶ÎÑW‚]>ýq\ž#EgEHd@hÿìÉË3B@'Y##Zg5¿5ÿ5`5?5*Z f4*'_$ ` ?3á?3á99ö2á]]]öá3]10#"&'532654.'.54>32&&#"ÉE€¸soÁA"W`f2 ™Iz]YƒU)@t¡aw¾JCA¥Xz†FsT[‰\/‡a™j7#"²xp6PC?%#Sh„TXŠ_2-#œ+q`9SC;!$L`~¶^@2 Ð O Ï  0 ¯ï„Z@àWgw¸ÿÀ@  H_??á2/+]3/^]]á2/]]]]]q10!#!5!!q»þ^þþ_¤¤¸ÿìݸ/@Ze°o¯Z d_ ?2?áöá]]]öá10#".5332>7ÝB…Ɉ€Ä…D»­¯Y€R(¸üLrÄRMŽÇz®üH¯À6bˆQ¸‹¶ l@ `p°ð¸ÿÀ@ H/¿@ H¸ÿð´ ¸ÿà³ H ¸ÿð@  H ?3?33++?3/83+]3/8+]39=/33103#3667ÅÆþ»þÅ'*.¶úJ¶üa[©JJ©aþ¶*ß¶H¸ÿøµH¸ÿø@HHH¸ÿø@/H%D´%%$%D%T%%% p€À¸ÿÀ@ H,o,, ,0,,¸ÿð@ H H %%¸ÿà³ H%¸ÿð¶ H%?33++3?333++/83^]]]3/8+]q39=///]^]q3+3+3+3+3+3+103>73#&&'&'#3>7)Åå  ÈÇþ‘¼þ ò¼þ~Åß  ¶ü¨8pi^&&Zcg1rúJª3l/7437/p6ü\¶ü‡.cb[&%blo1`¶ @  7  8p€À¸ÿÀ@ H   /  ¸ÿð³¸ÿð@(' ?2?399]]/822/83^]3/8+]q39=/3]33]3/8310!##33`Óþžþ‘¼ÅþZÆLN¾þ[{ý…üºýÑ/ýL7¶s@ï  @ H«˜@¸ÿð@/€OZw‡—O6?3?9]/^]]]á92/8]]]33/8]]]]]3+]103#3TÈþB»þBËÓãüƒýÇ/‡Rþ¶ 8@ g  ? O Ÿ f __?á9?á9æ2/2^]æ22/10!!5!5!!þüTÇýMƒý:Û‘¦‘û¤þ¼9¶&@óñ°Àõøõù?á?á/]áí210!!#39þk•ßßþ¼ú•ú1é¶!·¸ÿð´?///8338310#É ²ýà¶úJ¶3þ¼É¶$@óñ`p õùõø?á?áÖ]áí2103#5!!3ßß–þj®Ï•ù)%Á¶?Í/3/103#)Ëf¿¡þ¯þ£%œüdßý!ÿüþ¼NÿH¶º/á/3/10!5!Nü®Rþ¼Œ‰Ù! @ €_/]Ì/Í10#.'53x#RM?Û+.0ÙSXQ"QQL^ÿìœ^#2T@)G#U44o40H ¸ÿÐ@ H H V3P*R$P??3á?9/áá2æ2/++á^]öá2210!'##".5467754.#"'6632%2>55%!BN`?EtU0çì¸7Q4SB@J¶df•a0þ/=hL+ZzI a˜-A*'Q{T¤°ECZ70"‰(8)YŠbý&MuOc 9Q3\V®ÿì?/8µ-HW11¸ÿ¸@ I%GT0*P  P?2á?3á??öá22+öá102#".'##33>"32654&ž^šm<32.#"3267Re°‚JL…²fN•268<:‘”Qƒ66{?‰Õ–Û‰>"š  ÉÔÓÃ%¢qÿì04@&GU22.H V1+P P?3á?3á??öá]öá2210%##".54>323&'&&53#%2>754.#"T;M`<]šn<32!32>7"!4.`n¶ƒHBx§ecžn;ýL™—3WQL'(MQW`r… ì9XJŽÒ‡ˆÖ•NGµnqÁ¶ ¢Ûœ•DqP,ðp@NÏß`€ ?O¿G/¯ € OP ??á?^]3á2/^]3/]3á22/]9/]]]10###5754>32&&#"3‹õ·ÂÂ-U|N;c'/I((:&õÁü?ÁKD`kT# 0SAh%þü^?R^§@ 2SG7/`7p7€77/7/'HYG¸ÿÀ@M H ý°ˆ 0@``¿`ß` `@'@ H'2 7&&5467.54>3232654.##"32654&#"üÅ&/_Œ],!)8°]€Q$A†Í‹k j5'BW/*6@E+G12b’a%Oþ@;aHº¹7ZA°#L?)\lcdgidcjJq#mEL^5  (!/Pm=XŒa4*PqG<[B* R5=Y*?Q`3YŒb4 û%@.sl.:! ,M`spow{tx®2@GU`€ G TP ?2??á3öá22]öá10!4&#"#33>32\ipQnC¶¶ ER\0·¹‚4f”`ýÇþ2+?*¿Òý3 uå%@  GTS??3/åö2á2]10!#34632#"&d¶¶Ä=-'?,-=J)<6 +:98ÿ¼þuå!.@# #G  T"S P?á?3/åæ2/2á2]10"&'532>534632#"&B0?6#.#¶"Hm=-'?,-=þ ” 'A3ôûM{W/_<6 +:98®ð^@ D¸ÿÀ@ H/ G T ¸ÿø@ H H ??399++?öá2^]3/8+]333931073##3V‡%Óþo¬Ñþ°m´´7ªiþ%ý‘øRþZý6þí®d@ GT??öá]10!#3d¶¶®‡^,e@?# G¹ – ¦ ‰ g w  G,U.ð.Ï. .P..GT-#P( ?22??3á223öá2^]]]]öá9/]]]]á210!4&#"#4&#"#33>323>32ÑdiIfA·ciMh?¶” BOY.xŸ&IW`2¯±‚/[‡Xý¢‚4f”`ýÇJ”+?*X^/D-¿Òý3®^0@GU`€ G TP  ?2??á3öá2]öá10!4&#"#33>32\ipQnC¶” ER\0·¹‚4f”`ýÇJ”+?*¿Òý3qÿì-^0@HW!@!Ð!à!!H V PP?á?áöá^]]öá10#".54>3232654&#"-C}²og®GC|³og®Gý‰šš‡‰šš‡'‰Õ‘LL‘Õ‰ˆÓ‘KK‘ÓˆÑÓÓÑÑÏÏ®þ?^06@.HW22& G T1 P +P?2á???3áöá222]öá10".'##33>32"32654&ž;`M; ¶”:M`<^šm<754.#"".54>32373#46767#5LiAAlQ‡f]šn<‰H;?hK)¶”9GX^¨3_…Qý°JÉ+P=%Zÿì?^5H@-%G W7?7_7Ÿ77,G Ÿ¯V6&)P," P?á2?99á2ö]2á]]ö]á310#"&'532>54.'.54>32&&#"?:mš`mœ;LTY,A[95\HHsP+7dŒVa¡H?A‰Gfb8^FHqP*-PxQ(#"¦);$212#4./7#".5#5773!!ú-*# (04>jM,››Niþì?Š  N…e}QNæü‰ýƒab¤ÿìJ0@GU`€G T P??3á?3öá]öá210!'##".5332>53u ER\0[Š\/¶joQnC¶“+?).b˜iÍý=‚‚4e”`:û¶ÕJm¹ÿø@ H H ¸ÿÀ³H¸ÿÀ@ H¿ÏïP/O¸ÿð@ G  ??39]/8Á^]]]3/8++Á9=/3+3+10!33>73wþ‰¼Ç  Ǽþ‰Jý!hl``lh!cû¶ãJ/ù/ÿø@ H/ H' ¸ÿø@ H  H  H¸ÿø@ HT''¸ÿà@ H[  H'  '-.¸ÿÀ³H.¸ÿÀ@ H...1 1011¸ÿð@-  'fv?33]3?3]33/83^]]3/8++39=///+]+]3+3+3+3+3+3+10!.'&'##33>733>73ð¨   ¬Óþ翃  ³Ä¬   ‰ºþäh-24:>?:2j%ýœJý¸-ig[Wa_!ký•"\_XWhm/Hû¶#ÛJ å@¡‰ †÷å6èç øê9k{W:JdtX5E   ÷å6@H@Hk{W:J  0  °  Ù È º   ; K (    ??/]]]Á]]]]^]]qÞ]]]++Á]]]q9=///]]]]]]Á]]]q3]33]Á]]]q10]]33##˜þŸÏúúÏþuÏþôþòÏ3þfšýéýÍ´þL þßJ"d¶"¸ÿÀ³H¸ÿÀ@ H$¿$Ï$ï$P$$/$O$¸ÿð@ "#P?2?á333/8Á3^]]]3/8++Á9=/331033>73#"&'532>77 ½× ǼþNAVtP4L@#0F4%9Jý›(XXR#Va^!cû'QZ1 ‘,@) R5J l@ — H¸ÿÀ@ H ? _  ˜¸ÿøµ H¸ÿÀ·H?¸ÿð@ HO HO?á2+?á2+/]+33+]]3/+3+]310!!5!5!!5ýþ °ýô}D‰’üÑ=þ¼¢¶'@@%÷ 'ñ#ö  #õÙ_)õøõù?á?á9/]]á9/]æ33ñ2â/210.54ᒑ4>7ô-A(Mƒ_6ƒ}}ƒ6_ƒM(A-wssw0=# –!GnNNgV›VgMNnG!• #=0þ´i{ zjéþ-@0@p€ª@€À??/^]á]q103#é––ø3þ¼˜¶)@@% $$÷ñöõïÿÙ$õ#ù õø?á?á9/]]á9/]33æñ2â/2104675&&54.'53"5>5áwssw-A(Mƒ_6!A`>}ƒ6_ƒM(A-;jz {iL0=# •!GnNþ³4H-›Vgþ²NnG!– #=0fJZ#<@ %%  ­ ¸ÿÀ@H­  ? O o  /]3ñÈ/+2á/]]Î10.#"563232>7#".%7-)<;8d”27C/%7/(<;8c•27C‹ !,¢l  !,¢l “þ‹‘^A¹ÿð@ H0 °Àš¸ÿÀ@ H ›/^]/õÎ/+3/á2]10+3##".54>32Õy3ßï#..##..#¤ûçH&5!!5&%4""4¼ÿìºË%Z@%F %'@'H 0 @ Ð  s!s¸ÿÀ@ H??99//+3á3á/^]á]Æ29/3á210$#5.54>753.#"3267vnL‰WŠb45a‹V‰Hˆ.58<;‘”Qƒ6ÔÈÎ K…ljˈK ¬¤!š  ÊÔÒÃ%¡D#É(u@ o#¸ÿÀ³ H¸ÿÈ@0 H**!@ H)!u /"""¯"¿"ß"ÿ"""ts?á?á9/]3á23/+3]3/++399//^]3á2102&&#"!!!!5>55#534>šj®BB8K0RY@+¦š )DaCÕ‰DW‰_2{ì‹#7†@#.« !p99 $ª€¸ÿÀ@1 H8€  )® 3®Ï ï    °  ? o  /]]]áÆ2/]á93Æ]23/+]áÆ2]3/]9ñÀ/]210467'766327'#"&''7&&732>54.#"º#b/l<7&&54>32&&#"#"&'532>54.'.7>54.'‰-:KU7dŒVaH8AŒGcf9_FHqN*)4EL;l›`lœ;LTY+E]73^LIsP)š?eH#)!AlR/&)3S@-&rT=bD%( ‹';9.,/ANa>4UD1&mNGoM(! ž'3--1>NdY%?:7 $.8"&@;9-:3 jÙ 5@! †¯À†@P‘Ÿ Ï 0  /]]3å2/^]áÜ]á104632#"&%4632#"&38('::'(8w8(#:&(8s6015522560 &522dÿìDË%AUj@CÅ"""&LÃ4À44WBÃ& ÉÉ/Ÿ`p€-GÈ;QÈ-?á/á99//]^]áá/áÞ]qá99//3/á10"32>7#".54>32&&4>32#".732>54.#"{=^@!=_C69815<#f˜e36i™d?„;>4aü¾6aЧÀhhÀ§Ša66aЧÀhhÀ§Ša6me¯ê……ê¯ee¯ê……ê¯e,SxKNxR+  ƒ Bzªge§xC!þ¾hÀ§Ša66aЧÀhhÀ§‰b55b‰§Àh…ê¯ee¯ê……ê¯ee¯êDBÇ-N@/-à///O//¯/$à `  .-ä'äÀäÞ?áÜÄá99/áÆ]2/á]Ö]á2210'#".5467754&#"'663232>55ç'/8#+H4c=80Z*03u<}wÉ3D)2*":+R# 3M3flH9d$jzþ:9+3-,A,1Rs“Ç `@ ë P`   ¸ÿÀ@! H Ÿ¯ëŸ   /3/39=/93333/]á]Æ+299//]á310%R5uîîuþË—6tíítþÊ)žNþ¤þ¤N›žNþ¤þ¤N›f9@$ª–‹yVK8 ­³?á/]]]]]]]]]Þá10#!5•üùýé–ÿÿRÑBydÿìDË:NÂ@}¤´Ä´ÄRÅ Å ÅÀÐEÃ-À--P;ÃÉÉ/Ÿ`p€&@È4JÈ&?á?á99//]^]qá339á2/áÞ]qá99//]^]q9áá29‡+Á‡+Ä]10]32654&#####324>32#".732>54.#"çH[OSYF’-9C5*! ³Î_騞ûë6aЧÀhhÀ§Ša66aЧÀhhÀ§Ša6me¯ê……ê¯ee¯ê……ê¯eHEJ;0K9( nW%G8`þ }‚þÃhÀ§Ša66aЧÀhhÀ§‰b55b‰§Àh…ê¯ee¯ê……ê¯ee¯êÿú ¶º/á/3/10!5!ûô Œ{VòË'C@,« )Ÿ)ª0@® àðo #®?á3/^]]]qá/]á]Öá104>32#".732>54.#"{2UsAAsV22VsAAsU2{4F((F55F((F4AsV22VsAArU11UrA'E44E'(G55Gf¢ :@! ª ï `  ­ ­³?3á2/á/]]333á223]10!5!3!!#5!éþ}ƒ–ƒþ}–þ}œ‡–…þ{–þþú––1JmÉ@@á O   @ Há¸ÿÀ@H åÞåÝ?á?á9/+3/á+]Þ2á10!57>54&#"'6632!mýÄÑ9H(B63]-N6…RUC;"A@2&^0A!?[92VU[79hÉ0a@<áá2_222@ H''@ Hä/_ß&#å,Þå ß?3á?á39/^]á9/+3/+]Þá3/á9/910#"&'532654&##532654.#"'>32NQEXX(S~VF{9?„5bXk`bb\T#/;a3E=DL,EiF#çNjjN73#‰//*Û?MQ#yôLQQ"QXS®þJ7@" G U `p€GTP  ?3??á?öá2]öá21032>53#'##"&'#3djoRnC¶“ 0gHj#¶¶‡‚‚4e”`:û¶“ST.*&(#U*þÀ6qþüf7@!™0@P ™   /2?Á/]]Öá9/^]á10####".54>3!fxÏy=U_›m32#".“"./""/."Ó&5!!5&%4""4#þ˜9@ „Œ@ H /á/9/+áÆÖá9/]33310#"&'532654.'73˜–-1GP.?%Zy9":+þáall+1# °s):?Jº¶4@!O@ Há 0Ý åÜ?áÍ?/]]3á3/+]103#4>7'3‡‘&^J¶ü”<<8(I`B‹Ç.²à¸ÿÀ@ H!!à äÀäÞ?áÜáÖá]Ö+á10#".54>3232654&#"‹)MmD?jN+)LmD>kN,þ:KVUKKUVKmS‚Y//Y‚SSX..XSwyywxssTs–Ç V@/Ÿ¯ë   ëŸ @     /3/399=//3333/]]áÆ299//3á]10'7'7–þÊtíít6þhþËuîîu5þeN\\NþbþeN\\Nþbÿÿ?‹¶&{'J<üý·0@¿?@@]5]]5]]]55?55ÿÿ, ¶&{í'5t3ý·(@°@p@]]5]]5]5?5ÿÿÎÉ&u'¨<?ý·<@'8p8P88´3¤3„3d3P303 33L]]]]]]]]5]]55?55DþwD^';D@2š(('F == F¸ÿÀ@H ''-›7Q/á3?å2/9/+á^]Î9/á3/á103267#".54>7>55#".54>32P'A20D+9U7T–E@R¼a]•g85Q64B&º#..##..#¤%:[QL*)CEO50O93#’*:3`ŠXDhZT/-C>C+/&5!!5&%4""4ÿÿÝs&$Cÿ½R´&¸ÿœ´%+5+5ÿÿÝs&$vR@ !&l%+5+5ÿÿÝs&$KR´&¸ÿÿ´%+5+5ÿÿÝ5&$RR@ &,%+5+5ÿÿÝ+&$j!R@ &)%+55+55ÿÿÝ&$P}1@ ïßP@ %+55]]]]]]]55ÿþV¶„@* Z©$4T  g¸ÿð@  __ _ O  ¯   _?3á/?99//^]qááá2/83æ29///]]]]}‡ÄÄ3á2310!!!#!!!!!!#Výþ%˺ÉýÃýê=ûu“lÅþ;¶¤þ<¢ýøÆ¨ÿÿ}þ˜Ë&&zü ¶O*$ %+5ÿÿǾs&(Cÿ·R´ &¸ÿ´ %+5+5ÿÿǾs&(v?R@ &J %+5+5ÿÿǾs&(KÿñR´ &¸ÿý´ %+5+5ÿÿǾ+&(jÿõR@ & %+55+55ÿÿ>ds&,CþµR´ &¸ÿ¨´ %+5+5ÿÿRŠs&,vÿxR@ &j %+5+5ÿÿ©s&,KÿR@  & %+5+5ÿÿ@w+&,jÿ R@ & %+55+55/ü¶]@:[g! !Zd _?o¯ßÿ@H``?á?á9/+^]q3á2æ22/á2]öá9/103!2#!#%4.##!!3 /˜—™ø®_`¶þ÷¨þ’˜B~¸uÉPþ°¢ %‘\µþô°¹þé»^ƒ`’ÕŠCþ¢þ$ÿÿÇ5&1R‹R@  & !/ %+5+5ÿÿ}ÿìqs&2CTR´(&¸ÿ«´.( %+5+5ÿÿ}ÿìqs&2vR@ 4&X(. %+5+5ÿÿ}ÿìqs&2K®R@ (&0( %+5+5ÿÿ}ÿìq5&2R}R´0&¸ÿð´1? %+5+5ÿÿ}ÿìq+&2jªR@ 1&(< %+55+55-Ý{ ‡¹ÿð³H¸ÿà@HH H H H¸ÿð³H¸ÿà@0H@  P   Pp€ ÀÐð ³?^]q2323/]3333]10++++++++7'ËþÂi=Bhþ¿?fþ¾þÃgÓ?iþÂ>gþ¿þÀf=þÅg}ÿ´qü&1\@:)*'[ g3À3¿3p3/3_3[f2)*-"_  -_ ?3á?39á9öá]]]]ö9á910#"''7&5466327&&#"'32>\[^Q í›½…N‰Za[Lžð£^¡BPü·.0C0rGr¦l4jXý¾/rEr¥k2®•cþÞ·©þêÆlGN‘d*¾ªÄk*&üáƒÑN± Q—ÚŠ—üTQ™Ûÿÿ¸ÿìÝs&8C=R´&¸ÿÀ´ %+5+5ÿÿ¸ÿìÝs&8vÅR@ $&H %+5+5ÿÿ¸ÿìÝs&8KyR´&¸ÿý´  %+5+5ÿÿ¸ÿìÝ+&8j}R@ !&, %+55+55ÿÿ7s&<v1R@ &c %+5+5Ç3¶<@![gŸ Zd``    ??99//ááöá22]]öá10###33232>54&##37~Ϙ–ºº°†Â~<ýN]‹[.¤® [¨Mþöü9m þg GqQˆ®ÿìuKm@HF.5G/@ H_.o./..A$GWMM MÀM@GATL$5:PGAP?3á??á9öá]öá9///^]]+]áá10#"&'532>54.'.54>54.#"#4>32ò+?K?+'F98X=!8eUa‹5AHL%8Q4+H8?U5)>H>)!W~Q'#"¦-@($;8:#(DCF*6O?6:C,*>)0SAûN°hU%&Ltÿÿ^ÿìœ!&DC”´3&¸ÿå´93 "%+5+5ÿÿ^ÿìœ!&Dv5@ ?&…39 "%+5+5ÿÿ^ÿìœ!&DKâ@ 3&3;3 "%+5+5ÿÿ^ÿìœã&DR½@ ;&)7#"&'#".732>55"!4.^çì¸7Q4SB@J¶dƒ¦+3¦gašl9ý`““1UNJ%'KOU1ŠÊ>"L_tJG{Z4½aO=hL+ZzI …n ×7T3¤°ECZ70"‰(8U]U]GµnqÁ¶ ¢rs6U;'Q{R\V&MuOc 9Qcœ•DqP,ÿÿqþo^&FzB ¶/&  %+5ÿÿqÿìá!&HC”´(&¸ÿ¹´.(%+5+5ÿÿqÿìá!&HvR@ 4&v(.%+5+5ÿÿqÿìá!&HKÞ@ (&0(%+5+5ÿÿqÿìáÙ&HjÚ@ 1&(<%+55+55ÿÿÿÞg!&óCþU´&¸ÿš´ %+5+5ÿÿ®B!&óvÿ0@ &t %+5+5ÿÿÿ½U!&óKþ»@ & %+5+5ÿÿÿî%Ù&ójþ»@  &%+55+55oÿì-#'9t@F(H# """ W;@;Ð;à;;2H V: #!!-P¯¿07P?á?99//]]3á39öá^]]æ9///9á210#".54>327&&''7&&'774.#"326-C}²oh¯G?v¨ifš+xZÿJÙ(U/FAz;ãJÃCoO,¼"FnKMmF!!GmLš‡=ŽÜ˜OB¹ww¸~A;<vÀQ™rƒ7{ H,ŠquAœ»Ý°8kR2.XƒUL}Z1Çÿÿ®ã&QRù@ !&"0 %+5+5ÿÿqÿì-!&RCØ´ &¸ÿ×´& %+5+5ÿÿqÿì-!&RvP@ ,&N & %+5+5ÿÿqÿì-!&RKû´ &¸ÿú´( %+5+5ÿÿqÿì-ã&RRâ´(&¸ÿý´)7 %+5+5ÿÿqÿì-Ù&Rjù¶)&¸ÿù´ 4 %+55+55fø¬+`@0-"ªªVf(8¸ÿð@( H'­ ­ `°ÀЭ³?á3/^]á3/]qá/3+3]]á3/á]105!4>32#".4>32#".fœý¿)*  *))*  *)‡––þî#/ /#!//Û#/ /#!//sÿ´/‘$-\@;'(%H  W/@/Ð/à//H V.('+"P +P?Æá?Æ9á9öá^]]ö9á910#"''7&&54>327&&#"4'326/C}²o}bDƒP?FC|³o?q1DƒP>EýK-š‡D'þrH-š‡'‰Õ‘L5mJƒHÕ‰ˆÓ‘KlIIцTƒ3‡ÏÑŸcý{Óÿÿ¤ÿì!&XC£´&¸ÿ›´! %+5+5ÿÿ¤ÿì!&Xv`@ '&W! %+5+5ÿÿ¤ÿì!&XK@ &# %+5+5ÿÿ¤ÿìÙ&Xj¶$&¸ÿû´/ %+55+55ÿÿ þß!&\v@ /&g#)%+5+5®þ? 18@/H W33' GT2,P!P?3á?3á??öá2222]öá10>32#".'##3%"32654&d:M`<^šm<>%+5ÿÿ/ü¶’qÿìž'8U@1-G& "&U::6H V9'%O" 3P (P?3á?]3á?9/3á2?öá]æ29/á22210%##".54>323&'&&55!5!533##%2>754.#"T;M`<]šn<32\ipQnC¶œœ¶{þ… ER\0·¹š‚‚4f”`ýðÕ‰¶¶‰¸+?*¿Òý\ÿÿÿõÄ5&,RþóR@ &#%+5+5ÿÿÿ£rã&óRþ¡@  & %+5+5ÿÿ=|Á&,Mÿ"R@ & %+5+5ÿÿÿë*o&óMþÐ@ &%+5+5ÿÿ0Š@&,NÿR@ & %+5+5ÿÿÿÞ8î&óNþ½@  &%+5+5ÿÿRþBd¶&,Qœ ¶%+5ÿÿDþBƒå&LQ%@ o%%%%+]5ÿÿRd7&,OPR@ & %+5+5®dJ@ GT??öá]10!#3d¶¶JÿÿRþ{)¶&,-¶8@O@H¸ÿÀ@H¿! !!P!!!@H+]]]]]++]]5ÿÿ þ‡å&LM.@ Ïß5Ÿ5€5_5@5 555@H+]]]]]]]]55ÿÿÿHþ{ds&-KþÊR@ & %+5+5ÿÿÿ¼þW!&7Kþ½@ & %+5+5ÿÿÇþ;¢¶&.9s¹ÿ±´ %+5ÿÿ®þ;ð&N9!¹ÿÄ´ %+5®ðJI@ D¸ÿÀ@ H/GT ?2?399öá2^]3/8+]339310!#373#þ¬m´´ƒ3Íþo¬éQþhJþç5##33&'&&53‹3M"N-%K=&ý¬ÕÌ®7dþ{   2XDºMLAŽ9üç¶ûuAA8}4 ú^iše1®þ^(:@" G$U**`*€*GT)P P?á???á3öá2]öá9/10"&'532>54&#"#33>32î0?6#.#ipQnC¶” ER\0·¹"Hmþ ” 'A3m‚‚4f”`ýÇJ”+?*¿Òü•M{W/ÿÿ}ÿìqÁ&2M¼R@ *&() %+5+5ÿÿqÿì-o&RM@ "& ! %+5+5ÿÿ}ÿìq@&2NªR@ -&2( %+5+5ÿÿqÿì-î&RN´%&¸ÿÿ´* %+5+5ÿÿ}ÿìqs&2SìR@ 4&C(< %+55+55ÿÿqÿì-!&RSF@ ,&E 4 %+55+55}ÿì¤Í*[@6Z'' g,,[ f+_O¯__$__?á?á?á?á9/^]qáöá]æ29/á29/]10!!#"&&546632!!!!!"3267&&¤ý +[0£ïLLžð£bTôýÂýé>üVr¦l44k¥r4Z&&Y lƪªÄk¤þ<¢ýø…Q—ÚŠ‰Û™QXqÿìá^*6?d@;?HÐ111 7H%WAAÿA@A+H V@P?+????.<4P .P?33á2?33á29/^]]áöá]]qö2á9/]á29910"&'#".54>326632!32>732654&#"4.#"`‚ÌA?Æ€g®GC|³oyÃ?<¹ucžn;ýL™—3WQL'(MQWûš‰š–‹Œ—š‡ð9X>r… pmmpL‘Õ‰ˆÓ‘KojipGµnqÁ¶ ¢;ÑÓÉÑÜÎÏbDqP,œ•ÿÿÇ s&5vTR´)&¸ÿî´# %+5+5ÿÿ®!&UvÎ@ #&@%+5+5ÿÿÇþ; ¶&59w¹ÿ¶´# %+5ÿÿ`þ;^&U9þñ¹ÿ´%+5ÿÿÇ s&5LR´"&¸ÿ©´( %+5+5ÿÿr !&ULÿp´&¸ÿã´"%+5+5ÿÿhÿìÉs&6v;R@ @&p4:%+5+5ÿÿZÿì?!&VvÜ@ B&]6<%+5+5ÿÿhÿìÉs&6KÿíR@ 4&"<4%+5+5ÿÿZÿì?!&VK›@ 6&>6%+5+5ÿÿhþÉË&6z5¹ÿú´:4%+5ÿÿZþ?^&Vzð ¶<6%+5ÿÿhÿìÉs&6LÿæR@ 9&?4%+5+5ÿÿZÿì?!&VL—@ ;&A6%+5+5ÿÿþ;¶&79ù¹ÿØ´%+5ÿÿ!þ;F&W9ÿ]¹ÿ÷´$%+5ÿÿs&7LÿÈR@  &%+5+5ÿÿ!ÿìè&W8o ¶a$$%+5¶s@Là_ß 0@¿ÿ ZPð w‡—1  ` _?á2?9/3á2/^]]]33/]]9á22/]9]]]q10!5!!!!#!5¶þ^þþ_'þÙ»þ×3ߤ¤þ!•ýbž•!ÿìF%j¶ ¸ÿÀ@7 H'/'?'#G °À"O OP ?á?33á29/3á2/^]33Ä]2á22]3/+33]10%2>7#".55#535#5773!!!!ú-*# (04>jM,‹‹››Niþìþþ?Š  N…eûŠøQNæü‰øŠûabÿÿ¸ÿìÝ5&8R`R´ &¸ÿÿ´!/ %+5+5ÿÿ¤ÿìã&XRó@ #&$2 %+5+5ÿÿ¸ÿìÝÁ&8MR´&¸ÿÿ´ %+5+5ÿÿ¤ÿìo&XM!@ & %+5+5ÿÿ¸ÿìÝ@&8N}R@ &" %+5+5ÿÿ¤ÿìî&XN @  &% %+5+5ÿÿ¸ÿìÝÙ&8P{R@ &" %+55+55ÿÿ¤ÿì‡&XP @  &% %+55+55ÿÿ¸ÿìÝs&8S²R@ $&6, %+55+55ÿÿ¤ÿì!&XSP@ '&H/ %+55+55ÿÿ¸þBݸ&8Q ¶ % %+5ÿÿ¤þBJ&XQ¸ ¶!!%+5ÿÿþs&:K;R@ +&3+%+5+5ÿÿã!&ZK®@ 0&80.%+5+5ÿÿ7s&<KÿÐR@  & %+5+5ÿÿ þß!&\K©@ #&+#%+5+5ÿÿ7+&<jÿÎR@ & %+55+55ÿÿRþs&=v9R@ &^ %+5+5ÿÿR5!&]vÖ@ &` %+5+5ÿÿRþ7&=O)R@ & %+5+5ÿÿR5å&]OÍ@ & %+5+5ÿÿRþs&=LÿàR@ & %+5+5ÿÿR5!&]L†@ & %+5+5®¾%@  GT P??áöá]3/1034>32&&#"®-U|N;c&/H((:'°kT# 0SAûNËþéË+J@*0-)G 0@`)) #P P?á?á9/3á2/^]3/3/3á2/2]10#"&'532>5#5754>32&&#"3-U{N =9(;&ÂÂ-U|N;c&/H((:'öDü?kT# ™ 0SAÃKD‰kT# 0SA‘‰Ýª#1>@^‰))¾**0118ƒ    V#f##Yi2ƒoÖ 7 G W Ç  Ù8HXÈ €Ð¸ÿÀ@ H@@@/@@Ÿ@ß@ ¸ÿð@1 _# H <55Œ<ï`1 1#<11<#) ?3/9////]]]]á]333+á/83^]3/8+]q39=/3]]3]]3/]á99]99]3/]qá3/33/í]10#!#&&54>32.'>73#4&#"326P<3ü¾šýÓœ¼ø3: ;R21T># ”‘…0/*Û?MQ#y¼?21?31 2?œF`û#‡þyÛ`F3O87Oü_}.6;<6.þƒ‹=A@AGBþö4<<43;<^ÿ윪 1@T`œ@#UƒAA/AAA[ƒK K K 7G1Ub?b>H(¸ÿÐ@: H( H((VaXŒPP ` p  PP^Œ@FPFFF'$P+8R+2P/]??3á?9/áá23/]á9/3/]áæ2/++á]öá2299//Íá3/]á10>73#'##".5467754.#"'6632%2>55#".54>324&#"326Ç0/*Û?MR#xR%!BN`?EtU0çì¸7Q4SB@J¶df•a0þ/=hL+ZzI a†#=T12R;!!;R20T>#u?12?981?¸=A@AGBù\˜-A*'Q{T¤°ECZ70"‰(8)YŠbý&MuOc 9Q3\V3Q88O33O87O45<<55<<ÿÿÿþVs&ˆv%R´ &¸H´%+5+5ÿÿ^ÿìD!&¨vu@ ]&qQW%+5+5ÿÿ}ÿ´qs&švR@ >&X28%+5+5ÿÿsÿ´/!&ºvP@ :&L.4 %+5+5ÿÿhþ;ÉË&69¹ÿÚ´4:%+5ÿÿZþ;?^&V9»¹ÿá´6<%+5Ùš!%@À€_/]3Ì2/Ì9=/3310#&&'#5>73šy3l46j3yDC;À;CEÙ"a77a"LQQ""QQLÙš!%@À  €_/]3Í2/Ì9=/3310#.'536673šEC;À;CDy3j64l3yLQP##PQL"a88a"ÙZo@ _/]á/Í10!!?ýÁo–!Ù{î/@ƒÿÀ ƒ  Ÿ  €_/]áÍ]2/áÜ]á10#".'332>7{,MmGImI'l0C,$A3"î=eJ)'If?+2 1( uå @‡‘Ÿ Ï ï 0  /]]å/á104632#"& =-'?,-=s<6 +:98mÙ1‡@@-ƒ?O_ƒ0  Œ?O_¯ÿŒ_/]áÔ^]á/]áÔ]á10#".54>324&#"3261#=T12R; ;R20T>#u?12?981?²3Q88O33O87O45<<55<<þB^@ €„ Ž /á//áÌ103267#"&54>73´4"-@dd/8‹î-+qhZ*K@4…ÙÑã8@#/  @H@ H /]2á3/++á3/^]Ì]10".#"#>3232673þ(OLF -0h!5J.*QLE-.i!5JÛ#+#5>73#%>73#ß//*Ç?MQ#ek0/*Æ?MQ#dôLQQ"QXSLQQ"QXSøÙ! '@ H@ ’€ _  /]í/]3Í2+10>73#ø Ç!-4lôMQP!NWV  ‰´ )f@„$$$$Ï$$@ H$$ „¸ÿÀ@' H H ’ ‘'ÿ`°Ð/^]]]3å29/í/3Í2+3/+á3/+]qá10>73#'4632#"&%4632#"&þ Ï08= Rê8)#:&)8µ8(#:&(8‡KOQ$ MPQ%60 &522560 &522ÿÿÿéݼ&$Týñÿ—¶0"¸ÿé´""%+]5?5“H‘^3@€  –ÀÐ4Ddt¸ÿÀ¶ H›/å/+]]í]104>32#".“"./""/."Ó&5!!5&%4""4ÿÿÿçM¸'(Týïÿ—.´¸ÿÀ²H¸ÿ@%g¿]]þ4++5?5ÿÿÿçP¸&+{Týïÿ—1´¸ÿÀ²H¸ÿ±@%eo/]]]þ4++5?5ÿÿÿç`¸',üTýïÿ—f@À 0 ¸ÿ¥@/%ðÐÀ¯p`P@? @H@ H++]]]]]]]]]]5+]]]]]]5?5ÿÿÿçÿìÃÍ&2RTýïÿ—G@0- .€.p.P. ...$.. %PPg¿777]]þ]]44+]]]]]]]5?5ÿÿÿçT¸'<Týïÿ—K´¸ÿÀ¶H ¸ÿÀ² H¸ÿÖ@%À° ?/]]]]]]]5++]+5?5ÿÿÿçÍ&vZTýïÿ—5@#5 66666%PPg¿???]]þ]]4+]]]5?5ÿÿÿäÿìw´&†UþÐ@À$@$ $:%+]]555ÿÿݼ$ÿÿLJ¶%Ǿ¶C@ Äô°¸ÿÀ@H/Oo@HZd_??áöá+]3/+_]]10!#¾ýú¶¦úð¶%h¶X@ [`p°ð¸ÿÀ@' H/_oŸ¿@ H [ H _?á?3+/á+]3/+]á9=/3310%!53!&&hû½»^*þ®ü.}}…1ÍJ¨[ý ða¨ÿÿǾ¶(ÿÿRþ¶=ÿÿÇÕ¶+}ÿìqÍ+S@4"[g-Ð-Ï-€-?-o-[f,`¯ßÿ'__ ?á?á9/^]áöá]]]]öá99//10!!%#"&&54663232>54.#"ìýê…Q í›£ïLLžð£›ë QûÑ4k¥rr¥k22j¤rr¦l49¡E©þêÆllƪªÄkkÅþ뫉ۙQQ™Û‰ŠÚ—QQ—ÚÿÿRd¶,ÿÿÇ¢¶.‹¶ _@/ïÿ@H@ H@ H  ¸ÿð@" /O_Ÿ¯Ïï H  ?2?3+/8]]2/839=/33+++]10!#&&'#3‹ÆþÛ.*þÙÅ绚a¨KK¨[ü`¶ÿÿÇ/¶0ÿÿǶ1Rî¶ c@> À? O o 0 p € O  _¯ _ _?á?á9/^]á/]]3/]]Î]]q2/99//]]10!!!!!5ͦýZRJü¶südN¢ ¤û’¤¤ÿÿ}ÿìqÍ2ÇÁ¶1@Ze ° o Ÿ ¯  Zd_?2?áöá]]]öá10!#!#!Á»ý{ºúúî¶ÿÿÇ3¶3N¶ Z@ [ H ¸ÿÀ@&H  / o  [/? _ _?á?á9=/3/]3á2^]3/+99//+á10355!!!Nžþn}ýX…þg÷˜f%“¤ýîý¤¤ÿÿ¶7ÿÿ7¶<hÿìºË!.;@P"gZ;!š‡z([g=/==Ð=¯=¿==_=0===5[f<";`./`!!!!??99//3á23á2öá^]]]]]]qqöá9/]]]33á]2210332###5#".54>3332>54.+"33´»I†Â~<4TxŸe/»/eŸxT5=~Â…J»]‹[.)SW9»9WT(.[‹]Ë´^™Äf={nR0áá0Rn{=fÄ™^üS;i”XN‹h<32!!5>54.úr¤j2#Qƒ_ý°b@oP.Q ìš›ë Q.PnAbý°_ƒQ#2j¤)Dºud»«—A“¤0‡¨Ço–ô¬^^¬ô–oǨ‡0¤“A—«»duºDÿÿ@w+&,jÿ R@ & %+55+55ÿÿ7+&<jÿÎR@ & %+55+55ÿÿqÿì‘!&~T@ J&>D/%+5+5ÿÿZÿì\!&‚TÊ@ F&m:@-%+5+5ÿÿ®þ!&„TD@ %&b %+5+5ÿÿ¤ÿìw!&†Tþδ"&¸ÿý´"%+5+5ÿÿ¤ÿì=´&’U²¸ÿî´,B%+555qÿì‘^=8@8G/(??HV>" P8/,P3?3á222?á3?öá]Ô2á2210%2>754.#"".54>32366733267#".'#5LiAAlQ‡f]šn<=q¢dp1 !  2"%A"&?2$ ;M`ƒ/b˜hek7ÚÌÑÍ—HÔŒÕISU#R!hy~7þ]<3… '@0"=.®þu=Y@49H3/333,G W? ?0?"GT>2P333"'PP?á?á29/^]á9?öá2]öá99//]9á102#"&'#4>"32>54.##532>54.w`£vC˜°¹?x­m`¤<¶Ey¨c8dK, NRR$PoF5`„OfMRwN%&D_1b”b•­ʺl¢m7 ýé4{²s7–L`ü’ (MoGPuM%˜(If=?^> þßJc@@HP/OH¸ÿð@   @ ¸ÿð@   ??33?3/83/8^]39=/333/8á]^]]+10%#4>733>73`" ¾%þ`½Ù Ǽ>ˆ†~4*y‰?>ýº(]ZPR]Z!Loÿì-2DQ@.F8.3H$WF@FÐFàFF=H.VE$B 88 BP)P ?3á?á9/993öá^]]ö2á9/99á10.54>32.#"#".54>4.'3268]C%3\}JDq`Q#J IQ[3*<'=A)1l~“XÁƒC=uªnj£zSþQEoYI:b‘gBoQ-´Zÿì\^9Y@7#-W; ;°;À;?;_;;4F##GV:P¿9y9‰999 1P( P?á?á9/]]á9öá3/á]]]æ29/910#"32>7#".54>75.54>32&&#"3œŠ…)F`73\QG;žmq¦l5&?R,+F3:iV5ZRM(?KGls'Hd=‡™[^3E* ")1VuC>X>) +>P2FmJ& “"&MM-@'qþoj39@.F 55À5 H))V4.P?á22/æ2/á]Ö]2á3/3105!#>54.'.54667#®¶€¸~L( -TxKG_:"+ª+"0[MY‡\.\šÉl+/(`/{™vͳš…o0Yl@#.;H*-XRK HHC%"Bl˜f”èÙl®þ^1@GU`€ G TP  ????á3öá2]öá104&#"#33>32\ipQnC¶” ER\0·¹þ¯‚‚4f”`ýÇJ”+?*¿ÒûGqÿì+'[@:%GW))Ð))Ÿ)@))$G V(PË$º$‰$™$$$$PP?á?á9/^]]]]áöá2^]]]]qöá210#"&&5466322>7!"!4p³~v¯t83o±~v°u:þ+IhE#ýË!DhJGfD#3 „ ¼þ×ÎmmÎ)¼¼)ÎlkÍþ×ü¹J”ß•“ß•KE‰Í‰¤ÿìwH5@#0   `pÀÐGTP??áöá^]3/]1032>7#".5Z?H-*$ )04>jM,HüüabŠ  N…eÿÿ®ðJúÿòÿì!.h@*") ) )P4D 0`000.¸ÿð@.)PP?á?á9/3?/83^]]3/]]]99=//339310#'.#"566323267#".'.'#¸5 +=+"2B#JiO?H.&&7%';/%‡  5å3 )C1‘ *Y‡]ü669… (@.¢!^aWMªOýÁ®þJ?@& G U `p€GT P  ?3??á33?öá22]öá221032>53#'##"&'#3djoRnC¶“ 0gHj#¶¶‡‚‚4e”`:û¶“ST.*&(#U*þÀ6ÏJ;@ GW°¸ÿð¶ ?2?3/82^]]qöá9=/331033>53#¼É ZrB¶%\šuÀJý°!cg\`Íç—£þàþõýqþojF~@N2;;*AF8--$ F H?H_HHïHHH$VG<28P9*IYi8$O9ú??9/á9]]9á22öá]]Ö]ñÀ/^]9/3á93/310#"#>54.'&&54>75&&54>7##5!#"3#¢QW--TxKG_:"+ª+"0[M²¸/Nf7er-Ok>"'!U.>7I‘sG FrQw‰1UqAN`;".;H*-XRK HHC%""ǵMcC †uHfI1™&NuN5Q7ÿÿqÿì-^RÿìÉJX@8 G/Ÿï G/ïÿ@HT PP?á??á22ö+]á3]3/]3/9/]á10%267#"&5!##57!#P/J0qqþm¶Ý‰'Ó/  „‚¾üP°JPšýNF7¤þ-^'9@!%HW)Ï)@)) GT(P"P?3á??áöá22^]]]öá10#"&'##4>32"32654&-?u§hK6¶Ax©ia£wCþ;‰‚6KŒ{}'‰Õ‘L--+.'a.þ݈ӑKK‘ÓÄÈþ¬31ÓÑÑÏqþoo^1Q@6''F   3?3_33ï33HV2(-Q7 (8H $ú??9]]á2öá]]Ö]2á3/10#>54.'.54>32.#"-I~aG_:"+ª+"0[MM„b7Iƒ³jN•268<:PrI"`yN/.;H*-XRK HHC%"Av´‚šâ•I"š  9p¤qÿì…J)6@!$!HW+++ +°+à+H V*%PP?á?á2öá]ö22á210#".54>3!!32>54&'#"->z´uk¯}DM΀éþö%A0ý!GnMLmG!OK;_‹Z+øoÀPFŠË…œÚŠ>š)]l|6Ui;7b†N×Y,c¡ÿåfJ:@$   W+;GàPP?á?á2/]áÆ]]æ^]210!32>7#".5!57fþŒ->$*($ '.5@uY4þ׆Jšý¢;R3‡ M†hsJP¤ÿì=J)@GW`€GT P?á?3öá]öá10".5332654.'3\ªd)¶ BfF’ ¶ôPŒ½mXý²VŒc6è÷G}ut==rwKþÁþÓqþ%^%5^@<1%G–¦&HW7 77à7o77Ÿ7@777GV6+P 1P$??3á2?3áöá^]]]]qqöá9/]3á210.54>746324.#">fm·†K 8N-%?-3Xt@¥‘Z’f7V¾hO6I+1%H{Y3þÚC‰Õ—S˜Š}7`3hr}Go™a0^¼ÁPÉz•ÙJþ&%b”e35WAý ;kŸÿìþ%N( @hxg w Ç  v7¸ÿÀ@H4À¸ÿÀ@ H**?*O*Ï*°%À%%%¸ÿð@)'( P#P?á??á9]]?3/833/]^]3/+]3/8]+39=/]]33]3]10233267#".'#&&#"566¼-I:1{²þs²&4%.9(C_G3ƒþ¶ÂÆ G5$>N>\=þ¨Jüøþ &B3 &FfAjýƒ>¾OY  ¤þq'L@/G&GW)0)@))°)À)))!GT( &P???3á2?3öá^]]öá9/3á210>54.'3#.53VNƒ_4¶W“Äm²o¼‰L¶6ZxBús 7332>5332>54.'3#"&'#éZŒ`2/ º /6K-.D,²cQ-K6/ » /2`Zk‹ ‹R’ËyQ‡‡HI†‡ŽRb–e4)Hb92þ΋4e–bRއ†IH‡‡QyË’RW[[WÿÿÿìwÙ&†jþâ@ &2*%+55+55ÿÿ¤ÿì=Ù&’j¶'&¸ÿÞ´2%+55+55ÿÿqÿì-!&RT@ ,&= & %+5+5ÿÿ¤ÿì=!&’T@ *&$%+5+5ÿÿqÿì–!&–TÃ!@ H&`<<¸ÿÀ@ H=554&#!#!5!!!2ž/FD' @3!i{þ»»þ¬±þ^Z]’e55_„   3WE…stý#¤¤þo1^‹Y‰iše1ÿÿǾs&av3R@ &> %+5+5}ÿì˜Ë&_@@HÊ#p#€##¸ÿÀ@$ H##(¿([f'_¯ $_  _?3á?á39/^]áöá2]3/+]]99//+10"!!3267#"&&546632&&_ xM tý†@v«qY N'NUa;¤ðLW©ú¢lÄON?”'Az¯o¢‚ÉŠH#¢lÆ©¦Æn,*œ .ÿÿhÿìÉË6ÿÿRd¶,ÿÿ@w+&,jÿ R@ & %+55+55ÿÿÿHþ{s¶-ÿéß¶*5µ%+Z ¸ÿø@SHZ#™#à#´#Ä#Ô##P## ###/[g7Ï77@ H65_%¯%%%+_#`+`?á?á?á9/^]á3/+]öá99//^]]]^]38]á+2á210#!!#"&'532>7667!3232654.##ß<~†þ¿þÂ!"5OnN#J: 0>* '+“m˜Ï~7ýww®¤.[‹]X¬ažp=qôìÔQg¢o; š ?bu69È:ªý˜Bq˜þ„ˆFa<Ç ¶!S@2Z #####ÿ# Z d"!_ ¯   ` ?3á?39/^]3á2öá2]qöá9/3á210#!!#3!33232654.## <~†þ¿ý¸ººHºm˜Ï~7ýww®¤.[‹]X¬ažp=ªýV¶ý˜hý˜Bq˜þ„ˆFa<¶s@MZUoô °tZ0@PÀ°gw^?O_ _?3?9/áá2/]]]]]3/]á22/]]]^]öá10!2#4&#!#!5!!#Z]’e5ºi{þ»»þ¬±þ^1^‹Yýòöstý#¤¤ÿÿÇ¢s&´v‰R@ &" %+5+5ÿÿÿì®i&½6#R@ '& ,"%+5+5ÇþÁ¶ c@AÆÖZÅÕ¨–HG: Ze ° o Ÿ ¯  Zd _/33/á?3öá]]]öá9/]]+]]]á]10!!#!3!3ÁþZ±þ]º…»þ¶úðÿÿݼ$Ç3¶K@._[g_Ï Zd_ ¯   _`?á?á9/^]áöá2^]öá9/]10#!!!3232654.##3<~†þ–ý¦–˜Ï~7ýN ®¤.[‹]¬ažp=¶¤þ7!3!! °üd°q/VMA0eÂþƒþú.=FM'þþ'UÈÙæèãiúðjL¹ÊÑÈ·KÿÿǾ¶(¶Ë@Nf v † 7 G W  G ÷  Ziy‰8HX¨¸™†Wgw  p € À  ¸ÿÀ@& H  ð¿Ïß @¸ÿð@ ?33?33933/8333^]]]]]]3/8+]q3339/]]]]33]]á]23]]10333###%ýíÍ ³ Íýí!Óýî³ýîÓòÄý<Äý<Äý<ýåýåýHÿììË9h@?'[!0!!0[ g;Ÿ;p€?O_: `ª!x!!!!/,`5`?3á?á39/^]]]á93/]]]öá9///9á10#"&'532654&##532>54.#"'>32Ñ3[}KWŠ^2CˆÍ‰nÀU+`cc.²°Ïº¿°\Ža2%D_:n©K\&btƒGm¦q9`IxX9  9YwH` t@"-ª$ ”‡‡—'He=6S:C6}6)6a…ɶk@ Z eЯ 0 Zd ¸ÿè³H ¸ÿà@# H  &  H H ) ?22^]++?3]++3öá22]]]öá2210333#46767##É®ÌÕ¬ý1×¶üà>CC JL´úJ9ŽALMûFÿÿÉi&²6‰R´&¸ÿë´" %+5+5Ç¢¶ ^@!   ° /  — V  ¸ÿø@ H Zd ?2?399öá23+]]]]]3/8^]338310!##33¢Ûýººº5ÏýËåý¶ý<ÄýBÿé“¶b±¸ÿø@;HZ‰à´ÄÔP€Ze!!!! _` ??3á?á3/^]öá9/^]]]38]á+210!#!#"&'532>7667!“ºþ…!"5OnN#J: 0>* '+ÐqôìÔQg¢o; š ?bu69È:ªÿÿÇ/¶0ÿÿÇÕ¶+ÿÿ}ÿìqÍ2ÿÿÇÁ¶nÿÿÇ3¶3ÿÿ}ÿì˜Ë&ÿÿ¶7ÿì®¶!o@!`p°ð¸ÿÀ@ H### ¸ÿð@ "ç÷Ö¸ÿà@ H _ ?2?3á9+]]3/833]3/8+]393310#"&'532>733>7®þT&Spœo3Z%%Y45RB8ýîÌ  7¶ûú]¤{H¹5V??ü×  !ÿÿhÿìºËsÿÿ`¶;Çþq¶ ;@!Z Z ° ¯  Zd _?3/á2?3öá]]]Ôá3/á10%3#!3!3Á°°üº…»¦ýÙ¶úð¦¶H@Zep / Z` p   °  ¸ÿÀ@ H _ ??39/á3/+]á]]]öá210!##".5332673ºsÃb]’e5ºi{Z¹pºV,.1_ŠYGýÑst((ÆÇ3¶ `@BVZ†–¦gw Ze   P p € À Ð à  Zd _?á2?33öá^]]qöá9/]]qá]10!!3!3!33ù”ººº¶úðúðÇþã¶q@KV  Z † – ¦ g w   ZZe Pp€ÀÐàZd  _?3/á22?33öá^]]qä2/áá9/]]qá]10%3#!3!3!33°°ù”ººº¦ýÙ¶úðúðÕ¶R@3 Z[g/?_¯_ ¯  _ `?á?á9/^]á3/^]qöá9/]á210#!!5!3232654.##Õ<~†þ•þ¬•˜Ï7ýN ®£-\Š]¬ažp=¤ý˜Bq˜þ„ˆFa<Ç϶I@+[ZeŸ Zd_ ¯  `?3á?39/^]áöá2^]öá9/]á10#!33232654.##33<~†þ–º–˜Ï~7ýN ®¤.[‹]“»¬ažp=¶ý˜Bq˜þ„ˆFa<ýV¶úJÇ3¶H@.[g_@H@ H Zd_ ¯  `?á?9/^]áöá2++^]ö]á10#!33232654.##3<~†þ–º–˜Ï~7ýN ®¤.[‹]¬ažp=¶ý˜Bq˜þ„ˆFa<;ÿìDË$Q@/ [  g&¿&Ï&ß&%_ªx__?á3?3á9/^]]]á3/]æ99//á210"'6632#".'532!5!.º^”?NOÄl¢ô¢RR¥÷¤:aVN'N Yí÷ý‹q Gs'. œ*,mÁþö³þàÊm¢#¢o°z@ÇÿìžÍ.^@<[  %[g00?0o00ï0ÿ00@H Z d/*_ _   _?á??9/^]á?áöá2+]qöá9/]3á10#"&&'!#3!>3232>54.#"žO›å–—á˜Pþ®ººV U˜Û‘•åšOûú1glmf00elmžg1Ý©þêÆld· ýV¶ý˜’ì§ZkÅþ뫉ۙQQ™Û‰ŠÚ—QQ—Úò¶›@ æö¸ÿø@$ HZ e?Ÿ¿ß æö¸ÿø@ HK@ H¸ÿð@&[ßïÿ@Hf`` ?3?á9/3áö^]+]á3/8+]3+]q]]ö93á2+]q10#.5463!##"33Bþ²Û}7cK,ýûu»¼JsO)'NwQ´\ý¤>aˆ]ÆÉúJ\»>aDBiJ(ÿÿ^ÿìœ^Duÿì!#';I@,-H W=Ð==@==7HV<2P(P#  H Q?á+?á9/3áöá2^]]]]ö2á1046676673>32#".2>54.#"u1h¢q}òf!2{}u,>dH) >Tk@c–e2E|®hk­{Bá4&#!32>ö{k8aG)/eŸqþ9ÅSŽg;‚€ÿ8]C&mlþõì>\?5hu$=[?CtV0J@kýÇ\Hþ¨*E M@þ×$<® J/@ PGTP??áöá]]]3/]10!#! þZ¶\°üPJ)þƒ7Jy@F /? ¸ÿð@9¢ ²     GF U¯Ï0/FO Pû?2?á22?á3/á]]]ä]2/áá99//]]8]]á310#!#3>7!3!#7®ýN®VAcC"—þ²À$:Q4þƒ}þƒ_ßóüP$g×ÑÂSÿÿqÿìá^H¾Jœ@ FÖ ¹ É ¦ —  ¸ÿÀ³H¸ÿÀ@$ Hß0p ¸ÿð@  ?33?33933/8333^]]]q3/8^]++3339/]]]]33á231033###3¤ ÅþXÎÎþC¤þDÏÏþXÅ5ýëýëýË-ýÓ-ýÓ5DÿìR^9_@:F99 4G!W;°;À;Ð;o; ;) V:8PÏ9‰9™9999/P&P?á?á9/^]]]á9æ2]]]öá99//9á102>54&#"'>32#"&'532>54&##5q=dH'slGK?(MRZ5Vi:3F+,R?&5l¦qm¯:LWa37`F)…Ї'@-MM&"“ &JmF2M;) ,BZ>CuV1#"¦*E3^[™®;J Q@ HFU    À Ð ð  ¸ÿÀ³H ¸ÿð@ H F T   ?33?33öá2++]öá2+103##Z é¬ ýþêJýdü˜û¶‡üjJÿÿ®;&Ò6%´&¸ÿÿ´ %+5+5®åJ A@#   GT  ?3?3933öá22]3/8]333103##3úÄþaÆÎþK´´JýñýÅ-ýÓJýëÿò°JL@1Fô€ÀÐT GU/ÿ PO??á?á3/^]öá9/]]]qá10!#!#"&'532667!°¶þþ@_‚V17YE3T°þýþ”æiƒuñoú®J ^@?FU"Ï"@"P""FT!;K[ )4DT& ?333]]?33]]3öá2^]]]öá210!##.'#3>73¡þø‡þ÷¢Ý  Ù9;6ýP° 1;>üJýG"C<21;A!½®;J [@GU 0 @ P Ð ð  ¸ÿÀ@#H G T P멹/ ?2?39/^]]]áöá2+]qöá210!3#!#d!¶¶ýß¶Jþ9Çû¶éþJÿÿqÿì-^R®J-@GU  ` p € GTP?2?áöá]öá10!#!#!d¶d¶þJû¶°ÿÿ®þ?^Sÿÿqÿìo^F)^JX@< ß p € _ Ì¿G`pаÀP??á2/]3/]]á2/^]]q]]]q10!#!5!^þÁ·þÁ5°üP°šÿÿ þßJ\qþ#")t@K' F I¹ É — §  #HW+ ++Ÿ+ï+€+o+@+++HV*&P'P  ??3á2?3á2?öá^]]]]]qqöá9/]]+33á2210#.54>734&'66!q½ˆLG†¾wªr¿‰LG…Áyªþ œ®X}P%9›ª¬™Z UÆ}}È‘V þ$Ü VÉ~}ÇU ºü»Ò< =g‘^ºÌüÆÑÿÿ#ÛJ[®þƒ²J D@+GG   ` p € À GT  Pû??á2?3öá]Ô]á3/^]á10#!3!33²¶ü²¶ø¶ þƒ}JüP°üPšþJ1@ G U`€GTP  ?2?9/á3öá]öá21032>73##".5P¸-PLM*¶¶,PU^:NzR+Jþf®,Õû¶é0 /TsD¦®FJ f@CG¶ Æ © t „ ” g  GU  € ð o @  / GT P ?33?á2öá^]]]]qqöá9/_]]_]]á10%!3!3!3Õº·úh¶»¶š°û¶JüP°®þƒåJw@N G¶Æ©t„”g GG¿ @€àð/GT  Pû??á22?33öá^]]qqÄ]2/]áá9/_]]_]]á10#!3!3!33å¶ú¶»¶º·Ÿþƒ}JüP°üP°üP)üJ\@>GWP`à?G  ° ð   P `    P¿ P P ?á?á9/]á/^]3/]qá2]]öá10!2#!!5!4.#!!2>HÔÌ/eŸqþ9þ˜!A`@ÿ7]D&‡œ›M|X/°šüø1B(þ¨)B®PJ a@@G pÐ G U¿Ïßÿ G TP¿ P ?3á?39/]áöá2^]]]qöá9/^]á1032#!3#332>54.#dìÔÌ/eŸqþb¶ì¶¶üÛ8]C&!A`@‡œ›M|X/Jû¶Jý¤þ¨)B01B(®J @@)GW p°ÐG T P¿ P ?á?9/]áöá2^]qöá10!2#!3!2>54.#dÔÌ/eŸqþ9¶8]C&!A`@‡œ›M|X/Jý¤þ¨)B01B(7ÿìB^&^@> H"W((¯(@(/@ HX' P啕/QQ?á?á9/^]]]áæ+q2]]öá29/10"&'532>7!5!&&#"'>32BY|66ƒRItR0þ#Û ’Œ;<85@HN&f³„MQŒº¢%(T„\𦗠 š  >‰Û’ÔŠC®ÿì^&r@KH O !HW((/(ï(ÿ(G((/( G T'$P P啕,   P?á??9/^]]]]á?áöá2]]]qöá9/]q3á10#".'!#3!>3232654&#"@x«jb¢uFþï¶¶ Hv cb§yDý)€Ž~€Ž~'‰Õ‘LB¾|þJþ9t±x>K‘ÓˆÑÓÓÑÑÏÏ#‘JS@GUo¸ÿð@F@HVPP ?2?á9/á2ö+á3/83^]öá293103#.54>3!##33#"éÆ#-TA(8dŠS¼¶ôÝ%AZ6ÛþkhÍ 0LlGNyQ*û¶°T0F.f_ÿÿqÿìáÙ&HjÚ@ 1&(<%+55+55þ1S@2 G-U33`3€3#"GT2!O#P)) ))P?á???]á39/3á2ö2á222]öá910"&'532>54&#"##5353!!3>32ð0?6#.#ipQnC¶œœ¶{þ… ER\0·¹"Hmþ ” 'A3D‚‚4f”`ýðÕ‰¶¶‰¸+?*¿Òü¾M{W/ÿÿ® !&ÍvÔ@ &E %+5+5qÿìo^"O@1 $$¯$@$HV#P啕/Q Q?á?á9/^]]]áöá2]]Î29/10".54>32.#"!!3267Re°‚JL…²fN•268<:‹’Ûþ# ’ŠQƒ66{?‰Õ–Û‰>"š  —¦š¸¤%¢ÿÿZÿì?^Vÿÿ uåLÿÿÿî%Ù&ójþ»@  &%+55+55ÿÿÿ¼þuåMÿòJ*k@E F%G Ô $  GW,,/,?,_,,¿,ï,+$P¿% PO%P ?á?á?á9/]á3/]öá99//]]]]á2á1032#!##"&'532667!4.##32>‡ìÔË.eŸqþbÙ@_‚V17YE3+Ù!A`@×Û8]C&‡œ›M|X/°þýþ”æiƒuñoúüø1B(þ¨)B®uJ!S@0GG W#ï#€#?##GT"P¿P?2?3á9/]3á2öá2]]]]öá9/3á210!332#!!#4.##32>d϶ìÔÌ/eŸqþbþ1¶!Aa?ØÜ7]D&Jþ9Çþ=œ›M|X/éþJüø1B(þ¨)B!S@2h G!U##`#€# G T" OP  ?2??]á39/3á2ö2á222]öá9]10!4&#"##5353!!3>32\ipQnC¶œœ¶{þ… ER\0·¹š‚‚4f”`ýðÕ‰¶¶‰¸+?*¿Òý\ÿÿ®å!&Ôv@ & %+5+5ÿÿ þß&\6±@ (& -#%+5+5®þƒJ Y@=Ö·ÇGµÅÕv†JZ GU  ` p € G T P û ?3??á3öá]öá9/]]]á]]10%!3!#!3dø¶þ³·þ ¶š°û¶þƒ}JǾãD@,Zßïÿ ° Ð  ¯ Zd_ ??3/]áöá]]3/]]á103!#°ýú¶-þ-úð¶® ‰0@G GT O??á3/]öá3/]á10!#!3 þZ¶¦¶Áü?J?ÿÿþs&:CçR´+&¸ÿ¬´1+%+5+5ÿÿã!&ZCL´0&¸ÿž´60.%+5+5ÿÿþs&:v R@ 7&d+1%+5+5ÿÿã!&Zv@ <&i06.%+5+5ÿÿþ+&:j9R¶4&¸ÿÿ´+?%+55+55ÿÿãÙ&Zj¬¶9&¸ÿÿ´0D.%+55+55ÿÿ7s&<CÿrR´ &¸ÿ¤´ %+5+5ÿÿ þß!&\CÿK´#&¸ÿ¤´)#%+5+5RÑ®y¹ÿÀ@  H¹½?á/3/+105!R\Ѩ¨RÑ®y¹ÿÀ@  H¹½?á/3/+105!R\Ѩ¨RÑ®y¹ÿÀ@  H¹½?á/3/+105!R\Ѩ¨ÿüþ1NÿÓ*@ ºïÿº /]á/]á/33/310!5!5!5!Nü®Rü®Rþ1‹Œ‹ÁP¶ %@__o¿Ï ˜ œ?å/á/]3]10'>73%'.4‰Á6z|{8=„ƒ|5ÁP¶ %@_ ˜_o¿Ïœ?å/]á/3]10#>7B'/3‰¶7y}z8<„„|5?þøyî 5¹ÿÀ@ H ˜_oϸÿÀ·Hœ¨?å/+33/]á+10%#>7j'/3Šî6z|{8=„ƒ}5ÁR¶ +@__o¿Ïߘ œ?å/á3/]3]10#.'7î‰4.'¶5|„„<8z}y7ÁѶ b@H¿_o_o¿Ïߘ ˜P`p°ÀÐ_o¿Ï œ?3å2/]33/]á/á3/]3]]]10'>73!'>73¦'.4‰ý¸'.4‰Á6z|{8=„ƒ|56z|{8=„ƒ|5ÁѶ b@H¿_oP`p°ÀИ_o¿Ï ˜_o¿Ïßœ ?2å2/33/]á/]á3/]3]]]10#>7!#>7B'/3‰H'/3‰¶7y}z8<„„|57y}z8<„„|5?þøúî ~@QÐàð¤´Ä 0@`p€P`pÀИàð_ ˜_oÏ߸ÿÀ@ Hœ ¨?2å2/+33/]á/]]á3/]3]_]]]10%#>7!#>7j'/3ŠH'/3‰î6z|{8=„ƒ}56z|{8=„ƒ}5{h |@R   à ð o  0 @ Àä ô Ö w j T E &  À  6¾ ¿ Â/?ö222á222/]á]233æ]]]]]]]3/3æ3]]]10%#53%hþµ7Ù7þÉ77Ù7KÝüü´¡þ_{}°@q °ð @P À ôæ‡zdU6FÀ¾  P ° ¿  ¿Â/ö222á222?ö222á222/^]q333/á222233æ]]]]]]]q23/33æ2]]]q10%%#553%%1Lþ´7Ù8þ´L//þ´L8Ù7Lþ´/ð´þ‡y´"´xþˆ´þí–åmòF@$/_oÏïÿ_ o Ÿ ¯ ß ï  Ð¸ÿÀ@  H/]Å]/+]Å]]]104>32#".–$?V21V@%%@V12V?$ìGd??dGFd??d“ÿãÛú'9¨@v;$;û;ä;»;Ë;¤;‹;d;t;K;4; ;–fv(–$2û2à2Ô2»2¤2‹2r2f2K202 222 –àðTd -›7#/33í22/^]]]í/^]]_]]]]]]]]]]qí9/]í]]]]]]]]]q1074>32#".%4>32#".%4>32#"&“"./""/."%"./""/."%#./""/6Io&5!!5&%5""5%&5!!5&%5""5%&5!!5&%5"BfÿìôË ';?I]‰@\@´TµJ´2µ#´( >0<@<°<0(@(><((<>E´J_?_O____¯_´ µ´ 0G¶Y·C¶O?>%¶7·!¶-¶·¶?áôá?áôá???áôá/]áôá]Þá9///]]]áôáôá1032#"#".54>3232#"#".54>32#32#"#".54>32úGPœœPGÇ$JsOIpL&#IqNKqM'¬GPœœPGÆ#JsOJpK&#IqNKqL'ÿüÕž,—GQ››QGÇ#JsOJpK&#IqNJrL'¥¥JH£¥l¬v??v¬llªu>>uªýJ¥¤IH£¥l«v??v«llªu>>uª’úJ¶ü¥¤IH£¥l«v??v«llªu>>uªÿÿ…¦J¶ ÿÿ…¦²¶RsüÇ<±¸ÿÀ@ H?Ÿ¯ßïÿëŸ//9=/33/]á]Æ+210R5uîîuþË)žNþ¤þ¤N›RsüÇ?@(ëßïÿ ?Ÿ¯ßïÿ?//9=/33/]3]/]]á10'7üþËuííu5þeN\\Nþbÿÿ“ÿãb¶'Ñ µ/11]]þ h¶±¸ÿð@ ??/82/8310#hüÕ+¶úJ¶j“ÇA@à`Ààð à ¸ÿÀ@ H ÀäÞ Ü??á3Ì2/+á2]]Ö]á104&#"#33632??-A*i @‚å¦QD4WAþ¦XeúþP`¶v@H   0Z ßÀ`_?o@H _ ??á99//+^]á3á2/^]3/]3á22]3/]99//10!!##53!!!!Ã$þܳ°°ðýÃýê‰þú‰'¤ýü¤D#É0‡@ o+'###¸ÿÀ@> H22)%@ H%u&&)u* *o&Ð***?*O*¯*¿*&*&*ts?á?á299//]]]3á23á2/+33]3/+399//333á22102&&#"!!!!!!5>55#535#5354>šj®BB8K0RY@+¦š )DaC‰ž‰ÝW‰_2–ÿì¶¶*5y@1on$ÿ@H¸ÿÀ@, H777@ H+#n$|6u+s"""$5s%$u ?á??á99//á3á2öá2+]3/++]99//3á22á10%2>7#".5#57733####3232>54&##;$#P?5X@$œœAkÑÑ4þŒ4|̘/²û†¿{:ý½]‹[.¤®9Š "FjH¿RM½Ó‰þVLN‰[¨MýǶ9m þg GqQމ?ÿìJË9†´(6¸ÿÀ@K H;;,## o."c(((:#`$$,`--_$$$ï$ÿ$--/-_-Ÿ-Ï-$-$-7t3_?3á?á399//]]3á23á23/]33á2233]3/+39910"!!!!3267#".'#53&45465#53>32&&Ev^C°þAþ’"¹•K‡;;…[s¶‡X¤”” X‡¸ra OP3w'4c[‰  )‰¯¸ ¢I‡Áy‰.‰}ÊN+1’+ÿøÛÁ+H†@ 9F´¸ÿð@JpFF FÐFßFF1"´ïÿJ@´111 1à1ð11Bü,ý=ü6'üýü ???áôá?áôá/^]qáÞ]qá9////8]]83á3310##".54>3232>54.#"".54>32&&#"3267 üÕ+n-PpD?nQ/,PqD>nR/þ3&<+*<%%<*+<&ýËEyZ45\}H3d !U"g_Â3Z##c¶úJ¶û˜SW--WSSW--WS3V>##>V34U=!!=U’&R€Z_„R&k tvåkwÿì{Ë-:U@2.p#@H##<5(n 0€6v((0vu  ?3/á?á9/33á22/]Å3á2ÖÁ9/+á10%2>73#".5556674>324#">o 9.d&FiF:jQ0.a14_-@hK6W=!5\|G$7cf ) 6N3w2R;SƒZ0%Tˆcç yî;lS1*OoEc¦†h&þÓ0Q;!!¼2E*þj!Nbylj¶+7;º@rZ99,á"°Ÿ0@"" 2á::/:::ïg=o=¿=Ï=@=  Z d3232654&#"5!¨Íý‡¦Ïv¤á)MmD?kM,)MmD>kN,þBHQQGGQQHcðºMLAŽ9üç¶ûLLJ CC> ü¹S‚Y//Y‚SSX..XSqssqrmmý““%åP¶ £@]Ä ÄÀÐào0@P ÐÄŸ¯""/"?""@H"@HÏï H ȸÿà@ H?333/333+3á23+3/]++]Ö]á2229///]]]]]]á22á10##5!###33#4>7#hÄ Ç@º{º´¿²Ãåellý›%"þIÑýÙ'ý/¬ ## ýÛÿÿN¦ÍvfÿÝ‹H"/;@!#J1/JN+/;///)N N?á?á9/]á9//]á2Þ2á10".54>32!32>7.#"y‚ƆE,Lfv€?qÂŽQüÅ@MX.Jt^M"H$SnÌ;M]53WI<#^Ìnc ~\<O“уþœ," 326454&#"5>322>7.#"; AeбmjŒS"2Qs™b[“-‹‰DCACKO%}¦c*ýž5^QC5% );I*>fO:%-F¦jáÔ¼RBnL<ƒe=OE* ¾É ®  Y–Äüs,Mhz…C(E30Qhon/2V@$)b¶X@ [`p°ð¸ÿÀ@' H/_oŸ¿@ H [ _ H ?3+?á/á+]3/+]á9=/331073!&&'!)¾»ÀûÇw -*ú¦qEú¹oša¨KK¨[ýÇþ'¶7@Ze 0 @ p €  ¸ÿÀ@HZd_?2?áöá+]öá10!#!mýº`þüù¢ø^Jþã¶ \@ [p ¸ÿÀ· H  ¸ÿà@ H  ¸ÿÀ@H _ _?á?á9=/3+3/33+23/+99//]á1055!!!Jpý Hü¼:ý°›þs’+r¤ý ü¤f‡2@–‹yVK8 ­³?á/]]]]]]]]Î105!fœ‡––%ÿòÅ ,@®//9/á//8399//33310##5!3s…þë´)å’ ýi¬w‘1#3Cv@OIH ðE/E_E:'J'j'*77'?w/—//ª 0x??«4*®:$®7'   Ÿ /]]33/^]39á2á2/á]/]á]9]]]]10]]#"&'#".54>32>32267&&#""32>54.1+MmB]›AFNS+AnO-+NoCUž>DOW0BmM+ü{?l41kE(@,,A|?k73lD'@-.@Í?rW4is0O8,RuHAsV1kp0N8-RuùWa^Z3D&$B2jWa]\3D'&C1þ#7@#%Ð% ¬  ®®?á?á/]3]]á2]]]102&&#"#"&'532>54>ƒ"K=$3B'2Y|J$K>#3E*/Wy “ 'AT-ú×^†V) “%@T0'^†V(f{%#GK@.AII.  @)­1¯C­ ¯­ß ï ÿ  @H ;­.C³?3á3/+]á3õ2áõá3/]3]Î210.#"563232>7#"..#"563232>7#".%7-)<;8d”27C/%7/(<;8c•27C/%7-)<;8d”27C/%7/(<;8a—27C¼ !,¢l  !,¢l ®  ,¢m  -¢l f¤¦@   ¸ÿð@O    @Æ»©†{hB9  ­­/ ðo/]]33/^]]q3á223á233/]]]]]]]]3]Î299//883}‡ÄÄÄÄ3‡ÄÄÄÄ10#5!!5!3!!!'^ø>yþIü…ŠiúþÁ{ºþ‰º–•;à•þü–þê9fÝ R@2 @ @o0 Pp€Ðð?/^]]]q33/]]29=/33/]3]Î210%5 5!üdœý!ßüdœî¨fá þ”þ¾þq––fÝ R@2  @ @o0 Pp€Ðð?/^]]]q33/]]39=/33/]3]Î21055!fâýœüdœBj¢þfþXî––m?à ]@6  ¬ ÿ @ P € ° À  / ª­ ­/á?á99=//33/]á]]]Þá99333310#3 ?þÂL þÏþÏ1áýßäýþýþÿÿ&IL¢$@¯P¯/@//]]]]]]]55ÿÿ&IO¢"@¯P¯!@!!]]]]]]]5ÏÙÍ?@) ¯Ï0p 0  @ HŽ/á3/+]3/^]3/]]]q10#".'332>7Í1]dgŒX)ª2L5,I6"NvQ)'PwP9I)+H5ÿ¼þdJ#@ G  T P?á?æ2/á]10"&'532>53B0?6#.#¶"Hmþ ” 'A3ôûM{W/‡Íy @ …? ’?å/3Ý]á10>73#‡ ´).`çMQP!NVV oþ;uÿƒ @ … ’/å/á2/310>73#o ²,6bþVLTS!MWV!}Ùƒ! @ …’ ?å/á2/310#5>73ƒ ²-7bLTS!NVV!%9Ç *@á O@ Há åÞåß?á?á/á+]Þá1032654&#"#".54>32¸GQNNNNQGÇ#JsOJpK&#IqN•š¥¡Ÿ§¥ŸŸ¥lªu>>uªll©t<ì J¼ F@* á _@ Háå   /  åÜÝ??á9/^]3á2/á+]9/33á210##5!533!5467}þ‰y}þô › ÀÀoCýÍÃ*c1 %*(ð;7f¶$J@!"" á&O&&&@ H ¸ÿÀ@H å!åÜåß?á?á9/á/++]Þá39/333102#"&'532654&#"'!!66B=kO-¦¡?y,<=;U__Y %'%C!ºþ¾9m#DeAŒ LXMU+¨{×%9Õ-8@  !á/O///@ H)á $äÞåß?á?39/3á/á2+]Þá910#".54>7366322654&#"*NoD@nR/E~²n-O`@ cJ6Z@$þÛDTMG'?--=fAoP--X€Sn³m'm@O`;+1%Hi÷\VRZ)7,I5/Jd¶8¹ÿð@áO@ HÐàðåÜÝ??á/]+]Þá9/810!5!@þb5þ¿Jñ{düø19qÇ%4Dw@"8á!Bá =2!!,áFOFFF@ H&á¸ÿÀ@'H =2K2[2k2›2«225¶=Æ=Ö==)åß5åÞ?á?á9]9]99/+á+]Þá99//9áá102#"&54>7.54>32654.''">54&R4^F*'4">0*Mi?‹–*8.#+H_bJHJK'7!AB”8? -, AÇ7T8%>2(-7E*9]B$ƒs*E8++5>%8S7ýh;FF;0' "Mè76*$ #,67!9{É%5;@"1à 7O777@ H)á,ä&å!Þ åß?á?á9/3á/á+]Þ9á210#"&'532>7##".54>32%"32>54.{!Z¢@6Sl@ $0=&<`D$)KlCArT0þËDVJL&?-*>B`»“[} 5Wr=$%GfABoQ-/a“¬^XLX)3$H;$TþÁî #'+/37;?CGS_oxä@Y4, 8WQzpotgdd‚~kpQÀQÐQQokkoQ]‰OŒ_ŒŒŒD($ ]PK`KKKA=1 *BF>&2†oygppz`zoTHHpo€oaoo¸ÿÀ@% Hoo`ZNNŠx`/`?`o```, 95!/^]3333/33339/]333/33/+]]3/339/333/3/3/3/3/33333/]3/33333/]39///]333/33333/3/3/310!#%5!#533!5353!5!!5!5!#3#35!#35!35!#35#3#3"&54672'2654&#"32##32654&##32654&#532653#"T/ÀÎ0mùoÀÃmýIûáþò·mmmmûÂü0ooÀwú¨ooooþmmú™‡‡‡‡H??HEBBŸ¬mp--83m^Ï{B.$)0;J1%&4 %1}h_=¾0oÁÁoþÐÁù/ÂmmÂþÑmmmmþooú¨ú;mm¦Jooooü/yýhþŠŸŽ‘›œ‘ŽŸhg^^ff^^gêCS1D D:QYb" "ãš+% *üf$2’þr^dTþÁª#/P@(##$ *0*@***O$$$ ##0---''/3/33/3/]3//3/3/33/]3/]3/310 54676654.#"663232654&#"þ¬üTüVë!LcM1[ƒQ+ZWR"RD~8?>'REJGFDGGDFGüVüW©û/,>:LƒYEkJ'#²".:/1DA5yP;þí>II>@IIÿÿÿ¼þU!&7Lþ»ÿÿÁP¶ ÿì²+ Ou@GM C>;GCC;GOQ Q?Q3G "P)>OONN))0)@)P))N)N8PH8P?á?á99//^]3á2á/]á]]3/]3á9/á999910.#"#".54>54&#"'6632324&'.54>323j 9M[0LV.j«<@ăo’V" 6%%d62E, 0N:¤¤®ò–C'QYh¡uKÑlªt=XH8iR3Š:ŸþîÉs7_}E(]YK-! 2D(#V]a-*J620>KxšQCpR.Tœß‹‰HÃ"@¯$ï$$@ H"«!˜!@!!!!¸ÿð@D!!   HŸ ¯ } k Z O + ;  Zw‡—O! ?Á??99/^]]]á2/]]]]]]+qq93/8]]]]]3+]10>7>32&&#"#3=?</5@)#+  # (2662»þBËÛK¨ ‰,(=' ‘*#Un€……<ýã/‡ÿì`J<@Gg//GÕ,·,©,š,,,7H«»>>T>d>„>¤>´>@>0>>"H0@P¸ÿÀ@H--'P 2'P?2á2?á229/9/+^]á]]_]]q3/]á9/_]]]]á]910"&54>7!57!##"&'#32>55332>54.')¶Ã +þë†Èó&ĵj‹ ‹º(6K-.D,³bR-K6$êó9}~{8JPš8{~}9óêW[[WÄ6vyz:bƒN!)Hb9°°‚Š!Nƒb:zyv6ÿÿÇ/u&0vyT@ '&K %+5+5ÿÿ®‡!&PvÇ@ :&z-3+%+5+5ÿÿýÕݼ&$[ ·%+55ÿÿ^ýÕœ^&D[¼ ·=3 "%+55ÿÿþÓÿìÃÍ&2R\þ@?¶-5¸ÿÀ² H¸ÿ!@55 %°€P@]]]]]]55++55?55sýÕ7ÿƒ:@(ƒ?O_ƒ0  Œ0@P ðŒ/áÔ^]á/]áÔ]á10#".54>324&#"3267#=T12R; ;R20T>#t@12?981@þ®3Q88O33O87O45<<55<<“hÙÇ B@ 0@¸ÿÀ@ H+      ?O_/Ì]99///Í]]2/+3Í]910>73#%467#"&° Ï08>Rþãxz<9%2/:E‰KOQ$ MPQ%xNsL.%'Fÿÿ¹&I'I¢LD8@&9p9@9/999à°¯KpK@KK]]]]]]5]]]]]55ÿÿ¨&I'I¢OD6@%9p9@9/999à°¯=p=@==]]]]]]5]]]]]5Ëê!úÀ Ü$ÿ®,)7R9R:f;)<R=)FÿÃGÿÃHÿÃJÿ×RÿÃTÿÃW)Y)Z\)‚ÿ®ƒÿ®„ÿ®…ÿ®†ÿ®‡ÿ®ˆÿ\Ž)))‘)ŸR¨ÿéÿêÿëÿìÿíÿôÿõÿöÿ÷ÿøÿúÿÿ)Á)Âÿ®Äÿ®Æÿ®ÉÿÃËÿÃÍÿÃÏÿÃÕÿÃ×ÿÃÙÿÃÛÿÃÝÿÃì)ð)ò)ÿÃÿÃÿÃÿÃ$R&R6f78R9):R;)=)?)Cÿ®_ÿ®iÿ®qRyÿÃ~ÿÀ)‚ÿÊ)ŒÿÃŽÿÃÿÑ)“ÿÔ)–ÿÙÿÛÿÃR¤ÿš¦R¨=ªÿ®®ÿ…°=±µÿ…¼R½=¿)ÄRÏÿÃØÿÃÛÿÃÜ)Ý)ÞÿÃêÿÃíÿÃúfûüfýþfÿR)(ÿ® $ÿ® ,) 7R 9R :f ;) <R =) Fÿà Gÿà Hÿà Jÿ× Rÿà Tÿà W) Y) Z \) ‚ÿ® ƒÿ® „ÿ® …ÿ® †ÿ® ‡ÿ® ˆÿ\ Ž) ) ) ‘) ŸR ¨ÿà ©ÿà ªÿà «ÿà ¬ÿà ­ÿà ´ÿà µÿà ¶ÿà ·ÿà ¸ÿà ºÿà ¿) Á) Âÿ® Äÿ® Æÿ® Éÿà Ëÿà Íÿà Ïÿà Õÿà ×ÿà Ùÿà Ûÿà Ýÿà ì) ð) ò) ÿà ÿà ÿà ÿà $R &R 6f 7 8R 9) :R ;) =) ?) Cÿ® _ÿ® iÿ® qR yÿà ~ÿà €) ‚ÿà Š) Œÿà Žÿà ÿà ‘) “ÿà ”) –ÿà ™ÿà ›ÿà R ¤ÿš ¦R ¨= ªÿ® ®ÿ… °= ± µÿ… ¼R ½= ¿) ÄR Ïÿà Øÿà Ûÿà Ü) Ý) Þÿà êÿà íÿà úf û üf ý þf ÿ R ) (ÿ® -{ ö{ £{&ÿÃ*ÿÃ2ÿÃ4ÿÃ7ÿš8ÿ×9ÿš:ÿ®<ÿš‰ÿÔÿÕÿÖÿ×ÿØÿÚÿÛÿלÿ×ÿמÿןÿšÈÿÃÎÿÃÞÿÃàÿÃâÿÃäÿÃÿÃÿÃ$ÿš&ÿš,ÿ×0ÿ×2ÿ×4ÿ×6ÿ®8ÿš:ÿšfÿÃmÿÃqÿš¸ÿûÿüÿšúÿ®üÿ®þÿ®ÿš7ÿšqÿšrÿðÿ×µÿ×¼ÿšÄÿ®&ÿÃ*ÿÃ2ÿÃ4ÿÃ7ÿš8ÿ×9ÿš:ÿ®<ÿš‰ÿÔÿÕÿÖÿ×ÿØÿÚÿÛÿלÿ×ÿמÿןÿšÈÿÃÎÿÃÞÿÃàÿÃâÿÃäÿÃÿÃÿÃ$ÿš&ÿš,ÿ×0ÿ×2ÿ×4ÿ×6ÿ®8ÿš:ÿšfÿÃmÿÃqÿš¸ÿûÿüÿšúÿ®üÿ®þÿ®ÿš$ÿ®$ ÿ®$&ÿì$*ÿì$2ÿì$4ÿì$7ÿ…$8ÿì$9ÿÃ$:ÿ×$<ÿš$‰ÿì$”ÿì$•ÿì$–ÿì$—ÿì$˜ÿì$šÿì$›ÿì$œÿì$ÿì$žÿì$Ÿÿš$Èÿì$Îÿì$Þÿì$àÿì$âÿì$äÿì$ÿì$ÿì$ÿ×$$ÿ…$&ÿ…$,ÿì$0ÿì$2ÿì$4ÿì$6ÿ×$8ÿš$:ÿš$fÿì$mÿì$qÿ…$¸ÿì$»ÿì$¼ÿ…$úÿ×$üÿ×$þÿ×$ÿš$ÿ®$ ÿ®%,ÿì%7ÿì%9ÿì%;ÿì%<ÿì%Ÿÿì%$ÿì%&ÿì%8ÿì%:ÿì%qÿì%¼ÿì%ÿì&)& )& )&&ÿ×&*ÿ×&2ÿ×&4ÿ×&@)&`)&‰ÿ×&”ÿ×&•ÿ×&–ÿ×&—ÿ×&˜ÿ×&šÿ×&Èÿ×&Îÿ×&Þÿ×&àÿ×&âÿ×&äÿ×&ÿ×&ÿ×&fÿ×&mÿ×&¸ÿ×&»ÿ×&)& )'ÿÃ'ÿÃ'$ÿì',ÿì'7ÿÃ'9ÿì':ÿì';ÿì'<ÿ×'=ÿì'‚ÿì'ƒÿì'„ÿì'…ÿì'†ÿì'‡ÿì'ˆÿÃ'Žÿì'ÿì'ÿì'‘ÿì'Ÿÿ×'Âÿì'Äÿì'Æÿì'ìÿì'ðÿì'òÿì'$ÿÃ'&ÿÃ'6ÿì'8ÿ×':ÿ×';ÿì'=ÿì'?ÿì'Cÿì'_ÿì'iÿì'qÿÃ'ªÿì'¼ÿÃ'úÿì'üÿì'þÿì'ÿ×'(ÿì)=) =) ))ÿš)ÿš)"))$ÿ×)9):)<)@))`))‚ÿ×)ƒÿ×)„ÿ×)…ÿ×)†ÿ×)‡ÿ×)ˆÿÃ)Ÿ)Âÿ×)Äÿ×)Æÿ×)6)8):)Cÿ×)_ÿ×)iÿ×)ªÿ×)ú)ü)þ))=) =)(ÿ×,), ),&ÿì,*ÿì,2ÿì,4ÿì,‰ÿì,”ÿì,•ÿì,–ÿì,—ÿì,˜ÿì,šÿì,Èÿì,Îÿì,Þÿì,àÿì,âÿì,äÿì,ÿì,ÿì,ÿì,fÿì,mÿì,¸ÿì,»ÿì,), ).). ).&ÿ×.*ÿ×.2ÿ×.4ÿ×.‰ÿ×.”ÿ×.•ÿ×.–ÿ×.—ÿ×.˜ÿ×.šÿ×.Èÿ×.Îÿ×.Þÿ×.àÿ×.âÿ×.äÿ×.ÿ×.ÿ×.ÿ×.fÿ×.mÿ×.¸ÿ×.»ÿ×.). )/ÿš/ ÿš/&ÿì/*ÿì/2ÿì/4ÿì/7ÿ…/8ÿì/9ÿ®/:ÿÃ/<ÿš/‰ÿì/”ÿì/•ÿì/–ÿì/—ÿì/˜ÿì/šÿì/›ÿì/œÿì/ÿì/žÿì/Ÿÿš/Èÿì/Îÿì/Þÿì/àÿì/âÿì/äÿì/ÿì/ÿì/ÿì/$ÿ…/&ÿ…/,ÿì/0ÿì/2ÿì/4ÿì/6ÿÃ/8ÿš/:ÿš/fÿì/mÿì/qÿ…/¸ÿì/»ÿì/¼ÿ…/úÿÃ/üÿÃ/þÿÃ/ÿš/ÿš/ ÿš2ÿÃ2ÿÃ2$ÿì2,ÿì27ÿÃ29ÿ×2:ÿì2;ÿ×2<ÿ×2=ÿì2‚ÿì2ƒÿì2„ÿì2…ÿì2†ÿì2‡ÿì2ˆÿ×2Žÿì2ÿì2ÿì2‘ÿì2Ÿÿ×2Âÿì2Äÿì2Æÿì2ìÿì2ðÿì2òÿì2$ÿÃ2&ÿÃ26ÿì28ÿ×2:ÿ×2;ÿì2=ÿì2?ÿì2Cÿì2_ÿì2iÿì2qÿÃ2ªÿì2¼ÿÃ2úÿì2üÿì2þÿì2ÿ×2(ÿì3ÿ33ÿ33$ÿ®3&ÿì3;ÿì3<ÿì3=ÿ×3‚ÿ®3ƒÿ®3„ÿ®3…ÿ®3†ÿ®3‡ÿ®3ˆÿq3‰ÿì3Ÿÿì3Âÿ®3Äÿ®3Æÿ®3Èÿì3Îÿì38ÿì3:ÿì3;ÿ×3=ÿ×3?ÿ×3Cÿ®3_ÿ®3iÿ®3ªÿ®3»ÿì3ÿì3(ÿ®4ÿÃ4ÿÃ4$ÿì4,ÿì47ÿÃ49ÿ×4:ÿì4;ÿ×4<ÿ×4=ÿì4‚ÿì4ƒÿì4„ÿì4…ÿì4†ÿì4‡ÿì4ˆÿÃ4Žÿì4ÿì4ÿì4‘ÿì4Ÿÿ×4Âÿì4Äÿì4Æÿì4ìÿì4ðÿì4òÿì4$ÿÃ4&ÿÃ46ÿì48ÿ×4:ÿ×4;ÿì4=ÿì4?ÿì4Cÿì4_ÿì4iÿì4qÿÃ4ªÿì4¼ÿÃ4úÿì4üÿì4þÿì4ÿ×4(ÿì57ÿì5$ÿì5&ÿì5qÿì5¼ÿì7R7 R7ÿš7ÿš7ÿš7")7$ÿ…7&ÿÃ7*ÿÃ72ÿÃ74ÿÃ76ÿì777Dÿ…7Fÿ…7Gÿ…7Hÿ…7Jÿš7Pÿ®7Qÿ®7Rÿ…7Sÿ®7Tÿ…7Uÿ®7Vÿ…7Xÿ®7YÿÃ7ZÿÃ7[ÿÃ7\ÿÃ7]ÿÃ7‚ÿ…7ƒÿ…7„ÿ…7…ÿ…7†ÿ…7‡ÿ…7ˆÿq7‰ÿÃ7”ÿÃ7•ÿÃ7–ÿÃ7—ÿÃ7˜ÿÃ7šÿÃ7¢ÿ…7£ÿ…7¤ÿ…7¥ÿ…7¦ÿ…7§ÿ…7¨ÿ…7©ÿ…7ªÿ…7«ÿ…7¬ÿ…7­ÿ…7³ÿ®7´ÿ…7µÿ…7¶ÿ…7·ÿ…7¸ÿ…7ºÿ…7»ÿ®7¼ÿ®7½ÿ®7¾ÿ®7¿ÿÃ7ÁÿÃ7Âÿ…7Ãÿ…7Äÿ…7Åÿ…7Æÿ…7Çÿ…7ÈÿÃ7Éÿ…7Ëÿ…7Íÿ…7ÎÿÃ7Ïÿ…7Õÿ…7×ÿ…7Ùÿ…7Ûÿ…7Ýÿ…7ÞÿÃ7àÿÃ7âÿÃ7äÿÃ7ÿ®7ÿ®7 ÿ®7ÿÃ7ÿ…7ÿ…7ÿÃ7ÿ…7ÿÃ7ÿ…7ÿì7ÿ…7ÿ…7 ÿì7!ÿ…7"ÿì7#ÿ…7$7&77ÿÃ79ÿÃ7@ÿÃ7Cÿ…7Dÿ…7Jÿ…7_ÿ…7fÿÃ7iÿ…7mÿÃ7q7yÿ…7{ÿ®7~ÿ…7€ÿÃ7‚ÿ…7„ÿ®7ŠÿÃ7Œÿ…7Žÿ…7ÿ…7‘ÿÃ7“ÿ…7”ÿÃ7–ÿ…7™ÿ…7›ÿ…7 ÿì7ªÿ…7¸ÿÃ7»ÿÃ7¼7Êÿ…7Ïÿ…7Øÿ…7Ûÿ…7ÜÿÃ7ÝÿÃ7Þÿ…7êÿ…7íÿ…7îÿ…7ûÿÃ7ýÿÃ7ÿÿÃ7ÿÃ7ÿ®7ÿš7R7 R7(ÿ…8ÿ×8ÿ×8$ÿì8‚ÿì8ƒÿì8„ÿì8…ÿì8†ÿì8‡ÿì8ˆÿ×8Âÿì8Äÿì8Æÿì8Cÿì8_ÿì8iÿì8ªÿì8(ÿì9R9 R9ÿš9ÿš9")9$ÿÃ9&ÿ×9*ÿ×92ÿ×94ÿ×9DÿÃ9FÿÃ9GÿÃ9HÿÃ9JÿÃ9Pÿ×9Qÿ×9RÿÃ9Sÿ×9TÿÃ9Uÿ×9Vÿ×9Xÿ×9‚ÿÃ9ƒÿÃ9„ÿÃ9…ÿÃ9†ÿÃ9‡ÿÃ9ˆÿ…9‰ÿ×9”ÿ×9•ÿ×9–ÿ×9—ÿ×9˜ÿ×9šÿ×9¢ÿÃ9£ÿÃ9¤ÿÃ9¥ÿÃ9¦ÿÃ9§ÿÃ9¨ÿÃ9©ÿÃ9ªÿÃ9«ÿÃ9¬ÿÃ9­ÿÃ9³ÿ×9´ÿÃ9µÿÃ9¶ÿÃ9·ÿÃ9¸ÿÃ9ºÿÃ9»ÿ×9¼ÿ×9½ÿ×9¾ÿ×9ÂÿÃ9ÃÿÃ9ÄÿÃ9ÅÿÃ9ÆÿÃ9ÇÿÃ9Èÿ×9ÉÿÃ9ËÿÃ9ÍÿÃ9Îÿ×9ÏÿÃ9ÕÿÃ9×ÿÃ9ÙÿÃ9ÛÿÃ9ÝÿÃ9Þÿ×9àÿ×9âÿ×9äÿ×9ÿ×9ÿ×9 ÿ×9ÿ×9ÿÃ9ÿÃ9ÿ×9ÿÃ9ÿ×9ÿÃ9ÿ×9ÿ×9!ÿ×9#ÿ×9CÿÃ9DÿÃ9Jÿ×9_ÿÃ9fÿ×9iÿÃ9mÿ×9yÿÃ9{ÿ×9~ÿÃ9‚ÿÃ9„ÿ×9ŒÿÃ9ŽÿÃ9ÿÃ9“ÿÃ9–ÿÃ9™ÿÃ9›ÿÃ9ªÿÃ9¸ÿ×9»ÿ×9ÊÿÃ9ÏÿÃ9ØÿÃ9ÛÿÃ9ÞÿÃ9êÿÃ9íÿÃ9îÿ×9R9 R9(ÿÃ:f: f:ÿ®:ÿ®:$ÿ×:&ÿì:*ÿì:2ÿì:4ÿì:Dÿ×:Fÿ×:Gÿ×:Hÿ×:Jÿì:Pÿì:Qÿì:Rÿ×:Sÿì:Tÿ×:Uÿì:Vÿ×:Xÿì:]ÿì:‚ÿ×:ƒÿ×:„ÿ×:…ÿ×:†ÿ×:‡ÿ×:ˆÿ®:‰ÿì:”ÿì:•ÿì:–ÿì:—ÿì:˜ÿì:šÿì:¢ÿ×:£ÿ×:¤ÿ×:¥ÿ×:¦ÿ×:§ÿ×:¨ÿ×:©ÿ×:ªÿ×:«ÿ×:¬ÿ×:­ÿ×:³ÿì:´ÿ×:µÿ×:¶ÿ×:·ÿ×:¸ÿ×:ºÿ×:»ÿì:¼ÿì:½ÿì:¾ÿì:Âÿ×:Ãÿ×:Äÿ×:Åÿ×:Æÿ×:Çÿ×:Èÿì:Éÿ×:Ëÿ×:Íÿ×:Îÿì:Ïÿ×:Õÿ×:×ÿ×:Ùÿ×:Ûÿ×:Ýÿ×:Þÿì:àÿì:âÿì:äÿì:ÿì:ÿì: ÿì:ÿì:ÿ×:ÿ×:ÿì:ÿ×:ÿì:ÿ×:ÿ×:ÿ×:!ÿ×:#ÿ×:@ÿì:Cÿ×:Dÿ×:Jÿ×:_ÿ×:fÿì:iÿ×:mÿì:yÿ×:{ÿì:~ÿ×:‚ÿ×:„ÿì:Œÿ×:Žÿ×:ÿ×:“ÿ×:–ÿ×:™ÿ×:›ÿ×:ªÿ×:¸ÿì:»ÿì:Êÿ×:Ïÿ×:Øÿ×:Ûÿ×:Þÿ×:êÿ×:íÿ×:îÿ×:f: f:(ÿ×;); );&ÿ×;*ÿ×;2ÿ×;4ÿ×;Fÿì;Gÿì;Hÿì;Rÿì;Tÿì;‰ÿ×;”ÿ×;•ÿ×;–ÿ×;—ÿ×;˜ÿ×;šÿ×;¨ÿì;©ÿì;ªÿì;«ÿì;¬ÿì;­ÿì;´ÿì;µÿì;¶ÿì;·ÿì;¸ÿì;ºÿì;Èÿ×;Éÿì;Ëÿì;Íÿì;Îÿ×;Ïÿì;Õÿì;×ÿì;Ùÿì;Ûÿì;Ýÿì;Þÿ×;àÿ×;âÿ×;äÿ×;ÿ×;ÿì;ÿì;ÿ×;ÿì;ÿ×;ÿì;fÿ×;mÿ×;yÿì;~ÿì;‚ÿì;Œÿì;Žÿì;ÿì;“ÿì;–ÿì;™ÿì;›ÿì;¸ÿ×;»ÿ×;Ïÿì;Øÿì;Ûÿì;Þÿì;êÿì;íÿì;); )<R< R<ÿš<ÿš<")<$ÿš<&ÿ×<*ÿ×<2ÿ×<4ÿ×<6ÿì<Dÿš<Fÿš<Gÿš<Hÿš<Jÿš<PÿÃ<QÿÃ<Rÿš<SÿÃ<Tÿš<UÿÃ<Vÿ®<XÿÃ<[ÿ×<\ÿì<]ÿÃ<‚ÿš<ƒÿš<„ÿš<…ÿš<†ÿš<‡ÿš<ˆÿq<‰ÿ×<”ÿ×<•ÿ×<–ÿ×<—ÿ×<˜ÿ×<šÿ×<¢ÿš<£ÿš<¤ÿš<¥ÿš<¦ÿš<§ÿš<¨ÿš<©ÿš<ªÿš<«ÿš<¬ÿš<­ÿš<³ÿÃ<´ÿš<µÿš<¶ÿš<·ÿš<¸ÿš<ºÿš<»ÿÃ<¼ÿÃ<½ÿÃ<¾ÿÃ<¿ÿì<Áÿì<Âÿš<Ãÿš<Äÿš<Åÿš<Æÿš<Çÿš<Èÿ×<Éÿš<Ëÿš<Íÿš<Îÿ×<Ïÿš<Õÿš<×ÿš<Ùÿš<Ûÿš<Ýÿš<Þÿ×<àÿ×<âÿ×<äÿ×<ÿÃ<ÿÃ< ÿÃ<ÿ×<ÿš<ÿš<ÿ×<ÿš<ÿ×<ÿš<ÿì<ÿ®<ÿ®< ÿì<!ÿ®<"ÿì<#ÿ®<9ÿì<@ÿÃ<Cÿš<Dÿš<Jÿ®<_ÿš<fÿ×<iÿš<mÿ×<yÿš<{ÿÃ<~ÿš<€ÿì<‚ÿš<„ÿÃ<Šÿì<Œÿš<Žÿš<ÿš<“ÿš<–ÿš<™ÿš<›ÿš< ÿì<ªÿš<¸ÿ×<»ÿ×<Êÿš<Ïÿš<Øÿš<Ûÿš<Ýÿì<Þÿš<êÿš<íÿš<îÿ®<ÿì<R< R<(ÿš=)= )=&ÿì=*ÿì=2ÿì=4ÿì=‰ÿì=”ÿì=•ÿì=–ÿì=—ÿì=˜ÿì=šÿì=Èÿì=Îÿì=Þÿì=àÿì=âÿì=äÿì=ÿì=ÿì=ÿ×=fÿì=mÿì=¸ÿì=»ÿì=)= )>-{>ö{>£{D ÿ×E ÿ×F=F =F=F =H ÿ×IfI fIYIZI\I¿IÁI7I9I€IŠI‘I”IÜIÝIûIýIÿIIfI fJ)J )JJJ)J )K ÿÃN)N )N)N )P ÿ×Q ÿ×R[ÿ×R]ÿìR@ÿìUfU fUDÿìUJÿìU¢ÿìU£ÿìU¤ÿìU¥ÿìU¦ÿìU§ÿìUÃÿìUÅÿìUÇÿìUDÿìUÊÿìUfU fV=V =V=V =WRW RWWWRW RYRY RYIYRY RZRZ RZIZRZ R[)[ )[Rÿ×[¨ÿ×[´ÿ×[µÿ×[¶ÿ×[·ÿ×[¸ÿ×[ºÿ×[ÿ×[ÿ×[ÿ×[ÿ×[Œÿ×[Žÿ×[ÿ×[“ÿ×[–ÿ×[™ÿ×[›ÿ×[Øÿ×[Þÿ×[)[ )\=\ =\I\=\ =]Rÿì]¨ÿì]´ÿì]µÿì]¶ÿì]·ÿì]¸ÿì]ºÿì]ÿì]ÿì]ÿì]ÿì]Œÿì]Žÿì]ÿì]“ÿì]–ÿì]™ÿì]›ÿì]Øÿì]Þÿì^-{^ö{^£{mqÿ×mxÿ×m‘)}qÿš}rÿÃ}xÿÂÿ®‚ ÿ®‚ ÿ…‚D‚D‚"ÿÂ&ÿì‚*ÿì‚-^‚2ÿì‚4ÿì‚7ÿ…‚8ÿì‚9ÿÂ:ÿׂ<ÿš‚=;‚Iÿì‚Wÿì‚YÿׂZÿì‚\ÿׂ‚ÿׂ‰ÿì‚”ÿì‚•ÿì‚–ÿì‚—ÿ삘ÿ삚ÿì‚›ÿ삜ÿì‚ÿ삞ÿ삟ÿš‚¿ÿׂÁÿׂÈÿì‚Îÿì‚Þÿì‚àÿì‚âÿì‚äÿì‚ö^‚ÿì‚ÿì‚ÿׂ$ÿ…‚&ÿ…‚,ÿì‚0ÿì‚2ÿì‚4ÿì‚6ÿׂ7ÿì‚8ÿš‚9ÿׂ:ÿš‚;;‚=;‚?;‚fÿì‚mÿì‚qÿ…‚€ÿׂŠÿׂ‘ÿׂ”ÿׂ£^‚¸ÿì‚»ÿ삼ÿ…‚ÜÿׂÝÿׂúÿׂûÿì‚üÿׂýÿì‚þÿׂÿÿì‚ÿš‚ÿׂÿ®‚ ÿ®ƒÿ®ƒ ÿ®ƒ ÿ…ƒDƒDƒ"ÿÃ&ÿìƒ*ÿìƒ-^ƒ2ÿìƒ4ÿìƒ7ÿ…ƒ8ÿìƒ9ÿÃ:ÿ׃<ÿšƒ=;ƒIÿìƒWÿìƒYÿ׃Zÿìƒ\ÿ׃„ÿ׃‰ÿ샊ÿ׃ÿ׃ÿ僔ÿ샕ÿ샖ÿ샗ÿ샘ÿ샚ÿ샛ÿ샜ÿìƒÿ샞ÿ샟ÿšƒ¿ÿ׃Áÿ׃ÈÿìƒÎÿìƒÞÿìƒàÿìƒâÿìƒäÿìƒö^ƒÿìƒÿìƒÿ׃$ÿ…ƒ&ÿ…ƒ,ÿìƒ0ÿìƒ2ÿìƒ4ÿìƒ6ÿ׃7ÿìƒ8ÿšƒ9ÿ׃:ÿšƒ;;ƒ=;ƒ?;ƒfÿìƒmÿìƒqÿ…ƒ€ÿ׃Šÿ׃‘ÿ׃”ÿ׃£^ƒ¸ÿ샻ÿ샼ÿ…ƒÜÿ׃Ýÿ׃úÿ׃ûÿìƒüÿ׃ýÿìƒþÿ׃ÿÿìƒÿšƒÿ׃ÿ®ƒ ÿ®„ÿ®„ ÿ®„ ÿ…„D„D„"ÿÄ&ÿì„*ÿì„-^„2ÿì„4ÿì„7ÿ…„8ÿì„9ÿÄ:ÿׄ<ÿš„=;„Iÿì„Wÿì„YÿׄZÿì„\ÿׄ„ÿׄ‰ÿ섊ÿׄÿׄÿå„”ÿì„•ÿì„–ÿì„—ÿ섘ÿ섚ÿì„›ÿ서ÿì„ÿ섞ÿ섟ÿš„¿ÿׄÁÿׄÈÿì„Îÿì„Þÿì„àÿì„âÿì„äÿì„ö^„ÿì„ÿì„ÿׄ$ÿ…„&ÿ…„,ÿì„0ÿì„2ÿì„4ÿì„6ÿׄ7ÿì„8ÿš„9ÿׄ:ÿš„;;„=;„?;„fÿì„mÿì„qÿ…„€ÿׄŠÿׄ‘ÿׄ”ÿׄ£^„¸ÿì„»ÿ센ÿ…„ÜÿׄÝÿׄúÿׄûÿì„üÿׄýÿì„þÿׄÿÿì„ÿš„ÿׄÿ®„ ÿ®…ÿ®… ÿ®… ÿ……D…D…"ÿÃ…&ÿì…*ÿì…-^…2ÿì…4ÿì…7ÿ……8ÿì…9ÿÃ…:ÿ×…<ÿš…=;…Iÿì…Wÿì…Yÿ×…Zÿì…\ÿ×…‚ÿ×…‰ÿì…”ÿì…•ÿì…–ÿì…—ÿì…˜ÿì…šÿì…›ÿì…œÿì…ÿì…žÿì…Ÿÿš…¿ÿ×…Áÿ×…Èÿì…Îÿì…Þÿì…àÿì…âÿì…äÿì…ö^…ÿì…ÿì…ÿ×…$ÿ……&ÿ……,ÿì…0ÿì…2ÿì…4ÿì…6ÿ×…7ÿì…8ÿš…9ÿ×…:ÿš…;;…=;…?;…fÿì…mÿì…qÿ……€ÿ×…Šÿ×…‘ÿ×…”ÿ×…£^…¸ÿì…»ÿì…¼ÿ……Üÿ×…Ýÿ×…úÿ×…ûÿì…üÿ×…ýÿì…þÿ×…ÿÿì…ÿš…ÿ×…ÿ®… ÿ®†ÿ®† ÿ®† ÿ†D†D†"ÿ׆&ÿì†*ÿì†-^†2ÿì†4ÿì†7ÿ…†8ÿì†9ÿÆ:ÿ׆<ÿš†=;†Wÿå†YÿÕ†Zÿå†\ÿÛ†‰ÿ솔ÿ솕ÿ솖ÿ솗ÿ솘ÿ솚ÿ솛ÿ솜ÿì†ÿ솞ÿ솟ÿš†¿ÿÛ†ÁÿÛ†Èÿì†Îÿì†Þÿì†àÿì†âÿì†äÿì†ö^†ÿì†ÿì†ÿ׆$ÿ…†&ÿ…†,ÿì†0ÿì†2ÿì†4ÿì†6ÿ׆7ÿå†8ÿš†9ÿÛ†:ÿš†;;†=;†?;†fÿì†mÿì†qÿ…†€ÿÛ†ŠÿÕ†‘ÿÕ†”ÿÕ†£^†¸ÿ솻ÿ솼ÿ…†ÜÿÕ†ÝÿÛ†úÿ׆ûÿå†üÿ׆ýÿå†þÿ׆ÿÿå†ÿš†ÿÛ†ÿ®† ÿ®‡ÿf‡ ÿf‡ ÿ‡D‡D‡"ÿׇ&ÿì‡*ÿì‡-^‡2ÿì‡4ÿì‡7ÿ…‡8ÿì‡9ÿÇ:ÿׇ<ÿš‡=;‡Wÿå‡YÿÕ‡Zÿå‡\ÿÛ‡‰ÿ쇔ÿ쇕ÿ쇖ÿ쇗ÿ쇘ÿ쇚ÿ쇛ÿ쇜ÿì‡ÿ쇞ÿ쇟ÿš‡¿ÿÛ‡ÁÿÛ‡Èÿì‡Îÿì‡Þÿì‡àÿì‡âÿì‡äÿì‡ö^‡ÿì‡ÿì‡ÿׇ$ÿ…‡&ÿ…‡,ÿì‡0ÿì‡2ÿì‡4ÿì‡6ÿׇ7ÿå‡8ÿš‡9ÿÛ‡:ÿš‡;;‡=;‡?;‡fÿì‡mÿì‡qÿ…‡€ÿÛ‡ŠÿÕ‡‘ÿÕ‡”ÿÕ‡£^‡¸ÿ쇻ÿ쇼ÿ…‡ÜÿÕ‡ÝÿÛ‡úÿׇûÿå‡üÿׇýÿå‡þÿׇÿÿå‡ÿš‡ÿÛ‡ÿf‡ÿ®‡ ÿf‡ ÿ®‡ ÿš‰)‰ )‰ )‰&ÿ׉*ÿ׉2ÿ׉4ÿ׉@)‰`)‰‰ÿ׉”ÿ׉•ÿ׉–ÿ׉—ÿ׉˜ÿ׉šÿ׉Èÿ׉Îÿ׉Þÿ׉àÿ׉âÿ׉äÿ׉ÿ׉ÿ׉fÿ׉mÿ׉¸ÿ׉»ÿ׉)‰ )Š)Š )Šÿ׊&ÿìŠ2ÿìŠ4ÿ슄ÿ슉ÿ슊ÿìŠÿ슔ÿ슕ÿ슖ÿ슗ÿ슘ÿ슚ÿìŠÈÿìŠÎÿìŠö=ŠÿìŠÿìŠfÿìŠmÿ슣=Џÿ슻ÿìŠ)Š )‹)‹ )‹ÿ׋&ÿì‹2ÿì‹4ÿ싉ÿì‹‹ÿì‹”ÿì‹•ÿì‹–ÿì‹—ÿ싘ÿ싚ÿì‹Èÿì‹Îÿì‹ö=‹ÿì‹ÿì‹fÿì‹mÿì‹£=‹¸ÿì‹»ÿì‹)‹ )Œ)Œ )Œÿ׌&ÿìŒ2ÿìŒ4ÿ쌄ÿ쌉ÿ쌊ÿìŒÿ쌔ÿ쌕ÿ쌖ÿ쌗ÿ쌘ÿ쌚ÿìŒÈÿìŒÎÿìŒö=ŒÿìŒÿìŒfÿìŒmÿ쌣=Œ¸ÿ쌻ÿìŒ)Œ )) )ÿ×&ÿì2ÿì4ÿì„ÿì‰ÿìŠÿìÿì”ÿì•ÿì–ÿì—ÿì˜ÿìšÿìÈÿìÎÿìö=ÿìÿìfÿìmÿì£=¸ÿì»ÿì) )Ž)Ž )Ž&ÿìŽ*ÿìŽ2ÿìŽ4ÿ쎉ÿ쎔ÿ쎕ÿ쎖ÿ쎗ÿ쎘ÿ쎚ÿìŽÈÿìŽÎÿìŽÞÿìŽàÿìŽâÿìŽäÿìŽÿìŽÿìŽÿìŽfÿìŽmÿ쎸ÿ쎻ÿìŽ)Ž )) )&ÿì*ÿì2ÿì4ÿì‰ÿì”ÿì•ÿì–ÿì—ÿì˜ÿìšÿìÈÿìÎÿìÞÿìàÿìâÿìäÿìÿìÿìÿìfÿìmÿì¸ÿì»ÿì) )) )&ÿì*ÿì2ÿì4ÿì‰ÿì”ÿì•ÿì–ÿì—ÿì˜ÿìšÿìÈÿìÎÿìÞÿìàÿìâÿìäÿìÿìÿìÿìfÿìmÿì¸ÿì»ÿì) )‘)‘ )‘&ÿì‘*ÿì‘2ÿì‘4ÿ쑉ÿì‘”ÿì‘•ÿì‘–ÿì‘—ÿ쑘ÿ쑚ÿì‘Èÿì‘Îÿì‘Þÿì‘àÿì‘âÿì‘äÿì‘ÿì‘ÿì‘ÿì‘fÿì‘mÿ쑸ÿì‘»ÿì‘)‘ )’$ÿì’‚ÿì’ƒÿì’„ÿì’…ÿì’†ÿì’‡ÿì’Âÿì’Äÿì’Æÿì’Cÿì’_ÿì’iÿì’ªÿì’(ÿì” ÿ×”ÿÔÿÔ$ÿì”,ÿì”-ÿö”6ÿì”7ÿÔ9ÿ×”:ÿì”;ÿ×”<ÿ×”=ÿì”@ÿ×”`ÿ×”‚ÿ씃ÿ씄ÿì”…ÿ씆ÿ씇ÿ씈ÿ×”Žÿì”ÿì”ÿ씑ÿ씟ÿ×”Âÿì”Äÿì”Æÿì”ìÿì”ðÿì”òÿì”öÿö”ÿì” ÿì”"ÿì”$ÿÔ&ÿÔ6ÿì”8ÿ×”:ÿ×”;ÿì”=ÿì”?ÿì”Cÿì”_ÿì”iÿì”qÿÔ ÿ씣ÿö”ªÿ씼ÿÔúÿì”üÿì”þÿì”ÿ×”(ÿì• ÿוÿÕÿÕ$ÿì•,ÿì•-ÿö•6ÿì•7ÿÕ9ÿו:ÿì•;ÿו<ÿו=ÿì•@ÿו`ÿו‚ÿ앃ÿì•„ÿì•…ÿ앆ÿ앇ÿ안ÿוŽÿì•ÿì•ÿì•‘ÿ앟ÿוÂÿì•Äÿì•Æÿì•ìÿì•ðÿì•òÿì•öÿö•ÿì• ÿì•"ÿì•$ÿÕ&ÿÕ6ÿì•8ÿו:ÿו;ÿì•=ÿì•?ÿì•Cÿì•_ÿì•iÿì•qÿÕ ÿì•£ÿö•ªÿ야ÿÕúÿì•üÿì•þÿì•ÿו(ÿì– ÿ×–ÿÖÿÖ$ÿì–,ÿì–-ÿö–6ÿì–7ÿÖ9ÿ×–:ÿì–;ÿ×–<ÿ×–=ÿì–@ÿ×–`ÿ×–‚ÿì–ƒÿì–„ÿì–…ÿì–†ÿì–‡ÿì–ˆÿ×–Žÿì–ÿì–ÿì–‘ÿì–Ÿÿ×–Âÿì–Äÿì–Æÿì–ìÿì–ðÿì–òÿì–öÿö–ÿì– ÿì–"ÿì–$ÿÖ&ÿÖ6ÿì–8ÿ×–:ÿ×–;ÿì–=ÿì–?ÿì–Cÿì–_ÿì–iÿì–qÿÖ ÿì–£ÿö–ªÿì–¼ÿÖúÿì–üÿì–þÿì–ÿ×–(ÿì— ÿ×—ÿ×ÿ×$ÿì—,ÿì—-ÿö—6ÿì—7ÿ×9ÿ×—:ÿì—;ÿ×—<ÿ×—=ÿì—@ÿ×—`ÿ×—‚ÿì—ƒÿì—„ÿì—…ÿì—†ÿì—‡ÿì—ˆÿ×—Žÿì—ÿì—ÿì—‘ÿì—Ÿÿ×—Âÿì—Äÿì—Æÿì—ìÿì—ðÿì—òÿì—öÿö—ÿì— ÿì—"ÿì—$ÿ×&ÿ×6ÿì—8ÿ×—:ÿ×—;ÿì—=ÿì—?ÿì—Cÿì—_ÿì—iÿì—qÿ× ÿì—£ÿö—ªÿì—¼ÿ×úÿì—üÿì—þÿì—ÿ×—(ÿì˜ ÿטÿØÿØ$ÿì˜,ÿì˜-ÿö˜6ÿì˜7ÿØ9ÿט:ÿì˜;ÿט<ÿט=ÿì˜@ÿט`ÿט‚ÿ옃ÿ옄ÿ옅ÿ옆ÿ옇ÿ예ÿטŽÿì˜ÿì˜ÿ옑ÿ옟ÿטÂÿì˜Äÿì˜Æÿì˜ìÿì˜ðÿì˜òÿì˜öÿö˜ÿì˜ ÿì˜"ÿì˜$ÿØ&ÿØ6ÿì˜8ÿט:ÿט;ÿì˜=ÿì˜?ÿì˜Cÿì˜_ÿì˜iÿì˜qÿØ ÿ옣ÿö˜ªÿ옼ÿØúÿì˜üÿì˜þÿì˜ÿט(ÿìšÿÚÿÚ$ÿìš,ÿìš7ÿÚ9ÿך:ÿìš;ÿך<ÿך=ÿìš‚ÿ욃ÿìš„ÿìš…ÿ욆ÿ욇ÿ욈ÿךŽÿìšÿìšÿìš‘ÿ욟ÿךÂÿìšÄÿìšÆÿìšìÿìšðÿìšòÿìš$ÿÚ&ÿÚ6ÿìš8ÿך:ÿך;ÿìš=ÿìš?ÿìšCÿìš_ÿìšiÿìšqÿÚªÿìš¼ÿÚúÿìšüÿìšþÿìšÿך(ÿì›ÿ×›ÿ×›$ÿì›0ÿì›=ÿì›Dÿ웂ÿ웃ÿ웄ÿì›…ÿ웆ÿ웇ÿ웈ÿ×›¢ÿ웣ÿ웤ÿ웥ÿ웦ÿì›§ÿì›Âÿì›Ãÿì›Äÿì›Åÿì›Æÿì›Çÿì›;ÿì›=ÿì›?ÿì›Cÿì›Dÿì›_ÿì›iÿ웪ÿì›Êÿì›(ÿìœÿלÿל$ÿìœ0ÿìœ=ÿìœDÿ윂ÿ윃ÿ위ÿ윅ÿ윆ÿ윇ÿ윈ÿל¢ÿ윣ÿ윤ÿ윥ÿ윦ÿ윧ÿìœÂÿìœÃÿìœÄÿìœÅÿìœÆÿìœÇÿìœ;ÿìœ=ÿìœ?ÿìœCÿìœDÿìœ_ÿìœiÿ윪ÿìœÊÿìœ(ÿìÿ×ÿ×$ÿì0ÿì=ÿìDÿì‚ÿìƒÿì„ÿì…ÿì†ÿì‡ÿìˆÿ×¢ÿì£ÿì¤ÿì¥ÿì¦ÿì§ÿìÂÿìÃÿìÄÿìÅÿìÆÿìÇÿì;ÿì=ÿì?ÿìCÿìDÿì_ÿìiÿìªÿìÊÿì(ÿìžÿמÿמ$ÿìž0ÿìž=ÿìžDÿìž‚ÿ잃ÿìž„ÿìž…ÿ잆ÿ잇ÿ있ÿמ¢ÿ잣ÿ잤ÿ장ÿ잦ÿìž§ÿìžÂÿìžÃÿìžÄÿìžÅÿìžÆÿìžÇÿìž;ÿìž=ÿìž?ÿìžCÿìžDÿìž_ÿìžiÿ잪ÿìžÊÿìž(ÿìŸRŸ ÿß RŸ =Ÿ )ŸÿšŸÿšŸÿšŸ")Ÿ$ÿšŸ&ÿן*ÿן-ÿ¾Ÿ0ÿß2ÿן4ÿן6ÿìŸ7'Ÿ9)Ÿ:Ÿ@=ŸDÿšŸFÿšŸGÿšŸHÿšŸIÿåŸJÿšŸPÿßQÿßRÿšŸSÿßTÿšŸUÿßVÿ®ŸXÿßYÿןZÿìŸ[ÿן\ÿìŸ]ÿß`=Ÿ‚ÿšŸƒÿšŸ„ÿšŸ…ÿšŸ†ÿšŸ‡ÿšŸˆÿqŸ‰ÿן”ÿן•ÿן–ÿן—ÿן˜ÿןšÿן¢ÿšŸ£ÿšŸ¤ÿšŸ¥ÿšŸ¦ÿšŸ§ÿšŸ¨ÿšŸ©ÿšŸªÿšŸ«ÿšŸ¬ÿšŸ­ÿšŸ³ÿß´ÿšŸµÿšŸ¶ÿšŸ·ÿšŸ¸ÿšŸºÿšŸ»ÿß¼ÿß½ÿß¾ÿß¿ÿìŸÁÿìŸÂÿšŸÃÿšŸÄÿšŸÅÿšŸÆÿšŸÇÿšŸÈÿןÉÿšŸËÿšŸÍÿšŸÎÿןÏÿšŸÕÿšŸ×ÿšŸÙÿšŸÛÿšŸÝÿšŸÞÿןàÿןâÿןäÿןöÿ¾Ÿÿßÿß ÿßÿןÿšŸÿšŸÿןÿšŸÿןÿšŸÿìŸÿ®Ÿÿ®Ÿ ÿìŸ!ÿ®Ÿ"ÿìŸ#ÿ®Ÿ$'Ÿ&'Ÿ6Ÿ7ÿìŸ9ÿìŸ@ÿßCÿšŸDÿšŸJÿ®Ÿ_ÿšŸfÿןiÿšŸmÿןq'ŸyÿšŸ{ÿß~ÿšŸ€ÿ쟂ÿšŸ„ÿߊÿןŒÿšŸŽÿšŸÿšŸ‘ÿן“ÿšŸ”ÿן–ÿšŸ™ÿšŸ›ÿšŸ ÿ쟣ÿ¾ŸªÿšŸ¸ÿן»ÿן¼'ŸÊÿšŸÏÿšŸØÿšŸÛÿšŸÜÿןÝÿìŸÞÿšŸêÿšŸíÿšŸîÿ®ŸúŸûÿìŸüŸýÿìŸþŸÿÿìŸÿìŸRŸ RŸ(ÿš¢ ÿ×£ ÿפ ÿ×¥ ÿצ ÿ×§ ÿר[ÿר]ÿì¨@ÿì©=© =©=© =ªÿ˜ª ÿ׫ÿ˜« ÿ׬ÿ˜¬ ÿ×­ÿ˜­ ÿ׳ÿ˜³ ÿ׳ ÿ×´ÿo´ ÿo´IÿÛ´[ÿ×´]ÿì´@ÿìµÿoµ ÿoµIÿÛµ[ÿ×µ]ÿìµ@ÿì¶ÿo¶ ÿo¶IÿÛ¶[ÿ×¶]ÿì¶@ÿì·ÿo· ÿo·IÿÛ·[ÿ×·]ÿì·@ÿì¸ÿo¸ ÿo¸IÿÛ¸[ÿ׸]ÿì¸@ÿìº[ÿ׺]ÿìº@ÿì»ÿ¾» ÿ¾¼ÿ¾¼ ÿ¾½ÿ¾½ ÿ¾¾ÿ¾¾ ÿ¾¿=¿ =¿ÿ¾¿ÿ¾¿"ÿ´¿Fÿö¿Gÿö¿Hÿö¿I¿Jÿö¿Rÿö¿Tÿö¿W¿¨ÿö¿©ÿö¿ªÿö¿«ÿö¿¬ÿö¿­ÿö¿´ÿö¿µÿö¿¶ÿö¿·ÿö¿¸ÿö¿ºÿö¿Éÿö¿Ëÿö¿Íÿö¿Ïÿö¿Õÿö¿×ÿö¿Ùÿö¿Ûÿö¿Ýÿö¿ÿö¿ÿö¿ÿö¿ÿö¿yÿö¿~ÿö¿‚ÿö¿Œÿö¿Žÿö¿ÿö¿“ÿö¿–ÿö¿™ÿö¿›ÿö¿Ïÿö¿Øÿö¿Ûÿö¿Þÿö¿êÿö¿íÿö¿=¿ÿ¿ =¿ ÿ¿ÿ¿ Á=Á =Áÿ¾Áÿ¾ÁIÁ=Á =Âÿ®Â ÿ®Â&ÿìÂ*ÿìÂ2ÿìÂ4ÿìÂ7ÿ…Â8ÿìÂ9ÿÃÂ:ÿ×Â<ÿšÂ‰ÿì”ÿì•ÿì–ÿì—ÿì˜ÿìšÿì›ÿìœÿìÂÿìžÿìŸÿšÂÈÿìÂÎÿìÂÞÿìÂàÿìÂâÿìÂäÿìÂÿìÂÿìÂÿ×Â$ÿ…Â&ÿ…Â,ÿìÂ0ÿìÂ2ÿìÂ4ÿìÂ6ÿ×Â8ÿšÂ:ÿšÂfÿìÂmÿìÂqÿ…¸ÿì»ÿì¼ÿ…Âúÿ×Âüÿ×Âþÿ×ÂÿšÂÿ®Â ÿ®Ã ÿ×Äÿ®Ä ÿ®Ä&ÿìÄ*ÿìÄ2ÿìÄ4ÿìÄ7ÿ…Ä8ÿìÄ9ÿÃÄ:ÿ×Ä<ÿšÄ‰ÿìÄ”ÿìÄ•ÿìÄ–ÿìÄ—ÿìĘÿìÄšÿìÄ›ÿìÄœÿìÄÿìÄžÿìÄŸÿšÄÈÿìÄÎÿìÄÞÿìÄàÿìÄâÿìÄäÿìÄÿìÄÿìÄÿ×Ä$ÿ…Ä&ÿ…Ä,ÿìÄ0ÿìÄ2ÿìÄ4ÿìÄ6ÿ×Ä8ÿšÄ:ÿšÄfÿìÄmÿìÄqÿ…ĸÿìÄ»ÿìļÿ…Äúÿ×Äüÿ×Äþÿ×ÄÿšÄÿ®Ä ÿ®Å ÿׯÿ®Æ ÿ®Æ&ÿìÆ*ÿìÆ-áÆ2ÿìÆ4ÿìÆ7ÿ…Æ8ÿìÆ9ÿÃÆ:ÿׯ<ÿšÆ‰ÿìÆ”ÿìÆ•ÿìÆ–ÿìÆ—ÿìÆ˜ÿìÆšÿìÆ›ÿìÆœÿìÆÿìÆžÿìÆŸÿšÆÈÿìÆÎÿìÆÞÿìÆàÿìÆâÿìÆäÿìÆÿìÆÿìÆÿׯ$ÿ…Æ&ÿ…Æ,ÿìÆ0ÿìÆ2ÿìÆ4ÿìÆ6ÿׯ8ÿšÆ:ÿšÆfÿìÆmÿìÆqÿ…ƸÿìÆ»ÿìÆ¼ÿ…ÆúÿׯüÿׯþÿׯÿšÆÿ®Æ ÿ®Ç ÿ×È)È )È )È&ÿ×È*ÿ×È2ÿ×È4ÿ×È@)È`)ȉÿ×È”ÿ×È•ÿ×È–ÿ×È—ÿ×Șÿ×Èšÿ×ÈÈÿ×ÈÎÿ×ÈÞÿ×Èàÿ×Èâÿ×Èäÿ×Èÿ×Èÿ×Èfÿ×Èmÿ×ȸÿ×È»ÿ×È)È )É=É =É=É =Ë=Ë =Ë=Ë =Í=Í =Í=Í =Î)Î )Î )Î&ÿ×Î*ÿ×Î2ÿ×Î4ÿ×Î@)Î`)Ήÿ×Δÿ×Εÿ×Ζÿ×Ηÿ×Θÿ×Κÿ×ÎÈÿ×ÎÎÿ×ÎÞÿ×Îàÿ×Îâÿ×Îäÿ×Îÿ×Îÿ×Îfÿ×Îmÿ×θÿ×λÿ×Î)Î )Ï=Ï =Ï=Ï =ÑfÑ fÑ Ñ"¤Ñ@¤ÑERÑKRÑL=ÑM=ÑNRÑORÑ`¸Ñ®öѰÍѱÍÑçRÑé¤Ñë ÑíÍÑïöÑñ)Ñõ=Ñ÷áÑùRÑüRÑþRÑRÑRÑRÑÑ Õ ÿ×× ÿ×Ù ÿ×Ú-fÛ ÿ×Ý ÿ×ì)ì )ì&ÿìì*ÿìì2ÿìì4ÿìì‰ÿìì”ÿìì•ÿìì–ÿìì—ÿìì˜ÿììšÿììÈÿììÎÿììÞÿììàÿììâÿììäÿììÿììÿììÿììfÿììmÿìì¸ÿìì»ÿìì)ì )ð)ð )ð&ÿìð*ÿìð-Rð2ÿìð4ÿìð‰ÿìð”ÿìð•ÿìð–ÿìð—ÿìð˜ÿìðšÿìðÈÿìðÎÿìðÞÿìðàÿìðâÿìðäÿìðÿìðÿìðÿìðfÿìðmÿìð¸ÿìð»ÿìð)ð )ò)ò )ò&ÿìò*ÿìò2ÿìò4ÿìò‰ÿìò”ÿìò•ÿìò–ÿìò—ÿìò˜ÿìòšÿìòÈÿìòÎÿìòÞÿìòàÿìòâÿìòäÿìòÿìòÿìòÿìòfÿìòmÿìò¸ÿìò»ÿìò)ò )ø)ø )ø&ÿ×ø*ÿ×ø2ÿ×ø4ÿ×ø‰ÿ×ø”ÿ×ø•ÿ×ø–ÿ×ø—ÿ×ø˜ÿ×øšÿ×øÈÿ×øÎÿ×øÞÿ×øàÿ×øâÿ×øäÿ×øÿ×øÿ×øÿ×øfÿ×ømÿ×ø¸ÿ×ø»ÿ×ø)ø )ú)ú )ú)ú )ûÿšû ÿšû&ÿìû*ÿìû2ÿìû4ÿìû7ÿ…û8ÿìû9ÿ®û:ÿÃû<ÿšû‰ÿìû”ÿìû•ÿìû–ÿìû—ÿìû˜ÿìûšÿìû›ÿìûœÿìûÿìûžÿìûŸÿšûÈÿìûÎÿìûÞÿìûàÿìûâÿìûäÿìûÿìûÿìûÿìû$ÿ…û&ÿ…û,ÿìû0ÿìû2ÿìû4ÿìû6ÿÃû8ÿšû:ÿšûfÿìûmÿìûqÿ…û¸ÿìû»ÿìû¼ÿ…ûúÿÃûüÿÃûþÿÃûÿšûÿšû ÿšýÿšý ÿšý&ÿìý*ÿìý2ÿìý4ÿìý7ÿ…ý8ÿìý9ÿ®ý:ÿÃý<ÿšý‰ÿìý”ÿìý•ÿìý–ÿìý—ÿìý˜ÿìýšÿìý›ÿìýœÿìýÿìýžÿìýŸÿšýÈÿìýÎÿìýÞÿìýàÿìýâÿìýäÿìýÿìýÿìýÿìý$ÿ…ý&ÿ…ý,ÿìý0ÿìý2ÿìý4ÿìý6ÿÃý8ÿšý:ÿšýfÿìýmÿìýqÿ…ý¸ÿìý»ÿìý¼ÿ…ýúÿÃýüÿÃýþÿÃýÿšýÿšý ÿšÿÿšÿ ÿšÿ&ÿìÿ*ÿìÿ2ÿìÿ4ÿìÿ7ÿ…ÿ8ÿìÿ9ÿ®ÿ:ÿÃÿ<ÿšÿ‰ÿìÿ”ÿìÿ•ÿìÿ–ÿìÿ—ÿìÿ˜ÿìÿšÿìÿ›ÿìÿœÿìÿÿìÿžÿìÿŸÿšÿÈÿìÿÎÿìÿÞÿìÿàÿìÿâÿìÿäÿìÿÿìÿÿìÿÿìÿ$ÿ…ÿ&ÿ…ÿ,ÿìÿ0ÿìÿ2ÿìÿ4ÿìÿ6ÿÃÿ8ÿšÿ:ÿšÿfÿìÿmÿìÿqÿ…ÿ¸ÿìÿ»ÿìÿ¼ÿ…ÿúÿÃÿüÿÃÿþÿÃÿÿšÿÿšÿ ÿšf f "¤@¤ERKRL=M=NROR`¸®ö°Í±ÍçRé¤ë íÍïöñ)õ=÷áùRüRþRRRR ÿš ÿš&ÿì*ÿì2ÿì4ÿì7ÿ…8ÿì9ÿ®:ÿÃ<ÿš‰ÿì”ÿì•ÿì–ÿì—ÿì˜ÿìšÿì›ÿìœÿìÿìžÿìŸÿšÈÿìÎÿìÞÿìàÿìâÿìäÿìÿìÿìÿì$ÿ…&ÿ…,ÿì0ÿì2ÿì4ÿì6ÿÃ8ÿš:ÿšfÿìmÿìqÿ…¸ÿì»ÿì¼ÿ…úÿÃüÿÃþÿÃÿšÿš ÿšÿš ÿš&ÿì*ÿì2ÿì4ÿì7ÿ…8ÿì9ÿ®:ÿÃ<ÿš‰ÿì”ÿì•ÿì–ÿì—ÿì˜ÿìšÿì›ÿìœÿìÿìžÿìŸÿšÈÿìÎÿìÞÿìàÿìâÿìäÿìÿìÿìÿì$ÿ…&ÿ…,ÿì0ÿì2ÿì4ÿì6ÿÃ8ÿš:ÿšfÿìmÿìqÿ…¸ÿì»ÿì¼ÿ…úÿÃüÿÃþÿÃÿšÿš ÿš ÿ× ÿ× ÿ×ÿÃÿÃ$ÿì,ÿì7ÿÃ9ÿ×:ÿì;ÿ×<ÿ×=ÿì‚ÿìƒÿì„ÿì…ÿì†ÿì‡ÿìˆÿ׎ÿìÿìÿì‘ÿìŸÿ×ÂÿìÄÿìÆÿììÿìðÿìòÿì$ÿÃ&ÿÃ6ÿì8ÿ×:ÿ×;ÿì=ÿì?ÿìCÿì_ÿìiÿìqÿêÿì¼ÿÃúÿìüÿìþÿìÿ×(ÿì[ÿ×]ÿì@ÿì[ÿ×]ÿì@ÿìÿÃÿÃ$ÿì,ÿì7ÿÃ9ÿ×:ÿì;ÿ×<ÿ×=ÿì‚ÿìƒÿì„ÿì…ÿì†ÿì‡ÿìˆÿ׎ÿìÿìÿì‘ÿìŸÿ×ÂÿìÄÿìÆÿììÿìðÿìòÿì$ÿÃ&ÿÃ6ÿì8ÿ×:ÿ×;ÿì=ÿì?ÿìCÿì_ÿìiÿìqÿêÿì¼ÿÃúÿìüÿìþÿìÿ×(ÿì[ÿ×]ÿì@ÿì[ÿ×]ÿì@ÿì= == == == =!=! =!=! =")" )"0"6ÿì"7ÿ×"9ÿì":ÿì";ÿ×"<ÿ×"Yÿì"\ÿì"Ÿÿ×"¿ÿì"Áÿì"ÿì" ÿì""ÿì"#ÿì"$ÿ×"&ÿ×"6ÿì"8ÿ×"9ÿì":ÿ×"qÿ×"€ÿì"Šÿì"‘ÿì"”ÿì" ÿì"¼ÿ×"Üÿì"Ýÿì"úÿì"üÿì"þÿì"ÿ×"ÿì")" )#=# =#=# =$R$ R$ÿš$ÿš$")$$ÿ…$&ÿÃ$*ÿÃ$2ÿÃ$4ÿÃ$6ÿì$7$Dÿ…$Fÿ…$Gÿ…$Hÿ…$Jÿš$Pÿ®$Qÿ®$Rÿ…$Sÿ®$Tÿ…$Uÿ®$Vÿ…$Xÿ®$YÿÃ$ZÿÃ$[ÿÃ$\ÿÃ$]ÿÃ$‚ÿ…$ƒÿ…$„ÿ…$…ÿ…$†ÿ…$‡ÿ…$ˆÿq$‰ÿÃ$”ÿÃ$•ÿÃ$–ÿÃ$—ÿÃ$˜ÿÃ$šÿÃ$¢ÿ…$£ÿ…$¤ÿ…$¥ÿ…$¦ÿ…$§ÿ…$¨ÿ…$©ÿ…$ªÿ…$«ÿ…$¬ÿ…$­ÿ…$³ÿ®$´ÿ…$µÿ…$¶ÿ…$·ÿ…$¸ÿ…$ºÿ…$»ÿ®$¼ÿ®$½ÿ®$¾ÿ®$¿ÿÃ$ÁÿÃ$Âÿ…$Ãÿ…$Äÿ…$Åÿ…$Æÿ…$Çÿ…$ÈÿÃ$Éÿ…$Ëÿ…$Íÿ…$ÎÿÃ$Ïÿ…$Õÿ…$×ÿ…$Ùÿ…$Ûÿ…$Ýÿ…$ÞÿÃ$àÿÃ$âÿÃ$äÿÃ$ÿ®$ÿ®$ ÿ®$ÿÃ$ÿ…$ÿ…$ÿÃ$ÿ…$ÿÃ$ÿ…$ÿì$ÿ…$ÿ…$ ÿì$!ÿ…$"ÿì$#ÿ…$$$&$7ÿÃ$9ÿÃ$@ÿÃ$Cÿ…$Dÿ…$Jÿ…$_ÿ…$fÿÃ$iÿ…$mÿÃ$q$yÿ…${ÿ®$~ÿ…$€ÿÃ$‚ÿ…$„ÿ®$ŠÿÃ$Œÿ…$Žÿ…$ÿ…$‘ÿÃ$“ÿ…$”ÿÃ$–ÿ…$™ÿ…$›ÿ…$ ÿì$ªÿ…$¸ÿÃ$»ÿÃ$¼$Êÿ…$Ïÿ…$Øÿ…$Ûÿ…$ÜÿÃ$ÝÿÃ$Þÿ…$êÿ…$íÿ…$îÿ…$ûÿÃ$ýÿÃ$ÿÿÃ$ÿÃ$R$ R$(ÿ…&R& R&ÿš&ÿš&")&$ÿ…&&ÿÃ&*ÿÃ&2ÿÃ&4ÿÃ&6ÿì&7&Dÿ…&Fÿ…&Gÿ…&Hÿ…&Jÿš&Pÿ®&Qÿ®&Rÿ…&Sÿ®&Tÿ…&Uÿ®&Vÿ…&Xÿ®&YÿÃ&ZÿÃ&[ÿÃ&\ÿÃ&]ÿÃ&‚ÿ…&ƒÿ…&„ÿ…&…ÿ…&†ÿ…&‡ÿ…&ˆÿq&‰ÿÃ&”ÿÃ&•ÿÃ&–ÿÃ&—ÿÃ&˜ÿÃ&šÿÃ&¢ÿ…&£ÿ…&¤ÿ…&¥ÿ…&¦ÿ…&§ÿ…&¨ÿ…&©ÿ…&ªÿ…&«ÿ…&¬ÿ…&­ÿ…&³ÿ®&´ÿ…&µÿ…&¶ÿ…&·ÿ…&¸ÿ…&ºÿ…&»ÿ®&¼ÿ®&½ÿ®&¾ÿ®&¿ÿÃ&ÁÿÃ&Âÿ…&Ãÿ…&Äÿ…&Åÿ…&Æÿ…&Çÿ…&ÈÿÃ&Éÿ…&Ëÿ…&Íÿ…&ÎÿÃ&Ïÿ…&Õÿ…&×ÿ…&Ùÿ…&Ûÿ…&Ýÿ…&ÞÿÃ&àÿÃ&âÿÃ&äÿÃ&ÿ®&ÿ®& ÿ®&ÿÃ&ÿ…&ÿ…&ÿÃ&ÿ…&ÿÃ&ÿ…&ÿì&ÿ…&ÿ…& ÿì&!ÿ…&"ÿì&#ÿ…&$&&&7ÿÃ&9ÿÃ&@ÿÃ&Cÿ…&Dÿ…&Jÿ…&_ÿ…&fÿÃ&iÿ…&mÿÃ&q&yÿ…&{ÿ®&~ÿ…&€ÿÃ&‚ÿ…&„ÿ®&ŠÿÃ&Œÿ…&Žÿ…&ÿ…&‘ÿÃ&“ÿ…&”ÿÃ&–ÿ…&™ÿ…&›ÿ…& ÿì&ªÿ…&¸ÿÃ&»ÿÃ&¼&Êÿ…&Ïÿ…&Øÿ…&Ûÿ…&ÜÿÃ&ÝÿÃ&Þÿ…&êÿ…&íÿ…&îÿ…&ûÿÃ&ýÿÃ&ÿÿÃ&ÿÃ&R& R&(ÿ…'f' f' '"¤'@¤'ER'KR'L='M='NR'OR'`¸'®ö'°Í'±Í'çR'é¤'ë 'íÍ'ïö'ñ)'õ='÷á'ùR'üR'þR'R'R'R'' ,ÿ×,ÿ×,$ÿì,‚ÿì,ƒÿì,„ÿì,…ÿì,†ÿì,‡ÿì,ˆÿ×,Âÿì,Äÿì,Æÿì,Cÿì,_ÿì,iÿì,ªÿì,(ÿì0ÿ×0ÿ×0$ÿì0‚ÿì0ƒÿì0„ÿì0…ÿì0†ÿì0‡ÿì0ˆÿ×0Âÿì0Äÿì0Æÿì0Cÿì0_ÿì0iÿì0ªÿì0(ÿì2ÿ×2ÿ×2$ÿì2‚ÿì2ƒÿì2„ÿì2…ÿì2†ÿì2‡ÿì2ˆÿ×2Âÿì2Äÿì2Æÿì2Cÿì2_ÿì2iÿì2ªÿì2(ÿì4ÿ×4ÿ×4$ÿì4‚ÿì4ƒÿì4„ÿì4…ÿì4†ÿì4‡ÿì4ˆÿ×4Âÿì4Äÿì4Æÿì4Cÿì4_ÿì4iÿì4ªÿì4(ÿì6f6 f6ÿ®6ÿ®6$ÿ×6&ÿì6*ÿì62ÿì64ÿì6Dÿ×6Fÿ×6Gÿ×6Hÿ×6Jÿì6Pÿì6Qÿì6Rÿ×6Sÿì6Tÿ×6Uÿì6Vÿ×6Xÿì6]ÿì6‚ÿ×6ƒÿ×6„ÿ×6…ÿ×6†ÿ×6‡ÿ×6ˆÿ®6‰ÿì6”ÿì6•ÿì6–ÿì6—ÿì6˜ÿì6šÿì6¢ÿ×6£ÿ×6¤ÿ×6¥ÿ×6¦ÿ×6§ÿ×6¨ÿ×6©ÿ×6ªÿ×6«ÿ×6¬ÿ×6­ÿ×6³ÿì6´ÿ×6µÿ×6¶ÿ×6·ÿ×6¸ÿ×6ºÿ×6»ÿì6¼ÿì6½ÿì6¾ÿì6Âÿ×6Ãÿ×6Äÿ×6Åÿ×6Æÿ×6Çÿ×6Èÿì6Éÿ×6Ëÿ×6Íÿ×6Îÿì6Ïÿ×6Õÿ×6×ÿ×6Ùÿ×6Ûÿ×6Ýÿ×6Þÿì6àÿì6âÿì6äÿì6ÿì6ÿì6 ÿì6ÿì6ÿ×6ÿ×6ÿì6ÿ×6ÿì6ÿ×6ÿ×6ÿ×6!ÿ×6#ÿ×6@ÿì6Cÿ×6Dÿ×6Jÿ×6_ÿ×6fÿì6iÿ×6mÿì6yÿ×6{ÿì6~ÿ×6‚ÿ×6„ÿì6Œÿ×6Žÿ×6ÿ×6“ÿ×6–ÿ×6™ÿ×6›ÿ×6ªÿ×6¸ÿì6»ÿì6Êÿ×6Ïÿ×6Øÿ×6Ûÿ×6Þÿ×6êÿ×6íÿ×6îÿ×6f6 f6(ÿ×7R7 R7I7R7 R8R8 R8ÿš8ÿš8")8$ÿš8&ÿ×8*ÿ×82ÿ×84ÿ×86ÿì8Dÿš8Fÿš8Gÿš8Hÿš8Jÿš8PÿÃ8QÿÃ8Rÿš8SÿÃ8Tÿš8UÿÃ8Vÿ®8XÿÃ8[ÿ×8\ÿì8]ÿÃ8‚ÿš8ƒÿš8„ÿš8…ÿš8†ÿš8‡ÿš8ˆÿq8‰ÿ×8”ÿ×8•ÿ×8–ÿ×8—ÿ×8˜ÿ×8šÿ×8¢ÿš8£ÿš8¤ÿš8¥ÿš8¦ÿš8§ÿš8¨ÿš8©ÿš8ªÿš8«ÿš8¬ÿš8­ÿš8³ÿÃ8´ÿš8µÿš8¶ÿš8·ÿš8¸ÿš8ºÿš8»ÿÃ8¼ÿÃ8½ÿÃ8¾ÿÃ8¿ÿì8Áÿì8Âÿš8Ãÿš8Äÿš8Åÿš8Æÿš8Çÿš8Èÿ×8Éÿš8Ëÿš8Íÿš8Îÿ×8Ïÿš8Õÿš8×ÿš8Ùÿš8Ûÿš8Ýÿš8Þÿ×8àÿ×8âÿ×8äÿ×8ÿÃ8ÿÃ8 ÿÃ8ÿ×8ÿš8ÿš8ÿ×8ÿš8ÿ×8ÿš8ÿì8ÿ®8ÿ®8 ÿì8!ÿ®8"ÿì8#ÿ®89ÿì8@ÿÃ8Cÿš8Dÿš8Jÿ®8_ÿš8fÿ×8iÿš8mÿ×8yÿš8{ÿÃ8~ÿš8€ÿì8‚ÿš8„ÿÃ8Šÿì8Œÿš8Žÿš8ÿš8“ÿš8–ÿš8™ÿš8›ÿš8 ÿì8ªÿš8¸ÿ×8»ÿ×8Êÿš8Ïÿš8Øÿš8Ûÿš8Ýÿì8Þÿš8êÿš8íÿš8îÿ®8ÿì8R8 R8(ÿš9=9 =9I9=9 =:R: ÿÃ: R: =: ):ÿš:ÿ\:ÿš:"):$ÿš:&ÿ×:*ÿ×:-ÿ¾:0ÿì:2ÿ×:4ÿ×:6ÿì:7':@=:Dÿš:Fÿš:Gÿš:Hÿš:Iÿå:Jÿš:PÿÃ:QÿÃ:Rÿš:SÿÃ:Tÿš:UÿÃ:Vÿ®:XÿÃ:[ÿ×:\ÿì:]ÿÃ:`=:‚ÿš:ƒÿš:„ÿš:…ÿš:†ÿš:‡ÿš:ˆÿq:‰ÿ×:”ÿ×:•ÿ×:–ÿ×:—ÿ×:˜ÿ×:šÿ×:¢ÿš:£ÿš:¤ÿš:¥ÿš:¦ÿš:§ÿš:¨ÿš:©ÿš:ªÿš:«ÿš:¬ÿš:­ÿš:³ÿÃ:´ÿš:µÿš:¶ÿš:·ÿš:¸ÿš:ºÿš:»ÿÃ:¼ÿÃ:½ÿÃ:¾ÿÃ:¿ÿì:Áÿì:Âÿš:Ãÿš:Äÿš:Åÿš:Æÿš:Çÿš:Èÿ×:Éÿš:Ëÿš:Íÿš:Îÿ×:Ïÿš:Õÿš:×ÿš:Ùÿš:Ûÿš:Ýÿš:Þÿ×:àÿ×:âÿ×:äÿ×:öÿ¾:ÿÃ:ÿÃ: ÿÃ:ÿ×:ÿš:ÿš:ÿ×:ÿš:ÿ×:ÿš:ÿì:ÿ®:ÿ®: ÿì:!ÿ®:"ÿì:#ÿ®:$':&':9ÿì:@ÿÃ:Cÿš:Dÿš:Jÿ®:_ÿš:fÿ×:iÿš:mÿ×:q':yÿš:{ÿÃ:~ÿš:€ÿì:‚ÿš:„ÿÃ:Šÿì:Œÿš:Žÿš:ÿš:“ÿš:–ÿš:™ÿš:›ÿš: ÿì:£ÿ¾:ªÿš:¸ÿ×:»ÿ×:¼':Êÿš:Ïÿš:Øÿš:Ûÿš:Ýÿì:Þÿš:êÿš:íÿš:îÿ®:ÿì:R: R:ÿ×:(ÿš;); );&ÿì;*ÿì;2ÿì;4ÿì;‰ÿì;”ÿì;•ÿì;–ÿì;—ÿì;˜ÿì;šÿì;Èÿì;Îÿì;Þÿì;àÿì;âÿì;äÿì;ÿì;ÿì;ÿ×;fÿì;mÿì;¸ÿì;»ÿì;); )=)= )=&ÿì=*ÿì=2ÿì=4ÿì=‰ÿì=”ÿì=•ÿì=–ÿì=—ÿì=˜ÿì=šÿì=Èÿì=Îÿì=Þÿì=àÿì=âÿì=äÿì=ÿì=ÿì=ÿ×=fÿì=mÿì=¸ÿì=»ÿì=)= )?)? )?ÿÃ?&ÿì?*ÿì?2ÿì?4ÿì?6ÿ×?8ÿì?Fÿì?Gÿì?Hÿì?Rÿì?Tÿì?Yÿ×?Zÿ×?\ÿ×?‰ÿì?”ÿì?•ÿì?–ÿì?—ÿì?˜ÿì?šÿì?›ÿì?œÿì?ÿì?žÿì?¨ÿì?©ÿì?ªÿì?«ÿì?¬ÿì?­ÿì?´ÿì?µÿì?¶ÿì?·ÿì?¸ÿì?ºÿì?¿ÿ×?Áÿ×?Èÿì?Éÿì?Ëÿì?Íÿì?Îÿì?Ïÿì?Õÿì?×ÿì?Ùÿì?Ûÿì?Ýÿì?Þÿì?àÿì?âÿì?äÿì?ÿì?ÿì?ÿì?ÿì?ÿì?ÿ×?ÿì?ÿ×? ÿ×?"ÿ×?,ÿì?0ÿì?2ÿì?4ÿì?7ÿ×?9ÿ×?fÿì?mÿì?yÿì?~ÿì?€ÿ×?‚ÿì?Šÿ×?Œÿì?Žÿì?ÿì?‘ÿ×?“ÿì?”ÿ×?–ÿì?™ÿì?›ÿì? ÿ×?¸ÿì?»ÿì?Ïÿì?Øÿì?Ûÿì?Üÿ×?Ýÿ×?Þÿì?êÿì?íÿì?ûÿ×?ýÿ×?ÿÿ×?ÿ×?)? )@Rÿì@¨ÿì@´ÿì@µÿì@¶ÿì@·ÿì@¸ÿì@ºÿì@ÿì@ÿì@ÿì@ÿì@Œÿì@Žÿì@ÿì@“ÿì@–ÿì@™ÿì@›ÿì@Øÿì@Þÿì@ Cÿ®C ÿ®C&ÿìC*ÿìC2ÿìC4ÿìC7ÿ…C8ÿìC9ÿÃC:ÿ×C<ÿšC‰ÿìC”ÿìC•ÿìC–ÿìC—ÿìC˜ÿìCšÿìC›ÿìCœÿìCÿìCžÿìCŸÿšCÈÿìCÎÿìCÞÿìCàÿìCâÿìCäÿìCÿìCÿìCÿ×C$ÿ…C&ÿ…C,ÿìC0ÿìC2ÿìC4ÿìC6ÿ×C8ÿšC:ÿšCfÿìCmÿìCqÿ…C¸ÿìC»ÿìC¼ÿ…Cúÿ×Cüÿ×Cþÿ×CÿšCÿ®C ÿ®D ÿ×J=J =J=J =Vb)VfÿìVi)VmÿìVqÿ…VrÿšVsÿ×Vuÿ×VxÿšVˆ)V‘ÿÃZfÿìZmÿìZsÿì[_ÿì[dÿì[gÿì[lÿì[pÿì[qÿÃ[rÿ×[tÿ×[wÿì[xÿ×[ˆÿì\ÿÃ\mÿÃ\_ÿš\bÿÃ\fÿ×\iÿÃ\sÿ×\vÿ×\yÿš\zÿš\{ÿÃ\}ÿÃ\~ÿš\ÿ®\‚ÿš\ƒÿ×\„ÿÃ\…ÿ×\†ÿÃ\‡ÿÃ\‰ÿÃ\Œÿš\Žÿš\ÿš\ÿš\’ÿÃ\“ÿ®\”ÿ×\•ÿÃ\–ÿ®\˜ÿ×\™ÿš\šÿÃ\›ÿ®\ÿÃ\ÿÃ]qÿÃ]rÿÃ]xÿÃ^yÿ×^}ÿ×^~ÿ×^€ÿ×^ÿ×^ƒÿì^…ÿ×^†ÿ×^ˆ)^Šÿ×^‹ÿì^Œÿ×^ÿì^ÿì^ÿ×^‘ÿì^’ÿ×^“ÿ×^”ÿì^•ÿ×^–ÿì^˜ÿ×^™ÿ×^šÿ×^›ÿ×_ÿ®_ ÿ®_&ÿì_*ÿì_2ÿì_4ÿì_7ÿ…_8ÿì_9ÿÃ_:ÿ×_<ÿš_‰ÿì_”ÿì_•ÿì_–ÿì_—ÿì_˜ÿì_šÿì_›ÿì_œÿì_ÿì_žÿì_Ÿÿš_Èÿì_Îÿì_Þÿì_àÿì_âÿì_äÿì_ÿì_ÿì_ÿ×_$ÿ…_&ÿ…_,ÿì_0ÿì_2ÿì_4ÿì_6ÿ×_8ÿš_:ÿš_fÿì_mÿì_qÿ…_rÿš_sÿ×_uÿÃ_xÿš_‘ÿÃ_úÿ×_üÿ×_þÿ×_ÿš_ÿ®_ ÿ®`7ÿì`9ÿì`;ÿì`<ÿì`Ÿÿì`$ÿì`&ÿì`8ÿì`:ÿì`gÿì`lÿ×`pÿì`qÿì`rÿì`tÿì`wÿì`xÿì`‘ÿì`”ÿì`ÿìaÿša ÿšaÿšaÿšaÿša&ÿìa*ÿìa2ÿìa4ÿìa7ÿ…a8ÿìa9ÿ®a:ÿÃa<ÿšamÿša}ÿ®a‰ÿìa”ÿìa•ÿìa–ÿìa—ÿìa˜ÿìašÿìa›ÿìaœÿìaÿìažÿìaŸÿšaÈÿìaÎÿìaÞÿìaàÿìaâÿìaäÿìaÿìaÿìaÿìa$ÿ…a&ÿ…a,ÿìa0ÿìa2ÿìa4ÿìa6ÿÃa8ÿša:ÿša_ÿ…abÿšafÿìaiÿšamÿìasÿ®avÿ×ayÿ…azÿ…a{ÿ®a~ÿ…a€ÿÃaÿša‚ÿ…a„ÿÃa†ÿÃa‡ÿÃa‰ÿÃaŠÿÃaŒÿ…aÿÃaŽÿšaÿ…aÿ…a‘ÿÃa’ÿÃa“ÿ…a”ÿÃa•ÿÃa–ÿša—)a˜ÿÃa™ÿ…ašÿÃa›ÿšaúÿÃaüÿÃaþÿÃaÿšaÿšaÿšaÿša ÿšbRb Rbÿšbÿšb")b$ÿÃb&ÿ×b*ÿ×b2ÿ×b4ÿ×bDÿÃbFÿÃbGÿÃbHÿÃbJÿÃbPÿ×bQÿ×bRÿÃbSÿ×bTÿÃbUÿ×bVÿ×bXÿ×b‚ÿÃbƒÿÃb„ÿÃb…ÿÃb†ÿÃb‡ÿÃbˆÿ…b‰ÿ×b”ÿ×b•ÿ×b–ÿ×b—ÿ×b˜ÿ×bšÿ×b¢ÿÃb£ÿÃb¤ÿÃb¥ÿÃb¦ÿÃb§ÿÃb¨ÿÃb©ÿÃbªÿÃb«ÿÃb¬ÿÃb­ÿÃb³ÿ×b´ÿÃbµÿÃb¶ÿÃb·ÿÃb¸ÿÃbºÿÃb»ÿ×b¼ÿ×b½ÿ×b¾ÿ×bÂÿÃbÃÿÃbÄÿÃbÅÿÃbÆÿÃbÇÿÃbÈÿ×bÉÿÃbËÿÃbÍÿÃbÎÿ×bÏÿÃbÕÿÃb×ÿÃbÙÿÃbÛÿÃbÝÿÃbÞÿ×bàÿ×bâÿ×bäÿ×bÿ×bÿ×b ÿ×bÿ×bÿÃbÿÃbÿ×bÿÃbÿ×bÿÃbÿ×bÿ×b!ÿ×b#ÿ×bCÿÃbDÿÃbJÿ×bbbfÿ×bmÿ×bqÿšbrÿÃbsÿ×buÿ×bxÿÃbyÿÃbˆ)bÿ×bRb Rb(ÿÃdfÿìdmÿìdsÿìd’ÿ×d•ÿ×d—)d˜ÿ×dšÿ×fÿÃfÿÃf$ÿìf,ÿìf7ÿÃf9ÿ×f:ÿìf;ÿ×f<ÿ×f=ÿìf‚ÿìfƒÿìf„ÿìf…ÿìf†ÿìf‡ÿìfˆÿ×fŽÿìfÿìfÿìf‘ÿìfŸÿ×fÂÿìfÄÿìfÆÿìfìÿìfðÿìfòÿìf$ÿÃf&ÿÃf6ÿìf8ÿ×f:ÿ×f;ÿìf=ÿìf?ÿìfCÿìf_ÿìfbÿ×fgÿìfiÿìflÿìfpÿìfqÿÃfrÿ×ftÿ×fxÿ×fúÿìfüÿìfþÿìfÿ×f(ÿìgfÿìgmÿìgsÿìgÿìgˆ)h)h )h&ÿ×h*ÿ×h2ÿ×h4ÿ×h‰ÿ×h”ÿ×h•ÿ×h–ÿ×h—ÿ×h˜ÿ×hšÿ×hÈÿ×hÎÿ×hÞÿ×hàÿ×hâÿ×häÿ×hÿ×hÿ×hÿ×hfÿ×hmÿ×hsÿ®h‘ÿ×h—)h)h )iÿ®i ÿ®i")i$ÿÃi&ÿìi*ÿìi2ÿìi4ÿìi7ÿ…i8ÿìi9ÿÃi:ÿ×i<ÿšiDÿÃiFÿÃiGÿÃiHÿÃiJÿÃiPÿ×iQÿ×iRÿÃiSÿ×iTÿÃiUÿ×iVÿ×iXÿ×i‚ÿÃiƒÿÃi„ÿÃi…ÿÃi†ÿÃi‡ÿÃiˆÿ…i‰ÿìi”ÿìi•ÿìi–ÿìi—ÿìi˜ÿìišÿìi›ÿìiœÿìiÿìižÿìiŸÿši¢ÿÃi£ÿÃi¤ÿÃi¥ÿÃi¦ÿÃi§ÿÃi¨ÿÃi©ÿÃiªÿÃi«ÿÃi¬ÿÃi­ÿÃi³ÿ×i´ÿÃiµÿÃi¶ÿÃi·ÿÃi¸ÿÃiºÿÃi»ÿ×i¼ÿ×i½ÿ×i¾ÿ×iÂÿÃiÃÿÃiÄÿÃiÅÿÃiÆÿÃiÇÿÃiÈÿìiÉÿÃiËÿÃiÍÿÃiÎÿìiÏÿÃiÕÿÃi×ÿÃiÙÿÃiÛÿÃiÝÿÃiÞÿìiàÿìiâÿìiäÿìiÿ×iÿ×i ÿ×iÿìiÿÃiÿÃiÿìiÿÃiÿ×iÿÃiÿ×iÿ×i!ÿ×i#ÿ×i$ÿ…i&ÿ…i,ÿìi0ÿìi2ÿìi4ÿìi6ÿ×i8ÿši:ÿšiCÿÃiDÿÃiJÿ×ifÿìimÿìiqÿ…irÿšisÿ×iuÿÃixÿši‘ÿ×iúÿ×iüÿ×iþÿ×iÿšiÿ®i ÿ®i(ÿÃlfÿìlmÿìlˆ)mÿÃmÿÃm$ÿìm,ÿìm7ÿÃm9ÿ×m:ÿìm;ÿ×m<ÿ×m=ÿìm‚ÿìmƒÿìm„ÿìm…ÿìm†ÿìm‡ÿìmˆÿ×mŽÿìmÿìmÿìm‘ÿìmŸÿ×mÂÿìmÄÿìmÆÿìmìÿìmðÿìmòÿìm$ÿÃm&ÿÃm6ÿìm8ÿ×m:ÿ×m;ÿìm=ÿìm?ÿìmCÿìm_ÿìmgÿìmiÿìmlÿìmpÿìmqÿÃmrÿ×mtÿ×mwÿìmxÿ×múÿìmüÿìmþÿìmÿ×m(ÿìoÿ3oÿ3o$ÿ®o&ÿìo;ÿìo<ÿìo=ÿ×o‚ÿ®oƒÿ®o„ÿ®o…ÿ®o†ÿ®o‡ÿ®oˆÿqo‰ÿìoŸÿìoÂÿ®oÄÿ®oÆÿ®oÈÿìoÎÿìo8ÿìo:ÿìo;ÿ×o=ÿ×o?ÿ×oCÿ®o_ÿ®obÿ®odÿìoiÿ®otÿìoxÿìoÿ×oˆÿ×oŽÿ×oÿìo(ÿ®p)p )p&ÿ×p*ÿ×p2ÿ×p4ÿ×p‰ÿ×p”ÿ×p•ÿ×p–ÿ×p—ÿ×p˜ÿ×pšÿ×pÈÿ×pÎÿ×pÞÿ×pàÿ×pâÿ×päÿ×pÿ×pÿ×pÿ×pfÿ×pmÿ×psÿ×pˆ)p)p )qRq Rqÿšqÿšqÿšq")q$ÿ…q&ÿÃq*ÿÃq2ÿÃq4ÿÃq6ÿìq7qDÿ…qFÿ…qGÿ…qHÿ…qJÿšqPÿ®qQÿ®qRÿ…qSÿ®qTÿ…qUÿ®qVÿ…qXÿ®qYÿÃqZÿÃq[ÿÃq\ÿÃq]ÿÃqmÿšq}ÿ×q‚ÿ…qƒÿ…q„ÿ…q…ÿ…q†ÿ…q‡ÿ…qˆÿqq‰ÿÃq”ÿÃq•ÿÃq–ÿÃq—ÿÃq˜ÿÃqšÿÃq¢ÿ…q£ÿ…q¤ÿ…q¥ÿ…q¦ÿ…q§ÿ…q¨ÿ…q©ÿ…qªÿ…q«ÿ…q¬ÿ…q­ÿ…q³ÿ®q´ÿ…qµÿ…q¶ÿ…q·ÿ…q¸ÿ…qºÿ…q»ÿ®q¼ÿ®q½ÿ®q¾ÿ®q¿ÿÃqÁÿÃqÂÿ…qÃÿ…qÄÿ…qÅÿ…qÆÿ…qÇÿ…qÈÿÃqÉÿ…qËÿ…qÍÿ…qÎÿÃqÏÿ…qÕÿ…q×ÿ…qÙÿ…qÛÿ…qÝÿ…qÞÿÃqàÿÃqâÿÃqäÿÃqÿ®qÿ®q ÿ®qÿÃqÿ…qÿ…qÿÃqÿ…qÿÃqÿ…qÿìqÿ…qÿ…q ÿìq!ÿ…q"ÿìq#ÿ…q$q&q7ÿÃq9ÿÃq@ÿÃqCÿ…qDÿ…qJÿ…q_ÿ…qbÿšqfÿÃqiÿ…qmÿÃqqqsÿÃqvÿÃqyÿ…qzÿ…q{ÿ®q}ÿ®q~ÿ…q€ÿÃqÿ®q‚ÿ…q„ÿ®q†ÿ®q‡ÿ®qˆq‰ÿ®qŠÿÃqŒÿ…qŽÿ…qÿ…qÿ…q‘ÿÃq’ÿ®q“ÿ…q”ÿÃq•ÿ®q–ÿ…q—=q˜ÿ®q™ÿ…qšÿ®q›ÿ…qûÿÃqýÿÃqÿÿÃqÿÃqÿšqÿšqRq Rq(ÿ…rÿšrÿÃrÿšrmÿÃr_ÿšrbÿÃrfÿ×riÿšrmÿ×rsÿÃrvÿ×ryÿšrzÿ®r{ÿÃr|ÿìr}ÿ×r~ÿšrÿ×rÿšr‚ÿ®rƒÿ×r„ÿÃr…ÿ×r†ÿÃr‡ÿÃrˆr‰ÿÃr‹ÿìrŒÿšrŽÿšrÿšrÿšr‘ÿìr’ÿÃr“ÿšr”ÿ×r•ÿÃr–ÿ®r—)r˜ÿÃr™ÿšršÿÃr›ÿ®rÿÃrÿÃs_ÿ×sbÿ×sgÿìsiÿ×sqÿÃsrÿÃstÿÃswÿ×sxÿÃsˆÿ×tfÿ×tmÿ×tsÿÃtyÿìt|ÿìt}ÿìt~ÿìtÿìt…ÿìt†ÿìtˆtŒÿìtÿìtÿìt‘ÿ×t’ÿ×t“ÿìt•ÿ×t–ÿìt˜ÿ×t™ÿìtšÿ×t›ÿìuÿ®uÿ®u_ÿÃubÿ×uiÿÃuÿ×uŽÿ×uÿìu“ÿìu–ÿìu™ÿìu›ÿìvqÿÃvrÿ×vxÿ×w)w )w&ÿìw*ÿìw2ÿìw4ÿìw‰ÿìw”ÿìw•ÿìw–ÿìw—ÿìw˜ÿìwšÿìwÈÿìwÎÿìwÞÿìwàÿìwâÿìwäÿìwÿìwÿìwÿìwfÿìwmÿìwsÿ×w€ÿìwÿìwˆw‘ÿìw)w )xRx ÿÃx Rx =x )xÿšxÿ\xÿšx")x$ÿšx&ÿ×x*ÿ×x-ÿ¾x0ÿìx2ÿ×x4ÿ×x6ÿìx7'x@=xDÿšxFÿšxGÿšxHÿšxIÿåxJÿšxPÿÃxQÿÃxRÿšxSÿÃxTÿšxUÿÃxVÿ®xXÿÃx[ÿ×x\ÿìx]ÿÃx`=xmÿÃx}ÿ×x‚ÿšxƒÿšx„ÿšx…ÿšx†ÿšx‡ÿšxˆÿqx‰ÿ×x”ÿ×x•ÿ×x–ÿ×x—ÿ×x˜ÿ×xšÿ×x¢ÿšx£ÿšx¤ÿšx¥ÿšx¦ÿšx§ÿšx¨ÿšx©ÿšxªÿšx«ÿšx¬ÿšx­ÿšx³ÿÃx´ÿšxµÿšx¶ÿšx·ÿšx¸ÿšxºÿšx»ÿÃx¼ÿÃx½ÿÃx¾ÿÃx¿ÿìxÁÿìxÂÿšxÃÿšxÄÿšxÅÿšxÆÿšxÇÿšxÈÿ×xÉÿšxËÿšxÍÿšxÎÿ×xÏÿšxÕÿšx×ÿšxÙÿšxÛÿšxÝÿšxÞÿ×xàÿ×xâÿ×xäÿ×xöÿ¾xÿÃxÿÃx ÿÃxÿ×xÿšxÿšxÿ×xÿšxÿ×xÿšxÿìxÿ®xÿ®x ÿìx!ÿ®x"ÿìx#ÿ®x$'x&'x9ÿìx@ÿÃxCÿšxDÿšxJÿ®x_ÿšxbÿÃxfÿ×xiÿšxmÿ×xsÿÃxvÿ×xyÿšxzÿ®x{ÿÃx|ÿìx}ÿÃx~ÿšxÿ×x€ÿìxÿšx‚ÿšxƒÿ×x„ÿÃx†ÿÃx‡ÿÃx‰ÿÃxŠÿìx‹ÿìxŒÿšxÿ×xŽÿšxÿšxÿšx‘ÿ×x’ÿÃx“ÿšx”ÿ×x•ÿÃx–ÿšx—)x˜ÿÃx™ÿšxšÿÃx›ÿšxÿìxRx Rxÿ×x(ÿšyˆ)zyÿ×z~ÿìzÿìzŒÿìzÿìz“ÿì{ ÿ×|yÿì||ÿì|}ÿì|€ÿì|ÿì|…ÿì|†ÿì|ˆ)|Šÿ×|Œÿì|ÿì|ÿì|ÿì|‘ÿ×|’ÿì|•ÿì|—ÿì|˜ÿì|™ÿì|šÿì~ˆ)”ÿì€=€ =€I€ÿì€)€Žÿ쀑€”€–€=€ =‘ÿì”ÿׂ=‚ =‚yÿׂÿ삌ÿׂÿì‚ÿׂ“ÿׂ™ÿׂ=‚ =ƒyÿ®ƒzÿ׃}ÿ׃~ÿÀÿ׃ÿÂÿ׃ƒÿ׃„ÿ׃…ÿ׃†ÿ׃‡ÿ새)ƒŠÿ׃‹ÿ׃ŒÿÃÿÃÿÃÿÑÿÃ’ÿÓÿÕÿÖÿØÿÙÿÚÿÛÿÄ ÿ׆R† R†yÿ׆}ÿì†~ÿ솀ÿ׆…ÿ׆†ÿ솈)†Šÿ׆ÿ׆‘ÿ׆“ÿ׆—ÿì†R† R‡)‡ )‡yÿׇ~ÿׇÿׇ‚ÿ쇌ÿì‡)‡ )ˆ=ˆ =ˆIˆ}ÿ숀ÿ숅ÿ׈ˆ=ˆŠÿ׈ÿ׈‘ÿÈ”ÿ׈=ˆ =Š=Š =ŠIŠŠŽÿìŠ=Š =‹=‹~ÿ싈)Œ[ÿ׌]ÿìŒ@ÿ쌑ÿ쌔ÿ×~ÿ쀊)‘Ž[ÿ׎]ÿìŽ@ÿ쎑ÿ쎔ÿ×[ÿ×]ÿì@ÿ쀊‘)‘R‘ R‘I‘})‘€‘ÿ쑊)‘Œÿב‘ÿבÿì‘‘‘R‘ R“[ÿד]ÿì“@ÿì“”ÿì”R” R”I”yÿ×”zÿ×”~ÿ×”€”ÿ×”‚ÿ×”…ÿ씌ÿ×”ÿ×”ÿ×”’ÿ씓ÿì””)”•ÿ×”–ÿ×”™ÿì”R” R•[ÿו]ÿì•@ÿì–[ÿ×–]ÿì–@ÿì–€—yÿì—}ÿì—~ÿ×—€ÿ×—ÿì—…ÿ×—ˆ)—Œÿì—ÿ×—ÿì—ÿì—‘ÿ×—’ÿì—”ÿì—•ÿ×—˜ÿì—™ÿì—šÿì—›ÿì™[ÿ×™]ÿì™@ÿì›[ÿ×›]ÿì›@ÿìœ)œ )œÿל&ÿìœ-=œ2ÿìœ4ÿ위ÿ윉ÿ윊ÿìœÿ윔ÿ윕ÿ윖ÿ윗ÿ윘ÿ윚ÿìœÈÿìœÎÿìœö=œÿìœÿ윸ÿ윻ÿ윾ÿìœ)œ )ÿà ÿÃÿ…¦ÿ…°ÿ×¼ÿ…½ÿ׿ÿìÁÿÃÄÿ…ÜÿÃÝÿìßÿìáÿÃäÿ®ÿà ÿÞRž Ržÿ\ž&ÿìž*ÿìž2ÿìž4ÿìž7ÿ…ž8ÿìž9ÿ®ž:ÿÞ<ÿšž‰ÿìž”ÿìž•ÿìž–ÿìž—ÿ잘ÿìžšÿìž›ÿìžœÿìžÿìžžÿ잟ÿšžÈÿìžÎÿìžÞÿìžàÿìžâÿìžäÿìžÿìžÿìžÿìž$ÿ…ž&ÿ…ž,ÿìž0ÿìž2ÿìž4ÿìž6ÿÞ8ÿšž:ÿšžŸÿ잤ÿšžªÿ…ž®ÿ…žµÿ…ž¸ÿמ»ÿìž¾ÿÞÊÿ…žËÿמÌÿÞÍÿÞÎÿ\žÏÿ…žÐÿÞÑÿÞÒÿÞÓÿÞÔÿÞÕÿ\žÖÿÞ×ÿÞØÿ…žÙÿÞÚÿÞÛÿ…žÜÿÞÝÿÞÞÿ…žßÿÞàÿÞáÿÞâÿÞãÿÞäÿÞåÿÞæÿÞçÿÞèÿÞéÿšžêÿ…žìÿÞíÿ…žîÿ®žð=žòÿ\žóÿÞõÿÞ÷ÿÞùÿÞúÿÞüÿÞþÿÞÿšžRž RŸ)Ÿ )ŸŸÿן¸ÿ쟻ÿן¾ÿìŸÞÿןáÿן)Ÿ )  ÿì ÜÿסŸÿì¡ÜÿסÝÿì¡áÿסäÿì¢)¢ )¢&ÿì¢*ÿì¢2ÿì¢4ÿ좉ÿ좔ÿ좕ÿ좖ÿ좗ÿ좘ÿ좚ÿì¢Èÿì¢Îÿì¢Þÿì¢àÿì¢âÿì¢äÿì¢ÿì¢ÿì¢ÿ좟ÿ좸ÿ좻ÿì¢ )¤ÿš¤ ÿš¤¦ÿ…¤¨ÿפ°ÿפµÿ줼ÿ…¤½ÿ줿ÿì¤Áÿ®¤Äÿ…¤Üÿפáÿפäÿäÿš¤ ÿš¥ÿš¥ ÿš¥ÿ…¥¦ÿ…¥¨ÿ×¥°ÿ쥼ÿ…¥½ÿ×¥Áÿ®¥Äÿ…¥Üÿ×¥ßÿì¥áÿì¥äÿ×¥ÿš¥ ÿš¦ÿš¦¦ÿš¦Äÿ…¦ÜÿצÝÿì¦áÿצäÿæöÿì§)§ )§&ÿ×§*ÿ×§2ÿ×§4ÿ×§‰ÿ×§”ÿ×§•ÿ×§–ÿ×§—ÿ×§˜ÿ×§šÿ×§Èÿ×§Îÿ×§Þÿ×§àÿ×§âÿ×§äÿ×§ÿ×§ÿ×§ÿ×§Ÿÿ×§¤)§µ)§¸ÿ×§»ÿ×§¾ÿ®§Ëÿì§Î§Ïÿ×§Øÿ×§Ûÿ×§Üÿ×§Ýÿ×§Þÿ×§áÿçäÿ×§êÿ×§íÿ×§)§ )¨R¨ R¨¤ÿš¨ªÿ…¨®ÿq¨µÿš¨»ÿר¼)¨¾ÿרĨÉÿì¨Êÿ®¨ÌÿרÍÿרÎÿ\¨Ïÿ®¨ÑÿרÒÿרÓÿרÔÿרÕÿ\¨Öÿר×ÿרØÿ®¨ÙÿרÚÿרÛÿ®¨Þÿ®¨àÿרáÿרâÿרãÿרåÿרæÿרèÿרéÿרêÿרìÿרíÿ®¨îÿרðR¨òÿq¨óÿרõÿר÷ÿרùÿרR¨ Rªÿ®ª ÿ®ª&ÿìª*ÿìª2ÿìª4ÿìª7ÿ…ª8ÿìª9ÿê:ÿת<ÿšª‰ÿ쪔ÿ쪕ÿ쪖ÿ쪗ÿ쪘ÿ쪚ÿ쪛ÿ쪜ÿìªÿ쪞ÿ쪟ÿšªÈÿìªÎÿìªÞÿìªàÿìªâÿìªäÿìªÿìªÿìªÿת$ÿ…ª&ÿ…ª,ÿìª0ÿìª2ÿìª4ÿìª6ÿת8ÿšª:ÿšªÿšªŸÿ쪤=ª¦ÿ…ª®)ªµ)ª¸ÿ쪻ÿ쪼ÿ…ª¾ÿתÁÿ®ªÄÿšªÕ)ªÜÿתáÿêäÿêç)ªò)ªúÿתüÿתþÿתÿšªÿ®ª ÿ®«ÿ׫¼ÿ׫½ÿ׫¿ÿì«ÁÿëÄÿ׫Ðÿì«Üÿ׫áÿ׫äÿ׬7ÿì¬9ÿì¬;ÿì¬<ÿ쬟ÿì¬$ÿì¬&ÿì¬8ÿì¬:ÿ쬰ÿ쬼ÿ쬽ÿ쬿ÿì¬ÿì­R­ R­ÿ\­Ÿÿì­¤ÿš­ªÿ…­®ÿ…­µÿ…­¸ÿ×­¾ÿíÊÿ…­ÌÿíÍÿíÎÿ\­Ïÿ…­ÐÿíÑÿíÒÿíÓÿíÔÿíÕÿ\­Öÿí×ÿíØÿ…­ÙÿíÚÿíÛÿ…­ÜÿíÝÿíÞÿ…­ßÿíàÿíáÿíâÿíãÿíäÿíåÿíæÿíçÿíèÿíéÿš­êÿ…­ìÿííÿ…­îÿ®­ð=­òÿ\­óÿíõÿí÷ÿíùÿíR­ R®ÿ×®£ö®¤)®¦ÿ×®ª®®)®µ)®¸ÿì®»ÿ쮼ÿ×®¾ÿì®Áÿ×®Äÿ×®Î)®Õ)®áÿ×®ç)®ñf®ò)°=° =°ÿ×°Ÿÿ×°¤)°µ)°¸ÿ×°»ÿ×°¾ÿðËÿ×°Õ)°Üÿ×°áÿ®°ò)°=° =±)± )±±ÿì±µÿ×±¼ÿ×±½ÿì±¾ÿ챿ÿ×±Áÿì±Äÿì±Çÿì±)± )´)´ )´ÿ×´&ÿ×´*ÿ×´2ÿ×´4ÿ×´‰ÿ×´”ÿ×´•ÿ×´–ÿ×´—ÿ×´˜ÿ×´šÿ×´Èÿ×´Îÿ×´Þÿ×´àÿ×´âÿ×´äÿ×´ÿ×´ÿ×´ÿ×´Ÿÿ×´¤=´µ)´¸ÿ×´»ÿ×´¾ÿ®´Ëÿ×´Õ)´áÿ®´äÿ×´ò)´)´ )¸ÿøÿø$ÿì¸,ÿì¸7ÿø9ÿ׸:ÿì¸;ÿ׸<ÿ׸=ÿ츂ÿ츃ÿ츄ÿ츅ÿ츆ÿ츇ÿ츈ÿ׸Žÿì¸ÿì¸ÿ츑ÿ츟ÿ׸Âÿì¸Äÿì¸Æÿì¸ìÿì¸ðÿì¸òÿì¸$ÿø&ÿø6ÿì¸8ÿ׸:ÿ׸;ÿì¸=ÿì¸?ÿì¸Cÿì¸ÿ׸¤ÿ׸¦ÿ׸ªÿ츮ÿ츰ÿ׸¼ÿø¿ÿì¸Äÿ׸úÿì¸üÿì¸þÿì¸ÿ׸(ÿìº=º =ºÿ3ºÿ3º$ÿ®º&ÿìº;ÿìº<ÿìº=ÿ׺‚ÿ®ºƒÿ®º„ÿ®º…ÿ®º†ÿ®º‡ÿ®ºˆÿqº‰ÿ캟ÿìºÂÿ®ºÄÿ®ºÆÿ®ºÈÿìºÎÿìº8ÿìº:ÿìº;ÿ׺=ÿ׺?ÿ׺Cÿ®º¤ÿ®ºªÿ®º®ÿšºµÿšº»ÿìºÎÿšºÕÿ®ºòÿ®ºÿìº=º =º(ÿ®»)» )» )»&ÿ×»*ÿ×»2ÿ×»4ÿ×»@)»`)»‰ÿ×»”ÿ×»•ÿ×»–ÿ×»—ÿ×»˜ÿ×»šÿ×»Èÿ×»Îÿ×»Þÿ×»àÿ×»âÿ×»äÿ×»ÿ×»ÿ×»Ÿÿ×»¸ÿ×»»ÿ×»¾ÿûáÿû)» )¼R¼ R¼ÿš¼ÿš¼ÿš¼")¼$ÿ…¼&ÿü*ÿü2ÿü4ÿü6ÿì¼7¼Dÿ…¼Fÿ…¼Gÿ…¼Hÿ…¼Jÿš¼Pÿ®¼Qÿ®¼Rÿ…¼Sÿ®¼Tÿ…¼Uÿ®¼Vÿ…¼Xÿ®¼YÿüZÿü[ÿü\ÿü]ÿü‚ÿ…¼ƒÿ…¼„ÿ…¼…ÿ…¼†ÿ…¼‡ÿ…¼ˆÿq¼‰ÿü”ÿü•ÿü–ÿü—ÿü˜ÿüšÿü¢ÿ…¼£ÿ…¼¤ÿ…¼¥ÿ…¼¦ÿ…¼§ÿ…¼¨ÿ…¼©ÿ…¼ªÿ…¼«ÿ…¼¬ÿ…¼­ÿ…¼³ÿ®¼´ÿ…¼µÿ…¼¶ÿ…¼·ÿ…¼¸ÿ…¼ºÿ…¼»ÿ®¼¼ÿ®¼½ÿ®¼¾ÿ®¼¿ÿüÁÿüÂÿ…¼Ãÿ…¼Äÿ…¼Åÿ…¼Æÿ…¼Çÿ…¼ÈÿüÉÿ…¼Ëÿ…¼Íÿ…¼ÎÿüÏÿ…¼Õÿ…¼×ÿ…¼Ùÿ…¼Ûÿ…¼Ýÿ…¼Þÿüàÿüâÿüäÿüÿ®¼ÿ®¼ ÿ®¼ÿüÿ…¼ÿ…¼ÿüÿ…¼ÿüÿ…¼ÿì¼ÿ…¼ÿ…¼ ÿì¼!ÿ…¼"ÿì¼#ÿ…¼$¼&¼7ÿü9ÿü@ÿüCÿ…¼Dÿ…¼Jÿ…¼Ÿÿü ÿ켤ÿ®¼ªÿ…¼®ÿš¼µÿš¼¸ÿü»ÿü¼¼¾ÿüļÊÿ…¼ÌÿüÍÿüÎÿq¼Ïÿ…¼ÐÿüÑÿüÒÿüÔÿüÕÿq¼Öÿü×ÿüØÿ…¼ÙÿüÚÿüÛÿ…¼ÜÿüÝÿüÞÿ…¼ßÿüàÿüáÿüâÿüãÿüåÿüæÿüèÿüéÿüêÿ…¼ë)¼ìÿüíÿ…¼îÿ…¼ðR¼òÿ…¼óÿüõÿü÷ÿüùÿüûÿüýÿüÿÿüÿüR¼ R¼(ÿ…½=½ =½ÿ×½Ÿÿ×½¤ÿ®½ªÿš½®ÿ…½µÿš½»ÿ×½¾ÿì½Ä)½Êÿ®½ÌÿýÍÿýÎÿq½ÏÿýÒÿýÓÿýÔÿýÕÿq½Öÿý×ÿýØÿš½ÙÿýÚÿýÛÿýÞÿ®½àÿýáÿýâÿýãÿýåÿýæÿýèÿýéÿýêÿýìÿýíÿýîÿýð=½òÿ…½óÿýõÿý÷ÿýùÿý=½ =¾ÿ×¾¤ÿ×¾¦ÿþ¨ÿ쾪ÿ×¾®ÿ×¾°ÿþµÿ×¾¼ÿþ¿ÿ×¾ÄÿþÇÿ×¾ÎÿþÕÿþòÿÿ)¿ )¿Ÿÿ׿¤=¿®)¿µ)¿¸ÿì¿»ÿ׿¾ÿ׿Áÿì¿áÿÿ)¿ )À£öÀ¤)ÀªÀ®)Àµ)À¼ÿìÀ¾ÿìÀ¿ÀÁÿìÀÎ)ÀÕÀáÿ×Àç)ÀñfÀò)Ãÿìãáä=ê)î)õ)üÿìý)þÿìÿÃÁÿìÃÄÿìÃÇÃÎ=ÃÑÃÕ)ÃÜÿìÃáÿ×ÃäÿìÃç)ÃñfÃò)ÄÿÃÄ ÿÃÄÿ…ĦÿqĨÿ×ļÿ…ÄÁÿÃÄÄÿ…ÄÜÿ×Ääÿ×ÄÿÃÄ ÿÃÆÿšÆ ÿšÆÿ…Ʀÿ…ƨÿׯ¼ÿ…ÆÁÿÃÆÄÿ…ÆÜÿׯäÿׯÿšÆ ÿšÇÿ×Ǥÿ×Ǧÿ×Ǩÿ×Ç®ÿ×ǰÿÃDZÿìǵÿÃǼÿ×ǽÿìÇ¿ÿ×ÇÕÿ×Çòÿ×Èÿ×Ȥÿ×Ȧÿ×ȨÿìÈ®ÿ×Ȱÿ×ȱÿìȵÿ×ȽÿìÈ¿ÿ×ÈÎÿ×ÈÕÿ×Èòÿ×Ê ÿ×ÊÜÿ×ÊÝÿìÊáÿìÊäÿ×Êöÿ×ËÎÿ×ËÐÿ×ËÜÿ×ËÝÿ×Ëßÿ×ËáÿìËäÿ×Ëöÿ×Ì=Ì =ÌÐÿìÌÜÿ×ÌÝÿ×Ìßÿ×ÌáÿìÌäÿ×Ìöÿ×Ì=Ì =ÍÎÿšÍÕÿšÍíÿìÍòÿšÎÊÎÎ)ÎÜÿ×Îáÿ×ÎäÿÃÎñ{Ï ÿ×ÏÐÿ×ÏÜÿìÏßÿìÐ)Ð )ÐÏÿ×ÐØÿ×ÐÛÿìÐÞÿ×Ðáÿ×Ðêÿ×Ðíÿ×Ð)Ð )Ñ=Ñ =ÑÑÿìÑÜÿìÑÝÿìÑßÿìÑáÿ×ÑöÿìÑ=Ñ =Ô)Ô )ÔËÿ×ÔÏÿ×ÔØÿ×ÔÛÿ×ÔÞÿ×Ôáÿ×Ôêÿ×Ôíÿ×Ô)Ô )Ø[ÿר]ÿìØ@ÿìØÐÿרÑÿìØÕÿìØÜÿרÝÿìØßÿרòÿìØöÿìÚÐÿ×ÚÑÿìÚÕÿìÚÜÿìÚßÿìÚäÿìÚòÿìÛ=Û =ÛÏÿìÛØÿìÛíÿìÛ=Û =ÜRÜ RÜIÜÊÿ×ÜÎÿšÜÏÿìÜÕÿÃÜØÿ×ÜÛÿ×ÜÝÜÞÿ×Üíÿ×ÜòÿšÜöÜRÜ RÝ=Ý =ÝIÝÊÿìÝÎÿÃÝÕÿÃÝØÿìÝÜÝÞÿìÝòÿÃÝ=Ý =Þ[ÿ×Þ]ÿìÞ@ÿìÞÐÿ×ÞÑÿìÞÕÿìÞÜÿ×ÞßÿìÞáÿìÞäÿ×Þòÿ×ßËÿìßÏÿìߨÿìßÛÿìßÞÿìßáÿìßêÿìßíÿìàÎ)àÕ)àÜÿìàáÿìàäÿ×àç)àéàñfàò)àöãÎ=ãÕ)ãÜÿìãáÿìãäÿìãçãêÿìãíÿìãñfãò)ãöäÜÿšäÝÿ×äßÿìäáÿ×ääÿqäöÿÃå=å =å=å =æ=æ =æÜÿšæÝÿ׿ßÿìæáÿ׿äÿqæ=æ =çÎÿ×çÐÿ×çÑÿìçÕÿìçßÿìçäÿ×çòÿìçöÿ×èÎÿ×èÐÿ×èÑÿìèÕÿìèßÿìèäÿ×èöÿìé=é =é=é =êÿ˜ê ÿ×êßÿììÎÿšìÏÿ×ìÕÿšìØÿ×ìÛÿììÞÿ×ìêÿ×ìíÿììòÿší=í =í=í =î=î =î=î =ðë=ðô=òÐÿ×òÜÿšòÝÿÃòÞÿìòßÿìòáÿ×òäÿšòöÿ×óÐÿ×óÜÿšóÝÿÃóßÿìóáÿ×óäÿšôöÿ×õ)õ )õËÿìõÏÿ×õØÿ×õÛÿìõÞÿ×õêÿ×õíÿ×õöÿìõ)õ )öÊÿ×öÕÿÃöØÿìöÜöòÿ×øRø Røÿ\ø&ÿìø*ÿìø2ÿìø4ÿìø7ÿ…ø8ÿìø9ÿ®ø:ÿÃø<ÿšø‰ÿìø”ÿìø•ÿìø–ÿìø—ÿìø˜ÿìøšÿìø›ÿìøœÿìøÿìøžÿìøŸÿšøÈÿìøÎÿìøÞÿìøàÿìøâÿìøäÿìøÿìøÿìøÿìø$ÿ…ø&ÿ…ø,ÿìø0ÿìø2ÿìø4ÿìø6ÿÃø8ÿšø:ÿšøŸÿìø¤ÿšøªÿ…ø®ÿ…øµÿ…ø¸ÿ×ø»ÿìø¼ÿ…ø¾ÿÃøÊÿ…øÌÿÃøÍÿÃøÎÿ\øÏÿ…øÐÿÃøÑÿÃøÒÿÃøÓÿÃøÔÿÃøÕÿ\øÖÿÃø×ÿÃøØÿ…øÙÿÃøÚÿÃøÛÿ…øÜÿÃøÝÿÃøÞÿ…øßÿÃøàÿÃøáÿÃøâÿÃøãÿÃøäÿÃøåÿÃøæÿÃøçÿÃøèÿÃøéÿšøêÿ…øìÿÃøíÿ…øîÿ®øð=øòÿ\øóÿÃøõÿÃø÷ÿÃøùÿÃøúÿÃøüÿÃøþÿÃøÿšøRø RùÎÿšùÕÿšùíÿìùòÿšúfú fúÿ®úÿ®ú$ÿ×ú&ÿìú*ÿìú2ÿìú4ÿìúDÿ×úFÿ×úGÿ×úHÿ×úJÿìúPÿìúQÿìúRÿ×úSÿìúTÿ×úUÿìúVÿ×úXÿìú]ÿìú‚ÿ×úƒÿ×ú„ÿ×ú…ÿ×ú†ÿ×ú‡ÿ×úˆÿ®ú‰ÿìú”ÿìú•ÿìú–ÿìú—ÿìú˜ÿìúšÿìú¢ÿ×ú£ÿ×ú¤ÿ×ú¥ÿ×ú¦ÿ×ú§ÿ×ú¨ÿ×ú©ÿ×úªÿ×ú«ÿ×ú¬ÿ×ú­ÿ×ú³ÿìú´ÿ×úµÿ×ú¶ÿ×ú·ÿ×ú¸ÿ×úºÿ×ú»ÿìú¼ÿìú½ÿìú¾ÿìúÂÿ×úÃÿ×úÄÿ×úÅÿ×úÆÿ×úÇÿ×úÈÿìúÉÿ×úËÿ×úÍÿ×úÎÿìúÏÿ×úÕÿ×ú×ÿ×úÙÿ×úÛÿ×úÝÿ×úÞÿìúàÿìúâÿìúäÿìúÿìúÿìú ÿìúÿìúÿ×úÿ×úÿìúÿ×úÿìúÿ×úÿ×úÿ×ú!ÿ×ú#ÿ×ú@ÿìúCÿ×úDÿ×úJÿ×ú_ÿ×úfÿìúiÿ×úmÿìúyÿ×ú{ÿìú~ÿ×ú‚ÿ×ú„ÿìúŒÿ×úŽÿ×úÿ×ú“ÿ×ú–ÿ×ú™ÿ×ú›ÿ×úªÿ×ú¸ÿìú»ÿìúÊÿ×úÏÿ×úØÿ×úÛÿ×úÞÿ×úêÿ×úíÿ×úîÿ×úfú fú(ÿ×ûRû RûIûRû Rüfü füÿ®üÿ®ü$ÿ×ü&ÿìü*ÿìü2ÿìü4ÿìüDÿ×üFÿ×üGÿ×üHÿ×üJÿìüPÿìüQÿìüRÿ×üSÿìüTÿ×üUÿìüVÿ×üXÿìü]ÿìü‚ÿ×üƒÿ×ü„ÿ×ü…ÿ×ü†ÿ×ü‡ÿ×üˆÿ®ü‰ÿìü”ÿìü•ÿìü–ÿìü—ÿìü˜ÿìüšÿìü¢ÿ×ü£ÿ×ü¤ÿ×ü¥ÿ×ü¦ÿ×ü§ÿ×ü¨ÿ×ü©ÿ×üªÿ×ü«ÿ×ü¬ÿ×ü­ÿ×ü³ÿìü´ÿ×üµÿ×ü¶ÿ×ü·ÿ×ü¸ÿ×üºÿ×ü»ÿìü¼ÿìü½ÿìü¾ÿìüÂÿ×üÃÿ×üÄÿ×üÅÿ×üÆÿ×üÇÿ×üÈÿìüÉÿ×üËÿ×üÍÿ×üÎÿìüÏÿ×üÕÿ×ü×ÿ×üÙÿ×üÛÿ×üÝÿ×üÞÿìüàÿìüâÿìüäÿìüÿìüÿìü ÿìüÿìüÿ×üÿ×üÿìüÿ×üÿìüÿ×üÿ×üÿ×ü!ÿ×ü#ÿ×ü@ÿìüCÿ×üDÿ×üJÿ×ü_ÿ×üfÿìüiÿ×ümÿìüyÿ×ü{ÿìü~ÿ×ü‚ÿ×ü„ÿìüŒÿ×üŽÿ×üÿ×ü“ÿ×ü–ÿ×ü™ÿ×ü›ÿ×üªÿ×ü¸ÿìü»ÿìüÊÿ×üÏÿ×üØÿ×üÛÿ×üÞÿ×üêÿ×üíÿ×üîÿ×üfü fü(ÿ×ýRý RýIýRý Rþfþ fþÿ®þÿ®þ$ÿ×þ&ÿìþ*ÿìþ2ÿìþ4ÿìþDÿ×þFÿ×þGÿ×þHÿ×þJÿìþPÿìþQÿìþRÿ×þSÿìþTÿ×þUÿìþVÿ×þXÿìþ]ÿìþ‚ÿ×þƒÿ×þ„ÿ×þ…ÿ×þ†ÿ×þ‡ÿ×þˆÿ®þ‰ÿìþ”ÿìþ•ÿìþ–ÿìþ—ÿìþ˜ÿìþšÿìþ¢ÿ×þ£ÿ×þ¤ÿ×þ¥ÿ×þ¦ÿ×þ§ÿ×þ¨ÿ×þ©ÿ×þªÿ×þ«ÿ×þ¬ÿ×þ­ÿ×þ³ÿìþ´ÿ×þµÿ×þ¶ÿ×þ·ÿ×þ¸ÿ×þºÿ×þ»ÿìþ¼ÿìþ½ÿìþ¾ÿìþÂÿ×þÃÿ×þÄÿ×þÅÿ×þÆÿ×þÇÿ×þÈÿìþÉÿ×þËÿ×þÍÿ×þÎÿìþÏÿ×þÕÿ×þ×ÿ×þÙÿ×þÛÿ×þÝÿ×þÞÿìþàÿìþâÿìþäÿìþÿìþÿìþ ÿìþÿìþÿ×þÿ×þÿìþÿ×þÿìþÿ×þÿ×þÿ×þ!ÿ×þ#ÿ×þ@ÿìþCÿ×þDÿ×þJÿ×þ_ÿ×þfÿìþiÿ×þmÿìþyÿ×þ{ÿìþ~ÿ×þ‚ÿ×þ„ÿìþŒÿ×þŽÿ×þÿ×þ“ÿ×þ–ÿ×þ™ÿ×þ›ÿ×þªÿ×þ¸ÿìþ»ÿìþÊÿ×þÏÿ×þØÿ×þÛÿ×þÞÿ×þêÿ×þíÿ×þîÿ×þfþ fþ(ÿ×ÿRÿ RÿIÿRÿ RR Rÿšÿš")$ÿš&ÿ×*ÿ×2ÿ×4ÿ×6ÿìDÿšFÿšGÿšHÿšJÿšPÿÃQÿÃRÿšSÿÃTÿšUÿÃVÿ®XÿÃ[ÿ×\ÿì]ÿÂÿšƒÿš„ÿš…ÿš†ÿš‡ÿšˆÿq‰ÿ×”ÿוÿ×–ÿ×—ÿטÿךÿ×¢ÿš£ÿš¤ÿš¥ÿš¦ÿš§ÿš¨ÿš©ÿšªÿš«ÿš¬ÿš­ÿš³ÿôÿšµÿš¶ÿš·ÿš¸ÿšºÿš»ÿüÿýÿþÿÿÿìÁÿìÂÿšÃÿšÄÿšÅÿšÆÿšÇÿšÈÿ×ÉÿšËÿšÍÿšÎÿ×ÏÿšÕÿš×ÿšÙÿšÛÿšÝÿšÞÿ×àÿ×âÿ×äÿ×ÿÃÿà ÿÃÿ×ÿšÿšÿ×ÿšÿ×ÿšÿìÿ®ÿ® ÿì!ÿ®"ÿì#ÿ®9ÿì@ÿÃCÿšDÿšJÿ®_ÿšfÿ×iÿšmÿ×yÿš{ÿÃ~ÿš€ÿì‚ÿš„ÿÊÿìŒÿšŽÿšÿš“ÿš–ÿš™ÿš›ÿš ÿìªÿš¸ÿ×»ÿ×ÊÿšÏÿšØÿšÛÿšÝÿìÞÿšêÿšíÿšîÿ®ÿìR R(ÿš= =I= =7ÿšqÿšrÿÃ7ÿšqÿšrÿÃ$ÿ®,)7R9R:f;)<R=)FÿÃGÿÃHÿÃJÿ×RÿÃTÿÃW)Y)Z‚ÿ®ƒÿ®„ÿ®…ÿ®†ÿ®‡ÿ®ˆÿ\Ž)))‘)ŸR¨ÿéÿêÿëÿìÿíÿôÿõÿöÿ÷ÿøÿúÿÃÂÿ®Äÿ®Æÿ®ÉÿÃËÿÃÍÿÃÏÿÃÕÿÃ×ÿÃÙÿÃÛÿÃÝÿÃì)ð)ò)ÿÃÿÃÿÃÿÃ$R&R6f78R:R;)=)?)Cÿ®_ÿ®iÿ®qRyÿÃ~ÿÂÿÊ)ŒÿÃŽÿÃÿÑ)“ÿÔ)–ÿÙÿÛÿÃR¤ÿš¦R¨=ªÿ®®ÿ…°=±µÿ…¼R½=¿)ÄRÏÿÃØÿÃÛÿÃÜ)ÞÿÃêÿÃíÿÃúfûüfýþfÿR(ÿ® $ÿ® ,) 7R 9R :f ;) <R =) Fÿà Gÿà Hÿà Jÿ× Rÿà Tÿà W) Y) Z ‚ÿ® ƒÿ® „ÿ® …ÿ® †ÿ® ‡ÿ® ˆÿ\ Ž) ) ) ‘) ŸR ¨ÿà ©ÿà ªÿà «ÿà ¬ÿà ­ÿà ´ÿà µÿà ¶ÿà ·ÿà ¸ÿà ºÿà Âÿ® Äÿ® Æÿ® Éÿà Ëÿà Íÿà Ïÿà Õÿà ×ÿà Ùÿà Ûÿà Ýÿà ì) ð) ò) ÿà ÿà ÿà ÿà $R &R 6f 7 8R :R ;) =) ?) Cÿ® _ÿ® iÿ® qR yÿà ~ÿà ‚ÿà Š) Œÿà Žÿà ÿà ‘) “ÿà ”) –ÿà ™ÿà ›ÿà R ¤ÿš ¦R ¨= ªÿ® ®ÿ… °= ± µÿ… ¼R ½= ¿) ÄR Ïÿà Øÿà Ûÿà Ü) Þÿà êÿà íÿà úf û üf ý þf ÿ R (ÿ®(ÿ®( ÿ®(&ÿì(*ÿì(2ÿì(4ÿì(7ÿ…(8ÿì(9ÿÃ(:ÿ×(<ÿš(‰ÿì(”ÿì(•ÿì(–ÿì(—ÿì(˜ÿì(šÿì(›ÿì(œÿì(ÿì(žÿì(Ÿÿš(Èÿì(Îÿì(Þÿì(àÿì(âÿì(äÿì(ÿì(ÿì(ÿ×($ÿ…(&ÿ…(,ÿì(0ÿì(2ÿì(4ÿì(6ÿ×(8ÿš(:ÿš(fÿì(mÿì(qÿ…(¸ÿì(»ÿì(¼ÿ…(úÿ×(üÿ×(þÿ×(ÿš(ÿ®( ÿ®24 4>E 4 Z fNo½ gÑ 4 h8   ´ *   ,ì  œ* (Æ Îî 8¼ \ô ¢P F òDigitized data copyright © 2006, Google Corporation.Droid SansRegularAscender - Droid SansVersion 1.00DroidSansDroid is a trademark of Google and may be registered in certain jurisdictions.Ascender CorporationDroid Sans is a humanist sans serif typeface designed for user interfaces and electronic communication.Digitized data copyright © 2006, Google Corporation.Droid SansRegularAscender - Droid SansVersion 1.00 build 107DroidSansDroid is a trademark of Google and may be registered in certain jurisdictions.Ascender CorporationDroid Sans is a humanist sans serif typeface designed for user interfaces and electronic communication.http://www.ascendercorp.com/http://www.ascendercorp.com/typedesigners.htmlThis font software is the valuable property of Ascender Corporation and/or its suppliers and its use by you is covered under the terms of a license agreement. This font software is licensed to you by Ascender Corporation for your personal or business use on up to five personal computers. You may not use this font software on more than five personal computers unless you have obtained a license from Ascender to do so. Except as specifically permitted by the license, you may not copy this font software. If you have any questions, please review the license agreement you received with this font software, and/or contact Ascender Corporation. Contact Information: Ascender Corporation Web http://www.ascendercorp.com/http://ascendercorp.com/eula10.htmlÿff_  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a¬£„…½–膎‹©¤Šƒ“òó—ˆÞñžªõôö¢­ÉÇ®bcdËeÈÊÏÌÍÎéfÓÐѯgð‘ÖÔÕhëí‰jikmln oqprsutvwêxzy{}|¸¡~€ìîº   ýþ  ÿøù !"#$%&'()*+,-./0×123456789:;<=>?âã@ABCDEFGHIJKLMN°±OPQRSTUVWXûüäåYZ[\]^_`abcdefghijklmn»opqræçs¦tuvwxyz{Øá|ÛÜÝàÙß}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ›¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()²³*+¶·Ä,´µÅ‚‡«Æ-.¾¿/¼0÷123456ŒŸ789:;˜<š™ï¥’œ§”•¹=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg.nulluni00AD overscoreperiodcenteredAmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflexCdotcdotDcarondcaronDcroatdcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflexGdotgdot Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonek IdotaccentIJij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflex Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongs Aringacute aringacuteAEacuteaeacute Oslashacute oslashacute Scommaaccent scommaaccentmacrontonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiuni03A9 IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonos afii10023 afii10051 afii10052 afii10053 afii10054 afii10055 afii10056 afii10057 afii10058 afii10059 afii10060 afii10061 afii10062 afii10145 afii10017 afii10018 afii10019 afii10020 afii10021 afii10022 afii10024 afii10025 afii10026 afii10027 afii10028 afii10029 afii10030 afii10031 afii10032 afii10033 afii10034 afii10035 afii10036 afii10037 afii10038 afii10039 afii10040 afii10041 afii10042 afii10043 afii10044 afii10045 afii10046 afii10047 afii10048 afii10049 afii10065 afii10066 afii10067 afii10068 afii10069 afii10070 afii10072 afii10073 afii10074 afii10075 afii10076 afii10077 afii10078 afii10079 afii10080 afii10081 afii10082 afii10083 afii10084 afii10085 afii10086 afii10087 afii10088 afii10089 afii10090 afii10091 afii10092 afii10093 afii10094 afii10095 afii10096 afii10097 afii10071 afii10099 afii10100 afii10101 afii10102 afii10103 afii10104 afii10105 afii10106 afii10107 afii10108 afii10109 afii10110 afii10193 afii10050 afii10098WgravewgraveWacutewacute Wdieresis wdieresisYgraveygrave afii00208 underscoredbl quotereversedminutesecond exclamdbl nsuperior afii08941pesetaEuro afii61248 afii61289 afii61352 estimated oneeighth threeeighths fiveeighths seveneighthsDeltauniFB01uniFB02 cyrillicbrevedotlessjcaroncommaaccent commaaccentcommaaccentrotate zerosuperior foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperioruni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200BuniFEFFuniFFFCuniFFFDuni01F0uni02BCuni03D1uni03D2uni03D6uni1E3Euni1E3Funi1E00uni1E01uni1F4Duni02F3 dasiaoxiauniFB03uniFB04ÿÿrt-4.2.12/share/fonts/DroidSansFallback.ttf000644 000765 000024 00013417450 12555754775 021202 0ustar00sartakstaff000000 000000 €pOS/2ÚÃî4x`cmapÈç`|àÈcvt A`fpgm°!Y°ADgasp. glyfö³äèL) ¦headæ»YÀü6hheae4$hmtxé’ÙGØ^¤kern>‰Bœ.ôloca ¡¤¬Ad¦èmaxpªõX name_ ‡ .ôpostÿï .ü prep€ˆ)AL#ë-_<õ ÃGxgÃK¢“ÿéÿ¼  ÿ¼+ÿéÿ䙩¹¬'/þ³¦$³¦z > €¯+ß|û1ASC@ÿæÄÿà D‰· K’CEg¥Ó ´:M M @R E`   EE mÞœŸš¯‡~±´W Eÿé”~ß»¾”¾—… …³‘âŒ‡Š N`Nˆi”1ˆ –w–‰T…—BBÿøBå—”––ft W—{¿€}q [=[ E|”&U R Õ n UU”1¨E5UZ½½½m Ú¯¾”šˆ ˆ Õ ‰‰‰BÿýB””” ”———–ˆ –‰‰´—BÿþBœ …~M~Bÿÿ©»—”äé…W—” #”$B”./”œŸ~‘‡Š ´¾W ”‘ß»ˆ ¾±”ˆ …‡Ä ŒÄ ¾ –š}”t u—‘Tƒÿþ˜„r”¡”—s—³†ÿþ¾Á‡œ”Ÿ~¦‡ÑŒ »»”«ß´¾±”š…–Ä Œ³©ÿÿ¨Ó”˜—ˆ ’‘fŒ‰¸v ~Œ¸”˜–wq}²€š–ßá®À‘vψ‰€  --]]|Î+ : g +P-¾ ½½½½B:664€F FFp]4J7tbD:FlapBFSGF<IFEGFphFFFG-D9=FF4:E@DP*4,I,B@36-02;gBRAbEFJ;AB;CIBMJ"C?F;SMFC8#:8JMwEF821'41221 ƒ!R ‰EšÿýšÿýšBš7šÿýšÿýšBš7šÿýšÿýšBš7šBšBš7š7šÿýšÿýšÿýšÿýšBšBš7š7šÿýšÿýšÿýšÿýšBšBš7š7š7š7š7š7šÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýš,šBš,š,šÿýšÿýšÿýšBš,š,šÿýšÿýšÿýšBš,š,šÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšBšÿýšÿýšBššššÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšÿýšššÿýš†šššššššššššš#š#šššššššššššššššššð ðJJ00,,aE%WJ€2€6€1€6€#€6€.€.€)€)€+€+€€€€€€€€€%€ €€:Uˆ Bÿø”—————C #”1”1#³ ^/€==p=FUUUU2½½M, 8 : I 8:PBFw2#*€ *€ € ::::**-F<CB11.-€ €7AA4444FFFF""FF1111-iM"€<€€<€+€0(3€B€+¥;/1?++<<&&??-**&"""      %01+2$&(³ÁDD0'7%,+($!,VU <888'''#&);)!9:+8%$&3*h#FF #&"(+7D)   &+!!2"-%2"""$#""13&&"7##-1()j[iZG7F2v%!##BC' *B,gI  ..            "  "    #+*%pw-€ €€1€ €€€€€€€€€ €€€ € €€€€€€ €€ €€€€€€€€€€€€&€€ € €€€€€ €€€€€€€ €€€€ €€€ €€ €€€ --- ---  ---  ---  &&& &&& &&& &&&11&&11&%11&&11&&11"#11##11"#11"#********11%"11%"11%"11%"22"#22"#22"#22"#11"#11"#11"#11"#-------- "  "" ""  #"      ------- $$ $$ $$ $$ # ##  ## ##  ## ##  ##  %%  ... .. ... .. .11#"11%"11%"11%" .. .. .. ..********¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼Œ”šŒ”šŒ”šŒ•šŒ”š¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼Œ”šŒ”šŒ”šŒ”šŒ”š…‹w…†‹…“‘w…‡‹…”‘w~„”‡Œ€•‘w‡„“‡Œ…”‘n~„’‘‰Œg{^kpp~lju{^llo€toly]mmo€uolzzbmnp€soh~z\moq€tq‰v‡Š”‡Ž‹•††€‹•vŒ”‰’€Œ—v‹‘”‰”€Œ—v‹ˆ”ˆ”ftw\kpz€kwfu}^krv€kvfty]mrt€kvbwycmrt€nvbvybnoo€lv¼¼½¼¼½¼¼¼¼¼¼¼¼½.....................&&&&&&&&&&&&&&&&&&&&&&&&$&&&#&&&&&&"" $&&!533252325235225332522)%%.)%%.)%%)%%)%%.)%%%%%.))).))))%%)%%.)%%521155215525525221552551155114414445511551)%$,)%),)%%)%%)%#,)%%)%%+)%%,)&&)%%)##+)%%)%%+)%%+&&&&%%)%%+)%%)&&&)%%&)%%)%%)%%&)%%)%%+)%%+)%%)%%)$$+)%%)$$*($$*(%%($$)$$*)%%%%%%%%%%%%%%%%%%%%%%%522255525255555252555555155515555555551555)%%-).%-)%%)%%)%%-)%%..+#...#........)#---#"""!!"!!!!!!111.111.111111111.111)%%(*%%)*&&*&&)&&$*&&)%%%*&&#*&&*&&*&&$)%%---------------------555155515555555511555...+...+.........+...0+0+0+0*0+00+00+0*0*0 F b? gS]D KK JADF m zc Ko[` K_]ou y„ŒŸ ))))k m D v m ¢ ~ i r z [ ny€‹ U Xi VW ; @ L>VG‚++  “ q N`[a\KeV‹lZs'  O Ib m [KUg]JE  :W |U ŒZ €UY >— ZUJ yœSKb   ! †L# P YM?SlR D@€ )   G^  # M ¶ FF6Œ‰ N‡Q Y `I aJ­@ q VN ' ±6 A+ J’ ar c LM€WL G>BP s V ]N a ¡— b , 3:l6C> %^Z  ƒ L#k RFAHN rgDf#+  d\ M[ h} †S x q y n‚ eQ   NV N U«s ` \Q[  Y &AHuQXN ^ngXj a b>WEI >H T_8F 1  L`NNKG?Evˆ… +  } H2uhP zxDg TlNoH >œc lY› z !!] ej t d – ˆ  ] ˜| U a €hY"bS Q CJ 0} M sŠ\ f ‘`k ® †mq|kqpr u bnFD ' Y g ?@F+s vHCk M p ` dA ª  NlQMWRISF@K CKBIMMUOJR LJ [LGCGI y : I › . arQUaX^fUœyTVOE@`OWZPAP>•PCIQaO! MÄKSPS8 o‘# wdd`bHU RphbuTa FldVjclVZgP MnZVR bYR\USPE `PH\NTRUF ‘bRVy”VWdYMMW@{d  `rUIFG\\R B5H@@ Y O€ «E €TG: owbee cgUz^" ia  Œi k a b i Wb }  €guif su _" Zbw ‡ t LZg LIT „gmX[TV ”f vum n  | ‚ ‹R dJZNz ¡6 > ‚ $ y W dvr^„ L” 4 QÔ }ou{wJG TN + wrZ`” m ƒ \rw~mpnvšI [NJHRqQ  O bX ypD@  •B › wq_ Ÿ qK2Wg Š `=K] ^o 9_ uekdCes n d` im`is V 6 U_ *blH X kB67†5I?@ Bš +  @ †T}uc nH """7  € Š€ |„ ƒO oNŒm˜ Tpl M& &¥O ‘ L[y ‚ KG 6i 1g_L`H U I^y S ]EZ? \   `yy?W\/? [ƒ n wv…iZIF @† s  3:7^LE? G8.dNUNX XAGCV  hbf l} v’2V ]a Yj  ›GER Z_dknU=nMfaIR ] L' Y ‡cZ K5 cj ©H  N †u)* mq & 440,Tz g Y dtXKi =39 3;A<-==:<97K2-<.2_ G56= +)-; Y`d W a f  Pd mrQ [[\ƒ J pUO7V = llmtTxm 1€r so .……|Œ  o xl  GV_[nU  cWJ„  [&\‰@¾T™V }s 9Ze™u K ™Vi—SWjm[G [p1f p }vd •   gs -•=`G<: XKHU ; Q Ef\‹CR ”J OeE'] †XPwS |{K‚W 6] 5455 y~ ;662855=  $ gj ,, jeA‰)E[gWR q X  k`V@/ªK Ž` o u–  ‰glJMc:„’SEB|  YjPZ ™  SEN@CEmas d qh Mˆ [k  † ~¬©y [ @XWWf€r hfp "r_`K  yS… TJ[u mqFJ†H\ )GE‹]  ¤t   s  R ¶Qn y 7+yW  '! " 5V  =lwljpo~qvwJjW+\] a [€GUO8’E2kfelTN a Q?eo’U _†¦J ‚g mu .D Ih3H\934/7b.< 98;  X s[jr Y r"r^TCfX š{X>[ tq uizvxw =V` Fm„ @ sx[d+J{|_a R \ v7 RlIg]gcUb ] 8<j4:M QAlK cL] n«¦n¡TB€| _K W_ Rfi X[ Uz—mWFYdKK¢E@fUm‹ i~bTo}y3@zCUNQRD@ aV jI ipc”$ $KRgr kŒQOdj6f e  dPhbJB^gcakaXk`Vb QeeSngZZG"*#"_&V"p[]  ‹Ui‰F[r‚|„\jsmp    Kg3W  z  WIRx p ! # ! !UCq‹8\FMLH] \ … ‹zwzhotw  a \ W} : YHa P ZM O ]VOZLhu  cNkuN[hN ` bCkƒ uq ;;gg &C  A; -K 6jž9 o 0Rl€w vmVg„v9 : }7V KoˆqQTOW+ _ flm WC5`.m ;\gm[’s JYFgJ OYj ˆ *k} ƒ[š YY¦ C~D[c Zio €r X ‚W‡;K j9A¡½W žbARž žERž žaP s[L R_? }| e $*+rC FUb\mZB bi ¦ ‚«r m/  Fd ; j[TbPZoFW€ k`r Pu l KJe:\ EKJF B\iet|XEyurrwzyghmg`bZoHR†M Š][ •PR SSPvDHj^R MDWƒ}m} ndnudYP®glc\kfb fS__ \ej i 0 . 9”/D "  @•h  Of\hd UQKPr\nY  ~cW]§? #Tme“ qr Kdr[HŽ^ vi P]\KKE[ +F" HTbm<=fYgis ˜ƒbepM] B]E_iji Qg pgm q b hB DRVVžR e )wXeK Gs GT 6W8g_f {r] tw  GO>JX k€ †9 cN gfea€T–L Œ i &w N Q ?o K ObYh gCVaIA*&~ _.edu tŽc8\kH mgu[b? 2PXc[m [`Xa\BgG>MT>@SbJhdven[z€ )  1/? wvK _ hr'~ƒXD_ l qo GQWQAe8TKn e f Fc=C P ^wn'(ŸMZw+“+~a }„ (U\EW d I I]en  spui … ^  WKaLepH`kb^k uEE0X ><50 42/8 km=JN ?n J\U Qg š i ƒƒ w|…^QPRR 'k B†LoyS^fGr } €c u^efKlJ Bz ` bMI=Y> V}f ar (dbPi$ |9B { E˜B… !" _lvf dkeIU m€ pkgpQ d: \X[SYc ’ o  V ok q ‡uŠ RG^ w RLn it Pu?FP[^  fmNX^Im weH•>7| ahi G]`k kMf vrƒsi!ilavkgjw_hgdmgmxHtp‹,+gXG§Ž  O g^eQmi?Bˆ?‰Š_W‰apn‚O^ gOKg ^ [xvy  r_Suuutiomnloljpf^kg ^ niZ\iq c?K I]U j Gp CP  jtLI_›„sg}|  n ] @ cXxy GPM adm*xsu~ olk pq a AyytŸd <10\MauI_f`iqqpe_q[Z[Mfb\  YdG JM u_^XdMhh|Ur gq~‚phˆz waZX 8 HIW`E` c ;U\ p RmT prjKahWfpRaKLFNV`kŠ €G ^^• ‹MaT‰ YrYV  Eƒ Qnf pNzK }5U-^ …QE>;‰ C l ~VJ qtyS,^h cGhMppf_NS TƒhuK?Vi_OUF r t ioZFA•;BEV +7 Zdof Pm|r P  DR} qvrlqV^ w `IXJfodly?GZ‡€ dQ D\  LN#^l@l_  ZSlG~ iRH<…{ Dz i2d ) aH`c› b u X M<M Lb?QQtLO XDr _ TX9 elz\WmQ Dg y l=MdnV V bF Ee^X =; `L  WeP_ozR T]{i=k^H|Xp TL`[ogOUzƒŠ  mfqc] Qo tR? v]…i;~NƒBBA–– [ K/K?·u ‚N J•mf Wij  ‹ Œ TL aXDC a  g @ ˆ O F Š: LU_8W C yJp949 U ^ hhd lW^F‚ |_d_ ps}N sld{~}€ƒ|†{OQn„€k p£sokwatbžg{ ™¢_pqZc‚~u  TibD KI_ L ciXu`c] fm ?36D BL[L\fSinncpvftmra R`Lne Ov†Z  P‹bPƒa   GgK mkVE UaROVI zƒ uyo‰qpa ~~yqJU`k ›HP ~V] EktFPk [RZc rk G\bWOLW! qaTFY€ qy{m EHEJJ \N’_ƒH^p*Sq+ ‰aQkmn Hd 9A l[IPT lU[fGh s~ {ƒh YF i e  [aN^SZJfxfoNJrfGC RDZ W45gxS;`D‡RM FPA? spxoq €Z_ImfNWVC j vG] BA\ L Y`OelT Cm Y> UX ][ Q €Fg6 i u|A€M‰Ž LZU€I‰ __k\`gEL 6| r~vx~ qwp kHLE ; q @O\ aidK —T] egZJl‡ƒxxwwumguogvrkd^JWs\Glsrk]T SIF[ {M_e ak}‚ ‚ƒ‚ [ej™œa–^] CLPTc`SKŸAF T : F ‰ ƒ’G\k a DQIhikO` ]rV \ dKT 3J_u 5„AGS_…wniY_ PfWr}c&h ‹ZE :s` 7›o  G :;FSF>XIR-?aqmi LIV -\OAisq†` c \O6Z cq 9 E[ i c mmW4Q_] A Xh Gk?5 KUeKraUa @p`i?y €YJDPL\ Itk5T[GgxE@ [l SeVMC@O Z<l gU^[QMIS\k P7[eT_<m U; _G dqYq]ldQG QN]T§_Œ\ ]QkDNf   ~gMt  _e K TAQhGWaTp[ aDoF _smV7T>B<§ Bk xJ bK: _JJhG] ^dsT5 F u`RBQQe\cp0?˜< ^_`^e\WX VJb T DTmˆXbReMU m0TMl€ €z~§ER^d\4E`_K Wa X  R@^fnUE\ `b BC  i/ Y\LN7UM E JMSGLMk+ O iYTrmFb_a uZ]^h] ˆ\\WQRG [D@EMZdŽ@ gff_eT`{U]dbZ`LNS`“^dY@RYaXZMRTVH>\UaQVX`UYSJVFc ^cJSOCLMUcFMX@G NRI KQmm2 xfl`_ c`RKKBDFCJDDHBJPcZ[MLKMITF E† xk e    !     ­PKOA`U?  l;;[K‹Va7 OULIGlXPKE\KIAQRM[nl KCMUEe[gUKIL_W HDIY@CGIMFK@DS@IN~L\u‰2D%C% {Q[`gLE>@F@FMES@VJK>@y|m€„€xrvykpk‚{xptq ABB=E:8  Oja     ^imi` rtl !udtp_tb   w   I T_YAq\QJYY€ QgdT´) [„[KgYU[XWUK YUJDR£ PQQJ?WYRZZQV^LIF>OLRRYRRROVK …€…‰~€\Q : W`WSUI^]aTi\W`]`N`EIX?RIWPXXU@YPUWS Œ`k`[`deZZYkbX]XnY]ke][__X^`X_[ r cte` d`^`c`aRa`rnijeb  [ `_Mƒ!!&%€hl_]Ag `USV^ UA Yu LjVUf¬TYNcbg\SS]]UB\YNG]YUCQbl[NHZVYOS…\   qnqnnpkot d `ofkedZttvlqq{ -AM[UYPcDUPR gc`^M t   GLFRNQKBg`^DJbJTIJGlJYS[G lS^  Q?]DFSuzrllunnwillssvgnjpvxBCAW]Z 89IHTH;;LMOMH@EŠFEBIBJG @;PBDQII8BCC>>BA?>ExLKO?HGLBB8A@8L>C:>@ƒEI:<MA?Œ4W@B>CAA@:N[  WQibg"\\K| | [Š Y,\f+‡ Q^]W_Z+[ l Z kigkk_ei l U\VV „€ jO“on    # m Bh || ¥m `lotemjrfdpogea €}xu fW   !!!!!x s{tsvtn “ldJ^^ET c^ ltai[gm hfh^fp gk v ‚ } £[n`†`ESYOZOZ_cOUD@XTRXI ‹\UWJ^]EKLMKL[JFJ;7N    NHQOO?@LeQ‡5VG[lep`k^Y \[ ^U?R]eluŽ 3 i_p{RCL| ws‡stnl w{kszproyt|dnbdfZ ckgiankchgid`e Ifu [_KE Igts[kx p] lqIBIK  +( KKŸ$Jv M\Jn _`MV U_cao^H\QXGPX'UqSZ JTZKcZeJVHRbZ`PraQXom`hmfi`c] bj_ W]X\z]_T‰ lj_YZ P  u  zt  zy       t „ˆ |qz zx R» #008 |3…_Y Q}ŠC I —xŒ;  H j]l ‰ G  a u u z  z @  ^` Yf    ¤ Xk”QSGX]Qkfa_]ixql]`‘ |p{~šrzv r    s  OE;   Y[[Ÿ"b[bnR Mb R{‚ Oj$R`Rga` _V R hg _’WL QTVHIEUP«XœII € w  RSRUFSXS^fo¤]t[žcJ?^VN`ŠQQ[›  I^?>”N{=BGs;€—ŠB5Œ?DGH6C6>GGM €Tb)N}4Z ˆ”I^ k q,+--)`=JW& dZDYU\VOR[o\ znf \‚\\OsU b] r x!hea]jYhnmeg•f`kWƒb haXƒ \ lZ[hkbRe^l …‚„+ ) urtmukkrc ga),igf e_mw¤¢e q  „ [8R_K[:Yb CX_U_faz:LS^fZPFA;MELGUT b^OQNPfMR{ b˜`— m+ cfLJL@OLL IJCY[cgf ^_ TY a š ±YOYRZgNX PPTG O;^\K QisGXKNSKU ZXC8E<EKUchR\U‡]YSV PDGDFS‰J•DBGV”ABD8DFAXF`tUdbiblgddjtti]ecfliscegeaUD=L`_bb XUYR[ `f ~kc Yqnb_qmikb d /    Xf<8HU`  g¬ a AQUFG7K |U59 ?BZN TGF¨ŠN M\\SJ’mq§‚g\X"bhdk`d Z±£¬°¼KWHS MDTV]VJCQCfaT%aaGN JU^adnn>M UObkpmZA9Q SLY`M\ IR?[jp ROpe?R€?Q 7?phE9 ‚Dj`iq_\Z^d]d[¥\TbF [dh bgiVEm]O U[Metm?YPU [g^ls O`   G{kŸxw’c`i [` ^Mbk³ªdG V_XTQœOxFdkUfU_R bh lb^Q ~ r¹RPµ mke]gg^Ri oeqhpNI\uz‘   Wj‚ e_QDY O\L?vor W 5C & \Za dZU^S9TPbdbYD J E j# a  RIL\e‰Ki a [\fPJ PciWdTQQ`QdkVCsJ^amv XRd   eSObmyUEEc_RZ ‚G lgiS hbbX^dm€w‚od ] Y`oj`nue`XeJpr;pj<CGN ` vO4     v  \P0    P     B8 JOGSFF@>>?IAUA@EDBC>{>U>B:<CBGG9    # @ wK ?BT 04  m! !/!;5915318B2<@    A\=;37893629,2-26<:  ) U! Q aBQ‹):V>LXPK JMP ZA YOSRQ†FEbN XQKCHDPGI NHKHKV>ONnGB LSLD=O7/::8?3403512244.046,16212041- L  ^ SLT !PP]IYKRS(3 J Uz;  lLy ?O ?      ) -  #'%%-w )cFj`[OKY4 x{Q=[YUX3_TUYQVRGY /  0' *(6+ [      V      $&ƒ0  s ] 3_8,+B?<BD>C>?78:&jCjsi8.-!%9c$   V S  ~T †d S #%"$7" Res+q87;?B0@?4GK3136911784).?96<=42456<F5+A5&?A*74:39.538,69:2833,81264.3513k ' e` W"w X?JGL=DK> : PZ3  FJMa I 3 X A[@ R-_ G P +  H| . ‚NzM ‡ryG HK0 JLK /'( 8 BLC;6Kgm`MHX ` ILU_SX_EW ySH TWiTGRT4CKUKwKINKHOR~OKIKE@lKUTRN‚ OW=MK@TLGIGHKb     tmomkdhnckhc\^i,"1)b  P 2 FS2I "   … \> V yURSgaOZ/MUE]R T M U K BdIPF}F S‡FQ mLKHMS„T_HWN E ‚S WSIW@•P\MuS _PRY[EZ „ @NWI8]]Z^^ HQTGQ J@ NORNALOAMM T:  30   y!gf aP_a]]$$ L ŠLY D2CK@@FFPI_OF0D98J‹^LCI1LBVb<MDB>;N<?ME:7F>:EJCADyEaGAKA?<FBu2@5>>CE=7F@C<K9?C9cjF@A8C.L4@A6@J<Eiq7@EF.>8}|8CP:@>>:?E=e 9DMB;DB69C6@5KA694 ;MC56A??_@9^?IB=E?5i@6@<9<= %'c  ?  \ dR V†  |wr% G yO3Q G   Vf5~ 11c Q¡¦`TT NL_LKTPKE GN§¡ÃCJV[S[‡JKt_GOD ƒLFD ‡ z"      KYPKU]^IDOHIN<R;ROJEHNX9LNKPXLOIY=E^COC>DI>GGGQHIKLLHOIXMMHBHD@QMDICID?=:RJ9DC?A8E@DGCCL;BFLGF>JENDAODNH9=>=IHR<;;>:@AD?9?4:œ5DHAC=œD " J       2  OQYƒ"VZ k Sfe LN4 V_ˆ-WO ][g XSS 8  J  kd RX0 - - #   , i  … && !      †    ) O+ %R m a &   K  N Y%J G W  |  K8    V       GN Š3v a \iTa0T ` 3•fYZ{ VOb‹Q UWB^ZRW‚O i      T4  uj t  €  4icx    #'  ka`(g[9\dSfd2T _Q\ R w   '  d *#     "      #* $$   &     S  H  Z  fK  ^  NJ TRZE    f*)  Ie d a"krA  K  J   P  I  N        gZy >UD k Q  )  J" )  b KGF\  J    k &  1 @ †    n w T        I    A  ‰         F         „   {    .4323& ^ ] &c_ h˜ ‡u]  3 if_d^. _   \ c1 _   QAFJIACB< ' h_ _' ‰W  \T‡  z\QVYOGY  O !u v‚x fk 8_]\ _U‡TUWVvX…#Y[` eY^MTEFRUKzr 5 +      4\c1 M 06 x“K, : p m•ƒ„wurnk{{~mwoskhdwm{jepcfqkemefgjOY ŒYk‰UO V]ORX t‚RO^T\ZZ_    ^ ^  ^ GFZ) eU\HNJ[LNUMYRMZRKS[OQQMbJKD]GL]bPMDNQJX[KSHQPGFK^[NINNIDTEPZNIVLKFOQKKPEONBPLGMEVEMPUBKHJEOBPEGMLLMJMJICJCPAMFMACKLPLEC m ]  no˜lqorf Gv[ OoiH XŠ/ \bZ^[‘iV†\ `^fY^ W‚‹lU__XkZF9:9@751-:17<K</>=6;81610=GB„/83+@3859;15181>6.308/.596/E;O?<8<R=;:H@>7<I45L?H;1669;77gZXYY}MN}uV \2  "   U _ Y    T    — B 52Bm aS –œƒ‹—’ƒ ƒ……‹ v \‹ Skkon ]m_gfj  a‘rf   U   .+ ;‡‚ƒƒw†€~1w{' Kh nbkg`d@œŒhkp7/ = 5  w  tn  7 ((d 7 ;= 2 )/+(+,0;*55+&555506  ‚p>   ! " G  • f N   \  AHG ]    51 \    X   9=c $#_ G5UC  c X 2/  A  -   VF \I]f   @  u   Z XNM V FB ii`                                                                                                                                                                               &                                   ""                                                                                                    "     *                                                                                                                                                                                                 &                                                                                         !                           ' "                                                                                                                                                                           " "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ༹ ~  ¡¡b¤¤c§¨dªªf­®g¯¯M°´i¶ºn¼¿sÆÆwÐÐxרyÞá{ææèê€ìíƒðð…òó†÷úˆüüŒþþŽ‘&'’++”13•88˜?B™IKMM RS¡fg£kk¥ÎÎâÐÐãÒÒäÔÔåÖÖæØØçÚÚèÜÜéÇǦÉËëÍÍîÐÐêØÛ¨Ýݬ‘¡­£©¾±ÁÅÃÉÖÝOÞQQ        "  $ !& % % & &( ' ' 0 0) 2 3* 5 5à ; ;ï t tá  ð „ù ¬ ¬,!!ý!!-! ! þ!!.!!/!!!!ÿ!"!"0!&!&1!+!+!S!T![!^2!`!b!c!cø!d!k!p!r!s!s!t!t!u!x!y!y!!™!Ò!Ò(!Ô!Ô)""*""6""+"",""/" " 0""7""8""-""9""."":"" 1"#"#4"%"%3"'"*5"+"+;",",ñ".".ò"4"7ó"<"<÷"="=9"H"H<"L"L:"R"R;"`"`="a"a<"d"e>"f"g="j"k?"n"oA"‚"ƒC"†"‡E"•"•I"™"™J"¥"¥G"¿"¿H##K$`$µž$Ð$éô%%K%P%t^%%ƒ%’%•’% %¡–%£%©˜%²%³Ÿ%¶%·¡%¼%½£%À%Á¥%Æ%ȧ%Ë%˪%Î%Ñ«%â%å¯%ï%ï³&&´&&¶&&¸&&¹&@&@º&B&B»&`&a¼&c&e¾&g&jÁ&l&mÅ&o&oÇ00N00100R00100S00c0!0$1 0%0%f0&0)1$0A0”g0™0ž»0¡0öÁ0û0þ11)111Ž@22ž2 2)1(2122122929142`2{»22×2£2¨1533Ø3 3 Ù33Ú33Û3"3#Ü3&3'Þ3+3+à3636á3;3;â3I3Jã3M3Må3Q3Qæ3W3Wç3{3~1;3€3„è3ˆ3Êí3Í3Ó03Õ3Ö73Ø3Ø93Û3Ý:MM@“MµMµ@”NN1?NNeNNNNN N *•N N oN N N N .NNNN*UNNÛNN1@NNNN*VNN1BNN*WNN1ENNSNN*XN!N!#N"N"*YN$N$1FN%N%/N&N&—N'N(1GN*N+1IN,N, N-N.1KN0N11MN2N2N3N31ON4N4@•N6N61QN8N8¦N9N9jN:N:N;N=1RN>N>!“N?N?1UNBNB1VNCNCÚNENEÀNGNI1WNKNKXNLNO1ZNPNP%ÎNRNS³NTNT1^NUNU2NVNV1_NWNW*ZNXNX–NYNY(N\N\1`N]N]ßN^N^1aN_N_SN`Na1bNbNb@–NfNf1dNiNi@—NkNk@˜NmNm@™NpNpüNqNq@šNsNs@›NvNw@œN~N@žN€N€1gN‚N„@ N…N…1hN†N†”NˆNˆ0N‰N‰=NŠNŒ1iNN<NŽNŽ*^NN*—NN/iN‘N‘*_N’N”1lN•N•®N˜N˜ÕN™N™•NšNšÝN›N›@£NœNœ1oNžNž#iNŸNŸ˜N N¡cN¢N¢@¤N¤N¤fN¥N¥°N¦N¦eN§N§ÐN¨N¨ñN©N©@¥N«N¬@¦N­N­*`N®N®@¨N°N°@©N²N²!¾N³N³@ªNµN¶@«N¹N¹@­NºNº‚N»N»1vN¼N¼@®N¿NÉ@¯NÊNÊ1yNËNËžNÍNÏ@ºNÑNÑ@½NÓNÚ@¾NÜNß@ÆNáNá@ÊNãNã@ËNäNä*bNåNå²NèNî@ÌNðN÷@ÓNûNý@ÛNÿO@ÞOOîOO@àOO @äO O@èOO@ñOO©OO @ôO"O"@úO$O'@ûO*O-@ÿO/O0AO2O4AO6O6AO8O?A OAOAAOCOCAOFOIAOLOWAOXOXâOYOY& OZOdA#OeOe,OgOgA.OiOlA/OnOpA3OsO…A6O†O†&O‡O‹AIOOANOO’AOO”O•ASO–O– O—O˜AUOšOžAWO O¡A\O£O£A^O¥O¯A_O²O³AjOµO·AlO¹O»AoO¿OÅArOÇOÇAyOÉOËAzOÍOÑA}OÓOÔA‚OÖOÝA„OÞOÞ#ƒOßOáAŒOãOæAOèOêA“OìOïA–OñOñAšOóOøA›OúOúA¡OþPA¢PPA¥PPA¦P P $$P PA©PPA®PP1AºP3P3AÎP5P7AÏP9P<AÒP>P>AÖP@PCA×PEPQAÛPSPSAèPUPWAéPZPeAìPhPpAøPrPxBPzP{BP}P€B P‚PƒBP…P…BP‡PˆBP‹PŽBP‘P’BP”P–BP˜P˜hP™PžBP¢P£B"P¥P¥B$P§P©B%P¬P¸B(PºP»B5P½P¿B7PÁPÂB:PÄPÈB<PÉPÉ&ÀPÊPËBAPÍPÏBCPÑPÑBFPÓPØBGPÚPÛBMPÝPÞBOPàPàBQPãPêBRPìPñBZPóPöB`PøPùBdPûPûBfPýQ BgQQBwQQB€QQBQQ"B‚Q$Q&B†Q)Q*B‰Q-Q.B‹Q0Q5BQ7Q=B“Q?Q?&ØQ@Q@1žQAQAÇQCQC èQDQDðQEQEBšQFQF¼QGQG QHQHßQIQIþQJQJB›QKQK&òQLQL^QMQM'QNQN1 QPQP1¡QQQQ_QRQRÀQTQU1¢QVQWBœQYQYBžQZQZ$=Q[Q[BŸQ\Q\1¥Q]Q_B QaQdB£QeQeçQgQgæQhQh^QiQi1¦QjQj#†QkQkñQlQn1§QpQp1ªQqQq/QsQs1«QtQtQuQu7QvQv1¬QwQwQxQx§QyQy1­Q{Q{1®Q|Q|êQ}Q}[Q€Q€1¯QQB§Q‚Q‚/Q…Q‡1°QˆQˆB¨Q‰Q‰1´QŠQЦQŒQŒ¥QQ‚QQ%:QQQ‘Q‘ Q’Q’ „Q“Q“ÃQ”Q”B©Q•Q–1µQ—Q—BªQ˜Q˜1¸Q™Q™B«Q›Q›B¬QœQœÔQQžB­Q Q B¯Q¢Q¢B°Q¤Q¦B±Q¨Q©B´QªQ¬1ÀQ¯Q·B¶Q¹Q¹B¿Q»Q¾BÀQÀQÀBÄQÄQÑBÅQÔQÔBÓQÖQØBÔQÛQÞB×QàQà¯QáQáEQäQäBÛQæQçBÜQéQíBÞQïQñBãQóQó1ÆQõQõ>QöQö(QøQøÕQùQù«QúQû1ÇQüQÿBæRRÐRR'‰RR×RRÀRR BêR R /%RRBðRRBñRRRRBöR R!BÿR$R%CR'R+CR-R.CR0R3C R5R;CR=R=CR?RDCRFRGCRIRLCRMRM#¤RNRRC"RTRVC'RZR_C*RaReC0RgRgC5RiRuC6RwRxCCRzR}CERR„CIR‡RCORR”CVR–R™C[R›R›éRœRC_RžRž0€RŸR¤CaR¦R¦‹R¨R¯CgR±RµCoR¹R¹CtR»R¼CuR¾RÃCwRÅRÅC}RÇRÇC~RÉRÉCRËRËC€RÍRÍCRÐRÐC‚RÒRÓCƒRÕRÙC…RÛRÛCŠRÝRàC‹RâRäCRæRçC’RéRéC”RëRëC•RïRõC–R÷RøCRùRùYRúRú]RûRüCŸRþSC¡SS>SSËSSC¦SSuS S C§S SCªSS]SSC­SS-SSC¯SSìSSC°SSâSSC±SS$C³S&S&C¹S*S*CºS-S1C»S3S4CÀS7S7CÂS8S8ïS9S9CÃS:S:ÖS;S@CÄSASAôSCSC¶SDSD1èSESEGSFSFCÊSGSG¥SHSH«SISJ1éSLSM1ëSNSNWSOSOCËSQSQ1íSRSRmSSSS USTSTCÌSUSUÐSVSV1îSWSW"´SXSXiSZSZCÍS\S\ùS^S^1ïS_S_CÎS`S`øSaSb1ðScSdSfSgCÏShSh1òSiSiæSkSk1óSlSlCÑSnSn1õSoSo0SpSpCÒSqSqSrStCÓSuSuSwS}CÖSSCÝS‚S‚sS„S„0'S…S†CÞS‰SCàS’SšCçSœS CðS¢S©CõS¬S®CýS°S°DS²S²DS³S³ŠS´S´DS¶S¶úS¹S¹DS»S»2 S¿S¿ûSÁSÂ2 SÃSÃÏSÈSÉHSÊSʆSËSË\SÌSÌDSÍSͽSÎSÎDSÑSÑ/tSÔSÔDSÖSÖDS×S×2SØSÙDSÛSÛD SÝSÝD SßSß2SàSáD SâSã2SäSäSåSæ2SèSéDSêSê&²SëSëDSìSìySíSîDSïSï*øSðSðjSñSñDSòSò"SóSó2SõSöDS÷S÷+äSøSø2SùSýDTTDTTDTTDTT'VT T dT T ‰T T D T T xT T wTTvTTuTTD!TTtTTD"TTrTTD$TT2TT!D(T#T2D.T3T32T4T4©T5T9D>T;T>DCT@TADGTBTB"TCTCDITETEDJTFTF'DTGTGDKTHTH'CTITI2TJTJ&9TKTKDLTNTPDMTQTQ¤TRTWDPTXTX&!TYTY2T[T\DVT_TgDXThTh']TjTlDaToTxDdTzT|DnT}T}&T~T‚DqT„T„DvT†TˆDwTŠT’DzT”T–DƒT˜TD†T T "pT¡T¡DŒT¢T¢"ÑT£T´DT¶T·DŸT¸T¸!TºT»D¡T¼T¼'LT½T¿D£TÀTÀ\TÁTÁ'MTÂTÈD¦TÉTÉ!üTÌTÚD­TÜTàD¼TáTá$TâTâDÁTäTäDÂTåTå#ÿTæTëDÃTíTîDÉTñTóDËT÷TøDÎTúTýDÐTÿTÿDÔUUDÕUU DÖUUDàUUDåUUDæUUDèU U DëU"U$DìU&U'DïU*U*DñU,U9DòU;U<EU>UAEUCUEEUFUF’UHUSE UUUWEU\U_EUaUgEUjUjE#UlUnE$UuUxE'U{UƒE+U„U„22U†U†23U‡UE4U‘U•E=U˜UšEBUœUœ,!UUŸEEU¡U¥EHU¦U¦27U§U©EMUªUª28U«U«EPU¬U¬'lU­U­EQU®U®'kU°U³ERUµU·EVU¹U¹EYU»U»EZU½UÀE[UÂUÆE_UÇUÇîUÈUÖEdUÙUÝEsUßUßExUáUìEyUïUïE…UòUóE†UõU÷EˆUùUúE‹UüVEVVE”VVE•VV E–V VE˜VVEVVE¤V#V$E©V'V'E«V)V*E¬V,V6E®V8V;E¹V=VBE½VEVFEÃVHVJEÅVLVNEÈVPVPEËVSVTEÌVWV\EÎV^V^EÔV`V`EÕVbVfEÖVhVi2RVjVtEÛVvV|EæV~V‡EíVŠVŠE÷VŒVEøV“V•EýV—VšFVœVFV V FV¢V¢2^V£V£FV¥V¨FVªV¯F V²V·FV¼V¾FVÀVÃFVÅVÆFVÈVÎF!VÑVÑF(VÓVÔF)V×V×VØVØ”VÚVÛF+VÝVÝF-VÞVÞ¨VßVßÜVàVåF.VçVçF4VêVêkVëVëF5VíVîF6VðVðF8VñVñ2sVòVõF9V÷V÷F=VùVúF>VýWF@WW FHW W jW W FMWWFOWWFPWWFSWWFTWWFUWWFXWW¼W W FYW"W#FZW&W'F\W(W(TW)W*F^W,W,F`W-W-îW.W0FaW3W4FdW7W;FfW>W>FkW@WBFlWEWEFoWGWGFpWIWOFqWPWP'ŸWQWQFxWRWRWWWWFyWYWbFzWdWfF„WhWkF‡WmWsF‹WtWt2WuWwF’W{W}F•WW€F˜W‚W‚'¤WƒW†FšWˆW‰FžW‹WŒF WWF¢W’W•F£W—W›F§WW§F¬W©W®F·W°W°F½W²W¶F¾W¸WºFÃW¼W½FÆW¿W¿FÈWÀWÀ2•WÁWÃFÉWÆWÈFÌWËWÌFÏWÎWÐFÑWÒWÖFÔWØWÚFÙWÜWÝFÜWßWåFÞWçWçFåWéWéFæWìWùFçWúWú2˜WûWýFõXXFøXX¥XXFúXX$ýXXFýXXGXXGXXGXXG X X!G X#X%GX'X*GX,X.GX/X/2™X0X;GX=X=G%X?XAG&XDXDG)XHXOG*XQXUG2XWX[G7X]X^G<XaXeG>XhXiGCXkXmGEXoXrGHXtXvGLXyXƒGOX…X‹GZXŽX”GaX—XšGhXœX¡GlX£X£GrX¥X¦GsX¨X©GuX«X¬GwX®X¯GyX±X³G{X¸X¿G~XÁXÂG†XÅXÊGˆXÌXÌGŽXÎXÏGXÑXßG‘XâXåG XçXéG¤XëXì2¼XîXòG§XóXó$XôXô ùXöXöG¬X÷X÷YXùXù1XúXÿG­YYOYY2ÅYY2ÇYYG³Y Y G´Y Y 2ÈY Y !ƒYYGµYY2ËYY2ÍYY2ÎYY^YYG¶YYšYYYYG¹YY G»Y"Y"+ Y$Y$2ÑY%Y%G½Y'Y'ªY)Y)¦Y*Y*•Y+Y,2ÒY-Y-(#Y.Y.2ÔY/Y/G¾Y1Y12ÖY2Y2G¿Y4Y42ØY7Y76Y8Y8ÎY9Y9üY:Y:GÀY<Y<GÁY>Y> ×Y@YAGÂYBYB2ÜYDYEGÄYGYG*YHYH ?YIYJ2ßYKYKGÆYNYNGÇYOYO2âYPYP"®YQYQGÈYSYSGÉYTYT DYUYXGÊYZY]GÎY`Y``YaYa_YbYcGÒYeYeGÔYgYlGÕYmYm2ïYnYnGÛYpYrGÜYsYs$YtYtGßYvYyGàY{YˆGäYŠYŠGòYYGóY’Y“G÷Y–Y™GùY›Y›GýYYžGþY Y¬HY®Y¯H Y±Y¶HY¹YºHY»Y»ÜY¼Y¾HYÀYÁHYÃYÃHYÅYÔHYÖYÞH-YàYáH6YãYæH8YèYîH<YñZHCZZHTZZ#µZZ HUZ Z H[ZZH\ZZH]ZZH^ZZH_ZZ HgZ#Z#HjZ%Z%HkZ)Z)HlZ-Z/HmZ1Z9HpZ<Z<HyZ>Z>HzZ@Z@H{ZAZA‘ZBZDH|ZFZJHZLZMH„ZPZSH†ZUZXHŠZZZ`HŽZbZbH•ZdZgH–ZiZjHšZlZmHœZpZpHžZtZxHŸZzZ}H¤ZZH¨ZƒZ„H©ZŠZŒH«ZŽZH®Z’Z•H±Z—Z—HµZšZŸH¶Z¢Z¢H¼Z¤Z§H½Z©ZªHÁZ¬Z¬HÃZ®ZÂHÄZÄZÄHÙZÆZÍHÚZÐZÐHâZÒZÒHãZÔZãHäZåZæHôZèZîHöZñZñHýZóZûHþZýZýIZÿZÿI[[I [[I [[ I [ [ I[[I[[I[[I[[I[[I[ [(I[*[*I&[,[0I'[2[2I,[4[4I-[6[8I.[<[@I1[C[CI6[E[EI7[G[HI8[K[NI:[P[P/[Q[Q[S[SŽ[T[TI>[U[U3[V[WI?[X[XO[Y[\IA[][]3[_[_IE[b[fIF[i[lIK[n[nIO[p[sIP[u[uIT[w[xIU[z[}IW[[I[[€[€,[[I\[ƒ[„I][…[…Ø[‡[‰I_[‹[‹Ib[Œ[Œ[[Ic[’[“If[•[™Ih[š[šÅ[›[¨Im[ª[®I{[°[°I€[³[¶I[¸[¹I…[½[ÇI‡[É[ÎI’[Ð[ÔI˜[Ö[ÙI[Û[ÛI¡[Ý[ìI¢[î[óI²[õ[öI¸[ø[ø,[ù[ùIº[ú[úG[û[üI»[þ[þI½[ÿ[ÿ(\\I¾\\  \\$s\\I¿\\'ê\ \ IÃ\ \ ,\ \IÅ\\?\\IÈ\\g\\IÉ\\3m\\IÊ\\IÌ\\Ž\\IÍ\\3o\\ IÎ\"\",\$\$;\%\%IÐ\'\'\(\(3q\*\*IÑ\,\,IÒ\-\-3s\0\1IÓ\3\4IÕ\7\7I×\8\83u\9\9J\:\:3v\;\<IØ\=\=\>\BIÚ\D\QIß\S\TIí\U\UË\V\VIï\X\YIð\[\^Iò\`\jIö\l\mJ\n\o3’\q\q,\s\tJ\v\vJ\y\|J\~\J \\‚J \†\†J\ˆ\J\\šJ\›\›3—\œ\J!\Ÿ\±J#\³\³J6\µ\¸J7\º\ÁJ;\Ä\ÌJC\Î\ÐJL\Ò\ÔJO\Ö\ÛJR\Þ\áJX\ä\æJ\\è\êJ_\ì\ñJb\ô\õJh\ö\ö#À\÷\ûJj\ý\ýJo\ÿ]Jp]]Ju] ]Jw]]J|]]J~]] J†]"])JŠ]-].J’]0]:J”]<]CJŸ]E]EJ§]G]GJ¨]I]LJ©]N]NJ­]P]SJ®]U]UJ²]X]YJ³][]^Jµ]b]cJ¹]e]eJ»]g]iJ¼]k]mJ¿]o]oJÂ]q]tJÃ]v]wJÇ]y]zJÉ]|]‚JË]„]„JÒ]†]JÓ]]JÛ]’]•JÜ]—]—Jà]™]šJá]œ]¢Jã]§]ªJê]¬]²Jî]´]´3·]µ]µJõ]·]ºJö]¼]½Jú]À]ÀJü]Â]ÃJý]Å]ÇJÿ]É]ÉK]Ë]ÍK]Ï]ÖK]Ø]ØK]Û]Û3Ã]Ý]Þ3Ä]ß]ßK]à]à¦]á]âK]ã]ã0]å]å3È]æ]æ]ç]çK]è]è3É]é]éK]ë]ë3Ê]î]î#]ï]ðK]ñ]ô3Ë]õ]õí]÷]÷!y]ù]ùK]û]ûK]ý]ýK]þ]ÿ^^^^^^K^^K^ ^ K^^K ^^K$^^D^^K*^^^^%K,^&^& ÷^'^)K3^+^+K6^-^-Y^.^.K7^/^/3Ó^0^1K8^3^4K:^6^7K<^8^8×^;^EK>^G^GKI^J^OKJ^S^UKP^W^YKS^[^dKV^f^pK`^r^s3Ù^t^tº^u^uKk^v^vâ^w^w3Ü^x^xÂ^y^yKl^z^z3Þ^{^|Km^}^~3à^^ü^€^„Ko^†^Kt^^‘K|^“^—K^™^œK„^ž^ Kˆ^¢^¨K‹^ª^®K’^°^·K—^¸^¸–^¹^¹KŸ^¾^¾K ^Á^ÌK¡^Î^ãK­^å^êKÃ^ì^ìKÉ^î^óKÊ^ô^ô%@^ö^øKÐ^ú^üKÓ^þ_4*__KÖ__!ì__ KÛ_ _ 42_ _ KÞ__E__’__Kà__45__¿__Kâ__46__t__Kã__47__Kä__Kå__48_ _*Kæ_-_0Kñ_1_14:_3_:Kõ_<_<Ký_>_>Kþ_@_AKÿ_C_FL_H_LL_N_OL _P_Q4>_R_RL _S_Sè_T_UL _V_V"í_W_W/T_X_YL_[_]L_a_a»_b_bL_d_dL_e_e!ç_f_f"_g_g4E_i_mL_o_qL_s_s+¿_t_tL_v_yL_{_ŒL#__“L5_•_™L9_›_œL>_ž_¡L@_¥_¦LD_¨_¯LF_²_·LN_¹_¹LT_»_ÁLU_Ã_É_Ä_Ä_Å_Å4O_Æ_ÆL\_É_ÉL]_Ì_ÍL^_Ï_ÒL`_Ô_ÙLd_Ü_ÜLj_Ý_Ý _Þ_ÞLk_à_áLl_ã_åLn_ç_èLq_ê_ëLs_í_ñLu_ó_õLz_÷_øL}_ú_ûL_ý`L` `L‹``Lš` `"L `$`/L£`1`5L¯`7`7L´`9`<Lµ`?`GL¹`I`MLÂ`P`PLÇ`R`ULÈ`X`[LÌ`]``LÐ`b`lLÔ`m`m4a`n`pLß`r`sLâ`u`}Lä``Lí`ƒ`ŽLð``Lü`’`’Lý`”`—Lþ`š`M`Ÿ` M`¢`¤M`¦`©M `ª`ªZ`«`­M`¯`ÁM`Ã`ÍM%`Î`Î4q`Ï`ÏM0`Ñ`ÑM1`Ó`ÕM2`Ø`äM5`æ`éMB`ë`üMF`þaMXaaM\aa M`a aMdaaMnaaMoaa!Msa#a$Mva&a)Mxa+a,M|a.a0M~a2a2Ma4a4M‚a6a7Mƒa;aBM…aDaOMaQaVM™aXa[MŸa]a_M£aaahM¦ajalM®anauM±avav4“awawM¹ayazMºa|a~M¼a€aM¿a‚a‚4•aƒaƒMÁa‡a‡MÂa‰aŽMÃaa”MÉa–a–MÎa˜a›MÏaaMÓaŸaŸMÔa¡a¢MÕa¤a¤M×a§a¸MØaºaºMêa¼a¼Mëa¾a¿MìaÁaÃMîaÅaÍMñaÐaÒMúaÔaÔMýaÖaÖMþaØaØMÿaÞaàNaãaëNaíaîN aðaòNaôbNbbNbbN!bbSb b –b b ”b b N#bb—bbN%bbŠbbªbbN&bb7bbN(bb>bbN)bb4³bbN-bb4´bbN.b b 4µb!b!N/b"b"`b#b'N0b)b4N5b6b6úb7b7(¼b8b8ûb:b;NAb=bCNCbFbJNJbKbKObLbL4¾bMbM{bNbNNObPbUNPbXb\NVb^b^N[b`btN\bvbwNqbyb~Nsbbib€b„Nyb†bŠN~bŒbŒNƒbŽbN„b‘b˜N†bšbœNŽbžb¢N‘b¤b¦N–b¨b±N™b³b¶N£b¸b¹N§b»b¿N©bÂbÂN®bÄbÔN¯bÖbÝNÀbßbãNÈbåbéNÍbëcNÒcc Nëc cNîccNõccNùcc%Nüc'c-Oc/c/O c2c4O c6c6Oc8cQOcTcZO+c\c\O2c^c_O3caccO5ceceO8cgciO9ckckO<cmcrO=cucxOCczc}OGcc…OKc‡cŠORcŒcŒ½cc’OVc”c”O\c–c™O]c›c¥Oac§cµOlc·c¸O{cºc¾O}cÀcÀO‚cÂcÐOƒcÒcÓO’cÕcáO”cãcåO¡cçcëO¤cícúO©cýcýO·cÿdO¸ddO¼d dO¾ddOÆddOÍdd(OÐd*d0OÛd3d7Oâd9d:Oçd=dHOédJdKOõdMdNO÷dPdTOùdXdYOþd[daPdediPdkdpP drd{Pd}d}PddPd‚d…Pd‡dŒP"dd“P(d•dšP-dœd P3d¢d¦P8d©d©P=d«d®P>d°d³PBdµdµPFd·dÅPGdÇdÇPVdÉdËPWdÍdÐPZdÒdÒP^dÔdÔP_dÖdÛP`dÞdÞPfdàdéPgdëdíPqdïdôPtdödøPzdúdÿP}ee5eePƒeeP„e e P‰e ePŠeePeeP—e e&Pše)e.P¡e/e/5e2e3P§e4e55e6e9P©e;e;P­e=e?P®eAeAP±eCeCP²eEeFP³eHeJPµeLeOP¸eQeQP¼eSeYP½e[e^PÄebehPÈejemPÏeoepPÓerezPÕe{e{5e|e|PÞe~e…Pße‡e‡5eˆe‰Pçe‹eŒPéeŽeŽPëee–Pìe—e—e™e™Póe›e¢Pôe¤e¥5"e§e¨Püe©e© 7eªe°Pþe²e³Qe¶e¸Qe¹e¹@e»e½Q e¿e¿Q eÁeÁ$¥eÂeÆQeËeÐQeÒeÓQeÖe×QeÙeÛQeÝeßQ eàeá57eâeãQ#eåeå5;eæeæåeçeçQ%eèeèeéeéˆeìe÷Q&eúeýQ2eÿfQ6ffQ8ff%•ffQIffQKffQLff6f f"QOf$f$QRf%f%Yf&f(QSf+f+QVf-f.QWf/f/"f0f6QYf9f<Q`f>f?QdfAfEQffGfGQkfIfLQlfOfOQpfQfWQqfYf\Qxf]f]Uf^f_Q|fafbQ~fdflQ€fnfnafoftQ‰fvf|Qf~f~Q–f€f„Q—f†fŽQœffQ¥f‘f‘,f”f™Q¦ffQ¬fŸf¢Q­f¦f«Q±f®f³Q·f´f´%bfµfµQ½f·fÁQ¾fÄfÄQÉfÆfÌQÊfÏfÏQÑfÒfÒQÒfÖfÖQÓfØfÞQÔfàfàQÛfãfäQÜfæfæQÞfèfèQßféfé5ZfëfîQàfðfð5[fòfò¬fófó±fôfôfõfõ&föf÷QäføføafùgQæggµggQïggÅg g 5eg g Qñg g Ëg gQòggQögg$îggQøggQüggQýgg5ggg#Qþg&g'Rg(g(Úg*g,5ig-g-Rg.g/5lg1g1•g3g4Rg5g5:g6g>Rg?g?ˆg@gCRgEgIRgKgQRgSgSR!gUgWR"gYgZR%g\g^R'g_g_g`gdR*gegegfgfR/ghgjR0glgmR3gogpR5gqgqÑgrgR7ggREgƒg‡RFg‰g‰RKg‹g•RLg—gšRWgœgœ2gg£R[g¥g«Rbg­g°Rig²g»Rmg¾g¾RwgÀgÆRxgÈgÔRgØgàRŒgâgçR•gégëR›gìgìÖgígøRžgúhRªhh R¶hhR¼hhR¾hhRÂhh$hhRÃhhRÄhh"RÅh%h&RÌh(h+RÎh-h/RÒh1h5RÕh7h<RÚh=h=5~h>h>Ràh@hFRáhHhURèhYhYRöh\h]R÷h_hiRùhkhkShmhoShqhrShthyS h{hƒSh…h‡Sh‰hShh”S!h–h—S'h›hS)hŸh¤S,h¦h¶S2h¹hºSCh¼h¼SEhÀhÀSFhÂhÂSGhÄhÄ5hÅhÉSHhÊhÊ5hËhÖSMh×h×5hØhØSYhÚhÚSZhÜháS[hãhäSahæhìSchîhýSjiiSziiS|i iSiiSiiSŽii(S’i*i*Sœi-i-Si/i0Sži2i9S i;i=S¨i?iBS«iDiES¯iHiLS±iNiOS¶iQicS¸ieifSËihilSÍimimÏiniqSÒisi~SÖi€i„Sâi†iŠSçiiŽSìii‘Sîi“iœSðižižSúi i¡Sûi£i·Sýi¹i¹Ti»i¿TiÁiÄTiÆiÇTiÉiÐTiÓiÔT&iØiÙT(iÛiÛT*iÝiàT+iâiâT/iäièT0iêiîT5iñiôT:iöiùT>iûjTBjj TJjjTTjjTUjjT^jj#T_j%j+Tfj.j2Tmj4j6Trj8jATujDjDTjFjF5ÅjGjIT€jKjKTƒjMjVT„jXj[TŽj]jbT’jdjkT˜jmjmT jojoT¡jqjsT¢jvjvT¥jxjyT¦j|j|T¨j~jT©jƒj…T­j‡j‡T°j‰j‰T±jŒjŽT²jj—TµjšjœT½jžj¦TÀj¨j¯TÉj³j´TÑj¶j»TÓj½j½TÙjÁjÃTÚjÅjÇTÝjËjÍTàjÏjÑTãjÓjÓTæjÙjâTçjäjåTñjçjèTójêjìTõjîjñTøjójóTüjöjöTýjøjüTþkkUkkUkk UkkU kkUkk5õkkUk k ék!k%Uk'k(Uk,k-U k/k/U"k1k4U#k6k?U'kAkCU1kEkNU4kPkQU>kSkVU@kYkYUDk[k\UEk^kaUGkbkd5ûkeke<kfkf5þkgkgUKkikjULkmkmUNkokoUOkrktUPkvkxUSkyky6k{k{6k|k|UVk~k„UWk†kU^k‘k›Uhkžk§Uskªk«U}k­k²Uk³k³6k´k·U…kºk½U‰k¿kÉUkÊkÊ6kËkËWkÌkÌ6kÍkÍXkÎkÏ…kÐkÐU˜kÒkÓU™kÔkÔkÕkÙU›kÚkÚ6kÛkÛOkÞkäU kækæ6kçkèU§kêkìU©kïkðU¬kòkóU®kõkõU°k÷kùU±kûl U´l l UÃllBll6 llUÆll×llUÇllUÎll,UÏl.l0UÝl2l3Uàl4l760l8l8­l;l;Uâl=lAUãlBlB64lClCUèlFlGUélIlPUëlRlRUólTlUUôlWlWUölYl]U÷l^l^"l_lbUüldlkVlmlmVloltV lvlvVlxl{Vl}l~Vl€l‰VlŠlŠ68l‹lV l’l–V&l˜lV+lŸlŸV1l¡l§V2l©l®V9l°l´V?l¶lÇVDlÉlÉ#SlÊlÊVVlÌlÍVWlÏl×VYlÙlÞVblàlãVhlålåVllçlïVmlðlð$mlñlóVvlõlþVymmVƒmmV…mmV‡mmV“mm V™m"m"Vm%m%Vžm'mHVŸmJmKVÁmMmOVÃmQmTVÆmXmZVÊm\m\VÍm^mjVÎmlmpVÛmtm€Vàm‚mŽVímm™Vúm›m¡Wm£m¤W m¦m¬W m®m¯Wm²mµWm·m¸WmºmÀWmÂmÍW#mÏmæW/mèmýWGnnW]nnW^nnW_nnW`nnWhnnWjnnWonn)Wtn+n6Wn8nAW‹nCnGW•nInKWšnMnNWnQnVWŸnXnXW¥nZniW¦nknkW¶nnnoW·nqntW¹nvnzW½n~n€WÂn‚nƒWÅn…n†WÇnˆn‰WÉnŒnWËn’n”WÐn–n™WÓn›n§W×nªn«Wän®n´Wæn¶n·Wín¹nØWïnÚnÚXnÜnâXnänæXnènéXnënïXnñnòX!nônùX#nûoX)oo X2o oX8ooX;ooX@ooXCoo'XDo)o3XNo5o<XYo>oAXaoCoCXeoEoGXfoKoKXioMoUXjoWoXXsoZodXuofogX€oiopX‚orotXŠovoxXozo‚Xo„o‰X™o‹oŽXŸoo—X£oœoœX«ožožX¬o o¶X­o¸oºXÄo¼oÄXÇoÆoÏXÐoÑoÒXÚoÔoÕXÜoØoØXÞoÚoäXßoæoéXêoëo÷XîoúoüXûoþpXþppYp pYppY pp$Yp&p,Yp/p5Y&p7p<Y-p>pFY3pHpJY<pLpLY?pOpRY@pUpXYDpZp[YHp]pfYJphpjYTpkpk%Åplpl6âpmpmYWpopoYXpppp>pqpqYYptpvYZpxpxY]pzpzY^p|p€Y_p‚p†Ydp‰pŠYipŽpŽYkp‘p–Ylp˜pšYrpœpYupŸpŸYwp¡p¡Yxp¤p¤Yyp©p©Yzp«p¬Y{p­p­bp®p±Y}p³pµYp·p¹Y„pºpº¬p»p¾Y‡pÀpÃY‹pÅpÈYpÊpËY“pÍpÎY•pÏpÏ#pÑpÔY—p×pâY›päpäY§pæpéY¨pëpíY¬pïpñY¯pópôY²pöpýY´pÿqY¼qqY¾qqY¿qqYÀq qYÁqqkqqYÇqqYÈqq YÒq!q!Kq"q#YÕq%q%Y×q&q&jq(q(YØq.q2YÙq6q6YÞq:q:Yßq<q<YàqAqGYáqIqNYèqPqPYîqRqVYïqXqZYôq\qjY÷qlqlZqnqnZqpqpZqrqsZ qxqxZ qzq{Z q}q}Zq€q‚Zq„qŠZqqZq’q’Zq”q•Zq—q¢Zq¤q¥Z*q§qªZ,q¬q¬Z0q¯q³Z1qµqµZ6q¸qºZ7q¼qËZ:qÎqÐZJqÒqÒZMqÔqÜZNqßqâZWqäqèZ[qìqîZ`qðqòZcqôqõZfqøqùZhqûrZjrrZsr r Zvr r ZwrrZyrrZzrrZ|rrZr"r#Z‚r&r'Z„r(r(7r)r)Z†r*r*7r,r,Z‡r-r-£r0r0"§r1r27r5r87r9r:Zˆr;r;Ïr<r<ZŠr=r=žr>r?7r@rBZ‹rDrDZŽrFrFZrGrG7rHrMZrOrOZ–rRrSZ—rVrVZ™rXrXZšrYrY)BrZrZZ›r[r[%˜r]rcZœrfrgZ£rirjZ¥rlrlZ§rnrpZ¨rrr‚Z«r„r“Z¼r•r˜ZÌršr›ZÐrrªZÒr¬r¬Zàr­r­|r®r²Zár´rºZær½rÆZírÈrÎZ÷rÐrÒZþrÔrÔ[rÖrÜ[rÞrä[ ræræ[rèrô[rös[ss[*ss[+s s [-ss[0ss[2ss[5ss[:s!s'[?s)s<[Fs>s@[ZsBsE[]sIsJ[asLsR[csWs[[js]sc[osesp[vsrss[‚susx[„szsƒ[ˆs„s„ís…sŠ[’s‹s‹)GsŽsŽ[˜s‘s˜[™s›s›[¡ss[¢sŸs¢[£s¤s©[§s«s°[­s²sÀ[³sÂsÃ[ÂsÅsÔ[ÄsÖsÞ[Ôsàsà[Ýsãsë[Þsísî[çsñsò[ésôsú[ësüt[òtt [øtt\tt\tt\tt\tt\ t t&\ t(t6\t8t8\ t:t:\!t<t<\"t?tD\#tFtF\)tJtK\*tMtR\,tTtU\2tWtW\4tYt\\5t^t`\9tbte\<tgtj\@tmts\Dtutw\Ktyty\Nt|tƒ\Ot…t‹\WtŽtŽ\^tt\_t’t’\`t”t•\at—t˜\ctštš\etœtœ\ftžt£\gt¥t«\mt­t­\tt¯t²\utµt¹\ytºtº7St»t»\~t½tÃ\tÅtÆ\†tÊtË\ˆtÏtÏ\ŠtÒtÒ\‹tÔtÛ\ŒtÜtÜ7ZtÝtå\”tætæ§tçté\tìtì\ tîtò\¡tôtø\¦tûtû\«týu\¬uu\µu u\·uuuu\Äuu#Puu\Åuuu!u!\Éu"u"Xu#u#›u%u&\Êu(u*†u+u+Šu,u,‰u-u/\Ìu0u1„u2u2‹u3u37au5u57bu7u7\Ïu8u97cu:u:\Ðu;u;u<u@\ÑuDuK\ÖuLuL ouMuN\ÞuOuO#=uQuQ\àuSuT\áuYu]\ãu_u`\èubub7iucug\êuiuj\ïukuk¶ulum\ñuouo\óupup7kurut\ôuuuu7muvuvzuwuy\÷uzuz7nu}u}\úu~u~%luu€7ou‚u‚7quƒu„\ûu†u‡\ýu‰u‰\ÿuŠuŠu‹uŒ7suŽu]uu7uu‘u‘]u’u’}u”uš]uu] uŸu¥] u§u§]uªu¬]u®u¶]u¸uÅ]uÇuÒ]-uÔuÛ]9uÝuä]Auæuë]Iuíuí]Ouïv]Pvv]cvv]dvv ]evv]kvv+]nv-v-]‡v/v5]ˆv8v8]v:v@]vBvC]—vFvI]™vLvN]vPvP] vRvT]¡vVvZ]¤v\v\]©v^ve]ªvgvr]²vuvu]¾vvvv7ûvxvx~vyvy]¿vzvzþv{v|]Àv}v}7þv~v~vv„]Âv†v‹]ÈvŽv“]Îv•v–]Ôv™vž]Öv¤v¤]Üv¦v¦]Ývªv«]Þv­v­]àv®v®8v¯v²]áv´vµ]åv·v»]çv½v¾]ìv¿v¿vÂvÆ]îvÈvÊ]óvÍvÔ]övÖvØ]þvÚvß^vává^vãvæ^vçvçÉvévê^ vìví^vîvîÕvïvñ^vòvò8vóvó^vôvô8võvõ^v÷vü^vþvþ!tww!uww^ww^w w !w w ^ w w !kw w ^!ww^"ww^&ww^'ww^*ww8w w ^+w"w)^,w-w-^4w/w/^5w1w>^6w@w@8wAwA^DwCwG^EwJwR^JwTwV^SwYw\^Vw^wc^Zwewo^`wywy^kw|w}^lw~w8w€w…^nw‡w‰^tw‹w^ww‘w’^|w•w•^~w—w—^w™w£^€w¥w¥^‹w§w­^Œw°w·^“w¹w½^›w¿w¿^ wÂwÂ^¡wÄwÄ^¢wÇwÇ^£wÉwÊ^¤wÌwÌ^¦wÍwÍÄwÎwÐ^§wÓwÕ^ªw×wÚ^­wÛwÛ8'wÜwÜ^±wÞwÞ8(wàwà^²wâwâ8)wãwã^³wåwå^´wçwé^µwëwò^¸wówóŽwöx^Àxx^Îx x ^Ðx x^Ñxx^Þxx^ßxx#^áx%x5^æx7x<^÷x>x@^ýxCxC_xExE_xGxJ_xLxP_xRxR_ xUxW_ x\x^_x`x`_xbxb_xdxe_xhxr_xtxt_!xwxw_"xyx|_#x~x€_'xx8/xƒx‡_*x‰x‰_/xŒx_0x‘x‘_4x“xœ_5xžx¥_?x§x­_Gx¯xµ_Nx¹x¼_Ux¾x¾_YxÁxÁ_ZxÃxÆ_[xÈxÉ__xÊxÊ%`xËxÑ_axÔxÕ_hxÙxÛ_jxÝxã_mxåxå_txçxê_uxìxí_yxïxï_{xòxõ_|x÷x÷_€xùxÿ_yy_ˆyy_Šyy_Œy y _y y _Žyy_yy_yy_•yy_—yy_˜y!y!_œy#y+_y,y,8Ay-y-_¦y/y1_§y4y5_ªy8y9_¬y:y;8Ey<yB_®yDyL_µyOyW_¾yZye_Çygyk_Óymym8Gyoyp_Øyryt_Úywyz_Ýy|y}_áyy‚_ãy„y…_çyˆyˆ_éyŠy‹_êyy˜_ìyšy_øy y¢_üy¤y¤_ÿy¦y¨`yªy®`y°y´`y¶y·` y¸y¹8Kyºyº yy»y»8My½y¾8Ny¿yÁ`yÃyÃ`yÅyÆ`yÈyÈ`yÉyÉ8QyÊyË`yÍyÏ`yÑyÒ`yÕyÖ`yØyØ`yÜyá` yãyä`&yæyæ$dyçyç`(yéyð`)yöyø`1yúyû`4yýyý`6zz`7zz`8zz`=z z`>zz`Czz`Izz `Oz"z#`Rz&z&`Tz(z(`Uz+z+`Vz.z3`Wz6z7`]z9z9`_z;z@``zBzD`fzFzQ`izTzT`uzVzX`vzZz\`yz_zc`|zgzi`zkzn`„zpzq`ˆztz{`Šz}z`’zƒz`—zz™`¢zœz `­z¢z£`²z¥z¦`´z¨z¸`¶zºzº`Çz¾zÁ`ÈzÃzÅ`ÌzÇzÈ`ÏzÊzÊ`ÑzËzËhzÍzÍ`ÒzÏzÏ`ÓzÑzÑ`ÔzÒzÒ!½zÓzÓ`ÕzÕzÚ`ÖzÜzÜ$ózÝzÞ`Üzßzß/ªzàzàŽzázä`Þzåzå/©zæzç`âzêzë`äzízð`æzözø`êzùzù8zúzû`ízýzý`ïzÿ{`ð{{ `ø{{`ü{{a{{a{ { a {"{&a {({(a{*{6a{8{<a{>{>a#{@{@a${D{Ra%{T{Ta4{V{Va5{X{Xa6{Z{[a7{]{]a9{`{ga:{i{iaB{l{naC{p{{aF{}{~aR{€{€aT{‚{‚aU{„{ˆaV{Š{’a[{”{¢ad{¤{¤as{¦{­at{¯{¯a|{±{±a}{´{µa~{·{¹a€{¾{¾aƒ{À{Áa„{Ä{Äa†{Æ{Ça‡{É{Ìa‰{Î{Ïa{Ñ{Õa{Ø{ëa”{í{îa¨{ð{ôaª{ö{ùa¯{û|a³||a¼| |a¿||aË||aÍ||#aÎ|%|-aÖ|0|0aß|3|3aà|7|9aá|;|Aaä|C|Caë|E|Eaì|G|Jaí|L|Mañ|O|Paó|S|Taõ|V|\a÷|_|`aþ|c|gb|i|lb|n|ob |r|rb |s|s^|t|ub |x|…b|ˆ|b||’b"|”|˜b%|›|›/¤|œ|žb*|Ÿ|ŸÂ|¡|£b-|¤|¤9D|¥|¥b0|§|¨b1|ª|«b3|­|¯b5|±|µb8|¹|Âb=|Å|ÅbG|Ç|ÈbH|Ê|ÎbJ|Ð|ÒbO|Ô|ÙbR|Ü|àbX|â|âb]|ç|èb^|ê|êb`|ì|ìba|î|òbb|ô|ôbg|ö|÷bh|ø|ø™|ú|úbj|û|ûÞ|ý|þbk}}"bm}'})b}+},b“}.}3b•}5}6b›}8}Hb}J}Lb®}N}Vb±}X}Xbº}[}\b»}^}_b½}a}cb¿}f}kbÂ}m}sbÈ}u}wbÏ}y}}bÒ}}b×}ƒ}†bÚ}ˆ}‰bÞ}Œ}bà}‘}”bä}–}–bè}™}£bé}¦}¦9O}§}§bô}©}²bõ}´}µbÿ}·}Âc}Ä}Çc }É}Ìc}Î}Ïc}Ñ}Òc}Õ}ác}ã}äc&}æ}êc(}ì}ìc-}î}ôc.}ö}÷c5}ù}ûc7~~c:~~c;~~c>~~&cN~)~+c[~-~Mc^~P~Zc~\~ccŠ~f~kc’~m~mc˜~o~pc™~r~ƒc›~†~œc­~Ÿ~Ÿ9n~ ~­cÄ~¯~³cÒ~µ~ºc×~½~ÕcÝ~×~ãcö~å~ëd~í~ød ~ú d d&d+5d866c8:dO=?dRBEdUGHdYJPd[QQzTT{UUdbWXdcZcdeendopvdyww/žxd€‚dˆƒƒ9•…‰dŠŠŠ¼‹‹9˜ŒŒÚŽd‘’d‘””d“••$Û––d”šd•žžOŸ¨d™©©¾¬±d£²²9³³d©µ¼dª½½9¡¾Ãd²ÅÇd¸ÉÒd»ÔÕdÅרdÇÛÜdÉÞãdËåædÑèõdÓ÷ùdáû€d䀀’€€€€dꀀN€€d뀀9«€ € 9¬€ € dì€ € E€ €d퀀9®€€dò€€dø€€"dú€$€*dÿ€,€-e€0€1e€3€39°€4€9e €;€;e€=€?e€B€B/<€C€Ce€F€He€J€Me€O€Re€T€Te €V€Ve!€X€Xe"€Z€Ze#€\€_e$€a€be(€d€de*€g€je+€l€le/€o€ye0€}€~e;€€€€€€9½€‚€‚e=€ƒ€ƒ9¾€„€„e>€…€…9¿€†€‡e?€‰€‰€Š€ŒeA€€eD€’€’eF€“€“9Á€•€•eG€–€–9€˜€˜eH€™€™9Àš€eI€Ÿ€¥eM€©€©9Ä€ª€¯eT€±€²eZ€´€´9Æ€µ€µe\€·€¸e]€º€ºe_€¼€Âe`€Ã€Ã"5€Ä€Ä ‚€Å€Êeg€Ì€Ñem€Ô€Þes€à€áe~€ã€ãe€€ä€ä#»€å€íe€ï€öeŠ€ø€þe’e™ eœ /F e¡e«e¯!%e²''e·))e¸+-e¹/3e¼66eÁ8:eÂ=>eÅCDeÇFHeÉJUeÌY\eØ^beÜdgeáiieåkkeæmteçv€eeú†eüf‘‘f““f••f—™fšš­› f ¢¤f¦¬f®®f°µf·Êf"ÌÍf6ÏÓf8ÕÕf=×Ûf>ÝâfCãã9àååfIæç9áèèfJéé9äêêÍìîfKòòfNóó,ôôfO÷ùfPúú9çûûfSüüÑþþ9èÿÿ!ù‚‚fT‚‚®‚‚9ë‚‚Ê‚ ‚ fV‚ ‚ 9ñ‚ ‚ m‚ ‚'‚‚fX‚‚f[‚‚Ú‚‚9ò‚‚)‚ ‚#f`‚%‚%fd‚(‚@fe‚B‚Bf~‚D‚Ef‚G‚Gf‚I‚If‚‚K‚Kfƒ‚N‚Sf„‚U‚_fŠ‚a‚df•‚f‚ff™‚h‚mfš‚n‚nK‚o‚o}‚p‚qf ‚r‚rt‚s‚wf¢‚x‚x9ö‚y‚y0‚z‚zf§‚|‚€f¨‚‚‚…f­‚ˆ‚ˆ9ù‚Š‚‹f±‚‚“f³‚”‚”9ÿ‚—‚±fº‚³‚ºfÕ‚»‚»:‚¼‚Åf݂ǂÈfç‚Ê‚Ïfé‚Ñ‚Ùfï‚Û‚Üfø‚Þ‚áfú‚ã‚èfþ‚ê‚íg‚ï‚÷g‚ù‚ûg‚ý‚þgƒƒ gƒ ƒ g ƒ ƒ :Iƒƒg!ƒƒg#ƒƒg$ƒƒg-ƒ ƒ g.ƒ"ƒ-g/ƒ/ƒ/g;ƒ1ƒ5g<ƒ6ƒ6Sƒ7ƒ7gAƒ8ƒ8Uƒ9ƒ:gBƒ;ƒ;:]ƒ<ƒ<gDƒ?ƒHgEƒIƒIXƒJƒTgOƒVƒVgZƒXƒXg[ƒZƒ\g\ƒ^ƒog_ƒsƒxgqƒzƒgwƒƒg}ƒƒƒƒg~ƒ…ƒgƒ’ƒ g‹ƒ¢ƒ«gšƒ®ƒºg¤ƒ¼ƒ¼g±ƒ½ƒ½/Ûƒ¿ƒÌg²ƒÎƒÏgÀƒÑƒÑgƒӃÙgÃۃågʃçƒìgÕƒîƒÿgÛ„„gí„„gî„„gð„ „gò„„gý„„gþ„ „ h„"„-h„/„=h„?„@h„B„Hh„I„I/Ü„K„Nh&„P„Rh*„T„Th-„V„Wh.„Y„ch0„e„ih;„k„qh@„s„zhG„}„~hO„‚„‚hQ„„„„hR„†„‰hS„‹„‘hW„”„”h^„—„˜h_„™„™P„š„¢ha„¤„¤hj„§„²hk„´„´hw„¶„¶hx„¸„½hy„¿„Âh„Ä„Çhƒ„É„Ôh‡„Ö„×h“„Ù„Ýh•„ß„àhš„ã„ãhœ„å„ìh„î„ôh¥„ö„÷h¬„ù…h®……h¶……h·……hÁ……!hË…#…1hÑ…5…5hà…7…Ahá…C…Khì…M…Nhõ…Q…Qh÷…S…[hø…]…^i…`…ni…q…ri…t…|i…~…~i…€…‘i…”…¤i0…¦…¬iA…®…±iH…³…ºiL…½…ÉiT…Ë…Ëia…Í…Óib…Õ…Õii…×…Úij…Ü…ßin…á…æir…è…íix…ï…òi~…ö…ûi‚…ý†iˆ††À††iކ † i‘††i•††i–††i—††'iž†)†*i¨†,†6iª†8†<iµ†>†@iº†C†Ci½†F†Hi¾†K†LiÁ†M†MІN†N¶†O†ViÆY†\iˆ^†_iφa†eiцg†jiÖ†k†k †l†piÚ†q†q!†s†ti߆w†wiá†y†|iâ†}†} l†~†‚i憅†‡i놊†Ži‘i󆓆šiõ†œ†žiý†¡†¥j†§†¬j†¯†±j †³†Ìj†Í†Í\†Î†Ñj(†Ó†Ôj,†Ö†ßj.†â†äj8†æ†æj;†è†ûj<†þ†þjP‡‡jQ‡‡j`‡‡jc‡‡jd‡‡jj‡ ‡*jk‡,‡.jv‡0‡5jy‡7‡8j‡:‡<j‡>‡Cj„‡F‡IjЇK‡gjއh‡h<2‡i‡pj«‡s‡j³‡‡…jÀ‡‡‡‰jŇ‹‡‹jȇ‡jɇ‡”jʇ–‡˜jЇš‡ŸjÓ‡¢‡¤jÙ‡¨‡¨j܇ª‡°j݇²‡Àjä‡Â‡Ìjó‡Ð‡Ôjþ‡×‡Ùk‡Û‡èk‡ê‡ïk‡ò‡ôk‡ö‡÷k‡ù‡ük‡þˆk#ˆˆk)ˆˆk6ˆˆk;ˆˆk<ˆˆ,k?ˆ.ˆ3kMˆ5ˆ9kSˆ;ˆ?kXˆ@ˆ@<^ˆAˆFk]ˆHˆHkcˆJˆJkdˆKˆK̈LˆNkeˆRˆWkhˆYˆ[knˆ]ˆ^kqˆaˆbksˆcˆc¯ˆdˆd÷ˆeˆekuˆgˆgkvˆhˆhl ‰A‰Dl$‰F‰Fl(‰I‰Il)‰K‰Ml*‰O‰Sl-‰V‰dl2‰f‰flA‰i‰olB‰q‰tlI‰v‰wlM‰y‰|lO‰~‰~ƒ‰‰Œ‰‰ƒlS‰…‰ˆlV‰Š‰ŠlZ‰‹‰‹<›‰‰l[‰“‰“l\‰•‰˜l]‰š‰Ÿla‰¡‰¤lg‰¦‰§lk‰©‰ªlm‰¬‰¯lo‰²‰³ls‰¶‰·lu‰¹‰ºlw‰½‰Àly‰Á‰ÁR‰Â‰Âl}‰Ä‰Ìl~‰Î‰Ñl‡‰Ò‰Ò@‰Ó‰Öl‹‰Ù‰él‰ë‰íl ‰ï‰ôl£‰ö‰øl©‰ú‰ül¬‰þ‰ÿl¯ŠŠ<¯ŠŠl±ŠŠl´Š Š l¶Š Š l·ŠŠl¸ŠŠl¾ŠŠlŠŠlÊ"Š#lÆŠ%Š%lÈŠ'Š'lÉŠ*Š*lÊŠ,Š-lËŠ0Š1lÍŠ3Š4lÏŠ6Š7lÑŠ9Š<lÓŠ>ŠAl׊DŠFlÛŠHŠHlÞŠJŠJlߊLŠRlàŠTŠYlçŠ[Š[líŠ^Š^lîŠ`ŠclïŠfŠflóŠhŠilôŠkŠnlöŠpŠwlúŠyŠy<°ŠzŠ|mŠŠmŠŠ‡mЉЉ<±ŠŠŠm ŠŠmБГmЕЖmŠ˜ŠšmŠžŠžmŠ Š¡mУЍmŠªŠ­m#ааm'ввm(жжm)ЏŠÀm*ŠÂŠÄm3ŠÅŠÅ<³ŠÆŠÉm6ŠËŠÍm:ŠÏŠÏm=ŠÑŠâm>ŠäŠämPŠæŠèmQŠêŠëmTŠíŠømVŠúŠümbŠþ‹me‹‹mj‹ ‹mo‹ ‹(m„‹*‹,m‹.‹1m‹3‹3m”‹5‹7m•‹9‹>m˜‹@‹Bmž‹E‹Lm¡‹N‹]m©‹_‹`m¹‹c‹cm»‹e‹hm¼‹j‹mmÀ‹o‹pmÄ‹q‹q<Å‹r‹rmÆ‹t‹tmÇ‹w‹{mÈ‹}‹€mÍ‹‚‹†mÑ‹ˆ‹ˆmÖ‹Š‹Œm׋ދŽmÚ‹‹mÛ‹’‹–mÜ‹˜‹šmዜ‹œm䋞‹Ÿmå‹ ‹ <Ñ‹¡‹«mç‹­‹°mò‹²‹ºmö‹¼‹Æmÿ‹È‹Ïn ‹Ñ‹én‹ëŒn+Œ ŒnIŒŒ6n]Œ7Œ7{Œ9Œ?nuŒAŒCn|ŒEŒEnŒFŒF¨ŒGŒJn€ŒKŒK<ÙŒLŒPn„ŒTŒTn‰ŒUŒVƒŒWŒWnŠŒZŒZn‹Œ\Œ]nŒŒ_Œ_nŽŒaŒakŒbŒbnŒdŒfnŒhŒmn“ŒoŒsn™ŒuŒwnžŒxŒxeŒyŒ}n¡Œ€Œ‚n¦Œ„Œ†n©Œ‰ŒŠn¬ŒŒŒ•n®Œ—Œšn¸ŒœŒœn¼ŒŒ쌞Œž iŒ Œ "tŒ¡Œ¡n½Œ¢Œ¢<àŒ£Œ¥n¾Œ§Œ¬nÁŒ­Œ®<猯Œ°nÇŒ²Œ²nÉŒ³Œ³ÇŒ´ŒÅnʌnjÈn܌ʌÊnތ̌ÏnߌьÓnãŒÕŒÕnæŒ×Œ×nçŒÙŒÝnèŒÞŒÞ%NŒßŒâníŒãŒã ŒäŒènñŒêŒê%ZŒìŒînöŒðŒñnùŒóŒõnûŒøŒþnþoo o oooooÎÑÐ!.o///K00!ó14o(55"68o,99N:Lo/MM=NNoBOOlPPoCSVoDX^oH`coOdd=fioSkooWpp'qq:ryo\{{od}}oe€of„…oh‰–oj™™ox›œoyŸ¡o{££o~¥¥o§¨o€ª¯o‚±²oˆ³³'%´ºoм¼o‘¾¿o’ÁÈo”ËÑoœÓÓo£Õäo¤æìo´îõo»÷ŽoÃŽŽ oÍŽ Ž oÖŽŽ'oØŽ)Ž,oñŽ.Ž1oõŽ3Ž6oùŽ8Ž:oýŽ<ŽBpŽDŽEpŽGŽNp ŽPŽWpŽYŽgpŽiŽjp(ŽlŽmp*ŽoŽpp,ŽrŽtp.ŽvŽvp1ŽxŽxp2ŽzŽ|p3ŽŽp6ŽŽ‚p7Ž„Žˆp9މމ=FŽŠŽšp>ŽœŽ¡pOޣަpUŽ¨ŽªpYޫޫެެp\ޝ޲p]ŽºŽºpa޽޾pbŽÀŽÀpdŽÂŽÂpeŽÅŽÆpfŽÈŽÉphŽÊŽÊ=XŽËŽÌpjŽÍŽÍ!)ŽÎŽÏplŽÑŽÔpnŽ×ŽØprŽÛŽãptŽåŽép}ŽëŽìp‚ŽîŽïp„ŽñŽñp†Žôp‡p— p¡#'p²)*p·,,p¹./pº29p¼;;pÄ>>pÅ??=_@@pÆBIpÇKdpÏff=igipékpì‹q‘q “šq››=pœœÁžŸq££q¦©q««q ­±q!²²=w´´q&¶¶u··q'¹¿q(ÁÂq/ÄÉq1ËËq7ÍÎq8Ðæq:èëqQíðqUòüqYýý0lþqdqm$q}&'q‰-/q‹12qŽ46q89q“;?q•ABqšDEqœGGqžIKqŸMYq¢[^q¯`cq³eeq·giq¸kkq»mpq¼r‹qÀqÚqÛ‘‘&O“•qÝ—™qà››qã£q䥨q몪qשּׁqð®¶qñ¸»qú½¿qþÁÁrÃÅrÇÈrÊËrÎÑr Óír ïõr(÷‘ r/‘ ‘ rB‘ ‘rC‘‘$rI‘&‘6rZ‘8‘;rk‘>‘Aro‘C‘Hrs‘I‘I&q‘J‘Jry‘K‘K!¢‘L‘Prz‘R‘Xr‘Z‘Zr†‘]‘er‡‘h‘jr‘l‘lr“‘n‘zr”‘}‘‡r¡‘‰‘r¬‘‘“r±‘—‘—r¶‘™‘¥r·‘§‘¨rÄ‘ª‘µrÆ‘·‘ºrÒ‘¼‘¾rÖ‘À‘ÀrÙ‘Á‘Á>‘‘ÃrÚ‘Å‘ÅrܑƑÆ7‘Ç‘Ërݑ̑Ì/¬‘Í‘Í!`‘ΑÎrâ‘Ï‘Ï-‘БÐrã‘ёёӑÛrä‘Ü‘Ü$Ö‘Ý‘ßrí‘á‘îrð‘ñ‘ñrþ‘ó‘ùrÿ‘ü‘ýs‘ÿ’s’ ’ s’ ’s’’s’’s’’s ’’s!’#’'s"’)’)s'’,’.s(’0’4s+’6’:s0’<’@s5’D’Fs:’H’Ts=’V’WsJ’Y’[sL’^’^sO’`’gsP’l’msX’o’rsZ’t’ts^’v’€s_’‚’ƒsj’…’ˆsl’Š’Žsp’‘’‘su’“’sv’ ’®s’²’·s’¹’¹s–’»’¼s—’À’Ós™’Õ’Õs­’×’Ùs®’Ý’ás±’ä’äs¶’æ’ês·’í’ós¼’÷’üsÃ’þ“sÉ““sΓ“sÏ““ sГ “sÒ““sØ““sÝ““/sá“2“6sô“8“<sù“>“>sþ“D“Dsÿ“F“Rt“T“\t “^“^t“`“at“c“et“g“gt“j“jt“l“nt“p“qt!“u“wt#“y“|t&“~“~t*“€“€t+“‚“ƒt,“ˆ“Št.“Œ“t1“‘“’t5“”“›t7““Ÿt?“¡“ªtB“¬“µtL“·“·tV“¹“¹tW“À“ÀtX““ÄtY“Æ“Èt\“Ê“Êt_“Ì“Òt`“Ô“Útg“Ü“ßtn“á“ètr“ì“ìtz“î“ît{“õ”t|””tˆ””tŠ” ”tŒ””tš” ”!t”%”%tŸ”(”,t ”.”.t¥”0”3t¦”5”Atª”D”Lt·”O”StÀ”U”UtÅ”W”WtÆ”Z”[tÇ”]”^tÉ”`”`tË”b”dtÌ”h”ktÏ”m”xtÓ”|”ƒtß”…”…&”†”tç”’”•tò”—”—tö”™”Æt÷”È”Îu%”ДÒu,”Õ”Ùu/”Û”åu4”ç”úu?”ü•uS••us•!•&uv•(•2u|•4•<u‡•>•Bu•D•Gu••I•Ju™•L•Tu›•V•Yu¤•[•_u¨•a•mu­•o•suº•v•vu¿•w•w>2•z•}uÀ••>3•€•€f•‚•ƒuÄ•†•”uÆ•–•–uÕ•˜•™uÖ•›•œuØ•ž•¥uÚ•§•©uâ•«•®uå•°•²u镵•·u앹•Àuï•ÕÃu÷•Å•Íuø•ЕÖv•Ø•Øv•Ú•Üv •Þ•åv •è•è’•é•ëv•í•þv––v)––v0––v;––v?––¶––µ––$vA–(–(vH–*–*vI–,–6vJ–9–=vU–?–@vZ–B–Qv\–S–Uvl–X–Xvo–[–_vp–a–mvu–o–xv‚–z–zvŒ–|–~v–€–€v–ƒ–‹v‘––•vš–—–™v£–›–žv¦– –¤vª–§–ªv¯–¬–¬v³–®–´v´–¶–¶M–·–¸v»–¹–¹>––»–¼v½–½–½$Ж¾–¿v¿–À–À>—–Á–ÏvÁ–Ñ–ÞvЖߖß>Ÿ–à–ãvÞ–å–åvâ–è–è–é–ëvã–ï–ñvæ–ò–ò6–ó–óvé–õ–úvê–û–ûÌ–ý—vð—— vö— —vþ——w——w—— w—"—0w —2—3w—5—5w—8—;w—=—?w#—B—Dw&—F—Iw)—K—Kw-—M—Mw.—O—Ow/—Q—R>Õ—S—Sw0—U—Vw1—X—\w3—^—^>×—`—aw8—b—b"E—d—fw:—h—hw=—i—i!B—j—nw>—p—twC—v—†wH—ˆ—ˆwY—Š—‹wZ——’w\—”—”wb———šwc—œ—žwg— —¦wj—¨—¨wq—ª—¯wr—²—´wx—¶—·w{—¹—¹w}—»—»w~—¿—¿w—Á—Áw€—×Éw—Ë—Ë"þ—Ì—Ðwˆ—Ó—Ùw—Ü—ßw”—á—áw˜—ã—ãw™—å—åwš—æ—æp—ç—çw›—é—ìwœ—í—í![—î—îw —ð—ðw¡—ñ—ñ>á—ò—òw¢—ó—ó!É—õ—öw£—ø—ûw¥—ý˜w©˜˜ Ę˜w­˜ ˜ w´˜ ˜wµ˜˜w½˜˜wÀ˜ ˜!wŘ$˜$wǘ&˜)wȘ+˜-w̘/˜0wϘ2˜2wј4˜5wÒ˜7˜9wÔ˜;˜=wטA˜AwÚ˜C˜FwÛ˜H˜UwߘW˜`wí˜b˜ew÷˜g˜gwû˜i˜kwü˜o˜twÿ˜u˜u•˜v˜Šx˜Œ˜x˜˜‘x˜“˜”x˜–˜˜x!˜š˜¢x$˜¤˜§x-˜¨˜¨0˜©˜ªx1˜¬˜¯x3˜±˜³x7˜¶˜¶x:˜¸˜¸x;˜º˜Äx<˜Æ˜ÇxG˜É˜ÉxI˜Ë˜ÌxJ˜Î˜Î#ç˜Ñ˜ÓxL˜Õ˜ÕxO˜Ø˜ÚxP˜Û˜Û˜Ü˜ÜxS˜Þ˜Þy˜ß˜ß)¯˜á˜ãxT˜å˜åxW˜ç˜ëxX˜í˜ïx]˜ò˜òx`˜ô˜ôxa˜ö˜öxb˜ù˜úxc˜ü˜þxe™™xh™™xi™™xk™™ xl™ ™ >ù™ ™ xo™™xq™™xz™™!x|™$™%x™'™3xƒ™5™5x™:™:x‘™<™?x’™A™Cx–™E™Ex™™G™Ixš™K™Nx™P™Yx¡™[™[x«™\™\>ÿ™^™_x¬™a™ax®™c™c©™e™ex¯™g™rx°™t™wx¼™z™zxÀ™|™}xÁ™™xÙ„™ˆxÆ™Š™‹xË™™xÍ™™•xΙ–™–!™™—™˜xÕ™™™™"”™œ™žx×™¡™¡xÚ™£™£xÛ™¥™¨xÜ™«™«xà™¬™¬ö™­™µxᙹ™½xê™Á™Éxï™Ë™Ùxø™Û™Ýy™ß™ßy ™â™åy ™ç™çy™é™êy™ì™îy™ð™òy™ô™ôy™ö™ÿyšš y#š šy.ššy1ššy7š š y=š"š%y>š'š.yBš0š2yJš4š:yMš=šFyTšHšJy^šLšPyašRšWyfšYš[ylš^š`yošbšbyršdškysšlšl>šmšqy{šsš‚y€š„šˆyšŠšŒy•šš“y˜š–š˜yššš¥y š§š§y¬š¨š¨#+š«š«y­š­š­y®š¯š±y¯š³š´y²š¶š¼y´š¾šÂy»šÄšÇyÀšÊšÍyĚϚÖyȚؚØ%šÙšÙ?šÜšÜyКޚÞyÑšßšß$½šášãyÒšåšçyÕšêšïyØšñšôyÞšöš÷yâšùšþyä››yê››yë››yï› ›yð››yú›› z›"›$z›%›%$›'›+z›.›/z ›1›1?;›2›2$›3›3z ›5›5z›7›7z›:›;z›<›<#û›>›?z›A›Oz›Q›Rz#›T›Vz%›X›Yz(›Z›ZÄ›[›[z*›_›az+›d›dz.›f›hz/›l›lz2›o›rz3›t›wz7›z›~z;›€›€z@›‚›ƒzA›…›ˆzC›Ž›“zG›•›—zM›š››zP›ž›¢zR›¤›¦zW›¨›¨zZ›ª›«z[›­›¯z]›±›±z`›´›¶za›¸›¹zd›»›»zf›½›½zg›¿›Ázh›Ã›Äzk›Æ›Êzm›Ï›Ïzr›Ñ›Özs›×›×?P›Ù›Üzy›Þ›Þz}›à›èz~›ê›ìz‡›ð›òzŠ›õ›õz›÷›øzŽ›ý›ýzœœz‘œœz’œœzœœzžœœz¢œœz£œ!œ!z¦œ#œ%z§œ(œ)zªœ+œ4z¬œ6œ7z¶œ9œAz¸œDœDzÁœFœNzœPœPzËœRœRzÌœTœZzÍœ^œ`zÔœbœczלfœhzÙœmœnzÜœqœqzÞœsœzzßœ|œ|Aœœz眜‚z蜅œˆz꜋œ‹zŽz’zñœ”œ•zôœšœœzöœžœ©zùœ«œ«{œ­œ®{œ°œ¸{œºœ½{œÃœÇ{œÊœÐ{œÓœÙ{!œÜœß{(œâœâ{,œåœå¿œæœç{-œéœí{/œðœ÷{4œùœý{<œÿ{A {C{J{K{L{M{O{R {S"#{W%&{Y(1{[33{e68{f;;{i=F{jHH{tJL{uOT{xVa{~dd{Šgl{‹ou{‘w{{˜}}{‚{ž„Œ{¢{«’’{­””{®–¤{¯¦­{¾¯¯{Ʊ±?s²¼{Ǿ¿{ÒÁÈ{ÔÊÓ{ÜÕß{æáæ{ñèé{÷ëð{ùòû{ÿýž| ž ž |ž ž |ž ž |žž|žž|žž|žž|"žžž ž#|$ž%ž&|(ž(ž-|*ž/ž/?Šž1ž3|0ž5ž:|3ž=ž?|9žAžL|<žNžO|HžQžQ|JžUžU|KžWžX|LžZž\|Nž^ž^|Qžcžd|Ržfžm|Tžpžq|\žsžs|^žužusžxžz|_ž|ž~|bžž?’ž€žƒ|ež†žŽ|iž‘ž•|rž—ž—|wž™ž|xžŸž¡|}ž¤ž¤|€ž¥ž¥"Rž¦ž§|ž©žª|ƒž­ž®|…ž°ž°|‡ž´žÀ|ˆžÂžÂ|•žÃžÄ?©žÈžÉ|–žÌžÌ|˜žÍžÍ?­žÎžÎ%]žÏžÐ|™žÑžÒ%/žÓžÖ|›žØžà|Ÿžâžâ|¨žäžë|©žížð|±žòžõ|µžöžö?²ž÷ž÷|¹žùžù2žúžü|ºžýžþ?³žÿŸ|½ŸŸ |ÀŸ Ÿ |ÆŸŸÈŸŸ|ÇŸŸ|ÉŸŸVŸŸ|ÊŸŸ|ÒŸ Ÿ ™Ÿ!Ÿ!–Ÿ"Ÿ%|ÓŸ(Ÿ9|ן;Ÿ;5Ÿ=Ÿ>|éŸ@ŸD|ëŸFŸI|ðŸJŸJ%}ŸKŸQ|ôŸRŸR'”ŸTŸY|ûŸ[Ÿg}ŸjŸl}ŸnŸr}ŸtŸ{}Ÿ~Ÿ€}ŸƒŸŒ}!ŸŸqŸŸ’}+Ÿ”Ÿ•}.Ÿ˜Ÿ˜}0Ÿ™Ÿ™+ÞŸšŸ›}1ŸœŸœ?ŸŸ}3ŸŸŸŸ🠟 ?ÄŸ¢Ÿ¢}4Ÿ¤Ÿ¥}5¬×£}7ùù¨Ûùùùù?Åùù¨Üùù?Èù ù ¨Þù ù ?Íù ù ¨ßùù?Ðùù¨âùù?Ôùù¨åùù?Úùù'¨íù(ù(?àù)ù,¨øù-ù-?âù.ù2¨üù3ù3?çù4ù4’ù5ù5©ù6ù6?éù7ù;©ù<ù=?îù>ù>©ù?ù@?ñùAùE©ùFùF?øùGùN© ùOùO?þùPùY©ùZùZ@ù[ù]©ù^ù^jù_ùa©"ùbùb@ùcùcìùdùf©%ùgùg.ùhùj©(ùkùk@ ùlùl©+ùmùm@ ùnùn©,ùoùq@ùrùv©-ùwùx@ùyù{©2ù|ù|@ù}ù}©5ù~ù~-ùù©6ù€ù€"ùù$ù‚ùƒ@ù„ù‡©7ùˆùˆ@ù‰ù‰©;ùŠùŠéù‹ù©<ùŽùŽºùù•©?ù–ù˜@(ù™ù™©Fùšùš@,ù›ùœ©Gùù@/ùžùž©IùŸù¢@0ù£ù©©Jùªùª@:ù«ù­©Qù®ù®@=ù¯ù¹©Tùºùº”ù»ù»©_ù¼ù¼@Hù½ùÀ©`ùÁùÁ@LùÂùédùÄùÄ@OùÅùЩfùÑùÑ@WùÒùÝ©rùÞùÞuùßùä©~ùåùå@aùæùæ©„ùçùç@cùèùè©…ùéùê@eùëù쩆ùíùí@hùîùö©ˆù÷ù÷*Ýùøùû©‘ùüùü@nùýùÿ©•úú@qúú©˜úú@súú ©™ú ú @wúú©Ÿúú@}úú©¢úú@„úú!©®ú"ú#@‡ú$ú)©±ú*ú*@ú+ú+©·ú,ú,@‘ú-ú-©¸þ0þ1=þ3þD?þIþOQþPþPÈþQþQXþRþRÉþTþWÊþYþfÎþhþkÜÿÿ^@ÿaÿŸYÿàÿâÿãÿãÿäÿåÿæÿæL°,°!-K°ÈQK°SZX¹ÿ…Y""""Z€ÞPæj„ªÐ 4Vnš´þ"lÎ Z¼ÚR²ü>`‚¤ ¦à < € º à  N t ž Ì ö  L ~ È  ^ ¢  " Z † Ú,PpŠªÌänÈ f²ôžÜ`’¨@Šæ@tÐLzÎüDh¼Ô(\”¨òP`æ0bª 0bŽÈò<š ¨L–È6xî   ® Ä Ú!N!d!z!ð"""r"à"ö# #"#‚#˜$$$.$p$¾$Ô$ê%%%F%\%r%¢%Î%ä&.&‚&˜&î'l'œ'ì((6(N(x(¤(î) )Z)j)z)–)È)Ø)è)ø*N*^*n*š*ª*º*è*ø++&+P+`+p+Ú+ê,6,„,ö-d-œ..l.¾.ú/H/x/ˆ/æ0(0X0Î0Þ1 1p1¾1ø262’2î303’3¨3¸3ú4 44T4d4ž5545ˆ5°5ä5ô666$646D6T6–6¦6¶6Þ77:7j7¬7ô828z8Ð99$9Š9æ::::J:„:è;;^;†;¸;ê<<"<@:>x>¾??V?l?„?œ?´?Ö?ø@0@h@˜@âALB B:BbB¾CLC´D0DrD‚E"EúF¾GTGºGÚHH*HœHâI>I|I¨IÔJ J2JKK˜LL2L^LŠLÆLîMM(MTMnM¸MÜN&NˆNÄOOvO”P PlP¶PøQQ<Q^QÆR`RšRöS:StSšS¼TT.TXT†T´TÎUU:U„UÂVV^VÀVÞWW@W”WÂWæX X*XDXdX†X XÄY*Y„YÈZZjZ¬[Z[˜[Þ\0\^\„\à]]f]À^^L^¬^ì_(_T_¤_Ò``@`”`¬aa4ažb&bÆc@cÐdpdÎe‚f$fÌgLgôh²iJiúj¸k4kþl¾m„mänbnøohoîp„pØq‚rr¸s.sÌt€uu´vhvÚwšxPy y"y8yNydyzyy¦y¼yÒzZzvzþ{ž||¤}F}¢~X~öž€8€Ä<È‚F‚¼ƒ˜„„v„ð…V…°†@†°‡.‡¼ˆHˆ°‰@‰´Š"Š„‹‹d‹ÞŒ8ŒÚrôŽŠ’tð‘h‘ì’\’À“X“Ò”Z”𕈕ø–’——ˆ—ô˜v˜â™h™Ì™òš šTš€š˜š°šÈšà››<›h›”›Ìœœ:œpœŒœ¨œÄœàœü4Plˆ¤ÀÜøžž0žPžpž”ž¸žØžüŸ Ÿ@Ÿ`Ÿ€Ÿ¤ŸÈŸè   0 P p ” ¸ Ø ø¡¡@¡`¡€¡¤¡È¡è¢¢,¢P¢p¢˜¢À¢è££8£`£ˆ£´£à¤ ¤8¤`¤ˆ¤°¤Ø¥¥"¥H¥l¥¥º¥Þ¦¦,¦P¦t¦ž¦Â¦æ§§8§d§š§Â§î¨&¨P¨x¨¬¨Ö¨þ©4©l©¤©ìªª0ªRªtªŽª¨ªÚªò« «"«:«R«j«‚«œ«¶«Ð«ê¬¬¬8¬R¬l® ®ò¯ ¯$¯<¯^¯Œ¯Ð°°Ð±*±„²Ê²à³³³8³P³r³Š³¬³Æ³î´$´n´öµ"µ`µžµ´µÊµàµö¶@¶j¶´·¤¸Ø¹àºä»D»¤»ð¼Z¼²½>½z¾ ¿¿6¿z¿ÆÀ ÀhÀŠÀªÀàÁÁnÁšÁÀÁæÂ:޲ÂÖÃ4ôÃðÄÄ0ÄRÄtĖİÅÅ®ÆDÆ^ƘƮÆÄÆÚÆðÇ Ç(ÇDÇ`ǂǒǢDzÇÄÈrȬÉ,ɲÊʆÊÐËXËh˲ËÂËÒËâÌÌ2ÌH̨̒Í4ÍÞÎÎ>Î~ÎŽÎÚÏ$ÏrϾÏÎÐÐlвÑ$ÑÂÑîÒÒ„ÒìÓ~Ô8Ô ÔìÕ<ÕXÕzÕºÕÒÖÖ^Ö¤Öê×`×ÖØØZØœØÜÙ.Ù¸ÙòÚÚNÚhÚÔÛÛHÛbÛ‚Û¨ÛÀÛâÜÜ<ÜtÜâÝfÝÆÝôÞ,ÞbÞ˜ÞÎßßZß’ßÊà àNàlààúádá”â>âPâPâpâºââã6ãVãvãªãÞãúää@äjäŽä²äÜäþå"åHå„åÀåöæ,ædæÎç‚è2è€èÖé&évêê”ë2ëÒìRìúíˆî>î‚îîïVïæð6ð®ñ$ñÆòòbòäóŽô ô°õ*õÌöX÷ ÷„ø&ø\ø˜øüù>ù¨ùôúhûûzüDüêý\ýöþÆÿ¬$Äz ÂÌ0ªLðx¸ N Î L È ^ ø b Ò < ž2¼,š ®ˆ„ü0z®ø,ˆÞ2^ŠÂü$LœðPØ"”æ`¬ DÖF” ^ÚBÒ pÔ`² * | Ð!J!‚!â" "Z"˜"º# #‚#¨#Ü$8$ª$ð%\%Þ&&~&ö'&'~'ì(R(à)„)Î**Z*¤*ð+>+–+¼+ä,,<,„,Â--Z-„-¶-æ.(.p.¬.æ/H/¢/è00,0L0”0Ø161l1¢1ò2H2Š2ì383†3°3ä4404|4¼4þ5`5˜5Þ66N6š6ì727”7º88l8¸8î9<9d9¦9¾: :B:^:ˆ:È:ä;6;´;Ô<<6>ž>È>ú?R?ª?â@8@Š@ÂA2AxAžAÆAüB^B~B¦BÎCC CJCrC¤CÄCøD4D`DŒD¬DâE$EPExEE²EÊEÊEüF2FzF°G GbGèH,H¬HüINIŒIüJ>J„JöKlKÌLL’M0MpM°MôNLN¬NÌObO´P*PQ QÌR(RlR¼RðS8SŠS¾SêT TpTÀUUpUÐV8V¤W*W–XXlXÈY4YÊZ6Z [[†[ð\b\â]|]þ^Š__z_ü`¦a&a€aÚb8bžccvcìd|dôeteØf>f²gTgÈh<h´i6iªj&j¬kNkÚlplòmrmþn°o*oÖpxpàqÊr–sDsÞt4u@vRw&w’x˜yTz6zÂ{@{¦|,|®}}°~z~ê>¶€¸²‚~‚¾ƒ"ƒ„„b…"…º†t‡‡ˆˆÌ‰xŠ ŠŠ‹jŒ0ŒÀtŽrXØ‘”’‚““Ô”˜•B–—N˜°™Z™èš˜›D›Àœ œ¨$rОlžâŸŒ . ¦¡&¡–¢££²¤,¤¼¥Ì¦l§§ ¨8¨Ä© ©„©èª.« «X«æ¬Š­p­ò®v¯¯X¯p¯ˆ¯ð°°@°”°ê±±2±V±z±®±â²²"²>²Z²„²®²Ü³³Š³þ´,´b´Ê´êµ4µPµlµŒµ¸µê¶@¶l¶¢¶Ê··h··¼¸¸&¸~¸ª¸ä¹ ¹\¹®¹øºRº˜º¼ºþ»L»˜»ü¼6¼’¼Þ½0½j½’½Ò½ô¾Z¾º¾Ú¿¿N¿’¿ÌÀ2À~ÀÆÁ ÁRÁ ÁîÂÂBˆ¼ÃÃJÃtèÃâÄÄ`Ä„ĨÄÌÄîÅÅ2ÅTÅvŘźÅÜÆÆ$ÆHÆjƌƮÆÐÆòÇÇ6ÇXÇ|Ç ÇÄÇæÈÈ*ÈLÈnÈȲÈÔÈøÉÉ@ÉbÉ„ɦÉÈÉêÊ Ê.ÊPÊŠÊÄÊþË4ËjË ËÖÌ ÌBÌxÌ®ÌèÍ"Í\Í’ÍÈÍþÎ4ÎjΠÎÖÏ ÏFÏ€ϺÏðÐ&Ð\Ð’ÐÈÐþÑ4ÑjѤÑÞÒÒNÒ„ÒºÒðÓ&Ó\Ó’ÓÈÓìÔÔ4ÔPÔlÔˆÔ¤ÔÀÔÜÕÕ$ÕHÕdՀ՜ոÕÔÕðÖÖ8Ö\ÖxÖ”Ö°ÖÌÖè××(×L×p׌ר×Ä×à×üØØBØlØ–ضØÖØöÙÙ6ÙVـ٪ÙÐÙðÚÚ0ÚPÚpÚÚ¶ÚÜÛÛ"ÛBÛbÛ‚Û¢ÛÂÛìÜÜ8ÜXÜxܘܸÜØÜøÝ<Ý|ݼÝöÞ2ÞlÞ¦Þàßß^ßžßâààVààÊáá@á€áÀââ:âtâ®âèã"ã\ã ãàä äZä”äÎååBå|å¬åÜæ æ4æ\æ„æ¬æÔæüç,ç\ç„ç¬çÔçüè$èLè|è¬èÜéé,éTé|é¤éÌéüê,ê\ê„ê¬êÔêüë$ëLëvë ëÊëììì0ìRìtì–ì¸ìÚìüíí@íbí„í¦íÈíêî î.îPîrî”î¶îØîúïï>ï`ï‚ï¤ïÆïèð ð<ðnð ðÊðôññHñrñœñÆñðòòDònò˜òÂòìóó@ójó”ó¾óèôô<ôfôôºôäõõ8õbõŒõ¶õàö8ööè÷0÷x÷ÀøøPø˜øàù(ùpù¸úúHúúØû ûhû°ûøü@üˆüÐýý`ý¨ýðþ8þ€þÈÿÿXÿ ÿè0dœÎ6hšÌþ2d˜Ì2d–Èü4f˜Êü.`’Æø*\Âô&X®~Ô * € Ö , ‚ Ø . „ Ú 0 † Ü 2 ˆ Þ4Šà6Œâ8Žä:æ<’è>”Þ(r¼Pšä.x V ê4~È\¦ð:„Îb¬ö@ŠÔh¦àTŽÄþ8pªè " \ – Î!!>!v!®!æ" "X""È##8#p#¨#à$$V$$È%%8%p%Ø&@&¨''r'Ú(B(ª))z)â*J*²++|+Ü,D,¨--x-Ü.>. //d/È0*0’0ú1d1Æ2(2Œ2ì3P3²3ø4>4„4Æ55J5Œ5Î66V6ž6ä7&7h7ª7ì8.8p8¶8ø9:9|9¾::B:Ž:Ð;;T;–;Ø<<\<ž<à="=T=†=¸=è>>F>v>¤>Ò??2?d?–?È?ö@$@T@„@²@àAABAtA¦AÔBB2BbB’BÀBîCCPC‚C´CâDD@DpD DÎDüE,E^EEÂEêFF:FbFŠF²FàGGDGlG”G¼GäH H4HbHH¾HæII6I^I†I®IÜJ J8J`JˆJ°JØKK(KbKœKÖL LBL|L¶LðM*MdMžMØNNDN~N¸NòO,OfO OÚPPFP€PºPôQ.QhQ¢QÜRRHR‚R¼RöS0SSðTPT°UUpUÐV0VVðWPW°XXpXÐY0YYðZPZ°[[p[Ð\0\\ð]P]°^^p^Ð_0__ð`P`p``°`Ð`ðaa0aPapaa°aÐaðbb0bXb€b¨bÐbøc cHcpc˜cÀcèdd8d`dˆd°dØee(ePexe eÈeðff@fhff¸fàggDgvg¨gÚh h>hph¢hÔii8ijiœiÎiîjj.jNjnjŽj®jÎjîkk.kNknkŽk®kÎkîll.lNlnlŽl®lÎlîmm.mNmnmŽm®mÎmînn.nNnnnŽn®nÎnîoo.oNonoŽo®oÎoîppBplp–pÀpêqq>qhq’q¼qærr:rdrŽr¸râs s6s`sŠs´sÞtt2t\t†t°tÚuu.uXu‚u¬uÖvv*vTv~v¨vÒvüw&wPwzw¤wÎwöxxFxnx–x¾xæyy6y^y†y®yÖyþz&zNzvzžzÆzî{{>{f{Ž{¶{Þ||.|V|~|¦|Î|ö}}F}n}–}¾}æ~~6~^~†~®~Ö~þ&XŠ¼î€ €R€„€¶€èL~°â‚‚F‚x‚ª‚܃ƒ@ƒrƒ¤ƒÖ„„:„l„ž„Ð……4…f…˜…Ê…ü†.†`†’†Ä†ö‡(‡Z‡Œ‡¾‡ðˆ"ˆTˆ†ˆ¸ˆê‰ ‰*‰J‰j‰Š‰ª‰Ê‰êŠ Š*ŠJŠjŠŠŠªŠÊŠê‹ ‹*‹J‹j‹Š‹ª‹Ê‹êŒ Œ*ŒJŒjŒŠŒªŒÊŒê *JjŠªÊêŽ Ž*ŽJŽjŽŠŽªŽàL‚¸î$ZÆü‘2‘h‘ž‘Ô’ ’@’v’¬’â““N“„“º“ð”&”\”’”È”þ•4•j• •Ö– –B–x–®–ä——P—†—¼—ò˜(˜^˜”˜Ê™™6™t™²™ðš.šlšªšè›&›d›¢›àœœ\œšœØT’ОžLžŠžÈŸŸDŸ‚ŸÀŸþ < z ¸ ö¡4¡r¡°¡î¢,¢j¢¨¢æ£$£b£ £Þ¤¤Z¤˜¤Ö¥¥R¥€¥®¥Ü¦ ¦8¦f¦”¦Â¦ð§§L§z§¨§Ö¨¨2¨`¨Ž¨¼¨ê©©F©t©¢©Ð©þª,ªZªˆª¶ªä««@«n«œ«Ê«ø¬&¬T¬‚¬°¬Þ­ ­:­h­–­Ä­ò® ®H®p®˜®À®è¯¯8¯`¯ˆ¯°¯Ø°°(°P°x° °È°ð±±@±h±±¸±à²²0²X²€²¨²Ð²ø³ ³H³p³˜³À³è´´8´`´ˆ´°´Øµµ(µPµxµ µÈµð¶¶0¶P¶p¶¶°¶Ð¶ð··0·P·p··°·Ð·ð¸¸0¸P¸p¸¸°¸Ð¸ð¹¹0¹P¹p¹¹°¹Ð¹ðºº0ºPºpºº°ºÐ»»<»r»¨»Þ¼¼J¼€¼¶¼ì½"½X½Ž½Ä½ú¾0¾f¾œ¾Ò¿¿>¿t¿ª¿àÀÀLÀ‚À¸ÀîÁ$ÁZÁÁÆÁüÂ2ÂhžÂÔà Ã@ÃvìÃîÄ0ÄrÄ´ÄöÅ8ÅzżÅþÆ@Æ‚ÆÄÇÇHÇŠÇÌÈÈPÈ’ÈÔÉÉXÉšÉÜÊÊ`Ê¢ÊäË&Ëh˪ËìÌ.Ìp̲ÌôÍ6ÍxͺÍüÎ>΀ήÎÜÏ Ï8ÏfÏ”ÏÂÏðÐÐLÐzШÐÖÑÑ2Ñ`ÑŽѼÑêÒÒFÒtÒ¢ÒÐÒþÓ,ÓZÓˆÓ¶ÓäÔÔ@ÔnÔœÔÊÔøÕ&ÕTÕ‚Õ°ÕÞÖ Ö4Ö\Ö„Ö¬ÖÔÖü×$×L×tל×Ä×ìØØ<Ød،شØÜÙÙ,ÙTÙ|Ù¤ÙÌÙôÚÚDÚlÚ”Ú¼ÚäÛ Û4Û\Û„Û¬ÛÔÛüÜ$ÜLÜtܜܴÜÌÜäÜüÝÝ,ÝDÝ\ÝtÝŒݤݼÝÔÝìÞÞÞ4ÞLÞdÞ|Þ”Þ¬ÞÄÞÜÞôß ß$ß<ßTßl߄ߜߴßÌßäßüàà,àDà\àtà˜à¼ààáá(áLápá”á¸áÜââ$âHâlââ´âØâüã ãDãhãŒã°ãÔãøää@ädäˆä¬äÐäôåå<å`å„å¨åÌåðææ8æPæhæ€æ˜æ°æÈæàæøçç(ç@çXçpçˆç ç¼çØçôèè,èHèdè€èœè¸èÔèðé é(éDé`é|é˜é´éÐéìêê@êjê”ê¾êèëë<ëfëëºëäìì8ìbìŒì¶ìàí í4í^ížíÞîî^îžîÞïï^ïžïÞðð^ðžðÞññ^ñžñÞòò^òžòºòÖòòóó*óFóbó~óšó¶óÒóîô ô&ôBô^ôzô–ô²ôÎôêõ<õŽõàö2ö„öÖ÷$÷r÷Àøø\ø¬øúùHùšùìú>úúâû4û†ûüürüèý^ýÔþJþÀÿ6ÿ¬"˜„úpæ\ÒH¾4Tt”´Ôô4Tt”´Ôô4Tt”´Ôü$LtœÄì  < d Œ ´ Ü  , T | ¤ Ì ô  \ œ Ü  \ œ Ú  Z š ÚX˜ÖR’ÒR î<ŠØ&tÂ^¬úH–ä2€Îj¸dºf¼h¾jÀlÂnÄlÀlÂnÄ  p Ä!!n!Â""j"À##l#Â$$n$Ä%%\%¨%ô&>&ˆ&Ò''h'²'ü(F((Ú)&)r)¾**T* *ì+F+ +ú,T,®--b-¼..p.Ê/$/~/Ø020Œ0æ1@1š1ô2N2Ò3V3Ú4^4à5b5ä6h6ì7p7ô8x8ü9~::†; ;Ž<<–==D=n=˜=Â=ê>>:>d>Ž>¸>â? ?6?`?Š?´?Þ@@2@\@†@¸@êAANA€A²AäBBHBzB¬BÞCCBCtC¦CØD D<DnD DøEPE¨FFXF°GG`G¸HHhHÀIIpIÈJ JxJÐK(K€KØLLHL€L¸LðM(M`M˜MÐNN@NxN°NèO OXOOÈPP8PpPÆQQrQÈRRtRÊS$SzSÐT&T|TÒU(U~UÔV*V€VÖW,W‚WÌXX`XªXôY>YˆYÒZZfZ°Zú[D[Ž[Ø\"\l\¶]]J]”]Ì^^<^t^¬^ä__T_Œ_Ä_ü`4`l`¤`ÜaaLa„a¼aôb,bnb°bòc4cvc¸cúd<d~dÀeeDe†eÈf fLfŽfÐggTg–g¼gâhh.hThzh hÆhìii8i^i„iªiÐiöjjBjhjŽj´jÜkk,kTk|k¤kÌkôllDlll”l¼läm m4m\m„m¬mÔmün2nhnžnÔo o@ovo¬oâppNp„pºpðq&q\q’qÈqþr4rjrÊs*sŠsêtJtªu ujuÊv*vŠvêwJwªx xjxÊy*yŠyêzJz¬{{À||d|ê}F}²~~`:²€<€ hÌ‚.‚^‚ª‚êƒjƒô„‚… …š††ô‡8‡ªˆˆŽ‰4‰ÖŠxŠì‹´Œ&<ŽVhz‘‚’Š“˜”š•°–j–¨–æ—h—ê˜P˜Ž˜ò™V™ÊšB𬛛@›l›–›Âœ:œ†œÔn¾žžNžŽžÎŸŸNŸŒŸÐ  X œ à¡$¡h¡¦¡ê¢H¢À£8£¶¤.¤¦¥¥–¦¦Ž¦Â§x§¬¨¨`¨ö©`©¾ª(ª\ªÒ«8«À¬H¬²­H­ê®r®â¯.¯à°0°Ú±‚±è²–³³´´xµ`µÔ¶„¶ø·J·œ·ö¸H¸Þ¹L¹ˆ¹àººÈ»<»t¼^¼š½¦½â¾¾~¾ø¿lÀBÀ¤Á Á6ÁbÁŽÁÖ˜ÂÄÂÄ:ÄøÅ(Å~ŲÅøÆ,ÆŒÇÇžÈ0È¢É&ɪÊ”ËLË‚ËÞÌ:ÌšÌüÍ`ÍÀÎ>δÎðÏ(Ï`ϘÏÐÐÐ@Ñ ÑŽÒ ÒFÒ¢ÒòÓxÓ°Ô Ô<ÔšÕÕ€ÕÐÖ"ÖtÖÆ××x×ÊØBضÙZÙ¸ÚÚdÛ(Û|Ü>Ü–ÝVÝæÞ&ÞšÞàß&ß|àà>à¨àþáÊâRããÐä<ätäòåNå¾åöæ¤çLçôè|èôé4é´êŽêÈëžì$ì€ííŽî.îšï.ïžððPðÆññXñ òópôŽõ°öZö¬öÞ÷:÷„øFø°ùnùœúlú¶ûjûÐü„ýnþ*þêÿzÿ²*ŒnÌdªð:ˆJ T°6r® pÚ  Š H ò D Æ  | Ú N ¸Hê*jæbà~Ú:ºþ¦2|â`˜Âdö"¾"Z æ2œÜ\¤Xü,ˆÚ.ÆH î > ®!!€!ì""L"´#J#°$x%%t%ü&L&ª&à''L'˜'ä(4(º(î)ˆ)¼***ž+ +J+Ä,",V,Â- -ê.H/$/T/Â0X1˜22¬33z3Þ4X4²5&5˜606ª6Ò7Ú8ž9J9Ô:V:Â:ú;j;Ø<$<¸=f=à>@>Š>¾??j@$@„AvAÔBB¤BÌC(C´DD E&EnEòFxGGÎHPHªIRI–IÜJ$JjJòK&KŽKêLHLÂM(M|M´NfOO”OäP.PvP¶QHR$R‚RÈSS`S¸TUU¦UÞV.V|W¼X&XnYYŠZZrZâ[:[¸\>]]@]þ^¶_v_®`0`Üa€aæbDbÀbúc8cºdd¨dìe>eÒf.f¨g`gÆh<h´i(i¾j:jtj¬k0k¢l‚m.mônvnÀo@oÚpZpÀqqˆqÂr rpr¼rÞs&snsät:t”tÖu@uªv:väww†wôx<x¾y0y”yðzì{˜{ô|,|’|Ö} }h}°~~¾¨€€Š€Ì¼‚v‚¼ƒœƒè„„Î…ˆ†>†f‡‡|‡ÖˆZˆ”ˆæ‰@‰ˆ‰ÆŠ&Š\Š”ŠÚ‹ÂŒ>Œ~ŒÐ:bÌŽfŽÂX´š‘|’,’¼“\”$”l”â•*•r•ì–€–Þ—’—þ˜l˜´™ ™¼šš¨››z›æœ.œ”œÚÖžnžºŸ Ÿ„  ˆ ê¡Š¢8¢’££n£¶£ü¤P¤´¥P¦*¦¢¦ð§€§ö¨Þ©~©èªhª”««f«¬¬4¬”­0­f­æ®:®”®ú¯P¯¦°°Ô±f²,³(³°³ô´Z´‚´äµFµ²¶*¶Ö·X¸D¹4ººÆ»»b»Ä¼>¼ ½†¾<¾Ä¿<¿¦ÀÀ¸ÁÁ†ÂhÃÃFÄÄzÄØÅPÅœÆ"ÆpƼÇbǺÈ ÈèɆÊ6ÊðËZÌÌLÌöÍÍnÍ–;Î"ÎrάÎæÏ(ÏŒÏþÐXÐîÑ:ѲÒ’ÓÓ^ÓþÔ`ÔÊÕHÕºÖPÖ¤×"×vØغÙzÚÚ0ÚdÚÂÛ4ÛÌÜŠÝZÞÞ–Þüßrà8àXáázá®â`â¢ã|ä6äjäæåšæ´æêç çjç°è4è¤ééVé˜éØêhëëzëìì~í,í¬îî|ïïÆðXðäñDñnñÔò0ó óPóøô¨ôØõõXõÔöÐ÷d÷¶ø>ø„øœù~ùÞúÎüüœýýœýâþbþÆÿÿÿÌ&~:’b¨ô€ZÎ8Îzø~ T ¤  Æ Ž  j Ô  € À*¼þfº¢*ŒÀfÐfØNª–ÎÔDÀVþ ’6TŒ.‚¶: $ z Ô!!†""¨#z$*% &&Ò'R'Ò(&(Ð)r)ö*¦++b+¸,,\,Â--@-°..2/"/â0¾1H22d2´3*3 44Œ4¸5.66^6Ø7H7¶8*8f9 9R9ü:V:æ;2;Œ<*<„<þ=x=º>D>Ê?2?æ@N@¶APAÊBæC.CÌD$D¼EEpEàF€GBG²H6II²IêJÆKfLL¢MdN¨O:O–P P~P®QŠQèRŒRúSRSºTTbT¶VV²WNWöXˆXÞY0YtYÀYèZH[6[ \$\î]\]’]î^J_ _¸`0`øaVa bb€bîc<c¬dBdØe&eØf&ggèh\h i<i¾iòj¾kNk”kôl$l´mfm¾nhooŒpFp¨q†r@s2sÖtzu:uÌvˆw>wŠxdyzz–{f|H|š}~}Ô~.~öx€šRº‚B‚ȃƒnƒÎ„2„€„Þ…l††œ†ä‡\‡°‡Ò‡úˆ"ˆJˆÀ‰ ‰zŠŠpŠØ‹F‹øŒvŒàZ ŽŽlŽîžt‘X‘~‘Ð’J’è“j“°“ø”ª”•:•¢–D–Æ—(—|—À˜(˜À™Vššš›ŒœBœÒÄøžtžìŸpŸú T € Ô¡(¡„¢¢Œ££Ž£ò¤x¥¥œ¦*¦–§2§º¨p¨Ò©2ªªtªð«v«È¬­"­v­Ø®@®h®œ¯&¯´° °d°Ð±’±Ê²l³.³ì´¬´ðµ®¶v·@¸¸˜¹N¹àºB» »¸¼f¼ô½F¾,¿¿öÀfÁÁ¶Â&ˆÃ6ÃtÄ.ÄšÄàÅfÅìƸÇBÇÎÇøÈjÉÉÆÊtË"ËþÌÖÍ\;Î ÎÊÏpÐÐNЂкÑdÒÒìÓ~ÓüÔ|ÔüÕˆÕÞÖ*Ö‚Öà×LרØnØ¢Ù ÙrÙ¶Ú ÚtÚÒÛ2Û¸ÜDÜäÝžÝôÞPÞ²ß4ß’ßäàbáálââjãääîåH岿žçŽè>èºéLé´ê&êfê¤ëëšì0ìÄíípí¼îîpîØï(ïˆï¨ðð˜ðîñ`ñªñöò.òŽòÐó2ó–óÞô:ô†ôæõõvõÞöövöü÷X÷Èøøhø–ù ùvùÒúúVú˜úØûûPû†û¼üüÖýýàþ°ÿ*ÿ¤"òxêXövðV  Àj¦ât– ( º P ´  x H   6 ÌdÈ0xì$ˆÆ‚NÐ@® äjþzþ‚<zþ0n8È‚:Â$ŒhÈ $ „!:!ô"z##†#ö$f%%ž&8&È'V'æ(’)D)è*Ž+*+ž+Æ,h--‚..¦/8/Þ0„1l2*2è3b3Ü4V4Ì5L606¬77´8L8®9*99î:V;(;ö<Æ=>X> ?H?Ø@|@ðBC CHCpDìEdF FÆGGHH¦HüIzJJÜKNKÆL®LâM\MÚNpOOtPhP¾QQÖR(RhSTTT²UNVFWWŠXX\XâYDYxZZ¢[&[[º\ \h]]Š^<__T`,aaNa¢aþbRb¦cBcÞd"dÆe exeäfPfØg^gêhŒi.iÎj2j–júkJkškâl*l”m.m¾nnPnÞoro¼pZpøqZqŠqúrhrÊs,s¨t"t´uZuÊv:v¨wwnw´x y$ydzVzÞ{Î|n}}H}¦~ž~ÖÆ€ff΂<‚d‚ÀƒƒŽ„8„Ü…N…n…Ð…ð†d†°‡‡d‡°ˆˆ^ˆÆ‰Š2Š„‹tŒ Œ@Œ~¢ŽŽjŽÞp²‘\’’Ì“X“ä”`••‚––ž—6—¾˜L˜ú™¢šP𸛤œPœ”$€ØžjžŸ8Ÿ”Ÿþ V¡¡L¡¸¢D¢¬¢þ£V£¨¤"¤Ê¥’¦F¦r§(§r§¸§þ¨.¨|¨Ä©©X©°ª ªfªˆªÊªþ«H«¶¬¬@¬v¬Ò­B­x­¸®J®š®ö¯<¯ˆ¯Ô° °B°x°¶°ì±$±„±ô²*²¢³P³¼´(´üµ°¶8·@·Ì¸œ¹@¹ÜºTºÌ»B»¾¼$¼ ½½ˆ¾¾x¾ô¿P¿¬ÀÀTÀ”ÀÔÁÁ¤ÁÚ ÂP†Ã&ÚÃöÄ*ÄnÄ ÅÅ>ÅšÅöÆ"ÆžÆÔÇZǘÇÐÇúÈBÈ”É É4ÉhÉ´ÉüÊ$ʆÊÔË Ë\ËŽËÐÌ¢ÌîÍ:Íf͸Î ÎLΰÎúÏ:ÏpϺÐЄÐôÑ8ÑnÑ®ÒÒ`Ò°ÒúÓHÓ˜ÓâÔNÔ¢ÔþÕ|ÕâÖRÖÂ×2×~×êØ8؆ÙÙ°ÙÜÚÚ4Ú`ڌڸÚäÛzÜ2ÜZÜ¢ÜÊÝÝLÝ’ÞÞ„Þ¸ßßhßÐàRàzà¢á á¦ââZâ âìãã<ãjãÔääVä¨äâå(å°æ2æ´ç6ç~è<èèêéDéØê2êÂë ëŽìì”ííšíìîNîÎïJïÎðXð¬ðøñxñÆòFòÆòæó(ójóªóÜô(ôtôÀôðõ:õpõ²õâö*ö„öÀöè÷T÷„÷îø\ø¤øÌùDù¸ú<újúÆû"û~ûÆüüæýýþþBþzþðÿHÄH"lÂ@x¾@†ì@ˆêDŒÈ ^¦"b  è Ž ` ü d È  l Î0’ôläZ¼PÜpÂ`‚ôHÔ|Jèˆ,Ðbºö2@¸6ÚN‚®â8€Ìü 6 ´!v"R#D#ü$–%%ˆ& &†''ì(H(°) )r)¬)þ*†+D,,V--è...ò/Â0Š1*1ì2ž3^4f4²5ª6 6p6Â7(7j7¼7ô8`8Ò9V9ú:2: :ê;Z;Ä<*<Ö=’=ð>b>Ú?p?º@\@þAœB:BÚCVCÀDD`D¢DèEDEŠEôF4FFæGZGüHVHÀIBJJ¾KK@K¬LLLLªMMRMæNPN¼O6OÆOþPÂQ†RR\RòSŒT,TÈUURU¢VNVúW¦XXbXÊY6Y‚YþZBZrZ¢[2[¼\F\\Ú]D]Æ^2^’^Ø__F_ˆ_ú``æahaîb^bÎcBc²d&d–e&e¶fFfÚgnhDii>iŽj jzjòkhkÚlLlÆmJm¼mènlnæoXoØp\pÞqRqÂrr€rêsJs¦tt2t–túuPu|vvˆwwŠwÊxNxÔyyŽyäzBzÌ{€||ì} ~"~¾’€€ìd‚ ‚êƒXƒÊ„8„¦„î…^…̆<†¬‡‡t‡¼‡ôˆ ˆ†ˆÖ‰6‰üŠ4ŠvЏ‹(‹‹ÀŒ*Œ¨ŒòD¾ŽZŽàt \œ‘‘†‘ì’N’¤““Š“ü”T”¨••\•ª––f–ª——B—¬—ܘ,˜†˜ð™t™Ìššnšššð›F›ˆ›ÎœœVœšœÖB°žž^ž¸Ÿ¦Ÿì L Ž î¡2¡p¡ì¢`¢Ò£@£´¤"¤”¥¥Z¥¸¦¦X¦´§0§”§Ü¨:¨Œ©©@©²ªªpªÎ««\«¶¬¬†¬Þ­&­˜­î®F®œ¯"¯z¯Ò°@°¼±¨±ú²&²€³³F³ª´´„µ<µ`µö¶¶®·(·P·p·”·ú¸¸t¸¶¹*¹d¹¤ººfºÒ»$»v»Ö¼¼B¼Ž¼æ½4½z½ô¾–¾â¿~¿ÌÀÀXÀ®Á Á„ÁöÂP²ÃÃ^úÄDÄÎÅTÅœÆ.ÆÎÇ*ÇtǰÈÈ`ÈÀÉÉtÉÚÊRËrÌ̲Í~Î4ÎþÏ–ÐLаÑRÑ‚Ò(ÒÈÓlÔÔ²ÕÕXÕ¦ÕøÖJÖ¤××\×®ØØNتØöÙnÙ®Ú ÚhÚÐÛ ÛjÛÖÜBܦÝ(ÞVÞÈßÚàîá\á¾â"âˆã(ã`ãˆã°ä"äJäzäªäòå8åhå˜ææ0æâçç>çxç¾è.è–èæééxé¶éîêJêÌë$ë’ëèì>ìŽìÞíTí íìî<îžîÐï0ï’ïîðpðÞñTñÄò8ò˜ó~óÞô6ô–ôìõ@õ”õòöFöšöî÷HøøjøÚù2ù†ùàú6úÌûbû¨ü ü˜ý ý þ<þ®ÿTÿ„ÿÊÿþ(nÆ Tœîbªð8tÎF‚Ð:f  D¶(^†èBj’Èþ & | Ê H ª à 0 – æ 6 n š  X Ô$–ê:ŠØ,†À>|h²\¬ú2f Ø<~Â\ÄøJ¸œ–l¾,’ô^ŠÆö2|æ"^šÖB’  \ ˜ Ô!!p!¸"""š"ô##`#Ò$>$ $Ð%˜%À&$&†&è'F'¤((°)R)Æ*2*Æ+8+ ,,ª--Œ-ú.d.Ð/>/Ú060Œ0â1"1R1’1è202†2à363”3ê4F4œ4ò565p5ª6>6Œ6æ7@7¤8<8l8Œ9N9è:¾;H;ö<ž=B=æ>º?^@@¦A A¢B8B~CpD"DîEÖFvFìG<GŒGÌHHHHœIBI‚IÂJJBJªKXKòL„LÞMžN6NÊOO–PP RRžSÊTTfT¾UU–UøV`VÂW0WªXXtYJYºZ®[[@[Â\"\P\œ\ü]f]Î^^\^À__”_ö`F`˜`üa`a´bbTb¦böcÚd.d¬e0eæf’g>gêh–i:iâjÔkblHlúmÞnTo<oÒp~qŒr s´tÆuTuÒvZvÞwdwêxnxòyzzzŠ{{„||„}}d~~X~®~ì²ð€.€|€Æè‚:‚r‚ª‚ìƒ2ƒjƒ¢ƒÚ„„´„ì…$…d…ʆ$†„†Þ‡<‡š‡êˆ$ˆ^ˆ¢ˆæ‰&‰l‰²ŠŠlŠ®‹‹z‹ÀŒŒlŒÌ*ŽŽ(ŽŠŽöJªrœ‘‘@‘¤’’ˆ’Â’ü“H“”””T”𔿕0•Ž•ì–J–„—ˆ˜x™™Äš`šô›„œ œ–* žž\žÒŸHŸ†ŸÐ 8 ²¡,¡Š¡þ¢6¢®£&£ž£þ¤„¥¥’¦¦ª§§R§Ü¨€¨ô©l©àªTªÈªü«p«ä¬t¬ö­z­þ®‚®ô¯\¯Î°h°ø±’²²’³&´´¬µ4µÌ¶¶Œ¶À··\·ª·ô¸B¸¸¹Z¹¨ºFº”ºâ»®¼8¼Æ½½N½n½ü¾n¾Ê¿P¿ÊÀÀˆÁÁ~ÁÄÂ<¸ÃÈÃÖÄNĤÅÅÖÆJƪÇ"ÇšÈÈ~ÈèÉPÉ”ÊÊžË.ËÄÌhÌþͨÎ>ÎàÏvÐ ÐXЦÐòÑ.ÑfÑ´ÒÒ:ÒˆÒØÓ&Ó|ÓÒÔÔnÔªÕÕTÕ´ÕðÖ¢Öö×2ׄ×ÖØJظÙ*ÙžÙöÚTÚ¬ÛÛœÛìÜJÜšÜêÝ:ÝŠÝêÞ2ÞxÞØß&ßžßþàæââ\âœâäã2ãzãÂä äˆå å’ææ ç(ç®è2èèîéJé¦êêXê¾ëëzëØììnìÖí2íˆíäî@î¢îøïXï¸ð<ðÀñ ñ¤òò”òÚó>ó¦ôô|õ8öŒ÷¢ø„øêùPùÜújûûœü8üœý(ý´þDþÐÿ\ÿè z ì F ž î H ¢ ú R ¤  v ä X Î : – ö †  ª : Ê \ Ü l ü Ž ò \ Æ D ” æ X À J ò t \ F Œ  – Ú & j ® Ú  L  | Ê  € Æ J Ô  Š  < r Ø 4 ˆ Ü 0 \ ì z  ¦ ð !^ !Ì "< "¬ # #ˆ #ö $f $’ $â %< %x %Æ &, &š &Þ 'R 'ª ( (n (Þ )" )d )Ò *< *ª +4 , ,’ -R . /$ /” 02 0Ú 1º 1þ 2® 3 3¸ 4  5~ 5ð 6` 6Î 78 8 8Ú 96 : :t ;@ ;¸ < <„ = =¦ > >: >~ >â ? ?j ?Ô @ @† @ð AZ AÆ B2 Bx C C` CÄ D( DÌ Ep Eö Fš GL G¢ Gø HN H¾ I. Iž J JZ J¦ Jò Kt K¼ L L` L² M MØ NŠ Nö OH O  OÞ P P† Pê QB Q  Qú RT R² S ST S² T Tj TÚ U. UŽ V V~ Vð Wb WÔ X XZ Xœ XÞ Y Yª Z$ Zh Z¬ [ [` [º \ \’ \ì ]F ]º ^n ^Ì _( _z `F a ax aº aú bL b‚ c& c„ cÞ dT d¦ dø eJ eò f” g: gØ h€ i i€ iÆ jL jÎ kŠ lF m mÎ nŒ oF oæ p¢ q^ qÒ rF r† s" sÒ tH tÒ uF uº v2 v¦ w wL x( y yì zª { {~ {ì |Z |Ä }2 }þ ~& ~” ^ €( €† D Ä ‚& ‚‚ ƒV ƒÞ „( „ž … …r …Ü †F †¨ ‡ ‡Z ‡¾ ˆB ˆ¬ ‰$ ‰d Š Šú ‹ˆ ‹ò Œ\ Œè r Ž Žš 6 Ì D È ‘6 ‘¤ ’ ’d ’Ò “ “F “´ ”$ ”‚ ”î •„ •ð –Î —ª ˜z ™ ™è š: › ›Œ œ` œê t ú ž‚ žþ ŸR Ÿ¦    |  Ô ¡$ ¡t ¢ ¢V ¢’ ¢è £< £Ê ¤x ¤Ì ¥ ¥h ¥È ¥ü ¦@ ¦„ ¦Ü §( §x §Ä ¨n © ©š ©î ªt ªú «~ ¬ ¬B ¬Ä ­B ­ü ®¶ ¯Œ °f °Î ±d ² ²” ³6 ³Ì ´\ ´ü µŠ µô ¶^ ¶È ·0 ·š ¸ ¸p ¸Ú ¹D ¹´ º ºŒ ºú »h »¬ »Ø ¼ ¼j ¼¶ ¼þ ½d ½Ö ¾ ¾r ¾ä ¿V ¿à ÀP À¾ Á8 Áü ˆ à À Ãä ÄH Ĭ Å Åp ÅÐ Æ4 Ƙ Æà ÇN Ǿ È Ȳ ÉJ ɤ Éü ʦ Ë\ Ëö ÌŒ Í" ͼ ÎV Îê Ï„ Ð Ð~ Ðæ Ñ, Ñ’ Ñì ÒJ Ò¼ Ó2 Ó  Ô Ôˆ Õ Õt Õæ ÖX ÖÌ ×F ×À Ø0 ؤ Ù Ù„ Ùô Úl ÚÈ Û$ Û€ Ü ܈ ÝB ݶ Þ. ÞÜ ßd ßì àp àô áÜ âf â ãj ä ä^ ä¾ åP åâ æ’ æ¸ æÞ çV çÆ çú è^ èæ éX éæ ê@ êÐ ë` ëì ìx í íˆ íþ ît îæ ïX ïÜ ð^ ðâ ñh ñì ò¬ óf ó² óþ ôD ô¸ õP õè ö~ ÷ ÷¦ ø øt øê ùZ ùÆ ú< ú¬ û û‚ ûê üd üâ ýN ý¾ þ. þ¤ þü ÿp ¢ 8 Ò j  À f  ¶ f Ü R ¸  „ ð Š ð Z ¾ & Ž ø ` J 0 ¤  |  P Þ ^ Ü \ Ü \ Ö V ¶  ˆ æ D ¤  T ®  ^ ´ ’ ê h ¾     b º ¤  š 4 Ð !l " "  #< #Ø $t % %† &t ' 'Œ ( (Œ ) )Ž *\ *à +R +ê ,n , -F -v -ú .p /0 /b /ò 0v 0Ø 1: 1Ä 2X 2Þ 3f 3ì 4r 4þ 5„ 6 6 7 7œ 8 8¬ 9: 9È :X :æ ;t ;ü <š =( =¦ >$ >„ >þ ?t @ @J @Ü AX A¬ B4 B¾ C8 C¶ DD D˜ E E€ Eê F@ F² G Gr Gª H Hv H® I In IÖ J JZ Jè K| L Lr M M¤ N< NÎ OP OÔ PR PÔ QX QÚ R^ SH S® TH TÈ U6 U¶ V6 V° W2 W® X0 X¬ Y, Y° Z< Z¸ [@ [Ä \0 \¦ ]† ^ ^¬ _. _® `, `¬ a, aª b& bn bè cj c¾ d> d¸ e2 e eÚ f$ fn f¸ g gL g– gþ h\ h¶ i i† iú jp jØ k kh k° kø l@ lˆ lÐ m mŒ mÔ n nÈ o ož oæ pd qD q’ qà r rr s s˜ t u uÔ vØ wÜ xÐ yH yÀ zp zè {` {à |` |à }V }Ú ~Z  † €* €Ô ¾ ‚ ‚N ‚Ü ƒ~ ƒÂ „t „è …\ † †¨ ‡< ‡r ‡Ä ˆb ˆ¨ ˆî ‰Ž ‰ü Šš ‹ ‹„ ‹ø Œ~ ŒÖ J ê Ž\ ŽÐ D ¸ * j â ‘V ‘Ê ’" ’– “ “€ ”, ”ž ”þ •` •À – –z –Ü —L —¬ ˜ ˜T ˜¶ ™ ™® šD šÚ ›p ›Ð œ0 œˆ œ´  t Ì žŽ žÖ Ÿˆ  B  ü ¡º ¢` £ £Ì ¤€ ¥> ¥ø ¦¦ §b ¨ ¨Ú ©– ªR « «Ê ¬„ ­( ­† ®$ ®Â ¯: ¯ê °N °È ±. ±â ²6 ² ²ä ³8 ³Œ ³ä ´ ´b ´¸ µ µd µ¼ ¶ ¶d ¶¨ · ·À ·ø ¸ ¸€ ¸ò ¹d ¹¬ ¹ô ºD ºÖ »" »’ ¼ ¼F ¼¸ ½N ½ú ¾¬ ¿Z ¿˜ ÀR Àš ÀÒ Á Á^ Á¢ Áê Â0 Âx ÂÀ à ÃN Ô ÃÞ Ä& Än Ķ Äü ÅD Ũ Åü Æ~ Ç ÇŽ È È’ É É‚ Éî ÊV ʼ Ë" ˈ Ëæ ÌD ̪ Í ÍŒ Î* Έ Îæ Ïè ÐF Ъ Ñ4 Ñž Ñü Òh ÒÖ ÓN Ó¼ Ô Ôt ÔÐ Õ, Õè Ö¨ ×, Ø ج Ù Ù¨ Ú” Úî ÛV ÛÜ Üš Üö ÝR ÝÌ ÞB ÞÊ ßB ߬ à à† á á” â ⪠ãB ãö ä  å å˜ æ æ” ç çŒ è. èz é éð êÜ ëd ëò ì€ ìò íb íÒ îB î² ïX ð ð¬ ñV ñü ò¨ óR ó¼ ô$ ôŒ õ õ˜ ö ö– öî ÷p ÷ò ø4 ø| øþ ù‚ ú( úÐ ûx ü üN üª ýP ýØ þJ þ¬ ÿ ÿp ÿö ž Ú 6 ’ ð ¢ ú P Ò P Ö Z Ú R Ð B º 6 ´ 8  @  6 ² 2 ¶ h ê œ  r â ž  ˜  D ¦  l î T ¶   > ž  ˆ ð Ú V Þ f  ` ä p  X †  ~ ö v ! !Š " "– # #ž $" $  % %° &* &¨ 'T 'ô („ (° )P * *Ð +˜ ,0 ,¸ -¦ .D .â /h /ú 0˜ 1* 1¼ 2N 2à 3< 3Î 4@ 4Ð 56 5ž 6 6t 6È 7 7l 7Ê 8. 8‚ 8æ 9F 9À : :| :Ü ; ;> ;„ ;à > >ž ? ?f ?Æ @& @Æ Af AÐ BB B² Bø CŒ D D¶ EJ EÞ Fr G G´ Hp I" IÖ JŽ KD Kþ Lh LÒ M& MŒ Mä N< N” Nê OB Oº P0 Pœ Q Qr QÞ RJ R¶ S SŠ Sð T^ Tè UT Uº V0 Vœ W W Xb Y Y€ Yð Z` ZÐ [@ [È \8 \ª ]* ]ª ]ð ^p ^ð _p _ð `p `ð ar b bt bÖ c cˆ cä d\ dä eh eì fp g g¼ hZ hÞ i^ iÚ jV jÔ k k¤ l. l¨ lÜ mX mú nx n¸ o6 o¨ pH pÄ qF qÀ r: r¸ s, sÌ tD tâ uV uþ v¢ wL wø xP xô yš z z~ zè {X {È |2 |ê }  ~X  Ð €\ €è t ‚ ‚Œ ƒ ƒp ƒÐ „2 „” „ö …z † †Š ‡* ‡Ê ˆÀ ‰D ‰È ŠN ŠÐ ‹  ŒT j È Ž Ž| ŽÜ < œ 2 Ä ‘X ‘ê ’| “ “® ”L ”¾ •0 •  – –l –Æ —B —Ž ˜ ˜² ˜Ú ™V ™Š š š. š® šØ ›¬ ›ö œp œè B  ž< ž¸ Ÿ6 Ÿ²  .  ª ¡& ¡¢ ¢ ¢Ð £€ £þ ¤z ¥ ¥ž ¥ê ¦p ¦¸ ¦è §j §¼ ¨ ¨Ä ©v ª& ªÎ «€ ¬ ¬° ­H ­à ®x ¯ ¯¨ ° °˜ °ì ±@ ±” ±è ²4 ²€ ²Ô ³& ³R ³¤ ´ ´n ´Ô µ8 µª ¶ ¶† ¶ø ·j ·Ü ¸H ¸º ¹( ¹^ ¹Ð ºB ºº »6 »² ¼. ¼¬ ½( ½¦ ¾$ ¾¢ ¿ ¿ž À À– Á Á’ Áô ÂV ¸ Ãj Ä ÄÆ Äæ Å ÅÊ Æp ÆÜ Ç” Ç´ È ȶ É, É´ ÉÔ Ê† Êî Ë  ÌP Í ÍL Íþ ζ ÏZ Ïz ÏÜ Ð~ О о Ñb Ñ‚ ÑÜ ÒV Ò~ Ó( ÓÔ Ô~ Õ* ÕÖ Ö| ×8 ×° Ø\ Ù Ù– ÚH Úö Û¤ ÜX Ý ݲ Þ Þ~ ß ß´ à( à á^ â( âî ã¸ ä‚ åH æ æª ç@ çØ èn é é0 éŒ ê0 êÄ ëZ ëð ìP ìî í† î îÖ ï” ð ðÌ ñˆ òT òÈ ó˜ ôP ôì õ† ö* öÐ ÷< ÷Þ øz øþ ù‚ ú úŠ û0 ûÔ üz ý ý þX þò ÿ– 8 Š Ü . ˜ ê < Ž à 2 Ò $ ˆ Ú . ‚ Ö * ~ Ò & z Î "    š  ‚ ö n Ü L º ( –  z ò l ò x  ¬ F ä €  ¼ R ô  (  \ ö , ^ æ n ¸  € æ L ²  ~  ’ ê v – ! !¢ ", "º #. #° $2 $® %" %  & &| &ø 'l 'Ü (x (è ) )` )Ð *@ *è + +„ +ú ,f ,Þ -f -Æ .0 .œ / /t /Þ 0D 0° 1 1T 1¾ 2* 2Œ 2ü 3h 3´ 4h 4Ü 5L 5À 6 6Ž 6¾ 72 7¨ 8 8X 8® 9 : :þ ;n <Ž = =† >$ >Ò ?T ?î @ @® AJ Aä B€ C C¶ Cæ D‚ E EÀ F^ Fð G‚ H Hœ I IÆ J4 J” Jú KZ K¾ L" Lt L M$ MÌ N0 N NÞ O< OÜ P6 PÀ QT Qè RZ RÔ S S€ Sö Td TÒ U@ U® V VŒ Vú Wh XP X¤ Y" Y Z ZŠ [ [z \, \Þ ]„ ^. ^Ô _€ `* `Ô a€ b. bl c c¼ d^ dâ ef eê fn fò gv h0 hž i" iÀ j& jŒ k k” kè lZ lŠ m m’ n n¬ nú o~ p pŒ pì qj r rx sb s¬ t$ tœ u už vZ w w| wô xT xª xÖ yJ y  yÞ z@ z˜ zÚ { {‚ {ð |h |¬ } }^ ~2 ~Ê € D ¤ ‚ ‚ä ƒ\ ƒ´ „ „d „ò …| † † ‡" ‡¬ ˆ< ˆÊ ‰Z ‰â Š: ŠÊ ‹X ‹ä ŒZ Œ’ Œæ L Š ð Ž2 Ž  0 ¶  h À ‘p ’ ’Î “8 “¤ ” ”r ”Ð •. •Œ –, –Ð —v ˜ ˜¸ ™Z ™Ð š^ šâ ›P ›ð œR œÈ ‚ ž žö Ÿ’  .  ¼ ¡N ¡Ü ¢n ¢è £R £Ê ¤4 ¤Î ¥F ¥Ú ¦– §* §Î ¨Š ©H ª ª¾ «~ «Â ¬" ¬f ¬Â ­ ­H ­Â ®B ®¬ ¯2 ¯‚ ¯ü °v °ð ±L ±  ²& ²  ³ ³¦ ´6 ´¾ µh ¶ ¶¤ ·6 ·² ¸* ¸¤ ¹ ¹– º ºŠ » »‚ »ô ¼T ¼Î ½J ½² ¾& ¾° ¿, ¿¦ Àž Á  Âè Ãt ÄN ÄÊ Åp Åú Ç Ç” È Ȧ É, ÉÀ ÊR ʸ ËT Ëð ̬ Íb Íþ ÎŒ Ï ϰ Ð< ÐÌ Ñ\ Ñè Òt Ó Ó² Ôf ÔÚ ÕN ÕÀ Ö0 Ö¤ × ׌ Ø> Øô Ù  Ú& Ú¬ Û2 Û¸ Ü> ÜÄ ÝH Ý´ Þ ÞŒ Þø ßd ßÐ à< àž á ဠáö ân â ã ã ä äx äî å^ åÔ æd æ¾ çT çà èp èü éŒ éÔ ê` êð ë| ë¼ ìH í íª íè îh îª ïR ïö ðž ðà ñˆ ò, òˆ ó óˆ ô ô® õR ö öX öØ ÷R ÷Ô øR øÎ ùN ùâ út û ûœ ü6 üœ ý ýh þ þÌ ÿ2 ÿ˜ ÿö \ ì Þ  š ” d  â F ª è Š 4 à ~ 6 Ð n  ¦ 4 ° , ¨ & –  v æ V F Ú n à P  0 ¤ 8 Æ V â n ô ´ t 4 ü À þ À ˆ F ² !p "0 "ð #¦ $` % %´ &F &Ü 'p (~ )„ *’ +, +l +ì ,h ,Ø -n -è .ž /` /ö 0€ 1 1l 1Ò 28 2ž 3 3j 4 4¼ 5Š 6T 7 7ô 8¼ 9Š :X ; ;è <œ =T > >h >Ð ?2 ?Ä @V @è Az B Bž C4 CÆ D\ Dò EŒ F( F GX HH I2 Iª J" Jœ K K’ L L° M` N NÀ O OÎ PL PÆ Q8 Q° R& Râ Sž TX TŒ UH V V¾ Wz Wæ Xj XÌ YJ Y‚ Z< Z€ [ [¢ \. \¾ ]N ]¦ ^r _@ ` `Ô a¢ bl bÔ cœ dh e eà f° g: gÈ hX hä il iø j„ k k– l0 l¶ m@ m² n4 nz o o’ pX pü qˆ r rº sP t tö uˆ v v¤ w0 wö xl y y’ zp { {È |t }" }Î ~| V ¢ ò €r €¾ ^ à ‚^ ‚Þ ƒ^ ƒÞ „^ „Þ … …P …Ø †l †ò ‡² ˆ. ˆÞ ‰Ž Šf ‹* ‹ö Œ¨ h Ž< ŽÆ N Ö ` ê ‘t ‘þ ’ˆ “ “¦ ”0 ”º •n –" –Ô —Ž ˜> ˜ð ™z š šŽ › ›¢ œ, œÊ d þ ž Ÿ( ŸÀ  X  ò ¡l ¡Ò ¢* ¢  £0 £’ £ú ¤` ¤Ø ¥* ¥’ ¥ö ¦h ¦æ §8 §Š §Ü ¨. ¨€ ¨Ò ©$ ©ˆ ©Ú ª ªb ª² ªô «Ê ¬L ¬¨ ­¨ ® ¯P °( °þ ±` ² ²Ú ³D ³¦ ´N µ µ¾ ¶| ·6 ·î ¸¤ ¹N º º@ ºì »œ ¼F ¼¬ ½\ ¾" ¾¼ ¿" ¿ˆ À2 ÀÄ Á6 Á‚ Â< Âú ú Ät Å2 Åò Æœ Ç Ǹ È` É É® ÊP Êð Ë’ Ì0 ÌÔ Íz Î Î^ ÎÄ Ï Ï® ÐT Ñ Ñè Ò° Ó‚ Ô@ Õ ÕÒ Ö  ×n ØT Ù4 Ùˆ ÙÆ Ú„ Û Û” Ü ܶ ÝP Ýî ÞŒ ß* ßÈ àh á â âè ãÆ ä¤ å‚ æb ç ç¤ èF èæ éÊ êh ê¦ ë. ëÆ ì` ìö íŠ î îž ïL ïú ðB ðò ñš òB ó ó ô ô  õ õä öä ÷ä ø¾ ù¾ ú˜ ût ür ýn þ. þî ÿ¸‚FØžn*òjâZÒZâ j ô €  – $ ¬ 4 ÂJØf¤Œ’zîbÜt°Jæ„"¼PèzBÔpn¶ > È!R!Ü"¢#h$.$ò%¸&~'D( (â)¼*˜+<+Ü,|--à.”/J/þ0~0ø1t1ô2Œ3$3¼4z55¶6V6ö7–868ö9¶:l;,;ì<¬=`>>¢?F?ì@ŒA>AðBBÊC|D@DúEÆFŠGLHH I2IÀJ KbL"LæMªNhO$OäP¤Q`RRÞS SÔTT–U$U¾VhWW¼XdYY¶Zf[[®\\] ]¶^b__®`T`ôab$b°cFcôd¢eNe°ffpfÎg¶h(hÈi0iüjvjÒk0kÐkðlœmLmônšo*oºpZpúq˜r8rÚspsötÂu€vzvøwdxx˜y.yÄz˜{8{Ü|‚}~Z~ð†€€¤:Ò‚nƒƒ°„`……´†\†Ø‡ŽˆP‰ ‰ÆŠ~‹8‹úŒ¼ŒôŽ@Žð‘^’L“2””p•:–&——ò˜¦™–š šÐ›œœBœú°ždŸŸÒ ²¡‚¢4¢â£Š¤>¤Ì¥V¥ä¦Œ§:§ì¨|© ©œª4ªÎ«^«î¬ˆ­­Ž® ®Š¯¯‚°°¨± ±œ²²”³³„´´~´úµtµð¶l·*·ä¸œ¹4¹Ìºb»T»°¼¼l½½´¾6¾æ¿ÈÀŒÁÁªÂ6ÂÂÃHÄ@ÅŶÆ"ÆŒÆöÇ`ǺÇþÈfÈ®ÉÉÊÊxË˰ÌH̪Í ÍNÍêÎ>Î’ÎèÏ:Ï’ÏäÐ6ЊÐÜÑ0ÑâÒ”Ó ÔˆÕpÖX×.ØØÚÙvÙÔÚÎÛ”ÜTÝÞJß~à´ájâ ã ãôääåÔæ¼ç¦èdéé¼êhë&ëäìíNî î~ï<ïúðDñ.òòþóˆôxõdöD÷2øøæù²ú|ûHüüâý¬þ„ÿ.øœ†<ŒübàF¢ü,`è,xÄ^Ö < ˆ Ì h ´ . z Î  d ¼ D  ðÈl¸6ÂDð~8PœÔ6˜ Œ N–ðNª fvÚ0Ö"”ÞXÚ J À!!l!Ö"H"¼#P#®$¢%p&&Î'j((®)N**´+X+â,d-"..Š/R04122Ô3z4F5 67.8T99â:²;î<à=ò>N>®??p?Ê@*@˜@úAlAìBrB²C4CxCèD2D|DðEˆFF¬G0G¤H@HÜIVI¢IòJRJ²KK¤LLhL¾M8MºNNŠNÞOFOºP@P”QQ‚QòRhRæSRTT|UUxUðVjVøW\WúX°Y.Y†YâZtZÖ[8[š[ü\\\¾] ]‚^^J^Â__l_À``l` `Úaa`a²aþbhbÐcXcÂd dˆdÈe(eÊftfügvhhŠiiŽj j˜k2k²l.lÆm mfmònZnÎoopoîpÆqbrps^sätptêu<u¦vv|væwPw´wðxbxòy’zDzÐ{2{®|,|¦}}œ~4~ÎTþ€®Lƒ ƒ¶„@……ª†R‡D‡ðˆ ‰2‰Š‰ìŠt‹ªŒœ<ŽޤR,𑬒x“"”••Ì–š— —ä˜ˆ˜ô™¤šNšî›8›‚›Ìœœ`œª –àž*žlž¸ŸŸZ  Ô¡V¢¢Î£†£ê¤n¤ö¦¦ä§Œ¨H© ©Êªî«¢­®,®Ø°.± ²R³€³Ö´ ´€´¼µ&µà¶D¶¶è·¤¸L¹¹x¹ðºFºœ»»†¼2¼ª¼ú½j½æ¾t¿¿šÀÀ^À¾Á$ÁºÂDÂôÃ’ÃþÄdÄÀÅ"ÅvÅêÆŽÇ,ǪÈBÈÀÉ0ɘÉúÊPʰËBËÊÌDÌÎÍ ͰÎZÎäψÏäÐZÐàÑÎÒzÓ ÓœÔ:Ô˜ÔöÕDÕÜÖTÖÐ×tØ4ØÒÙ˜ÙúÚxÛÛØÜzܼÝ*ݨÞVßfà>á áèâ ã„äå`æŠæâç*ç‚çÈèfèôé¤êXêàë¦ìœííPí¨îî–îòïfððRðšñ ñhòòxó&óüô„ôÔõhõÌö*ö˜öÜ÷F÷ ÷Öøø|ùùxù¶úVúäûNûÊü‚ýýªþþ¸ÿ:ÿÀ|",쮼ú8¨V,¾† 0 ,  |  Œ R.ÌLîЦâÀdèàŽn`D2Þ"`ÂLü¦Ð  ‚ î!N!Œ!ì"v"Ü#v#ä$€%%â&Z&Ø'|'ø(x(ö)–**˜++\,,Ô./0 0¤1.1Ö2~323¼4`5,5Þ6t77R7®88>8°8ü9„9Ú:0:†:â;V;¸<.= =h=æ>R??Ø@p@êAlAâB„CdDHDÒEzF\GG–HBHòJ4J–KhKœL L®MJMäN˜OTPhPôQÀR†S†T<UUÌVèWøX0YYê[[[Þ\P\Ð]b^^ì_‚`0`Êa*aœaôbTb´ccfc¶d dVd¦dòe^eØfTfÒgRgÊhJhÌi*ižiôjdjÄk"k€kÔl*l†lâmBmšnn„nòonoÈp(p¤pæqq°rJr¬sHsètHtºuZuÜvZväwxwäxxyydyÄzž{z|(|Ú}â~@~Ö,Üæ‚žƒ^„††ê‡V‡ÞˆDˆˆˆè‰x‰îŠn‹‹ÐŒn2îŽt$ü‘æ’v“&“~”Z”²•H•Ò–H–ž—Ì™™þš–›&›¼œ˜(ØžZŸŸ¶ Z¡¡¤¡ê¢–£’¤¤ò¥Š¦r§¨$¨Ô©’ª^ªú«’¬"¬ä­ ­–­ö® ¯P°:°±±t±Ü²€²ö³r´^´öµÖ¶¦·z·®¸¸h¸ ¸à¹6¹j¹²º0ºšºâ»»|»ê¼V¼Ü½h½À¾¾F¾†¾ø¿v¿ÈÀÀnÀ²ÀúÁ>Á~ÂÂF†ÂðÃnÄBÄžÅÅNÅÊÆ ÆNÆŽÆàǨÈrÉ’Ê.ʶË`ÌÌøͲÎhÏÏØФÑ*ÒÒÒÓ¸ÔhÕÕÆÖ4Ö¸×פ×ðØ8ØÖÙDÙäÚPÚøÛ–Ü,Ü¢Ý2ݾÞhßß|ßæà~á"á¢ââjã,ã äläøåâæ€ç@èèæé¬êpë ë´ì†íí¼î˜ï|ïðð¢ñÈò°óvôôºõ\ö"öÂ÷døøÞù‚ú ú¦ûVüüîý þˆÿ ÿòF:²rRÀVh   þ ö î Øb|–Æ îÒ rŒP^œþ^¾€¸ðVž^è:Þ |!B!°"¦##È$6$¤%%´&€''î(°))¬)ø*”*Ò+L+ä,",´-8-º.L.è/¸0Ž1^1œ2®33f3æ4X4¢4ò5J5 5ø6j6î7´8@8Š99X9Ä:R:ä<<,<”<ô=\=¾=ø>D??P?”?Þ@Z@ØAAbAÜB„CC¢CúDFDÀE:EÊFLG GòHtII¸J†K(KÂLšMhMÎNNNöO°P P¸Q>QÂR`S S¬TTbTÀUU|V&VzVÌWjXXfYˆZ8Zî[Š\~]@]ú^:^–__¤`.`¬a|bZcHcÐd’dÔeexf:ffúg@g‚gæh(h®iiTi€i¾jjZj¤jîk8k‚kàl mRmÐnznøorp6pÖqq\q¾r"rŒs0t tèvwx@y&yªz˜{|| |š}}\}¶~@~ðxè€8 ¨‚2ƒƒÐ„Œ„ò…^†<†t†ü‡„ˆˆ|ˆ¬‰”‰ÒŠ0Šþ‹NŒ„LŽŽ`.VÜ,˜Âì‘‘<‘f‘î’†’°’Ú“–“À“æ” ”t”š”Ä••ª–D—4—À˜š™|šš¼›bœœÚœäžžjž¼Ÿ<Ÿ¤Ÿò $ €¡¡²¢¢œ¢þ£^£æ¤`¤â¥d¦D§ §x§¶¨@¨ª©©¾ªÚ«Æ¬V¬ž¬ò­l­–®®x®ê¯L¯°° °Â±|±ò³ ´P´Øµ&¶ ··´¸&¸l¸¶¸à¹„º(ºØ»ˆ»È¼¼²½½‚¾¾Î¿ ¿ÐÀÈÁ®”ÃzÄ`ĺÅÅjÆÆrÆÞÇfÇÔÈ ÉÈÊŽË&Ë˾ËìÌ8ÌÒÍlÍÖÎ,ÎÊÏlÐоÑNÑØÒ²Ó<ÓêÔÚÕ ÕŒÕâÖNÖÀ× ×fתØBØÄÙÙ|ÙÚÚ¾Û€ÜLÜÄÝœÞxßßÄà àòá~â"ããâälåæç0çöèÞébê>êüëvëºì.ì¢í,í¾îðïÌð²ñ”òDòÀó<ó¸ô&ô–õõèö0ö~öÌ÷÷˜÷âø,ø¨ù$ù¶úšûJûòüšýhþFþÌÿ”ÿüNÊ\¾x¢Ì`¶0¬XRØb’âÐ ˜ x ¨ Ø  8 î h Š þ „ öäRŽFÂ~äDÊ" ‚Þ´Š~JÜ hXRäN|œün°  ¶!P!Ì"D"Þ#È$4$t$Ì%\%¬%ü&r&ô'T'¬(.(¼)J)ê*°+>+â,D,°--p.H.Â/V/¶0‚1B2d3V3à4d4ø66Š787Ú868’8ê9|:;;è==n=ô>f??œ@@ÐA"A–AöB|C0CöDE"EŒF@F¾G‚H:HÂIžJ(JÌKjL6MMÒN„O(OàP¶Q’RXS SÀTU(VVôWÒXÊY‚Zh[˜[Ú\\œ]]Ð^Ž_^``’`Þa‚b^c8cŠdHdÒeŠfFfæghgðhVhäiÈj¬kŽkælÌm2mÐmønLn¶nüoBoˆoÎpppp®pîq.qnqšqÆr4ržrÞs(sXsŒsÀttht®uuJu¨vvDv¶wwzwÖxFxÌz{2{œ{î|"|T|||À}}V}¨~~¸N€*€Î–¾‚‚¤ƒ˜ƒâ„„V„ „ê…V…œ†N‡8‡n‡žˆˆ˜ˆú‰X‰¬ŠŠˆ‹‹V‹˜ŒŒ¼f¾Ž ŽZŽ„4f8¸‘j‘Ö’€““~“æ”V”À•b•Ú––®——t—Ƙ˜l™™X™ˆ™ðš„šò›*›j›öœl–ž žjžÆŸ¤ @¡¡Ö¢>¢ü£‚£Ô¤,¥¦¦þ§°¨’©"©X©¼ªHªö«š¬¬¢­€­ø®`®Ü¯X¯ª¯ü°R°¢±T±ò²”³8³È´˜µ.¶¶ž·8¸(¸Ö¹‚ºXºà»¶»ê½½š¾¬ÀÀ¢Á4ÂÂxÃZÃÖÄzÄèŰÆFÆÌÇ ÇvǼÈ0È„ÉÉÒÊ@Ê„ÊÈË,ËØÌHÌÚÍ ÎŒÎêÐfÑÑšÒÒÌÓØÔ6ÔÆÕVÖÖ®×4×þؾÙ„ÚZÛÜ ÝݦßߎßêànàÄádáÌáøâXâæãbãîäpå*æ.ç¤è ètéé”êê¢ë"ë ìTì„í&í¬î`ïZð8ðæñlñàòžóDóÚôRôÄôüõ|õÐöDö´÷F÷’÷ÂøDøzø®ù¤úŒû\ûÀüVüÈý:þþ6þšÿÿrÿìf–’ ¼x È|2ðŽ"  Ä T  v ^ þ . ^ ®¸bÎ:Üzvø¼\¬hþŒV,œÜRÂ0tútö¸Î¼ ¨!Œ"b#j$ˆ%¨&6&n' '²(¬)º**D*Ä+ˆ,¨-R-Ô.6.È/*/Œ/Ò0\0¤1D2L2”2Ü3X3Ü4 4ž4Ú55b5ž5Ö66V6è7.8L9l:ˆ:Ê;D;¨<$<¨==–>>`??Ð@b@øAäBÄC¢D²E E†F.F€FÔGGVG¦HHVIfI¾JbKKÚLpM\MºN N¦O$O¼PdPþQ¨QþR.RbR®RäS\SœTU.UvVV¶VþW¢X.X¬Y@YØZ.[\$\°]–^^¬_@_ð`Øa~b^c*cêd†ereÚf0fÆg`gühLi iŠjj¢kTkâlŒmmvn"nnðoZožp^qqÖr rhr¼rìsVs¸t0thuDv2w@x>x”xèyDz6{.{‚{ö|&|p|º} }˜~(~¶zà€F€â|‚‚Š‚æƒÈ„„”… …„…ú†~†ò‡Œˆ,ˆ~‰nŠb‹‹°„öŽl0ô¶‘~’R’ΓL“È”2” ••À––´—X—ü˜L˜œ™|šX›2›ðœ€ŽîžLž®ŸR   Ø¡N¡ê¢þ£¶¤>¤ü¥À¦¼§Ì©D©pªªŒ««Ž¬D¬È­J­š­Ê­ú®L®œ®È¯¯ °`°Ü±²²H²Ì³¤´z´üµº¶¼·R·¼¸~¹H¹´ºº²»`¼¼r¼æ½¦¾n¿¿°ÀTÀøÁœÂ@ÂÞÃÌĜłÆXÇLǨÈdÉÉìÊDʨËË|ËôÌN̬Í^ÍØÎxÏϼÐZÑÑpÑúÒàÓšÔ¼ÕVÖX×`Ø^ÙŒÚÀÛ4Û´ÜpÜœÝÞ,Þ„ß`à>àðápáðâLâÔã¢ä:äò妿Zç çºènéé€êJëëÞì¦í"î2ïRðXð®ñÜòPòØó\óîônôÊõ\õ®ööº÷6÷¾øøØùjú`ûXüý&þbþ þÞÿ¢ œ°4Ò Tîœ.Ö œ  ¢ P ä x  ‚š&̤’–䞀ö´ŽÈ öÆÞ²Z$|ô Ž!(!ž!â"˜#€$%.%Ž&&j&à'D'Ì(p(Þ)º*ª+,,N,Ä-8-´.0.¤/T/Ø0P0â1@1Ô2,2®3Â4"4z55†5î6ž7N7þ8L8š9F::”;F;Î<†==ú>F>Ä?.?”@hA@B8ClC²D2D²E4E²F0FFòGtGôH”I6I~J€KrL2LôMPN,O OÐPPnPúQžR€SZT$T´U¤V0VºW:WŽX$X¤YYÒYþZ4ZŽ[[Î\L\Ê]Ž^|__ü`‚`äaaNaŒaÌb bÌc~deœfäg:gjgâhFhäi~jjxjükÆmm–múnÖo<o¢p:pÒq¢rzssêtÊu¦v"v ww”xxˆyyÒz–{d|.}}Ö~tœ€$€®8Ú‚|ƒƒÀ„b……¤†J†ì‡¢ˆ`‰‰ä‹ŒZŒè6øŽºÌÒ‘Ú’¢“R”4”ˆ”Ø•*•z•È–:–Ž–è—>—Ú˜z™™´šFšÐ›\›æœJœÚrôž˜Ÿ$Ÿ´ ª¡:¡´¢Š£J¤¤–¥P¥ò¦ä§P§Š¨R© ©ÀªŠªö«|¬¬Š¬î­ˆ­ú®L¯¯’°&°º±P²r³’³îµ¶.·L¸¸ê¹Äºv»»º¼b½l½Î¾$¾®¿ŒÀ`ÁFŠÃÞÄÄŒÅÅ|ÅüƆÆôÇHÇèÈ¢ÉXÊDÊæË®ÌpÍ~Î6ÏÏþÑ2ÒRÒöÓxÓêÔjÔ¾Õ&Õ„ÖÖ˜××>Ø&ØðÙ®ÚPÛÛÆÜvÝ&ÝÖÞêß²ààVá8ââêãtä.åæ:æÂçÊèÊéÌê¾ë&ììÖíJíºîRîèï|ððxðÜñŒòxóhóÐô6ôœõfö0ö÷÷šøø°ù2ùÚúÀû üxýTþ.ÿÿà>ÂFÌL’®¾pÐ0Ì Ü † ø ª ˆ ö d Ä6¢¼ ,Ö‚4òbÒ@”àBŽ&€Ü2¦PªøF”JÚ^Ĩ¤.´  æ!þ"ä#Ü$(%V%¨&$&Ò'„((ä)j)ô*Â+’,`-2. .Ü/6//ü0Œ11ª242Ä2ü3R3¢44¢5(5¬686È7P88ä9®:x;D;â<|==Œ>\>ü?¤@L@ÌAHA¼AüB¦C6CâD^DØEŠF4FâGbGÌHHhH IIVIœJKKtL LÀM`NNfO@O‚OÜP4PPÊQQzR R¤SnT8T UUfU–UüVbV¤W WŽX$XÌYY\YòZ’[4[Ö\x]]ª^^¤_0_¼`L`Þajb:c cÚdrdèe eÌf\fìg|h h˜i&i´j>jvk kZk¨kölDl’mˆnlooÐp‚q4qÆr^rðsPttÒu”vÖwºxbyyÈz({{°|@|œ}}Z}¶~~n~Î.ò€”6®‚‚d‚胎ƒò„8„°…(… ††Š‡‡|‡ôˆ¤‰‰üŠpŠÈ‹ ‹t‹ÈŒŒxŒØ8Ž"Žú¨^‘„’Ê“ ”L••X•¢•º•Ü– –T–€–¶–ø—^—®˜˜p™™‚šš‚šð›ˆ›èœÀpž$žšŸŸ‚Ÿð „¡¢££p¤|¤”¤æ¥4¥¦¥ö¦`§§¢¨:¨R¨’¨Ê©©l©´ªª°««8«€«ð¬~¬ª­­n­Æ®$®’®Ü¯X¯Ì°J°æ±V±Â² ²Œ³³‚´‚µPµ€¶*¶Ò¶ô·:·|·¾¸*¸¸ø¹p¹æº˜ºü»(»@»|»à¼¼n¼¢½½R½Ì¾¾Š¿¿ŒÀ$À€ÀÈÁvœÃ(ÄÄÆÅBÅÀƸÇ<ÈÈHÉPÉ–Ê&ÊüËXÌÍ2ÍŽκÏòÐþÑ^ÑâÒ†ÓÓ¸Ô*Ô^ÕÕ¾Ö(Ö|Öâ×4רØ&ÙÙÀÚ¾Û"ÛlÛÒÜÜ”ÝVÝvÝÆÞ@ÞŽÞìß¾ßÞàNà°áxâ`â”ã&ã¤ãää(å4å|åÈæNæâçvçÂè&è„é†êtëÚì4ìäí6íÖî îVî¢ï2ïÚðdð¨ñRñ¤òZòàó¦ôpôÂõ&õŠööböšöö÷V÷®÷æøjùùXùœùàú\ú úÔûXû”ûìüŠýýbý¶ýúþLþ¼ÿ8ÿš ŠÜ~*ðÆ”’ö–R  ” ¬ Ö :   ú  r ø " ’ øpøbò”ØVÆ\Ä(Ø@bþX¸$~Ø*š:âpä\Ò@Ú<ŠörÞx l þ!r!ä"P"~# #$T%%Ž&R'd'â(š))’)º*€++è,p-N-ž.J. /2/¾0˜1ž2Æ323Ö4@4 5z6 7º9:F:¤<<><ˆ<Ø=B=”=ö>X> ??¬@$@”AAzBB¬CC¦DvDèEtF>FÄG8GÔH8IIšJ4JÞLŽLàMXMÀN"NœOJOªPrPðQªQîRŠS>SrSòTŽUTUÐVVdVÆW~X*XÈY¤ZFZ”[V[Ê[ú\ž]B]È^l^°^ì_š_Ê`L`ÞaŠbŠc\dFeeˆfTfêg$h&i<ili°iîj>j kkZkÀllm m˜n:nºo€p0pÔqÊrþtFt–u4v v^vÀw*w~wìxxŒxàyyvzzvzì{‚||j}$}ž~~f š€€”*È‚*‚惆„4„ì…L…¸…ð†f‡0‡¢ˆˆXˆü‰ŒŠŠ–‹|ŒŒpŒòÎŽ:Ž Tªòž‘,‘Þ’°“b”f•º–Η4—˜˜Œ™jšn››êžž¬žüŸXŸ , |¡R¢0¢š£p¤¤>¤’¤Ø¥,¥€¥ú¦f¦¢¦ô§§Ü¨V¨¼©T©¤©äªdªÒ«4«`«Ú¬x¬ò­‚­è®.®Â¯\°°Ä±L±Æ²X³³’´,´²µRµø¶´·°¸>¹¹¬º*º¼»¬¼†½@½ò¾z¿ ¿æÀ”ÁdÂ<ÃÄÄÔÅ‚Æ`ÇÇÀÈlɂʂËnÌJÌr̾ÍÍ®ÎTÎzÎòÏzÐÐôѰÑèÒ„Ó4ÓlÓ¶ÔÔ\ÔÔÕBÕŠÕàÖ:Ö|ÖÂ× ×XתØØfØòÙxÙúÚšÛjÛÜÜxÝÝØÞ†ߌà˜ášáÊâ0â„âÎãDãØä(ätäÆäöåÌæ0æšçç¨è"èœéRéúê˜ë&ìì†ìÒí^îî°îÚï’ð&ññÔòfó@óêôÆõxör÷ø¢ùÆú¦ûüPý"ý”þªÿº¾*bÖ0œÄöpÂf†ÆXîŠðT F & V ® î j À & Z 2”ÚHªèXÀ pþ8Šzî„êjìŽHºj„<Ú\ƈ„ö€F  ¢!`!ø"Š#L$@%%Ô&š'n(L)$)î*¾+^, ,Ì-‚.l//ì0Æ1î2’3V44¸5Ì6h789.::;p<–=Ê> >L>Ž>â?$?l?Æ?þ@`@¾@ÖAADA”BB¬CCäD|DþEÎEúF8F°G0GøHH¨IšIÒJ0J‚JàKvLLÖMLNLNæOVOÌPJP°QQnQÔR(R€RøSšSàTzTÞU`UÞV<VþWXW¾XX†XÖYTYöZÂ[[¼\2\°]`]’^&__X_À``ŒabbbZbÄcc dd¬eTe¦fVg gÒh0hòjj„k8llþm¾nbnÔo,p(pÀq˜r@stXuv.vtvôw`xHy$yþzÆ{ {b{Ä|H|Ú}Æ~V \€ö‚¾ƒ¤„d…p†b‡¦‡¾‡Þˆˆn‰&‰öŠØ‹v‹ÈŒŒtŒ®ŒúpŽŽjŽž~æŽà‘D‘à’V’î“z“ü”t”ä•~––R——€—ê˜b˜Ü™Šš’›`›¼œfœÖ`žž²Ÿp @ ’¡v¡è¢ £`£Ò¤v¥T¥Œ¦ ¦Š¦ü§’¨"¨p©"© ª,ªÚ«€¬¬Š­R­ö®T®ò¯n°v±\²V²¤³Ò´pµø··Þ¹º0»*¼X½Œ¾Š¿tÀHÀîÂZÃÆÄ0ÄÖÅ8ŤÆjÆÚÇhÇôÈÂɆÊRÊöËäÌšÍÍB͸ÎÎÞÏ Ï„ÏÂÐ6ѦÑÚÒ*ÒhÒÖÓLÓ¾Ô*ÔŒÕÕŽÖ Öº×nØ*Ù@ÙüÚfÚÚÛVÛÌÜÜÜHܦÜèÝ@ݲÞ:ÞjÞ´ßßßêà`àäá.áŠâ2âÜãXä äÊ儿æ²çBè èÎéHê6êÆëÈëúìbìÞí^í¸íîîPîÆïjð&ð ñ.ñðòDòšòðóHóÀôô„ô¸ôþõTõšöö`öž÷"÷p÷àø&øŠøÜù*ù¶úˆúÄûŽüü¬ý.ý„ýÀþ6þœÿ$ÿrÿÎ.¦~Lþ´`¦p€ròV² 0 ”  z  Ž  F œ > ÆTÀ4ô”NÀd:´ 8ŒD îæz$®|&¼  ´!"`"Ð#Ê$% &H'2(4(Ü)8)´*F*Î+h+æ,h,Ò-¶.d/>/Ê0r1n2|3"44È5T5Œ6n78Z9>::;$;€<‚=,=ì>È?Œ@jA(BPC<D:EZFlG¶I4JÖKæL¸M0N&OšOÊPPzQQnQòR¾S˜T>UUtUÒVfVèWXWúXŠYY®ZPZÆ\B\¢]8^|^®_x_ø``üaÌbtcDcÖdteeøf~fòggFgrgÞh0hÂiiviæjnjÈk8kÚlXlÊmm˜nn¼nÜo.o`p,pdp¸qqxqØr rRrÂs0sds¨t(tXtÆu2u¬vvjvÄw wrx:x”yy¢z"zÌ{H{z||‚|¼}^}º~~¦FÊ€b€Ò"¸‚vƒ*ƒŠƒØ„…h†T†˜†þ‡ˆ†‰‰N‰Øж‹ŽŒHþŽš`¤\‘‘Ä’¤“B“ž”4”¦•\––²—Š˜r™<™ š’››|›´œXœâ>˜žNŸLŸð ì¡J¡â¢X¢Ö£`£¢£è¤0¤\¥6¥Þ¦X¦È§Ž¨"¨Ê©ÚªVªÄ«¤«â¬­2­Ž®2¯~°±²(²Ú³&´´|´Àµ<¶ ·J¸.¹>¹Üº„»ž¼Ø½V¾4¾ð¿øÀÒÁÂÂJÃ6ÄÅÅRÆhÇ(ÇÆÈÌÉöʌ˜ÌlÍÍÖδÏ|ЬÑæÒ¸Ó¨Ô.ÕJÖžØLÙðÛÜbÞ4ÞÞ¨ÞÐß0ßbß´ààhàÈáFáÞâ@âÎã.ãÐä€å.å€åôæ¤çèè&èÄéé¬ê‚ëRìHìöíJí¬î.îžîÞïÐñòò˜ó€óðõõÈöÜørúBú”ûhüpý~ýðþÿN²î,ðL¾``¶Hð¬öž¼ œ ú J j Š  . jÌDÄtÂ4þ°¶ú0è(¬Ì.ˆ ¸ÚNê\®8¨2¾¨ x!P"’#,$¦%¨&Â'¶(.(š)* *~+8+„+Þ,Z,æ-d-¬.$. /2/Ð0r11b22¬45N6$6–77¢8h8Ä8ð9 9r9Þ:8:°;.;˜<<œ<è=j=ø>D>º??|?ì@*@Œ@òA,A B$BfBžBôCJCÄDJDèEvFF~FøGÀHNHÔIjIìJJJÚKlLLˆMM²N2N²OJPP®QQ–R,R¨S.SæT”UVUôVfVÒW@WâXžYˆZZâ[t\f]*]â^r_ _¸`\aaÊb¢c†d†e\f6fºg¢hŒiNj(j¸k¦lŒm0nopp¶qÒrXrÆsŠttÊuèvÔw¢xVxøyÂz®{v|v}L~"8€2ì‚Ѓ¬„|…d†B† ‡¸ˆÄ‰ðŠº‹î|pðpÊ‘‘t‘ì’h’ö“‚”8”~”À•"•†•æ––æ—H—ä˜\™™Èšä›F›ªœVœâ  žFžâŸLŸö ¶¡6¡¢R¢È¢ô£T¤V¥4¥þ¦Ð§N¨8¨˜¨þ©F©„ªªT««š¬ ¬®­"­Ü®:®ê¯’¯¾° ±&±´±þ²H²€³¦´Œ¶·X¸€¹P¹¸º »»T¼¼Î½D½ì¾Ì¿ÚÀ2À~ÁÁbÁðÂÊÃ$üÄzÅ(ÅôÆ.ÆŽÆêÇ4ÇxÇÈÈ$ÈŠÈèÉbɤÉâÊLÊÐË„ËöÌb̪Í ÍrÍÌÎÎrÎòψÏêÐbÐØÑ@ÑäÒRÒàÓ¦ÔTÔüÕXÖ@×פØ`Ù,ÙèÚVÛ8Ü(ÜÐÝÝêÞÌßxà8á`áÆââ|âæãNãˆãÜä.ä˜äðåtåÌæ>æ”æÊçHç¸çüè¬é é„éöêDê¦êôëœì*ì|ìÂíí²îîžï$ï˜ð,ðÌñbòò^òÒóóšô.ô¤ôìõfõðö@öœ÷.÷–øøŠù&ùªúú¼ûûÊüÐý(ý¦þ@þ‚ÿÿ€ÿêªl êp,¬@ |žD¾ > ¾ <   ² z â È’š†,ÂPÒ,ЬJæœ<F ÎÒdÚ4ОV " ˆ!6!ì"¢#R$$¬$Ô%´&:&f&È'^((Ø)|*X+6,,¼-€.@.ø/ 0\1V1ú2d2Ä3–4|5Š6b6Þ7~8X99ò:Ä;Š<€=¾>°?Ü@ÈB8C\DèEÎF¶GžHŠI®JšK®L¸M†O"PPQœRÐSøU<UúVšVôW|XRXˆXÈYYŒZ8Zê\\H\ð]\]ö^0_\_Ð`Pa:bbbðcbdŠeeÜf¼g.g®hi<i¾jÞknl mœnn4oHp4q4qœr@rzssPs¼tHtÒu0u²v‚vÚw0wrwàxRxšxØy\yÀzz®{.{è|:|°}Ê~.~ˆ~ì €D€ð\‚2‚ЃȄ`…T†R‡dˆì‰T‰¤ŠŠº‹ŒhŽD\üpì‘x’’¢“4“ú”Œ•<•ð–¢——v—²˜˜d˜Æ™4™üš\šÔ›@œ:œ€œâ°ž0ž„Ÿ"ŸÔ v è¡b¡Ä¢F¢¢£Z£ª¤¤Œ¤ø¥„¥è¦†§2§Æ¨¸©ªjªâ«’¬V¬æ­º®h®ø¯p°X±&²L³^´r´ºµ<¶&¶„·d·À¸H¹¹n¹¶¹öº¼»r¼<¼Ü½½È¾Œ¿hÀŒÁ†ÁòÂNžÂüÃTØÃÈÄÄBÄ’ÅÅvÅØÆ@ÆšÇÇ~ÇîÈ2ÈzÉÉRÉÄÊ:ʪËËŒËöÌjÌÔÍ0Í`͸ÍöÎÖÏ:ÏšÏâÐDЮÑ"ÑŽÑîÒnÒ¨Ó(Ó¾Ô6ÔˆÔÔÕ,ÕzÕ¸Ö:Öœ××2ׂ×ÜØØNØÀÙ0ÙjÚÚhÚäÛLÛÜ(ÜÝÝ^ݶÞVÞÈß6ß~àà’á$á áöâ&â®ãã˜ääfå åråêæ0æŠæîç@ç¨è8è’èÆé0éîêrëëÆìLìÂííZíèîpî´ï<ïÀð,ñ ñŽòò|ó óˆô2ôšôôõrõìöˆ÷&÷èøbùùnùþú€úÜû<û~ûÒü&ü†üÄý*ýŽþþlþðÿ†²:ÄBà”ÚTÎhFª2xª & š . ˆ ä x 6 ¬ h æ*\þšò†ö€ ´tÆœ0n ¬D®ÆtæR¾"š\  œ!^!ä"€#,#j#î$n%%œ&*&ª''º(V(Ø)0)¦*D*Ä+„+î,\,Î-n-ò.F//¨0H0ð1N1¼262¨3.3‚44l56@6¬7N88 9H9Ò:j;H;Ô<ª=D>>”>Ú?¾@œ@îA„B<BÀCŽD"EE|EôFÄGGàHTII®JJJüKšKØLšM„NLOHP&P´Q¶RxS0SòTNUXUØV–W–WüXÖYlZ@Zü[¢\6\¦\ü]Î^|_8_Ž``øa¸bRc cÂdäeºf¤gŒhBhìi^iÎj0jük–llÒm¾n–o4oºpfqDqðr¬sTtt¦u’vVw"wðx¶y*yÊz’{F{ú|Ð}¤~Dœ€Œ^‚0‚²ƒj„b……¨†^‡tˆ^‰@ŠЦ‹¶Œ’H¾ŽDŽÎHü¸‘l‘æ’Ž“X””œ•,––Η昊™ ™þš¨›v›¾œÆž|ŸBŸ¼ r¡d¢*¢´£ª¤~¥B¦¦²§r§þ©ª<«.«ò¬Ø­œ®”¯Ð°ª±¨²@²ì³à´’µ6µö¶Ê··Ä¸Œ¹xº8º¸»Ö¼´½R¾L¾ð¿ÊÀ¤ÁfÂ0ÂÖÃÄĪÄúÅèƸÇfÈÈÊÊ6Ë^ÌfÌÌÍæΘψÐ(ÐîÑÎÒHÓ(ÔÔþÕÞֺ׮ظÙÞÛÛÊÜüÝÐÞÄàáââÞãäÄåŠæ~çTèé ê<ëëèìöíÖîªïlð€ñvòVòæô\õpöb÷nøJùZù¾úÜûÀüÊý þ–2ZŒldœ† D œ , Z Ê¾Ü¦ÔøÆú$œÞ\îÖ  > þ"\#$$‚%æ&Œ&ü'L'Œ((†)(*x*Þ++Š+ì,N,ž-B-ú.V.æ/D/Ø0t0Ò1B2:2¨323€4n5:66ì77ü8Ä9P:(:ò;l>€?(@@@¤ARAîCCêDàEÐFÚG¨H IÎJ KKöLÖNROŽPšQ–R~ST:U¼V V<V˜VøW8W¢XXŽY YÈZ˜[*[à\n\¬]~^^ä_X_Î`¶aa–aÖb>bðc„cød°eepeøf$f„g gÆh>h¾i†j2kBl:l¢mBm´n$ooŽpdp¸qjrs:t&uvvúxlx¾y(ylzJz¾{{Œ||Š|ª}˜~<t²€€¬.Æ‚¦ƒN„f…Z†\†¸‡€ˆHˆ˜‰hŠ ж‹†Œ(Œ¬6ªŽŽzŽÐzêì‘x‘Ð’N’°“ª””n• ––î—ܘ8™jšv›xœ$œdÒž Ÿ8Ÿ¤  t¡\¡ô¢š£:£þ¤Ú¦¦‚¦â§R§Î¨,¨ˆ¨È©`ªªlªà«$«Ä¬"¬¤­@­¼® ®r®Ô¯&¯Ä°X°ò±È²t³X³ø´Îµš¶Œ·v¸T¹8ºB»¼¼¸½Ü¾B¾¬¿¿R¿ ¿èÀ ÀLÁ ÁМÃxÄJÅ@ÅúƈÆàÇÇ6ÇfÇŽÇþÈRȶÉ2ÉpÉÈÊÊšÊêË8Ë Ì@ÌÐÍfÍæÎ6δÏ0ϸÐ^ÐÔÑzÒdÓÓ¾ÔzÕBÕÊÖžײØØÙjÙÔÚ\Û2ÛÔÜFÜÈÝ2Ý®Þ\ÞàßöàúáÞâ¦ã”ååöænç<èvéêë2ìŠíŠî<ïfðbðÔñ0ñâòTòÆótôôüõ®ö ÷øø˜ù@ù²úˆüüjüúý\ýþþPÿ\ÿôb´®hÞ°ÈðˆÖX¬ú.fÈ"zâF ì R ˜ ô V ² þ 0 œ ê | È 6 À F¸ünÌ0†¾ŽþŽþDÊ:Ð,¦´^þ’(º‚Ôf¾J˜ð²NÀN  –!!†""®#\#Ð$N$Æ%P&&~''˜(@(ô)þ**ü+¢,t--Ü.|/.00æ1’2r3244â5À6V7d8>99à:ø<<¬=*=î?0?Ò@¨BC.D`EEúFRFþGžHhII‚J2JêKÜL:LºLøMŽMþNŠO OàPžQ¦S S>S”T(TÒUjUÀVVbVÞWjX<XêYÖZtZæ[f[Ä\\è]h]ô^Ú_H`vabb¶c$d2e>ffg`h`itjBjúkJk˜kÄl>l‚lêm’nnˆnÊo>ošo²oèppFpnpºqq€qìr$rœräs>sjsÌt8tŒtêuBuŽvvŒvÔwRwöxZxÒy y@yøzzzê{œ| |À}p}ø~F~´<ЀH€ÞXÊ‚fƒ"ƒÜ„”……ކƇL‡èˆŽ‰F‰^‰Œ‰®‰æŠHŠ’Šþ‹*‹‹òŒdŒª\ÞŽ>Žv’ ¼‘P‘¾’p““”(”¼•†–R–ž——¾˜r˜Ì™D™Üš~›D›ÖœÚ|þž¬Ÿ(Ÿ¤ŸÖ  ð¡”¢^£v¤Z¤†¤ø¥`¥Ò¦¦¢§§È¨$¨º©8©Ž©ôªp« «Ö¬¬¬æ­`­Æ®~®ò¯´°j±(²@³³Þ´¬µTµò¶À·J¸ ¸ê¹¶º¦»„¼z½$¾$¿&ÀÀæÁÈÂzÃ\ÄÄôÆÇTÇÒÈPÈ¢ÈúÉÄÊÖË´ÌdÍ\ÍêÏÏXÐ~Ñ8ÒÒ ÓÓlÓæÔ¨ÕnÕÎÖÖ„×פØTÙ(ÙÖÚÊ۾ܠ݆Þßßþàøá²â,â¦ãzä|åÎæNæÀæêçœè éPéèëëÖìÖífîJïðñ†òòêóêôbõNö"ö®÷÷€÷êøXøºùùžúú û(û~ûÄüfüîýtýüþšÿ$ÿÀhì®DÊ\¸Jú¤F b V &  ºˆ Ô>|Òbè`ÞlàŽÒ2ð^@d¾ô–DxÆ  Ì!˜"r#4#ê$Ž$ò%à&d&˜'H((°)2)d)Ø*>*ˆ+2+æ,Ž-0-Ú.//Æ0p0ô1â3@3ˆ4\546*6ð7~88Ô9d:4:ö<8<à=6=z>?h@JA2B BÔCØDÄEhF.FvF¬G2H4IJJJXJ–JðK8KÞLTLÒMPMúNlNÜOˆPP¢Q`QøRÎS˜T~U0VBWVWøXžYBYæZÐ[D\\f]P^Ð_r``6`‚`úa\aübüddðfg2g`gØiifkkölhlºm:m¤n o,pLpâqdqÌr`s˜tšuœvfw2x°yzzž{¶|P}¨~\~Î*x€D€œ:¤‚˜ƒ¢„’…„†t‡”ˆX‰‰ØŠ€‹fŒ–@Žj6Œrª‘’’t’Ü“\“Ò”®•8•ú–Ä—T—Θ^™ršRš¨››ºœ|¶žÈŸj  œ¡n¢Š££`£î¤š¥¥t¥è¦>§ ¨¨îª ªJ«\¬z­h®8®þ°±d²l²Î³\´&µ<¶r·|¸H¹¹ ¹üº¸»”¼‚½T¾P¾¨¿¿XÀ>À‚ÀðÁØÂHˆÀÃúÄJÄØÅPÆÆzÆÖÇ ǬÇþÈþÉnÉÚʺËæ̸ÍÎÎvÏ|ÏÈЄÑÑ–ÒTÒœÓpÓúÔ„ÔÖÕœÕøÖš××`Ø,ØÔÙ¢ÚÚbÛšÜ\ÜÖݤÞlÞÊß6ßšàºá2á¤â.âÒãÂãêä¶åRåÊæ®ç çþè¾é°êRêîë¶ëêì†ìöíPíöîÒð@ññÈò:òÞónôô†õõàöZ÷÷ª÷À÷Ö÷ìøøø.øDøZøpø†øœø²øÈøÞøôù ù ù6ùLùbùxùŽù¤ùºùÖùìúúú.úDúZúpú†úœú²úÈúÞúôû û û6ûLûbûxûŽû¤ûºûÐûæûüüü(ü>üTüjü€ü–ü¬üÂüØüîýýý0ýLýbýxýŽý¤ýºýÐýæýüþþ(þ>þTþjþ€þ–þ¬þÂþØþîÿÿÿ0ÿFÿ\ÿrÿˆÿžÿ´ÿÊÿàÿö "8Ndz¦¼Òèþ*@Vl‚˜®ÄÚð2Hdz¦¼Òèþ*@Vl‚˜®ÄÚð2H^tŠ ¶Òèþ*@Vl‚˜®ÄÚð2H^tŠ ¼Òè0F\rˆž´Êæü(>Tj€–¬ÂØî   0 F \ r ˆ ¤ º Ð æ   . D Z p † œ ² È Þ ô   6 L b x Ž ¤ À Ö ì   . D ` v Œ ¢ ¸ Î ä ú  & < R h ~ ” ª À Ö ì.J`vŒ¢¸Îäú&<Rh~”ªÀÖì.J`|’¨¾Ôê,BXn„š°Æâø$:Pf|’¨¾Ôð2H^tŠ ¶Ìèþ*@Vl‚˜®ÄÚð2H^tŠ ¶Òèþ*@Vl‚˜®ÄÚð"8Ndz¦¼Øî0LbxޤºÐæü(>Tj€–¬ÂØî 6LbxޤºÐì4J`vŒ¨¾Ôê,BXnŠ ¼Òèþ0F\rޤºÐæü(>ZpŒ¢¸Îäú,BXtŠ ¶Ìâø  $ @ V l ‚ ˜ ® Ä Ú ð!!"!8!N!d!z!–!¬!Â!Ø!î""&"<"R"h"~"”"ª"À"Ü"ò###4#J#`#v#Œ#¢#¸#Ô#ê$$$2$H$d$z$$¦$¼$Ò$è%%%0%L%b%x%”%ª%À%Ö%ì&&&.&D&Z&p&†&œ&¸&Î&ä&ú''&'B'X'n'„' '¶'Ì'â'ø(($(:(P(f(|(’(¨(¾(Ô(ð)))2)H)^)t)Š) )¶)Ì)â)ø**$*:*P*f*‚*ž*º*Ð*æ+++.+D+Z+p+†+œ+²+Î+ê,,,2,H,^,t,Š, ,¶,Ì,â,ø--$-:-P-f-|-’-¨-¾-Ô-ê...,.B.X.n.„.š.°.Æ.Ü.ò///4/J/`/v/Œ/¢/¸/Î/ä/ú00&0<0R0h0~0”0ª0À0Ö0ì111.1D1Z1p1†1œ1²1È1Þ1ô2 2 262L2b2x2Ž2¤2º2Ð2æ2ü33(3>3T3j3€3–3¬3Â3Ø3î44404F4\4r4ˆ4ž4´4Ê4à4ö5 5(5>5T5j5€5–5¬5Â5Ø5î66606F6\6r6ˆ6ž6´6Ê6à6ö7 7"787N7d7z77¦7¼7Ò7è7þ8808F8\8r8ˆ8ž8´8Ð8æ8ü99(9>9T9j9€9–9¬9Â9Ø9î:: :6:L:b:x:”:ª:À:Ü:ò;;;4;J;`;v;Œ;¢;¾;Ô;ê<<<,>&><>R>h>~>”>°>Æ>Ü>ò???4?J?`?v?Œ?¢?¸?Î?ä?ú@@&@<@R@h@~@”@ª@À@Ö@ìAAA.ADAZApA†AœA²AÈAÞAôB B B6BLBbBxBŽB¤BºBÐBæBüCC(C>CTCjC€C–C¬CÈCÞCôD D D6DLDbD~D”DªDÀDÖDìEEE.EDEZEpE†EœE²EÈEÞEôF F F6FLFbFxFŽF¤FºFÐFæFüGG(G>GTGjG€G–G¬GÂGØGîHHH0HFH\HrHˆHžH´HÊHàHöI I"I>ITIjI€I–I¬IÂIØIôJ J J6JLJbJxJ”JªJÀJÖJìKKK.KDKZKpK†KœK²KÈKÞKôL L L6LLLbLxLŽL¤LºLÐLìMMM.MDMZMpM†MœM²MÈMÞMúNN&N<NRNhN~N”NªNÀNÖNìOOO.ODOZOpO†OœO²OÈOäOúPP&PBPXPnP„PšP°PÆPÜPòQQQ4QPQlQ‚Q˜Q®QÄQÚQðRRR2RHR^RtRŠR R¶RÌRâRøSS*S@SVSlS‚S˜S®SÄSÚSðTTT2TNTdTzTT¦T¼TØTîUUU0UFUbUxUŽU¤UºUÐUæUüVV.VDVZVpV†VœV²VÈVÞVôW W W6WLWbWxWŽW¤WºWÐWæWüXX(XDXZXpX†XœX²XÈXÞXôY Y Y6YLYhY~YšY°YÆYÜYòZZZ:ZPZfZ|Z’Z¨Z¾ZÔZð[[[2[H[d[z[[¦[¼[Ò[è[þ\\0\F\\\r\ˆ\ž\´\Ê\à\ö] ]"]8]T]j]€]–]¬]È]Þ]ô^^&^B^X^t^Š^¦^¼^Ò^è^þ__*_F_\_r_ˆ_ž_´_Ð_æ```.`D```v`Œ`¢`¸`Î`ä`úaa&a<aRana„aša°aÆaÜaòbbb4bJb`bvbŒb¨b¾bÔbêccc,cBcXcnc„cšc°cÆcÜcòddd4dJd`dvdŒd¢d¸dÎdädúee&e<eRehe~e”eªeÀeÖeìfff.fDfZfvfŒf¢f¸fÎfäfúgg,gBg^gzgg¦gÂgägúhh&hBhXhnh„hšh°hÆhÜhòiii4iJi`ivi’i¨i¾iÔiðj j(j>jTjjj€j–j¬jÈjÞjôk k k<kRkhk~kšk°kÆkÜkòlll4lJl`lvlŒl¢l¾lÚlðmmm2mNmdmzmm¦m¼mÒmèmþnn*n@nVnln‚n˜n®nÄnÚnöo o"o8oNodozoo¦oÂoÞoôpp&p<pXpnp„pšp°pÌpâpøqq*q@qVqlq‚q˜q®qÄqÚqðrrr2rNrdrzr–r²rÈrÞrôs s&sBs^stsŠs s¶sÌsâsøtt$t:tPtft‚t˜t´tÐtætüuu(uDuZupu†u¢u¸uÎuäuúvv&v<vRvhv~v”vªvÀvÖvìwww.wDwZwpw†wœw²wÈwÞwôxx&x<xRxhx~x”xªxÀxÖxìyyy.yDyZypy†yœy²yÈyÞyôz z z6zLzbzxzŽz¤zºzÐzæzü{{({>{T{j{€{–{¬{Â{Ø{î|||0|F|\|r|ˆ|ž|´|Ê|à|ö} }"}8}N}j}€}–}¬}Â}Ø}î~~~0~F~\~r~ˆ~ž~´~Ð~æ~ü(>Tj€–¬ÂØô€ €&€<€R€h€~€”€ª€À€Ü€ò4J`v’¨¾Ôê‚‚‚,‚B‚X‚n‚„‚š‚°‚Æ‚â‚øƒƒ$ƒ:ƒVƒlƒ‚ƒžƒ´ƒÊƒàƒö„ „"„8„N„d„z„„¦„¼„Ò„è„þ……0…F…\…r…ˆ…ž…´…Ê…à…ö† †"†8†N†d†z††¦†¼†Ò†è†þ‡‡*‡@‡V‡l‡‚‡˜‡®‡Ä‡Ú‡ðˆˆˆ2ˆHˆ^ˆtˆˆ¦ˆ¼ˆÒˆèˆþ‰‰0‰F‰\‰r‰ˆ‰ž‰º‰Ö‰ìŠŠŠ4ŠJŠfŠ|Š’ЍоŠÔŠê‹‹‹,‹B‹X‹n‹„‹š‹°‹Ì‹è‹þŒŒ0ŒLŒbŒxŒŽŒªŒÀŒÖŒì:Pf|˜®ÄÚðŽŽŽ2ŽHŽdŽzŽަ޼ŽÒŽèŽþ0LbxޤºÐæü(>Tj€–²ÈÞú‘‘&‘<‘X‘n‘„‘š‘°‘Æ‘Ü‘ò’’$’@’\’r’ˆ’ž’´’Ê’à’ö“ “"“>“T“p“Œ“¨“¾“Ô“ê”””2”H”d”€”œ”²”Ȕޔú••&•<•R•h•~•”•ª•À•Ö•ì–––.–D–Z–p–†–¢–¸–Ô–ê———2—H—^—t——¦—¼—Ò—è—þ˜˜*˜@˜V˜l˜‚˜˜˜®˜Ä˜Ú˜ð™™™2™H™^™t™Š™ ™¶™Ì™â™øšš$š:šPšfš|š˜š®šÄšÚšð›››2›H›^›t›Š› ›¶›Ì›â›øœœ$œ:œVœlœ‚œ˜œ®œÄœÚœð2H^tŠ ¶Ìâøžž$ž:žPžfž|ž’ž¨ž¾žÔžêŸŸŸ,ŸBŸXŸnŸ„ŸšŸ°ŸÆŸÜŸò   4 J ` v Œ ¢ ¸ Î ä ú¡¡&¡<¡R¡h¡~¡”¡ª¡À¡Ö¡ì¢¢¢.¢D¢Z¢p¢†¢œ¢²¢È¢Þ¢ô£ £ £6£L£b£x£”£ª£À£Ö£ì¤¤¤.¤D¤Z¤p¤†¤œ¤²¤È¤Þ¤ô¥ ¥ ¥6¥L¥b¥~¥”¥ª¥À¥Ö¥ì¦¦¦.¦D¦Z¦p¦†¦œ¦²¦È¦Þ¦ô§ § §6§L§b§x§Ž§¤§º§Ð§æ§ü¨¨(¨D¨Z¨p¨†¨œ¨²¨È¨Þ¨ô© © ©6©R©n©„©š©°©Æ©â©øªª*ª@ªVªlªˆªžª´ªÊªàªö« «"«8«N«d«z««¦«¼«Ò«è«þ¬¬*¬@¬V¬l¬‚¬˜¬®¬Ä¬Ú¬ö­ ­"­8­N­d­z­­¦­Â­Ø­î®®®0®F®\®r®ˆ®ž®´®Ð®æ®ü¯¯(¯>¯T¯j¯€¯–¯¬¯Â¯Ø¯î°°°0°L°b°x°Ž°¤°º°Ð°æ°ü±±(±>±T±j±€±œ±¸±Î±ä±ú²²&²<²R²h²~²”²°²Æ²Ü²ò³³³:³P³f³|³’³¨³¾³Ô³ê´´´2´H´^´z´´¦´¼´Ò´è´þµµ0µFµ\µrµˆµžµ´µÊµàµö¶¶(¶>¶Z¶v¶Œ¶¢¶¸¶Î¶ä¶ú··&·<·R·h·~·”·°·Ì·â·ø¸¸$¸:¸P¸f¸|¸’¸¨¸¾¸Ô¸ê¹¹¹,¹B¹X¹n¹„¹š¹°¹Ì¹â¹øºº$º@ºVºrºˆºžº´ºÊºàºö» »"»8»N»d»z»»¦»¼»Ò»è»þ¼¼*¼@¼V¼l¼‚¼˜¼®¼Ê¼à¼ö½ ½"½8½N½d½z½½¦½¼½Ø½î¾¾¾0¾F¾\¾r¾ˆ¾ž¾´¾Ê¾à¾ö¿ ¿"¿8¿N¿d¿z¿¿¦¿¼¿Ò¿è¿þÀÀ*À@ÀVÀlÀ‚À˜À®ÀÄÀÚÀðÁÁÁ2ÁNÁdÁzÁÁ¦Á¼ÁÒÁîÂÂÂ0ÂFÂ\ÂrÂŽ¤ºÂÐÂìÃÃÃ4ÃJÃ`ÃvÃŒâøÃÎÃäÃúÄÄ,ÄBÄXÄnĄĚİÄÆÄÜÄòÅÅÅ4ÅJÅ`ÅvŌŢŸÅÎÅäÅúÆÆ&Æ<ÆRÆhÆ~Æ”ƪÆÀÆÖÆìÇÇÇ.ÇDÇZÇpdžÇœDzÇÈÇäÇúÈÈ&È<ÈRÈhÈ~È”ȪÈÀÈÖÈìÉÉÉ.ÉDÉZÉpɆÉœɲÉÈÉÞÉôÊ Ê Ê6ÊLÊbÊ~Ê”ʪÊÀÊÖÊìËËË.ËDËZËpˆËœ˸ËÎËêÌÌ"Ì>ÌZÌp̆Ìœ̲ÌÈÌÞÌôÍ Í Í6ÍLÍbÍxÍŽͤͺÍÐÍæÍüÎÎ(Î>ÎTÎj΀ΖάÎÂÎØÎîÏÏÏ0ÏFÏ\ÏrψϞϴÏÊÏæÏüÐÐ(Ð>ÐTÐjЀЖЬÐÂÐØÐôÑÑ&Ñ<ÑRÑhÑ~Ñ”ѪÑÀÑÖÑìÒÒÒ.ÒDÒZÒp҆ҜҲÒÈÒÞÒôÓ Ó Ó6ÓLÓbÓxÓŽÓ¤ÓºÓÐÓìÔÔÔ4ÔJÔ`ÔvԌԢԸÔÎÔäÔúÕÕ&Õ<ÕRÕhÕ~Õ”ÕªÕÀÕÖÕìÖÖÖ.ÖDÖZÖpֆֲ֜ÖÈÖÞÖô× × ×6×L×b×x׎פ׺×Ð׿×üØØ(Ø>ØTØj؀ؖجØÂØØØîÙÙÙ0ÙFÙ\ÙrÙˆÙžÙ´ÙÊÙàÙöÚ Ú"Ú8ÚTÚjÚ€Ú–Ú¬ÚÂÚØÚîÛ Û Û6ÛLÛhÛ~Û”ÛªÛÀÛÖÛìÜÜÜ4ÜJÜ`Ü|Ü’ܨܾÜÔÜêÝÝÝ,ÝBÝXÝn݄ݚݰÝÆÝÜÝòÞÞÞ4ÞJÞfÞ|Þ’Þ¨Þ¾ÞÔÞêßßß8ßNßdßzß–߬ßÂßÞßôà à à6àRàhà„àšà°àÆàÜàòááá4áJá`áváŒá¢á¸áÎáäáúââ&âBâXânâ„âšâ°âÌâââøãã$ã:ãPãfã‚ã˜ã®ãÊãæãüää.äDäZäpä†äœä²äÈäÞäôå å å6åLåbåxåŽå¤åºåÐåæåüææ(æ>æTæjæ€æ–æ¬æÂæØæîççç0çFç\çrçˆçžç´çÊçàçöè è"è8èNèdèzèè¬èÂèØèôé é é6éLébé~é”éªéÀéÖéìêêê4êJê`êvêŒê¢ê¸êÎêäêúëë&ë<ëRëhë~ë”ëªëÀëÖëìììì.ìDìZìpì†ìœì²ìÈìÞìôí í í6íLíbíxíŽí¤íºíÐíæíüîî(î>îTîjî€î–î¬îÂîØîîïïï0ïFï\ïrïˆïžï´ïÊïàïöð ð"ð8ðNðdðzðð¦ð¼ðÒðèðþññ*ñ@ñVñlñ‚ñ˜ñ®ñÄñÚñöò ò"ò8òNòdòzòò¦ò¼òÒòèòþóó0óFó\óróˆóžó´óÊóàóöô ô"ô8ôNôdôzôô¦ô¼ôÒôèôþõõ*õ@õVõlõ‚õ˜õ®õÄõÚõðööö2öHö^ötöŠö ö¶öÌöâöø÷÷$÷:÷P÷f÷|÷’÷¨÷¾÷Ô÷êøøø,øBøXønø„øšø°øÆøâøøùù$ù:ùPùfù|ù’ù¨ù¾ùÔùêúúú,úBúXúnúŠú¬úÎúðûûû2ûHû^ûtûŠû û¶ûÌûâûøüü$ü:üVülü‚ü˜ü®üÄüÚüðýýý2ýHý^ýtýŠý ý¶ýÌýâýøþþ$þ:þPþfþ|þ’þ¨þ¾þÔþêÿÿÿ2ÿHÿ^ÿtÿŠÿ ÿ¶ÿÌÿèÿþ  * F b x Ž ª À Ü ø  * @ V l ‚ ˜ ® Ä Ú ð   2 H ^ t Š   ¶ Ì â ø  $ : P f | ’ ¨ ¾ Ú ð   2 H ^ t Š   ¶ Ì â ø  $ : P f | ’ ¨ ¾ Ô ê   , B ^ t Š   ¶ Ì â ø  $ : P f | ˜ ® Ä Ú ð   2 H ^ z  ¦ ¼ Ò è þ  * @ V l ‚ ˜ ® Ä Ú ð   2 H ^ t Š   ¶ Ì â ø  $ : P f ‚ ˜ ® Ä Ú ö " 8 N d z ¦ ¼ Ò è þ  * @ V l ˆ ž ´ Ð æ ü  ( > T j € – ¬  Ø î   0 F \ r ˆ ž ´ Ê à ö  " 8 T j € – ¬ È Þ ô   6 R h ~ ” ª À Ö ì   . D Z p † œ ² È Þ ô   6 L b ~ ” ª Æ Ü ø  $ : P f | ˜ ® Ä Ú ö  " 8 N d € – ¬  Ø ô  & < R h ~ ” ª À Ö ì   4 J f | ’ ¨ Ä Ú ð   2 H ^ t Š   ¶ Ì â ø  $ : P f | ’ ® Ä Ú ð   8 N d z  ¦ ¼ Ø î   0 F \ r ˆ ž ´ Ê à ö  ( > T j € – ¬  Ø î   0 F \ r ˆ ž ´ Ê à ü  ( > Z p † œ ² Î ä ú  & < R h ~ ” ª À Ö ì   . D Z p † œ ² È ä ! ! !2 !N !d !z ! !¬ ! !Ø !ô " " "6 "L "b "x "Ž "¤ "º "Ð "æ "ü # #4 #P #f #| #’ #´ #Ê #æ #ü $ $( $> $T $j $€ $– $¬ $ $Þ $ô % %& %< %R %n %„ %š %° %Æ %Ü %ò & &$ &@ &V &r &Ž &¤ &º &Ð &ì ' ' '. 'D 'Z 'p '† 'œ '² 'È 'ä 'ú ( (& (< (R (h (~ (” (ª (À (Ö (ì ) ) )4 )J )` )v )Œ )¢ )¸ )Î )ä )ú * *& *< *R *h *~ *” *ª *À *Ö *ì + + +. +D +Z +p +† +œ +² +È +Þ +ô , , ,6 ,L ,b ,x ,Ž ,¤ ,º ,Ð ,æ ,ü - -( -> -T -j -€ -– -¬ - -Ø -î . . .0 .F .\ .r .ˆ .ž .´ .Ê .à .ö / /" /8 /N /d /z / /¦ /¼ /Ò /è /þ 0 0* 0@ 0V 0l 0‚ 0˜ 0® 0Ä 0Ú 0ð 1 1 12 1H 1^ 1t 1Š 1  1¶ 1Ì 1â 1ø 2 2$ 2@ 2V 2l 2‚ 2˜ 2® 2Ä 2Ú 2ð 3 3" 38 3N 3d 3z 3 3¦ 3¼ 3Ò 3è 3þ 4 4* 4@ 4V 4l 4‚ 4˜ 4® 4Ä 4Ú 4ð 5 5 52 5H 5^ 5t 5Š 5  5¶ 5Ì 5â 5ø 6 6$ 6: 6P 6l 6‚ 6˜ 6® 6Ä 6Ú 6ð 7 7 72 7H 7d 7z 7 7¦ 7¼ 7Ò 7è 7þ 8 8* 8@ 8V 8l 8‚ 8˜ 8® 8Ä 8Ú 8ð 9 9 92 9N 9d 9z 9 9¦ 9¼ 9Ò 9è 9þ : :* :@ :V :l :‚ :˜ :® :Ä :Ú :ð ; ;" ;8 ;N ;d ;z ; ;¦ ;¼ ;Ò ;è ;þ < <* <@ <\  > >0 >F >\ >r >ˆ >ž >´ >Ê >à >ö ? ?" ?8 ?N ?d ?z ? ?¦ ?¼ ?Ò ?è ?þ @ @0 @F @\ @r @ˆ @ž @´ @Ê @à @ö A A" A8 AN Ad Az A A¦ A¼ AÒ Aè Aþ B B* B@ B\ Br Bˆ Bž B´ BÊ Bà Bö C C" C8 CN Cd C€ C– C¬ C CØ Cî D D D0 DF D\ Dr Dˆ Dž D´ DÊ Dà Dö E E" E8 ET Ej E€ E– E¬ E EØ Eî F F F6 FL Fb Fx FŽ F¤ Fº FÐ Fæ Fü G G4 GJ G` Gv GŒ G¨ G¾ GÔ Gê H H H, HB HX Hn H„ Hš H° HÆ HÜ Hò I I I4 IJ I` Iv IŒ I¢ I¾ IÔ Iê J J J, JB JX Jn J„ Jš J° JÆ JÜ Jò K K K: KP Kf K‚ K˜ K® KÄ Kà Kö L L( L> LT Lj L† Lœ L² LÈ LÞ Lô M M& MB MX Mn M„ Mš M° MÆ MÜ Mò N N N4 NJ N` Nv NŒ N¢ N¸ NÎ Nä Nú O O& OB OX Ot OŠ O  O¶ OÒ Oè Oþ P P* P@ Pb Px PŽ P¤ Pº PÐ Pæ Pü Q Q( Q> QT Qj Q€ Qœ Q² QÈ QÞ Qô R R& R< RR Rh R„ R  R¶ RÌ Râ Rø S S$ S: SP Sf S| S’ S¨ S¾ SÔ Sê T T T2 TH T^ Tt T T¦ T¼ TØ Tî U U U6 UL Ub Ux UŽ U¤ Uº UÐ Uæ Uü V V( VD VZ Vp VŒ V¢ V¸ VÔ Vð W W W2 WH Wd Wz W– W² WÈ WÞ Wô X X X6 XL Xb X~ X” Xª XÆ XÜ Xò Y Y Y4 YJ Y` Yv Y’ Y¨ YÄ YÚ Yö Z Z" Z8 ZT Zj Z† Zœ Z² ZÈ ZÞ Zô [ [ [6 [L [b [~ [” [ª [À [Ü [ò \ \ \4 \J \` \v \Œ \¢ \¾ \Ô \ê ] ] ], ]B ]X ]n ]Š ]  ]¶ ]Ò ]è ]þ ^ ^0 ^F ^\ ^r ^ˆ ^¤ ^º ^Ð ^æ ^ü _ _( _D _Z _p _† _¢ _¾ _Ô _ê ` ` `, `B `X `n `„ `š `° `Æ `Ü `ò a a a4 aJ a` a| a’ a¨ aÄ aÚ að b b b2 bH b^ bt bŠ b  b¶ bÌ bâ bø c c$ c: cP cf c| c’ c¨ c¾ cÔ cê d d d, dB dX dn d„ dš d° dÆ dÜ dò e e e4 eJ e` ev eŒ e¢ e¸ eÎ eä eú f f& f< fR fh f~ f” fª fÀ fÜ fò g g g4 gJ g` gv gŒ g¢ g¸ gÎ gä h h h, hB hX hn h„ h  h¶ hÌ hè hþ i i* i@ iV ir iˆ iž i´ iÊ ià iö j j" j8 jN jd jz j j¦ j¼ jÒ jè jþ k k0 kL kb k~ kš k¶ kÒ kè kþ l l0 lL lh l„ l  l¼ lØ lô m m& mB m^ mz m m¦ m¼ mÒ mè mþ n n* n@ nV nl n‚ n˜ n® nÄ nÚ nð o o o2 oH o^ ot oŠ o¦ o¼ oÒ oè oþ p p* p@ pV pl p‚ p˜ p® pÄ pÚ pð q q q2 qH q^ qt qŠ q  q¶ qÌ qè qþ r r* r@ r\ rr rˆ rž r´ rÊ rà rö s s" s> sT sj s€ s– s¬ s sØ sî t t t0 tF t\ tr tˆ tž t´ tÊ tà tö u u" u8 uN ud uz u u¦ u¼ uÒ uè uþ v v* v@ vV vl v‚ v˜ v´ vÊ và vö w w" w8 wN wd wz w w¦ w¼ wØ wî x x x0 xL xb xx xŽ x¤ xº xÐ xæ xü y y( y> yT yj y€ y– y¬ y yØ yî z z z0 zF z\ zr zˆ zž z´ zÊ zà zö { {" {8 {N {d {z { {¦ {¼ {Ø {î | | |0 |F |\ |r |ˆ |ž |´ |Ê |à |ü } }( }> }T }j }€ }– }¬ } }Ø }î ~ ~ ~0 ~F ~\ ~r ~ˆ ~ž ~´ ~Ê ~à ~ü  ( > T j € – ¬  Ø î € € €0 €F €\ €r €ˆ €ž €´ €Ê €à €ö  ( > T j € – ¬ Â Ø î ‚ ‚ ‚0 ‚F ‚\ ‚r ‚ˆ ‚ž ‚´ ‚Ê ‚à ‚ö ƒ ƒ" ƒ8 ƒN ƒd ƒz ƒ ƒ¦ ƒ¼ ƒÒ ƒè ƒþ „ „* „@ „V „l „‚ „˜ „® „Ä „Ú „ð … … …2 …H …^ …t …Š …  …¶ …Ì …â …ø † †$ †: †V †l †‚ †˜ †® †Ä †Ú †ð ‡ ‡ ‡2 ‡H ‡^ ‡t ‡Š ‡  ‡¶ ‡Ì ‡â ‡ø ˆ ˆ$ ˆ: ˆP ˆf ˆ| ˆ’ ˆ¨ ˆ¾ ˆÔ ˆê ‰ ‰ ‰, ‰B ‰X ‰n ‰„ ‰š ‰° ‰Æ ‰Ü ‰ò Š Š Š4 ŠJ Š` Šv ŠŒ Š¢ Џ ŠÎ Šä Šú ‹ ‹& ‹< ‹R ‹h ‹~ ‹” ‹ª ‹À ‹Ö ‹ì Œ Œ Œ. ŒD ŒZ Œv ŒŒ Œ¢ Œ¸ ŒÔ Œð   2 H ^ t Š   ¶ Ì â ø Ž Ž$ Ž: ŽP Žl Žˆ Žž Ž´ ŽÊ Žà Žö " 8 N d z ¦ ¼ Ò è þ  * @ \ r ˆ ž ´ Ê à ö ‘ ‘" ‘8 ‘N ‘d ‘€ ‘– ‘¬ ‘È ‘Þ ‘ô ’ ’ ’6 ’L ’b ’~ ’” ’ª ’À ’Ö ’ì “ “ “. “D “Z “p “† “œ “² “È “ä “ú ” ”& ”< ”R ”h ”~ ”” ”° ”Æ ”Ü ”ò • • •4 •J •` •v •Œ •¢ •¸ •Ô •ê – – –, –B –X –n –„ –š –° –Æ –Ü –ò — — —4 —J —` —v —Œ —¨ —¾ —Ô —ê ˜ ˜ ˜, ˜B ˜X ˜n ˜„ ˜š ˜° ˜Æ ˜Ü ˜ò ™ ™ ™: ™P ™f ™| ™˜ ™® ™Ê ™à ™ö š š( š> šT šp š† šœ š² šÈ šÞ šú › ›, ›B ›X ›n ›„ ›š ›° ›Ì ›â ›þ œ œ* œ@ œV œl œ‚ œ˜ œ® œÄ œÚ œð  " 8 N j € – ¬ Â Ø î ž ž ž0 žF ž\ žr žˆ žž ž´ žÊ žà žö Ÿ Ÿ" Ÿ8 ŸN Ÿd Ÿz Ÿ Ÿ¦ Ÿ¼ ŸÒ Ÿè Ÿþ    *  F  \  r  ˆ  ž  º  Ð  æ  ü ¡ ¡( ¡> ¡T ¡j ¡€ ¡– ¡¬ ¡Â ¡Þ ¡ú ¢ ¢& ¢< ¢R ¢h ¢~ ¢” ¢ª ¢À ¢Ö ¢ì £ £ £. £D £Z £p £† £œ £¸ £Î £ä £ú ¤ ¤& ¤< ¤R ¤n ¤„ ¤š ¤° ¤Ì ¤â ¤ø ¥ ¥$ ¥@ ¥V ¥r ¥ˆ ¥ž ¥º ¥Ð ¥æ ¥ü ¦ ¦. ¦D ¦` ¦v ¦Œ ¦¢ ¦¸ ¦Î ¦ä ¦ú § §& §< §X §n §„ §š §° §Æ §Ü §ò ¨ ¨ ¨4 ¨P ¨l ¨ˆ ¨ž ¨º ¨Ð ¨æ ¨ü © ©( ©> ©T ©j ©€ ©– ©² ©È ©Þ ©ô ª ª ª6 ªL ªb ªx ªŽ ª¤ ªº ªÖ ªì « « «. «D «Z «p «† «œ «² «È «Þ «ô ¬ ¬& ¬B ¬X ¬n ¬„ ¬š ¬° ¬Æ ¬Ü ¬ò ­ ­ ­4 ­J ­` ­v ­Œ ­¢ ­¸ ­Î ­ä ­ú ® ®& ®< ®R ®h ®~ ®” ®° ®Ì ®è ®þ ¯ ¯* ¯@ ¯V ¯l ¯‚ ¯˜ ¯® ¯Ä ¯Ú ¯ð ° ° °2 °H °d °z ° °¦ °¼ °Ø °î ± ± ±0 ±F ±\ ±r ±ˆ ±ž ±´ ±Ê ±à ±ö ² ²( ²> ²Z ²p ²† ²œ ²¸ ²Î ²ä ³ ³ ³, ³H ³d ³z ³ ³¦ ³¼ ³Ò ³è ´ ´ ´0 ´F ´\ ´r ´ˆ ´ž ´º ´Ð ´æ ´ü µ µ( µ> µZ µp µ† µœ µ¸ µÎ µä µú ¶ ¶, ¶B ¶X ¶n ¶„ ¶š ¶° ¶Æ ¶Ü ¶ò · · ·4 ·J ·f ·| ·’ ·¨ ·¾ ·Ú ·ð ¸ ¸ ¸2 ¸H ¸^ ¸t ¸Š ¸¦ ¸¼ ¸Ò ¸è ¸þ ¹ ¹0 ¹F ¹\ ¹x ¹Ž ¹¤ ¹º ¹Ð ¹ì º º º4 ºJ º` ºv º’ º¨ º¾ ºÔ ºê » » », »B »X »n »„ »  »¶ »Ì »â »ø ¼ ¼$ ¼: ¼P ¼f ¼| ¼’ ¼¨ ¼Ä ¼à ¼ö ½ ½( ½> ½T ½j ½€ ½œ ½¸ ½Î ½ä ½ú ¾ ¾& ¾< ¾R ¾h ¾~ ¾š ¾° ¾Ì ¾è ¾þ ¿ ¿0 ¿F ¿\ ¿r ¿ˆ ¿ž ¿´ ¿Ê ¿æ ¿ü À À. ÀD À` Àv ÀŒ À¨ À¾ ÀÔ Àê Á Á Á, ÁB ÁX Án Á„ Áš Á° ÁÆ ÁÜ Áò  Â* Â@ ÂV Âl ˆ ž ´ ÂÊ Âà Âü à Ã. ÃD Ã` Ãv ÃŒ â þ ÃÔ Ãê Ä Ä Ä2 ÄH Äd Äz Ä– Ĭ ÄÂ ÄØ Äî Å Å Å0 ÅF Å\ År ň Åž Å´ ÅÊ Åà Åö Æ Æ" Æ8 ÆN Æd Æz Æ Æ¦ Ƽ ÆÒ Æè Æþ Ç Ç* ÇF Ç\ Çr Lj Çž Ç´ ÇÊ Çà Çö È È" È8 ÈN Èd Èz È È¦ ȼ ÈÒ Èè Èþ É É* É@ ÉV Él É‚ ɘ É® ÉÄ ÉÚ Éð Ê Ê Ê2 ÊH Ê^ Êt ÊŠ Ê  ʶ ÊÌ Êâ Êø Ë Ë$ Ë: ËP Ëf Ë| Ë’ ˨ ˾ ËÔ Ëê Ì Ì Ì, ÌB ÌX Ìn Ì„ Ìš ̰ ÌÆ ÌÜ Ìò Í Í Í4 ÍJ Íf Í| Í’ ͨ ; ÍÔ Íê Î Î Î, ÎB ÎX În ΄ Κ ΰ ÎÆ ÎÜ Îò Ï Ï Ï4 ÏJ Ï` Ïv ÏŒ Ï¢ ϸ ÏÎ Ïê Ð Ð Ð, ÐB ÐX Ðn Є К а ÐÆ ÐÜ Ðò Ñ Ñ Ñ4 ÑJ Ñ` Ñv ÑŒ Ñ¢ Ѹ ÑÎ Ñä Ñú Ò Ò2 ÒH Ò^ Òt ÒŠ Ò  Ò¶ ÒÌ Òâ Òø Ó Ó$ Ó: ÓP Óf Ó| Ó’ Ó¨ Ó¾ ÓÔ Óê Ô Ô Ô, ÔB ÔX Ôn Ô„ Ôš Ô° ÔÆ ÔÜ Ôò Õ Õ Õ4 ÕJ Õf Õ| Õ’ Õ¨ Õ¾ ÕÔ Õê Ö Ö Ö, ÖB ÖX Ön Ö„ Öš Ö° ÖÆ ÖÜ Öò × × ×4 ×J ×` ×v ׌ ×¢ ׸ ×Î ×ä ×ú Ø Ø& Ø< ØR Øh Ø~ Ø” ت ØÀ ØÖ Øì Ù Ù Ù. ÙD ÙZ Ùp Ù† Ù¢ Ù¸ ÙÎ Ùä Ùú Ú Ú& Ú< ÚR Úh Ú~ Ú” Úª ÚÀ ÚÖ Úì Û Û Û. ÛD ÛZ Ûp Û† Ûœ Û² ÛÈ ÛÞ Ûô Ü Ü Ü6 ÜL Üb Üx ÜŽ ܤ ܺ ÜÐ Üæ Üü Ý Ý( Ý> ÝT Ýj Ý€ Ý– ݬ ÝÂ ÝØ Ýî Þ Þ Þ0 ÞF Þb Þ~ Þ” Þª ÞÀ ÞÖ Þì ß ß ß. ßD ßZ ßp ߆ ßœ ß² ßÈ ßÞ ßô à à à6 àL àb àx àŽ à¤ àº àÐ àæ àü á á( á> áT áj ဠᖠᬠáÂ áØ áî â â â0 âF â\ âr ∠➠⺠âÐ âæ âü ã ã. ãJ ã` ã| 㒠㨠㾠ãÔ ãê ä ä ä, äB äX än ä„ äš ä° äÆ äÜ äò å å å4 åP ål å‚ å˜ å® åÄ åÚ åð æ æ æ2 æH æ^ æt æŠ æ  æ¶ æÌ æâ æø ç ç$ ç: çP çf ç| ç˜ ç® çÄ çÚ çö è è( è> èT èj è€ è– è¬ èÂ èØ èî é é é6 éL éb éx éŽ é¤ éº éÐ éæ ê ê ê. êD êZ êp ê† êœ ê² êÈ êÞ êô ë ë ë6 ëL ëb ëx ëŽ ë¤ ëº ëÐ ëæ ì ì ì. ìD ì` ìv ìŒ ì¨ ì¾ ìÚ ìð í í í8 íN íd íz í– í¬ íÂ íØ íî î î î0 îF îb îx îŽ î¤ îº îÐ îæ ï ï ï4 ïJ ï` ïv ïŒ ï¨ ï¾ ïÔ ïê ð ð ð, ðB ðX ðn ð„ ð  ð¶ ðÌ ðâ ðþ ñ ñ0 ñF ñ\ ñr ñˆ ñž ñ´ ñÊ ñà ñü ò ò( òD òZ òp ò† òœ ò¸ òÎ òä òú ó ó2 óN ój ó† óœ ó² óÈ óä óú ô ô& ô< ôR ôh ô~ ô” ôª ôÀ ôÖ ôì õ õ õ. õD õZ õv õŒ õ¢ õ¸ õÎ õä õú ö ö& ö< öR öh ö~ ö” öª öÀ öÖ öì ÷ ÷ ÷. ÷J ÷` ÷| ÷’ ÷¨ ÷¾ ÷Ô ÷ê ø ø ø2 øH ø^ øt øŠ ø  ø¶ øÒ øè øþ ù ù* ù@ ùV ùr ùˆ ùž ù´ ùÊ ùà ùö ú ú" ú8 úN úd úz ú ú¦ ú¼ úÒ úè úþ û û* û@ ûV ûl û‚ ûž û´ ûÊ ûà ûö ü ü" ü8 üN üj ü€ ü– ü¬ üÈ üÞ üô ý ý ý6 ýL ýh ý~ ý” ýª ýÀ ýÜ ýò þ þ$ þ: þP þr þˆ þ¤ þº þÐ þæ þü ÿ ÿ( ÿD ÿ` ÿv ÿŒ ÿ¢ ÿ¸ ÿÔ ÿê!!!,!B!X!n!„!š!¶!Ì!â!ø!!$!:!P!f!|!’!¨!Ä!Ú!ð!!!2!N!d!z!!¦!¼!Ò!è!þ!!*!@!V!l!‚!ž!´!Ð!ì!!!.!D!`!v!Œ!¢!¸!Î!ê!!!,!B!X!n!„!š!°!Ì!â!þ!!*!F!\!r!ˆ!¤!º!Ð!æ!ü!!(!>!T!j!€!–!¬!Â!Ø!ô! !&!<!R!h!~!”!ª!À!Ö!ì! ! $! :! V! l! ‚! ˜! ®! Ä! Ú! ð! ! "! 8! N! d! z! ! ¬! Â! Ø! î! ! ! <! R! n! ! ¦! ¼! Ø! î! ! ! 0! F! b! x! ”! ª! À! Ö! ì! ! ! .! D! Z! p! †! œ! ¸! Î! ä! ú!!,!B!X!t!Š! !¶!Ì!â!ø!!$!:!P!f!|!˜!®!Ä!à!ü!!.!D!Z!p!†!œ!²!Î!ê!!!2!N!j!€!–!¬!Â!Ø!î!!!0!F!\!r!Ž!ª!Æ!Ü!ò!!!4!V!l!‚!˜!®!Ä!Ú!ð! !"!8!T!j!†!¢!¸!Î!ä!ú!!,!B!^!t!Š!¦!¼!Ø!î! ! !6!L!b!x!Ž!¤!º!Ð!ì!!!.!D!`!|!’!®!Ê!æ!ü!!.!J!f!|!˜!´!Ê!à!ö! !"!8!N!d!€!–!²!È!Þ!ô! ! !6!L!b!~!”!ª!À!Ü!ò!!!4!J!`!|!’!´!Ê!à!ö!!(!>!T!p!†!œ!²!Î!ä!ú!!2!H!^!t!Š! !¶!Ì!â!ø!!$!:!V!l!‚!ž!´!Ê!à!ö! !(!>!Z!p!Œ!¢!¸!Î!ê! ! ! 8! N! d! z! ! ¦! Â! Ø! î!!!!!!0!!F!!\!!r!!ˆ!!¤!!º!!Ö!!ò!"!"!"4!"P!"f!"|!"˜!"®!"Ê!"à!"ü!#!#(!#>!#T!#p!#†!#¢!#¾!#Ô!#ð!$ !$"!$>!$T!$p!$†!$œ!$¸!$Î!$ä!$ú!%!%&!%<!%X!%t!%Š!%¦!%¼!%Ò!%è!%þ!&!&*!&F!&\!&r!&Ž!&¤!&º!&Ð!&ì!'!'!':!'P!'l!'ˆ!'ž!'´!'Ê!'à!'ö!( !("!(>!(Z!(p!(Œ!(¢!(¸!(Î!(ä!(ú!)!)&!)<!)R!)h!)~!)”!)ª!)À!)Ö!)ì!*!*!*.!*D!*Z!*p!*†!*œ!*²!*È!*Þ!*ô!+ !+ !+6!+L!+b!+x!+Ž!+¤!+º!+Ð!+æ!+ü!,!,(!,>!,T!,j!,€!,–!,¬!,Â!,Ø!,î!-!-!-0!-F!-\!-r!-ˆ!-¤!-º!-Ö!-ì!.!.!..!.D!.Z!.p!.†!.œ!.²!.È!.Þ!.ô!/ !/ !/<!/R!/h!/~!/”!/ª!/À!/Ö!/ì!0!0!04!0P!0f!0|!0’!0¨!0¾!0Ô!0ê!1!1!1,!1B!1X!1n!1Š!1 !1¼!1Ò!1è!1þ!2!2*!2@!2V!2l!2‚!2˜!2®!2Ä!2à!2ö!3 !3"!3>!3T!3j!3€!3–!3¬!3Â!3Ø!3î!4!4 !46!4L!4b!4x!4Ž!4ª!4À!4Ö!4ì!5!5!54!5J!5`!5v!5Œ!5¢!5¸!5Ô!5ê!6!6!6,!6B!6^!6t!6Š!6 !6¶!6Ì!6â!6ø!7!7$!7:!7V!7l!7‚!7˜!7´!7Ð!7æ!7ü!8!8(!8>!8T!8j!8†!8œ!8¸!8Î!8ä!8ú!9!9&!9<!9R!9h!9~!9 !9¶!9Ì!9â!9ø!:!:*!:@!:V!:l!:ˆ!:ž!:´!:Ê!:à!:ö!; !;"!;8!;N!;j!;†!;œ!;¸!;Î!;ê!<!<!<,! !>"!>8!>N!>d!>z!>!>¦!>¼!>Ò!>î!? !?&!?<!?R!?n!?Š!? !?¶!?Ì!?â!?ø!@!@*!@@!@\!@r!@ˆ!@ž!@´!@Ð!@æ!@ü!A!A(!A>!AT!Aj!A€!A–!A¬!AÂ!AØ!Aî!B!B!B6!BL!Bb!Bx!BŽ!Bª!BÀ!BÖ!Bì!C!C!C.!CD!C`!Cv!CŒ!C¢!C¸!CÎ!Cä!D!D!D,!DB!DX!Dn!D„!Dš!D°!DÆ!DÜ!Dò!E!E!E4!EJ!E`!Ev!EŒ!E¢!E¸!EÎ!Eä!Eú!F!F&!F<!FR!Fh!F~!F”!F°!FÆ!FÜ!Fò!G!G!G4!GJ!G`!Gv!GŒ!G¢!G¸!GÎ!Gä!Gú!H!H&!HB!H^!Ht!HŠ!H !H¶!HÌ!Hâ!Hø!I!I$!I:!IP!If!I‚!I˜!I®!IÄ!IÚ!Iö!J !J"!J>!JZ!Jp!J†!Jœ!J²!JÈ!JÞ!Jô!K !K !K6!KL!Kb!Kx!KŽ!K¤!Kº!KÐ!Kæ!Kü!L!L(!L>!LT!Lj!L€!L–!L¬!LÂ!LØ!Lî!M!M!M0!MF!M\!Mr!Mˆ!Mž!M´!MÊ!Mà!Mö!N !N"!N8!NN!Nd!Nz!N–!N¬!NÂ!NØ!Nî!O!O!O0!OF!O\!Or!Oˆ!Ož!O´!OÊ!Oà!Oö!P !P"!P8!PN!Pj!P€!P–!P²!PÎ!Pä!Pú!Q!Q&!Q<!QR!Qh!Q~!Q”!Qª!QÀ!QÖ!Qò!R!R$!R:!RP!Rf!R|!R’!R¨!R¾!RÔ!Rê!S!S!S,!SB!S^!St!SŠ!S !S¶!SÌ!Sâ!Sø!T!T*!T@!TV!Tl!T‚!T˜!T®!TÄ!TÚ!Tð!U!U!U2!UH!U^!Ut!U!U¦!U¼!UÒ!Uè!Uþ!V!V0!VF!V\!Vr!Vˆ!Vž!V´!VÐ!Vì!W!W!W.!WD!WZ!Wp!W†!W¢!W¸!WÎ!Wä!X!X!X,!XB!XX!Xn!X„!Xš!X°!XÆ!Xâ!Xø!Y!Y$!Y:!YP!Yf!Y|!Y˜!Y®!YÄ!YÚ!Yð!Z!Z!Z2!ZH!Z^!Zz!Z!Z¬!ZÂ!ZØ!Zî![![![0![F![\![r![Ž![¤![º![Ð![æ![ü!\!\(!\>!\T!\j!\€!\–!\¬!\Â!\Ø!\î!]!]!]0!]F!]\!]r!]ˆ!]ž!]´!]Ê!]à!]ö!^ !^"!^8!^T!^j!^€!^–!^¬!^Â!^Ø!^î!_!_!_0!_F!_\!_r!_ˆ!_ž!_´!_Ê!_à!_ü!`!`(!`>!`T!`j!`€!`œ!`²!`È!`Þ!`ô!a !a !a6!aL!ab!ax!aŽ!a¤!aº!aÐ!aæ!aü!b!b(!b>!bT!bj!b†!bœ!b²!bÎ!bä!bú!c!c&!c<!cR!ch!c~!c”!cª!cÀ!cÖ!cì!d!d!d.!dD!dZ!dp!d†!dœ!d²!dÈ!dä!dú!e!e,!eH!e^!et!eŠ!e !e¶!eÌ!eâ!eø!f!f$!f:!fP!ff!f|!f’!f¨!f¾!fÔ!fê!g!g!g,!gB!gX!gn!g„!gš!g°!gÆ!gâ!gø!h!h$!h:!hP!hf!h|!h’!h¨!h¾!hÔ!hê!i!i!i,!iB!iX!in!i„!iš!i¶!iÌ!iâ!iø!j!j$!j:!jP!jf!j|!j’!j¨!j¾!jÔ!jê!k!k!k,!kB!kX!kn!k„!kš!k°!kÆ!kÜ!kò!l!l$!l:!lP!lf!l|!l’!l¨!l¾!lÚ!lö!m !m"!m8!mT!mj!m€!m–!m²!mÈ!mÞ!mô!n !n !n6!nR!nh!n~!nš!n°!nÆ!nÜ!nò!o!o!o:!oP!of!o|!o˜!o®!oÄ!oà!oö!p !p"!p8!pN!pd!pz!p!p¦!p¼!pÒ!pè!pþ!q!q0!qF!q\!qr!qˆ!qž!q´!qÊ!qà!qü!r!r(!r>!rT!rj!r€!rœ!r²!rÈ!rÞ!rô!s !s !s6!sL!sb!sx!sŽ!s¤!sº!sÐ!sæ!sü!t!t(!t>!tT!tj!t€!t–!t¬!tÂ!tØ!tô!u !u !u6!uR!uh!u~!u”!uª!uÀ!uÖ!uì!v!v!v.!vD!vZ!vp!v†!vœ!v²!vÈ!vÞ!vô!w !w&!w<!wR!wh!w~!w”!wª!wÀ!wÖ!wì!x!x!x.!xD!xZ!xp!x†!xœ!x²!xÈ!xÞ!xô!y !y !y6!yL!yb!yx!yŽ!y¤!yº!yÐ!yæ!yü!z!z(!z>!zT!zj!z€!z–!z¬!zÂ!zØ!zî!{!{!{0!{F!{b!{x!{Ž!{¤!{º!{Ð!{æ!{ü!|!|(!|>!|T!|j!|€!|–!|¬!|Â!|Ø!|î!}!}!}0!}F!}\!}r!}ˆ!}ž!}´!}Ê!}à!}ö!~ !~"!~8!~N!~d!~z!~!~¦!~¼!~Ò!~è!~þ!!*!@!V!l!‚!˜!®!Ä!Ú!ð!€!€!€2!€H!€^!€t!€Š!€ !€¶!€Ì!€â!€ø!!$!:!P!f!|!’!¨!¾!Ô!ê!‚!‚!‚,!‚B!‚X!‚n!‚„!‚š!‚°!‚Æ!‚Ü!‚ò!ƒ!ƒ!ƒ4!ƒJ!ƒ`!ƒv!ƒŒ!ƒ¢!ƒ¸!ƒÎ!ƒä!ƒú!„!„&!„<!„R!„h!„„!„š!„°!„Æ!„Ü!„ò!…!…!…4!…J!…`!…v!…Œ!…¢!…¸!…Î!…ê!†!†!†,!†B!†X!†n!†„!†š!†°!†Æ!†Ü!†ò!‡!‡!‡4!‡J!‡`!‡v!‡Œ!‡¢!‡¸!‡Î!‡ä!‡ú!ˆ!ˆ&!ˆ<!ˆR!ˆh!ˆ~!ˆ”!ˆª!ˆÀ!ˆÖ!ˆì!‰!‰!‰.!‰D!‰Z!‰p!‰†!‰œ!‰²!‰È!‰Þ!‰ô!Š !Š !Š6!ŠL!Šb!Šx!ŠŽ!Ф!Šº!ŠÐ!Šæ!Šü!‹!‹.!‹D!‹Z!‹p!‹†!‹œ!‹²!‹Î!‹ä!‹ú!Œ!Œ,!ŒB!ŒX!Œn!Œ„!Œš!Œ°!ŒÆ!ŒÜ!Œò!!!4!J!`!v!Œ!¢!¸!Î!ä!ú!Ž!Ž&!Ž<!ŽR!Žh!Ž~!Žš!ް!ŽÆ!ŽÜ!Žò!!!4!J!`!v!Œ!¢!¸!Î!ä!ú!!&!<!R!h!~!”!ª!À!Ö!ì!‘!‘!‘4!‘P!‘f!‘|!‘˜!‘®!‘Ä!‘Ú!‘ö!’ !’"!’8!’N!’d!’€!’–!’¬!’È!’ä!’ú!“!“&!“<!“R!“h!“~!“”!“ª!“À!“Ö!“ì!”!”!”.!”D!”Z!”p!”†!”œ!”²!”Î!”ä!”ú!•!•&!•<!•R!•h!•~!•”!•ª!•À!•Ö!•ì!–!–!–.!–D!–Z!–p!–†!–œ!–²!–È!–Þ!–ô!— !— !—6!—L!—b!—x!—Ž!—¤!—º!—Ð!—æ!—ü!˜!˜(!˜>!˜T!˜j!˜€!˜–!˜¬!˜Â!˜Ø!˜î!™!™!™0!™F!™\!™r!™ˆ!™ž!™´!™Ê!™à!™ö!š !š"!š8!šN!šd!šz!š!š¦!š¼!šÒ!šî!›!›!›0!›L!›b!›x!›Ž!›¤!›À!›Ü!›ò!œ!œ!œ4!œJ!œ`!œv!œŒ!œ¢!œ¸!œÎ!œä!œú!!&!<!R!h!~!š!¼!Ò!è!þ!ž!ž*!ž@!žV!žl!ž‚!žž!ž´!žÊ!žà!žö!Ÿ !Ÿ"!Ÿ>!ŸT!Ÿj!Ÿ€!Ÿ–!Ÿ¬!ŸÂ!ŸØ!Ÿî! ! ! 0! F! \! r! ˆ! ž! ´! Ê! à! ö!¡!¡(!¡>!¡T!¡j!¡€!¡œ!¡²!¡È!¡Þ!¡ô!¢ !¢ !¢6!¢L!¢b!¢x!¢Ž!¢¤!¢º!¢Ð!¢æ!¢ü!£!£(!£>!£T!£j!£€!£–!£¬!£Â!£Ø!£î!¤ !¤ !¤6!¤L!¤b!¤x!¤Ž!¤¤!¤º!¤Ð!¤æ!¤ü!¥!¥(!¥>!¥T!¥j!¥€!¥–!¥¬!¥Â!¥Ø!¥î!¦!¦!¦0!¦F!¦\!¦r!¦ˆ!¦ž!¦´!¦Ê!¦à!¦ö!§ !§"!§8!§N!§d!§z!§!§¦!§¼!§Ò!§è!§þ!¨!¨*!¨@!¨V!¨l!¨‚!¨˜!¨®!¨Ê!¨à!¨ö!© !©"!©8!©N!©d!©z!©!©¦!©¼!©Ò!©è!©þ!ª!ª*!ª@!ªV!ªl!ª‚!ª˜!ª®!ªÄ!ªÚ!ªð!«!«"!«8!«N!«d!«z!«!«¦!«¼!«Ò!«è!¬!¬!¬0!¬F!¬\!¬r!¬ˆ!¬ž!¬´!¬Ê!¬à!¬ö!­ !­"!­8!­N!­d!­z!­!­¦!­¼!­Ò!­è!­þ!®!®*!®@!®V!®l!®‚!®ž!®´!®Ê!®à!®ö!¯ !¯"!¯8!¯N!¯d!¯z!¯!¯¦!¯¼!¯Ò!¯è!¯þ!°!°*!°@!°V!°l!°‚!°˜!°®!°Ä!°Ú!°ö!± !±"!±8!±N!±d!±z!±–!±¬!±Â!±Ø!±ô!² !² !²6!²L!²b!²x!²Ž!²ª!²À!²Ö!²ì!³!³!³4!³J!³`!³v!³Œ!³¢!³¸!³Î!³ä!³ú!´!´&!´B!´X!´t!´Š!´ !´¶!´Ì!´â!´ø!µ!µ$!µ:!µP!µf!µ|!µ’!µ¨!µÄ!µÚ!µð!¶!¶!¶2!¶H!¶^!¶t!¶Š!¶ !¶¶!¶Ì!¶â!¶ø!·!·$!·:!·P!·f!·|!·’!·¨!·¾!·Ô!·ê!¸!¸!¸,!¸B!¸X!¸n!¸„!¸š!¸°!¸Æ!¸Ü!¸ò!¹!¹!¹4!¹J!¹`!¹v!¹Œ!¹¢!¹¸!¹Î!¹ä!¹ú!º!º&!º<!ºR!ºh!º~!º”!ºª!ºÀ!ºÖ!ºì!»!»!».!»D!»Z!»p!»†!»œ!»²!»È!»Þ!»ô!¼!¼&!¼<!¼R!¼h!¼~!¼”!¼ª!¼À!¼Ö!¼ì!½!½!½.!½D!½Z!½p!½†!½œ!½²!½È!½ä!½ú!¾!¾&!¾B!¾^!¾t!¾Š!¾ !¾¶!¾Ì!¾â!¾þ!¿!¿*!¿@!¿V!¿l!¿‚!¿˜!¿´!¿Ê!¿à!¿ö!À !À"!À8!ÀN!Àd!Àz!À!À¦!À¼!ÀÒ!Àè!Àþ!Á!Á*!Á@!ÁV!Ál!Á‚!Á˜!Á®!ÁÄ!ÁÚ!Áð!Â!Â!Â2!ÂH!Â^!Ât!Š! !¶!ÂÌ!Ââ!Âø!Ã!Ã*!Ã@!ÃV!Ãl!Â!Ø!î!ÃÄ!ÃÚ!Ãð!Ä!Ä!Ä2!ÄH!Ä^!Ät!ÄŠ!Ä !Ķ!ÄÌ!Äâ!Äø!Å!Å$!Å:!ÅP!Åf!Å|!Å’!Ũ!ž!ÅÔ!Åê!Æ!Æ!Æ,!ÆB!ÆX!Æn!Æ„!Æš!ư!ÆÆ!ÆÜ!Æò!Ç!Ç!Ç4!ÇJ!Ç`!Çv!ÇŒ!Ç¢!Ǹ!ÇÎ!Çä!Çú!È!È&!È<!ÈR!Èh!È~!È”!Ȫ!ÈÀ!ÈÖ!Èì!É!É!É4!ÉJ!É`!Év!ÉŒ!É¢!ɸ!ÉÎ!Éä!Éú!Ê!Ê&!Ê<!ÊR!Êh!Ê~!Ê”!ʪ!ÊÀ!ÊÖ!Êì!Ë!Ë!Ë.!ËD!ËZ!Ëp!ˆ!Ëœ!˲!ËÈ!ËÞ!Ëô!Ì !Ì !Ì6!ÌL!Ìh!Ì„!Ìš!̰!ÌÆ!Ìâ!Ìø!Í!Í$!Í:!ÍP!Íf!Í|!Í’!ͨ!;!ÍÔ!Íê!Î!Î!Î2!ÎH!Î^!Ît!Ί!Π!ζ!ÎÌ!Îâ!Îþ!Ï!Ï0!ÏF!Ï\!Ïr!ψ!Ïž!Ϻ!ÏÖ!Ïì!Ð!Ð!Ð.!ÐJ!Ð`!Ðv!ÐŒ!Т!и!ÐÎ!Ðä!Ðú!Ñ!Ñ&!Ñ<!ÑR!Ñh!Ñ~!Ñ”!Ѫ!ÑÀ!ÑÖ!Ñì!Ò!Ò!Ò.!ÒD!ÒZ!Òp!Ò†!Òœ!Ò²!ÒÈ!ÒÞ!Ó!Ó!Ó,!ÓB!ÓX!Ón!Ó„!Óš!Ó°!ÓÆ!ÓÜ!Óò!Ô!Ô!Ô4!ÔJ!Ô`!Ôv!ÔŒ!Ô¢!Ô¸!ÔÎ!Ôä!Ôú!Õ!Õ&!Õ<!ÕR!Õh!Õ~!Õ”!Õª!ÕÀ!ÕÖ!Õì!Ö!Ö!Ö.!ÖD!ÖZ!Öp!Ö†!Öœ!Ö²!ÖÈ!ÖÞ!Öô!× !× !×<!×R!×h!×~!×”!×°!ׯ!×â!×ø!Ø!Ø$!Ø:!ØV!Øl!Ø‚!ؘ!Ø®!ØÄ!ØÚ!Øð!Ù !Ù"!Ù8!ÙN!Ùd!Ùz!Ù!Ù¦!ÙÂ!ÙØ!Ùî!Ú!Ú!Ú6!ÚL!Úb!Úx!ÚŽ!Ú¤!Úº!ÚÐ!Úæ!Û!Û!Û4!ÛJ!Û`!Ûv!ÛŒ!Û¢!Û¸!ÛÎ!Ûä!Ûú!Ü!Ü&!Ü<!ÜR!Üh!Ü~!Ü”!ܪ!ÜÆ!ÜÜ!Üò!Ý!Ý*!Ý@!ÝV!Ýl!Ý‚!ݘ!Ý´!ÝÊ!Ýà!Ýö!Þ !Þ"!Þ>!ÞT!Þj!Þ€!Þ–!Þ¬!ÞÂ!ÞØ!Þî!ß!ß!ß0!ßF!ß\!ßr!߈!ßž!ß´!ßÐ!ßæ!ßü!à!à(!à>!àT!àp!à†!àœ!à¸!àÎ!àä!á!á!á2!áN!ád!á€!á–!á¬!áÂ!áØ!áô!â !â !â6!âL!âh!â~!âš!â¶!âÌ!ââ!âø!ã!ã$!ã:!ãP!ãf!ã‚!ã˜!ã®!ãÊ!ãà!ãü!ä!ä(!ä>!äT!äp!ä†!ä¢!ä¸!äÎ!ää!äú!å!å,!åB!åX!ån!å„!å !å¶!åÌ!åâ!åþ!æ!æ0!æL!æb!æx!æŽ!æª!æÀ!æÖ!æì!ç!ç!ç4!çP!çl!ç‚!ç˜!ç®!çÊ!çæ!è!è!è.!èD!èZ!èp!èŒ!è¨!è¾!èÔ!èê!é!é!é,!éB!éX!ét!é!é¦!é¼!éØ!éî!ê!ê !ê6!êL!êh!ê~!ê”!êª!êÀ!êÖ!êì!ë!ë!ë.!ëD!ëZ!ëp!ë†!ëœ!ë²!ëÈ!ëÞ!ëô!ì !ì !ì6!ìR!ìn!ì„!ìš!ì°!ìÆ!ìÜ!ìò!í!í!í4!íJ!í`!ív!íŒ!í¢!í¸!íÎ!íä!íú!î!î&!î<!îR!îh!î~!î”!îª!îÆ!îÜ!îò!ï!ï!ï4!ïJ!ï`!ïv!ïŒ!ï¢!ï¸!ïÎ!ïä!ïú!ð!ð,!ðB!ðX!ðn!ð„!ðš!ð°!ðÆ!ðâ!ðø!ñ!ñ$!ñ:!ñP!ñf!ñ|!ñ’!ñ¨!ñ¾!ñÔ!ñê!ò!ò!ò,!òH!ò^!òz!ò!ò¦!ò¼!òÒ!òè!òþ!ó!ó*!ó@!óV!ól!ó‚!óž!óº!óÐ!óæ!óü!ô!ô(!ô>!ôT!ôj!ô€!ô–!ô¬!ôÂ!ôØ!ôî!õ !õ&!õ<!õR!õh!õ~!õ”!õª!õÀ!õÖ!õì!ö!ö!ö.!öD!öZ!öp!ö†!öœ!ö²!öÈ!öÞ!öô!÷ !÷ !÷6!÷L!÷b!÷~!÷”!÷ª!÷À!÷Ö!÷ì!ø!ø!ø.!øD!øZ!øp!ø†!ø¢!ø¾!øÔ!øê!ù!ù!ù,!ùB!ùX!ùn!ù„!ùš!ù°!ùÆ!ùÜ!ùò!ú!ú!ú4!úJ!ú`!úv!úŒ!ú¢!ú¸!úÎ!úä!úú!û!û&!û<!ûR!ûh!û„!ûš!û°!ûÆ!ûÜ!ûò!ü!ü!ü4!üJ!üf!ü‚!ü˜!ü®!üÄ!üÚ!üð!ý!ý!ý2!ýH!ý^!ýt!ýŠ!ý !ý¶!ýÌ!ýâ!ýø!þ!þ$!þ:!þV!þl!þ‚!þ˜!þ®!þÄ!þÚ!þð!ÿ !ÿ"!ÿ8!ÿN!ÿd!ÿz!ÿ!ÿ¦!ÿ¼!ÿÒ!ÿè!ÿþ""*"@"V"l"‚"˜"®"Ä"Ú"ð"""2"H"^"t"Š" "¶"Ì"è"þ""*"@"V"l"‚"˜"®"Ä"Ú"ð"""2"H"^"t"Š" "¶"Ì"â"ø""$":"V"l"‚"˜"®"Ä"Ú"ð"""2"H"d"z""¦"¼"Ò"è"þ""*"@"V"l"‚"˜"´"Ð"æ"ü""."D"Z"v"Œ"¢"¸"Î"ê""","H"^"t""¦"¼"Ò"è"þ" " *" @" V" l" ‚" ˜" ®" Ä" Ú" ð" " " 2" H" d" z" " ¦" ¼" Ò" è" " " 6" L" b" x" Ž" ¤" º" Ð" ì" " " ." D" Z" p" †" œ" ²" È" Þ" ô" " &" <" R" n" „" š" °" Æ" Ü" ò""":"P"f"|"’"¨"Ä"Ú"ð"""2"H"^"t"Š" "¶"Ò"è"þ""*"F"\"r"ˆ"ž"º"Ð"ì"""."J"`"|"’"¨"¾"Ô"ð" "(">"T"j"€"–"¬"È"Þ"ô" " "6"L"b"x"Ž"¤"º"Ð"æ"ü""(">"T"j"€"–"¬"Â"Ø"î"""0"F"\"r"ˆ"ž"´"Ê"à"ö" """8"N"d"z""¦"¼"Ò"è"þ""*"@"V"l"‚"˜"®"Ê"à"ö" """>"T"j"€"–"¬"Â"Ø"î"""0"F"\"r"ˆ"ž"´"Ê"à"ö" """8"N"d"z""¦"¼"Ò"è"þ""*"@"V"l"‚"˜"®"Ê"à"ö" """>"T"j"€"–"²"Î"ê""","B"X"n"„"š"°"Æ"Ü"ò"""4"J"`"v"Œ"¢"¸"Î"ä"ú"","B"X"n"„" "¶"Ì"è"þ" " *" @" V" l" ‚" ˜" ´" Ð" æ" ü"!"!."!D"!Z"!p"!†"!œ"!²"!È"!Þ"!ô"" "" ""6""L""b""x""Ž""¤""º""Ð""æ""ü"#"#("#>"#T"#j"#€"#–"#¬"#È"#Þ"#ô"$"$,"$B"$X"$n"$„"$ "$¶"$Ì"$â"$ø"%"%*"%@"%V"%l"%ˆ"%¤"%º"%Ð"%æ"%ü"&"&("&>"&T"&j"&€"&–"&¬"&Â"&Ø"&î"'"'"'0"'F"'\"'r"'ˆ"'ž"'´"'Ê"'à"'ö"( "(""(8"(N"(d"(z"("(¦"(¼"(Ò"(è"(þ")")*")@")V")l")‚")˜")®")Ä")Ú")ð"*"*"*2"*H"*^"*t"*Š"* "*¶"*Ò"*è"*þ"+"+*"+@"+V"+l"+‚"+˜"+®"+Ä"+Ú"+ð",",",2",H",^",t",Š", ",¶",Ì",â",ø"-"-$"-:"-P"-f"-|"-’"-¨"-¾"-Ô"-ê".".".,".B".X".n".„".š".°".Æ".Ü".ò"/"/"/4"/J"/`"/v"/Œ"/¢"/¾"/Ô"/ê"0"0"0,"0B"0X"0n"0„"0š"0°"0Æ"0Ü"0ò"1"1"14"1J"1`"1v"1’"1¨"1¾"1Ô"1ê"2"2"2,"2B"2X"2n"2„"2š"2°"2Æ"2Ü"2ò"3"3$"3:"3P"3f"3|"3˜"3®"3Ä"3Ú"3ö"4"4("4>"4T"4p"4†"4œ"4²"4È"4Þ"4ô"5 "5 "56"5L"5b"5x"5Ž"5¤"5º"5Ð"5æ"5ü"6"6("6>"6T"6j"6€"6–"6¬"6Â"6Ø"6î"7"7"70"7F"7\"7r"7ˆ"7ž"7´"7Ê"7à"7ö"8 "8""88"8N"8d"8z"8"8¦"8¼"8Ò"8è"8þ"9"9*"9@"9V"9l"9‚"9˜"9´"9Ê"9à"9ö": ":"":8":N":d":z":":¦":¼":Ò":è":þ";";*";@";V";l";‚";˜";®";Ä";Ú";ð"<"<"<2"">">.">D">Z">p">†">œ">¸">Î">ä">ú"?"?&"?<"?R"?h"?~"?”"?ª"?À"?Ö"?ì"@"@"@."@D"@Z"@p"@†"@œ"@²"@È"@Þ"@ô"A "A "A6"AL"Ab"Ax"AŽ"A¤"Aº"AÐ"Aæ"Aü"B"B("B>"BT"Bj"B€"B–"B¬"BÂ"BØ"Bî"C"C"C0"CF"C\"Cr"Cˆ"Cž"C´"CÊ"Cà"Cö"D "D""D>"DT"Dp"D†"Dœ"D²"DÈ"DÞ"Dô"E "E "E<"ER"En"E„"Eš"E¶"EÌ"Eâ"Eø"F"F*"F@"FV"Fl"F‚"F˜"F®"FÄ"FÚ"Fð"G"G"G2"GH"G^"Gt"G"G¦"G¼"GÒ"Gî"H"H"H0"HF"H\"Hr"Hˆ"Hž"H´"HÊ"Hà"Hü"I"I."ID"IZ"Ip"I†"Iœ"I²"IÎ"Iä"Iú"J"J&"J<"JR"Jh"J~"J”"Jª"JÆ"JÜ"Jò"K"K"K4"KJ"K`"Kv"KŒ"K¢"K¸"KÎ"Kä"Kú"L"L&"L<"LR"Lh"L„"Lš"L°"LÆ"LÜ"Lò"M"M"M4"MJ"M`"Mv"MŒ"M¢"M¸"MÎ"Mä"Mú"N"N&"N<"NR"Nh"N~"N”"Nª"NÀ"NÖ"Nì"O"O"O."OD"OZ"Op"O†"Oœ"O²"OÈ"OÞ"Oô"P "P "P6"PL"Pb"Px"PŽ"P¤"Pº"PÐ"Pæ"Pü"Q"Q("Q>"QT"Qj"Q€"Q–"Q¬"QÂ"QØ"Qî"R"R"R0"RF"R\"Rr"Rˆ"Rž"R´"RÐ"Ræ"Rü"S"S("S>"ST"Sj"S€"S–"S¬"SÂ"SØ"Sî"T"T"T0"TF"T\"Tr"Tˆ"Tž"T´"TÊ"Tà"Tö"U "U""U8"UN"Ud"Uz"U"U¦"U¼"UÒ"Uè"Uþ"V"V*"V@"VV"Vl"V‚"V˜"V®"VÄ"VÚ"Vð"W"W"W2"WH"W^"Wt"WŠ"W "W¶"WÌ"Wâ"Wø"X"X$"X:"XP"Xf"X|"X’"X¨"X¾"XÔ"Xê"Y"Y"Y,"YB"YX"Yt"YŠ"Y "Y¶"YÌ"Yâ"Yþ"Z"Z*"Z@"ZV"Zl"Z‚"Z˜"Z®"ZÄ"ZÚ"Zð"["["[2"[H"[^"[t"[Š"[ "[¶"[Ì"[â"[ø"\"\$"\:"\P"\l"\‚"\˜"\®"\Ä"\Ú"\ð"]"]"]2"]H"]^"]t"]Š"] "]¶"]Ì"]â"]ø"^"^$"^:"^P"^l"^‚"^˜"^®"^Ä"^Ú"^ð"_ "_""_8"_N"_j"_†"_œ"_²"_È"_Þ"_ô"` "` "`6"`R"`n"`„"`š"`°"`Æ"`Ü"`ò"a"a"a:"aP"af"a‚"a˜"a®"aÊ"aà"aö"b"b("b>"bT"bj"b€"b–"b¬"bÂ"bØ"bî"c"c "c6"cR"ch"c~"c”"cª"cÆ"cÜ"cò"d"d"d4"dJ"df"d|"d’"d¨"d¾"dÔ"dê"e"e"e8"eN"ej"e†"e¢"e¸"eÎ"eê"f"f"f,"fB"f^"ft"f"f¬"fÂ"fÞ"fô"g "g&"g<"gR"gh"g~"g”"gª"gÆ"gÜ"gò"h"h*"h@"h\"hr"hˆ"h¤"hÀ"hÜ"hò"i"i"i4"iJ"i`"iv"iŒ"i¢"i¸"iÎ"iä"iú"j"j&"j<"jX"jn"jŠ"j "j¶"jÌ"jâ"jø"k"k$"k@"kV"kl"k‚"k˜"k®"kÄ"kÚ"kö"l"l("l>"lT"lp"l†"lœ"l¸"lÔ"lê"m"m"m,"mH"m^"mt"mŠ"m "m¶"mÌ"mâ"mø"n"n$"n:"nV"nr"nˆ"nž"n´"nÊ"næ"nü"o"o."oD"oZ"op"o†"oœ"o²"oÈ"oÞ"oô"p"p&"p<"pR"ph"p~"p”"pª"pÀ"pÖ"pì"q"q"q4"qJ"q`"qv"qŒ"q¨"q¾"qÔ"qê"r"r"r,"rB"rX"rn"rŠ"r "r¶"rÌ"râ"rø"s"s$"s:"sP"sf"s|"s˜"s®"sÊ"sà"sö"t "t("t>"tZ"tp"t†"tœ"t²"tÈ"tÞ"tô"u "u&"u<"uR"un"u„"uš"u°"uÆ"uÜ"uø"v"v0"vL"vh"v„"vš"v°"vÆ"vâ"vø"w"w$"w:"wV"wl"w‚"w˜"w®"wÄ"wÚ"wð"x"x"x2"xH"x^"xz"x"x¦"x¼"xÒ"xè"xþ"y"y*"y@"y\"yr"yŽ"y¤"yº"yÖ"yì"z"z"z."zD"z`"zv"zŒ"z¨"zÄ"zÚ"zð"{ "{""{8"{N"{d"{z"{"{¬"{Â"{Ø"{î"| "|&"|<"|R"|n"|„"|š"|¶"|Ì"|â"|ø"}"}0"}F"}\"}x"}Ž"}¤"}º"}Ð"}æ"}ü"~"~("~D"~`"~v"~’"~¨"~¾"~Ô"~ê"""2"H"^"t""¦"¼"Ò"è"€"€"€6"€L"€b"€x"€Ž"€¤"€À"€Ü"€ò""$"@"\"r"Ž"ª"À"Ö"ì"‚"‚"‚:"‚P"‚f"‚|"‚’"‚¨"‚Ä"‚à"‚ü"ƒ"ƒ("ƒ>"ƒT"ƒp"ƒ†"ƒœ"ƒ²"ƒÈ"ƒÞ"ƒô"„ "„ "„6"„R"„h"„~"„”"„ª"„À"„Ö"„ì"…"…"…."…J"…`"…v"…Œ"…¢"…¸"…Î"…ä"…ú"†"†&"†<"†R"†n"†„"†š"†°"†Ì"†â"†ø"‡"‡$"‡:"‡P"‡l"‡‚"‡˜"‡´"‡Ê"‡à"‡ü"ˆ"ˆ("ˆ>"ˆZ"ˆp"ˆ†"ˆœ"ˆ¸"ˆÎ"ˆä"ˆú"‰"‰,"‰H"‰d"‰z"‰"‰¬"‰Â"‰Ø"‰ô"Š "Š "Š6"ŠR"Šn"Š„"Šš"а"ŠÌ"Šâ"Šø"‹"‹*"‹@"‹V"‹l"‹‚"‹ž"‹´"‹Ð"‹ì"Œ"Œ"Œ:"ŒP"Œl"Œ‚"Œ˜"Œ´"ŒÊ"Œæ"Œü""."J"`"v"Œ"¢"¸"Ô"ê"Ž"Ž""Ž>"ŽT"Žj"Ž€"Ž–"ެ"ŽÈ"ŽÞ"Žô" "2"H"^"t"Š" "¶"Ì"â"ø""*"@"V"l"‚"ž"´"Ê"à"ö"‘ "‘("‘J"‘f"‘|"‘’"‘¨"‘Ä"‘Ú"‘ð"’"’""’8"’N"’j"’€"’œ"’²"’È"’ä"’ú"“"“2"“N"“d"“€"“–"“¬"“Â"“Ø"“ô"” "” "”<"”R"”h"”„"”š"”°"”Æ"”Ü"”ò"•"•"•4"•J"•`"•v"•Œ"•¢"•¸"•Î"•ä"•ú"–"–,"–H"–^"–t"–"–¦"–Â"–Ø"–î"—"—"—0"—F"—\"—r"—ˆ"—ž"—´"—Ê"—à"—ö"˜ "˜""˜8"˜N"˜d"˜z"˜–"˜¬"˜Â"˜Ø"˜î"™ "™ "™6"™L"™b"™~"™”"™ª"™À"™Ü"™ò"š"š$"š:"šP"šf"š|"š’"š®"šÄ"šÚ"šö"› "›""›8"›T"›j"›€"›–"›¬"›Â"›Ø"›î"œ"œ"œ0"œL"œb"œ~"œ”"œ°"œÆ"œâ"œø""$":"P"f"|"’"¨"¾"Ô"ê"ž"ž"ž,"žB"žX"žn"ž„"žš"ž¶"žÌ"žâ"žø"Ÿ"Ÿ$"Ÿ:"ŸP"Ÿf"Ÿ|"Ÿ’"Ÿ¨"Ÿ¾"ŸÔ"Ÿê" " " ," B" X" n" „" š" °" Æ" Ü" ò"¡"¡"¡4"¡P"¡f"¡|"¡’"¡¨"¡¾"¡Ô"¡ê"¢"¢"¢,"¢B"¢X"¢n"¢„"¢š"¢°"¢Æ"¢Ü"¢ò"£"£"£4"£J"£`"£v"£’"£¨"£¾"£Ô"£ê"¤"¤"¤2"¤H"¤^"¤t"¤Š"¤ "¤¶"¤Ì"¤â"¤ø"¥"¥$"¥:"¥P"¥f"¥|"¥’"¥¨"¥¾"¥Ô"¥ê"¦"¦"¦,"¦B"¦X"¦n"¦„"¦ "¦¶"¦Ò"¦è"¦þ"§"§*"§@"§V"§l"§‚"§˜"§´"§Ê"§à"§ö"¨ "¨""¨>"¨T"¨j"¨†"¨œ"¨²"¨È"¨Þ"¨ô"© "© "©6"©L"©b"©x"©Ž"©¤"©º"©Ð"©æ"©ü"ª"ª("ªD"ªZ"ªp"ª†"ªœ"ª²"ªÈ"ªÞ"ªô"« "«&"«B"«X"«n"«Š"« "«¶"«Ì"«â"«ø"¬"¬*"¬@"¬V"¬l"¬‚"¬˜"¬®"¬Ä"¬Ú"¬ð"­"­"­2"­H"­^"­t"­Š"­ "­¶"­Ì"­â"­ø"®"®$"®@"®V"®l"®‚"®˜"®®"®Ä"®à"®ö"¯ "¯""¯8"¯N"¯d"¯z"¯"¯¦"¯¼"¯Ò"¯è"¯þ"°"°0"°F"°\"°r"°ˆ"°ž"°´"°Ê"°æ"°ü"±"±."±D"±Z"±p"±†"±œ"±²"±È"±Þ"±ô"² "²&"²B"²X"²t"²Š"² "²¶"²Ì"²â"²ø"³"³$"³@"³V"³l"³ˆ"³ž"³´"³Ê"³à"³ö"´ "´""´8"´N"´d"´z"´"´¦"´¼"´Ò"´è"´þ"µ"µ0"µF"µ\"µx"µŽ"µ¤"µº"µÐ"µæ"µü"¶"¶("¶>"¶T"¶p"¶†"¶¢"¶¸"¶Î"¶ä"¶ú"·"·,"·B"·X"·n"·„"·š"·°"·Æ"·Ü"·ò"¸"¸"¸4"¸J"¸`"¸v"¸Œ"¸¢"¸¸"¸Î"¸ä"¸ú"¹"¹,"¹B"¹X"¹t"¹Š"¹ "¹¶"¹Ì"¹â"¹ø"º"º$"º:"ºP"ºf"º|"º’"º¨"º¾"ºÔ"ºê"»"»"»,"»B"»X"»n"»„"»š"»°"»Æ"»Ü"»ò"¼"¼"¼4"¼J"¼`"¼v"¼Œ"¼¢"¼¸"¼Î"¼ä"¼ú"½"½,"½B"½X"½n"½„"½š"½°"½Æ"½Ü"½ò"¾"¾"¾4"¾J"¾`"¾v"¾Œ"¾¢"¾¸"¾Î"¾ä"¾ú"¿"¿&"¿B"¿X"¿n"¿„"¿š"¿°"¿Æ"¿Ü"¿ò"À"À"À4"ÀJ"À`"Àv"ÀŒ"À¢"À¸"ÀÎ"Àä"Àú"Á"Á&"Á<"ÁR"Áh"Á~"Á”"Áª"ÁÆ"Áâ"Áþ"Â"Â6"ÂR"Ân"Š"¦"ÂÂ"ÂÞ"Âú"Ã"Ã2"ÃN"Ãd"Ãz"Ã"æ"ü"ÃÒ"Ãè"Ãþ"Ä"Ä*"Ä@"ÄV"Äl"Ä‚"Ę"Ä´"ÄÊ"Äà"Äö"Å "Å""Å8"ÅN"Åj"Å€"Å–"Ŭ"ÅÂ"ÅØ"Åî"Æ"Æ "Æ6"ÆL"Æb"Æx"ÆŽ"Ƥ"ƺ"ÆÐ"Ææ"Æü"Ç"Ç("Ç>"ÇT"Çj"Ç€"Ç–"Ǭ"ÇÂ"ÇØ"Çî"È"È"È0"ÈL"Èb"Èx"È”"Ȫ"ÈÀ"ÈÖ"Èì"É"É"É4"ÉJ"É`"Év"ÉŒ"ɨ"ɾ"ÉÚ"Éð"Ê"Ê"Ê2"ÊH"Ê^"Êt"ÊŠ"Ê "ʶ"ÊÌ"Êâ"Êø"Ë"Ë$"Ë:"ËP"Ëf"Ë|"Ë’"˨"˾"ËÚ"Ëð"Ì "Ì""Ì8"ÌT"Ìj"Ì€"Ì–"̬"ÌÂ"ÌØ"Ìî"Í"Í"Í0"ÍF"Íb"Íx"ÍŽ"ͤ"ͺ"ÍÐ"Íæ"Íü"Î"Î("ÎD"ÎZ"Îp"Ά"Μ"β"ÎÈ"ÎÞ"Îô"Ï"Ï&"Ï<"ÏX"Ïn"Ï„"Ïš"ϰ"ÏÆ"ÏÜ"Ïò"Ð"Ð"Ð:"ÐP"Ðf"Ђ"И"д"ÐÊ"Ðà"Ðö"Ñ "Ñ""Ñ>"ÑT"Ñj"ц"Ñ¢"Ѹ"ÑÎ"Ñð"Ò"Ò""Ò8"ÒN"Òd"Ò€"Ò–"Ò²"ÒÈ"Òä"Òú"Ó"Ó&"ÓB"ÓX"Ón"ÓŠ"Ó¦"Ó¼"ÓÒ"Óè"Óþ"Ô"Ô*"Ô@"ÔV"Ôl"Ô‚"Ô˜"Ô´"ÔÊ"Ôà"Ôö"Õ "Õ""Õ8"ÕN"Õd"Õz"Õ"Õ¦"Õ¼"ÕÒ"Õè"Õþ"Ö"Ö0"ÖL"Öb"Öx"ÖŽ"Ö¤"Öº"ÖÐ"Öæ"Öü"×"×("×>"×T"×j"×€"×–"ײ"×È"×ä"×ú"Ø"Ø&"Ø<"ØR"Øh"Ø~"Ø”"ت"ØÀ"ØÖ"Øì"Ù"Ù"Ù."ÙD"ÙZ"Ùp"Ù†"Ùœ"Ù²"ÙÈ"Ùä"Ùú"Ú"Ú&"Ú<"ÚR"Úh"Ú~"Ú”"Úª"ÚÀ"ÚÖ"Úì"Û"Û"Û."ÛD"Û`"Ûv"ÛŒ"Û¢"Û¸"ÛÎ"Ûä"Ûú"Ü"Ü&"Ü<"ÜR"Üh"Ü~"Ü”"ܪ"ÜÀ"ÜÖ"Üì"Ý"Ý"Ý."ÝD"ÝZ"Ýp"݆"Ýœ"ݲ"ÝÈ"ÝÞ"Ýô"Þ "Þ "Þ6"ÞL"Þb"Þx"ÞŽ"Þ¤"Þº"ÞÐ"Þæ"Þü"ß"ß("ß>"ßT"ßj"߀"ß–"߬"ßÂ"ߨ"ßî"à"à"à0"àF"à\"àr"àˆ"àž"à´"àÊ"àæ"àü"á"á("á>"áT"áj"á€"á–"á¬"áÂ"áØ"áî"â"â"â0"âF"â\"âr"âˆ"âž"â´"âÊ"âà"âö"ã "ã""ã8"ãN"ãd"ãz"ã"ã¦"ãÂ"ãØ"ãî"ä"ä"ä0"äF"ä\"är"äˆ"äž"ä´"äÊ"äà"äö"å "å""å8"åN"åd"åz"å"å¦"å¼"åÒ"åè"åþ"æ"æ*"æ@"æV"æl"æ‚"æ˜"æ®"æÄ"æÚ"æð"ç"ç"ç2"çH"ç^"çz"ç"ç¦"ç¼"çØ"çî"è"è"è0"èF"è\"èr"èˆ"èž"è´"èÊ"èà"èö"é "é""é8"éN"éd"éz"é"é¦"é¼"éÒ"éî"ê"ê"ê0"êF"ê\"êr"êˆ"êž"ê´"êÊ"êà"êö"ë "ë""ë8"ëN"ëd"ëz"ë"ë¦"ë¼"ëÒ"ëè"ëþ"ì"ì*"ì@"ìV"ìl"ì‚"ì˜"ì®"ìÄ"ìÚ"ìð"í"í"í2"íH"í^"ít"íŠ"í "í¶"íÌ"íâ"íø"î"î$"î:"îP"îf"î|"î’"î¨"î¾"îÔ"îê"ï"ï"ï,"ïB"ïX"ïn"ï„"ïš"ï°"ïÆ"ïÜ"ïò"ð"ð$"ð@"ðV"ðl"ð‚"ð˜"ð®"ðÊ"ðà"ðö"ñ "ñ""ñ8"ñN"ñd"ñz"ñ–"ñ¬"ñÂ"ñØ"ñî"ò"ò"ò0"òL"òb"òx"òŽ"ò¤"òº"òÐ"òæ"ó"ó"ó."óD"óZ"óv"óŒ"ó¢"ó¾"óÔ"óê"ô"ô"ô2"ôH"ô^"ôt"ôŠ"ô¦"ô¼"ôÒ"ôî"õ"õ"õ0"õF"õ\"õr"õˆ"õž"õ´"õÊ"õà"õö"ö "ö""ö8"öN"öd"öz"ö"ö¦"öÂ"öØ"öî"÷"÷"÷0"÷F"÷b"÷x"÷Ž"÷¤"÷À"÷Ö"÷ì"ø"ø"ø."øD"ø`"øv"øŒ"ø¢"ø¸"øÎ"øä"øú"ù"ù&"ù<"ùR"ùn"ù„"ùš"ù°"ùÆ"ùÜ"ùò"ú"ú"ú4"úJ"úf"ú‚"ú˜"ú®"úÄ"úÚ"úð"û"û"û2"ûH"û^"ût"ûŠ"û "û¶"ûÌ"ûâ"ûø"ü"ü$"ü:"üP"üf"ü‚"ü˜"ü®"üÄ"üÚ"üð"ý"ý"ý2"ýH"ý^"ýt"ýŠ"ý "ý¶"ýÌ"ýâ"ýø"þ"þ$"þ:"þP"þf"þ|"þ’"þ¨"þ¾"þÔ"þê"ÿ"ÿ"ÿ,"ÿB"ÿX"ÿn"ÿ„"ÿš"ÿ°"ÿÆ"ÿÜ"ÿò###4#J#`#v#Œ#¢#¸#Î#ä#ú##,#B#X#n#„#š#°#Æ#Ü#ò###4#J#`#v#Œ#¢#¸#Î#ä#ú##&#<#R#h#~#”#ª#À#Ö#ì###.#D#Z#p#†#¢#¸#Î#ä#ú##,#B#X#n#„#š#°#Æ#Ü#ò###4#J#`#v#’#®#Ä#Ú#ð###2#H#^#t#Š# #¶#Ì#â#ø##$#:#P#f#|#’#¨#¾#Ô#ê# # # ,# B# X# n# „# š# °# Æ# Ü# ò# # # 4# J# `# v# Œ# ¢# ¸# Î# ä# ú# # &# <# R# h# ~# ”# ª# À# Ö# ì# # # .# D# Z# p# †# œ# ²# È# Þ# ô# # # 6# L# b# x# Ž# ¤# º# Ð# æ# ü##(#>#T#j#€#–#¬#Â#Ø#î###0#F#\#r#ˆ#ž#´#Ê#à#ö# #"#8#N#d#z##¦#¼#Ò#è#þ##*#@#V#l#‚#˜#®#Ä#Ú#ð###2#H#^#t#Š# #¶#Ì#â#ø##$#:#P#f#|#’#¨#¾#Ô#ê###,#B#X#n#„#š#°#Æ#Ü#ø##$#:#P#f#|#’#®#Ä#Ú#ð###2#H#^#t#Š# #¶#Ì#è###0#L#b#x#Ž#ª#À#Ö#ì###.#D#Z#p#†#œ#²#È#Þ#ô# # #<#R#h#~#”#ª#À#Ö#ì###.#D#Z#p#†#œ#²#È#Þ#ô# # #6#L#b#x#Ž#¤#º#Ð#æ#ü##(#>#T#j#€#–#¬#Â#Ø#î###0#F#\#r#ˆ#ž#´#Ê#à#ö# #"#8#N#d#z##¦#¼#Ò#è#þ##*#@#V#l#‚#˜#®#Ä#Ú#ð# # # 2# H# ^# t# Š#  # ¶# Ì# â# ø#!#!$#!:#!P#!f#!|#!’#!¨#!¾#!Ô#!ê#"#"#",#"B#"X#"n#"„#"š#"°#"Æ#"Ü#"ò######4##J##`##v##Œ##¢##¸##Î##ä#$#$#$,#$B#$^#$t#$Š#$ #$¶#$Ì#$â#$ø#%#%$#%:#%P#%f#%|#%’#%¨#%¾#%Ô#%ê#&#&#&,#&B#&X#&n#&„#&š#&°#&Æ#&Ü#&ò#'#'$#':#'P#'f#'|#'’#'¨#'¾#'Ô#'ê#(#(#(,#(H#(^#(t#(Š#( #(¶#(Ì#(â#(ø#)#)$#):#)P#)f#)|#)’#)¨#)¾#)Ô#)ê#*#*#*,#*B#*X#*n#*„#*š#*°#*Æ#*Ü#*ò#+#+#+4#+J#+`#+v#+Œ#+¨#+Ä#+Ú#+ð#,#,#,2#,N#,j#,€#,–#,¬#,Â#,Ø#,î#-#-#-0#-F#-b#-x#-Ž#-¤#-º#-Ð#-ì#.#.#.4#.J#.`#.v#.’#.¨#.¾#.Ô#.ê#/#/#/,#/H#/^#/t#/Š#/ #/¶#/Ì#/â#/þ#0#00#0F#0\#0r#0Ž#0¤#0º#0Ð#0æ#0ü#1#1(#1>#1T#1j#1€#1œ#1²#1È#1Þ#1ô#2 #2 #26#2L#2b#2x#2Ž#2¤#2º#2Ð#2æ#2ü#3#3(#3>#3T#3j#3€#3–#3¬#3Â#3Ø#3î#4#4#40#4F#4\#4r#4ˆ#4ž#4´#4Ê#4à#4ö#5 #5"#58#5N#5d#5z#5#5¦#5¼#5Ò#5è#5þ#6#6*#6@#6V#6l#6‚#6˜#6®#6Ä#6Ú#6ð#7#7#72#7H#7^#7t#7Š#7 #7¶#7Ì#7â#7ø#8#8$#8:#8P#8f#8|#8’#8¨#8¾#8Ô#8ê#9#9#9,#9B#9X#9n#9„#9š#9°#9Æ#9Ü#9ò#:#:#:4#:J#:`#:v#:Œ#:¢#:¸#:Î#:ä#:ú#;#;&#;B#;X#;n#;„#;š#;°#;Æ#;Ü#;ò#<#<#<4##>$#>:#>P#>f#>|#>’#>¨#>¾#>Ô#>ê#?#?#?,#?B#?X#?n#?„#?š#?°#?Æ#?Ü#?ò#@#@#@4#@J#@`#@v#@Œ#@¢#@¸#@Î#@ä#@ú#A#A&#A<#AR#Ah#A„#Aš#A°#AÆ#AÜ#Aø#B#B0#BL#Bh#B~#Bš#B¶#BÌ#Bâ#Bø#C#C$#C:#CP#Cf#C|#C’#C¨#C¾#CÔ#Cê#D#D#D,#DB#DX#Dn#D„#Dš#D°#DÆ#DÜ#Dò#E#E#E4#EJ#E`#Ev#EŒ#E¢#E¸#EÎ#Eä#Eú#F#F&#F<#FR#Fh#F~#F”#Fª#FÀ#FÖ#Fì#G#G#G.#GD#GZ#Gp#G†#Gœ#G²#GÈ#GÞ#Gô#H #H #H6#HL#Hb#Hx#HŽ#H¤#Hº#HÐ#Hæ#Hü#I#I(#ID#IZ#Ip#I†#Iœ#I²#IÈ#IÞ#Iô#J #J #J6#JL#Jb#Jx#JŽ#Jª#JÀ#JÖ#Jì#K#K#K.#KD#KZ#Kv#KŒ#K¢#K¸#KÎ#Kä#Kú#L#L&#L<#LR#Lh#L~#L”#Lª#LÀ#LÖ#Lì#M#M#M.#MD#MZ#Mp#M†#Mœ#M²#MÈ#MÞ#Mô#N #N #N6#NL#Nb#Nx#NŽ#N¤#Nº#NÐ#Næ#Nü#O#O(#O>#OT#Oj#O€#O–#O¬#OÂ#OØ#Oî#P#P#P0#PF#P\#Pr#Pˆ#Pž#P´#PÊ#Pà#Pö#Q#Q(#Q>#QT#Qj#Q€#Q–#Q¬#QÂ#QØ#Qî#R#R#R6#RL#Rb#Rx#RŽ#R¤#Rº#RÐ#Ræ#Rü#S#S(#S>#ST#Sj#S€#S–#S¬#SÂ#SØ#Sî#T#T#T0#TF#T\#Tr#Tˆ#Tž#T´#TÊ#Tà#Tö#U #U"#U8#UN#Ud#Uz#U#U¦#U¼#UÒ#Uè#Uþ#V#V*#V@#VV#Vl#V‚#V˜#V®#VÄ#VÚ#Vð#W#W#W2#WH#W^#Wt#WŠ#W #W¶#WÌ#Wâ#Wø#X#X$#X:#XP#Xf#X|#X’#X¨#X¾#XÔ#Xê#Y#Y#Y,#YB#YX#Yn#Y„#Yš#Y°#YÆ#Yâ#Yø#Z#Z$#Z:#ZP#Zf#Z|#Z’#Z¨#Z¾#ZÔ#Zê#[#[#[,#[H#[^#[t#[Š#[ #[¶#[Ì#[â#[ø#\#\$#\@#\V#\l#\‚#\˜#\®#\Ä#\Ú#\ð#]#]#]2#]H#]^#]t#]Š#] #]¶#]Ì#]â#]ø#^#^$#^:#^P#^f#^|#^’#^¨#^¾#^Ô#^ê#_#_#_,#_B#_X#_n#_„#_š#_°#_Æ#_Ü#_ò#`#`#`4#`J#``#`v#`Œ#`¢#`¸#`Î#`ä#`ú#a#a&#a<#aR#ah#a~#a”#aª#aÀ#aÖ#aì#b#b#b.#bD#bZ#bp#b†#bœ#b²#bÈ#bÞ#bô#c#c&#c<#cR#ch#c~#c”#cª#cÀ#cÖ#cì#d#d#d.#dD#dZ#dp#d†#dœ#d²#dÈ#dÞ#dô#e #e #e<#eR#eh#e~#e”#eª#eÆ#eÜ#eò#f#f#f:#fP#ff#f|#f’#f¨#f¾#fÔ#fê#g#g#g,#gB#gX#gn#g„#gš#g°#gÆ#gÜ#gò#h#h#h4#hJ#h`#hv#hŒ#h¢#h¸#hÎ#hä#hú#i#i&#i<#iR#ih#i~#i”#iª#iÀ#iÖ#iì#j#j#j.#jD#jZ#jp#j†#jœ#j²#jÈ#jÞ#jô#k #k #k6#kL#kb#kx#kŽ#k¤#kº#kÐ#kæ#kü#l#l(#l>#lT#lj#l€#l–#l¬#lÂ#lØ#lî#m#m#m0#mF#m\#mr#mˆ#mž#m´#mÊ#mæ#mü#n#n(#n>#nT#nj#n€#n–#n¬#nÂ#nØ#nî#o#o#o0#oF#o\#or#oˆ#ož#o´#oÊ#oà#oö#p #p"#p8#pN#pd#pz#p#p¦#p¼#pÒ#pè#pþ#q#q*#q@#qV#ql#q‚#q˜#q®#qÄ#qÚ#qð#r#r#r2#rH#r^#rt#rŠ#r #r¶#rÌ#râ#rø#s#s$#s:#sP#sf#s|#s’#s¨#s¾#sÔ#sê#t#t#t2#tH#t^#tt#tŠ#t #t¶#tÌ#tâ#tø#u#u$#u:#uP#uf#u|#u’#u¨#uÄ#uÚ#uð#v#v#v2#vH#v^#vt#vŠ#v #v¶#vÌ#vâ#vþ#w#w*#w@#wV#wl#w‚#w˜#w®#wÄ#wÚ#wð#x#x#x2#xH#x^#xt#xŠ#x #x¶#xÌ#xâ#xø#y#y$#y:#yP#yf#y|#y’#y¨#y¾#yÔ#yð#z#z#z2#zH#z^#zt#zŠ#z #z¶#zÌ#zè#zþ#{#{*#{@#{V#{l#{‚#{˜#{®#{Ä#{Ú#{ð#|#|#|2#|H#|^#|t#|Š#| #|¶#|Ì#|â#|ø#}#}$#}@#}V#}l#}‚#}˜#}®#}Ä#}Ú#}ð#~#~#~2#~H#~^#~t#~Š#~ #~¼#~Ò#~è#~þ##0#F#\#r#ˆ#ž#´#Ê#à#ö#€ #€"#€8#€N#€d#€z#€#€¦#€¼#€Ò#€è#€þ##*#@#V#l#‚#˜#®#Ä#Ú#ð#‚#‚#‚2#‚H#‚^#‚t#‚Š#‚ #‚¼#‚Ò#‚è#‚þ#ƒ#ƒ*#ƒF#ƒ\#ƒr#ƒˆ#ƒž#ƒº#ƒÖ#ƒì#„#„#„4#„J#„`#„v#„Œ#„¢#„¸#„Ô#„ê#…#…#…2#…H#…^#…t#…Š#… #…¶#…Ì#…â#…ø#†#†$#†@#†V#†l#†‚#†˜#†®#†Ä#†à#†ö#‡ #‡"#‡8#‡N#‡d#‡z#‡#‡¬#‡Â#‡Ø#‡î#ˆ#ˆ#ˆ0#ˆL#ˆb#ˆx#ˆŽ#ˆ¤#ˆº#ˆÖ#ˆì#‰#‰#‰.#‰D#‰Z#‰p#‰†#‰œ#‰²#‰È#‰Þ#‰ú#Š#Š&#Š<#ŠR#Šh#Š~#Šš#ж#ŠÌ#Šâ#Šø#‹#‹$#‹:#‹P#‹f#‹|#‹’#‹¨#‹¾#‹Ô#‹ê#Œ#Œ#Œ,#ŒB#ŒX#Œn#Œ„#Œš#Œ°#ŒÆ#Œâ#Œø##$#:#P#f#|#˜#®#Ä#Ú#ð#Ž #Ž"#Ž8#ŽN#Žd#Ž€#Ž–#ެ#ŽÈ#Žä#Žú##&#<#R#n#„# #¶#Ì#â#ø##*#@#V#l#‚#ž#´#Ê#à#ö#‘ #‘"#‘8#‘N#‘d#‘z#‘#‘¦#‘Â#‘Ø#‘î#’#’#’0#’F#’\#’r#’ˆ#’ž#’º#’Ð#’æ#’ü#“#“(#“>#“T#“j#“€#“–#“²#“È#“Þ#“ú#”#”&#”<#”R#”h#”~#””#”ª#”À#”Ö#”ì#•#•#•.#•D#•Z#•p#•†#•œ#•²#•È#•Þ#•ô#– #– #–6#–R#–n#–„#–š#–°#–Æ#–Ü#–ò#—#—#—4#—J#—`#—v#—Œ#—¢#—¸#—Î#—ä#—ú#˜#˜&#˜<#˜R#˜h#˜~#˜”#˜ª#˜À#˜Ö#˜ì#™#™#™.#™D#™Z#™p#™†#™œ#™²#™È#™Þ#™ô#š #š #š6#šL#šb#šx#šŽ#š¤#šº#šÐ#šæ#šü#›#›(#›>#›T#›j#›€#›–#›¬#›Â#›Ø#›î#œ#œ#œ0#œF#œ\#œr#œˆ#œž#œ´#œÊ#œà#œö# #"#>#T#j#€#–#¬#Â#Ø#ô#ž #ž #ž6#žL#žb#žx#žŽ#ž¤#žº#žÐ#žæ#žü#Ÿ#Ÿ(#Ÿ>#ŸT#Ÿj#Ÿ†#Ÿœ#Ÿ²#ŸÈ#ŸÞ#Ÿô#  #  # 6# R# h# ~# ”# ª# À# Ö# ì#¡#¡#¡.#¡D#¡Z#¡p#¡†#¡œ#¡¸#¡Ô#¡ê#¢#¢#¢,#¢B#¢^#¢t#¢Š#¢ #¢¶#¢Ì#¢â#¢ø#£#£$#£:#£P#£f#£|#£’#£¨#£Ä#£Ú#£ö#¤ #¤"#¤8#¤N#¤d#¤z#¤#¤¦#¤¼#¤Ø#¤î#¥#¥#¥0#¥F#¥b#¥x#¥Ž#¥¤#¥º#¥Ð#¥æ#¥ü#¦#¦(#¦>#¦T#¦j#¦€#¦–#¦¬#¦Â#¦Ø#¦î#§#§#§0#§F#§\#§r#§ˆ#§ž#§´#§Ê#§à#§ö#¨ #¨"#¨8#¨N#¨d#¨€#¨–#¨¬#¨È#¨ä#¨ú#©#©&#©<#©R#©h#©~#©”#©ª#©À#©Ö#©ì#ª#ª#ª.#ªD#ªZ#ªp#ª†#ªœ#ª²#ªÈ#ªÞ#ªô#« #« #«6#«L#«b#«x#«Ž#«¤#«º#«Ð#«æ#«ü#¬#¬(#¬>#¬T#¬j#¬€#¬–#¬¬#¬Â#¬Ø#¬î#­#­#­0#­F#­\#­r#­ˆ#­ž#­º#­Ð#­æ#­ü#®#®(#®>#®T#®j#®€#®–#®¬#®Â#®Ø#®î#¯#¯#¯0#¯F#¯\#¯r#¯ˆ#¯ž#¯´#¯Ê#¯à#¯ü#°#°(#°>#°T#°j#°€#°–#°¬#°Â#°Ø#°î#±#±#±0#±F#±\#±r#±ˆ#±ž#±´#±Ê#±à#±ö#² #²"#²8#²N#²d#²z#²#²¦#²¼#²Ò#²è#²þ#³#³*#³@#³V#³l#³‚#³˜#³®#³Ä#³Ú#³ð#´#´#´2#´H#´^#´t#´Š#´ #´¶#´Ì#´â#´ø#µ#µ$#µ:#µP#µf#µ|#µ’#µ¨#µ¾#µÔ#µê#¶#¶#¶,#¶B#¶X#¶n#¶„#¶š#¶°#¶Æ#¶Ü#¶ò#·#·#·4#·J#·f#·|#·’#·¨#·¾#·Ô#·ê#¸#¸#¸,#¸B#¸X#¸n#¸„#¸š#¸°#¸Æ#¸Ü#¸ò#¹#¹#¹:#¹P#¹f#¹|#¹’#¹¨#¹¾#¹Ô#¹ê#º#º#º,#ºB#ºX#ºn#º„#ºš#º°#ºÆ#ºÜ#ºò#»#»#»4#»J#»`#»v#»Œ#»¢#»¸#»Î#»ä#»ú#¼#¼&#¼<#¼R#¼h#¼~#¼”#¼ª#¼Æ#¼Ü#¼ò#½#½#½4#½J#½`#½v#½Œ#½¢#½¸#½Î#½ê#¾#¾#¾,#¾B#¾X#¾t#¾#¾¦#¾¼#¾Ò#¾è#¾þ#¿#¿*#¿@#¿V#¿l#¿‚#¿˜#¿®#¿Ä#¿Ú#¿ð#À #À"#À8#ÀN#Àd#Àz#À#À¦#À¼#ÀÒ#Àè#Àþ#Á#Á*#Á@#Á\#Ár#Áˆ#Áž#Á´#ÁÊ#Áæ#Áü#Â#Â.#ÂD#ÂZ#Âp#†#¢#¸#ÂÎ#Âä#Âú#Ã#Ã&#Ã<#ÃR#Ãh#Ã~#Ú#ð#ÃÆ#ÃÜ#Ãò#Ä#Ä#Ä4#ÄJ#Ä`#Äv#ÄŒ#Ĩ#ľ#ÄÔ#Äê#Å#Å#Å2#ÅH#Å^#Åt#ÅŠ#Å #Ŷ#ÅÒ#Åè#Åþ#Æ#Æ0#ÆF#Æ\#Ær#ƈ#Ƥ#ƺ#ÆÖ#Æì#Ç#Ç#Ç.#ÇD#ÇZ#Çp#dž#Çœ#Dz#ÇÈ#Çä#Çú#È#È&#È<#ÈR#Èn#È„#Èš#Ȱ#ÈÆ#ÈÜ#Èò#É#É#É4#ÉP#Éf#É|#É’#É®#ÉÄ#ÉÚ#Éð#Ê#Ê#Ê2#ÊH#Ê^#Êt#ÊŠ#Ê #ʶ#ÊÌ#Êè#Êþ#Ë#Ë*#Ë@#ËV#Ël#Ë‚#˘#Ë®#ËÄ#ËÚ#Ëö#Ì #Ì(#Ì>#ÌT#Ìj#Ì€#Ì–#̬#ÌÂ#ÌÞ#Ìô#Í #Í #Í<#ÍR#Íh#Í~#Í”#ͪ#ÍÀ#ÍÖ#Íì#Î#Î#Î4#ÎJ#Î`#Îv#ÎŒ#΢#θ#ÎÎ#Îä#Îú#Ï#Ï,#ÏB#Ï^#Ït#ÏŠ#Ï #϶#ÏÒ#Ïè#Ïþ#Ð#Ð0#ÐF#Ð\#Ðr#Ј#О#д#ÐÐ#Ðæ#Ðü#Ñ#Ñ(#Ñ>#ÑT#Ñj#Ñ€#Ñ–#Ѭ#ÑÂ#ÑØ#Ñî#Ò#Ò#Ò0#ÒF#Ò\#Òx#ÒŽ#Ò¤#Òº#ÒÐ#Òæ#Òü#Ó#Ó(#Ó>#ÓT#Ój#Ó€#Ó–#Ó¬#ÓÂ#ÓØ#Óô#Ô #Ô #Ô6#ÔL#Ôb#Ôx#ÔŽ#Ô¤#Ôº#ÔÐ#Ôæ#Ôü#Õ#Õ(#Õ>#ÕT#Õj#Õ€#Õ–#Õ¬#ÕÂ#ÕØ#Õî#Ö#Ö#Ö0#ÖF#Ö\#Ör#Öˆ#Öž#Ö´#ÖÊ#Öà#Öö#× #×"#×8#×N#×d#×z#×#צ#×¼#×Ò#×è#×þ#Ø#Ø0#ØF#Øb#Øx#ØŽ#ؤ#غ#ØÐ#Øæ#Øü#Ù#Ù(#Ù>#ÙZ#Ùp#Ù†#Ùœ#Ù²#ÙÈ#ÙÞ#Ùô#Ú #Ú #Ú6#ÚL#Úb#Úx#ÚŽ#Ú¤#Úº#ÚÐ#Úæ#Úü#Û#Û(#Û>#ÛT#Ûj#Û€#Û–#Û¬#ÛÂ#ÛØ#Ûî#Ü#Ü#Ü0#ÜF#Üh#Ü~#Ü”#ܪ#ÜÀ#ÜÖ#Üì#Ý#Ý#Ý.#ÝD#ÝZ#Ýp#݆#Ýœ#ݲ#ÝÈ#ÝÞ#Ýô#Þ #Þ #Þ6#ÞL#Þb#Þx#Þ”#Þª#ÞÀ#ÞÖ#Þì#ß#ß#ß.#ßD#ßZ#ßp#߆#ßœ#ß²#ßÈ#ßÞ#ßô#à #à #à6#àL#àb#àx#àŽ#à¤#àº#àÐ#àæ#àü#á#á(#á>#áT#áj#á€#á–#á¬#áÂ#áØ#áî#â#â#â0#âF#â\#âr#âˆ#âž#â´#âÊ#âà#âö#ã #ã"#ã8#ãN#ãd#ãz#ã#ã¦#ã¼#ãÒ#ãè#ãþ#ä#ä*#äF#ä\#är#äˆ#äž#ä´#äÊ#äà#äö#å #å"#å8#åN#åd#åz#å#å¦#å¼#åÒ#åî#æ#æ#æ0#æF#æ\#ær#æˆ#æž#æ´#æÊ#æà#æö#ç #ç"#ç8#çN#çd#çz#ç#ç¦#çÂ#çØ#çî#è #è #è6#èL#èh#è„#èš#è°#èÆ#èÜ#èò#é#é#é4#éJ#é`#év#éŒ#é¢#é¸#éÎ#éä#éú#ê#ê&#ê<#êR#êh#ê~#êš#ê°#êÆ#êÜ#êò#ë#ë#ë4#ëJ#ë`#ëv#ëŒ#ë¢#ë¸#ëÎ#ëä#ëú#ì#ì&#ì<#ìR#ìh#ì~#ì”#ìª#ìÀ#ìÖ#ìì#í#í#í.#íD#íZ#íp#í†#íœ#í²#íÈ#íÞ#íô#î #î #î6#îL#îb#î~#î”#îª#îÀ#îÖ#îì#ï#ï#ï.#ïD#ïZ#ïp#ï†#ïœ#ï¸#ïÎ#ïä#ïú#ð#ð&#ð<#ðR#ðh#ð~#ð”#ðª#ðÀ#ðÖ#ðì#ñ#ñ#ñ.#ñD#ñZ#ñp#ñ†#ñœ#ñ²#ñÈ#ñÞ#ñô#ò #ò #ò6#òL#òb#òx#òŽ#ò¤#òº#òÐ#òæ#ó#ó#ó.#óD#óZ#óp#ó†#óœ#ó²#óÈ#óÞ#óô#ô #ô #ô6#ôL#ôb#ôx#ôŽ#ô¤#ôº#ôÐ#ôæ#ôü#õ#õ(#õ>#õT#õj#õ€#õ–#õ¬#õÂ#õØ#õî#ö#ö#ö0#öF#ö\#ör#öˆ#öž#ö´#öÊ#öà#öö#÷ #÷(#÷>#÷T#÷j#÷€#÷–#÷¬#÷Â#÷Ø#÷î#ø#ø #ø6#øL#øb#øx#øŽ#ø¤#øº#øÐ#øæ#øü#ù#ù(#ù>#ùT#ùj#ù€#ù–#ù¬#ùÂ#ùØ#ùî#ú#ú#ú0#úF#ú\#úr#úˆ#úž#ú´#úÊ#úà#úö#û #û"#û>#ûT#ûj#û€#û–#û¬#ûÂ#ûØ#ûî#ü#ü#ü0#üF#ü\#ür#üˆ#üž#üº#üÐ#üæ#üü#ý#ý(#ý>#ýT#ýj#ý€#ý–#ý¬#ýÂ#ýØ#ýî#þ #þ #þ6#þL#þb#þx#þŽ#þ¤#þº#þÐ#þæ#þü#ÿ#ÿ(#ÿ>#ÿT#ÿj#ÿ€#ÿ–#ÿ¬#ÿÂ#ÿØ#ÿî$$$0$F$\$x$”$ª$À$Ö$ì$$$.$D$Z$p$†$œ$²$È$Þ$ô$ $ $6$L$b$x$Ž$¤$º$Ð$æ$ü$$.$D$Z$p$†$œ$²$È$Þ$ô$ $ $6$L$b$x$”$ª$À$Ö$ì$$$.$D$Z$p$†$œ$²$È$Þ$ô$ $ $6$R$h$~$”$ª$À$Ö$ì$$$.$D$Z$p$†$œ$²$È$ä$ú$$&$<$R$h$~$”$ª$À$Ö$ì$ $ $ .$ D$ Z$ p$ †$ œ$ ²$ È$ Þ$ ô$ $ $ 6$ L$ b$ x$ Ž$ ¤$ º$ Ð$ æ$ $ $ .$ D$ Z$ p$ †$ œ$ ²$ È$ Þ$ ô$ $ $ 6$ L$ b$ x$ Ž$ ¤$ À$ Ö$ ì$ $ $ .$ D$ Z$ p$ †$ œ$ ²$ È$ Þ$ ô$ $ $6$L$b$x$Ž$¤$º$Ð$æ$ü$$($D$Z$p$†$œ$²$È$Þ$ô$ $ $6$R$h$~$”$ª$À$Ö$ì$$$4$J$`$v$Œ$¢$¸$Î$ä$ú$$&$<$R$h$~$”$°$Æ$Ü$ò$$$4$J$`$v$Œ$¢$¸$Î$ä$ú$$&$<$R$h$~$”$ª$À$Ö$ì$$$4$J$`$v$Œ$¢$¸$Î$ä$ú$$&$B$X$n$„$š$°$Æ$â$ø$$$$:$V$r$ˆ$ž$´$Ê$à$ö$ $"$>$T$j$€$œ$²$Î$ä$ú$$&$<$R$h$~$š$°$Æ$Ü$ò$$$4$J$`$v$Œ$¢$¸$Î$ä$ú$$&$<$R$h$~$”$ª$À$Ö$ì$$$.$D$Z$v$Œ$¢$¸$Î$ä$ú$$&$<$R$h$~$š$°$Æ$Ü$ò$$$4$J$`$v$Œ$¢$¸$Î$ê$$$2$H$^$t$Š$ $¶$Ì$â$ø$ $ $$ :$ P$ f$ |$ ’$ ¨$ ¾$ Ô$ ê$!$!$!2$!H$!^$!t$!Š$! $!¼$!Ò$!è$!þ$"$"*$"@$"V$"l$"‚$"˜$"®$"Ä$"Ú$"ð$#$#$#2$#H$#^$#t$#Š$# $#¶$#Ì$#â$#ø$$$$$$$:$$P$$f$$|$$’$$¨$$¾$$Ô$$ê$%$%$%,$%B$%X$%t$%Š$% $%¶$%Ì$%â$%ø$&$&$$&:$&P$&f$&|$&’$&¨$&¾$&Ô$&ê$'$'$',$'B$'X$'n$'„$'š$'°$'Æ$'Ü$'ò$($($(4$(P$(f$(|$(’$(¨$(¾$(Ú$(ð$)$)$)8$)N$)d$)z$)$)¦$)¼$)Ò$)è$)þ$*$**$*@$*V$*l$*‚$*˜$*®$*Ä$*Ú$*ð$+$+$+2$+H$+^$+t$+Š$+ $+¶$+Ì$+â$+ø$,$,$$,:$,P$,f$,|$,’$,¨$,¾$,Ô$,ð$-$-$-2$-H$-^$-t$-Š$- $-¶$-Ì$-â$-ø$.$.$$.@$.V$.l$.‚$.˜$.®$.Ä$.Ú$.ð$/$/$/2$/H$/^$/t$/Š$/ $/¶$/Ì$/â$/þ$0$0*$0@$0V$0r$0ˆ$0¤$0º$0Ð$0æ$0ü$1$1($1>$1T$1j$1€$1–$1¬$1Â$1Ø$1î$2$2$20$2F$2\$2r$2ˆ$2ž$2´$2Ê$2à$2ö$3 $3"$38$3N$3d$3z$3$3¦$3¼$3Ò$3è$3þ$4$4*$4F$4\$4r$4ˆ$4ž$4´$4Ê$4à$4ö$5 $5"$58$5N$5j$5†$5¢$5¸$5Î$5ä$5ú$6$6&$6B$6X$6n$6„$6š$6°$6Ì$6â$6ø$7$7$$7:$7P$7f$7|$7’$7¨$7¾$7Ô$7ê$8$8$8,$8B$8X$8n$8„$8š$8°$8Æ$8Ü$8ò$9$9$94$9J$9`$9v$9Œ$9¢$9¸$9Î$9ä$9ú$:$:&$:<$:R$:n$:„$:š$:¶$:Ì$:â$:ø$;$;$$;:$;P$;f$;|$;’$;¨$;¾$;Ô$;ê$<$<$<,$$>$>2$>H$>^$>t$>Š$> $>¶$>Ì$>â$>ø$?$?$$?:$?P$?f$?|$?’$?¨$?¾$?Ô$?ê$@$@$@,$@B$@X$@n$@„$@š$@¶$@Ì$@è$@þ$A$A*$A@$AV$Al$A‚$A˜$A®$AÄ$AÚ$Að$B $B"$B8$BN$Bd$Bz$B$B¦$B¼$BÒ$Bè$Bþ$C$C*$C@$CV$Cl$C‚$C˜$C®$CÄ$Cà$Cö$D $D"$D8$DN$Dd$Dz$D$D¦$D¼$DÒ$Dè$Dþ$E$E*$E@$EV$El$Eˆ$Ež$E´$EÊ$Eà$Eö$F $F($F>$FT$Fj$F€$Fœ$F²$FÈ$FÞ$Fô$G $G $G6$GL$Gb$Gx$GŽ$G¤$Gº$GÐ$Gæ$Gü$H$H($H>$HT$Hj$H€$H–$H¬$HÂ$HØ$Hî$I$I$I0$IF$I\$Ir$Iˆ$Iž$I´$IÊ$Ià$Iö$J $J"$J8$JN$Jd$Jz$J$J¦$J¼$JÒ$Jè$K$K$K0$KF$K\$Kr$Kˆ$Kž$K´$KÊ$Kà$Kö$L $L"$L8$LN$Ld$Lz$L$L¦$L¼$LÒ$Lè$Lþ$M$M*$M@$MV$Ml$M‚$M˜$M®$MÄ$MÚ$Mð$N$N$N2$NH$N^$Nt$NŠ$N $N¶$NÌ$Nâ$Nø$O$O$$O:$OP$Of$O|$O’$O¨$O¾$OÔ$Oê$P$P$P,$PB$PX$Pn$P„$Pš$P¶$PÒ$Pî$Q $Q&$QB$Q^$Qz$Q–$Q²$QÎ$Qê$R$R"$R>$RZ$Rv$R’$R®$RÊ$Ræ$S$S$S:$SV$Sr$SŽ$S¤$SÀ$SÜ$Sø$T$T0$TL$Th$T„$T $T¼$TØ$Tô$U$U,$UH$Ud$U€$Uœ$U¸$UÔ$Uð$V $V($VD$V`$V|$V˜$V®$VÊ$Væ$W$W$W:$WV$Wr$WŽ$Wª$WÆ$Wâ$Wþ$X$X6$XR$Xn$XŠ$X¦$XÂ$XÞ$Xú$Y$Y2$YN$Yj$Y†$Y¢$Y¸$YÔ$Yð$Z $Z($ZD$Z`$Z|$Z˜$Z´$ZÐ$Zì$[$[$$[@$[\$[x$[”$[°$[Ì$[è$\$\ $\<$\X$\t$\$\¬$\Â$\Þ$\ú$]$]2$]N$]j$]†$]¢$]¾$]Ú$]ö$^$^.$^J$^f$^‚$^ž$^º$^Ö$^ò$_$_*$_F$_b$_~$_š$_¶$_Ì$_è$`$` $`<$`X$`t$`$`¬$`È$`ä$a$a$a8$aT$ap$aŒ$a¨$aÄ$aà$aü$b$b4$bP$bl$bˆ$b¤$bÀ$bÖ$bò$c$c*$cF$cb$c~$cš$c¶$cÒ$cî$d $d&$dB$d^$dz$d–$d²$dÎ$dê$e$e"$e>$eZ$ev$e’$e®$eÊ$eà$eü$f$f4$fP$fl$fˆ$f¤$fÀ$fÜ$fø$g$g0$gL$gh$g„$g $g¼$gØ$gô$h$h,$hH$hd$h€$hœ$h¸$hÔ$hê$i$i"$i>$iZ$iv$i’$i®$iÊ$iæ$j$j$j:$jV$jr$jŽ$jª$jÆ$jâ$jþ$k$k6$kR$kn$kŠ$k¦$kÂ$kÞ$kô$l$l,$lH$ld$l€$lœ$l¸$lÔ$lð$m $m($mD$m`$m|$m˜$m´$mÐ$mì$n$n$$n@$n\$nx$n”$n°$nÌ$nè$nþ$o$o6$oR$on$oŠ$o¦$oÂ$oÞ$oú$p$p2$pN$pj$p†$p¢$p¾$pÚ$pö$q$q.$qJ$qf$q‚$qž$qº$qÖ$qò$r$r$$r@$r\$rx$r”$r°$rÌ$rè$s$s $s<$sX$st$s$s¬$sÈ$sä$t$t$t8$tT$tp$tŒ$t¨$tÄ$tà$tü$u$u.$uJ$uf$u‚$už$uº$uÖ$uò$v$v*$vF$vb$v~$vš$v¶$vÒ$vî$w $w&$wB$w^$wz$w–$w²$wÎ$wê$x$x$x8$xT$xp$xŒ$x¨$xÄ$xà$xü$y$y4$yP$yl$yˆ$y¤$yÀ$yÜ$yø$z$z0$zL$zh$z„$z $z¼$zØ$zô${${&${B${^${z${–${²${Î${ê$|$|"$|>$|Z$|v$|’$|®$|Ê$|æ$}$}$}:$}V$}r$}Ž$}ª$}Æ$}â$}þ$~$~0$~L$~h$~„$~ $~¼$~Ø$~ô$$,$H$d$€$œ$¸$Ô$ð$€ $€($€D$€`$€|$€˜$€´$€Ð$€ì$$$$:$V$r$Ž$ª$Æ$â$þ$‚$‚6$‚R$‚n$‚Š$‚¦$‚Â$‚Þ$‚ú$ƒ$ƒ2$ƒN$ƒj$ƒ†$ƒ¢$ƒ¾$ƒÚ$ƒö$„$„.$„D$„`$„|$„˜$„´$„Ð$„ì$…$…$$…@$…\$…x$…”$…°$…Ì$…è$†$† $†<$†X$†t$†$†¬$†È$†ä$‡$‡$‡8$‡N$‡j$‡†$‡¢$‡¾$‡Ú$‡ö$ˆ$ˆ.$ˆJ$ˆf$ˆ‚$ˆž$ˆº$ˆÖ$ˆò$‰$‰*$‰F$‰b$‰~$‰š$‰¶$‰Ò$‰î$Š $Š&$ŠB$ŠX$Št$Š$Ь$ŠÈ$Šä$‹$‹$‹8$‹T$‹p$‹Œ$‹¨$‹Ä$‹à$‹ü$Œ$Œ4$ŒP$Œl$Œˆ$Œ¤$ŒÀ$ŒÜ$Œø$$0$L$b$~$š$¶$Ò$î$Ž $Ž&$ŽB$Ž^$Žz$Ž–$޲$ŽÎ$Žê$$"$>$Z$v$’$®$Ê$æ$$$:$V$l$ˆ$¤$À$Ü$ø$‘$‘0$‘L$‘h$‘„$‘ $‘¼$‘Ø$‘ô$’$’,$’H$’d$’€$’œ$’¸$’Ô$’ð$“ $“($“D$“`$“v$“’$“®$“Ê$“æ$”$”$”:$”V$”r$”Ž$”ª$”Æ$”â$”þ$•$•6$•R$•n$•Š$•¦$•Â$•Þ$•ú$–$–2$–N$–j$–€$–œ$–¸$–Ô$–ð$— $—($—D$—`$—|$—˜$—´$—Ð$—ì$˜$˜$$˜@$˜\$˜x$˜”$˜°$˜Ì$˜è$™$™ $™<$™X$™t$™Š$™¦$™Â$™Þ$™ú$š$š2$šN$šj$š†$š¢$š¾$šÚ$šö$›$›.$›J$›f$›‚$›ž$›º$›Ö$›ò$œ$œ*$œF$œb$œ~$œ”$œ°$œÌ$œè$$ $<$X$t$$¬$È$ä$ž$ž$ž8$žT$žp$žŒ$ž¨$žÄ$žà$žü$Ÿ$Ÿ4$ŸP$Ÿl$Ÿˆ$Ÿž$Ÿº$ŸÖ$Ÿò$ $ *$ F$ b$ ~$ š$ ¶$ Ò$ î$¡ $¡&$¡B$¡^$¡z$¡–$¡²$¡Î$¡ê$¢$¢"$¢>$¢Z$¢v$¢’$¢¨$¢Ä$¢à$¢ü$£$£4$£P$£l$£ˆ$£¤$£À$£Ü$£ø$¤$¤0$¤L$¤h$¤„$¤ $¤¼$¤Ø$¤ô$¥$¥,$¥H$¥d$¥€$¥œ$¥²$¥Î$¥ê$¦$¦"$¦>$¦Z$¦v$¦’$¦®$¦Ê$¦æ$§$§$§:$§V$§r$§Ž$§ª$§Æ$§â$§þ$¨$¨6$¨R$¨n$¨Š$¨¦$¨¼$¨Ø$¨ô$©$©,$©H$©d$©€$©œ$©¸$©Ô$©ð$ª $ª($ªD$ª`$ª|$ª˜$ª´$ªÐ$ªì$«$«$$«@$«\$«x$«”$«°$«Æ$«â$«þ$¬$¬6$¬R$¬n$¬Š$¬¦$¬Â$¬Þ$¬ú$­$­2$­N$­j$­†$­¢$­¾$­Ú$­ö$®$®.$®J$®f$®‚$®ž$®º$®Ð$®ì$¯$¯$$¯@$¯\$¯x$¯”$¯°$¯Ì$¯è$°$° $°<$°X$°t$°$°¬$°È$°ä$±$±$±8$±T$±p$±Œ$±¨$±Ä$±Ú$±ö$²$².$²J$²f$²‚$²ž$²º$²Ö$²ò$³$³*$³F$³b$³~$³š$³¶$³Ò$³î$´ $´&$´B$´^$´z$´–$´²$´Î$´ä$µ$µ$µ8$µT$µp$µŒ$µ¨$µÄ$µà$µü$¶$¶4$¶P$¶l$¶ˆ$¶¤$¶À$¶Ü$¶ø$·$·0$·L$·h$·„$· $·¼$·Ø$·î$¸ $¸&$¸B$¸^$¸z$¸–$¸²$¸Î$¸ê$¹$¹"$¹>$¹Z$¹v$¹’$¹®$¹Ê$¹æ$º$º$º:$ºV$ºr$ºŽ$ºª$ºÆ$ºâ$ºø$»$»0$»L$»h$»„$» $»¼$»Ø$»ô$¼$¼,$¼H$¼d$¼€$¼œ$¼¸$¼Ô$¼ð$½ $½($½D$½`$½|$½˜$½´$½Ð$½ì$¾$¾$¾:$¾V$¾r$¾Ž$¾ª$¾Æ$¾â$¾þ$¿$¿6$¿R$¿n$¿Š$¿¦$¿Â$¿Þ$¿ú$À$À2$ÀN$Àj$À†$À¢$À¾$ÀÚ$Àö$Á $Á($ÁD$Á`$Á|$Á˜$Á´$ÁÐ$Áì$Â$Â$$Â@$Â\$Âx$”$°$ÂÌ$Âè$Ã$à $Ã<$ÃX$Ãt$Ã$ì$ÃÈ$Ãä$Ä$Ä$Ä2$ÄN$Äj$Ć$Ä¢$ľ$ÄÚ$Äö$Å$Å.$ÅJ$Åf$Å‚$Åž$ź$ÅÖ$Åò$Æ$Æ*$ÆF$Æb$Æ~$Æš$ƶ$ÆÒ$Æî$Ç $Ç $Ç<$ÇX$Çt$Ç$Ǭ$ÇÈ$Çä$È$È$È8$ÈT$Èp$ÈŒ$Ȩ$ÈÄ$Èà$Èü$É$É4$ÉP$Él$Ɉ$ɤ$ÉÀ$ÉÜ$Éø$Ê$Ê*$ÊF$Êb$Ê~$Êš$ʶ$ÊÒ$Êî$Ë $Ë&$ËB$Ë^$Ëz$Ë–$˲$ËÎ$Ëê$Ì$Ì"$Ì>$ÌZ$Ìv$Ì’$Ì®$ÌÊ$Ìæ$Í$Í$Í4$ÍP$Íl$͈$ͤ$ÍÀ$ÍÜ$Íø$Î$Î0$ÎL$Îh$΄$Π$μ$ÎØ$Îô$Ï$Ï,$ÏH$Ïd$Ï€$Ïœ$ϸ$ÏÔ$Ïð$Ð $Ð($Ð>$ÐZ$Ðv$Ð’$Ю$ÐÊ$Ðæ$Ñ$Ñ$Ñ:$ÑV$Ñr$ÑŽ$Ѫ$ÑÆ$Ñâ$Ñþ$Ò$Ò6$ÒR$Òn$ÒŠ$Ò¦$ÒÂ$ÒÞ$Òú$Ó$Ó2$ÓH$Ód$Ó€$Óœ$Ó¸$ÓÔ$Óð$Ô $Ô($ÔD$Ô`$Ô|$Ô˜$Ô´$ÔÐ$Ôì$Õ$Õ$$Õ@$Õ\$Õx$Õ”$Õ°$ÕÌ$Õè$Ö$Ö $Ö<$ÖR$Ön$ÖŠ$Ö¦$ÖÂ$ÖÞ$Öú$×$×2$×N$×j$׆$×¢$×¾$×Ú$×ö$Ø$Ø.$ØJ$Øf$Ø‚$Øž$غ$ØÖ$Øò$Ù$Ù*$ÙF$Ù\$Ùx$Ù”$Ù°$ÙÌ$Ùè$Ú$Ú $Ú<$ÚX$Út$Ú$Ú¬$ÚÈ$Úä$Û$Û$Û8$ÛT$Ûp$ÛŒ$Û¨$ÛÄ$Ûà$Ûü$Ü$Ü4$ÜP$Üf$Ü‚$Üž$ܺ$ÜÖ$Üò$Ý$Ý*$ÝF$Ýb$Ý~$Ýš$ݶ$ÝÒ$Ýî$Þ $Þ&$ÞB$Þ^$Þz$Þ–$Þ²$ÞÎ$Þê$ß$ß"$ß>$ßZ$ßp$ߌ$ߨ$ßÄ$ßà$ßü$à$à4$àP$àl$àˆ$à¤$àÀ$àÜ$àø$á$á0$áL$áh$á„$á $á¼$áØ$áô$â$â,$âH$âd$âz$â–$â²$âÎ$âê$ã$ã"$ã>$ãZ$ãv$ã’$ã®$ãÊ$ãæ$ä$ä$ä:$äV$är$äŽ$äª$äÆ$äâ$äþ$å$å6$åR$ån$å„$å $å¼$åØ$åô$æ$æ,$æH$æd$æ€$æœ$æ¸$æÔ$æð$ç $ç($çD$ç`$ç|$ç˜$ç´$çÐ$çì$è$è$$è@$è\$èx$èŽ$èª$èÆ$èâ$èþ$é$é6$éR$én$éŠ$é¦$éÂ$éÞ$éú$ê$ê2$êN$êj$ê†$ê¢$ê¾$êÚ$êö$ë$ë.$ëJ$ëf$ë‚$ë˜$ë´$ëÐ$ëì$ì$ì$$ì@$ì\$ìx$ì”$ì°$ìÌ$ìè$í$í $í<$íX$ít$í$í¬$íÈ$íä$î$î$î8$îT$îp$îŒ$î¢$î¾$îÚ$îö$ï$ï.$ïJ$ïf$ï‚$ïž$ïº$ïÖ$ïò$ð$ð*$ðF$ðb$ð~$ðš$ð¶$ðÒ$ðî$ñ $ñ&$ñB$ñ^$ñz$ñ–$ñ¬$ñÈ$ñä$ò$ò$ò8$òT$òp$òŒ$ò¨$òÄ$òà$òü$ó$ó4$óP$ól$óˆ$ó¤$óÀ$óÜ$óø$ô$ô0$ôL$ôh$ô„$ô $ô¶$ôÒ$ôî$õ $õ&$õB$õ^$õz$õ–$õ²$õÎ$õê$ö$ö"$ö>$öZ$öv$ö’$ö®$öÊ$öæ$÷$÷$÷:$÷V$÷r$÷Ž$÷ª$÷À$÷Ü$÷ø$ø$ø0$øL$øh$ø„$ø $ø¼$øØ$øô$ù$ù,$ùH$ùd$ù€$ùœ$ù¸$ùÔ$ùð$ú $ú($úD$ú`$ú|$ú˜$ú´$úÊ$úæ$û$û$û:$ûV$ûr$ûŽ$ûª$ûÆ$ûâ$ûþ$ü$ü6$üR$ün$üŠ$ü¦$üÂ$üÞ$üú$ý$ý2$ýN$ýj$ý†$ý¢$ý¾$ýÔ$ýð$þ $þ($þD$þ`$þ|$þ˜$þ´$þÐ$þì$ÿ$ÿ$$ÿ@$ÿ\$ÿx$ÿ”$ÿ°$ÿÌ$ÿè%% %<%X%t%%¬%È%Þ%ú%%2%N%j%†%¢%¾%Ú%ö%%.%J%f%‚%ž%º%Ö%ò%%*%F%b%~%š%¶%Ò%è%% %<%X%t%%¬%È%ä%%%8%T%p%Œ%¨%Ä%à%ü%%4%P%l%ˆ%¤%À%Ü%ò%%*%F%b%~%š%¶%Ò%î% %&%B%^%z%–%²%Î%ê% % "% >% Z% v% ’% ®% Ê% æ% ü% % 4% P% l% ˆ% ¤% À% Ü% ø% % 0% L% h% „%  % ¼% Ø% ô% % ,% H% d% €% œ% ¸% Ô% ð% % "% >% Z% v% ’% ®% Ê% æ%%%:%V%r%Ž%ª%Æ%â%þ%%6%R%n%Š%¦%Â%Þ%ú%%,%H%d%€%œ%¸%Ô%ð% %(%D%`%|%˜%´%Ð%ì%%$%@%\%x%”%°%Ì%è%%%6%R%n%Š%¦%Â%Þ%ú%%2%N%j%†%¢%¾%Ú%ö%%.%J%f%‚%ž%º%Ö%ò%%$%@%\%x%”%°%Ì%è%% %<%X%t%%¬%È%ä%%%8%T%p%Œ%¨%Ä%à%ü%%.%J%f%‚%ž%º%Ö%ò%%*%F%b%~%š%¶%Ò%î% %&%B%^%z%–%²%Î%ê%%"%8%T%p%Œ%¨%Ä%à%ü%%4%P%l%ˆ%¤%À%Ü%ø%%0%L%h%„% %¼%Ø%ô%%,%B%^%z%–%²%Î%ê% % "% >% Z% v% ’% ®% Ê% æ%!%!%!:%!V%!r%!Ž%!ª%!Æ%!â%!þ%"%"6%"L%"h%"„%" %"¼%"Ø%"ô%#%#,%#H%#d%#€%#œ%#¸%#Ô%#ð%$ %$(%$D%$`%$|%$˜%$´%$Ð%$ì%%%%$%%@%%V%%r%%Ž%%ª%%Æ%%â%%þ%&%&6%&R%&n%&Š%&¦%&Â%&Þ%&ú%'%'2%'N%'j%'†%'¢%'¾%'Ú%'ö%(%(.%(J%(`%(|%(˜%(´%(Ð%(ì%)%)$%)@%)\%)x%)”%)°%)Ì%)è%*%* %*<%*X%*t%*%*¬%*È%*ä%+%+%+8%+T%+j%+†%+¢%+¾%+Ú%+ö%,%,.%,J%,f%,‚%,ž%,º%,Ö%,ò%-%-*%-F%-b%-~%-š%-¶%-Ò%-î%. %.&%.B%.^%.t%.%.¬%.È%.ä%/%/%/8%/T%/p%/Œ%/¨%/Ä%/à%/ü%0%04%0P%0l%0ˆ%0¤%0À%0Ü%0ø%1%10%1L%1h%1~%1š%1¶%1Ò%1î%2 %2&%2B%2^%2z%2–%2²%2Î%2ê%3%3"%3>%3Z%3v%3’%3®%3Ê%3æ%4%4%4:%4V%4r%4ˆ%4¤%4À%4Ü%4ø%5%50%5L%5h%5„%5 %5¼%5Ø%5ô%6%6,%6H%6d%6€%6œ%6¸%6Ô%6ð%7 %7(%7D%7`%7|%7’%7®%7Ê%7æ%8%8%8:%8V%8r%8Ž%8ª%8Æ%8â%8þ%9%96%9R%9n%9Š%9¦%9Â%9Þ%9ú%:%:2%:N%:j%:†%:œ%:¸%:Ô%:ð%; %;(%;D%;`%;|%;˜%;´%;Ð%;ì%<%<$%<@%<\%%>2%>N%>j%>†%>¢%>¾%>Ú%>ö%?%?.%?J%?f%?‚%?ž%?º%?Ö%?ò%@%@*%@F%@b%@~%@š%@°%@Ì%@è%A%A %A<%AX%At%A%A¬%AÈ%Aä%B%B%B8%BT%Bp%BŒ%B¨%BÄ%Bà%Bü%C%C4%CP%Cl%Cˆ%C¤%Cº%CÖ%Cò%D%D*%DF%Db%D~%Dš%D¶%DÒ%Dî%E %E&%EB%E^%Ez%E–%E²%EÎ%Eê%F%F"%F>%FZ%Fv%F’%F®%FÄ%Fà%Fü%G%G4%GP%Gl%Gˆ%G¤%GÀ%GÜ%Gø%H%H0%HL%Hh%H„%H %H¼%HØ%Hô%I%I,%IH%Id%I€%Iœ%I¸%IÎ%Iê%J%J"%J>%JZ%Jv%J’%J®%JÊ%Jæ%K%K%K:%KV%Kr%KŽ%Kª%KÆ%Kâ%Kþ%L%L6%LR%Ln%LŠ%L¦%LÂ%LØ%Lô%M%M,%MH%Md%M€%Mœ%M¸%MÔ%Mð%N %N(%ND%N`%N|%N˜%N´%NÐ%Nì%O%O$%O@%O\%Ox%O”%O°%OÌ%Oâ%Oþ%P%P6%PR%Pn%PŠ%P¦%PÂ%PÞ%Pú%Q%Q2%QN%Qj%Q†%Q¢%Q¾%QÚ%Qö%R%R.%RJ%Rf%R‚%Rž%Rº%RÖ%Rì%S%S$%S@%S\%Sx%S”%S°%SÌ%Sè%T%T %T<%TX%Tt%T%T¬%TÈ%Tä%U%U%U8%UT%Up%UŒ%U¨%UÄ%Uà%Uö%V%V.%VJ%Vf%V‚%Vž%Vº%VÖ%Vò%W%W*%WF%Wb%W~%Wš%W¶%WÒ%Wî%X %X&%XB%X^%Xz%X–%X²%XÎ%Xê%Y%Y%Y8%YT%Yp%YŒ%Y¨%YÄ%Yà%Yü%Z%Z4%ZP%Zl%Zˆ%Z¤%ZÀ%ZÜ%Zø%[%[0%[L%[h%[„%[ %[¼%[Ø%[ô%\ %\&%\B%\^%\z%\–%\²%\Î%\ê%]%]"%]>%]Z%]v%]’%]®%]Ê%]æ%^%^%^:%^V%^r%^Ž%^ª%^Æ%^â%^þ%_%_0%_L%_h%_„%_ %_¼%_Ø%_ô%`%`,%`H%`d%`€%`œ%`¸%`Ô%`ð%a %a(%aD%a`%a|%a˜%a´%aÐ%aì%b%b%b:%bV%br%bŽ%bª%bÆ%bâ%bþ%c%c6%cR%cn%cŠ%c¦%cÂ%cÞ%cú%d%d2%dN%dj%d†%d¢%d¾%dÚ%dö%e%e(%eD%e`%e|%e˜%e´%eÐ%eì%f%f$%f@%f\%fx%f”%f°%fÌ%fè%g%g %g<%gX%gt%g%g¬%gÈ%gä%h%h%h2%hN%hj%h†%h¢%h¾%hÚ%hö%i%i.%iJ%if%i‚%iž%iº%iÖ%iò%j%j*%jF%jb%j~%jš%j¶%jÒ%jî%k %k&%k<%kX%kt%k%k¬%kÈ%kä%l%l%l8%lT%lp%lŒ%l¨%lÄ%là%lü%m%m4%mP%ml%mˆ%m¤%mÀ%mÜ%mø%n%n0%nF%nb%n~%nš%n¶%nÒ%nî%o %o&%oB%o^%oz%o–%o²%oÎ%oê%p%p"%p>%pZ%pv%p’%p®%pÊ%pæ%q%q%q:%qP%ql%qˆ%q¤%qÀ%qÜ%qø%r%r0%rL%rh%r„%r %r¼%rØ%rô%s%s,%sH%sd%s€%sœ%s¸%sÔ%sð%t %t(%tD%tZ%tv%t’%t®%tÊ%tæ%u%u%u:%uV%ur%uŽ%uª%uÆ%uâ%uþ%v%v6%vR%vn%vŠ%v¦%vÂ%vÞ%vú%w%w2%wN%wd%w€%wœ%w¸%wÔ%wð%x %x(%xD%x`%x|%x˜%x´%xÐ%xì%y%y$%y@%y\%yx%y”%y°%yÌ%yè%z%z %z<%zX%zn%zŠ%z¦%zÂ%zÞ%zú%{%{2%{N%{j%{†%{¢%{¾%{Ú%{ö%|%|.%|J%|f%|‚%|ž%|º%|Ö%|ò%}%}*%}F%}b%}x%}”%}°%}Ì%}è%~%~ %~<%~X%~t%~%~¬%~È%~ä%%%8%T%p%Œ%¨%Ä%à%ü%€%€4%€P%€l%€‚%€ž%€º%€Ö%€ò%%*%F%b%~%š%¶%Ò%î%‚ %‚&%‚B%‚^%‚z%‚–%‚²%‚Î%‚ê%ƒ%ƒ"%ƒ>%ƒZ%ƒv%ƒŒ%ƒ¨%ƒÄ%ƒà%ƒü%„%„4%„P%„l%„ˆ%„¤%„À%„Ü%„ø%…%…0%…L%…h%…„%… %…¼%…Ø%…ô%†%†,%†H%†d%†€%†–%†²%†Î%†ê%‡%‡"%‡>%‡Z%‡v%‡’%‡®%‡Ê%‡æ%ˆ%ˆ%ˆ:%ˆV%ˆr%ˆŽ%ˆª%ˆÆ%ˆâ%ˆþ%‰%‰6%‰R%‰n%‰Š%‰ %‰¼%‰Ø%‰ô%Š%Š,%ŠH%Šd%Š€%Šœ%Џ%ŠÔ%Šð%‹ %‹(%‹D%‹`%‹|%‹˜%‹´%‹Ð%‹ì%Œ%Œ$%Œ@%Œ\%Œx%Œ”%Œª%ŒÆ%Œâ%Œþ%%6%R%n%Š%¦%Â%Þ%ú%Ž%Ž2%ŽN%Žj%ކ%Ž¢%޾%ŽÚ%Žö%%.%J%f%‚%ž%´%Ð%ì%%$%@%\%x%”%°%Ì%è%‘%‘ %‘<%‘X%‘t%‘%‘¬%‘È%‘ä%’%’%’8%’T%’p%’Œ%’¨%’¾%’Ú%’ö%“%“.%“J%“f%“‚%“ž%“º%“Ö%“ò%”%”*%”F%”b%”~%”š%”¶%”Ò%”î%• %•&%•B%•^%•z%•–%•²%•È%•ä%–%–%–8%–T%–p%–Œ%–¨%–Ä%–à%–ü%—%—4%—P%—l%—ˆ%—¤%—À%—Ü%—ø%˜%˜0%˜L%˜h%˜„%˜ %˜¼%˜Ò%˜î%™ %™&%™B%™^%™z%™–%™²%™Î%™ê%š%š"%š>%šZ%šv%š’%š®%šÊ%šæ%›%›%›:%›V%›r%›Ž%›ª%›Æ%›Ü%›ø%œ%œ0%œL%œh%œ„%œ %œ¼%œØ%œô%%,%H%d%€%œ%¸%Ô%ð%ž %ž(%žD%ž`%ž|%ž˜%ž´%žÐ%žæ%Ÿ%Ÿ%Ÿ:%ŸV%Ÿr%ŸŽ%Ÿª%ŸÆ%Ÿâ%Ÿþ% % 6% R% n% Š% ¦% Â% Þ% ú%¡%¡2%¡N%¡j%¡†%¡¢%¡¾%¡Ú%¡ð%¢ %¢(%¢D%¢`%¢|%¢˜%¢´%¢Ð%¢ì%£%£$%£@%£\%£x%£”%£°%£Ì%£è%¤%¤ %¤<%¤X%¤t%¤%¤¬%¤È%¤ä%¤ú%¥%¥2%¥N%¥j%¥†%¥¢%¥¾%¥Ú%¥ö%¦%¦.%¦J%¦f%¦‚%¦ž%¦º%¦Ö%¦ò%§%§*%§F%§b%§~%§š%§¶%§Ò%§î%¨%¨ %¨<%¨X%¨t%¨%¨¬%¨È%¨ä%©%©%©8%©T%©p%©Œ%©¨%©Ä%©à%©ü%ª%ª4%ªP%ªl%ªˆ%ª¤%ªÀ%ªÜ%ªø%«%«*%«F%«b%«~%«š%«¶%«Ò%«î%¬ %¬&%¬B%¬^%¬z%¬–%¬²%¬Î%¬ê%­%­"%­>%­Z%­v%­’%­®%­Ê%­æ%®%®%®4%®P%®l%®ˆ%®¤%®À%®Ü%®ø%¯%¯0%¯L%¯h%¯„%¯ %¯¼%¯Ø%¯ô%°%°,%°H%°d%°€%°œ%°¸%°Ô%°ð%± %±"%±>%±Z%±v%±’%±®%±Ê%±æ%²%²%²:%²V%²r%²Ž%²ª%²Æ%²â%²þ%³%³6%³R%³n%³Š%³¦%³Â%³Þ%³ú%´%´,%´H%´d%´€%´œ%´¸%´Ô%´ð%µ %µ(%µD%µ`%µ|%µ˜%µ´%µÐ%µì%¶%¶$%¶@%¶\%¶x%¶”%¶°%¶Ì%¶è%·%· %·6%·R%·n%·Š%·¦%·Â%·Þ%·ú%¸%¸2%¸N%¸j%¸†%¸¢%¸¾%¸Ú%¸ö%¹%¹.%¹J%¹f%¹‚%¹ž%¹º%¹Ö%¹ò%º%º*%º@%º\%ºx%º”%º°%ºÌ%ºè%»%» %»<%»X%»t%»%»¬%»È%»ä%¼%¼%¼8%¼T%¼p%¼Œ%¼¨%¼Ä%¼à%¼ü%½%½4%½J%½f%½‚%½ž%½º%½Ö%½ò%¾%¾*%¾F%¾b%¾~%¾š%¾¶%¾Ò%¾î%¿ %¿&%¿B%¿^%¿z%¿–%¿²%¿Î%¿ê%À%À"%À>%ÀT%Àp%ÀŒ%À¨%ÀÄ%Àà%Àü%Á%Á4%ÁP%Ál%Áˆ%Á¤%ÁÀ%ÁÜ%Áø%Â%Â0%ÂL%Âh%„% %¼%ÂØ%Âô%Ã%Ã,%ÃH%Ã^%Ãz%Ö%ò%ÃÎ%Ãê%Ä%Ä"%Ä>%ÄZ%Äv%Ä’%Ä®%ÄÊ%Äæ%Å%Å%Å:%ÅV%År%ÅŽ%Ū%ÅÆ%Åâ%Åþ%Æ%Æ6%ÆR%Æh%Æ„%Æ %Ƽ%ÆØ%Æô%Ç%Ç,%ÇH%Çd%Ç€%Çœ%Ǹ%ÇÔ%Çð%È %È(%ÈD%È`%È|%Ș%È´%ÈÐ%Èì%É%É$%É@%É\%Ér%ÉŽ%ɪ%ÉÆ%Éâ%Éþ%Ê%Ê6%ÊR%Ên%ÊŠ%ʦ%ÊÂ%ÊÞ%Êú%Ë%Ë2%ËN%Ëj%ˆ%Ë¢%˾%ËÚ%Ëö%Ì%Ì.%ÌJ%Ìf%Ì|%̘%Ì´%ÌÐ%Ìì%Í%Í$%Í@%Í\%Íx%Í”%Ͱ%ÍÌ%Íè%Î%Î %Î<%ÎX%Ît%Î%ά%ÎÈ%Îä%Ï%Ï%Ï8%ÏT%Ïp%φ%Ï¢%Ͼ%ÏÚ%Ïö%Ð%Ð.%ÐJ%Ðf%Ђ%О%к%ÐÖ%Ðò%Ñ%Ñ*%ÑF%Ñb%Ñ~%Ñš%Ѷ%ÑÒ%Ñî%Ò %Ò&%ÒB%Ò^%Òz%Ò%Ò¬%ÒÈ%Òä%Ó%Ó%Ó8%ÓT%Óp%ÓŒ%Ó¨%ÓÄ%Óà%Óü%Ô%Ô4%ÔP%Ôl%Ôˆ%Ô¤%ÔÀ%ÔÜ%Ôø%Õ%Õ0%ÕL%Õh%Õ„%Õš%Õ¶%ÕÒ%Õî%Ö %Ö&%ÖB%Ö^%Öz%Ö–%Ö²%ÖÎ%Öê%×%×"%×>%×Z%×v%×’%×®%×Ê%׿%Ø%Ø%Ø:%ØV%Ør%ØŽ%ؤ%ØÀ%ØÜ%Øø%Ù%Ù0%ÙL%Ùh%Ù„%Ù %Ù¼%ÙØ%Ùô%Ú%Ú,%ÚH%Úd%Ú€%Úœ%Ú¸%ÚÔ%Úð%Û %Û(%ÛD%Û`%Û|%Û˜%Û®%ÛÊ%Ûæ%Ü%Ü%Ü:%ÜV%Ür%ÜŽ%ܪ%ÜÆ%Üâ%Üþ%Ý%Ý6%ÝR%Ýn%ÝŠ%ݦ%ÝÂ%ÝÞ%Ýú%Þ%Þ2%ÞN%Þj%Þ†%Þ¢%Þ¸%ÞÔ%Þð%ß %ß(%ßD%ß`%ß|%ߘ%ß´%ßÐ%ßì%à%à$%à@%à\%àx%à”%à°%àÌ%àè%á%á %á<%áX%át%á%á¬%áÂ%áÞ%áú%â%â2%âN%âj%â†%â¢%â¾%âÚ%âö%ã%ã.%ãJ%ãf%ã‚%ãž%ãº%ãÖ%ãò%ä%ä*%äF%äb%ä~%äš%ä¶%äÌ%äè%å%å %å<%åX%åt%å%å¬%åÈ%åä%æ%æ%æ8%æT%æp%æŒ%æ¨%æÄ%æà%æü%ç%ç4%çP%çl%çˆ%ç¤%çÀ%çÖ%çò%è%è*%èF%èb%è~%èš%è¶%èÒ%èî%é %é&%éB%é^%éz%é–%é²%éÎ%éê%ê%ê"%ê>%êZ%êv%ê’%ê®%êÊ%êà%êü%ë%ë4%ëP%ël%ëˆ%ë¤%ëÀ%ëÜ%ëø%ì%ì0%ìL%ìh%ì„%ì %ì¼%ìØ%ìô%í%í,%íH%íd%í€%íœ%í¸%íÔ%íê%î%î"%î>%îZ%îv%î’%î®%îÊ%îæ%ï%ï%ï:%ïV%ïr%ïŽ%ïª%ïÆ%ïâ%ïþ%ð%ð6%ðR%ðn%ðŠ%ð¦%ðÂ%ðÞ%ðô%ñ%ñ,%ñH%ñd%ñ€%ñœ%ñ¸%ñÔ%ñð%ò %ò(%òD%ò`%ò|%ò˜%ò´%òÐ%òì%ó%ó$%ó@%ó\%óx%ó”%ó°%óÌ%óè%óþ%ô%ô6%ôR%ôn%ôŠ%ô¦%ôÂ%ôÞ%ôú%õ%õ2%õN%õj%õ†%õ¢%õ¾%õÚ%õö%ö%ö.%öJ%öf%ö‚%öž%öº%öÖ%öò%÷%÷$%÷@%÷\%÷x%÷”%÷°%÷Ì%÷è%ø%ø %ø<%øX%øt%ø%ø¬%øÈ%øä%ù%ù%ù8%ùT%ùp%ùŒ%ù¨%ùÄ%ùà%ùü%ú%ú.%úJ%úf%ú‚%úž%úº%úÖ%úò%û%û*%ûF%ûb%û~%ûš%û¶%ûÒ%ûî%ü %ü&%üB%ü^%üz%ü–%ü²%üÎ%üê%ý%ý%ý8%ýT%ýp%ýŒ%ý¨%ýÄ%ýà%ýü%þ%þ4%þP%þl%þˆ%þ¤%þÀ%þÜ%þø%ÿ%ÿ0%ÿL%ÿh%ÿ„%ÿ %ÿ¼%ÿØ%ÿô&&&&B&^&z&–&²&Î&ê&&"&>&Z&v&’&®&Ê&æ&&&:&V&r&Ž&ª&Æ&â&þ&&0&L&h&„& &¼&Ø&ô&&,&H&d&€&œ&¸&Ô&ð& &(&D&`&|&˜&´&Ð&ì&&$&:&V&r&Ž&ª&Æ&â&þ&&6&R&n&Š&¦&Â&Þ&ú&&2&N&j&†&¢&¾&Ú&ö& & .& D& `& |& ˜& ´& Ð& ì& & $& @& \& x& ”& °& Ì& è& & & <& X& t& & ¬& È& ä& & & 8& N& j& †& ¢& ¾& Ú& ö& & .& J& f& ‚& ž& º& Ö& ò&&*&F&b&~&š&¶&Ò&î& &&&B&X&t&&¬&È&ä&&&8&T&p&Œ&¨&Ä&à&ü&&4&P&l&ˆ&¤&À&Ü&ø&&0&L&b&~&š&¶&Ò&î& &&&B&^&z&–&²&Î&ê&&"&>&Z&v&’&®&Ê&æ&&&:&V&l&ˆ&¤&À&Ü&ø&&0&L&h&„& &¼&Ø&ô&&,&H&d&€&œ&¸&Ô&ð& &(&D&`&v&’&®&Ê&æ&&&:&V&r&Ž&ª&Æ&â&þ&&6&R&n&Š&¦&Â&Þ&ú&&2&N&j&€&œ&¸&Ô&ð& &(&D&`&|&˜&´&Ð&ì&&$&@&\&x&”&°&Ì&è&& &<&X&t&Š&¦&Â&Þ&ú&&2&N&j&†&¢&¾&Ú&ö& & .& J& f& ‚& ž& º& Ö& ò&!&!*&!F&!b&!~&!”&!°&!Ì&!è&"&" &"<&"X&"t&"&"¬&"È&"ä&#&#&#T&#p&#Œ&#¨&#Ä&#à&#ü&$&$4&$P&$l&$ˆ&$ž&$º&$Ö&$ò&%&%*&%F&%b&%~&%š&%¶&%Ò&%î&& &&&&&B&&^&&z&&–&&²&&Î&&ê&'&'"&'>&'Z&'v&'’&'¨&'Ä&'à&'ü&(&(4&(P&(l&(ˆ&(¤&(À&(Ü&(ø&)&)0&)L&)h&)„&) &)¼&)Ø&)ô&*&*,&*H&*d&*€&*œ&*²&*Î&*ê&+&+"&+>&+Z&+v&+’&+®&+Ê&+æ&,&,&,:&,V&,r&,Ž&,ª&,Æ&,â&,þ&-&-6&-R&-n&-Š&-¦&-¼&-Ø&-ô&.&.,&.H&.d&.€&.œ&.¸&.Ô&.ð&/ &/(&/D&/`&/|&/˜&/´&/Ð&/ì&0&0$&0@&0\&0x&0”&0°&0Æ&0â&0þ&1&16&1R&1n&1Š&1¦&1Â&1Þ&1ú&2&22&2N&2j&2†&2¢&2¾&2Ú&2ö&3&3.&3J&3f&3‚&3ž&3º&3Ð&3ì&4&4$&4@&4\&4x&4”&4°&4Ì&4è&5&5 &5<&5X&5t&5&5¬&5È&5ä&6&6&68&6T&6p&6Œ&6¨&6Ä&6Ú&6ö&7&7.&7J&7f&7‚&7ž&7º&7Ö&7ò&8&8*&8F&8b&8~&8š&8¶&8Ò&8î&9 &9&&9B&9^&9z&9–&9²&9Î&9ä&:&:&:8&:T&:p&:Œ&:¨&:Ä&:à&:ü&;&;4&;P&;l&;ˆ&;¤&;À&;Ü&;ø&<&<0&&>"&>>&>Z&>v&>’&>®&>Ê&>æ&?&?&?:&?V&?r&?Ž&?ª&?Æ&?â&?ø&@&@0&@L&@h&@„&@ &@¼&@Ø&@ô&A&A,&AH&Ad&A€&Aœ&A¸&AÔ&Að&B &B(&BD&B`&B|&B˜&B´&BÐ&Bì&C&C&C:&CV&Cr&CŽ&Cª&CÆ&Câ&Cþ&D&D6&DR&Dn&DŠ&D¦&DÂ&DÞ&Dú&E&E2&EN&Ej&E†&E¢&E¾&EÚ&Eö&F &F(&FD&F`&F|&F˜&F´&FÐ&Fì&G&G$&G@&G\&Gx&G”&G°&GÌ&Gè&H&H &H<&HX&Ht&H&H¬&HÈ&Hä&I&I&I2&IN&Ij&I†&I¢&I¾&IÚ&Iö&J&J.&JJ&Jf&J‚&Jž&Jº&JÖ&Jò&K&K*&KF&Kb&K~&Kš&K¶&KÒ&Kî&L &L &L<&LX&Lt&L&L¬&LÈ&Lä&M&M&M8&MT&Mp&MŒ&M¨&MÄ&Mà&Mü&N&N4&NP&Nl&Nˆ&N¤&NÀ&NÜ&Nø&O&O*&OF&Ob&O~&Oš&O¶&OÒ&Oî&P &P&&PB&P^&Pz&P–&P²&PÎ&Pê&Q&Q"&Q>&QZ&Qv&Q’&Q®&QÊ&Qæ&R&R&R4&RP&Rl&Rˆ&R¤&RÀ&RÜ&Rø&S&S0&SL&Sh&S„&S &S¼&SØ&Sô&T&T,&TH&Td&T€&Tœ&T¸&TÔ&Tð&U &U(&U>&UZ&Uv&U’&U®&UÊ&Uæ&V&V&V:&VV&Vr&VŽ&Vª&VÆ&Vâ&Vþ&W&W6&WR&Wn&WŠ&W¦&WÂ&WÞ&Wú&X&X2&XH&Xd&X€&Xœ&X¸&XÔ&Xð&Y &Y(&YD&Y`&Y|&Y˜&Y´&YÐ&Yì&Z&Z$&Z@&Z\&Zx&Z”&Z°&ZÌ&Zè&[&[ &[<&[R&[n&[Š&[¦&[Â&[Þ&[ú&\&\2&\N&\j&\†&\¢&\¾&\Ú&\ö&]&].&]J&]f&]‚&]ž&]º&]Ö&]ò&^&^*&^F&^\&^x&^”&^°&^Ì&^è&_&_ &_<&_X&_t&_&_¬&_È&_ä&`&`&`8&`T&`p&`Œ&`¨&`Ä&`à&`ü&a&a4&aP&af&a‚&až&aº&aÖ&aò&b&b*&bF&bb&b~&bš&b¶&bÒ&bî&c &c&&cB&c^&cz&c–&c²&cÎ&cê&d&d"&d>&dZ&dp&dŒ&d¨&dÄ&dà&dü&e&e4&eP&el&eˆ&e¤&eÀ&eÜ&eø&f&f0&fL&fh&f„&f &f¼&fØ&fô&g&g,&gH&gd&gz&g–&g²&gÎ&gê&h&h"&h>&hZ&hv&h’&h®&hÊ&hæ&i&i&i:&iV&ir&iŽ&iª&iÆ&iâ&iþ&j&j6&jR&jn&j„&j &j¼&jØ&jô&k&k,&kH&kd&k€&kœ&k¸&kÔ&kð&l &l(&lD&l`&l|&l˜&l´&lÐ&lì&m&m$&m@&m\&mx&mŽ&mª&mÆ&mâ&mþ&n&n6&nR&nn&nŠ&n¦&nÂ&nÞ&nú&o&o2&oN&oj&o†&o¢&o¾&oÚ&oö&p&p.&pJ&pf&p‚&p˜&p´&pÐ&pì&q&q$&q@&q\&qx&q”&q°&qÌ&qè&r&r &r<&rX&rt&r&r¬&rÈ&rä&s&s&s8&sT&sp&sŒ&s¢&s¾&sÚ&sö&t&t.&tJ&tf&t‚&tž&tº&tÖ&tò&u&u*&uF&ub&u~&uš&u¶&uÒ&uî&v &v&&vB&v^&vz&v–&v¬&vÈ&vä&w&w&w8&wT&wp&wŒ&w¨&wÄ&wà&wü&x&x4&xP&xl&xˆ&x¤&xÀ&xÜ&xø&y&y0&yL&yh&y„&y &y¶&yÒ&yî&z &z&&zB&z^&zz&z–&z²&zÎ&zê&{&{"&{>&{Z&{v&{’&{®&{Ê&{æ&|&|&|:&|V&|r&|Ž&|ª&|À&|Ü&|ø&}&}0&}L&}h&}„&} &}¼&}Ø&}ô&~&~,&~H&~d&~€&~œ&~¸&~Ô&~ð& &(&D&`&|&˜&´&Ê&æ&€&€&€:&€V&€r&€Ž&€ª&€Æ&€â&€þ&&6&R&n&Š&¦&Â&Þ&ú&‚&‚2&‚N&‚j&‚†&‚¢&‚¾&‚Ô&‚ð&ƒ &ƒ(&ƒD&ƒ`&ƒ|&ƒ˜&ƒ´&ƒÐ&ƒì&„&„$&„@&„\&„x&„”&„°&„Ì&„è&…&… &…<&…X&…t&…&…¬&…È&…Þ&…ú&†&†2&†N&†j&††&†¢&†¾&†Ú&†ö&‡&‡.&‡J&‡f&‡‚&‡ž&‡º&‡Ö&‡ò&ˆ&ˆ*&ˆF&ˆb&ˆ~&ˆš&ˆ¶&ˆÒ&ˆè&‰&‰ &‰<&‰X&‰t&‰&‰¬&‰È&‰ä&Š&Š&Š8&ŠT&Šp&ŠŒ&Ѝ&ŠÄ&Šà&Šü&‹&‹4&‹P&‹l&‹ˆ&‹¤&‹À&‹Ü&‹ò&Œ&Œ*&ŒF&Œb&Œ~&Œš&Œ¶&ŒÒ&Œî& &&&B&^&z&–&²&Î&ê&Ž&Ž"&Ž>&ŽZ&Žv&Ž’&Ž®&ŽÊ&Žæ&Žü&&4&P&l&ˆ&¤&À&Ü&ø&&0&L&h&„& &¼&Ø&ô&‘&‘,&‘H&‘d&‘€&‘œ&‘¸&‘Ô&‘ð&’&’"&’>&’Z&’v&’’&’®&’Ê&’æ&“&“&“:&“V&“r&“Ž&“ª&“Æ&“â&“þ&”&”6&”R&”n&”Š&”¦&”Â&”Þ&”ú&•&•,&•H&•d&•€&•œ&•¸&•Ô&•ð&– &–(&–D&–`&–|&–˜&–´&–Ð&–ì&—&—$&—@&—\&—x&—”&—°&—Ì&—è&˜&˜&˜6&˜R&˜n&˜Š&˜¦&˜Â&˜Þ&˜ú&™&™2&™N&™j&™†&™¢&™¾&™Ú&™ö&š&š.&šJ&šf&š‚&šž&šº&šÖ&šò&›&›$&›@&›\&›x&›”&›°&›Ì&›è&œ&œ &œ<&œX&œt&œ&œ¬&œÈ&œä&&&8&T&p&Œ&¨&Ä&à&ü&ž&ž.&žJ&žf&ž‚&žž&žº&žÖ&žò&Ÿ&Ÿ*&ŸF&Ÿb&Ÿ~&Ÿš&Ÿ¶&ŸÒ&Ÿî&  & && B& ^& z& –& ²& Î& ê&¡&¡"&¡8&¡T&¡p&¡Œ&¡¨&¡Ä&¡à&¡ü&¢&¢4&¢P&¢l&¢ˆ&¢¤&¢À&¢Ü&¢ø&£&£0&£L&£h&£„&£ &£¼&£Ø&£ô&¤&¤,&¤B&¤^&¤z&¤–&¤²&¤Î&¤ê&¥&¥"&¥>&¥Z&¥v&¥’&¥®&¥Ê&¥æ&¦&¦&¦:&¦V&¦r&¦Ž&¦ª&¦Æ&¦â&¦þ&§&§6&§L&§h&§„&§ &§¼&§Ø&§ô&¨&¨,&¨H&¨d&¨€&¨œ&¨¸&¨Ô&¨ð&© &©(&©D&©`&©|&©˜&©´&©Ð&©ì&ª&ª$&ª@&ªV&ªr&ªŽ&ªª&ªÆ&ªâ&ªþ&«&«6&«R&«n&«Š&«¦&«Â&«Þ&«ú&¬&¬2&¬N&¬j&¬†&¬¢&¬¾&¬Ú&¬ö&­&­.&­J&­`&­|&­˜&­´&­Ð&­ì&®&®$&®@&®\&®x&®”&®°&®Ì&®è&¯&¯ &¯<&¯X&¯t&¯&¯¬&¯È&¯ä&°&°&°8&°T&°j&°†&°¢&°¾&°Ú&°ö&±&±.&±J&±f&±‚&±ž&±º&±Ö&±ò&²&²*&²F&²b&²~&²š&²¶&²Ò&²î&³ &³&&³B&³^&³t&³&³¬&³È&³ä&´&´&´8&´T&´p&´Œ&´¨&´Ä&´à&´ü&µ&µ4&µP&µl&µˆ&µ¤&µÀ&µÜ&µø&¶&¶0&¶L&¶h&¶~&¶š&¶¶&¶Ò&¶î&· &·&&·B&·^&·z&·–&·²&·Î&·ê&¸&¸"&¸>&¸Z&¸v&¸’&¸®&¸Ê&¸æ&¹&¹&¹:&¹V&¹r&¹ˆ&¹¤&¹À&¹Ü&¹ø&º&º0&ºL&ºh&º„&º &º¼&ºØ&ºô&»&»,&»H&»d&»€&»œ&»¸&»Ô&»ð&¼ &¼(&¼D&¼`&¼|&¼’&¼®&¼Ê&¼æ&½&½&½:&½V&½r&½Ž&½ª&½Æ&½â&½þ&¾&¾6&¾R&¾n&¾Š&¾¦&¾Â&¾Þ&¾ú&¿&¿2&¿N&¿j&¿†&¿œ&¿¸&¿Ô&¿ð&À &À(&ÀD&À`&À|&À˜&À´&ÀÐ&Àì&Á&Á$&Á@&Á\&Áx&Á”&Á°&ÁÌ&Áè&Â& &Â<&ÂX&Ât&Â&¦&ÂÂ&ÂÞ&Âú&Ã&Ã2&ÃN&Ãj&Æ&â&þ&ÃÚ&Ãö&Ä&Ä.&ÄJ&Äf&Ä‚&Äž&ĺ&ÄÖ&Äò&Å&Å*&ÅF&Åb&Å~&Åš&Ű&ÅÌ&Åè&Æ&Æ &Æ<&ÆX&Æt&Æ&Ƭ&ÆÈ&Æä&Ç&Ç&Ç8&ÇT&Çp&ÇŒ&Ǩ&ÇÄ&Çà&Çü&È&È4&ÈP&Èl&Ȉ&Ȥ&Ⱥ&ÈÖ&Èò&É&É*&ÉF&Éb&É~&Éš&ɶ&ÉÒ&Éî&Ê &Ê&&ÊB&Ê^&Êz&Ê–&ʲ&ÊÎ&Êê&Ë&Ë"&Ë>&ËZ&Ëv&Ë’&Ë®&ËÄ&Ëà&Ëü&Ì&Ì4&ÌP&Ìl&̈&̤&ÌÀ&ÌÜ&Ìø&Í&Í0&ÍL&Íh&Í„&Í &ͼ&ÍØ&Íô&Î&Î,&ÎH&Îd&΀&Μ&θ&ÎÎ&Îê&Ï&Ï"&Ï>&ÏZ&Ïv&Ï’&Ï®&ÏÊ&Ïæ&Ð&Ð&Ð:&ÐV&Ðr&ÐŽ&Ъ&ÐÆ&Ðâ&Ðþ&Ñ&Ñ6&ÑR&Ñn&ÑŠ&Ѧ&ÑÂ&ÑØ&Ñô&Ò&Ò,&ÒH&Òd&Ò€&Òœ&Ò¸&ÒÔ&Òð&Ó &Ó(&ÓD&Ó`&Ó|&Ó˜&Ó´&ÓÐ&Óì&Ô&Ô$&Ô@&Ô\&Ôx&Ô”&Ô°&ÔÌ&Ôâ&Ôþ&Õ&Õ6&ÕR&Õn&ÕŠ&Õ¦&ÕÂ&ÕÞ&Õú&Ö&Ö2&ÖN&Öj&Ö†&Ö¢&Ö¾&ÖÚ&Öö&×&×.&×J&×f&ׂ&מ&׺&×Ö&×ì&Ø&Ø$&Ø@&Ø\&Øx&Ø”&ذ&ØÌ&Øè&Ù&Ù &Ù<&ÙX&Ùt&Ù&Ù¬&ÙÈ&Ùä&Ú&Ú&Ú8&ÚT&Úp&ÚŒ&Ú¨&ÚÄ&Úà&Úö&Û&Û.&ÛJ&Ûf&Û‚&Ûž&Ûº&ÛÖ&Ûò&Ü&Ü*&ÜF&Üb&Ü~&Üš&ܶ&ÜÒ&Üî&Ý &Ý&&ÝB&Ý^&Ýz&Ý–&ݲ&ÝÎ&Ýê&Þ&Þ&Þ8&ÞT&Þp&ÞŒ&Þ¨&ÞÄ&Þà&Þü&ß&ß4&ßP&ßl&߈&ߤ&ßÀ&ßÜ&ßø&à&à0&àL&àh&à„&à &à¼&àØ&àô&á &á&&áB&á^&áz&á–&á²&áÎ&áê&â&â"&â>&âZ&âv&â’&â®&âÊ&âæ&ã&ã&ã:&ãV&ãr&ãŽ&ãª&ãÆ&ãâ&ãþ&ä&ä0&äL&äh&ä„&ä &ä¼&äØ&äô&å&å,&åH&åd&å€&åœ&å¸&åÔ&åð&æ &æ(&æD&æ`&æ|&æ˜&æ´&æÐ&æì&ç&ç&ç:&çV&çr&çŽ&çª&çÆ&çâ&çþ&è&è6&èR&èn&èŠ&è¦&èÂ&èÞ&èú&é&é2&éN&éj&é†&é¢&é¾&éÚ&éö&ê&ê(&êD&ê`&ê|&ê˜&ê´&êÐ&êì&ë&ë$&ë@&ë\&ëx&ë”&ë°&ëÌ&ëè&ì&ì &ì<&ìX&ìt&ì&ì¬&ìÈ&ìä&í&í&í2&íN&íj&í†&í¢&í¾&íÚ&íö&î&î.&îJ&îf&î‚&îž&îº&îÖ&îò&ï&ï*&ïF&ïb&ï~&ïš&ï¶&ïÒ&ïî&ð &ð&&ð<&ðX&ðt&ð&ð¬&ðÈ&ðä&ñ&ñ&ñ8&ñT&ñp&ñŒ&ñ¨&ñÄ&ñà&ñü&ò&ò4&òP&òl&òˆ&ò¤&òÀ&òÜ&òø&ó&ó0&óF&ób&ó~&óš&ó¶&óÒ&óî&ô &ô&&ôB&ô^&ôz&ô–&ô²&ôÎ&ôê&õ&õ"&õ>&õZ&õv&õ’&õ®&õÊ&õæ&ö&ö&ö:&öP&öl&öˆ&ö¤&öÀ&öÜ&öø&÷&÷0&÷L&÷h&÷„&÷ &÷¼&÷Ø&÷ô&ø&ø,&øH&ød&ø€&øœ&ø¸&øÔ&øð&ù &ù(&ùD&ùZ&ùv&ù’&ù®&ùÊ&ùæ&ú&ú&ú:&úV&úr&úŽ&úª&úÆ&úâ&úþ&û&û6&ûR&ûn&ûŠ&û¦&ûÂ&ûÞ&ûú&ü&ü2&üN&üd&ü€&üœ&ü¸&üÔ&üð&ý &ý(&ýD&ý`&ý|&ý˜&ý´&ýÐ&ýì&þ&þ$&þ@&þ\&þx&þ”&þ°&þÌ&þè&ÿ&ÿ &ÿ<&ÿX&ÿn&ÿŠ&ÿ¦&ÿÂ&ÿÞ&ÿú''2'N'j'†'¢'¾'Ú'ö''.'J'f'‚'ž'º'Ö'ò''*'F'b'x'”'°'Ì'è'' '<'X't''¬'È'ä'''8'T'p'Œ'¨'Ä'à'ü''4'P'l'‚'ž'º'Ö'ò''*'F'b'~'š'¶'Ò'î' '&'B'^'z'–'²'Î'ê''"'>'Z'v'Œ'¨'Ä'à'ü' ' 4' P' l' ˆ' ¤' À' Ü' ø' ' 0' L' h' „'  ' ¼' Ø' ô' ' ,' H' d' €' –' ²' Î' ê' ' "' >' Z' v' ’' ®' Ê' æ' ' ' :' V' r' Ž' ª' Æ' â' þ''6'R'n'Š' '¼'Ø'ô'','H'd'€'œ'¸'Ô'ð' '('D'`'|'˜'´'Ð'ì''$'@'\'x'”'ª'Æ'â'þ''6'R'n'Š'¦'Â'Þ'ú''2'N'j'†'¢'¾'Ú'ö''.'J'f'‚'ž'´'Ð'ì''$'@'\'x'”'°'Ì'è'' '<'X't''¬'È'ä'''8'T'p'Œ'¨'¾'Ú'ö''.'J'f'‚'ž'º'Ö'ò''*'F'b'~'š'¶'Ò'î' '&'B'^'z'–'²'È'ä'''8'T'p'Œ'¨'Ä'à'ü''4'P'l'ˆ'¤'À'Ü'ø''0'L'h'„' '¼'Ò'î' '&'B'^'z'–'²'Î'ê''"'>'Z'v'’'®'Ê'æ' ' ' :' V' r' Ž' ª' Æ' Ü' ø'!'!0'!L'!h'!„'! '!¼'!Ø'!ô'"'",'"H'"d'"€'"œ'"¸'"Ô'"ð'# '#('#D'#`'#|'#˜'#´'#Ð'#æ'$'$'$:'$V'$r'$Ž'$ª'$Æ'$â'$þ'%'%6'%R'%n'%Š'%¦'%Â'%Þ'%ú'&'&2'&N'&j'&†'&¢'&¾'&Ú'&ð'' ''(''D''`''|''˜''´''Ð''ì'('($'(@'(\'(x'(”'(°'(Ì'(è')') ')<')X')t')')¬')È')ä')ú'*'*2'*N'*j'*†'*¢'*¾'*Ú'*ö'+'+.'+J'+f'+‚'+ž'+º'+Ö'+ò',',*',F',b',~',š',¶',Ò',î'-'- '-<'-X'-t'-'-¬'-È'-ä'.'.'.8'.T'.p'.Œ'.¨'.Ä'.à'.ü'/'/4'/P'/l'/ˆ'/¤'/À'/Ü'/ø'0'0*'0F'0b'0~'0š'0¶'0Ò'0î'1 '1&'1B'1^'1z'1–'1²'1Î'1ê'2'2"'2>'2Z'2v'2’'2®'2Ê'2æ'3'3'34'3P'3l'3ˆ'3¤'3À'3Ü'3ø'4'40'4L'4h'4„'4 '4¼'4Ø'4ô'5'5,'5H'5d'5€'5œ'5¸'5Ô'5ð'6 '6"'6>'6Z'6v'6’'6®'6Ê'6æ'7'7'7:'7V'7r'7Ž'7ª'7Æ'7â'7þ'8'86'8R'8n'8Š'8¦'8Â'8Þ'8ú'9'9,'9H'9d'9€'9œ'9¸'9Ô'9ð': ':(':D':`':|':˜':´':Ð':ì';';$';@';\';x';”';°';Ì';è'<'< '<6''>.'>J'>f'>‚'>ž'>º'>Ö'>ò'?'?*'?@'?\'?x'?”'?°'?Ì'?è'@'@ '@<'@X'@t'@'@¬'@È'@ä'A'A'A8'AT'Ap'AŒ'A¨'AÄ'Aà'Aü'B'B4'BJ'Bf'B‚'Bž'Bº'BÖ'Bò'C'C*'CF'Cb'C~'Cš'C¶'CÒ'Cî'D 'D&'DB'D^'Dz'D–'D²'DÎ'Dê'E'E"'E>'ET'Ep'EŒ'E¨'EÄ'Eà'Eü'F'F4'FP'Fl'Fˆ'F¤'FÀ'FÜ'Fø'G'G0'GL'Gh'G„'G 'G¼'GØ'Gô'H'H,'HH'H^'Hz'H–'H²'HÎ'Hê'I'I"'I>'IZ'Iv'I’'I®'IÊ'Iæ'J'J'J:'JV'Jr'JŽ'Jª'JÆ'Jâ'Jþ'K'K6'KR'Kh'K„'K 'K¼'KØ'Kô'L'L,'LH'Ld'L€'Lœ'L¸'LÔ'Lð'M 'M('MD'M`'M|'M˜'M´'MÐ'Mì'N'N$'N@'N\'Nr'NŽ'Nª'NÆ'Nâ'Nþ'O'O6'OR'On'OŠ'O¦'OÂ'OÞ'Oú'P'P2'PN'Pj'P†'P¢'P¾'PÚ'Pö'Q'Q.'QJ'Qf'Q|'Q˜'Q´'QÐ'Qì'R'R$'R@'R\'Rx'R”'R°'RÌ'Rè'S'S 'S<'SX'St'S'S¬'SÈ'Sä'T'T'T8'TT'Tp'T†'T¢'T¾'TÚ'Tö'U'U.'UJ'Uf'U‚'Už'Uº'UÖ'Uò'V'V*'VF'Vb'V~'Vš'V¶'VÒ'Vî'W 'W&'WB'W^'Wz'W'W¬'WÈ'Wä'X'X'X8'XT'Xp'XŒ'X¨'XÄ'Xà'Xü'Y'Y4'YP'Yl'Yˆ'Y¤'YÀ'YÜ'Yø'Z'Z0'ZL'Zh'Z„'Zš'Z¶'ZÒ'Zî'[ '[&'[B'[^'[z'[–'[²'[Î'[ê'\'\"'\>'\Z'\v'\’'\®'\Ê'\æ']']']:']V']r']Ž']¤']À']Ü']ø'^'^0'^L'^h'^„'^ '^¼'^Ø'^ô'_'_,'_H'_d'_€'_œ'_¸'_Ô'_ð'` '`('`D'``'`|'`˜'`®'`Ê'`æ'a'a'a:'aV'ar'aŽ'aª'aÆ'aâ'aþ'b'b6'bR'bn'bŠ'b¦'bÂ'bÞ'bú'c'c2'cN'cj'c†'c¢'c¸'cÔ'cð'd 'd('dD'd`'d|'d˜'d´'dÐ'dì'e'e$'e@'e\'ex'e”'e°'eÌ'eè'f'f 'f<'fX'ft'f'f¬'fÂ'fÞ'fú'g'g2'gN'gj'g†'g¢'g¾'gÚ'gö'h'h.'hJ'hf'h‚'hž'hº'hÖ'hò'i'i*'iF'ib'i~'iš'i¶'iÌ'iè'j'j 'j<'jX'jt'j'j¬'jÈ'jä'k'k'k8'kT'kp'kŒ'k¨'kÄ'kà'kü'l'l4'lP'll'lˆ'l¤'lÀ'lÖ'lò'm'm*'mF'mb'm~'mš'm¶'mÒ'mî'n 'n&'nB'n^'nz'n–'n²'nÎ'nê'o'o"'o>'oZ'ov'o’'o®'oÊ'oà'oü'p'p4'pP'pl'pˆ'p¤'pÀ'pÜ'pø'q'q0'qL'qh'q„'q 'q¼'qØ'qô'r'r,'rH'rd'r€'rœ'r¸'rÔ'rê's's"'s>'sZ'sv's’'s®'sÊ'sæ't't't:'tV'tr'tŽ'tª'tÆ'tâ'tþ'u'u6'uR'un'uŠ'u¦'uÂ'uÞ'uô'v'v,'vH'vd'v€'vœ'v¸'vÔ'vð'w 'w('wD'w`'w|'w˜'w´'wÐ'wì'x'x$'x@'x\'xx'x”'x°'xÌ'xè'xþ'y'y6'yR'yn'yŠ'y¦'yÂ'yÞ'yú'z'z2'zN'zj'z†'z¢'z¾'zÚ'zö'{'{.'{J'{f'{‚'{ž'{º'{Ö'{ò'|'|$'|@'|\'|x'|”'|°'|Ì'|è'}'} '}<'}X'}t'}'}¬'}È'}ä'~'~'~8'~T'~p'~Œ'~¨'~Ä'~à'~ü''.'J'f'‚'ž'º'Ö'ò'€'€*'€F'€b'€~'€š'€¶'€Ò'€î' '&'B'^'z'–'²'Î'ê'‚'‚'‚8'‚T'‚p'‚Œ'‚¨'‚Ä'‚à'‚ü'ƒ'ƒ4'ƒP'ƒl'ƒˆ'ƒ¤'ƒÀ'ƒÜ'ƒø'„'„0'„L'„h'„„'„ '„¼'„Ø'„ô'…'…&'…B'…^'…z'…–'…²'…Î'…ê'†'†"'†>'†Z'†v'†’'†®'†Ê'†æ'‡'‡'‡:'‡V'‡r'‡Ž'‡ª'‡Æ'‡â'‡þ'ˆ'ˆ0'ˆL'ˆh'ˆ„'ˆ 'ˆ¼'ˆØ'ˆô'‰'‰,'‰H'‰d'‰€'‰œ'‰¸'‰Ô'‰ð'Š 'Š('ŠD'Š`'Š|'Š˜'Š´'ŠÐ'Šì'‹'‹$'‹:'‹V'‹r'‹Ž'‹ª'‹Æ'‹â'‹þ'Œ'Œ6'ŒR'Œn'ŒŠ'Œ¦'ŒÂ'ŒÞ'Œú''2'N'j'†'¢'¾'Ú'ö'Ž'Ž.'ŽD'Ž`'Ž|'Ž˜'Ž´'ŽÐ'Žì''$'@'\'x'”'°'Ì'è'' '<'X't''¬'È'ä'‘'‘'‘8'‘N'‘j'‘†'‘¢'‘¾'‘Ú'‘ö'’'’.'’J'’f'’‚'’ž'’º'’Ö'’ò'“'“*'“F'“b'“~'“š'“¶'“Ò'“î'” '”&'”B'”X'”t'”'”¬'”È'”ä'•'•'•8'•T'•p'•Œ'•¨'•Ä'•à'•ü'–'–4'–P'–l'–ˆ'–¤'–À'–Ü'–ø'—'—0'—L'—b'—~'—š'—¶'—Ò'—î'˜ '˜&'˜B'˜^'˜z'˜–'˜²'˜Î'˜ê'™'™"'™>'™Z'™v'™’'™®'™Ê'™æ'š'š'š:'šV'šl'šˆ'š¤'šÀ'šÜ'šø'›'›0'›L'›h'›„'› '›¼'›Ø'›ô'œ'œ,'œH'œd'œ€'œœ'œ¸'œÔ'œð' '('D'`'v'’'®'Ê'æ'ž'ž'ž:'žV'žr'žŽ'žª'žÆ'žâ'žþ'Ÿ'Ÿ6'ŸR'Ÿn'ŸŠ'Ÿ¦'ŸÂ'ŸÞ'Ÿú' ' 2' N' j' €' œ' ¸' Ô' ð'¡ '¡('¡D'¡`'¡|'¡˜'¡´'¡Ð'¡ì'¢'¢$'¢@'¢\'¢x'¢”'¢°'¢Ì'¢è'£'£ '£<'£X'£t'£Š'£¦'£Â'£Þ'£ú'¤'¤2'¤N'¤j'¤†'¤¢'¤¾'¤Ú'¤ö'¥'¥.'¥J'¥f'¥‚'¥ž'¥º'¥Ö'¥ò'¦'¦*'¦F'¦b'¦~'¦”'¦°'¦Ì'¦è'§'§ '§<'§X'§t'§'§¬'§È'§ä'¨'¨'¨8'¨T'¨p'¨Œ'¨¨'¨Ä'¨à'¨ü'©'©4'©P'©l'©ˆ'©ž'©º'©Ö'©ò'ª'ª*'ªF'ªb'ª~'ªš'ª¶'ªÒ'ªî'« '«&'«B'«^'«z'«–'«²'«Î'«ê'¬'¬"'¬>'¬Z'¬v'¬’'¬¨'¬Ä'¬à'¬ü'­'­4'­P'­l'­ˆ'­¤'­À'­Ü'­ø'®'®0'®L'®h'®„'® '®¼'®Ø'®ô'¯'¯,'¯H'¯d'¯€'¯œ'¯²'¯Î'¯ê'°'°"'°>'°Z'°v'°’'°®'°Ê'°æ'±'±'±:'±V'±r'±Ž'±ª'±Æ'±â'±þ'²'²6'²R'²n'²Š'²¦'²¼'²Ø'²ô'³'³,'³H'³d'³€'³œ'³¸'³Ô'³ð'´ '´('´D'´`'´|'´˜'´´'´Ð'´ì'µ'µ$'µ@'µ\'µx'µ”'µ°'µÆ'µâ'µþ'¶'¶6'¶R'¶n'¶Š'¶¦'¶Â'¶Þ'¶ú'·'·2'·N'·j'·†'·¢'·¾'·Ú'·ö'¸'¸.'¸J'¸f'¸‚'¸ž'¸º'¸Ð'¸ì'¹'¹$'¹@'¹\'¹x'¹”'¹°'¹Ì'¹è'º'º 'º<'ºX'ºt'º'º¬'ºÈ'ºä'»'»'»8'»T'»p'»Œ'»¨'»Ä'»Ú'»ö'¼'¼.'¼J'¼f'¼‚'¼ž'¼º'¼Ö'¼ò'½'½*'½F'½b'½~'½š'½¶'½Ò'½î'¾ '¾&'¾B'¾^'¾z'¾–'¾²'¾Î'¾ä'¿'¿'¿8'¿T'¿p'¿Œ'¿¨'¿Ä'¿à'¿ü'À'À4'ÀP'Àl'Àˆ'À¤'ÀÀ'ÀÜ'Àø'Á'Á0'ÁL'Áh'Á„'Á 'Á¼'ÁØ'Áî' 'Â&'ÂB'Â^'Âz'–'²'ÂÎ'Âê'Ã'Ã"'Ã>'ÃZ'Ãv'Ã’'î'ÃÊ'Ãæ'Ä'Ä'Ä:'ÄV'Är'ÄŽ'Ī'ÄÆ'Äâ'Äø'Å'Å0'ÅL'Åh'Å„'Å 'ż'ÅØ'Åô'Æ'Æ,'ÆH'Æd'Æ€'Æœ'Ƹ'ÆÔ'Æð'Ç 'Ç('ÇD'Ç`'Ç|'ǘ'Ç´'ÇÐ'Çì'È'È'È:'ÈV'Èr'ÈŽ'Ȫ'ÈÆ'Èâ'Èþ'É'É6'ÉR'Én'ÉŠ'ɦ'ÉÂ'ÉÞ'Éú'Ê'Ê2'ÊN'Êj'ʆ'Ê¢'ʾ'ÊÚ'Êö'Ë 'Ë('ËD'Ë`'Ë|'˘'Ë´'ËÐ'Ëì'Ì'Ì$'Ì@'Ì\'Ìx'Ì”'̰'ÌÌ'Ìè'Í'Í 'Í<'ÍX'Ít'Í'ͬ'ÍÈ'Íä'Î'Î'Î2'ÎN'Îj'Ά'΢'ξ'ÎÚ'Îö'Ï'Ï.'ÏJ'Ïf'Ï‚'Ïž'Ϻ'ÏÖ'Ïò'Ð'Ð*'ÐF'Ðb'Ð~'К'ж'ÐÒ'Ðî'Ñ 'Ñ 'Ñ<'ÑX'Ñt'Ñ'Ѭ'ÑÈ'Ñä'Ò'Ò'Ò8'ÒT'Òp'ÒŒ'Ò¨'ÒÄ'Òà'Òü'Ó'Ó4'ÓP'Ól'Óˆ'Ó¤'ÓÀ'ÓÜ'Óø'Ô'Ô*'ÔF'Ôb'Ô~'Ôš'Ô¶'ÔÒ'Ôî'Õ 'Õ&'ÕB'Õ^'Õz'Õ–'Õ²'ÕÎ'Õê'Ö'Ö"'Ö>'ÖZ'Öv'Ö’'Ö®'ÖÊ'Öæ'×'×'×4'×P'×l'׈'פ'×À'×Ü'×ø'Ø'Ø0'ØL'Øh'Ø„'Ø 'ؼ'ØØ'Øô'Ù'Ù,'ÙH'Ùd'Ù€'Ùœ'Ù¸'ÙÔ'Ùð'Ú 'Ú('Ú>'ÚZ'Úv'Ú’'Ú®'ÚÊ'Úæ'Û'Û'Û:'ÛV'Ûr'ÛŽ'Ûª'ÛÆ'Ûâ'Ûþ'Ü'Ü6'ÜR'Ün'ÜŠ'ܦ'ÜÂ'ÜÞ'Üú'Ý'Ý2'ÝH'Ýd'Ý€'Ýœ'ݸ'ÝÔ'Ýð'Þ 'Þ('ÞD'Þ`'Þ|'Þ˜'Þ´'ÞÐ'Þì'ß'ß$'ß@'ß\'ßx'ß”'ß°'ßÌ'ßè'à'à 'à<'àR'àn'àŠ'à¦'àÂ'àÞ'àú'á'á2'áN'áj'á†'á¢'á¾'áÚ'áö'â'â.'âJ'âf'â‚'âž'âº'âÖ'âò'ã'ã*'ãF'ã\'ãx'ã”'ã°'ãÌ'ãè'ä'ä 'ä<'äX'ät'ä'ä¬'äÈ'ää'å'å'å8'åT'åp'åŒ'å¨'åÄ'åà'åü'æ'æ4'æP'æf'æ‚'æž'æº'æÖ'æò'ç'ç*'çF'çb'ç~'çš'ç¶'çÒ'çî'è 'è&'èB'è^'èz'è–'è²'èÎ'èê'é'é"'é>'éZ'ép'éŒ'é¨'éÄ'éà'éü'ê'ê4'êP'êl'êˆ'ê¤'êÀ'êÜ'êø'ë'ë0'ëL'ëh'ë„'ë 'ë¼'ëØ'ëô'ì'ì,'ìH'ìd'ìz'ì–'ì²'ìÎ'ìê'í'í"'í>'íZ'ív'í’'í®'íÊ'íæ'î'î'î:'îV'îr'îŽ'îª'îÆ'îâ'îþ'ï'ï6'ïR'ïn'ï„'ï 'ï¼'ïØ'ïô'ð'ð,'ðH'ðd'ð€'ðœ'ð¸'ðÔ'ðð'ñ 'ñ('ñD'ñ`'ñ|'ñ˜'ñ´'ñÐ'ñì'ò'ò$'ò@'ò\'òx'òŽ'òª'òÆ'òâ'òþ'ó'ó6'óR'ón'óŠ'ó¦'óÂ'óÞ'óú'ô'ô2'ôN'ôj'ô†'ô¢'ô¾'ôÚ'ôö'õ'õ.'õJ'õf'õ‚'õ˜'õ´'õÐ'õì'ö'ö$'ö@'ö\'öx'ö”'ö°'öÌ'öè'÷'÷ '÷<'÷X'÷t'÷'÷¬'÷È'÷ä'ø'ø'ø8'øT'øp'øŒ'ø¢'ø¾'øÚ'øö'ù'ù.'ùJ'ùf'ù‚'ùž'ùº'ùÖ'ùò'ú'ú*'úF'úb'ú~'úš'ú¶'úÒ'úî'û 'û&'ûB'û^'ûz'û–'û¬'ûÈ'ûä'ü'ü'ü8'üT'üp'üŒ'ü¨'üÄ'üà'üü'ý'ý4'ýP'ýl'ýˆ'ý¤'ýÀ'ýÜ'ýø'þ'þ0'þL'þh'þ„'þ 'þ¶'þÒ'þî'ÿ 'ÿ&'ÿB'ÿ^'ÿz'ÿ–'ÿ²'ÿÎ'ÿê(("(>(Z(v(’(®(Ê(æ(((:(V(r(Ž(ª(À(Ü(ø((0(L(h(„( (¼(Ø(ô((,(H(d(€(œ(¸(Ô(ð( (((D(`(|(˜(´(Ê(æ(((:(V(r(Ž(ª(Æ(â(þ((6(R(n(Š(¦(Â(Þ(ú((2(N(j(†(¢(¾(Ô(ð( (((D(`(|(˜(´(Ð(ì( ( $( @( \( x( ”( °( Ì( è( ( ( <( X( t( ( ¬( È( Þ( ú( ( 2( N( j( †( ¢( ¾( Ú( ö( ( .( J( f( ‚( ž( º( Ö( ò( ( *( F( b( ~( š( ¶( Ò( è(( (<(X(t((¬(È(ä(((8(T(p(Œ(¨(Ä(à(ü((4(P(l(ˆ(¤(À(Ü(ò((*(F(b(~(š(¶(Ò(î( (&(B(^(z(–(²(Î(ê(("(>(Z(v(’(®(Ê(æ(ü((4(P(l(ˆ(¤(À(Ü(ø((0(L(h(„( (¼(Ø(ô((,(H(d(€(œ(¸(Ô(ð(("(>(Z(v(’(®(Ê(æ(((:(V(r(Ž(ª(Æ(â(þ((6(R(n(Š(¦(Â(Þ(ú((,(H(d(€(œ(¸(Ô(ð( (((D(`(|(˜(´(Ð(ì(($(@(\(x(”(°(Ì(è(((6(R(n(Š(¦(Â(Þ(ú((2(N(j(†(¢(¾(Ú(ö((.(J(f(‚(ž(º(Ö(ò( ( $( @( \( x( ”( °( Ì( è(!(! (!<(!X(!t(!(!¬(!È(!ä("("("8("T("p("Œ("¨("Ä("à("ü(#(#.(#J(#f(#‚(#ž(#º(#Ö(#ò($($*($F($b($~($š($¶($Ò($î(% (%&(%B(%^(%z(%–(%²(%Î(%ê(&(&"(&8(&T(&p(&Œ(&¨(&Ä(&à(&ü('('4('P('l('ˆ('¤('À('Ü('ø((((0((L((h((„(( ((¼((Ø((ô()(),()B()^()z()–()²()Î()ê(*(*"(*>(*Z(*v(*’(*®(*Ê(*æ(+(+(+:(+V(+r(+Ž(+ª(+Æ(+â(+þ(,(,6(,L(,h(,„(, (,¼(,Ø(,ô(-(-,(-H(-d(-€(-œ(-¸(-Ô(-ð(. (.((.D(.`(.|(.˜(.´(.Ð(.ì(/(/$(/@(/V(/r(/Ž(/ª(/Æ(/â(/þ(0(06(0R(0n(0Š(0¦(0Â(0Þ(0ú(1(12(1N(1j(1†(1¢(1¾(1Ú(1ö(2(2.(2J(2`(2|(2˜(2´(2Ð(2ì(3(3$(3@(3\(3x(3”(3°(3Ì(3è(4(4 (4<(4X(4t(4(4¬(4È(4ä(5(5(58(5T(5j(5†(5¢(5¾(5Ú(5ö(6(6.(6J(6f(6‚(6ž(6º(6Ö(6ò(7(7*(7F(7b(7~(7š(7¶(7Ò(7î(8 (8&(8B(8^(8t(8(8¬(8È(8ä(9(9(98(9T(9p(9Œ(9¨(9Ä(9à(9ü(:(:4(:P(:l(:ˆ(:¤(:À(:Ü(:ø(;(;0(;L(;h(;~(;š(;¶(;Ò(;î(< (<&((=Z(=v(=’(=®(=Ê(=æ(>(>(>:(>V(>r(>ˆ(>¤(>À(>Ü(>ø(?(?0(?L(?h(?„(? (?¼(?Ø(?ô(@(@,(@H(@d(@€(@œ(@¸(@Ô(@ð(A (A((AD(A`(A|(A’(A®(AÊ(Aæ(B(B(B:(BV(Br(BŽ(Bª(BÆ(Bâ(Bþ(C(C6(CR(Cn(CŠ(C¦(CÂ(CÞ(Cú(D(D2(DN(Dj(D†(Dœ(D¸(DÔ(Dð(E (E((ED(E`(E|(E˜(E´(EÐ(Eì(F(F$(F@(F\(Fx(F”(F°(FÌ(Fè(G(G (G<(GX(Gt(G(G¦(GÂ(GÞ(Gú(H(H2(HN(Hj(H†(H¢(H¾(HÚ(Hö(I(I.(IJ(If(I‚(Iž(Iº(IÖ(Iò(J(J*(JF(Jb(J~(Jš(J°(JÌ(Jè(K(K (K<(KX(Kt(K(K¬(KÈ(Kä(L(L(L8(LT(Lp(LŒ(L¨(LÄ(Là(Lü(M(M4(MP(Ml(Mˆ(M¤(Mº(MÖ(Mò(N(N*(NF(Nb(N~(Nš(N¶(NÒ(Nî(O (O&(OB(O^(Oz(O–(O²(OÎ(Oê(P(P"(P>(PZ(Pv(P’(P®(PÄ(Pà(Pü(Q(Q4(QP(Ql(Qˆ(Q¤(QÀ(QÜ(Qø(R(R0(RL(Rh(R„(R (R¼(RØ(Rô(S(S,(SH(Sd(S€(Sœ(S¸(SÎ(Sê(T(T"(T>(TZ(Tv(T’(T®(TÊ(Tæ(U(U(U:(UV(Ur(UŽ(Uª(UÆ(Uâ(Uþ(V(V6(VR(Vn(VŠ(V¦(VÂ(VØ(Vô(W(W,(WH(Wd(W€(Wœ(W¸(WÔ(Wð(X (X((XD(X`(X|(X˜(X´(XÐ(Xì(Y(Y$(Y@(Y\(Yx(Y”(Y°(YÌ(Yâ(Yþ(Z(Z6(ZR(Zn(ZŠ(Z¦(ZÂ(ZÞ(Zú([([2([N([j([†([¢([¾([Ú([ö(\(\.(\J(\f(\‚(\ž(\º(\Ö(\ì(](]$(]@(]\(]x(]”(]°(]Ì(]è(^(^ (^<(^X(^t(^(^¬(^È(^ä(_(_(_8(_T(_p(_Œ(_¨(_Ä(_à(_ö(`(`.(`J(`f(`‚(`ž(`º(`Ö(`ò(a(a*(aF(ab(a~(aš(a¶(aÒ(aî(b (b&(bB(b^(bz(b–(b²(bÎ(bê(c(c(c8(cT(cp(cŒ(c¨(cÄ(cà(cü(d(d4(dP(dl(dˆ(d¤(dÀ(dÜ(dø(e(e0(eL(eh(e„(e (e¼(eØ(eô(f (f&(fB(f^(fz(f–(f²(fÎ(fê(g(g"(g>(gZ(gv(g’(g®(gÊ(gæ(h(h(h:(hV(hr(hŽ(hª(hÆ(hâ(hþ(i(i0(iL(ih(i„(i (i¼(iØ(iô(j(j,(jH(jd(j€(jœ(j¸(jÔ(jð(k (k((kD(k`(k|(k˜(k´(kÐ(kì(l(l(l:(lV(lr(lŽ(lª(lÆ(lâ(lþ(m(m6(mR(mn(mŠ(m¦(mÂ(mÞ(mú(n(n2(nN(nj(n†(n¢(n¾(nÚ(nö(o(o((oD(o`(o|(o˜(o´(oÐ(oì(p(p$(p@(p\(px(p”(p°(pÌ(pè(q(q (q<(qX(qt(q(q¬(qÈ(qä(r(r(r2(rN(rj(r†(r¢(r¾(rÚ(rö(s(s.(sJ(sf(s‚(sž(sº(sÖ(sò(t(t*(tF(tb(t~(tš(t¶(tÒ(tî(u (u&(u<(uX(ut(u(u¬(uÈ(uä(v(v(v8(vT(vp(vŒ(v¨(vÄ(và(vü(w(w4(wP(wl(wˆ(w¤(wÀ(wÜ(wø(x(x0(xF(xb(x~(xš(x¶(xÒ(xî(y (y&(yB(y^(yz(y–(y²(yÎ(yê(z(z"(z>(zZ(zv(z’(z®(zÊ(zæ({({({:({P({l({ˆ({¤({À({Ü({ø(|(|0(|L(|h(|„(| (|¼(|Ø(|ô(}(},(}H(}d(}€(}œ(}¸(}Ô(}ð(~ (~((~D(~Z(~v(~’(~®(~Ê(~æ(((:(V(r(Ž(ª(Æ(â(þ(€(€6(€R(€n(€Š(€¦(€Â(€Þ(€ú((2(N(d(€(œ(¸(Ô(ð(‚ (‚((‚D(‚`(‚|(‚˜(‚´(‚Ð(‚ì(ƒ(ƒ$(ƒ@(ƒ\(ƒx(ƒ”(ƒ°(ƒÌ(ƒè(„(„ („<(„X(„n(„Š(„¦(„Â(„Þ(„ú(…(…2(…N(…j(…†(…¢(…¾(…Ú(…ö(†(†.(†J(†f(†‚(†ž(†º(†Ö(†ò(‡(‡*(‡F(‡b(‡x(‡”(‡°(‡Ì(‡è(ˆ(ˆ (ˆ<(ˆX(ˆt(ˆ(ˆ¬(ˆÈ(ˆä(‰(‰(‰8(‰T(‰p(‰Œ(‰¨(‰Ä(‰à(‰ü(Š(Š4(ŠP(Šl(Š‚(Šž(Šº(ŠÖ(Šò(‹(‹*(‹F(‹b(‹~(‹š(‹¶(‹Ò(‹î(Œ (Œ&(ŒB(Œ^(Œz(Œ–(Œ²(ŒÎ(Œê(("(>(Z(v(Œ(¨(Ä(à(ü(Ž(Ž4(ŽP(Žl(Žˆ(ޤ(ŽÀ(ŽÜ(Žø((0(L(h(„( (¼(Ø(ô((,(H(d(€(–(²(Î(ê(‘(‘"(‘>(‘Z(‘v(‘’(‘®(‘Ê(‘æ(’(’(’:(’V(’r(’Ž(’ª(’Æ(’â(’þ(“(“6(“R(“n(“Š(“ (“¼(“Ø(“ô(”(”,(”H(”d(”€(”œ(”¸(”Ô(”ð(• (•((•D(•`(•|(•˜(•´(•Ð(•ì(–(–$(–@(–\(–x(–”(–ª(–Æ(–â(–þ(—(—6(—R(—n(—Š(—¦(—Â(—Þ(—ú(˜(˜2(˜N(˜j(˜†(˜¢(˜¾(˜Ú(˜ö(™(™.(™J(™f(™‚(™ž(™´(™Ð(™ì(š(š$(š@(š\(šx(š”(š°(šÌ(šè(›(› (›<(›X(›t(›(›¬(›È(›ä(œ(œ(œ8(œT(œp(œŒ(œ¨(œ¾(œÚ(œö((.(J(f(‚(ž(º(Ö(ò(ž(ž*(žF(žb(ž~(žš(ž¶(žÒ(žî(Ÿ (Ÿ&(ŸB(Ÿ^(Ÿz(Ÿ–(Ÿ²(ŸÈ(Ÿä( ( ( 8( T( p( Œ( ¨( Ä( à( ü(¡(¡4(¡P(¡l(¡ˆ(¡¤(¡À(¡Ü(¡ø(¢(¢0(¢L(¢h(¢„(¢ (¢¼(¢Ò(¢î(£ (£&(£B(£^(£z(£–(£²(£Î(£ê(¤(¤"(¤>(¤Z(¤v(¤’(¤®(¤Ê(¤æ(¥(¥(¥:(¥V(¥r(¥Ž(¥ª(¥Æ(¥Ü(¥ø(¦(¦0(¦L(¦h(¦„(¦ (¦¼(¦Ø(¦ô(§(§,(§H(§d(§€(§œ(§¸(§Ô(§ð(¨ (¨((¨D(¨`(¨|(¨˜(¨´(¨Ð(¨æ(©(©(©:(©V(©r(©Ž(©ª(©Æ(©â(©þ(ª(ª6(ªR(ªn(ªŠ(ª¦(ªÂ(ªÞ(ªú(«(«2(«N(«j(«†(«¢(«¾(«Ú(«ð(¬ (¬((¬D(¬`(¬|(¬˜(¬´(¬Ð(¬ì(­(­$(­@(­\(­x(­”(­°(­Ì(­è(®(® (®<(®X(®t(®(®¬(®È(®ä(®ú(¯(¯2(¯N(¯j(¯†(¯¢(¯¾(¯Ú(¯ö(°(°.(°J(°f(°‚(°ž(°º(°Ö(°ò(±(±*(±F(±b(±~(±š(±¶(±Ò(±î(²(² (²<(²X(²t(²(²¬(²È(²ä(³(³(³8(³T(³p(³Œ(³¨(³Ä(³à(³ü(´(´4(´P(´l(´ˆ(´¤(´À(´Ü(´ø(µ(µ*(µF(µb(µ~(µš(µ¶(µÒ(µî(¶ (¶&(¶B(¶^(¶z(¶–(¶²(¶Î(¶ê(·(·"(·>(·Z(·v(·’(·®(·Ê(·æ(¸(¸(¸4(¸P(¸l(¸ˆ(¸¤(¸À(¸Ü(¸ø(¹(¹0(¹L(¹h(¹„(¹ (¹¼(¹Ø(¹ô(º(º,(ºH(ºd(º€(ºœ(º¸(ºÔ(ºð(» (»"(»>(»Z(»v(»’(»®(»Ê(»æ(¼(¼(¼:(¼V(¼r(¼Ž(¼ª(¼Æ(¼â(¼þ(½(½6(½R(½n(½Š(½¦(½Â(½Þ(½ú(¾(¾,(¾H(¾d(¾€(¾œ(¾¸(¾Ô(¾ð(¿ (¿((¿D(¿`(¿|(¿˜(¿´(¿Ð(¿ì(À(À$(À@(À\(Àx(À”(À°(ÀÌ(Àè(Á(Á (Á6(ÁR(Án(ÁŠ(Á¦(ÁÂ(ÁÞ(Áú(Â(Â2(ÂN(Âj(†(¢(¾(ÂÚ(Âö(Ã(Ã.(ÃJ(Ãf(Â(Þ(ú(ÃÖ(Ãò(Ä(Ä*(Ä@(Ä\(Äx(Ä”(İ(ÄÌ(Äè(Å(Å (Å<(ÅX(Åt(Å(Ŭ(ÅÈ(Åä(Æ(Æ(Æ8(ÆT(Æp(ÆŒ(ƨ(ÆÄ(Æà(Æü(Ç(Ç4(ÇJ(Çf(Ç‚(Çž(Ǻ(ÇÖ(Çò(È(È*(ÈF(Èb(È~(Èš(ȶ(ÈÒ(Èî(É (É&(ÉB(É^(Éz(É–(ɲ(ÉÎ(Éê(Ê(Ê"(Ê>(ÊT(Êp(ÊŒ(ʨ(ÊÄ(Êà(Êü(Ë(Ë4(ËP(Ël(ˈ(ˤ(ËÀ(ËÜ(Ëø(Ì(Ì0(ÌL(Ìh(Ì„(Ì (̼(ÌØ(Ìô(Í(Í,(ÍH(Í^(Íz(Í–(Ͳ(ÍÎ(Íê(Î(Î"(Î>(ÎZ(Îv(Î’(ή(ÎÊ(Îæ(Ï(Ï(Ï:(ÏV(Ïr(ÏŽ(Ϫ(ÏÆ(Ïâ(Ïþ(Ð(Ð6(ÐR(Ðh(Є(Р(м(ÐØ(Ðô(Ñ(Ñ,(ÑH(Ñd(Ñ€(Ñœ(Ѹ(ÑÔ(Ñð(Ò (Ò((ÒD(Ò`(Ò|(Ò˜(Ò´(ÒÐ(Òì(Ó(Ó$(Ó@(Ó\(Ór(ÓŽ(Óª(ÓÆ(Óâ(Óþ(Ô(Ô6(ÔR(Ôn(ÔŠ(Ô¦(ÔÂ(ÔÞ(Ôú(Õ(Õ2(ÕN(Õj(Õ†(Õ¢(Õ¾(ÕÚ(Õö(Ö(Ö.(ÖJ(Öf(Ö|(Ö˜(Ö´(ÖÐ(Öì(×(×$(×@(×\(×x(×”(×°(×Ì(×è(Ø(Ø (Ø<(ØX(Øt(Ø(ج(ØÈ(Øä(Ù(Ù(Ù8(ÙT(Ùp(Ù†(Ù¢(Ù¾(ÙÚ(Ùö(Ú(Ú.(ÚJ(Úf(Ú‚(Úž(Úº(ÚÖ(Úò(Û(Û*(ÛF(Ûb(Û~(Ûš(Û¶(ÛÒ(Ûî(Ü (Ü&(ÜB(Ü^(Üz(Ü(ܬ(ÜÈ(Üä(Ý(Ý(Ý8(ÝT(Ýp(ÝŒ(ݨ(ÝÄ(Ýà(Ýü(Þ(Þ4(ÞP(Þl(Þˆ(Þ¤(ÞÀ(ÞÜ(Þø(ß(ß0(ßL(ßh(ß„(ßš(ß¶(ßÒ(ßî(à (à&(àB(à^(àz(à–(à²(àÎ(àê(á(á"(á>(áZ(áv(á’(á®(áÊ(áæ(â(â(â:(âV(âr(âŽ(â¤(âÀ(âÜ(âø(ã(ã0(ãL(ãh(ã„(ã (ã¼(ãØ(ãô(ä(ä,(äH(äd(ä€(äœ(ä¸(äÔ(äð(å (å((åD(å`(å|(å˜(å®(åÊ(åæ(æ(æ(æ:(æV(ær(æŽ(æª(æÆ(æâ(æþ(ç(ç6(çR(çn(çŠ(ç¦(çÂ(çÞ(çú(è(è2(èN(èj(è†(è¢(è¸(èÔ(èð(é (é((éD(é`(é|(é˜(é´(éÐ(éì(ê(ê$(ê@(ê\(êx(ê”(ê°(êÌ(êè(ë(ë (ë<(ëX(ët(ë(ë¬(ëÂ(ëÞ(ëú(ì(ì2(ìN(ìj(ì†(ì¢(ì¾(ìÚ(ìö(í(í.(íJ(íf(í‚(íž(íº(íÖ(íò(î(î*(îF(îb(î~(îš(î¶(îÌ(îè(ï(ï (ï<(ïX(ït(ï(ï¬(ïÈ(ïä(ð(ð(ð8(ðT(ðp(ðŒ(ð¨(ðÄ(ðà(ðü(ñ(ñ4(ñP(ñl(ñˆ(ñ¤(ñÀ(ñÖ(ñò(ò(ò*(òF(òb(ò~(òš(ò¶(òÒ(òî(ó (ó&(óB(ó^(óz(ó–(ó²(óÎ(óê(ô(ô"(ô>(ôZ(ôv(ô’(ô®(ôÊ(ôà(ôü(õ(õ4(õP(õl(õˆ(õ¤(õÀ(õÜ(õø(ö(ö0(öL(öh(ö„(ö (ö¼(öØ(öô(÷(÷,(÷H(÷d(÷€(÷œ(÷¸(÷Ô(÷ê(ø(ø"(ø>(øZ(øv(ø’(ø®(øÊ(øæ(ù(ù(ù:(ùV(ùr(ùŽ(ùª(ùÆ(ùâ(ùþ(ú(ú6(úR(ún(úŠ(ú¦(úÂ(úÞ(úô(û(û,(ûH(ûd(û€(ûœ(û¸(ûÔ(ûð(ü (ü((üD(ü`(ü|(ü˜(ü´(üÐ(üì(ý(ý$(ý@(ý\(ýx(ý”(ý°(ýÌ(ýè(ýþ(þ(þ6(þR(þn(þŠ(þ¦(þÂ(þÞ(þú(ÿ(ÿ2(ÿN(ÿj(ÿ†(ÿ¢(ÿ¾(ÿÚ(ÿö)).)J)f)‚)ž)º)Ö)ò))$)@)\)x)”)°)Ì)è)) )<)X)t))¬)È)ä)))8)T)p)Œ)¨)Ä)à)ü)).)J)f)‚)ž)º)Ö)ò))*)F)b)~)š)¶)Ò)î) )&)B)^)z)–)²)Î)ê)))8)T)p)Œ)¨)Ä)à)ü))4)P)l)ˆ)¤)À)Ü)ø) ) 0) L) h) „)  ) ¼) Ø) ô) ) &) B) ^) z) –) ²) Î) ê) ) ") >) Z) v) ’) ®) Ê) æ) ) ) :) V) r) Ž) ª) Æ) â) þ) ) 0) F) \) r) Ž) ¤) À) Ö) ò)))4)J)`)|)’)¨)¾)Ô)ê))),)B)^)t)Š) )¶)Ì)â)ø))$):)P)f)|)’)¨)¾)Ô)ê))),)B)X)n)„)š)°)Æ)â)ø))$):)P)f)|)’)¨)¾)Ô)ê))),)B)X)t)Š) )¶)Ì)â)ø))$):)P)f)|)’)¨)¾)Ô)ð)))2)H)^)t)Š) )¶)Ì)â)ø))$)@)V)l)‚)˜)®)Ä)Ú)ð) )")8)N)d)z)–)¬)Â)Ø)î)))0)F)b)x)Ž)¤)º)Ð)æ)ü))()>)T)p)†)œ)²)Î)ä)ú))&)<)R)h)~)”)ª)À)Ö)ì))).)D)`)v)’)¨)¾)Ú)ð)))2)H)^)t)Š) )¶)Ì)â)ø))*)@)V)l)‚)˜)®)Ä)Ú)ð)))2)H)^)t)Š) )¶)Ì)â)))0)F)\)r)ˆ)ž)´)Ê)à)ö) ) ") 8) N) d) z) ) ¦Kµ·73#735#Kjj OO·· ÿü2·7#'3#"&54632*4ƒ© uV·7#'3#')E·BBBBŸ·73##7##7#537#5373373337#{#&  %  !$"%  $  !c%%p)6666)6666))ÿñ{Â!&7#5"'535&&546753&''5654N>'  64 #V.#. ÿþƹ '374632#"&74&#"3267#74632#"&74&#"326 9 `ef9 €K··€ÿþ°º$,7&54632673#'#"&5467654&#"'323&, # ( <1e. % ]3u)·7#')·BB ÿØE· 73#&540##&·2?>0+CDÿØC· #654'3##&(0>@1.CB OƒÃ77''7'7'S10/1Ã2) -- )2 !€” 7#53533##=0000Q000ÿß/7#67-"# :HO753 >:ÿü2 7#"&546322 ]·7#7]DD··· ÿþº 74632#"&74&#"326 ^\////////* +, Y·3#547'73Y" 0r& ~¹3#576654&#"'6323~r,  #V/ % ÿþ~¹"7#"'532654&##532654&#"'632Q-"!  `&   $ˆ¸ 7##5#5733#547#ˆTS14))){z, Lÿþ·7532654&#"'73#632#"  VB  "  V4 ÿþ¹!7&#"3632#"&54632"32654&t 8 !(( !·J )'65X  ·37#53#G_vF¢¥ ÿþ€º)7#"&547&54632654&#"32654&'Y'$3a       ÿþ¹!35327##"&54632#"72654&#" 7 "((!J )'65Xÿü2 7#"&54632#"&546322{  v ÿß2 7#"&54632#672{  f"# €œ7'57€ss\\5 <.( 7€}75353 sssk4 €œ77'5 \\ss2(.< 5ÿüe¹#754>54&#"'632#"&54632# 4    & ÿéз.97#"&5463232654&#"327#"&54632#"'&#"327‹  ' (/($,2;.(1  24 "(2+&)  2-1>2*"V'œ¸3'##73''&'„DCD399¸¸M5 5‘· 732##732654&##32654&#2$%*=!·"$iMBÿþ“¹7#"&54632&#"32Œ%*-& !//,1  '#$% ·3532#'32654&#3'-/*"!·/+-0£$$$#x· 3#53#3#3x__HCCH·8Ax· 3#53#3#0_HCC·@ÿþž¹73#"&54632&#"3275#b<!%,/* " %aZ 0.,1  &$$%6›· 3#5##53353›SSUU·MM M· 3#575'53MCC “ “ÿéÿÏ.· 5326553#"  .·´”· 3#'#5373”8HAWI·\\Px·3533H·¢Æ·3'##53373#547#d7"43#7 #m·••·o  ¢·3#'##533&553¢ZY—$c·—!dÿþ®º 74632#"&74&#"326*%$++$%*†\.01-.0//$%%$%%%†· 7#532#'32654&##0- "!GG·ÿÌ®º7&'#"&54632'4&#"326  %**%$+//.01-EE$%%$%%%”· 7#532#''32654&##0,! $2,LL·$ RL ÿþy¹!7532654'&'&&54632&#"#"   5        ‚·3#5#53#N44¢ÿþœ·7#"&55332655œ$#·v ## vww‘· 73#'367y==%···tà·736773#'&'#'367e .0·k#n·u u·oŒ· 3#'#7'373Œ--95)*5OO`WFFW‡·773#5'3C+88Z]pGFq €· 3#57#533€vYVpY\ÿØG·#53#3G22(ߺ]·7#'DD···ÿØ9·35#53#33ºßEƒ¸773#'5 <.(Ess\\ÿØjÿé#53jjj(1›bÄ7#&'53b › ÿþtŒ"3'##"&547754&#"'632'3265c:  *  ^C ÿþˆÃ7##533632#"72654&#"- Ã/ $##$ÿþnŒ7&#"327#"&54632n  !„##$$ÿþ€Ã7##"&546323'53#'54&#"326k##$$7Ã?ÿþ|Œ7#327#"&54632'34&#"|V" V>@  $""&!^Ä7##5#5754632&#"3Q   xxx    ÿÀŒ%1>7#"'332#"&547&547&546324&#"326#"32654&€ ""     ‰   +M  ‚Ã354&#"#533632l XGÃ:Z/½ 7#"&54632#53/®¶‰ÿøÿÃ/½ 7#"&546325326553#"/7 ®ð ž~à 773#'#53+525*GB;N? 5ÃZ"-Ã3#53-ÃÑŒ!354&#"#54&#"#5336323632º     XLXG‰Z‚Œ354&#"#533632l XG‰Zÿþ†Œ 74632#"&74&#"326!"!!`E"%&!#$%"ÿÈŒ7##533632#"'32654&#"-  :Æ$##$LÿÀŒ7373#57##"&5463254&#"326jwÆ:##$$MaŒ7&#"#533632a ‹J‰ ÿþhŒ7532654.54632&#"#"  -  .        ÿþR©7#"&55#57733#32R  ##  O  O ÿþ‰3'##"&553326553o  YXG‰{‰ 3'336773// /‰LL‰¼‰3'&'##'33677336773~##M$t‰IMMI‰{‰ 7'373#'#3,,.""FC33CF77ÿÃ|‰7336773#"'53277  6  ‰LL› g‰ 3#57#533g]C?VADhfÿØT·3"&554�"?   *  ) )=ÿÃPÃ73#=ÃÿÿØS·7475&5543"#5265  ') )  *  I€k75632327#"&#"  #   $ I  ÿÑ2Œ 74632#"&3# z  „$~‘'7'76327'#"''7&544&#"326           N  u           ÿÿlÄ*57&54632&#"#"'532654&'&&54654&'%   9 …        4   &¢m» 7#"&54632#"&54632?.® bH¹7'#"&547354&#"'632'32655=  #    d  8' ÿÿ :HO ÿþɹ &/7#"&546324&#"326'#'##532'32654&##É8&'77'&8/!"//"!/@  2 [&77&'77'"//"!///,,o k^¹ 7#"&546324&#"326^  ’   €” 7#53533##53=00000sQ000!IN¹7#576654&#"'6323NH  2I   GM¹"7#"'532654&##532654&#"'6327   ƒ    1›bÄ7673#1  ŸÿàÃ#5##5#"&54633 G ÏÏf !I2l 7#"&546322Z  ÿÃ3532654'73#"  <   I7· 73#547'& ·nA bQ¹ 74632#"&74&#"3269 ޱ·7#7#3#547'##5#5733#547–ef] ©//!···nA ‡HF 0´·%7#7#3#547'#576654&#"'6323”fe\ ¯G  1···nA Ÿ   º¹"&187#"'532654&##532654&#"'6327#7##5#5733#5477   Xee,./"ƒ    -··ŸHF  ÿÏiŒ #74632#"&327#"&54>550 z       Ë·3#5##73#3#3'35#Ë_<RyHCCH’399·8A8U · 73532##5#73#32654&#3'-/*.***"!eR/+-0PS><$$$#&| 7'77''9' ') (' )' Z( '' )( '' ÿ÷®À#7#"''7&5463277&#"732654£ +$  *% ]H cI ¶..0 1.0 ™w%$"Uv%% †· 7#5332#'32654&##0 "!((· ÿþÄ+7532654.54654&#"#54632#";  ! #$    ––  ÿÿ ÿþtÄ&DCóÿÿ ÿþtÄ&Dm ÿþÉŒ#)4754&#"'632632#327#"'#"&547734&#"3265] ! T" :/; S  !  *6 ÿÿÿþ|Ä&HCóÿÿÿþ|Ä&Hm ÿþ¥Ä &7#&'#57673#327#"&54632'34&#"¥  )V" V>› _  $""&!ÿÿÿý.Ä&•CÌÿÿIÄ&•mçÿþ†Ä&73&''7&'77#"&5463232654&#"l    &!!;k  $:$&! >ÿÿÿþ†Ä&RCüÿÿÿþ†Ä&Rm  €– 7#"&5463253#"&54632UHs+†="ÿ÷†’#7'7&546327#"'7&#"732654.  !  !2 D2  !"%  #$&Q6PÿÿÿþÄ&XCõÿÿÿþÄ&Xm ÿÿÿþ»&XeÿÈà 7632#"'##332654&#"-  w$##$::-ÿÿ ÿþt®&D§þÿþ”Ã&7##"&546323'5#53533##'54&#"326k00"""#›=ÿÿÿþ|®&H§ÿÿÿþ|Ä&H¦´·7533533##5##5#55#SSƒS˜†UU†.‚Ã354&#"#5#53533#3632l// SB›UÿÿÿþF®&•§Û-‰3#53-‰ÿÿ ÿÏ…·&,-WÿÿÿÃq½&LMB~‰ 3'#5373d*725= 3‰#F=Lÿÿx·&/©<®ÿÿUÃ&O©&¨x· 75373#5' &H_ UbT9?ÿÿDà 7537#5'  _dUXIÿÿ”·&Q#ýÿÏ¢·53265'##533&553#"^ _Y .—$c·’d´ÿÂŒ5326574&#"#533632#"M  : mG‰nÿÿÿþ†®&R§ÿþÕº3#"&546323#3#3'5&#"32Õ_%**% _HCCH_  //.08A‹%$%%ÿþÜŒ&,7#"&54632632#327#"'4&#"32674&#"z !!V!V%""%!  F)&‚·75#53#3##5#5744%%%f<<TTÿþR©7#"&55#535#57733#3#32R  ##!!     ÿÿÿþ®&X§ ›sÄ 7#&''53673s  Á  #›k®73##HH®$›o¾ 7#"'3327o## ¾##  /½ 7#"&54632/®.›fÑ 74632#"&732654&#".   ¶   ÿÈ,#"&547332,  (  ›xÄ7673#7673#  -   Ÿÿÿœ¸$ÿÿ‘·%x·7##5xH·¢·· 7#5733'&ˆ8  V ¦_^ÿÿx·(ÿÿ €·=ÿÿ›·+ÿþ®º 74632#"&74&#"326'3#*%$++$%*†XBB\.01-.0//$%%$%%%0ÿÿ M·,ÿÿ”·.‘· 3#'&'#73‘%%=st·ÿÿÆ·0ÿÿ¢·1 ~· 73#3##5jj TTdt·8Aÿÿÿþ®º2˜·3#5##53˜Q¢¢·ÿÿ†·3 ‚· 357'53#3 43pU14_MDBKÿÿ‚·7ÿÿ‡·< ÿþ·¹'7332###5#"&5463332654&+"33W #$%$ ¹&&&&vÿÿŒ·; ··7###5#"&5533353326553·$ ${$88$=<kk= µº7#53&546323#5654&#"TJ,&*%%*%,J+5',,'588ÿþ’Œ(73673327#"'##"&5463254&#"326k w "4##$$IÿÃÄ'7#"'#5463232654&##532654&#"b-Y h-BÆ%T ÿÃ|‰7#47'336773L  4  '‡HIÿþ†Ä$7&54632&#"#"&54732654C   ! D,u   !. ( ÿþlŒ#7#"327#"&5475&54632&#"3TQ     ÿÎmÃ753#654.5467#WG ,  '*¯A6   5)ÿÂŒ54&#"#533632l =•G‰—ÿþƒÅ 74632#"&73&#"#326G!!EGb1221221?DW%&&ÿþO‰ 7327#"&55+  ‰` `ÿÿ~‰˜ÿþÿþƒÄ#7'&&#"5632327#"''&'7  )  † y5 Hÿ‰7326553#'##"'#53-   1G‰ (Æz‰ 536653# ‰J5-.?ÿÎmÃ*7#"#654.54675&547##53#"3d -%$ Po     ÿÿÿþ†ŒRÿþ™‰7#"&55##5#573#32• 2…Xvv VÿÆŒ7#54632#"'32654&#"+  "$‚"%%"#$ ÿþ‘‰ 7##"&5463#"32654‘"! ##‰##!#$!ÿým‰7#327#"&55#57m/ %‰L N ÿþˆ‰7332654'3#"&5‰I  '& ÿÃ¥Œ5&547546325654&#"M?($*  =;D%! /L$!!';M2ÿþÿÃ…Š773327#"&''#7'&#"5632F$2 )8   @Ia< -Og8ÿîÂ7654'3#5&5535k,C@*±1##E;;EDE0²ÿþ³‰#7332655332654'3#"'##"&54  ‰"$&&$""$"##"$ÿÿxå&(e*ÿÿœ¸$†· 353#32#'32654&##bK"! ·8ÿÿ‘·%ÿÿx·¯ÿС· #5##536733#5#¡s(M/!#000EMU¢GFÿÿx·(з7'35373#'#5#ECAABDBB^YYYYYY^]]]] ÿþ~¹"7#"'532654&##532654&#"'632O/#" !`%   $¢·73373#547##YZ·d *—·c—¢í 7#"&'33273373#547##‹. \YZí( 6d *—·c—”· 3#'#5373”IGG]]·YYXÿý’·3#5##"'532673’/  Z¢y,)~ÿÿÆ·0ÿÿ›·+ÿÿÿþ®º2ÿÿ˜·¼ÿÿ†·3ÿÿÿþ“¹&ÿÿ‚·7ÿþ–·7#"'53267'3677–6 B4'·" ˆq cÿÿ ÿþ·¹ÁÿÿŒ·;ÿЮ· 73#5#53353˜QE0·¢¢·3#5#"&55332753K IF Yæ· 3#53353353æÍDD·¢¢¢¢ÿÐü·73#5#53353353æÍDDE0·¢¢¢¢›· 35#5332#'32654&##-*A"" !¢Mº· 35332#'32654&##53"! s·MU··†· 35332#'32654&##"! ·Mÿþ‰¹7'632#"'5327#53&&#" %-,'<ON› /+01Dÿþôº7##533632#"&74&#"326Z*+E#**#")UU·MP1-.0+3$%%$%%%~· 7#7&54633#55#"33H)0" .LLR '·LWÿÿ ÿþtŒDÿþ„Ä!73632#"&54767632654&#"9   Ä  !#**0f!!ƒ‰ 7##532'32654&#32654&#b!98R ! I‰(% 8+ a‰7##53a4Kvv‰ÿЇ‰ #5##536533#5#‡V !C*000C1Eve=(ÿÿÿþ|ŒH¸‰75373#'#5#7'3R45:8895GBBBBGFFFFGB ÿþjŒ#72654&#"'632#"'532654&##5.Q    ‡‰ 773#57#5+@@‰S s‰Q"s‰‡Ã 7#"&5332773#57#5~. >@@Ã( :S s‰Q"s‰}‰ 73#'#53_497‰BGFF‰Bÿþv‰3#5##"'53273v  JvH0z¢‰3#5#'#5373¢!*++p Vpp‰ss‡‰ 7353#5##5-DD‰99‰==‰ÿÿÿþ†ŒR‚‰3#53#5#-l?‰‰vÿÿÿÈŒSÿÿÿþnŒFl‰7##5#53l((gvvvÿÿÿÃ|‰\ÿäÃ7#5&&54675357654d""#")>)‹&%;;&%8²g00cg0/ÿÿ{‰[ÿЖ‰ #5#533533–j?00‰vvv€‰732753#5#"&55* ‰3 :‰=4ɉ 7353#53353{7³7v‰‰vvÿÐ݉#5#533533533ݰ7700‰vvvvv ‰ 732##5#5332654&#I#9-D!QvK+ ª‰ 732##5332654&##53-4cQ‰K+ >‰ƒ‰ 732##5332654&#-"9 Q‰K+ ÿþhŒ75327#53&#"'632#"'<;"  #,($$"$ÿþÁŒ7##533632#"&74&#"326O""3 Z==‰9<&!#$ 'r‰ 3#7&54633#5#75#"3%7 :‰6- ÿÿÿþ|»&Heü :vO753 l::O55!: :öO753 ì:x*·7'673 x"%x*·7#67( ·"&xZ· 7'673#'6735 I x"%"%xZ· 7#673#67( I ·"&"&mà 7'#75'37m)'')|€€55pÃ77'#75'75'37'F********>//$#//#ÿü» #7#"&54632#"&54632#"&546322ED    ÿþ¹ '3?K74632#"&74&#"3267#74632#"&74&#"32674632#"&74&#"326 9 `ef9 9 €K··€ t4¹7'74 ±=@ ta¹7'7'74 D ±=@=@ÿþ‰¹!73#3#327#"'#535#536632&#"3681. %8 $ $u-A""  +ÿÿÕ¸%17&#"327#"&54632#74632#"&74&#"326m   Yfe9 ´··Pÿþ°¹#73#"&555675463232'654&#"¤ "  + &*,>-%Q$ ì·'+3#'##533&5534632#"&74&#"32653ON7 2>—$c·—"di@-]Ó·7#5#53#'#5373#55VBH]LLDDZEEZ5Dÿÿ µºÄÿþ±·",77#7#3#547'#"&547&54632654&#"32654'eeZ ™   ···nA e        ÿþ¹¹"&:DO7#"'532654&##532654&#"'6327#7#"&547&54632654&#"32654'8   Rfe   ƒ    -··}        ÿþ··1;F7#7532654&#'73#632#"#"&547&54632654&#"32654'›fe 7(   ···i 5        ÿþ±· (37#77#53#"&547&54632654&#"32654'‹efg(4G(x   ···n^ a        Bÿþ¾¹#7554&#"5632#"&54632&#"326§ &  l ""7$#,)$#:ÿÃÆ·5##53¯^Œ=ßßôô6ÿÃÊ· 57'53#36NL‰hGJt=rf_l6ÿþÊÔ#'#5373€"%@bRµ42Ì‚'7#"&54632632#"'&#"32732654&#"€    N(  ÿÃoÃ7&#"#"'5326554632o    À¥¥F/º…75632327#"&#"5632327#"&#"F  #   #  $   # c  C   €¡7#537#5373#3#',(7? (7@7!$!"Fºœ 7'5753ºtt\\tt< </.+Fºœ 77'553F\\ttt+./< <pÿü·7#'3#"&54632ˆ4ƒ© ]u£·7#'3#'vF·BBBB4Ì·73##7##7#537#5373373337#¨#&  %  # #&  %  b$$p)6666)6666))Jÿñ¶Â!&7#5"'535&&546753&''5654‰>'  64 #V.#.ÿþâ¹ '374632#"&74&#"3267#74632#"&74&#"3269 ffe8 €K··€7ÿþÙº#+7&54632673#'#"&547654&#"'32\&, #8 <1e. %  ]3tuŒ·7#'Œ·BBbÿؼ· 73#&&546¤BB%%·(IG' =$%=DÿØž· #654'3\BB%%('GI(=%$=:JÆÃ77''7'7'<9&&9;Ã2. 22 .2F!º” 7#53533##w1111Q000lÿß”7#67’ "#a:ŸO753a>:pÿü 7#"&54632 B¾·7#7¾cc···Fÿþºº 74632#"&74&#"326F]\////////* ++ S–·3#547'73–" 0r&G¹¹3#576654&#"'6323¹r, #V/ %Fÿþº¹"7#"'532654&##532654&#"'632-"!  `&   $<Á¸ 7##5#5733#547#ÁUS04))){z, LIÿþ··7532654&#"'73#632#"I  VC  "  V4 Fÿþº¹!7&#"3632#"&54632"32654&¬ 7 "(( ·J )'65X E»·37#53]F^vF¢¥Gÿþ¹º)7#"&547&54632654&#"32654&'“&#4  a      Fÿþº¹!35327##"&54632#"72654&#"T 7 "(( !J )'65Xpÿü 7#"&54632#"&54632{  v hÿß’ 7#"&54632#67’ {  f"'Fºœ7'57ºtt\\< </.F7º}75353Ftttk4Fºœ77'5F\\tt+./< <Gÿü·¹#754>54&#"'632#"&54632n   $4    & ÿéá·.97#"&5463232654&#"327#"&54632#"'&#"327œ  ' (/($-2;.(1  24 "(2+&)  2-1>2*"V'-Ó¸3'##73''&'ºIHH699¸¸M9 9DÄ· 732##732654&##32654&#D:#%* D&$)·"$iMB9ÿþǹ7#"&54632&#"32À)-1) $ !0.+2  '#$%=η3532#'32654&#=='-/*!"!·/+-0£$$$#Fº· 3#53#3#3ºtt\WW\·8AFº· 3#53#3#^t\WW·@4ÿþ̹73#"&54632&#"3275#‹A#).2.  %#"*aZ 1-+2  &$$%6:Æ· 3#5##53353Æ^^UU·MME»· 3#575'53»v//v//““@ÿþ©· 75326553#"@" DÏ· 3#'#53773ÏEFNVH·]JSP¿·3533PW·¢*×·3'##5373#547#u7"44#8 #m·••·o  4Ì·3#'##533&553Ìlk—$c·—!d,ÿþÔº 74632#"&74&#"326,,('--'(,\.01--10.$%%$%%%IÆ· 7#532#'32654&##a= "!"#GG·,ÿÌÔº7&'#"&54632'4&#"326  #" (,,('-"0..01-FF$%%$%%%BÍ· 7#532#''32654&##ZD  ÿøåÁ "*57#"&546324&#"326'##5#5733#547##547'73å<))<;**; 6%%66%%6 32   \);;)*;;*%66%%55 JI-%D  ÿøåÁ ">7#"&546324&#"326#547'73532654&#"'73#632#"å<))<;**; 6%%66%%6x     4( \);;)*;;*%66%%55D  i  3 ÿøåÁ -9D7#"&546324&#"326'&#"3632#"&54632"32654&#547'73å<))<;**; 6%%66%%6*! ?   \);;)*;;*%66%%55[ -  5   :D  ÿøåÁ ")7#"&546324&#"326#547'737#53å<))<;**; 6%%66%%6x   +9F)\);;)*;;*%66%%55D  ma bÿøåÁ +5@H7#"&546324&#"326'#"&547&54632654&#"32654'#55'73å<))<;**; 6%%66%%69   5  \);;)*;;*%66%%55(         3D ÿøåÁ .:E7#"&546324&#"32653265##"&54632#"72654&#"#547'73å<))<;**; 6%%66%%6_  (   \);;)*;;*%66%%55   5   3D  ÿøåÁ #/G7#"&546324&#"326'4632#"&74&#"326#576654&#"'6323å<))<;**; 6%%66%%6[8 >?   .\);;)*;;*%66%%55%   ÿøîÀ 73#&54#654'3'#547'738 $$ &· #$ %e  À,97,'<= ,79,(=<D  ÿøîÀ +73#&54#654'3'#576654&#"'63238 $$ &· #$ %LD  3À,97,'<= ,79,(=<   ÿøîÀ 673#&54#654'3'#"'532654&##532654&#"'6328 $$ &· #$ %g    À,97,'<= ,79,(=D  ÿøîÀ &173#&54#654'3'##5#5733#547##547'738 $$ &· #$ %1 32   À,97,'<= ,79,(=< JI-%D  ÿøîÀ :73#&54#654'3'#547'73532654&#"'73#632#"8 $$ &· #$ %‹     4( À,97,'<= ,79,(=<D  i  3 ÿøîÀ )5@73#&54#654'3'&#"3632#"&54632"32654&#547'738 $$ &· #$ %=! ?   À,97,'<= ,79,(=?   .À,97,'<= ,79,(=<=   ÿÿ8ÿüÁ·&PåM1ÿÿ2ÿü×¹&QëMGÿÿ1ÿü×¹&RëMGÿÿ'ÿü׸&SëMGÿÿ4ÿü×·&TëMGÿÿ1ÿü×¹&UëMGÿÿ2ÿü÷&VíM3ÿÿ2ÿü׺&WëMGÿÿ1ÿü×¹&XëMGÿüïº ".74632#"&74&#"326#547'73#"&54632^Sg '¥\////////++,0r© ÿÿ ÿüå·&P¸&MUPÿüï¹".3#576654&#"'6323#547'73#"&54632Ãi(    My '¥/ %r© ÿüí¹"-97#"'532654&##532654&#"'632#547'73#"&54632œ*   v '¢`&   &fr© ÿüï¸ )7##5#5733#547##547'73#"&54632ÍJI,*$ (¦)))|z,  G>r© ÿüï· %13#547'73532654&#"'73#632#"7#"&54632K '  Q=  ~r° V4 ÿüï¹"-97&#"3632#"&54632"32654&#547'73#"&54632º   %%  Z (¦·%% ((65Xar© ÿüì· 3#547'737#537#"&54632R  0+ATlAWr &·¢¥ ÿüïº)4@7#"&547&54632654&#"32654&'#547'73#"&54632¡&#1   H (¦a      Ur© ÿüï¹!,835327##"&54632#"72654&#"#547'73#"&54632j 3 &%  : (¦J ((65XVr© ÿüôº /;74632#"&74&#"326#576654&#"'6323#"&54632pN  Qf&   K‡\////////++,0/ % ÿøîÀ +673#&54#654'3''##"&547354&#"'632'#32658 $$ &· #$ %W )   À,97,'<= ,79,(=<   8( ÿøîÀ %173#&54#654'3'##533632#"72654&#"8 $$ &· #$ %€   À,97,'<= ,79,(=< t  ÿøîÀ )73#&54#654'3'&#"327#"&546328 $$ &· #$ %L    À,97,'<= ,79,(=:ÿüw 7#"&54632#"&546322E  I2l 7#"&546322Z  ÿýWœm7#53œŸŸWÿýNœy7#53œŸŸN+BÿÈXÿ#3X877ÿÈcÿ#3c,,87ÿýYœn 7#53#53#53œ'';((<((YÿýNœy 7#53#53#53œ'';((<((N+++++BÿÈXÿ 7#53#53#53X¥ZÈYÈZ7ÿÈcÿ 7#53#53#53c,,,,,,¥ZÈYÈZÿýYœn 7#53#53#53#53œ,--YÿýNœy 7#53#53#53#53œ,--N+++++++BÿÈXÿ 7#53#53#53#53XÁ>‘>‘>‘>7ÿÈcÿ 7#53#53#53#53c,,,,,,,,Á>‘>‘>‘>BÿÈœn7##53œDZY‘¦BÿÈœy7##53œDZN†±7ÿÈœn7##53œ9,eY‘¦7ÿÈœy7##53œ9,eN†±ÿýÿÈXn#5#53XE[8‘ÿýÿÈXy#5#53XE[8†+ÿýÿÈcn#5#53c,:f8‘ÿýÿÈcy#5#53c,:f8†+BYœÿ7#533œZDY¦‘BNœÿ7#533œZDN±†7Yœÿ7#533œe,9Y¦‘7Nœÿ7#533œe,9N±†ÿýYXÿ7#5353X[EY‘ÿýNXÿ7#5353X[EN+†ÿýYcÿ7#5353cf:,Y‘ÿýNcÿ7#5353cf:,N+†BÿÈœÿ7##33œDDY‘7‘BÿÈœÿ7##33œDDN†7†7ÿÈœÿ 7##5#533œD ,9Y‘‘¦‘7ÿÈœÿ 7##53533œ9, DY‘¦‘‘7ÿÈœÿ7##33œ9,,9Y‘7‘7ÿÈœÿ 7##5#533œD ,9N††±†7ÿÈœÿ 7##53533œ9, DN†±††7ÿÈœÿ7##33œ9,,9N†7†ÿýÿÈXÿ#5#5353XEE8‘‘ÿýÿÈXÿ#5#5353XEE8†+†ÿýÿÈcÿ 7##5#5353c E:,Y‘‘‘ÿýÿÈcÿ #5#53533c,:E 8‘‘‘ÿýÿÈcÿ#5#5353c,::,8‘‘ÿýÿÈcÿ 7##5#5353c E:,N††+†ÿýÿÈcÿ #5#53533c,:E 8†+††ÿýÿÈcÿ#5#5353c,::,8†+†ÿýÿÈœn7##5#53œDEŸY‘‘ÿýÿÈœy 7##5#533œDE[DY‘†+ ÿýÿÈœy 7##5#5353œDEEZN†‘ ÿýÿÈœy7##5#53œDEŸN††+ÿýÿÈœn7##5#53œ9,:ŸY‘‘ÿýÿÈœy 7##5#533œ9,:f9Y‘†+ ÿýÿÈœy 7##5#5353œ9,::eN†‘ ÿýÿÈœy7##5#53œ9,:ŸN††+ÿýYœÿ7#53533œŸEDY‘‘ÿýNœÿ 7##53533œD[EDY +†‘ÿýNœÿ 7#5#53533œZEEDN ‘†ÿýNœÿ7#53533œŸEDN+††ÿýYœÿ7#53533œŸ:,9Y‘‘ÿýNœÿ 7##53533œ9f:,9Y +†‘ÿýNœÿ 7#5#53533œe::,9N ‘†ÿýNœÿ7#53533œŸ:,9N+††ÿýÿÈœÿ 7##5#53533œDEEDY‘‘‘‘ÿýÿÈœÿ 7##5#53533œDEEDY‘†+†‘ÿýÿÈœÿ 7##5#53533œDEEDN†‘‘†ÿýÿÈœÿ 7##5#53533œDEEDN††+††ÿýÿÈœÿ 7##5#53533œDE:,9Y‘‘‘‘ÿýÿÈœÿ 7##5#53533œ9,:EDY‘‘‘‘ÿýÿÈœÿ 7##5#53533œ9,::,9Y‘‘‘‘ÿýÿÈœÿ 7###5#53533œ9 E:,9Y ††+†‘ÿýÿÈœÿ 7##5#5#53533œD ::,9N†† ‘†ÿýÿÈœÿ 7##5#535333œ9,:E 9Y‘†+†† ÿýÿÈœÿ 7##5#5353533œ9,:: DN†‘ ††ÿýÿÈœÿ 7##5#53533œDE:,9N††+††ÿýÿÈœÿ 7##5#53533œ9,:EDN††+††ÿýÿÈœÿ 7##5#53533œ9,::,9Y‘†+†‘ÿýÿÈœÿ 7##5#53533œ9,::,9N†‘‘†ÿýÿÈœÿ 7##5#53533œ9,::,9N††+††ÿýCœ„7#53#53œŸŸŸŸnA,ÿÈnÿ#3#3n,87þÉ7BÿÈœ„ 7##53#3œDZDDC{¼,ÿÈœn 7##5##53œ.pY‘‘‘¦,ÿÈœ„ 7##53##53œZp.Dn¦¼A{‘ÿýÿÈX„ #5#535#53XEEE[8{ÿýÿÈnn #5##5#53n/q8‘‘‘ÿýÿÈn„ #5#53#5#53n[q,/E8¦¼{BCœÿ 7#533#3œZDDDC¼{,Yœÿ 7#533533œp.Y¦‘‘‘,Cœÿ 7#533#533œD.pZn‘{A¼¦ÿýCXÿ 7#535#5353X[EEEC{ÿýYnÿ 7#5353353nq/Y‘‘‘ÿýCnÿ 7#5353#5353BE/,q[n{¼¦BÿÈœÿ 7##33#3œDDDDC{7{,ÿÈœÿ 7##33#3œ..ZY‘7‘¦7,ÿÈœÿ 7#533#3##53œD.ZZ.Dn‘{¼7¼{‘ÿýÿÈXÿ #5#535#5353XEEEE8{{ÿýÿÈnÿ #3#5#5353n,//87þÉ‘‘ÿýÿÈnÿ 7#5353#3#5#53BE/,,/En{þÉ7þÉ{ÿýÿÈœ„ 7#53##5#53œŸŸDEŸnA{{ÿýÿÈœn 7##5##5#53œ./ŸY‘‘‘‘ÿýÿÈœ„ 7#53##53#5#53œŸŸ.DZ/EnA{‘‘{ÿýCœÿ 7#53533#53œŸEDŸŸn{{AÿýYœÿ 7#53533533œŸ/.Y‘‘‘‘ÿýCœÿ 7#533#5353#53œD.ZE/ZŸŸn‘{{¼ÿýÿÈœÿ7##5#535#53533#3œDEEEEDDDC{{{{ÿýÿÈœÿ7##5##5#53533533œ.//.Y‘‘‘‘‘‘‘‘ÿýÿÈœÿ 7#533#5353##53#5#53œD.ZE/Z.DZ/En‘{{¼{‘‘{Bn7"#463(5&Y)%5ÿýXn7#44X(&5)5ÿýYX³7#5265X6%(³%5)BY³7"&533&5(Y5%)š°7'7šŠŠ¡ŠŠš°7'7šŠ&Šš° 7''7'77š==>>==>&===>==>ÿýYBn7#53BEEYÿýÿÈœÿï53Ÿ8''ÿýÿÈœ53Ÿ8NNÿýÿÈœ=53Ÿ8uuÿýÿÈœc53Ÿ8››ÿýÿÈœŠ53Ÿ8ÂÂÿýÿÈœ±53Ÿ8ééÿýÿÈœØ3Ÿ8þðÿýÿÈœÿ3Ÿ87þÉÿýÿȆÿ3‰87þÉÿýÿÈsÿ3v87þÉÿýÿÈ`ÿ3c87þÉÿýÿÈMÿ3P87þÉÿýÿÈ:ÿ3=87þÉÿýÿÈ&ÿ3)87þÉÿýÿÈÿ387þÉ'ÿ¼š  #'+/37;?CGKOSW[_cgkosw{ƒ‡‹“—›3#73#73##3#73#73#'3#73#73##3#73#73##3#73#73#'3#73#73#'3#73#73##3#73#73##3#73#73#'3#73#73##3#73#73##3#73#73#'3#73#73#33€34M33€34M33€34M33€34M33€34M33€34M33  ÿ½š #'+/37;?CGKO#5##535#535#535#535#535#535#53355#5#5#5#5#5#5#5#5#5#5#šM443LLLLL þ²4ÿýØœÿ'53ŸØ''†ÿÈœÿ3†87þÉ)„—7#5„n—nn)„—7#5#3„nd[[—nn \)„— 7#5#3'#5„nd[[.—nn \E--)„— 7#535#5#5#5#„nn [[[[[[[)n)„— 7#5#37#37#37#3„n—nn \\\\\\\)„— #'+/37;?C7#535##5##5##5#5##5##5##5#5##5##5##5#5##5##5##5#„nn    [   [   [   )n)„— 7#535#5'#5'#'#'#'„nn 0>NU?1 )n1U?\U?1)„— 7#53#7#7#75375335„nnW1U?[T>0 )n 1?8U1)„— !%*.258<AFKPSVY\_7#53#'#'#'#'#5#'5''''''''75#''75''''3''375#''#'3'„nn    PT[   A  ?T9 - < A  >TU@*)n           6ƒœ7#7ƒl66f6ƒœ7#7'ƒl6&&'6f\HH#*‰–75‰f`6l#*‰–75'‰fRI`6l6&L$ƒŠ7'ƒ66Šff$ƒŠ7'#ƒ66\M'Šff I*w–7'7wgg*66*w–7'75wgg H*66\L&%ˆ›7'7ˆ;;;`;;;%ˆ›7'7'ˆ;;;--..`;;;;...%ˆ› 7'7'7'7ˆ;;;--..`;;;;....)„— 72#"&5462654&#"M  —   e)„— #/7"&54632'"32654&"&54632'"32654&M       )   eI  -   )„— 74632#"&   `  )„— 74632#"&2654&#   7`  )„— 7"&54632'5"M  )   \)„—7#„n—n)„—7#nn—n)„—75„n—nn)„—7'„n—nn•¨ 7"&54632'"32654&M****$$%%****†$$$$ÿ÷êÀ 77'373€D@PP?&/N/LL/Nÿ÷êÀ 77'373'7'7#'€D@PP?,00-7&/N/LL/Ns!7""7!77ð·#'+/37;?CGKOS7"546332##'&&##3#5735#"73537#3#3#'#3'#37#3#33'#37#3#33'#37#3#3 ,> ?+ ' $ž$3->F2!O9%Z€  yy   ,ð·37=AEIMQUY]aeim7'&&##3#5735#"#"546332#'763323254&##"373535'3#3#'3733#'3#3#'33#'3#3#'33#'3#3#'3¾ $ž$' ,> ?+ ªT '< <'U2 Œ EC'L-V3b€  {{     s s #á”48>HR]7/###"''57#"&5433632?3'732654&#"7'337'#"'32'#"'32'##"'32É  Q  ~ q ³  #     #  6   q?!HI )    #ã”48>HR[75363232###"'#"'767254''&&#"33654'75'265#3277#"3277#"3277  Q  $  # Ž J (    #q   6  ;"H      J¶º!7#535&&546323##74&#"326w!!, + . ƒJÿþ¶·73'#"&5475'4&#"326|+ - Q·* */* Y0н7#"'#575#"&5466€ :  D  9½7  $$  7ÿøâ»#.54632632>54&#"&#"€A?<>A""A =! ?0й7#"'#575#"&547&54632§) D)€$ $$ $  ,ÕÀ17#"'#575#"&54665'532654&&'327€ 9 N  :+ 8 8 À0 2¥, 4 4 ,ÿøâ».54632632€A?A""A,Õ¾=7#"'#575#"&547&546325'532654'654&#"327¬) N (*+ƒ$$ƒ ,"  ", ÿþêº:W763654&547654&547#"&547654&547#67&##67"#6732654`     80::0@ W    2+22+­ -   ,  ,  -  ,    - €      aÿþŸ· 753#"&54“  <{“ "Eÿþ··753'654&'#"&54x 0 <{ ) u "%ÿþ¹·7#"&5475##"&5475335#¹ 3K 2bVKK$ "@X "{)Wÿü°Ã 7632536654&#"c 0)  V,Ǽ" Jÿÿ¶·7575575375377#5#775e $  $ $$#  * #$ ) +&(A*2ÿìI7#67H 6ÿþJ7#"5432J  1ÿìJU7#"5432#67J  J C6ÿþJU7#"5432#"5432J J M #ÿþ\o754>54&#"'632#"54325       6ÿþJn 7#'3#"5432D  Of .ÿèRn 73#&54E  n&%().ÿèRn #654'3;  %')()ÿèWn3"&554�"J    )ÿèWn7475&55443"#52656      +ÿèUn'57U**WJ+ÿèUn75'5+** JWnn73##7##7#537#5373373337#X    ;C  !!!! ÿÿvo#+7&54632673#'#"&547654&#"'32+    !$ =       8  /du77''7'7'G u  cY 7#53533##:  1  1c<753F1 c^7'57cFF88 % c^77'577FF % !cK75353FFF@  %[n7#'2) )nnn ÿ÷`u#7#5"'535&547532&''5654E      %  !  3  ÿÿxo '374632#"&74&#"3267#74632#"&74&#"326 ":= = "M -nnM ÿðzk,77#"&5463232654&#"327#"&54632#"'&#"327Q  #  $ %4 t/¹7' ¹@=IR¸ 7##5#5733#547R./"aIG  ÿÿ ÿþtÄ&D¦üÿÿÿøKÄ&•¦Øÿÿÿþ†Ä&R¦ÿÿÿþÄ&X¦ÿÿÿþÝ&X&e§/ÿÿÿþî&X&em*ÿÿÿþî&X&e¦*ÿÿÿþî&X&eCò* 7‰7'#77--‰##‰#ÿÿ#›k®§ÿÿ1›bÄmÿÿ1›bÄCÿÿ#ÿÙkÿì§ÿ> ¦° #/;7''7'77'"&54632"&54632#"&54632"&54632¦FGFFGFF&]&MMNMNNM+  ,dQ¹754&#"#53632A    d4 +S 6/ÿÃÑÃ/7&#"#"'5326554632&#"#"'5326554632Ž    I    À¥¥¥¥ÿÃpÃ%*/754632&#"#"'532655&&54665455    &(s#!(&6.6=ÿüà #7#"&54632#"&54632#"&546324gq  l  =ÿüà #7#"&54632#"&54632#"&54632\g3q   l pÿüƒ 7#"&54632#"&54632q  l =ÿüà #/7#"&54632#"&54632#"&54632#"&54632\gggq   l  ÿÿFI¹ka9ó· 3#575'5373#'367XBB‚==% “ “ª··tÿÿÿÊ78qÿÿÿÊN:kÿÿÿÈM:lÿÉR8 ##5#5733#547R./"IG  ÿÿÿþï¹&i&\ÿÿâ¹&i)j]ë· 7#3#3#53#5#53#3#53¢'!!(87_L€(8© ZZL? Zÿÿ2Îá&$2ª6ÿþ²·17#7#3#547'#"'532654&##532654&#"'632‘efX ”   ···nA e    ÿþ¸¹=7#576654&#"'63237#7#"'532654&##532654&#"'632LG  1Qfe   I   ^··}    M²· 3#575'53²e((e&& “ “,Õ· 3#575'53'5#Õ©##©##:5 “ “““ ÷· 3#575'53'5##5#÷î!!î!!;13 “ “““““ÿÿ8É·98 ë· 775'53#'6773#'3©BB^%=> “ “ Dt··ô·3'373#575'75#70%}-w ·j› “ “ª““ü·3'373#575'75#735.+ ¢ )c/·›› “ “ª“““““ñ· 3#575'53#'#7'373XBB™,.95*)5 “ “ OO`WFFWÿÿ:Æ·;:ë· 775'53#''373#'#¨CC`5*)59., “ “ `WFFW`OO ó·7#'#7'3775'5#ó! -)#u · “ JJ`WAAª“JN““I·Â 7#"&54632'53#57!8,n+´Dw é '7#"&54632#"&54632'53#575'533¿[B"9,É+!8D´Dwewð #97#"&54632#"&54632#"&54632575'5335'5335'53A‚¼!.*.*."´»ewewew8lj 3'36773q9#  #9‰V V‰:Ɖ 7'373#'#s6)*69,,FC44CF88ï !7#"&54632'53#57'336773K)Og9#  #9´Dw‰V V‰ñ !7#"&54632'53#57'334773Ö)Ot9#  #9´Dw‰V V‰ú #37#"&54632#"&54632'3367733575'5335'53«:³- --&#'´»‰V V‰ewewû #C7#"&54632#"&54632#"&54632'33677335'5335'53#575'ò12b(0 ! ! ‘ $´»‰Q Qweweweyè !7#"&54632'53#577'373#'#O)Pi, ,/"!´Dw4C33CF77Pÿþ°¹7##5&54753&#"32® // 2?@B¾¹7&#"3#3#5655#5354632¸//]|¯ $ (F!ºd7#5#5ºadC0wÿÉÃ73#3#wÃb=a2η7733#3##5#535#53'3€39&//////%8Z]`!!`#ÃÝÔ7#53ݺºÃ* Öx73##"''&5477632R„„++H "'' ÿÃwÃ7#5#"5477632#"'F "''š××++* Öx7#53'&5432#"547®„„++; "'' ÿÃwÃ537632#"''&5432: #''ØØ++ áx)7##"''&54776323'&5432#"547¹r++r++;"''""'' ÿÃwÃ)5#"5477632#"''7632#"''&5432:"''##''¯++¯++:ÿûƈ7'#"'&54632^hi # lih$ &:ÿûƈ7'7'&547632#"'«ih$ #chi $ :ÿûƈ7'77632#"'&547¢hi $ ih$ &:ÿûƈ77#"&57632Uih% $ hi 1 * Öx7'#53'&5432#"5477#53µ„} ++ }„B '' * Öx)/7#"''&54776323'&5432#"5477#77'#c++ O ++ OV\'''' -ÿÿÓ·7#'337677ÓHHIW·¸¸99M9  9Fº· 735#535#53#F]XX]ttA8·<Ä· 73#'#67<ˆ88nT·©©_C¼·7#7¼ef···B2¿‚$7#"'#"&54632632&#"33'&#"32¾ 4  4 1Ϧ7#"3#33#"&5463ÏD?ŠŠ =DB-/0,¦/0)""*1Ϧ75327#53&##532#1D= ŠŠ>EC+0/-0/*"").Ò·3533.’·¤-Ò·3'733.kg¨¤ ÿÃaÃ73#3#N.Ãÿÿ7ÿÃIÃ73#7ÃÿA#¿—773#'A5 <-)#tt\\A#¿—773#'U)-< 5—\\tt4 Ì«7#54&#"#54632Ì+!"* D$$$$DE*0/,4 Ì«73326553#"&54*"!+«E$##$EE+//+42Ì‚%7"32776632#'2654&#"#"&546Z     ‚     4̸%)-7"32776632#'2654&#"#"&5465353Z     ttt¸     {)Fºµ 7#"&546325353#"&54632f ttt£  A4&  Fº— 7535353Fttttt„33FºÉ 7'575353ºtt\\ttttD< </./)FºÉ 77'55353F\\tttttX./< <)"Þœ 7'57'57•ss\\Iss\\< </.< </."ßœ 77'5'7'5k\\ttI\\ss+./< <./< <Fºª77'#7'5777¨ (:@&@% ª,!07 !)[Fºª7#7577'577¨(C %8> "ª6 #( /!/F1Ϧ7#"33#"&5463ÏD$$$$DD+//+¦+!")1Ϧ7532654&##532#1D$$$$DD+//*)"!+1϶7#"33#"&546353ÏD$$$$DD,.--Zž¶' &¶1϶7532654&##532#531D$$$$DD--.+Ež+& '+ã·353533ZZ¤¤-Ò·7#'735Ò¤“{z··¦¤ŠÿøåÁ 7#"&54632&&''3667##5å<))<;**;()H(HZ(\);;)*;;")II*Y''FÿøåÁ #7#"&546324&#"326'#"&54632å<))<;**;1!!11!!1B\);;)*;;*"00"!00!  'åŒ 74&#"#4632Ò1!!1;**;'"00"*;;*ø·#'+/49753'#53'33733733#3##'##'73&37#37#3'#7##7##+,"&,Q##_#2#A gE<<<<<<EEEEW!7J%(, ÿÿÃjÔBëÿâI&&'7I $  ÿãK' 74632#"&732654&#"     M(µ‘7'7'7µ#"Œdedd"Þ±7&''6766327&#"Þ?  /- ?O   6  (,19E ,€ÿíÄÌ'7Ä552 opi<ÿí€Ì7'7'7€522\ohi€ÿíäÌ '7'7ä662552 opigopiÿí€Ì 7'7'7'7'7€522633\ogipogi€\ÄÌ7##53Ä-D¹]p<ÿí€\#5353€D-]€\ÕÌ 7##535#35Õ#2U5™=p#P=+ÿí€\ #53535##€U"3"3<_O<€ÿíÐÌ#53ÐPP22ß +<:-0ÿí€Ì#5654'53€P22P-:<+ (Ø· 7#53##5#53ذ°MM°¢Jmm3̨7#53#53Ì™™™™u3—3€ÿì¾Ì'57¾ 55 '¨–Bÿì€Ì7'75'7€5 '' 5–€ÿíÕÌ#53'&&5467#ÕUU!!  /ß +;:+98Â+ÿí€Ì#5654'535#€U!!U/   +:;+ ÑÂ89¥šýÙ 7#&'73#&'73ý'š#%#šZÙ 7#673#673Z / Ö#%#%ÿßZ 7#'67##'67Z "#'#;ÿýĹ"7#"&547&5476732654&Ä &%%"/ ' 2,²("#  %U/ÿíÑš-3=&'654'#"&54747#5334767#63267'6&''32ƒ@ *0( 7; /") ! )''   (X  ÿðåÇ,2<&'654'#"&54747#532747763267'"6&5532†O+6?6  ^a =*.#*   -" 744 3#p!& ! 1ÿõΊ7#"&54732754'7u  l'2',)"#/ =5:Bÿøæ»7#"&547326754&'7k  ‘  >F555$(+()= )Z_)?ÿíÁ™7&'7'6654&#"'632°#10". 0-!(Š © !&ÿåáÉ7&'7'6654&#"'632±&FK7 L14EF8!#=· Ý %!&2+ÿîÕ.7&'7#"&574#"'67''277632327ž6$d #*1$ ? %  ‘© ,4/!ÿñçÇ/7&'7#"&&554&#"'67''277632327¥B8l '3A ([4  ¹Î   1>D4  +ÿïÕ™087&'632'6654&#"#"&5475##53275367#7325Õ  !<  5 "h! b'  *"! <  ÿóçÉ087&'632'654&#"#"&5475##5327'367'7325ç"! '+''? #B$ )~,‚""#9*#(' E  ÿî÷É"(4'327654&#'67'676732#"7&'7Y  ) ˆ    7 ]5 6P-I0T @/ 0ÿîÿÖ(.47&'74'327654&#'67'676732#"7&'7&'7ÿ  œ  ) {    ±  Ñ  7 ]5 6P-I0²  s @/ 0ÿñáË07&#"327#"&546327&'#527'#527'777á= "'5&**%'M-4:3# *F=Hp   ÿñøÛ <7&'7&'7&#"327#"&546327&'#527'#527'777ø     = "'5&**%'M-4:3# *F=H·    Q   <ÿè¿Ï&'&546767¿N "7I GH  0>A<ÿèÿÖ7&'7&'&5467677&'7ÿ  5N "7I GC  ±  ÎH  0>A‹  ÿëëÆ 7&547"'65'#'5327'767>Ä"71'Ã2D<>L4E8< 1621ÿëÿÖ ,7&'7&'7'&547"'65'#'5327'767ÿ    ¥Ä"71'´  "   2D<>L4E8< 1621&ÿüÚ­7"'5327#"&547327ÌW$!:+!2>* 25–« &ÿüøÜ $7&'7&'7"'5327#"&547327ø    T$!:(!2>* 25¹  #  (« ÿ÷ãÌ'7&#"327#"&546327&'##'327'77ãD.#.+ **(%$1@ M‘2  % ,ÿ÷ñÛ 47&'7&'7&#"327#"&546327&'##'327'77ñ    D.#.+ **(%  $1@ M¹    62 % ,?ÿöèÇ7#"&54733267è /("#' U5*z“%,?ÿöèÌ7&'7#"&54733267'&'7â   /("#'  ª  i5*z“%,@  ÿëðÌ ,7'67'#"&546325574'3732654&#"ðR ", ;wvSš  –& &-( T  ÿëôÛ ,87&'7&'7'67'#"&546325574'3732654&#"ô    $R ", ;wvSš  »    5& &-( T  ÿöñÆ)7#"'72675327#"&57577375537ñ2Q *)523Q2z( "@ %@43 ÿöÿÛ 67&'7&'7#"'732675327#"&57577375537ÿ    2Q *)523Q2»  "  B( "@ %@43 ÿõîÃ'7#"37#"&5467''677''77677î. 7* 1#+O^rO("8b >9ÿõýÜ 37&'7&'7#"37#"&5467''677''77677ý    . 7* 1#+O^rO("8»  $  ^ >9ÿòéÉ,7'674'276767&#"'632#"&54732((S;1. $% a87Y$=o  ÿòñÏ(87&'7'674'276767&'7&#"'632#"&54732ñ  T((G  ;1. $% ®  2a87Y$  Mo  ÿõãÍ'7632#"''32654&#"'67#527767ãY %!$-,"" !)$ 9 J&•  #5*ÿõþÜ57&'7632#"''32654&#"'67#527767&'727þ  Y %!$-,"" !)$ 9 6*  »  :  #5* -ÿùÓ…'654&#"'632XjIH!6Jÿÿæ®'6654&#"'632OQ4"+CM$2)@%$$&.3ÿÿþÚ 7&'7&'7'6654&#"'632þ    ‡Q4"+CM$2)@¾  "  Á%$$&.3ÿóéµ7"3&5467''é6 )*7ssµ4K2 ÿóîµ7"3&5467''&'7&'7é6 )*7ss×    µ4K2 4  #  *ÿöàÈ7#"&547&576732à::+9Kh5 /)6!&)#*ÿöîÓ#7&'7#"&547&5767327&'7î  ::+9Kh5 /3  °  ³)6!&)#–  ÿïðÉ,77'67#527767&'7&'#"&54632&'7&#"326Ž# _ * !) 3  ‘M. )F' ’ *N  &ÿðéÀ 7&547"563#"&54732D±H53J !2& &¾8B&,'(M40Ž  ÿóøÆ,2;E7'#"&54632654&###"&547&'767672'6&'327&#"32ø  0"( s  }      ##KG/ '*p :'7 ÿòøÄ/97'#"&54632654&#"#7'677'3737632&#"32ø 1)*  /$)   #;cF%((* /&2  ÿõìµ&&'654&##"&54632'3267654#"ŽP,"$@0-;Á % F(?.+>4%TD :'"ÿóöÇ(37&'#"&54632''27'367&#"32'&547ö 2U!)1 !m N,+ L   ¹0[.1M<"ÿóþÛ .9D7&'7&'7&'#"&546324'#"'27'367&#"326'&547þ     ,3  l½  #  « 9,+ V  °0[.1M<"ÿóþÚ :EP74632#"&732654&#"&'#"&546324'#"'27'367&#"326'&547É   ,3  lÀ   ´ 9,+ V  °0[.1M<ÿïõ¾'7'&'#"&5467''7732654'7õ/%!'?$ I,3(#9 C!0023ÿïþÛ 37&'7&'7'&'#"&5467''7732654'7þ    /%!'?$ ¶  %  s,3(#9 C!0023ÿïüÖ ?74632#"&732654&#"'&'#"&5467''7732654'7Ç   /%!'?$ ¼   x,3(#9 C!0023 ÿóôÁ &-7&'7732654.5467#"7&'7''67¸9<J@     ˆ¢ ¯¿  "   G! F (: ÿóûÚ ,297&'7&'7&'7732654.5467#"7&'7''67û    #9<J@     ˆ¢ ·  &   ¿  "   G! F (: ÿóô× 8>E74632#"&732654&#"&'7732654.5467#"7&'7''67½  9<J@     ˆ¢ ½   ¿  "   G! F (:ò¢7&'&#"'>32ò(C 9 8  d P E Clò¾ 7&'7&'7&'&#"'>32Û    <(C 9 8  d  "  Š P E ClòÆ (74632#"&732654&#"&'&#"'>32—  M(C 9 8  d¬   ™ P E Cl ÿðïÄ.87#'47&'#"&54632'#'275##53277#'&#"32? Æ  +)*(,# +C&0  Â-K*0UH7½ 8$$C   ÿðþÛ0:C7&'7&'#"&54632'#'275##5327'7'7#'&#"32'#'47þ    +)*(,# 7  '0  e ¸  Å 8$   #C  º-K*0UG8 ÿðüÙ1=GP77#&'#"&54632'#'275##5327&54632#"'32654&#"&#"32'#'47Ò'  +)*(,# 2  +  e ©#C  8$  ª º-K*0UG8ÿòãÅ%07&'#"&546325#53275#535377#&#"326ã) 6 H1T5NNNN0G  +# *  ÿéø¶"+7&''667&'#"&54637''773'326ø %*$ %[„ C # ! W&2(! 9A  ÿôíÈ-9?7&&54677#5357327654'7#"&54'32654&#"7&'79 /-.+ /1  ½'     %+ ,  +#!ÿòçÊ%/'654&'#"&547&'76767'76'&'32 X 3&%*k   ;"CE#1 +"K†%*J -ÿòèÇ+7"5747#?676732654'7#"&54R&=>?6=%5B )((O *'!#    %ÿîÛœ(7732654&#"'''67'767'7632#"ƒ   $     ( jj &&ÿìðÆ(77232654&#"'''7'767'7632#"„$  -0    $!3"ˆˆ  23&*!0ÿèÐ'0'67&'67654'&547367'7#76654&ˆ  '(#  %2 %,"$- !!c: ÿêäÇ)27'67&'7654'&54733367'7#7654&” (  5#(+#3 6%*3-<? ( (|8 -1ÿòÏ—"7&'#"&54632&537&#"326Ï  <;&;    >+#7 ÿôãÂ$7&'#"&54632&577&#"326ã $( M31H  q G  +ÿõÕÃ!7&'7'32654&#"'67632#"«2.8=''1 %$!&04«Å E6  2ÿïÎÂ'67654&#"'632'&547k 5U ? %&@$¿+&$&/'$ÿôܾ)373654&#"&'7''767632#"&54632&#"327 #3 q1(gP)1-#  `@ "&  ÿñùË.7#"&574&#"#47'677"'757632327ù   !/  ,/!  .X 6:02 (%.( ,Z'&ÿöÚ¼$'32654&#"'67''77632#">$$#1-578"m J&/- !(2= #(ÿðØš#'6654&#"#7'677'7737632…&' !" &#29 $"  DÿóìÆ$'6654&#"#67'677'7733632ˆ 1&#/ )* .%% # 1b0 '-* (&"Tÿòå¼&.97654&###"&5467677''732#"&54632'326&#"327Æ "" ,&;Y ,.(![8 [   H/!19(! ( H2 ,)ÿíï¿DN&#"#&#"'67&546326654&#"'675577632##63236632'4&#"6ï "$*! 69Xo 9 *)  !_   -#'   "(  ÿóåÉ27#53327#"&547&&#"'67#57767366327åB9 -33#M "D >"C?W,& $ !"+    ÿóæÆ!7#"&574&#"'67632327æ!  (# #Z<*) C€K  2* WÿåöÓ #7&'7&'7&'7'6654&#"'632ö  9&FKW  ƒ L14EF8!#=µ     Ï %!&2³õÚ 7&'7&'7õ    ³  !  Á¦öÛ 74632#"&732654&#"Á  Á   DÚ 7&'7&'7D  ³  !  ¦9Û 74632#"&732654&#"  Á   D ¼¨ 7#"'677&'7¼] &,1@ QWD б7&'7#"'677&'77&'7Ð  ] &,1>  ’  e QW/  0ÿîד7'67'577'6655Ñ"! FA“P& z#(#$ &ÿðë¼ 7'67''77'6655å, ­ºd!. '¡5%*0+- &$.'ÿñÁž 7#5'67Á U3p_*7ÿòÖÈ 7#5'67Ö((. m=¸Ž}6A7ÿíÉœ7'667##53533É,: 4$c<>q?6 (32I%ÿîÛÉ7'6675##53533Û5I >0„NP”PE 57@X%%,ÿýÔ‚ #535#53#3Ô¨H?”>IXXìª 7#535#53#3ìØ`O¶O`ww+ÿïÕš7#"''3255'67#57533Õ. #28#U^.dY B(+ ÿòéÇ7##"''325''67'7'37é9 )HL,pz9‡u]1,+8))ÿôÚÉ7#"''32677''667#5653Ú  F&&"#AC›Y, !B5B9/ÿôï× )7&'7&'7#"''32677''667#5653ï      F&&"#AC·     Y, !B5B9/ÿïçÈ7''7''7'777çW  ^]RPRPYISS-)(-ÿïþÚ 7&'7&'7''7''7'777þ     S  ^]RPMLU¶    ySS-)(-ÿíÖË7'667''6777Ò8608Z*T’EGA7# (G ÿíþ×"7&'7'667''67777&'7þ  "9608Z*T  ¶  7DH@8# (G   ÿñëË7#'6677'677ëA-4 .%A* ‚.9.&+C ÿñôÕ 7&'7&'7#'6677'677ô    A-4 .%A* ±    9.9.&+C (ÿöØ© #5#535#53ؘ˜•­ s$ÿöÿÜ 7&'7&'7#5#535#53ÿ    ——”­º  %  ÆsÿòíÇ7#'6655##5#53533'33í-d4(O..O-zO +'EE2255ÿòÛ $%&'7&'7#'6655##5#53533'33    -d4(O..O-¹  %  BO +'EE2255ÿðåÁ 7&'7'667&'7€) +ƒRD BKf.& /,'!" XT:7ÿñãÀ 7'667&'7ãFH e¸¦!UT` 8! (!ÿñþÜ 7&'7&'7&'77&'667þ    y‡ JG H= ¼    ` 9 +PS ERÿîâÌ7&'67&'767'#'6737ÞB: 8! + R1;N˜CN ' --76 ÿîÿÜ )7&'7&'7&'67&'767'#'6737ÿ     A; 9  , S2<Nº    %CN ' $-76 ÿñéÂ7#&'6655#535'673é[#1 ( __!)j4 *[[*- %#( +ÿñÿÜ&7&'7&'3#&'6655#535'677ÿ    )\\"2 )__!)g4 ¸  $  +*- &"( ,ÿïÔ”7&'77'>7&'7 M.0 ',[ Y  #?/" &>H  ÿîçº7&'77&'6767&'7’g  -ªµš(=D*.(#ÿðÜÁ 7&'7&'7&'7ÕQR^>;ULX?rm¨ X l  ÿïìÅ'&'76767&'7ì 9y8;:ÿîîÂ7#"'77367î/3O7_) ¹~5K+ÿöÕ± #5##535#Õzªz »–8ÿîÈ 7'>7##5È'. '#`@3 %-8O%ÿñÚ¹ 7'665##5Ú18 E-¹LE( >OKbÿðìÇ7##5#535#53533#3#5#ì5‹5*€--5M>&66L&&LLLê´ 7'67'#537'53533Þ"š Ô\_–0 $”hi$ÿðÜ·7&'667#537'#5Ü:G 40 “6g·bS +$&ÿóå¼ 7&'7'667t"( +’QSKKŒJD =E&ÿîÿÛ 7&'7&'7'6677##53533ÿ    6H ?/‚KP½    1PE 47@X%%3ÿïÍ›7#"''32675#'667#57653Í  1 45wH$3(3)#%*ÿïÖž7#'6655#'673Ö4#+ %0#qa"- ##4hE˜t 74632#"&h  \  #NÜk7#53ܹ¹NF&¶›7&'7¶(5066.&F&Ñ· 7&'7&'7&'7Ñ    (50˜  %  b6.& ÿõàÁ7#"'53267#'67à   ¢ ‹a L #ÿõÝÇ7''67&'767#'673Ý6,>8%(% -(Š  † !." % +'&Ú´7#54##"#546332Ú s Œ  ž "Þ®7#"&554633#"33Þ© ¨˜ š   m ÿõâÂ7#"'53265#'67#'67â F@ 7HŒg0 SY'%I  ÿûå¾7&''67#53673#7&'7å” )LV  Zd*y   ,9 /4 %(ÿùØÁ7#"''3267#'7#53Ø  A fu Z.  B1-ÿ÷áÃ7#"'53267#'67#'67367á  9F =O  A Šg, K]M+ÿ÷ÕÁ 7&'677&'67ur 0//< 1.1Š*1&- ./24ÿûã·7#3#"'532677#'67#53ãpr j=Ç¡ 9(ÿõå¹ 7#'6653å§¢EG!JN7ÿöÉÁ#5#"&55332753Éc  V Lk hDÿó¼Ä 7&'67¼%@6%"-4,4;6/2+ÿ÷äº7##5#53äYXÈ£¬¬ä¾3#535#"&553335332553##3äÉZ; .*  7X4 OD __ DO 4ÿõâÃ7'67#5'67©:5 93H"*%/eP²/*1"_O%Rÿøâ¿7##'6732554##532â u%"~ ‹˜ t D$#I "  )ÿþ×»!7##"&554633254##"332'&'7× ‰ Š  o o ! # ˜ Š  8  ÿöà¼7#"''3265##5#5à   [7¼c9±±ÿôãÆ7#3'67#'7#53673ãuj: .w8C l†(D 5/#ä¼7''6767'7äLN 7"3c  RT CR )ÿöâ¾ 7#5&'767â*1,&&*',¬()ee4 "-#*ÿûå¸7#'"327#"&54635#53åT5A(+''_Ê¢9> H!!0ÿõæÆ7#"3267#"&5475#53533æT @'*K``T‰' A!4!((ÿùäÀ7##5#33#"&55#53533533ä.A r ))A.p::X  f;;;;ÿ÷ä¿7#3'67#'67#'67#53#36ä@ 00B ;= "ÈV9 ;ª 87+4O?%$ÿüåÁ7&''7å:Yp HaqÿüâÃ7&''67'6767677'7âTC 11: ( $,4Gf   5)-" G? #ÿþâº7&''67&'767#53â',=9%#/ *,‰’&-  #1<ÿóä¼7'67#'67#533'#36ä97Œ 0œ $%GE ZI3$ 0??ÿôá¾ 7'67#'673á œ ‘eG* $> %,)ÿ÷äÀ7#33#"&55'67#53673äN šll!ìž 7'6753&'3#5#· % .* !žXDc,AAdl2Ñ™733#2‹Ÿ™i"åš7#&''675#5327Û&0 $ $ ,(X#-š :*&8 hë¢ *7#53277#553#"&546"32654&ʸ...šC'MdQ"Ûš 73#67535#53#5##535##O< $,/<;¤///š@*P'~~'?--$ìž 7'6753&'3#67535#· % .* !šS@ (+@?c,AAd?+Q#Þš 73#67535##3#53#$R?"&.1?>µ>CWR>šB(N%}"àš7#5#3#67535##53'3373Û\\O<!)-<;½ešA)OVPPPP"ê¢#/7#53#27535##553#"&546"32654&È7nM: *,98Çw2"  ¢A)O  1Ì› 7#5##535#Ìsss›}}dQ3Ì™ 73353#5##735#3qqqq™&&{)&Ü™ 73353#5##735#73353#5##735#&1111J0000™&&},9&&},&îž 7'6753&'3353#5##735#¸ " *+ !š1111W%:!!;h&&},"Ùž7'66753&†E )/%$ 8h2 6"!4 íž 7'6753&''6753&° ) 13 'j # +! ^(; </)=07Ê«753#"&546"32654&w!&#$&!)›"##"#Þ›7#&''67#5ÙNO >A PO›D2/Cë›$7#&''675#5##&''6675#5ä) $ # +" '  " $›* *(; $ #( * #Þª7#5#&''667#5«SMN ?B ',Oª&2&$&-Í› 73#5'75#- ŠŒŒ›}=1К 7#3#3#5Ή……‹Ÿš&}(×›7#5#53'3373Р§¯0  ) ›kOOOO) Ù© 7#5#553#"&54"32654& D}°N5! ?©#& && jÿñºÈ733##j<<ÈYk[ÿñ¬È 73353#5##[))Ä\`×dWiÿñ¹È 733#3##i<<<<È=)JZÿñ¬È 73353#5##735#Z****Ä59×K>Q-Gÿñ§È73#5#53“LLÈ×q7ÿñ¹È 73#'53#5#5¥3;È×{XÇ\Fÿñ§È 73#5#535#53“MMMMÈ×E+2ÿñ¹È73#'3#5#535#53¥3@@@@È×ÓÇ:*&ë—7#5353ëÕ`9^^ÿñêÈ733##5'7537£33Ž;BÈac> dbÿñ×È73753353#5##5'7B;|0“Ny]b×bU9 ÿñËÈ 73#5'7537·œ@KÈ×D^[(íš 7#53'3373íÚ>4  ;WW__ÿñë’7##5#5ëbb’ÿñÎÈ73#5#53''7#º55f:Ž=È×^nÿñ×È 73#'3#5#53''7#Ã-**M/p*È×ÓÆS eÿñÌÈ 73#5#5'7¸BL¥È×ba ÿïë‘ 7##5##5#5ë;9:‘ŒŒ<íO7#5íÙOÿñÇÈ73#5'7³ È×TvÿñŠÈ73#vÈ×%æ™ 733#'327#†L`a""(3™i|i !àš7#3#5327#ÜDH[d!'0šW}i ìž 7'6753&'327#¸ ' 1) !¤"!(2b,AAei æ¥ 7#73'327#­9t;;® &0¥…[Jhi çž$7'6753&&5'3#67535#73#5#¤  =)%'))A8$6&'5 #  u?+Qlçš7#3#5#3#67535#ãCGZpS>"&.1>?šW}A)Oïž*.7'6753&&5'3#27535#53#5##535#­  ˜9%$%n6&'6 "  v@*P'~~'?--î¥7#73'3#67535#µ9t;:´T? #,/?@¥…[JiC'Míš  ,73#67535#7#553#"&546"32654&T?"%-1?@Ðs1  šC'M$   #Ûš 753#5##535#'#5##535#Ç///...s'~~'?--f||bOêž 7'6753&&'#5##535#® " (3 >000U#9#$8 T||bO#ê¥ 7#73'#5##535#³7o87U...¥…[Ji||bOBÿöÀ¿ &7#5##535#53#"&546"32654&ÀVVV   !¿UU=*V  Þš73#5#53#5##535#‰UA$777šl&~~&>,,çš7#3#553#5##535#âEJ]$777šW}'&~~&>,,êœ &7'6753&&5'53#5##535#73#5#l  ,{C/9 9 &  M'~~'?--flíœ (7'6753&&5'53#5##535#7#3#5l  ,º")=9 9 &  M'~~'?--fW}îš 7#&''675#553#5##535#ã'2 % & ,'"777š7'"6 '&~~&>,,æš 7#3#53#'53#5##535#á?DWR?:777h%} &~~&>,,CÿöÀà *753#5##535#53#"&546"32654&¬UUU  "­[[-*  'ÿöÛà .:753#5##535#'53#5##535#53#"&546"32654&Ç(((<(((;  "­ZZ,,ZZ,+  àž 7'6753&73#5#[ ' /4 (_K_(==dlæš 7'6753&733#J !*/ #3L`V#77hiæš 7'6753&7#3#5J !*/ #ŽFK_V#77iW}Ûš 7'6753&753#5##535#J !*- "t///V#78A'~~'?-- õš 7'6753&7#&''675#5D ! '. $Ÿ'1 & % .'U"7 7h 9(%7 *Ѥ7#73P§W6f¤‡dQêª)5753#"&546"32654&753#"&546"32654&C  X  ›# $$ #$ $$ $B¾¢753#"&546"32654&v"!"Ž æ¢'753#"&546"32654&'6753&?  ] ' /* •  !!!*AAç¥ 7#73'53#"&546"32654&®9s:;Œ  ¥…[Jd  !!!,ÿôÒ¿*7#5#53'337353#"&546"32654&Ê–ž¦*,  3  "¿B''''(  ò£ *9E7#53#5#53#553#"&546"32654&753#"&546"32654&_5ª6!lámH  _  £!    í¢7#553#"&546"32654&íÙc¢6ÿñíÈ733#3##5'7537537¬,,--–($&ÈG(BA _^ZYÿóÍÉ73753753353#5##5'7735#5{#p–SQOz7=ÖOD8 #ÿñÊÈ73#5'7537537¶š'%(È×A _^[YÿñÌÈ 73#5#535#53''7#5#¸""""w)”$È×C qplÿñÔÈ73#'3#5#535#53''7#5#À(a!wÈ×ÓÆ5gfdÿñÌÈ73#5#5#5'7¸+$*¤È׃cb]\ gC™v 7"&54632€  C  IÿñÊÈ73#'"&54632¶S  È×T  ÿíþÌ #654'3'#&5473#5#áÐ |g0>@1-DC´1@>0+CD-6{hÿíþÌ #654'3'#&54733#áÐ)n‚0>@1-DC´1@>0+CD-3eÿíþÌ #654'3'#&547#3#5áСbh|0>@1-DC´1@>0+CD-1TzÿíþÌ #654'3'#&5473#3#535#áÐ'r\dx\^0>@1-DC´1@>0+CD-2C(NÿíþÌ #654'3'#&547#5##535#áЗBBB0>@1-DC´1@>0+CD-1~~fSÿíþÌ ##654'3'#&54753#5##535#áЈKKK0>@1-DC´1@>0+CD-W${{$>++ÿíþÌ "#654'3'#&547'66753&áÐd/ !  00>@1-DC´1@>0+CD-c1 2!2 ÿíþÌ ".#654'3'#&54753#"&546"32654&áÐX!" 0>@1-DC´1@>0+CD-/$$$#ÿíþÌ "#654'3'#&547#&''67#5áТ8> 0 . 3 70>@1-DC´1@>0+CD-2A1-AÿíþÌ '#654'3'#&547#5#&&''67#5áЄIi:= " - 1 60>@1-DC´1@>0+CD-'6 &(6ÿíþÌ #654'3'#&5473#5'75#áÐ&}nqi0>@1-DC´1@>0+CD-6o5ÿíþÌ #654'3'#&547#3#3#5áПd^^n‚0>@1-DC´1@>0+CD-2&~ÿíþÌ ##654'3'#&547#5#53'3373áРˆ  &0>@1-DC´1@>0+CD-2kOOOOÿíþÌ (4#654'3'#&547#5#553#"&54"32654&áЀCp•@1;0>@1-DC´1@>0+CD-& $ $$ ÿíþÌ ##654'3'#&54733##''67#53áЇh =?T0>@1-DC´1@>0+CD-SRD[ÿíþÌ ##654'3'#&54733##'327#áЇu,-2>0>@1-DC´1@>0+CD-SR›]  ÿíþÌ %#654'3'#&54733##'3#27#áЇtZF3!390>@1-DC´1@>0+CD-SR¢PÿíþÌ )#654'3'#&54733##'3#27535#áЇrR@&+26@>0>@1-DC´1@>0+CD-SR¥D,RÿíþÌ ##654'3'#&54733##'3#75#áЇtUUB.0>@1-DC´1@>0+CD-SR¡tNNÿíþÌ #'#654'3'#&54733##'353#535#áЇ`/W//0>@1-DC´1@>0+CD-SR|%vvc++ÿíþÌ *#654'3'#&54733##''66753&áЇC #  0>@1-DC´1@>0+CD-SRb* 0"!!. ÿíþÌ *6#654'3'#&54733##'53#"&546"32654&áЇQ  0>@1-DC´1@>0+CD-SR¬ %"'&#&ÿíþÌ ,#654'3'#&54733##'#&''675#5áЇ$/ $ % /'0>@1-DC´1@>0+CD-SR›6$"7ÿíþÌ /#654'3'#&54733##'#5#&''67#5áЇEV'(  $ +*0>@1-DC´1@>0+CD-SR­'.-ÿíþÌ (#654'3'#&54733##'67#53'67'áЇ0BXH &?0>@1-DC´1@>0+CD-SRu a,( ÿíþÌ )#654'3'#&54733##'3#3#27#áЇsYE@@-*70>@1-DC´1@>0+CD-SR&ÿíþÌ +#654'3'#&54733##'#537737'7áЇdl0>@1-DC´1@>0+CD-SR™"?=<ÿíþÌ #0<#654'3'#&54733##'#5#553#"&54"32654&áЇ&;Tl-$. 0>@1-DC´1@>0+CD-SR­#! #$ ÿíþÌ "*#654'3'#&547#&''67#5##5#5áÐ¥:I :7 > 8™MM0>@1-DC´1@>0+CD-  ^RRÿÝÿÛ 74632#"&732654&#"73#5#J54KK45J D//CC/0C2€l\5JJ55JK4/DD/0CCkXÿÝÿÛ 74632#"&732654&#"733#J54KK45J D//CC/0C7n‚\5JJ55JK4/DD/0CCYÿÝÿÛ 74632#"&732654&#"7#3#5J54KK45J D//CC/0C±em\5JJ55JK4/DD/0CC HnÿÝÿÛ #74632#"&732654&#"73#3#535#J54KK45J D//CC/0C8{gn‚gg\5JJ55JK4/DD/0CC ?!GÿÝÿÛ #74632#"&732654&#"7#5##535#J54KK45J D//CC/0C±TTT\5JJ55JK4/DD/0CC rrZGÿÝÿÛ #'74632#"&732654&#"53#5##535#J54KK45J D//CC/0CSSS\5JJ55JK4/DD/0CCooA..ÿÝÿÛ &74632#"&732654&#"'66753&J54KK45J D//CC/0Cv/ !  0\5JJ55JK4/DD/0CC0$ )) ÿÝÿÛ &274632#"&732654&#"753#"&546"32654&J54KK45J D//CC/0Cl"!!\5JJ55JK4/DD/0CC !"! ÿÝÿÛ (74632#"&732654&#"7#&''675#5J54KK45J D//CC/0C¶8@ 1 - 87\5JJ55JK4/DD/0CC 4#!2ÿÝÿÛ *74632#"&732654&#"7#5#&''67#5J54KK45J D//CC/0C”Bd8? 1 - 3 8\5JJ55JK4/DD/0CC+ +ÿÝÿÛ !74632#"&732654&#"73#5'75#J54KK45J D//CC/0C9|nqh\5JJ55JK4/DD/0CC o5ÿÝÿÛ #74632#"&732654&#"7#3#3#5J54KK45J D//CC/0C²f``j~\5JJ55JK4/DD/0CC nÿÝÿÛ '74632#"&732654&#"7#5#53'3373J54KK45J D//CC/0C¶ƒ‹“#  "  \5JJ55JK4/DD/0CC Z;;;;ÿÝÿÛ -974632#"&732654&#"7#5#553#"&54"32654&J54KK45J D//CC/0C“@gŽ?6\5JJ55JK4/DD/0CC# " ÿÝÿÛ '74632#"&732654&#"733##''67#53J54KK45J D//CC/0C”\ 55K\5JJ55JK4/DD/0CCCB>VÿÝÿÛ '74632#"&732654&#"733##'327#J54KK45J D//CC/0C”c$#*4\5JJ55JK4/DD/0CC@EˆNÿÝÿÛ )74632#"&732654&#"733##'3#27#J54KK45J D//CC/0C”eP<).0\5JJ55JK4/DD/0CC@E‹E  ÿÝÿÛ -74632#"&732654&#"733##'3#67535#J54KK45J D//CC/0C”eP="&/1=<\5JJ55JK4/DD/0CC@EŒ< FÿÝÿÛ #'74632#"&732654&#"733##'3#75#J54KK45J D//CC/0C”eMM9%\5JJ55JK4/DD/0CC>GŠc==ÿÝÿÛ '+74632#"&732654&#"733##'353#535#J54KK45J D//CC/0C”Q"J""\5JJ55JK4/DD/0CC>GniiV%%ÿÝÿÛ -74632#"&732654&#"733##''6753&J54KK45J D//CC/0C”: " + \5JJ55JK4/DD/0CC@EP"6$ÿÝÿÛ &2:74632#"&732654&#"753#"&546"32654&733##J54KK45J D//CC/0CM 5\5JJ55JK4/DD/0CC @EÿÝÿÛ 074632#"&732654&#"733##'#&''675#5J54KK45J D//CC/0C”'  % ,!\5JJ55JK4/DD/0CC@EŽ3 3ÿÝÿÛ #474632#"&732654&#"733##'#5#&''675#5J54KK45J D//CC/0C”4D!&  ! '!\5JJ55JK4/DD/0CC@E‘# $ÿÝÿÛ ,74632#"&732654&#"733##'65#53'67'J54KK45J D//CC/0C”*7M@ $ 7\5JJ55JK4/DD/0CC@EkV'&ÿÝÿÛ -74632#"&732654&#"733##'3#3#27#J54KK45J D//CC/0C”cN:33%1+\5JJ55JK4/DD/0CC@EŽÿÝÿÛ #/74632#"&732654&#"733##'#537737'7J54KK45J D//CC/0C” Y d\5JJ55JK4/DD/0CC@EŒ:97ÿÝÿÛ #'4@74632#"&732654&#"733##'#5#553#"&54"32654&J54KK45J D//CC/0C” 6I^%' \5JJ55JK4/DD/0CC@E“  ÿòëÈ)7#4632#&&#"3773#'#53#"'33267#I5;/J.'1#' $! JE<+M)!02U6=G .%#!2&T#4>F-%ÿáôÑ,77'67'577'6655#53#"'75367''6554'3t  %3a 4Àeeu L Á    "Š! b=    ÿâôÕ $/377#"''32657#'67#553#5##535#&'66765#53#53t "' #"#ª<X<=6,Êee½0)#2 +SaL>>*>*   @IF> ÿëíÖ7''7''7'777#5##535#w-10+**).w<X<‘++µaL>>ÿãôÚ!%6H7&'7'67'#'67377&'7'5&'667'#57''276767&'7Š  0  ) rTT "%#PU z> !  É #& 4 &   .  »O U ÿäøÔ &.C7'67'327#"&&55'7577&'7'667#'65#535'673t  #; E M+,''r/&22&8/¬ -    ($%£   ÿãøÔ &.87'67'327#"&&55'7577&'7'667&'#53t  #; E M+,''q#¬ -    ($%¡ =r&.ÿáýÕ %07&'#537&'7&'7#"'75367''6554'3y#› L  =r&  ¬! b=  .ÿçøÕ 7&'#53&'7'667y#] M+,'' =r&p  (#  % ÿã÷Û #-LRZ74632#"&73254#"&'7''65#53&'#53''67'327#"&55'75377&'7'667d . Òee ‘    # / 5  Îe 'E=* 4IF ÿâøÕ %39?HNR7'6655&'7#53&'7&'7&'7#"'75367'&'7&'77'6=3'65#53å h).2bA.-+"<9™   “ } › ŒFFÕ>4 CG2 7 9 :#^U  ` (C>, "D' #?8ÿáýÕ!1<7&''67&'767#53&'#53#"'75367''6554'3x ) &ee{# L ‡      † =r&! b=  ÿáýÖ #-=H7&'66765#53&'77&'667&'7&'#53#"'75367''6554'3f6,ž  +" .  )# L Ö?*   AJG1(!  $! ’ =r&! b=  ÿãëÏ  *7'665##5&'77&'667&'7&'#53p+#A¸  +" .  )#Ï5,  )'5-(!  $! ’ =r& ÿÃõ¸ +3#'##73'##533632#"'32654&#"õ13 ‚   99¸kO3;:Æ$#$#L ô¸ !3#'##73'&'#54&#"#5336632ô234  99¸k8OMYG‰ ÿÃþ¸ -3#'##73'#"'##"&'#73326773327þ23 ,        99¸kO36FÆX Tb ü¸ .3#'##73'#54&#"#54&#"#5336323632ü13 3  99¸kO 3MY YY Y‰ öà 3#'#5373#'##73'&'n( 10»14 ? 5ÃZ!A;N99¸k3 8 ÿþôÃ&<3#53#'##"&5467754&#"'6325326'&#"327#"&54632ô&  S   Ãà   '  a$""&ÿþýÃ)3I3#53#'#533773#'#"&547754&#"'6325326'&#"327#"&54632ý¤! (² )  7   ÃÃ>6ÃW *9P(   '   `###%ÿÃë· (7#3##53##533632#"'32654&#"ëHCC_¿  ¢@M·¥:Æ#$$#Lë· 7#3##53#54&#"#533632ëGBB_t  ¢@M··YG‰ ÿÃô· *7#3##53#"'##"&'#73326773327ôGBB_j       ¢@M· FÆX Tb  ÿÃöŒ%1>`7#"'332#"&547&547&54632332654&#"#"32654&'#"'##"&'#73326773327ö !   +T #  L       {   ,j  /ÆX  Tb  ÿÃõŒ%1>`7#"'332#"&547&547&54632332654&#"#"32654&#54&#"#54&#"#5336323632õ  !  +U #  V  {   ,j  Y YY Y‰ÿÃïà 2>K3#'#53737#"'332#"&547&547&54632332654&#"#"32654&u' 2/¬   !  ,U #  ? 5ÃZ!A;-   ,j  ñ· 3#5##53353#57#533‚EEo\B>VBDVV·MM·hfûà #3#'#53373#5##53353#57#533[!'(ƒ&&H@(&<(*>7ÃW;:OVV·MM·hfü· '3#5##53353#77##'##53373#57#533¸&&Y@)&<()VV·MM·8-ee-8··hfÿþüº%/7&#"3275#53#"&54632#5##53353#57#533Z &h&&G@)&<'(¯ "'%%6Y .0.0ºVV·MM·hfü· 3#5##53353##5#53#57#533´&&Z  V¢@(%;')VV·MM¢¢·hfÿÃøº"C7327#"'567547632'6654&#"#"'##"&'#73326773327±   %$ *         #9.!%=0 +JFÆX Tb ÿýúº!57327#"'56754632'6654&#"#547##'##53373³  ( &# 1!!  # ,Y%= 1 *bc,’’*c·ŠŠ ÿýðÃ8B3#'##"&546323&55354&#"326327#"'567547632'6654&#"w  J   &# $#"%7ƒ  #:. %= 1 *ÿýëà %/3#'#5373327#"'567547632'6654&#"y' 20^    &# ? 5ÃZ!A;/  #:-!%= 1 *ñÄ77&#"3##5#5754632#54&#"#54&#"#5336323632j  •  À xx  Ä[ ZZV‰ñŒ!53#54&#"#54&#"#5336323632#54&#"#533632ñ  €  Y YY Y‰ZYG‰ÿÃúŒ!B3#54&#"#54&#"#5336323632#"'##"&'#73326773327ú  v       Y YY Y‰CFÆX Tb  ÷Œ!C3#54&#"#54&#"#5336323632#54&#"#54&#"#5336323632÷  |  Y YY Y‰ZY YY Y‰ ÿþôŒ!73#54&#"#54&#"#5336323632'&#"327#"&54632ô     [ ZZV‰)$""&ðà /3#'#53373#54&#"#54&#"#5336323632t( 10¯  ? 5ÃZ!A;NY YY Y‰ úç5W7#57654#"'6323#54&#"#54&#"#5336323632#54&#"#54&#"#5336323632ú3   "  |  ˜   ¤Y YY Y‰ZY YY Y‰ ÿþúç5K7#57654#"'6323#54&#"#54&#"#5336323632'&#"327#"&54632ú3   "     ˜   ¤[ ZZV‰)$""&"úç57#57654#"'6323#54&#"#54&#"#5336323632ú3   "     ˜   ¤YLYG‰úç!C7#57654#"'6323#'#53373#54&#"#54&#"#5336323632ú3   "†( 10¯  ˜   ¤? 5ÃZ!A;NY YY Y‰ úç!Ce7532654&##532654#"'632#"#54&#"#54&#"#5336323632#54&#"#54&#"#5336323632Æ       '  |  œ      —Y YY Y‰ZY YY Y‰ ÿþúç!CY7532654&##532654#"'632#"#54&#"#54&#"#5336323632'&#"327#"&54632Æ       $     œ      —[ ZZV‰)$""&"úç!C7532654&##532654#"'632#"#54&#"#54&#"#5336323632Æ            œ      —YLYG‰úç!/Q7532654&##532654#"'632#"#'#53373#54&#"#54&#"#5336323632Æ       \( 10¯  œ      —? 5ÃZ!A;NY YY Y‰ÿýéÄ%G7#7#54&#"#54&#"#5336323632532654.54632&#"#"În mQ  .    ÄÆÆzG GG Gn     ÿþþÔ8Y7#57654#"'6323'#7532654.54632&#"#"'#54&#"#54&#"#533632632ö,  97 7 #  A  Ž    +ÆÆ¿      Y YY Y‰ÿþå· ,67#532#'32654&##'##"&5467754&#"'63253262+! ¢  GG·\H£   '  ÿþüà !9B3#'#53373#532#'32654&##'#"&5467754&#"'6325326[!'(D& |    >7ÃW;:G·\H£  4 ÿþý· %>G7#532#'32654&##57#'##53373#'##"&5467754&#"'6325326z" %Ÿ    GG·\H£8-ee# 8··  4 ÿþüº!(3<7&#"3275#53#"&54632#'##73'&'#532#'32654&#Y  '± ! &K" ¯ "'%%6Y .0.0º99¸k,  ,G·\HÿþùÃ8AQ3#'##"&546323'5354&#"326#'##"&5467754&#"'6325326'&#"#533632ù   H   $ 9  #$"%4‡&   '  gJ‰ÿþýÄ"@Ybq7#7#'##"&546323'5354&#"326532654.54632&#"#"'#'##"&5467754&#"'6325326'&#"#53632Õ+ +,   :    %o     !  ÄÆÆÄ#$%"1‡!     '  gO‰ÿþýÔ)6Tmv…7#57654#"'6323'#7#'##"&546323'5354&#"326532654.54632&#"#"'#'##"&5467754&#"'6325326'&#"#53632ý*  (+ +,   :    %o     !  Ž   +ÆÆÄ#$%"1‡!     '  gO‰ÿÃåŒ2?7532654.54632&#"#"'##533632#"'32654&#"‘ $  ' m          :Æ#$$#LÿþåŒ47532654.54632&#"#"'#54&#"#5336632’ $  ' "         YG‰ ÿÃîŒ@7532654.54632&#"#"'#"'##"&'#73326773327› &  '             FÆX Tb ÿþíŒA7532654.54632&#"#"'#54&#"#54&#"#5336323632š &  ' #        Y YY Y‰ÿÃñ· *7#'3677##533632#"'32654&#"ñ33  ²  ··· ¥:Æ#$#$Lñ· 7#'3677#54&#"#5336632ñ33  d  ··· ·YG‰ ÿÃø· -7#'3677#"'##"&'#73326773327ø33! Z       ···   /ÆX Tb  ö· +7#'3677#54&#"#54&#"#536323632ö33  a  ··· ·Y YY Y‰îà 3#'#53737#'3677v' 2/«33  ? 5ÃZ!A;i··  þ· 7#'3677#547##'##53373þ33!!h!"··· ·c,’’,c·ŠŠÿÃò·(57#'#'36773677##533632#"'32654&#"ò    ¶    ··‚(Z·NJJN¥:Æ$##$Lò·'7#'&'#'367737#54&#"#5336632ò  l  ··Z ‚·}JJ}·YG‰ ÿÃû·97#'&'#'36773677#"'##"&'#73326773327û    b       ··Z Z·NJJN FÆX Tb ù·97#'&'#'36773677#54&#"#54&#"#5336323632ù    k  ··Z (Z·NJJ N·Y YY Y‰ñà &3#'#533737#'&'#'36773677s( 10±    ? 5ÃZ!A;i·Z Z·NJJNÿ·*7#'&'#'36773677#547##'##53373ÿ   k!!··Z Z·}JJN·c,’’*c·ŠŠ ôà (3#'#5373#5654&#"#53&546323p' 2/¶76$#? 5ÃZ!A;N9 94)--)4þº/3#5654&#"#53&546323#547##'##53373þ66#$€!"9 94)--)4c,’’*c·ŠŠÿüþŒ!:CO[3#54&#"#54&#"#5336323632#'##"&5467754&#"'63253264632#"&'4632#"&à  Œ  $ ¥ŒY [[ [‰Z   '  ÿÃï· 1>3532#'32654&#32654&##57##"&5463237354&#"326- %­   ·#$£:MB“:#$#$IÿþéŒ+7&#"327#"&54632&#"327#"&54632é   c  !…##$$##$$ÿþìÃ43#'##"&546323'5354&#"326'&#"327#"&54632ì  a  !$##$7ƒ]##$$ÿÃûÄ&LXe7#7#'#5373'&#"327#"&54632&547&546323#"'332#"&546732654&#"#"32654&ƒ* *GS  …         ÄÆÆÄ91ÃW3:_ #&%%//0.±    Yk ÿüúº!-97&#"327#"&546324632#"&732654&#"4632#"&|!'*!N¯ &#%%.0-1u#$$#"%%"S ÿþôÃ,5>3#'##"&546323'5354&#"326532#'32654&#32654&#x  &.!&$##$7ƒ(·"$£:MB ÿÃõº/7#"&54632&#"3275#537#"'53277'33677|$'   4y1   .  //.0  $%%%6(›†D DÿþéÃ-73#54&#"#533632#'##"&5467754&#"'6325326z  o   YGÃ:Z   '  ÿüý· $03#53773#'#5373#'4632#"&'4632#"&™ !.0&+./%È·P8JmXQ·OOJmXEû·3#547##'##53373#5373#'û!!ßC>@5c,’’*c·ŠŠ··ZZPgW#ÿþÝà #3#'#53373#"&55#57733#327‡( 10‰ "" ? 5ÃZ!A;LO  O ìÃ$3#53#54&#"#54&#"#533632632+Á    ÃÃYLYG‰+ÕÃ3#53#54&#"#533632B“  ÃÃYG‰ÿÃþÃ)5BNZ3#53#"'332#"&547&547&54632332654&#"#"32654&'4632#"&732654&#"à  !  +T "  µÃH   ,j  C#$$#"%%"*ÖÃ3#53#'#7'373A•!"/, -ÃÃ77GB33BåÃ043#534632#"&#54&#"#54&#"#533632632#53åE  -çY YY Y‰Z‰ÿþúÃ=3#534632#"&732654&#"#54&#"#54&#"#5336323632ú}   Ã~$##$#$%"_Y YY Y‰ÿÃþŒ!3@LX3#54&#"#54&#"#5336323632##533632#"'32654&#"4632#"&'4632#"&à  Æ  ÉŒY [[ [‰H:Æ"%$#L V%ÿþÛŒ.7&#"#53632532654.54632&#"#"Û  ¯ &  ' ‹J‰†      ÿþìº!-7532654'&'&&54632&#"#"7#'33477 ,É**      ‹‰‰L)LÿþøÃ37##533632#"'32654&#"'#'#'36773677¨       Ã/#$$#GT·‚(Z·NJJNpÿü 74632#"&4632#"&p|  e wÿÜŠÜ#3Š$ÿÜÜ#3$-ÿÜSÜ%#4&54654&54654&54653S  $      !ð\ 7&#"5632ð1??1-CD,"#$%%\ð˜ 7#"'5327ð,DC-1??1‚&&$#ð\7#4&##"'###"#66332653332ð )) *  *  \ð©7##"#4&##"&'33323633265ð*  * )) ©  ð\7'#'73ð–¨' (( 5\ðš7#'737𨖑55 '' ð\7#&#"#53ð ,;;, à 11O\ð¬7#533273ðà ,;;, \P22ÿøð\ 7''7''7ðhhpphhp'225U225\ðÁ 7'77'77ðpphhpphh²6622/6633ð\7''7ðhhp'225\ð 7'77ðpphh‘5522ð\7#5#53ðÍà.\ð¡7#533ðàÍ\E.€ð\ 7#5#535#3ð43232>323                ¢   ¡Ð)%".#"#".#"#52>3232>323              ¡ ÿæíÿ÷ #53#53#53í((Y((Z''ÿåíÿù 432#"7#53#53v wCC—CC )%%"#"&#"#"&#"#"432632326323263         ÿäA&'7A  ÿãL' 74632#"&732654&#"     1?vÌ7##53v.E¹z ÿíOz353# .E{ÿâK&&'7K"  E?t 74632#"&  \  ÿïq¶ 7'67#5365#5q"# - EHM¶`RMÿâr7'67'#577'6655o  $P2 y+  ('# "&ÿãs— 7#5'67s  <‹ze50ÿájš7'655##53533j /+ !kA8P6I ÿñpz #535#53#3pa'R&ddÿãp—7##"''325''6753533p    !14be @#"5#" ÿâs˜7'67'''7'777o  % - e* % vx() ÿöp~ '57#53p`;2E duÿæiˆ #5#535#535#53i??<<>Q 4+ ÿâs7&'77&'667&'7M  -!! !0  R " IB @BC  ! Psi7#53sffPÿòzº7'67''77&'655w /)^8&"£ 9 (/D$ <-ÿô{Ç 7#5'67{ Gºu=9ÿðqÈ7'6675##53533q ' 3$'”R@ 1:AV&&y© 7#535#53#3ys.$`$-vvÿóyÆ7##"''325''6757533y (9<ˆv K)!)=(( ÿ÷wÇ7#"''32657''67#553w (& šY+#Ca-*U--ÿñxÇ7''7''7'777x,--&&(',JTR.*(/ ÿïwÉ'67''6777&7#  ! )e&2>  $7ÿò|È7#'677#'677|;2  GƒP'G*Aÿ÷r¨ #5#535#53rMMKb uÿñ{Á7#'655##5#53533533{:3$${LIBB,,00ÿñx½ 7&'7'667&'7E D/# !+,  œ-=@:>,  ÿí}¶&''67537}!;;E  **4f &!ÿõzÇ7'67'327#"&55'77377t*2€.% 8YT;8ÿð{¾ 7'667&'7{*&&$- ·TZLV^ 7! *ÿï|Ê7'67&'767'#'6737w@!   -  +˜w2,  *!,B ÿïyÁ7#&'655#55'673y, )00!: ,\*0 A( .ÿð{·7&'77&'667&'7P  3"'" 7 r ( $]F?YO % *ÿðx·7#53#&'665#53iUU*-p¢R5. !2&ÿò~Æ 7&'#53~ #_ uÔH ÿózÅ7#&'6654'#53'33z.//.{3* #0 55 w§7#53#53m[[ nn’§ ÿðwº7&'&'67&'767'577w   %I & +(5%ÿò~Ç7#5'67'#535377&'7i7%!!  …cJ (---Xÿñp¿7'67p B? º‰@7…ÿð|¼ 7&'7''65|,A‡wvJBwÿøpÁ7#"&5536732p& -  —H7  ÿñv²7&'6767'577q)& $-N™NI "E~¦7&'&#"'7632~'    ['  Iÿò|Å 7##"''3255#5533&'7''67y-  //- J ‡wr((‹ UVOI$ !Hÿïy¶7&'767'#537t!  5 Z›.7B% 4ÿñsÀ 7&'7&'7&'7n'0.%/,-#:5¬Ym  ÿð{Ä'&'36767&'7{!: !   š ¥4 ÿð{Á7''67&'767{&&  ) )4!8  /9" ÿøu¶7#327#"'&55#737#53#3u6   ^/6Z;  =22ÿñ|Ç7'67'''7'777w  ,5Œ2%( ‹Œ.0 y© 7'537#53yrD9Pzÿòp² #5#535#535#53pIIFFH_>2 ÿïuº7'5'67''57iUU#'> LQ¢L15!EÿñkÁ 7'66553#53k?T)+ ),[†ÿï~¿7#"'773367''6754'3~   H L0¸q.+ 73G; ÿïu 7#"'753367u? #X09¹{59ÿ÷q° #5##535#q5b5 ¹– ÿòs¸ 7'6657#5s #5¸T9, 88J`ÿò{º 7&'7'667<P/* ') ŒGC-ν765#53­ ¡ 2ar4(˜½765#53x dy (-Uf/5‘À7'67#53 Y[s5 Gc 5‰À7'67#53 W\s5 Gc 5uÀ7'67#53 FH_ 5 Gc-hÎÉ765#53® ¡ m1C-jÎÉ765#53® ¡ o0Ae–Å765#53zeyj/Bp–É765#53zeyu,=fzÅ765#53^ Ob j/Au{Å765#53_ Nau(7-]ÎÊ765#53¯ ¡ ];K" a–Å765#53x bv e2EJ’Å7'67#53 Y\tJ<X K‹Å7'67#53 W^vK<W KuÅ7'67#53 FI` K<W-xÎÉ765#53° ¡ |'8-rÎÉ765#53° ¡ w*<w–É765#53{ey {'9{–É765#53|ey$6s~É765#53a Pc x);{Ê765#53b Pd {(7-pÎÉ765#53¯ ¡ p/= k–É765#53v bv k2AQ’Å7'67#53 Y[tQ7S RŠÅ7'67#53 W\tR7R RuÅ7'67#53 FH_ R7R-{ÎÉ765#53° ¡ €$5-sÎÉ765#53­ ¡x*;{–É765#53|ey€$6}–Ê765#53zey }&5v~Æ765#53a Pc z%7{~Æ765#53b Pc{$4-qÎÊ765#53¯ ¡ q/= k–É765#53w bv k2A¡¹7'67#53'67#53 3,A 5(<' OfB&_u ™¹7'67#53'67#53 2-B 4';' OfB&_v €¹7'67#53'67#53 &3 +2& PfB'^t&>ÑÀ765#53765#53?2F^CVF#DW'$FY)&aÒÉ765#53365#53P;PM 8M a9G!9G!I¡À765#53765#536 (< 9 +? N!>Q&!>Q&`¡Å765#53765#53< +@ 1 )= `6E 2AH‡À765#53765#53& 1 0 %9 M!?R&!>Q&k‡É765#53765#53- #7 )2k2A1@&ѽ765#53'65#53¬7Kr;P2bs42ar4%¡½765#53#65#53z%9_.B%-Xi/-Xi/2¢Â7'67#53'67#53^ / %= ~ 0 +C 2"Kg@[ :›Â7'67#53'67#53V / $= | - +C : Fa;V9ƒÁ7'67#53'67#53 %!8 $3G<W1Fa&kÒÉ765#53765#53G2FUCWp/A/A&fÒÉ765#53765#53I7KS=Qk2D1Bg¤Å765#53765#536 (< ; .B l.@.@m£É765#53765#535(< ; -A m1?/<j‹Å765#53765#53& 16 (< o,>,>uˆÉ765#53765#53- #7 + 4u,:*8&^ÒÉ765#53765#53V>RI 8L c7I"7I"Y¡Å765#53765#53< .B4 %9 ^7J"6I"L¡Æ7'67#53'67#53 - +B + &< Y2N,;V L™Æ7'67#53'67#53 - *A , %;Y2N,;V IÆ7'67#53'67#53 "3 #2Q8T)>X&}ÑÉ765#53765#53I2FV BV ‚$4#3&vÑÉ765#53765#53N8KP =P {(9(9v£É765#53765#538 )< : .A z(9%6x£É765#53765#53< .A6 )< }&7 $5v‡É765#53765#53& / 3': {(9'8x‡É765#53765#530 #6 * 3}&7 $5&kÒÉ765#53765#53V>RI 8L p/A/Ae¡É765#53765#53:.B2 %9 i3E 0BS¡Æ7'67#53'67#53 . ,B + &< `-I*6Q S™Æ7'67#53'67#53 . ,B , %;`-I*6Q QÆ7'67#53'67#53 #4 "1Z2M(8S&|ÒÉ765#53765#53J2FV BU $5$5&vÑÉ765#53765#53O8KQ >Q z(9(9u£É765#53765#539 )< : .A z(9 %6z£É765#53765#53; ,@8 )< %6 "2v‡Æ765#53765#53& / 3': {%7$6{‡Æ765#53765#530 #6 ) !3 €"4!3&pÒÉ765#53765#53U>RL 8L t,=+<f¡É765#53765#53;.B4 "6 k2D 0A&¯½7367>=@Q½… &˜½7367226D½…  &€½7367**/;½…  1\ÒÅ733#1¡ÅV1€ÒÏ733#1¡Ï=&l¢Å733#&h|ÅF&užÉ733#&dxÉAj…Á733#SgÁDvƒÉ733#QeÉ@J¯É7367>=@QÉmJ—É7367216CÉm  J€Å7327**/;Åi  1ÒÏ733#1¡Ï=1ƒÒÏ733#1¡Ï9&z¢É733#&h|É<%|¢Ì733#%i}Ì=s‚É733#PdÉC‚É733#PdÉ5_¯Ì7327>=@QÌ[Z˜Ì7327226DÌ`  Z€É7327**/;É\ 1ˆÒÏ733#1¡Ï41ŒÒÏ733#1¡Ï0&ƒ Ì733#&fzÌ6&Š›Ì733#&auÌ/€Ì733#NbÌ8‰€Á733#NbÁ%\¯Ì7327>=@QÌ] \˜Ì7327226DÌ]  \€É7327**/;ÉZ 1ˆÒÏ733#1¡Ï41ˆÒÏ733#1¡Ï4&Š¢Í733#&h|Í1&ŠžÍ733#&dxÍ1‚‚É733#PdÉ5‰‚É733#PdÉ-&¯¸ 73#267#s_JDM¸l & ¸ 73#267#t`EDF¸l %†¸ 73#267#[G8 4<¸m 1Yѽ7#3#5ΉŒ ½>d1rÒÉ7#3#5Ή¡É1W"\¡½7#3#5žhk½;a#lžÅ7#3#5›dg{Å3Y^½7#3#5~LOc½9_sÅ7#3#5~LOcÅ,RN°Á 73#267#s_NFLÁM F‘Á 73#267#t`A 9BÁU HÁ 73#27#[G/%29ÁS  1wÑÉ7#3#5ΉŒ É-R1|ÑÉ7#3#5ΉŒ É(M#r Æ7#3#5fi}Æ,T#|žÊ7#3#5›dg{Ê(NrÆ7#3#5}KOcÆ.TzÆ7#3#5~LOcÆ&L]°Å 73#27#s_D7IIÅC  U•Å 73#27#t`=+@?ÅK  YÅ 73#27#[G-&38ÅG1€ÑÉ7#3#5ΉŒ É$I1ƒÑÉ7#3#5ΉŒ É!F"| É7#3#5gj~É(M#…žÉ7#3#5›dg{ÉDzÅ7#3#5~LOcÅ%K„É7#3#5~LOcÉ!Ec°Å 73#267#s_KGKÅ=\•Å 73#27#t`;,:EÅD  ZÅ 73#27#[G-'0;ÅF1ƒÑÉ7#3#5ΉŒ É"F1ƒÑÉ7#3#5ΉŒ É"F" É7#3#5žhj~É$H#†žÉ7#3#5›dg{ÉC|Å7#3#5~LOcÅ$I„Å7#3#5~LOcÅA$·¸ 73#27#73#267#9&#CC/''/¸p”n $¨¸ 73#27#73#27#:&$DB. $*¸p”n  $“¸ 73#27#73#27#087# %¸p”n  *WÙ½ 73#27#7#3#5*G3!**«<@T½@  f?e*qÙÊ 73#267#7#3#5*G3&(,«<@TÊ3Y2XZ¬½ 73#27#7#3#59&$ˆ-3G½=c<br¬Å 73#27#7#3#59&#ˆ-3GÅ-S-S\…½ 73#27#7#3#52 o"#7½<a;`rˆÅ 73#27#7#3#52 o"&:Å-S+QN·Á 73#27#73#267#:& DB.' '.ÁNsL I©Á 73#27#73#27#:%#EB.(&ÁSxQ N“Á 73#27#73#267#/:4  #ÁNsL *uÙÊ 73#27#7#3#5*G3#'-«<@TÊ0U.T*zÙÊ 73#27#7#3#5*G3!&.«<@TÊ*P)Oq«Å 73#27#7#3#59&"ˆ-2FÅ.T,Sy«Å 73#27#7#3#59&#ˆ-2FÅ&L%Kr…Å 73#267#7#3#5/n"$7Å.S,RxˆÅ 73#27#7#3#50 n"':Å(M&L[·Å 73#27#73#27#:&#DB.$*+ÅFjD  W©Å 73#27#73#27#:%! EB.#+ÅJnGX“Å 73#27#73#27#/95!!#ÅImF*~ÙÊ 73#27#7#3#5*G3#)+«<@TÊ&L%J*ÙÊ 73#27#7#3#5*G3#(,«<@TÊ$I"Hz«Ê 73#27#7#3#59&$ˆ-2FÊ*P(N«É 73#27#7#3#59&! ˆ-2FÉ#H!Ex‹Å 73#27#7#3#50m!$7Å'M%J~ˆÉ 73#27#7#3#5/ m!&9É%K#H`·Å 73#27#73#267#:& DB.' *+Å@e> ]©Å 73#27#73#27#:%"EB.&(ÅChA]Å 73#27#73#27#/ 94 !ÅChA*ÙÉ 73#27#7#3#5*G3#**«<@TÉ#H"F*ÙÉ 73#27#7#3#5*G3#**«<@TÉ#H"F«É 73#27#7#3#59& !ˆ-2FÉ&H$Gƒ«É 73#27#7#3#59&$ˆ-2FÉ#F!D{‹Å 73#27#7#3#51n #7Å&J$H‚‰Å 73#27#7#3#5. m!';ÅCA°½ 73#67535#r_:@FL`_½S;  b- ½ 73#67535#jW7<BHWV½S;  b-½ 73#67535#ZG(,47GF½S;  b-1OÑ¿ 73#3#535#2œ‰Œ ‰ˆ¿@C1jÑÉ 73#3#535#2œ‰Œ ‰ˆÉ6<%O¦¿ 73#3#535#&{hmhg¿?D"f¡Å 73#3#535##zgkgfÅ99R†¿ 73#3#535#cQUhPO¿>Bd†Å 73#3#535#cPThPOÅ::F®À 73#67535#r_9@EK_^ÀB%  KEÀ 73#67535#ZF'+47GFÀC$K1jÑÉ 73#3#535#2œ‰Œ ‰ˆÉ6<1jÑÌ 73#3#535#2œ‰Œ ‰ˆÌ8=%e¦Å 73#3#535#&|imihÅ9:"k¡É 73#3#535##zgkgfÉ7:c†Å 73#3#535#cQUhPOÅ9<o†Å 73#3#535#cQUhPOÅ36 S°Å 73#67535#r_:@FL_^Å>!  GT¡Å 73#27535#kX7<CHXWÅ> FS€Å 73#67535#ZG',37HGÅ? F1tÑÉ 73#3#535#2œ‰Œ ‰ˆÉ26 1tÑÌ 73#3#535#2œ‰Œ ‰ˆÌ47%p¦É 73#3#535#&|imihÉ66"w¡É 73#3#535##zgkgfÉ22 p†Å 73#3#535#cQUhPOÅ44|†É 73#3#535#bPUhONÉ/ 1 W¯Å 73#67535#r_:@FK_^Å;   FWÅ 73#67535#jV.3;?WVÅ; FW€Å 73#67535#ZF'+37GFÅ; F1xÑÌ 73#3#535#2œ‰Œ ‰ˆÌ25 1xÑÌ 73#3#535#2œ‰Œ ‰ˆÌ25 %u¦É 73#3#535#&|imihÉ23"x¡É 73#3#535##zgkgfÉ20u†Å 73#3#535#cPThPOÅ/2 |†Å 73#3#535#cPThPOÅ- -  ‰¸ 7#5##535#‰CCC¸” ˜zg ‚¸ 7#5##535#‚DDD¸” ˜zg q¸ 7#5##535#q444¸” ˜zg2Yν73#75#2œœˆt½d>>2rÎÉ73#75#2œœˆtÉW11"\ž½73#75#"||hT½a;;#lœÅ73#75##yyeQÅY33]‚½73#75#ddP<½`::p‚Å73#75#ddP<ÅU//OŠÁ73#75#llXDÁrLLLqÁ73#75#[[H4ÁuOO2wÎÉ73#75#2œœˆtÉR--2|ÎÉ73#75#2œœˆtÉM(("ržÆ73#75#"||hTÆT--#zžÆ73#75##{{gSÆL%%p‚Æ73#75#ddP<ÆV//z‚Æ73#75#ddP<ÆL%%]ŠÆ73#75#llWCÆiBB]Æ73#75#kkWCÆiBB]qÆ73#75#[[H3ÆiBB2€ÎÉ73#75#2œœˆtÉI$$2ƒÎÉ73#75#2œœˆtÉF!!"|žÉ73#75#"||hTÉM((#…œÉ73#75##yyfRÉD|‚Æ73#75#ddP<ÆJ##„‚É73#75#ddP<ÉE ]ŠÆ73#75#llWCÆiBB]Æ73#75#llXCÆiBBZqÆ73#75#[[H3ÆlEE2ƒÎÉ73#75#2œœˆtÉF!!2ƒÎÉ73#75#2œœˆtÉF!!"žÉ73#75#"||hTÉH###†œÊ73#75##yyfRÊD|‚Å73#75#ddP<ÅI##„‚Å73#75#ddP<ÅA!Џ 73353#5##735#DDDD¸--“ :!‚¸ 73353#5##735#DDDD¸--“ :!r¸ 73353#5##735#4444¸--“ :1Xν 7353#535#EuuuŸeeR!!1mÎÉ 7353#535#Euuu®\\I"Zž½ 7353#535#6T|TT¡ccP!!#lÅ 7353#535#7RzRR¬YYG\‚½ 7353#535#2<d<<¢aaMl‚Å 7353#535#2<d<<¬YYFO‰À 7353#535#2CkCCš&qq^%%LrÀ 7353#535#*4\44š&tta((1tÎÉ 7353#535#Euuu²UUB1zÎÉ 7353#535#Euuu¶OO<"lžÅ 7353#535#6T|TT¬YYF#zÉ 7353#535#7RzRR¶OO<l‚Å 7353#535#2<d<<¬YYFv‚Å 7353#535#2<d<<°OO<Z‰Å 7353#535#2CkCC¢#kkX""Z‚Å 7353#535#*DlDD¢#kkX""ZrÅ 7353#535#*4\44£"kkX##1|ÎÉ 7353#535#EuuuµMM91|ÎÉ 7353#535#Euuu¶MM9"vžÉ 7353#535#6T|TT±SS@#€œÉ 7353#535#7RyRR¶II6v‚Å 7353#535#2<d<<°OO<€‚È 7353#535#2<d<<´HH6\‰Ä 7353#535#2CkCC¤ hhT!!\‚Ä 7353#535#*DlDD¤ hhT!!ZrÄ 7353#535#*4\44¦jjW%%1ÎÉ 7353#535#Euuu¸HH51ƒÎÉ 7353#535#EuuuºFF3"žÈ 7353#535#6T|TT¶II6#€œÈ 7353#535#7RyRR¶HH5{‚Ä 7353#535#2<d<<°II8€‚Ä 7353#535#2<d<<³DD2!£¸ 73353#5##735#73353#5##735#5¸11• 6E22• 6!œ¸ 73353#5##735#73353#5##735#6¸11• 6E22• 6!¸ 73353#5##735#73353#5##735#,¸11• 6E22• 6-XÓ¼ 7353#535#'353#535#ž!I!!]!I!!¡ddQ##6ddQ##-mÓÈ 7353#535#7353#535#A!I!!]!I!!®[[H.[[HY¤¼ 7353#535#7353#535#0>J> ccP!!4ccP!!i£Ä 7353#535#7353#535#0>J=¬[[H0[[H\‹¼ 7353#535#7353#535#(6@7£``L 3``L mŽÄ 7353#535#7353#535#+7@7«WWD+WWDO¤¿ 7353#535#7353#535#0>J>"pp]));"pp]))Ož¿ 7353#535#7353#535#*>J>"pp]));"pp]))IŽ¿ 7353#535#7353#535#*7A7›$vvc,,?$vvc,,-sÓÈ 7353#535#7353#535#A!I!!]!I!!³UUB-UUB-zÓÈ 7353#535#7353#535#A!I!!]!I!!´NN;'NN;m£Ä 7353#535#7353#535#0>J=¬WWD,WWDt£È 7353#535#7353#535#0>J=°TTA)TTAo‹Ä 7353#535#7353#535#&7A7¬UUB*UUBsÄ 7353#535#7353#535#+6@6­QQ>'QQ>Y¤Ä 7353#535#7353#535#0>J>£!kkX$$7!kkX$$ZžÈ 7353#535#7353#535#+>I>¥#nn[%%8#nn[%%VŒÄ 7353#535#7353#535#*6@6¢"nn[&&9"nn[&&-}ÓÈ 7353#535#7353#535#A!I!!]!I!!·KK7&KK7-|ÓÈ 7353#535#7353#535#A!I!!]!I!!¸LL9)LL9y£È 7353#535#7353#535#0>J=²OO<&OO<~£È 7353#535#7353#535#0>J=µJJ7$JJ7vŒÄ 7353#535#7353#535#*5@6®NN<&NN<}È 7353#535#7353#535#*5A5´KK7#KK7\£Ä 7353#535#7353#535#0>J=£!hhU!!4!hhU!!\Ä 7353#535#7353#535#+>I=£!hhU!!4!hhU!!XÄ 7353#535#7353#535#*8@7¤ llY&&9 llY&&-ÓÈ 7353#535#7353#535#A!I!!]!I!!·GG4#GG4-ƒÓÈ 7353#535#7353#535#A!I!!]!I!!ºEE2$EE2~£È 7353#535#7353#535#0>J=µJJ7$JJ7€£È 7353#535#7353#535#0>J=µHH6#HH6y‹Ä 7353#535#7353#535#*5@5¯KK8#KK8€ŒÄ 7353#535#7353#535#*5@6³DD2!DD2«½ 7'6753&&]3 >A $q4""M#$J -˜½7'66753&&R0#:  q5":&#$J - ƒ½ 7'6753&G % .0 &p4 !M#$LSâà 73&''6z> <> Pà 3-*!#"lÝÎ 73&''6z: 8; LÎ )$#Q¬Ä 7'6753&c4 ?< 0‘';7h¬È 7'6753&d4 @= / "30 SŠÄ 7'6753&O * 3/"’%94gÄ 7'6753&S ) 3. $ž"0+ C­Ä 7'66753&^4 %B 5Œ,1=C–Ä 7'6753&S1>6 +’0DBC„Ä 7'6753&&I )4/ ‰*=; %"pÝÎ 73&''6z9 9: LÎ &!""yÝÎ 73&''6z: 8< LÎ !h¬È 7'6753&d4 @= / "30p«È 7'6753&c3 @< 0Ÿ* (k‹Ä 7'6753&S ) 3, $›($n‹Ä 7'6753&S ) 3, $œ'"   P­È 7'66753&^3 %B 6•* .:P–È7'66753&&R 2 #7 –* /> &R…È 7'6753&J )40 %–)<:"~ÝÎ 7'673&9 K = ;®("~ÝÎ 7'673&9 K = ;®(s­Ë 7'6753&c4 >? 0¦+ &}­Ë 7'6753&c4 >? 0©$ !  pÈ 7'6753&S ) 3. % (#|Ë 7'6753&S * 3. $¤"   S­È 7'66753&^4!$B 6% )3S™È 7'6753&S1<: .“&73 V‚È 7'6753&J ( 2- #–':7#}ÝÎ 7'673&9 J = ;®)"ÝÎ 73&''6z9 8: LÎ  {­Ë 7'6753&c4 ?? 0©% !  }­Ë 7'6753&c4 =@ 0¦"   €È 7'6753&Q ( 3. %¨!  {È 7'6753&S ) 3. $¤!   ´¹ 7'6753&7'6753&F !* < (# f(;01+ &=787¥º 107'6753&'6753&&5| "( n )  Z'A568>,-, º!107'6753&'''6753&&5 & "  (723*   F,-? % Tå¾ 7'6753&7'6753&W % ,# P !- #‹"4) .-iäË 7'6753&7'6753&Z ) 0 M (+ !›1 $ 0+ V³¾ 7'6753&''6753&† ! I " * ….,1)  ^²Å 7'6753&7'6753&F # , = ' –,!  0) ]’¿ 7'6753&7'6753&; # 1  ‰*"  &$  d•Ä 7'6753&7'6753&> # - " —-  (#  9±Ä 7'6753&7'6753&F # + < ( }!7 !* '9((49§Ä 7'6753&7'6753&= ( 9 '" y2&&' "9()3:’Ä 7'6753&7'6753&4  1 # { 4#$% ":'(2måË 7'6753&7'6753&Z ( 0 N ", "ž0 ) . 1såË 7'6753&7'6753&Z ' 0 N "- "¡* % .-l²Ä 7'6753&7'6753&G " + > ! ›+ % ($ k²È 7'6753&7'6753&G " ( < &! ž, "  ,%  m•Ä 7'6753&7'6753&; ! 0  š+   %$   r”Ä 7'6753&7'6753&@  ' /  # ž&    (  Q±Ä 7'6753&7'6753&G " ) = ! ' +"  2+ P¥Ä 7'6753&7'6753&? " ) 9 ! ' Š,  2* J’Ä 7'6753&''6753&h # :  |5- - {äÎ 7'6753&7'6753&X % . O %, !£'  ( % {äË 7'6753&7'6753&X % . O %, !£'  ( % w²Ë 7'6753&7'6753&G # + >   &   &! x²Ë 7'6753&7'6753&I % , ; % £$    &   x“È 7'6753&7'6753&? $ /  ¡ '    $" u”É 7'6753&7'6753&?  # /  " £ (   '!  R±Ä 7'6753&''6753&ˆ ! ' I # , ˆ 3/#0' Q¥Ä 7'6753&''6753&z ' @ ! ) … 1-& 4) L‘Ä 7'6753&''6753&h # 9  {/&'( #0" äË 7'6753&7'6753&Y & 0 O %, ¦$   "  |äË 7'6753&7'6753&Y & 0 O %, !¦&  # "  y±É 7'6753&7'6753&I % + ;  £'    % $  y±É 7'6753&7'6753&I % + ;  £'    % $  x•Ä 7'6753&7'6753&@ $ .  ¡ '  "   s•Ä 7'6753&7'6753&>  ' 0 " £ '  * ¿ 7"&54632'"32654&S#"##+%&++&%+Ž   ‰¿ 7"&54632'"32654&L#"##+%&++&%+Ž  !y¿ 7"&54632'"32654&D *&'*+&&*Ž  -SÒÁ 7"&54632'"32654&'+*((++(  S  !\-mÒÏ 7"&54632'"32654&(**()*+(  mO  S¡Á 7"&54632'"32654&`####S \g¡É 7"&54632'"32654&` "" "#gP  U†Á 7"&54632'"32654&OUYl†É 7"&54632'"32654&OlJ  J‘Ä 7"&54632'"32654&S!!""J""""hHyÄ 7"&54632'"32654&CH"!"#j-rÒÏ 7"&54632'"32654&(**()**)  rJ  m¡É 7"&54632'"32654&` "" "#mJ  v¡É 7"&54632'"32654&` "" ""vA  l†É 7"&54632'"32654&OlJ  w†É 7"&54632'"32654&Ow?  Y‘É 7"&54632'"32654&T!!""Y ^Y‰É 7"&54632'"32654&L"!!!Y ^XyÉ 7"&54632'"32654&CX _-{ÑÏ 7"&54632'"32654&))))))))  {B  -ÑÏ 7"&54632'"32654&))))))))! >v¡É 7"&54632'"32654&` "" ""vA  €¡Ì 7"&54632'"32654&`!!!!""€:   v†É 7"&54632'"32654&Ov@  €†Ì 7"&54632'"32654&O€9   Y‘É 7"&54632'"32654&T!!""Y ^Y‰É 7"&54632'"32654&L"!!!Y ^XyÉ 7"&54632'"32654&CX _-|ÑÏ 7"&54632'"32654&))))))))  |A  -|ÑÏ 7"&54632'"32654&))))))))  |A  z¡Ì 7"&54632'"32654&` "" ""z@  ¡È 7"&54632'"32654&`!!!! !"7   {†Å 7"&54632'"32654&O{7   ~†È 7"&54632'"32654&O~8   §¹7#&&''675#5 7> #/ :5¹G +2  K  ¹7#&''675#5˜7?1 /;5¹I31 H…¹7#&''675#5}(0 ' ( 2,¹D-0 G$UÛ½7#&''67#5ÑG; :8 EJ½'$$+$jÚÉ7#&''67#5ÑG: 88 BHÉ# &Q­½7#&''67#5Ÿ3A 4 1 : 5½/#&3b­Å7#&''675#5Ÿ2@ 2 1<6Å'+Xн7#&''675#5€&0 % ) 2+½(+l‡Å7#&''67#5€&+ " '+ )Å$  'C«Á7#&''675#5 7B 5 2 ;5Á=))> >£Á7#&''6675#5˜8C 4 0 !4Á<** / C…Á7#&''675#5|(1 ' & 0,Á7%';$tÚÉ7#&''67#5ÑH; 97 BHÉ $wÚÉ7#&''67#5ÑH; 98 BHÉd­Å7#&''67#5Ÿ5B 3 / 6 4Å$",o­É7#&''67#5Ÿ4@ 4 . 6 5É" (d‡Å7#&''67#5€'- " ( .*Å( ,n‡Å7#&''67#5€', " * , *Å!  %Q­Å7#&''67#5 5@ 4 1 9 8Å4#'9 Q¥Å7#&''67#5—5@ 3 1 8 7Å3%&8 T„Å7#&''675#5|(0 & ' 1,Å1!"2$|ÚÉ7#&''67#5ÑI; 98 AHÉ$ÚÉ7#&''67#5ÑI; 98 @HÉx¯É7#&''67#5¡6B 3 5 < 9É  !¯É7#&''67#5¡6@ 2 5 : 8É   r‡É7#&''67#5€(, " ' - +É# &}‡É7#&''67#5€(. " ' ,+É   Q­Å7#&''67#5 6B 2 2 ; 8Å3#'8 Q£Å7#&''67#5—6A 2 08 7Å3#&8 R„Å7#&&''675#5}*1  ' 1-Å3 #6$ÚÉ7#&''67#5ÑH: 89 @HÉ$|ÚÉ7#&''67#5ÑH; 98 AHÉz¯É7#&''67#5¡6A 3 4 : 8É   ¯É7#&''67#5¡6? 2 5 88É   }ŠÅ7#&''67#5‚'+ # ' * *Å   }†Å7#&''67#5'* ! ) * +Å    ±¸!7#&''675#53#&''675#5b  # ,Š!  (¸5+F<$+D ¥¸!7#&''675#53#&''675#5Z  '†   '¸5+E>&*C¸!7#&''675#53#&''675#5J t   $¸2"= 8!'@Qå½!7#&''675#53#&''675#5{  # +'µ%/ "  $½% "2-+#hÜÉ7#&''67#53#&''67#5z  !'%§#* % ,É  '(, S²½!7#&''675#53#&''675#5b  " ,‹"  #½!  .** ]²Æ!7#&''675#53#&''675#5b  " ,‹"  (Æ!  ,( - X޽!7#&''675#53#&''675#5P  !v   ½  ( ( & aÅ!7#&''675#53#&''675#5P  !v  ( Å $% . :±Á!7#&''675#53#&''675#5b  " ,‹!  )Á1%; 8#'> :¥Á!7#&''675#53#&''675#5Z  !,…  )Á1%< 8#'> :Á!7#&''675#53#&''675#5J  !s  #Á/ "94#:#iÝÉ!7#&''675#53#&''675#5z  ! *&¨#, É  (& %#sÝÉ7#&''67#53#&''67#5z ! '&¨$+  É  ## $ k²Æ!7#&''675#53#&''675#5b  " ,‹"  !Æ &$  #k±Æ7#&''67#53#&''67#5b  ! )‹!  ! )Æ ##  ' nÆ!7#&''675#53#&''675#5P  !v   Æ    $ $ oÆ7#&''67#53#&''675#5P  !v   ( Æ    !R²Æ!7#&''675#53#&''675#5b  *‹"   (Æ' /1 7R§Æ!7#&''675#53#&''675#5Y  *ˆ"  )Æ% .4 7LÁ7#&''67#53#&''675#5J  s   $Á& 30  7#yÝÉ7#&''67#53#&''67#5z  !% %§")  É      #}ÝÉ7#&''67#53#&''67#5z  $ %§")  É       s±É7#&''675#53#&''67#5b  " +‹  É #% % y±É7#&''67#53#&''67#5b  " )‹  $É    ! vÉ7#&''67#53#&''675#5P  v   É $       xÉ7#&''67#53#&''67#5O  q   É    !R±Å!7#&''675#53#&''675#5b  ! * ‹!  )Å% .17R¦Å!7#&''675#53#&''675#5Y  + ‰!  )Å% .1 7LÆ"7#&''6675#53#&''675#5J  s   $Æ'  ' 0  7#yÝÉ7#&''67#53#&''67#5z  !% %§")  É      #yÝÉ7#&''67#53#&''67#5z  !% %§")  É       s±É7#&''675#53#&''67#5b  " +‹  É ##   ! y±É7#&''67#53#&''67#5b  " )‹  $É    ! vÆ7#&''67#53#&''675#5O  u   Æ      xÆ7#&''67#53#&''67#5O  p   Æ       ¦Å7#5#&''675#5~>]6? 0 1<8Å);'(= šÅ7#5#&''675#5x=V/8 + 0<7Å)=++? Á7#5#&''675#5k:J'- # ' 1+Á):&'<#GÜÉ7#5#&''67#5£GuGO ?> NHÉ')  (#dÜÏ7#5#&''67#5£GuG I ?@ H GÏ    G¬Å7#5#&''67#5‚=\7A 1 09 4Å!&)S¬É7#5#&''67#5<[5? 2 2 7 4É!!  #HˆÅ7#5#&''67#5g1H&. " ( -(Å " )U‰Å7#5#&''67#5k9N*2 % ' .*Å   8£É7#5#&''675#5|=]8? 1 /:6É$-!"1 2šÉ7#5#&''6675#5q6V1: - . 7É$1%& ' 2Å7#5#&''675#5i8I%, " ' 2-Å -!#1 #hÜÏ7#5#&''67#5£GuF F ?@ E GÏ   #hÜÏ7#5#&''67#5£GuF F ?@ E GÏ   `¬É7#5#&''67#5=\4A 2 2 9 8É   f­É7#5#&''67#5=]4< 2 2 8 7É    bŽÉ7#5#&''67#5l8N*5 ( * 1+É   jŒÉ7#5#&''67#5k9N)1 ( * 1*É J¦Ì7#5#&''675#5|=]8B 2 1 <6Ì!&) EšÌ7#5#&''67#5x=V2; - 0 :6Ì!- !/ B€É7#5#&''67#5i8I', ! ( /,É."3#vÜÏ7#5#&''67#5£GuF H ?@ H GÏ  #vÜÏ7#5#&''67#5£GuGN A? MHÏ  fªÌ7#5#&''67#5>^5> 2 1 9 9Ì   s­Ì7#5#&''67#5=]2 4 05 8 7Ì  kÉ7#5#&''6675#5k8O* ( , +É    tŒÌ7#5#&''67#5k8M(- ( + .)Ì J¥Ì7#5#&''67#5|=]9? 0 1 7 6Ì!(, OšÌ7#5#&''67#5x=V1: , / 8 6Ì ') J€Ì7#5#&''67#5i7H'+ ! ( / ,Ì* .%wÛÏ7#5#&''67#5£GuF F >> D GÏ  %wÛÏ7#5#&''67#5£GuF F >> D GÏ  nªÌ7#5#&''67#5>]5< 2 4 ?8Ì   u¬Ì7#5#&''67#5<[37 05 : 6Ì  oŽÉ7#5#&''67#5l9O)0 ' , 3,É  uŒÉ7#5#&''67#5k8M', ( - - *É  ¹ 7'67'767#53 AT^^s3  s й 7'67'767#53 @R\^s3  s t¹ 7'67'767#53 4AIH]3s.8ν 767'765#53­ˆ‹ˆœ=$ [*.SÍÉ 767'75#53­ˆ‹‡› X  Q%E˜½ 767'765#53ycgey I"  S%W˜Å 767'765#53|dgey \  L"Fz½ 767'75#53\KOL` K  R%YÅ 767'75#53bLQNb ]  K!.ν 767'765#53ª ˆ‹ˆœ!6 u62˜½ 767'765#53t cgdx7' `+1‘À 7'67'767#53 ;Q\[s1)  f 1ŠÀ 7'67'767#53 :P\[s1)  f 5wÀ 7'67'767#53 ->JH` 5%  c.bÍÉ 767'75#53°ˆ‹‡› g G .bÍÉ 767'75#53°ˆ‹‡› g G `˜Å 767'765#53|cgey e  E `˜Å 767'765#53|cgey e  E `|Å 767'75#53`MQNbe  E mÅ 767'75#53fMQNbq   =U˜Å 767'765#53|addx Z  M#A‘Å 767#53'67'pZrd 9Jš ^&$  AŠÅ 767#53'67'h[sd 9Jš ^&$  @wÆ 7'67'767#53 .>HH` @%  _.pÍÉ 767'75#53±ˆ‹‡›u   =.hÍÉ 767'75#53¯ˆ‹‡› m  Bo˜É 767'765#53|addx t   =r˜É 767'765#53{addx v   <q~É 767'765#53aPSPd u   =tÉ 767'75#53gNRNby  :.^ÍÉ 767'75#53±ˆ‹‡›c I"d˜É 767'765#53{addx h  E >’Å 767#53'67'p\se :L˜ `'%  >‹Å 767#53'67'i\te :M˜ `'%  AvÅ 767#53'67'WI_ Q -=˜ ^&$ .rÍÉ 767'75#53²ˆ‹‡›w   <.gÍÉ 767'75#53±ˆ‹‡›l  C r˜É 767'765#53{`c_s v    <q˜É 767'765#53|addx u   =r~Å 767'765#53aPSPd w   9uÅ 767'75#53gORNby  7.eÍÉ 767'75#53°ˆ‹‡› i  Eh˜É 767'765#53|addx l C°½73#3#267#s_ZZIEM½,< ¡½73#3#267#kWRRFCH½,< †½73#3#267#[G==6 5;½,< 1NÒ¿ 7#3#3#5Ή‰‰¡¿q1jÒÉ 7#3#3#5Ή‰‰¡É_#N¦¿ 7#3#3#5¡jjjoƒ¿q"f¡Æ 7#3#3#5œfffkÆ`R¿ 7#3#3#5|JJJOc¿md†Æ 7#3#3#5OOOThÆbF°Á 73#3#27#s_ZZC8EMÁ$F Á73#3#267#kWRRFDFÁ$ F‡Á73#3#267#[G==; 6;Á$ 1jÒÉ 7#3#3#5Ή‰‰¡É_1jÒÌ 7#3#3#5Ή‰‰¡Ìb%e¦Æ 7#3#3#5¡hhhmÆa"k¡É 7#3#3#5œfffkÉ^c†Æ 7#3#3#5OOOThÆcn†Æ 7#3#3#5OOOThÆ XS°Æ 73#3#27#s_ZZG4GKÆ  S Æ 73#3#27#kWRRC0GCÆ  S‡Æ 73#3#27#[G==5%6;Æ 1sÒÉ 7#3#3#5Ή‰‰¡ÉV1tÒÌ 7#3#3#5Ή‰‰¡ÌX%o¦É 7#3#3#5 gggmÉZ"v¡Ê 7#3#3#5œfffkÊ Tp†Æ 7#3#3#5OOOThÆVz†Ê 7#3#3#5OOOThÊ  PW°Æ 73#3#27#s_ZZC8DNÆ  W”Æ 73#3#27#kWRR8.@>Æ  Z€Æ 73#3#27#[G==-%/;Æ1xÒÌ 7#3#3#5Ή‰‰¡Ì T1xÒÌ 7#3#3#5Ή‰‰¡Ì T%s¦É 7#3#3#5 gggmÉV"w¤É 7#3#3#5žhhhn‚É Rs†Å 7#3#3#5OOOThÅ Rz†Å 7#3#3#5OOOThÅ  K¯¹7#537737'7£„&  )œ)¹#b_^  ž¹7#537737'7˜  &’(¹#c`_  ‡¹7#537737'7|e   #{¹!eca .VѾ7#5#53'3373Ñ£ œ#/¾T8888.qÑË7#5#53'3373Ñ£ œ"1ËF++++Q¨½7#537737'7¥…!%Œ"½=;;h¨Æ7#537737'7¥…!$Œ"Æ-,+Q‡½7#537737'7„d l½<;:d‡Æ7#537737'7„e lÆ432F®Á7#537737'7¥†%(š)ÁHFD  CžÁ7#537737'7—€ %’(ÁJHG  H‡Á7#537737'7|e   #{ ÁECB .uÑË7#5#53'3373Ñ£ œ"0ËB''''.{ÑË7#5#53'3373Ñ£ œ"1Ë<!!!!k¨Æ7#537737'7¥…!$Œ"Æ,++s¨Ê7#537737'7¥…!#Œ#Ê)''h‡Æ7#537737'7„e lÆ0/.q‡Æ7#537737'7„e lÆ'&%Y®Æ7#537737'7£„('™&Æ:87  SÆ7#537737'7˜‚ $’(Æ@><  S‡Æ7#537737'7|f "|Æ?=< .~ÑË7#5#53'3373Ñ£ œ"1Ë9.‚ÑË7#5#53'3373Ñ£ œ"1Ë5s¡Ê7#537737'7œ|"…"Ê)'&€¨Ê7#537737'7¥…##Œ"Ês‡Æ7#537737'7„e lÆ%$#€‡Ê7#537737'7„e lÊX®Æ7#537737'7£„&(š(Æ;98  SœÆ7#537737'7—€!#(Æ@><  S‡Æ7#537737'7|e "{Æ?>< .‚ÑË7#5#53'3373Ñ£ œ"1Ë5.‚ÑË7#5#53'3373Ñ£ œ"1Ë5|¡Ê7#537737'7œz"‚Ê" ¨Ê7#537737'7¥‚"$‰Êx‡Æ7#537737'7„e lÆ! |‡Æ7#537737'7„e lƦÁ7#5#5"&54632'"32654&€Dj‘IÁ$‚P  ¡Á7#5#5"&54632'"32654&zDk‘HÁ$‚P  ƒÁ7#5#5"&54632'"32654&f9Vs9  Á$‚P*:ÖÅ7#5#5"&54632'"32654&¥K|¬V "!! "#Ål>   *YÖÏ7#5#5"&54632'"32654&¥K|¬V!!!! "" Ï\4   :¦Å7#5#5"&54632'"32654&€@fŒFÅm@ P¦Í7#5#5"&54632'"32654&€@fŒFÍb9   >‹Å7#5#5"&54632'"32654&k7Ww;  Åi> Q‹Ê7#5#5"&54632'"32654&k7Ww;  Ê_6   ?¦Ê7#5#5"&54632'"32654&€Dj‘IÊl@ ?‰Ê7#5#5"&54632'"32654&i9Yy<  Ê!j> *[ÖÏ7#5#5"&54632'"32654&¥K|¬V!! "!!" ÏZ  2   *_ÖÏ7#5#5"&54632'"32654&¥K|¬V" " "!!ÏV  ,T¦Ê7#5#5"&54632'"32654&€@fŒFÊX  0   ^¦Ì7#5#5"&54632'"32654&€@fŒFÌT  -Z‹É7#5#5"&54632'"32654&k7Ww;  ÉV  . e‹É7#5#5"&54632'"32654&k7Ww;  ÉL  'M¦Í7#5#5"&54632'"32654&€Dj‘IÍc9   M¡Í7#5#5"&54632'"32654&zCj‘HÍc9   N‰Ê7#5#5"&54632'"32654&i9Yy<  Ê_6   *eÖÏ7#5#5"&54632'"32654&¥K|¬V" " "!!ÏQ  +*nÖÏ7#5#5"&54632'"32654&¥K|¬V" #" !!ÏH  $b¦Ì7#5#5"&54632'"32654&€@fŒFÌP  )l¦Ì7#5#5"&54632'"32654&€@fŒFÌH  $a‹É7#5#5"&54632'"32654&k7Ww;  ÉQ  +l‹Ì7#5#5"&54632'"32654&k7Ww;  ÌH  $M¦Ì7#5#5"&54632'"32654&€Dj‘IÌb9   M¡Ì7#5#5"&54632'"32654&zDk‘HÌb9   K‰É7#5#5"&54632'"32654&i9Yy<  Éa9   *gÖÏ7#5#5"&54632'"32654&¥K|¬V!! "!!" ÏO  )*gÖÏ7#5#5"&54632'"32654&¥K|¬V!! "!!" ÏO  )d¦Ë7#5#5"&54632'"32654&€@fŒFËN  )k¦Ë7#5#5"&54632'"32654&€@fŒFËI  %e‹È7#5#5"&54632'"32654&k7Wx<  ÈK  'i‹É7#5#5"&54632'"32654&k7Wx<  ÉH  $¼ÿëöÎ733##¼&&Î_q¼ÿëöÎ733##¼&&Î_q¼ÿëöÎ733##¼&&Î_q¼&öÎ733##¼&&ÎRC¼&öÎ733##¼&&ÎRC¼+öÎ733##¼&&ÎR>¼OõÎ733##¼%%ÎD(¼OõÎ733##¼%%ÎD(¼OöÎ733##¼&&ÎD(¼@öÎ733##¼&&ÎD7¼@õÎ733##¼%%ÎK0¼@õÎ733##¼%%ÎK0¼TõÎ733##¼%%Î?(¼TõÎ733##¼%%Î?(¼TõÎ733##¼%%Î?(ŒÿëÐÎ 73353#5##ŒÉafãj]”ÿëÑÎ 73353#5##”É`eãl_šÿëÑÎ 73353#5##šÉ`eãl_Œ&ÐÎ 73353#5##ŒËLO¨F=”&ÐÎ 73353#5##”ËLO¨F=š!ÑÎ 73353#5##šËOR­H@ŒKÐÎ 73353#5##ŒËADƒ,)”KÐÎ 73353#5##”ËADƒ,)šKÑÎ 73353#5##šËAŽ:/ŒSÐÎ 73353#5##ŒË8;{--”SÑÎ 73353#5##”Ë>Î~9„LÐÎ753#5#5¼8›3‚<”LÐÎ73#5#53¼((΂(LÐÎ753#5#5¼,”:‚5‡PÐÎ73#5#53¼55Î~1ŒMÐÎ73#5#53¼00Î-€TÐÎ73#5#53¼<<Îz,•RÐÎ73#5#53¼''Î|0‘TÐÎ73#5#53¼++Îz8wTÐÎ73#5#53¼EEÎz@‡TÐÎ73#5#53¼55Îz0„TÐÎ73#5#53¼88Îz4“TÐÎ73#5#53¼))Îz TÐÎ73#5#53¼,,Îz,‡TÐÎ73#5#53¼55Îz.ŒTÐÎ73#5#53¼00Îz$…BÐÎ753#5#5¼7‘=Œ<”BÐÎ753#5#5¼(•9Œ@‘BÐÎ73#5#53¼++ÎŒJnBÐÎ73#5#53¼NNÎŒR~BÐÎ73#5#53¼>>ÎŒH„BÐÎ73#5#53¼88ÎŒF’BÐÎ73#5#53¼**ÎŒ2‘BÑÎ73#5#53½,,ÎŒ?‰BÐÎ73#5#53¼33ÎŒ?ŒBÐÎ73#5#53¼00ÎŒ8gÿëÐÎ 73#'3#5#53¼+**ÎãÞÑj{ÿëÐÎ 73#'3#5#53¼%ÎãÞÑn^ÿëÐÎ 73#'3#5#53¼-11ÎãÞÑukÿëÐÎ 73#'3#5#53¼+&&ÎãÞÑmpÿëÐÎ 73#'3#5#53¼+!!ÎãÞÑvpÿëÐÎ 73#'3#5#53¼($$ÎãÞÑU~ÿëÐÎ 73#'3#5#53½"ÎãÞÑnlÿëÐÎ 73#'3#5#53¼+%%ÎãÞÑaj&ÐÎ 73#'3#5#53¼+''Ψ£›Hu&ÐÎ 73#'3#5#53¼%""Ψ£›K{$ÐÎ 73#'3#5#53¼%Ϊ¥˜O^&ÐÎ 73#'3#5#53¼.00Ψ£›Xl&ÐÎ 73#'3#5#53¼+%%Ψ£›Ql"ÐÎ 73#'3#5#53¼+%%ά§Wo&ÐÎ 73#'3#5#53¼(%%Ψ£›/€&ÑÎ 73#'3#5#53½"Ψ£›Et"ÐÎ 73#'3#5#53¼+ά§Fo)ÐÎ 73#'3#5#53¼(%%Î¥ =lLÐÎ 73#'3#5#53¼+%%΂}z3LÐÎ 73#'3#5#53¼%΂}z4yLÐÎ 73#'3#5#53¼%΂}z8]LÐÎ 73#'3#5#53¼*55΂}zBmLÐÎ 73#'3#5#53¼*%%΂}z;mLÐÎ 73#'53#5#5¼*%΂Q,z;oIÐÎ 73#'3#5#53¼(%%Î…€|€MÑÎ 73#'53#5#5½"ÎL0y6uLÐÎ 73#'3#5#53¼*΂}z-oIÐÎ 73#'3#5#53¼(%%Î…€|)lUÐÎ 73#'3#5#53¼+%%Îytt'zUÐÎ 73#'3#5#53¼%Îytt)zUÐÎ 73#'3#5#53¼%Îytt2bUÐÎ 73#'3#5#53¼*00Îytt<mUÐÎ 73#'3#5#53¼*%%Îytt5nUÐÎ 73#'3#5#53¼*$$Îytt4pQÐÎ 73#'3#5#53¼($$Î}xx€UÑÎ 73#'53#5#5½"ÎyD0t1sUÐÎ 73#'3#5#53¼+Îytt'oSÐÎ 73#'3#5#53¼(%%Î{vv#hAÐÎ 73#'3#5#53¼+))Έu-~AÐÎ 73#'3#5#53¼%Έu-zBÐÎ 73#'3#5#53¼%ÎŒ‡|:\AÐÎ 73#'3#5#53¼+55Έu<mAÐÎ 73#'3#5#53¼+$$Έu5oAÐÎ 73#'3#5#53¼+""Έ|>qAÐÎ 73#'3#5#53¼)""Έ|€BÑÎ 73#'3#5#53½"ÎŒ‡|5tAÐÎ 73#'3#5#53¼+Έt'qAÐÎ 73#'3#5#53¼)""Έ|)ÿëÐÎ 753#5#535#5¼==2ŠDãO*‰ÿëÐÎ 753#5#535#5¼33-“;ãU-ÿëÐÎ 753#5#535#5¼,,,—7ãf vÿëÐÎ 753#5#535#5¼FFF1ão‡ÿëÐÎ 753#5#535#5¼555’<ã^$ŠÿëÐÎ 753#5#535#5¼222š4ãe$”ÿëÐÎ 753#5#535#5¼(((yUãG ÿëÐÎ 753#5#535#5¼---’<ãW+‡ÿëÐÎ 753#5#535#5¼555’<ã^$ŽÿëÐÎ 73#5#535#53¼....Îã[&ÐÎ 73#5#535#53¼==22Ψ-&‹&ÐÎ 73#5#535#53¼11,,Ψ3%•"ÐÎ 73#5#535#53¼''''άH†&ÐÎ 73#5#535#53¼6666ΨD"ÐÎ 73#5#535#53¼----ά: †%ÐÎ 73#5#535#53¼6666ΩE&ÐÎ 73#5#535#53¼,,,,Ψ1€PÐÎ 73#5#535#53¼<<22Î~#‹PÐÎ 73#5#535#53¼1111Î~ •OÐÎ 73#5#535#53¼''''Î)vOÐÎ 73#5#535#53¼FFFFÎ1ŒOÐÎ 73#5#535#53¼0000Î!OÐÎ 73#5#535#53¼----Î&”IÐÎ 73#5#535#53¼((((Î…OÐÎ 73#5#535#53¼,,,,ΉOÐÎ 73#5#535#53¼3333Î%’IÐÎ 73#5#535#53¼****Î…€TÐÎ 73#5#535#53¼<<22ÎzŒTÐÎ 73#5#535#53¼0000Îz—UÐÎ 73#5#535#53¼%%%%Îy&vTÐÎ 73#5#535#53¼FFFFÎz.‹SÐÎ 73#5#535#53¼1111Î{‘SÐÎ 73#5#535#53¼++++Î{&”IÐÎ 73#5#535#53¼((((Î…TÐÎ 73#5#535#53¼,,,,Îz‰PÐÎ 73#5#535#53¼3333Î~%”QÐÎ 73#5#535#53¼((((Î} €BÐÎ 73#5#535#53¼<<22ÎŒ"ŒBÐÎ 73#5#535#53¼0000ÎŒ%—BÐÎ 73#5#535#53¼%%%%ÎŒ7vBÐÎ 73#5#535#53¼FFFFÎŒ@‹BÐÎ 73#5#535#53¼1111ÎŒ.ˆBÐÎ 73#5#535#53¼4444ÎŒ5”<ÐÎ 73#5#535#53¼((((Î’BÐÎ 73#5#535#53¼----ÎŒ-ˆBÐÎ 73#5#535#53¼4444ÎŒ5”FÐÎ 73#5#535#53¼((((ΈfÿëÐÎ73#'3#5#535#53¼+++%%ÎãÞÑJ'tÿëÐÎ73#'53#5#535#5¼%## Îã¤:ÑJ'wÿëÐÎ73#'53#5#535#5¼% Îã¤:ÑQ \ÿëÐÎ73#'3#5#535#53¼.2222ÎãÞÑckÿëÐÎ73#'53#5#535#5¼+&&&Îã«3ÑQ'pÿëÐÎ73#'53#5#535#5¼+!!!Îã­1Ñ]zÿëÐÎ73#'53#5#535#5¼(Îã‹SÑ;€ÿëÐÎ73#'53#5#535#5¼!Îã¤:ÑA0kÿëÐÎ73#'3#5#535#53¼+&&&&ÎãÞÑQ'wÿëÐÎ73#'53#5#535#5¼(Îã‘MÑKf&ÐÎ73#'3#5#535#53¼+++!!Ψ£›+!u$ÐÎ73#'3#5#535#53¼%"" Ϊ¥˜+!}$ÐÎ73#'3#5#535#53¼%Ϊ¥˜?^&ÐÎ73#'3#5#535#53¼.0000Ψ£›Fk&ÐÎ73#'3#5#535#53¼+&&&&Ψ£š5r&ÐÎ73#'3#5#535#53¼+Ψ£—;v&ÐÎ73#'53#5#535#5¼(Ψ`C›€&ÑÎ73#'3#5#535#53½"Ψ£›. k"ÐÎ73#'3#5#535#53¼+&&&&ά§;v)ÐÎ73#'3#5#535#53¼(Î¥ + fLÐÎ73#'3#5#535#53¼+++ ΂}ztLÐÎ73#'3#5#535#53¼%## ΂}zyLÐÎ73#'3#5#535#53¼%΂}z, ]LÐÎ73#'3#5#535#53¼.1111΂}z/mLÐÎ73#'3#5#535#53¼*%%%%΂}z!rIÐÎ73#'53#5#535#5¼+Î…c|,tIÐÎ73#'3#5#535#53¼( Î…€| €MÐÎ73#'53#5#535#5¾#ÎY#ykLÐÎ73#'3#5#535#53¼*''''΂}z#vIÐÎ73#'3#5#535#53¼(Î…€| bUÐÎ73#'3#5#535#53¼+//ÎyttwUÐÎ73#'3#5#535#53¼% ÎyttyUÐÎ73#'3#5#535#53¼%Îytt& cUÐÎ73#'3#5#535#53¼.++++Îytt)mUÐÎ73#'3#5#535#53¼+$$$$ÎyttrUÐÎ73#'3#5#535#53¼+Îytt$tMÐÎ73#'3#5#535#53¼( Î|| €UÑÎ73#'53#5#535#5½"ÎyQ#tnUÐÎ73#'3#5#535#53¼+####Îytt!vNÐÎ73#'3#5#535#53¼(΀{{ bBÐÎ73#'3#5#535#53¼+//!!ÎŒ‡yvBÐÎ73#'3#5#535#53¼%!!!!ÎŒ‡yyBÐÎ73#'3#5#535#53¼%ÎŒ‡|-bBÐÎ73#'3#5#535#53¼.,,,,ÎŒ‡t)nBÐÎ73#'3#5#535#53¼,""""ÎŒ‡t!oBÐÎ73#'3#5#535#53¼+""""ÎŒ‡}+oBÐÎ73#'3#5#535#53¼(%%%%ÎŒ‡| €BÑÎ73#'53#5#535#5½"ÎŒ_(|lBÐÎ73#'3#5#535#53¼+%%%%ÎŒ‡tvBÐÎ73#'3#5#535#53¼(ÎŒ‡|  ên7#5353êÕVQQ êp7#5353êÕfSS êW7#5353êÕa:: êe7#5353êÕaHH ê]7#5353êÕa@@ ê>7#5353êÕa!! êN7#5353êÕa11 êQ7#5353êÕa44Gê7#5353êÕVZ55Lê7#5353êÕl_..Dêp7#5353êÕaWDê{7#5353êÕaW$$Bê}7#5353êÕaU((9êc7#5353êÕaLAêo7#5353êÕaTGê7#5353êÕVZ%%@êo7#5353êÕaS\ê˜7#5353êÕVo))\ê˜733#53UÕl˜)Uê|7#5353êÕahXê7#5353êÕak$$Uê‡7#5353êÕahXê…7#5353êÕakFêo7#5353êÕaYPêy7#5353êÕacZêˆ7#5353êÕWmQêy7#5353êÕadcê7#5353êÕVv''cê7#5353êÕlv''[êƒ7#5353êÕan[êŽ7#5353êÕan [ê‰7#5353êÕanYê…7#5353êÕalIêo7#5353êÕa[Zê~7#5353êÕal[êŠ7#5353êÕWnYê€7#5353êÕakWê˜733#53UÕl˜.Qê733#53~XÕiSêŽ7#5353êÕaf((Sê‡7#5353êÕaf!!Sê‡7#5353êÕaf!!Eêo7#5353êÕaXNêz7#5353êÕaaSê…7#5353êÕWfLê{7#5353êÕa_ÿëöÎ733##'37'7¼&&tP™8ÎhhIÿëöÎ733##'37'7¼&&^;™NÎhhGÿëöÎ733##'37'7¼&&fB™FÎhhl+ÿëöÎ733##'37'7¼&&gB™EÎhh„CÿëöÎ733##'37'7¼&&gB™EÎhhx7ÿëöÎ733##'37'7¼&&fB™FÎhhu4ÿëöÎ733##'37'7¼&&fB™FÎhh[ ÿëöÎ733##'37'7¼&&fB™FÎhhl,ÿëöÎ733##'37'7¼&&tP™8Îaoy1ÿëöÎ733##'37'7¼&&fB™FÎhhl,$öÎ733##'37'7¼&&tP™8ÎSDj7 $öÎ733##'37'7¼&&_;šMÎSDj6 $öÎ733##'37'7¼&&fBšFÎSDI $öÎ733##'37'7¼&&fBšFÎSD_+ $öÎ733##'37'7¼&&fBšFÎSDT$ $öÎ733##'37'7¼&&fBšFÎSDY+ $öÎ733##'37'7¼&&fBšFÎY>> $öÎ733##'37'7¼&&fBšFÎRDF $öÎ733##'37'7¼&&uQš7ÎQFV' $öÎ733##'37'7¼&&fBšFÎSDH LöÎ733##'37'7¼&&tPš8ÎE*M0 LöÎ733##'37'7¼&&^;šNÎE*N/ LöÎ733##'37'7¼&&fBšFÎE*+ LöÎ733##'37'7¼&&fBšFÎE*?& KöÎ733##'37'7¼&&fBšFÎE+8 KöÎ733##'37'7¼&&fBšFÎE+<%>öÎ733##'37'7¼&&fBšFÎN** DõÎ733##'37'7¼%%fFFÎN)3 MöÎ733##'37'7¼&&uQš7ÎE)8  CöÎ733##'37'7¼&&fBšFÎE32 SöÎ733##'37'7¼&&tPš8ÎA'F+ SöÎ733##'37'7¼&&^:šNÎA'C& QöÎ733##'37'7¼&&fBšFÎA)* QöÎ733##'37'7¼&&fBšFÎA)A$ QöÎ733##'37'7¼&&fBšFÎA)5RöÎ733##'37'7¼&&fBšFÎA(6DöÎ733##'37'7¼&&fBšFÎN', PöÎ733##'37'7¾%%iBšFÎA*+PöÎ733##'37'7¼&&tPš9ÎA*6IöÎ733##'37'7¼&&fBšGÎA11<öÎ733##'37'7¼&&uQš7ÎE:]5 <öÎ733##'37'7¼&&^;šNÎE:Z1 <öÎ733##'37'7¼&&fBšFÎE:> <öÎ733##'37'7¼&&fBšFÎE:O& <öÎ733##'37'7¼&&fBšFÎE:G#<öÎ733##'37'7¼&&fBšFÎE:L'6öÎ733##'37'7¼&&fBšFÎN77 7öÎ7##5337'7ö%{BšF€6—N  <öÎ733##'37'7¼&&uQš7ÎE:I# 6öÎ733##'37'7¼&&fBšFÎDA= ÿëÐÎ 73353#5##'37'7’`?t$É`eãl_zI ÿëÐÎ 73353#5##'37'7–M0|;É`eãl_}J ÿëÐÎ 73353#5##'37'7–L/|<É`eãl_b/ ÿëÐÎ 73353#5##'37'7‘K+t8É`eãl_zG ÿëÐÎ 73353#5##'37'7‘K+t8É`eãl_l9 ÿëÐÎ 73353#5##'37'7’L+t8É`eãl_j7 ÿëÐÎ 73353#5##'37'7‘K+t8É`eãl_R ÿëÐÎ 73353#5##'37'7›U68É`eãl_\) ÿëÐÎ 73353#5##'37'7’X7t,É`eãl_l2 ÿëÐÎ 73353#5##'37'7“M+t8É`eãl_b' &ÐÎ 73353#5##'37'7’`@u$ËEH¨MDb9 &ÐÎ 73#5##533'37'7¼s2}:ΨMDœE1&ÐÎ 73#5##53337'7¼v5}7ΨMDœE&ÐÎ 73353#5##'37'7’L,u8ËEH¨MDM#&ÐÎ 73353#5##'37'7’L1y7ËKN¨G>J$&ÐÎ 73353#5##'37'7’L1y7ËKN¨G>J$&ÐÎ 73353#5##'37'7’L1y7ËX[¨;2:+ÐÎ 73353#5##'37'7—Q5}7ËEH£G;3 +ÐÎ 73353#5##'37'7’X7s+ËEH£G;F( $ÐÎ 73353#5##'37'7’L1y7ËWZª=6BHÐÎ 73353#5##'37'7‘_?s#Ì:<†74K.HÐÎ 73353#5##'37'7–M.y:Ì:<†74I/HÐÎ 73353#5##'37'7–P3{7Ì:<22+IÐÎ 73353#5##'37'7‘K1y7Ì@B…0,9IÐÎ 73353#5##'37'7‘K1y7ÌEG…+'6!HÐÎ 73353#5##'37'7‘K1y7Ì:<†749#?ÐÎ 73353#5##'37'7‘K1y7ÌLNŽ--+HÐÎ 73353#5##'37'7šT8€7ÌEG…+'& IÐÎ 73353#5##'37'7‘W9v,Ë9<…628  BÐÎ 73353#5##'37'7‘K1z8ËKNŒ+(1 SÐÎ 73353#5##'37'7‘_Au#Ì:<{,,C*SÐÎ 73353#5##'37'7–M0{:Ì:<{,,A&RÐÎ 73353#5##'37'7–P4|7Ì:<|---RÐÎ 73353#5##'37'7‘K1y7Ì?A|((@%RÐÎ 73353#5##'37'7‘K1y7Ì?A|((2RÐÎ 73353#5##'37'7‘K1y7Ì?A|((5CÐÎ 73353#5##'37'7‘K1y7ÌLNˆ'', OÐÎ 73353#5##'37'7šT77ÌEG%%2RÐÎ 73353#5##'37'7‘W9v,Ë9<|--1 IÐÎ 73353#5##'37'7‘K0y8ËBE…../ <ÐÎ 73353#5##'37'7‘_Bv#Ì:<’C9L-<ÐÎ 73353#5##'37'7–M1|:Ì@B’=3K/<ÐÎ 73353#5##'37'7–P4|7Ì@B’=21 =ÐÎ 73353#5##'37'7‘K1y7Ì?A‘=3@&=ÐÎ 73353#5##'37'7‘K1y7ÌKM‘1'9$<ÐÎ 73353#5##'37'7‘K1y7Ì@B’=3:$ 6ÐÎ 73353#5##'37'7‘K1y7ÌLN˜704 =ÐÎ 73353#5##'37'7šT8€7ÌFH‘5++ =ÐÎ 73353#5##'37'7‘W9v,Ë9<‘B8>  6ÐÎ 73353#5##'37'7‘K1z8ËLO˜6,1 ÿëÐÎ 73#'37'7¼tP™8ÎãIÿëÐÎ 73#''753¼™NÎãLIGÿëÐÎ 73#'37'7¼^:™NÎãl*ÿëÐÎ 73#''753¼™EÎãHGEÿëÐÎ 73#''753¼™EÎãH86ÿëÐÎ 73#''753¼™EÎãC!ÿëÑÎ 73#''753½šEÎãF-+ÿëÐÎ 73#''753¼™8ÎãP42ÿëÐÎ 73#''753¼™EÎãH,*$ÐÎ 73#'37'7¼tPš8Ϊj7 $ÐÎ 73#'37'7¼_;šMΪj6 $ÐÎ 73#'37'7¼fC›FΪI $ÐÎ 73#'37'7¼fBšFΪ_+ $ÐÎ 73#'37'7¼fBšFΪT$ $ÐÎ 73#'37'7¼fC›FΪY+ $ÐÎ 73#'37'7¼fBšFΪ> $ÑÎ 73#'37'7½gEFΪF $ÐÎ 73#'37'7¼uQš7ΪV' $ÐÎ 73#'37'7¼fC›FΪH LÐÎ 73#'37'7¼tPš8΂M0 LÐÎ 73#'37'7¼^<›N΂N/ LÐÎ 73#'37'7¼fC›F΂+ LÐÎ 73#'37'7¼fC›F΂?& KÐÎ 73#'37'7¼fC›F΃8 KÐÎ 73#'37'7¼fC›F΃<%>ÐÎ 73#'37'7¼fC›F΋* KÐÎ 73#'37'7¼fEF΃+ MÐÎ 73#'37'7¼uQš7Î8  CÐÎ 73#'37'7¼fC›F΋2 SÐÎ 73#'37'7¼tQ›8Î{F+ SÐÎ 73#'37'7¼^;›NÎ{C% QÐÎ 73#'37'7¼fC›FÎ}* QÐÎ 73#'37'7¼fC›FÎ}A$ QÐÎ 73#'37'7¼fC›FÎ}5RÐÎ 73#'37'7¼fC›FÎ|6 DÐÎ 73#'37'7¼fC›FΈ, PÑÎ 73#'37'7¾iEFÎ~+ PÐÎ 73#'37'7¼tRœ9Î~6IÐÎ 73#'37'7¼fDœGÎ…1<ÐÎ 73#'37'7¼uQš7Î’]5 <ÐÎ 73#'37'7¼^<›NÎ’Z1 <ÐÎ 73#'37'7¼fC›FÎ’> <ÐÎ 73#'37'7¼fBšFÎ’O& <ÐÎ 73#'37'7¼fBšFÎ’G#<ÐÎ 73#'37'7¼fC›FÎ’L'6ÐÎ 73#'37'7¼fC›FΘ7 :ÑÎ 73#'37'7¾hEFΔ= <ÐÎ 73#'37'7¼uR›7Î’I# 6ÐÎ 73#'37'7¼fC›FΘ=  ëu 733533#53J YÖ5uXXX ëm 733533#53jEÖUmPPP ëU 733533#53O::Ö:U888 ëU 733533#53O::Ö:U888 ëR 733533#53O::Ö:R555 ëV 733533#53O::Ö:V999 ë= 733533#53N<9Ö9=  ëM 733533#53O::Ö:M000 ëg 733533#53J YÖ5gJJJ ëK 7#5353353ëÖ::....Gë 733533#53N!TÖ9555Gë 733533#53nBÖY333Aës 733533#53M=9Ö8sHëƒ 733533#53M=9Ö8ƒ(((Dë{ 733533#53M=9Ö8{$$$Dëy 733533#53M=9Ö8y""":ëa 733533#53M=9Ö8aAë| 733533#53M=9Ö8|(((Gë} 733533#53N!TÖ9}###Aën 733533#53M=9Ö8n\ë˜ 733533#53N!TÖ9˜)))\ë˜ 7#5353353ëÖYo))))Uë… 733533#53M=9Ö8…ZëŒ 733533#53M=9Ö8ŒUë… 733533#53M=9Ö8…Uë… 733533#53M=9Ö8…Gëm 733533#53M=9Ö8mSë… 733533#53M=9Ö8…Zë† 733533#53N!TÖ9†Sëx 733533#53M=9Ö8xcëœ 733533#53N!TÖ9œ&&&cëœ 733533#53nBÖYœ&&&Zë… 733533#53M=9Ö8…ZëŽ 733533#53M=9Ö8Ž!!!Zë‰ 733533#53M=9Ö8‰Xë… 733533#53M=9Ö8…Iëm 733533#53M=9Ö8mZë„ 733533#53M=9Ö8„Zë‡ 733533#53N!TÖ9‡Xë} 733533#53M=9Ö8}Wë˜ 733533#53N!TÖ9˜...Wë— 733533#53nBÖY—---Që… 733533#53M=9Ö8…!!!XëŒ 733533#53M=9Ö8Œ!!!Rë„ 733533#53M=9Ö8„Rë„ 733533#53M=9Ö8„Gëm 733533#53M=9Ö8mSë… 733533#53M=9Ö8…Rë… 733533#53N!TÖ9… Lëx 733533#53M=9Ö8xÿëëf7##5#5ëbafhhÿëëY7##5#5ëbaY[[ÿëë\7##5#5ëba\^^ÿëëY7##5#5ëbaY[[ÿëëY7##5#5ëbaY[[ÿëëO7##5#5ëbaOQQ ëv7##5#5ë_dvCC ëf7##5#5ë_df33 ëk7##5#5ë_dk88 ë_7##5#5ë_d_,,ëV7#53##ydÖ_C(Kë}7##5#5ëba}Fër7#53##vaÖb^?ëu7##5#5ëbau##>ëm7##5#5ëbam4ëb7##5#5ëbab<ëm7##5#5ëbam:ëi7##5#5ëbaiIë}7##5#5ëba}!!Eëp7#53##vaÖb\Eëu7##5#5ëbauEëo7##5#5ëbao:ëe7##5#5ëbaeDëm7##5#5ëaamBëh7##5#5ë``hIë}7##5#5ëba}!!Iëp7#53##vaÖb\Iëp7##5#5ëbapIëp7##5#5ëbap<ë`7##5#5ëba`Gëm7##5#5ëbam3ëf7##5#5ëbaf Ië7##5#5ëba##Bër7#53##vaÖb_Bëv7#53##vaÖbc!Bëo7#53##vaÖb]7ë_7#53##vaÖbMBëo7#53##vaÖb]Fëo7#53##vaÖb]ÿëÐÎ753#5#5''7#¼72AšBBŒãD \ÿëÐÎ753#5#5''7#¼70C¡F7—ã9 KÿëÐÎ753#5#5''7#¼70Cš?;“ã= QÿëÐÎ753#5#5''7#¼70Cš?4šã6 KÿëÐÎ753#5#5''7#¼61Cš?-¡ã/ :ÿëÐÎ753#5#5''7#¼70C¢H7—ã9 KÿëÐÎ73#5#53''7#¼66fDš?Îã0  A#ÐÎ753#5#5''7#¼72AšBWw«! ?#ÐÎ753#5#5''7#¼51Dš?O«  /#ÐÎ753#5#5''7#¼51Dš?O«  /#ÐÎ753#5#5''7#¼51Dš?O«  /ÐÎ753#5#5''7#¼52Cš@BŒ³)#ÐÎ753#5#5''7#¼52CœBO«  /ÐÎ753#5#5''7#¼52C›AG‡³ 2KÐÎ753#5#5''7#¼55@šCkcƒ &BÐÎ753#5#5''7#¼51D E_oŒ  !DÐÎ753#5#5''7#¼51Dš?djŠ "DÐÎ753#5#5''7#¼51Dš?`nŠ   =ÐÎ753#5#5''7#¼51Dš?Uy‘ AÐÎ753#5#5''7#¼52C¢H]q  =ÐÎ753#5#5''7#¼51Dš?Ww‘  DÐÎ753#5#5''7#¼54AšBlbŠ0AÐÎ753#5#5''7#¼51D¡F`n   @ÐÎ753#5#5''7#¼51D›@eiŽ %@ÐÎ753#5#5''7#¼51D›@eiŽ #=ÐÎ753#5#5'7#¼51Dš?Xv‘  AÑÎ753#5#5''7#½62C£I_o BÐÎ753#5#5''7#¼51D›?\rŒ  =ÐÎ753#5#5''7#¼54A›Chf‘ 3<ÐÎ753#5#5''7#¼51D Eam‘,<ÐÎ753#5#5''7#¼51Dš?ck‘-<ÐÎ753#5#5''7#¼51Dš?\r‘  *7ÐÎ753#5#5''7#¼51Dš?Q}— !=ÐÎ753#5#5''7#¼52C¢H^p‘(7ÐÎ753#5#5''7#¼51Dš?Yu—%LÐÎ753#5#5''7#¼54AšBlb  *EÐÎ753#5#5''7#¼51D E`n‰  !CÐÎ753#5#5''7#¼51D›@ei‹ #EÐÎ753#5#5''7#¼51D E`n‰  !<ÐÎ753#5#5#'7#¼51D›@Xv‘ BÐÎ753#5#5''7#¼52C¢H_oŒ  AÐÎ753#5#5''7#¼51D›@[s ÿëÐÎ 73#'3#5#53''7#¼'&&P3|2ÎãÞÑBXÿëÐÎ 73#'3#5#53''7#¼'&&P3|2ÎãÞÑ/ AÿëÐÎ 73#'3#5#53''7#¼'&&P3|2ÎãÞÑ6  GÿëÐÎ 73#'3#5#53''7#¼'&&P3|2ÎãÞÑ6  GÿëÐÎ 73#'3#5#53''7#¼'&&P3|2ÎãÞÖ+:ÿëÐÎ 73#'3#5#53''7#¼ ''V46ÎãÞÖ4 @ÿëÐÎ 73#'3#5#53''7#¼&''Q3|2ÎãÞÖ/ C#ÐÎ 73#'3#5#53''7#¼'&&P3{1Ϋ¦ž!  4#ÐÎ 73#'3#5#53''7#¼'&&P3{1Ϋ¦ž ##ÐÎ 73#'3#5#53''7#¼'&&P3{1Ϋ¦ž  -ÐÎ 73#'3#5#53''7#¼'&&P3{1β­¤(ÐÎ 73#'3#5#53''7#¼'&&M6{.β­¤&#ÐÎ 73#'3#5#53''7#¼!&&T55Ϋ¦ž%ÐÎ 73#'3#5#53''7#¼'&&O4{0β­¤'IÐÎ 73#'3#5#53''7#¼'&&O4{0Î…€|)BÐÎ 73#'3#5#53''7#¼'&&O4{0ÎŒ‡ƒ!BÐÎ 73#'3#5#53''7#¼'&&O4{0ÎŒ‡ƒ (BÐÎ 73#'3#5#53''7#¼'&&O4{0ÎŒ‡ƒ !=ÐÎ 73#'3#5#53''7#¼'&&O4{0ΑŒŒBÐÎ 73#'3#5#53''7#½"&&U4€5ÎŒ‡„!=ÐÎ 73#'3#5#53''7#¼&''P4{0ΑŒ‰ #DÐÎ 73#'3#5#53''7#¼&''P4{0Ί…‚(BÐÎ 73#'3#5#53''7#¼&''P4z/ÎŒ‡„"HÐÎ 73#'3#5#53''7#¼&&&P4{0Ά $HÐÎ 73#'3#5#53''7#¼&&&P4{0Ά <ÐÎ 73#'3#5#53''7#¼&''Q4{1Î’ŠBÐÎ 73#'3#5#53''7#¼!&&U46ÎŒ‡„ !BÐÎ 73#'3#5#53''7#¼&''P4{0ÎŒ‡„  <ÐÎ 73#'3#5#53''7#¼'&&P3{1ΑŒ‚ 4<ÐÎ 73#'3#5#53''7#¼'&&P3{1ΑŒ‚ +<ÐÎ 73#'3#5#53''7#¼'&&P3{1ΑŒ‚  2<ÐÎ 73#'3#5#53''7#¼'&&P3{1ΑŒ‚ *6ÐÎ 73#'3#5#53''7#¼'&&P3{1Θ“Œ <ÐÎ 73#'3#5#53''7#¼!&&T56ΑŒ„ *6ÐÎ 73#'3#5#53''7#¼'&&P3{1Θ“Œ *LÐÎ 73#'3#5#53''7#¼&&&P4{0΂}} (EÐÎ 73#'3#5#53''7#¼'&&P3{1Ή„„ !EÐÎ 73#'3#5#53''7#¼'&&P3{1Ή„‚  'EÐÎ 73#'3#5#53''7#¼'&&P3{1Ή„„ $=ÐÎ 73#'3#5#53''7#¼'&&P4{1ΑŒŒ  DÐÎ 73#'3#5#53''7#¼!&&T66Ί…  BÐÎ 73#'3#5#53''7#¼'&&P3{1ÎŒ‡„ ÿëÐÎ 73#''7#¼fD EÎãk [ÿëÐÎ 73#''7#¼fD EÎãZ KÿëÐÎ 73#''7#¼fD EÎã_ OÿëÐÎ 73#''7#¼fD EÎãY IÿëÐÎ 73#''7#¼fDš?ÎãI @ÿëÑÎ 73#''7#½gD£HÎãZ JÿëÑÎ 73#''7#½gDš?ÎãO ?#ÐÎ 73#''7#¼fDŸDΫ? 7#ÐÎ 73#'#5'¼ EDΫF('#ÐÎ 73#'#5'¼ EDΫH*(#ÐÎ 73#'#5'¼ EDΫH*(ÐÎ 73#'#5'¼ EDα> #ÑÎ 73#'#5'½EDΫF('ÐÎ 73#'#5'¼ EDαA$#NÐÎ 73#''7#¼gC E΀!"LÐÎ 73#''7#¼gC E΂ GÐÎ 73#''7#¼gC E· GÐÎ 73#''7#¼gC E· ?ÐÎ 73#''7#¼gC EÎ GÐÎ 73#''7#¼gC E· ?ÐÎ 73#''7#¼fD EÎGÐÎ 73#''7#¼gC E·*+GÐÎ 73#''7#¼gC E· GÐÎ 73#''7#¼gC E· GÐÎ 73#''7#¼gC E·?ÐÎ 73#''7#¼fD EÎGÐÎ 73#''7#¼gC E·?ÐÎ 73#''7#¼fD EÎ=ÐÎ 73#''7#¼gC EΑ42=ÐÎ 73#''7#¼gC EΑ$ "=ÐÎ 73#''7#¼gC EΑ('=ÐÎ 73#''7#¼gC EΑ% #8ÐÎ 73#''7#¼fD EΖ>ÐÎ 73#''7#¼gC EÎ$%9ÐÎ 73#''7#¼fD EΕ!PÐÎ 73#''7#¼gC EÎ~  LÐÎ 73#''7#¼gC E΂KÐÎ 73#''7#¼gC E΃KÐÎ 73#''7#¼gC E΃AÐÎ 73#''7#¼fD EÎ IÐÎ 73#''7#¼fD EÎ…CÐÎ 73#''7#¼fD E΋ÿíëf 7##5##5#5ë2K1fff__ÿíëY 7#53##5##F1Ö2KFYYRÿíë\ 7##5##5#5ë2K1\\\UUÿíëY 7#53##5##F1Ö2KFYYRÿíëO 7#53##5##F1Ö2K<OOHÿíëY 7#53##5##F1Ö2KFYYRÿíëO 7#53##5##F1Ö2K<OOH!ëv 7#53##5##U@Ö2;cBB>!ëf 7#53##5##U@Ö2;S22.!ëk 7#53##5##U@Ö2;X773!ë_ 7#53##5##U@Ö2;L++'ëS 7#53##5##U@Ö2;@$$ë_ 7#53##5##U@Ö2;L00+ëV 7#53##5##U@Ö:3C++&Jë} 7#53##5##F1Ö2Kj Gër 7#53##5##F1Ö2K^Jëx 7#53##5##F1Ö2Ke@ëm 7#53##5##F1Ö2KZ8ëb 7#53##5##F1Ö2KO=ëp 7#53##5##F1Ö2K\=ëi 7#53##5##F1Ö2KVLë} 7#53##5##F1Ö2KjBëp 7#53##5##F1Ö2K\Hëu 7#53##5##F1Ö2KbCëo 7#53##5##F1Ö2K]:ëc 7#53##5##F1Ö2KR>ëo 7#53##5##F1Ö2K]Bëi 7#53##5##F1Ö2KW=ë} 7#53##5##F1Ö2Kj---=ëp 7#53##5##F1Ö2K\=ëp 7#53##5##F1Ö2K\=ëp 7#53##5##F1Ö2K\/ë` 7#53##5##F1Ö2KM=ëp 7#53##5##F1Ö2K\4ëf 7#53##5##F1Ö2KSHë 7#53##5##F1Ö2Kl$$$Bër 7#53##5##F1Ö2K`Bër 7#53##5##F1Ö2K`Bëo 7#53##5##F1Ö2K]8ë_ 7#53##5##F1Ö2KLBëo 7#53##5##F1Ö2K]Fëo 7#53##5##F1Ö2K] ë7#5ëÖ ë7#5ëÖ ë7#5ëÖ ë7#5ëÖ ë7#5ëÖ ë7#5ëÖ ë7#5ëÖUëh7#5ëÖhIë\7#5ëÖ\Gë[7#5ëÖ[<ëO7#5ëÖODëW7#5ëÖW@ëS7#5ëÖSfëy7#5ëÖyXëk7#5ëÖkUëh7#5ëÖhUëh7#5ëÖhLë_7#5ëÖ_Uëh7#5ëÖhSëf7#5ëÖfgëz7#5ëÖzUëh7#5ëÖhZëm7#5ëÖmYël7#5ëÖlOëa7#5ëÖaVëh7#5ëÖhXëj7#5ëÖjcëv7#5ëÖvVëh7#5ëÖhYël7#5ëÖlVëh7#5ëÖhJë\7#5ëÖ\Uëh7#5ëÖhQëd7#5ëÖdfëy7#5ëÖy^ër7#5ëÖraës7#5ëÖs_ëq7#5ëÖqLë^7#5ëÖ^]ëo7#5ëÖoZël7#5ëÖlÿëÐÎ73#''¼ ÎãF ÿëÐÎ73#''¼ ÎãF ÿëÐÎ73#''¼ ÎãF ÿëÐÎ73#''¼ ÎãF ÿëÐÎ73#''¼ ÎãN ÿëÐÎ73#''¼ ÎãG #ÐÎ73#''¼œΫJ #ÐÎ73#''¼œΫ: #ÐÎ73#''¼œΫ> #ÐÎ73#''¼œΫ7 #ÐÎ73#''¼œΫ) #ÐÎ73#''¼œΫ@ #ÐÎ73#''¼œΫ7 NÐÎ73#''¼ ΀+NÐÎ73#''¼ ΀NÐÎ73#''¼ ΀ NÐÎ73#''¼ ΀  AÐÎ73#''¼œΊ MÐÎ73#''¼œÎ  DÐÎ73#''¼œΊMÐÎ73#''¼œÎ. MÐÎ73#''¼œÎ& MÐÎ73#''¼œÎ& MÐÎ73#''¼œÎ$ =ÐÎ73#''¼œΑ% MÐÎ73#''¼ žÎ( EÐÎ73#''¼œΉ"=ÐÎ73#''¼œΑ7 =ÐÎ73#''¼œΑ0 =ÐÎ73#''¼œΑ2 =ÐÎ73#''¼œΑ/ 6ÐÎ73#''¼œΘ& =ÐÎ73#''¼œΑ. 6ÐÎ73#''¼œΘ- RÐÎ73#''¼œÎ|( RÐÎ73#''¼œÎ|  SÐÎ73#''¼œÎ{' SÐÎ73#''¼œÎ{ EÐÎ73#''¼œΉRÐÎ73#''¼œÎ| MÐÎ73#''¼œÎ¼ÿëÐÎ73#¼Îã¼ÿëÐÎ73#¼Îã½ÿëÑÎ73#½Îã¼%ÐÎ73#¼Ω¼%ÐÎ73#¼Ω½%ÑÎ73#½Ω¼PÐÎ73#¼Î~¼PÐÎ73#¼Î~¼PÐÎ73#¼Î~¼BÐÎ73#¼ÎŒ¼BÐÎ73#¼ÎŒ¼BÐÎ73#¼ÎŒ¼UÐÎ73#¼Îy¼UÐÎ73#¼Îy½UÑÎ73#½Îy.ÿëÐ@73#5#.¢Ž@UB.ÿëÐ@73#5#.¢Ž@UB.ÿëÐ@73#5#.¢Ž@UB.ÿëÎ=73#5#. Œ=R?.ÿëÐ<73#5#.¢Ž '7#5327#7#5"&54632'"32654&Ä=b#,ºr9  >9<C  )ÿçßQ '7#5327#7#5"&54632'"32654&Ä;`",¶p8  QMIQ  *%ÿçßQ '7#5327#7#5"&54632'"32654&Ä>a#,ºs9  QMIQ  *%ÿçßQ '7#5327#7#5"&54632'"32654&Ä>a#,ºs9  QMIQ  *.ÿçßQ '7#5327#7#5"&54632'"32654&Å:]!)±n7 QN JQ  *)ÿçßQ '7#5327#7#5"&54632'"32654&Ä=^")¶r9  Q FIQ  *%ÿçßQ '7#5327#7#5"&54632'"32654&Ä?`"*ºu:  Q FIQ  *%ÿçßQ '7#5327#7#5"&54632'"32654&Ä?`"*ºu:Q FIQ  *5ÿïÕF7#3#5І‹ F1W2ÿïÕF7#3#5Њ£F1W1ÿïÕF7#3#5Ћ¤F1W1ÿïÑ?7#3#5͈Œ ?*P5ÿïÕ?7#3#5І‹ ?*P5ÿïÕ?7#3#5ЇŒ ?*P2ÿïÕ<7#3#5Њ£<'M1ÿïÑ67#3#5͈Œ 6!G5ÿïÕ67#3#5І‹ 6!G5ÿïÕ67#3#5І‹ 6!G2ÿïÕ67#3#5Њ£6!G5ÿíÕ67#3#5І‹ 6#I5ÿìÕ67#3#5ЇŒ 6$J2ÿìÕ67#3#5Њ£6$J5ÿìÕF7#3#5І‹ F4Z2ÿìÕF7#3#5Њ£F4Z2ÿìÕF7#3#5Њ£F4Z1ÿíÑB7#3#5͈Œ B/U5ÿìÕ@7#3#5І‹ @.T5ÿìÕ@7#3#5І‹ @.T2ÿìÕ@7#3#5Њ£@.T5ÿíÕL 73#3#535#6š‡Œ ‡†L7;5ÿíÕL 73#3#535#6š‡Œ ‡†L7;1ÿíÕL 73#3#535#2ž‹¤‹ŠL7;1ÿíÑL 73#3#535#2œ‰Œ ‰ˆL7;5ÿíÕG 73#3#535#6š‡Œ ‡†G595ÿíÕD 73#3#535#6š‡Œ ‡†D461ÿíÕB 73#3#535#2ž‹¤‹ŠB35 1ÿíÑ< 73#3#535#2œ‰Œ ‰ˆLaN5=)ÿëÐH73#5#'3#67535#†J6]S@%(03??H]J49%ÿëÐE73#5#'3#67535#…K7_TA%*15A@EZH48)ÿëÐ@73#5#'3#27535#†J6]S@$)03??@UC/7 ,ÿëÔ;73#5#'3#67535#ŠJ6]R?$'03?>;P>-3 )ÿëÐ;73#5#'3#67535#†J6]S@%(03??;P>-3 %ÿëÐ;73#5#'3#67535#…K7_TA%(14A@;P>-3 %ÿëÐ;73#5#'3#67535#…K7_TA%(14A@;P=.2 )ÿëÐB73#5#'3#27535#†J6]S@$)03??BWD17 %ÿëÐ?73#5#'3#67535#†J6`VC%(14CB?TB15 %ÿëÐ;73#5#'3#67535#†J6`TA%)14A@;P>.2 )ÿëÐN73#5#'3#27535#†J6]S@%(03??NcP8<%ÿëÐN73#5#'3#27535#†J6`UB%)14BANcP8<#ÿëÐN73#5#'3#27535#…K7`UC&*25CANcP8<,ÿìÔO73#5#'3#67535#ŠJ6]R?$)04?>OcP8=)ÿëÐJ73#5#'3#67535#†J6]S@%(03??J_M5:%ÿëÐI73#5#'3#67535#…K7_TA%*15A@I^L79%ÿëÐH73#5#'3#67535#…K7_TA%(14A@H]J49)ÿíÐL 73#67535#7#5##535#)M:"*-99§%%%L7;]]F3%ÿíÐL 73#67535#7#5##535#&M:!+-:9ª&&&L7;]]F3%ÿíÐL 73#67535#7#5##535#&M:!+-:9ª&&&L7;]]F3+ÿíÔL 73#67535#7#5##535#,L9!+-98¨&&&L7;]]F3)ÿíÐH 7#5##535#'3#67535#Ð%%%nM:#+-99HYYC039%ÿíÐG 7#5##535#'3#67535#Ð'''oN;#,.;:GXXB048%ÿíÐ? 7#5##535#'3#27535#Ð'''oN;#,.;:?PP:).5 ,ÿîÔ; 73#27535#7#5##535#,N:"*-::¨&&&;.0 LL6$)ÿíÐ; 7#5##535#'3#27535#Ð%%%nM:#+-99;LL6$.1 &ÿíÐ; 7#5##535#'3#27535#Ð'''nM:"+.:9;LL6$.1 &ÿíÐ; 7#5##535#'3#27535#Ð'''nM:"+.:9;LL6$.1 )ÿíÐA 7#5##535#'3#27535#Ð'''lM:!*,99ARR<*/6 %ÿíÐA 7#5##535#'3#27535#Ð'''oN;"+.;:ARR<*/6 %ÿíÐ> 7#5##535#'3#27535#Ð'''oN;"+.;:>OO9(,6 )ÿíÐN 73#67535#7#5##535#)M:"*-99§%%%N8<__H5#ÿíÐN 73#27535#7#5##535#%O=!$,0=;«'''N8<__H5#ÿíÐN 73#27535#7#5##535#%O= $,/=;«'''N8<__H5+ÿíÔO 73#67535#7#5##535#+N:"+-::©&&&O8=``I6)ÿîÐI 73#27535#7#5##535#)M:!+,99§%%%I39ZZD3%ÿîÐK 73#67535#7#5##535#%O;#,.;;«&&&K4:\\F4%ÿîÐH 73#27535#7#5##535#%O;$,.;;«&&&H29YYC2)ÿíÐL 73#67535#53#5##535#)M:"*-99“&&&L7; \\(%ÿíÐL 753#5##535#'3#67535#¼'''oM:!+-:9.]](F7;%ÿíÐL 73#67535#53#5##535#&M:!+-:9–'''L7; ]](+ÿðÔL 73#67535#53#5##535#,L9!+-98”&&&L5:ZZ*)ÿíÐH 753#5##535#'3#67535#¼&&&mM:"*-99,YY'C58%ÿíÐG 753#5##535#'3#67535#¼'''oN;#,.;:,XX'B48%ÿíÐ? 753#5##535#'3#27535#¼'''oN;#,.;:+PP&:.5 +ÿîÔ< 73#27535#53#5##535#,L9"+-98”&&&<.1 KK"&ÿíÐ: 753#5##535#'3#67535#¼(((mM:"*.:9&KK!5,3&ÿíÐ9 753#5##535#'3#67535#¼(((mM:"+-:9%JJ 4,1 &ÿíÐ9 753#5##535#'3#67535#¼(((mM:"+-:9%JJ 4,1 &ÿìÐA 753#5##535#'3#67535#¼(((mM:"+-:9*RR%<06 %ÿìÐ@ 753#5##535#'3#67535#¼(((mM;",-;9)QQ$;05 %ÿìÐ= 753#5##535#'3#67535#¼(((mM;",-;9)NN$8/4 )ÿñÐN 73#67535#53#5##535#)M:"*,99“&&&N5;\\+%ÿìÐN 73#27535#53#5##535#&N;#+.;:–&&&N5@^^+%ÿìÐN 73#27535#53#5##535#&N;#+.;:–&&&N5@^^++ÿíÔO 73#67535#53#5##535#,N;"*-;:”&&&O7> ``,)ÿîÐJ 753#5##5335#'3#27535#¼&&&mM:!+,990[[++2:%ÿîÐJ 753#5##5335#'3#27535#¼'''oN;#+.;:0[[++2:%ÿîÐH 753#5##5335#'3#27535#¼'''oN;#+.;:.YY)+29)ÿììM 7'6753&'3#67535#· " )* !–R?!*,>>*)O6<&ÿìéM 7'6753&'3#67535#³ ! )* !”Q>!*,>=))O6<&ÿìéM 7'6753&'3#67535#³ " (, !”Q>!),>=*(O6<&ÿìãM 7'6753&'3#67535#® ! (+ Q>'*>=))O6<)ÿìéI 7'6753&'3#67535#³ '+ !’R? *+>>))K5:%ÿëèG 73#67535#'6753&%S?!*,??Œ  (, !G49*(%ÿëéE 7'6753&'3#67535#± ! )- !–T@!),@@*( J47&ÿìé@ 7'6753&'3#67535#± ), "“R? )+?>#" B0 2 )ÿìé@ 7'6753&'3#27535#´ !** !‘Q? )+>=%$ A/0 %ÿëé> 7'6753&'3#67535#´ # ,* !•S@!),@?%$ A/0 %ÿìé= 7'6753&'3#27535#´ # -* !•R? )+?>$$ ?. 0 )ÿìéB 7'6753&'3#27535#´ # ,* !‘P>'*=<%$ F/5 %ÿìéB 7'6753&'3#27535#´ % -* !•R? (+?>%$ E/4 %ÿìé@ 7'6753&'3#27535#´ # ,* !•R? ),?>%$ C/3 )ÿììP 7'6753&'3#67535#· " )* !–Q> ),==*)S9=%ÿìéP 7'6753&'3#67535#³ # ,* !–S? )+??))S9=%ÿìéP 7'6753&'3#67535#³ $ +* !–S? )+??))S9=&ÿìãN 73#67535#'6753&'Q> (+>=‡  '* N7=!)))ÿììL 73#67535#'6753&)Q>(+==Ž $ ,* !L5=*)%ÿìéL 73#67535#'6753&%S? ),??Ž " +* !L5=))%ÿìéI 73#67535#'6753&%S? ),??Ž # ,* !I5:)))ÿíÔL 73#67535##3#53#)M:"*-99§6:NJ6L5=_%ÿíÔL 73#67535##3#53#%P<"*-;;«8RM9L5=_)ÿîÔG 73#27535##3#53#)M:"*,99§9=PL9G19Y%ÿîÔG 73#27535##3#53#%P<"*-;;«8RN:@03 R+ÿîÙ; 73#67535##3#53#,J7"+-76¨9>RM9;.1 M )ÿîÔ; 73#27535##3#53#)M:"*,99§9=PL9;,2 M %ÿîÔ> 73#27535##3#53#%P<"*-;;«:>RN:>.3 P%ÿîÔ: 73#27535##3#53#&N;"+-;:ª:>QM::,2  L )ÿîÔA 73#27535##3#53#)M:"*-99§9=PL9A05 S%ÿîÔA 73#27535##3#53#&N; "+/;:ª:>RN:A04 S%ÿîÔ= 73#27535##3#53#&N; "+/;:ª:>RN:=-3  O)ÿíÔN 73#67535##3#53#)M:"*-99§6:NJ6N5?a$ÿíÔN 73#67535##3#53#&N< #,/<:ª6:NJ6N5?a$ÿíÔN 73#67535##3#53#&N< #,/<:ª6:NJ6N5?a+ÿìÙO 73#27535##3#53#+K7!+-77©9>RM9O6@b)ÿíÔL 73#67535##3#53#)L9#+-88§6:NJ6L5=_%ÿíÔL 73#67535##3#53#&N; #,/;:ª8 #53#=#J›r OO%%5ÿïÐ> #53#=#J›r OO%%5ÿïÐ> #53#=#J›r OO%%2ÿïÎ; 7#5##535#Îttt;LL4!5ÿïÐ6 7#5##535#Ðrrr6GG/2ÿïÎ7 7#5##535#Îttt7HH2 5ÿïÐ7 7#5##535#Ðsss7HH2 5ÿïÐ7 7#5##535#Ðsss7HH2 5ÿïÐ7 7#5##535#Ðsss7HH2 5ÿïÐ7 7#5##535#Ðsss7HH2 5ÿïÐF 7#5##535#ÐsssFWW?+2ÿïÐF 7#5##535#ÐvvvFWW?+5ÿïÐF 7#5##535#ÐsssFWW?+2ÿïÎF 7#5##535#ÎtttFWW?,5ÿïÐ? 7#5##535#Ðsss?PP8%5ÿïÐ? 7#5##535#Ðsss?PP8%5ÿïÐ? 7#5##535#Ðsss?PP8%5ÿîÐH 73353#5##735#5rrrrHZ5ÿîÐH 73353#5##735#5rrrrHZ5ÿîÐG 73353#5##735#5rrrrGY1ÿîÎH 73353#5##735#1uuuuHZ5ÿîÐC 73353#5##735#5rrrrCU5ÿîÐB 73353#5##735#5rrrrBT5ÿîÐ@ 73353#5##735#5rrrr@R1ÿîÎB 73353#5##735#1uuuuBT5ÿîÐ9 73353#5##735#5rrrr9K5ÿîÐ9 73353#5##735#5rrrr9K5ÿîÐ8 73353#5##735#5rrrr8J5ÿîÐ9 73353#5##735#5rrrr9K5ÿîÐ9 73353#5##735#5rrrr9K5ÿîÐ8 73353#5##735#5rrrr8J5ÿîÐG 73353#5##735#5rrrrGY5ÿîÐG 73353#5##735#5rrrrGY5ÿîÐG 73353#5##735#5rrrrGY1ÿîÎH 73353#5##735#1uuuuHZ5ÿîÐD 73353#5##735#5rrrrDV5ÿîÐD 73353#5##735#5rrrrDV5ÿîÐD 73353#5##735#5rrrrDV)ÿèìH 73353#5##735#'6753&),,,,z " )* !HZ++%ÿèìH 73353#5##735#'6753&%////~ $ +* !HZ++%ÿèìH 73353#5##735#'6753&%////~ $ +* !HZ++-ÿèìL 73353#5##735#'6753&-,,,,v  '* !L^++)ÿèéH 73353#5##735#'6753&),,,,v  &+ !HZ++.ÿêéH 73353#5##735#'6753&.****q $+ !HZ*+%ÿêéB 73353#5##735#7'6753&%////z (+ !BT* +-ÿêé> 7'6753&'3353#5##735#³ $+ "++++' 'BN)ÿêé> 7'6753&'3353#5##735#³  &+ "‘----' 'BN%ÿêé> 7'6753&'3353#5##735#²  &, "•////' ' CN%ÿêé< 73353#5##735#'6753&%////x &, "<N%$ )ÿêé< 73353#5##735#'6753&)----t %, "<N%%%ÿêé< 73353#5##735#'6753&%////x  &, "<N%%%ÿêé< 73353#5##735#'6753&%////x &, "<N%$ )ÿêìN 73353#5##735#'6753&)----x" )+ !N`*+%ÿêìN 73353#5##735#'6753&%////| " ++ !N`*+%ÿêìN 73353#5##735#'6753&%////| " ++ !N`*+-ÿêìN 73353#5##735#'6753&-,,,,t &+ !N`*+)ÿêìH 73353#5##735#'6753&)----x" )+ !HZ*+%ÿêìH 73353#5##735#'6753&%////| " *, !HZ*+%ÿêìH 73353#5##735#'6753&%////| " *, !HZ*+.ÿèãL7'66753&’D *,$% 6$'( & .ÿèãL7'66753&’D *,$% 6$'( & +ÿèàL7'66753&ŽE )-#& 7$'( % #ÿèÜG7'66753&€? '*', ?!$'% .ÿèãF7'66753&E *,$% 8 #&$ .ÿèãF7'66753&E *,$% 8 #&$ .ÿèãF7'66753&E *,$% 8 #&$ #ÿèÜ:7'66753&€@ (*&- @ .ÿèã>7'66753&D *,$% 8"#!.ÿèã>7'66753&D *,$% 8"#!.ÿèã87'66753&D ++#& 9.ÿêã>7'66753&C ++"' 8  .ÿêã>7'66753&C ++"' 8  .ÿêä<7'66753&D ++"( 9  .ÿèäL7'66753&‘D *,$% 7() (' .ÿèäL7'66753&‘D *,$% 7() (' )ÿèåL7'66753&D *-&( ;'()& #ÿèÜG7'66753&€@ &+&, <"%% " -ÿçåE7'66753&D *-#' 8!$& " -ÿçåE7'66753&D *-#' 8!$& " -ÿçåE7'66753&D *-#' 8!$& " #ÿééE 7'6753&''6753&³ # ), !X ( 0 (&( "ÿééE 7'6753&''6753&³ & -, !Z ' 0 (&(  "ÿééE 7'6753&''6753&³ & -, !Z ' 0 (&(  ÿéãE 7'6753&''6753&® & -+ !X ' 0 (&)  "ÿééE 7'6753&''6753&³ # ++ "V ) 3 +)' !ÿçé@ 7'6753&''6753&³ # +, "X * 1 *&*   !ÿçé@ 7'6753&''6753&³ # +, "X * 1 *&*   ÿéã< 7'6753&''66753&® & -+ "Y &  %#  "ÿéé< 7'6753&''6753&³ $ ++ "T * 3 %# '  !ÿéé< 7'6753&''6753&³ $ ++ "W ) 1 %# (  !ÿéé< 7'6753&''6753&³ $ ++ "W ) 1 %# (  !ÿìé< 7'6753&''6753&³ # ++ "V + 3 & $ ' !ÿìé< 7'6753&''6753&³ # ++ "V + 3 & $ ' !ÿìé< 7'6753&''6753&³ # ++ "V + 3 & $ ' ÿééN 7'6753&''6753&³ # ), "X - 5 0. ,  ÿééN 7'6753&''6753&³ # ), "X - 5 0. ,  ÿééN 7'6753&''6753&³ # ), "X - 5 0. ,  ÿéãJ 7'6753&''6753&® % ,+ !Z ( 1 /-!.!  !ÿééI 7'6753&''6753&´ $ ++ W + 4 0 . +  ÿééI 7'6753&''6753&´ $ ++ [ + 4 0 . +  ÿééI 7'6753&''6753&´ $ ++ [ + 4 0 . +  1ÿçÔD "&54632'"32654&ƒ*((*)(()J  1ÿçÔD "&54632'"32654&ƒ*((*)(()J  1ÿçÔD "&54632'"32654&ƒ*((*)(()J  .ÿçÑA "&54632'"32654&€+''+*''*H    1ÿçÔ? "&54632'"32654&‚*''**((*F 1ÿçÔ? "&54632'"32654&‚*''**((*F 1ÿçÔ? "&54632'"32654&ƒ+''+*''*E .ÿçÑ9 "&54632'"32654&€+''+*''*? 1ÿçÔ7 "&54632'"32654&ƒ+''+*''*= 1ÿçÔ7 "&54632'"32654&ƒ+''+*''*> 1ÿçÔ7 "&54632'"32654&ƒ+''+*''*> 1ÿêÔ7 "&54632'"32654&ƒ,&&,+&&+; 1ÿêÔ7 "&54632'"32654&ƒ,&'+*'&+: 1ÿêÔ7 "&54632'"32654&ƒ,&'+*'&+: 1ÿçÔD "&54632'"32654&ƒ*((*)(()J  1ÿçÔC "&54632'"32654&‚*''*+'(*J1ÿçÔD "&54632'"32654&ƒ*((*)(()J  .ÿçÑE "&54632'"32654&€*('+)(()L1ÿçÔ? "&54632'"32654&ƒ+''+*''*E 1ÿçÔ@ "&54632'"32654&ƒ+''+)('*F 1ÿçÔ@ "&54632'"32654&ƒ+''+*''*F )ÿçáB7#&''67#5ÖGK ?@ I GB(!(%ÿçÞB7#&''67#5ÓGJ ?@ I GB) !(%ÿçÞB7#&''67#5ÓGJ ?@ I GB) !((ÿçØ?7#&''67#5ÎCE << C C?& !  &*ÿçâ<7#&''67#5×F F @? D G<$   $%ÿçÞ<7#&''67#5ÔG F ?A E F<$   $%ÿçÞ<7#&''67#5ÔG F ?A E F<$   $)ÿç×67#&''67#5ÎD A ;: ? D6  *ÿçâ37#&''67#5ÖG H A@ D F3  &ÿçÞ67#&''67#5ÓF E ?? CF6  &ÿçÞ27#&''67#5ÓG G ?@ E F2   *ÿëâ37#&''67#5ÖGK A? H H3    &ÿêÞ67#&''67#5ÓHN ?@ KG6    &ÿêÞ97#&''67#5ÓHL ?? JG9   )ÿçáB7#&''67#5×HK ?@ I GB(!(&ÿçÞB7#&''67#5ÔHK ?@ IFB)  (&ÿçÞB7#&''67#5ÔHK ?@ IFB)  ($ÿçÜB7#&''67#5ÒHK @@ H GB)   )*ÿçâ?7#&''67#5ÖF I ?? D F?&   &&ÿçÞB7#&''67#5ÓGK ?@ IGB)  (&ÿçÞB7#&''67#5ÓGK ?@ IGB)  ()ÿçáR7#5#&''67#5©GtF F ?? E GR   %ÿçÞR7#5#&''67#5¥FuH H ?A G FR   %ÿçÞR7#5#&''67#5¥FuH H ?A G FR   %ÿçÚK7#5#&''67#5£GuF F => D FK   *ÿçâM7#5#&''67#5©GtF F @@ D GM  &ÿçÞM7#5#&''67#5¥FtG G ?? CFM  &ÿíÞI7#5#&''67#5¥FtH J ?> G FI  #ÿçÛE7#5#&''67#5£GuG D ?? CEE  *ÿçáD7#5#&''67#5©GtGJ @@ G GD   &ÿçÞD7#5#&''67#5¥FtHK @? H FD   &ÿçÞA7#5#&''67#5¥FtF D @? AEA  *ÿëáD7#5#&''67#5©GtF F @? C FD  &ÿëÞE7#5#&''67#5¥FtG F ?? C EE  &ÿëÞB7#5#&''67#5¥FtG G @@ E FB  *ÿçâY7#5#&''67#5©GtG I @> E FY#  &ÿçÞY7#5#&''67#5¥FtG I ?? F FY#  &ÿçÞZ7#5#&''67#5«S{G I ?? F FZ$  $ÿçÛW7#5#&''67#5£GuG G ?? E FW!  )ÿçâR7#5#&''67#5©GtGL ?@ I GR!   %ÿçßR7#5#&''67#5¥FuHL @A J GR!   %ÿçßR7#5#&''67#5¥FuHL @A J GR!   -ÿëÐF 73#5'75#.¢ŒŽF[$ -ÿëÐF 73#5'75#.¢ŒŽF[$ -ÿëÐF 73#5'75#.¢ŒŽF[$ -ÿëÎF 73#5'75#. ŠŒF[$ -ÿëÐC 73#5'75#.¢ŒŽCX! -ÿëÐA 73#5'75#.¢ŒŽAV! -ÿëÐ? 73#5'75#.¢ŒŽ?T! -ÿëÎ< 73#5'75#. ŠŒ 7#3#3#5Ї‡‡Œ > Q5ÿíÕ> 7#3#3#5Ї‡‡Œ > Q5ÿíÕ> 7#3#3#5Ї‡‡Œ > Q5ÿìÕM 7#3#3#5Ї‡‡Œ Ma5ÿìÕM 7#3#3#5Ї‡‡Œ Ma1ÿìÕM 7#3#3#5Ћ‹‹¤Ma1ÿìÑO 7#3#3#5͈ˆˆŒ Oc5ÿìÕK 7#3#3#5Ї‡‡Œ K_5ÿìÕK 7#3#3#5Ї‡‡Œ K_5ÿìÕD 7#3#3#5Ї‡‡Œ DX.ÿíØG7#5#53'3373ÒŸ¥ª)/GG----.ÿíØG7#5#53'3373ÒŸ¥ª)/GG----.ÿíØG7#5#53'3373ÒŸ¥ª)/GG----+ÿíÕ@7#5#53'3373Ïž¤ª)1@@((((.ÿíØ<7#5#53'3373ÒŸ¥ª)1<<####.ÿíØ<7#5#53'3373ÒŸ¥ª)1<=$$$$.ÿíØ<7#5#53'3373ÒŸ¥ª)1<=$$$$+ÿíÕ87#5#53'3373Ïž¤ª)189!!!!.ÿíØ67#5#53'3373ÒŸ¥ª)167 .ÿíØ67#5#53'3373ÒŸ¥ª)167 .ÿíØ67#5#53'3373ÒŸ¥ª)167 .ÿðØ:7#5#53'3373ÒŸ¥ª)1:8!!!!.ÿðØ:7#5#53'3373ÒŸ¥ª)1:8!!!!.ÿðØ67#5#53'3373ÒŸ¥ª)164.ÿíØG7#5#53'3373ÒŸ¥ª)/GG----.ÿíØG7#5#53'3373ÒŸ¥ª)/GG----.ÿíØG7#5#53'3373ÒŸ¥ª)/GG----+ÿíÕF7#5#53'3373Ïž¤ª)/FF----.ÿíØ@7#5#53'3373ÒŸ¥ª)0@@&&&&.ÿíØ@7#5#53'3373ÒŸ¥ª)0@@&&&&.ÿíØ@7#5#53'3373ÒŸ¥ª)0@@&&&&0ÿçÜT7#5#5"&54632'"32654&«K|¬V##""TS  *+ÿçÖT7#5#5"&54632'"32654&¦K{«U"## "TS  *0ÿçÜT7#5#5"&54632'"32654&«K|¬V##""TS  *+ÿçÖP7#5#5"&54632'"32654&¦K{«U" !!!#PO  '0ÿçÜM7#5#5"&54632'"32654&«K|¬V#!!#"MM  &+ÿçÖM7#5#5"&54632'"32654&¦K{«U" !!!#MM  &0ÿçÜK7#5#5"&54632'"32654&«K|¬V##""KK  $*ÿçÖD7#5#5"&54632'"32654&¥K|¬V#!!! "DF  0ÿçÜ@7#5#5"&54632'"32654&«K|¬V#!!! "@C +ÿçÖ@7#5#5"&54632'"32654&¦K{«V$!! !"@C 0ÿçÜ?7#5#5"&54632'"32654&«K|¬V#!!! "?C 0ÿçÜD7#5#5"&54632'"32654&«K|¬V#!!! "DF  +ÿç×G7#5#5"&54632'"32654&¦K|¬V!!$"#GH  "0ÿçÜD7#5#5"&54632'"32654&«K|¬V#!!#"DE   0ÿçÜY7#5#5"&54632'"32654&«K|¬V##" !YY  .+ÿçÖY7#5#5"&54632'"32654&¦K{«U""# "YX  .0ÿçÜY7#5#5"&54632'"32654&«K|¬V##" !YX  .*ÿçÖW7#5#5"&54632'"32654&¥K|¬V" !##WT  +0ÿçÜP7#5#5"&54632'"32654&«K|¬V##""PO  '*ÿç×P7#5#5"&54632'"32654&¦K|­V"###PO  '0ÿçÜP7#5#5"&54632'"32654&«K|¬V##""PO  ' ÿéõÏ 733327267##"&55#'667#530)+  3&#Ï-–  ‰o6A?ÿékÐ735'673#&'#5'67# '-% "$$  $Œ! 'rd$/FÿéõÐ %+16<73#'633#3##"''327#67#536365#7&'7#7&'nnx  x  mSQ! 8T) Ð :#  S)%   ÿéLÍ 7&'&''6$ % Í  0  1 /,*bÿéëÉ 7#5##535#3533#''67#ëccc ""& ! Éàྫ*"" :2#!3?ÿéõÐ!+7&'367&'#"''3255#3'67#q+' ))W  "  B C!# +/Ð 1 =R ˆC!2 ÿêmÏ7367&''65''64   *  Ï3 ) .B;,! gÿéîÑ"73'67#'63#7#5##535#35#”B3€11111Ñ 1ŽŽŽŽ6$[%SÿéõÏ73#3#5##535#535'635#Ý 8GG8\8GG1C.\\Ï*&dd&&¶1]ÿéôÑ 7&''63##5##535#¡& $$ / NNaJJJÑ ''*(,bb>,DÿéøÏEK73&'33#67327#"''67&'#7#"''3255'675#535'67&'’ '75     )    ))%b Æ% )* '# ((& 5  (/   ÿéò|$7#533&''67&''667#'7#@œ 2 * -"!2 -%.a$ Tj    6  $KÿéîÐ*.273733#537#35#3#3#3##5#'7#535#735#35[(B£,"0;47‰277??E MB__ 4¾")3C\ïË#7#53#3#5##5##533#73#3#73#vZÈZeQQeG==e==f==g==º1 <<0 aïË#73#3#5##5##535#3#73#3#73#ÈZeQQeZ==e==f==e==Ë1 990, fïË#73#3#5##5##535#3#73#3#73#ÈZeQQeZ==d??e==e>>Ë2!55 1) €ïÌ#73#3#5##5##535#3#'3#3#'3#È[fRRfZx<>f==h??Ì+##+  kïÌ#73#3#5##5##535#3#73#3#'3#ÈZeQQeZ==d??>>e==Ì .//- ' ÿéîO 73#&'#5#Þg.) ''cO  4TKÿóóÏ7&'3#3#3#535#535#—  4E<60/365: ((<*Ñ$# ?!$$?BDÿìõÐ=CI73673#3#&'#3#"''3267#3267#"&55'67#537#7&'7'6V7DJ[ 3 U   6!# 0/ "/ 1  d¦  *8D 8   FÿéóÏ73#3#3##5#'6ttXHHKK Ï''=°& ÿéŽÏ#'+73533#3#3##5#535#535#35#33535#335577007777//5.J.¼^((^:< ÿé{Ï#'+73533#3#3##5#535#535#35#33535#335,--(())..)),(=(¼_((_:; ÿépÏ#'+73533#3#3##5#535#535#35#33535#335'(($$&&(($$'$5$»]((]:<mÿèóÐ(,0573#3#3&''67&''67#5'635#35#67S[\>G      <<<<  Ð L   F1 *?  ÿéjÏ#)/7676767&'7&''67'67&'''674'$  !$4  /…9"  /+p   ÿéoÏ#)/7676767&'7&''67'67&'''674'$  %)9  /…9"  /+r  zÿéôÏ$73#327#"&'#67'56&'Ú&%  # 9Ï%/5>[  ÃO"7cÿèõÌ5:@7'23673#3#3&''67&''67#537#53&'67'&'å 2I<# )  FOSH     # ' !  Ì     %* m z  ÿéfÏ#'+73533#3#3##5#535#535#35#33535#335"$$!!""## " / »]((]:<KÿèõÆ+BX73&''67&'767#73&''67&'767#3&''67&'7567#73&''67&'767#XG     2QB     -K=    'FH      2Æ             X!       ,!    oÿéöÇ,CY73&''67&'767#73&''67&'767#3&''67&'7665#73&''67&'767#u;    'A9     $@7    "==    'Ç"     #       X%      /   [ÿéöÇ+@V73''67&'767#73&''67'767#3&''67&'767#73&''67&'767#hA    ,H=     (C8   "?B      ,Ç"    $     X"       0   `ÿéöÇ*@V73&''67&'767#73&''67'767#3&''67&'767#73&''67&'767#l?     *F<   'A7    !>@     *Ç      #     X       /   ÿè©Æ(>S73''67&'767#73&''67&'767#67#53&''67&''3&''67&'767#C    .K@    + .D    B:   $Æ     "     p %    "        ÿèŽÆ'>T73''67'767#73''67&'767#4367#53''67&''3&''67&'767#;    &C5      #9    84    Æ!     !    p  %   "#        ÿèÆ)@V73''67'767#73&''677&'767#4367#53''67&''3&''67&'767#;    &C5     #9    84    Æ!     $    p  %   "#        ÿéƒÇ)<Q73&''67&'767#73''67&'767#67#53''67''3''67&'767#5     !=/     2    3/     Ç#     #   q $   "&    KÿèõÆ+BX73&''67&'767#73&''67&'767#3&''67&'7567#73&''67&'767#XG     2QB     -K=    'FH      2Æ           X!       ,!    _ÿéòÏAE733533##3#"''32655''67'75##5''67&'75##535#5#53#3~0"=     +   +>"B00Ï"s   :s)  :yŠ"ÿóZ¾ 7#5##535#35#35#Z!!!!!!!¾ÅË7%\%\%ÿóW¾ 7#5##535#35#35#W¾À Ë7%\%\%]ÿèóÇ #)7#5##53#735#35#3#53&''67&'íb ppJJJJ);> ' DÇ  'S11) )   oÿèóÇ #)7#5##53#735#35#3#53&''67&'ïY ggAAAA&6‚7  >Ç  'S11) )   ÿókÏ!74''675#53533#67&'75##5#^ % !! / 5`--`1 )<<<<uÿîóÌ73#3#535635#Ý0&W~1++Ì .k¼ÀkÿóuÏ 7''675#53533#67&'75##5#e $*$$## / 5`--`1 )<<<<ÿópÏ 73533#67&'7''675#75##5#$## "'$H¢--`/  4<<<< lòÑ#73#&'#'673#&'#'67?&  tH+    Ñ  '0  ( xòÑ$73#&'#'673#&'#'67>%   sG+    Ñ   #)    # “òÑ 73#&'#'673#&'#'67:   tE(  Ñ      “òÑ73#&'#'673#&'#'67:   tE(  Ñ      ÿé[Ï 7#5'6G  +ϧ‡2 ÿéPÏ 7#5'6<  "Ï©ƒ 2 ÿéGÏ 7#5'64  Ï©€2 ÿéSÏ 7#5'6?  %ϲŒ2 ÿéˆÏ#'+/73533533##3#3##5#535#535#5#5#35#335 +..3344..S+/»$<((<$OyÿéîÏ73533#"''3267#'67#‹6  "0*£,,…wy.*n„ÿéïÏ73533#"''3267#'67#’0  +&£,,†!px/+mŒÿéïÏ73533#"''3267#'67#™,   '"£,,* qy.*nŸÿéïÏ73533#"''3267#'655#¤'  ¢--…u&O2 /E&ÿéæ773#"''3267#'67#536qc WN@MW7 / ' ÿéæ?73#"''3267#'67#53qd  WMBMV?2 *   ÿîóH 73#53535#35#35#Ûæ##6""5##HGGG55555 ÿîóD 73#53535#35#35#Ûæ##6""5##DCCC11111 ÿîó9 73#53535#35#35#Ûæ##6""5##9888&&&&& ÿîó- 73#53535#35#35#Ûæ##6""5##-,,, ÿîó' 73#53535#35#35#Ûæ##6""5##'&&& ÿîóM 73533#75##5##5# ¶æº#"#LL999999ÿêYÆ75#53#3#"''3267#7F3F.1   3&K(L3Lÿê‰Æ75#53#3#"''3267#7pUiNZ ] Ž%K(L1NÿêmÆ75#53#3#"''3267#7YDX<? B Ž%K(L2NÿêaÆ75#53#3#"''3267#7M:N47   9 Ž%K(L3NÿêMÅ75#53#3#"''3267#76%8"(   )&J(I 4L)ÿèád73#3#"''3267#735#,¨’  ¤”d2%2)ÿèág73#3#"''3267#735#,¨’  ¤”g3&3)ÿéáV73#3##'3267#735#,¨’ ,¤”V.  - )ÿèáP73#3#"''3267#735#+©’  ¤•P+  , kÿéî¾73#"''32767#'665#'6ƒk   ##$¾¥/,reEA`!$  ÿéuÏ#'+/73533533##3#3##5#535#535#5#5#35#335 !''****&&D!(»$;((;$O ÿé}Ï#'+/73533533##3#3##5#535#535#5#5#35#335 %**....))J%*»$<((<$OmÿéöÄ '73&'#"''3267&''67&'765#65#…`   )& * Ä^6 /  1)$: !T6<3 ÿélÏ#'+/73533533##3#3##5#535#535#5#5#35#335 $$&&&&##= %»$;((;$O ÿé^Ï#'+/73533533##3#3##5#535#535#5#5#35#335    4  »$;));$N ÿèóa#'+/73533533##3#3##5#535#535#5#5#35#335,\,,8LLjjhhLL6,›\::N9[ !  ! *  ÿèó\#'+/73533533##3#3##5#535#535#5#5#35#335,\,,8LLjjhhLL6,›\::N9U   ' [óÉ (-73#3#735##"''3255#3##5#53&'##57# ææªª„„©  " 99!z <É  '   )5  ÿèók#'+/73533533##3#3##5#535#535#5#5#35#335,],,8LLjjhhLL6,›]::N9c #  #  - ÿî>È 7&''6$   È f 1-+DÿéõÏ48<B73533#33##3#&''67&'7#537#535#535#535#353567O?IIAMg  $< ++4(6EE66?R...J. ¿     B   ÿî7È 7&''6   È f 1-+ ÿébÏ73533#67#"''3255'75#!    &!¥**2F  8  ; ÿé\Ï73533#7#"''32655'75#    !¥**1 F 9  9 ÿé¢Ð  $,07&''6'66553&'73'#335#5##535#X"  & 5  0(JJJJ888Ðu." !@ J:-D D'vÿèôÏ73#&''67&''667#™N   1ÏC*# 4+#6 ÿézÆ 73#735#35#35#'67&'ZZ222222B Æ£sMM6 mÿèõÏ73#&''67&''667#‘U!" 5ÏC)" 1)$6ÿîgÁ73#67'535#U< ) <@ÁbY  z< ÿéÏ,73533#3#3#3#"''3267#'67#535#535#,++''+<9   ( !.'',» B )1 $C¢ÿèõÐ73#&''67&''667#»/     Ð&;($ 2C& ÿémÑ!'-73#"''255#'655#5353635#&'4'># . ..  Ñ ° N79 L\:H ÿétÑ!'-73#"''255#'655#5353635#&'4'C' 444 Ñ ° N79 L\:H~ÿì÷Í "733#67'73673267#"&5~  8    ÍJk  ×Q_ #  ÿémÑ!%+17#"''255'655'7536735#7&'4'k  &   &lY S5!9 O G8<5 HiÿéôÏ973&''67&''667#3533#3#3##5#535#535#”C  "  * 8 (0..**77::**0Ï      > ÿéaÑ!'-73#"''255#'655#5353635#&'4'6  &   &&  Ñ ± O5!9 L[;HrÿéõÇ #73#3#537#35#35#35#&'''6yy2/h$2BBBBBB9 ! Ljˆ<=>,    ÿðsÍ7335#53533#353#7'5#**))$ $ŠCYYCU. 9 ÿê‚Î8767#"''32654''67&''67&''67&'767&''6d    * /"% &    % *Î  =#      zÿêñÏ73533##"''32655'67#†=   ' /6ž11† e6'07 ÿêzÎ677#"''32654''674''67&''67&'77&''6^    ' + " $     'Î >#      ÿêiÎ5767#"''32655'67''67&''7&'767&''6O     %    !Î  !> !     [ÿé÷Ï 7#5'673533#&'#5'67#‡ '&"    "Ï¯Š ,11D1zu,-< ÿêoÎ7767#"''32654''67&''67''67&'767&''6T    ! (     #Î  !=!     nÿéóÎ $).73#3533##5#5367#536365#335367#335¦99 $$M %$1M/!Î c 33 c 5 A  yÿëõÄ &73#33267##"&547#67'7#&'ypG=   +8Ä#  t} ¹O€ÿëõÄ &73#3327##"&547#67'47#&'€jC9   &6Ä#  t} ±OÿêõE$73#33267#"&55#67'7#&'ãœo a %3p E %  ?   IëÑ &*.2N73&'73#3&'73#3#3#3#5'65#5#5#'6767767'67'67'67ZdÖm '/****1s .!!!!!P  E%  Å   5    7%   ÿêõQ%73#33267#"&55#67'7#&'ãœo ` %3p Q-   "% K%  SêÉ %+1773#735#35#35#73#735#35#35#'67&'''6'&'[[777777Z__;;;;;;e Ÿ  = ÉU= ! ! BFLR733#5367#'635#35#35#'3533#3#&'#5'67#535#35#335'67&'·$I  %%%%%%j    , 3  Ð  ||  I88~EML"$EK'''q   ÿéNÏ 7#53&''69 ,Ž¥æ)  '!"@ÿéöÐ%)-26Jd733#"''255##5#'655367#'635#33535#73573#"''3267#'67#3533#3##5#535#'6h %  , N      Д %!!#?A UJ o7 !- "F  22  ÿé`Ï 7#53&''6A 7•¬æ#' " ÿéhÏ 73&'#''64   Ï1´' !LÿéöÏ 73655#535333#&''67#75#W:((7D1015 6r#])))I2 54!$.6)>ÿîõÆ#'73#735#'67&3533#75##5##5#Z€€XX)    g•·“Æb@%  †OO======VÿìöÎ&733#7'753773673267#"&5‚%- 0    ÎId ¢ŸÅO  e GÿêöÐ *D7&''67&''6''6#5'6733#33#"&''673¢   6  Y    W&&   Ð   %2   %0 ' x["/ $EÿéõK73&''67&''667#I€&- :/-; 2#  LaK    eìÐ7'63673#5##53'7&'ÛWli@ Y $¯( O  Ð   (+ ‚Ý» 73#735#35#‚[[3333»X2w2+kÕÇ 73#735#35#+ªª‚‚‚‚Ç\77+_ÕÆ 73#735#35#+ªª‚‚‚‚Æg<A ÿéòU736733#&''67#al_G KN DXC $36 &ÿéðY73#3##5#535# ÃXeeeeVY00 ÿé÷Ñ$/7&'3673&'&'#"''3255#3'67#C E @>=$ 20   Ñ  ( 3,-E &#7“æ» 73#735#35#“SS++++»X2w2 ÿé|Ð #)/5;733#5'667#35#33535#335&'''67&''4'/(T   0  GDÐ cX *C/# qÿé÷Ò%+17767'7&''6373#&'#'67#'67'67'6¥   (,)\ÿçõÉ 273#735#35#3#3#"''32765#'67#'67#'67#qooIIII$•[\  / 4* # %ÉP0..F (/ +" DîÏ (.7#5##53&'73673#&''67&'67#367æ¥_|Kx0 #& -&)< 1! 9S- ¼   (      -ñÒ!%73#3#53&'#53&'367#3#735#35#ƒS! >á; W ;R3©©Ò   6 *K,*KÿèóÐ#(-73#3##5#5367#53635#335367#3355#‘E%77^)+''9&_%9+$ Ð l44 l 9I  L eÿèôÐ#(-73#3##5#53665#5335#335367#3355#ž<,,O$&2 R1&!  Ð l44 l.J  L VÿéöÐ>BFL7&'3533#676767327#"''67&''67''67'#3#735#'6Õ  gI:9       J33&&)Ð  ''  +  3T2K  ÿçð¥6<73#&'#5'67#535'23673#&''67&'67#367Õ &.dK. 6% < 4IdLXjI|) " 1)C 3" :R 8 ¥ a    ‹ÿéêÀ7##53#"''325Ö7_  ­Ä×  lÿéìÉ 7#5##535#3533#''67#ìYYY!  Éàྫ*"" :1"!3ÿéÈ 7#5##535#3533#''67#HHH  Èßß½¬+"" 8+ $3ZÿéëÉ 7#5##535#3533#''67#ëiii"$$ ! $"Éàྫ*"" 3#"2sÿéìÉ 7#5##535#3533#&''65#ìSSS Éàྫ*"" "2ÿéâ 7#5##535#3533#&''67#â››› 968!  . 6¦ ¦‰w 'FØÆ73#735#36533#&''67#'±±‹‹ 0/2  $ *,Æ€^     ÿìô' %7&''&'''6733276767#"&5Ù  CF& :)'      @èy"7&''332667#"&57&'''6{ %4~  … y        ÿéiÏ 73&'#''64   Ï& ©´' !¦ñÏ73533533##5##5#;A<<A;à  ŸñÏ73533533##5##5#;A<<A;Á ¡ñÏ73533533##5##5#;A<<A;Á •ñÏ73533533##5##5#;A<<A;º¦ñÏ73533533##5##5#;A<<A;à  ™ñÏ73533533##5##5#;A<<A;¿ ÿèô£5DL7&'3&'733#537#5'6'#"''32654'7##53#&''67#&'7#6¢% ""' }K N 0' $J$ /5&e, £   1 1¡³u   OÿéìÇ"&73#"''3255##53535#335#3#735#Ö  uIN55!!JJ%%ÇUo  Yx‰UUB,B> BáÈ/733#'3267#7#3&''67&'767#'67#!¦ #  ( [J   =$ , !È.0 %.     4H ÿèîÇ 7#'655î½ÇSC6 5?` ÿèõ 7'67&'7&''&'*~  K  _       ÿëôÉ7&'333#"&''675#2 %>F P,(É  D`   PI íÏ*.73533#3#535#3#67&'#5'67#735#[9::EŸF9‚9  #' '1\\Á/2  &% bÿóôÂ73#3#3#535#535#i†:66?’@559ÂKKKK ÿéuÏ73533#67#5'675#'6!Ä 11: RI  C +mÿóõÏ73533#3#535#y/009ˆ;/†IImm ÿéaÏ73533#67#5'675#'6    Ä118 TI  C ([ÿìðÏ!73#"''32767#'67#'67#'6‡`   M F< 5 Ï‘0.Xm83bO)%D!KÿèõÏ$73&''67&'#'6655667Ý 1Aq# #   L  Ï $=*"2@66D:N  %UÿéòÁ73##"''3255###535#U   uX9&&Á«  ¦'XfF5gÿïóÏ73533#3#535#3533#3#535#t...8ƒ7..//<Œ<.­""""a##$$]ÿïóÏ73533#3#535#3533#3#535#k222=<2333A–B3­""""a##$$JÿïóÏ73533#3#535#3533#3#535#Y:::FžD::::J©K:­""""a##$$EÿïõÏ73533#3#535#3533#3#535#U===I¥H==<íÏ73533#3#535#3533#3#535#$QQQbØaQUVVbÚdU¼< ÿëõ6 #7&'7&''3326767#"&5''6zay "4%6    * . ":ÿéóÆ"733&''67&''667#67#'7#co, " "." $3Æ2?'#B-Ag43!)3WÿéóÏ37;?C73533533##5##5#3#3#3#3##5#535#535#535#5##5#35#335[$($$($‹=DDCC;e,½ ) ÿénÇ 73#3##"''3255'67#'735#[   & "4Ç=d  K,",5.=|ÿéíÅ73#"''3255#3###535#|q  ]MMH/ÅÁ ©M Z<+UÿéêÅ73#"''3255#3###535#\Ž  zgg]@--ÅÁ ©M Z<+ ÿéõÏ"',0A73#32767#"&55#'67#5337#335367#33567&'7''6<0 "@ N0(%$#)A'   ÏdN  SB* %:d* E 7  ŒóÏ 7#5'753'&'&'ñ:==  f;7  pm`  #  ZÿéôÑ$(-1A73#3265#"&55#'67#536365#35#365#35#67'7''6•@!    : / *//,!#  Ñ gO   UE$;g 7 E 3    f½73#3#67&'7&''67#FFQ !½(9  & 8 ÿéôÏ$(,0@73#32767#"&55#'67#536365#33537#33567'7''68.$@ O2$!" &<%  ÏdN  SB* $;d 5 E2  €ñÏ&,73673#3&''67&'7767#'67#7&'ƒ?B8     * O  ¥     "!<   ]Î 73##5365#35#0"8%%%Î ™­Q11D2UÿèõÏ"7'6655673&''67&'367†C* *9d tB55D:  $>* ),*%\Î 73#5##53635#5#3 & &&&&Î ¤ ­Q1u22bÎ 7#53673#5'35#5#%&*****­ ¤ V1u22ÿðƒÎ73'67#&''6A8/ K* "Î R:q  2YÿéóÐ(76767'67'67#53&'73#&''6} #L /*@ ÿé”§  $73#735#35##"''3255##55#35@QQ0000D   2D22§B( $ (X  %n —ÿéõ§73533#&''67#7&'›#   D  w0D(2-#&F>    TóÐ!7@DH73533#3#535#733#"&55#'6653&''67'767#'6553'35335122*e)1Å $  V     A` dRÇ     ,    ) ÿé÷j!&*.73#'#5##5'67#535'235#3&'#35#35#ÌI`:* ~ +<`EO1,/, K~~~~j <9  5  + $ ZÿéõÇC7#67&'7''5353573#3#33267#"&55'67#'67367#˜*   J    (!Çy7   Ã!!3""E* C  '$'>*UÿéõÇ@7#67'7''535#373#3#33267#"&55'67#'67367#•,   !L    * "Çy8   Ã!!3"g*C )%'>*JÿêõÏ 7#'6553&'7''6767&'óy>,- & °:?: 0D;' )9 07Ï UEEH    4   %  KÿéõË 3773#735#3353353#3#67&'#7'5'67#735#c††&w‘‘ €3  6 #  ZZË:6 3    .     bÿì÷Å )/573#735#33535#335&'33267#"&57&'''6pvv1N1!    T  [  ÅrBK6 : 9 ! ÿéõÏ-7353333267##"&547#&''67&'767#EJ   5 9 6 Dª%%[?   6S*0#",  ÿéóÄ!'73#333277##"&547#67'7#&'Ñp   ]''6)-^  Ä$a&  $Q{ ¸N ÿéåÁ 7#5##535#3#735#å¡¡¡!^^66ÁØس b< ÿéôÑ &7&''63##53#67&'7&''6€26 44,= PiiGÒr25  EMÑ-4.*#/' #  ÿéõÐEK73&533#673267#"''67&'#67#"''3255'675#535'67&'v ?GF   $ A 66%4}  É$&'  %! $'#/(3  ).!  ÿðåÅ 7353#5##535##5#l*O¡¡'R(ÅWWÕÕ²ŸWW ÿèïÐ#(,28>D7367333#"''32765#'67#53&'37#7#&'&'''674';  M     5!J"=C;Pjs   K: Ï//K * )D E=   ÿéóÑ!*7&'367&'#"''3255#3'67#G;5 88i #* 3  UX: 6CÑ &  #1!?W  @$"1ÿçïÏ!73533533#3##5#'67#535#5#3E2288F6 -893ŒE¡....?SS4!'???? ÿéõÏ(7'67#53&'73#67&'2767'< ;Ne ^q#$ Q+ '$ J %1 ,!*1i Z  ÿæïÐ*73#6767'67'67#53&'&''66ƒ ^{) A8 A"&KhY$$0J EMÐ'/! d 0ÿéõÑ"&*/47#67327#"''67&'##53'33'#3353&'#335ÛO    &<> L- DLM;9NB’@=Q>¸r  ,%  €0L  !ÿéóÏ73&''667'367'7&'´7 .! “! #, >ÏP("%$-6C>žœ!$ $! ÿéÇ"&,27#3##"''3255#537#'65535#35#'67&'‚"   &-))))  F  Ç\?  ;\RF3 5@_R:. †ÿéòÇ #73#3#537#35#35#35#&'''6Œd('Z'5555552  Ljˆ==>,   LÿèõÏ"73533#3&''67&'#535#67#UBCC4( (!* ) :BLH ©&&'%    %'l#…ÝÑ7&''67'76Æ 'F'!<,&"Ñ     ÿéð*73673#3533#"''3255##5##5'67#G Œ 9L 87 "8x  6  KK>?ÿéoÏ73533#&'#5'67#%##  ! #¡.. €q")8PÿêõÂ73267#"&55#'655Ï .)µ  §G-9$RQ ÿéeÏ73533#&'#5'67#    ¡.. ~m!+6YÿèöÎ%+73533533#3#535#35#35#35#'67&'h9—&999999 (!H °nnCD/  MÿéõÑ8So736533&533&'73#67327#"''67&'#&''67#767677'7''67'6767677'7&''67'67S!=     '  t  h  H (ag"       *g $ "?ÿèôÐbh73673#3#3#535#535#53&'3&'33#67327#"''67&'#67#"''3255'75#535'67&'u ' $D<         SÿéîÏ$*0673#"''3267#'63533##5'67#7'6'&'&' d  Z !--- %W  ;  L  Ïš/#€ "O::UCB   8 ÿèõÑ73&''67#'6`S $5 7#*N xH 3Ñ389;"v),lÿñóÆ 73#53#3'35€s‡ƒoffR2.Õ.SA..ÿébÏ7#"''3255'675#53533#6_   !! tN  ?3**+Rÿéñ¿73#3#5##5'67#35#f‹L [@  ,++@@¿#!d2C¤M ÿåôÒ $*06<733#5'6367#35#33535#335&'''67&''&'WW/¯ 4X P ;;N:ˆ;;N:  —~$  Ò qe ! 9K7  DÿèïÍ#73533533#3#535#35#&'''6O"+''+¥'"6++75Ÿ....AAAA\! )@ÿéóÏ#'9=A73#&'#5'67#5367'23&'#35##"''32655##53#735#Ó !V* b  "2)<=" >>g   i"JJ))Ï   >(+Q ;Uf.€ÿéÞÏ 736753#5'€$ Ä—“æ@   TòÑ0G73673#"''3267#'67#3733#"''3267#'67#73733#"''3267#'67#!NV  JC4>..  !$  #s..  !" #à  *      )ÿè×R7#"''3255##55#35×  ‰›‰‰RT  i ÿéóË%)-15;A73#3#35335#535#535#533#535635#3#3#735#'67&'@$\#-æ2::..(( " / (i& !&Ë   ““  “†‹  J)`  ÿèYÍ76767677'67'67'67   7 &   6!T,!)1.ÿçõp#'+87&'#7'5'63&'73&'#353567&'‚0< ˆ0> G38&! vvv1  02p  2  O    oôÐ3IMQ73#&''677&''667#'3533533##5##5#3#"''3265#'63#735#¢@    &”S I  77Ð    ,    ! ÿéíi!%+17=7#3#3#3#"''3277#55#5#5#'67&'7&''&'âSKKKK^   ´VCCCCC  8a    i (S        ÿéóÏ39?E73533533#3#3#3#&'#5'67#535#535#53&'#33677'6'&' O O4 <`VVgR", 6"#5,$QgWWa: 4L 0 +  ˜Ÿ0000  12   B  GÿïóÏ/37;73533533##3#3#3#3#535#535#535#535#5#5#35#335P"1""%@@EE>>M¬K<›ñÏ73533533##5##5#<A<<A<½ÿéâ” !'7#5##535#3##5'67#535'6&'✜œ0:: /;,;$  ”« «}7, 9 ^ÿèöÑ 7'67&'&'3'67#¥-!& !  -y %d­)%1 &.:* òÑ#73#&'#'673#&'#'67=#  uG*    Ñ  %    òÑ!73#&'#'673#&'#'67=#  uG*  Ñ  %   ÿòîÇ7#3#5&''67&'76æ¸ÀÔ›/ "! ǯÕ! #% [ðÍ 73533##5#3533533##5##5#%RRRR,_,,_,¸# ÿèôH73533#&'#5'67#edT#7 ;$$9 5"R8 ":;! ÿèôh73533#&'#5'67#edX%9 9&"; 8"UP&.MN*% ÿéóÌ73533#&'#5'67#bc\&= 9%"8?!Z™33J#&I‡‡E*.D#iÞÑ7&''67&'76Ç" ',4-%!%-&"Ñ   ÿéÅ73#3##5#'655#535#5#y"$ M"ÅLjj?(#6LLLLMÿèòÐ!%)-E73&'73#3#3#3##5'67565#5#5#33#"''3267#7#'67#w"25////6s 0)))))y%  )+5."Ð     <  )   *6* ÿééÍ06<767&'7&'#"''3255'67'67'67676'67&'©7   !Ï@(# . )!/ ÿèóO73533#&'#5'67#fdT"6 :$#95"S;'=?' ÿèóÐ7'673'673&''>T% QOH\ *.—+%F.  H"8> %+ ÿéóÑ48<@DH73673#33##&'#5##5'67#535#535#535#53'5#3533535335R ' BL;0* *#& '/9KK77FAK##)_#)Ñ  %%!$73#3#3&'73#3#3#3##5'67#537#'65#5#35#yc?T[#-2,,,,5q #+  :)))))Ð     W  ) s""‡dóÈ73&''67&'#367‹\   È    ÿéíÏ'73&'73#676767&'7&''67'67#a  `t#*;BF8 K[,)$(%O¬ ,M) "' (,QÿéëÅ 7#5##535#3533#3#535#35#ëttt ((( R (..ÅÜ Ü½«&EEP$ÿçëa 73#735#35#35#'67&'*¬¬„„„„„„ 8 2X))('aX> " "    ÿêcÃ7#"''3255'67567#53[  >Sr S H*Yÿè÷Ï#7&&'67&'7''5'6556Ô    8ÏIR%$ZP¨ $²+_; 7\8 ÿèfÎ 73&'7367&'#5'67#   #1¯   ao 6`ÿéõÐ/73673#&'#'67#3#3#3##'32667#7#d1D)$&'<<&Ž\S S µ  #$$$ &IÿèôÐ 37&''6'&''633#33#"&''673Á  (D  "+66*/Ð(0  *7 , #D  ÿéKÏ7'6#5'67   Ï (# {e  ÿéMÏ7'6#5'67    "Ï ( }b $ÿé‹Ï $(733#"''3255##537'6'&'3#735#D2  M/6 M  #33ÏI„  n‹<  [E'aÿéìÐ $(733#"''3255##537'6'&'3#735#œ:  a;>Y  "??ÐJ…  n‹<  XG%JÿéöÏ#)73533#3#&'#5'67#535#'6'&'`8;;D:% (' ):C8p  R  ²>..VU-+>   ­ÿèðÀ7#"''3255##5ð   À  ‹ÆØ@ÿõ¤Î$73#3#3#67'675375#535#'6d3 +6 ##  Î%#* QOa%  ÿélÏ 73&'73#3#3##5##535# %%` MMMMN&&&² V V6$qÿéóÆ!73#33#537#537#35##5##535#vt;7‚%)/(BDDDÆ5#O#HWW7% ÿéñÏ#)733#3267#"&55#'67#537'6'&'uaI  "! F@ B`U„Ï]X _U!HK  VÿòõÅ 73#3#735#5#3#`ŽŽ uuMMMM*ŸŸÅuC Q.NÿèöÏ#+:>73533533##5##5#3#3#5#53&'3'66733267#"&5'3#V#.%%.#S;obuA'R )º ,Y(# "=  BW ÿçñÇ#'+/73#3#&''67&'767#535#35#33535#335ÖbQR -JM3:3 OP`$<7#"''3255##535#35#Ö  ……………>C V "  HòÑ !73#53&'3#735##5##53#735#gØ]A©©²¼#  vvÑ " " ÿéœÇ&,7#"''3255#353#5335##536735#&'œ  ) J)4 b  ÇÆ  pKr  Ÿ ++ 8   ÿñïÏ73673#3#3#535#'67#?„ ‘J[Ï`=1:ª!GG5;AÿèõÐ#'-373533#3#3#535#535#3#735#35#35#'67&'MCFF>>M¯M;;Ceeeeee . &K"! Ä     DbE ' '     +~ÕÈ 73#735#35#+ªªƒƒƒƒÈJ- )  ÿéóp373#7#5'75#35#35#75#767#53&''67&' æy (/(222222a BX   pJT14    ÿèóf767&''66''6y"2 M 5* 73; f    2( 4 JÿéöÏ(-1BHN73'67#&'&''673&'67#3#3##"''3255#'67&'n# *   S2   8#>DD#‹<   ; b Ï !+      K) 86  3 ÿé[Æ7#"''32654'7##5[  "Æ: <ËÝ’ÿéðÃ7#"''32654'7##5ï   $ 2Ã;"" ! >ÇÚ ÿézÏ7#53533#&'#5'69(+'' %Ž..xt% .aÿéòÏ73533##"''3255'67#> $- 3*=¢--Š  b<#'LrÿéóÏ#'73533533#3#535#35##5##535#35#y * E@@@@@±  Crr'= ÿõóº 73#53535#35#35#Þæ$$8$$8$$º²²²ŸŸŸŸŸ ÿïôÐ +7&''63#3#3673#53&'735#535#/8 44-< Ox4UU  6Ö4  WW/Ð%+*#""< <" ÿébÏ73533#&'#5'67#   ¡.. |l!*7cÿéôÒ87&'7767327#"''67&''7&''7''753  1;55;:   6 2;:+,*,Ò      &7#  &$ ÿçô‡!+/37'#67&'7#7'5'63'73&'3535ƒ 39 <  12 E0! F5=+$(www‡  =    [    LÿôôÏ73533#3#535#LJJJCšCJ…JJkkMÿèóÏ73533#&''67&'7655#UV220 -( ) VŸ00&!$%€ÿêóÏ73533##"''3255#&'€F F  ›44‚  } WÿéòÐ73533##"''32655#&'Wb$$  b ›55… €# "LÿéëÁ73#"''32767#'667#'6[   , / (: Á˜"XM D^/! ' bõÐ 7&''6{0< 75,; NÐ/52+GÿîòÍ-7#"''3267#5327667##"&55'753753ã  )$'  0"$žW/ ^Y a " d:5 D?>ÿìçt7#3267#"&553#"''326§UG P-}  aZ q9BÿìØp736732767#"&5B;$ -?2 ;*p#  2  PÿéôÆ733##"''3255#53567#b€GG  KKhÆ\ Y! ÿéôÏ#733#&''67&'767#5335#35#vUV0OQ76.VVBBBW@@Ï['  "[H555 ÿèoÏ73&''67&'67#5367#7)     Ï)P* !%i 6# ÿèóÏ!73673#&''67&'67#367 L ƒ. )$2*= <"!'D\ žB!$  ##$  8 ÿèwÏ73&''67&'67#53667#;+   $ ÏN+  "$€!6# sÿéóÄ73#3##5#535#wv177662ÄIllI ÿéÄ73#3##5#535#r08866.ÄIllI ÿèhÏ73&''67&'67#53667#/&    ÏG* !! !%y4#Vÿè÷Ï,0673533#3#3##'32767#&''67#735#535#35655#b7DD99E 35 4*3 3///7K'< ½6 '.(( )8$9  ÿè^Ï73&''67&'67#53667#,#   Ï)N-  "$~!4# ]ÿèïÇ7=C73#3#"''3267'677#735#73#3#"''3267'677#735#&'7&'aA%+    / #.KA%+    / #.B V Ç:h!  .<:h!  .<_   NÿêïÆ#)/573#"''3255#'3#"''3255#&''&''6''6«D  0TE  1d F n E ÆÅ ¯Æ °   , )% $' )& $ ÿéiÏ73533#7#"''3255'675# %# !%¥**4 E  8 ;aÿéôÏ#)767327#"&''677&''7&537&'ìB &  /1š (!5  ($?8  ÿéñÆ733##"''3255#53567#(³$,ff gg)!˜ÆX T ÿê…Æ7367#"''3255'67567#k   0TÆU M '¡ÿíóÏ733267#"&5¡  ÏÈ  ÿíòÏ733267#"&5  . ÏÆ   —ÿíòÏ733267#"&5—   ) ÏÆ    ÿéó[7357#533##"''3255# m-s–!ee  m-    ÿéód7357#533##"''3255# l.s–!ee  l,  PïÇ73567#533##"''3255#i{›"bb   iŽ  bÿéôÐ(76767'67'67#53&'73#&''6… H *&: 8K A - Vm J "% ÿèëÉ 7'66553'#36 É¡¡+F6 1%`:),ÿèò|-373#6732767#"&55#3'67&''67#67#,Ä;!  0+   1@  |&  + k $  $J  ÿèëÉ 7'66553'#36 É¡¡ˆ$F6 1%`A03ÿéöƒ!7'63533#&'#5'67#7&'Ï‚HOC4., /<  ƒ $55!FE%"F :ÿéñ‰#(73673#3##5#'67#53655#53&'5#l ,&(//1 0 $ (,(% S.‰ !<ÿêé… 73#735#35#35#&'''6KjjjjjjQ.# …oN..$    ÿèëÉ 7'66553'#36 É¡¡’.F6 1%`7&%ÿéóÊ"73#327#"&'#67'56&5Ð$(QN $ 0 M&#/ dGÊ$+0/;8V  ½M 5ÿñ^¿73#3#5##5'67#35# Q# +  $¿#r b$;’D^ÿèóÐ+E73673#53&'4''67'677767&'7''67'677767'ˆ # Ž  +   Z   Ъ %.+)F$ %/+)B(ÿéòÅ"73#3#"''3255##5##5##5367#äjh   (('Gcʼn  q‚‚‚‚£ZÿéöÏ7=AEK73&'73#3&'33#673267#"''67#5367&'#53&'#367#35#35#7&'`)(    =F a  j  ²  #.Q/" &$\T ,! Y=‹íÑ 73#5##53&'‚`²dÑ .. ÿïò%73#67&'7&'3#3#535#535'67#3š\.13TThägTT"$%    ÿè÷™ )/73'67'677367&'3267#"&5'&'YQ C%*"2#'   +b™`1 #  N0   1    ÿíõ  "(.>DTZ`f7&'7&''332767#"&5''6&'7&'33265#"&57&'733265#"&57&'''67'6z e  v ,"'  …  „  D  @  E  À  x      ( - ' 9   ?9  ?  ÿìñ¤0733#3#5353333#3#53533'33#7'7537xXXeÞ',=$$*zp##"/9¤((*DDT B? ÿé‡Ð %+17&''63#3##"''3255#535#'67&'G * F++  -- V  Ð&J  G:"  ƒÿéøÏ 7#5'753'&'&'ö<?>  OLH Іs. ÿèóÐ$(,73533#3673#3#5##5'67#535#35#35##G44*! =Z0mq 7-c]G.qqqqµs arC ÿêóÐ$73#3##"''32655#535#535'2Ø &/UUff ll[[*0`Ð )$5 0$&Lÿí°Ï(73533#3#535#3#735#7677'7&'U  H GG##  +6 ·::0 ÿèêV!73#3#"''32655##5##5##537#Ôhe   &&%IXV7 "5555:J#ÿéÝe $(733673#"''3255##53&'7335#35#u   ’ >’’’’d  M b  ' kÿèëÏ&753753753#5&'#5&''655'6}        ’=8h4qçc#™\$4E* (:!!& ÿê‹Ð,27&'3533#67&'#"''3255'675#&'o  O433     #4  Ð   ))&  -  0<   EéÐ"&*73&'73#3#3#3##5'65#5#5#A4RREEEEU§ $O>>>>>Ð  N RÿçóÏ 73533##5#RGFFGNN‡‡óÑ 48<\73#53&'733327#"&547#&''67&'767#533#735#367#"''3255'67567#J-n,m%     ‡^^::f   GÑ ! 1 " &   * (    FÿèôÑ3:7''6767&'&'''63&''67&''667#À6=$' 9 !H $ *!"/ + ' >Æ " 3      ÿéóÑ.48<73673#3#3#&'#5##5'67#5367#5367#3&'35#35#RimkrŒ2! g  1?:BN@k^gggg¾   ] Z   E  9=AÿèóÍ$(,07373#3#5##5367#'6655635#35#35#ç 8K=496G#8  W#GGGGGGÍ I;8F<u98HÿêóÑ -73&'73#3#735#33##"''3255#53567#NCH¢……__Ž!JJ   MMl½ 43   NîÅ 7&'67&'67&'6rABÅ.!&* 0)(/-!&) /((/-"&* 0)( ÿéjÏ 73'6573#'3# A ÏpG/ )@pæÙ¿rÿèõÈ #73#3#537#35#35#35#'67&'u~2.l)7FFFFFF  Aȇ‡?>>.     ÿéõÏ 7333#"''67&''667#119;$l     "ÏO7*%1++4 gôÃ73267#"&55#'655Í   à  7#,??ÿéòÐ#'+37;735333##3#3#535#535#535#535#33535#5##535#35#$OQQXXkäeUUPPeeOc>>>Ä        ]S S+DÿéóÑ;73#5'67335#35#3#3#"''3265#'67#'67#'67#ow~  tyZZZZ*«qp  ) "- # &² C: ( & ': $* #  fÿéêÐ"(733#"''3255##5335#35#7'6'&' 7  U3 UUUUW Z  Ð=’  ;ª0Ly  wîÐ733673#5##53&'733#735#u  *²-  A™™qqÐ +, ' #?éo73673267#"'&5#IH?Y :GIF l   +ÿéÕ3 7#5##535#35#Õ‚‚‚‚‚3JJ '  ÿéíÎ 73#7&'''6'66tLršB{ GSΙ€% ':( ) P-ÿéí‚ 73#"''325''67&'x    8•‚  Z2$ #+%, .% ÿêöÇ+8C733#3#3##"''3255#535#535#53567#&'76'3'6767#)®#+"",, '' %޼/ Ã?  +Ç ( %">/k >B.dÿéêÄ73#"''3267#'67##5##535#h‚  // )*}QQQÄL1>/_iiG4ÿéôÔ@FKP733#67&'#"''32655'67&''67&''67#5'66367#367#335OV ?`  - .  /> C1): :*1 *3  K I 3AWDÔ 7  ',    (! / ÿèëe 73#735#35#35#'67&')¬¬„„„„„„( 'c%% %&eZ? $ $     ÿé_Æ7#"''32654'7##5_ %Æ< ?ËÝ\ÿéôÑ)-173#3#53&'#53&'367#3#3##5#535#735#35#©9&—"8*9$v1BBAA1OOOOÑ   7 +P/2ÿôîË 733#3#53kbbnÚWËFi ÿèõ 7'67&''&''&'*¸  )  %       ó™ )-7367&'#"''325567#3'67#3#4‘  6  sR8 /:““™   # '  7MÿòòÎ#73533#33#53535#35#35#35#35#Z>??3¥/>#NNNNNNNN·‹‹;665[ÿéõÏ.73&533#3265#"'&'#7&'3#67'675#cF65   Gs  cA$,£H,#/]>   YB G ÿîóÐ$(,733#32767#"&55'6367#35#35#T U <Ÿ5J  WC 2Q J< MT iÊ7\ (QJ/>YyÿéõÏ73'67#'6'665&D  4 ' 'Ï! % [.B9:  ÿé[Ï7#"''3255'675#53533#W    eB  4>**7nÿòôÇ7#3#5&''67&'76ðos†] DZÕ&  ‚<÷Ï(73533327#"&55#&''67&'767#‹&    ´@ #.      ÿèiÏ73&''67&'67#5367#3'     Ï)L.  "$i!5# eÿðóÏ73533#3#3#535#535#'6ƒ22//7„;11$ Á888888 &QÿòôÂ73#3#3#535335#b:22?£$?ÂLK}}ª ÿéóÏ<7&'#673267#"''67&'#3#"''3267#'66553'3  5D      ZD   / lÏ  8&*5$!*$ .G*G% < 9- )P& >óÑ;7#673267#"''67&'#3#"''3267#'6553&'33&'7ìN     VE   2g »0  %0 # %/  ÿéñÇ&.7#5##535#53#'#335#"'&55#'655#33275ãž>LâK##až#- %*uŠ¡¡****{'*+%-ÿéöÂ73&''67&'#367šU     Â`4!-T@''@ ÿéíÄ73#3#5##5'67#35#ÚuŠv1&O;aNÿèôË'+?CIO73267#"&553'#33267#"&553'#33533533#3#535#35#'67&'º  <g  <- -!!)¦* 3-- M   Q<,  Q<,O+     VÿòöÑ 7'67&3#3#3#535#535#¥& 2 ' #JR!33C˜B22±)&- '+**+ ÿèô\73533#&'#5'67#deW%8 <$": 7#UI"*HH'!OWÐ 7&'&''6.  6Ð   NTñÐ7333267#"&55#'67#53‚0   7 -$&ÐC :8+yëÑ 7#5##53&'7&'''6ë­c & & (»,*       ÿéër"73#3##"''3255#'67#'735#Æ.66  %O FGf„r!.  *0  !ÿê÷Ð#,5;AGM73#35#535#53#5633267#"'&'367'7367''&'7&'&'7&'l!(@@“==@T».p  " P" * ] E \ Ð[Vd9*3Cc  pc  o        UÿêìÑ#+/373673#53&'35#&'735'6#5##535#35# !  "—'//  (*Ï#""""#]####3"""pâÎ 7'2'6'&''&'Ø Ps_QA  8  Î "    ÿçó{!73673#&''67&'67#367 K…2 %! /)> <! BY  d  '    !BéÏ767&'7''63#735#c48 #NX+  xxÏ  -? ÿîõ< %7&'''673327667##"&57&'yC+ 4  Š <  $)  1 _òÑ(7&'3267#"&''7&'7'#5'6° AJ  , 2.K  'Ñ   % F3 YÿéøÐ@73673#67&'#"''32655'67''67&''67#53&'…   $?      + /"" # 7! Ð   :#;""$)  ÿéöÎ73533#&''67#]b^N G!W a\”::_"!WI/7M ÿéòÓ16<@D7#3#3#3#3#5'67#67#5'6553&'7'#5#3535ò?4500008ˆ  EZ!),,,Å   #  1"E4 4?^  &ÿèòo#)/5;733#3#3#"''3267#5363535'67&'7&''&'‚PŠ˜   —:*vvv2  Y   o1  T;      AÿéðÈ048<@D73#3#"''3267#3#7&'7&''75#535#'67#735#33533535#35#U”hyD.. 1;=//   +m/È>l&S/ / Hÿõ÷Ä 73#735#35#3#`€€XXXX,¯¯ÄœW2v1duÿéïÇ#173#3#5##5##535#3#'3#3#73#3#5#535#535#ux35$#44M%%E$$%%F%%BhUUWWUÇEE4 a Qÿê÷Ð6:>B73533533##3#3#3#&'#'67#5367#535#535#5#5#35#335W:(;;<=K9, 37 +6?7988%i:$$7'Å  2  #&  2 ?XÿëòÎ4973533673#673267#"&55'675367#535#67#i ! 3B.& ,2   )# ;/ < ®      .     \óÇ!7#53'67#3#33#"&''67w^Ð F??<512 µ   * ÿçêb73533#7'7&''75#75##5#&PPP; Rd_P <‚XÿéëÏ7#5##5##535335#335ë,+??++?,¡tVVt..O<<<jÿéëÏ 7#5##535335#33535#335ë[68$$8#[$$8#¢¹¹--J777888 ÿèôÏ)/7367&'3267#"&5'3'655'67'&'&*  (7P G$)"8ÏB E  Ë|A)$4L ÿécÏ 73&'73#3#3##5##535# "VEEEEG  ² V V6$aÿéëÇ$(,7#"''3255#'6553533#3#535#3#735#ë  WG>>ÇÄ  ¬SE4 4A_16= ÿéóÒ#)/5;73#3#3#"''3267#53635#35#&''&'''67&'[e—¼¼µ ³/!ƒƒƒƒ{    M >  ÒP= & *.e  bÿéóÎ!733#3##5#53533'66''6ª++5<?6>3 /9N Î <<;;$*4 -& >ÿéôÏ(7#5#'67667##5365333267#"&5ê1- -B   ¥7$F!&5(&9HU  WÿèöÐ  7&''6'6'6'66¥' &( 2#0 .0 = ;681 .5Ð!"$ $ , "&$EÿéöÐ'+/735333##3#3##5#535#535#535#535#33535X8>>GGSSKK;;99GG8K+++¼'(((% IÿçôÏ#'-373533#3#535#735#3353#735#35#35#'67&'\999K«L9'';'v‰‰cccccc$ !C"" !à +   E_C ' '     ÿêôÑ *7#5##53&'73#3#33#"&''675#ë­c`¢EDD 1*C/ *H»,+  3-0.;!l ÿéíÐ73#'66553&'ŠY¶ [Ð N@2 /!Y ÿéíÐ7#'6553&'7í¼`»N@2 2;Y  ÿçæÉ "073#735#35#35#'33#5#'65#535#73#3#5##53DvvPPPPPP=D# RE·CE3CÉiK++7bk8 srG67l>ÿçñÇ %7'66553'#33673267#"&5o ˆ``I'" '/   ( €E5 3"`G4! *  * $  HÿéóÊ #BFJN73#5'675#73#5'675#&'7&'3&'73#3#3#3##5'65#5#35#XC1ND18^8$982222<} =.....ÊW  W      4R   ÿèïÈ&*48<73#67&'#67'5#'6553#3#7#335#5355#35#¹5U   D½&''•••/''B///H    98 B, ,7m<V1 + ÿëõË#:>BFJ73#3#5##5##535#3#73#3#73#3#327267##"&55#735#33535#335ÈZdQReZ;;d==e;;e==rµP  B Q>>R=>>R=Ë /99 0 (  M   -/TÿéóÏ!%)-73533673#3#5##5'67#535#67#35#35#i+-/BVI  36+? IIIIµ  ue oA_ÿéò¿73#3#5##5'67#35#p‚FR:  &()::¿#"~ c1D¤M8ÿè÷Ñ!%)-73533#3#&'#5'67#535#35#33535#335MGGG=/( )#, . 0>G**=*g**=*¾]"+KJ,']99FÿéôÑ'/37;73#33##3#5##535#535#'6553&'5#35#5353535#ª==//0F(''2A 22':DFFÑ #$J J B1 2>Q>>>Q>½`!,IF)!`:<1ÿó‰q 73#3#735#76767'7&'5NNFF"" &.q ,"     sóÏ73533#3#3#535#535#W^^VVjæhOOWÁÿéóe$(-733#3##"''327#67#5363&'#33657##&'#0§  ›=.A 2>0e!  ; ÿéåÆ ##53533#'##35#Ñ¡1g11@0¡1‹RR‹ÉQSS ÿêNÍ 7&'&''6$1Í  0  / 0-+LÿìòÏ&73#5#3267#"&55#5335#53533#3Å&   * 6"??KK&„V 0  6K7O O`ÿòóÃ7333267##"&5477#d~[ & )NcÃ| &$iNÿþó²73#3#]‰‰¥¥²ŽNÿèëÏ73533#"''3267#'65#Y1M  9?<1¢--‡/sfA ?[KÿéõÃ73##5'67#&'^“@' 9>ià ±‡*"5F5(&%GÿíòÌ'73673267#"&5'37533#7'67¨  T'0ÌTY   —”¼>g ?ÿòóÏ73673#3#3#535#'67#M5Y] j9D¤J' 00«!II-5EÿéóÍ73673#3#5##5'67#35#M9X] dN  ,46NN¡tY)0‚>vÿèôÏ767&'7''6¶"")  -- )ω:/1 SˆÿéõÏ73'67#'6'65&¨:  +  )  Ï! g-2[+ …ÿéõÏ73'67#'6'65&¤>  - ! )  Ï!  "_-2[+  ÿïhÏ !'-7&''6'675#535#53#3#7'6'&'4  <$+##:!!/Ï – C?6ÿæò‡#'5;73#3#5##5##535#3#73#3#73#3#3#''67#&'#6ÇYdQReZ::e;;g::h<"  !&:    e Z Ð N= 49  .4,.(*4B  ™  ÿçìX6:>1073533533#3#3#67&'#7'5'67#535#535#5#35#2677//Eb O"  / H:((2y666I    &      cìÑ#7#5##535#535#53533#3#535#35#ì³aLL^^^^LL;;O<<‡#$ " "  2RÌr 73#735#73#735#2DD%%EFF''r uÿéîÏ!7#"''3255#&''67##5373î    !4¨§  "B­¿''‚ŠÐ7&''6767&'i +1¿ &#  ÿézz7#"''3255##535#35#z  44444zx  3‘(<añÉ73673267#"&5! !(  $É"    ÿëõW73673267#"&5# #* %W#    hÿìõÄ73#3267#"&57#;5#hk!#  -06""""ÄpI !+  ­JJÿéîÈ!%+17=753#3#3#3#"''3267'#33535&'''67&''&'ÇZRRRRc aDDDDDD5  z f  @ˆE%-v'/ " Pÿé÷È#'+/T73#3#3#&'#'67#535#535#735#35#5#35#367&'#"''3255'67&'767iu$$,% * +.$$PPPP:%%%  !   ÈC ) ' **      ÿê_Ï7367&''65''6,  ! Ï9    2 *@=) zÿçøÏ'767&''67&'&''67&'76  V  È    O ( # "xÿèøÈ7'6553#&'7#3 ^ " & 88d2/ &/dL \Q> DÿéøÑ048<@DLPTX733#3'67#7326567#"&55'75#'65533#735#33535#3353#53535#35#35#AAS@-/ ! 1kk-J- ”"!Ñ    J=0 07UH<$ ! !$$$gÿêòÏ(048<@73673#&'#5'67#53&'735'2#5##535#33535#35#â  2 . ;BR!!2 R!!2 Ï     $   sg g%:ÿébÏ7#"''3255##5##5353b !©t  \­­yŒ&& ÿè÷ÎJN733&'76767&'#3#3267#"&55#'655#535#'67&'767#5#"Y RAA   ) "J AAA   Dl"È"#        *+ !  1."*  n** ÿêsÐ73653367'5#'667##   Ÿ1†  ƒn5 B= ÿéjÄ73#3##5#535#Q%%$$ÄIllITÿéóÐ#)/5;73#3#3#"''3267#53635#35&'''67&''4'›;\jjh j III  P  K Ð JA-… (_  lÿéòÏ $*06<73#3#3#"''32767#5363535&'''67&''4'•=Xhhk k EEED @ÏM> &‰ `   NÿéîÏ#)/5;73#3#3#"''3267#5363535&'''67&''4'ŒCbuut tPPP P  K  ÏM> -‰ ` ÿé`Ð 73&'# Ð?oÿéòÏ#)/5;73#3#3#"''3267#5363535&'''67&''4'œ8Q__` `>>>? =ÏM? ,‰ _ HÿèóÏ73533#3##5#535#7'6'&'SABBKKLLA}  ]  ‚MM*JJ*U   ÿéKÐ73533#7#"''3255'675#     ¥++' V H2>ÿè™Ï%+73'62655#'67#535335#4'4'i" ### Ï ¯ IG( AOO> ViòÉ733#"&55#'655à   É@  5  "œÿçõe73&''67&'#367žJ    e/     "cÿïùÃ732767#"&553#"''3267x 3 :)~  ¯  ,  »_#D ÿéZÎ 7&'&''6*-Î .  3 /,+ ÿékÏ733533#3#5#'65  90Ê=BB)iW6 $4lÿèóÏ73533#3##5#535#7'6'&'u12299::1c  Q ‚MM*JJ*U  Yÿè–Ï 73'65''6ƒ-*  ÏK`< :U 4*)›ÿóôÂ73#3#3#535#535#ŸR #Y$ ÂKKKK _Â73#3#67'675#535# M#+Â:; B: VóÐ !(:?CHM73#'673#&''67&''667#'33#3##5#7#5;&'#3377##&'#+S] ‚B   )}W K   Ð          . z<õÃ$)733#"&55#'655#53&''67&67#Ù $ e     0 à   N      ÿîó7 73#53535#35#35#Ûæ##6""5##7666$$$$$ZïÐ7353#5#535#535#733#3#3##EII>>E}FF==IIÀv " !ÿéóÌ "733#67'73673267#"&5!>>! * g# $*  )ÌGn  ÙKb ! ÿéðT 733##5#53vffffT==!TïÐ "733#67'73673267#"&5!>>"!* h# $* (Ð$0  s.   ]ÿë÷Ï#)/7&'36732767#"&55'67''67&'œ )   t  Ï .T6Mk5$  X6% + ")*! ÿéqÍ7#5'67#535'673#&I  '(+% (( Qh`#0& *eÿòõÆ 73#53535#35#35#âAAAAAAÆÁÁA/o/o.jÿéóÅ73#3##5#535#'6'&'sz6<<::1f N  ÅcVVc * ! "#%! ÿélÍ73#&'#5'67#535'6^ %%   #%*Í* o_#0& ÿéóÊR7367&'3267#"'&55#353367&'3267#"&55##5#'655#535'6 ‘   7 %2    %)('' )È   &  %  (CC$   *0jj :% "0 ! tÿéøÉQ7367&'327#"&55#&'327#"&55##5#'655#535'6735336{Y   Gb      É    g  %&jj?' %6,6JJ&  ÿétÎ.26:>73673#&'3#5##535'67#53&'735'235#33535#35#k ( " $7$  !,#7#Î!    'g g*  Ÿ=dÿéõÏ#)73&''67&''667#&'&'–<  !$ " !  /$ ""?+ *=Ï "      ]   ÿèðÑ &,273#3#'66553&'#53&'367#'6'6'6„^# 1µ 5 &X7 V ^ 2L P98U \A5 ˆÿêõÍ 7'6'6'6Ô0 01 ,"!? =Í *# ' 2#$ ÿè÷Ê 7'6'6'6ß- +*'/,Ê ) $( /  ÿè–Ç$(,7#"''3255#'6553533#3#535#3#735#–  VG>>ÇÄ  ¬SG3 4A_16=]ÿéõÐ!273&533#3265#"'&'#7&''3#33#7'7537iM)(  Mv  _::&0‘"#??8$WD 7$, _[ÿèër 73#735#35#35#'67&')¬¬„„„„„„) &d%% %&rbE (( "     ÿêÐ %*04:73#'636733#3##"''327#67#765#7&'7#7&'.Ua `   Q^8)9$Ð ^$(#  X))#  ˜ÿêôÎ73#&''67&''667#´4       Î#(" 2&-|ÿèõÏ 73#&''67&''67#675«C   )  ¥F$ 5@$$( ÿéõÃ73##5'67#&'ÙU &0C2m*(#/à ª0".N+"/++UÿéöÏ73533#3#&''67#53655#l022<;0*3 8 8:0¤++#:43 %3# ÿêùÉ59=7327#"'&5#'66553#7&'7&''75#535'235#335Ò  ˆ † // 2;9//6.Édd$#-ˆSF4 1$_J  !J^&&& ÿémÉ7#"''3255#'665535#35#m  ' &&&&Éà 94( 2#`:(a(aÿêõÑ3733#'65537#'6#3267#"&553#"''326•A#nF8 M,  (P  Ñ=3' (/G [U  l8  ÿé]É7#"''3255#'65535#35#]    Éà 95' 5@`:(a(€ÿéôÉ&7#"''32767#3&''67&'767##5æ  >Z    DÉ4J5$     qßhÿéíÇ #73#3#735##5##535#33535#35#h…… ssMMi]&&8%]&&8%%Ç9:o o*?YÿéôÏ7''6767&'À ;; 3,6[06  P{A8*  " ÿéòÉ73#3#535635#'67&'ÆO=•0Aã'R     #d0 0  4 Ï         0(C /HHIYbÿçíÐ*.267'6553&'73'35#'27655##5##5##535#35#35#€  31hV      w79 :o  >-Af #$$&&;z.Sâ½73#"''32765#'667#]…<#½' SA2h  Š''N-*C>.-PM  ÿë|Ï"(73533#3#&''67#535#'6'&'%)).0  #*-%M  9  ²;  ' ,D  ÿéöÄ73267#"&55#'655&'¹   U*1Ä·   ªI.:%RS@$ # 0ÿéŠ73533#&'#5'67#<    }   Y_ !,}ÿèõ73533#&'#5'67#‘)  } 51ll.2ÿèïÂ7#53&''67&67#2± 5"8 6()=C"5D+ t ¯S;&&!?0/\ 4XS^ #^  ÿêVœ 7#5'6C  &œ{X / zõÏ!767&'7&'&''67&''6\  !$  *- =+67 7# &Ï        ÿéŠt73#67#5'675#35#35#75#s%* %++++++tJU03‘ÿéët7#"''32654'7##5ë  0t"&y‹`ÿèîÏ#)73'67#'63#"''3257&'''6ˆ^ O  '  8  IÏ   *ƒ  _)*-'/( )kÿéìÎ73#"''32765#'6&'—N   C   ΄k!3  ÿéÏ!'-776767&'7''67'67&'''674'( ! #)0  C  3 …<   /)t  ®ÿéïÀ7##53#"''325ÜA   ®Å×™  ÿèïÐ"'7373#3&''67&'#'67#67H…n, +#%2 0  - :D`  ­#1 '8);K5!"†ÿèôÐ73533#&''67#7&'Œ$*& # &#O  ŠFFP.%9?'ZP ÿéØÏ7&''673'67i  3 e$-; ˆ œ   @$4%"z }È767&'7&''67'6767b ' $+–E*  +"95mÿéõË73#&''67#53655'6ä 84, ( (-12,AË7J=9!I(qÿéìÈ7#"''3255##53#3#735#ì  UAA77ÈÅ  ­Ìß,W5|ÿèíÎ73#"''3255##5363#735#ª9   M" 33Ω  ‘±Ä:lNkÿé÷ÏBH73&'33#673267#"''67&'#7#"''3255'675#535'67&'§ )(        Q  Í. )I) &  #.#  6  *+(qÿêõÏ $*07&''63#3##"''3255#535#'67&'¬ $9//   22PÏ $%#C  ?7 pÿèõÑ5;7''6767&'&'''63&''67&''667#Õ *. 1 6     *Ä " 1  %      rÿçöÒ'-O7&'67327#"''67&''7&'3&'67327#"''67&''7&'7À >I  !  CA !  ($Ò     L        ÿê`Ò"&*7&'3'73#67'7''5'635352 .     Ò X-   ‹ 1# ÿéSÏ73533#'#5'67#   //|v'. ÿôsÏ 73&'73#67'676'&''(eH *4% ¨ 92 77.03,uÿéóÏ 73533##5#u4664NN…… ÿônÏ 73&'73#7'676'&'' $`D (1#¨ =- >0.03, ÿôiÏ 73&'73#7'676'&'$ "[? %, ¨ =- :4.03,bÿèôÏ73673#'67#''6767&'t!EH&& ` " ¨&hD HWX#)  -RI*nÿíõÍ&7773267#"&55'75'75'6Ú 9 9#@ ' +ÿèòÐ!%73#67&'#67'53&'3535~ DM "% Y .%"- J){{{Ð f   KM Á ))sÿêõÉ 7#67&&'#67'53535á1  " " FFFÉr  /)V  Ö0ÿêõÇ7#67&'#67'53535é+  .  444Çp  !JV Ô/ ÿé„Ï/37;A73533533##3#3#3#'67#5365#535#535#5#5#35#335&' ---.58 , " +0+,++K + » 0 '  0 9_   ÿïkÃ73&''67&'767#S   =ÃC1,2" .vÿíôÐ"&*733#3267#"&55'6367#3535#™4 O  % '$ ÐT1 }$3333H õÒ17;?EK73673#67&'##"''3255#5'67&'767#33&'35#35#'67&'W/H&  +  1  %= > 1JJJJ f½  0'  $.    : ' #   CÿéøÏ )-157&''63##"''32655##5##5##535#335335˜&+ *( . ;KKr *Ï#(# i 1111=‚3!!!!!kÿéõÏ73533#&'#5'67#%+' -$#¡..69$(st2(D ÿétÐ $*06<733#5'667#35#33535#335&'''67&''4'+%O   +   B@Ð cW *C/" MÿçõÏ !7&''6&'67#53&'›#) &%'2 %`x&-Ï,/,%   X PíÑ73'73##5##5#&'''6c bJ$D°  | ¸ UUUU ! ÿðöÌ#7&'332667#"&57&'''6f$!  '"…  š Ì!+†# ‚-6 8,C. 7 ÿísÃ73#3#7'75375#735#R ,6%++ÃP1 XTg,pÿéõÐ%)73&''67&''667##5##535#–A $    2H@@@Ð        a\\<+ ÿíiÃ73#3#7'675375#735#K(0 %%ÃP1 XTg, ÿí^Ã73#3#7'75375#735#H"*  ""ÃP/ XSf,`ÿéóÏ16<736533#3#3#3##"''3255#'67#5367#537#5#&'l*DEBET   9  %!)Y+  ¸ 4  1 "* ^  dëÍ7&'73#5##536'&'x  _ +­‘ƒ  Í ,* ÿéÓq73#"''3267#'67#536e\   KD = 58q L5I4ÿèñÐ26:>BFJP735#5#53535333##3#3#&''67&'67#5367#735#33535#3#335#33567#]QQQQWm†+ #'/(+G4$% -?C ==Q=Ž==Ž==›JJ^DD Sr 0     f # >R  ÿìòÏ873533#3673#6732667#"&55'67567#535# ?@@' >W)?7 % ##* +>IFQ3 `  % 6 0 (\3Îy    !  ÿòîÇ 73#33#537#'67#&'&'Ï…o:Ý\  6Rljv4.AQE  ÿéóÏ,B73#&'#5'675#535'2353#5'675#73673267#"&5Õ %.dd+= 9%*6 @+ff$(Xe8!8‡    ÏG.)IG)-GJ G      ªÿëõÍ733267#"&5ª   ÍÇ   ÿîóÃ4873#"''325567###535#73&''67&'7667#3#$¯"*  ";4!!sI    3‘ææÃi o#Pf>,)       y£òÐ 73#53&'ƒcähÐ  ÿêñ|73267#"&55#'667´    D|q  c;2-C •òÐ 73#53&' cålЬòÐ 73#53&'„bäjÐ ÿíîJ7732767#"&55'75'6¾$(_a) 8+ORPJ  <òÐ 73#53&'3#735##5##5„bäjC¡¡{{­·Ð +/,%'NÿéóÊ73##5#535'6Ü  HHII6 BÊ?rr;lÿéóÊ73##5#535'6Þ 99::( 4Ê?rr;QÿéòÏ73533#3#5##535#35#QFGG8X4F&XX222pp2~9MÿêëÎ73#"''3267#'6##535#‚b   X#J9&&Ί(q$'XgG5WÿîðÏ %7#5##53&'736732667#"&5ínD @- &5  /&¬.. /0 0   RÿêòÐ 7#5##53&'73##"''3255#ïsA Y A   K®11 ?Y  VIÿé÷Ì"(.73&'3267#"&5'3'67'677'6'&'§!   (.* aw  ÌcL  È}>( "3R & SÿéóÂ73#3#5##5367#35#35#S JE`.A````¦¦`-l,FÿéòÏ!%)73673#3#"''3255##5'67#35#35#Q0Zb `  O  '/OOOO° € 5|  #CB @ÿîôÏ#)/5;CGKO735333##3#535#535#535#33535'67&''&'7&'3#53535#35#35#W:>>O«I::HH:M***t  I  >  A°()      =       333#####KÿéòÇ!%73#3267#"&55#'67#735#35#35#a{"    1 *SSSSSSÇ‘/   57+fAA ÿíqÌ 7&''6&''67 %  'Ì ",*$-CÿéóÐ%+05733#3267#"&55#'67#5'667#367#335{G 0/   ?91 %3 :  #(;,Ð  K;  ?6")B 8%KÿñóÄ#73#3#3#535#535#735#33535#335Z‰:::J¨J<<;'';&a'';&ÄsCMBÿéñÆ!%7#'66553#3#3#5##537#33535# 5 3==2I+3hhh5IIY?/ /$^>UUu} IÿéöÏ-73#35#535#53#3267#"&55#'667#56‡**d**+?% #Ï sI  L., $%kMÿðóÐ %73#5##53&'&'''63#3#535#› DuB0  $ '‡:I¥F7Ð .1 : -22MÿéïÏ #/73&'73#&''67&''63533##5#[9 >Ž  Z  hGEEG´    -   ;>>Uÿééà 73#735#35##5##535#35#_€€XXXXvlllllÃ[668m m'<OÿéóÏ(,073533#3#3#535#535##"''3255##535#35#X=CC;;J¤F33=ˆ WWWWWÀR\  $t 0JÿéòÏ733#3#3##5#535#5335#35#ŒKK?6IIJJ80[[[[Ï^++^&:RÿéöÄ /7#3#3##535#73#535#3&''67&'767#š53333""@FF11K     5ÄO0Û=+M)L/$      ÿéöÓ!%+37;7&'#5'63&'3#735#&'735'6#5##535#35#}36 e OCK··@@  @@".|||||Ó     &B!  !!  2T T*LÿêöÏ!%)-BH73533&'73#3#5##5##535#35#33535#3353533##"''3255#&'QC G<))F ‡‡cc4%«'ycccà   */$  (= =! ÿéIÏ 7#5'65  ϳ‰2[ÿèáG 7#5##535#35#á^^^^^G_ _!1LNžÈ73#3#'67#'737#37'SE +  È &  7  MôÈ&7'67#'737#53#3#33267#"&5Ç I  t     GÿîõÉ #'+/373#3#735#33535#3353#3#735#33535#3353#U••‹‹**=*g**=*†¥¥ ŽŽ++>+i++>+Ž®®É @& $ $ @& $ %Cÿé÷Ñ  -:7&''63#3#735#73#735#&''67&''6–%/ /%+ :JJ @@=@@I `  Ñ!!;;/   "   GÿéóÏ$=EIO73533#3#535#3'67#3#3#535#3#3##"''3255#535##5##535#&'QCCC<Š;C¤ Žr+K¢D4¬ 44‚FI Å   $    #   D D*  IÿéòÆ #'+37;?C73#735#33535#335#5##535#33535#35#'#5##535#33535#35#]……'':'a'':'"--;--ÆT262xx-L  **>M.‘íÆ7#5##5í²Æ5$$5 ÿèõ°$*/4:733#3267#"&55#'67#5'6367#367#35#&'YS 4<  * KE8 0G G -4B>74  ° G& -0#7   <##( :ÿéöÏ$7367&'#"''325'3'67#  *+   D9 * %Ï- 4!'@h  Ž/%2@ ÿîCÈ 7&''6#  ! È f 1-+IÿéôÑ 48<7'6'6'&''&'35#533###"''3255#535#75#35#Ô8V W2 /%  E;Ž@   ;;E„,,,Ñ     E**"  )ÿéå;7#53#"''3267#'6\EÎ _F >)9 3   ÿé‘Ð 8<@DH7&'67&'6'&'63#3#&'#5'67#535#735#33535#335'   Z      .r199  ,6//N/Ð     .K  -0,- ÿêæÎ4;73#"''32765#&''6677''67&'767#'667#Aš    + . (   " %> "Î Š!v1#  ,  %# %- *›ÿéëÀ7##53#"''25×(P ­Äן  ÿé”Ë  $7'67&'&''6#5##535#9A+L999Ë $" 1^^<*.ÿêð­.4:73533&'73#673267#"&''675#'67#'6'6<"0  2W/-," +  ."€ $& ’  m %  u@B!c     ÿçõÓ#5BHNT767&'7&''667&'7&''6'67&'7&''6&''6'67'67'6e$& ;CT   $]  &+P0< 7;+7 O' 2 69 .S XN :n qÓ               %  + aÿêóÄ73##"''3255#a’1   MÄ­  ªrÿêóÄ73##"''3255#r*   CÄ­  ªQÿéèÃ73#"''32665#'655#qw  5<9ÃmV PR?T42H?UÿèöÄ7'6553#5#&'7#3…x 2 8 0OOj C5 4?]f F*0RG4aÿéóÏ '73&'73#67&'7&''67'67676b>=‘f/*%* 87, ²  X "( "%-(XÿðóÄ%73#67&'7&''67#3533#3#535#d†@!# /50577D›C5Ä+# )u ''^ÿéóÇ$*73#3#5##535#35#35#"&55#'655#5#3^•.(a)/A'a aÇ"©©"""§* 7* "772fÿéóÁ73#3##"''3255#pyy %  SÁ.j  fUÿé›Î7'6'67#~  #Î-_ !( xœÿéóÁ73#3##"''3255#¥EE W   'Á.k  gyÿêòÐ%)-157&'3533#3#"''3255##5##535#35#33535#335Ö  N422- -4.H.Ð !!ˆ  225Ÿ@GTÿèôÏ (.473&''667'6''63&''657'6''6¡% +(8  \ ,) *3 G: ] Ï$' A(&#!* V=õÑ 7&''6&'3'67#£' '% 4 *w ^Ñ    Oÿìõ@!733267#"&57&'''67&'€) 5 €  @;  8  $ EÿçõÏ/73#'66553&'#3&'36533#&''67#§ 2m#9@[[A!6+ ,)/ *Ï ?@1 / X #  ),,*@ÿéöÐ-1597&'#673267#"''67&'#'66553'33#3#735#Û  %*      H YQ7755Ð 4!3"*3*,BH<- +S##%E#`ÿèìÉ $(,73#735#33535#335#"''3255##535#35#`ŒŒ++=*g++=*  YYYYYÉT231g  )#4OÿëžÎ73#&'#5'67#535'6“    #Î( b^ .#WÿèóÏ -73353353#3#3#"''3255##5##5##5367#`&'‰ œHG 0@À&55&7S ?JJKKVg ZÿéîÑ 473&'73##5##53&'7367533##'2655##5##5_8 =‹n% "  ,5  ""¹  #((   2; 'XX?PPÿéõÑ #37;7&''63#&'67&'6'#"''3255##55#35  ( %$* 8HH=    +    3 1Ñ$$! !$ (# #("p  .‡%AÿíóÐ573673#3#3#3#3#535#'67#5367#5367#53&'   "D@CV\Z.:‰;$ ,!($(4'Ð   ""+   PÿçóÐ#)/7373#33#53537#5#35#3#3&'''6c=8<6—/9mRRRRRR *# ¾ww/  >ÿé’Ï73#3#"''3267#'667#53&'r!#     Ïd*S27>L}óÏ 73#'6¬=D Ï "•ÿéõ!73#3#&'''67#53655#'6´+     #& ' # Pÿé¤Ð#73533#3#3##5#535#535#35#35#P! !&&&&¹[%%[<: CÿéöÐ!%)-17=CI73#3#3#535#535'65##5##5#35#35#35#&'''67&''&'lr  i""!  o d    Ð ... 9......@.....I  Iÿé÷K73533#&'#5'67#WBC6% &* *7>   86QÿèôÏ!%6:>73533533##5##5#3#53&'3#735##"''3255##53#735#Q$5$$5$UA›D+ssOOt r$RR00Á '* 'K  7Ra+ ÿéñÏ'/37;73533#3#535#&''67&''6#5##535#3#735#[``jâf[*   ~   5’’’llIIÀ::      ?l lQA ) aÿéóà 73#&'#5#a’H*6Ã*„ÇqÌ73533#67'675#" ,3"”88JQOÿéñÍ73##5#'66556Þ *9j&.(>Í +……D:1W!;ÞÉ"&*733#5##5##53&'767#35#35#35#35#!½") ???W  ??S??S??S??É  __ =- ÿè‘Ï(,26<BHNT73#3#3#67'75#535#535#535'235#&'735'6&''&'''67&'ƒ 661111B283322::7! +       8  -Ï =   =  d   Y  ŽÐ&*.2673#3#3#7'675#535#535#535'635#33535#335 05500//,2@000055,5 /M/Ð  ?    ?  K ! îÏ73533#"''32767#'67#™,    ©&&h  ?.6"HMÿé÷Ê -73#735#3#735#73#735#3533#&'#5'67#lkkCC'AA>AAfCF;& %( '8Ê4177:  !98ÿégÏ7#"''3255##5##5353g "©t  \­­yŒ&&ÄÿéØÏ73#ÄÏæMôÐ &-BFJ7'6'&'73#&''67&''667#'33#"''3255##533#735#z K  >     #b/ L255Ð         0)C  /IY% mîÐ73##5##5#53&''67&'€`G#C`2 Ð 7788 *   \ôÑ #)BHN7&'7'673#&''67&''667#'33#"''3255##5##53'67&''  a 7=     $e0 0  4 Ñ        '#:  &@@@P Kÿé÷É+;J[k73#3&'7'#"''3255##5##5'6735#''67&'7'''67'76''67&'76'''67'76Y’@,    ))  *@m    4   =    7    É    „™™ž£   6        7        SÿéõÑ "(.7#5##53&'73#3##"''3255#'67&'ïf<6TT“A   >c´10 +J  G PÿéóÆ $*73#735#35#3#3##"''3255#535#&'gyySSSS"–!!  nnf  ÆQ003,  ), SÿéôÏ&*.736533#&''67#3##"''3255#3#735#a8>A$ "& & 3¡  vMM))¹     9X  U>ÿéRÆ7#"''32654'7##5R Æ;  <ËÝ8ÿè¨Ï!%)-73533#3#&'#5'67#535#35#33535#3#3W    ) ) ¹V @@"$V95 ÿèô]73#&''67&'#53&'67†_. "&:B.24 7$'k' ]   ! oÿïô•73533#3#3#535#535#'6‹,,++2…?..! $$$$$$ ‘ÿìõÏ&7773267#"&55'75'75'6Ý ()/2    %Ï(  '  4  3&'#UÛÐ 73533##5#735#335#RRRR>>R>¸K''' HóÐ73#&'#5'67#535'2Î #+gR!3 ;$"9 2 Qg!'SÐ)43% `óÏ73#&'##5#'67#535'6Î MgM / :$"8 ,!LgFZÏ "&&  6ôË4735#533#67&'#"''32655'675#&'#535#2ƒ‰œ#`   $?   *38-4 ¡ƒ­ ;       .êÐ'-P7&'67327#"''67''7&'7&'673267#"''67''7&'7  kf   %4- 2$NB   kf  %&; 2$NB Ð       2       w|íÏ 73353353#wvÃ5AA5Gdÿêèv7&''673'67  %B # LP  +@dÿçõÑ7>7&''6767&'&'''63&''67&''6667#Ð .4!4 !:  # !   1Ä "  3  %      `ÿéóà 73##5'67#&'g‹8(?`ô†, .P5)'%bÿéóÎ73533533##5##5#35#35#b<<+<<<<¤))**§¨88ƒ8HÿèôÏ*.7533'67#3&''67&'767#'665535#< &4!  Q"!!¯  10$    ;/ ,TD1UÿéôÏ1767&'7&''63#3#&''67#5367#'6• " 17U/B;- . : 6 6< Ï" ! )! '   MË73533#67'675#  ! ”77N VRÿðôÉ +73#3#535#5#35#3353353533#3#535#\“-(‰(-T&&t8::F¢H8ÉOO=+++++X!!pÿìõÍ "733#67'73673267#"&5p""  ?   ÍJl  ×Q` # hÿèôÂ$)/736733#3##"''327#67#77#7&'7#7&'hn   blG 6J" q'**'=&&*>>5  z=!5 bÿéôÅ73#3##5#'67#535#5#qz!!"'$ !O!ÅLjj@* &7LLLLuÿééÉ 73#735##"''3255##535#35#yjjBB\ LLLLLÉ>=x  1‘(;TÿîõÆ $(73#735#'67&3533#75##5##5#kttKK"   Z† ¡€Æb@&   …OO====== aÿéòÈ #'+/73#735#73#735#3#3##5#535#735#33535#335f??6??S|4==AA5""5!V""5!È11/W((44FíÑ%8K73#3#35#535#535#533#5##53567&''67&'76&''67&'76S&&&&•%%$$&8µT         Ñ  ]''T     (      ÿéóN733##"''3255#53567#4• dd   nnqN   Fÿìòz$736732767#"&5'67'533› & #@$ 2z-  2 D@  ‚!lÿéôÑ 48<7'6'6'&''&'35#533###"''3255#535#75#35#Ù 'I F%  &  5.t 3   ..5gÑ    D)*"  )dÿîöË$(,0@76767&'#3'67&'767#3#3#735#3673#53&'¼    2 B<  )(11bb<<   "Š Ë      H 6  39-   VÿéõÈ 37'66553'#33#67'7'3#3#535#535'67# }XXPc7   ))1y5** ‘.F4 0$`7&!   jçÏ 73533#735#33535#335j55}##6#Y##6#¦))‰N)))e***c òÆ  &73#3#535#35#35#"&55#'655#5#3c-&‚&,>&\ \Æwwƒ ,% ,,'l!ëÆ 73#735#3#735#lWW88Æ¥S2V òÏ'+/735333##3#3##5#535#535#535#535#33535l,7799GGBB66--??,?$$$½""#ZÿéêÁ 7#5##535#3#735#êhhhDDÁØس¡ a=gÿêöÉ 7#67&&'#67'53535ß6 !&#% PPPÉr   0(V  Ö0PÿîòÄ !-73#&'67&'67&'63#3#535#[““   :   =   o”AG¢G?Ä   S** ÿêUÐ7'6'67#>$ " ' Ð )[#( ‚MÿìõÑ %73#53635#35#3#3#3#535#535#–A„.\\\\™B::H¨L99CÑ \\ 09:nÿêòÏ73533##"''32655#&'nR R  ›44ƒ ~$ &ZÿîóÄ 733#537#537#37#37#g ™"%''32/52ÄÃNOOO°NFàÐ-3767#'673#"''3267#&''67''67'367#>  %Ž     T !— #U!=  Vÿé÷Ï &,733#3267#"&55#'667#53'&'7'6Ÿ?.  %@+  t Ï]X  [02,)M ! RDóÏ73'67#&''667#'6vc  &0 - 5 & Ï  *#! #  DSÉ 7&''6%6# &É>bÿéîÈ7#"''3255##53#3#735#î  dPPDDÈÅ  ­Ìß,W3YÿéôÈ 73#735#35#3#3##5#535#mvvPPPP†;DDDD8ÈZ59733RÿéùÏ!%73533#3#&'#5'67#535#35#335`>AA5)("' +(5>""5!·G"MM(#GN###\ÿéóÏ #/73&'73#&''67&''63533##5#i49„  T   `B@@B´    -   :>>UÿèõÊ'7#3#3#3#67&'#67'5#535èbYYXXm?   :! Ê   EM  ZlSÿêôÊ '73#735#73#735#3#3#3#"''3265#7#d;;6<<W}}¡bZ   b)ÊB B ?3 %Pÿéö" 7&'''67&''&'ß f ^  "  EÿéõÏOSY73533#3&533#67327#"''67&'#3#3#3#67'75#535#535#535#535#75#7&'Q$%%/))     " .8!,$& e  º!<,0)'= ˜pC  ÿéKÏ7#53''68  /–æ75'!"ÿêóÐ)/R7&'673267#"''67&''7&'7&'673267#"''67&''7&'7 _b    !.? A& SJ  kj   #2? I [Q Ð         J     (   `ÿéñÆ%733'67##"''32655#53&'767#lv0  %   AE ^Æ  _ Z PÿéôÑ *7#5##53&'73#3#33#"&''675#ìe;Aj+11+,  +»**  4+0.;gHÿéõÏ"(,273533#3#&'#5#'67#535#35#&'735'6YBBB9+%"+ $$9B%%3%  ¹T$KT/%TW.  .. \ÿèòÏ<7'67#&'&''6733#3#353#5##5335#535#'67|]3   #K:T4@@'^$AA  c0     .  11  NÿèôÎ0K73533#3#535#3533#3#535#'3533#7'75#3#3267#"&55#'67#c666A‘=6EQ P&1   3 +*¾5 2! $2  #Tÿèñg 73#735#35#35#'67&'b€€ZZZZZZ  P gY? # #     Rÿèòx#'+73533#3#3##5#535#535#35#33535#335]=AA99FFHH99=((:(b((:(n  =  = ! # UkóÐ<73533#3#&''67#5365#'67#5365#53533#3#&^   n    Á   '  FÿèóÐ#'C_73#3#&'#5'67#535#53635#35#''67'6776767&'7''67'6776767&'›G:$ &) +;H     |    Ð h #=A**R  ;;;;;Æ?""??.0e  '}#4YÿéöÏ '/37#5##53&'7'67&'&''66#5##535#ðb:( A ' )0 "IGGG¹&&     "# 6P P1 MÿéóÏ#CGKO733533##5##5#533#735#73#735#3&'73#3#3#3##5'65#5#35#€&''&'' @@<@@H$794444;w <*****Ï  #.." O  MÿíôÐ "(048<73#'63#53#3#'#335357&'3#53535#35#35#À',$RP&&H '§&'Ð G3I#  5<<<***** WÿéôÒ $*08<@DU7#5##53'7&''3326567#"&57&'''63#53535#35#35#3##"''3255#ïm@    T ]  ##`Œ:   ?½       (((4 @ÿè÷È &BR7#'6553#&'#5'67#535'6#535'673#&'#5'63#53533533ð„L   7     9/ÈKE> 6A] +# .   -&K22> ÿé’Ï#BFJN733533##5##5#533#735#73#735#3&'73#3#3#3##5'6353535177/66<..****/` Ï  #.." M {ÿèõÇ#(733#"&55#'6653&''67&'#367Ù  c     Ç<  0%  *d/    $dÿèõÇ#(733#"&55#'6673&''67&'#367Õ % l# ' %  Ç<  0$  *d/    #ÿçyÃ73#3'67#&''67#g/0G?   $Ã[I @D   *; ÿçõÆ!',17736733#3##"''327#'67#67#767##67#7##67# #¨'  E=!º69|8 8z$(($1$(  9L9%&ÿêóÆ!'-3736733#3##"''327#67#767#7&'67#7&' ¨#  ˜·‚+_‚4s(++(!$',!"9~!#8 ÿíôÐ*7'67773276767##"&55'75'7- %% $&2J+!¬ *  (  1  3  &  `ëÔ '-373&''667'6''63&''667'6''6¡! &#4  P+ +(*  JÔ %  8  &  ÿéõÒ 73#'63#3327#"&'#:£¬   ± žÒ   c""1+\ÿèõÑ 73#'63#3327#"&'#:£­ ± žÑ   h&!0/brÿèïÏ 73533#3#"''3255##5##535#r5552  25¯ !\  E‚‚ew!UÿçòÏ 733#3#"''3255##5##535#53šDD=  ()>>>JJo‚888FÿçöÏ"73#&''67#5353533655#335áI. /49E88"$8'¨N142! $/N''N ** ;GÿéóÌ73##5#'66556ß 0A{)>KÌ ,ƒƒ:37D9\ÿéóÏ733#3#5##5335#ŽQQA_2__Ï,/xxTA\ÿéõÆ$7#3#327#"&'#67'535&'#ç3<: 5 ) c00ÆK!&)-.C Ò%%\$RÿéóÆ73#3##5#535#'6'&'_Œ?GGGG:x ZÆaVVa( ""$  ÿéDÏ 7#5'60  ϰ‚2BÿèôÐ J7'2'6'&''&'&'3#&'#'67#5367'67'6776767&'Ø 9RDC 1 ( p)P=$ .: .9D!%&**"Ð    3   !%      "5ÿéôÆ$(=C7#'66553#3#67&'#67''3#3533##"''3255#&'v ŸC   9  oo V%%  V zC6 2"_+   +%_d$ !  HÿéðÑ K73&'73#&''67&'763353#3#"''3255#67'7&''67##5367#IHG§n     [j?P  C !$ $?;½      11BI  3  Qb @ÿéóÉ +/373#3#535#5#35#3353353#3##5#535#735#35#F¨2.Ÿ.3d,,‚>PPPP<hhhhÉ 33 $1D) ( @ÿèöÑ *0D73#5##536'6'&'3533##5'67#&'3673#&''67#‡Sl):  ;  '((   I bBRC1 9? 29Ñ~no "   $$-    2  %' 6öÅ73267#"&553'#;5#Ÿ ($ ^8q"  yTC22 ÿéõÑ7&&'#5'6556y 1L N86ÑmC  MrÉÆP>5 24aYÿêòÏ%736733#'67#7&'33267#"&5a2FH/ * /`    –h1-[F  Kj   ÿéhÐ$7#"''32654''67&''67&'76W      Ð "7.-## '    ÿé^Ð$7#"''32654''67&''67&'76M      Ð $6.-## '    ÿéSÐ$7#"''32654''67&''67&'76B       Ð %6.- &   Oÿé†Ï 7#5'6s ϰ€ 2€ÿé÷Ç (733#537#3#3#&''67#535#'6‘Np?9 @%.* %# # *. Ç2     ;ñÒ0FL73'67#&'&''6'3353#5#'655#535#3533##"''32655#&'§1U L,  /y ?2LW""   W%   Ò )!)Ž/       ÿéôG7#'67#53673&'73#&€P DU^KZCL ,       ÿêUÐ '73#53&'&'73#3#'67#537#5363H) &Ð /, %«ÿéóÐ %73#53&'&'#53673#3##5#53ÑH$Ð /=IIEÿéÁÐ"7&&'567&'7''5'6556Ÿ     %Ð %n4 LD!²  ·-]; 6[8 ÿéóÂ%73#33267#"&55#67'7#&' sE@ 2  5,."8  Â$|  lz ·N€òË73##5#535'6ß //// .Ë 7OO0 ÿéëÒ '+/377'6'&'733#5##533#735##5##535#33535#35#à Hb­`7‚‚\\‰Œ==P<Œ==P<<Ò    #7&&7 20d d&9`¼ 7##55#'#33535#`<<  ¼¢¸I88887777TÿéôÏ37=736533#3#3#3##"''3255#'67#5367#5367#5#&'l.@A>AR   ;#!'!$-[+  º  4 1! (2  b  ÿèóÒ73#'67'6753&'&'’X±Xc  Ò OA2 .'  [&Gÿæ÷¦#)73&''67&''667#&'&'~J "# ,"/ ' $. =# !!B- ,A¦      4 a¼ 7#5##535#35#35#35#a+  ¼­ ¹H666777ÿéòÒ753&'73#'67'65&'+U^´  a\ O@3 *+  R:ÿèú¦ %)873533##5#73533##5#3'6673'6'3#733267#"&5ER$$O R S  Œ““““2$ "+J$ !BONK   ÿèðÑ753&'73#'67'6'&'7VM¥!  aX  M?3 -,  P pöÏ#76767&'3'67&'767#• PjbH   IÏ       ?4  oÿçè…'733#"&55#'66767#53&''67'Å   D[  $… ! ]    ÿém‚73#3#"''327#735#*@2;  = /,‚83)6wÿéõÏ#',73'67#3&''67&'#'65535335#67Æ, %  ++ ¯ /0%  ( >1QQ¿"" I K K`eÿèõW7373#&''67&'67#67#g&Q1 !, " G+E    eÿèõÑ4;73#&'#5'67#535'2373#&''67&'67#67#ß 6(   (77B&Q1 !, " G+Ñ !+*€     ÿëiÏ 73#3#&''67#537#'6'. !$' Ï %$:1 ÿërÏ 73#3#&''67#5367#'6.5"$ ',. Ï'#;cÿé÷Ä/5733#67&'#"''32655'675#535#535#&'wb=  " #@cMMO  ÄM   "+ .W gÿêòÆ $*73#735#35#3#3##"''3255#535#&'uqqLLLL ]]WÆR103+  () UÿèöËFe73267#"&5536733'67#3#33#"&''6735#53&'767#3#3#&''67#537#'6Ž     L     !%   69#   Ç    5 *5 #Df  7     zÿìõº753#3267#"&735#zkW #  .$CC¹oC   iIÿéôy%+173'67'676573&'3267#"&57'6'&'])/ < !*+#!  #!K ¡ y)/0 '  (7&  p   ‹êÑ 7#5##53&'7'67&'ê¯a) ' (L$ $Â#!  ^ÿéðÈ%)-373#3#"''32765#&''67#'67#735#35#33#umF^  )   HHHHJ]ÈU X! 7  31a"ÿîñ€7#32767#"&55#;5#ݧ;J TFT@@@@€O( |** ÿîô‹ 7'67&3#3#3#535#535#|"E O 29 4gj,CCdßeCC(s$ ÿènÏ"73533#&'#5'67#7&'7'6$##   "M ~QQY[!-QiÿéöÏ9733533##5##5#53#5'673673267#"&55'67&&  7     Ï. uZ&. .    aÿéõÑ A7#5##53&'73#67&'#"''32655'674''67''67#îY4Bp9    & .   º!!  *   ''(,        ÿégÏ"73533#&'#5'67#7&'7'6!     G  ~QQWX",Qÿéïo */73#3#735###53#"''3255#3##5#53&37#ÝÝ¡¡||*Ñ   +63+o " .5D0  wëÏ$9?EK73533##5'67#'3#3##'327#735#5#53#3#"''327#7'&'7'6&'Z  D<*/ 0'+Á+=*. 0K=   ± , )$  # $ $   )   ÿéƒÏ#)/7676767&'7&''67'67&'''674''  & &-/  A4„;!  /*s  ŒÿìðÏ733267#"&5Œ  ÏÇ   iÿé÷Í #06<C73#5'675#73#5'675#&'7&'&''6'6'67'66i= +F= +1W ' ' ( & '+ !/ 35 'K ,0ÍU  U      5       +  ÿémÏ"(.7676767'7&''67'67&'''674'$  "%  5  /…9" /+q  kÿêøÇ $(,0487#3#25267##"&55#535#55#7355##373535335í*** (  &&'F H1\1Ç8h g8Ë»° º1* ÿémÏ"(.7676767'7&''67'67&'''674'$  %  5  /…:!  /+p  aÿçóÑ "&*.4:@7#5##53&'73#673#5'675#5#5#35#5'6'67&'ïf74V"1Fo %!SJJJJJ    B¾##  \RG   i |   ÿéô^0EIMQU[agm7676767&'7&'#"''3255'67'67'6'3##"''3255#5355#355#5#&'''67&'7'6ä    * 6@ - 1 I99999¦ ¨ K 9  ^       C   C       bÿèõÏ-1573533533##5##5#3#3#&'#'67#5367#735#35#i %!!% x4@1 )- / ' -40QQQQ½P "*   00 ÿð„Ð 73#3#753#55375#535#'6'I*22O11 Ð.U@_ ZFV.  ÿèlÏ &7&'7'63#3#3#'67#5365#535#'  A @\%'*  ##Ï .$ iÿçõÏ !7&''6&'67#53&'© !)    Of %Ï -.)& Y —ðÓ73#3#5#53'€g°’¦eÓ    ÿåöÓ,@DJP73#3#5#53'3#735##'6553265#"&5'#"''3255#'65535#35#74'€g°’¦e@¤¤~~Ž<   žÓ   B* 6$) ))Y _Y  )( ( Wÿé™["73673#3#3##5#535#535#53&'j  [     bëÃ+1775#53#"''3255'675#53#"''3255'6'&'7&'&9   \&9   N  W  v:–*:–*<    ÿéòÏ$73533#33"&''677&'767#535# !""AVUG     ?!!­""#6&  $#}ÿéö¾73#3#67&'7&''67#Š`` r6%  ,,'¾3@ (0 (7 ÿèwÏ&735#53533#3#3#&'#5'67#535#%''((&&**  '*%Ž  HM (aðË7#5'75#53#'35#35#5#î'ž' Í zffffff~ E@4 & &  ÿé}Z7#5'75#53#'35#35#5#{K g >,,,,,, F;/ % % €ÿéðZ7#5'75#53#'35#35#5#îK g >,,,,,, F;/ % %  gÿç÷Ò !%6?HU[agm7&'6'&'6'&'63#735#&''7&'7367'7367'733265#"&'&'7&'&'7&'Ø   "   !   ~~ZZF   C 3 1 B ? ( ? Ò         .F ,    2MZMY$$ %/*        uÿéóÐ 37'2'6'4''&'33##"''3255#53567#è 0F92    h22  :: OÐ  ++ ' iÿéóÐ 37'2'6'4''&'3567#533##"''3255#à /D83  &  ?Uo99  ?Ð  c + 'fÿíóÏ-159=73&'73#3#53&'#67#3#3#3#535#535#735#33535#335o46 ‰ Q3+w255;?6622P2¼    M.-ÿíï• !-73#&'67&'67&'63#3#535#ÍÍ(  P  O —¹SfÞdR•   > ÿéiÅ73#735#3#3#"''3267#7#KK''\34  9 ÅC!E@ )%ÿêëÏ 7#5##535335#33535#35#ëH,..H.¡··..K999„999sÿæïÐ73#3#3##5#'6•P;..11 Ð$$A­ +uÿèòÏ73533533##5##5#35#35#u//'////¤++++©©99ƒ8±òÒ 73#53&'„fägÒ  ÿéñ<767&'7'5'6}    *Q+(  K<  4    ÿéòÒ #'+/5Q73#53&'3#3##5#'67#535#735#33535#335&''67&'7'5'6„fägF­Mbb&3 #&EcM99L9…99L9#" ##    *Q+(  KÒ &@    & # <   4    ÿèmÎ 73&'7367&'#5'67#!      (7¯     em5_ÿéíÇ$(,73#3#"''3265#'67#'67#'67#735#35#wkBW / ), %  CCCCÇ^ N18"+* 7:XîÑ%6G73#35#535#535#533#5##53567377&''67&'&''7'765##•$$$$&8´ #     -    ¡    K&&C  *       ÿéóf!%73#3267#"&55#'67#735#35#35#3š, &#> 2"ttttttfW   != " # "ŽÜÉ 73#735#335335"ºº&&8%&É; ÿéó— 73&'73#3#3##5##535# i gæ ¦¦¥¥¥€€€€     >>% ÿé^Ï 73&'73#3#3##5##535# QBBBBD² V V6$ZÿéóÒ*/37?C733#&'#'67#3&'73#'655'667#3#3##5##535#ŽA"  /-r $>8 ]]]]]999Ò      !  ,* !(O M  7 7 bÿçôÏ#'+/5;73533#3#535#3#735#3353353#735#35#35#'67&'b???76?‡‡'nyyTTTTTT  EÅ   "/ ,Q: !     wÿé÷Ë #7'67&'&''6#5##535#£8  )D222Ë $  2Y Z:( ÿé÷Ð"&*.26<B73'33&'73#3267#"'&'#3#3#3#735#35#35#&'''6– 5   –hhŽŽ }}YYYYYYB!»  X/ !#/l   Z@ $ #     ÿéfÆ 73#735#35#35#'67&'LL$$$$$$ 8  Æ£sMM6 ‡ïÀ75#53#3267#"'"&55ÍFYE  '}2U=  T ÿçôÏ(73533#3#3#33#"&''675#535#!!!("V60L7  /(!° #- $A V  ÿçôÏ(73533#3#3#33#"&''675#535#$##*& Q60L7  1,$°  1 $AY t ôÑ 7&''6'6'6'6¯ &! # $' 1 1. %D GÑ " !-  ÿõ[Ã7'753675#53#3#'35#Q' F " QJ]PP%h,LÿêìÏ"&73533#"''3267#'6655#7#5##535#e "     ‡¤++Œ)0_JIA?)Éʦ”ZÿèõË15973533533#'3255#'655#'3255#'655#75#35#[:: 6_o\\\\Y  T?#!@ Y  T?##> KKKKgÿèôÐ!'-73673#3&''67&''67#67#7&'p"JLF    # 53  ¢8#  )<@!p ÿífÄ73#3#7'675375#735#N&/"''ÄQ0 WSf+LÿèöÐ $*06<73#3533533##5#'6553&'#3&'''67&''4'¯4n D!8(   M I Ð &;;-8#PP Z* # ÿõSÃ7'75375#53#3#6'35#J$  > PJ^PP(h-IÿèõÊ '-;J7#'6553#353#'67#53365#536'&'73'7#'63&''667òƒG   ! N!     ÊTF6 6@a7 /@) @/3    %#+  %"TÿçøÒ (:IN73&'73#67#5&'67&'7''3##'3267#'67#3353#5#'6735#_;@’:    4   a0   PT QP¾   ,2  ! &# =." 9g&1  ÿéxÐ#'73#"''3255'67#5353635#35#35#;1  0 2G  777777Ð º  *'p 189„ÿêêÆ73#3#"''3267#735#ˆ]CM  P AIÆK(F#,N%gÿéôÈ 5;73#735#3353353533#3#3#3##5#535#53&'#535#367#o~~$h233;2====/;2+!8È8;   8 ÿéhÎ"(73#&'#5'67#535'6'6'&'[ !! #$ 5 6  Î<_T.7  mÿèöÊ 7&'''6Ì ! ' #+ &Ê’<Bœ“JEXÿéóÐ,AG73'67#&'&''6'3#5#'67#535#5333533##"''3255#&'¿)$-+   .  #!4  4  Ð F3   !æc?" 9I9:=  9 ÿí_Ð !'-7&''63#3#7'75#535#&'7'64   0 '" AÐ    E I3ÿèjÇ7#"''32654'7##5j  ,Ç8 ;Ëß[ÿéöÃ73#3#3267#"&55#'667#upp ‰(   ! !Ã2e i;3,3TÿðóÊ733533#3#53u448Ÿ!™–ÇMgVÿéõÏ"-73533#&''655#&'7''67'7''6h899/ ,6 J8   `   °" E =7$4M"$ % #*   ÿéóÉ59=73267#"&55#'65535'673#7&'7&''675#735#335+ 7T# &  És4&  />`m;$ ?xGV444”"õÐ767&'7''63#735#· "% LL))Ð0   7D#fÿéøÉ37;7325#"&547#'6553#7'7''75#535'635#335ä  LM     ÉH8&&#=0>n>"!?yT "Tk666 ÿéqÉ 06<73#3#535#5#35#3353353##53##"''325''67&' c_6    EQQ *d'  EÉ;;,<")    vÿéíÎ)73'67#'63#35#535#53#5##56 9  +  I 3IÎ& !* !!} xÿéwÇ!%+17=7#3#3#3#"''3267#55#5#35&'&'''67&'s"&  Q+ &"ÇN:‚&&/ÿòóÇ 7#3#53#735#3#735#73#735#òabt$CC!!&& !%% ǯÕ!98K,K,uÿéôÇ-159=CI73#676767'7&'#"''3255'67'67#735#33535#335&'''6}n5  !   #.J.  9 ÇP  " + %  00x   ÿéoÇ!%+17=7#3#3#3#"''3267#55#5#35&'&'''67&'j" J(  $ÇO8‚&%/mÿéôÑ PTX73#53'3#735#73#735#3533533#3#3#67&'67'5'67#535#535#5#35#±6}2'55.55N 5  +   (IÑ#+ ++    ,      NðÏ")/57'6'#3#3#3#&'#'67#535&'#67'6'6Þ 5.6ULLLLZ -/ "I %Ž 1 2 !6 9Ï        G` J     ÿèöZ"373533#&'#5'67#7&'''667'7&''6)%%  '¹ ) $  %(B  //   "  ÿé„Ð $*06<733#5'667#35#33535#335&'''67&''4'5+[  ! $7$N H  Ð cZ *C/  " ÿéìÈ$(,04767#533#"''3255##5##53&'35#33535#335š  G]   , .I.«   //8¥ =J nÿéõÒ!%+37;7'67&'#7&'3#735#&'735'6#5##535#35#— + 5.  "nn )   =====¢    B"  ""  2S S+ "ñÒ"(.4:73#3#3#"''3267#5363535'67&''&'7&'aa³³« «, |||– ‰  B  ? Ò< . k  K         ÿçô-73267#"&55#'665®  E! -)  ÿé}ÌEK73'33#673265#"''67&'#67#"''32655'675#535'6&'>            AÊ )BB!) + ,(%? 3,"|ÿèòÐ#)/5;73#3#3#"''3267#5363535&'''67&''4'¤4GRRU  U4449  5Ð L? 0ˆ b  ÿè‡Ï$1IP73533#&'#5'675#&''6'&''63&''67&''667#2..  !2Z   A  .  "    $¼,   ,    3     ‚ÿìóÑ'+73#"''3267#'63267#"&553'#3¢?   7 &$ 9Ñ o,` w9  …H7& ÿêÈ#)/5;A73#3#67'75#535#735#&'735'6&''&''&'''6l.**3>3++, )  $    ÈX 7  77 v ÿé‰Ì"7N73#35#535#53#563327#"&'37&'7'7'737&'7&'67': G-i8  Q   )      ÌXVb8"/M  % s  % ‹ÿéíÏ #53533#=#'#3355#ž)('¸..¸[<<<<=====ÿéŽÏ&04L733#3#53533'7''677&'3353#57#7''7''6767&J,,2     STffTT    Ï))6      -,Ž Q>      ÿëñÏ73673267#"&55'7§ ÏW\  U ÿéUÐ735'673#'#5'67# !    Œ!' mj"#1RÿêøÅA73#67&'##'32654''67&'&''67'767&''67#^3   ", 3!     )FÅ A"#B  13       ÿéhÈ &+/73#3#5##535#5#35#"&55#'7335655#35# [111  *111ȵµp 7#K29=†dÿèõÌ&Ne76767&'33#"&55#'6653&'#33#3#"''3267#735#5'67&'767#67#53&''67&'À      ' @<!   %    )E ,@    Ì    # +"94 8         JÿéóÏ/G733#3'67#73267#"&55'75#'65533353353#3#535#533”CCH9+-  6+‰-Ï     F:, /4PYML*%65$ÿêîp!73533##"''32655#'67&'ebb   e6 ~!]E @ %ZÿéöÏ '+7'67&'3#3267#"&55#'667#735#‘ ; 9f    >>Ï 3HA  G&) !&NÿéôÐ &*7&'''63#3267#"&55#'667#735#½ %& $ k   CCÐ # !'HA  G%* !&zÿëõÇ73267#"&553'#37#3Ž$  %+m@,NG  ÄyfSSSÿëõÇ73267#"&553'#37#3’# +) i>*NG $ ÄygTTT ÿôbÏ7&'7''675#53533#75##5#L"     2_--_,<>>>> ÿó_Ï 7''675#53533#67&'75##5#V!  / 6_--_1 (>>>>¡ÿéóÁ73#3#"''3255##5##535#¡R   !Á"p [““v‡"6ÿéšn 73#735#35#35#'67&'@UU222222 ;  n[? % %      ÿêô¥/7#673267#"''67&'#'66553&533&'7ì6     n € ,%(2"   ,;<2& $F  ÿçï &,;73#53635#35#'67'5673#535#3'6733267#"&5u%S////"   11SF @7& . YY 07?7 P];U. !"   ÿèò¦"&*.735#53533#373#53&'#53#=#73#735#J SSVV# 2ä6±‰YY88„   ‹fg ==2' >ÿø™l 7#3#3#535#35#5#—![66l/t#32ÿææ‘'73'67'56767567#"''3255##5] " 0  )& ##‰  /l=   _  C>a  I‹ž ÿèYÉ7#"''3255#'65535#35#Y     ÉÄ  :6& 6A`9'a' ÿõó^73#3#+¯¯ææ^C ÿñój 73#3#535#ÃWhçjWjSSÿïñc 73#3#535#-¦HfãgHcNN‚ÿñòÁ 73#3#535#†e(/p-)ÁªªÿéâŒ#73#"''32765#'6&''6<˜  Ž % #c6F JŒ a C    ÿçö‚7&'#5'6556Ö + 1 4#c‚K%(\~2,%)2$ÿèîŽ$7#3#327#"&'#67'535&'#ÚITM ( P*!&3 ŽEDŽ< + #(  ›B  ÿîò˜%)-1573#3#3#3#535#535#535#535'25##5#35#335× '/g0%%0g\Ë[j3%%3jNZ2$$$$8$˜E$yÿéïÇ #73#3#735##5##535#33535#35#{rrff??ZN0N0Ç::o o*? ÿé`Ð#73673#3533#7#5'675#'67# $  '' ¯! 73!  ÿé[Ð%73673#3533#7#5'675#'67# "  $ ¯ ! 83! WÿéöÏ 159=7&'#5'63&'3#"''325'#"''3255##535#35#73#ž!(  Q 2D  =  -  >Ï "/s  mt  1‹%8-\ ÿèmÐ #)73#53&'3#3#'67#5365#536'&'=!X"%% "#'4Ð 2 )    dÿèöÏ!%73533#3#&'#5'67#535#35#335q666/(%! '$/6.·F"HK&$FM"""v[ñÈ)73&'767#533'67##"''3255'67#z/ Ie1   )›     rÿéöT73533#&'#5'67#y34' %K #II($EéÒ"&*73#3#3#3##5'673&'5#5#35#‡ PQHHHHUª !5 AAAAAÒ K  # 0 ÿèð<7#53&''67&767#0¼&!.<+*6 -"; t+    ^ÿêïÐ.7'6553533#3'67#73265#"&55'75277; -!   •E;+ -5P)      „ÿðòI7#3#3#5#535ìFLLG[I#$ ÿéoÈ%*.73#3#5##535#5#35"&55#'735655#35# b646  .6 66ȵµp 4#K07?†L éÏ"73533##5'67#7'6'&'&'PBBB!"3^  hPP_Q-*U  [”ÿéöÏ73'67#'6'665&­7&  Ï!!  "a,B4&CÿéŸÈHLPTX7#3533533##5##5#'6553#3#"''3255#27&'7&''675##535#735#33535#335Ÿv_)1      -'%<%È7C7 5@`<@A -DS& &  ÿèí] 7#'655í½])! 04ÿèÜC73673#"''3265#'67#:8W H7- 32 5 .   ÿéóc!'73##"''3255#535'2'6'&'Û )2jj hh).aF  v  c(  '   ÿéôa%+173'67'676573&'3267#"&57'6'&']'1 9 *+""  #!M ¡ a#%)  ".   [     ÿèïh#(73'73#&'#5&''67'67&'#367_`3 "6  8 ,!3")D Y  *./   Qÿéô\73533#&'#5'67#[=@7+#$(2JBBÿçV^ 7&'&''6.  9  ^     ÿæð~37;A73533#33##3#&''663'7#537#535#535#535#353567!VZZMg…5 " 1,@".07C3OffMMVi;;;h6 v       +ÔÿéèÐ73#ÔÐç q€Í(733'67##"''3255#'67#53'767#b !    * KÍ       }qòÐ73#&''67&''667˜J    Ð     gðÐ"7=73533#3#3#67'675#535#535#73533##"''3255#&'***01++4@++12*q>  >  Æ       )  $  oÿíõÎ'+73#"''3265#'6#3267#"&5535#•J  @  ;.!-( Î p(U$J18%uÿèðÑ#73#3#"''3255##5##535#'6”Q1-  - Ñ (^  Fex( {ÿéóÏ73#3#5##535#535'635#ã22)?*22'6??Ï+&dd&&¶1wÿê¿Æ75#53#3#"''3267#7«3G/1   3&K(L5LÿéïA 73#3##"''3255#'67&'*¬¬Þe   e> -&x A       JÿéòÏ'+/3873533533#3#"''3267##5#'67#735#3353355##55#R*--7  $ . & . &*=+µF!2 RR1!%G T!!!ÿè·ƒ'+/3773533533#3#"''3267##5#'67#735#3353355##5#/''2    &%*(/?(i-  11 11GÿêõÉ9=A73265#"&547#'65535#'273#67&'7&''275#735#335Þ Y "!  &  ÉH8$$ +$;/?V>9 /%  /  TÿëöÏ?HL^73#3#3325267##"&55##535#535#5335##535#535#5335#536535#3735''67&'76N055  ' +##+++.&-a+& Ï 0a    <  #0 Éž–jCC     NÿéìÏ%-159=77'7&''5633#"''3267#'67##5##535#33535#35#ˆ   "+Q  Lg))>)g))>))Ï / OG/6 -Wq q*Cÿé…Ñ%)-7&'3&'73#67&'7&''5'63535E# C #(///Ñ Y.    ’4# ÿëöÏ=GK^73#3#;267##"&55##535#535#5335##535#535#5335#536535#3735&''67&'76i nDJJ  :=+88*<=+88*<A7'B“? 8      Ï1a    <  #0 Éž•jCC      +ÿéÕ9 7#5##535#35#Õ‚‚‚‚‚9P P &  ÿñòÒ #'7'6733#736735#33535#3353#) 4W/¯' Y d::N:ˆ::N:¶ää… "% s‹ IMK DóÑ"&73#5'673'3735#33535#3353#«-¯  +\d R c;;M;ˆ;;M;·ææ¥E2  ( ' ( ÿñxÏ #)733#5'667#35#33535#335'62*V    !2!+58Ï j`   -I7   ÿñqÏ!%+733#5'667#35#33535#335'6.'S  /(24Ï j_  -I7  wÿêïÅ!73#3#"''3255##5##5##5367#wx49 #/Å wwwww¡rÿé¯Ï 7#5'6œ  Ï©‚ 2ZÿêõÄ7&'333#"&'&'75#x  (% . ÄGf   W`ÿêûÄ7&'333#"&'&'75#~  !(% . ÄGf   W”óÐ!73#3533#3##5#535#'67#53¶05 ##**& Ð ##'' ÿñkÏ #)733#5'667#35#33535#335'6+% N  + &.0Ïi^  ,I7  mÿèõÑ!)73&'73#&''67&'#67#3#'3'65u1 7  @ : %=!¹    Egg- % OõÐ%+73673673#3#&'#'67#5367#7&'R " ,pƒ:$ /@* 0DG+¬  4  ÿíóx #'733#5'6367#35#5#3535#3#k @*­ 4@:&:9†9N:99~ææx  F+ (ƒÿéòÏ#73#3#3##5#535#535#536'&'Î ,''..--&&+7 (  Ï##::##  ÿñ€Ï $*733#5'667#35#33535#335'66,\  " $7$.:<Ï kb -G7  \ÿèôÐ *73#53&''67&'67&&5'67&'ª9†9  S +    #+ + Ð 6 " '   rÿèõÐ +73#53&''67&'&''667&'76µ0s/ J    #   Ð 6 " &    wÿèõÅ#'+/73#3#&''67&'767#535#35#35#35#35#wz3+, )+   +,5+++Å`   `=<~ÿêòÆ &735#53#535#33##"''3255#53&'‰NTggTN@   KK1  ža06  3 mÿéòÄ/573##"''3255&'#575#7#"''3255&'#575#m……<   j     Ä  &!{²+R  !s²*#$^pÿðõÏ-73#'3#7#53&''67&67#3533#3#535#”?A    M,,,7‚9,Ï}uo]/    j  nÿèõÏ3:73533#3#535#&'''63&''67&''667#€***5{3*M2 1  $ !  '¹-       vÿñóÄ#73#3#3#535#535#735#33535#335k,))5}5++,,D,ÄsBMÿèôÏ7333"&&#"'663367#53&'w U=I,./FA# Q,¤X ÏA3    9.šÿêóÏ#'+1FL73533#3#&''275#535#35#33535#335&'#63533##"''3255#&'›#%%  ' #. ;8   8  à  I I *,) #    IÿéõÏ(733#3#5353333#33#"&''673›66?–77+/  Ï  ==) !@  ÿîõD %7&'7&''3327267##"&5''6ƒ  e  { 4  D !0   4 &[ÿéõÐ%)73&''67&''667##5##535#J! %+$   =YNNNÐ       \\ \>+NÿéóÐ7353#5#535#535#33#3##533U'..&&'n%%00*¨(ç1*++*1ç(JÿéóÐ7353#5#535#535#33#3##533Q(//''(q&&11+¨(ç1*++*1ç(HÿèôÒ)/S7&'67327#"'#'67&''7&'7&'67327#"''67&''7&'7¤ KK     &$ /( YR   !( 5.Ò         G       RÿçõÄ73#3#67&'7''67#d‚‚ M-6 >= %<Ä:G  (/ *:qÿéöÏ 73&'73#3267#"&55#'655x1 2x_ '§s  f-554QÿéòÏ "73#53&'3267#"&55#'6655 >‘> @   1ÏOr  e-% #4 Xóœ 73#53&'~ eæj œÿññÏ73&'73#3#5#o  ^«¡µ#¡ ŠÿéòÐ!'-73##"''3255#'>5#53&'&'''6} dF   (!  Ni c€Ð  ‰@, !*AQ%, +',# ! ÿçõÐ )73&'73#'67&'&''67&'76b bÛ?) #y! /2 @&0= >&®  #   OÿóóÐ 73&'73#3#536'&'W@  ?•r8¤VA¤ G4>?5692 ÿòóÐ 73&'73#3#536'&'_ \Ñ Læƒd  ¢F8@?1;<1™òÑ 73#&'#'673#&'#'67  ÿèéŸ 37;A7#5##535#3&533&'73#67327#"''67&'#3#735#'6骪ªS7      S ==.%'Ÿ··Œ  # - 'ÿèé– 26:@7#5##535#3&533'73#67327#"''67&'#3#735#'6骪ªS7     T ==.%'–®®•„    + %bÿéîÇ 26:@7#5##535#&'3'33#67325#"''67&'#3#735#'6îhhhTG5     5++ ÇÞ ÞÀ¯ !'  &(2 -  ÿéYÏ733#"'#5##533255#,    Ï&t 7¯{Œx ^XÿéîÇ 159?7#5##535#&'3533#67325#"''67&'#3#735#'6îpppZ L8    9--ÇÞ ÞÀ®  & !,2,  ÿéä£-39?73#5##5353335#&''67&''67&'&'7&'&'€bžMd³žžD  2  x & † ‘‘) „g       ÿéâÏ.4:@733#3#5##5335#&'7&''675&'76&''&'&'lbb`›L:››? E*   a D ϵ µšˆ       #  ÿéwÏ +17=733#3##5335#&'7&''67&'76&'7&'&'5//-T%CC    3 Ϥµ“ƒ      % yÿéõÐ!&,17&'#3#&''67#535#5'63&'3655#335³ *' " " $*', *Ð! A"$"A c pÿê÷Ð159=7&'3265#"''67'&'#'66553'33#6'3#3#735#ä      0 AE''%% Ð  E9 .& (.H;. ) S#K!C%DÿéòÊ /37'6553'#33673#3##5#'67#535#53&'5#rjjG !"  ?!Ž+F4 6@a<) >>& E9äÏ#73533#3##5#535#735#33535#335$QPPYYZZQ==S<˜FF\E 7 8 8 X @ÿìõÏ#)/?E73533#3##5#535#735#33535#335&'7&''33267#"&5''6W;::@@BB;'':&h//B-:  L Z   Á577X8    *  +  ÿçƒÈ 06<73#3#535#5#35#3353353#3##"''3255#'67&'s#!o!#AVaa v1 2 O È == -; 2 /   ÿéí– 06<73#3#535#5#35#3353353#3##"''3255#'67&'ÖG7¸8F}%7%%7%% ««Úa   e:# y" – .. )       ÿéœÇ "(.7'6553'#33#3##"''3255#&'''6-tNNBSS^&  %R ;  ‰'E4 5?_>+$A  >  •ÿéóÏ73533##"''3255#&'•9   9 ›44„  # #BÿéõÒDJP7&'#67327#"''67&'#3533#3##"''3255#'655353'67&'Û   $*      L#   _U =Ò 6#3.' % :9=5I  D>- /:Uk 4ñÐDJP7#673267#"''67&'#3533#3##"''3255#'6553'33&'7'67&'ï9     t(&&31  + „  C ¸ .  &+&     #4  Q     ÿêœÑEKQ7&'#67327#"''67&'#3533#3##"''3255#'655353&'''6…   $    @   O$  Ñ 1##-5&& 9:>8O  K7 6kl›ÿéöÇ #73#3#537#35#35#35#'67&'žR K))))))  ) Ljˆ=@?.     ÿé‹Î 0C73533#3#535#3533#7'75#73533#3#535##53#67'5#'6'((.n-' A<$y#  ' ¾5 C#  11  ÿéÉ &*0673#3#53&'#735#35#3##"''3255#735#'67&'c,/u1"====b&   *>> N  ÉE+ % E2) &*  wÿéóÇ #73#3#537#35#35#35#&'''6~s0-e#.>>>>>>7  Ljˆ<=>,   qÿéóÐ73&'73#3#"''3267#'665#y6 .L@   -©&c#N,7=L _ÿéóÉ 06<73#3#535#5#35#3353353#3##"''3255#'67&'gŒ+%€%+N##dqq;   = g  É<<+;( %  ÿóU¾ 7#5##535#35#35#U¾À Ë7%\%\%ÿéÇ!%+17=7#3#3#3#"''3267#55#5#35&'&'''67&'z$ )  W/  ("ÇN8‚&&/ ÿë–Æ#'73#3#3#5##535#535#735#35#3#735#d(<<2S1;;(?? SS 99Æ8u u®I /ŸÿèñÃ7#"''32654'7##5ñ  +ÃB FÈÛ ÿé˜Ð(,073#3#53&'#53&'367#3#3##5#535#735#35#R5 $Š#2-"l-<<<<,HHHHÐ  6 ,P/1 ÿévÑ(,073#3#53'#53&'367#3#3##5#535#735#35#@& j& W"++,,"2222Ñ  8 -O/1 qÿçõÑ&*.26<B73&''67''6673#3#535#3#735#35#35#'67&'œD "    GS#7}5llJJJJJJ  1Ñ     . T< ! !   ÿéñÐ)-173#3#53&'#53&'367#3#3##5#535#735#35#Y&=Þ<$Z 9O1¦HggggJ~~~~Ð  6 ,P/0K ðÐ)-173&'73#3#53&'#67#3#3##5#535#735#35#W<</¥-W1,8EEEE5[[[[¼    D  ) ( ÿéèÇ 7#5##535#說ªÇÞ Þñ2 ή ,73353353#3#3#"''3255##5##5##537#?&&‚ œKD   /?§ ) 5 "11337GÿéëÐ &,26:73&'73#3#"''3255##53&'#367#'67&'3#735#`a. 3   ’1 .U* L  F 7TT..º †  oŒž (   ?WÿéóÏ &,26:73#3#"''3255##53&'#53&'367#'67&'3#735#£E!(  j&!A/  / &BBÏ †  pžB(     !<gÿéòÏ &,26:73#3#"''3255##53&'#53&'367#'67&'3#735#­=$  ]!9'  , #==Ï †  qžB(    !<ÿéë¦ &,26:73&'73#3#"''3255##53&'#367#'67&'3#735#_a/ 2  ’0 .U,J  E 7TT..•  k  Tqƒ     6 ÿéðÒ5=AEIMQU7'66553&'73#33##3#"''3255##5##535#535'35#35#3353535#35#35#35#7 ]VREEH  52EBBBBPPBV111w22F55F22F55yC3 0#\   R """h  * (  E* ÿê‰ÐCI73#3#67&'#"''32654''67&5'67&''67#53&'#53&'367#F,  (      &  . *  *Ð             MŠÿèöÇ%*733#"&55#'6653&''67&'#367à    X    Ç<  0$  (d2   "ÿôŒÄ 7#3#53#735#3#735#73#735#‡ccv%HH%%++ %** ĬÐ!87E%E%ÿôÄ 7#3#53#735#3#735#73#735#€]]p"BB (( ((ĬÐ!87E%E% ÿçñÒ>73&'73#3#'66553&'#367#3533#3#3#535#535#'6Za( =¼ 2'M2 T *GG@@O»Y==3¹  :/& "C)   ÿèñ¡=73&'73#3#'66553&'#367#3533#3#3#535#535#'6V d(8½ 0'L7 S )FF??N»Y==4  -% 5     `ÿéôÒ=73#3#'6553&'#53&'367#3533#3#3#535#535#'6± 2!m  7/&&!!+t5   Ò :0$ '+C D-ÿùcË736753#5'5372˲ˆ¥ ¤˜ÿù^Ë73753#5'537/   ˲ˆ¥  ¤—ÿùË73753#5'5367@"+  ˲‡¥ ¤—=ÿéõÒ >73#3#'66553&'#53&'367#'673533#3#3#535#535 D *‰ ) C# B 22--9E++Ò :.& #C EQ  KÿéõÒ >73#3#'66553&'#53&'367#'673533#3#3#535#535¨? &~ & =; ..))4…>&&Ò :/% "C EQ  ]ÿçôÒ5=AEIMQU7#33##3#"''3255##5##535#535#'66553&'75#35#5353535#35#35#35#ó1) )+  )%%0 9 00%7?)))À  S  """h  B5 .$]  (   E* ÿïhÏ "(.7&''6'675#535#53#3#67'6'&'4  8")##:!! /Ï – C>2ÿðîÏ+/73533673#5##53&'3#3#3#535#535#735#B   5±1 Ž=TTeÜcUU=ffÌ(( 3!!3 B@^ÿðóÏ+/7#5##53&'7353367#53#3#3#535#53'35#ði    6#Y#22B•@3311§3""3 (( g@@'oÿðóÏ+/7#5##53&'7353367#53#3#3#535#53'35#ñ[    2M,,9„8,, &&§3""3 (( g@@' ÿëmÎ &,7&''6'75#535#53#3#7'6'&'7 ;&.'%%=##3 Î   FC;9ÿë¾Î73'67#'6367'dO > " Î #&t  _ÿêõÂ73265#"&55#'655Ô )$µ §G.9%QQ ÿëmÐ73'67#'6367'.2  #    Ð #*t  uÿìõÐ#733#353#3267#"&55#5335#53§33.  .22ÐYCU-  3UCYeÿç÷Ð "73#'63#3327#"&547#‡T[ UUh TÐ  %'!0 kÿññÉ73#3#535#535'2â 995~4889ÉIOOGdÿçóÐ %7'67333#"''32765#'67#536 [X@  +< 0"#š $- _ 9M!@CÿéõÑ73'67#'6&''66|_  N % $!2;+#Ñ (%. 54!<ÿðSà 7&''6$+ ÃU 30-eÿéõÑ73'67#'6&''66Q  B !#& - Ñ '" F52";sÿéöÏ73'67#'6&''66œH ; # (Ï  !" H!22!; ÿézÍ73##5#'66556n )I!  1Í .ƒƒ<3 8E: ÿîtÌ73#"''3265#733'66D  G:&$ '—/W#;w"X  nÿéõÑ7'673'67&''66› I 0 $ )—(8 ! I53!;zÂ7#3#567&''67&'yTQd'    œÁ$  ÿê€Î73#"''3267#'6##535#.I  =;)Ε-€ %(WfF6 ÿéŠÐ(76767'67'67#53&'73#&''6*> ( !31C 4  ) JnJ    ! ÿéˆÏ$*073533#3#535#3#3##"''3255#&'''6233+i*2 bb x0   4d  @  ½6;  7  dÿèõÏ+17767327#"''67&''7&''7&537&'á:CB  " & 34&(  £  " $    4   `ÿèõÎ">7673265#"''67&''7'73#3265#"&55#'667#ß<    #"?Ž+    (      f6 <"&   ÿë^Ð7'673'67367'0   )   œ#(;  v  iÿèíÒ7#"''3255##53673#735#í  `" ;;¬¨  ±Ä )mMmÿèîÑ#73#3#"''3255##5##535#'6T22  1 Ñ (^  Fex( `ÿíôÐ'+73#"''32765#'6#3267#"&5535#€X K F+"-*Ð n( S J1 8%iÿéóÇ73#67#5'75#35#35#675#j‰*1)88888ÇvB< Ž R WsÿéôÐ7353#5#535#535#33#3##533x""Y##§)ç2,--,2ç) ÿéqÉ#'+73#&'#5'67#535'2#5##535#35#e &$  "*!)111111É %&oh h%9 -õÑ(@7373#3#3#'#5'67#5367#5367#35#535#53&'#673[\dalŠ2 )¤ (<3@Q%88;1S  !8Ä  78  k     MëÐ73#3#3#535#535#53&'736­ 5ZRRaÖ`RR[7  . Ï  @ëÐ"(.4733##"''3255#'67#536553635#7&'&'mV   w -!sq.   Ð 8   $ B&  / VNóÐ73'67#&''667#'6x` $/ ,2 $ Ð  '"   ?åÏ '3=73#567373367&'#"''325735#53#535#'3'67#0#5/    8#65"j,  }%y  "R4  *  5'…&-& ÿêöÏ/37;?CKOSW733#3#67#732767#"&55'75#'65533#735#33535#3353#53535#35#35#jbbreXZ+$ 15+-2K ŽŽ--=-j--=-Ì 1 1 Ï        I95 +7XF>& ! #&&& 6ÿéøÑ.26:>BJNRV733#3'7#73267#"&55'75#'665533#735#33535#3353#53535#35#35#…GGZ G35  %$ 5rr 0 P 0  %$Ñ   J?. ,UH<# ! !$$$ ÿêYÏ7367&''65''6,  ! Ï7 !  2 *@=) ’òÑ7'673#&'73#&'#'68   ?!KN( °     UÿéóÑ.26:>BJNRV733#3'67#73267#"&55'75#'65533#735#33535#3353#53535#35#35#”88I7') +aa(?( ƒ Ñ    J>/ 07UH<$ ! !$$$ _ÿéóÑ048<@DLPTX733#3'67#7326567#"&55'75#'65533#735#33535#3353#53535#35#35#™44D2$&  ([[%:% {    Ñ     J?. /8UH<$ ! !$$$ IìÉ %+1773#735#35#35#'3#735#35#35#&'7&'''6''6‰YY888888|ZZ8888882    ) e ÉY? # # ?Y? # #      HòÐ "(73#'6'#3#3#535#35#5#7&'¬'"ÿéíd 73#"''325''67&'y    9•da  B' "# $XÿéìÂ'667#533#"''32767#7#jg $  ' 'DZJ[ EJ_J ÿéõÏ"7365333267#"&55#'6767#<R   ?( #;‘ " „B%#7kÿéøÎ735333265#"&55#'67#€/ -(11—  ‰t-)jBÿéøÏ 7333267#"&55#'665#53z<  '  ,-Ï2—  ‰=IC;ÿòîÇ7#3#5ä¶ÀÔǯÕ6Ù®!73#"''32765#'67#'67#'6c l   P K. ( ®[?R!D3( 7 â½'-733#3#535#5335#35##5##5'66&'ƒ77L«L77%%%8%%6Z9$)'!½'  ' @0!!0  † ô®735333267#"&55#'67#•#  ! Œ""f  ZQ H5 ­#'+73533#3#3##5#535#535#35#33535#3356"$$""##" .    E  E ( & IТ 73##5#735#33535#335I‡9:'';'b'';'¢g++<C?æ73#3#3#535#535#&'F™C;;J§H::Ar !''!7  @ä73#3#3#535#535#G—B99H¤G99@%%%% DõÏ7333267#"&55#'667#536YQ  ?&% # 69Ï M  @!- $ ÿéâi767&'7''6j 7< !JS.iE  ") "ÿéõ“ 7333267#"&55#'667#536\O  =&$ "!79“f " Y)7-#ÿìí“7732765#"&55'75'6Å &+np * 3$X[:U“'  0% 5  'ÿéí„73#3##"''32655#535#2›Ccc  ddD„$6 1$BÿéõÐ737333267#"&55#'67#T"' , ¢.‘  €EG 1hšêÐ73533#"''3265#'67#¢$«%%lZ]& "T WõÏ7333267#"&55#'667#536ZQ  ?%' #!7:Ï ? 1&   +ÿéÕT 7#5##535#35#Õ‚‚‚‚‚Tk k'; ÿèõb7365333267#"&55#'667#=Q ?%' #!:P H  : (  ÿêî^!73533##"''32655#'67&'gbb   g7 ~!N6 1 !ƒðÏ73533533##5##5#<A<<A<° ÿèõ{7365333267#"&55#'667#=Q  ?%' #!;b Y$ L'0(@ÿéóÏ/73533#3#3267#"&55#'667#535#'6i;;G0  -H& È***O # R)1)#* # ÿéVÐ 73&'73#3#3##5##535# I<<<<>² V V6$† íÎ"73533#&'#5'67#7'6'&'Ž#%%  J  <  MM=C&L  TÿëòÄ7&'333#"&'&'75#p " )'1 ÄGf   W}ÿéë‰73733#"''32765#'67#ƒ5  "#e$$[  2G#=upðÍ 7'673›  M™ /cÿäöÇ!&73#735#3#7#5'75#35#35#675#zdd>>'ˆ /5&>>>>!>Ç:7W#!_7: ÿékÏ$73673#3533#7#5'675#'67# (.  .. ¯ ! 73" NîÏ!733#3##5#535#'67#53673#3}GG]]llK /= x„ 2Ÿ   nÿéóÏ73533#3#5##535#35#n899.E+8!EE222pp2~9Hÿÿ›Í733#3#5##535#535#h " "Í-.W a.{))ÿéîÏ73533#3#5##535#35#dddJ~Gd1~~222pp2~9 ÿó]Ï7#535#53533#3#=#% o----j33ÿéîz73533#3#5##535#35#dddJ~Gd1~~eS SL#"„ÝÈ 73#735#335335"»»%%7%%ÈD""""""~ÝÈ 73#735#335335"»»$$7%$ÈJ'''''"—ÜÊ 73#735#335335"ºº&&8%&Ê37É©73533#&''67#9<AC%" "$ 2 9„%%"*?íÏ !'=C73#5'677'6#&''6'&''&'3533##"''32655#&'E™ 2NPŽ  À  '   ^  ^  ÏŒ-  J          ÿéòI73673#&''67#ejZA JU F[6   *,   ÿéò $:@73'67#&''6'3#5'67'&'3533##"''32655#&'†Q-V J(B ;  Lc""   c)   1  "  ±9  OA) $   iïÒ!'<B7'2'3#5'67'&''6'&''&'3533##"''3255#&'Þ3I=[  ¹$`  `+  Ò e  ,          ÿéóY"(,7#53#3#5##5;5#35#"&55#'67#5#335#^QæUBš><š. ('š.qššJ XX 5  *  ÿéóc"(,7#53#3#5##5;5#35#"&55#'67#5#335#^QæUBš><š. )(š.qššT _ _ <   . €\îÌ(733#"&55#'66767#53&''67&'× $  AW    Ì    C   ^óÕ ,AG73'67''667#7&''3353#5#'67#535#3533##"''3255#&'A[  / -  u  =3Ob  b" Õ"    #o&      ÿé‚È (-173#3#5##535#5#35#"&55#'73335655#35# u&B$? B  6B BBȵ µp 1"J-5=„ŠÿéðÏ"&736732667#"&5#5##535#35#Š" #)  . _66666Ï    $zz-H€ÿêîÏ#733#5##5'67#&''635#­4(?0?&    00Ï :c UC  š2ÿéõÐ0673533#3&533#673267#"''67&'#535#7&'677H64       œ?6Á  ¿*$&  #+; ÿè•}%)-73#3#5##535#5#35#"&55#'733567#35#‡,#T%,I $T  C TTT}uvA  L  ÿéór"(,7#53#3#5##5;5#35#"&55#'67#5#335#]PæTA™><™- )&™-r™™aj jC   4 |hôÐ7&''67'6767767&'Ú )1 '  "„ÿèçc7#"''3255##55#35#ç   <O<<…ƒÿéõÌ ,27'2'6'&'&'3533##"''3255#&'æ *=2'      F   F  Ì  =H  E OÿéóÏ/?733#3'67#'665533267#"&55'753#3#3#5#535’AAH d .<*" ?LZZObÏ    F:, *P#  6$# ÿöZÏ7&'37'5#2  4 !Ï ?n  p ÿöeÏ7&'37'5#3  6 #Ï ?t  poÿéñÑ 473&'73##5##53&'7367533##'6655##5##5t/4x}])-  ¹  #((   2; 'XX?PÿéìÑ673#3#5##53&'#53&'#36#"''3255##5##5353~b' <°; &\BW 4 4  87KÑ (( #D<  $UUCVNÿéðÑ 473&'73##5##53&'7367533##'3255##5##5R> D™ž{(  &  /; ''º  #((   2; 'XX?Pÿê€Ð 673#53&'3673#5#3#"''3255##5##535##53&'H-m,  )  ("Ð  ))8  "YY?P) ÿéì¦673#3#5##53&'#53&'367##"''3255##5##5353ƒV8°8 Y=Xz  66I¦  %% 7 8.  DD5Fÿé‹É$,047#3#327#"&'#67'535&5##5##535#35#…'+' '  H%!\GGGGGÉ0  n0=c d$7ŒÿéóÐ733#3&''67&'#5367²))'   "Ð$ 7(  . mÿèôÏ733#3&''67&'#5367Ÿ==8"% " & Ï"9( 1'"˜ÿèõÐ733#3&''67&'#53767º$$$       Ð% 9(  3' MšÏ%9I73#35#535#535#533#5##5356737&''67&'76''7&'76)V" j  #    œ  U&&N  /    #     ÿé™S737#"''3255'757#*V5 B=S    TÿéóÉ#+/373#3#327#"&'#67'735#&'##5##535#35#TŽ5;1 # <% ff51zfffffÉ0  M.=d e%6pÿéóÉ#+/373#3#327#"&'#67'735#'##5##535#35#pw,/( , PP'#dMMMMMÉ0 N.=d e%6lÿéòÉ$,0473#3#327#"&'#67'735#&'##5##535#35#l{/2+ . SS(%gOOOOOÉ0 N.=d e%6 ÿþgÏ767'67'6767'6U "* $,/§5$  0*`   ÿþVÏ767'67'67676'6D"   !#§8" 0.n  Mÿê¡Ï73533#&'#5'67#Z    ¡..ho (8&ÿéê %7#3#327#"&'#67'535&'#ÛENE ) T,#'6 AG8 #  9  ÿðóm73#3#3#535335#Ï]LLhæ**\m"";;W&ÿçÜ‹!73#735##"''32655##535#35#.¦¦›  ŽŽŽŽŽ‹/+Q  i ( ¥ÿéíÄ 7#5##535#35#35#í"""""""ÄÛÛ=+f*e*OÿîóÈ&+37;?733#'3267#''67&'767#'67#37#3#53535#35#35#_u      %%38`¤%&È&/" (     ( *> j@@@..... ÿñ•Ç',6:>B733'3267#&''67&'767#'67#337537'27#775#'#7l      %.Tr;I'<Ç"(       " $4 ¯C. 3/ !$$*‘ÿéõÐ!'767325#"''67&''7&537&'ò4       ™ " / "7&@: ÿïîÉ!%)73#3#3#3#535#535#'6735#735#35#)¯KXXPPaÜfNNB  8O‡‡‡‡É\ 68LÿïóÉ!%)735#53#3#3#3#535#535#'6735#35#h(7€4::44A›E440 YYYYg \\ Y8[ÿïóÉ!%)735#53#3#3#3#535#535#'6735#35#t!0r-44//:>..( MMMMi[[ X9yÿïóÉ#'+73#3#3#3#535#535#'6735#735#35#Œ_$''##,o/##'8888É[  59 ÿð“É#'+7'75#535#'6735#53#3#3#6'35#35#9E:''! +e&++''G????   XX–6 ÿé¢Í #06<B73#5'675#73#5'675#&'7&''67&''6'67'6= ,C= +.T  (" ) # ' '+ 1 35 'K LÍS  S      P     +‚ÿêóÐ"(73267#"''67&''7'3767&'Ü   /1   j%' *0D$  "vÿéôÐ,273533#3'33#67327#"''67&'#535#7&'444@@?      ’=4º  ¿445(: 'D  ÿ혇#'+73&'73#3#3#3##5'65#5#35#1(-((((,b 5$$$$$…  ]"!KÿèóÎ/3733533533##5#3#3#&'#5'67#535#5#535#gAl;A5$ $'%1?2ZÅ++: !99L+GÿèõÎ/3733533533##5#3#3#&'#5'67#535#5#535#eCo=C7% &)(2A3^Å++: !:: L+ ÿèeÏ%+73#"''255#'67#535365#7&'4'9  $$  Ï ° N>- /2L[::3H ÿèëÉ 7'66553'#36 É¡¡–2F6 1%`3"6ÿév“7'6#5'6`   “  [H iÿéó‘/373533533533##5#3#3#&'#5'67#535#5#5#p >]39- +5* [€' ,(  7 ÿèëÊ 7'6553'#3.Щ©8G6 6@a- 1ÿêo—7'6#5'6Y   —"XD gÿçñ˜.26:>BFK735333##3#3#''27'67#537#535#5#5;5#33535#33535#33567#u00 04CM '+,%(#40 /M/R##4"$ , !     !  6 < _ÿñóÐ "27#5##53&'73#67&'7''67#3533#3#535#í`9 Hy;  +1'533@”@5µ##  )   ILÿéêÉ!%)B733#5##5##53&'767#5#'#35#'3533#"''3267#'67#53`…))(<   hw)((=)<(E 3 < 25:Ébb  ;2+ -`ÿéíÉ!%)A733#5##5##53&'767#5#'#35#'3533#"''3267#'67#53rw$""5  [h"""6"6">* 6 , -2É bb  ;3+ -HÿéóÏ4873533533#3#3#"''3255#353#5335##535#535#35#P"0"")LE  1W0DL*"600»j  T<->>-!99M m  (+3>R!&:!#D, I$ dk a .(,+¼2!5./321)   1H   ÿïeÏ 73#'6#53#3#67'5#53-.6 <   Ï 5%7 E ÿï_Ï 73#'6#53#3#67'5#53**2 8  Ï 1&7 F ÿïgÏ 73#'6#53#3#67'5#53/.7 =   ""Ï  4&7  FUÿéóÏ4:@73533533##5##5#&''63533##"''3255#'67&']..C& #!% 4!211  2_» ! /:  5 $  ÿéòÏ5;A73533533##5##5#&''63533##"''32655#'67&'3L33L3n12 5108 P6ONN   O!‡» ##09 4 #IÿéóÏ$(,173533533##5##5#3#7#5'75#35#35#675#N$3$$3$Ÿ8@)MMMM*#MºdpBDÿéñÐ$(,173533533##5##5#3#7#5'75#35#35#675#:F::F:Ö!$KW% 5llll;1lºa nBC^ÿéöÐ$(,173533533##5##5#3#7#5'75#35#35#675#` -- 29$CCCC%CºcoBCyÿéóÏ#'+73533533##5##5#3#3##5#535#735#35#z d'3333)>>>>½[,,69 ÿéóÐ#'+73533533##5##5#3#3##5#535#735#35#8H88H8¬LiihhK„„„„¾[,,67 ÿéðÐ8<7#'6553&'733533##3#"''3255##5##535#5#53#3ïºc8<'''E  11E(''P<<»MA2 1W#%' ! Ï  /$”âÏ 73353#533uDÄCÏ(00ÿéòŽ$*<73533#3#535#73533##"''3255#&'3533#67'75#)))0u1)t= = y.**6C5.|W  S   FòÐ%+>73533#3#535#73533##"''32655#&'3533#67'675#)))0u1)t= = y.**5@.ÂC >    ÿéãm"&*73#3#"''3255##5##535#53635#35#tQIX   DDXJC3‚‚‚‚m:   &&!/ :   ÿéóÑ#'+17&'3673#3##5#535#735#33535#335'&'x  ?{  MhhiiO;;P9‰;;P9‰  Ñ ,]..7;g`ÿéóÑ#'+17&'73#3##5#535#53635#33535#335'&'¢  C 6AA??6PO##6#Y##6#^  Ñ^//^?<g yÿéóÐ#'+17&'73#3##5#535#53635#33535#335'&'±  7 -4433,B>,F,L  Ð]//]A<gyÿéóÏ .47#5##53&'7&'''636733#&''67#7&'ëG+   *2) " ! &%&S·(*   8-5,'0  ?ÿéòÏ 47#5##53&'7&'''6&'36533#&''67#ërB2 O  `AJB4 3C B >·),    ,/,*ÿéˆÍJR73#35#535#53#563325#"'&'7&'67'5&'67'53753745&'8 A,c8          2 Í [Wa-(#B   + * - u    !WÿéóÐ(-28>7367#'6733#3267#"&55#'67#7367#335&'&'d@+ 1+*   1 &*#6(J$$##9265™  8  %   R    \ÿéóÐ(-28>7367#'6733#3267#"&55#'67#7367#335&'&'i=) /*)    0 %(!4&F##"!6144™   8  %  R   /ÿéê "&*73533#&'#5'67#7#5##535#35#35#<    ®2222222~""[Z#+-°°0LM?ÿéëÏ"&*73533#&'#5'67#7#5##535#35#35#D    §.......›44nl (6;ÛÛ=+h,h+ ÿéæ‘"&*73533#&'#5'67#7#5##535#35#35#'   #ÒHHHHHHHr RT",* ¡,DE[ÿéìÎ!%)733#'#5'67#537#5##535#35#35#x  t"""""""Î3lt$(6)ÛÛ=+h,h+ƒ4õÊ#(733#"&55#'6673&''67&'#367Ú   Y   Ê!  % C    1õÏ!);@P73533#3#535#733#"&55#'667#5##53&''67&'#3677'5#'667333&a(3Ë  PzY   `    Ä   !  % =!"    &   #  ÿé†Ï+73533#3#535##5##53#7'5#'665,,,$[#,lH>>?   À05  6!  ' ÿéò]!73533673#&'#5'67#53&'I  /Q$3 9%!; ;N6 [    #;;$  RóÏ4733#3'67#&''67373&''67&'767#F,,(UK=     F\  ! DÏ 1 %         ÿézÏ373673267#"&53#&'#5'67#535'6! )&S ((  $/0Ï    :@ nÿéóÇ7#5##537#53#3'>&'ç<"/u3   ¡‚pqƒ'A$!  ! ÿéÊ $*73#3##5'67#535#735#33535#335&'a',, (0(&:&  ÊeX> ;CZ wÿéóÇ 7#5##537#53#3'>&'è7 +m.   ¡‚pqƒ '@&  " vòÊ7#5##537#53#3'>&'ç7!+m.? ¦tbcu!)@ …ÿéóÇ!7#5##5367#53#3'>&'é4)h+  ¡‚pqƒ  '@'  !ÿé„Ï8<BIN73533533##5##5#3#3#"''3255&''7&''#535#3355#765#655#n    . " »l    /ƒ; -  6 iÿéòÏ>BHM73533533##5##5#3#3#"''3255&''67#''#535#3355#655#i!!!!!!%#      $%5 I»l    *  0ƒ; 0 1"ZÿéôÏ?CIN73533533##5##5#3#3#"''3255&''67#&''#535#3355#655#Z&&''&&‘+(        )+; Q»l    *  0ƒ; 2 2#IÿéóÏCGL73533533##5##5#3#3#"''3255&''67#&''655##535#3355#I++,,++¢0,      -0A »k    *   %rƒ: 2F5ìÏGK73533533##5##5#3#3#"''3255#&''67#&''67##535#335K)())()¦2,     -7G¾ 6  "    9H 3IÏ 7&'&''6$  +Ï  $    @ÿí”Î:736733267##"&53#3#&''67#53655#'6K    - " Î       †ÿéóÅ1733'67#3#33#"&''6735#53&'767#–Q     $/  :Å +4 !C! f  ÿéuÐ873673267#"&53#3#&''67#53655#'6 %  :$(  (-Ð         sÿéóÏ'+/735333##3#3##5#535#535#535#535#33535{)--118811++((//)<»''''& ÿèöÒ6:>CZ`7#367#533#7#5'675#'6553&'73&'736735#35#675#73#&''67&''667#ôÆ72G "'   .   €(((((\9     ±-JV >. /9T   a33 {9  ( ) ÿèôš4;VZ^b73&'73673#'6553&'3#&''67&''667#'367#533#7#5'635#35#35#75#9 ,  "À„9      ;>R $% ,,,,,,™    6-" "*= #      4 ; ! #âÏ 73353#533vDÄEÏ **¤âÏ 73353353#DDÄÇ# ÿéõ $(,27Sls„73#33267#"'"&55'67##5365#'#33655#35#'3#&'#5'67#535'23673&''67'67#367767'74''6¨+,    %!)&K *&  #*)/ /   + m    T+  !, ^+" D     _       ÿébÌ #7&'''6&''6#5##535#J      /Ì   -__@03ÿýÈ­)37;?C73673#'#326547#"&55##5'67#3533&'#35#33535#335@->' )   "$   )A)—   A   M "*,:ÿùʰ'+/57&'3&533#67327#"''67&'#3#735#'6³gJ*)     J::-#'°   )$+30ÿèæÒ7&'3#"''3255#3#@ <{   gQÒ Âª¹7ÿîȪ#'+73673#3##5#535#53&'35#33535#335e  3????4!!!4!U!!4!ª   W''W 96^ÿèôÏ &,77'5673#3267#"'&''3&'&'r Q$53   32  ih É  4!)"FE2•Lÿêðž$*767'5673#3267#"&''3&'&'`  U':7  ":7  C?  ’ $1,-7%bEÿèõÏ73533#&'3##5#535'67#QAE8) *$$##()4£,,K#)Q]00]L.-E?ÿéôÐ#'+#5'673&'73#3#3#3'353535s # -  870000955555 -3!"!™!!2""4!! ÿé¢Ï48<733#3#&'#5'67#535#535335#535'273#335#335y- 18876 ;;A*‡B># / ÿé§Ï%*.26<B733#3#5##533##5##5'67'3&35#35#35#''67&'H66=a7RR`D3$$K @1DDDDDD  Y Ï "";] \ )  ' ' & n    Gÿé”Ï#'+73533#3#3##5#535#535#35#33535#335G  (  ½b..b;B8 Ç®'+/73533#3#3#535#535###53#"''32=#35?67700>=//6fJn  JJ¦  pXD ' .ÿêó«-159=AIMQU733#3'7#732567#"&55'75#'65533#735#33535#3353#53535#35#35#wWWeQFG$ '$ '7uu!!1!R!!1!¨ ()«      ?4( )/F:6!  dÿðóÏ73&'73#3#5#dD  5hau¡ŒžN%íÐ"&*7'673&'73#3#3#3##75#5#35#m $./))))1m>+++++ (5   e%%UÿéôÐ#'+#5'673&'73#3#3#3'353535  +  .3----5s+++++‘ (-!"!™!!2""4!!NÿèõÐ  $,07&''63#'66553&'#335#5##535#¢"# "#&2 ,d 59QQQQ@@@Ð K." #A #  .D D*XvóÐ<73533#3#&''67#5365#'67#5365#53533#3#&^  n    Ä     #      ÿéaÍ73&'73#''67&'767#  "   6£,$#"(  XÿéíÊ  $CGMQW7##535#35#7#"''3255#535#5#3533#3#&'#5'67#535#35#&'735'6›1ƒ   1 K+++%%   %+  #  ÊEœá ' )Ì „E '  6  #' 6 4   AÿéõÏ73533#3#&'#5'67#535#^6<BJNRV733#3'7#73267#"&55'75#'665533#735#33535#3353#53535#35#35#pNNh[GH %  01')2 K(ŽŽ--=-j--=-Å00Ÿ         9/$ !@;0 ÿçës*067676767&'7'#"''3255#'67'67&'''6N!39M)  !  ++,  G! !R -'X #  $     G   ÿèï[+177676767&'7&'#"''3255#'67#'6&'''6Y . 9CS( ""   .-. ^#!!H & #Z      :   \ïÐ&*/3873533#3#3#535#535#3733##7#7#73'3373'#337YYYOOeßfKKY ™"%†360~3+=0È    <   ÿèðÑ/37;?CTX\733#3'67#673267#"&55'75#'65533#735#33535#335#"''3255##535#35#ibbs _'G & 0",/5G)££77H6~77H6 uuuuuÑ       L?1 0:W@5 >  O ÿéõÐ-F7373#3#3#&'#5##5'67#5367#5367#673#35#535#53&'Wahgo7  v 3@7?PC  //v//6:¿ ^ Y A     hÿèõÎ/3733533533##5#3#3#&'#5'67#535#5#535#}:Z16.  )3)IÅ++: 65L+bÿèõÎ/3733533533##5#3#3#&'#5'67#535#5#535#x;^490" # !+6+LÅ++:76L+fÿí›Ï73#3#5##53635#5#{$$Ï I^È E'Ž++ ÿé}È (-173#3#5##535#5#35#"&55#'73335655#35# p$@#= @  5@ @@È´´l / ,M*2C lÿê÷Ï7'2333#"''67#53&'à 1F: (/ 9EX1Ï;  /@}ÿðóÏ73&'73#3#5#}9  )NEY¡Šžÿé|Ï#+/373673#53&'35#4'735'6#5##535#35#*   l  &  ;;;;;Ï RR Z4 44;ff#7 ÿìô^%*/7&'#3#3#53&'#535#5'6''35#367#‰ -9 /Y 4Þ5Y0 GT $3%^      ; vÿéöÏ/3733533533##5#3#3#&'#5'67#535#5#535#‡4R,1*  %.'DÆ ++9 43K+ÿçðF#73533533#3#535#35#'67&',G,,8Ü7,?GG$*+e(' '(< "  „òÎ 73#'6«JVÿéôÏ!+37;7333#"''67&''667##53&#5##535#35#|% 28   P SSSSSÏ $    ,\G` `$2 ÿécÏ"73533#&'#5'67#7&'7'6     G  ~QQ TZ",Q]ÿéóÏ!+37;7333#"''67&''667##53&#5##535#35#€# 03    K MMMMMÏ $     +\H_ _#2aÿéñÏ *.B7&'6'&'67&'63#5##53635#67&''67&'«   $   h   8J\%\\    Ï   9} } lQ      cÂ73#3#67'75#535# Q%-Â:;  B:YÿéïÏ +/C7&'6'&'67&'63#5##53635#67&''67&'§  &   n  ;Nc(cc    Ï   :} } lQ     jÿéñÏ +/C7&'6'&'67&'63#5##53635#67&''67&'®   "  b   4FW$WW    Ï   : } } kQ    ÿñl¿73#3#5##5'67#35#\) 2   (¿#r g %:’DÿèNÉ7#"''3255#'65535#35#N     ÉÊ ?1( +5v;)d) ÿèÓÉ7#"''3255#'665535#35#Ó | xxyxÉÄ-,$ 4"`?,k, ›ÿèíÉ7#"''3255#'65535#35#í ÉÉ ?1( *6v;(c)GÿèšÉ7#"''3255#'65535#35#š ÉÉ ?2' +5v;(c)EÿèîÉ/377#"''3255#'65535#35#7#"''3255#'65535#35#˜   ˆ  ÉÉ ?/* ,4v;(c)MÉ ?/* +5v;(c)RÿéíÉ/377#"''3255#'65535#35#'#"''3255#'65535#35#í   !   ÉÉ ?6"!>y;(c)MÉ ?6""=y;(c)ÿêUÆ75#53#3#"''3267#7A0D-/   1&K(M5L ÿçêÉ15:7#"''3255#'65535#35#'#"''3255#'665535#35#ê  10000,  / ....ÉÁ22' 6A`;'b(gÁ21( 1&`;'b(ÿøY¿73#3##5'67#35# L *$  #¿#hY $;‘CZÿæóÆ)73#3#3#535#535#3533533##5#'67#h„822>Ž<228- -* !ÆtDD+_ÿæðÆ)73#3#3#535#535#3533533##5#'67#l~5//:†8//5**( ÆtDD,ÿéð‘%)73#3#3#3##5#'67#535#535#535#5#!ÀVLL]088E: , :<4]LLUƒC‘//& UdÿéóÅ.73#7#5'75#35#35#75#733267#"&5e‡?  =  ň0,’##W#\$Zž! kÿéóÅ-73#7#5'75#35#35#75#733267#"&5l€;  9  ň0,’##W$]$ZŸ ! nÿéôÅ073#27#5'635#35#35#75#733267#"&5n€8"4  Ň0,“##W$]$ZŸ ! UÿèóÆ 67'66553'#3773267#"&55'75'75'6€ {TT/179  " /ˆ'D5 2#_>,   =ÿèóÆ 67'66553'#3773267#"&55'75'75'6l ‹dd79@B  $ &) #7‡&E4 1#_?,    nÿèóÆ 57'6553'#3773267#"&55'75'75'6‘kFF&(-/  'ˆ'D5 7=_>,   MÿéóÇ 73#735##53#3#&''67#536dzzRR6ƒ8IA, /5 .5;ÇF"Y $*-$ fÿéôÇ 73#735#365#53#3#&''67#yff?? 4/t2=6% & 0/1ÇE#v  #&  aÿéóÇ 73#735#367#53#3#&''67#skkEE!73z5A9& ' 204ÇE#v  $' !IÿíõÆ 73#735#35#3533#3#535#^……]]]]<==J¬L<Æk?EN&&Rÿîõ‹ 73#735#35#3533#3#535#a„„]]]];<>   AA gÐ%'&"A  =8 % 'ÿèÔE 7#5##535#33535#35#Ô…99L9…99L99E]]$5 @÷Ñ%+17&'#5'6&'3##"''3255#&'''6‚26 "Z$ OI6±P M~("!'J+.Ñ          fíÐ3733#3'67#&''673767#53&''67&'H)) D ;4     J@U    Ð  + !      YÿñóÄ#73#3#3#535#535#735#33535#335f666DšB555""6"X""6"ÄsBM ÿîô873533#3#535# VVViçiV%4ˆÈ"&73#3#67'675#535#735#33535#335f*,,3>++**B*ÈM   ./‡3ðÉ%733'67##"''3255#53&'767#Œ^(  '+  BÉ   3  0  cÿñóÄ#73#3#3#535#535#735#33535#335nx111>=1123Q3ÄsBMZÿñóÄ#73#3#3#535#535#735#33535#335h~555B™C555""6"X""6"ÄsBM ÿíôÊ"&*73#'65563267#"&553'#3#5#Û Keµµj0 .9 C<–--@.Ê C959W—! jF4"""KÿìóË!%)73#'6556#3267#"&5535335Þ 1BxxG;Q " ,Ë '@5 26^PE&  n####5ÿþï#'+/3733#3267#"&55#5367#'6#;5##;5#c6#.  -3.  "¯  T  T  0! ÿé÷Ñ$*.26:7##5'66733#5#3267#"&5567##;5##;5#u9 M H; '  3& > C99;;99;;$o   x  Ž  ,ÿèîÐ %73#53&'3#735#3#"''325567#‚aÞfB¥¥||$¾!(   šÐ  3:8 $ cÿéóÏ %73#53&'3#735#3#"''325567#ª?;$ooGG}  _Ï  2;7 & îÑ $73#53&'3#735#3#"''32557#ƒbÝdC¦¦||%Ã"*2•Ñ *0-   jÿéóÏ %73#53&'3#735#3#"''325567#¯;‰8"jjDDy  [Ï  3:8 &  ÿébÉ7#"''3255#'65535#35#b   ! Éà 91+ 6?`:(a( ÿçóF736533533##5#'67# C<??>8-@3 772 ©ÿéóÏ73#&''67&''667#¾'      Ï=,  .!,HÿéóÏ<BIOU1073#&''67&''667##"''3255&'#5'#535375#7675#7'6'&'¾'      !   % & E ?  Ï=,  .!,‹ $nf"0 DD'=F L    ÿèFÏ7'6#5'61   Ï)c #<ôÏ $*CIO7&'7'673#&''67&''667#'33#"''3255##5##53'67&''  a 7>     $f0 0  4 Ï     !      0/N :SSTdÿçñT.73#673265#"&55#3'67##&''67#âP% , '8 7SH1   -T    E/ "   oôÑ #)BHN7&'7'673#&''67&''667#'33#"''3255##5##53'67&'&  a 7<     $e0 0  4 Ñ       "0 444B   ÿéøi"&*.26:7#3#;267##"&55#535#55#7355#355#355#ÚEOO  < LLFi 2g3h=r>.=k>>.=T0  1JQ. §æË 73#735#73#735#[[55\\\88Ë$ $ ÿæñQ7&'3673#&''67#´ —_h]A I!3) AVQ   %  ÿèô— #*EKQ7&'7'673#&''67&''667#'#"''3255##5'#5353675#&')  \  5<    $"  00 @— ,!   & "g  RfL &‚++X °òÑ73533533##5##5# =C==C=Ç \ñ² #)BHN7&'7'6&''673#&''67#6'33#"''3255##5##53&'''6* Q A   ;  0& ‡/ /  %  ²   4      #) **+:    ÿéöZ"&*.26:325267##"&55#535#53#3#'#'5#335#5#335#35#5#;!MMF¿JPP4c88/=l>>>>/=   4 1OQN 2  NÿéôÏ;AHNT1073#&''67&''667##"''3255&'#5'#535375#7675#7'6'&'¿%         % % ? ;  ÏB#! - "(‰  "ha"1¡DD)IQ  I    ÿèNÐ 73&'7367&'#5'67#    &® "   ce 7ÿèòK 73673#&''67'67#37667K‚2 # /%G 1!5 ?U 5  =       † òÎ 73533##5#†-++-ŠDDmm`zÏ73#&'#5'67#535'6r&&  (.1Ï  !%u^ðÑ7367&''66''6®  (!  Ñ   ( ÿêõ[%73#33267#"&55#67'7#&'ãœp  ` %3p [3  (+  T)  ^ðÑ067367&''66'3#&'#5'67#535'6'6®  (!<&&  (.1F  Ñ   (*  !% |êÏ%+17367&''657367&''65''67'6D    )l    )‰  o  Ï             )ÿçñY$73#33267#"&55#67'7#&')­}g  X )N Y4 (- S%  Qðx7#5##5ð»x''rðÏ#73533533##5##5#3#735#335335>>>>>>ÀÀ&&9&&Ä  1>îg7#5##5î¸g()*ÿçñK%73#33267#"&55#67'67#&'*«|g  X (M K +  #E!   ÿéóÏ73533533##5##5#35#35# *h,,h*>hhhh¥****©©88ƒ8ÿòóÏ73533#3#3#535#535#'6? 9WWMMcájMMC  Ç667777 'eíÐ733673#5##53&'733#735#u  .²/ B™™qqÏ  -- -mÿéöË73533533##5##5#35#35#m55+5555¤''''¨¨99…:qÿòóÏ73533#3#3#535#535#'6‹ --''3~7''Ä&777777 ' ÿù}Î73533#3#7'75#535#'6$""(-7.&&Á ,,-4   8- (ÿéòÆ #73#3#735#33535#33573#5##533ãã2||""5!V""5!'¤¤Æ|G$$$Z%%%;©ª‡&cÝÆ 73#735#33535#335&··==Q>==Q>Æc9> ÿê—Ï37;?CGMSbh733#3'67#'65533267#"'"&55'675363#735#33535#335&'7&''33267#"&5''6C44@ [ .0  :cc&=&   .  6    Ï  I=/ 07T  0A' #        ÿêâ[733#"''3267#'67#536oa  ROIOU[ ?&=-ÿëîÍ #'+/37;CKOSW73#735#33535#3353#735#33535#33573#735#33535#335#5##53#53535#35#35#-¤¤88I888I8©aa(A(aa(A(¹·$×ppppppÍ5 4  4  ##AA   [æÍ #'+/37;73#735#33535#3353#735#33535#33573#735#33535#335-¤¤88I888I8©aa(A(aa(A(Í5 5  5  /îS7#5##5î¸S$$ÿîòO 733#537#'77#O tAã piO+  ÿèîÏ %973#"''3265'3#73#3#3#535#535#73#3#3#535#535#Ü ÊO "S![O "S!ÏÏ Êçã ÿèîÏ%973#73#"''3265'3#3#3#535#535#73#3#3#535#535#É   ¯PQ ZPQ! ÏççÍ Å4ÿíÊt"73#3#"''3255##5##535#53&'?@6   $%6CAt * AA/@4ÿõËq#73533533#3#535#35#'67&'>$ )—&.$$  L^-     0ÿñÊp*73#35#535#53#3267#"&55#'67#56n ((\&&+>'   0 +#p   H  $ DÿèîÏ%973#73#"''3265'3#3#3#535#535#73#3#3#535#535#É ±Q !R\Q  R ÏççÍ Å,ÿîÏr &873533##"''3255#'3#3#735#&'63677'7&'…(   (VQQEE$$P  A%/]G  C" ,   TÿéïÁ4873#3#"''3255#''655#&''655##535#5#T›*&     ,/` Á%Š  t (;   & !2 ¡%%%%ñÄ,07<73#3#"''3255&''655#&''#535#5#5#655#r"     $B 8 Äs    !1  !‰87,! z ôÏ &*.473'33#673267#"''67&'#7&'3#735#'6z?('    @c  O--«$$?, !53  :D&:  ÿéóÐ!%).4E73#32767#"&55#'67#53635#335365#33567&'7''69*(8  J6)%!#6#    Ð iI  NF!ãEzz&4J   +,/ 2  ? YÿîïÏ)-373533#3#535##5##53#3#3#53&'#735#67#[?@@75?“qaa x*–*TT6* +&& 2 ? ÿëuÏ*.473533#3#535##5##53#3#7'7&'#735#767)))$Z")gD;; W *5 33 Á,#' 1   #  dÿîïÏ(,173533#3#535##5##53#3#3#53&'#735#7#f:992v0:‰hZZ p %Š'LL2% +&& 2?tÿïðÏ)-373533#3#535##5##53#3#3#53&'#735#67#v222+g)2zYNN d !{"AA*  +&& 2 ?ÿèñÊ#'=73#3#5##5##535#3#'3#3#'3#3#3#67&'7&''67#ÂWdPPdVu;;f>>g;;g>> ´´â‡49IRBÊ.>>..     XÿèñÊ#';73#3#5##5##535#3#'3#3#'3#3#3#67'7''67#h~7B//A4N!!A @""A uu˜W  -3 +Ê.??..      KÿèñÊ#'=73#3#5##5##535#3#'3#3#'3#3#3#67&'7&''67#XŽ?J77J=X%%I$$I%%K&&ƒƒ¥\ ! 280Ê.??..     iÿèòÊ#';73#3#5##5##535#3#'3#3#'3#3#3#67'7''67#vq0;((;/F99:hh‰Q  *. "Ê.??..     ÿæò¡#'5<73#3#5##5##535#3#'3#3#'3#3#3#''67#&'#6ÂVdPPdVv;;e;;f;;g<< ¹¹ä/  IQ7© G5¡ '11' $     ÿè~É#'<73#3#5##5##535#3#'3#3#'3#3#3#67&'7''67#Y&/.$8...RRk; " É-??--     ÿèîÂ73##53##"''3265'´´QgÝb  ÂAl  ÿéõÑ-157'67333##5##"''3255#535#535#53673535N 0] 2=   NNhh?Y ===¬!  .9 #   +.=ÿëò­"73#3#353#5##5335#535#'6gvCNN.p/TT) ­ *=.M M.=* 3ÿêí 73#3##"''3255'67#5335#E¡*11   (B =&GFe 0H  >3*6$09ÿæó® $*07373#33#53537#5#3535#5#'67&'FIDG?º:Gƒccccccc ! Y   dd '  # #       ÿèîÊ 7#'655î¿ÊTG5 6Aa3ÿæõ $(47&'#67'5'63&'73&'35#35#67&'‹-/ u 8#'aaaa5 -/ 3T !    ;gìÁ736533&'73#'67#&'?C!W >2 ;i$ "!¦      Aÿéæe!%7#53#3#5##53635#335335#3#3ƒB¥PW~;+'/(////V \\O8 88 <jí¯7373&'73#&'#'67#CB%C,8<.7¢   -ÿê÷|048=A7#3267#"&55'67#53673#7&'7&''6'35#335365#335° " ,>B 37H   N++?1o')=4"!   C  C  5 # =ÿéê‘73##"''3255#=­G Q‘y  t=ÿèë­ %73&'73#3673#3##5#535#53&'ECG.&  /NEEEEL/ —   ..:ÿñò­&*.2673#3#3#3#535#535#535#535#'25##5#35#335Ø $JKA™DMI!H0  4 ­J+<ÿèó¬#'733#3#535#53533#3#53#=#5#¨((7·0(((((A}YYY¬wff5$9ÿêó«7353#5#535#535#733#3#3##?288--2b;;77>>‘Á.  , /7`ï¯7373&'73#&'#'67#>E(F0;?1<ž  $# KÿèÛ] 7#53#5##55#335#355#_,++?,>+?, ac H2ÿéæ«"&*73533#&'#5'67#7#5##535#35#35#>    ¨2222222†%% [c!-/¹¹2 R R -ÿé÷¯973#&'#5'67#535'6'3#&'#5'67#535'6Ü )$   *9    % %¯6)WX)!4  _`$+<ÿçõ£,>BF7#'7367#53#3#33325267##"&55'6'3#67&'7&''735#35#µ(Z&(   "+qK8 &&&&J( 7  '$!`4  z>.ÿêñ­4:@73533533#3#535#35#35#35#73##5#'66556'67&':! c!!!!!!‹ !=  )z 4  —TT33e ss4. ,9/   2ÿék³ 7#5'6Z  ³”u(_ÿêó³#)/5;73#3#3#"''3267#53635#35&'''67&''4'›:asson$OOO  I  A  ³?  9 %s "  S   ÿé÷Æ73265#"'&5#'6655Ô  ‹ Æcb#,ˆRE4 1$^Gÿê·©7#"''3255##5##5353·  /ˆ\  FŒŒas!!5ÿñÁ¦73533#&'#5'67#C//*!  %*}))6*Z[-"36ÿý¡733#3#53533~%%0Œ¡2Ltt=¼’767#53&''67&'YMc' &p0# ÿéçÐ73#"''32765#'6D• ‰$Ð ™7"u)% ÿéíÍ7'673#"''32765D "    ª#.—" ÿéçÏ73#"''32765#'69¢  — Ï —7 tÿể73#3##5#535#'6'&'4‰=LLOO9w  d  ‰B99B  ÿëåÏ73#"''32765#'6&'O% (!!Ï ‘4n$& # Æ7333267#"&55#'67#536P8   ' +Q  D$+ 3 +'Ãv73#3#=uu˜˜v()³’7''6767&'‰17!$' i$*  "CA-²… 7&''6[_6F J….; ¹}73267#"&5536ª /8 "  .&1}  X! ÿøÂ“!73533#&'#5'67#7'6'&'MED% /4AŽ]  \77@D&$F    Æ›73#3#353#5335#535#'6K_:JJ&Š)JJ  ›!!*)!! ÿëïÄ73##"''32655#ß_ lĬ §ÿêóÄ73##"''3255#V   (Ä­  ªYÿê©Ï73533#7#"''3255'675#[   ¥**2  I  <:`ÿèõŽ #73#3#537#35#35#35#'67&'j…?&'g/!   Áš‰Š›'O0&  #+1  ÿêzÏ7'655367&''6E 0 ;2+ .BhC …,!  oÂ73#3#67'675#535# \$""*4""%Â:< A:w¼ 7#5##535#35#35#35#w@)))¼­ ¹H666777q¼ 7#5##535#35#35#35#q<'''¼­ ¹H666777ÿèóÂ73##"''3255#r,  2¯  ¬ÿéíQ73##"''32655#Ú]   iQ; 6Wÿêïƒ73##"''3255#W˜;   Iƒm  jÿói¾ 7#5##535#35#35#i0000000¾ÅË7%\%\%ÿêð{73##"''3255#ße   f{d  aŠñÐ73533533##5##5#=@==@=· ÿïuÏ 73#'6#53#3#67'5#5376@ G&&))Ï  2&8  FaÿèõÈ #73#3#537#35#35#35#'67&'jƒ44x/:RRRRRR Gȇ‡?>>.      ÿêcÄ73##"''3255# V  "Ä®  « ÿê{Ç '73#735#73#735#3#3#3#'7667#7#11*00F__n>5 9ÇD"D"@  !QñÑ*06<733#3#67'675#5353373#3#5##537#3'6''6&'D), !D1:r40?!-.9 1‚  ° Ñ  ( ' " 2"#3 '6)   fÿéöÇ"7#5##5367#53#3'>&'éD%38 !!  ¡‚pqƒ  ': &   ÿélÅ$733'67##"''3255#53&'767#U     '  ?Å  ^  Z   ÿé„Ï#CGKO733533##5##5#533#735#73#735#3&'73#3#3#3##5'6353535,22(118($!!!!%S Ï  #.." I  ÿè|È#=E73#3#5##5##535#3#73#3#73#3#3#"''#5##5##537##3255Y$/0$ 045Cf**   #*IÈ&88,)  ; 011BQ 0 ( ÿìƒÑ !%+73#53&'3#735#3#735#3#735#35#'6I2v1$hhEE 22'``<<<T   %7   E&8    A5// *W ¸   6       - A4   ÿç{Ï#)/7373#33#53537#5#35#3#3&'''6,&)) n"(L444444   ¾ww/   ÿç‡Ç0D73#7#5'75#35#35#75#3&''67&'767#'3''67&'767#m P!......3    >6   #ÇDJ,, 2            ÿêˆÏ $)157#5##53&'73&''67&''667##5##535#J-"3     )?111¸#%        GM M0  ÿèˆÏ%+173#3#'6553&'#53&'367#'6'6'6L* Y- +) '" .'% !1 3Ï 8.# #,A G'   ! ÿè£Ï .73353353#3#3#"''3255##5##5##5367#$$„ –DE ->À&55&7 S ?JJKKVg PÿèóÏ .73353353#3#3#"''3255##5##5##5367#Z))Ž £KK 2DÀ&55&7 S ?JJKKVg dÿèóÏ -73353353#3#3#"''3255##5##5##537#k!"€AA +:À&55&7 S ?JJKKVg ÿé‹Ï '.73353353#3#3#"''#5##5##5367#3255r~87   &2XÀ&55&7 R  JKKVg %C> ÿôcÏ 73&'73#67'676'&'  U< #+§ 83 96.03,mÿèóÏ '.73353353#3#3#"''#5##5##5367#3255tx†<<  (6^À&55&7 S  JKKVg %D?rÿéóÏ %+73353353#3#3#"''#5##5##537#3255xt99 '4ZÀ&55&7Q  JKKVg%C=Q òÏ -73353353#3#3#"''3255##5##5##5367#`%$¡MG  /AÄ**0E 1====EV ÿè…Ï '-73353353#3#3#"''#5##5##5367#3255nx55    $/TÀ&55&7 S  JKKVg %E? ÿèzÏ '-73353353#3#3#"''#5##5##5367#3255em//    *JÀ&55&7 S  JKKVg %E? ÿö‚Ò "&7&''6&'3'67##53#=#@!  %N  8W2Ò    l ON !! ÿôxÐ 7&''63##53#=#@ %OOO)Ð -eb`** ÿøzÅ7'67#53&3#7'75#G 6=R CX"&c*"}1 04[ÿéóÇ!7#5##537#53#3'6656&'æL(7…: #"' ¡‚pqƒ': &  )"2ÿèãÂ73#"''325567#È&/  +!«Âx ~[ÿì݆73#"''325567#[‚  i†O V\à¿73#"''325567#\„  l¿U [ƒÿêïÂ73#"''325567#ƒl  V€ † ÿîˆÑ !'-7&''63#3#7'675#535#&'7'6G ) N ))+2=--  UÑ  !C F6JbõÐ 7&''6š#+ ''( 7Ð*..,DvÊ7#"''32654'7##5v  -Ê %t† ÿðòC733#3#535#53vVVgåiVVCpGóÏ 73&''>£.% * Ï4.#% UÿéöÏ %-157&''63&'73#3#53&'#367##5##535#35#Ÿ ) (!' 4++ -š, &0SPPPPPÏ&     9VV!.ÿéñŒ$7367&'#"''325'3'67#w   6%  \O9 5;Œ   7H  U9!-OÿèöÌ 73&''65'3&''65´   -<  $ )ÌY T$79"7RHE @+9R7ÿëó– 73&''65…A<> N–(H$77$.CVÿéñÍ 73#535333&'#˜Y›.K_/" #—#Y#=A ÿèõF 7&''6x"M P! D OF #'' ÿþbÏ767'67'67676'6P &   &)¦8!  /,p  =¾“ 7&''6x"3“"#2 ÿéuÏ#73533#3#3##5#535#535#35#35# +++''++++##+8888¹[&&[=9 ÿélÏ#73533#3#3##5#535#535#35#35# &&&!!&&''!!&0000º\%%\;9l~òÏ 73#'6”V^  Ï  lÿéò˜#'+73'73#3#3#3##5'65#5#35#—  )$$$$*[ -˜   c('m€õÑ 7&''6®! ! $Ñ tÿçò˜(76767'67'67#53&'73#&''6—= $ #5 /A 9 ) EL :   TÿçõÏ7'6653&¦ :'+P;.ShB''xÿèöÌ73&''>® , ÌW S%5;-8m“èÏ 73#'6ŒPZ Ï  ÿôxÅ 7#3#3#535#35#5#x !`==Å.Q.Ñ@.m-m.. ÿêóÂ73267#"&55#'6655³    M¹ $ «H,:7-Q1!ßÒ!'73#"''3267#3#"''3267#536&'iU   pš  š/Ò 1 >3 b '  †{Ï 73353#533<jÏ6*=<)ÿïsr73#67'535#`E%". EKrC*  J€ÿéúÂ73265#"&55#'655Þ  » #­HS+$RRrÿêõÃ73265#"&55#'655Ò  ù ¬a60 '3s“€Ï 73353353#kÄ**1 ÿ 73#3#735#7677'67&' zziiBB 2< „7,     ÿéób73267#"&55#'667±  HbX  K/(%6sáÆ 73#735#73#735#VV..[VV--ÆS-S-sÿé÷|7#'665533267#"&5Ä# J h%*%0v  olôÐ 7&''6ª! &Ð $$'# ÿòl¿73#3##5'67#35#\* 2* (¿ hf+6‘C ÿçïÒ#'>K7#3#'6553&'75##5#35#3353353267#"&5536'33#67'ïC:·X,---?,( $  # ˆ88 ' Ã*C< 3@] %   . .ÿèó,73267#"&55#'665à   Q  ,'  …ÿîõ{7333267##"&5477#•O=  24{P A……óÐ 73#'6 HP Ð |ÿêõÏ73533#3#&''67#535#$''0, % & ) ')$£,,# 6 11 %3,ŒÿêñÁ73#3#"''3267#5335#365#Œe,*   N'9Á+w$&bQoo \òÏ73533#3#3#535#535#\[[RRhåiTT\»ÿéóg733&''67&''667Y r(. :*-< 6& ,g       ÿêqÃ73#"''32765#'655#[  # ÃwN ƒCQ20ECoÿêñÀ7#53#3#"''32765#Œ‚N RW­7c) E t¹73#67'675#Y#-6"¹~ ƒxÿéìÃ73#"''32765#'667#ƒi  (è0,w[L GYlÿçëÃ73#"''32765#'665#|o  .æ*x`KAf ÿê]Ð #)73&'73#3#3#'67#5365#536'&'N4!-²  0$  ÿéðÐ %73&'73##53673#3##5#53'&'¡N, ² BIIVGÿë™Ã73#"''3265#'655#_:   "Ã¥2•@S3 2H@Vÿé˜Ï 73'65''6…2/ ÏkL/ ,B9-%#_ÿö¡Ï7&'367'5#z + Ï ?n  p[ŸÐ767'67'6776'6   "&¡.! 0+ m ÿèá}73#"''32765#'667#ÆN)/.#O}P1 J1;1,ÿéåÃ73#"''32765#'667#'¾   `&'% 7ÃxO „OX MLÿêçÃ73#"''32765#'6Î  »‚1@ DÃwL"  > =*%)bL-1)'WÿéôÏ !7&'''63#"''3267#'667#¿$&!d   (Ï=!= ?($)a H,2)'JÿéôÏ !7&'''63#"''3267#'667#¸!&+%l   ,Ï=#<>)$)`!E,2*&„îÆ73#3#5##5367#35#35#„j.,:'::::Æ ‚ ‚ GP AóÏ 7'67&'3#"''3267#'67#\!/ +j$- +(X‡  < : 1 "Ï %#"&-54  $AëÇ 73#735#3#735#73#735#0žžvv.__99b``88Ç;9;;ÿôë„ 73#735#3#735#73#735#0žžvv.__99b``88„>@>> GóÓ %+17&''63#3##"''3255#535#&'''6‚0: ;7(6 Qe)]]  UU)]*#"(O& )Ó       "      2óÒ $*07&''63#3##"''3255#535#&'''6€37 89)4 I e)]] UU)]*#"(O%(Ò    (  [ÿêêÏ 73#5#533533Ö{)*š°¢ÄÄ&ÿéÛ{ 73#5#533533Ç¡<RÏ 7&'&''6- 0Ï    VAóÆ73#3##"''3255#535#a‡4?? JJ?Æ""  "AñÏ$*7373#'67#3&''6657'6''65‡Œ*&/u: 9@ -!F ^ ¸ 6*'+     ÿèvÎ7&'#5'67#53&'736e  -=%   x  ho 5  }ÿéí 7#5##535#35#íHHHHHÂÙÙ[H¢GsÿêõÍ 7'6'6'6Ñ ::! ; 9()L JÍ *" ' 3"# ÿè€Î 7&'#5'67#53&'736o  1 D%  x  ip 5 9ÿê¹Ï 7367&'#5'67#53&'p %    3$I% Ï   ir 6 ZÿíôÐ'+73#"''3265#'6#3267#"&5535#Z  N G0% 0,Ð m'R J1 8%eÿêÐÏ 73&'#e3$#&ÏL! #‚™ÿêëÏ 73&'#™$ÏO  }uÿíóÐ&*73#"''3265#'63267#"&553'#3‘M  @ &' <Ð m'T s3  I8' ÿê|Ï,73673#&''67#3#3#3#"''3265#7#*,. ! #::j;8  ; ¹   +2 %Kÿô³Ï 73533#3#535#3533#7'75#X  &a'  %-7,±W# & ÿéqÏ73533#67#"''3255'75#)""#   /)¥**3E  9: ÿéƒÏ7#5'67#53533#&V&-1** g~{)*:.. ™ÿéõÍ 7&'67&'6À2Í>.17 =45<>,/3 915ÿíUË73#'3#B,ËÞÉ¥ÿéZÏ 73'65'3#F,(+ÏrG- *=]ÿéKÏ 73'65'3#7'#%ÏrG- *=]VÿéñÈ *73#535#535##5#3##'3255##5##535##5f||iaai‹1:  '&91ÈQO/  FF7HÿêZ 73'665'3#G +A((!5]iÿéï73#3#"''3255##5##535#i†93  29?  (^^GY—ÿéóÏ73533##"''3255#&'—2  2 ž11ˆ  ƒ SñÊ73##5#535'6Ú DDFF2 ?Ê5XX2WðÄ73#3##"''3255#535#a…8BB DD:Ä3@  =3jÿéõÏ,73'33#3265#"'&'#7&'3#67'675#mB0/  Cm  Z; !( £,,F0#+d>   YB GmÿêòÏ#)733##"''3255#'67673'67&'©// * 7&%- Y  ž3Y  T ,)"! #$! [ÿéõÏ#)733##"''3255#'67673'67&'£44  , ;()0! b ž3Z  U ,)"! %" !%"!GÿèöÏ#)733##"''3255#'67673'67&'›;;  7 F/1:,)mž3Z  V ,)"! %"!&"! ÿêdÏ73367'5#'67#536$ Ï0€ {o4 /g[ÿèôÏ.E733#3'67#73267#"&55'75#'65533265#"&55#'665 ::>/!"  " /5    Ï     C8+ ,3N`> 6   &p!òÐ 73&'73#3#3#3#735#p58‚ggggggAA¹   ;1ÿò°ž 73&'73#3#3##53#=#165vvvvyQŠ    C ?? fÿéõÏ7373267#"&55'65557. -)Ï<• ƒZ6 5N ÿëtÎ "(.7&''63#3#67'75#535#'6'&'< A&&+5+((= 8  Î $C F2pÿêöÏ73533#&'#5'67#7&'~,0. $&V  š55A.(7{t/&1>?    ÿñ|Ï !'-7&''63#3#7'675#535#'6'&'A $F''&/**>7  Ï !; ?1 ÿèyÎ73767'5'67'7)%  Î3 ‡}e< Â>3 .3# zóÒ7&'327#"&''7&'3˜ [V )  5 e] Ò    ÿç⎠&*73#"''3267#3#"''3267#536&'3#`S  gœ  ›( J˜˜Ž)/9 #R $  DÿéâÑ%)73##'3267#3#"''3267#536&'3#jP  nœ  ›.   O¢¢Ñ A&WJ1}& j•ÿéðÏ"(,7#3#"''32765#5373#"''3276'&'3#Ó(E   G* ==¤XH%| F   qÿéÄ#)/73##"''3255##53#"''3255##5&'#&'~~<  |  ! 5 ÄŸ ‹¥´ Ф³*"$&!""%  ÿéçy733#"''3267#7#'667#« 0  3 M$ !0y/C)/38.- zðÌ7#533#"''3267#7#'6J8È   !h 51¼%'ÿèæ  !/73#735#35#35#'33#5#'65#535#73#3#5##53NeeCCCCCC>? %P?«?E3> S; .X+# ><;,*Y„êÐ73533##"''3255#'67#ˆ;;  -W L'kÅ   ÿèëˆ !/73#735#35#35#'33#5#'67#535#73#3#5##53E}}[[[[[[9E"+ !!TE¼DD1DˆK5 )IL#  WW 0!#Lÿèæ© !/73#735#35#35#'33#5#'65#535#73#3#5##53JmmLLLLLL9? %P?«?E3>©Y? $ % 'LZ,$ [[<-+Z˜íÈ7#5##5í²È00 ÿí{¿73#3#"''32765#7# n; >B¿7b&@IgÿêîÀ73#3#"''32765#7#g‡PV [!À8d'AKsÿêêu7#53#3#"''32665#‹wI L Sd@ ÿùvm 73#67'75#\!-8)&mE I-ÿòäÌ736732667#"&5-K? ER&0 ;4ÌW Q#) •óÏ736732765#"&5• % #ÏK?  =ÿñç†736732667#"&5=J&2L(- 44†8 -  íÑ 73#5##53&' [°h Ñ// `ÿîðŽ73673267#"&5`7- 3;* ,*Ž9  6  Gÿêìz73##"''3255#G¥F  Kzc  _<ÿîò‰7''6767&'À HG /#4?Q)1 2NX  :ÿñí”73533#3#535#I?DDQ³N?b22KKz|Ì73673267#"&5" ) #Ì    ÿêwt7367&''66''6;  "  t  !/+ Xÿèå7#53#"''32765##'   ?nY;†Kÿöðƒ 73#3#535#X?H¥I<ƒggHÿïï£ #73#'6333267##"&5477#xjw  sL  !';P£  $8   ,[Ç 767'533.+{`  º:UÿéóÇ"7#5##5367#53#3'>&'æR,9‹> &* !  ¡‚pqƒ  '-$/   ÿê†p#735367&'#"''32655'67#-      W   / / ;ÿëì+73673267#"&5;L/F8,9B9)    ÿøå¹ 73#5##533Ñ££¹À Á¤ ÿêö$73733#3&''67&''67#67:‘ƒ"( 0((<1!,6I! "   &6)ÿéôY#73733#3&''67&''67#67#:’‚ !! .'+:.'3…^O     1 QÿêòÏ$)734733#3&'''67&''667#67gZ[S      #2  ­"#2     :+ AE5" ÿégÏ 736753#5' Ä––æ=  ÿéwÏ!73533533#3##5#'67#535#5#? ////BSS2! )BBBBEÿéòÏ!73533533#3##5#'67#535#5#\,!!%%,5 ,"#],¡....?SS3 (????fÿéõÏ!73533533#3##5#'67#535#5#v !. #M ¢----?QQ1!&????j¼ 7##55#'#33535#jDD¼£¸H66666666n¼ 7#5##535#35#35#35#n4"""¼­ ¹H666777\ÿéóÐ$:@F73&533#3265#"'&'#7&'&'33325265##"'"&57&'''6mD''   EkH    &  /  ¢.F0.c:  ? J I‹ÿóóÂ73#3#3#535#535#’Z# *h* #ÂKKKKCÿéŽÐ#7#"''32655'67&''67&'76~      Ð :;!'   RÿêœÏ#7#"''32655'67&''67&'76Œ       Ï %6,-"# (    ÿöYÏ7&'367'5#1 / Ï ?r  p”ìÂ73#3#3#535#535#–T "X#!Â:99:J‘Ï$7#"''32654''67&''67&'76       Ï  2     xóÑ$87#"''32654''67&''67&'7633#3#3#535#535#Z  $  €722=Ž>116Ñ        ÿèñ~#)/5;73#3#3#"''3267#5363535'67&''&'7&'Ze³³« «+|||– „  B ?~5 &]?      OÿéðÐ  &733#5##53'&'7'63'665&'›3Q2% q 5R )!#ÐFm[\n:  F)> #(eÿçôÏ "(733#5##537'6'&'3'>&'¥/H-3 L  2  ÏEm[\n8  O5   EÿéóÏ 7M73#53635#35#73#3#3267#"&55'67#'7367#3673267#"&5_!G""""=X   #. +M   Ï ZZ 3:A%W  ,#!&>8/&_    'ÿìèK73673267#"'&5'LL B_:<FE K ÿílÁ7#67&'7&''53535i>  ***ÁsF    Ê0]ÿéóÇ +7367#533#3#3#&''67#535#'6eSK` ˆW2=9) )6 88< › #"!  ÿé_Ñ 7#5'673#:  Ñ­„ 4ž ZÂ73#3#67'675#535#K  (Â:= C:†ÿèóÇ ,7367#533#3#3#&''67#535#'6Š<5Jh>",% $ '),œ   $ ÿèSÆ7#"''32654'7##5SÆ: =ÍÞXÿéôÈ73#735##5##53'>&'tkkFF`T2L  %ÈBA\JK] "5PbíÏ 73#7&'''6'6’;  R c (O QÏ>3   #  ^RÏ 7&'&''6,  5 Ï      ÿéðf#73#3##"''3255#535#535'2× '.SSdd  iiUU(/]f     wÿêöÏ 73#7&'''6'66´- 4 J0( &-ωj"*+"0 &. (-*SÿíŠÂ 7&'&''6n       -  ) .*) _yÏ767'5'753w5 #»(  3|`ëÄ73#"''3267#'67#l   #% !!ÄA#0:-{ òÏ 73#7&'''6'6°-  6MN GÏ~j , "DK„Í 7&'&''6e  ! Í  (  + %" !‚ÿéòÍ (7'6'&'3#3#33#"&''6535#× .  `'##    &Í  907 $I nWÿéÎ7'6#5'6w    Î & ‚h ÿìdÏ"(.7''67'67676767&'&'4'''6M      k !/(8! 3   6ÿèôÈ15;AGM73'657#3#3#535#35##37#3267#"&5535'67&'7&''&'K^Bc(  Ž h C  L ÈK2 *J<š/M!/‰M/ ‚--“   ]ÿêòÓ/5767'67&''667&'3533##"''3255#&'· -D   1  >b b(  Ó   +   HE  A  EðÐ.CI73'67#&'&''6'3353#5#'67#535#3533##"''3255#&'¤>]R3 !m :/K^  ^ Ð$    &‡2&     ÿéâÐ 1#53673#=#767&''67''67&'763, €›R    #   È Èˆ    5¿® 73#"''3267#'67#'67#'6^X   0*$  ® Z@@* %8, " 4Ï¢ 73#3#3267#"&55#'667#Gmm ˆ%   "¢0 3  5Ç©73533#&'#5'67#<9::$!-‰  @T/+5Ë«!73533533#3##5#'67#535#5#:!$!!$$&$&!Y$#66" ####ÿéêÏ%73533#3#3#"''3267##5#535#535#YXXPP`  K[[KKY²: #WW ÿézÎ&73533#3#3#"''3255##5#535#535#%(($$3    ((!!%±: %WWyÿèíÏ%735#53533#3#3#"''3267##5#535#€%%%..**4 !,,%€<)VV~ îÏ%735#53533#3#3#"''3267##5#535#‚$((,,))5   !(($.FF ÿçöÊ (73#735#35#3#3#33#"&''675#TT.... k"U60M6  5Ê\6:7 ) < ÿçöÊ (73#735#35#3#3#33#"&''675#TT.... p'U60M6  5Ê\6:7 ) < ÿçöÊ (73#735#35#3#3#33#"&''6735#^^8888"x+""N60N7  :Ê\6:7"(?;À¬%73533#3#3#"''3267##5#535#535#=3;;33<   (55--3œ&336Ȭ73#&'#5'67#535'6² 44" # &.:.;¬ 4C 6Ê«73533#3#535#35#6@@@/p-@&IIŽFFP!2̯"(73&''67&''667#&'&'a@  !( $   3  / -¯     <    8wÆ­ 7&'''6ž +­  5 ËŠ73&'73#3#"''3267#'67#8C 9VO  ? " '*q  + & 55ʬ 73&'73#3#3#3#735#5A?• ||||}}WWš    3=HÉ®373#67&'#"''32655'67''67''67#?„;       # %  2®           4àÈ73#735# ÀÀ››È”vÿêò/ !7&'7&''33265#"&5''6‚  a  z ( 2&/   &  +  ÿéõÀ73#32767#"&55#'655# \/@K<À¨  ­/[: 8Q/$;×Ð $*73673#735#'673&''67'67$?^³‹‹&  =    ½ ‚^3      ÿêïÃ673#67&'#"''32654''667&''67&''67#Úe  % 0/   ,> >'4 4)!$ 6%[à  :!%="! 1 , %' ! ÿêôÃC73#67&'#"''32654''67&'''67&'767&''67#×` % ))  0F J4  . 7([à ;%@"" 14        g òÃ373#67&'#"''32654''67''67&''67#€j0     # )"  !$à  !!  jÿéöÃ473#67&'#"''32654''674''67&''67#wt5     %  *à  $   !'  ÿêrÃ573#67&'#"''32655'67&''67&''67#^"      !  &à    '!& ÿêcÂ573#67&'#"''32655'67&''67&''67#M            '%   ÿéÝ '.73#5##53635#3&''67&''667#k m•8 /••4A  "  /6 Œ Œ |^      xóÑ 73#5##53&''67&'„a³c2 /i*$#)Ñ ('!   ,UÑÐ 73#53635#35#_ j¥$ ~~~~Ð bb 5>,IÑÐ 73#53635#35#_ j¥$ ~~~~Ð kk:E ÿêñT7'66733327667##"&5X",*8  $  T'/'#I   '  ÿëx£7767#"''3265'67&''67&''67&'767&''6`    % *" "   )£  (         jÿç÷¢ $(73#3267#"&55#'67#53635#35#¡6   ) #BBBB¢W2 59.W -5eÿè÷Ð"&*73#3267#"&55#'667#53635#35#ž;   HHHHÐ jE  I-' !$j :HA “Ð37'667#"''3265'67&5'67''67&'77&'| !     Ð    -       ‰÷Ï#'73#3267#"&55#'67#5335#35#²)   ))))Ï ]8 ;=1]';)ÿéØE 7#5##535#35#ØŠŠŠŠŠE\ \!2ÿíŠÏ&,27#"''3255&'75##5#67'#53537'6'&'‰     0   M  ‹†  ) >ŠŠF--žDD<  Eÿì§Î&,27#"''3255&'75##5#67'#53537'6'&'§    * 8  Ї  *!=‹‹U! / ,žDD:   e¼ 7#5##535#35#e,,,,,¼±¹H67[`êË73673267#"&55'7€/$(.  &#%Ë%  R_Î 7&'&''65  L$'Î      gÿéóÏ73533533##5##5#35#35#gAA%AAAA¥****©©99ƒ8W‡ðÐ 73#5##53&'Ÿ Bq>Ð 22 Rÿéó… 7'667&'‚D ) 0 …?@99a(+j ÿíòn $(73#5'673'36735#33535#3353#ª,¬  +[c Qd<DHL767#533'67##"''3255'67#53'#"''3255##5'67&'3#735#š  Mk.   )/^  S*  & 99³     Ee Piy   -vôÔ $*CIO7&'7'673#&''67&''667#'33#"''3255##5##53&'''6(  ^ 8<     #e0 0  %  Ô        , ../>     ÿèïv#)/5;73#3#3#"''3267#5363535'67&''&'7&'[c±±©  ª,{{{– „  A> v4 $ \=        ÿé”Ï*0767&''67&'3533#&'#5'67#7&'%  722  -\ È   [!!EN)-3   ÿûœÐ  &7&''63#'767'&'&'Y0 OO`{O $    Ð %Y ,*,!O!! ÿê¡Ï#'73533533#3#535#35##5##535#35#&&–$1&&LNNNNN±!!!!Drr)A ÿé™Ç$(,73#3#"''3265#'67#'67#'67#735#35##kAW / ), &  CCCCÇ^ N18"+* 7:ÿí”Ç&*7#"''3255#&''67##5365#53#'35#”    $:0l)0FFlg  P  #m GG %%ÿéqÐ*0767&''67&'#5'67#53533#&7&'   ;  '##  È     ‘?E$!! c  XÿèôÍ8<@E73#&''67&''667#'367#533#7#5'35#35#35#675#¿(      m((>   Í#>&! 4 &   w}IP ÿññÆ 73#3#735#3#536'&'Íͨ¨€€l GâƒP  ÆT.G  ÿë|Á 73#3#735#7'676'&'nn__992 .8! '  ÁJ&@ ÿîïƒ 73#3#735#3673#53&'ÐЪª‚‚ < 9Þ:ƒ>0    ÿëdÁ 73#3#735#7'676'&' WWLL((##- ÁI'A  kSâÏ 73#53635#35#– ?w"QQQQÏcc 5?`ÿëñM73673267#"&55'7Œ+"%+ #!(,M  VÿéõÐ"',7333#&''67#535367#'65##67#Š5 . ;, 1 3- 6 = ) V"#Ð C%4)"C j11@ÿèòÏ.E733#3'7#73267#"&55'75#'665533265#"&55#'665Ž>>K  ;)+ ) 6?   '  Ï     C8* (M`>  6!  &/ÿçðÏ.I733#3'67#'665533267#"&55'75332767#"'&55#'655n))6 H #(    #.Ï  D9, (O!    9-  !ªñË 7'6'6'6Ü   & %Ë ! % 'KÿèòÏ0G733#3'67#732765#"&55'75#'665533265#"&55#'667”::G 6&(& 3;   $  Ï     C7+ )M`> 6   ' ÿêóÎ1J733#3'67#'66553326565#"&55'7533267#"&55#'667B--0 B #)    *2  5'   Î  C7+ )M%  :< .!  &ŽíÉ73533533##5#5#5#Ž # G A###¢''''tt(((9((ÿéðœ.G733#3'67#'65533267#"&55'7533267#"&55#'6655jffq  IQD 1 9''*? 8 œ    3)! !':    3!   ÿéõÏ2L733#3'67#7327267##"&55'75#'665533267#"&55#'6675q\\h R@B  2 47= OA  0 Ï   C7+ 'Ni2 *`ÿèõÏ/I733#3'67#73267#"&55'75#'66553#'665533267#"&5 === +!    ) <  Ï   B6+ 'Mu;   ÿétÎ ,27'2'6'&'&'3533##"''3255#&'f %6+*   9   9 Î    8E  B  oÿéóÏ/F733#3'67#'665533267#"&55'753#'66533265#"&5¢..8 G !+     7 Ï D8, (O"    K%';  ÿê~Î.>733#3'67#'65533267#"&55'753#'66537'9..1 ? 2       6  Î  D8, ,4O"   I')< uÿèöÏ.E733#3'67#'65533267#"&55'753#'66533265#"&5§,,5 C 2    6 Ï E9+ ,5O"    H'*> ÿéöÑ+1S7&'67327#"''67&''7&'3&'67327#"''67&''7&'7Ë3<      99   !Ñ      J         –ÿêðÆ73##53#3#"''32765#ŸKK Z1 6   9Æ=*I)ÿé–ÏQUY]733#3'67#732767#"'"&55'75#673'73#3#3#3##5''65535#5#35#C77@ 1#% ! ##"N +Ï       H    E -7QqÿéîÅ!7#53#3#"''3267##5#7;5#35#uVÁVd  M`QAAZE?²I 5 aaE#V  ÿé‚Ð !73#53&'#5##535#33535#35#L.u3A;&;&ÐCžž>+++h+++ÿêõÐ7'67#'673&Á& : /  8,"8d' #@0: ÿéÐ !73#53&'#5##535#33535#35#P6ƒ8GD+D+ÐCžž>+++h+++‰ÿéóÍ7''6767&'× ") c4=  H€{A%gÿéöÎ73533#3#&''67#535#}'0095 /(, 0 ,/'£++#6!10 $3+lÿèíÐ 73#'3'6573#ÙT*Ðçç„>& #4wÇjÞÐ 7&'67&'6'&'6C –/Ð   JÿèôÈ'7#3#3#3#67&'#67'5#535èpffff{K   > ( È    GI  VlMÿóõÍ  &7&''63#3673#7&'&'›$* ''' 6ffX -œE    Í"'%#+c,+/!g !cÿéôÐ$*073&''67&''667#"'6'6'6ŠK  $' - =" 1 41 *> D7 .U YÐ   & .  ( :ÿé€Ð 7#5'673#e  Ð ¢{ 5–„aöÐ73&''67&''667#£;       ,Ð      ’ÿéç\7#"''3255##535#35#ç   00000\[  's -SÿéóÏ(73533#3#3#33#"&''675#535#m222=@77#,!  ;>2³$!0*5a$E[óÐ73&''67&''667#{Q+ ."+ ) !CÐ    Bÿêì_ 73533##"''3255#&'''6T=??  =oHM7  2  W„Î(,<733#3'67#73267#"&55'65535#'665367'5?((0 !   $ 3  Î     " ,   |WóÎ*.D733#3'67#73267#"&55'65535##'66533265#"&5¬**1 #     !1 3 Î     ! # .     ÿçîV 73#735#35#35#'67&',««„„„„„„"!''^''&&VP9   ÿéë›!73673#'67#67&'7&''6Gy ,*=n*2 A@,x@  1 6  % $ÿìò˜&7732667#"&55'75'75'67×bsu &8(PSGJ>[M ).h        ÿëð–!'-7&'3673267#"&5'67''67&'w  +$+7 %  1$ $$­  – L @ N"   M'! "#$ ÿéî73#3#5##5'67#35#Û† Œ{ 2?8{{cN #f1YÿéîË %17&'7'6'&'&''67&'763#5##533ž  O g  a    $ddË #  ;   x {]jÿéíË %17&'7'6'&'&''67&'763#5##533¨  C Y  T     UUË# <   x {^PÿçòÏ873&'73673#3#3#3267#"&55#'67#5367#537#`!  B8:J5  2,+/)+6¯    A  E9(#. ÿçòÐ973673#3#3#3267#"&55#'67#5367#5347#53&'P *  >`WXiN $ V FW[LNY7 Ð   ?  C@!4   ZÿèóÐ973&'73673#3#3#3267#"&55#'67#5367#5365#l  1.08"   4/ *.-/6®    A E8($,   \ïÎ*73533#&'#5'67#73##5#'66556)++  "Ì #/X, 7¸  15&22" ÿçîY"73533#&''275#735#335&'7#6'PPPj30P<>R>>{(( &   &  +Ñe7'67#53#3#735#G ""¢kq‡cc?   $  ÿéõ273533#&'#5'67#b_J7 ;&%: .'L   $# jîÐ#73533#3#3#5##535#535#35#335ceeQQe·dRRc$??S>È  ""   ÿéó&73533#&'#5'67#cfL2 :$$9 ('I    ÿçî8"73533#&''275#735#335&'7#6*NN Pj2/N>>P=82*   # <âs7335#53353353#353#FC0/CHÆT    HßÇ73#"''3267#'667#'6 ¿  D00 ++P$ ÇZ!D02  +& SIæÆ73#"''3267#'67#'6_‡  % C <9ÆY AL? EÿíòR"7&'332765#"&57&'''6¡  !a  nR ? A !& NÿéõÎ=73533#3673#33##"''3255#53567#'67#5367#535#[*++*<;??   MM4  + N7*¶     @ÿéô–7&'36533#&''67#º `BJC5 2G E?–  !=<7<CÿèôÏ!%73533#3#&'#5'67#535#35#335TACC81-$*/,9A%%9$·H !KP)#HM"""EÿéôÄ %*.733##3#5##5'67#5367#537#3353535#a}RdL ,.%8248DLLÄ,+ Y ?(  - ~)mÿéôÏ/5;7'6&'#"''3255'67'67676767''67&'Ë #* &8      (@ [Ï O A  ;! %3! aÿíóÅ/5;73#"''3267#'67#'6&'33267#"&57&'''6nt   9 31;    V  [ ÅZ CM??@ D  & sÿëè¼ #53#=#'#35#'35‡u0/ÑÑgCCCCUDDDDD 8`Î 7#5'673#:  !!ÎhH (_d>òÏ73#&''67&''667#‰U% %# 4Ï #      ÿéóP767&''676''6}  LN 96 P  #%    MiÎ 7#5'673#<  !)Î\? $RqRõÏ73#&''67'767#'6•I %  / Ï       hÿèô‡ 73#&''67&''667#ŽO  !  3‡    # ' ÿédŠ 7#5'673#@  *Š rV pÿêõÏ,273533#3'33#67327#"''67&'#535#7&'433E:9      —=4¼  ¹==#$"-!!  %9$Mÿê¦Ï7&'3#&''67&'767#‚S   %  4Ï%3 )  ˆÿîõÐ #73#'6333265##"&5477#©?E E6  -+Ð$P  Aÿðô|#'733#5'6367#35#33535#3353#XP5° 'IE<EÿéëÏ(73#5##535335#767&''67&'y`–Jr&–" ¤¢¢D˜llg   XæÏ 733#3#5335#3#535#ˆJJC‡0__JJ66Ï ……r_6ÿñòR73533#3#535#\\\häh\5WÿïóR73533#3#535#f555DœD53WÿïóÏ #3767'53373673267#"&53533#3#535#y #  C555DœD5“,  t(<,     5ÿñòÏ!173267#"&5536'33#7'3533#3#535#Þ %+ ($ŸEE;(# []]iäg[à f/'. &fÿïóÏ !1767'53373673267#"&53533#3#535#…     ;.//=<.“+  t(<,    5€ÿî÷Æ73#5#3267#"&5535#€g= " -QSÆp W $-  q=rÿî÷Æ73#5#3267#"&5535#rsD *  1"X_Æp W -  q= ÿèõÏ!%73533#3#&'#5'67#535#35#335dddQD%9 ;%#::"BQd'==Q=¸M'-OP,%MR'''hÿîöÏ-7#"''3265#532667#"'&&55'753753ê   -# ¤T%/ _Xe " bC;E=fÿêòÎ #73#'6333267##"&5477#‹Zc ^B $6?Î &Q  CpÿêóÏ7327#"&''7&'37&'îG   ( ##  “ ;8#!=K )F@  PõÏ73533#&'#5'67#dcO"4 :%#; 7O´(5ML2'ÿñîG 73#3#535#$¹TeÜcQG00"IêÅ73#3267#"&5535#"¬’ 6E L@’˜ÅB 5rKíÄ73#3267#"&5535#rlU ' $4UXÄA 5_ÿìõ@!733267#"&57&'7&'''6‹  (  ;  ]  @;  <  $ `ÿìóÏ!173533#3#535#&'&'''6733267#"&5k5551w25= >  R     ©&&''@ ! ) !6  2Ü‘73#"''3267#'67#'6¿  =^ V Z‘C)> 0 ÿêóÏ/73533#3#535##5##53267#"&55#'665^^^R¶P^Ð¥  % /((¼94!#6)=  /  &+ïÏ173533#3#535##5##5#'665533267#"&5]__Q´O]ËŸ€;) &b   Á  ,)*-  "   KÿèõÑ #'7&''63#3#3#5##535#535#35#˜#, (' & 5K<<1Q3<<QQÑ"&%!WWu$ ÿèõÑ #'7&''63#3#3#5##535#535#35#|4: :6+8 Ng'UUCtEUU,ttÑ !&$!WWu$ ÿèõÑ #'7&''63533#3#535##5##535#|4: :6+8 N***X¾S*ƒtttÑ !&$!?VV5# ÿè‚Ð #'7&''63#3#3#5##535#535#35#G  * A))$6%))66Ð  !WWu$ÿéïÆ'733'67##"''3255#53&'767#„` % .< HÆ]  X  ÿèoÐ #'7&''63#3#3#5##535#535#35#;  !7!!+!!++Ð  !WWu%yÿêóÐ%)-157&'3533#3#"''3255##5##535#35#33535#335Ö  O333. .3/J/Ð !!ˆ  225Ÿ@GSîÑ%)-157'3533#3#"''3255##5##535#35#33535#335à fCDD;  ()(Ð  !!ˆ  336Ÿ@G ÿé‚Ï+17=CI733533#3#"''3255##5#67'#535#537'6'&'&'7'6&'0.-  .2#C  S    Q Ï222%g  SggA$&%*   3   3 ÿéòÏ/5;AG733533#3#"''3255#&'#5'67##535#537'6'&'&'7'6^QhV B! 'AViQh ‡    ‡  Ï111&f  PAG$n&+    2  ÿéßB 73353353#5#BB¬6+77,Nÿçèe7#5##53'665&'Ñ{B+; 8&+'&!-eVEHY   TÿêóÏ'736733#'667#7&'33267#"&5g&IJ$X     –:E@5G  Kh !) ÿè÷Ì$736533#'67#7&'33265#"&5£**( 9   “ m,(`<  Dk & Jÿíð–&736533#'67#7&'33267#"&5T2UW< 40l   nK! =; @E [ÿêõ‹%7&'36733#'67#33267#"&5Ñ[-GJ / ) *E  ‹  K"? F  ÿép#7#"''32655'67&''67&'76`        ' !      uÿéõÏ $73533#'67#7&'33267#"&5":;2 *!R    •::k.(_C   Of  ÿéòÏ'736533#'67#7&'33267#"&5Vnp00 TU•   ' ”!!9G(]K  Rd %   ÿê€Ï $*73#53&'3##"''3255#735#'67&'H-o,^&  %88  P  Ï  =H?  :$B   mLóÐ$7&'36533#'67#332767#"&5Ò  W.BD0 $-E   Ð #4) * qÿèìI 73353#5#533¥ h!IE2N C2Fÿé¤Ï $*73#53&'3##"''3255#735#&'''6}HA ) /  Ï  ;GG  C#;   JÿèôÏ&73733#'667#7&'33267#"&5S6LN4i  –9;E@6F  Oc  †lñÏ%736533#3267#"&55#'67#7&'†#5! "  J °    !" . iŠÓ#)73#53'3##"''3255#735#&'''6O4u+`) '??; ;  Ó"    aŠÓ $*73#53&'3##"''3255#735#&'''6O3u-`) '??; ;  Ó #"    ÿéâo!'+73#"''3267#3#"''3267#536&'3#`R  gœ   œ) Oo" %.E"  5HÿìõÏ #7'67&3673267#"&5ž+ 9%( %S%%- !  ,#­,+0 -0$  \ÿìôÏ "7'67&3673267#"&5¦& . $ !P% %-   *!­)&2 +,$   ÿèóÌ733533533##5##5#'655#53021##12)%##ÊRNNTT||tt E,(; )ÿéÑ›7'67'67'676767676¼ GM _4>%! "+0,%`/8  %  3 ÿéöŒ"7333"'&''#&#"'663267#53&'€R0JJ.=$ F+¢]Œ +  " ÿéòÅ!735#533##'67#53655#75#35#W@­`9 /8>W°EGE‹'::4!' '':' ÿëó¿735#533##'67#5367#75#35#€"V0 "M…(::3)((:(GÿéôÁ!735#533##'67#53655#75#35#G=0P. & $*=†575†(;;/! ((<( Eÿê„Ï 7#5'6r  Ï©„ 0ÿèò‹!733##'67#5367#5365#33535)© aA 01;X[CW?AF‹**"  * ÿèò‚!733##'67#5367#5365#33535)© a? -0;X[CW?AF‚''   ( ‹ÿêô¿733##'67#535#535#33535™P *$ &¿::0&))));))]ÿê–Ï 7#5'6„  Ϫƒ 0ÿéšÌ"(767327#"''67&''7&537&'‘H     #%%!  “ %).& !&%=  ÿéõÏ#)767327#"&''67&''7&537&'ãj" +,: >'MM'  !! ();'$  #"<   ÿèúÐ"(73&533#67327#"&''67&'#7&' RQ    !€¿ ª7&+ 7 %&80?8 ÿéöÐ"(73&'33#67327#"''67&'#7&'…IG     †½  ¨(=* 8! " ) N:  ÿꔆ73533533##5#'67#) !Y----BBA6¤ÿé÷Ð"(767327#"''67&''7&537&'ò&       ›!. ""&2$" 5 tÿèóÏ"(73767327#"&''67&''7&7&'™?@    # &'-Ï# !  *$!5(*  ÿýxÏ733#3#5##5335#311*8"88Ï&'ssR? ÿô„Ï )7&''6#3267#"&553#"''326M  ,1+ $ R   Ï   !$9\ q5ÿéŽÈ7#"''3255##53#3#735#Ž  UAA77ÈÅ  ­Ìß,W5ÿètÆ 73#735#35#35#'67&'UU------ = Æ£sMM6   ÿõ’Ï!%+173533533#3#3#5#535#35#35#35#&'''65eOc $555555<   ¼V;MV44)   ÿéÍ;76767&''33#3#&''67#535#'67&'767#^    :5=01# +,-  $Æ  3+ + "!!"    ÿé•Ð #+/7&''6'66553&'73'#335#5##535#P   0 ,%BBBB111Ð u." !@ J:-D D' ÿéòÏ/37;?CI73#67327#"''67&'#7#5'75#53&'35#35#75#'3#735#7&'«B@      #,+a555555^^99œ  Ï, "+  ;V _"*q6;ž9  ÿé“É%)15973#67'7&''6767&'7''63##5##535#35#~~  N  S‡‡{KKKKKÉ!   ) aa$5 ÿê‹Ç #'+73#3#535#35#&'7'6#5##535#35#t"'~% 0  h =====ÇEEEE   Fff$6ÿë‘Ï !%)/573#5##53&'3#3#535#35#33535#335'67&'R6Z6L.m.,H,;  8 Ï +,1\\6:+   ÿé˜Ï.=CI733#3'67#73265#"&55'75#'6553375367'677'6'&'B@@?,!   +  0:< IÏ     D8- ,5NUDA= A  ÿé–È #'+/73#735#'3#735#3#3##5#535#735#33535#335Z;;Z;; u088<<22O2È11/V((34ÿé˜Ï/3GK733#3'7#7326567#"&55'75#'65533#3#7'7&'7767#735#B@@?  +   +hh_ +5 B;;Ï   I:0 /7SL +    ÿémÏ!%)7373#3#"''3255##5'67#35#35# .39   '  $''''°   5q %CBsÿèöÏ &*.473'33#673267#"''67&'#7&'3#735#'6tB,+   Ci  V77+%(©&&A#5!):+477 EC#;   ÿé‘Ê #BFJN73#5'675#'3#5'675#&''&'3'73#3#3#3##5'65#5#35#U7&?8'Q   2   $$($$##&Z 9"""""ÊR  R      6 ^ÿèòÂ$73##"''3255#'67#53535#&'Ë''  n!!%'mm8  ÂgF B8( -(ggT ÿéÄ!'73##"''3255#'6655#53535#&'ˆ @ @@ Ä`Q M <" 1 ``M  RÿèðÅ$73##"''3255#'67#5355#7&'Ý  EXDÅdJ  E;+ /,ddQQB ÿéÄ%73533##"''3255#'65#75#7&' Z  3]3 accN J;# =PPB¶ÿé÷Ê 7'6'6'6à  ! Ê * (% / Qÿç»Å &73##"''3255#'655#53535#&'° (((  ÅaS O =#!>aaN nÿéóÅ$73##"''3255#'67#53535#&'à 666 ÅbN J:. 0-bbO   ÿéià &73##"''3255#'655#53535#&']     Ã_S O <"!<__N I|Ð#'73&'73#3#3#3#5'65#5#35- \ )Ð H yIêÐ#'73&'73#3#3#3#5'65#5#35› \ *Ð H ÿóyÆ73#53#3265#"&55#7#65&K]e   %!Ór  x<9#˜†+ ÿésÁ73##5'67#&'b%)I Á ´|"-I4('%7ÿéðG 7'667&; '$> ;% #! !+qÕÇ 73#735#35#+ªª€€€€ÇV43ÿèxv7373&''67&'67#367& /   3Z )     yÿéón733##"''3255#53567#ƒa44  22Gn . + gïÏ7##5#53&'73##''67&'ŽIb_JV›¥77  7/ WÿêñÏ17=7'6&'#"''3255'67'67676767&'&'''6Ñ 1; 5;       )0)!V Ï P ?  : ( 3    ÿïó_73#3#3#535335#Ï]LLhæ**\_33JcòÄ 73##5'67#&'×a"5 A^. -ÄN8 !tò 73##5'67#&'Ö]!?>W–' &Â<2 ÿèÚo$(7#'6553#"''3255##5#;5##;5#t:±   >99>>99>> %7k+o"  våÑ 73#"''3267#'67#'67#'6I‘   3,">5")Ñ6 "  “ìÑ 73#5##53&'a³aÑ --'ÿêÕe $7#"''3255##5##535#35#35#35#Õ  :;;;N::N;;N::ec  """{$8mé¦ %7&'&''332767#"'"&5''6~  W p ' ¦        !ÿïÞ¼ 7#5##535#33535#35#Þ•@@U@•@@U@@¼ÍÍTAAA”@@@ ÿèàÏ 7#5##535335#33535#35#à–UV@@V@–@@V@@¢ºº--J777€777 ÿéãà &*7#"''3255##5#'665535#33535#735ã  AC @@TA–A@TAü+CC*% 1"]<)))e) )) ÿêòÇ'+/487'66553#"''3255#327267##"&=#335#355#9 µ  =  * <;O;Î ¬  )BB&# 0?KD###Y### ÿéáÊ$(,04733#"''3255##5##53&'767#35#35#35#35#*¤A  CDV ƒDDYCCYDDYCCÊŠ  88;¥  UCÿéïÒ&*.267&'3533#3#"''3255##5##535#35#35#35#35#¯ ”eddT  @@Te%@@U@@U@@U@@Ò  !!†  ,,6Ÿ@E"ÿçÜÆ 7#5##5##535#33535#35#Ü????S?’??S??Æ£LL£@---m--- ÿëó" 73#53535#35#35#Úæ##5$$6##"%%%(è©!%)-7&'3533#3#5##5##535#5#'#35#'35Ÿ |]^^N::N]«:::N:N:©   M M $  ÿè•É 73#735##5##53'6656&'%__99SF,  !ÉA@^LM_ 2 !5 É©73#735##5##53'665&'Pbb>>WL-H &!©3,>-->#   VÿæöÈ73#735##5##53'66&'zff@@[M/)0, "ÈAB[JL] 82'  ÿåkÃ73#3'67#&''67#Y*/"7  Ã1M( @F -: ÿè€È73#735##5##53'66&'[[77PB*  ÈA!B^LM_=0&  ÿêŒÑ $*73#53&'3##"''3255#735#'67&'R0x1c)   '>>S  Ñ  >I?  :#B   ÿéæÁ#'7#"''3255##53267#"&553'#3æ  ¤C#  .*kCCÁ½  ¥ÅØu% qI6# ÿéôÐ73533#&''67#&'bab,? @(R Y_dš6(a'+WO3:Rc  =ÿéõÏ73533#&''67#&'NDKG4.D K CQ ˜77[-/LJ18Rd lÿéôÏ736533#&''67#&'t-72 /%.0,;  • U2*FA/-\i ÿçõÏ736533#&''67#&'‡&-* ) % )%:‘""S1&<8,/XfwÿéòÃ7#53#3#3#"''3267#533ª3{3,,.   ^±#$N 7N<lÿéëÃ$7#"''3255##5&''67&'76ë WR   ÿ  ¨ÈÚ&  jÿéôÃ73##5'67#&'v}. 0:VÃ¥|$4E5)'%pÿéîÏ7#5##5##535335#335î!!55!!5!¡tVVt..P===oÿìõÏ&73#5#3267#"&55#5335#53533#3Î  *22;;ˆ_3 9P?S S~ÿòôÆ 73#53#3'35’bvq]NN:2-Ô.SA..qÿèö½73&''67&'#367&'xp"  !     ½U:  "!1LC&18 vÿóòÏ73533#3#535#}-,,4|4-†IImmwÿèðÒ7&'3#"''3255#3#Š 0G  42Ò Å  ­¹JÿéõÏ736533#&''67#&'a5@93 /C D4D  $$\! QJ&(Wb jÿèíÏ#7#"''3255#&''67##53653í  $ $9©¨  ‘  "C¯ÁÿéùÊ!'+7367'273#&'#5##5'67#3&'#35#W#'YY '/vB1 {7I5„'{{] Y .Z2ÿéðÏ73533##5#'655#535'6ˆ J22J? 7;;>Ë<``ssC*&67 WÿéñÌ73533##5#'67#535'6§ * *+' %Ë=]]ooF-):5 ÿêïp73533##5#'67#535'6‚*J11L .& 9;+8p..AA*+tÕÇ 73#735#35#+ªª‚‚‚‚ÇS21\ÿéñÌ73533##5#'67#535'6© (()% %Ë=]]ooG,(;6 ]>ïÍ73533##5#'67#5365'6­"*+ !" )Í "<<<<+  ÿéóÏ73#3##5#535#'6B‘Qddnn5!ÏBbbB# (aÿéòÏ7'673#3##5#535‹  Y088BBŸ"2 AbbA ÿékÏ73#3##5#535#'6(4(( ÏCccC $[ÿéóÎ73#3##5#535#'6€a399FF" Î @bb@ #€ÿéóÏ73#3##5#535#'6žD&,,11 Ï CbbC GÿöÊ7&'37'5#c  * Ê :n  qUÿèòÆ &735#53#535#33##"''3255#53&'eej~~jeP((   ``5  ža07  3OÿéóÊ)7#5##53#3533#3##5#535#'67#536ït: U_ .;;EELLB!,Ê-,..8ÿë§Ð7&'3#&''67&'767#y^     ' =Ð&*  +/’ÿéòÐ73#3##5#535#'6«7""$$  Ð BaaB "Eÿé“Ð 73#53&'3#3##5##535#lN @@@@@Ð >U V8&2ÿçðÑ/PV733#3'67#73267#"&55'75#'6655335'673673##"''3255#7&'‹LLO ;)+ % ") <(=,?5 <   =%Ñ      F;, +Q„  )  kÿéòÏ7'673#3##5#535’  S-44<<  !7 BbbBfÿçóÎ73#&'#5&'75#'6556Þ &2]$  &7Î *7 :I ))4,'+xeÿèöÈ7'6553#&'7#3j $ ) BBdP,%UUdJ [Q>lÿëòË$733#353#3267#"&55#5335#53¢==0   -66Ë[AR/  5RA[T ðÏ73#3##5#535#'6{b4>>JJ" Ï 6JJ6 NðÍ73##5#'6556Ú 0?y*:EÍ %cc3*-1< ÿéïÏ %73&'''67&'#'655667Ð DZ—.-  ()"`2%&Ï):+    3<2.2fO, 'aÿêòÎ"7'655673&''67&'3672*(0W   uQ7 5X6  %9+() ! ÿétÏ%73533#3#'67#53655#7&'7'6%##&(  '*%  R  NN, #P QÿêóÎ 7'655673&''67&'367ƒ8/,6` uR6 5X6  %7,(*#$?ÿêóÎ"7'655673&''67'&&'367r  @64>n ' $  uP8 7V6  %:("#eÿêòÎ 7'655673&''67&'3673*)0W  uN5 4U5  %;)(*!"oÿéóÐ!73&''67&&'#'655667Ý)1W   3 Ð '=* 2V6 9Y7O##’ÿç÷Î$)'655673&''675'&''&5767¡" 8      7\8 )<(  s$"UÿéœÐ733533#3#5#'65c ( È;CC)M<5$ #4 ÿéfÅ 73#735#35#35#'67&'QQ------ 3  Å¡qNN3    ÿègÁ7#5##53'>&'g.!  ÁЉœ'O0&  "+0   ÿìxÀ7#5##53'>&'u5%  À™†‡š&N-'  ").\hÏ73533#67#"''3255'75#&     *&·  __õÏ(733327#"&'5#&''67&'767#53‘+      Ï1       ÿèòo#735#535'673#3##"''3255#hSS(#k6.PPhh  h$   ]ƒÈ 7#3#3#535#35#5#‚&$"%jCC È-k-.ÿéôZ"73#3##"''3255#535#535'2Ö &.WWii ggXXX^Z      †]ñÆ7#53&''67&67#” _  !1µ (    \˜Ñ.73533#3#3#"''3255##5##535#535#'6+00::2  0==  Ñ     ,   ¦`äÏ 73#"''3265'3#Ñ   +ÏX FGJÿî¶Î#73&'7'#"''32765#'667#'6l *    Ê&!7 A! `! K670/+ bóÏ#73#3##"''3255#535#535#'2Ò $+TTgg  llYY&,XÏ      ÿé}a"73#3##"''3255#535#535'2t((..  00**'2a      ‚ÿéóa"73#3##"''3255#535#535'2ê((..  00**'2a      ÿè¡b 73#'3'6673#Ž]-bzz8/)-kÿæ¦U733#"''3267#7#'667#v !  # '$U#3 #$*!ÿéöÑ 73#'63#3327#"&'#>ž¦  ŒÑ $98+0CÿçöÐ 73#'63#3327#"&'#;¡« œœ°œÐ;;"33GGð "7&''6733267#"&57&'v :%   *$   #+  0gÿìñ~73267#"&553#"''3267{ - 7&u  le  }A (ÿèV‰ 7&'&''6.5‰     #  ÿ鈓#'+73533#3#3##5#535#535#35#33535#335211++4444++2*A*‡  C  C ( ' ÿìóŠ7#3267#"&553#"''326Ò/  " U   xq   ‰Hmÿïõ‰7#"''3267#3267#"&55ß   I ,  6.‰B#,k   ‚uÿïñÃ7#"''3267#3267#"&55ß   B $ )#Ã_#I¥ %! ¾ MðË'+7367&'##'325567#3'67#3#- *8 {T: 1>››Ë  +& , (=.ÿëíA7#"''3267#3267#"&55Ì   u2D N>A! * ?Dÿëä87#3267#"&553#"''325ŸG +4  ?8o   ($7 ÿçë  #733#3#5335#35#35#'67&'oOOV±H4‰‰‰‰‰‰% 5+b#( )%   jj+,"    ÿêê¢#'+73&'73#3#3#3##5'65#5#35#<6RPFFFFTªVAAAAA¢   h #** ÿê¡Î"8P73533##5'67#7'6'&'&'3'67#&''635#53533#3##5#'::: *q L  U H% 0  B"" %£++.&  <  ;   ,16  ((Iÿéð‰7#533#"''3267#7#'66vw +  . .w3I!03A72ÿéR‘ 7#5'6?  !‘z\ &hÿèóÃ733#"''32767#7#'667#z` %  & #ÃDdJD`KG[3ë«,7#"''3267#5336767#"&55'753753×   +' $" F0'™?! B= ; <(# '"H Ü«7#"''3255##5##5353Ü   ,,@ŒO  8mmVh\ÿíóÊ 73673265267##"&55'67€&$/  *   ÊU% / N 0 I ÿìôÍ %73#5'675#53736732667#"&5T"& CC;" #* Íá7D:Ka  9 ç¯ !73&'73#3267#"&55#'667;DB›x /•  D  7$  *3 ë±  ,87&''63#3#735#73#735#&''67&''6Œ%. 0'"* > PPBB=BBM  ^  ±   + +     ÿöñ¸ 7#53#3#.⯤¸¥œ 4äÂ#'-373533#3#535#735#3353#735#35#35#'67&'C>>>O°M>,,@,}iiiiii P±# 2O7    ÿðîÊ7#3#5ãµÀÕʸÚ/ ÙÂ+/377&'73#'65535#53#"''3255##5##575##5##5#† ?ˆu\  J§  3- `f(^H !!!!7ê«(,73533533##5##5#3673#3#5'67#35#:(5((5(<bl^u 04QQš  ;% :ÿéñÏ 73533##5#fhhfNN……bÿòîÇ7#3#5çqxŒÇ¯Õÿêí 73#5#533ÙÆ²Ž¤—„.ÐÄ7367&'##'325'3'67#{  G: '&ÄD #(9  j25;ÿéát 73#5#533ͯ›sŠ o<ÿé£Ð73#&'#5'67#535'6˜ !!!  &&*Ð * lf!$0%ÿêèÏ7''6767&'®# QQ 6 ),@Mh6? Q{Š9'!ÿçòÈ!%73#67&'7&''67#53535#35#35#É)†A3  FUE*iiiiiiÈ„    „-FE ÿèíÐ7#'66553&'7í¶ _ ²J?. -V 9ÿêïž73533#&''67#@GPH: 7A DEl22CF9$'78ÿèñ¢ 7&''6&'3'67#‘', *+"- > 0Œr¢ %"  # ;ÿîê›$733#353#3267#"&55#5335#53ƒLL,@  (@,HH›>*<  $=+>&òÈ#7#53533#67'7''6735#35#35#RD)“(†=1  FTkkkkkkX^^    c.. ÿñóÉ732767#"'&55'753ñ… ()93ILŽ]&_LIÿéïÁ7#53#3#"''3267#'66QAߊq  ^"&®i(S.;B ÿêóÉ73533#&''67&'7655#xHI0= ?2$= ; !wž++ 2#"!)$0ÿéïÁ 7#53#&'#n\Ým1"!$®8vÿêîÁ7#'>5#53##ž8#  AÝ<®L#2'1NÄÿëêÏ73#"''32767#5333#H—! —¢Öšš—/Y$ ;z%cÿêìÇ73#3#"''3267#5335#365#Øf[  ¢5^rFHÇ&y*aNeeÿëìÇ73#"''3267#5335#53#3†b" ®8^ØfRy(I1VCc(ÿîïÄ 733#537#537#37#37#,ª(Þ5 ') 0:UQYUÄÃNOOO°NXÿêôÏ/733#3#5##535#533567#533##"''3255#š99@k?99BH HaBB   HÏ$$„ & " ÿéô¤'-26733#32767#"&55#'67#5'6367#367#3356/ $ D O) / ( $ $ "+¤ =*  /7 (5  6 sã˜73533#"''32765#'67#ˆ*  8 2W8K @[ÿêøÑ$*/4733#3267#"&55#'67#5'6367#367#335? .+  / )' #- 02'Ñ K; # A:,E  @'jÿéðÄ73#3#"''3255##5##535#j†94     49Ä%i  Qo‚%rÿééÐ733#"''3255##5##53£2   1Ð%|  d¯¯”ÿéâÑ7#"''3255##5##5353â  CCW«‹  s¯¯£&& ÿéòÎ 733#3#"''3255##5##535#53yeeW  CCWllÎd  L‚‚i|YÿèöÁ73267#"&55#'655&'Ñ   0 "-  Áº ! ¬H-:$SR=#$&"RìÐ &767'5673#23267#"&''3&'0) ]T ''UN "-RK#Œ%   f   &%  ÿéðÑ)73673#3533#"''3255##5##5'67#I  ~‡ 4H  43 (?®&&R  :rr]W *4ÿèçÈ7#"''3255##5##535'27Û  <<P)/bc *2‡j  RŒŒk~#$ÿéñÑ#7#53&'73#3#"''32655##5##53vgf fgN  ::N›"\ D}}cvrÿéêÎ&735#53533#3#3#"''32767##5#535#y'..44--6",,'< VV"ÿéßZ7#"''3255##5##5353ß  @@TH8  LL>QrÿèõÍ733#&'#67'5#537'6…V4* 2  FÍZ? M]  jU) ^ÿèóÏ)-7533'67#3&''67&'767#'665535#¦4 -   D ¯ 10$    ;/ ,TD1TÿèóÏ)-7533'67#3&''67&'767#'665535#¡8 #1   J ¯  11#    <. -TD1Cÿé¡Ð(,7'6553533'67#3''67&'767'5#c    \B1 6D@"" 3 %    33ÿéOÏ73533#&'#5'67#   ¢-- }s ".fÿéïÑ 473&'73##5##53&'7367533##'2655##5##5k27„c" *0  ¹  #((   2: &XX?PXÿîñÂ1573##'325567###535#73''67&'767#3#a}  b0F6     "`˜˜Âr y "d nR@,! y ÿèóo73#3#&'##5#'67#535#735#,¥HeJ!. ;#$7 . HcIo5  33   ÿé…7&''67&'76n ()…1 šÿê⇠73#"''3265'3#Î 4‡‚ i[{íÁ7&''6767&'76Ô Á2%!"!)&! XÿìõÍ!7353333267##"&547#'665#_%<     &2 %00U:  1Mo)?;>ÿëôÎ!73333267#"&547##'665#53z>    (B $%Î1W<  4Oq)A:[ÿéôÍ7333265#"&55#'665#53ˆ1   Í0 ! ‚G"&A< `vÏ7365333265#"&55#'67## ²  1  %," ÿéwe 73533##"''3255#&'''6)))  )S  3  SC @  tÿéóÐ"&*73&'73#3#3#3##5'65#5#35#”  $!!!!&X 1 Ð'"""‡ /*""3""3"qÿêôÐ#bfjnr73533#3#3#5##535#535#35#3353#35#53#3#3#3#67&'67'5'67#535#535#535#735#35#5#35#s666--9c7--6/Q*  '!!$-      ,!  /È !&&! 0          1 ÿépÐ  $(773673#735#35#35#3#735#33535#335#53##5#'6)S//////ZZ$6$8a  Q9   ;$  1,, ÿé{Ð !%)873673#735#35#35#3#735#33535#335#53##5#'6.[666666bb(>(>m ÂQ9   ;$  1,, uÿçôÏ #<I73533533#735#33533535#335335#3#3#7'5#'655&'76„jJ^UU_C  _  # ÁI++*  - 8" %6K  ( iÿèôÐ.6:>B733#3'67#'65533267#"&55'7533#53535#35#35#§((9U/,    2 l,,,,,,Ð   G9/ .6Q!   4QQ))zÿíôÐ !%8<@7&'67&'67&'63#735#3267#"&553'#37#3•   .  0   LWW55" -% a8'Ð        2-e U:+vÿèðÆ%)-373#3#"''3265#&''67#'67#735#35#33#…`8 M     ::::>PÆSVB      21X(xÿé÷Ï37;A735333##67&'#"''3255'675#535#535#33535&'‚%,,     &&--%7J »%$   $(   1%2  wÿéìÐ73#"''3267#'6##535#˜K  @ 8&Ѓ #)SeC3 ÿé‘Ð !%)873673#735#35#35#3#735#33535#335#53##5#'6!6lFFFFFFvv1O1L„$!ÂQ9   <%  1,, ÿêòÃ73#3##5#535#”X!''((#ÃIllI ÿéóÐ !%)973673#735#35#35#3#735#33535#3353##5#'667#.9W¤ ¿¿BBUB—BBUBÁè9FCÃS;  ?& ! !&& =ÿéòÐ !%)773673#735#35#35#3#735#33535#3353##5#'67#X1<[[[[[[šš00C1t00C1—µ0+2(4ÂQ9 ?& ! !''# VÿéôÐ !%)873673#735#35#35#3#735#33535#3353##5#'67#i+8vPPPPPP††&&9'`&&9'~ž(+#%ÂP9  =% "(( `ÿéòÐ !%)873673#735#35#35#3#735#33535#3353##5#'67#q(5pJJJJJJ€€$$7#Z$$7#v’"( "ÂP9  =% ! !(( ÿçžÐ !%)77#53675#5#35#5#335#3535#3##5#'67#‹m 'GGGG~7$$4$4$$$O‘ ''"ÃRR == !((#FÿèéÇ733#'3267#737#3#[{" $ j  7 ewwÇe229XCR„mÿèïÆ733##'276767#737#3#tj %d /U\\ÆiS" +XCV„ÿéé733##'2667#737#3#&—4(¤ Z€››?<2.R„ÿèîŠ733#"''3267#737#3#ˆW L #BEEŠF@(9&4YÿëêÉ733#"''3267#737#3#+ž ,  “T‡ššÉhS#5ZEU‰ ÿêvÈ733##'26767#737#'6ZJ #F8!ÈiQ$ (ZDV|  ÿênÇ733##'276767#737#'6PA =1ÇiQ# *ZEX}  ÿêiÇ733##'276767#737#'6L=9-ÇiR" )ZEX}  ÿééc733#"''3267#737#3#&–4  ¤ [€››c/3+>ÿéél733#"''3267#737#3#&–4  ¤ \€››l28. Bp…Ñ736533#"''3267#'67#&4  #,%#¾ 3 &ÿêdÇ733##'276767#737#'6H:4+ÇiR" (ZEX}  @ÿøºž7337#533##'32665#3#Y%EY VVV|'7IB" ÿ耒#'+/73533533##3#3##5#535#535#5#5#35#335"))++55))J"*‡  .  . ;sÿèöÏ73533#&''67#z,63 /# ) 2,’==T1(?>)5PxÿóòÆ7#3#5&''67&'76îcgz\   Æ®Ó%%  % [ÿéò^7&'36533#&''67#ÌV9;>% "-7 5^     !dYõÏ73&''67&''667#E  %'"   ;Ï      ÿèÖU7373#"''3267#'67##C[ ME :<@ >#5 &+ÿèÓN 7#5##535#33535#35#Ó‚77J8‚77J88Nff';RïÑ7'673&''67&'67A p9 @%-= 5&” %     !ÿûëÇ73&''67&''667#Vf $75')8 6% & "WÇ=!  1%/ÿèñf73&''67&''667#] q !5A*,9 4% 1;]f    - VíÑ )7&''67&''63533#3#535#> ~   ŒQSSc×`QÑ      'AA ïÒ;@PTX`fl73#3#53&'#53'367#35#5'67&''673&'3#3#73673#3##5#535#735#35##5##53'67&'G% ^# 92    7  @!5w# «O!))((////¶=&F ? Ò   ,  /    J /:  $ '), ÿêì !7&''&'''6733265#"&5Í  6M + " ,#        JÿæóÑ3=GMSY_733673#5##53&'733#735#3#3#3#535#535#73&'735#336735'67&''&''&'•  ‚% 1ssQQ ’@@@K¦I??@  0Bv ˆ    Ð   # !4    V        +òÏ $(Y]aek73&'73#3#3#3#5'6353535'3533533##3#3#3#'67#53655#535#535#5#5#35#335&'Ÿ ##c  ¬(!))--7; &  (1,,))N(*  Ï  V  $%o$    $+ E \óÑ73&''67&''675667Xk(/ ;*,< 6&  Ñ       {~óÔ73&''67&''667£=   Ô       |ÿéóJ73&''67&''667# ;     % . J       _gñÍ7'673&''67&767{ I ($  —     aÿêãb)/573#"''3255'675#'3#"''3255'675#&''&'¨;  *C;   *P 7 bd  #d  #    ÿê[Ð 7#5'673#:  Ð#¢| /ŒRÿõòË 733#3#53‹NNR 9ËFj ZóÏ 733#3#53k``sæ^Ï#- ÿïòW !7&'7&'''6733267#"&5  ] • /  -#W  ( 7 \ÿõòË 733#3#53ŽKKO–2ËFj\ëÅ 73#&'#5#Ój/! !"UÅ-VÿéîW 73#&'#5#Þh/) ('dW  :\ `{Ï73533#&'#5'67#,&&  #³  +/v`õÏ73533#&'#5'67#*.%  ³ 00ÿéî} 73#&'#5#Þg.( '&c}R7ÿôÁ] 73#&'#5#7ŠB! 4]  :XÿéìÊ "7##535#35#7'3255#535#5#uN::::Å'"O<<<<Ê\…á&:7Ä b\&:€îË 73#&'#5#Þh.)('dË  #: ÿçúŠ-15<7327#"&'#'6553#&''675#535'235#35##67&'Ö Ž 1  2<111:#0$$ ŠHH-.d;0& &.D/ / < RÿèöÊ 7&'''6à ) / +2-Ê<Aœ“JClÿéòÏ 73533##5#l;77;NN……Iÿè÷Ï7&''67&'š)%/ 0( Ï&j7 dT11["gÿéðÀ73#3##"''3255#535#qt.99 <<2ÀAV  QA]ÿîõÐ $73#'6333267##"&5477#Xa "]K   &=@Ð "!P  AgÿéîÊ7&''67'67676767&'Ë-5%"!" +3& 9 '  %8%C:$[1cÿéôÆ733##"''3255#53567#ss>>  AA[Æ\ Y!UÿôöÏ73533#3#535#e8<3 AC   14¤  <P  T ÿîßÅ73#735##53#=#/  xx¿—ÅR,­mn11]ÿêñÍ 7#56'&'ß "(VÍ/‰’#+ ÿéäÐ73#"''3255##5363#735#f w  ž9 cc>>Ð ©  ‘°ÃCV2ÿëòÎ#',73533#3#&''67&'767#535#35#335cccTV1LP74, QTc#@@T@¹K   KN% % ÿéíÍ73#'66556#5##535#Õ E^±± kJdddÍ B85D9lmnI6 ÿéãÏ#733#5##5'67#&''635#er%U|y‰2h :yyÏ:h]A  !Ÿ3ÿççÇ7#"''3255##53#3#735#ç  ¦&ƒƒ iiAAÇÅ  ­Íà/N(ÿìõ¿7367&'327#"'&'#   ‡¿ W$5!-r8í73533##"''32655'67#?O!!   0 0?Œ!!M E4 !%ÿéíÏ73533##"''32655'67#’33 :G N<Ž¢--Œ lC%(K<ÿì¢Ñ$7#"''32654''67&''67&'76Ž (3"  Ñ'>'( #  jÿéòÏ73533##"''3255'67#yF #% /&F¢--Š  ^?!)O4ÿñÈg73533##"''3255'67#=P(( 2 .>U9  /$:ÿøÅ¦73533##"''32655'67#@I(( "+#H€&&\ 9(0MÿèôÁ73265#"&55#'655&'Ë 72  Á¸  ªG/9$SR="$&! \¹ 73#7'675#I")¹~  „QÿèöÁ73267#"&55#'655&'Ï  5 $.  Áº  ¬H.:$SS=#$&"AÿèôÁ73265#"&55#'655&'Ë >$6  Á¸  ªG.9%RR="$&!lÿéöÁ73265#"&55#'655&'Ô  + + Áº ! ¬GS+$RR=#$&"KÿèóÆ'733&''67&''667'367#67#'7#co,  !# $3Æ2D##A,;3 63 *3 ÿèôÆ!733&''67&'767#'7#'67#˜?'*' !2 1 4A> 7,Æ2@%" #'2’82‡cÿéóÆ#733&''67&''667#767#'7#va &   +Æ3E$ @*G^53#-4ÿèõ"7#533&''67&&'767#'7#'6E/ª 0+.7#!1 - !" P 2.n.    O2,LÿéóÆ"733&''67&''667#67#'7#cn-  !#%5Æ2E"!B,F]74 (3]ÿéóÅ!737#53#33#537#35##5##535#j /J=–!(5.NSSS˜4"""FW W8& ÿèïÏ7Q736533#"''3267#'667#36533#"''32765#'67#73733#"''32767#'67#Hg  T, * D (.   '" %u 5   # '" ¾ 4    W L .=0Q ,>0 ÿíÄ73#"''32765#'67###535#p  #.)$hL88ÄJ $;!,_VeC/ÿéïÆ7#"''3255'7567#536íd dh)!˜³$,5oR L  "ÿéîÆ7567#53&'#"''3255&'" 4)!˜³$,!B 3& =&€/+  < >ÿéïÏ 737#5'7'&'&' 9;…ˆY"  $#χLJw*ÿéðf 7#5'753'&'&'î;‡Š]  $$"  IGE   nÿéõÏ 7#5'753'&'&'ó#JMH  OLIІs,«ÿèôÎ7#5'67536'&'&'ñ0    EE?”Žw;¦ñÍ 7#5'753'&'&'ï'*.  g40  miW   %   nÿéôÏ 7#5'753'&'&'òLOJ OMI‰†s,  ¡ÿéôÏ 7#5'753'&'&'ò*.5  CC>  ”w  2  Tÿé«Ð73#&'#5'67#535'6¡     #Ð, gc$.&BÿéóÎ $(.4F73#32767#"&55#'67#53635#3353655#3354''6767&'u &' * &  )  7  Î fJ NC :f9F  M  €ÿéñ{7&'#5'753'&'˜ cADL {  >2/  PM'  ÿéy"73533#&'#5'67#7'6'&'(''  %P  >  L3395 ;    zîÑ 7#5##53&'7'67&'î¶c+#1 -].& (,½%&      |ÿéó“ 7#5'753'&'&'ñDGB  ;;8  `\[     ÿéu–73#&'#5'67#535'6m$$  &."0– MO & ÿíóË733533533##5##5#5335#35#+6666K66½;II==‚ ‚ubbb_ÿèôË15973533533#'3255#'655#'3255#'655#75#35#b 8 9       0Yk````V  Q?##> V  Q>$"? OOOOKÿèòË15973533533#'3255#'655#'3255#'655#75#35#O >?  8hm^^^^W R?#$= W R>$!@ MMMM NÂ73#3#67'675#535#? " Â:B H:WÿéõË!%,73##"''#5##5##5#53535#35#335#325ê   && Ë]Z  eeess]]KKKKK]\ _ÿéöË!%,73##"''#5##5##5#53535#35#335#325ê  ##Ë[] fffuu[[IIIII[a ÿé¯Ì"&*73###'2655##5##5##5#53535#35#35#   &&Ì`W R____pp``NNNNNÿè¬Ë15973533533#'3255#'655#'3255#'655#75#35#9 9       8ZsXXXX]  X@""?]  X>$!@GGGGÿèóÌ37;73533##"''3255#'655#'3255#'655#53535#35#tQ   (&&&e((Ì___UO=$#> S M>#">__KKK ÿéöÌ"&*73###'2655##5##5##5#53535#35#35#ß &%%%%8%%8&&Ì`V Qaa``pp``MMMMM RÿéóÐ#+37;?73533533##5##5#3#735#335335#5##5#5##535#35#35#Y%%%%%% ~~##}…FFFFFFFÁ / -$%bb $ % fÿéóÄ73#3##5#535#n~5<<==5ÄImmIiÿêîl73#3##"''3255#535#pt(22  ??8l(  % uÖÉ 7#5##53#3#ÖŒ#qqqqÉTBBT ÿøbg 7#5##535#b$$$gloL;XÿéðÀ73#3##"''3255#535#d€4@@ DD8ÀAV  QAiîÒ 73#5##53&'&'''6„_³d1&! %. ", 2Ò ++ , ÿêîl73#3##"''3255#535#-¦Faa  ffLl(  #[ÿéòq73#3##"''32655#535#f‚3== FF;q * ' ÿéWx 7&'&''67   0x     ÿénÑ73&'73&'#5'67#!   )=° !hc @UÿéòÎ &7#5'673533##"''32655#&'‡ "4   4   Î!£ ,77 { ÿèìw73#3##"''32655#535#)²J[[ jjTw!. *!zÿéðÀ73#3##"''3255#535#ƒc%// 33*ÀAV  QAÿêŒÃ73#3##"''32655#535#v.22 664Ã>[ V>ÿèðÊ73##5#535'6Ï?ffee!, xÊ>rr; SñÐ73#&'#5'67#535'2Î $+`N"4 8%!8 3#M]"&SÐ #1/ÿéð[73##5#535'6À!#ffff@ f[ ++ÿéïƒ7'673##5#53v$% y0$+eeeef )CC—òË73##5#535'6à &&"" $Ë6[[1ÿñàÌ 7'6'66'66­ .U Y2 0^ 8<3Ax HOÌ( "0  )9 ÿöòÎ73533#3#535#[]]iäg[ˆFFllzÌ73533#7'675#('')-7(”88N SmÿéêÏ 73#5#533533Öi !š±¢ÄÄWÿêóÐ73#'66553&'° 2i!5ÐI<0 , U FÿèñÅ #7#'66553533#"''32767#'67#ñr&!3  1+ÅQC4 0#^G$$o# K]&!SYÿõöÄ 73#735#35#3#nuuMMMM)ÄœW2v1ddÿîóÏ %7#5##53&'736732667#"&5îb> 9' !/   *"¬22 ./ . ' KÿêðÇ %7'66553'#33673267#"&5~"zUUC! !'  $ D5 3!_F5$'  -   K¥¹73#67'675#QN&0¹z €¢ÿñôÁ 73#3#535#¤K RÁªªEÿù§Ñ 74''675#53533#7&'75##5#– #)  4 4^,,^/ )::::@‰¹ 73#7'675#EB& ¹y  €fÿñóÁ 73#3#535#p~6;>4ÁªªUÿñôÁ 73#3#535#[”@EŸF@ÁªªmÿñóÁ 73#3#535#vw28†90Áªªÿõ|u73#67'675#c(/9'uJ O‹ÿçêz7##53#"''325Ö7_ g€“f  …óÈ 73#3#535#'²NhæjPÈÿæôÅ7#5##53'6656&'ÒuB187,&,+&2Å™††™-5*92': ÿæéU7#5##5'66&'ÏxI16 3*/) ,,UD35F"&  ÿçìÏ"(7#5##5367#'6733'6656&'ÕyQ D!1O 'i 8*'''"-Šr__r$$'> $*ÿççÏ 73#5##535333'6656&'‚S‚Cctd6(+&%!+§kXXkBA'> $€¹73#67'675#d*-: &¹~ ‚iÿèíÍ7&'73#"''3255#3#~ .Q   ?3Í Á  «·~Ô¢7&'#53#&''67&'76ª-R     ¢  . bÿéíÐ7&'3#"''3255#3#  5J  7AÐ Á  «·TÿèìÎ7&'33#"''3255#3#k  3^  L:Î Á  «·oÏ’7#53#3#3#535#53–Q &`'#""}ÃŽ 73#735#35#}FF$$$$ŽtB"T"y ÙŸ!7&'33267#"&57&''6§   *  2 Ÿ#S U"ÿææŸ7&'73'3255#3#:  9‚ #oHŸ   ™ ‚ –3ÿôÀ#'+73&'73#3#3#3##5'65#5#35#]+-$$$$,a1#####   T @ÿëô¸7&'333#"&''75#_ ( -1 :!  ¸ 7c  UzîË#'+73533#3#3##5#535#535#35#33535#335z100))2211))1(?(»YY57CÿíõÃ7&'333#"&'&'75#b  $,. 7 ÃA`  Qÿèó‹7&'333#"&'&'75#5 7 %9@ J)&#$#‹ -C   3ÿèó‹7&'333#"&'&'75#5  0 %;D N*(‹ /B   3ÿçö‘7&'333#"''75#(  1 #%¢--€rx.*l ÿæ|Ï73533#"''32765#'67#$5  "/)$¢--eA m{.+ojÿéíÏ73533#"''32765#'67#;  (93£,,Ž('Wy.+mIÿèöÊ 7&'''6¿ , 2 ,1ÊŽ>@Uc%DzîÑ 7'67&'T/ -q #Ñ - "%1 0 ÿèõÄ 7&&'#'6©= .A%#AÄŠ:rIOb$@iÿéò… 7'67&'@ " ( …@?,``(,jp‡ëÐ 73#5##53&'«4U2Ð 22 cÿèöÊ 7&'''6Ê$ ) (,'Ê?@’KC”ÿêòÇ7''6767&'× "H'/ G~uC$êÐ767&'7&''6k49 KV*Ð    ÿéÐ73#&'#5'67#535'6u *++  $02.:Ð *oi#$0&$™ÝÒ767&'7&''6j-0HP)Ò    Kÿèói7373#&''67'67#367K5^  % 3 -4 +A Z #   RqñÑ7#53&'73#3#`GBw‰¥  !ÿêæZ73#"''3267#'67#536qdVNEPVZ B (; ' gÿèôÏ 73673#&''67&'67#67#w!G+ * =% ¡D( "  $(_"=& rÿìóÌ7'6773267#"&55'7Ÿ6. 9;  *-£  <P  S ÿèöÏ+733327267##"&55#&''67&'767#532+* 7&   Ï.˜  Œ$ ,& $0  kÿéøÏ)733327#"&547#&''67&'77#53,   "#  Ï-5&$#&"$7 )  28  'ÿéäÏ!'736533#"''32665#'67#7&'&'"Hd  RU J G  e  ‹''Y5 96b-&VN` ÿéäÏ#'73533#3#5##5##535#735#33535#335'OOOYEEYO;;P;•EEZEºEV//Z |!!!ÿèíÉ  $7##535#35#7#"''3255#535#5#uN::::Æ P====ÉL”à,-É  xL,ŒÿñÓs73533##"''3255#&'Œ)   )aG  B Qÿåë†#7#'67#533#"''32767#'67#'6}4#Ty$(^  > 9  '"<L )9*  O@ëÈ!7#'67#533#"''3265#'67#'62"T{#'Z    ( # )%…? - %ÿåõ?7'66767&''6~N 4-  # 6{ % !  @ dÿéî‰"7#'67#533#"''32765#'67#'6‹,6W"R    * & $CR*;,'jòÏ 73#'6Š]e Ï  6ÿè›Î 73#5'67'&'‡ ' /":Îæ_UfÿôôÏ73533#3#535#f===7‚7=…JJkk ÿèZÎ 73#5'67'&'F "#  ÎæYN  ÿéóT73673#&''67#]l]H M 4( @T;   -" !eÿéóÐ73#&''67&'67#5367#6£P( $ #)) #¢D*  '+=*!) ÿèL¢ 73#5'67'&'9   ¢ºE = ÿéNÏ 73#5'67'&':   Ïæ[ T ScÏ 73#5'67'&'P"$  Ï|% = ÿêX 73#5'67'&'D!  ¥>  :dÿóî73533#3#535#d;;;5}4;\44CCPÿéŠÏ 73#5'67'&'v ÏæO  PhWáÍ7'673'67#&ƒ DJ @7  ‘# =.  ÿéñX#7367&'#"''3265'3'67#x$!"( 9#   cT3 -?T   $' =*bÿéöÏ736533#&''67#7&'j3@7 0* 7 42j  Š('L/,IN'&VKJÿé•Ï 73&'#''6j   Ï. ¡¹, Bÿé¹Ï 73&'#''6uÏ1œ·* ^ÿé÷Î736533#&''667#k485 5* : 3""R0(B=-<0gÿêòÏ73533##"''32655#&'gY Y  ›44ƒ ~$ &cÿéìÐ 7&'3##5#&'š  '‰E0]Ð (¢¢ aÿèõÏ"73533#3&''67&'#535#67#h9::/" #% # 29D > ©&&'&    %'kkÿèôÊ %7673#3267#"&'#67'7&'kD0.-  0! A+» &1"5@Z  {#;aIöÏ7365333267#"&55#'67#f$4  !- ##²  I  ;<0Xÿéñ_ 73533##5#XADDA;$$??kÿéëÏ7#5##5##535335#335ë"!65!!5"¡tUUt..O<<<`ÿèôÏ&7#5#'667##5365333267#"&5î(#+   ¥7$CIE=$7HV " VÿëôÏ$7#5#'667##537333267#"&5ë&!$ !"8   ¥7$CHC>&9*HU bÿìøÏ$7335#53533#353#3267#"&55#k;;AA!4  $ 2ŠAR RAS/ 5 ÿìó)73533#3#535# WWWhçkWQÿîöË$(,0@76767&'#3'67&'767#3#3#735#3673#53&'²     9JC  0-77kkEE " (›&Ë    I    39-  eòÐ 73&'73#e<<° eÿéìË767&''677&'3#5#533     ]s`Ë"#&5'$&$ .(¿ ¶£ÿéåÈ767&''67&'3#5#533H#$(!%˜·£¾"#"-5''$(# À ·¤SÿéêË767&''67&'3#5#533    k„qË#$ '4'%&& %$.(¿ ·¤nÿêé”767&''67&'3#5#533”     SgTŽ.) Š nÿéìË767''67&'3#5#533      JXEË!#&:*!") #3,¿ µ£gÿìõÍ "733#67'73673267#"&5g&& D  ÍJl  ×R` " ZÿéôÌ "048733#67'73673267#"&53#5##53635#35#Z)) G   ! G`*````Ì#  \    q q 3@ÿéŽÌ "048733#67'736732765#"&53#5##53635#35#  8    9EEEEEÌ"  ]    qq 3AZÿîõÎ"7&'332765#"&57&''6   K YÎ.Š }'00'8.+Gÿîð–#736732765#"&5'33#67'› &  T11$ –4  F  “1K  ÿé÷a &,7&'367326767#"&''67''67&'{  <0,P1E ! °a-( +#  <! "\óÎ &733#67'73673325267##"&5"DD# , d" #)  . Î *  i'   $ *ÿëï\ !733#7'73673267#"&5*;;9&# _" #) '\.  e)   #tîÐ &733#67'7367327667##"&5#AA" + b% %,  , Ð#  R    ÿçñn27373#673267#"&55#3'67#&''67#;¦P% ,  &89RJ3  /m(    \ <0  ÿê÷i%7773267#"&55'75'75'6Ä ).bdvx'( 33SVHK? Si      "hòÏ#7367326767#"&5'33#7'„$ ,  * b??=($ Ï    J'  _ÿìõÍ $733#67'732767#"&5536_'' ˆ#  ÍJo  ¦[ ËV&ÿìòR "77'53373673267#"&5:9'" >$ $+  &+*  ['  ! ! Vÿñòš#736732767#"&5'33#67'¢ !   L-- š3  I –2N  "ÿéò #733#67'736732767#"&5"==' `$ $+ )!*E  ‰/6! pÿéòÐ !.26767'53373673265#"&53#5##53635#35#„ "     ;IIIII¤&  ^,!    qq 3A[ÿèóÏ!733#3##5#'67#535#5353335¾!!'%! &&&Ï.@SS1 '@..@@]ÿéóÏ 73#"''3257&'''6Ÿ  3  E ÏÍ  ™9D F8K4 6ÿéóÏ 73#"''325''67&'y :“ÏÍ  ™K5 6D9C F8^ìÏ 73#''67&'u5‘Ïqb 5")"' &# ÿñòf733#3#535#53wVVgåjWWf(((ŠáÏ 73#7&'''6wA\ÏD8   ÿèÚO 73#"''3257&'''6v   F  o ON  /    )ö†73673#&'#'67#Po;) 1*!; ,?s   &$‹ÿëôÏ 73#"''325''67&'·   K  ÏÍ ™L5 8E9DF8Uÿë ¿7#"''3255'67567#536‹    .Dg N B6&iÿèð‚ 73#"''325''67&'¤   &  f  ‚  \3$ $,%- .%ÿêr7#"''3255'67567#53h  D[M3 * ‰ òÏ 73#"''325''67&'µ   M  Ϫ  ~@, /:19;/F“Æ7367#"''3255'67567#MF     /Æ A 4"[ à733#"''32765#'67#53ˆE   4#)+ 6" '%-rÿèôÐ 73#"''3257&'''6«  /  < ÐÎ  –9C F7K4 7‚ÿéêÐ 73#5##53635#35#§4AAAAAÐ ÄÅ^:‡:|ÿéòÏ733#3#5##5335#¡==4E%EEÏ,0wwRA„ÿéóÏ733#3#5##5335#¨771C$CCÏ-0wwR@\ÿçòÐ &,73673#3&''677&''67#677&'rNPG   # #  £"6#    /O4 o jÿ÷óÊ73533533533##5#3#5#5#j=bvbŒ44>>>>JJo‚888sÿéïÐ7#5##5##535335#33535#35#ï  44 4 T 4 ©‰ BB ‹''6###X"""mÿêòÏ 7#5##53&'73##"''3255#îU3M…4   =­00 <[  XpÿéòÏ!73533#3#67&'7&''67#535#y-,,8B # ,0+6-¤+++6 %* 4+ÿîñÏ#'+/37;735333##3#3#535#535#535#535#335353#735#35#3#&LOO]]jÞaUUNNccL_;;;–««………….ááÅ        U@' # $îÏ73533#3#535#dddRºTdÀQïƒ7#5##5ﺃ0 2 ÿêóÏ &D73#53&'67&''67'#'66553533#3#3#535#535#'6Š[Î\0$$ ! @(´¿ 6*CC==P·S;;5Ï    &1) :  ÿïïÏ'+/37;73533#3#535###53#5#3#3#535#537#335#35#35#35#dddRºTdL9Û800MÝL111O111ÀC!31;;)A ÿíòÈ#'->DJ73#3#3#535#535#5#35#33533535#&''332767#"&57&'''6ÏD55JÛI66Cx"6##6""W""" +)Š  — È;;)?,  ) /   ÿéòÏ#+/73673#53'35#33535#3353##53#=#Z % ,°. <¡ß " %à  €> " 3ÿê͉#'-373533#3#535#735#3353#735#35#35#'67&'@777CšD7%%8%m}}XXXXXX  9 ƒ   -A/    Wÿçò¢#'-373533#3#535#735#3353#735#35#35#'67&'e777D›E7&&8&n~~ZZZZZZ  C ›% 5Q:     ÿé]Ÿ7#"''32654'7##5] "Ÿ04¥¶ ÿéòÏ $0>K7&''63533##5#7&''67&''6&''6'&''613 43-< OOihhi:  x     c   Ï#!ww((             ÿì‡Ð048<@7673&'73#3#3#3##5'66553&'73'#35#5#35#* A  /'HH…'    X'! +"X 6&J"" ÿêòÏ#'+17=C73#3#3#3##5'673&'5#5#5#&''&'''67&'ƒ LPHHHHT¬ # 9 BDDDDš  &  `G  ÏX (, ;&%    ÿêòÇ*.28>DJ73#"''325567#67#53&''67&''3#735#&''&'''67&'/“!  wr - ÿétÁ7#5##53'>&'m4$   Áš‰Š›'R,(  "+0 ÿénÁ7#5##53'>&'i/!   Áš‰Š›'O0&  "+0  cóÑ735#53533#3#3#535#*KUUVVNNhæhKšÿæé\7#5##5'66&'Ñ{K25 3,-) ,*\L;76767&&'3'67&'767#3#3#&''67#5355#—  (6hZC E;QRT60 .4> J RV Ð   F* @%  6"$ÿèèÏ#17#"''3255#&''67##5367&''66è  O, (*1 C\ % #+ "¯¬  ”$´Ç H !!ÿèÞ—#07#"''3255#&''67##5367&''6Þ  D' % # + <V!  " 3}}  f  ‚•  9    ~ôÑ7&&'''67&'e!F( %+F=' Ñ 0  #ÿèÝy#/7'67##536533#"''3255#&&''6|& 9UR  B% %  '=  hy  `  J     nôÏ)733#67'7537736732767#"&5K""5AB#+  &Ï <:G    !ÿèÛZ .73#"''3255#&''67##536&''6€O  E# #!2T )Z H  3   Qa,   QðÓ %?CGKOU[agms73&'73#''67'6776767'7''67'677767''3#3#3#735#'&'7&'''67&'7'67&'V#R    ¢     |CCCC??!£Ã$$»            '   !ÿèÛR.73#"''&''673255#&''67##536‚M  ' E# $7YRD       /    M]UÿçõÐ$PTX\`fl7'673533#3#7'5#'67#53535#'673533#3#3267#"&55#'67#3#735#35#35#'67&'i      ",      A{{WWWWWW J °      *ZA $ %      ÿéñÇ73#3##5#535#735#35#(¯NhhffM‡‡‡‡Çn@@@HÿéåÆ 73#3#"''3255##5##535#735#0 EZ  FFZGxxÆPE  -__K^*Cÿèë 73#3#"''3255##5##535#735#M;J  78KAjj9/  <<4FqÿéîÅ 73#3#"''3255##5##535#735#|f(4    !5*>>ÅOE  .__K]+ ‹ÿïõÒ !%)73&'73#3#735#3#735#3#735#35#3#‹++j^^::** &VV2222ggÁ  S7 # 8@' # #8ÿûÏ73533#67&'7''75#735#335?  $"  ¥**^2  5>>>\ÿéöÏ"7#67&'7''275##535335#335è6 6E"!"65""5"¦c:$  <u))P===FÿèïŸ733#67'7''275#5335#35#==  +++Mÿìï“&73#3#"''3255#&''67##5365#M¢HC  0   (>H“ c  M $j{ Lÿéç“ &*7#"''3255##5#'665535#33535#735ç   &*  '':&a(':&“ 22" $G.JHÿèôÏ"7#67&'7''675##535335#335à8 CF'%%89%%9$¥a: #  <z**O===ÿéZÍ73#''665&'767#53&'1   0 Í*#)#. ]ÿçíÑ2=HL7&'3#"''3255#3533#3#&'#5'67#535#35&'75#367'35'3#p /^   L'((%     $' % eÑ Ä  ¬J 35JJ   ,6» ÿèyÏ"73533#&'#5'67#7&'7'6)((  ' W  ~QQ[^",Q \ÿéíÊ  $CGMQW7##535#35#7#"''3255#535#5#3533#3#&'#5'67#535#35#&'735'6ž0   0I)**%%    $)  ! ÊEœá ' )Ì „E '  6  $& 6 3    „õÑ73#&''67&'#53&'67ƒi. #1?-'E 3#)h!Ñ     …ÿéßÏ 736753#5'…" Ä–“æ@   ÿé¡Ñ.733#3'67#73267#"&55'75#'6553F==H7$&   -Ñ      H<- .7S ÿñÏ7''675#53533#7&'75##5#x/8++++5 7_--_4#====‹ÿéáÏ 736753#5'‹ Ä–•æ> zÿóôÏ7&'3#3#3#535#535#¯  #v0))3z3**2Ï &::::wÿéîÄ73#"''3267#'67##5##535#{s   ') #$pEEEÄL3>0_iiG4zÿéïÏ#7#"''3255#&''67##53653ï    2¨§  #A­¿hÿìõÏ!73533#67&'7&''675#75##5#o2334=2e¢--_4"" 7====oÿçöÈ7'6553#&'7#3“h ! '@@dR+&UUdJ [Q>`îÇ7'67#53#3#"''3265]1 : E܃t   ‘- (ÿåë€ 73533#7&'7&''275#75##5#+JII1Lc0.J”56a=   tÿéóÏ735#535333#&''67#75#u-$$-6#! " *Z]6))I311"06)wÿìôÍ&7773267#"&55'75'75'6Ú  1368  &)"%!<Í '  )  2 4( ' ÿñ‚Ï73533#7&'7''675#75##5#&'')1&M¢--_4  7====ÿèóÃ73#3#&''667#5365#!¼UdbNIU 1.^`SÃ4G#;?2$ - ^õÇ73#3#&'#'67#5367#%¶S x1 %&>/ .F IÇ    aÿçòÇ 73#735##53#3#&''67#536tllFF/w5>9 1+ 0/25ÇF"Z  "!"  ÿèôÉ 73#735##53#3#&''67#536.¦¦~~5O±OeWELVNW^ÉG#Z (  ;,  ÿçô_73#3#&''67#5367#$½ZjZD K/ M S[N_  *    BõÃ7367#53#3#&'#'67#M PºV p;-3+8.;‘&"\ÿè÷»73#3#&''67#5365#oz5=:0 , 7 =671»1D58D - WöÇ73#3#&'#'67#5367# ½V t5# +)2&* %5I NÇ  !" Wó¿73#3#&''67#5365#bˆ;DF&$$ 4 7=@8¿ & $/DöÐ?PTX73&'73#3#53'#367#733#3#3#3#3#3267#"&5535##"''3255##535#35#)+r($QTTMOKKKKGG% .% MM ;;;;;Á        J< N  }ÿéêÇ7#"''3255#'65535#35#ê  .,,,,ÇÁ0.% *3t=*f* ÿèŠÏ%+73533533#3#535#35#35#35#'67&'*|(******>  ±mmCC0  :ÿìòÏ2733#3#5353333#3#53533'33#67'75367’//B,!cV .$ Ï99 /LL_"KG ÿì¤Ï#'+/37;?E735333##3#3#535#535#535#535#335353#735#33535#335'6411::C—A6655AA4Gdww2Q2!FJLÆ        S@' "  YÿðòÏ#'+/37;?C735333##3#3#535#535#535#535#335353#735#33535#3353#k12288C“>6611==1Cauu 1 Q 1 v˜˜Æ        SB( % # HÿïòÏ#'+/37;?C735333##3#3#535#535#535#535#335353#735#33535#3353#X:::EEL§H==::II:M'''s††''9'`''9'„©©Æ        SB( $ $ ÿðïÐ#'+/37;?C735333##3#3#535#535#535#535#335353#735#33535#3353#'OPPUUcÙcUUOOeeOb<<<œ¯¯;;N;‰;;N;´ÞÞÇ        TB( " # aÿðòÐ#'+/37;?C735333##3#3#535#535#535#535#335353#735#33535#3353#r/..66><22//::/B]rr0M0pÆ        SA( # # ÿêhÏ#)/7&''67'67676767&'&'#&'''6X!     r  /)8! 7# ÿîôœ-159=73&'73#3#53&'#367#3#3#3#535#535#735#33535#335W U'?Ü<%F6J5©KVVkçjVVL::L9…::L9ˆ 8  "  PÿîóÐ"&*/5GMS73533#3#''275#535#35#33535#335&'#&''3326767#"&57&'''6Z>??6 9B"55>""5#X""5#   #^  j  ÀI I- ) '  (   ,   ÿï]Ï &,7&''63#3#7'75#535#'6'&'2    7'1 )Ï   "C G9ZÿêóÐ.48<N73533#3&533#673265#"''67&'#535#7&'3#735#7677'67&'a#*)     X#w  gFF$$  "* ¸">#"$=    B J:2   ÿèðÐC73533673#5##53&'3#735#3#3##"''3255#535#535#'2J  2³2››ss‹ $,VVff  ggVV#'UÍ !! () 0+ &     MÿéòÏ'+/37GKOSW73533533##5##5#73##5#'65563#735#'3#735#3#3##5#535#735#33535#335Nš/  !S&& <(( P $$'' .   *ŒŒ?5 o9 *  * 'I  +, ÿêMÏ$7#"''32654''67&''67&'76=      Ï *?'( (   ÿéòÏ(,048HLPTX73533533##5##5#3##5#'66556'3#735#73#735#3#3##5#535#735#33535#335:F::F:Ó &H/±66155Lm-3399--G-   nn0( (7.+ +'I  ,, ÿéóÏ/3973533#3#3#3#3##5#535#53&'#53&'#535#35#67#gggOSX(Ci[[[[i@)_LRg(eKÁ2 !! 2/T ÿéñÈ =73#3#535#5#35#3353353533673#&'#5'67#53&'×D9Á:E'9&&9'%Œ   2R"1 7$!6-"Q1 È@@.6""  #;:! OÿéðÎ <@DHZ_73#735#35#35#73#735#35#35#3#3#3#5'673&'7335#5#5##53&''67&67#^AA!!!!!!:@@ 4444;‡ :s******ƒ& + '= ÎH3 3H3 2 )    !    ÿæóÎ >CGK]b73#735#35#35#73#735#35#35#3#3#3#3##5'673&'5#5#5##53&''67&67#XX444444Y[[777777ZXLLLL\¬ 0;>>>>¬(6+1C 4&8YÎG23G2 ,   %  ]ÿéóÍ =AEI\a73#735#35#35#73#735#35#35#3#3#3#5'673&'7335#5#5##53&'''67&67#j<<3<<////5z5i&&&&&&y&% 8 ÍF1   2F1   1 -    !    VÿéöÎ =AEI[`73#735#35#35#73#735#35#35#3#3#3#5'673&'7335#5#5##53&''67&67#d@@7??22229ƒ  9p((((((€. )&; ÎH3 3H3 2 .    !   ÿéóÏ,767&'7'32767#"&55'667'6f:?# & +'+Ï7  (c& i6-0ÿçó¢'7'6767&'7'3267#"&55'6U%.3    $! A:L/*$ K NJÿçî‹+767&'7'32765#"&55'6767'6q1)   % . & !#‹   >! C$ OÿèôÏ(7''6767&'3'66733267#"&5É 66"%* >1  °& !24  G7/)2\ ! ZÿèõÏ)7&''6767&'3'66733267#"&5Ì32 "' 8-   °& !25  G7/)2\ ! LÿèõÏ)7&''6767&'3'66733267#"&5Ç88$%, >4  °& !23  G8.)2\ ! hÿèõÏ(7''6767&'3'66733267#"&5Ð -.#4)  ° %  37  G8.(3\ ! uÿêõÏ)7'6767&'7'3267#"&55'66“"   j!23 & o   n>/. ÿéòÏ'767&''67&'&''67&'76/1*"% #+%A 1'#(†+5 :.+= 9'ÉK#$ÿüsÌ'767&''67&'67&''67&'#              V      ÿéò˜'767&''67&'&''67&'76/.'! $ $.#> *#!†*3 :/+= 7%‘   5     cÿéìÏ&73#"''3267#'6&''6767&'Y  M 3 $ Ï1x &C 63 NÿéëÐ%73#"''3267#'6''6767&'zk  `  ;&) ÐŒ2!v )F ! 75 ÿéæ(73#"''32665#'6&''6767&'G   †$Y27!!# K9 -5"  /- kÿéíÐ%73#"''3267#'6''6767&'V  I 3"ÐŽ0z (E 76 uÿéïÐ%73#"''3267#'6''6767&'šN   A - ÐŽ0 w )F 76 NÿéðÏ 73#3#"''3267#'667#53&'¡ :bS   ?$I Ï^%E+4;I[ÿèô &,2736733#3##"''327#67#765#7&'67#7&'[v  jwP  ;R# q'**'=&&* !5  z!5 hÿèïÏ 73533#3#"''3255##5##535#h9::6   ""69¯ !\  E‚‚ew!ÿéð– 7#"''3255##5##535#53533#Ù   <<PeeggT@  )YYFXÿðóÆ 73#53535#35#35#Ì'å)mmmmmmÆÃÃA-n.o. ÿïó¯)-159AEIM73#3#35335#535#535#533#5##535635#3#3#735#3#53535#35#35#E #X#1 ¶ 144((&& S'å(rrrrrr¯  MM  M""GL?  3EE NÿïòÆ 73#53535#35#35#ܤLLLLLLÆÃÃB/o.o/ ÿðõ’ 73#53535#35#35#Ê+è*kkkkkk’0MM ÿó›Å 767'7535#35#675#ƒ ?M<<< 9WWÃgU  [R!DC;ÿé÷Ã73#3267#"&55#'667#735#[„!  * &ZZÃgU! [3.'*Aÿçõg73#3267#"&55#'67#735#. + ' E < +zzgB %2 #gÿéõÃ73#3267#"&55#'67#735#yh  * %BBÃgU [R!DCgÿéõÃ73#3267#"&55#'67#735#d  -)>>ÃgU [R!DC ÿèpÁ7#5##53'>&'p4%   ÁЉœ'P.(  "+, ÿé‹Ð733#3#5##5335#=::-?'??Ð3/ssR?&ÿéåÏ733#3#5##5335#kffYŠE1ŠŠÏ,/xxTACÿææŸ73#5#'6553&'#3¢:e>CddŸ Z ,% '1; &) ÿèåÎ7'655673'35:dI G^ªª–D1+16c  N;"(ÿççÄ73#'66553'#3ÊÊ "µÄb6* (LL9& ÿéâÐ7'66553&'73'#3?TMp>2 /!Y  I6# ÿéáÐ7'66553&'73'#3?  SLz ?2 ."X  >-Aÿçòr 7#5'753'&'&'ð-mpM  .0/  IGD   ;ÿçót73673#&''>77#7&'F?RD7 =(  :{  K,9*  <    ÿèâÏ73#'6553&'#3ˆM«[Z——Ï >Q("NO #-ÿéóu 73#3#"''3265#'6767#53&'“Tqc S ,  A\u  9 #Kÿêò‚"73#735##32767#"&5535335P……]]|‚+:F9--‚.*4  I ÿéáÐ7'66553&'73'#3?  TNŒŒ2?3 ."X  + 6ÿéêÏ7'6553&'73'#3fD =ppo=/ 08T A/jÿèõÏ"73533#3&''67&'#535#67#q555, " ! /5? 9 ©&&'&    &'jÿìwb73533#7&'7''275#735#335)(( #.)*P4 žÿèôÏ73533#7'7''675#735#335¢ #  ¡..d69BBB9ÿé÷È %AQ7#'6553#&'#5'67#535'6#535'673#&'#5'63#53533533ï‹P    9    =™2ÈKD> 5A] ,$ .   .( L22>]ïŒ7#5##5ï·Œ//ÿçès733#7&'7''275#5335#35#tGG2Md1/GG333F33s> >-ÿåôÏ#733#67&'7&''275##5335#35#vRR! Rk30>R>>>R>>Ï)a= & ?wP??? ÿéõÀ73#32767#"&55#'655#e-<H:À¨  ­/\9 9P/oïÍ73533#67'7''275#75##5#z,++  ,:,W©$$Q( )////ÿåîq 73533#7&'7&''275#75##5#&PPP8Md/-P <<^>   MöÐ73#&''67&'#53&'67€`%&9B/-< 4'a#"Ð     &0ÿéÐJ 7#5##535#ÐxxxJaa@-RÿéõÍ73#&''67&'#53&'667#  @ ) )+, ? GÍ?+%EŽ''lÿéóÏ733#3#5##5335#™EE;U-UUÏ/,xxS@€ÿéöÏ733#3&''67&'#5367¤995   "Ï#8)  2&$wÿéöÏ733#3&''67&'#5367Ÿ==9  # %Ï#8) 2&$ ÿíôÐ)7773276767##"&55'75'75'6b %!(*/H(%(#& ,Ð''4 7(%vÿéóÏ733#3#5##5335# >>6K*KKÏ/,xxS@mÿéõÏ73#5##5353335#­9Q,HtQQ0wwo,ƒ@Vÿé£Â73#3#5##5367#35#35#VM"&&&&&¦¦a-l-gÿéóÂ73#3#5##5367#35#35#gŒ@>Q&7QQQQ¦¦`-l,ÿéõÂ%73#33267#"&55#67'7#&'f;> 6  @,-"<  Â#|  ly ¶MÿéëÂ73#3#5##5367#35#35#ÖbUƒ?])ƒƒƒƒÂ¥¥b.n-ÿé|Á73#3#5##537#35#35#l)(6.6666Á!¥¥!`-m.„ÿéïÁ73#3#5##5367#35#35#„k)(6-6666Á¥¥`-m.vÿéñÂ73#3#5##5367#35#35#v{75F$/FFFF ¦¦`-l,9ÿéî¯"73#3533#3##5#535#'67#536€U_,< KÿçôÐ$(,047##53&533#673267#"''67&75#'#33'35#š-4@3    *0 <-,!##)$(B‚o   )!  [oÿçõÐ#(,073'33#67327#"''67&'#73'#3353'#335w-3*  + )7.L 0±l )% ? Jˆÿç÷Ð#'+/7#53533#67327#"''67&75#'#33'35#¹.#,"     &Cnn  " ' Qÿéò‹ #/767'53373673267#"&53533##5#5 * =% $, $ !ucggcb  O(     &**ÿéò” $0767'533736732767#"&53533##5#5!) =% $, + "ucggci!  T*    '--qÿéòÏ(47367325667##"'"&5'67'53333##5#53±   )  6644Ï+  !  .1 x&E>>QÿíòÌ'73673267#"&5'37533#67'7¬   O %- ÌSY ! —”¼>g T_õÏ'737533#7'773673267#"&5b %-O   ¹BV# \'  Oÿéõ`73533#&'#5'67#XCF8# %* )3J%+FF+%€ôÌ'73673267#"&5'33#7'27537’) - ( G**'8: Ì   2 ('WÿíöÌ'73673267#"&5'37533#67'7±    N $, ÌQ[   —”¼>f +ÿéÒe 7#5##535#35#35#Ò‚‚‚‚‚‚‚e| |!.. ÿèî]73#3#5##5'67#35#Úƒ ‡z +<8zz] M ; Fÿèïi 73#3##"''3255#'67&'*¬¬Þe   e<+ %y!i5 2 _ÿíòÌ(73673267#"&5'367533#67'7±   H !) ÌRY ! —”¼>f  hôÏ(733#67'7536773673267#"&5J''9< C"* )Ï<:M    ÿì„Ð 733#67''37533#67'7W  D 'Ð4ƒ ¦“º>c  ÿèôI&733#7'753773673267#"&5K""$5AB$ #+  &I <:G   €åÉ 73#735#'3#735#ŒYY22†ZZ33ÉI#I#ÿéîÈ)7#'6655333#"&53533#&'#5'67#ž@g&+ …^_M!0 5$"6 3Jµ6  4+4UW3)fñÇ)733#"&55#'6653533#&'#5'67#× $  277  ! %'Ç1  '   '_8?#!lÿéõÈ*733#"&55#'66553533#&'#5'67#Ò   14'  "È8  ,    o(+OM*(mÿêóÇ 73#&'#5'67#3533##5#s€2  ,:2442Ç 69$y?? ÿçõÏ "(7373#'67#3&''>7'6''63’ 80 0y&+5? ! D] ²pC;e;>-1 %0* ' WÿéóÏ"(73733#'67#3&''657'6''6\]_K( %; P.  ?­"E' &:97**#3   CÿèöÏ#)73673#'67#3&''657'6''6Z"]_ 3 - R  "2 A.  E  ³Z81P7 .,'8   5ÿèòÏ$*734733#'667#3&''667'6''6Pop['" -$.  H  ±HHBD'6'%:1%# `ÿèôÎ$*73733#'667#3&''667'6''6s\\F  ) # 9  °?> :: *6&#<0!! .ÿêì§7&'36533#&''67#º  h?OJ %!4 I O?§ ) &"&- :=HmÿèñÂ73#3#5##5367#35#35#m„;8F!4 FFFF§¦_,k,ÿéòÏ-73&533#327#"'&'#7&'3#67'675#}KJ   ~± œj-5B)¤B//'#5P>  Z@ C ÿèqÎ(.47&''67&'763533##"''3255#&'''6[   >&##  &L  3  Î    \P  L    ÿèóÏ$*73533#3#535#3533##"''3255#&'XXXiæhX”33 ”5  ±P8  4 ;ÿèí¢%+73533#3#535#3533##"''32655#&'JABBM±PAz## z)  =* &\ÿéóÐ$*73533#3#535#3533##"''3255#&'i666?–C6 e  e&  ²N<  8  gÿéóÐ$*73533#3#535#3533##"''3255#&'s122:‹=1 ]  ]%  ²N<  8  mÿéóÐ$*73533#3#535#3533##"''3255#&'x///7…:/ Y  Y  ²N<  8  [¼ 7#5##55#35 ¼±¸I8888’ÿéóÐ$*73533#3#535#3533##"''3255#&'š %`( >   >  ²O<  8 sÿéóÐ$*73533#3#535#3533##"''3255#&'~,--47, U   U!  ²N<  8   ÿéóÐ373673##5'675367#33##"''3255#53567#GŠ  =ZmAA  KKU¶ #i   6 3JÿéôÏ.73##5'67#533567#533##"''3255#Œ[a  $"), =U ((  ,Ïj1.n  7 3YÿéôÏ/73##5'67#5363567#533##"''3255#“SX  %' 8O ##   'Ïg .1|  7 3FÿéôÏ/73##5'67#533567#533##"''3255#‰^d "%,. @X))  .Ï  #Ši,3n  7 3gÿéôÏ/73##5'67#5363567#533##"''3255#—NS   & 5L !!  &Ï  Œd.)|  7 3ÿêðÐ(73673##5'675367#3533#3#535#G‚‹  >G<>>G£H<° &v] =11FFJÿéòÏ$73673##5'67#3533#3#535#](Y^  %"6!""*i+!° †i '->..HH ÿêï™(73673##5'675367#3533#3#535#Ou  BI:==E F:ƒ  WE  * 11OÿëòÎ773533#3673#673267#"&55'675367#535#a#"" 6F1) .5   -# ?2#®  "     /    YÿëòÎ373533#3673#673267#"&55'67#535#v-<)! (,     "1)®  "     5 " jÿëòÏ0573533673#673267#"&55'67#535#67# (7 &$)   # 0*1 ®!!       5    YñÏ/73533#3673#673267#"&55'67#535#(:;;!) 5W$<2 7A4.83 4,^T:Á        ÿêóY&773267#"&55'75'75'67Ô]qr "2<0MOCE !^O*0<        HñÏ.373533673#673267#"&55'67#535#67#,66 9W# :2 6@.:2 4*]S6e 5À     ÿë–Ï=LR733#3#53533#673267#"''67&'#'6553&533&'73#67'675#'6K$$0}A  8H Z1$    Ï###"# &  ./676  ! < ; ˆÿêìÆ775&'75#53#"''3255'6'5&'75#53#"''3255'6Ú  ,   %  .    N 5Å )    5Å -  `ñÏ/73533#3673#673267#"&55'67#535#(:;;"( 2W :1 7A4/92 3*[T:à           ÿìò673533#3673#6732767#"&55'6757#535#%>==& 7V0@7 ;G,5 >9-  %bU>‡  $ *ÿé× 7#5##535#35#׌ŒŒŒŒ55kKôÏ173533#3673#673267#"&55'67#535#|!!!  1 # )   & 62!½     }ÿèëC 7#5##535#35#ëJJJJJC[ Z!1 ÿéóÌ73533#3#535##5##535# iiiXÆZiÉ………¬   Mcc@- ÿé}Ï73533#3#535##5##535# ...)h+.h888­""""Ncc?,ƒÿéóÏ73533#3#535##5##535#ƒ...)h+.h888­""""Ncc?,ÿñg¿73#3#5##5'67#35#W$ 4  (¿#s g "<Ž@[ÿú¡Ï733#3#535#53#5##535#uA'Ï!!!\W X;)šÿç÷Å %73#3#5367#35#35#35#'67&'žT!F$$$$$$  2  Å >BB,     ÿé^Ï"(.767&'7&''67'6776&''67&'H   .'®9!   0+f# YÿéóÏ73533#3#535##5##535#YCCC8…9C‹QQQ­""""Ncc?,Yÿð©Ð!'-767'7''67'67676&'''67&'    -'¥8/, b$ ¦ÿéóÏ73533#3#535##5##535#¦FFª%%%%Nb bD4 ÿéó]73533#3#535##5##535# hhhYÌ]hÎR   &5 5 ÿê…È"(.4:@73#3#7'75#535#735#&'735'6&'#&''&'''6h+'')0<1))+)     ÈX 7 77 w 5ñœ.73#673265#"&55#3'67#&''67#âP% ,'75RH2  ,œ     ;-    ÿçñB/73#673267#"&55#3'67#&''67#0 /" )(42RG-  B       8'  2î¯ 73&'73#3#735##5##5ecÛ©©®µŸ& !'&uࢠ73#735#335335ÁÁ)):((¢-Aïj7#5##5ï·j))ÿçñP073#673267#"&55#3'67##&''67#-¦2% , '43SH0 P   A- !   CÿèèÏ #753#5&''3'65753#5&'#'6Ê M ( /  •mçc(";uC, (:?k×](". %~ÿéíÉ 7#5##535#3533#''65#íIII  Éàྫ*""+ "2DÿêóÐ#).73533#3#&''67&'767#535#3655#335QFHH?A 9 6%* $ =@F+,@+¹J    JN$[=ñÑ"&*73#3#"''3255##5'67#53635#35#”PYV  E  'EEEEÑN I  E )<^Ç7#"''32654'7##5^  !Ç#'z‹cÿéòÏ!%)73673#3#"''3255##5'67#35#35#m%JQ P   = (====° € 5x $CB ÿéìš"&*73673#3#"''3255##5'67#35#35#:ˆ’Œ  s"/@ssss„   _  &d30ÿéòÍ"&*73673#3#"''3255##5'67#5#5#›(/7  " >"""¯  €  7‚ F)Zÿé—¿7#"''32654'7##5— ¿B FÆÖÿé‘Ï!%)73673#3#"''3255##5'67#5#5##FM I 7_777° †  5z &A,iÿéòÏ"&*73673#3#"''3255##5'67#5#5#v!ENP  =_===°  †  5ƒ  A,oÿèö¿7&'333#"&'&'75#  #!)¿ Cd   U ÿéôÄ $(,073#33##"''3255##5#53535#35#33535#35#ÖaP P`$<>^IKÿïðÅ73#3#5##5##535#5#5#àG=)Q)=H…)))Å(›ˆMMˆ›((((M::ÿé‰}#'+/73533533##3#3##5#535#535#5#5#35#335(**++44++P( +v )  )  3 €ÿéæy7#"''3255#'65535#35#æ /----yz 55';ÿéz~#'+/73533533##3#3##5#535#535#5#5#35#335&&((--''B't  '  '  0 rÿéð{ $*06<7#3#3#3#"''267#55#5#5#&''&'''67&'î+$$$$-  [/8  * %{ 2 W       ÿéôÏ+7#"''3255#&'#5'675##535#53533#Þ ?+> :&'7 A(>RddbbŽ8  </Z]5 <=P öÏ"73533#3#5#&'#5'67##535#`bbN5+> =%7 =(6O`º:'2/--- 3':XÿéõÏ,73533#3#"''3255#&'#5'675##535#f;775  !% "$ -!5;·6  --!GQ,4 >P ÿéó,73533#3#"''3255#&'#5'675##535#dffM 9+> ;$(6 A(9MdŠ,  *$;;%*1C ÿ釛,73533#3#"''3255#&'#5'675##535#/22,   ,/‹( ) 33 #->‚ÿéôœ73#&''67&''667#¢@   'œ ,$"  WÿóòÆ 73#33#537#'67#&'&'`SK'›`9  (=  Ɖx5.CQH  ‡ÿóóÆ73#33#537#'67#&'&'c:7l@ % +  Æ(‰x5.CRJ   ;ÿêç°73#3#3##5#'6evZNNUU° 2–! &Kÿèò©%+73#3267#"&'#67'56&'&'Ï ;8 #<$ G6 ©$(/1;  Ž8 T   ÿëôÏ"(73'33#327#"&'#7&'3#3#'6 …KI! .‡¸  •^^eep6BH‹D(:<*9GFR V   ÿèõÒ(.7#67327#"&''67&'#'66553'37&'ìK    ( +T f# /#.+'6$:C6+ (M20   ÿèôÏ*07#67327#"&''67&'#'6553&'37&'íT   !, 2K]ž&  %/#3D1- %,X1  ÿèíÑ27&''37767327#"&''67&''7&''7&¦  6``kh   "-; :, YXABÑ    0  ÿçòÑ07&'#67327#"&''67&'#67'53&53¯ CW    & )H # \Ñ  3#$ . 1,<} žÿçöÑ$*873&533#67327#"&''67&'#7&'3533#'67#wNM   # & w® œ.))9 0.¦<%1- %!F>   r005")ÿèðS17'6553'33&'73#67327#"''67&'#&7dK    " " T  $       jÿéõÒ/57#673265#"''67&'#&''6553&537&'ï(      ' : Ÿ,"5 ! %C'8* ,2M30  ÿé÷Æ27327#"&'5#'6553#3'67#&''67#Õ‹y?@3!S5   &Æ_34);,RLJT,$TT+  $ H  39ÿéøÅ27327#"&55#'6553#3'67#&''67#Ú `! R&*#9    Å^56-&.PLIU,%TS+ :! H  5Aÿè®Å73#3##5#'655#535#5#M^=ÅKjjA( %7KKKKÿè•Å73#3##5#'655#535#5#{$# O$ÅLjj@) %7LLLLB”Æ73#3##5#'67#535#5#v #  K Æ$99$$$$$¡=âË 73#"''3265'3#Ï   .Ës `\½ÿèïÏ 73#"''325'3#Ý    ÏÏ ³’Wÿè¶Ä73#3##5#'655#535#5#cR  3ÄMkk@) %8MMMM ÿ锌73#3##5#'67#535#5#x"" "M!Œ,SS9.,,, žÿéã” 73#"''325'3#Ï 1”‘  |sbÿè´Ä73#3##5#'655#535#5#hL  .ÄDtt @) &7 DDDDAÿè©Â73#3'67#&''67#OZ//D 7   Âz1$b  .:Rÿè¯Â73#3'67#&''67#]R)*= 1    Â{0$b  .:ÿé“Ã73#3'67#&''67#€@; Z L-  "-Ãt."\   ,:K‹È73#3'67#&''67#t9;L@1  'È 0% žRâÍ 73#"''3265'3#Ï   1Íb OI ÿä‹€73#3'67#&''67#t9;+B/  !(€ .$ 6  'žÿë≠73#"''3265'3#Ï  1‰† reEÿç§Ã73#3'67#&''67#NY)-D;   ÃZJ @D  +:Rÿè¯Â73#3'67#&''67#]R)+= 1    Âv."]  .:.‹Æ73#3'67#&''67#t9< B0  !(Æ $1  #ž4âÍ 73#"''3265'3#Ï   1Í€ jX ÿéóÈ59=73267#"&55#'65535'673#67'7&''675#735#3353 $?J      Èr3(  0=`l<$!>xG U  555[‹Ç7#53#3'67#&''6:#t=;ME4  ·2 %žhâÍ 73#"''3265'3#Ï 1ÍM 9:ÿèóÌ73#3#535635#'6ÄGE–0Bå)R>RR -*Ì8v|8S ÿéóÌ73#3#535635#&'ÄGE–0Bå)R>RRQ$"Ì8v|8TaÿêêÏ!%733#5##5'67#&''6635#šE2OC R 8  CCÏ :c WC   ¬2PÿêèÏ#733#5##5'67#&''635# M5TN W#B  * NNÏ:c UC  š2 ÿéÝš $733#5##5'67#&''6635#e_ 8eu |,S   uuš+R B2  …&sÿêíÏ!%733#5##5'67#&''6635#¨9,F8 G,  88Ï :c VC   ®2[ÿêóÓ73#3#3##5#53535#'65#€^/,,77N8$ 7%Ó*0==B*!k00ÿêðÓ!73#3#3##5#53535#'65#@™LGGXXrUB  UAÓ )/==B) "l//ÿèãR73#"''3255##5363#735#w_   R*llHHR F  1K[#+ ÿèãq73#"''3255##5363#735#U€   /hh@@qb  Mgw *9ÿèî{ (/73#5##53&'3673#&''67&'67#67#…Y¤^aG~/ #& +%)C 9 ! :y B{#%4        LÿïôÏ 733#5353635#35#35#˜ L ¨) "''Ϧ¦»“““““ ÿõ•Ð737'6353675#75#75#B< =K ÐŽ Ÿ²ˆ†„‚RÿïôÏ 733#5353635#35#35#š H ¢& &%Ï¥¥»“““““_ÿïôÏ 733#5353635#35#35#  C •# #"Ï¥¥¸“““““?ÿïôÏ 733#5353635#35#35#‘ Oµ- %)*Ï ¦¦»“““““ ÿðóe 733#5353635#35#35#jfæ8 -""5##6""e HHV55555 ÿõ†Ð737'6353675#75#675#=5 6B    Ð Ž Ÿ²ˆ†„‚ÿéõÁ73##5'67#&'…l,-NÁ ´$/G5('%}ÿîóà 733#537#537#37#37#^ v##" ##ÃÃPOOO±P|ÿèðÏ73533#3##5#535#7&'7'6‚***00,,*  `  ‚MM*JJ*N   rîÑ 733#535365##5##5#ggÜ5b"##Ñ 66 B%%%%%%ÿéðn"7'6767&'#''6'6y*-ePK # < / 3# $3 9O     'A]    ÿõoÐ7327'753675#635#75#3++6Ð Œ  µЇ†‚€eÿéõÏ#T73533533##5##5#3#735#335335#67327#"''67&'#&''6553&533'7n""{{"5      &$ 4À 9>    "#$  ÿêóÐ'+/=AESW[imqu735333##3#3##5#535#535#535#535#335353#3#5367#35#35#73#3#5367#35#35#33#5353635#35#35##STT^^iigg^^SSiiSfAAA¶\#%Y"'8888k\#%Y"'7777+VåK>%%7$$6%%É   ;;    A --. --%% .$ÿéÛÐ 73#5##53635#35#35#lc=1Ð ÉÉD#Y#Y#*E×Ò 73#5335#35#35#j `­6"………………Òxx$21+`ÖÒ 7#53675#3535#Ö«6K……………À``   $ ÿéÐ 73#5##53635#35#35#@3???????Ð ÈÈD$Z$Z$ÿéáÈ73#35#535#53#5##56m#*GGœEEBVœ/È:CAAÍÇrÿéìÈ73#35#535#53#5##56Ÿ$$P##!6PÈ=CC?ÍÆ C½r73#35#535#53#5##56r%%T%%#6Tr f ` ÿçöÐ(7#5#67&'67'5'67##537æH ,J$   F A] °7$& "4W S  O K&9 FÿçöÏ)7#5#67&'67'5'67##537ï0   3   6/I¯6$ " !/Q P  J  K&8 UÿçôÏ+7#5#67&'67'5'67##5367ï+   .   0(A¯6$ " "0O P  H  K&8 bÿçôÏ+7#5#67&'67'5'67##5367ð'  )   +#;¯6$# !/O P  G  K&8 ÿìíÑ -73#5##53&'732765#"&55'75'6‚_²cX &+np * 3$X[:UÑ -- 7(  1% 6  '\ÿëòÐ -73#5##53&'73267#"&55'75'6«6^:3CE  9=.Ð5! 4 <&1! 3%mÿëòÐ -73#5##53&'73267#"&55'75'6­2U43 68  /2 *Ð5! 4 <'0 2  &ZÿëòÐ ,73#5##53&'73267#"&55'75'6¥<k@9@B  $47#4Ð5! 4 <& / ! 2  &BÿéôÑ 7&''63##5##535#–#. ,#!) :\\p[[[Ñ&(,(+bb>, ÿê£ 7&''63##5##535#V& "$1 TT^CCCK K.bÿé÷Ñ 7&''63##5##535#¥& #" .HHZEEEÑ(),(,bb>,ÿèõ‘ 7&''63##5##535#ƒ18 85.;G kk‹€€€‘  L M1 iÿéôÑ 7&''63##5##535#¦# ! + GGYBBBÑ((*(,bb>, ÿéXÎ735'673#3#'67#535# $  Š$ +)4 ))¦ÿêòÎ$7'673#3##"''32655#535#53 %    ® ))< 8) löÑ7&'#5'63&'3#735#~/; b QP:››vvÑ  !)  ÿêŒÑ 7'67&3##5##535#M +=DDR666«$'*aa>,‚ÿéõÑ 7&''63##5##535#³  "99G111Ñ''-),bb?.«ÿêæ 73#"''325'3#Ô  )Œ  |nrÿé÷Ñ 7&''63##5##535#ª"  'CCS<<<Ñ)),(-bb>, ÿèuÏ&735#53533#3#3#&'#5'67#535#"$$%%$$'' &("Ž  JJ (mÿéöÑ 7&''63##5##535#«# ) FF\DDDÑ ##&$)cc?,/ÿõÐu 7&''63#3#735#~"% '$# 7RR ffCCu  4 ÿô}Ð 7&''63##53#=#C 'QQP+Ð ,eb`** ~÷Ô7&'#5'63'3#735#~48 'T! P; @££Ô   % \óÑ7&'#5'63&'3#735#€,< ` OK0™™uuÑ   . ÿò÷Ñ 7&''633#3#53533~28 74.= Q MM`Þ'/Ñ -10+:<ddYîÏ7##5#53&'73##''67&'ŽHb`KU•£DD  D7 " \ïÏ7##5#53&'73##7&'''6ŽIb_J5{£==  =1 JîÏ$*7#53&'73##"''3255#'667&'''6ZEb`F  & h{ £  4  /'$   RíÏ$*73##"''3255#'667#53&''67&'ƒ^E  % Da9 œÏ 0  +%"   +  F]óÐ73&'73##5##5#'67&'U= B1&   w  ³  CCCC  dÿéõÑ$*73##"''3255#'665#53&''67&'® 5%   )9  s  Ñš  •RF@O E7& -*.03-oïÏ7##5#53&'73##''67&'ŽIa_JV›©11 1(   ÿîôy!&+07'67&'#3#3#53&'#535#73&67##35#C H/ 37 3J=Þ2L27O!0(A #   $ Q  ;ÿçñY73533#&'#5'67#NCE<' '1 37J $DBÿêòe7'673&''67&67#B +m #4?+(>3"3`2     ÿèzÏ&735#53533#3#3#&'#5'67#535#'))))''++  ),'Ž  IN ) ÿégÐ&73533#3#3#&'#5'675#535#535#!!!!  !!¸S= ( jXõÏ!73533#&'#5'67#7&'7'6n78, +  `  22$">  [ÿéôÆ#'<B7#'6553#3#67&'#67''3#3533##"''3255#&' €nn3  /  YY D   D zE4 6>_+  +%_d$ !  TÿèôÐ9Up734733&'33&'73#67327#"''67&'#&''67#767767&'7''67'6767677'7''67'67_ :      %        L   L (\=.   "/    "+e%% bÿçõÌ#'-TY_73#33#&'75##53537#35#35#35#&''33265#"'3&''67&''67&567''6j„>7 l '2NNNNNN&     D  )"  O ÌC   C!          (  4  PÿèôÏ%;NR73#'6553'3533#&'#5'67#73533#&'#5'67#3#3#5##5'67#35#°6w?"   9    9tE>+  )++Ï M>1 0;X8 $"   $ A < $ 0ZÿéôÏ%73533#3#3#&'#5'67#535#535#e;<<22>9% !# (7=22;¸(%QP&+oÿèôÏ%73533#3#3#&'#5'67#535#535#y222--50  *5..2¸/(OY**FÿèìÏ*73'67#&''63'67#&''6œCo eA  3" ?"|s>   0Ï = / E G9   WÿèíÏ+73'67#&''63'67#&''6¢=dY9  ,9n g6   *Ï = /  E G9  ÿèßÑ073'67#&''677363'67#&''6 S'Œ#U   .M,›’&N   ;Ñ = 0   Z H:   €ÿèïÏ.73'67#&''63'67#&''6²-*@%   (-I"  Ï(0   C / :   ÿèzÏ073'67#&''63'67#&''6=.)@%   ).I!   Ï (0   C / :  kÿêìÎ73#"''3267#'6##535#”P  E  @.Î #&WfF6`ÿèîÏ*73'67#&''63'67#&''6¥:^T4   (6h `2  &Ï = /  D G:  rÿèíž*73'67#&''63'67#&''6­/PF*   $ )[Q'   %ž/ !  3 7 *   ÿètÏ,73'67#&''63'67#''69+&<#   &+D   Ï(0  E . :   ÿæé¤*7'673'67#&'673'67#&> 4*M.z g/K! K:<7Ž €4? o  1 $ @! >2 PíÑ*73'67#&''6&''673'67„E \ P<%2   :2#c X Ñ 9 ) T "G5uòÏ*73'67#&''63'67#&''6±2RI,   &!*[R( 'Ï3 &   8 =0ÿæä†,7'673'67#&'673'67#&< 4)B,p a*C   M= 47‰ w6<X  )  6 2 &  wõÏ 7'67&'&''67&'76\)&k $ %"+. >,,? 5" Ï         lÿèóÌ73#'66556#5##535#ä '3__  >/***Ì D8 7F:ki jI6 ÿéÊ73#'66556#5##535#‚ '5\\  >,***Ê"B9 6F:jooI7KòË73#'665563#735#ç 7J}}  T6hh@@Ë3* +6/WS-JÿéóÊ73#'66556#5##535#é 3Exx O5AAAÊ!C75E9ippI6eÿéóÊ73#'66556#5##535#é ,:ff  D/555Ê"C7 7E:jooI7:ÿéóÊ73#'66556#5##535#é 8M……W7IIIÊ"B7 7D:jooI7\ÿéóÊ73#'66556#5##535#é .=kk  G0888Ê"C7 7E:jooI7 ?íÏ73#'665563#735#Ü Jdµµ  qQ——rrÏ&! ")#C>  Ï73#&''673#&'#'6*$ M' Ï  &   EƒôÐ73#&'#'6#'673#&h. f  1 Ð  K“òÐ!73#&'#'6#'673#&j,a /Ð     Jÿéó›'+/735333##3#3##5#535#535#535#535#33535Y<;;@@IIKKAA<˜~‰ #  BÿéóÑ-157'67333##5##"''3255#535#535#53673535u !I&)   88II-@ )))¬ !  .9 #   +.\ÿéóÑ-157'67333##5##"''3255#535#535#53673535ˆ =#"  ..>>'5 """¬   .9 #   +.iÿéóÑ.267'67333##5##"''3255#535#535#53673535’ 8    ))77#/¬   .9 #   */ÿéñÑ-157'67333##5##"''3255#535#535#53673535¯  (    $$¬  -: #   *.eÿéóÑ-157'67333##5##"''3255#535#535#53673535Ž  :!   ++::$1  ¬   .9 #   +.tÿéóÑ.267'67333##5##"''3255#535#535#53673535›   3    $$11)¬  .9 #   */|FðÉ)733#"&55#'66567#53&''67&'Ô   @X  É   Q  XÿèñÐ#)/733##"''255#'67#53536#3'&'&'˜; E6EE&    Ð QO L:, .-Q#=6 I EÿçõÐ#)/733##"''255#'67#5353635#&'&'C S#!RR"    Ð SR OA(:S `@ J ÿæòÓ $*0733##"''3255#'67#5353635#&'&'qQ"" u $%5'uu9    Ó SR O<. .0Sa@ PyÿèõÏ7&'67&''67'&&'¯     Ï!93'IR0#,uÿéóÈ 7&'''667&'7''6Ô/ '+ÈBL>-+U! (0  *rÿèôÆ"7#5##53'>33267#"&5á<!    Æ‹yy‹(R.*  #,9 rÿìõÑ (7&''6#3267#"&553#"''326°  */1%  1 WÑ '&$&HY  o6 wÿéóÁ73##"''3255###535#w|  ZH-Á«  §'WfF5zÿèéÆ 7#5##5##535#33535#335é.I.ÆœTTœ<***f***yÿéðÇ$*73#3#5##535#35#35#"&55#'655#5#3yw$!J #5 J  JÇ"©©"""§* 7+ "772gÿìõÑ %73#53635#35#3#3#3#535#535#¡8s&KKKK6//;Ž?//7Ñ \\,97hÿíòÐ273673#3#3#3#3#535#'67#537#5367#53&'› ;79IO M(2y3   $ "- Ð "" !  mÿèóÏ#'+/7;?73533533#3#535#5#35#33533535#335335#5##535#35#m*))#y#*K""S" DDDDDÁOO -/[ [.gÿéïÇ#173#3#5##5##535#3#'3#3#73#3#5#535#535#g†;=+(::U**L((**M**Hr__bb_ÇEE4 a `ÿéõÑ (:IO73#53&'67#5&'67&'7''3##'3267#'67#3353#5#'6535#¬=‰8  /    \0  JN KJÑ   ,1 ! &" =/! 7i% " bÿéóÑ.26:>BJNRV733#3'67#73265#"&55'75#'65533#735#33535#3353#53535#35#35#™44E2$% ([[%:% w   Ñ     J>/ 17UH<# ! !$$$ ZÿèòÑ #8\afkq733#5'667#35#7'53373267#"&553633#3267#"&55#'67#5'67#367#335&'€F z A9VV# #=   KE,  , ") A <#4'  Ñ $   /  $     # '        oÿéòÏ $*0733##"''3255#'67#5353635#&'&'¯(  8"88    Ï MV S>/ /3M Z; I HÿéõÏ $(7&'7&'#"''3255##5'6735#35#É,   I & IIII# 1  9“6,ERÿññÈ73#3#535#535'2â $FFA–AEEEÈHOOGÿçðG73267#"&55#'665´  EG>  0!  (†ÿòòÉ735'273#3#535#†-./ ,,(`%-dHKLLM\ôÌ735'273#3#535#MJDD #JJ@’?Jž  STÐ 7#5'6A  $ÐT> ŠÿñôÉ735#'273#3#535#Š+,+ ++%^%+hF HRR]ÿéŽÐ 7'67#p  g 28°[ÿéõÏ #*.4:@7#5'673&''67&''75667#'3#7'6'6'6wG*     7F   ( *" 4 6Ϻ‰ 04     & ˜Z     ) ÿçëk 73#735#35#35#'67&'*¬¬„„„„„„ 8 *`))('k`D & %     ÿççQ7#5##5'66&'Ñ{K17 4+-' *)Q?.2C!%  ÿççc7#5##5'66&'Ñ{J26 3+!+( *)cTCFW'- $   ÿè]Î 73&'7367&'#5'67#   .¯ #    fd >•ÿñôÆ735'673#3#535#•& , &&!T &cG JLLPÿêóÏ"(767327#"''67&''7&537&'ìL   ", 5 78š  '+$!4$$##;  R<óÑ)7&'673265#"''67&''7&'7¾  ?R  "" 42Ñ     #     @YÐ 7#5'6G  (ÐfI %Sÿéó“)7&'673265#"''67&''7&'7¾  =Q   (' 22“  %SÿèðP(767327#"''67&''7&'77&'7Ó<  ( * 0+B        ÿç[R 7#5'6J  %RI7 pà¡ 73#735#335335ÁÁ)):((¡1PÿéôÏ 7#5'673533#&'#5'67#~ ))#   $Ï ª‚ 1 11D2{w-,;ÿéñ$ 7&'''67&''&'Ò  x  $   ÿèôÏ73533#&''67#7&'•!%$"  #!J  ‹DDP,#87%3KJ vÿéòÐ73533#&''67#7&'})3- )! %+(W ŠFFO-&?B#'XP DÿéöÏ73533#&''67#7&'S;MIA7; > 9p  ŠEEM-+GC-2GOHÿé‡Ñ 7#5'6u  Ñ¥z 8jÿéôÐ %17#5'673673267#"&55'673533##5#Œ /  !  @5555ÐT4'  !  c>>^ÿéôÐ $07#5'673673267#"&55'673533##5#… 2   $ F:;;:ÐS5'  ! d>>RÿéõÐ #/7#5'673673267#"&55'73533##5#  6 (NAAAAÐO5(     c>>ÿéîÐ +77'67#7376733276767##"&55'673533##5#8 + K '5  rceec‰") Sƒ1       ]::ÿê¦Z7&''67&'76  . * Z    ÿéò¡!73533#&'#5'67#7&'7'6bdV+0 /.%8 5$Q(  • ]DD.5UW1 )L   MÿéôÏ!73533#&'#5'67#7'6'&'`7@1# '& %'t Y  xWW9!#"8^"  ÿè¹f "7&'7'63533#&'#5'67#? m vF<<$ $ $9f    )),6D€òÑ#7#53533#&'##5#'67'6'&'t#EE- - $ m S  Ÿ!!  ;  WÿéôÏ!73533#&'#5'67#7'6'&'f6<- #" "&o S xWW:=pp=#"8^"  ÿéïÏ!73533#&'#5'67#7'6'&'dfS 3 7#!75O³ƒxWW7!@uu>$"4]   ÿéòˆ!73533#&'#5'67#7'6'&']_O"7 9%!9 4"L™  [  Q77%.NL)%<   PêÑ!73533##5'67#7&'7'6'___!6 . I%  $@¡0031$@   8(ƒÿéëÏ 73#5#533533ØUš±¡ÄÄ}ÿéôÅ733##"''3255#53567#Š`11  44JÅ\ Y"mÿéôÏ73533#&''67&'765#|="" !" "  <Ÿ00D+" 0}ÿéòÌ73##5#535'6Ú 2200 :Ì ?rr; gõÒ73&''67#'6e[1$ (92A f8T 7Ò   *  ÿéòu!73533673#&'#5'67#53&'E   1R"6 :$!; ;O3 g.. !'BB(  nÿìðÏ"73#"''32767#'67#'67##'6”S   D =1 +  Ï‘/*cn73cM'#C dÿîòÄ 733#537#537#33535#wfŽ!0(//)ÄÃOOOO°OnÿéöÏ)7365333265#"&55#'67#3533##5#x.  - #4::4²  K  =</e%%??uÿóóÎ 73&'73#3#536'&'{.1sV *~A2¤ G5>?66:2dÿéõÏ73533#3#&'#5'67#535#s1550%" %",1©&&&*%&-eb2$/&YÿèóÅ%7#3#3#"''3267#'667#'6655óji94   "  ÅX!B&07A"D5 1$^Pÿè®Ï"73533#&'#5'67#7&'7'6U"     K ~QQYY#+QÿèRÇ73#3#"''3267#735#<%.  / #)ÇK#L%4E)®ÿèòÇ73#3#"''267#735#²<%.  / #)ÇK#L%3E)YòÒ!73533#&'#5'67#7'6'&'\\H!3 8$"80#F¢ r  ¨** $-/%;    ÿçðj#73533533#3#535#5#'67&'&&://CÞ:&t:) *^%! $#V    gÿèôÆ!%73#3267#"&55#'67#735#35#35#zi  ) $CCCCCCÆ0   68+fBClÿïóÎ!%+173533533#3#3#5#535#35#35#35#'67&'q0jh{ (000000   2 µY6IY56(    cÿèóÐ*F73673#53&'''67'6776767'7''67'6776767&'Œ " ‰ )   X   Ъ %.,C' %.,C&\ÿëöÇ !%)-7#'6553#3#3#535#535#735#33535#335ór^'**2u3))'%:%ÇSD4 5>_!h<FkÿêöÏ!%)-BH73533&'73#3#5##5##535#35#33535#3353533##"''3255#&'o5 81151O1j]   ] » \\.-?     fÿèðÇ8>D73#3#"''3267'6765#535#5#53#3#"''3267'677#5&'7&'k=,+    ,,*p,?.0    09 O Ç:i   <:j  .DJP767'7&''667'7&''6'67&'7&''67''6'6'67'6š   ).8   A   & &'' 9) )+!: 91&T PÑ          2 ( wòÒ "7&'7'63533#&'#5#'67#=  Ž œaaK49!$5,AÒ     ÿçïŠ#'+1773#3#3#535#535#735#33535#3355#35#'67&',¦ ++=Þ;** 77K7‚77K7 @@@+ 'g#' )%ŠC    ( % (  "    fÿèóÏ#'+/7;?73533533#3#535#5#35#33533535#335335#5##535#35#f,++$~$,P##X# IIIIIÁOO ./[ [.SÿçöÑCGKQ7#35#535333##67&'#"''32655'675#535#'66553'73535&'ów/$$+ %     $$/ ?M ¾4 ##   %*    B3 0"\  2$*  _ÿê•Å75#53#3#"''3267#7‚2 "   #'I*K 9L_ÿèõÈ!%)?735#53#3#27&'7&''675#735#35#335'5#53#3#"''3267#7œ E  !' !! Z2 "   #tCCN! #p!€,,,*'I*K 9L ÿéòS!73533673#&'#5'67#53&'B ,P#3 9%!; <O. Q     64\ÿçôÇ)-159=73#3#3673#3#5##5'67#535#535#735#33533535#35#j„M(( 4 CH *>-&&%%OHHHHÇ5 [ J –0 eÿéïÇ'<BFJNRW7#5##535#3#3#&''275#535#535#3533##"''3255#&'735#33535#335'#2ïgg+$$#  *##$$,=  = #5# ÇÞÞÆµ  <  <  }  b " jÿéóÊ #AEIM73#5'675#73#5'675#&'7&'3&'73#3#3#3##5'65#5#35#t9'B9'0R1 ,*&&&&,d 6&&&&&ÊW  W     4 T   ÿèpj#73533#&'#5'67#7&'7'6&    O >,,  )16    ÿèYÏ"73533#&'#5'67#7&'7'6   <}RRWU"-QiÿéôÏ!73533#&'#5'67#7&'7'6q17'    j  xWW9!Bwv?'!9[   xïÏ#73533673#&'##5#'67#53&'D    ,A( 3" 9 .?- Ï      ÿêòœ"&2J7#3#'6553&'75##5#35#3353357'5337367326767#"&5ì>7°_))))<)#~3% 2  %  )… 0*! %/:   A ?      ÿçïÒ#'=J7#3#'6553&'75##5#35#3353353267#"&5536'33#67'ïC:·X+,,,?+( % % „33$ Ã3C< 3@]$#.   9 0ÿèñ 7&''&''&'''6Ú     &      ÿçïÒ#'=J7#3#'6553&'75##5#35#3353353267#"&5536'33#67'ïC9¶[---->-) %  #  ˆ99 ' $C< 3@\      .ÿèôP!73533#&'#5'67#7'6'&'6RVH- ."/ -D‘ d  /!! -- 0    ÿçõƒ"&<H7#3#'6553&'75##5#35#3353353267#"&5536'33#7'íE:±Y))));)( ( !&Š664# t -% ':  !   '   ÿçðÊ!7&'3673#7&''67&'vS!;à 8!#)e*!#'Ê#,,$g/22(j q ,"$'9ÿé’Ï 733#3#53533367'67''6iT ;   Ï775N J$”ÿéóÇ!7#5##5367#53#3'>&'ì(T!   ¡‚pqƒ  '@'  ""/ÿêÊ $(.473#3#53'#735#35#3##"''3255#735#&'''6EL Z&****I  ((3  4 ÊF* ( F2&  !(     Dÿæžž#)/73533#33#53535#35#35#35#35#&'''6LZ &&&&&&&&"    “  __ $ ! ! "    &ô73#3#5##537#'67&'×^LƒEca e["?+ )=*/ $  "™ÞË 73#735#'3#735#ŠTT//zTT..Ë22 ÿéß' #53#=##53#=#›V1gW0 >>  >> ÿèîÇ 7#53#3#5##533'6656&'u]Ñ^ Q}> j 8,%.& (-´|hh|&,E ) - ÿéoÏ 73'6573#'3# E#ÏpF0 *?pæÙ¿ ÿèvÂ73##53#67'5#'66RR f   Â>Z kA40 ÿê|Í 7'67&'3#"''3267#'67#1 0*O  Í5" ** &%R` IM"B@ÿéÏ73533#&'#5'67#F  22 ni'2ÿåïc 7'67&'67&'7''6]#*/a%)#+'-1'BK&c ' '%  iðÏ 7&'''6767'7&''6ª &#$H. /4& 2;Ï" "!  •ÿéõÈ 7&'''667&'7''6á %  È@F;*(V" )0 *hÿéó’ 7'67&'&''6767&'‹ N  ).’-(,1R (   ?>  ÿüyÇ 7'67&'67&'7&''6,<  %%Ç?"%2%, .$<O #* .ÿøsÆ 73#53#3#'35#35#735#[X_(## Î,PP,¨,2 ÿé|Ð)76767'67'67#53&'73#&''6(7  +,: 0    BnJ     !OÿèíÏ73#5##535333'>&'£<U/JXM  %¨kZZkBB'> fÿåðÏ 73#5##535333'6656&'°3E&=J  !$§jZZjD@8  "$\ÿåðÏ 73#5##535333'665&'«7L)BO ! $%§jZZjD@2   ##ÿèŸÎ(.47&''67&'763533##"''3255#&'''6‚ + Y855   8i  C Î   [N  J  ! hÿéóÎ(.47&''67&'763533##"''3255#'67&'×  \:66   : ]  Î    ZM  H & #! !dÿèôÑ!)73&'73#&''67&'#67#3#'3'65m5 : !! C ? (A$!¹    Dgg. $ ÿèkÎ(.47&''67&'763533##"''3255#&'''6V    ;###  #I  /  Î    ]P  L   UÿêòÏ 57&'67&'67&'63'67#&''6~   =   :   AMh _E )Ï   = M?  QÿéêÈ7#"''3255##53#3#735#ê  q ZZ HH""ÈÅ  ­Ìß,W3ÿèä‹7#"''3255##53#3#735#ä 'wwggBB‹‹  t‘£#9Kÿé´È7#"''3255##53#3#735#´ E1100ÈÅ  ­Ìß,V6ÿèâÏ#'7#5##535335335#33533535#35#35#â;'v'';'''';'';''¥½½****N;;;;;ˆ:::::PÿéíÏ#'7#5##535335335#33533535#35#35#íw/].w./¥¼¼****N<<<<<Š<<<<<rÿéïÏ#'7#5##535335335#33533535#35#35#ïV$F#V##¤»»++++M;;;;;ˆ<<<<<ÿéàV#'7#5##535335335#33533535#35#35#à:)t((:))((:)):))Jaa $8\ÿéôÏ 733#3#533#&'#5#”@@K”58˜K* 9Ï# FdnÿéñÏ 733#3#533#&'#5#77@€-/ƒ@$ 0Ï # EdÿéóÏ 733#3#533#&'#5#§//7q&(t8  )Ï # DdYÿæöÏ$*73533#3#&''67#53655#&'7'6n188?<' '2 2271  d  ¯ ;/1,(;   -öŽ73673#&'#'67#Po<' 1*= -@{   '%iîÈ 73#3#535#5#35#335335ÙE7À8C‚-6$$6-$È<<* ‡òË 73#3#535#5#35#335335 åG8Ç9HŒ28&&82%Ë ++  ŠòË 73#3#535#5#35#335335 åI:Ç;JŠ.:((:.'Ë ((   pòÉ 73#3#535#5#35#335335 åI:È;I‰.:((:.'É99( ÿèõ‘'+/4:D73#3#3&''67&''67#5'635#35#67''6#5'6uiqnLN ! +!,"  PPPP †   ‘ 9   2 %  -  m P@ ÿé€Ç 6<73#3#535#5#35#3353353673#&''67&'67#367o#h <    ]&: %  1 ÇBB1 F    ~ÿéòÏ!73#"''32767#'67#'67#'6›K   = 7%  Ï–. %mq;6fG$ < "c]óÇ 73#3#535#5#35#335335c-&ƒ&,R%%ÇFF5$$$$$WÿêïÇ##535#53#3#'#3#;5#35#Ög(-˜/))Q¨##¨Ë#tttt]ÿèåÄ73#735##53#=#eyySSˆbÄY5·mm66§ÿðìº 7#5##535#ì  ºÉʦ”?ÿéôÏ'7'67#53&'73#67&&'#67'h  -5D  HC%"  ! K #0$ "# HBa   föÐ73#&''67&'#53&'67€`$'8C0-< 1&`##Ð     #ÿéâd 73#3#"''3255##5##5##537##¸Vc  %%%HNd>  '<<< %4Å wwwww¡ÿê}Å"73#3#"''3255##5##5##5367#o04     !+Å wwwww¡r!òÆ "'73#3#535#35#35#"&55#'75#3'#65r€'!s"): M  M5Æzzƒ,&,(,3 gçÑ 73#7&'''6'6uMnŠ =s vÑ=5  #  mãÐ73533#"''3267#'67#73#735#$5   !& #~QQ++¿7 /$F$ÿíò„&7773267#"&55'75'75'6Ð -2`btv 4>$SVIL#&f„       ÿìòu&7773267#"&55'75'75'6Ð-3bdtv. 9)PSDG^u       KÿéôÇ$*73#3#5##535#35#35#"&55#'655#5#3K©5,p-6H,p pÇ"©©"""§* 7* !772dÿéòÇ$*73#3#5##535#35#35#"&55#'655#5#3dŽ+%[&,>$[ [Ç"©©"""§* 7* "772rÿéñÇ$*73#3#5##535#35#35#"&55#'655#5#3r&!Q"%8"Q  QÇ"©©"""§* 7* #772[ÿòõÅ 73#3#735#5#3#e‰‰ qqJJJJ)ššÅuC Q.ÿòìÅ 73#3#735#35#3#ÊÊžžvvvv2ØØÅuDPMÿòî— 73#3#735#35#3#.¢¢ŸŸwwww2ÜÜ—a9?9HÿòòÅ 73#3#735#35#3#S˜˜ ~~VVVV,ªªÅuDOMŽÿòôÅ 73#3#735#35#3#bb RR----ffÅuC!S!O^ÿïóÎ!%+173533533#3#3#5#535#35#35#35#'67&'c7wuˆ +777777 5 µY6IY56'     E€È)733'67##"''3255#'67#53&'767#b,    -   KÈ   )  %'  vÿòõÄ 73#3#735#5#3#~qq``;;;;#ÄuC Q/iÿòõÅ 73#3#735#5#3#q}} iiBBBB&ŒŒÅuC Q. ÿñòÄ 73#3#535#5#7'6'&'ÐDPæNDx \ ˆÄ­­­­­Š6+ *2,.1*YñÆ 73#3#535#35#'6'&'ÎDNãMBU""] ˆ  ÆHHHH PÿññÄ 73#3#535#5#'&'7'6_‹*1¡4%M+    Ä­­­­­ˆ-/2+4* )]ÿññÄ 73#3#535#5#7'6'&'f„'.”,#I?  a  Ä­­­­­‰8%.--/2+\ÿèöÏ#'7367'673#&'#'67#3'6673#h-$;0G$  $ ,$&!  1“,%+3( &*kUñÆ 73#3#535#35#'6'&'ÎDNãMBU""] ˆ  ÆLLLL Kÿïï‹ 7#53#3#537#37'6'&'~*’,5¤3(3 q  xvvva+ "# %Kÿêï$*73533#3#535#3533##"''3255#&'Y;<W$ ¤     < [ÿëóÆ#7#53#3#'655#5373#3##5#535#‚</ '.@´DA)$5VDrrDQðÈ!7#53#3#'67#5373#3##5#535#F*^!"") !/0Bc+00''%¶"-66ëÊ7#53#3##5#537#53#3##5#53?'`'((**q&_&((**» ÿçõ"&<H7#3#'6553&'75##5#35#3353353267#"&5536'33#7'íE:±Z*))):*( ) ! „664# z /& "(=  %  ,    ÿçïÒ#'3I7#3#'6553&'75##5#35#33533533#67'73267#"&5536ïC9¶[---->-)™99 E£ %  $   $C< 3@\     '   +ÿçïP!73#735#367#53#3#&'#'67#JŠŠhh'LE¦O]K7@D 5@P! 1  FÿéÎ7'6'67#p  %Î-a "' xÿéóÁ73#3##"''3255#šOO c"   -Á.k  hÿïïÏ73533#3#535#3533#3#535#$QQQaÖ`QSSSeÞdS­""""b$$##"‰ÝÉ 73#735#335335"»»%%7%%É@ ÿè~¤#'+/5;733533#3#3#535#535#5335#35#33535#335'67&'%/)c)1(?(13¤ HH !K,"    Hÿõ§Ï!73533#3#535#3533#67'75#T V")2&±W# &Tÿô¶Ï 73533#3#535#3533#7'75#_$\$"*4(±W$ 'bÿéóÊ (73#735#35#5#53#3#33#"&''6~ee@@@@ 4|4))&' Ê\6:OA"mÿïôÏ73533#3#535#3533#3#535#~...1~9.0//6‡=0­""""a$$$$<ÿùÄu73533#3#535#3533#3#535#F0007€60222;ˆ:2g2=Á¤73533#3#535#3533#3#535#K,++5ƒ:,---7ƒ8-DfõÐ'77&'3'33#673267#"''67&'#36533#'67#Ù  `B33      C!Ð  +/&-$YÿéöÏ!'573'33#67327#"&''67&'#7&'3533#'67#dA43     Ap  d$ £,,<'##2   K<   k%%;0gÿéöÏ#)773533#67327#"&''67&'#7&'3533#'67#hA33    Bo  ^ £,=%3! #2 #H<   k%%;0iÿéöÏ &473'33#67327#"''67&'#7&'3533#'67#r:--     ;g  [ £,4$6 #2% #H<   k%%;/sÿêóÏ!'773'33#67327#"''67&'#7&'36533#'67#v7..      7b  T£,2!$5"/$   K;  i6 *ÿæõÏ%+73533#3#&'#'67#536565#'6'&'#TUUhUJPM DQYT y  ¯ 1,!7<+   ÿëÏ"(73533#3#&''67#535#'6'&',1179 $ ( 25,\  A  ²;  (-D  ˜ÿéñÃ7#"''32654'7##5ï  .Ã@ DÇÚƒÿèôÇ%*733#"&55#'6653&''67&'#367Ü    ]     Ç<  0$  +d1   $bÿæöÏ$*73533#3#&''67#53655#&'7'6v.33;8# $- 0 04.  ^  ¯ ;01,(;  eÿéóÐ:7&'77673267#"''677&''7''7''7&'3 0<34;:   % ;<--,,Ð       "'    &pÿéóÐ:7&'77673267#"''67&''7&''7''7&'3Ç ,7//65    $76))()Ð      "&   &ÿèðÑ$A7673267#"''67&''7&'73#32767#"&55#'667#×b  ) 7# IAYÜM$".(EÇ         h5 <#" MÿëôÏ#@7673265#"''67&''7&'73#3267#"&55#'667#æI   ,*=•7          e8 >!%  ]ÿæôÏ#?7673265#"''67&''7&'73#3267#"&55#'667#ã<    "!7,   Á        e8 >#(   ÿè÷Ï">7673265#"''67&''7&'73#32767#"&55#'65#n/   ! 1m,<G: ¿   &    a9   >&& 4éÃ)/573#"''3255'675#'3#"''3255'675#&''&'¸1  81    C  +  Ö *>– *>  BÿåôÑ#>7673267#"''67&''7&'73#3267#"&55#'667#àH    1/G 5    (Á    c8 >#)  ÿèíš$>7673267#"&'''67&''7&'73#3267#"&55#'67#Ø\   +8 8# JA [×M$ I > B“      T ". ]ÿéôÏ'+/735333##3#3##5#535#535#535#535#33535f177<   ™ " ]J_ÿè÷Ï%+173#3#'6553&'#53&'367#'6'6'6® 4r 9 9 8 2,' ; 4, (> ?Ï 7-$ #,@ G'   iÿçòÇ 5;73#3#535#5#35#3353353673#&''67&'67#367oƒ)"w"'H!!p.G-+ ! $:ÇCC1E   jÿêõÊ '73#735#73#735#3#3#3#"''3265#7#w55,77Mmm‹TO  V !ÊB B ?4 %iÿïóÎ!%+173533533#3#3#5#535#35#35#35#'67&'n2mk~ (222222   3 µY6IY56'     ÿéôÏ'+/735333##3#3##5#535#535#535#535#33535%NRRZZllffQQOOffNb>>>½(((('ÿéñ—'+/735333##3#3##5#535#535#535#535#33535%ORR]]iiddYYQQffOa???‹     Qÿé«É #7'67&'&''6#5##535#k -  5  É$ %  0^^<+gÿéóÏ'+/735333##3#3##5#535#535#535#535#33535v+//33>>::,,**11+>»''''& ÿósÇ"7#3#3#3#67&'7''67#535k?<<< °# 2 9 #ˆˆq7& $5=6 :9|;. +RL=!L9&,(bÿç÷Ç 7'66553#&'7#3&'&'‹ q ! KK< " !|=, ) RK=M9'.* ÿèò7'6553#&'7#3&'&'<¯" / 7 !ˆˆo4$ "2:588T *" "(=<(6*"    hÿç÷Ç 7'66553#&'7#3&'&'’ k EE9 |;- +RK>!K9'.+BÿëñÏ1J736533#"''3267#'67#3533#"''3265#'65#73533#"''32765#'65#Z3D17 ,/%   ' W&   ' º 4 'QO57"*P.7"* ÿèQÎ 73533##5# –88›› ÿçóP 73673#&''67&'67#367 E‹9D("'J:!$ 7N >     DÿëñÏ1J736533#"''3267#'67#3533#"''3265#'65#'3533#"''32765#'65#e/B /4 (+B"   + #U"   + #º 3 %QO56#*O 16#*RaóÑ/G73#"''3267#'67#5363533#"''327#'67#73533#"''3267#'67# <   / 0# ,5E%   O%   Ñ   <       Vÿèó] 73#735#35#35#'67&'fYYYYYY  K]U= ! !    VÿéñÈ/37;?C73#3#"''3267#3#7&'7''75#535#'67#735#33533535#35#g„[j  9((*25))  &^*È>g+X// žÿéôÆ%*733#"&55#'6553&''67&'#367ã    G    Æ9  . +d -      Rÿð Î"73#35#535#53#56#53#7'7p (!K I!'Î jdŒ(  ÿêUÏ7367&''65''6+  Ï9  ( 0I2+$eÿéôÌ1J73673#"''3267#'67#3533#"''32765#'67#'3533#"''32765#'67#u,8  & 0 & (="    G"    ¸ 40 !TN/A6N/B7 YðÌ(,7367&'#"''325567#3'67#3#- '9  yT: 1=››Ì    (! & %6)ÿéÖM7#53#"''32=#335;­  ‡‡‡‡ #dI  0  wÿéðÏ#'7367326767#"&5#5##535#35#w,% +3 )<nFFFFFÏ   $zz-HÿéîÎ#73533533#3#535#35#'67&'-F..8Ý7-AFF "(m! $Ÿ////AAAA] &XÿèïÍ#73533533#3#535#35#'67&'b#!!%’"1##QŸ....AAAAZ +!eÿèïÍ#73533533#3#535#35#'67&'n!….LŸ....AAAAZ +!ÿéîm#73533533#3#535#35#'67&'.G//9Ü7.@GG!")k" %X4   dóÑ767&''6''6{ % L! A k:Ñ "' >  Kÿéñ‹#73533533#3#535#35#'67&'Y)!!)¡'2)) Uq&&&&?  ÿëS 7&'&''62 ,    # #  DóÐ#73533533#3#&'#'67#535#35#/>22A=  %%84 ,>=/B>>· $GÿýµÐ '73&'73#676767&'7&''67'6N'"`!  # ((² ) @%    "sÿèñÍ#73533533#3#535#35#'67&'{z*H Ÿ....AAAAZ +! ÿéxË #7'67&'&''6#5##535#,5!?***Ë $#  /^^<* ÿöMÏ7&'367'5#- ) Ï ?o  qGÿê÷Ï _ci7&''67&''63'33#673265#"''67&'#3#3#3#67'675#535#535#535#75#7&'f   2   Lu%$    $)3$4f Ï     )FF'+! "!3  jhGTUòÏ#73533533#3#535#35#'67&'a+%™#.++  Qº)    ÿìôe!&*/7'67&'#3#3#53&'#535#73&7##35#C J0 43 3J;Þ2L27F!0'4    E6ÿðÉr#73533533#3#535#35#&'''6@"&“'/""*#]2  ÿçð\#73533533#3#535#35#'67&'+F,,8Ü6+?FF$*+e(' '(M*   WóÏ.736533&'73#673267#"&''675#'67#BA -Y    $# 4 .<¶       4(ÿèíY-73#673267#"&''675#'67#53733&'« 2U   ' !6 .( "2R & 8ÿèô› (.73'67'677367&'3267#"&5'&'s> 1 * !  "K  ›a2 $  P*    0  ˆgÿçó+173'67'6767367&'3267#"&5'&'• ! #     8  K,& &  <%   , z_ÿé÷Ì"(.73&'3267#"&5'3'67'677'6'&'²   $(" S d  ÌeJ  ÈvC* "3 R & fÿçõÏ "7&''6&'67#53&'¤# ! (   Sk  'Ï..+'   X   ÿé‰Ì !'753'67'6767'53&'&'7'62'#B X n dh}>( #5B Æaj   ÿëðÆ!%73#3267#"&55#'67#735#35#35#W ! 111111Æ0  65*fBC{ÿëðÆ!%73#3267#"&55#'67#735#35#35#ŠY " 333333Æ0  66)fBCrÿéòÆ!%73#3267#"&55#'67#735#35#35#}d " >>>>>>Æ0  67+fBCÿìvÆ 73'32655#3#3#735#f#SII==ƾ  ¥O*]ÿëñÆ!%73#3267#"&55#'67#735#35#35#rm  - %GGGGGGÆ0  65*fBCÿérÏ733#3#5##5335#1--$0 00Ï-3ssR?ÿé{Î733#3#5##5335#255.;! ;;Î,0wwR@ÿé‹Å $7#3#3265#"&'#67'535'#€%*( " D$ÅI"% ),/B  Ò%%\%% ÿéÌ !7'67&'3#"''3267#'667#8!7+Q     Ì=)$4* &%SY'F-1*( ÿé€Ï73#3#"''3267#'67#53&'H+>6  $"!3Ïf&ND5 A`ÿéòÄ#7#5##53'>33267#"&5Ìs>/3 ''   *Ę…„—":-> $+I  tÿé÷Ì"(.73&'3267#"&5'3'67'677'6'&'º   # I  Z  Ìe I ÈxA* . T $  wÿðóÄ$73#67&'7''67#3533#3#535#}q5 (,%'++6|2'Ä( #  (u ''ÿèôu,159M73533#3#535#733#3&''67&'#535#5367'3#735#676767'27&'...)c(.ž++%    %((  ³``<<  36 i   !  1 )    ÿéñÏ#37;L73533#3&''67&'#535#67'3533#3#535#3#735#7677'7&'ƒ-..)  *-  È.//+g).cc<< 5@  ¬###6(  .#5 !T8=5  VòÑ159I73533#3#535#73533#3&''67&'767#535#3#735#7677'27'100+k-1y***%   G'*rff@@2? É      "   ÿèó_#)73&'&'7'67&''667#&'`\!0 :& 1! "2&1# .9Q1X< ;V_     2   ÿêô059=N73533#3#535#73533#3&''6677&'#535#67'3#735#67677'67' .//,g(.w...'  !   +. Ádd== 1< u   ! !*     †õÐ 73533##5#3533533##5##5#[[[[2`22`2Å     eóÒ-2BFK73533#3#535#73533#3&''67&'#535#67'3#7'27&'#735#277# 333-k,3|,,,&  +,  Ád 3>  @@ 'Ì        #  ! ÿìðk+/73533673#5##53&'3#3#3#535#535#735#F  0µ0”@WWfÞeWWAllg   ""!%   [ôÑ.3AEJ73533#3#535#73533#3&''67&'#535#67'3#7'7&'#735#77#333-i+3{,--&  (, ¿b 3>BB+È      "    $ GÿëúÅ,37327#"&55#'6553#3#"'#5##535#32655Ü [M  0ÅV66# .REN@; 1>_'R $zZj&F>OÿëúÅ,37327#"&55#'6553#3#"'#5##535#32655Þ VJ  .ÅV66#!/QEN?< 1>_'R $zZj&F>>ÿëúÆ27327#"&'5#'6553#3#"''3255##5##535#Û bU     "ÆW55! /QDM@; 2<`(R >zzZjJÿéõÐ&*73&''67&''667##5##535#ƒQ% *"0'  %EbYYYÐ        ^\ \>+XÿêöÃ"(73#3332677#"&547#67'7#&'XŽ]O    <#A  Ã!d(   %T}·NÿéË73#3#5##535#535'635#„ 555*@*55@!@@Ë%)hh)"µ1ÿéšË73#3#5##535#535'635#9;;-G.::E&GGË&)hh)$¶2 ÿïÇ7'67#53&3#7'75#Y& IRh  Xr/6‚9/} 5 6  8 ÿî›Ñ'+73#"''3255#3#3267#"&55'6#34R   C=.* 5 /Ñ}  f I1  t#((kÿéóÏ73#3#5##535#535'635#â ::.J0::>#JJÏ+&dd&'¶1=Î735'273#3#535#35#.22..$[$.77Ÿ <<@€=îÎ735'273#3#535#35#€-11 ..&["-77Ÿ <<@ 5~Ï!'-7&'3#3#7'75#535#5'6'6'&'C  A%%,/9+## '2  9 Ï  $&K    †ÿéóÏ73#3#5##535#535'635#ã --%8&--"088Ï+&dd&&¶19ÿéŠÎ 73&'#''6`  Î ¬¬& ÿéðÉ73#3#5##535#535'235#Ù (1ffO…Jff(-_:……É&&f f&$²3 ÿésË73#3#5##535#535'635#i ))"/!))!1//Ë&)gh)#·2 ÿéyÍ )73&'73#&'''667&''67&' *,kQ  %   $ «   !    cÿê÷È&,287367#53#3#&'#'67#3#"''3257&''&'''6n,+o1B% '#,  B   1 ™!"g  K#)+"!') ) !Nÿéòž73#3#5##535#535'635#Û9HH;d;HHF3ddž N OŽ" ÿçNŸ 7&'&''6+-Ÿ  #  $ &$"gÿéò73#3#5##535#535'635#Ý <<3P1<<*:'PPM NŒ!ÿêgœ 73533#67#"''32655'75#"     '"| !/ %%ÿõ` 7#5##535#35#`!!!!!›š<*f+fÿéóž73#3#3##5#'6…bTGGLL ž 0ˆ eÿéñ73#3#3##5#'6ŽXKDDEE  1‰ aÿéóÏ73#3#5##535#535'635#á ??2P2??C'PPÏ+%ee%'¶1€ðÉ73#3#535#535'635#ß//#Z$..%355É#NN *TíÌ73#3#535#535'635#Ö BB1|6BB ?"RRÌ!KK˜'– óÇ73#3#535#535'635#æ&&L%%+))ÇGG&LÿéøÊ37;7325#"&547#'6553#7'7''75#535'635#335á WW   ! !  ÊI8&%%;/?n<$">zV!Vk555 ÿéõÉ48<73267#"&55#'65535'673#7&'7&''75#735#335Š. :P! $  És4& 0=`m<# ?xGV 444ŒöÐ'+73#"''3265#3#3265#"&55'6#3¨9  -*   !Ð Y @6/   ] $ ÿéò\73#3#5##535#535'235#Ø'0iiR‘QiiS]C‘‘\  66  T ÿèó£%)73&''67&''667##5##535#a [%0 :(/B :( 0;Sbttt£    "  Wh}}}y    .??'&|ÝÈ 73#735#33535#335&··==Q>==Q>ÈL. ( wÿéôÐ$(73&''67&''667##5##535#œB     5G:::Ð       a\\<+ÿéxÐ#'73&''67''667##5##535#82 #  "'9%%%Ð    " Lbd?-oõÒ159=73&''67&''667#'3#3#7'75375#735#3#735#™>  $  ) 2 W!!!%+4 %55\^^<<Ò  $  # ,  dôÒ159=73&''67&''667#'3#3#7'75375#735#3#735#™>  #  + 4 ŽT%,7"11Ybb@@Ò   (  ' .$  ÿéÐ-26:@F73673#7'##"''3255#5'67&'767#&'35#35#'67&')5%       #V ,,,,   R  ·    @0 -6   &!1(    ÿéŠÍ #06<B73#5'675#73#5'675#&'7&''67&''6'67'6 7  %?7  %+P &  ! #& + ./ "C DÍU  U      K      + ÿéŽÑ"73#"''3265#'6##55#35*X  I H11Ñ ˜5)} "!m~-NÿêõÑ4733#'665537#'6#3267#"&553#"''326‹I(} QA "V3%.Z   Ñ=1( $G \T  l7 ÿçóÑ6733#'655'6367##3267#"&553#"''326T ] J¯! 1 X S€U +.  :9~ Ñ 9/.#,D   EN   d5 QÿêõÑ3733#'65537#'6#3267#"&553#"''326ŽF'xM= !P0 +U   Ñ=4& '0G \U  l7  ÿçô˜7733#'655'6367##"''3267#3267#"&55U] G°! 1KT  T *1  ;8˜ ($" 0 )'0E?ÿéñÐ4733#'665537#'6#3267#"&553#"''326€K+„ TA W6& 1]   Ð>4& %G [T  l6 oÿêõÑ2733#'65537#'6#3267#"&553#"''326Ÿ;`>0 D% # H Ñ=4& (0F [U  l7 ÿèpÐ"(,048733#"''3255##5#'655'6367#35#33535#3352'     !1!Ð – )%%+.N 6H ÿëƒÏ1733#'655367#'653#"''3255#67'533"Q* (  <    Ï =2' ).G  O0 U  kKÿéöÏ$73533#3#&'#5'67#535#'6t88@3&"),2@# à ''')#$+cc.##-'  ÿéõÏ$73533#3#&'#5'67#535#'6<1SSi]%: :&$9=$_i; Ë**+03]Z/-+ OÿéöÏ$73533#3#&'#5'67#535#'6v66>1&!',2>" à ''')#$*b_+"#-' bÿéöÏ#73533#3#&'#5'67#535#'6‚//6)!$'6 Ã''')##)`a-"#-' !YÿéöÏ$73533#3#&'#5'67#535#'6u66?5(!!%1?" à '''($"']_+"#-' hÿéöÏ$73533#3#&'#5'67#535#'6€007* )8à ''')#$)a^)!#+'  ÿéÏ%7#5'67#535#'673533#3#&[#.4  ..55@WW!!(' $ '''gÿèôÍ$73533#3#&'#5'67#535#'6†33<5! !/; Ä &&'60W^/%(2' CÿéöÏ$73533#3#&'#5'67#535#'6j ==F8*'+,5G( à ''')#&,fh/%#+' ÿé{Ï&7&'#5'67#535#'673533#3#O '-&&--VUR!(' " '''VÿêíÑ"73#"''3267#'6##55#35xj  ] P77$$Ñ™/… %$m~-aÿêíÑ $73#"''3267#'6##55#35ƒ_  S K44!!Ñ ’! $#m~-IÿêíÑ $73#"''3267#'6##55#35ot  i U<<))Ñ “! $#m~-AÿêìÑ $73#"''3267#'6##55#35jx n Y@@,,Ñ ’… #"m~-*8ÜÑ 73#3#53635#35#nZ– ²8.„„ŽŽÑ 79ƒ 1a&ÿèÚ. 73353#5#533w=¡=.'= 1~ÿéëÐ733#"''3255##5##53ª-  ,Ð%|  d¯¯”ÿéiÐ73#3#5##53635#352%?B. --.Ð MaÍ H)c++ÿìpÐ73#3#5##53635#35>"CG3//3Ð M`Ê H)d**ÿéhÐ73#3##53635#35#2%?AA --..Ð MNÎ I++ ÿèôA!73533673#&'#5'67#53&'B !# 'J4 7($80$L+@   ++ _ÿéóÊ*7#5##53#3533#3##5#535#'67#536ðg5LU '55>>CC: 'Ê-, ...‡ÔÉ 73#735#35#.¦¦ÉB( # ÿéí~)7#5##533#3##5#535#'67#53673#3í²gII]]``G +]k +~&):   eÿéóÊ*7#5##53#3533#3##5#535#'67#536ða2IQ $22::AA8 $Ê-, ..ÿéwÊ(7#5##5#5'75#'67#5373#3533#wB] '*& 39 ##Ê-,›.,dÿéôÏ$(-7533'67#3&''67#&'#'65535#67©1 , ¯  10!  #<. /8TD1Bÿéí’)7#5##533#3##5#535#'67#53673#3í²gII]]``G )`l -’*-A""   uÿéóÊ)7#5##53#3533#3##5#535#'67#536ñU,@G ++33770  Ê-,..ÿéÊ+7#5##5#5'75#'67#53673#3533#6Y}17;2 "BI --Ê-,Ÿ)'  :òÒ$0@DH73673#'67#'#"''3254'7##53#3#535##"''325##535#35#jYd   !pV&4{5]   IJJJJÆ + *€‘6 G ÿêôM #)7&''63#"''3257&'''67&'|2@ 65'B F    )  DŠ M(     tÿèöÐ $7&''6#5'753'&'&'µ " +RBE;  Ð !v64  ]ZO    ŽÿèöÐ #7&''6#5'753'&'&'  #@142  Ð !w74  ZWO     cÿéðÏ#73#3#3##5#535#535#536'&'Æ )922<<==449H 3  Ï##::## 8ÿéï¤#7&'73#3#3##5#535#535#536i ] 1LDDSSPPBBIb ¤   ++\ÿéðÏ#73#3#3##5#535#535#536'&'Å ,=66@@@@66$+( +Î: > ;(!&]$E*2*#kðÏ73673#3#3#535#535#53&'R 3 7`UUgàfUU_6Ï      ÿçîf'+/4973533533#3#"''3267##5#'67#735#335335365#35#>*99G  40 : ,7 2>R*%œ&#5,+[ - # ++" , ' gÿè÷Ï-1773533#3#3##'32765#&''67#735#535#35655#q1<<33? ,/ -&- /+**1E 5½6 &/'' )8$9 uÿëòÎ 7#5##53&'73##"''3255#òV3H|0   8­00 =[  W[ìÑ73#3#3#535#535#53&'736¬4^NNbÜfNN^5 7 Ð  [ÿéöÐ,0487&'#673265#"''67&'#'6553'33#3#735#â"    ;LF..//Ð /3!+3)$IH<- /6S##%E#bÿéöÏ!26:>7&'#5'63&'3#"''325'#"''3255##535#35#73#£% L  ->9  ( 8Ï " .s  mt  1‹%8-\?ÿéôÄ $(.47#3##"''3255#5367#'65535#35#'67&'ë6/&  '0!59999  X Ä _:  6_ [;4 ,6lQ=4"   ÿêêÈ#'-37#3##"''3255#537#'665535#35#'67&'êRG;  B4N 9llll  i ÈF  FSF4 1$_; & "    2ÿè÷Ê#'-37#3##"''32655#537#'65535#35#'67&'ñ< :-   1" = 8KKKKY Ê^> 9^\<7 -9nQ:3$  Pÿè÷Ê $(.47#3##"''3255#5367#'65535#35#'67&'ò21&  )03<<<<P  Ê ^>  9^ \<7 -9nQ:3$  Xÿè÷Ê $(.47#3##"''3255#5367#'65535#35#'67&'ò,,"  %,34444  M  Ê ^>  9^ \<6 ,9nQ:3#  cÿè÷Ê"&,27#3##"''3255#537#'65535#35#'67&'ó*)   $)20000  I Ê^>  9^\=6 ,:nQ:3#  [ÿè÷Ê $(.47#3##"''3255#5367#'65535#35#'67&'ò,,"  &/35555  M  Ê ^>  9^ \<7 .9nQ:3#  mÿêôÇ"&,27#3##"''3255#537#'65535#35#&'''6î$" &0))))5  4  Ç`A  >`QC5 4>^K>4!  ÿçìÍ 73#53&'3#'65536'&'_ÎX> ?±o F  Í  -0' &8[ÿçï—  73#53&'3#'665536'&'¬:„5* %n I*— ! $ *  ÿé]Ž7#"''32654'7##5] "Ž*.”¥`ÿêóÐ 73#53&'&'73#'65536µ1‚; D #oI Ð  -0( %9XÿëóÑ7#'6553&'73533#3#535#ñn82$%%/p.$·K>1 1:V  V44GGaÿéóÑ 7#'66553&'73533#3#535#ñf 6 2!##,i+!·L@0 -"X  W55HH\ÿèöÎ$7&'3673#3#&''67#535#€   O !9A;& '1 3 9=8Î (!474 #/+Bÿí¦Î &7#53673#3#&''67#5365'&'q' "% # !  ‰* "/ ^ gÿéöÎ#7&'3673#3#&''67#535#Œ  F  3:5" "0 0 471Î (! 361 !/+GÿèòÐ&7&'3673#3#&''67#53655#x  L  %>KI534 9<@5Ð )!50."-!>ÿîªÍ%73#3#&''67#535#536'&'‰$') " " "% /  Í !'+%Mÿè©Î &735#53673#3#&''67#7&']!    #  e# & (7yTíÑ%73#3#&''67#5365#536'&'¿ %;DF& !0 5=@8L 7  Ñ$"%   ÿèŒÍ$7&'35#53673#3#&''67#:  0)<  124 "(.Íc'' $. '4òÏ$7&'35#53673#3#&''67#±'!/#'(  "%Ï  Q% *>ÿñ¾w%73&'73673#3#'67#5365#&'E  0;= /&03.O W   * / @ÿèï£#)7&'73#3##5#'67#53655#5365#o  b '$++0+-#\.£   *DD/#O*SÿèõÏ#)73#3##5#'67#53655#5365#'&'à *$$,)#!I *  Ï6]]@5 %^6(sÿåóÑ!%7&'73#3##5#'67#535#5365#K  t ;1==B? 6>>/xBÑ   9YY9$-9b99bÿéóÐ &73673#3##5#'67#535#5#'&'oG  !$( !!Q"  ¢7\\@4777. wJÿéóÏ!%7&'73#3##5#'67#535#5365#~  ^ !((-, $%' [ ,Ï  8\\@48b88hÿéóÎ%73#3##5#'67#535#5365#'&'Í "' B!  Î8\\@48a88u dÿéóÏ!%7&'73#3##5#'67#535#5365#‹  R " &$ !"I%Ï 8\\@48a88vÿèóÐ#(7&'3673#3##5#'67#53655#5#“ @  GÐ $7\\?5 %77(ÿéßÐ733#5#535#535#53'&'7'6vR©©¡¡§UD  ª ÐR•''H  ! eÿéíÏ733#5#535#535#53'&'7'6 8nniim6)  s ÏQ•''H  ! nÿéíÏ733#5#535#535#53'&'7'6¤4ffaae2$ j  ÏQ•''H  ! [ÿèñÑ!)73&'73#&''67&'#67#3#'3'65c; : "# G A *C&#¹    Dgg. $ÿèð™#'73&'73#&''67&'#3673'673#_`0 #8A,(>6#'? W7 /O…     EA1DÿëÎ,B73533##'3267#'67#3733##'3265#'67#73733##'3265#'67# * #       ;      ². ' S E 09 1D 08 0zÿìôÎ %733#3#533#"''3265''67&'¬''1t/   K  Î!!S  C '   €ñÉ&7773267#"&55'75'75'6Ü.068  $& 0É" % ÿéùÎ $57'67&'''6767&'3'667332767#"&50 9 (,-  ' MW+Î# 3 &" 30( $+J   FõÐ%+73673673#3#&'#'67#5367#7&'T  ,o‡7% -F' +@ I+¬    5  =õÐ%+73673673#3#&'#'67#5367#7&'T! ,n‡8$ /F' -@ J+©    8   mõÐ$*73673673#3#&'#'67#5367#7&'Q   -p …5# ,G($< D+¶        (  dõÒ*7&'3673673#3#&'#'67#537#A  S *o„5! ,C) )?GÒ        ÿëä)3Q733#3#&''67#&''67#5353353#5#5335#&''67#&''67x,,Z9   5  7'"O¡    3           /WQ      ÿèè‹*.273733#5367#35#3#3#3##5#'7#535#735#35H!<'¿?)5/I¢F]]^^R_H}}B~   "&   / )ÿèØx 73&'73#3#3##5##535#)NL¯     {{{g    6 5ÿçÕr"(,06:733#"''3255##5#'655'667#35#33535#735f7; 84 13 ,  00B8{10B8r T  $   '  ÿéäp)/5767&'7'#"''3255#'67'67676'67&' ./>   &&""?# p f "       E     ÿéÜ`73533#&'#5'67#:=;;0" "#/ 42H7? lîÏ 73#5'6773533#3#535#'&'U '"222,k,2PÏc &  ÿéíà &,73'67#&'367533#'67#7&'&'Ð  ¸4*mV]QHcz(" 'à  N.11%NMÿéíŽ &,73'67#&'367533#'67#7&'&'Ð  ·3 *lU`K<] ~% $Ž   6 "% # ?  7   jóÐ;73#&''67&''667'3533#3#&'#5'67#535#¡D    ·&((--  !(-&Ð         ÿéíb 7#'655í¾b*& %) ÿéîg 7#'655î¾g*& &.1ÿéðQ&7773267#"&55'75'75'6Ì!%NPXZ *'FI>@MQ         /ÿêñO#7367&'#"''3265'3'67#‹" .  J:1(&O     91 $?u» 7&''6[  » Q +(' ÿèò\7373#&''67&'67#67# T  {/ L,'*E 6# Ex D K   % wGñÏ!'73'67#'6'&''673&''6ª2 &   E  &7  Ï R  ;   8 vÿîóJ !7&''67&''33267#"&5·  &  `  7  J   2 KÿêòÏ$*73'67#'6'&''6553&''6›L  =( ]) :&W Ï (# y/.C ?Y ,)' ÿêõg73#&'#5'67#535'2Ì "*haF B #< AZe"&Sg -0# _ÿè÷Ï%+7'673'67'&''6553&''6ª  B  p \' 5&A • 03$,†*(9''8Q   YòÏ$*73'67#&''667#'6'&''6vb  %0 ,4 % G7# 'Ï        1   cóÏ#)73'67#&''6767#'6'&''6vb  %1 -3 %  G 4! %Ï       ,   tíÏ#)7'667#'673'67#&'&''6›$ $  b %%!% 4! %    D  ! ÿéóÉ3767&''67&'#53353#32767#"&55#'6Q $ 5•=  "J CÁ     hvcbuI PRhÿéðÏ#'7367326767#"&5#5##535#35#h3, 1; 1BzRRRRRÏ   $zz-HrÿéðÏ#'7367326767#"&5#5##535#35#r.( .5 ,<rJJJJJÏ   $zz-H'ÿçðÏ#'736732767#"'&5#5##535#35#'OB HV>8 IJ °Ï  &}}.H~ÿéðÏ"&736732667#"&5#5##535#35#~)# (0 $6 hAAAAAÏ    $zz-HƒÿéðÏ"&736732667#"&5#5##535#35#ƒ%! &- "5 d=====Ï    $zz-HXÿêóÏ/73533#3673#3#3#"''3267#7'67#535#i#$$ +< TOQ! Q  # :+#µ  2,DÿêóÏ.73533#3673#3#3#"''327#7'67#535#V*** 1D`[[&[  '%B2*µ  2(._ÿêóÏ/73533#3673#3#3#"''3267#7'67#535#p  )9 PKM  N  !8) µ  2, ÿêóÏ07#'67#535#53533#3673#3#3#"''3267#T;0hWAAAA(! :X!z{ L  1 lÿêóÏ/73533#3673#3#3#"''3267#7'67#535#| %3 IDH  G 1#µ  2+  ÿêîÂ*A73#"''3267#'67#3#"''32665#'667#'3#"''32765#'667#  P O E Jfi  $)ti  $)Â7 : *R=' ""E$">& 7F%"ÿêî•)?73#"''3267#'67#3#"''32765#'667#'3#"''32765#'667##¿  O L BHdg  #(rg  $)•+ - =C $5 B #5 [íÈ7#533#"''3267#7#'6L,Ÿ 9   = D 72µ#1 #5"q[òÇ7#533#"''3267#7#'6•]"   $! ¶#2 #6"oÿèôj73533#&'#5'67#t33)  (O%(ED&% ÿékÐ#'73#"''3255'67#5353635#35#35#7'   ) *>  //////Ð º  *'p 299GÿéõÊ373#3#5335'6'333#"''67&'767#'7#ã  !Z 2p9  96/<   ""#Ê4<vc}($4QÿéõÊ373#3#5335'6'333#"''67&'767#'7#ã T  *f6 54-7      Ê4<vc}>' !'4ÿéó373#3#5335'667#'7#5333#"''67&'á 117|C„ "!.FOJCS   H5LO #*   WÿéõÊ273#3#5335'6'333#"''67&'767#'7#ã Q +g7  21*5   "Ê4<vc}A !4ÿé Ê273#3#5335'6'333#"''67&'767#'7#“ M +f4  /1*4   Ê4<vc}=( !&4ÿèñÃ$73#3#"''3255#353#5335##535#âg^  JzJ^gà  xP5HH5P—ªQÿðóÄ%73#67&'7&''67#3533#3#535#\‘F!$ 3737::H¢F7Ä( # (u ''Aÿó­Å&7#53#67&'7''63533#7'675#f`- !$&&&*-8&´)  H# 'eÿðóÄ%73#67&'7&''67#3533#3#535#n;  *0,011=Ž=0Ä(# (u ''8ÿðò“$73#67'7&''67#3533#3#535#C¤Y&)9@3AAATºRA“  PTÿó´Å&7#53#67'7&''63533#7'675#pY)  !  %(2 ´& H$  'KÿðóÄ%73#67&'7&''67#3533#3#535#V–H#& 4;5;<Ž<3    Cÿîð’%73#67&'7&''67#3533#3#535#Ó}15 FM=UUUhàdU’  R ÿônÄ$7#53#67'7''63533#7'75#/['   $"$(2("³%  E%  ) ÿîvÄ&73#67&'7''67#'75#53533#6 i0 !& "b+4)%%''Ä* #  ( ! fðÑ 73#5##53&''67&'®8f; 6 Ñ "#$    ÿì’%73#67'7&''67#3533#7'75#‚? ,2,///47C7/’   QFÿè÷Ï-1773533#3#3##'32767#&''67#735#535#35655#T=KK@@M  9< ;/: 7455=Q,A$¾8 ' -)* (:$7 ÿèôÏ-1673533#3#3#"''3267#&''67#735#535#3565#geeRRa   GQ OTTPPWWg{>T>½: ' (+3  /:%; cÿè÷Ï,0673533#3#3##'32767#&''67#735#535#35655#n2==55@ .0 /&/ /,++2F!6½6 &/'' )8$9 ÿçòŸ,27733#3#3#"''327#&''67#735#535#5335#367#u__LOd  D"@J%M >E LUU]]:9S9:Ÿ1   +,  /A$=ÿèôž-1673533#3#3#"''3267#&''67#735#535#3565#N@HH==Q  :@ A5 43 5::@S*@%’  1%!0 .CÿçøÏ5;7#67327#"&''67&'#3#"''3265#'6553&537&'ñ6     7/  I  ¨D,> )9$P%L39- -7P''   ÿèï97#67327#"''67&'#3#"''3267#'6553'33&'7êP     SC  /b ƒ% "*("" "2?&/+ $.=  ÿçöp87#67327#"''67&'#3#"''32667#'6553'33'7íO    XH  4h$a!  %0 " #. PÿçøÏ4:7#67327#"''67&'#3#"''3265#'6553'37&'ñ1      4+  F  ¨?*> )9#$P%M 59- .6P''   ÿéó‰87#673267#"''67&'#3#"''3267#'6553'33'7ìO     UE  2ft" %7  ,6)! !+3  ^ÿçøÏ6<7#673265#"''67&'#3#"''3265#'6553537&'ò-     0)  A ¨8!(> 9"%O%N0;+ .6P'''  wÿéòÌ'73#3#67'7&''67#535#535'2à &&29 &*+4&&3Ì"$1  & /$nÿéòÐ'73#3#67&'7''67#535#535'2ß **7@  *009))7Ð#%0  & /% '6óË73#67&'#67'735#35#'©E  [:# ËX  +#  e28÷È7#67&'#7'535#35æ+   +' AAAÈK    &-  ƒ(ÿéôŽ7#67&'#67'53535ÓP  $[0!* ƒƒƒŽX   57  œ"Ÿÿê÷È!7#67&'#67'5353535ë  %   '''Èq $IU  Ì /MÿíœÐ $*07&''63#3#67'675#535#&'7'6w   . %;Ð     E I3Zÿéô—73#67&'#67'735#35#Z=  E% YYYY—]  ;9 }9wÿêõÉ 7#67&&'#67'53535â0  ! CCCÉr  0(V  Ö0+&ð’73#67&'#7'735#35#+¡C  R#2.! yyyy’C     G % “ õÈ 7#67'53535&'76ä?  ---    È_F ®&-  +ÿèôÇ7#67&'#67'53535ËH + d/'$0 xxxÇx   GL  Ð!!2 ~ÿêõÉ 7#67&&'#67'53535ä-    >>>Ér  0(U  Ö0aéÅ 7#67'53535&'76Þi VVV"%1Å^B  «%-  #" ÿé…Ï'15N733#3#53533'67''6767&'3353#57#7''67''6767&F'',w    KJ\\JJ   Ï))7     -,Ž Q>       ÿé|Ï'15M733#3#53533'7''6767&'3353#57#7''7''6767&A##(o      GEWWEE     Ï))7     -,Ž P>      }ÿìùÌ&733#7'6753773673267#"&5¡% %    ÌFe ¢žÃK b$* „ÿèôÇ73#67&'#67'735#35#„^*  2 9999Çp  !NT  ¤N ÿéyÎ&733533#3#53'67&73#5537$$%n)  R@¼9KS $% 7t o[  ÿñìÉ!*.7367&'#"''325567#3'67#3#-ž$6  €T; 7@ØØÉ #+Nk q(?%"2w(ÿìóI73#3267#"&5535#0ž’jj2  "Ð 3SCb P=S3  ",ïÑ73#3#353#5335#535#'6B’Tee9«8cc5 Ñ 6*<<*6  ÿõyÐ 73#3#753#55375#535#'6$E'++J-- Ð.S=U ZEV. sÿéôÏ735333#&''67#535#337#13%" #&),#7¦))I1 10!%-6) 6pÿèõÏ73533#&'3##5#535'67#y/2) %£,,K#$FM00MC',FuÿèñÏ73533#&'3##5#535'67#y/2%  !£,,K#(Vb00cT.,HiÿéóÒ-2=CGKQ73&'73673#3#3##"''3255#535#5365#5#35#"&55#733567#35#&'i#   ,$  VVR'.K %U D U UU  ²  ]    ]  5    ? =    ÿçõf 73#3#353#5#5335#535#'6EFjj@¦?jj5 f. #  …NóË#(733#"&55#'665#53&''67&67#Ú   `  - Ë   H     ÿéîV73#3#353#5#5335#535#'66“Jcc:œ:cc;V  "   ÿéðX 73#3#353#5#5335#535#'6?”Nff<¢>ff?X  !  LëË #'+/37;73#735#33535#3353#735#33535#33573#735#33535#335-¥¥77J777J7¬dd)@)"cc(?(Ë=% <%%<% ÿ÷gÐ 73#55375#535#'673#3#7P; $$ 1$$ PY WEU0 $ 0Q^ÿçðÑ.OU733#3'67#73267#"&55'75#'6655335'673673##"''3255#7&'œ<<@-    /,!2+ 0  ,Ñ     G9/ '!Qƒ   )   ÿóbÐ73#3#753#55375#535#'6!4!"" 5 ""Ð0UA\ YFX0 ÿéðK 73#3#353#5#5335#535#'6<•UffA§>ff5K$ CëÑ &*.2O73&'73#3&'73#3#3#3#5'65#5#5#'6767767'67'67'67[dÖm '/****1s .!!!!!P   E& Ä 8    : (    ÿòx™ 73#55375#535#'673#3#7`I**  ?$))9F E1< 9 ÿéçÏ)173#"''32765#'6&''67&'763353#9¢  — a`s›Ï —7 t   RTgWÿéîÏ)173#"''32765#'6&''67&'763353#wi \ 9    ?DkÏ —6 €  XZlKÿéíÏ*273#"''32765#'6&''67&'763353#oq  e =    DKqÏ “ ~  XZlaÿéïÏ*273#"''32765#'6&''67&'763353#~c U 7   :>dÏ “"{  XZlLÿéóÐ373&''67&''667#35#53533#3##5#'L! ( ) % # ?9LL--33KÐ   j ##((eÿéóÐ473&''67&''667#35#53533#3##5#'C  !#     4 .??%%**>Ð   j ##((pÿéóÐ473&''67&''667#35#53533#3##5#'•>       / *::!!%%:Ð   j ##((HðÎ473&''67&''667#35#53533#3##5#'}M" +"( "  ? *BB88AA;Î     a`ÿéóÐ473&''67&''667#35#53533#3##5#'ŒE "$ !   6 0BB'',,AÐ   j ##((kÿìôÅ'+/73#"''3265#'67##32667#"&5535335ux   .4 +$u` # 5Å/# 8L(  {****bÿíöÐ$(,733#32667#"&55'6367#3535#Š<$`  0% / . Ð T1  }$3333ÿé‡ÏCGKO`7335#535#535#53533#3#3#35335#535#535#53533#3#3#353#3#3#735#7677'7&'  uyykkGG!3>ËT XX   Ue  * !    ÿëp¦!'-767&'7&''67'677&''4'''6X! $      ‘2#P^ÿîó¡!%)733#3267#"&55'6367#35#335Œ2'] ( 4# +'.¡  C  ` =!!!kÿíöÐ#'+733#32667#"&55'6367#3535#’7"Z  -# * )ÐT1  { $3333 ÿéxÐ(,073533#3#3#535#535##"''3255##535#35#,**$$+l.$$,b   55555à   Jh  *~"2uÿéôÑ *7#5##53&'73#3#33#"&''675#ïL.4S$$  "   !»**  3.1,> jEÿëðÑ/733#3'67#'665533265#"&55'753’CCJ g /;(  ! Ñ B6+ 'K!   EÿçðÑ/J733#3'67#'665533265#"&55'75333#"''32767#'67#536’CCJ g /;(  !  9  '/ & "Ñ B6+ 'K!   25 :+0ÿèîÑ/73267#"&55'75#'66553533#3'67#À0 '   7AAV D‚   C8+ )N1 Xÿìô@ !7&'&''33267#"&5''6²  7  @"  @  0  4%  ÿéìÑ5733#3'7#'66553367327667##"&55'67djjt  £ G+$$9 0  Ñ =3' $G6   ÿèðÑ/732667#"&55'75#'6553533#3'67#½>-),4F__p W‚    C9* ,4M1 >ÿèãF73673#"''3267#'67#H6Q=9/ 14  0 0  ÿèðÑ/732767#"&55'75#'6553533#3'67#½>".),4F__p V‚  C9* ,4M1 <ÿññH7353#3#3#5#<•““„˜%#"ÿèðÑ/732667#"&55'75#'6553533#3'67#½> -),4F__p W|   C9* ,4M1 5ÿíò;"7&'33267#"&57&'''6—     ( k  u ;-  2   0ÿéïª-E7#'6553533#3'7#73267#"&55'7#'66533267#"&5€&9NNS?02  & /(  M   s2:99%      F%   ÿèëÍ 7'66556ß Mf lÍ EE; 1!W4ÿìôP$*73673267#"&''677&'''67&'f'"#2 & 1   0  “  <'* ,  B    2ÿèég!%)-73#3#"''3265#'675#5367#735#33535#335G˜DR F= /9GA11C1t11C1g> " & ! /ÿèïe73#735#3#3#&''67#5367#GllšDXN19 ? 6EPDe( % 8ÿæóM73'73#&''67&'#67#@KL )3$!1 (T J<      ÿçñÏ1733#3'67#732767#"'&55575#'66553mTTq \GI( 7&..9 MÏ      H;. +Q ÿêíÐ4733#3'67#673267#"'"&55'675#'66553rfffQ$#( 2 > QÐ     I=/ +!SkÿéôÐ(76767'67'67#53&'73#&''6C ' #64F ;* OnJ "$_ðÑ(1073#'67'67#53'67#7&''6ƒfJ A;*Hb+ƒ8VÑ     .  mÿëôÐ(76767'67'67#53&'73#&''6C ' #64F ;& KnJ "$=ÿéÀ{(73#6767'67'67#53&'&''6~5F  > " $6=  , O{   1  7   ÿçñ¤*73#6767'67'67#53&'&''66c(( B: F '&Fjf2N HR¤   # I+ÿæ»l(73#6767'67'67#53&'&''6k:Q  )I / .GD &0 Yl  -   9   Jÿéðž(73#6767'67'67#53&'&''6œDY !J ,*?J5 až  :DNÿéôÐ(76767'67'67#53&'73#&''6t" %S 2 #-E  @WN%4 cm I "$ ÿé’Ð(76767'67'67#53&'73#&''6,D )%84G :  1 On J    ! ÿé„Ð(76767'67'67#53&'73#&''6*= $ 1.? 0   * FnJ !  !?ÿúã'7677'67'67#53&'73#&''6e D ) ):6E :- N^5      nÿéòÏ )73&'73#&'''667&''67&'u4 /xW*   # # ®      ÿé…Ï )73&'73#'67&'67&''67&' 1 *r H  0  & "«   -    ÿèñ‹ )73&'73#'67&'&''67&'76e^ÙB) $x"-. >'-? 8' t         ÿèó“ *73#53&''67&'&''67&'76|cÕ[& !v"-0 ='!!' 8%“ %     JÿèõÍ )73#53&''67&'&''67&'76Ÿ @˜B !S !# '0 .Í 4    \ÿèõÍ )73#53&''67&'&''67&'76ª9†7  M   "+ * Í 6    Uÿð£Ã '73&'73#'67&'''67&'76YH  ,      ª   +  ÿè^Ï"(.7676767&'7''67'67&'#'674'#     ,&‡9!   .+n" ÿétÍ )73&'73#&'''667&''67&' &)dK  #     «   !   QÿéôÏ'7'67#53&'73#67&&'#67'u (.@ 99   H #0# ( HB`  gÿé÷Ï'7'67#53&'73#67&&'#67'„!*9  30    F #.# #%JAb  fãÐ73533#"''3267#'67#73#735#$5   !%#~QQ++¹: "0 $J( ÿéò`%7'67#53&'73#67&'67'F:Sh ^b  %L&       A    ÿéò`$7'67#53'73#67&'67'D6L\ha  " X "      9 #  KóÇ!(.473#3##"''327#67#5367#3&'365##3'#3&'×  š;(L1*J#F(V*RÇ     šZãÏ 73#"''325'3#Ð  6Ï^  HHbîÑ173533'73#67&'#"''3255'67&'775#a)a   %(  (1 a¼       ÿéôa&73&'73#67&'67'5'67#h_`   K$ "  4LP    4 )  )  RfÉ7#"''3255#'65535#35#f   ( &&&&É^    0 .iQóÐ -73#"&55'633265##3#"''#326†V,. AK*%%- 3  Ð =  0! #  LvÑ &,73#"''3255#'67#5353635#&'&'B&   0 // Ñ[   1 >  )  ƒEòÉ(733#"&55#'6553&''67&'767#Ù "_    IÉ   9     ƒKòÉ)733#"&55#'6553&''67&'767#Ù "_   HÉ   9      KŽÉ "(.7'6553'#33#3##"''3255#&'''6, jFF9JJ[$ %K  2 £% $3&     MôÏ73533##"''32655#&'@ @  ¶@ ;  ÿéòW%7'67#53&'73#67&'67'F:Sg_b  %L&      A   ÿèï› 73673#&''67&'7#367D  ƒ1&#/)G ?$ %:R p%   ' !B„Ñ$7&'73#353#5#'67#5335#5363?0&"2DÑ    7!0 'wGçÅ7#"''3255#'65535#35#ç   53333Åf  -,"0ÿ鉘'7&'73#353#5#'67#533655#536.  I2 - ! "6K ˜  (C , 8' |ÿèéŽ7'3255#'65535#35#é "1//0/Ž‹   (S.J…ôÏ#7&'3673#353#5#'67#5335#¢  B  /$ #-Ï !  >-H%@->^ÿéòÒ7#'6553&'7òq<¾O@3 3=[ Q ðÏ#7&'73#353#5#'67#5335#536~  X,F%& 4 + 7%E\Ï   >3S %F3>Pð”"73&'73673#353#'67#5335#P$ $)G'= 0 $ 8*F~   ($ *%R—êÇ 73#735#'3#735#¥EE""dDD""Ç00Rÿé©Ç 73#3##"''3255'67#'735#aF    'Ç?e  K+!+60? ÿêŽÇ!73#3##"''3255'67#'735#t   *+2 1GÇ<c  T4!-4<'òÒ#73#3#3#"''3267#5363535bWŒ¸¸² ±1%zzzÒB  0 s  ÿéÚJ73533#&'#5'67#UH= 1 2 -2HA !&<;%kÿèêÄ73#735##53#=#rqqKKYÄY5·mm66 ÿè¡Ð/73673#&'3#5'67#3#3'7>7#7#8;/" >F  #.ƒOB F ³    H& ÿëõÐ173673#&'#5'67#3&'#3#3#"''3267#7#Ol?/ s .@:c%Eȃw z 0¸      33 'Bÿê•Ï,73673#&''67#3#3#3#"''3267#7#L   ))G&$  ( ¸    +2 #†ÿçõÏ!7&'7&'7&''5'6556Ú    %Ï‚BBŒ©$ ´-^< 6\9LÿèõÏ173673#&'#5'67#33&'3#3#"''3267#7#R9L.$ Z  -E M UŸi_ ` "¶    I1 'oÿéöÑ473673#&'#5'677#&'#3#3##'32667#7#t,=# J "^  wLL Pµ   $%' %ÿèó£37373#&'#5'67#3&'#3#33#"''3267#'7#SmB ) p &?CW " HÆ‚l n 1     ,' yÿéôÐ073673#&'#5'67#33&'3#3#"''3267#7#~%5  > 2 5 ;kB?  B µ    J1 %SÿèòÑ+7''6767&'3533#3##5#535#'6È 9A"'* G 66BBGG*  (# : 77 ^ÿèòÐ,7&''6767&'3533#3##5#535#'6Ì5;%( B22==AA% '$ : 77 f óÏ*767'7''63533#3##5#535#'6 % /777::;;"Ï  % (( GÿéñÐ+767&'7&''63533#3##5#535#'6‡(+ ;B! &??GGOO- Ð%  ' 77 rÿèôÏ,7&''6767&'3533#3##5#535#'6Î.3  :**4499 ¼ +( 7 66  ÿèwÐ+7&''6767&'3533#3##5#535#'6^ #' 2!!$$,, Â! &# 877 }ÿèôÏ,7&''6767&'3533#3##5#535#'6Ò ). 7&&//22 ¼ +) 8 66  ÿè~Ï#/FK73533#&'#5'675#&''6'&''63&''67''667#-**  -Q   <  +        ¼+  -   2      €ÿéóÅ#73#3#5##537#35#35#35#35#35#€s13H%. < Ŭ¬©zzzLLcÿéó  &,73&''67&''667#'6'6'6‹I"$( , < . 03 (@ B7 -U X       &      ÿêòÏ-73533#3#32667#"&55#'67#535#'6C-RRbI &'F =Ae6 Ì**+K ' RVF+% ÿè‚Ï%7#535#'673533#3#67'5#'60"4&&%  '%W) &&)))F TF)%uÿêõÏ-7#535#'673533#3#3267#"&55#'6–3)))"  W) #))))P $ S-.^ÿéóÏ-73533#3#3267#"&55#'667#535#'6~,,7(   -)B È***O# RK!($* "ÿêí›+73533#3#3267#"&55#'67#535#'6H%CCZ? $ #N GFb. •3 :B 1 eòÏ.73533#3#3267#"&55#'667#535#'6†++5)   : É !!!0  4!#  ! ÿêñ,73533#3#3267#"&55#'67#535#'6?.NNaI  $ % B<Df8 0 67( fÿéóÏ.73533#3#3267#"&55#'667#535#'6…((2#  *#=È**+P % SL!(%+ KîÏ,73533#3#32765#"&55#'67#535#'6m33C5   1 ,/H$ Ê !!!; AE 3! lÿèòÏ-73533#3#3267#"&55#'6767#535#'6Œ))0"  ) 4 à )))Q  UG() JÿçöÏ%+733#33267#"&55#'67#53'&'7'6—E2   ,)F1   Ï]X  \+5EN !  ÿêøÎ"(.733#327267##"&55#'667#537'6'&'2$0 I(  #&  6  ÎbU \5* &/Q'  "$ ÿéñ{"(733#3267#"&55#'67#537'6'&'uhM# / (M DEfM z  {7, 2A1*      BÿéñÏ &,733#3267#"&55#'667#53'&'7'6’F2  *E0   Ï]X  [.4+)M ! zÿèöÏ &,733#33267#"&55#'655#537'6'&'­3$  & 34 P  Ï\^ " b8%-K#  ÿí|Ò %73#53635#35#'75#535#53#3#9-` 8888Qk-$$*h*$$Ò YY)7w ÿèlÏ$73533#67'5#'665#7&'7'6 $&      I  uZZN `9/+4X "`ÿéòÊ #BFJN73#5'675#73#5'675#&'7&'3&'73#3#3#3##5'65#5#35#m;(E<)2V520++++2j 6%%%%%ÊW  W      4  U  ÿéô•$*733#3267#"&55#'67#537'6'&'vcK  #%&& ?>`P‚•B: A&( 5;  ÿèvÐ#)-159733#"''3255##5#'655'6367#35#33535#3356)    ! #5#Ð – )%%+.O 5HbÿéöÌ%+733#3267#"&55#'655#53'&'7'6¢=*   3 *2$  i  Ì[[ " ^7#,K    MÿéñÐ &7'6556&&'67'5676×2<>=  '% Ð JC6 .BYR (%F>…  ¢ Iÿê÷Ì %7'655667'56&'76Þ5@B9 #) .- 0 Ì HA4 .?V   œ* 2*` =ÿéõÌ &7'655667&&'67'56Ý9E G=$  =Ì HD5 /AW  !A:|  ›YÿéòÐ &7'6556&&'67'5676Û2;><    *% Ð JD5 /AYR )%CA…  ¢ >ÿèó• &7'655667&'#67'56Ô6ACB  9  2• 8/& !,F   "OV  q ÿé„Ï %7'6556&'7'56776m&+./  + "  Ï JC6 .BWU 0&Y   “ Vÿç…Ì 7&'&''6i   Ì  3  2 0- +}ÿéõÐ $7'6556&'7'5676á&. 0.   ! ÐKF3 /BXQ *$7k…  ¢ fÿèóq '7'6655667&'67'56á *9  B&   .  'q ( &   8A Y ÿè_i7#"''3255#'6555#35_   " 2!!ij   #5! ÿözÏ &73#53&'&''67'67676767'B)h(9 #* $Ï ” ')%>'aÿéõÎ $73#'667&&'67'56ˆ\f \  #5Î   82g „rZïÐ $73#'6&'67'5676‹U_X  +  -( ( Ð  '  +  6   \pÐ73#3#"''3265#'667#53&'E"85  $ *Ð  -   (ÿé×[7#"''3255##535#35#×  ‰‰‰‰‰[Z  $r ,ÿï‡È7#3#53#3#3#535#535#‡^Xl MS!ȳÙ,&%%&dÿïóÈ7#3#53#3#3#535#535#ó{{ `%""+j+##'ȳÙ,%%%%bÿïóÈ7#3#53#3#3#535#535#ó}}‘ b&##,k+##(ȳÙ,%%%%PÿïòÈ7#3#53#3#3#535#535#òŽŽ¢$l+((2x2))-ȳÙ,%%%%iÿïóÈ7#3#53#3#3#535#535#óvvŠ [#!!)e(!!$ȳÙ,%%%%$ÿïî‹7#3#53#3#3#535#535#é±¶Ê$–B::H¡G::B‹xœ ÿì‰Ï7#67&'7&''53&'73535€P% )+<<<²jD  "&  ¸ + 7|Ð7#7'7''53&'73535|I( " $'555ºN    z |?æÃ7#"''3255#'65535#35#æ   6 3343Ãk   E$7ÿìÏ7#67&'7&''53&'73535}P $ )+<<<²jC   ¸ +ÿìzÏ7#67&'7&''53&'73535vM # ()999²jC   ¸ +9ÿê–Ï,7#535#535#53533#3#3#3#"''3267#'6V" ,+   [ @ ). $Bÿê Ï,73533#3#3#3#"''3267#'67#535#535#X))    » ? )0 #C ÿöŒÐ$73#3#3#67'753675#535#'62I,00))7D 99  Ð&$ MIZ&M|Ï73533#3#3##5#535#535#)))$$**..$$)¼QåÅ73#"''3267#'667#…`   " ÅR:.& "&E|Ï73533#3#3##5#535#535#)))$$**..$$)º{>åÄ73#"''3267#'667#…`  "Ä_!G5- )/d|Ï73533#3#3##5#535#535#)))$$**..$$)     gåÈ73#"''3267#'667#…`   " ÈD+$ \|Ï73533#3#3##5#535#535#)))$$**..$$)ÁcåÇ73#"''3267#'667#…`   " ÇH/%!  ÿèòa$7367&'#"''3265'3'67#w  ;#  cS< 1=a   (3 F8 (Eh™Ï73533#3#3##5#535#535#G!!!!!!à     ˜eêÃ73#"''3255#'655# J  ÃC /+ $Bÿéîo*067676767&'7&'#"''3255'67'67'67&'z(,*"    )   _ O #      E    n}Ð73533#3#7#5'675#535#((($$(*$$(Å     rèÑ173533#3#3##5#535#535#73#"''3267#'665#)))##**,,##)t^   !Å      < …níÇ73#"''3267#'667#‡f   " Ç@ ' xìÏ/735#535#53533#3#3##5#73#"''3267#'67#/'',,,,'',,/yb  ! ’      E/ )  ÿçó(2N733#3#&''67#&''67#535333353#5#7'67#&''67#53#&xOOiG 9 C/*[ ²†  :  –        GG]      !ÿè߯73#3#5##5367#735#35#+ªSd–EB‚‚ ––ÆW kl 1¨6"ÿéÜ”73#3#5##5367#735#35#0žJ`’D?vv’’”AS S z" ÿéðÑ73#'6553&'…`¾ZÑPD3 5<] ÿøkÅ7'67#53&3#7'75#@ ,2F 9KS#}1  05_ÿèöÐ!2673#67&'7''67#53&''66733267#"&5'3#«9G  ,1'6" F  "Ð !  ! tL&$L OhlÿëóÏ +73533#735#33535#3353#3#"''3267#7#t01t1O1i‡XQ  T ¹V342, 'vÿëóÏ +73533#735#33535#3353#3#"''3267#7#|..n-G-`}PK  N ¹V342, 'fÿéñÈ2JPV73#27#5'275#35#35#75#73''67'767#67&'#5'6'6'6jG 17  %    8*   ÈB K+, F      N     !;Y    ÿëhÇ $(,28>7#3#3#3#"''3267&'77#55#5#35&'''67&'b  C%   ÇG "‚&%5! dÿèòÏ &*.26:NRX^73#5'675#537367325267##"&53#735#33535#3353533533#3#535#35#'67&'“''!  @rr0N0d !‡"- > Ï>     A' # ( !   kÿèòÏ &*.26:NRX^73#5'675#537367325267##"&53#735#33535#3353533533#3#535#35#'67&'•""  :mm-I-^ +9 Ï>    A' # ( !   eÿéòÑ QUY73#53&'3#735#73#735#3533533#3#3#67&'67'5'67#535#535#5#35#´6‚7.77166W "7   ,    (!P Ñ#++*     ,      IÿêõÇ!%)73#3#&'#5'67#535#735#33535#335`‚6F7'#* (;K9&&9#\&&9#Çd" 'KL.';@UÿêõÇ!%)73#3#&'#5'67#535#735#33535#335jz2@2$% &6D5""5T""5Çd"%HI+';@ ÿéôÒ#'+/5;73673#3#&'#5'67#535#735#33535#335'&''&'%~  PgT$4 :&#8 1%SeP==Q=Ž==Q=Q  ,  ¤ [  %=;" 67c     ÿéóg!%)73#3#&'#5'67#535#735#33535#3352D`L#1 9&%9 2%PdF33F1w33F1g:  %%  $  ÿèòÆ!%)73#3#&'#5'67#535#735#33535#335&³PhW"6 :#$64#UfO;;O<‹;;O<Æh"+IH*"<B ÿéxÉ &*.73#5##53535#335##"''3255##535#35#iK/+8  !!!!!É?##??/2f  '~#6 ÿé€É &*.73#5##53535#335##"''3255##535#35#pR21 =  %%%%%É?##??/2f  '~#6ÿépÉ &*.73#5##53535#335##"''3255##535#35#d @ * $ / É?##??/2i '~#6mÿëóÍ'733#7'7536773673267#"&5”' '  ÍGg ¤ ÅS ^! €ÿêóÎ#)73#3265#"&'#67'56'&'á #"  $  3(Î9346Gc  ÃD50r   ÿétÉ &*.73#5##53535#335##"''3255##535#35#g G,( 4  É?##??/2i '~#6pÿêøÐ %,487#5##53&'7'673&''67&7267##5##535#íO0, 5  " ) =555¸#%  O     5M M/ÿë÷Ð+73533#3#535#&'6733"&&#"'6632#TUUcÛdT'=)"<A-C@"  °   ;7,%    kÿèöÐ"1573#67&'7&''67#53&''66733267#"&5'3#±4@ (, "/ B  !Ð "  ! tK%%L Ohgÿêõ¡"&77#53&'73#67'7&''63'6673#733267#"&5—-0B   %-     z    &'!  OO9 p’íÐ 73#'6R\ Ð  QÿèôÐ $(>73&'73#67&'7''63'67673#7333252767##"'"5g7:ˆ% !%06    &'  ¶     ,8   0^^L ! ÿüiÀ767'7537567#533K (1  :QZ8 e`r* ÿò`¿73#3##5'67#35#P +$ '¿ hc +6‘CdÿæöÆ#'+073#3#&''67&'767#535#35#33535#335s~712/ -$  /04/L/Æa    a>? :ÿç÷¡)0473'73#67&'7&''67#33267#"&5''6673#R>  Ia '* 8@&h  T1+Š     9;  @= N ÿói’77'753757#533J(1 9P=+ OLZ!\ÿèôž$(;73&'73#67&'7''67#3'67673#73333665##"&5m49D   .4(  $& Š    <,   %KK6  X_èÆ #73#5'675#73#5'675#&'7&'^?-K?-:  X  Æg  )g  )      fãÊ #73#5'675#73#5'675#&'7&']%+ Io]%+ IcuÊc  "c  "    [ÿêïÆ#)/573#"''3255#'3#"''3255#&''&''6''6°? +I?  +U @  f = ÆÅ ¯Æ °   , )% $' )& $SÿêïÆ#)/573#"''3255#'3#"''3255#&''&''6''6­B .MB  .Y  Dk A ÆÅ ¯Æ °   , )% $' )& $Yÿëîq)-173#"''3255'675#'3#"''3255'675#'''ªD  2KD  2W @ qq " "q " "c‚éÈ 73#735#335335c††'ÈF$$$$$ ÿé\Ñ73&'73&'#5'67#   &7° !  e` ? ÿê‡Å)/575#53#"''3255'6'5#53#"''3255'67&''&'u&8  .%7    6  ,  ^VÄ 8 ^Æ 4 i   ÿçóU736533533##5#'67# C<??>9.A= @@;(’ÿéîÏ733#5##5##5335#35#·$%%Ï.uQQvUCCC ÿê€Å*0675#53#"''3255'6'5#53#"''3255'67&''&'n"4  -#5  8  .  Y[Ä 4 bvP / j   ÿêwÏ 73#'67#536&''6767&'6,/  ", Ï'G3 1=!& )EN oÿêëÆ)/575#53#"''3255'6'5#53#"''3255'67&''&'Ø"5   -&8  9  -  ^VÅ 9 TÅ ; ^   rãË #73#5'675#5#53#5'6'&'7&']%+ I¸Oc'-ŒoËT  S  !ÿéìr)733267#"&55#'67#5363533##5#fA   1< 1$(B^ãÉ #73#5'675#73#5'675#&'7&']%+ Io]%+ IcuÉj&j&     ÿésÆ)/573#"''3255'675#'3#"''3255'675#&''&'E.    5.    ? '  ÆÅ  2 XÅ  2 X  VÿçõÏ  7&''6&'67#53&'ž"' #$#. # \t%+Ï.10&   X ÿæö’ !7&''6&'67#53&'y5< 8:'7F*  "*“²,22’$  =  ÿëy— !7&''6&'67#53&'= #   BY —  Aoÿèó’ $73#3#537#35#35#35#'67&'s}40g#6CCCCCC  ;’ff, ) *     kÿéöž  7&''6&'67#53&'ª  )  G^ $ž     A fÁ73#3#7'75#535# Y&!+ Á:9   @:qÿêõÃ!'73#333267##"&547#67'7#&'qzO?  /9Ã$}  p} ¹P ÿéŽÏ !7'67&&'67#53&'N'   Nd %¬+(5!   V ÿívÏ !7'67&&'67#53&'A #   =R   ¦)&7    S  ‡ÿóóÐ 73&'73#3#536'&'Œ,  #bI %l4%  ¤ G5>?4581ÿí~Ï !7'67&&'67#53&'E &   BV  ¦&&7    S  uÿèöÏ !7&''6&'3&'767#®  %  _    IÏ ,1*&   &ŠÿçõÏ !7&''6&'67#53&'µ     G(p```Ð6& FiiF3ÿéëÐ7''6767&'#5##535#±$ WW 4#+wÿéöÃ$7#53#33267#"&55#67'7&'vJ4 $5 ±#… x| jÿéé”767&'7''6#5##535#U;@ OZ$›ŠŠŠ”#  3R R5"ÿéëš7&''6767&'#5##535#°%XX8 #9C 4…………  &' @R R5# ÿéô773533#&'#5'67#bcU&6 :&%8 1%N.  --  ÿéòE 7&'76'7'5'6Í %Q^ (  77  <  "   RêÏ7''6767&'3#735#Ã8>)+ PttLL¸  0-  HN)ÿèðÑ'+/5;73533533#3#"''3267##5#'67#735#3353355##655#=)::H  3, C 9 95=Q)&:)%µE"4 RRD 3HT" "Lÿçëž&*.2675#53533533#3#"''3267##5#'67#77353355##7#|%%**4  + #( 4)a7- AA6  &7>ÿèí“'+/3773533533#3#"''3267##5#'67#735#33533535#35#?'::F   1) C 8 =2?S'&›(#7''‚8,>>4 $57nÿéõÏ'+/3773533533#3#"''3267##5#'67#735#3353355##5#q$""+  % % $6"´D"1SS2!'F T"""" ÿé‡Ä73#"''3267#'67##5##535#t   ( , %$oCCCÄK2:,_iiF3 ÿéßÃ73#"''3267#'67##5##535#Ä T S H G¿………ÃH/L<_iiG4i,éÆ73#"''3267#'67#3#735#rw   2' kkDDÆ7*CE#4aÁ 7#55#35aG4!!Á>----tÿéðÄ73#"''3267#'67##5##535#wy   *+ %'uJJJÄL2=/_iiG4 ÿéáƒ73#"''3267#'67##5##535#Ç ] L B Bă1/  :N N3!PâÅ73#"''3267#'67#3#735#\† 4 5 - * yyQQÅ< "4(IQ+uÿéõÐ '-39?73#'633#3##"''327#67#536365#7&'67#7&'’NV  \   N97 (9 Ð  #  R$  ?ÿêwÈ 7&'&''6_   È  2  8 )& %F-õÑ'1<73#33#3##"''327#67#5367'65#3&'77#3&'7jy‚y t qZ( ]( Ñ  2 &   PÿéõÐ ',27=73#'633#3##"''327#67#5;7#7&'67#7&'sir  t  hNM 5O' Ð  )  S)%  [ÿéõÐ &,27=73#'633#3##"''327#67#536365#7&'67#7&'€^gk  aFD 2G Ð  S)%  ^ÿéõÐ '-38>73#'633#3##"''327#67#536365#7&'67#7&'€]f k  aFD 2G Ð    S)%   ÿçôÐ %*.2773#'636733#3##"''327#67#765#'#37##37#H• &+-’%& †+­+,*=/?+)Ð  #R<)  )));)))ÿçóÐ %*05;73#'636733#3##"''327#67#765#7&'7#7&'H• &&(’$% †&¨j/  Jl5  Ð  #R<)  )&  V)&  ÿç‚Ð $)/4:73#'636733#3##"''327#7#747#7&'67#7&'(@I R   ET/  #0  Ð V)$;)%  V)&  ÿèô¡ "'-3973#'636733#3##"''327#7#77#7&'67#7&';¦³ ¬  Ÿ º†* cˆ+"  ¡   F/ . = fÿéõÐ '-38>73#'633#3##"''3267#67#536365#7&'7#7&'ˆV_ e Y@> .@ Ð  #   S)%  mÿéõÐ %+16<73#'633#3##"''327#67#536365#7&'7#7&'OX b V<: ,<  Ð  :#  S)%  ÿéòw %*/497'67336733#3##"''327#67#75##&'#7##&'#7 "”Í!Ÿ ! “±7-z;+P  &NÿèñÍ 187'2'6'&'&'373#&''67&'67#67#á XIG1  (1 \ "!7 / 'W5 Í    7 #   0 mÿèñÍ 187'2'6'&'&'3673#&''67&'67#67#â 0E94 $   "G ) # C $Í    7 #  .  ÿçó• 187'2'6'&''&'373#&''677'67#367Ð JkYP >  0  F‰5 $! 0*A #; :Q •       &    wÿèóÍ 187'2'6'&'&'3673#&''67&'67#67#ã -B65"   !B "  @  Í   : #   . eÿèñÍ 177'2'6'&'&'3673#&''67&'67#67#á 2J<9 (    )L , % "K(Í    7 #   . Hÿí©Ð#)/7676767&'7&''67'67&''67&'c    !  3  ,…;%  0+k! •ÿëïÏ73#"''32767#'6&'¶/  "   Ï“+ "l '5 >ÿò•Ð!'-77&'7''67'67676&'&'''6„       ¯7  0.a!7ÿòŠÐ!'-77&'7''67'67676&''67&'w   -&¯8  0,b!|ÿéóÏ"&*73&'73#3#3#3##5'65#5#35#ž   #O *Ï   Ž+- 3 3  ÿééÏ*06767&'7&'#"''3255'67'67676'67&'©4?>3  8   &(%#!(##I $ ‡µ8" $ C  =.'j"# aÿèõÃ73&''67&'#367&'k'!( *$  , ÃU= !5J>/2; hÿéõÏ(733327#"&547#''67&'77#53—/   ! $$Ï-5&$#&"$7 )!36 *iÿêì¾7#53#"''32765#'>''6£-v  #    « 3&vS+  '0.%ÿçëm+1710776767&'7&'#"''3255#'67'67&'''6`( 47L)  !  ++&% W! !R ,'W #  #   <    ÿèöÏ 7&''63#'3'65|38 46.; NGW9 0Ï273+)Œ<2&GÿèöÏ 7&''63#'3'667"+ *"!, <5J)Ï')+*/Šˆ%G '$]ÿèöÏ 7&''63#'3'67¦& $% 3/A$Ï ')+*/Šˆ%G?`ÿèöÏ 7&''63#'3'67¦& $# 1.>' Ï ((+*/Šˆ%G@kóÏ 7&''63#'3'65¨"  )*1$ Ï#$# !mk$,! ÿèôŠ 7&''63#'3'667€ 19 86+; QEV6Š!#a`1âÏ 73353353#EDÅÁ!//!4kÿèöÏ 7&''63'6673#®  (3Ï *.) &(B40<‹Mÿéò£ 7&''63#'3'66™"+ ''% 44D £ %#!'mm6* $fÿèöÏ 7&''63'6773#ª$ !$ .%;Ï '')*1%G@"ˆ ÿèõ› 7&''63'66773# 0; 67+= Q@ R› %,%#!8 jvÿèôÏ 7&''63'6773#®  ' !2Ï'(**/%HA"ŠrÿçòÏ 7&''63'6773#°  % )".Ï ))**,'JC$ŠƒÿèõÏ 7&''63'6773#²  !)Ï ''+*0%HA#ŠsÿñïÉ73#3#535#535'2à 440t/334ÉIOOGiÿèöÑ 7'67&'&'3'67#¬*"  (k  ! X­(%2 '. +ÿçë‚+177676767&'7&'#"''3255#'67'67&'''6K#3;O* !  +++$ I! !R .(a '  )  %  K   jêÐ73533#3#5##535#XXX`¬_X½-.!zdË73#'3#Q0ËQHHiÿêöÏ"73#&''67#5353533655#335ç9# "'- 5,,,§N22/ ".N((N ** <lÿîóÏ %7#5##53&'736732767#"&5î]: 6% ,  ( ¬2 2 .0 0 ( aÿéöÐ 7&''6'6'6'6©$ #$. , +,8 631, GÐ !"$  $ - !&vÿéëÏ73353353#5#353#5#5335#vb0»?SS?XdLj ^LdkÿééÏ73353353#5#353#5#5335#k ##$k 4»?SS?XdLj _LdgÿéóÁ73##"''3255###535#gŒ  gP3 Á«  ¦'XfF5jÿéõÏ$*73&''67&''667#2&'&'š:  # !   ." !<* (;Ï #      ]  wÿéïÃ7#"''3255##53#735#ï   R!55ÿ  §ÇÚ7b@_ÿêõÎ!7#'6553&'7&''6767&'ói:  %&  ¯:?: 0=L c'- 5S^" hÿòòÆ&73&''67&'767#3533#3#535#up"  Y.008†:.Æ'    t((gÿé¨Î7'6'67#Ž ! Î-^ $ ydÿèìÏ&753753753#5&'#5&''655'6u    ’>9f5mçc!–\ .C,(9  !mÿé÷Ì"(.73&'3267#"&5'3'67'677'6'&'·   !%  L  ]  ÌeI ÈvC* "1  S &  ÿéêa)/5767'7&'#"''3255'67'67676&'''6¦)93* :   %'  # !T $ a     ;   gÿéòÐ>767&''67&'3#3533#"''3255##5##5'67#536‚ )NT+    "(Ì      1 8  !TT@=mÿêôÐ7767#"''32654''67''67&''7&'767&''6Ñ    "2 6$ + +#$ %    0Ð   !< !     xÿèìÄ73#735##53#=#ggAAtNÄY5·mm66HÿèöÎ287'#'67'6776767&'3&''67&''6767#Ñ <;* (-5GR+ //'   E•     - 0       ÿô‡Å 7#3#3#535#35#5#‡%"$'n##DD!!Å.Q.Ñ@.m-m..›áÊ 73#735#'3#735#ˆYY55|YY55Ê//ÿéé& #53#=##53#=#˜d=nc< =< =<tÿôëÆ 7#3#3#535#35#5#ê(&(+w''LL%%Æ-R-Ò@-l+k--pÿðóÄ 73#53#3+535#3'35#Â1ƒ€-.- ++Ô)^^)°:</é’ 7#3#3#535#35#5#å[NN_ËHH••HH’ + c ' ' P€É 7#3#3#55#535#735#€  k9'!!É5yg5U!‹OñÉ7#3267#"&5535åF '3ÉC  e,ÿóÞ‘ 7#3#3#535#35#5#ÔIGFR²77~~88‘@ž/II+ÿîå“ 7#3#3#55#535#735#Ô:98Jº\76F"__“", ÿéöJ767&''66''6|  M!N 908 J   "$ % ÿïòO 73&'73#3673#53&'YWÇ( E  9â5 ?  ÿéóo,73'67#&''635#53533#3##5#'86 O A '  _ '66##++6oU <   %%))OòÏ.7&''673'6735#53533#3##5#'@  3*A  &11!!&&6¦    ) +5 $$ OÿêóÏ&-735#53533#3##5#'''673'67&767® !!'0%?   … !R++RCC 6P43J  ÿêóÐ,73533#3##5#'735#'3'67#&''6‚9 $$= .9K8 T F(   ©''NJJ;N9…3(l   0 ÿéó—+73'67#&''673533#3##5#'735#=7a Q )  "V0&&++3#0— l&N   (844/&8ÿéàÑ %73#5##5365#7&''67&'76erš:lš{Ñ ÇÇ±ŽŽ…   gÿéìÐ %73#5##5365#7&''67&'76™I]&D]I    Ð ÆÆ±ƒ   ^ÿêîÈ $7#5##535#3533#&'#5'67#îkkk "##     ÈÞ Þ¿­'?C &eÿêîÈ "107#5##535#3533#&'#5'67#îccc     ÈÞ Þ¿­'>>'QÿêëÈ "7#5##535#3533#&'#5'67#ëttt &''    "ÈÞ Þ¿­'@G&mÿêïÈ "7#5##535#3533#&'#5'67#ï\\\   ÈÞ Þ¿­'==(iÿêïÈ "7#5##535#3533#&'#5'67#ï```   ÈÞ Þ¿­'>>&?ÿ÷Àq73#735#3533#&'#5'67#?]]    qzY     B½™73#735#3533#&'#5'67#B{{WW    ™—u )+ ˆÿêðÈ "7#5##535#3533#&'#5'67#ðDDD  ÈÞÞ¿®(71 &?ÿéŒÈ 73#735#35#35#'67&'H??   .  È¢qNO 8  ‰ÿéïÆ$(,73#3#"''3265#'67#'67#'67#735#35#“T0A  "     ....Æ] N18"!+&  7:ŠÿêïÑ#+/373673#53&'35#&'735'6#5##535#35#§e) 99999Ñ VV ]777  E    ÊTF6 5Aa5 /@( @/3     !#- <xÿéóÐ2:>73673#3#3#3673#53&'735#535#535#53&'#5##535#›  0,,44 { 33--1_CCCÐ    B B(vÿéñÆ73#3##5#535#'6'&'|n-4433-X B  ÆdSSd%#!#yÿèôÅ1673#7#5'75#35#35#675#7#53&''67&67#zF    )7  ÅŠ.'š&&]&^"T - )1 &3 ÿéwÏ5Q733#3#53533335&''67&''676753#57#677''67''7=!!(j-?    QQ?    ?Ï**!+       Q%      ÿïï‘ 73#3#735#3673#53&'ÐЪª‚‚ ; 9Þ;‘C6   ÿëtÁ 73#3#735#7'676'&' ggYY44. +4 "ÁJ&@ rÿèôÐ$).73#3##5#53665#53635#335367#3355#¤8((G  !,G, Ð l 44 l 9J  M _ÿèõÐ48<@DH73673#33##&'#5##5'67#535#535#535#53'5#3533535335Ž  (,$    ##!"26Ð   %%6II08'SìÅ 73#3#735#3#536'&'Z‰‰ rrLLG *™X 9  ÅD 7uÿïóÆ 73#3#735#3#536'&'u|| hh@@; "}F 2  ÆS/GuÿéêÐ"(733#"''3255##5335#35#7'6'&'¦1  I,IIIIJ  M  Ð=’  ;ª0Ly  uÿòòÆ'73&''67&'767#3533#3#535#€g     P*++2{6*Æ.    u((tÿêôÏ,73'33#3265#"'&'#7&'3#67'675#wA** Ag  V9 % £,F/5)f<   X@ FiÿéóÏ"(7&'73#3##5#'67#5365#5365#”  O !' BÏ8\\@4*b8- oÿèïÍ#73533533#3#535#35#'67&'w}*Gž////BBBBZ *!mÿéóÇ$73#3#"''3255#353#5335##535#m†;7  % J %79Ç   ‹aN_^Ma¦·nÿéôÌ  $7'67&'&''6#5##535#”B" (J555Ì &$# /Y Z:(lÿéòÃ#(,733##3#5##5'67#537#537#3353535#{fEV:  "#/%',3::Ã+, X H ,€*oÿîòÄ !-73#&'67&'67&'63#3#535#xww  0  1  Xw27ƒ92Ä   S**lÿçöÏ-73#35#535#53#3267#"&55#'667#56ŸH2   Ï  rJ M/- $(jjÿèñÆ673#3#"''3255#67&'7&''#5#67'7''#535#j‡;8  '  &  7;Æ “  }T &- /ŽT&.  <¬ pÿéñÈ%)-373#3#"''3265#&''67#'67#735#35#33#~fAV %   @@@@CVÈU Y =   31afÿéöÏ!26:>7&'#5'63&'3#"''325'#"''3255##535#35#73#¤$ J +; 7  & 6Ï  "-s  mt  1‹%8-\^ÿéöÈ/38<73533533#3#67&'#67'5#'66553'#335#35#Š-    *   qMMN&  9; G-# 2#`9(V kÿïõÆ#'73#735#'67&3533#75##5##5#dd>>  O t ŠmÆb@&  …OO======gÿéöÏ#)73533#3#&'#5'67#535#&'7'6u/1184" ! "58/  [  ²>-&MJ$*>    ÿéõÏ#)73533#3#&'#5'67#535#'6'&']]]iW"7 ;%#;:!Xi]«|  ·@/9ca5 -@  ^ÿéöÏ#)73533#3#&'#5'67#535#&'7'6m244<7$ $ $9<2  b  ²>.'NJ%+>    ÿéò£#)73533#3#&'#5'67#535#&'7'6YZZeU#6 8%#96"SeY%  ‰ Ž/%.KM-#/    RòÏ*73533#3673#&'##5'67#53&'735##SVV 4L9A'5 0%H* S¾   &$   ÿêwÃ473#67&'#"''32655'67&''67&''67#^&     "  #à     ' &  nÿéóÄ73#3##5#'67#535#5#}p &"I ÄMjj@* &7MMMMiÿéöÄ /7#3#3##535#73#535#3&''67&'767#©-****4==**B      -ÄO0Û=+M)L.$    ZÿéôÐ>DIN733#67&'#"''32655'67''67&''67#5'6367#367#335“2$=     "+0"# $  $/+  5#Ð 9   -0     /  / \ÿèôÐ I7'2'6'&''&''3#&'#'67#5367'67'6776767&'â 3K>8  )  %  i F4 (2 $+4  #%%Ð     1   $     #iÿéòÄ",73#3#367&'#"''3265'3'67#{ggww3      3,  Ä!  %9 W 2%qÿéòà &073#3#535#367&'#"''3265'3'67#€c'/r/(*      3-  Ã!!9   &8 V 2& ÿéóà '073#3#535#367&'#"''325'3'67# ½R_ÕbWW  :# YL8 46Ã9  3B  [: + ÿçöÏ)7'675#535#53533#3#3#33#"&&%"! ,<70O8.9 M   +cÿéôÏ(73533#3#3#33#"&''675#535#z*//9922  (   99*®!!!"0)7a!?ÿëñÐ(7#535#53533#3#3#33#"&''67m0/)2&j""""!1 /0 Kÿéõ”(73533#3#3#33#"&''675#535#^;;;BA44& 2%   BA;€!   'E ÿèôÏ(73533#3#3#33#"&''675#535##RTTaaVV,#@B %__R±#/+; ` ÿéóÑ05;7373#3#3#3##"''3255#'67#5367#537#5#&'Sgicg†-&&   b &DLB±!;AU 6  œ  ÇE0+ #++EEE    GÿèðÇ!73#'65535#53+37'6'&'Â.~*.”-*  a  n ,( !'2GG: pÿèóÇ!73#'65535#53+37'6'&'Ï$bo $  No.( !(1FF9  ÿéìÏ573#3#3#"''3255##5##535#535#535'6556à '.IIPPO  ;2FGGBB'*pÏB  *TTDWI>615[C îÏ3735#53533#3#3#"''3255##5##535#'6556Ü 4F80011661   18KÏ 01 EE6F0) &+MP@òÊ"(73#&'#5'67#535'2'6'&'Û  @,"$( %.@?1  M  Ê*.* (   &ð(73673#&'#5'67#53&'735'2Á # .P7@$9 2!K, %K   !   ‹ìÔ 7#5##53&'7'67&'ê¯a' 7 4N-, ,.Å     ÿéóË"(73#&'#5'67#535'2'6'&'Õ (0cR#7 9&#89M_',]Iy  ËB1:ff6 -@!  ÿézÎ"(73#&'#5'67#535'6'6'&'m ++ +-' @ C  Î;`W 07  jÿçöÈ7'6553#&'7#3™ d %<tÿéôÏ73533#3#3##5#535#535#x322..6677//3©&&&&>>&&ÿéuÎ"(73#&'#5'67#535'6'6'&'i )) )*$ >  ?  Î;`V /7  ÿépÎ#)73#&'#5'67#535'6'6'&'c && '( ;  ;  Î;_U/7  LÿæîÐ#(,059733#"''3255##5#'655'667#35#33535#735‡B# )& ";8##5)_$#5)Ð – #--&B7 .K IÿéªÎ#)-16:733#"''3255##5#'655'667#35#33535#735o    -Η )$ *0;  .G_ÿéíÏ#)-16:733#"''3255##5#'655'667#35#33535#7356(   "  - ' 1"S1"Ï • #66# */4 .KÿèäÔ#)-17;733#"''3255##5#'655'6367#35#33535#735TW C  A? 2K H ;;OA‘<;OAÔ  “ ::"A5 =N ›ÿéêÏ 736753#5'› Ä–”æ? ÿéõÏ735333#&''67#535#337‰!), !$'!5¦))I3 44 $.6)6ÿè߇"(,06:733#"''3255##5#'655'6367#35#33535#735MV : ;=$NJ 99L;ˆ:9L;‡]  !!( #. „ÿçóÌ%+73#3265#"&'#67'56&5&'Ú  $ ; Ì3  /,RQ µE0u  sÿçøÌ#7'65567&5567&'7''¤3*    ¬*Y> 6Y8 #?B6t"ª  gÿçõÏ7&'7'7''5'6556×     /ÏCC‹ª%³,^= 6]8ÿétÏ%+73533#3#3#3##5#535#53&'#535#367#! (!$$%% *! !¶11K}ÿîóÉ73533#3#535#3533#3#535#‡(((.p.()))0v2)¨!!!!_""##|ÿéôÐ%)73&''67&''667##5##535#Ÿ=     0C555Ð !    b\\<+ÿèçv"(,059733#"''3255##5#'667'667#35#33535#735\J; =B .MB ;;N=Ž>=P=vS  '   (   ÿébÏ73#5#'67#535#533O B6#Ïæ[E:"P>ÿêò) 7&'''67&''&'Ô  —{  % )   3îÒ7&'73#3#3#535#535#536V  m 6\RRgÝcRRYwÒ  ÿéò_"73673#3#3##5#535#535#53'\ )2RKKffkkMMV5 _        ÿðñÑ7;@73673#3#3#33#537#537#'67#5367#537#53&'37#367#S / 6e]ayn³: $ , 7KR?CS7 O42 76Ñ   -'"2 ¡6 cðÑ73673#3#3#535#535#53&'T 7 2`UUgàfUU_9Ñ  nÿîõ½7'67#53&3#3#535#´ ANe  Rj-49)p 4 77 ÿë€Å %*.733##3#5##5'67#5367#537#3353535#] :C+ #$.!)++Å+, Z D  + }) ]ÿîõÓ !%)73#53&'3#735#3#735#3#735#35#3#®>•>.[[@@*ppJJJJ'——Ó 'R4 " 9@& $ % ÿè Ð!)73&'73#&''67&'767#3#'3'66?7 0 'b\;´       Nki/* "@ÿë÷Ê #'7&'''6'#5##5'63&'35#´! , 2%0 X 0 n!XXÊ # % `Z !W0 ÿéó "&7'67&''#5##5'63&'35#Y" g19 p O ‡&!pp $ P P$#L'cÿéïÌ #7'67&'&''6#5##535#ŒC# !*K999Ì &$ " /Y Z:(XÿéöË !%7'67&''#5##5'63&'35# D # D 5aDDË &%#! %'^_ &'W-xÿñóÐ %73#5##53&'&'''63#3#535#¶3R0'  d)4z2'Ð-0 : .22yÿéïÌ #7'67&'&''6#5##535#š;   #B...Ì' % # .YZ;) ÿénË  $7'67&'&''6#5##535#(3 :$$$Ë $#  /^^<*GöÍ !%7'67&'&''66#5##535#€I$( ($/ !$KKKKÍ " " 4U U6$PÿëôÊ'+7&'73#3267#"&55#'665#53635#  S     J CVVÊ QE  H(& !"QV-ÿéõÎ (,7&'''63#3267#"&55#'667#735#¤#' '$F ) %’)    !)' jjÎ"% 'Q:  A ) +ÿçóÏ#)73#3267#"&55#'67#53635#7&'«)( % $ C> &[Xrr  Ï^>  BC6^`8? MÿèõÑ&*7&'73#3267#"&55#'667#53635#… Y    ECOOÑ  TE L&-$ TX0 ÿéÎ "7&'''6#'67#53#67''35#b -+ $X 22Î pE:RR3 S.aÿéôÏ"(73673#3265#"&55#'67#735#7&'w9     1 +BB  ¡XB  II>4< dÿèôÏ $(7'67&'3#3267#"&55#'67#735#’ D@d   / *>>Ï !$7IC  IH=&mÿéóÐ!%+73#3267#"&55#'667#53635#5&'Á   2 *<<  ÐSF   K,' #%SY1A*ÿèÞÐ8767#"''32654''67&''67''67&'767&''6¿ "  4J P4,; :. (2   ") \Ð  9))     xÿéîÏ!'+73#"''3267#3#"''3267#536&'3#œ6   <_   ^  "TTÏ E-WI1{ (   qÿèò "(.4:73#3#3#"''3267#5365#35&'''67&'#&'TfŽ··² ±'czz r b      B  / v"  O    ôÒ73267#"&''7&'37&'7èZ,  6 c[-  »       sÿððÏ %73#5##53&'36732767#"&5¯ 0T6(!+,  $Ï00 Q/(  uÿððÏ %73#5##53&'36732767#"&5± /Q5' *+ "Ï00 Q/(  ÿë‚Ñ#'+17=73#3#3#"''3267&'767#5363535&'#'67&'21L]][   [ :::+$Ñ L  @   ‡  b~ÿðòÏ $7#5##53&'73673267#"&5îK/4! "(  ! ¬00 5++  ÿé{Ï!'-73#"''3267#3#"''3267#536&''6:-   4P   O &(Ï F-WH0{ &h  ÿëxÎ%73#327#"&'#67'56'&'g    6  Î8K) ?L ¬E53j   ÿé‚Ï+<Ma73533#&''6765#67&''67&'767''67'67''67''67&''67&'1++   1    S        =  ¸;*!'!P         4           ÿó}Ä 7#3#53#735#3#735#73#735#|WSf AA%% %% Ä«Ñ#55E&E& ÿéuÈ#7367326767#"&53533##5##)  % +((+È%   ;GG ÿêvÏ 7'655##53533#5#367'J.'&  [4 =Y"5**3 W  oÿéíÏ!'+73#"''3267#3#"''3267#536&'3#ž2   ;^   ^  +\\Ï E-VI1z )   kÿëqÏ"73#"''32765#3##5"'635#,:  . .$Ï–+ wW^ 'n3lÿòöÄ#73#3#3#535#535#735#33535#335ws011<Š;000/L/ÄtB P kÿñóž#73#3#3#535#535#735#33535#335ur022<ˆ9///0N0žd;@ ÿêq¥5767#"''3265'67&''67''67&'767&''6P    %   ) '¥  +       ÿé‰Ë  $7'67&'&''6#5##535#4<'F222Ë $"  0^^<*pÿéñÅ!735#53#3##"''32655'67#'->m  ##,¦.>>^ Q='"9qÿèôÏ 7373#'67#&''6767&'}@B  [ §(dD GTX#) .RJ) ÿéöÍ !%7'67&'&'3#5##5'635#X&)n" 1: 74,•rLrrÍ ! +0he(m2ÿæëM!73533#&''275#735#335&'#6*NN  Ng2/N<  E$* !&ÿèô™/573533&'73#67&'#"''32655'675#&'g"&` $ :# +6 =-g, |   +8  , ÿéfÎ 73&'73#3#3##5##535#"!X EEEEH!!!² U T6%yÿéóÃ!&+/733##3#5##5'67#5367#5347#3353535#‰\<K2  )!"%,22Ã++ X >     - €+yÿéïÈ"&*.2767#533#"''3255##5##53&'35#33535#335– Me "  22P2¬   //8¥ =JtÿéõÌ ,27'2'6'&'&'3533##"''3255#&'å 0E8.  &    O  O  Ì  =H  E ŸÿéñÃ73#3##'3255##5##535#ŸR"   Ã&j  U‘‘p&dÿç•Ð 73'65'3#ƒ!Ð…<( $4eˆ ÿèôœ%)73&'73673#3265#"&55#'67#735#+  8 1("J @*}}x  I+ 2@1#<ÿþɧ"(73#3267#"&55#'67#53635#7&'¡    +'= 8AA  §  B  $)BD ;   1ÿóÉx$(73#3267#"&55#'67#53&'73635#•   / +  5CCx 9  % 9   50ÿöÉx&*73'7'#3265#"&55#'67#5'635#b 9    5 0 <   (% %(015 0 Ï?6 QJ,#BN-ÿéõÒ ,7#5##53&'73#3#3267#"&55#'67#ç¥^W‘‘ÐB '&'& >=¹--  /@   G*- =MÿçõÑ -7#5##53&'73#3#3267#"&55#'667#ìb< 9WW'   $´1 2  ,B  F*+  #"aÿçõÏ .7#5##53&'73#3#3267#"&55#'667#íW73MM|'   ´1 2  ,D  H,)  "#uÿè÷Ð .73#5##53&'3#3#33267#"&55#'665#º,N1BBr   Ð 1 !2 BC  G+)  "$IÿëõÏ -7#5##53&'73#3#3267#"&55#'667#ên@Bee™/  )±*,  ,B  E((  _ÿëõÏ -7#5##53&'73#3#3267#"&55#'667#ì_8 ;ZZ…'    #±*, +B F((  fÿéôÇ *73#535#535##5##53&''67&'767#wijVTTUx` g % (!   PÇK  G"#'  `ÿéöÇ *73#535#535##5##53&''67&'767#qop\ZZ[g m$ ($   UÇK  G"#'   iÿèõÐ*.273673#3#"''3267##5'67#735#53&'35#35”  0:  % !& (- 8+Ð  ?8Q@$!BK-qÿéêÐ"(733#"''3255##5335#35#7'6'&'¥1  M/MMMMN  Q  Ð=’  ;ª0Ly  qÿòóÏ"(73533#&'#5'67#'33#7&'7'6%%%  o‚(  W  {TT ?E  #Y¿Ê pÿéôÑ)/57676767&'7'#"''3255'67'67&'''6 %,$   42  ? ’5! Q  K($i  eÿçôÇ(,048<73#3#3673#3#5##5'67#535#535#735#33533535#35#p}G%% 1 @B '9*$$%#GBBBBÇ5 [ I –0_ÿéõÏ'/373533#3#535#3#735#3673#53&'#5##535#c>==4~7> vvRR%$–"mTTT   *1$ (= =!qxäË 73#735#35#qssKKKKËS11[ÿêïk)/573#"''3255'675#73#"''3255'675#&'7&'h<    !)K<    !)?  [  kj  #j  #   ZÿéñÇ"&,28>7#3#3#3#"''32767#55#5#35&''&'''67&'í3----7  r<((((   2  (  ÇN  2‚&%/  [ÿéôÉ 6=73#735#33535#335'67&'3&''67&''667#k%%6%[%%6%S N (9 %,&"  %  0É[59(        MÿèòÌ5:@7'23673#3#3&''67&''67#5367#53&'67'&'â 5N@& -KTYP  !  ' $$ )  %  Ì    $)  m z fÿîôÈ #'+/373#3#735#33535#3353#3#735#33535#3353#j……vv 2 R 2 j‡‡yy""3"U""3"qŽŽÈ @' # $ A' % %bÿéøÊ -73#735#3#735#73#735#3533#&'#5'67#zbb::$<<5<<\9>2" " #2Ê4177;   73 \ÿèõÐ%)/39?EKQ73#3#3#3#535#535#535#535'235#&'735'6'67&''&''&'è"??9988?>6699>>2?.&& 3&  Q  u    Ð ?    ?  e    `   ÿî™Ç !/73#&'67&'67&'63#67'75#„„   3   4    ]{5;I:2Ç   L' *ÿï…Å !/73#&'67&'67&'63#67'75#uu    /    .   Po-0;2.Å  H%  )ÿêÏ1733#3#5##535#53#"''3255'7567#536E005X6//D  26 :Q Ï''}'    ÿîôÆ !-73#&'67&'67&'63#3#535#ÆÆ&UX Ê]jçiYÆ   K33 ÿïuÅ !/73#&'67&'67&'63#7'675#ee  )   (   D`&")2'Å  I%  *YÿîòÄ !-73#&'67&'67&'63#3#535#c‹‹   7   9   iŒ=C™C<Ä   S**dÿîòÄ !-73#&'67&'67&'63#3#535#n€€  4   6   b‚8=Ž>7Ä   S**ÿíºk !-73#&'67&'67&'63#3#535#’’  A  ?  u–AK©KBk      (GÿîòÄ !-73#&'67&'67&'63#3#535#Rœœ   =   @   wGM«KCÄ   S** ÿéjÏ73533#67#5'675#'6 Ä"22: SI  D (Jÿîó— !-73#&'67&'67&'63#3#535#V””   :  :   m@M©I<—     9  MìÏ"73&''67&''6655667#× /=k   C  TÏ   % $En  ÿézÑ%)-7&'3&'73#67&'7''5'63535C! =    &***Ñ   W/   2"uÿéîÏ!7#"''3255#&''67##5373î    !4¨§  "B­¿''_ÿéòÐ "73&'73#3267#"&55#'655i5 5e  +§s  e-%44^ÿîóÎ-7#"''3267#5327667##"&55'753753ç      *  ŸR##$ _Yb  # d93D>Xÿêõ¿73#3267#"&55#'655#f…"   )%"¿© ! ¬RE, )  ” ` J # ~ÿéòÏ 73533##5#~2//2NN††‚ÿèøÏ7&''67&'±  Ï$r2 ]M02\!pÿéðÀ73#3##"''3255#535#ym*44  88/ÀAV  QAhÿéôÏ735#535333#&''67#75#n1''/9(&&* -`]6))I3 22 $.6)ˆÿéõÉ%7#"''3267#3&''67&'767##5è  9U     ?É4 J5$     qßzÿèóÏ 733#7&'7&''675#5335#35#®(( *3(((Ï,b6 ! 9bP>>> ÿémÏ&73533#3#3#"''3255##5#535#535# ""!!+   "" ±9 $WWwÿñôÅ 73#735#35#3#53535#35#35#ŠXX2222M }    Åg=C=JJJ99999aÿðôÅ 73#735#35#3#53535#35#35#zcc====Y“!!Åg=C=JJJ88888ZÿðôÅ 73#735#35#3#53535#35#35#tggBBBB^š#"Åg=C=JJJ88888Xÿðô’ 73#735#35#3#53535#35#35#pllHHHHdœ$$’J-,,:::***** ÿ÷b˜767'67'67676'6P (   %({( ! T 8ÿìõ 73#735#35#3#53535#35#35#X€€ZZZZz½,,W461;;;***** ÿíÀp 73#735#35#3#53535#35#35#&~~ZZZZu³**pD) # &$$$HÿðôÅ 73#735#35#3#53535#35#35#fqqKKKKi¬'&Åg=C=JJJ88888IÿéëÈ!773#3#"''32765#'67#735#35#3267#"&5536cySl g SSSS= "(  *"ÈU X" 8 31K    , WÿéëÈ!773#3#"''32765#'67#735#35#3267#"&5536noKb   [  IIII5 $ % ÈU Y! 8 31K    , `ÿéíÇ %7#5##535#35#535#53#3#3#7&'íggg " Q "UD  ÇÞÞ½«„++4  EÿïîÉ"&*735#53#3#3#3#535#535#'6735#35#`*9‚5==77CŸH661 \\\\g \\ Y8`ÿïóÉ"&*735#53#3#3#3#535#535#'6735#35#w!0p,22--8ˆ<--'JJJJj[[ V9 ÿÿeÀ73#3#67'675#535#V"  ( À6= D6cÿéöÏ!'+173533#3#&'#5'67#535#35#&'735'6p8771&" 18. ¹T DP.$TW.  ..  ÿéóÏ!'+173533#3#&'#5'67#535#35#&'735'6dddTA#3 9%": 5 @Td$@@ H@ »X"-NM*!XY2 22;ÿéòÏ"(,273533#3#&'#5#'67#535#35#&'735'6KIGG=,'%-(&=I ))5)  ¹T%LT/$TW.  .. UÿéõÏ!'+173533#3#&'#5'67#535#35#&'735'6c><<5'!( #"5>!!0!¹T"GR-$TW.  .. \ÿéõÏ!'+173533#3#&'#5'67#535#35#&'735'6i<992% ' ! 3< .¸R "GT.%RX0 00  ÿéô !'+173533#3#&'#5'67#535#35#&'735'6 iiiQ@$5 9%$77!?Qi+>>  E>  J !55 JI( ((  pÿéöÏ!&*073533#3#&'#5'67#535#35#'735'6u644.# /6, ¹TCJ*%TW.  ..  ÿçôÏ48<A73533#33##3#&''67'67#5367#535#535#535#353567\]]Pe‰: $ .$N :$9 =I9PddPP\p<<P  . ")#*55**1C!!!8! ¿       A  ÿçð¦59=B73533#33##3#&''67'67#5367#535#535#535#353567WXXMg…4 " /'E &/55@1NeeLLWk:::f4œ           7  TÿäôÏ#;B73533#33##535#535#535#35353#&''67'7#53667#a8DD7y/<T " 2 ,%#,,À"! !%    1   ÿç˜Ï#;A73533#33##535#535#535#35353&''67&'67#5367#2<<-g&22##2F.7  '' *¿" !    * ÿé…Ï#'?D735#53533#33###5#535#535#335353&''67&'67#5367##++44* *##..#5.2    #  '  + pÿéîÇ %7#5##535#35#535#53#3#3#7&'îXXXGK<ÇÞÞ½«„++3  rÿèôÆ"7#5##53'>33267#"&5ã@&    Æ‹yy‹(R.*  #,9 ÿío}7'67#535#53533#3#&D "'("""#  " jÿæòy"7#5##5333267#"&55'>Þ@*   . y^LL^% !   $KÿéëÅ 7#5##535#3533#3#535#35#ëzzz ***"W"*22ÅÛ ܽ«%FFO"aÿéîÅ 7#5##535#3533#3#535#35#îggg$##K$''ÅÜ Ü½«&EEP$hÿéîÅ 7#5##535#3533#3#535#35#î```! H!$$ÅÜ Ü½«&EEP$ÿéãŒ7#5##535#3#3#535#535#35#ãžžE55'c(55E/@@Œ£ £„q44UWÿèé– 7#5##535#3533#3#535#35#ékkk%%%N%((–® ®‘€888fÿéîÇ )7#5##535#3#&'#5'675#535'2îdddN !!  !!!ÇÞÞ¾¬ :0 #pÿêìÅ (7#5##535#3#&'#5'67#535'2ìXXXH     ÅÛ Û¼ª D2'RÿéìÊ  $7##535#35#7#"''3255#535#5#–1‡  1Ê\…á%87Ä b\%8aÿéîÊ  $7##535#35#7#"''3255#535#5#¡,y  ,Ê\…á%87Ä b\%8KÿèíÊ #7##535#35#7#"''255#535#5#’6$$$$‘ 9''''ÊO“â -/Ì zO -LÿéîÊ  $7##535#35#7#"''3255#535#5#”4 Ž  8%%%%Ê\…á&<6Ãa\&<FÿéêÉ $7#"''3255#535#5#'##535#35#ê  7&&&&$6$$$$ÉË  ‚D & 5Dœà & NÿèïÊ  $7##535#35#7#"''3255#535#5#˜8&&&&  9''''ÊCà ( 'È  €B ' VÿèïÉ #7##535#35#7#"''3255#535#5#›3!!!!‡ 5####ÉGšá ' +Ì ‚G ' ÿèæ— $7#"''3255#535#5#'##535#35#æ  I7777&G4444—–  HH ' 7Gf­ ' ÿéë– "7##535#35#7#'3255#535#5#tJ8888Á O====–He­ & ,” FH & žðÒ!73#&'#'673#&'#'6+B"pM( Ò   ÿèïž +/373#3#535#5#35#3353353#3##5#535#735#35#ÝH<Æ CÈÚ‰ÿéöÏ!%)-73533#3#&'#5'67#535#35#33535#335•%%%$  $%"4"»[' !;;![9; ÿéö !%)-73533#3#&'#5'67#535#35#33535#335gggQ?#7 :&$75#?Qg)>>R>>>R>’O "44 O.-Yÿéö›!%)-73533#3#&'#5'67#535#35#33535#335d<<<5& #" !)5<""4#W""4#G !84 G* % rÿéöÏ!%)-73533#3#&'#5'67#535#35#33535#335v455.%  #.4-H-»\"">?\9:YBôÍ!%)-73533#3#&'#5'67#535#35#33535#335e:<<4'"  #'4:""4"V""4"à  >   > # ! VÿéõÏ!%)-73533#3#&'#5'67#535#35#33535#335b><<71% !$',6>##6$Z##6$¼\#!>C#"\9: ÿéuÏ"&*.73533#3#&'#5'67#535#35#33535#335***$$   $*&:&½Z =BZ88ÿéñÇ"(.473#3#"''3255##5##535#&'7&'&''&'âg^  JJ^g3 i N Ç“  {‘‘™¬?   $qðÎ#73#3#5##5##535#3#73#3#73#ÄXfQQfX??d@@e??e@@Î (11' "yðÎ#73#3#5##5##535#3#73#3#'3#ÄYgRRgY??d@@@@e??Î%++$   ÿéLr 7&'&''6&  ) r      Eÿèôl#73533533#3#535#35#'67&'S4!!)¬(044  Y Z2   ƒÿéæk73#"''3255#'65533535œJ -)*+km 0("  ÿé…o#'+/73533533##3#3##5#535#535#5#5#35#335),,0055++Q) +h  &  &  - QÿéìÇ%)-73#3#"''32765#'67#'67#'67#735#35#msG_   2 -0+ KKKKÇ^ N -9!+* 7:nÿéìÇ$(,73#3#"''3265#'67#'67#'67#735#35#{f=R , &$    >>>>Ç^ N18"+' 7:fÿéíÇ$(,73#3#"''3265#'67#'67#'67#735#35#wkBW / )#   CCCCÇ^ N18"+% 7:ÿççe$(,73#3#"''3265#'67#'67#'67#735#35#0¢r‘   7- ;3)&}}}}e6+     !gòÐ")/57'6'#3#3#3#&''67#53567&'#7'6'6× 5-4TPPPP[ -1 #£ 90% #7 7Ð       ;V 8     WòÏ")/57'6'#3#3#3#&''67#535&'#67'6'6Õ 0.3VOOOO[  +1 L" 1 2$ %5 :Ï      D] C      JöÎ!'-37'6#5353#3#3#3#''63'#67'6'6ß 7/‘"n\TTTTb -3M # ‘ 2 5$ $9 :Î  OI   L    pÿéìÇ$(,73#3#"''3265#'67#'67#'67#735#35#{f=R , &    >>>>Ç^ N18" +# 7:NÿéóÏ %)-73533673#3#5##5'67#535#67#35#35#d-10F!YM  59-A MMMMµ ue TAzÿéóÏ#'+7353373#3#5##5'67#535#67#35#35#Š #2B3 $'2 3333µ ua oAKÿé©Ï #'+7353373#3#5##5'67#535#7#35#35#V " 5" ' """"´  ud pCÿéê&*.73533#3673#3#5##5'67537#535#35#35#D'## =Z hy  'PT'yyyy‹  [ B U- zõÐ73673#&'#'67#QqB, 6#% 9 (=½     }ÿéòÈ #'+/73#735#'3#735#3#3##5#535#735#33535#335¼44N33 h+1111**B*È22/V((355ÿèì$)-173533673#3#5##5'75367#535#67#35#35#H8) )FQb  DE8X &-bbbb€  Z E   @0Uÿéì{$(,73533#3673#3#5##5'67#535#35#35#e(  !8?M 64(MMMMk  I4 E % -ÿéá  7'66553'#3U Ÿzzt(8+ (N, ^ÿéóÏ#'+73533673#3#5##5'67#535#67#35#35#q$)/BOE -.$8 EEEEµ ub  nB ÿéóË,049=73#3#3673#3#5##5'675327#535#535#735#35#35#35#)¬\BB(& 'JRw%$iXBB=„„„„wj wwËE  T ;   ) % '…ÿéóÏ!$(,73533673#3#5##5'67#535#7#35#35#”  , <. "#. ....´  u`pCQÿö’Ï7&'367'5#j  * Ï ?m  pEÿéòÏ!$(,73533673#3#5##5'67#535#7#35#35#]/24I^Q #7;/C !QQQQµ  uf oA>ÿé„Ë#7#"''32655'67&''67&'76t       Ë 4=#$&   ;ÿê’Â473#67&'#"''32655'67''67&''67#CM           '$ ‰ÿéôÏ#'+7353373#3#5##5'67#535#67#35#35#™ &5* "* ****´ u[ pC òÏ%*.73533#3673#3#5'675367#535#35#35#%D22" 3OQŒhUD.dcdd½ V<  \3Cÿéñ¡$(,73533#3673#3#5##5'67#535#35#35#](**&>OT ")@7(TTTT  a M  W3 ÿèò”$(,73533#3673#3#5##5'67#535#35#35##K11)" 3Z cp'.(WbK.pppp„  Z I  R.lÿéóÏ $(,7353373#3#5##5'67#535#67#35#35#z%% '8 I> ..%8 >>>>µ  u` oANòÏ!%)73533#32673#3#5'67#535#35#35##D553 1W!]˜.'TVD0pppp    >.  ? $ ÿççD)/573#"''3255'675#73#"''3255'675#&'7&'b %-3&Pnb %-3&P`uDK   K     ÿé{Ç$(,7#"''3255#'6553533#3#535#3#735#{   A  3//ÇÅ  ¯SC7 3B_28;~ÿéïÆ(.473#"''3255'675#73#"''3255'675#&'7&'…3    !:0    /  IÆÃ  8 VÅ  5 X   ‚åÊ #73#5'675#73#5'675#&'7&'[%,In[%+IfrÊE  E  VÿèöÏ"(,0673533#673265#"''67&'#7&'3#735#'6\O44      P|  e??5%.2©&6$5!(#,->7 DC!:  2÷Ï'+/573&533&'73#67327#"&''67&'#3#735#'6 L     €[[44M1<?·  !%,   )5, ÿéúÐ"(,0673533#67327#"&''67&'#7&'3#735#'6€ML    À  žVV..M2=Cª&3#" /&7.=9   GK%I  JÿèïÏ#)-1773&533#673265#"''67&'#7&'3#735#'6NY66     %Yƒ  m@@3$+0©&%%4!-%1'@8 FC#< wïÏ 73#5##53&''67&'d¶b - )X(" #'Ï --$    ÿéó‰'+/573&533&'73#67327#"''67&'#3#735#'6s "P   uQQ--M2>@j   '/  !& 5+ ÿéó†(,0673&533&'73#67327#"''67&'#3#735#'6s "Q    tQQ--M2>@r  &#"2  #,7.  ÿékÏ!'73#3#5##537#53635#35#35#7&'S ""0(6 (000000Ï™™c?@®  ÿèíË ,73#535#535##5#3#"''3255##5##535##5)©©•‹‹•ÄNI  54HQËTN,1  GG5G/qÿéôÇ *73#535#535##5#3##'3255##5##535##5ggVOOVu'0 0'ÇPO/  FF7Gÿêì– ,73#535#535##5#3#"''3255##5##535##5-ž¡Ž††‹¿OH   66IQ–C  >!  33$3$tÿéî  ,73#535#535##5#3#"''3255##5##535##5}efTPPSq")  *$ @  =&  ::-< yÿéõÇ *73#535#535##5#3##'3255##5##535##5†bbPIIPo", ,"ÇPO/  FF7GSÿéöÏ48<B735333##67&'#"''32655'675#535#535#33535&'`288  ,    $33==2E%%%f »$%   &+ /$/  ,ÿéô¸37;A735333##67&'#"''3255'675#535#535#33535&'E@FF   1  +# 5"@@YY@T222x  š"#   "    "' ^ÿé÷Ï48<B735333##67&'#"''3255'675#535#535#33535&'o+44  '   #--55+>!!!` »$%   &*  /$2  hÿé÷Ï59=C735333##67&'#"''32655'675#535#535#33535&'|)--   "  #**22);Y »%$   $) 0%2  ÿéñÏ.26<B735333##67&'#"''32655#535#535#33535&''6'OJJ ! :!  PPddOc666•Q'13¼$%   /3 X$2   ÿévÏ$*073533#3#535#3#3##"''3255#&'''6*++$Z#* UU e(  *T  5  ½6=  9 cÿéõÑ "(.7#5##53&'73#3##"''3255#'67&'ï^73OO‰=   9 \³0/ *K  H ÿéì™ "(.7#5##53&'73#3##"''3255#'67&'ì³aV••Õa   ^1! {! ˆ)) #.  + GÿéóÑ "(.7#5##53&'73#3##"''3255#'67&'ìoA ;[[žF    Dl´10 +J  G hÿéõÑ "(.7#5##53&'73#3##"''3255#'67&'ðW2 .II8   4 X ³0/ *K  H !TïÎ "(.73#5##53&'3#3##"''3255#'67&'‚]°^7““Ñ^  `5 ' (x# "Î""!      MìÐ 73#5##53&'#3#535#35#¡ByGCYcvGGPPÐ #$078'_ÿèëª !73#5##53&'#3#5##535#35#…\­a^‰“€vv€€ª ,,16D ‹&]pÿéòÐ !7#5##53&'7#3#5##535#5#ò[5'MQ>99>>¶%%  +@M ¢-qpÿéòÐ !7#5##53&'7#3#5##535#5#ò\7&NR?;;??µ$$  *?L ¢.rfÿéñÐ !7#5##53&'7#3#5##535#5#ñe<(VZGCCGGµ$$  *?L ¢.r_ÿëôÏ $*73&'73#3##"''3255#735#'67&'i89†r.  1LLd  ³ HA  =$@ ' NÿëôÏ %+73&'73#3##"''32655#735#'67&'\9C’ x3   1PP l  ´  I> 9#@ ' SÿëôÏ %+73&'73#3##"''32655#735#'67&'`: =Ž v1   1MM j  ´  I> 9#@ '  ÿéqÏ"(.7676767&'7''67'67&''674'$   &%  5  0„:"  /*i   ÿënÏ"(.7676767'7&''67'67&'4'''6$  $!  …9"   /+iTÿèóÐ<@DHLRX73533#3#&''67#5365#'67#5365#53533#3#&3#735#35#35#'67&'^   n    u€€ZZZZZZ  P À   &  Y? # #     ƒÿëôÏ $*73&'73#3##"''3255#735#'67&'‹,%eY# #33   Q  ³ H?  :$@ &  hÿëôÏ $*73&'73#3##"''3255#735#'67&'u04z g*  *AA]  ³ H?  :$@ ( uÿéòÐ %+73#53&'3##"''32655#735#&'''6µ/v1c'   )==@  9 Ð  ˜C  >8    '  Ï  +„a %6F#   $,   ?ÿéõÑ *1773&'73##5'673&''67&''667#7&'KG G£!  =>"     .  ¶  ‰j %'A-    $#+ VÿèðÐ !7#5##53&'7#53#3#5'35#35ðtD 1hU_LBBLµ))  Á ¢>M jSiÿéñÐ  7#5##53'7#53#3#5'35#35ñb< *]JS@77@µ)) Á ¡>N jS2ëÒ 73#5##53'3#3#735#35ƒ`°`?›ˆ•¨uu‚Ò ,.,0 2O=_ÿèðÐ !7#5##53&'7#53#3#5'35#35ðk@ .dQZG>>Gµ))  Á ¢>M jSOÿèéÐ !7#5##53&'7#53#3#5'35#35érD 1jV`LBBL¶**   £?N kSUÿêî¤ !73#5##53&'#3#5##535#35#¡BtBGV\JCCJJ¤ ))/5A …%[ÿéíž !73#5##53&'#3#5##535#35#€b²b`‹™…ww……ž &',4 A „#VÿèñÑ #/73&'73#&''67&''63533##5#Y WÈ2 u  •ieei¸    -9CCÿéñ™".73'73#&''67&''63533##5#[  \Ï3   t  ”egge„       $//Fÿèð¦ #/73#53&'&''67&''63533##5#Ÿ>–B  V lLJJL¦ $  !   - 22ÿéïŽ ".73&'73#&''67&''63533##5# XTÁ+  x ”eddew       "'' ÿéó¤$073#&''67#&''67#53&'3533##5#‚X*   J   -_bihhi¤  !   v--rÿéòÏ #/73&'73#&''67&''63533##5#{-0s F   O5665´      -   ;>> ÿè…Ð/397'67#53655#'6553&'73#35#535333##&'3535R    /)[$  %% =1 2;Y  C('k(  ÿèñ¥/3973#35#535333##&''67#53655#'6553&'3535ŽU³L<<B87 <9 0/:L[001¥2   & 1' )0I? tÿèðÏ"&*73#3#"''3255##5##535#53635#35#£5+5  ""5. EEEEÏX<  %SSDVX -4 ÿéuÏ"&*73#3#"''3255##5##535#53635#35#5/%*  +& 9999ÏV5  YYDVV ,2iÿèïÏ!%)73#3#"''3255##5##535#5335#35#9/:  '&92%NNNNÏX<  %SSDVX#4oÿéïÐ"&*73#3#"''3255##5##535#53635#35# 7-7  $#6/"IIIIÐ [7  "QQ@P[ /9ÿè{Ð 73#3#3##5#535#536#335#:,NQ*----'*;;;>>Ð 77++JZÿèòÐ 73#3#3##5#535#53#335#’>gk7CCBB4&ATTTXXÐ88++‚JFÿéôÏ#'+73&'73#3#3#3##5'65#5#35#w/  04----6} "C44444Ï!!! ,+!!3!!3!Aÿÿ†®73''67&'767#K2      ®A#%•ÿèôÐ#'+73&'73#3#3#3##5'65#5#35#³< #Ð$##„..$$4##4#;ÿêœÏ48<@73533533##3#3#3#&''6677#537#535#535#5#5#35#335D  ##*'  ! 6  ¾ 2    2 =ÿéðA 733##5#53wffggA11BAíÑ#'+73&'73#3#3#3##5'6353535k*5<4444;}00000Ñ L ! !;JÌ 7&''6' Ì  A Eÿèó#'+73&'73#3#3#3##5'65#5#35#p+6;2222<‚ A33333  g&'V“ìÎ 73353353#V..–Å )) 2 ;îÑ$(,73&'73#3#3#3##5'65#5#5#F8 JQGGGGY® (M?AAAAÑ  L & !+ÿéÚ1 7#5##535#Ú‰‰‰1H H+7ÿéœÏ #8>D73&'73#&''67&''63533##"''3255#'67&'F#R  .     5% % C ´      $   - ? <&  }öÐ73673#&'#'67#Sn9' / , < ,>À  !  ÿéð’"&*7'673&'73#3#3#3##75#5#35#+ 9TSHHHHW±ZFFFFFK "&   j'&Zÿéð‘"&*73&'73#3#3#3##5'65#5#35## )-&&&&0l 8)))))‘   `!&&ÿê\Ž73533#7#"''3255'675#   w"-  !)dÿéõÐ $(,#5'673&'73#3#3#3'353535   (  &-''''/f$$$$$ $!"!™!!2""4!!oÿêìÇ$(,7#"''3255#'6553533#3#535#3#735#ì  M  @99ÇÄ  ¬l>!!>w27;fÿéóÐ#'+7'673&'73#3#3#3##75#5#35#€  (  *&&&&-_4 „ #( """‰""3""3" ÿéóÏ  $(73#''67&'#"''3255##53#735#u( #(~! &9   Ž2QQ++ÏLB $;z  b€“+C!ÿéäÏ $(733#"''3255##537'6'&'3#735#u[  žWQ} &bb::ÏB‹  s‘¤< \P*PÿèëÐ $(733#"''3255##537'6'&'3#735#”C  sDDe  %EEÐJ…  nŒž<  XG%mÿêìÎ $(733#"''3255##537'6'&'3#735#¢5  W59Q  <<ÎG‚  kŠ;  YG%| íÏ $(733#"''3255##537'6'&'3#735#«-   I/2  J  33Ï@n  Ys„4  K@rÿèîÐ $(733#"''3255##537'6'&'3#735#¦4   U48 Q  99ÐJ†  qž< ZF& ÿédÐ#'73#"''3255'67#5353635#35#35#2$   $ &7  ******Ð º  )'p 299PÿéõÐ%)-48>7&'73327#"&'##5#'655365##5#&547##5#'&'š  ? OO  Ð 0"$$$!(99# ']G. Ž  ÿé÷Ó!%*04:7&'73327#"'##5#'6553635#33&535#73''&'s  a :<zy99M7„:9M9ˆ  Ó q(.CAA& '3IG E r ÿòðÏ!'7&'73#3#535#53635#&'7'6P  r ;FNáIEƒ9""?  °Ï ‹‹³‹#+ *&1! ( ÿïó’ *7&''63#3#3673#53&'735#535#‡14 5607 E s/YY 2Þ4 YY0’   #   #DÿîóÏ#)/7&'#3#3#535#535#5'63&'&'7'6“%, 0CCK¥G??- 7 V  i  Ï& DD $ ^   RÿðõÏ$*07&'#3#3#535#535#5'63&''6'&'œ$% *==CœF;;) 2YB [  Ï)== %$_   }ÿðô¾7333267##"&5477#€_A  #8G¾}  !'$i ÿðò± &,7&''63#3#3673#535#535#&'€,8 52+; C y3YY  1Ñ^YY3  ± %!/// qÿêðÆ73##53#3#"''3265#ƒ^^ MK OÆ=*G-vÿéóÄ73#3##5#535#}q05544-ÄInnIrÿîôÏ-7#"''3265#532667#"'&&55'753753ê   )! ¤U$/ `Y g# cD<E=lÿêöÐ7&'5#5'66556Þ   4Ð$>C4t"¿7L? $5%HqÿéêÈ7#"''3255#'65535#35#ê <;;;;ÈÁ 3.) 5@_;(b'VÿéòÒ 48<7'2'6'&''&'33###"''3255#535#535#33535Ù 6NA> /    „8  77@@7L$$$Ò     ()!  )ÿéïÑ 48<7'2'6'&''&'35#533###"''3255#535#75#35#Õ LmZPB  /  aL®N  PPa¯:::Ñ       A((  (^ÿéóÏ 48<7'2'6'&''&'33###"''3255#535#535#33535Ù 3J=9  *    |7   22::1E###Ï      )("  ) ÿéó›48<7'23&'736733###"''3255#535#535#53&'3535Ô JjX5 #  R SSiiU T>>>›    !   wÿéôÑ 48<7'6'6'&''&'35#533###"''3255#535#75#35#Ú #C ?!!0)k /  ))0^Ñ    D)*"  ) ÿèöÑ#'-373#53535335335#33533535#35#35#'67&'Ýí8#o$$8#$“$$8##7$$I*'b'$ &&´B/////n.....F    `ÿçõÏ#'-373#53535335335#33533535#35#35#'67&'è ” #E"V"#5 N¯uu ;)))))c)))))@  IÿçóÏ#'-373#53535335335#33533535#35#35#'67&'ã© )O'e'(;!Y¯uu :(((((c)))))@  XÿçôÏ#'-373#53535335335#33533535#35#35#'67&'å› &I%[%$9Q¯uu :(((((c)))))?  JÿèñŸ#'-373#53535335335#33533535#35#35#'67&'ã§(O'd'(@ SŒ]]/K5   fÿèõÏ#'-373#53535335335#33533535#35#35#'67&'è "D"T""7O¯uu :(((((c)))))A  oÿçõÏ#'-373#53535335335#33533535#35#35#'67&'ê … ?M 2 I¯uu :(((((c)))))@ ÿèõˆ!%)73#3#&'#5'67#535#735#33535#335+¨LcN$5 ;)"8 3I^J66H8€66H8ˆO  10  /-ÿèï˜!%)73#3#&'#5'67#535#735#33535#335+«KcR#0 7"!62 QdL99M8…99M8˜T !8822dÿéíà 73#735#35##5##535#35#mvvNNNNlaaaaaÃ]797m m'<lÿéîà 73#735#35##5##535#35#uqqKKKKf\\\\\Ã]797m m'<ÿèâ 73#735#35##5##535#35#/¢¢|||| I,+)` `#5yÿéíà 73#735#35##5##535#35#€ee====YLLLLLÃZ578mm(>?ÿô¾s 73#735#35#3#735#35#IiiIIII]]]]s8" >% " G¸ 73#735#35#3#735#35#Ncc????qqKKKKF+ & (H+ ' ÿéïÄ 73#735#35##5##535#35#†aa;;;;VHHHHHÄ\677n n(=Zÿéôn73533##5#'67#535'6§ * *, #))#n00CC(‡tèÉ 73#735#35#‡aa====ÉU34€ÿèòo73533##5#'67#535'6¹   o00@@' ÿéžÅ $7#'6553#3#3#5##537#33535#\,x'//':''SSS,::Z>1 5=]=TTv~!dÿéðÅ $73533#3#5##535#'6553'#335#‡)--&7%*tOO877ˆTT@. 5>]=+!QÿéñÅ $7#'6553#3#3#5##537#33535#©1ƒ,55+B*,]]]1BBZ?0 5=]=TTv~! ÿé€Å $7'6553#3533#3#5##5357#335#-aO""'==(''Z?/ 2?]=TT[Ž"DÿéõÏ%+73533#3#3#3##5#535#53&'#535#367#T@@@N# ?NNMM>" !P@5& A¶ 11K \ÿéòÏ%*73533#3#3#3##5#535#53&'#535#367#j544@4@@@@3C5-4¶11K ÿé€Ï%*73533#3#3#3##5#535#53&'#535#37#&%%.&////&0&" (¶11K ÿéxÏ%+73533#3#3#3##5#535#53&'#535#367#"""+"++**!,"!¶ 11K ÿéóÏ%+73533#3#3#3##5#535#53&'#535#367#"UVVh1 'SggggT. ,jUB: \ ·11JLÿéïÏ%+73533#3#3#3##5#535#53&'#535#367#[:::G 8GGGG;I:1# ;¶ 11K ÿ逛$)73533#3#3#3##5#535#53'#535#367#&%%.%....$ 0&$%Š$$8 NòÏ%+73533#3#3#3##5#535#53&'#535#367#];::G 9GGGG9 J;1#:¼ ** > ÿçò$*73533#3#3#3##5#535#53'#535#367# VVVh3%O____M%1hVC:S 6 #‘ÝÈ 73#735#335335#ºº%%7%&È7^ÿðóÐ %73#5##53&'&'''63#3#535#¦=g;-  #y4B”?2Ð .1 : .22lÿñóÐ %73#5##53&'&'''63#3#535#®8\5)  n/;†8,Ð-0 : .22ÿïêe (7#5##53'7&'#3#535#5'673&'éª\,$ 7_Óa8 4 oW%&     @ÿéóÑ *7#5##53&'73#3#33#"&''675#éqBGt177/2 "0»**  6)0.;flÿëôÑ *7#5##53&'73#3#33#"&''675#îW2 9\$**#%   %»**  3.1,<j_ÿéôÑ *7#5##53&'73#3#33#"&''675#í[8=b'--')   '»**  3-0.; i ÿêõ¥ +73#5##53&'3#3#33#"&''675#„\­cF­LMM!0)E. /N¥ "" 9! #.N ÿé…Ñ *7#5##53&'73#3#33#"&''675#…L.4S$$     !»**  3.1-=kÿçîÑ#'+7&'73#3##5#535#53635#33535#335U  i &LddddLp i88M8…88M8Ñ  m..m@G ÿçiÏ#'+7&'73#3##5#535#53635#33535#335)  < ###''#/ '"1"Ï   g00g>CZÿéôÎ#'+7&'73#3##5#535#53635#33535#335‡  K #5CCDD5C>""5#X""5#Î  g..g?CSÿçòÑ#'+7&'73#3##5#535#53635#33535#335†  P 6EEGG6MH##6#Y##6#Ñ  g00g>ElÿæôÎ#'+7&'73#3##5#535#53635#33535#335“  B !/::;;/< 4/K/Îf11f?DGÿèò¥#'+7&'3673#3##5#535#735#33535#335|  _  "AJJNNA//B/q//B/¥   U33ÿèñš#'+73673#3##5#535#53&'35#33535#335T 1/PffiiQ) >>Q>>>Q>–  SS21~ÿæôÎ#'+7&'73#3##5#535#53635#33535#335   B +2222+= 5+D+Îe22e?E ÿæ’Ð#'+7&'73#3##5#535#53635#33535#3353  D !188::1? 70N0Ð g11g?Cÿîï¦ !73#5##53&'3#53535#35#35#€a­^`"Þ#qqqqqq¦ ,, 3nn%78iÿñóÏ !73#5##53&'3#53535#35#35#«;`7CŠ111111Ï *+ @††-GHRÿñôÏ !73#5##53&'3#53535#35#35#  CtBH ¢!;;;;;;Ï 01 @……,GGHÿèóÏ (.473&''667'6''63&''657'6''6›(! $/ ,< b 0+ .7 M? b  Ï$) A('#!* ÿç›Ï.27367&''676''367&''676''O "0 ( * 5 ". $ ) Ï  ,,   )jëÏ*067367&''657367&''65''67'6D   )l    (‰ p  Ï     !     !   7íd7#5##5íµd-,ÿíòG73533#3#535#)LKKhâeL,<ÿèôu /573&''66''67'6367&''66''6‹)$'&0-( l 4   7#81& u       +       ÿç†Ï-17367&''676''367&''676''D  (  # .  &  " Ï    ,,   )…ÿéõÏ!733#3&''67&'#5367ª22-  Ï"8(  0 ÿä³y177367&''676''6'6765367&''6_    "9 .)  58 *    Q  y       V    0  Hîs7#5##5î´s++ÿè÷P733265#"&'#3##5#535#/‘ ?44::*P,),*++{ÿèôÏ (.473&''667'6''63&''657'6''6³   ,  D ! % 4-  F Ï$ ( @(&#!* ÿéyÎ)73'67#'63#35#535#53#5##56/6  ' C0CÎ  %/ !!} x ÿó€Ò.73533#3#535#&'''63533#67'675#(((0s0(K * &$$0:&·0  " #Iît7#5##5î´t++Dÿèð  (.473&''66''67'63&''657'6''6˜(" "%+ .0  r9 + -6 N? d        4   ÿçíR 73#3##"''3255#'67&'6––¾R   X, * $|  R$     zÿèóÏ (.473&''667'6''63&''657'6''6¯  # -  K$ $ 1. LÏ$ (  A('"!*  YÍ.47'667367&''6'667367&''6I   6 $#    9 §   *  G     &  iÿèóÏ (.473&''667'6''63&''657'6''6ª  '!.  P ($ "+ <1  NÏ$' B(#"* 2ÿéÐY7#53#"''32=#335Ež  xxxx'pU  7  dÿèóÏ (.473&''667'6''63&''657'6''6¨ $#1  R(% $- ?2  Q Ï$' A(%" * ÿèó 06767&''6''667&''6''6{   00= b5 =   ' J  e9   # 1) $  .Uê %+17367&''65'367&''65''67'6°    )k    *  p             0íS7#5##5í¶S## ÿçô?7&''676''6À ") N#2) g n 4    9    …ëÎ#)/7367&''67&''6736''67'6E    %¡    (°oÎ     "    )    Qí~7#5##5íµ~--Qîx7#5##5î¶x''ˆêÏ%+17367&''657367&''65''67'6D    )l    )ˆ o Ï               gì…7#5##5ì´…ÿéìr 73#53&'3#3##5##535#`×^I¹¹¹¹³ŠŠŠr $  00 )ÿéØg"(,73#3#5##535#5#35#"&55#'67#333535#-§7;Š62^6Š( %!b#ŠŠŠg bb 2    <  F‡g 73#53&'P-z9g aÿéîÏ$*0673#"''3267#'63533##5'67#7'6'&'&'‹ Y   N (''  K1D Ïœ-$ !N::UA!B   8 HÿéíÏ%+1773#"''3267#'63533##5'67#7'6'&'&'{k b #111 !)^  A  O  Ï š/ˆ M::UEB   8 ÿèæ*0673#"''3267#'6'63533##5'67#7&'&'6    –| {KBB) &9(  \  u0a  ,,G@%;  <  `ÿéîÏ%+1773#"''3267#'63533##5'67#7'6'&'&'‰\   Q *(( #O6  H Ï œ-$ M::U@ B   8 cÿéðÏ%+1773#"''3267#'63533##5'67#7'6'&'&'Œ[  Q '$$   M5  B Ï š/% !N99WC@   9  ›ÿéñÏ973#"''327'#5'67#535&'75367'3#765#'6³3         )Ï )5>    +%  %_  ÿë_Ç!%)-39?7#3#3#3#"''3267&'765#55#5#35&'''67&'Z    8     ÇM  &&6!bÿé¡Ï#'+/73533533##3#3##5#535#535#5#5#35#335b   '¼%<((<%P ÿé~Î,2873#"''3267#'63533#&'#5'67#7'6'&',G  =    @ - Î ’„ R:: :6<  uÿéïÎ+1773#"''3267#'63533#&'#5'67#7'6'&'—M  @ "    D 0 Α &} Q:: 9><   ÿèzÏ.373533#3#3#3&''67''67#535#535#67#(%%""(51      .%%(4 %º      ‡ XÿéöÈ'-397367#53#3#&'#'677#3#"''3257&''&'''6a//w5I%!' &6   C    1 ™!# i  M#)+"!') ) " ÿêöÈ&,2873#3#&'#'67#5367#3#"''3257&''&'''6$·UqG77@ :JVMG X   JÈ "*/ Oc  F''+$!' )  *Mÿê÷È&,287367#53#3#&'#'67#3#"''3257&'''67&'_-+u7I$!$+##2   F  TQ  š  !$i  L#)+") ! !') <ÿéõÈ(.4:7367#53#3#&'#'6677#3#"''3257&''&'''6F87ŒBX-$'*  -C  I   8š  !$h  L#)+"!') ) !MÿèöÈ&,287367#53#3#&'#'67#3#"''3257&'7&'''6[,!n9H#$&, &&7   ,  .  T š  $2%!e  G%%)#% '(  ÿéó”%+17737#53#3#&'#'67#3#"''325''67&'7&'KM¿Zt=+ 3+: %8\   )e  7 l  !  M  1 %  LÿéðÐ $73#'66553&'33#3#5##5335#«:w :55,: ::Ð K>1 -!V ,&_ _B1bÿèñÐ#73#'6553&'33#3#5##5335#·0i7,,&2 22Ð M>3 3:X +&_ _B0?ÿêóÐ/573#'6553&''67#73533##"''3255#&'£ CJ  5  5  ÐI>. 08T %)‡‹""`  ]QÿêóÐ.473#'6553&''67#73533##"''3255#&'­<B .   .ÐI<0 /9T ƒ%)‡‹""a  ^ÿïñ— %7#5##53&'7'67&'3#3#535#í²^' - /K*&((f´QhâfO„*+     #""QÿèõÏ773#&'#5'67#535'633##"''3255#53567#Ø =- #& !*=/96u??  LLWÏ &*  f !  tÿéôÎ873#&'#5'67#535'23567#533##"''3255#ß 2% !0054 D]00  4Î'& •   LÿìöÑ +17=7&''6&'3'67#33267#"&57&'''67&'¤( ' # 4 )x  ` -  7 ƒ  Ñ    &; ;$ OÿìõÑ *06<7&''6&'3'67#33267#"&57&'''67&'£% &# 1 *u \) 4   Ñ     ';  8  $  ÿì˜Ñ !'7=7&''6&'3'67#&''&''33267#"&5''6M$(  !_  Hc      Ñ !  /  - 0 XÿìõÑ +17=7&''6&'3'67#33267#"&57&'''67&'¨$ # . $n V (  3 y  Ñ     ';  8  $ DÿìõÑ *06<7&''6&'3'67#33267#"&57&'''67&'Ÿ!* +"& 7 -€ f +  8 ‰  Ñ     ';  <  % rÿìöÑ +17=7&''6&'3'67#33267#"&57&'7&'''6¯  ( d  N   $   4  S  Ñ    '< = ! ÿéôÏ )-157&''63##"''32655##5##5##535#33533536 66)> Omm• $####6#$Ï#(# i 1111=‚2_ÿéøÏ (,047&''63##"''32655##5##5##535#335335¥!# ""% 1??` #Ï%($ i "2222>2!!!!! ÿéô› )-157&''63##"''32655##5##5##535#33533562 85(= O __Ž $%%%%6%$›  M $$$$-f'TÿéøÏ (,047&''63##"''32655##5##5##535#335335Ÿ#& %$) 4EEi &Ï$'$ i 1111=‚3!!!!!XÿéóÏ (,047&''63##"''32655##5##5##535#335335ž!$ !"% 1AAd %Ï&(%!i 1111=‚3!!!!!9ÿésÏ 7#5'6_  ϰ‚ 2 ÿébÐ73#&'#5'67#535'6R     ! %Ð'qq$!/  ÿéò¥-1597&'#5'63&'#"''3255##5##5##535#335335/8 k BWq   """""5""¥   *M  """",d'eÿéøÏ '+/37&''63##"''2655##5##5##535#335335§ " " $ .BB`  "Ï%'$ i "2222>2!!!!!lÿéóÏ (,047&''63##"''2655##5##5##535#335335§  )<3"""""ÿéŸÐ',17&'3#3#&''67#535#5'6367#335S! D*1   '0 ,/ÐA!A i  zÿéî¾73#"''32765#'667#'6_      ¾¦.-tdEHT!$ \ÿéôÐ"(.47&'#3#&''67#535#5'63'&'3655#335§ "  3/% ', , ,3 2:   3!Ð! A"'%A   bWÿéõÐ"&,27&'#3#&''67#535#5'63'3655#335¥#" !61( ). -.5 4< "!"5$Ð! A!(%AdmÿêóÏ!&,27&'#3#&''67#535#5'63&'3655#335« -) % & '- (0 -Ï  A!%#A  eQÿèøÐ&,287'3#&'#'67#537'6767&''6'6'6È L$ ) $1  . 0/ (> B: -T WÀ     S "*  ÿèŠÐ!'-397'3#'67#5367'6767&'&'''6'67'6j  :B$   # $# / 0- !@ AÀ     J   ! + ÿíõÏ'7773267#"&55'75'75'6Þ ')-/ &)! ,Ï &  )  4 5 (&DÿèøÐ(.4:7&'3#&'#'67#5367'6767&''6'6'6ÃR'  - '5  !3 44 -B H> 0[ ^À       S "* gÿè÷Ð'-397&'3#&'#'67#537'6767&''6'6'6Ï B !)  ' )( #4 91 'G JÀ   !  S "*  ÿê}È"(.4:@73#3#7'75#535#735#&'735'6&'#&''&'''6c)%%'-8-&&('    ÈX 7 77 w yÿðòÈ +73#3#535#5#35#3353353533#3#535#{s" n"@   Y*++3y2*ÈNN=,,,,,Y!! ÿêtÈ#)/5;A73#3#7'675#535#735#&'735'6&'#&''&'''6\&!!#)3$$& #  ÈX 7  77 v lÿìùÏ'159=A73673#'#3267#"&55##5'67#3533&'#35#33535#335x#>" )      (?(²  L   W");@FñÐ#7733#67#5'75#'67#5373#373##5#'66556J$$8/ =D ™ )L 1¤  5AA, #_ñÐ"6733#7#5'675#'67#5373#373##5#'66556J$$'5/ =Eš *M1«    ,22! =ÿéòÏ%:73673#3533#67#5'75#'67#73##5#'66556E(,    5. ¢ "=  +° $''@< $+ .<3 4E:ÿçóÏ%:73673#3533#67#5'675#'67#73##5#'66556#29   10 Í "-Y(  7¬ 94"6 -……>4 7F;Mÿë£Ï$73673#3533#7#5'675#'67#T#'   ( ±%'' ;3 $ÿçô˜$973673#3533#67#5'75#'67#73##5#'66556"5=  #51 Õ #0Y %  8}  &#'^^(' *2+IñÐ#7733#67#5'75#'67#5373#373##5#'66556J$$8/ =E ™ )L 1¤  6::, #ÿïóg)-7&'#3#3673#53'735#535#5'63&'„+:1MM7á8 MM/GKg       dÿïòÈ#'+/733##"''3255#53567#3#53535#35#35#xi88  ==No Ž "!È  hOOO=====nÿðôÈ#'+/733##"''3255#53567#3#53535#35#35#e44  ::Kj †   È  hNNN<<<<<VÿïòÈ#'+/733##"''3255#53567#3#53535#35#35#mr==  DDVx œ$%È  hOOO===== ÿéóÏ*0673673#&'#'67#3#3##"''3255#'67&'Sg@03!= -B8dd,¾U  U#…¶  ")';  8 !VÿéõÏ)/573673#&'#'67#3#3##"''3255#'67&'f/C(") % CC‚7   8bµ "((<  8 !  ÿéó›*0673673#&'#'67#3#3##"''3255#'67&'Rh?.2! < (!>kµ ")(;  8 !  ÿèöÐ 673673#&'#'67#3533##5#3533533##5#'67#L m;+ 4"& : +=/211234L33M0 '2· ,*0)==&EÿéôÏ!773673#&'#'67#3533##5#3533533##5#'67#R1U, &)&%%%%" 8$$9$ ²   '&,- ::$eÿéöÐ%;73673#&'##5#5'67#3533&'#3533533##5#'67#p)C#   !  ,)* ² ! !!  +T!!!!::%^ÿéóÏ$:73673#&'##5#5'67#3533&'#3533533##5#'67#k,B%  #  3+, ²   !!  +R ::%ÿé£Ð7353#5#535#535#733#3#3##"))!!"P%% **§)ç2++;),+1XÿéóÐ7353#5#535#535#33#3##533[&))$$&j$$..(§)ç1,++,1ç)JïÐ733#3#3##'3#5#535#535#53‘JJCCKK8GG<>88??d" ÿèòl73#5#535#535#53733#3#3##^QQHHKK.MMHHRRl„ `ÿéóÐ7353#5#535#535#33#3##533f"((!!"d))$¨(ç1*++*1ç(Lÿèïš735#535#5353#5#733#3#3##L1&&++1Y441177$²*ˆ+ÿéçU)/573#"''3255'675#73#"''3255'675#&'7&'b $,3%Onb $,3%O`vUY Y   ÿéð—73#5#535#535#53733#3#3##ZJJ>>DD6GGAAMM—®.. ÿåóI767&'67'5'6‚   .O)   OI ?%  +Cî¨7353#5#535#535#3#3##533GLLAAGAAKKHšb      e ÿéòÏ733#3#3##5#535#5335#35#mhhUMjjiiIB-Ï_++_'9WÿéòÏ733#3#3##5#535#5335#35#”EE;3DDDD4-TTTTÏ]++]';eÿèòÏ733#3#3##5#535#5335#35#ž>>72====1-QQQQÏ^--^':PÿéòÏ733#3#3##5#535#5335#35#HH=5GGGG5.WWWWÏ^++^&:_ÿéòÏ733#3#3##5#535#5335#35#—AA80????1*NNNNÏ^++^&:oÿéòÏ733#3#3##5#535#5335#35#¡881+8877+&DDDDÏ]++]';ÿéð733#3#3##5#535#5335#35#oaaTMggggMF2………… J  J *zóÏ733#3#3##5#535#5335#35#§440*3333("????Ï R&&R!1R îÎ733#3#3##5#535#5335#35#HH@6DDDD8/\\\\Î L L, ÿéwÏ733#3#3##5#535#5335#35#4//*',,,,&";;;;ÏZ--Z%8TÿçöÏ-73#35#535#53#3267#"&55#'667#56‘&&Z%%&9!    Ï  rJ M..$'j]ÿèöÏ-73#35#535#53#3267#"&55#'667#56–""S###6    Ï !!rK  N.- #'j{ÿçöÏ-73#35#535#53#3267#"&55#'665#56£B/   Ï  rJ M0, #)jiÿçöÏ-73#35#535#53#3267#"&55#'667#56œL 3   Ï  rJ M/- $(jÿêÏ$7#'67#5673#35#535#53#67'Z+&I 4  K?" 1n ""vE =Ä£*73#35#535#53#3267#"&55#'67#56l  K!!1   ,!£ W(  ..!Rÿèòi+73#35#535#53#3267#"&55#'67#56t &;;‰99@S6 "$ C < 0,i    G # AkÿéóÏ #73#5353335#35#35#'67&'³5q)=fKKKKKK  F«€€8978'     ^ÿèóÐ #73#535335#5#35#'67&'«7w,C OOOOO ! !@«††68&&(   HÿéñÏ #73#5353335#35#35#&'''6 AŠ5M‚ccccccI!)! «€€8988(     ÿçîÑ #733#3#5335#35#35#'67&'reeP¬H4„„„„„„!.*e(( ))Ñ……':9*   |ÿéóÏ #73#5353335#35#35#'67&'¼/f%4X@@@@@@ =«€€8978(     X ñÏ #733#3#5335#35#35#'67&'’JJ?„2]]]]]] JÏ rr!..#    ÿçíÆ $(735#53#3#67'7&''275#735#5##5#&QA•APPMd0-Q$mm}=>nDDE%  'k y!!!!ÿî~Ê!%)7&''275#535#53#3#67&''35#5##5#l $/''Q!(( -++3) )DDDD% t z####pÿéóÐ"&*7'673&'73#3#3#3##75#5#35#‡   $  &"""")Y0‚$' """‰""3""3" ÿéóÇ'+73#&'#'67#735#33535#3353'6673#'±$" ('2/$$::O:‰::O:uQÇk "! ?EH&&  UTÿéõÆ'+73#&'#'67#735#33535#3353'6673#d€   $$7#Z$$7#O 6Æj "! >EH(%   ULÿëíÉ'+/3773#3#"''3255#7'7&''75##535#735#33535#335V‹  + $ (<3 4!U 4!É]T  = "[m7;[ÿéîÉ'+/3773#3#"''3255#7&'7''75##535#735#33535#335d6A  .  '",?6##6#Y##6#É^V  ? "]o8:ÿéê˜)-15973#3#"''3255#67'7&''275##535#735#33535#3350¡F_  K 3AG[G44H4|44H4˜O <  (CS /-oÿëðÉ(,04873#3#"''3255#7&'7&''75##535#735#33535#335wp.7  %  !#6./K/É]T  = #[m7;'ãÇ#'+/3873#3#"''3255#''275##535#735#33535#335&'#&¯N\  & .<H[O<G[K77K7‚77K7ÉaS  ; Zm9;Oÿèñ™(,04873#3#"''3255#7&'7&''75##535#735#33535#335_‡:E 3 $,&7J:((;(c((;(™P ?  * DU 0.UìÉ'+/3773#3#"''3255#27'7''75##535#735#33535#335a€6A  .  %.*/C7##6#Y##6#ÉR@  *  BS10ÿë„É'+/3773#3#"''3255#7&'7''75##535#735#33535#335i+1   0++C+É^V  ?   #[m8:zÿëðÇ'+/3773#3#"''3255#7&'7''75##535#735#33535#335€g+4   "  1+*C*Ç^S  <Yk7<ƒÿëïÈ'+/3773#3#"''3255#7&'7''75##535#735#33535#335ˆ_'/     *%&;&È\V  @! $\m7<Šÿçêa7#"''3255##5ê 8aK 6hz ÿýz_ 73#67'75#`',9 ,%_-  2ÿèåÒ (,073533#735#33535#335#"''3255##53#3#[[ÊHH\H¤HH\H  Š!nnnnÁV42-`  Ifx"ÿéâÑ (,073533#735#33535#335#"''3255##535#35#YYÆEEYEžEEYE  †††††ÂU21.b  &y!. ôs73673#&'#'67#^nA* 4J9Nc " ÿéâÈ #7#5##53#3##5##535#35#35#⟈ˆˆˆ™‚‚‚‚‚‚‚ÈSAAS € €"12ÿêˆÈ !7#5##53#3###535#35#35#ˆOBBBBUS@@@@@@ÈWFFW r  //mÿéìÊ #7#5##53#3##5##535#35#35#ìYCCDD[PPPPPPPÊUCCU#€ €"12ÿé‹È #7#5##53#3##5##535#35#35#‹QDDDDWCCCCCCCÈWFFW!€ €"22fÿéíÈ #7#5##53#3##5##535#35#35#íaPPPPcOOOOOOOÈWFFW!€ €"22qÿééÈ #7#5##53#3##5##535#35#35#éTFFFFXDDDDDDDÈWFFW! !33ÿéêœ #7#5##53#3##5##535#35#35#ê«••••¢ˆˆˆˆˆˆˆœD33D  ee % % cÿéöÄ /7#3#3##535#73#535#3&''67&'767#¥/,,,,7AA,,E      /ÄO0Û=+M)L1"     ]ÿéöÄ /7#3#3##535#73#535#3&''67&'767#¢2////:CC..G       1ÄO0Û=+M)L1"      ÿèYÎ73533#67#5'675#'6  Ä009UJ D (Qÿçóš /7#3#3##535#73#535#3&''67&'767#’/..//ÿì~› ,73#3#535#33535#3353353533#7'75#l h .+V)''(/;0)›999= iÿðóÉ +73#3#535#5#35#3353353533#3#535#n&#{$'I##e100:Š<1ÉOO=+++++X!!;ÿïÁr#'+73#3#3#3#535#535#535#33535#335335>‚'#4//9†;//4#'85#r 0    0 /ÿéðÏ$(,04:73533#3#3##"''3255#535#535#35#33535#335&'eiiP66 ——‚Qe'>>P=>>P=w  ¿W%  "W35H ~ÿéòÇ #73#3#537#35#35#35#'67&'ƒn-*`!,:::::: <Ljˆ<==+   NƒÂ 767'533`  #x]  ²8ÿëá 7#5##535#'#5##535#á444$4442222ñ #73#3#537#35#35#35#'67&'ØiV¯E[&‰‰‰‰‰‰* !5 4Y+**)OO   ƒÿçõš #73#3#537#35#35#35#&'''6‡e('Z(666666/  šll///"   ÿ胡!%+1773673267#"&53#735#35#35#'33#'67&'* "0$ - PP,,,,,,-^pB ¡    H3,H   Bw˜ 733#67'B!! ˜%F Bÿé“Å$733'67##"''3255#53&'767#FF     1Å ! ^  Z ÿçñÆ %73#3#5367#35#35#35#'67&'•\% K#))))))  4  Æ ˆˆ =>>.    AÿêšÌ"&73533#3#&'#5'67#535#35#335H         ·H  <;$HL&&&–ÿçóÐ &7#5##5367#'6733'>&'í)#  "   ‰q``q  #8" –ÿçöÏ%+733#5367#'635#35#35#'67&'¹' G& %%%%%% / Ï tt  E23)      ÿèPÏ73&''67&'67#5367#%     Ï,W* #'l!:&[ÿéôÏ!%73533#3#&'#5'67#535#35#335i99941% " )/39 3 ¶E)$BE&,EL!!!ÿé†Ï"&73533#3#&'#5'67#535#35#335200,, %,2,¶F ?G'FM""" ÿézÏ"&73533#3#&'#5'67#535#35#335,**'' "(,'¶F >D!'FM"""KÿéµÏ"&73533#3#&'#5'67#535#35#335Y%$$""   "%!ºE GH#EI###/ÿç•Ï!%73533#3#&'#5'67#535#35#335A!!!  !  ¹MJE#MR+++ÿéóÇ 7#5##537#53#3'>&'ì,#[$ ¡‚pqƒ '@'  !"Kÿé Ï"&73533#3#&'#5'67#535#35#335R    µD  =A"DO$$$?ÿ鯞"&73533#3#&'#5'67#535#35#335L'''""  #'#‹9  )/9;·ÿèë› 73#"''325'3#Ù  "›™  }juÿéõÏ!%73533#3#&'#5'67#535#35#335{0//+  +0*·G(,OR.)GM!!! ÿ胓"&73533#3#&'#5'67#535#35#335/--''  '/'…8  -386‚ÿèó™73'67#'6'65&šE 6 % ,$™ $N#$H0N ñÐ &73533#3##5'67#535#35#335&'UBCC99$#'9B'':&¼CIE$CE: ÿéYÏ"&7#5'67#535#53533#3#&'35#335>   $  ,C>!DD  3$$$Jÿé˜Ï73533#"''3267#'655#_    §((,#u&S3 2G&•ÿêóÏ!%)/5;73#3#3#"''3267&'77#5363535&'''674'¶&7??@    @%%%    ÏL?  ˆ gmÿçô $73#3#5367#35#35#35#'67&'t{44i"3EEEEEE Doo 2.."     ÿêqœ%733'67##"''3255#53&'767#X     &,  @œ L  G  fÿéñ™ $73#3#5367#35#35#35#'67&'g‡:7r'9NNNNNN @™ll-,-!      ÿém—7367&''65''66    +  —. ': $ Wÿ窙 #73#3#537#35#35#35#'67&'WS!J))))))  1  ™gg0,+    iÿûšÃ 733#67'i  Ã=_  ÿèïÈ $73#3#5367#35#35#35#&'''6×gT¡7Z.||||||]+$")6!-*Ȉˆ >==-     jÿèöÈ %73#3#5367#35#35#35#'67&'t|32r+4KKKKKK  F È ˆˆ >==-      ÿèqÏ$73533#3&''665&'767#535# (((# "  C"(­""#+ # ÿéqÍ73##5#'66556e %B  -Í /„„<2 8E: ÿê{Æ 73&'73#67'5#'6553*+iQ  =¤† f,332ÿêqÅ%733'67##"''3255#53&'767#Z    $.  CÅ _  [   ÿé˜Ë+/37GKOS7#5'75#53#'35#35#5##5'75#53#'35#35#5#7#5'75#53#'35#35#5#—]~K888888*?&q*?&~ E?3 & ' f G;/ % &   G;/ % &  ÿé‹Ñ.26:>BMRV[733#3'67#73267#"&55'75#'65533#735#33535#335'635365#25#5#2;,,;*      & RR 0 .8Z  Ñ     J=0 07UH9"  < )‹ÿèòÇ #73#3#537#35#35#35#&'''6Œd('Z'5555552  Ljˆ==>,   ÿé‹Ç (AGMSY73#735#35#&''67#'6727677&'7''67'67777&'&''&'''67&'dd>>>>   I      3)ÇI- ( U   &     %"  ÿê‡Ñ !%+73&'73#3#735#3#735#3#735#35#'6 ,8znnJJ99%dd@@@@W2>CÁ  S6 " 8?& # ŒÿéòÇ #73#3#537#35#35#35#&'''6Œd'&V)222222.   Ljˆ=>>,    ÿê‚Ä%/57367&'#"''3255'67567#3353#5#7&' T       >Pb Ä     ;(¡‰  ÿèy*067676767&'7'#"''3255#'677'6&'''60  "#  B  0  y  '  + %  ?   ÿéƒÏ$(,7'6553&'73'#3#"''3255##535#35#/ )&@@  (((((~8; 2[2  ;*#l  .ƒ#3ÿñ{Æ !.73#&'67&'67&'63#7'75#ff   *    *   Fc)$*4+'Æ   I( +ÿèqD #53#=#,X2[\&&TÿçõÏ"/73533#&''6765#'677&''6`9AA#&,6 %9   L  µ4 O$:>%"ME "-S LÿçõÏ#073533#&''6765#'67&7&''6Y<EF%)/: (<   ]   ´3 P$;> ' LD %*E  ÿéòÏ#073533#&''655#&''67&''6_``NLK i_% ’ °! F$:9%3L!  %/!aÿçõÏ#073533#&''6765#'67&7&''6l4;;#'1 !4   M µ5 N#9<%"NE "-E  XÿèôÏ#073533#&''6765#&''67&''6k5<< #'6 '4  ^  µ: I#7<'!L    #*    D#ö¤#073533#&''655#&''67&''6N@II<:7 J@  n  ˜ $#&      Cÿíò:73533#3#535#Z877M¯O8%ÿéõ’$173533#&''6655#&''67&''6bbc&H C'R ;,b$ ‡  € 8400&     (  ÿèót$073533#67&'&''6767#&''6_aa  . B(J 4_'  f     +& %    ÿçó &373533#&''>5#&''67&''6aaa$H A&R*,a+ ‡  Š =53 )(   %  aÿè÷Ï$173533#&''6765#&''67&''6j5;;) 0 " 4   [ ¶69##7<' M    *    ÿç’Ï"-73533#&''665#&''6'''6122& 1`  D  µE0HP    ' ÿçƒÏ"-73533#&''665#&''6'''6,,, # ,T   =  µG/GQ    ' ! ÿê{Ð#/73533#&''655#&''6'&''6&'' 0&I   :  µA'*>A   +  ÿçyÐ'+7533'67#3''67&'767#'65535#@& #   8°  -+   <0 /9V@- ÿózÅ)73&''67&'767#3533#67'75#]   H*''.8.*Å $      i# ( ÿéŒl(.47&'#"''3255'67'67676767'&'''6q     !  2  K $     "     h…Ï !7&'7'63533#&'#5'67#+TY/00  &Ï   !!   gÿéôÃ73#3#3267#"&55#'667#|hh „%   !Ã2d # g:5,4 ÿéô¿"73#3#32667#"&55#'665#$¸¸ØE  $ ,- (?¿0a  h8/0 ÿèò 73#3#3267#"&55#'675#YY o#0 >2 I   O=5@ÿêòà 73#3#3267#"&55#'667#_yy˜0  & &Ã2c  f8.1ÿéòz 73#3#3267#"&55#'667#,¦¦ÙE " ) ))Cz. 4$   ë¡73533##"''3255#&';  ;  ‚H  B   ÿçœÃ73#3#67'5#'655#jj € %"Ã.`  pD- (<ˆÿéøÂ 73#3#3267#"&55#'665#šPP c   Â3e h=5-6ÿéŠÇ #04875#53#5'675#53#5'6'&'7&'3#5##5335#35#8)< O(;P G  1F'FFFF‘%_ #_ +  <j j&; ÿéò‹ 73#3#3267#"&55#'667#*ªª×E  # ,*(>‹=   C') OñÅ 73#3#33267#"&55#'665#a||—/!  'Å$K  Q/- '' ÿéÃ73#3#67'5#'655#__ v %!Ã,b  qD+ '; uïË73#3#3267#"&55#'67#.¢¢ÓH ( &$*? ?Ë    ÿéõp &*.26:7#3#;267##"&55#535#55#7533535#5#35#5#ÛGMM  ;!HH@@-?55;;86n;;86p$ 9  9 $ ck ;  |óË73#3#3267#"&55#'67#(°°ãX  ) ! F< CË     ÿëõ|"&*.273#3#32767#"&55##535#735#35#33535#335+¡JVV)0*=QDyy ==PB’==PB|( A  L  < % ÿçíÐ#<733533533##5##5##5#53#5##5#"''3255##5##5353:('(('(''³³¾  55IÏ:./28  !RR?QFÿéñÐ#<73533533533##5##5##5##5##5#"''3255##5##5353K¤ƒ˜  $$8° !++0;  &TTCTÿðóÏ'73533#3#535#3#735#3673#53&'eeeS»Ue±±‹‹ 7 =å> »6C7    ÿëÏ(73533#3#535#3#735#'7&'7767 100(d)1ff@@X3?  »6B N   ŠÿòóÅ 7#3#3#535#ðTKKWi99Å.S.Ó/:ÿí¬Ï(73533#3#535#3#735#7677'7&'E&%% R&OO++  1=" ·::0   ÿëÏ'73533#3#535#3#735#7677'7&' 0//'b(0cc== .9½8<6 LÿéëÈ !%7'6553'#3#5##5##535#35#35#x†&&8'sCCCCCCC…C= 4@\C1"ŒŒ%77UÿèïÈ !%7'6553'#3#5##5##535#35#35#$$6$nAAAAAAA†C< 2@`B0#Œ%88_ÿçìÈ !%7'6553'#3#5##5##535#35#35#‡x 2 e6666666†&@9 1=hB1 "ŒŒ%778ÿéçÈ !%7'6553'#3#5##5##535#35#35#i ‘--?,~OOOOOOO†C? 4A\B1 "ŒŒ%77WÿèïÇ !%7'6553'#3#5##5##535#35#35#|…&&9'p@@@@@@@…#E5 7>_B1 "‹‹%77ÿéåÇ "&7'66553'#3#5##5##535#35#35#; ¾??SC©rrrrrrr„"E4 2"_C0#‹ ‹%77 ÿé‘È !%7'6553'#3#5##5##535#35#35#/t0b5555555†)<7 .9kB1 "ŒŒ%77 ÿé‚Ç !%7'6553'#3#5##5##535#35#35#) k,X-------†471 )4uA1!!!"‹‹$89ÿèŽÐ,H73673#53&'&''67'6767767&'7&''67'6767767'2t"       N       Ъ '/-*?,   &/-*?+Cÿé‰Ê7#"''3255#'6555#35‰    &ÊÊ ?3& 7?a<*** ÿéöÏ)-73533#3#32767#"&55#'667#535#35#...& &A M4(.::¶G> C)# !!GM!y ôÆ 7&'''63#"''3267#'667#Í  P   ' Æ- / / %N7>JÿëôÇ "&*.7#'66553#3#3#535#535#735#33535#335ñ~ f)..77--*+C+ÇRC5 0$^!h<Fp ñÆ !%)-7#'6553#3#3#535#535#735#33535#335ïXK %]'  )  ÆD9+ -3OW    469ÿéðÇ "&*.7#'66553#3#3#535#535#735#33535#335ì… "k-22;ˆ;//,,G,ÇSE5 3#_!h<F4ÿéò­#'+73533#3#3##5#535#535#35#33535#335?LMMBBSSWWBBL00D/s00D/žXX249ÿéõÐ/37;7&'#673265#"''67&'#'66553'33#3#735#×  '-       N aV::88Ð 3"3!++)DG;. * R##$E# ÿè÷Ð)/37;7#67327#"''67&'#'66553&537&'3#3#735#ñD     b u$UUJJ$$¯5"'5")*%-4;H<. + T!  EJ& ÿèð™,0487#67327#"''67&'#'6553533&'73#3#735#ï?    " l} £TTNN**ƒ''"'-8.$ %+A "8UÿéöÐ-1597&'#673265#"''67&'#'6553533#3#735#à  !$     >NH0011Ð 03!+)#JH<- 05S##%E# ÿéòš,0487#67327#"''67&'#'6553533&'73#3#735#ì<    j| ¢UUKK''ƒ&*$ #$/:4 *7, !:SñÐ.26:7#673267#"''67&'#'6553&533&'73#3#735#î;      o¡^^RR11½  ###  $   & ÿéåc!',059733#"''255##5#'667'667#35#73535#735OT; =F   %RJ A@S=’CBT=cB     ^ÿéöÐ,0487&'#673265#"''67&'#'6553'33#3#735#â"    ;LF..//Ð /3!+3)$IH<- /6S##%E# ÿê’Ï'-1597#673265#"''67&'#'6553'37&'3#3#735#Ž      3E?''** ¬/7"$"4;H<- /6S### ?C%hÿé÷Ð-1597&'#673267#"''67&'#'6553'33#3#735#å      7ID,,.. Ð .5!)!'.@I:/ .8S##%E#h£Ï73533#3##535#35#h#¥***Sb*k/dÿéó•-1597#673265#"''67&'#'6553'33&'73#3#735#ð'     5F _(('' „&+  +)8/$ &*A  ; ! ÿêóÃ04873327#"'&'#3#7&'7&''275#535'25##5#¸  ¥ #;;*;P)":: F8)(È!&… H#  $H[%%%%lÿéôÃ048733265#"&547#'273#7&'7''75#53#335#lr a%'%  $# ÃE6$$ -$;-<) F#  &F(((WÿéóÇ#'+/37#5##53533#3#3##5#535#535#35#33535#335íj:::66DDGG66:$$5$Y$$5$Ç##)TT32^ÿéóÇ#'+/37#5##53533#3#3##5#535#535#35#33535#335îe67744AAAA336 3!T 3!Ç##)TT32FÿéóÇ#'+/37#5##53533#3#3##5#535#535#35#33535#335ìw@@@;;KKOO;;@((;(c((;(Ç##)TT32‚ôÇ#'+/37#5##53533#3#3##5#535#535#35#33535#335ôN''....''(>(Ç()!  N  N ,- ÿéÆ#'+/37#5##53533#3#3##5#535#535#35#33535#335O)))''))11'')(=(Æ""(SS43|ÿéôÆ#'+/37#5##53533#3#3##5#535#535#35#33535#335ñM)**))2233(())@)Æ"")TT33_ÿéôÏ1E73533#3#3##5#535#535#73#"''3265#'667#373#&''67#`MA     I<@:* *- ,6¾W?-% !'v  %)  "dÿéîÇ"&73#"''3255##53535#335#3#735#Û dAB..AA ÇUo  Yx‰UUC,B>ÿéïŸ#'+/37#5##53533#3#3##5#535#535#35#33535#335í¶IFFPPeeffPPI ==P===P=Ÿ--"  E  E & % _ÿèðÐ&*.373#3#3&''67&''67#5'635#35#67€^gcEO  #   EEEE  Ð M  B / ) A  ÿçó@767&'67'5'6   !" K) ! F@   )   ÿçòM767&'67'5'6†  " O!"  PM   /#  & pÿéñÈ#'+/37#5##53533#3#3##5#535#535#35#33535#335ïY211--7777--2-G-È#%)TT32ÿèñÈ#'+/37#5##53533#3#3##5#535#535#35#33535#335ë°HHHKKhhffKKH77K7‚77K7È6##6,VV20sÿéõ¿73#3267#"&55#'655#m  $!¿©   ¬SE, );S)ïÏ#'+73533#3#3##5#535#535#35#33535#335^^^MMffffNN^#;;O:‰;;O:à  I  I ) ) }ÿéóÄ73#3##5#535#„j.3300)ÄInnIN ñÈ#'+/37#5##53533#3#3##5#535#535#35#33535#335îy...99HHHH::.'':&`'':&È%%$  M  M ++ ÿé–Æ#'+/37#5##53533#3#3##5#535#535#35#33535#335–b4550088==0040M0Æ""(SS33sÿïíÎ!%+173533533#3#3#5#535#35#35#35#'67&'w*`^q%******  / µY6IY56'    lÿçõÉ 073#735#35#3#3#"''3265#'67#'67#'67#~ff@@@@!…PR  4 . %   ÉP0..F+7+"   dÿé¨Ï73#3#7#5'6356—$Ï %0-š{ÿéòÆ#'+/37#5##53533#3#3##5#535#535#35#33535#335ðN*++**2222****@*Æ"")SS33~íÐ/373733#5367#35#3#3#3##5#'735#535#735#‡'o')[%%&&1"55+77Â!  ".  }ÿéôÇ *73#735#35#35#3&'73#&''67#536‹[[666666  +! $ %!#'ÇtS23'   %'   €ÿéòÆ!737#53#33#537#35##5##535#‰!e1+r% 3555š5$$$IWW8'ƒÿéóÏ(,073533#3#3#535#535##"''3255##535#35#‰'++&&0p- '_  66666¾R]  %t 1|ÿèöË573#3#535#535'667#'7#53333#"''67&'ç 8 G*  !)"#  Ë6<<1e(3G#  -†ÿéóÐ$*73533#3#535#3533##"''3255#&'%%%+l.%F   F( ³N<  8  ÿçžÍ"JR73#35#535#53#563327#"&'&'67'5&'67'537537&''5&'= !!M$$0oD            "   Í\Yc8".  . + , r   #  !{ÿìî¾73#3#5##5'67#35#ƒk2C+ $'++¾% y ] +=£LOÿé¦Ï#'+/73533533##3#3##5#535#535#5#5#35#335P  !!##  7 ! »$;((;$OQÿéñÏ#'+/73533533##3#3##5#535#535#5#5#35#335U:&::EEHH::'j:'':(¼%<((<%OnÿéïÏ#'+/73533533##3#3##5#535#535#5#5#35#335o.00668800 W.1»$<((<$O„ÿéô”'+/736533#&''67#3##"''3255#3#735#Š)),  #p   M ::‡   'A > .€ÿéñŒ!%+17=7#3#3#3#"''3267#55#5#5#&''&'''67&'î%(   R+3 '#Œ  8 &a     kÿìì¤+1773#"''3267#'63533#&'#5'67#7'6'&'ŠW  O  $##   I8  ¤xk B..   1:# 5    ÿés¢#'+/73533533##3#3##5#535#535#5#5#35#335 !$$((''%%A! &–  4 ## 4 @ ÿêóÏ#'+/73533533##3#3##5#535#535#5#5#35#3357M772RRjjhhRR/7˜M#>>R>¼&=''=&OpÿèõÏ 7&''6&'3'67#«! ' !d$ NÏ &(' #.2&"'£ÿìõÏ73673267#"&55'7» ÏO c  ]sÿé¯Ï 7#5'6  Ï!¥{ /oÿèõÆ#7#533&''67&''6667#'7#Œ W #    ; &´2C%"?+ F,(3/AkÿéõÏ73533#3#&'#5'67#535#x133/%  ""+1©&&'44ba-$$1'wÿñîÇ 73#53535#35#35#á w 666666ÇÃÃA.o.o.a©Î7''67'6767677&'   J -#94  @% tÿéöÐ73#&'#5'67#535'6à *4,'  +44Ð (/0'%ls2 )4$bÿí¢Æ73#3#"''327#735#h:&(  )%&ÆK(F AM%žÿêóË7''6767&'Þ _2< Uo vC% gÿéõÏ"73#&''67#5353533655#335å 2 +(+ 0 2 +**§N000!+N((N--<{ÿéòÁ%73#3#"''3255#&''67##537#{w00   16Á"‹  t  1’¤" ÿèó~#'+/73533533##3#3##5#535#535#5#5#35#335,[,,9NNkkiiNN7,š[::L:v )  )  3 ™óÏ73533#&''655#""   "˜77)($5¢ÿôõÐ 73&'73#3#536'&'¦ K6 S&  £ H4=@4581_ÿì Ð73533#7#"''3255'675#b   ¤,,( Q  B 3pÿçõÏ048<@DHN735333##3#3#&''67&'7#5367#535#5#5;5#33535#33535#33567#|-- -/@L  (   1- -G-K1$ $Ä  .   .  ' D P  qÿïõÉ #'+/373#3#735#33535#3353#3#735#33535#3353#xzzmm-I-ayyoo.K.j„„É @& $ $ @' $ %ZÿçõÎ3Nhn73533&533&'73#67327#"''67&'#'67#7''67'6727677&'&''67'672777'&'i   2   #   F     H)]Z,   "   )N -%P cÿèôÊ 'DJPV\73#735#35#''67'6767677&'7676767&'7''67'67&''&'''67&'trrLLLL   2      : 0ÊO/-X    ! "    K  ‚ÿéëÉ 73#735##"''3255##535#35#†aa;;R  CCCCCÉ>>x  1&;~ÿèìÑ"(733#"''3255##5335#35#'&'7'6¬,   D*DDDD  [  Ñ=’  !@¬.Jt  uÿèôÐ8<@DHLP73533533#3#3#33##"''3255##5#53535#535#535#35#35#35#33535#35#{ 5-  E ,3-+E+ÀF  %%F-O6 ÿésÏ#'+/73533533##3#3##5#535#535#5#5#35#335 ##''++$$B $»$;((;$OÿóðÊ#733533#3#3#3#535#535#535#53\!BB</**=)f**=)ÏWWb5Iÿë Î%)-1573#3#3#7'75#535#535#535'235#33535#335’ ""R#""" - ÎS S ^5_êË$(,0473#3#3#3#535#535#535#535'235#33535#335Ø2;;0033<‹=330088-7$1P1Ë  J    J  T* ÿéñÎ73533#3267#"&55#'67#* .6B: ž00ˆ  Žv-)l ÿêŠÎ%)-1573#3#3#7'75#535#535#535'235#33535#335z 44,,--*s7//--55+4,E,ÎV V ^2LÿíôÏ&*.2673#3#3#3#535#535#535#535'235#33535#335Û  JJ<<@@J¨K??<.))<)e))<)ÏXXb4 ÿéîÌ%)-173#3#3#5##5'67#537#537'635#35#35#Þ.5`iŽˆt "3C3=Bf3ttttttÌ k 00 ÿéòÈ %73#735#35#35#'33##5#'67&'G™™ppppppBÁd]; 4 -o($ &&ÈqP--FyII  cÿòôÂ73#3#3#535335#p€2++6‘;ÂLL}}ªiÿêðÁ73#3#"''3267#5335#365#i‡>: j"7I&'Á*s(%bQnnX£Ð7''67'67676767&'•   M -#:6 @& uÿééà 7#5##535#35#35#éNNNNNNNÃÚÚ;)d)e*`ÿìõÏ&73#5#3267#"&55#5335#53533#3Ë  # -88CCˆ_3 9P?S ScÿêóÊ73##5#'66556é ,;g!4  EÊ .<3 5E9]ÿêóÏ#73&'7&'#3#"''3265#7#5'6‰ U 6 = B Ï'!+5 !G-3 $ ÿèñÎ &*.273#3#5##5367#'665566535#35#35#ß #)VWIq;O  t',%qqqqqqÎ  Œ Œ  J:7G=' P77 ÿéïÏ "&*73#''67&'3#5##5'635#35#35#v3– $0e k0ÏB: " ƒ p233fÿçõÄ73#3#67&'7&''67#vrrŒB%- 45 4Ä:F (/ ):mÿéìÏ7#5##5##535335#33535#335ì!"66""6!W""6!£†EE†,,1O ÿîóL#733533#3#3#3#535#535#535#53bHH@@FFVæUHH@@IILNN       ÿìôÏ26<@73533533#3#&'#327267##"&55'67#535#35#3&'#353=33B@% v+ @& '@A3G==b 9 b¸ . IG ?ÿìóÏ26<@73533533#3#&'#3267#"'"&55'67#535#35#3&'#35Q")"",* V.  7$  &-"6))P . C· 2  K G 3ÿñÎ15;?73533533#3#&'##3267#"&55'67#535#35#3&'##3>#'  I"+(  %&0## <&099t      & + 6ÿé¯Ï!%7#5'67#535#53533#3#&'35#335€ %))))&! 6$4KI"$FF5"""Dÿé±Ï"&73533#3#&'#5'67#535#35#335R&%%!!  !&"¹EGG!(EK$$$ ÿé Ï &73533#3##5'67#535#35#335&':6622 $(0:1 ¹EcL#'EI!!!>Bÿé¨Å 73#735#35#35#'67&'NPP****** <  Å¢rNN6 ÿéÆ 73#735#35#35#'67&'jjBBBBBBE Æ£rNN5  Lÿë³Å 73#735#35#35#&'''6XMM''''''* Å¡qMN6 [ÿé­Å 73#735#35#35#'67&'dDD 0  Å¢rNN6 ÿèëÐ&*.373#3#3&''67&''67#5'635#35#67F‹” Ž`j /:(&6 /#(! "ppppÐL    A + ) @ LÿèôÐ(,0573#3#3&'5'67&''67#5'635#35#67xit sOZ  )"   PPPP  Ð L I  / ) ? \ÿèöÐ(,0573#3#3&''67&''67#5'635#35#67ƒ_ghGR  $  GGGG  Ð L    E  .* ? fÿèôÐ(,0573#3#3&''67&''67#5'635#35#67„[ccBN  "   BBBB  ÐL   E0 * @ Sÿçô§%)-273#3&''67&''67#5'67335#35#67#{jF T ' )    flKKKK&D… A     : ( # E iÿèôÐ'+/473#3#3&''67&''67#5'635#35#67ŠW_]BM  !   ????  Ð  L   @/ * @ nÿêòÊ '73#735#73#735#3#3#3#"''3265#7#x44+55Jhh„PL  S ÊB B ?4 %nÿéóÐ+/3736733#5367#35#3#3#3##5#'7#535#735#35{5€'+&.o'**445 ;4GG&¾  " (4BcÿèóÍ!%)-73#3#5##537#'66556735#35#35#ç +/0(9#, G999999ÍŒŒJ: 9H<*K99pÿéñÆ"&73#"''3255##53535#335#3#735#à  ];>))==ÆTr  ]x‰TTC,D=vÿéòÏ!/3773673267#"&5'67'5333#5##53635#35#³    + $ 9EEEEEÏ!   "$ b 0 o o 5BfÿíîÏ73533#67'7&''75#75##5#n222  2;:2d  ¢--`6" 9<<<<tÿêòÊ '73#735#73#735#3#3#3#"''3265#7#|22)33Iee ~MI  Q ÊB B ?4 %mÿêôÅ48<73&''67&'#367&'3533#7'7&''275#735#335xm     ,/.. .<//Å"     X7  rÿèóÐ%)-273#3#3&''67&''67#5'635#35#67’OW V=G      <<<<  Ð L    > . * @ aÿèòÑ4<@DHLPT73#33##3#"''3255##5##535#535#'6553&'5#35#5353535#33535#335¹0.& &*  )%%.9 ..%7<)A)Ñ   T  !i  D2 4=]( '   D )  ÿèôÐ!57&'#'67#53673#&'&'3533#3##5#535#y  2+: 1=Ž  1?, 3|  #+..ZZXX+ÐJ/!w g//RÿéõÏ!57&'#'67#53673#&'&'3533#3##5#535#¤  !# X  & #U  8877ÏI+t k..`ÿèôÎ373673#3#3#535#535#53&'3533#&''67#• :11==119!:?5&) 9 77Î   Œ #  (!LÿèîÎ473673#3#3#535#535#53&'36533#&''67#ƒ  !@66CšC66?' @F;)/ B ==Î   Œ $ *$nÿèóÎ373673#3#3#535#535#53&'36533#&''67#3++6~5++227/!% 0 10Î   Œ #  &!eÿèôÎ473673#3#3#535#535#53&'36533#&''67#–  8//;ˆ://7!8<6&' 7 56Î   Œ #  % ÿéóÐ!%)7&'73#3#5##5367#53635#35#35#X e GnV;bˆ aÐ   ˜˜d>>OíÏ#73673#3#537#53&'35#35#35#x " )H?-A&\\\\\\Ï   {{ W66vÿéóÏ $(7&'73#3#5##5367#53635#35#35#”  E &6/A"2B /AAAAAAÏ — ™ c?@†ìÐ#73&'73673#3#537#35#35#35#† )$V)000000²  {{587Zÿèï.4873673#3#5##535#53&'5#35#"&55#'65#333535#‡$ !0(b*1%8(b  Lbbbœ  x x 5>  K ÿë\%7#"''32654''67&'''67&'76K         *.     KóÑ*0473'73673#3#5347#5#35#"&55#'67#333535#>  6 ?Q?Â<M‚%;, ) "q&»  TT .   4  ÿçõG!:>B73533#27&'7&''275#735#33573533#67&'7''275#735#335)(( '2)'*++  (3**; - , PìÐ*0473673#3#535#53&'5#35#"&55#'67#333535#-6,ˆ(2&9&b IbbbÐ   zz 6E  VÿéñÑ/7;73673#3#5##535#53&'5#35#"&55#'67#3327535#Y 1  BRA™=MBF<™ ' )l ™™™Ñ  ¢¢ @X !($l‹öÌ?73#672'#"''32655'67&'5'67&''67#53&'736Ô*         # Ì           bSôÐ?73673#67&'#"''32655'67&#'67&''67#53&'ˆ  $=  (* # #"#6Ð        P îÐ<73673#67&'#"''3265'67&''67&''67#53&'€   .H  , 0#$ ) !;/ Ï       ƒôÌ?73#672'#"''32654''67&''67&''67#53&'736Ð-   (   !  &  Ì   (         a5ôÏ?73673#67&'#"''3265'674''67&''67#53&'‹  &?      %* &4%Ï   " (      0_È7#"''3254'7##5_  $È+  ,‡˜ ÿèbÍ73&'73#3#"''32765#'665##)&  ­ %g! BO,>PL^Ç7#"''3254'7##5^   !Ç  "k{ ÿékÆ73#7#5'675#35#35#75# ^   Æ€93 R Y!DèÏ73#3#3##5#'6G—zeejj $Ïa #ÿéÅI73#"''3267#'67#7Ž  9 D? +ID'7( ÿé™Ï&,73533#3#"''3255##5'675##535#&'9993   *39[ ¹; %“N*#?Rp ÿé˜Ï+073533#3#3#"''3255##5##535#53'65#)00::4    2= *ÊG  0^^J] " ÿ雯 &7'6553'35#"''3255##5##53536uaM &ƒ>9 .%O  <; 3 B 8!7 'GÿéïÑ *73&'73#3#735##5##53##"''3255#M@Dš ……__ƒ‚t. 4½  3.1/#+  (gÿêòÐ *73#53&'3#735##5##53##"''3255#±9ˆ8%jjDDgeY   (Ð *3/1 /$*  'KÿéðÑ *73&'73#3#735##5##53##"''3255#R=B• [[€m&   3½  3/1 /#*  ' ÿéeÆ73#7#5'675#35#35#75# X   Æ93 R Y!ÿêða7#5'75#53#'35#35#5#î'' Í zffffffIC7 ) ' mÿéôÏ'-733#3#535#5335#35##5##5'66&'§++:‡:,,-(@( Ï22#UG7;K'%ÿèí§ *73#53&'3#735##5##53##"''3255#ƒ[Ñ`8““mm£´!—>  F§ (* %,, kÿêòÐ )73#53'3#735##5##53##"''3255#³8„5$ff@@b^S   %Ð  *3.2!0%)  &VÿéóÏ 173#53&'3#735##5##53267#"&55#'665¤<Š9#mmGGljm   % Ï ,0,01"9  ,#&EÿéóÏ 173#53&'3#735##5##53267#"&55#'665A”=%ttNNuts   ( Ï +0,0 1"9  ,"& ÿéôÒ &*.73#53&'3##"''3255#53&'7363#735#€_Ô^G B(   ¬<  7}hh@@Ò  *  e  a>AÿéïÐ .4:73#53&'3#3##"''3255#535#53&'736'67&'„VÉ\B 8b[[   [[e8  > V & !y%$Ð  * 5 2 \ UÿêòÏ .4:73#53&'3#3##"''3255#535#53&'736'67&'¬4ƒ8) (;66   99=$  < ]Ï  +5  1\  4ìÑ 673#53&'3673#5#3#"''3255##5##535##53&'„SÆ[ 5=OG   55HR<Ñ -#  //*;-aÿéïÑ 473&'73##5##53&'7367533##'2655##5##5f4 :„‰h#   +2 ¹  #((  2: &XX?PRÿéóÑ !%)73&'73#3673#53&'#5##535#35#X>A–! &  '¡( vTTTTT¹    An n(>OÿéžÑ #'73&'73#3673#53&'##55#35RJOA32!!¹   Ca m(Vÿéò’!%)73#3#53&'#53&'367##5##535#35#©<+œ(>#9SQQQQQ’  4 (UU .ÿé{Ñ #'73&'73#3673#53&'##55#35(*g mUFG33¹   Ca m(Iÿéó¦!%)73&'73#3#53&'#367##5##535#35#S>B.ª+6'?X[[[[[      .[ [!/ÿèä’!%)73#3#53&'#53&'67##5##535#35#ƒ>8Ê3 ?'Jc_____’   6 S S ' ÿéë¥!%)73#3#53&'#53&'367##5##535#35#ƒT!7×6 \? Yxzzzzz¥    : ,^^#4 ÿéóÑ !%)73#53&'3673#53&'#5##535#35#€ZÊY 7  Bæ@‘{{{{{Ñ %   Av v,Dÿé€Ñ !%)73&'73#3673#53&'#5##535#35#),j rX77777¹   Bn n(>zÿêîÎ"73#"''3267'6765#'6&'šJ  $+2"?   Î ˆ!.( #ƒÿèðÄ73#"''3267#'67##5##535#…k  &" f;;;ÄH0=1`j jK9 ÿélÑ  $(73&'73#3673#53&'#5##535#35#""Y _L+++++¹   Cm m'>ÿéxÑ !%)73&'73#3673#53&'#5##535#35#&(c jR33333¹   Cm m'>uÿìôÑ %73#53635#35#3#3#3#535#535#¨ 'j"CCCCu0**47**1Ñ]]-97yÿèõÈ #73#735#3#735#35#35#'67&'Š\\66hhBBBBBB  ?È41qP//%    oÿéóÏ*.373533533##5##5#3#&''67#53535335#335r$$s/ % % ) ) 4 +++¸);!#%;;)#)‰ÿéóÑ !%)73&'73#3673#53&'#5##535#35#Œ'(c jR11111¹   Cm m'>ÿéñm!%)73#3#53&'#53&'365##53#5'35#5#S$?á?L ;J¢~~~~~m 'X??!  XïÒ<R7#''53&'73535&'#6''67'67'6767676767#"''3254'7##5£ '''&7     ¦ Ã7  N  $2    .  Xg qÿïòÒ !%)73#53&'3#735#3#735#3#735#35#3#¸38+qqKK==&hhCCCCÒ%T8 " :?& # $pÿéõÏ159=OT73533533##5##5#'673&'73#3#3#3#7#35#5##53&''67&67#t## *,((''+n1 p   & 9 Á ?    Q   )     aÿéõÏ048<NS73533533##5##5#'673'73#3#3#3#7#35#5##53&''67&67#g##""##  "14--,,6}5$$$$$z  !& !% 7 Á 9     R   +     ÿégÐ!'-7#3#"''32767#53673#"''326'&''6M)C   A  ¥YL&{ F %  g   ÿé€Ç(9>DHL767#533'67###'3255#'67#53&'#"''3255##5&'''63#735#/ Kc$  &3Z    KG    33µ       Fd  Pkz  , ~ÿéóÑ !%)73&'73#3673#53&'#5##535#35#‚,,m uZ88888¹   Bm m'>~ÿèöÏ+1773533#3'67#535#&'36533#'67#7&'&'$%%- X,$ 4+0. #.  N ·  1   6*('=   <yÿïòÎ!%+173533533#3#3#5#535#35#35#35#'67&'€*^]o $******   ) µY6IY56)   qÿèõÐ!>DJQ767&'7''667&'7''6'67'7#&''674''6'6'67'6¡  %)2    7    2" #%6 0.*) @Ð         1   JÿèôÏ*0573533533##5##5#3#&''67#5353533655#335Q#6##6#?+3< 3D66#$6(·$;)7+ ;;##)Uÿè÷Ï*.273533533##5##5#3#&''67#53535335#335b00ƒB!% !%2 5;111!¸#<$'" <<)))`ÿèõÏ*.373533533##5##5#3#&''67#53535335#335d00€;% '. - 9 222¸#<#(& <<)$)kÿèõÏ*.273533533##5##5#'67#53535333#&'35#335m))F + ' 6 +0 0 #<+·y)!<<%E+++ ÿêók+1773533533##5##5#3#&'#'67#5353533655#335 ;I::I;Æ!Z?IQ@ZFE13E? 94* "B ;2/E JÏ 7.# #,@ G'   PÿèòÏ%+173#3#'6553&'#53&'367#'6'6'6§?!y"=":; 5 0) ? 8/ +B EÏ 7.# #,@ G'    ÿèñÐ/5;73#&''67&'767#53'#'67#'6655'6'6ˆ_+!;&2 ‘[~21F D'} « 4R VB 7h lÐ      W   2(! :+(  ÿé„Ð %+1773#53&'67''67&'#'655'6'6'6J+m,    bV O  & .)! 80Ð %   !0- #.2     ~ÿèõÏ%+173#3#'6553&'#53&'367#'6'6'6½, X   *() &" .(! / 1Ï 8-$ %*A G)   VÿèóÏ /7&''63#3#735#36533533##5#'67#£' &"% ,CCuuNN#$(&&*)"Ï   5< 33/]ÿèôÏ /7&''63#3#735#36533533##5#'67#¨ !" ""# )??rrLL""&$$((!Ï   5< 44/ ÿçóÑ37&'#5'63&'3#735#36533533##5#'67#€08 ` OME››ss;C<??? 5)>Ñ    46B //+EÿèóÏ /7&''63#3#735#36533533##5#'67#™&) )(* 0JJZZ%)/++1-$'Ï   5< 33/kÿèôÏ 07&''63#3#735#36533533##5#'67#¯  %88eeAA !$Ï   5<33/tÿèôÏ 07&''63#3#735#36533533##5#'67#±  #11aa==#Ï    5<33.FÿéóÐ '-3733##5#5333##5##5#53533#5##53'67&'–::;;$%%7%%7&[6V L!#"Ð*O=?QQ  PÿéóÐ '-3733##5#5333##5##5#53533#5##53'67&'œ4444&55R3S J Ð*O=>P P  kÿéòÏ '/573533##5#3533533##5##5##5##53'66&'|,,,,**o>+"!  ¼!N>?O)) "  ÿéóÏ#+3973533#325#"&'#7&'3#3##5##53'66&'Œ:9 )¼  ›iillmG-",(¬#K,0XY4 7  G68I)%  [ÿéóÐ!%-5;73&533#3265#"'&'#7&'3#3##5##53'66&'_R** R}d??CCF' «%H2 ,*m0  6  F66F&"   RÿèòÎ,73#35#535#53#5##5673#35#535'2ß !GG,!!!4k +EED΂*… |  (‚ZÿèóÎ,73#35#535#53#5##5673#35#535'2à  DD*2f)BB@΂*… |  (‚cÿèóË+73#35#535#53##5#5673#35#535'2à BB&0:9&<<2<Ëed//_ eÿé…Î*73#35#535#53##5673#35#535'2u 22&] 112Î(z |  ' ÿéóÏ+735'673#35#535#53#5##5673#35# hL VV %*jjB444I–% 33@h• }# „ }  $}rÿèòÎ,73#35#535#53#5##5673#35#535'2á 77 *T !665΂)… |  (‚kÿèòÎ,73#35#535#53#5##5673#35#535'2á ::"+X #::9΂)… |  )‚ ÿéóÏ-3;?73533#3&533#67327#"''67&'#535#7&'#5##535#/..BA@   $ 8/´  ::::²"*,  '#5'"*$ \X g=+GÿêôÏ/5;?73533#3&'33#673267#"''67&'#535#7&'##535#Q,0/     i(†  (8$$²!*+ # $!%," ZNa=,\ÿéòÐ,28<73533#3'33#673265#"''67&'#535#7&'##535#`&&&  Z x  &,²M+".$"3%&# YM`<+bÿæòÎ'-733#3#535#5335#35##5##5'66&'¢11=@112/K1"""Î55%SK;?O('WÿéðÏ'-733#3#535#5335#35##5##5'66&'š22C™C112/K.!"!Ï22#VF6:J&&OÿçòÏ'-733#3#535#5335#35##5##5'66&'—55H£H44"""5""1Q2#%"Ï22"UF6:J'&ÿéò›'-733#3#535#5335#35##5##5'66&'wOOhäiOO<<9WÿéíÇ #73#3#735##5##535#33535#35#W–– YYvk,,?,k,,?,,Ç;:o o*?!ÿéॠ#73#3#735##5##535#33535#35#2””ll•—BBUB—BBUBB¥ 0._ _"1ÿé’Ç #73#3#735##5##535#33535#35#~~nnHHcY##6#Y##6##Ç9:o o)? ÿéàš #73#3#735##5##535#33535#35#0ŸŸ••ll–˜CCUC˜CCUCCš -+Z Z /qÿéîÇ #73#3#735##5##535#33535#35#q||llFFbW""4#W""4##Ç9:o o*?aÿêëÇ #73#3#735##5##535#33535#35#aŠŠ vvPPmb((:(b((:((Ç9:n n*?ÿêí™ #73#3#735##5##535#33535#35#ÛÛ¢¢||ž™CCVC™CCVCC™ ,)Y Z -TæÉ 73#3#735#3#735#33535#335T’’ zzSS++>+i++>+É 0-V36ÿéyÇ #73#3#735##5##535#33535#35#ffYY33MA*A*Ç9:o o)?FÿéñÊ (73#735#35#5#53#3#33#"&''6httNNNN C’ÏvY!!#.<€ÿïõÐ 73#7&'''6'66±-2 KE %*Њj"++#4 + F) ÿéôÊ (73#735#35#3#3#33#"&''675#1žžxxxx3ÞdWW,">A+fÊ[674".  E ÿèô~ '73#735#35#3#3#33#"&''675#1¢¢zzzz1ÛdWW,"B> 'c~?& " #     $qöÈ '73#735#35#3#3#33#"&''675#‰]]7777w3,, #%   1ÈN/,+  %6yÿêõÉ (73#735#35#5#53#3#33#"&''6‹\\7777 .n-$$ # É[6:OB"{ñÉ #73#3#537#35#35#35#'67&'q1,` ,<<<<<< C Éxx744'    mÿëóÉ (73#735#35#5#53#3#33#"&''6aa9999 2t.%% #%  É[6:NB ! ÿé†É 073#735#35#3#3#"''3265#'67#'67#'67#\\6666!xHL  -) "   ÉP0..F+6*!  ÿéiÏ7#5##5##535335#33535#335i!""3"¢u QQv--+GEÿçðÉ 273#735#35#3#3#"''32765#'67#'67#'67#^zzUUUU&¦gf   4 ;/ '  )ÉP0..E '. +" H7óÉ /73#735#35#3#3#"''3265#'67#'67#'67#^{{VVVV'ªli   $ ) #   )É7!)     Eÿêñž 073#735#35#3#3#"''3265#'67#'67#'67#^[[[[$¥or   & !/ ( "ž?' " $8(" J+ôÉ /73#735#35#3#3#"''3265#'67#'67#'67#`WWWW$¤dh   ( ", $ )É<%  !*     Jÿçð‘ 073#735#35#3#3#"''3265#'67#'67#'67#bzzTTTT'¢eh  A 9- & &‘?&  #2 %    ÿìL¢ 7&'&''6*  ( ¢  "  $ &$ #\ÿåô› /73#735#35#3#3#"''3265#'67#'67#'67#vmmIIII#]\  . (' ! ›A' # $ 8*    N íÉ 073#735#35#3#3#"''3265#'67#'67#'67#duuOOOO)Ÿ`a   < 4* " *ÉC) $ &; ,"  ’ÿéõÈ .73#735#35#3#3#"''3267'67#'67#'67#£HH$$$$_66   & )     ÈO//.G"( )   _ÿè–È7##'32654'7##5–  È? @ÑàƒÿêõÈ /73#735#35#3#3#"''3265#'67#'67#'67#–RR....!nAE  * &    ÈO//.G-6*" ÿèñm#)/5;73#3#3#"''3267#5363535'67&''&'7&'Vp‘±±§   ¦"ž j`  m1  U6      HÿìóÄ *0673#735#33535#335&'33267#"&57&'''6^$$7#Z$$7#%    ^  kÄpAL6 : 9  # ^§Ï73533#3##535#35#^+¥***Sb*k/pÿéëÊ $(,73#735#33535#335#"''3255##535#35#p{{""4!U""4!  KKKKKÊU230g  (~$4*6׎ 73#735#33535#335*­­::M:‡::M:ŽX46 SÿìöÄ )/573#735#33535#335&'33267#"&57&'''6g||!!4"V!!4"%    Y  f  ÄpAL7 : 9 !  ÿêõÅ .473#735#33535#335&'&''33267#"&5''6Šaa(=(  -  4 ÅrA P 9 ;    ># qÿìòÄ )/573#735#33535#335&'33267#"&57&'''6~ff)@)    H  O  ÄpAL7:  9 " +/Ñ‚ 73#735#33535#335+¦¦99K9„99K9‚S11 ÿìŽÄ )/573#735#33535#335&'33267#"&57&'''6ee(@(     J R  ÄpAL7;  : !  ‰öÆ (.473#735#33535#335&'33267#"&57&'''6•VV"5"   ?   FÆ]6?,  4  5aÿë§Í73#&'#5'67#535'6      Í) a[#+$QÿèèÉ $(,73#735#33535#335#"''3255##535#35#Q——00A0q00A0   bbbbbÉT231g  )#4kÿèíÉ $(,73#735#33535#335#"''3255##535#35#k‚‚%%7%\%%7% OOOOOÉT231g  )#4ÿèàÈ $(,73#735#33535#335#"''3255##535#35#ÂÂCCWCšCCWC   „„„„„ÈV320e  '}"1 mÿëöÆ!%)-159=73#3#3267#"&55##535#735#33535#33535#33535#335qr/77  #51 2P 2S##5%Z##5%ÆOQ  `/1Q3 nÿëöÇ $(,048<73#3#3267#"&55##535#735#33535#33535#33535#335tm.55 ( !3-/L/P!!3#V!!3#ÇPR   _0/P2 ÿç÷j#'+/37;?73#3#336767#"&55##535#735#33535#33535#33535#335'±OVV 8,CUN;;O<‹;;O<“CCWB™CCWBj2 2  8 1ìÔ 7#5##53&'7'67&'ê¯a' #3 8J-,-.Å     HÿéõÈ )73#735#35#35#3&'73#&''67#536`~~VVVVVV!# A3 7; 2:@ÈuR22'  )+  dÿéõÈ '73#735#35#35#3'73#&''67#53rppHHHHHH  7+ / / & 27ÈuR22'  &(  ÿêŽÈ *73#735#35#35#'67#53673&'73#&iiCCCCCC( $ ,14 ÈvS12^"     9ÿêÅs#)73#3#&''67#537#735#35#35#&'#Gn > #  -7-KKKKKKHsL   5   AÿôÁŸ!%)73#3'73#&''67#5367#735#35#35#Ob( 6   )1'@@@@@@Ÿ^    B & &  ÿêyÇ )73#735#35#35#'67#53673'73#&YY333333 # #' . ÇtR34]#     lÿèòÇ 673#3##'3255##5##5##5367#3653#&''67#p€77 +53<6) '% % /Ç ? +8888BS z  ! &(  $[ÿèõÈ 573#3##'2655##5##5##5367#3653#&''67#e=<  /;8A:+ -. -2È > )7777AS y  ! &)  "IÿéóÈ473#3##'2655##5##5##537#3673#&''67#RšCC  4B?IA2 4& 29È> )7777ASy   ( "Pÿè÷È"773#3#"''3255##5##5##5367#3653#&''67#X™AB 3D7H=,29 42È @ +8888BT x  " .1  'TÿéñÈ&*.473#3#"''3265#&''67#'67#735#35#33#mtNg + & NNNNI\ÈVT>    41a ÿêòÅ#73#3#5##537#35#35#35#35#35# åo jžH b#%%y%%A......Ū ª©xxxIJlÿéòÅ#73#3#5##537#35#35#35#35#35#l†:=W,8F#Ŭ¬©yyyKKUÿéïÅ#73#3#5##537#35#35#35#35#35#UšC Ff2 CQ)Ŭ¬¨xxxJJ[ÿéöÏ ">7#5##53&'73'67#&''67#3267#"&553#"''325ïc=A$< 1   g   ;  µ$%  ) j)S  "e  zE  fÿéöÐ !=73#5##53&'3'67#&''67#3267#"&553#"''325®6\6#8 . a 7 Ð $% > k(!Q  !e  zE  GÿéòÅ#73#3#5##537#35#35#35#35#35#G«MMt;JY,Å­­¨xxxJJhÿéòÅ#73#3#5##537#35#35#35#35#35#hŠ<?[.:H$Ŭ¬¨xxxJKKóÇ 73#3#537#35#335335#3#3åj dÅL f %%77$67777Ç `` Z> >>   ÿê‚Å#73#3#5##537#35#35#35#35#35# u25F$/ : Ū ªªyyyKK ÿè„Ð,273533#3#3#3''67&''67#535#535#67#+..&&+:;"   "1''+ ,»"   s  ÿéyÐ#0HN73533#&'#5'675#&''6'&''63&''67&''667#+((  +J   6  -     !½.   ,     3     sÿîóÏCGKO_7335#535#535#53533#3#3#35335#535#535#53533#3#3#353#3#3#735#3673#53&'{     pvvff@@!€ÇQ   YY Ra  ." ~ÿéðÑ J73&'73#&''67&'763353#3#"''3255#67'7''67##537#€--pF    <A*5  ' )'½     11B I  3   Qb ÿçóÏ&2JP73533#&'#5'675#&''67&''63&''67&''667#bee0: 2.#= A(b+    “  AC  "$70 76? ¿(!  #(    !   1   !   ZêÔ"&<I7#3#'6553&'75##5#35#3353353673267#"&5'67'533êH;°U *+++;*+;  % D!(=È # -       %  ÿæ€_!%2?7#3#'6553&'75##5#35#33533567'533#67'533€"W +   ?   S #,   -   '   ' {ÿæö_"&;G7#3#'6553&'75##5#35#3353353673267#"&5'7'533ð!W  ,       S #,        ' ƒÿéòÏ!73533#3#67&'7&''67#535#Š%%%08 $(!*%£,,,6 #)  4,hÿéóÏ!73533#3#67&'7&''67#535#t000;H#&  05.<0¤+++6  %* 4+ ÿóxÏ73533#3##535#35# ,++"G%,33¢---To-m.YÿéöÎ+1597373#3#3#&'#5##5'67#537#537#3&'#35#35#f5>A>CV  = )"(1E+====»  U WX 0:FÿéôÎ.48<73673#3#3#&'#5##5'67#5367#5367#3&'#35#35#S:CFDKd$ H +%,6 P6HHHH»    X W  X .: ÿéñ¤.48<73673#3#3#&'#5##5'67#5367#5367#3&'35#35#Sejhqˆ+ o *=7@M>mdoooo˜  H I 8,.iÿéöÎ*04873673#3#3#&'#5##5'67#537#537#3&'#35#35#t/365:M  4  %#,<$4444»  U TX 0: ÿçõ=26:@73533#''275#735#335&'#73533#''275#735#335&'#2)( (2)' 5*+ (3** 6+   ' 6 *   &  BõÐ(-157373#3#3#&'#5'67#537#5367#3'#35#35#Udjbiƒ*  /A3;N8hMjjjjÅ   /(  :  eÿéöÎ*0487373#3#3#&'#5##5'67#537#537#3&'#35#35#p1698=P  7  &#->&7777» V TX 0: ÿèói,26:7373#3#3#&'#5##5'67#537#5367#3&'35#35#Vbgdk€.!e /C;DPD]\eeeeb    .,  ) ÿéxÏ"(,27#5'67#535#53533#3#&'35#&'735'6L (,,,,)) 5 %  &=I('PP52  22  ÿé€Ð "*.7&''63#'6553&'35#3#5##535#K   $! J(777"""Ð  K.$ %,B %  C D'[ÿé÷Ï%)-73533533##3#&'#5'67#535#5#35#5#e;&?0 $ $/<');;;;·K")EC%"K:aÿæõÏ%)-73533533##3#&'#5'67#535#5#35#5#g9%=. ! -:''9999·K#)HD%#K:NÿæôÏ%)-73533533##3#&'#5'67#535#5#35#5#Y?(C4 $( &3B*+????·K$*JI("K:^ÿêóÑ ,73'73#3#735#33##"''3255#53567#^<A’ zzTT‚BB  @@a½ 43   SÿòôÏ!%73533#&'#5'67##55#353#Y>@/%%# !.jWDDp››³1. :VV#0ZÿòôÏ!%73533#&'#5'67##55#353#`;<,$#! -ydQ??i‘‘³/,;VV#/JÿòöÏ!%73533#&'#5'67##55#353#SAG6((' $1…r_LLy¤¤³0/!;VV#0fÿñôÏ!%73533#&'#5'67##55#353#k77(  )q^K99_‡‡³.+;VV#1xÿóõÏ!%73533#&'#5'67##55#353#~./#  #dTB00Suu²,);VV#0ÿç~ÍDLU73#35#535#53#5633265#"'&'67'5&'67'53753745&'77&5&6 ?*`4        . &  Í [Wa,- )! / . , t  " ! !  fÿéöÏ-1573533#3673#3&'7&'#5##5'67#535#35#35#y  ,:  ; &E3 ;;;;¶!  l ^tBoÿé÷Ä-3733#67&'#"''3255'675#535#535#&'‚Z6     !:ZFFH  ÄM   "*  /W NÿäöÈ %73#735#3#7#5'75#35#35#675#knnHH,›5=*HHHH( HÈ<6V#!^6:ÿéëÈ %73#735#3#7#5'75#35#35#675#0žžxx+Ì b=,tttt0DtÈ:7Zb6=JÿäöÇ %73#735#3#7#5'75#35#35#675#gqqKK,ž 7>+JJJJ("JÇ:7W#!_7:ÿæò  $73#735#3#7#5'75#35#35#75#-¥¥€€+Ö!O\-}}}}}} ,*GN,0 rÿäöÇ!&73#735#3#7#5'75#35#35#675#†[[55$y ).#55555Ç:7W#!_7:ÿçíÐ"(.733#5'66367#35#35#35#'67&'ZS ,¥ M H }}}}}}!/+](' ()Ð r% /57*    fÿé÷Ï &,733#5'6367#35#35#35#&'''6’5$r + )LLLLLLB * Ï }q 256'    ÿèð¨!'-733#5'6367#35#35#35#&'''6bK,§ 6LC [)( (*1"/-¨j_%,,#   GÿèðÏ %+733#5'6367#35#35#35#'67&'wG"  < ; \\\\\\! N Ï~s )67(     CÿéóÏ  $(,73#7&'''6#5##5'6735#35#35#–=  S‚W Q5 WWWWWWÏB8  "< o& #32 ÿéê› "&*73#7&'''6#5##5'6735#35#35#uF\!Ÿ|!k? "+-||||||›-%   *k _  ' ' RÿéõÍ@733&'76767&'#3#&''67#535#5'67&'767#a: C      79(!$+ 8 25!   )Å( ,       " !"   DÿéóÍ@733&'76767&'#3#&''67#535#5'67&'767#T> J   #<>+%"(1 = 69$    ,Å'-       "!"   ZÿèõÍ@733&'76767&'#3#&''67#535#5'67&'767#i7 @      45" $ - /1   &Å' ,      " #"     ÿçó¢B733&'76767&'#3#&''67#5365#5'67&'767#] C  !(GK60 33DI AF#    F—      !  Wÿèõ%9?76767&''3'67&'767#3#3#'67#5365#&'¹     5 E=   )"A>B6 * .37   = '   2 ! . ÿöU™ 7#5##535#35#35#U™ž £-HH4ÿçÑw@733&'76767&'#3#&''67#537#5'67&'767#:< G       "7;"  " *-3!   )q             5ÿþÌ A733&'76767&'#3#&''67#5367#'67&'767#D3 /    %*   (.  "š              gÿéõÍ?733&'76767&'#3#&''67#535#5'67&'767#u3 :     ./!$ -+-    "Å) -    """   xÿéîÆ"&73#"''3255##53535#335#3#735#à  P 84%%66ÆTq  [x‰TTB+D<SÿêôÅ6:>73&''67&'#3367&'3533#7&'7&''275#735#335^# &' &   '1888! 8K&!8%%8%Å      X7 ;ÿêðÅ6:>73&''67&'#367&'3533#67&'7&''275#735#335LŒ' * %1 / *7=>>>T*$=**=*Å     X7  `ÿêôÅ6:>73&''67&'#367&'3533#7&'7&''275#735#335iz "$ #  #-3332C#3 4 Å!      X7 Dÿèô›37;7#53&''67&67#7&'3533#7'7&''75#75##5#` '3 /$)R  :=<<- EPP=x))Š    ?0‡óÇ59=73&''67&'#3267&'3533#7'7&'#'275#735#335a     #$$ (.#$Ç    C/   ÿèób159?7&''67&'#5#3267#&3533#&''35#735#335&'7#Ú'<-,A. Q &6 RPP ]miP<DT73#"''3267#''67''67&'767#'667#&'&'''6733267#"&5{`           -  C  d    Ï WA    U   # 0  Aÿìôž-39KQW73#"''3265#&''67&''67'767#'6#6&''3326767#"&57&'''6jm           S    "n  wž G,      <  $  )  1Þ¤*073#"''265#''67''67'767#'667#7˜       ' [ ¤ J/      ?ÿê‰Ð7'6#5'6v   !Ð , zb  ÿéõš$(,735'673#&'3#5##535'67#35#35#e"# l8 5cI5 ?#II#< -'M/v #VV#F, ÿéóÍ#'+73#&'3#5##535'67#535'235#35#Ð %-eO#2 6)J~H#7 5"RbHU;~~~~Í%7l l1!—=sÿçõÆ $7'6553'#33673267#"&5™gAA5 !  €F4 4A_F4"*  - &  pÿîôË"(.7&'36732765#"&55'67''67&'¢ +   k  Ë-K3I\D"  L,%"( & 'xÿêóÏ/733#3#5##535#533567#533##"''3255#«,,3R2++38 6N 11  8Ï""„ & #oÿìöÏ'159=A73673#&'#3265#"&55##5'67#3533&'#35#33535#335y$="'      &;&² J   W!)9@qÿéôÐ59=AEI73673#33##&'#5##5'67#535#535#535#53&'5#3533535335–  #'      !!//Ï   %%6II. <% bõÒ'+/373#&'#5##5'67#535'25##3&'35#35#ËIcK"2 v 4"JaFOcDvvvvÒ  +/  4    ÿè}c"&*.73#'#5##5'67#535'235&'35#35#k/' 3 /(0 !3333c   ;8   3   ! €ÿèöc!%)-7#5##5'67#535'273#'3&3535#35#æ3  /((/  (0 3333#;8      $ ! ZÿîòÏ !7#5##53&'73#3#735#35#3#îi=6TTqqJJJJ(˜˜·3!!3  #`8>8_ÿîòÏ !7#5##53&'73#3#735#35#3#îe=6RRooGGGG'““·3!!3  #`8>8IÿîòÏ !7#5##53&'73#3#735#35#3#ìvA9^^||TTTT,©©·3!!3  #`8>8mÿîòÏ !7#5##53&'73#3#735#35#3#ðZ51JJ ee>>>>$……·3!!3  #`8>8ÿññ§ !73#5##53&'3#3#735#35#3#…_´eB  §§0áá§ %%) L.+,fÿîòÏ !7#5##53&'73#3#735#35#3#ï_93MM hhBBBB&ŒŒ·3!!3  #`8>8NÿêôÐ $,487#5##53&'7'673&''67&77667##5##535#ég<6 F # *") #  ; LJJJ¸#$  M      5M M0WÿêôÐ $*267#5##53&'7'673&''67&767##5##535#êa93 ? " ( &   4 HFFF¸#$  N       6M M0VÿèòÌ7<B7'23673#3#3&''67&''67#5367#53&'67'&'ä 6M@( -JSWM  !  ! "'& )  %  Ì      $,  m z CÿèòÌ6;A7'23673#3#3&''67&''67#537#53&'67'&'ã >YJ. 3  W`eX  #(" % (-+ ,  *  Ì      %) m { ÿèïÐ/4:@7'23673#3#3&''67&''67#5367#67'&''&'Õ KkZWŒ  t…r#*2%#* '"+491@-/  Ð7 "# 3 G ~     ÿèò£ >C7'6'6'&''3#3#3&''67&'#'67#5367#53&'67Ï =t |1  C  6 zŠ{+8'$. %)5=-3£           Z  jÿèôÌ5:@7'23673#3#3&''67&''67#5367#53&'67'&'å 2I<# )  FPTJ  $   #!'   Ì        m z  ÿè„Ì7=C7'2'67#537#53&'73673#3#3&''67&767#7&'x *>2     <CF?   0Ì   #*        † vÿèõÌ7<B7'23673#3#3&''67&''67#5367#53&'67'&'é /D9! &  DLPF    #   Ì        m z GÿéöÐ 48<@D7'2'6'&''&'333##"''3255##5#535335#35#35#35#ã *4* CUÓ  YFGG      1  )" "BÿéõÏ%:733#5##5'667#&'''63673#&''67#|H )d '> : L  9GJB) .? 7>Ï UEEJ    4   !&  Aÿçô¥#8733#5##5'667#&'''63673#&''67#‚?#d *:<K   7GJ>& /7 ,:¥ H76A   *  \ÿìõÑ $73#53635#35#3#3#3#535#535#œ>??8" ·‰  r‘£/ ** YÿéóÏ873533#3#"''3255##535#3673#3##5#535#53&'YCCC=  h-Af "$$%%;z. ÿéç)-1597&'73#3#"''3255##5##5##5'65535#35#335335wP¤¯  ###‘‘##5##‹ 4 G !!)D# %28$YCëÐ,0487'6553&'73'#3#"''3255##5##5##535#35#35#i;<kk #$‰4/ '1; 4$#R ####,f*mÿéðÐ+/377'6553&'73'35#"''3255##5##5##535#35#35#‹  /.`M       w68:n  >-@g #$$&&;{/ÿèÐ)-157'6553&'73'35#'7655##5##5##535#35#35## .)WE   x79 !7o  >-Af "$$%%;z. ÿèðš +X73#'6'3#3#"''3267#'655#53&'#"''3265#5;267##"&55'753753„]e> 0,   '·  . š    I48# "2$.= !831  3 ÿèð¤ )V73#'6'3#3#"''3267#'655#53'#"''3265#5;267##"&55'753753„^f? 0,   ' ¸  ) ¤  ! O9<% $7#0A #;69  :YÿéöÎ $(7#5'673#3#&'#5'67#535#735# #Q!+$   ")++ήˆ .$M%! LH#))>ÿèöÏ $(7#5'673#3#&'#5'67#535#735#d /\'3*  &1#44ϰ‚ 2+N$ %VU) '( =ïÏ %)7#5'673#3#&'#5'67#535#735#B  '2y3FF## # 4E2TTÏaF  #.  ÿéö  $(7#5'673#3#&'#5'67#535#735#<  !3~5J;)&* (:I5YY ‚a ,)?CC" 1ð« #)7#5'673#3##5'67#535#735#&'<  #/z5HH& -A2TTF  « T= + &!   ;  UÿèöÏ $(7'67#73#3#&'#5'67#535#735#k   )T#-%  "*..z &,±ÙM%!"ON%()[ðÐ.47367&''66'3#&'#5'67#535'6'6­  ( ;%%%  (-"1F  Ð    (+  #' XÿéõÏ,2873&''667'3#'#5'67#535'6'6''6¿  (     !b8  Ï?% L!15EA7&e^#+"& %)  ÿéô˜1773#&'#5'67#535'67367&''66''6j$$  %, .d   % 6 $# ˜NN!( ! 20!<'$]ÿéõÏ-3973&''667'3#&'#5'67#535'6'6''6Á  &     !^3  Ï?% J 03DB;) a[!-$& %) [ÿé©È735'673#&'#5'67#b     …& + fe! eóÐ;73#&''67&''667'3533#3#&'#5'67#535#¡F    ¸***,,  $,*Ð       Qÿèð™ %*73#535#535##5##5#53&''67&67#gqr`nn_‚t o"+)# 7 ™B  < .    ÿëðÉ (73#735#'3#735#3#3#3#"''3267#'7#‹XX11…XX33®®ᘠ‹‡ 1É<<:0  ÿêó %73#735#73#735#3#3#3##'3267#7#VV11ZVV00u°°æ¤ ! ‘ .00.$ÿè•Ç '73#735#73#735#3#3#3#"''3267#7#88688Ttt ‡MA  D%ÇD"D"@1 !€ÿêóÉ '73#735#73#735#3#3#3#"''3265#7#†// $00 C[[ sGC  J ÉA A ?4 "FÿéìÇ"&,28>7#3#3#3#"''32767#55#5#35&''&'''67&'ç60000;  yA....# : /ÇM! 1‚%&- gÿéñÇ"&,28>7#3#3#3#"''32767#55#5#35&''&'''67&'í.))))2  l9&&&&   .' ÇO 1‚&%/ 6,ëÈ!%+17=7#3#3#3#"''3267#55#5#5#&'''67&''4'èA8888D  ‚@,,,,,Q  `  W  È   4 b           ?JÈ 7&''6,È  1%ÿéï‘!%+17=7#3#3#3#"''3267#55#5#5#&''&'''67&'âSKKKK` ´VBBBBBt    M ;  ‘5 m  ÿéï!%+17=7#3#3#3#"''3267#55#5#5#&''&'''67&'âSKKKK`´VBBBBBs    M ;     4 j      iÿéñÇ!%+17=7#3#3#3#"''3267#55#5#35&''&'''67&'í,''''0  f5""""  .  'ÇO8‚&%/  $í¨!%+17=7#3#3#3#"''3267#55#5#5#&'7&''&'''6ãUNNNN_   ±R@@@@@L9J  ¨ " R            ÿèô:7'6767&'2567'D>)  "$ S- "     &   ÿîoÏ *73353353#3#3#735#676767'67'ZbbWW22 '1 Ä**06,   ÿíóÌ7'6773267#"&55'7§/( 24  #&¢  <N & RuÿîõÎ,7#"''3267#532767#"'"&55'753753ì ,!  ŸT!3 ^Xh e;5E?|ÿèíÐ 73#'3'6573#ÚL&Ðçç„>& $4wÇ:íÊ!%+17=7#3#3#3#"''3265#55#5#5#&''&''&'''6æTMMMM[  ³XEEEEEw   Ê   1 Z        ÿèð@736533533##5#'67#C;;;>5*?. 44.Aÿè÷Ç#'+173#3#&''67&'767#535#35#33535#335QžF'':)c'':) I    I ( ( ‰ÿèôÄ $(,073#3#&''67&'767#535#35#33535#335’\&#$ #     !"##4#Äd    d<@ŽÿèôÄ $(,073#3#&''67&'767#535#35#33535#335—X$!!  !     !!0!Äd     d<@\îÐ73#3#3#535#535#53&'736§9]RRdÚbRR\0 1 Ï    ÿê€Ï?D7#"''32655'67&''67&''67#537#'733#67&'37#Z  "  $D696   6-->     //    xLÿéõÏ@D7#'733#67&'#"''32654''67&''67&''67#53'37¾MK(J      #0 5$$ $ $5_, C//   .0    /Z-ðÒ?D733#67&'#"''32655'67&''67&''67#537#'77#‚O I     !'-!$ $%#1dMXCÒ            ÿéôÑ>B733#67&'#"''32654''67&''67''67#537#'77#Oo:n +,  0> H-)8 6+ 25Un| e Ñ1+/     UÿéõÏ@D7#'733#67&'#"''32654''67&''67&''67#53'37ÀGF%F      !- 3!! " !1Y)=//   -0   /€ÿë÷Ï?C7#'733#67&'#"''32654''674''67''67#53'37Ê,03     !   9#‘0 1   (,      1IÎ767'67'67676'6}    ›3 3. f  ‰ÿëøÏ=B7#'733#67&'#"''32655'67''67&''67#53'37Î,-,       4#‘01  *,       1  ÿéò›@D7#'733#367&'##'32654''67&''67&''67#53'37 `^Ct   / / 1A D0%=6(( - VŽ@ Ye(%    "    % _ÿéôÊ:733#67&'#"''3265'67&''67&''67#535#535#va@    $ +  :dKKMÊH      _ÿéôÏ@D7#'733#67&'#"''32654''67&''67''67#53'37ÁDC"C       &.  -S%://   .0     /kÿêöÏ@E7#'733#67&'#"''32654''67&''67&''67#53'37Ã=?=      # '  *M!4//   ,/    /\ÿéòÐ*.273733#5367#35#3#3#3##5#'7#535#735#35j!>”#*713€,55::? E@XX .¾ " (4C`ÿéóÐ+/3736733#537#35#3#3#3##5#'7#535#735#35m";$+2,1z,//;;< C:RR ,¾ " (4BgÿéóÐ,04736733#5367#35#3#3#3##5#'7#535#735#35t8ˆ")/)/t),,779 @7LL*¾ " (4Bÿèñ­/373733#5367#35#3#3#3##5#'735#535#735#*;VÝC3@TLH°7CCB†14499F __Á ~ ..  > ÿé•Ð/3736733#537#35#3#3#3##5#'735#535#735#$0ˆ$-)"/l$--227 $@@5GG¿ % '2  6ÿéɇ.273733#5367#3353#3#3##5#'735#535#735#G#3“-1'Tm'..00: -<<4GG{   "  ÿèñÐ*.273733#537#3353#3#3##5#'7#535#735##3$7aà<0F]—´EQQ[[be[ŒŒG@P½$ 32B|ÿçòÐ")/73673#3&''6654&''67#677&'‡>?:    £8"   +?4 r   ÿé€Ð-173733#537#35#3#3#3##5#'735#535#735#'t' ,]%%&&1 !66,88¿%21rÿéóÐ*.2736733#537#35#3#3#3##5#'7#535#735#35~2 }!)(#,i%''11381CC$¾  " (4B~ÿèõÉ'7#3#3#3#67&'#67'5#535ëKDDCCT/   +  É   EM ZlvÿêóÑ -73&'73#3#735#33##"''3255#53567#{/3vff@@h33  77K½ 43   xÿéôT73533#&'#5'67#y34'   %K #IG&#~ÿèóÎ 17'2'6'&''&'3#35#535#53#5##56æ ,A4.  %    % H2HÎ  " #""„  ÿéuÐ ,073733#537#35#3#3#3##5#'735#535#735#% i$*V!!!!* 00(22¿ %21qÿéïÇ $<@D73#735#335335'673#"''32653533#67&'7''75#735#335~kkI  T  a"## !(%"#Ç=M  j'R . wÿéôÏ37;?C73533533##5##5#3#3#3#3##5#535#535#535#5##5#35#335wp 444444 R$½""(pÿè÷Ñ!%173#3#&'#'67#537#53635#35#3533##5#¢70B#  '" ????ÑU &"U ,3p""$$ ÿélÑ -173733#537#35#3#3#3##5#'735#535#735## `#$L $  ''!((À % (1 kÿçõÐ#'+/5;73533#3#535##5#;5#35#3#735#35#35#'67&'o9990s09~HH qqKKKKKK  G Å   "//)U=    HÿíñÏ673673#3#3#3#3#535#'67#5367#5367#53&'ƒ  &HDGZa]2?‘@% !%,(+7(Ï    ""%   LÿéóÑ C7#5##53&'73#67&'#"''32654''67&''67&''67#ìrAPŠE      ". 3#& ' #.º!!  *   05 "  EÿéóÐ'M7373#3#3#&'#'67#5367#5367#367&'#"''3255'67&'767U:DHCI_+ $(  ,%,6<     ¶   $  Q)      ÿñîÒ573673#3#3#3#3#535#'67#5367#5367#53&'T 1  6[X^ w „LYÆY6 *AMJP[4Ò     "" (   ;ÿíòÏ473#3#3#3#3#535#'67#5367#537#53&'736½(LHK`gc4B™C( &'/*.<,  Ï  ""&   ÿïñ 373673#3#3#3#3#535#'67#53567#537#53'[28mgl‚‹†HVºQ; )>I7Vcca _C ( 'Ï 9H 5 u   ÿçóÔ%+1773#3#3#"''3267#53635&'7&'''67&'m` ºº´ ´<0ŒB  ?  ~ <  Ô >C+‡ }  aÿçôÏ%+1773#3#3#"''3267#53635&'#&'''67&'œ<_nnk hL  * 'Ï 9G2 u iÿçõÏ%+1773#3#3#"''3267#53635&'&'''67&'Ÿ;\kkh fJ (  %Ï 9G1 u   dÿéòÐ!%).38AGM73533533#3#5##5'67#735#335335367#35#35#3'3267#3'67&'n$##-D  !$5X "3 4  @ 9¼1;/2: .4  1  58  Kÿé—Ï73#3#7#5'756ˆ""##( Ï %0.™ ÿé{Ï73#3#67#5'756l!(<<<<$ &.Ï  % -)š—ÿèöÆ#(733#"&55#'6653&''67&'#367ã    P   Æ<  0$  )c1    &TÿéÏ73#3#7#5'756Ž!!""'  Ï %0.™]ÿé¤Ï73#3#7#5'756• % Ï $1.™ ÿérž73#3#67#5'6756c%7777#" (ž  eÿéõ˜$)733#"&55#'6673&''67&'#367Õ '   m  !$ #   ˜( M   gðÈ &*.73#5##53535#335##"''3255##55#35Úe8?((L  2C22È8(*88( .X  m ZÿéïÆ &*.73#5##53535#335##"''3255##535#35#ÙqAD..T   =====Æ?""??.0d  '}#4JÿéìÆ &*.73#5##53535#335##"''3255##535#35#Õ~DN00^  GGGGGÆ?""??.0e  '}#4ÿéíš &*.73#5##53535#335##"''3255##535#35#Ê#´_&rLL::‰  vvvvvš6((66&  'L ` % lÿéôÆ &*.73#5##53535#335##"''3255##535#35#ád;=((N  77777Æ?""??.0e  '}#4ÿèïÊ &*.73#5##53535#335##"''3255##535#35#Ï ·!]-vII66‰  sssssÊC,-CC1#3g  +~"0‡ÿéñÃ73#3##5#535#^%++,,&ÃIllIƒÿéïÏ73533#3#5##535#35#ƒ,,,'9&,99221pp1}9xÿæôÎ)73#6767'67'67#53&'&''66¶ +: ; $ (6?$ (.Î J ! d #0xÿèöÐ +73#53&''67&'&''6677&'76º,o. B         Ð 6 " '    wÿëóÎ#(-7#5367#5373#3##'365#335367#335#3½F #!  5$$,.G,  cc#1¡ A  ) wÿêóÏ!%)-BH73533&'73#3#5##5##535#35#33535#3353533##"''3255#&'{0  0++0,D,`S   S » \\.-?     uÿéñÐ "&*73#53&'3#735##"''3255##53#735#µ5|0\\88W  P;;Ð +32[  Das 5mÿéôÐ !)1A7#5##53&'73533533##5##5##5##53'66733267#"&5ëO/9a:!   ½** -N=>m$P C vÿïòÐ #'+/?73533533#735#33533535#3353353#3#735#3673#53&'|!!qMbwwjjHH!|ÀO/1, .$    rÿçñÑ !%)-39?7#5##53'73#673#5'675#5#5#35#''6&'''6ïX40K  6d H?????  D"  ¾##    \M H   i }  kÿè÷Ð 8<@DHN73#5##53&'33533#3#32767#"&55#'67#535#53#335#35#35#&'±4Z3    * %./??????GÐ #  a  # a   ' '   dÿèóÆ -73#735#33535#3353#67&'#67'5#ouu1O1m‹<    5 Æc9A7  BC Qÿèñ› ,73#735#33535#3353#67&'#7'5#+¬¬::L:†::L:´àc   R!0" !›R2.-  7-   9ÿèöÊ ,73#735#33535#3353#67&'#7'5#-©©66J766J7²àh  $ W!%:'# (Êd;>6    DI  S^ÿèóÆ -73#735#33535#3353#67&'#67'5#jxx2 R2 q‘?   8 Æc9A7  AC QJÿèîÆ -73#735#33535#3353#67&'#67'5#Y‚‚$$7%\$$7%~¡E   : ! Æc9A7  BD  QWÿèóÆ -73#735#33535#3353#67&'#67'5#d}}""5"W""5"w˜C   :  Æc9A7  AD  QsÿèóÆ -73#735#33535#3353#67&'#67'5#~kk-F-c~6    . Æc9A7   AD  Qÿé¢Ï $,073533533##5##5#'67&3##5##535#,,G /& FZZ_EEE¸%Q Q5#\ÿéõÏ $,073533533##5##5#&''63##5##535#\. .F % "$# 0[[aGGG¸  !Q Q5$Gÿé÷£#(0473533533##5##5#&'#5'63&'#5##535#Q"1""1"L%' R <; M[[[’   *D D(lÿéõÏ $,073533533##5##5#&''63##5##535#l((>#   + QQX>>>¸ "Q Q5$sÿéöÏ $,073533533##5##5#&''63##5##535#x&&7  * IIS999¸  !Q Q5$rÿéöÈ)?73&'767#533'67##"''3255'67#3533#&'#5'67#z/ Ie1   )34' %›     @ #II($kÿéöÈ)?73&'767#533'67##"''3255'67#3533#&'#5'67#t2  Li4  " ,67) '›     @ $KK*#]ÿéõÈ(>73&'767#533'67##"''3255'67#3533#&'#5'67#g6  Ws,  % 0<=." " "-œ     @ #JL,"TÿéôÈ+A73&'767#5333'67##"''3255'67#3533#&'#5'67#^; Zx;   ' 4@;,$"% $0›     @ %LM," ÿéôœ(>767#533'67##"''3255#'67#53'3533#&'#5'67#f §#V  8   %< +'MTAbcV&7 :&&7 2$N‰   M  /.  ÿé€È(?73&'767#533'67##"''3255'67##5'67#53533#&+ C].   %C (2++ ›      q1?1[ÿóòÅ73#3#3#535#535#3535#5##3aŒ*&&/—,#%(9%%$#Å)W,,V*¬>3;<2HïÇ73#3#3#535#535#3535#5##3×G;;KÞH88EX%::%77Ç66[%$$eÿóòÅ73#3#3#535#535#3535#5##3k‚&##+) !$6""! Å)W,,V*¬>3;<2EïÇ73#3#3#535#535#3535#5##3×G;;KÞH88EX%::%77Ç77^&%%ÿð¸c73#3#3#535#535#3535#5##3š/**7§8**3B**)(c01QVïÈ73#3#3#535#535#3535#5##3×G;;KÞH88EX%::%77È11O  ÿèë` 73533#''275#735#335'7#6)MM Rk51M99M9 =G4 2jEôÆ73#3#3#535#535#3535#5##3n€# )Š* %8  !Æ89^"""™éÐ 73#3#53635#35#µ$8DJ73#'66553&'35#3#"''3255'675#73#"''3255'675#&''&'«7w =#cc 4 "=7 %   /   Ï 8'@1 +#X5:q   .q    *    TÿéõÑ -39G7#5##53&'7&'3673267#"&''67''67&'3353#5#533òr@  "(  "   ~  5#l#»..   /% . 0    @3+E;)cÿóôÆ 7#3#53#735#3#735#73#735#ðz~‘+TT..11-11Æ®Ó!98J,J,`ÿéóÉ#';73#3#5##5##535#3#73#3#73#3#3#3#"''3267#7#k|6?..?4 !!C J((J''Rƒƒ“c] b É #::# '    %SÿéõÑ 7;?CG7&'67&'67&'63#3#&'#5'67#535#735#33535#335x  <  8   i†;E6" #$ "1@8%%8'_%%8'Ñ      -O   46! /1Kÿç¯Ï!%73533#3#&'#5'67#535#35#335]     ¹M IC%MR+++ŸÿçöÐ73'67#'63&''65¾)     $Ð# *"31  #!1ÿçóÒ -1597&''63#3#"''3265'##'2655##535#35#73#x4: :5,4 Jii|   H 11111^Ò"&(# p gn /…$41[AÿéõÏ!26:>7&'#5'63&'3#"''325'#"''3255##535#35#73#”&- \ :NG   3  """""FÏ  " .s  mt  1‹%7-\FÿéõÑ $48<7&''63#&'67&'6'#"''3255##55#35œ#* (&"* < LLB    .   8 "4""Ñ$%! ! # (# #("q  -ˆ%ÿèøÒ +/3=7&''63#&'6'#"''3255##535#35#7&'6€/: 64,@O nnc     88888   Ò$*(  $ & !i  .†#42 $ÿçóœ"37;?7&''#5'6&'3#"''3265'#"''3255##535#35#73#}16 Z ML l B  66666`œ    S LS  "j ( 'G +öÐ"'+/<@7&'#53#"''3255##5'63&'35#35#73#"''325'3#€16 #"HU  8 Q : =8888’  -Ð  M ^  < & 'J  A<TÿéöÏ!26:>7&'#5'63'&'3#"''325'#"''3255##535#35#73#š#* V 1G D  1    AÏ   -s  mt  1‹%8-\ ÿé™Ï/37;73#5'67&3#"''325'#"''3255##535#35#73#T AH  0"  & 5³ #*s  mt  1‹%8-\:ÿêõÉ7;?7327#"&547#'65535#'273#67&'7''275#735#335Û a $%  *ÉH8$$+$;0>V>9 /ƒÿèòÆ!7#5##53'>33265#"&5ç4" ÆŒ{z‹(R/)  $,3 ’ÿèõÆ!7#5##53'>33267#"&5ê'  ÆŒ{z‹(Q2'  #- /  G ôÐ .26:7&''63#3#"''325'#"''3255##535#35#73#, #* + <VV]  0  #####DÐ   [  V_  $s .(M\ÿéòÊ /37'6553'#33673#3##5#'67#535#53&'5#‚[[:  5Ž+E5 7?a<) >>& EkÿçõÆ %7'66553'#33673267#"&5“ lFF8 #   €E5 2#_F4"*  -   ÿüpÍ73#67'756675#\!? +0 " Í  W ¨¨\aÿéôÏ1E73533#3#3##5#535#535#73#"''3265#'667#373#&''67#iE@     H;?9) ). - 5¾W>-% !'v  %)  " ÿçô–1F73533#3#3##5#535#535#73#"''3267#'667#373#&'#'67#)''$$((..$$)o`  # ucgT;G"TEVŠ      D*! \  #$ ÿéï‹1F73533#3#3##5#535#535#73#"''3267#'667#3673#&''67#(&& '')) (ia   " m\eY>F$O?O€      : # J !! Dÿèò¢0E735#535#53533#3#3##5#73#"''3267#'67#36533#&''67#NUI   [FPD64 E : B[   O=  1# 0[ QÿéôÏ2F73533#3#3##5#535#535#73#"''32765#'667#373#&''67#ZMF     PCF@. .4 2=¾W 5+& !&v  &)  "IÿéôÏ2G73533#3#3##5#535#535#73#"''32765#'667#3673#&''67#SPI    TGJD0 18 6A¾X 4-% #%w   '*  "hÿéðÐ %)-157&'67&'67&'6#5##535#33535#35#„  8   7   S 2!S 2!!Ð   Qyy-GiÿéõÐ !%73&'73#&'73#536#5##535#r05{  G *ŒM $DDD·    @[ [?-kÿéòÐ-1597&'3673#3#"''325'##53#"''3255#3#373#  R  ‡o  >A    Ð  „  :€ hE`OÿéòÐ.26:7&'3673#3#"''3265'##53#"''3255#3#373#y  d  (£ˆ   I(N ((((%Ð  „ 9€ hD`ÿéðÒ-1597&'73#5363#"''325'#"''3255##535#35#73#S  m A߆ + T 88888kÒ   0‡  z  6›*A6l`ÿéòÐ.26:7&'3673#3#"''3265'##53#"''3255#3#373#†  X  #’x   BF   "Ð  … 9‚  kE`ñÐ-15973673#53&'3#"''325'#"''3255##535#35#73#R 8>â<‹  Q  77777iÐ    +e  ^d  'y"2)O JôÒ,04873#53&'7363#"''325'#"''3255##535#35#73#®>ç@ :&  K @@@@@pÑ  $?  8B R 8ÿéðž-15973673#53&'3#"''325'#"''3255##535#35#73#M 99ß7   K   77777eœ  )g  \`  (u -*V]QòÓ+/3773&'73673#3#"''325'##'6655##55#3573#]#' !•y  , $6$$¿ @  8B T !7rÿéôÏ-1597&'73#5363#"''325'##53#"''3255#3#373#•  K ‚L   8< Ï   3…  :€ iE`ÿéïm.26:73&'73673#3#"''3265'#"''3255##55#3573#=:>ß»   D   DVDD+Y B :C V 9VÿéóÏ26:73533533##5##5#3#"''32765#3##5'65#35#d######c   U G;A)))¼v YY_ 1%ÿéeÏ73533#&'#5'67#"   ¡.. ‚v$)8 ÿééœ!73#"''3267#'6##55#35>  ’ {[[HHœ b [k%ÿñò 73#3#735#35#3#ÄÄŸŸwwww5ãã[594\ÿéóÏ #48<73#5'675#5373673267#"&5#"''3255##55#35‡((&    .  GZGGÏ]    h  *€" ÿéšÏ "37;73#5'675#5373673267#"&5#"''3255##55#357%%$    -  BUBBÏ]     h  *€#dÿèöÏ!9@73533#&'#5'67#7&'7'6373#&''67&'7#367n78, +  `  a+ H   0 #"722$">  r      KÿèõÏ!;A73533#&'#5'67#7'6'&'3673#&''67'67#367TBC3%%) #/{ Y 1`"   '9 *1 &;+ ž11*1 >    z      TÿèôÏ!:@73533#&'#5'67#7&'7'63673#&''67'67#367_==0! " . l  l1 P  %5 '' '<  ž11#%?   r      ÿèôÏ!<C733#&'#5'67#537'6'&'3673#&''67&'67#67#v]J- 2##1 +E]O|  Q~+ #(-&+F  %?  ) 3 ž11 <   x        ÿé÷Ï%5FJN767&'7&''67'67676'3'65733267#"&5'#"''3255##535#35#™")! ,6  o¡     AAAAA½"   hM1.BfÇ # ab  *z!05ÿéôÏ$3DHL7&''67'67676767''3'65733267#"&5'#53#"''32=#335«!$  W JM   ((((š   + :eM1 .DeÆ % (wc ?„ÿêëÉ7#"''3255#'65535#35#ë (''''ÉÉ ?/' )3v;(c)A•Ï73533#3##535#35#A  3 !!¥***Sb*k/GÿéòÐ/E733533##5##5#53&'3673#&'#'67#3533533##5#'67#q',,'$$^  r6I3+ 7 . $+#%'''!Ð    %$ ;77$ÿéëÒ#173#3#3#"''3267#53635353353##533[e–±±³ ±/ ‚‚‚W1ˆ0ÒO  A *Š a)9SÿéîÐ#173#3#3#"''3267#53635353353353##ŠEfxxy wSSSuaÐN  A'‰ a)_ÿéñÐ#173#3#3#"''3267#53635353353353##‘@_ooq pKKKlZÐN  B *‰ a)…ÿïñÆ ,27#3#53#735#35#373#&''67&'67#367ñZZlEE$$$$+    %Ʊ×D( & +     ÿï‚Æ ,27#3#53#735#35#373#&''67&'7#367‚\\oJJ((((+    $Ʊ×D) & )     wÿðñÅ ,37#3#53#735#35#373#&''677'67#367ñggzQQ////0    ) ųÕD) & )      ÿï‘Æ -37#3#53#735#35#373#&''677&'7#367‘jj|RR11111     +Ʊ×D) & )     nÿïñÆ ,37#3#53#735#35#3673#&''67&'7#367ñqqƒ VV4444 4     , Ʊ×D) & )    iÿïñÆ ,37#3#53#735#35#373#&''67&'67#367ñvvˆ!ZZ6666!9   , Ʊ×D) & )     YÿïñÆ -47#3#53#735#35#3673#&''67'67#367ñ††˜&bb@@@@'@  $ !2 Ʊ×D) & )   _ÿéùÍ#+<@73533533##5##5##53&'73#3#3'667333265#"&5'3#f((=7e[o  J   %º2  '" #<  @O ÿéê”39?EK7&''67'67676767&'73#"''32765#'6&'&''&'''6i #+  %=G :      N   ,M j% L % PÿéõË &>E7&''67&'76'3353#'67&'3&''67&''667#À    Ta…!L *G$ $ /*  ;Ë     @@Q         fÿéöË &=D7&''67&'76'3353#'67&'3&''67&''667#Å       NW} H ' B  '"   7Ë     AAQ        WÿéöË &>D7&''67&'76'3353#'67&'3&''67&''667#Ä     R]‚" J 'F#", ( !  :Ë     AAP         rÿéôË%=D7''67'76'3353#'67&'3&''67&''667#Ç      FMr D )9 "  -Ë      ==M         }ÿè÷Ë &>E7&''67'76'3353#'67&'3&''67&''667#Ì      BHl >  :      -Ë      AAP         cÿéñÏ"04873673267#"&5'67'5333#5##53635#35#¦    1&@R$RRRRÏ$   "$ b 0 o o 5B&ÿéõ !/3777'53373673267#"&53#5##53635#35#8C+& E '" '.  ,[…9+…………y  E"    [['2hÿéñÏ"04873673267#"&5'67'5333#5##53635#35#©    / %>N"NNNNÏ#   "$ b 0 o o 5BÿéÏ!/3773673267#"&5'67'5333#5##53635#35#E    " 2: ::::Ï#    #$ b!0 o o 5D ÿé‡Î#'+DHLP7&'#5'6&'3#735#73#735#'3#735##"''3255##5##5##535#335335C!  A (3&"" E"" 5"" @  !Î   0  0  0 1I """"*\#‹ÿéóÏ !/37767'53373265#"&55363#5##53635#35#  1   128 8888¥%  ]   S G qq 3BZ£Ï73533#3##535#35#Z,¥***Sb*k/ÿëç–'+173533#3##535#35#7'3255#'65535#35#..."C!. 11¸ #84454{GXQ%U‹ >>.JEÿéõÈ 57'66553'#33#67&'7&'3#3#535#535'67#r ŠddZo>   //8‡ , , 77ÿéú›48<7327#"&547#'6553#67'7''75#535'635#335á jm&""  $+."" ."›:-+-%1:&.BB5 5E›òË 7'6'6'6×* (- +( &Ë " # $oÿéøÉ59=7325#"&547#'6553#7&'7&''75#535'635#335å  GH    ÉH8&&#=0>n=##=yT  "Tk666 ÿëvÏ 77'2'6'&''&'3#3#753#55375#535#'6j (9/+  ;%((C'' Ï      1"> :'3  ÿénÇ #04875#53#5'675#53#5'6'&'7&'3#5##5335#35#+. =. <  8   $0 0000•!_ !_)   >j j&; ÿétÏ#AEIM733533##5##5#533#735#73#735#3&'73#3#3#3##5'6353535$,,%,,4!G Ï #--"  E ôÎ&*73#"''3267#'6#3267#"&5535#žD   : 2 #! Î Y D ;!   _, ÿìùÆ*7327#"'&5#'655&''67&'76Í  | q Æo4"#!-\83 *4o, !!  GÿçöÇ,73265#"&547#'65567&''67&'×N(   ÇG8' .%9/>f62 (4x.- ! #" ÿþ[Ï 73&'73#67'676'&'M3 % ¨ ;$ 5/)+.':ÿéòÑ"'-39?E7333#"''3267#'67#53637#37#'&'&'&'''67&'Š;    ‚ */61+!^Q  n    < 5 Ñ//J0 44@=q "  ;ÿéñÏ"&+17=CIO7'267333#"''3267#'65537#37#7&''&'&''&''67&'Ý :TE#    xQXcg3   i   0  +Ï 2%&A)'! -93%9 b  v  FÿéòÏ"&+17=CIO7'267333#"''3267#'65537#37#7&''&'&''&''67&'Þ 7OA     l HNW[,    d /  ,Ï 2%&B*) -93%: c  v SÿéòÐ!&,28>D737333#"''3265#'67#37#7#'&'&'&'''674'e02  h %*3&!/A  g 8  -®"0.K0 )E<    FÿéòÏ"&+17=CIO7'267333#"''3267#'65537#37#7&''&'&''&''67&'Þ 7OA     l HNW[,    d .  +Ï 2%&B*) -93%: b  u >ÿéñÐ"&,28>D7367333#"''3265#'67#37#7#'&'&'&'''674'Q88  w *2:-&6L  s > 2®0.K. )F=   ÿéí§"'-39?E7367333#"''3265#'67#33737'&''67&''&''4'F W !   ª  +!    7 - (--*#  Ñ gO  UE$;g 7E 3  ÿèõ¢#',15F73#332767#"&55'67##5335#335367#335&''6767'yNW ( /%JL3M:<   mÿéôÑ"&+/?73#3265#"&55#'67#53635#35#365#35#67'7''6ž9   0 & %'(%  Ñ gO  UD%;g 7E 3   ÿèôd27;?C73#67'7&''67#32767#"&55#'67#536365#33537#335N!      )+ QEARE:;ME‘68KHd;     !*;  iÿéòÊ  &*73##5#3#735#3##"''3255###535#k„ fII##‰  iR9&&ÊQQ56M  J4 ?$ ÿéóË  &*73##5#3#735#3##"''3255###535#Ó¤hh@@3æ#   ¯Š[HHËPP56L  I7F& ÿéŠË  &*73##5#3#735#3##"''3255###535#t T==~   YL/ËQQ56N  K5 B%LÿëóÊ  &*73##5#3#735##53##"''325'##535#U–q PP**T{§   A..ÊQQ5IJ  64 ?$IÿæõÆ!%)-173#3#3#&'#5'67#535#535#5#35#335335T—-+@K=& (' &=J@+,X))ÆD!'CA# D2 VÿéõÆ!%)-173#3#3#&'#5'67#535#535#5#35#335335`Œ*(;C6! #" "6B<))P''ÆD"&><"!D2  ÿèõÈ!%)-173#3#3#&'#5'67#535#535#5#35#335335ÜH    \1--  )ÉCC2!!!!!I 5;-ÿçóP!%)-173#3#3#&'#5'67#535#535#5#35#3353353¸;3JZI5<1 +?ZM3:l!2!!2!!P \ÿéðÆ "073#3#735##"''3255##5&'73##5#536\””uuOOp   k54 !/Æ 30f  Pk}   **OÿéðÇ "073#3#735##"''3255##5&'73##5#536O¡¡€€XX{  u9 ;$$4Ç 3/g  Pk~   **AÿéšÇ (.73#3#735###'3255##53673##5#7&'DQQGG%%@  8  Ç23e  Rn}4 ///  ÿé{Ç (.73#3#735###'3255##53673##5#7&'eeVV44Q  K  Ç22f  Qm~5 ///  iÿéðÆ "073#3#735##"''3255##5&'73##5#536i‡‡ mmGGf  _1.*Æ 30f  Pk}   **ÿéì¡ /73#3#735##"''3255##53&'73673##5#ØØ¤¤¨  ©(   94¡ /*K  6Rc.   sÿéðÆ *073#3#735##"''3255##53##5#536'&'t|| ff@@_ WM&Æ 30f  Pk} **  ÿévÉ "073#3#735##"''3255##5&'3673##5#hh RR00M  F$ É23f  Rn~   //qÿéóÑ<73#5'67335#35#3#3#"''3265#'67#'67#'67#–X_OS;;;;uPQ       ² C9 ( & '<#) #  ÿéìÇ "073#3#735##"''3255##5&'3673##5#ØØ¤¤¨  ªF  A  '55Ç74]  Few   ""†ÿçñÏ73533#7'7''675#75##5#‹&&& %,&M //f1" 4BBBB`ÿéóÏ#'+/73#3&'73#&''67#5365#53635#35#35#5/0& , 3 ) */'!DDDDDDÏo   (# o )/0ÿèíÏ%973#73#"''3265'3#3#3#535#535#73#3#3#535#535#É   ­P!!QYLOÏççÍ ÂÿçìÉ #73#735#3#735#35#35#'67&'4™™tt±±‰‰‰‰‰‰$+ (\/! -É4/xU23&      ÿé‰É #73#735#3#735#35#35#&'''6ee??ssLLLLLL4  É60qO//%  cÿèõÈ #73#735#3#735#35#35#'67&'vllEExxRRRRRR FÈ41rQ./%    ÿçí“ #73#735#3#735#35#35#'67&'3žžzz¶¶‘‘‘‘‘‘+ ;7U%) +&“* $V> !    ÿé”É #73#735#3#735#35#35#'67&'llFFzzUUUUUU A É54pO//%   ÿêó– !%)73#3#535#3#&'7#'67#735#35#35#Å[mægXµ9%) .) 8 8&%5–  $Z    ? " " \ÿèòÐ&.26:73#33##3#5##535#535#'6553'5#35#5353535#·23( (-?&"")8 ))"4??Ð #$J I ?3 0!Y02#`6ÿéòÑ(048<73#33##3#5##535#535#'66553&'5#35#5353535#£CD445N,,,9 I 99,?!!!MNNÑ #$J J A2 -#Z 13#aZÿéôÑ'/37;73#33##3#5##535#535#'6553&'5#35#5353535#µ54) )*;#""+9 ++"5:;;Ñ #$J J B1 3;Z 13#a ÿçô©'/37;7#33##3#5##535#535#'6553&'75#35#5353535#ñ[HHK}DFFRY RRFY555z}}–  9 9  5) *0J  )   HcÿéôÑ(048<73#33##3#5##535#535#'66553&'5#35#5353535#¶31( ((8!& 6 &&2688Ñ #$J J A2 -#Z 23#aqÿéôÑ(048<73#33##3#5##535#535#'66553&'5#35#5353535#¾*+# #$0! 2 !!..00Ñ #$J J @3 ,#Z 23#a ÿé†Ñ'/37;73#33##3#5##535#535#'6553&'5#35#5353535#Q*(! !!-"  / "",,--Ñ $$I I @3 2>>· L-" $,@$  +FE, ÿéWÏ73#5#'67#535#533D 8/Ïæ[F:"P>iÿèõÐ #+/7&''6'6553&'73'#335#5##535#¬ # ,1 #EEEE444Ðq." $+A K:  .D D* ÿéó¬"&.27&'#'655'63&'73&'3535#5##535#ƒ 05 ”! S:5!%$ttt¬ B*3+  (: :cÿèõÑ #+/7&''63#'6553&'#3#3#5##535#¨"  # / 'Z04FFFF666Ñ  J-% '36 #  E E, CóÐ#73#&'#'67#5353653367#335ÎF3 @A .<HJ$ 3H;¸6  6 6 $mÿî÷Ð!)-1573#&'#'67#535353367#3353#53535#35#35#á*! '$$ )** ‚    ¸6  66&gBBB22222 mÿéóÉ 06<73#3#535#5#35#3353353#3##"''3255#'67&'u~'"t!&F  Zff 5  7  ]  É<<+;) &  WÿðóÏ #'+73#7'673'3#7&'3#53535#35#35#Œ8  (‰p œ!!Ïw; ,+"/`$/NNN<<<<<4ÿòóÐ  $(,73#'6'3#'3#7&'3#53535#35#35#±5; .(v  (¿+*Ð #*mdZ% /QQQ>>>>>QÿñóÐ  $(,73#'6'3#'3#7&'3#53535#35#35#¾(/ )%l ¢#$Ð %/vla* 3MMM;;;;;_ìÐ  $(,73#'6'3#'3#7&'3#53535#35#35#¼'- )!g     Ð  "*jb['  )===,,,,,]ÿéôÐ8<@DHLP73533533#3#3#33##"''3255##5#53535#535#535#35#35#35#33535#35#d !$$(A5 V5>" 3!!!!!!3#V!!3##À E  ""E -O5 ÿêÏ8<@DHLP73533533#3#3#33##"''3255##5#53535#535#535#5#35#35#33535#35# 6, E -6! L,E,ÀE  ""EP4AÿèñÐ8<@DHLP73533533#3#3#33##"''3255##5#53535#535#535#35#35#35#33535#35#I()++""0M>  h=I*(;))))**=+h**=++À  E  $$E  ,O3 ÿéóœ8<@DHLP73533533#3#3#33##"''3255##5#53535#535#535#5#35#35#33535#3355499//CdQ  QgA//5|444*==P===P=    0 0    = ! Xÿèöš8<@DHLP73533533#3#3#33##"''3255##5#53535#535#535#5#35#35#33535#35#d #$$(A5    W4A% U###""4#W""4##  1  ##1  8 " hÿéôÐ8<@DHLP73533533#3#3#33##"''3255##5#53535#535#535#5#35#35#33535#35#n!7.  J/; M.J.¾@  ''@N0 ÿê‡Ï8<@DHLP73533533#3#3#33##"''3255##5#53535#535#535#5#35#35#33535#35#!7)  @ )1E)@)ÀD  &&DP4G óÏ8<@DHLP73533533#3#3#33##"''3255##5#53535#535#535#35#35#35#33535#35#T$%%% .K9  ^9H- $7%%%%&&9%^&&9%%    6  6   ' A ' kÿêóÐ$FJ767&'76'3'67&'767#3#3#3267#"&55#'67#535#335Ô   /T3   N     É   H   2  @!-  0+"!!!?ÿëöÎGK733&'76767&'#3#3267#"&55#'67#535#'67&'767#5#RG<   11  7 //0    2QÈ"#       *+   1-"*   n**5ÿéò£HL733&'76767&'#3#3267#"&55#'67#535#5'67&'767#5#DK c'      44   9 .13   7Xœ&        ".    Y ÿéòÏ 37733#5##537'6'&'3#32767#"&55#'67#735#u^©_Fp ‹%  %! F@ ccÏ05""5,    HF*!  /3% KÿéòÏ 26733#5##537'6'&'3#3267#"&55#'67#735#”BsE7 Q  d   2 -??Ï23!#5-  JF*  03%"UÿéòÏ 26733#5##537'6'&'3#3267#"&55#'67#735#™>lA4 N  ` / *::Ï23!#5-  JF* 03%"eÿéõÏ 15733#5##537'6'&'3#3267#"&55#'67#735#£5\81  F  Q  +'++Ï32!#4-  JD+  14&"KÿìóÈ#4:@73#735#36533#&''67#&'33267#"&57&'''6b~~XX   (  ^  hȉe    R, 2  rÿéòÏ+08<@73533673#673267#"&55'67#535#67##5##535#35#~ $8 % $ "'2 8@@@@@¾         X[ [!1aÿéóÎ2:>B73533#3673#6732767#"&55'67#535##5##535#35#n! '>)" &/ (& ,)!zPPPPP½     kX X -UÿéóÏ19=A73533#3673#673267#"&55'67#535##5##535#35#b)  *B .' ,4  )+ 64)SSSSS¾       lX X,aÿïôÆ $(73#735#&''63#53535#35#35#vkkEE! H “ ""Æc?    KNNN<<<<< ÿðÄp $(73#735#&''665#3#53535#35#35#%ƒƒ_'   &{·++p@    :$$$@ÿîõ— $(73#735#&''67#3#53535#35#35#]zzT   #vµ++—N0   N<<<,,,,,pÿïòÅ $(73#735#'67&3#53535#35#35#€dd>>   /‚    ÅfF,  /PPP@@@@@`ÿîòÏ#'+/7&'3673#'67&'3#53535#35#35#‹  J  ~  D  3 ’"!Ï (  2GGG66666iÿîòÏ#'+/7&'3673#'67&'3#53535#35#35#‘  D  v B  2 ‰   Ï (  2GGG66666?ÿïõÎ #'+/73673#7&'&'''63#53535#35#35#NZ  *›!  a !8" #µ**A ;  'HHH77777yÿéóÈ/37;?C73#3#"''3267#3#7&'7&''75#535#'67#735#33533535#35#mHU   +"" " !!    I"È>n$U//€ ÿê~Ð$(,17&'73#536'67&'7'753#?5#275#*  Ch> ' . ,<- ZA   Ð  ,    iYGA=;€ÿïôÏ#'+/7&'3673#'67&'3#53535#35#35#ž  7 g :  * t    Ï '  3HHH77777YÿêöÈ"&*0673#3#3267#"&55#'67#535#735#35#&'7'6ov0;,  3 ,$82PPPP  e  ÈW.,  /3&.45)    JÿêòÈ"&*0673#3#3267#"&55#'67#535#735#35#&'7'6d~5B0   8 1 )?6ZZZZ  p ÈW.-  04'.45)    DÿëïÈ"&*0673#3#3267#"&55#'67#535#735#35#&'7'6Uˆ:I6  2 --D:eeee | ÈW.-  03'.45)    PÿêöÈ"&*0673#3#3267#"&55#'67#535#735#35#&'7'6iz3@/   5 /&;3VVVV  l  ÈW.-  04'.45)    LÿêëË 5;A73#735#35#3#"''3255'675#73#"''3255'675#&'7&'b~~XXXX%G  $4SH  $4D  c ËT20.j   j      \ÿêîË 5;A73#735#35#3#"''3255'675#'3#"''3255'675#&''&'lwwOOOO.@  -K@  -Y  ;  ËS11.j   "j   "     ÿéŒÉ 38=73#735#35#3#"''255'675#73#"''255'675#'7'iiCCCC9  'A9  '6 L ÉS110i   -i   -    I ëË 5;A73#735#35#3#"''3255'675#73#"''3255'675#&'7&'_{{VVVV"I  &7RJ  '7@  c  ËK-+)S  S   tÿêîË 5;A73#735#35#3#"''3255'675#73#"''3255'675#&'7&'gg@@@@5    "@5    "5  O  ËS11.j  $j  &     kÿêîË 5;A73#735#35#3#"''3255'675#73#"''3255'675#&'7&'{kkCCCC9    &C9    &9  T  ËS11.j   &j   &    5ÿéÂv 59=7#55#353#"''3255'675#73#"''3255'675#'7'¸p^LLk>   .I>   .?Qv88  ;   ;     TÿéñÈ 15973'7#3#33#"&''675##"''3255##535#35#`.++ (""  9‚  QQQQQÈ    # 3Ta  +y -[ÿéñÈ 15973'7#3#33#"&''675##"''3255##535#35#gˆ +(( & !  6}  LLLLLÈ   # 3Ta  ,y ,GÿéñÈ!26:73'67#3#33#"&''675##"''3255##535#35#U™3//,&$# ?‹  XXXXXÈ   # 4Ta  ,y ,gÿéñÈ"37;73'67#3#33#"&''6735##"''3255##535#35#o~$$$ $  4v  EEEEEÈ  # 3Ta  ,y ,xÿéñÈ 15973'7#3#33#"&''675##"''3255##535#35#€o    ,g  :::::È  # 3Ua  ,y -EÿéóÐ048<@D73533533#3#3#"''3255##5##5'67#535#35#35#33535#335X$$$$-uk      -$7$$ 3 S 3 ·n ((*S)0^7@-íÏ048<@D73533533#3#3#"''3255##5##5'67#535#35#35#33535#335R%$%%+vp   $%  .%9$$%%7$[%%7$ I > #C %  .LÏ 7#5'6:  ÏuU &[ÿéóÐ/37;?C73533533#3#3#"''3255##5##5'67#535#35#35#33535#335o%\Y   %0,E,¶n ((*] '^7lÿêòÐ048<@D73533533#3#3#"''3255##5##5'67#535#35#35#33535#335y TT    $, (?(¶ o  ))*b_7 ÿéöÐ&>D73673#3#3#&'#'67#5367#537#3##5'67#535'6&'X^d]g…+ &T&.?4?R’ NN!3 .!>P H%! ##¿    " H@9 <  SÿèôÏ%B73733#3#3#&'#'67#537#537#3#&'#5'67#535'6`:?B>CW  / +#*7b::  -: &½  N  #1eÿêöÏ !8>D7'6733#3327#"&547#3533#&'#5'67#7'6'&'ˆ  XdUUn [%##   G3  ª   *, 02**  (04   Vÿé÷Ï 5;A73#'63#3327#"'&5#3533#&'#5'67#7'6'&'vem  ffq _ ,)) )O4  Ï  BB U0'' .. 3  MÿéöÏ 4:@73#'63#3327#"'&5#3533#&'#5'67#7'6'&'qjs  jju  c -++ *U<  Ï  AAT/&& ..4  CÿéöÏ 5;A73#'63#3327#"'&5#3533#&'#5'67#7&'7'6gr{  pp}  j 1.. . QÏ  AAT0''/05  ÿéfÑ%)-7&'3&'73#67&'7&''5'635356   4    """Ñ   X/   Ž !3"@ÿéóÏ%)-173#3&'73#&'#'67#5367#53635#35#35#‹D;  <1 7> 25<4*\\\\\\Ï p   *$ p */0OÿéóÏ$(,073#3&'73#&''67#5367#53635#35#35#“=5 6+ 1A 4 06/%QQQQQQÏ p   (! p */0 ÿéõÏ&@FL7373#3#3#&'#'67#5367#5367#367&'#"''3265'&''6Vbgck ‹:% .G' .> 9BQ\   #$   ) +&(½  "  V    D    ZÿèõÏ(E736733#3#3#&'#'67#537#5367#3#&'#5'67#535'6g5;>=CU! + +%+2[ 77  & $+9!½  L &1 <ÿéñÐ'D73733#3#3#&'#'67#5367#5367#3#&'#5'67#535'6JBFJEKa! 9# "1(/>m!BB&" % $4B+¾  M  3lÿéóÐ)F736533#3#3#&'#'67#5367#5367#3#&'#5'67#535'6u/3626G  $  #",P // $0 ½    M  "/ ÿçô«'>D73673#3##3#&'#'67#5367#5367#3##5'67#535'6&'T^c]f‹3 &S' -B1;NMM3 +7L)6!' %œ     =42  3  gÿèôÏ(D736533#3#3#&'#'67#5367#537#3#&'#5'67#535'6o57:6;M  '  )"'2[11  !'1#¾  O'. ÿéðÐ $(,AG73533'73#3#5##5##535#35#33535#3353533##"''3255#&'a2 bTA@Ta!@@TA•@@TAº ,,  < ½ bc-.<     UÿêöÏ!%)-BH73533&'73#3#5##5##535#35#33535#3353533##"''3255#&'Y? C9&&8?&&9&_&&9&|m!!   m# » \\.-?     ^ÿêõÏ!%)-BH73533&'73#3#5##5##535#35#33535#3353533##"''3255#&'b; ?6##6;##6#Y##6#uf   f! » \\.-?     [ÿéò« $(,AG73533'73#3#5##5##535#35#33535#3353533##"''3255#&'^B# @:)):B));)d));)€i  i š   UU & ' 5    Qÿêöš $(,AG73533'73#3#5##5##535#35#33535#3353533##"''3255#&'UA E;(':A'':(b'':(€p""   p# Š  I I ! ,    ÿçï¯!%)-BH73533&'73#3#5##5##535#5#'#35#'353533##"''3255#&'e?  bS@@Se¸@@@S@S@eœ..  œ; œ  RT %  4    Mÿèò§!%)-BH73533&'73#3#5##5##535#5#'#35#'353533##"''3255#&'NG% H<))0 *&  Y ,)#!( #_ÿéôÏ4:73#'67'6753&'3#3#&''67#5365#'6'&'¼+a 31%#  % &!#  1Ï K=1 (&  \ , *$ ( !<ÿéôÐ$(,573#67&'#"''32655#53635#35#3'67#A8  +  8.!]]]]!:# %Ð [   (- Y[ 07;1%mÿëõÑ !'673#53635#35#35#&'&'''6733267#"&5£2c======$9 U   Ñ {{ 066,    #   ÿìœÐ !'873#53635#35#35#&'3&'''6733267#"&5G7l!GGGGGG* 8 Z   Ð || 165.    ! UÿïõÑ !2873#53635#35#35#&'7&''33267#"&5''6™;t&MMMMMM/8  E    Ñ ww .333    - ( ;ÿëô¦  0673#53635#35#35#&'7&''33267#"&5''6„E~$ZZZZZZ& Q  `  '  ¦dd & ( ' !     %  ÿëõ© !1773#53635#35#35#&'7&''33267#"&5''6lX¡4({{{{{{9 bz * 5%© hh ***%     !  _ÿëõÑ !'873#53635#35#35#&'&'''6733267#"&5œ8m"FFFFFF' >  ]    Ñ {{ 067-    # GÿéöÑ %-17#5##53&'7'67&'&''6#5##535#írB * K !+ '%5 < !!k$(A;UQB # +Ñ $  "" Q  3 'GÿéòÏ 73#3#"''3267#'665#53&'¤AeV B"DÏ\"B&5?Gÿéð˜73#3#"''3267#'67#53&' av  d) 3=k˜ @ &6!L  ÿôWÎ73533#7&'74''75#735#335   ¨&&a4  8???QÿéžÏ73&'73#3#"''3267#'655#]$#     ©j#QN0 0C0NÿéóÌ >T7'6655633#3'67#73267#"'"&55'75#'6553#'66533265#"&5Ý /?  H 225   ! : Ì.H: 6E;    '62 (56f0 0 ]ÿé¤Ï#'+73533#3#3##5#535#535#35#33535#335^  &  ¼_++_:=Tÿê­Ç"673#3#"''32765#'67#735#35#&''3#536aC$3 ,  !!!!   &6 ÇQY @ 03E   =§ÿéòÍ73'67#'63&''66»-      Í &,+'2_ÿèòÏ.8N733533##5##5#53#5'67#53673#&'##533&'#33533533##5#'67#**% #/=% $! =./Ïr   6 1// ŒÿéôÏ$(,73533#3673#3#5##5'67#535#35#35#ž  "/% "%%%%´$ u_oC\ÿé–Î 73&'73#3#3##5##535#\:22334²  VV3"ÿéòc73&'73#3#"''3265#'67#efˆr  c6 ?DM  - $  4•çÐ#)/7367&''67367&''6''67'6I   .j   .…mÐ * '    hî7#5##5î´(( ÿêèÒ;73#53'3673#5##53''667#53&'73#3#"''3267\Ï]" E 0©/ "1$;_\ƒx Ò %  ""x##  /]ÿéðÑ =73#53&'3673#5##53&'3#3#"''3267#'667#53&'ª:†8 !h$46RL  9 "$>Ñ $  "" +  1 $""ÿéîŸ:73&'73#3#5##53&'#367#3&'73#3#"''3267#'67#Ud'8µ9$G>T;Z^‰~ m* / 0 $$  ; $   ,ÿèí¬:73#3#5##53&'#53&'37#3&'73#3#"''3267#'667#„X* ;´A-[4 J9PSwx "i2$/¬ !! 7A  %  QÿéñÐ 37#5##53&'73&'73#3#3##5#535#53&'736ìu@S?>“f,GCCCCF(  ¹,, 2   ,, kÿéïÎ 37#5##53&'73&'73#3#3##5#535#53&'736í\5C00uS"844447  ¹,, 4   ++ DÿêðÏ,26:7#5#3&'73#3#3#3##5'67##5375#5#35#ì> ",5////8y 18+....´+  q'0 [((NÿêðÏ,26:7#5#3&'73#3#3#3##5'67##53675#5#35#î8)1,,,,4q 04!****´+  f%-0  \ '(fÿêðÏ,26:7#5#3'73#3#3#3##5'67##53675##5#35#ï0 $*&&&&-c % ."####´+   q"/  \'( ÿéê¤,26:7#5#3'73#3#3#3##5'67##536735#3535êc *KPKKKKS© ;2P9C;CCC’"  \# B " ÿéê-37;7#5#3&'73#3#3#3##5'67##536735#3535êc +HMHHHHP© <2P9F>FFF"  Y#A   ÿèzÐ+/377#5#3&'73#3#3#3##5'67##53675#5#35#z! H )º( v%(, _((ÿéÑ (0473#5##53'3533#3#3##5#535#535##5##535#L-J/$$$&&//00''$[666Ñ ##7      LN P1  ÿèˆÇ9?E73#3#"''3267'6765#735#73#3#"''3267'6765#735#&'7&'8 #    '%?9 #    '&6 K Ç:h!   <:h!  <_   ÿé€Ð)159=A77&'74''535633#"''3267#'67##5##535#33535#35#5  ;    6B*B*Ð .   LB 65 -Xq q+D ÿéÏ 0DJP7&'''667&'7''63#"''255'675#'3#"''255'675#&''&'[      1    71    B +  Ï !   )j   j  "     v|É*7333'67##"''3255'67#53&'767#h    *4  NÉ       ~sòÏ73#&''67&''667#—G    *Ï     ÿëzÇ .473#3#"''2765#'67#735#35#&''6'33#Y6I C  5555  '4EÇR Y> 12H    ,gÿéóÎ 17'2'6'&''&'3#35#535#53#5##56æ 6M@9 /    /""X$$%8XÎ  " #""… ~MÿèóÎ 17'2'6'&''&'3#35#535#53#5##56å @\LE@    8++p//0Cp Î  ##""„ tÿèóÎ 17'2'6'&''&'3#35#535#53#5##56æ 0G91  &    *L 3LÎ  " #""„  ÿéƒÐ $9?E73#53&'&''6'67&3533##"''3255#'67&'K (n1    > Y3++  3 Q  Ð  *       ? <# wòÐ!'-37'6'#3#3#3#''67#53567'#7'6'6Ø 707UQQQQ[ -3 '¦ ;3# "9:Ð       2H0   ÿîõË)/57'6#5353#3#3#3#67&'7&''67'6'6Þ %- (†#jWPPPP\I!# -2Á $+ '* < 6Ë%iu$  q'-oòÐ")/57'6'#3#3#3#&''67#53567&'#7'6'6Ö 6-5UQQQQ[ ,3 # ¤ 5/$ #6 ;Ð       6O 3      ÿçòs"?EKQ767'7&''667&'7&''6'67&'77&''67''6'6'67'6j !" =C"R  ^  -;A1'@7%"%S .26 /?DM ;ips                ÿèñy #DH73533533#735#33533535#335335#3#67&'#67'5#'6553#$:(;Á((:()((:()»¾N    @) #œœs0    ! _ÿéòÏ/373533#3#535#'67#53#67&'67'735#q000;Š;0 o1   4 II½  99   : 0  _eÿéòÏ/373533#3#535#'67#53#67&'67'735#w...8„9. l.   0 FF¼Ž 99   8/  _ ÿèõÏ/373533#3#535#3#67&'27'5'67#735#$RRRhæiR­F    P /#  +#0……½6<   ; $  '  Kÿÿî¡!.73533#3#535#3##5'67#735#67&'Z999G F9A )YY9  –   %+, "  ÿèó“/373533#3#535#3#67&'#7'5'67#735#$SSShäiS ¥@ O7%  &$*€€ˆ   &/   1     TÿéóÐ0473533#3#535#3#67&&'#7'5'67#735#g444A–A4x,    ! PP¾48  ( '  ' AÿêóÏ1573533#3#535#3#67&&'#67'5'67#735#[888F¡G8~.  #!   "VV½48   ' +  )  QÿéóÎ0473533#3#535#3#67&'#67'5'67#735#p211:ˆ;2p)  2    "JJ¼19  +. -  , hÿéöÈ/38<73533533#3#67&'#67'5#'66553'#335#35#’)   '   kGGH$  8: G." 2#`9(V GÿéõÈ'+/39=73#3#67&'#67'5#'66553'#33533535#35#Ï":   4  „bbbL/ 8; G,$ 1$`9(E WÿéóÈ&*.28<73#3#67&'#67'5#'6553'#33533535#35#Ó4 /   ~WWWC*    18  F,# ,9m9(D aÿéòÈ.27;73533533#3#67&'#67'5#'6553'#335#35#„.  +   uPPQ&    9; G+% 4A_9(V TÿéóÇ.28<73533533#3#67&'#67'5#'6553'#335#35#{5 /  €ZZ[+Ž    17  E," ,9l9(V pÿéòÐ "&*73#53&'3#735##"''3255##53#735#²72cc??_   YBBÐ -1/[  Dbt!5[ÿéñÏ!%)A73&'73#3#3#3##5'65#5#5##533#"''3267#7#'6‚$*1****2i 2#####l   !). 'Ï     B    /) <  ÿéìÐ%)-E73&'73#3#3#3##5'65#5#35##533#"''3267#7#'6?7 KLDDDDN« #VGJJJJ.¤ 2 9 G@ 8Ï  Q   ! A#1 ÿéªÏ,B73#&'#5'675#535'23#5'675#5373673267#"&5‘ AA#  (>>;$  >   ÏLG? 'K=K      aÿæôÍ,A73#&'#5'675#535'23#5'675#5373673267#"&5Ú ;;' $ "668!  9   ÍI-!AB$,H@J     DÿéôÍ,A73#&'#5'675#535'23#5'675#5373267#"&5536Û "JJ0 +& /EEB)!!u    ÍB3'E@$+I9Q    ?oÿéòÏ,B73#&'#5'675#535'23#5'675#5373265#"&5536Ù 33!  "33/  X   ÏK)@>!&N8S    >FÿòóÏ @7'67&'&''667&'763#3#3673#53&'735#535#ˆ $"I   !# -$) $  Go/BB  %¨$ >>,Ï      =* * ÿðõÏ 9?7'67&'&''67&'763#3#3673#535#535#&'^ *++j'& &' /1 >-#F <"a=[[  7ßeZZ>  Ï           :++,  _ÿéšÐ 7#5'673#~  Ð ¤v5ž sÿéóÊ -273#735#35#3#735#3353353&''67&'#367€ggCCCCxx"dp $  !  ÊE* ' '41   mÿïôÑ6:>73&'73673#3#3#33#537#537#'67#5367#537#37#37#{ 1-1AHJy#   '"&,:! °    K  x:VÿïôÑ6:>73&'73673#3#3#33#537#537#'67#5367#5367#37#37#j    :59LUWŠ) $-(-4A&& (&°   K x:ÿéòÑ%AJ73673#3#3#535#535#53&'&'367&'#"''3255#3'67#T 1 7`UUgàfUU_600//e ! 4 PU4-=Ñ      ^    "$ 8 # 7ÿéôÑ$@I73673#3#3#535#535#53&'&'367&'#"''3255#3'67#ƒ  'C==I§J<22;(&$$%_ " 1Dz9/ ! $²      ;     " @ 2 >ÿè÷Î >W7'655633#3'67#7325667##"&55'75#'65533265#"&55#'6655ç W7'6556'6553533#3'67#3#3325265##"&=#33265#"&55#'6675æ 7I O!+++8 *  4    Î GF; 7=Xm0% &,C(    "6. '<ÿè·Ï 7;L7'6655633#3'67#73267#"&55'65535#7'5#'6655¦ "-  5 $     -  Ï /F9 5E:    41 (3:&+!  $1 §ÿèôÏ73'67#'6'6553&Ä#     Ï ! y&+>  ÿè›Ï 48H7'655633#3'67#73267#"&55'65535#7'5#'655‰ -;@../    :  Ï HF: 8>$ 6.$  1     .$KÿçíË#8<B73#353#5#'67#5335#536'&'7#"''3255#'665535#35# %' ! 0 "”    ËI-l- :ÿçíË#7;A73#353#5#'67#5335#536'&'7#"''3255#'65535#35#ˆ *, $ ); (  £ $!!"!ËI-l-  ÿèëÐ#7;A73#353#5#'67#5335#536'&'3#"''3255#'65535#35#e 50 (&3G 3  Ð  6 4454ÐG3V1%E2GÄ  51$&TT<*f+ _ÿêîË!59?73673#353#'67#5335#7&'7#'62655#'65535#35#_+      Œ žG1A0 &A1G= 50( 8=`:(d)JëÐ%8<B73673#353#'67#533655#7&'##'3255#'65535#35#L3  $" $ #  ˜  §)9/  !9)8  —  "$ "-X1 O JÿèôÐEIN733#3'67#73267#"&553&'73#&''67&'#'665535#67–88G6*, &.:#   6# Ð      & )M%K hÿéòÐJ733#3'67#73265#"&55'75#3'73#&''67&'767#'6553¤$$:&   %+   B +Ð     D      % -3NÿëõÐ048<@73#3#53&'#53&'367##53#327267##"&55#;5##;5#Y&=Þ<$Z 9PS¼U  2 ??AA??AAÐ    > ‡WW  X!GÿìõÐ-159=73#3#53&'#53&'367#3#3267#"&55#735#33535#335žD0¬.<#;2>  $<((;+f((;+Ð   ; -U  33]ÿêøÑ+/37;733#3#53&'#53367##53#3267#"&575#'#33535#œ=*—'8 66ƒ9 %:&""""&&Ñ / †VV N ÿìó¡/37;?73&'73#3#53&'#367#3#336767#"&55#735#33535#335ZY#<Þ:"C< X.¥K # 31G44G844G8Ž    $H   , ) ^ÿîóÊ047#3#533533##5##5#533673#3#5'67#35#ð€ƒ•0)),>>>[R.C!?     / ËN/,4## +     ÿððÐ/37;735#5#53533533##3#3#3#3#535#535#535#75#35#335$R155O550PP[[TTfßeRR\\RƒO!??S=€  2    Q ?TÿïòÏ/37;73533533##3#3#3#3#535#535#535#535#5#5#35#335^6(::==77EžF22::77!d6$$7(¾11?5ÿîî§/37;73533533##3#3#3#3#535#535#535#535#5#5#35#335?$<$$)DDGGCCR¹UCCIIEE'$s<22D0œ  (      (  3 &–Ð048<733533##3#3#3#7'75#535#535#535#5#53#335#335+,0000,,-6A8..3333 >,,> 3Ð  &  &  -  ÿïƒÎ159=73533533##3#3#3#67'75#535#535#535#5#5#35#335 $..--&&/90**..--M$-½ 2      2  >Fÿîô /37;73533533##3#3#3#3#535#535#535#535#5#5#35#335HG.@@EE??N®N@@GG@@.xG..@.“  )      )  4 ÿíòœ/37;73533533##3#3#3#3#535#535#535#535#5#5#35#3351V226QQ\\VViähVV^^RR41šV@@S@” *      *  2  ÿì“Ï159=73533533##3#3#3#67'75#535#535#535#5#5#35#335 '1133--9D9,,22//V'/» /    / ;uÿïòÏ/37;73533533##3#3#3#3#535#535#535#535#5#5#35#335u(0011))4}6))22.. R(.¾22 @ÿéñ£  $(73#53'3#735##"''3255##53#735#gád?££{{§ ©-vvQQ£  &+ &F 2IY) ÿç‚¡ "&*73&'73#3#735##"''3255##53#735#1.rXX44R  N 22  % F  0L]' ÿéóŒ "&*73&'73#3#735##"''3255##53#735#giå(””ll   ¨1llHH€ # =  )CR& ÿè‹Ï "&*73#53&'3#735##"''3255##53#735#N2}5XX//Q   N77Ï  -40\  Fct5`ÿéòÐ "&*73#53&'3#735##"''3255##53#735#ª>’<$mmIIk   g$FF""Ð -1/[  Dbt!5RÿèöÏ676767#535#5673#35335#535#53#3&''67&'y i67$$.78'/"%  6 [ ]]^"  BÿèôÎ473#35335#535#53#3&''67&'767#535#56|""--"""5@9 & /$!* $ s@@Æ]]]   Z<íÔ  $(73'73#3#735##"''3255##53#735#adÚ)ŠŠff˜   ¥0jjEEÆ! 5 ":I$ ÿéóŸ "&*73#53&'3#735##"''3255##53#735#kåd9——qq¤   ¯7ggEEŸ&+'=  )FU+ÿéíˆ "&*73&'73#3#735##"''3255##53#735#abØ"””llœ    ¨1llHH|# = )BQ$ ÿçíª !%)73#53'3#735##"''3255##53#735#†_Ùd;““kk›  ¥1jjFFª  (+ 'J  5N^+ Qÿèí¢ !%)73'73#3#735##"''3255##53#735#QCEœooHHr   r$PP--“  ) %G  4O^* )è°  $(73#53'3#735##"''3255##53#735#‡ZÒa@••mmœ  £(zzVV°! ) 0<! ÿ錤 "&*73&'73#3#735##"''3255##53#735#27}XX44U    P::” )&J  5O_) ÿéÐ "&*73#53&'3#735##"''3255##53#735#T65 bb==]   WAAÐ -1/[  Dbt!5QÿéòÐ "&*73#53&'3#735##"''3255##53#735#¡D¡F(vvRRu  q&LL((Ð .1/\  Fbt!5ÿèòÑ !%)73#53'3#735##"''3255##53#735#‚eäg<œœtt¤  «1ppJJÑ  -41]  Hct 6ÿé{Ñ "&*73#53&'3#735##"''3255##53#735#K+i*QQ..J   D11Ñ .32[  Fbs 5eÿéòÐ "&*73#53&'3#735##"''3255##53#735#®;;"iiEEf  a!DD Ð -1/[  Dbt!5\ÿéñÏ'/37;?76767&'7&''73#"''3267#'67##5##535#33535#35#\!   IL    @_&&9&_&&9&&¼  1  TF 0=1Vr r+CcÿéñÏ&.26:>7677&'7&''73#"''3267#'67##5##535#33535#35#c  FH    =Z$$7#Z$$7##¼  1  TF,>1Vr r+CpÿéïÐ&.26:>767&'7''56#53#"''3267#'6#5##535#33535#35#ž   2@ /P1P1Ð 0   MF.2 )q q+D0ÿîí¤!)-1573533#3#67&'7&''67#535#3#53535#35#35#L>==Nf $':@4P>’½,+•    U///?ÿíòÏ!)-1573533#3#67&'7&''67#535#3#53535#35#35#]888DY "$5<*D8³'(¸    h>>>-----˜ÿîõÎ (,0473533#3#67&'7''67#535#3#53535#35#35#¥ #   "J] ¶   hCCC55555<ÿéžÌ 'CGVZ`73353353#73533#3#3##5#535#535#73533#3#3##5#535#535#3#3#7'7&'#735#767#A  Y  &  8__O %.--ÈVZZUaV      Y )   5  ÿéiÏ7367&''65''61 '  Ï3 ) /D:,! ^ÿêöÏ"73#&''67#5353533655#335å>' %,2 :000§N14/ #-N((N ** <_ÿîõ½7'67#53&3#3#535#¬# HXo  [u3;@.q 4 77`ÿéöÃ473#67&'#"''32654''67''67&''67#o|:    !   $ (! " ",à  $  "'!^ÿéôÏ:73&''67&''667#3533#3#3##5#535#535#ŽG  $)" ,>*422..<<??..4Ï       >eÿêóÑ -73&'73#3#735#33##"''3255#53567#k86… qqLLx<<  ??X½ 43   \ÿéõÌ&.26:>73673#&'#5'67#53&'735'2##53#'#;5##;5#à 81 "# !.4=2Y}5$$$$$$$$Ì   (*  ÍggW$WÿéôÎ!8N7#53533#&'#5'67'6'&'35#53533#3##5#''3'67#&''6Ž,==. Y  I?$$() 1   “** )* J  Š((""J ,28 XÿèôÎ1K73533#3#535#3533#3#535#'3533#67'75#3#3267#"&55#'67#l222<ˆ92@LK #“-   0 '&¾5 2! $2  # ôÐ(,0473533533#3#3#&'#'67#5367#535#35#35#35#;;;;#_ ƒ0 ) G% '@1";N;;"€€€€Ã  I   I ( ' VÿèôÏ(,0473533533#3#3#&''67#5367#535#35#35#35#]##$$6D:- 02 ,195#7##XXXX¼R  %'   R40JÿéöÏ'+/373533533#3#3#&''67#5367#535#35#35#35#T((((8K>. 5<4;C6(;((\\\\¼R '*   R40bÿéöÏ'+/373533533#3#3#&''67#5367#535#35#35#35#k!!!!2?4( -0 (/6-!4!!LLLL¼R %'   R50 ÿévÈ #'+/73#735#73#735#3#3##5#535#735#33535#335..%//A\&""//&$8$È7 62V%%35TÿéòÐ>_73533#3#&''67#537#'67#5365#53533#3#&33#3##5#535#'67#5373#3`  i    644AAJJ: (V_ #¿   /     -     ÿèòÈ!'-39?73#3#3#535#535#735#&'735'6'67&''&'7&'&³PRReÜdRRP<<  B<  vµ `  N  È[9 99 ‚      ÿèòÈ#)/5;7#3#3#535#535#55##5#35335'67&''&'7&'ÙPRReÜdRRPŸ<<<<›µ `  N  È[[%u     ÿéõÏ$7#5#'667##537333267#"&5ï,  ¤6$EICA$6++GV DÿêíÇ"7#'67#'67#533#"''32765#'6µ94%<'[{+/k   DBd4&"*"&k! EL-)TÿéëÇ"7#'67#533#"''32765#'67#'6‹$9$Ut'-d    <8  0,d"&i# ?L/)B5&#mÿéìÆ"7#'67#533#"''32767#'67#'6™0Fb!$Q    1.  &#d#&i# AK0*A4'#ÿérÐ7#5##5##535335#33535#35#r(((=(ª€ MM €&&1 R ÿògÏ 7#5##53675#35g...®µ¼ M::::ˆÿéíÆ"7#'67#533#"'532765#'67#'6¨%7O?  %#  d#&l JK0+A5& #Xÿì“Ë 7&'&''6i   & Ë  ,  0 /-*bÿéíÇ"7#'67#533#"''32767#'67#'6’4"Om$)[    74  *&d"&l  >L/)B3%!ÿéäÇ!%7#"''32655##5&'''63#735#ä  ž€/bb<<ÇÄ ¬ËÞ & &O+RÿéìÈ $7#"''3255##5'67&'3#735#ì  s6  7  *HH""ÈÅ  ®Ìß  4O/eÿéíÈ $7#"''3255##5&'''63#735#í  `W  @@ÈÅ  ®Ìß  &O/MÿéôÎ67'673#3#535#5367#'7#533327#"''67&'º ' MP""&;",,1   ° 6;;. 67$UÿéòÎ57'673#3#535#5367#'7#533327#"''67&'º $ HL!#7(*.   ° 4<<0 !68% ÿêõ‰4735'673#3#535#67#'7#53333#"''67&'l6+7. 660q-6D .%1J#) JJCS  R        ÿèôÂ767#'7#53333#"''67&'+ 1-7O-OIAS O(5:( ÿéöÂ767#'7#5333#"''67&'& ($1H$TKDV   S(4># míÎ73#3#535#535'6Ù662w166* EÎ2;;/0ÿùÎw673#3#535#535#'2'3333#"''67&'767#'7#º $$O$$ $a4  4.)?  w     TÿòôÎ73533#3#3#535#535#'6r%9966?—D88+ Á667667 (MÿòòÎ73533#3#3#535#535#'6m&;;88A›F::, Á667667 )lÿòòÎ7'673533#3#3#535#535--++2}7--…(2667667€ðÎ7'673533#3#3#535#535› %%""*n1%%‘ !$++,,,, gîÐ73533#3#3#535#535#'6/=[[OOaÛgLLE  Ð   ÿñðƒ73533#3#3#535#535#'65:TTJJ`ÛfKKC  €ï73533#3#3#535#535#'6•##!!&d,$$ ‹  zÿòóÎ73533#3#3#535#535#'6((&&-s2''¾666666 )~ÿóóÎ73533#3#3#535#535#'6’&&$$+g)&&¾ 666666 %§ôÏ73533#3#3#535#535#'6· C ¾ ++,++,   ÿèîÐ#'+/5;733673#5##53&'733#735#3#735#35#35#'67&'u -².  A™™qq¬¬„„„„„„( 'c%% %&Ð  )* ( &Z? $ #      EÿèñÏ#'+/5;733673#5##53&'733#735#3#735#35#35#&'''6’   }!  .llGG!‹‹ddddddH" $ , *Ï '(  ) $^C " "   ÿè¦Ñ=Y]aei73533#3#&''67#5347#733#3#&''67#5347#533533#3#3##5#535#535#35#33535#335  _  `9<<66AACC669##6#Y##6#Ä       T  ?  ? ! RÿîñË!'-39?O73#3#3#535#535#735#&'735'6'67&'7&''&'3533#3#535#^‡:66C˜B55:((  5'  V 0` F566FŸF5ËG    # ##  d       " ^ÿîñË!'-39?O73#3#3#535#535#735#&'735'6'67&'7&''&'3533#3#535#g€611==117$$2#O /YA111@“@1ËG    # ##  d       " dÿïñË!'-39?O73#3#3#535#535#735#&'735'6'67&'7&''&'3533#3#535#ny3//:…9..4"" 0!K +V?.//==.ËG    %  %%  c       $\ÿèòÐ159=AQ73#'6553&'3#3#3#&'7#'67#535#535#735#33535#3353533#3#535#³3u=d)&&- '  -(()*A*P&''/q0&Ð PB3 4<[&>       & " b4ÿéòÐ159=AQ73#'6553&'3#3#3#&'7#'67#535#535#735#33535#3353533#3#535#¥AŽH#x2119 & !8223 3 S 3 d000:Š<0Ð OA2 3=Z'@ ' " d   EÿéòÐ159=AQ73#'6553&'3#3#3#&'7#'67#535#535#735#33535#3353533#3#535#­;€A n.,,3  # 3--..J.Z,,,5}7,Ð OC1 3<['@ ' " d   `kóÐ873533#3#&''67#5365#'67#5365#53533#3#&i  f    Á    )  _ÿèñg 73#735#35#35#'67&'lxxRRRRRR K gY? # #     KÿíòÏ'-3;U7367&''667367&''66''67'6#5##53#3#3&'73#535#535#s    P     i  T  I€o/33™B33.Ï      %       ?00!  ÿéðÏ'+/37=C73##5#'6655673##5#'665563#735#35#35#'67&'p !+Q  4’ !-T% 5™°°ˆˆˆˆˆˆ! 2 .^', .)Ï$  UfH ( ( !    WÿèòÍ%)-15;A73##5#'655673##5#'65563#735#35#35#'67&'Ÿ / "a / !hZZZZZZ GÍ $$ %  $$ %TdG % &     aÿèòÍ%)-15;A73##5#'655673##5#'65563#735#35#35#'67&'¢ ,  ] ,  cyyTTTTTT DÍ %% %  %% %TdG % &      ÿëòÏ5Bj73#"''3265#'67#'6'3#&'#5'67#535'2&''6367&'#"''32655'67&'767™C      $ #  $-#*B (- 80%E H"    #%   +"   Ï A)*   $$S         XÿéóÐ7Dci73#'#5'67#535'273#"''3267#'67#'6&''6367&'#"''3255'67'&'š     ;*    % "## 0       Ð"   ; '% 6           ÿèô¥1D\bh73##5'67#535'273#"''3265#'67#'67&''67&'367&'#"''325'&''6l ''  !+#+UE      . 25 94/7 ,+ % %$#)+! 3¥ '   5 !     ,     ,    ÿêîÇ&*=A73#3#5'67#35#3#3#5##5'67#35#'3#3#5##5'67#35#Î}—*6:pp1i9 =* &**—i9 <* &**Ç9$ 77M .B7M .Bÿéï&*=A73#3#5'67#35#3#3#5##5'67#35#73#3#5##5'67#35#Í‚ {–(3:pp@h<<( (((Ii;<( )(( 1  )*B (2. B (2 ÿéóÊ#'+/T73#3#3#&'#'67#535#535#735#35#5#35#367&'#"''3255'67&'77*­&00<0! *N) !,=00&ˆˆˆˆb;;;  !    (   ÊI     , ' *  %     RÿéõÈ#'+/T73#3#3#&'#'67#535#535#735#35#5#35#367&'#"''3255'67&'767iu$$,% * %)%%PPPP:%%%  !   ÈC ) ' **     @ÿé÷É#'+/V73#3#3#&'#'67#535#535#735#35#5#35#367&'#"''3255'67&'767Y€((0' !1# /4))ZZZZC(((     "ÉD ) & ))     ^ÿéöÈ#'+/V73#3#3#&'#'67#535#535#735#35#5#35#367&'#"''3255'67&'767tl&  $  $GGGG4   ÈC ) ' **       fÿéöÉ#'+/S73#3#3#&'#'67#535#535#735#35#5#35#367&'#"''3255'67&'77yl#! " #HHHH3    ÉD ) & ))    nÿéöÉ#'+/T73#3#3#&'#'67#535#535#735#35#5#35#367&'#"''3255'67'767~f     BBBB/  ÉD ) & ))      UÿéóÆ #'+37;?C73#735#33535#335#5##535#33535#35#'#5##535#33535#35#h||##5#X##5#!) ) 7) ) ÆT262xx-L(ËE* % $B( # (B( # BëË #'+/37;73#735#33535#3353#735#33535#335'3#735#33535#335,¦¦66I7€66I79dd(>(Ãcc(>(ËB( # "?& ! '?& ! ÿéìÈ #'+37;?C73#735#33535#335#5##535#33535#35#'#5##535#33535#35#*««88K8ƒ88K8+=(=(N=(=(ÈW450{ {/K@{ {/Kÿêîœ #'+37;?C73#735#33535#335#5##535#33535#35#7#5##535#33535#35#,©©88K8ƒ88K8GC*C*ŸC+C+œL-.*Z Z"01Z Z"0Fê¬ #'+/37;73#735#33535#3353#735#33535#33573#735#33535#335,¥¥88I888I8©aa&=&%``'>'¬1..\ÿéóÆ #'+37;?C73#735#33535#335#5##535#33535#35#'#5##535#33535#35#nww 2!S 2! &  &  5&  &  ÆT262xx-L   9    j5  _d__™  *0   6* 0 O   ÿê_Ï &,73#"''3255#'67#5353635#&'&'6 """ Ï ² Q=, -2KZ: H ÿçõ¯ (=MR73&'73#67#5&'7'567&'3#"''3255#'67#3353#5#'66535#gdà\    m &  ¿J    ‚ˆ „ƒŸ    '. 0  -$  ( [  ÿçõ„&;KP73&'73#7'567&'67#5&''3#"''3255#'67#3353#5#'66735#e eà½&  h   OJ    „Ž  ‡„y   !  ,  !  H  iÿé÷Ñ%7FL73#53'7#5&'67&'67''3##'3267#'67#3353#5#'6535#°:…7  -  V-  AD BAÑ  !   ,2  #"  =/  7i%  /ÿäó_ *=LQ73#53&'67#5&'7&'#67'56#3#"''327#'67#3353#5#'6635#‘Y½Q l   –?    nv  po_           5  ÿçõÐ'<KO73#53'67#5&'7'567&'3#"''3255#'67#3353#5#'6735#zdÛ`   l #  ¼J    ‚‡„‚Ð    **#  : % 71 % : g'.YÿèòÒ+/37;?EK7#35#53533533#3#3#535#'6553&'75#35#33535#335'67&'ðs/*f*2;*B*8 9¿1  LL @4 2>[ C<-"   ÿè¢Ò+/37;?EK7#35#53533533#3#3#535#'6553&'75#35#33535#335'67&'¡u1*g*2; ,D,: :¿1  LL C1 4=[ C<-"   \ñÐ*.26:>DJ7#35#53533533#3#3#535#'6553'735#35#33535#335'67&'ñq-%\%/7';'2 0Ä3 AA ;. .7RDC #   LÿèôÒ+/37;?EK7#35#53533533#3#3#535#'6553&'75#35#33535#335'67&'ò€  7/p/9B /L/> >¿1  LL @4 3=[ C<-"   NÿèôÒ,048<@FL7#35#53533533#3#3#535#'66553&'75#35#33535#335'67&'ò} 6.n.7 @ /K/= =¿1  LL A4 0"\ C<-"   7ÿèôÒ*.26:>DJ7#35#53533533#3#3#535#'6553'75#35#33535#335'67&'òŽ%"%?5}5>H """5"W""5"C" C¿1  LL A3 3=[  C<-"   UÿèôÑ*.26:>DJ7#35#53533533#3#3#535#'6553'75#35#33535#335'67&'òx4,j,4< ,F,; <¿1  LL B2 3>[  C<-"   MÿçªÏ/37;?CGN7367#535#5#53535333##3#3&''67&'7#735#33535#33535#33567N""$&     +  0#!  8,   ,  € ) F; ÿé˜Ñ 57'2'6'&''&'#"''3255'67567#53„ /D75  %!  9  TpÑ  ] ) "  ÿê‰Î!18P7#5'67#53533#&7'6'&'3'67&''667#35#53533#3##5#'V !//#  >     0 †"$  ++ S  b,0   (( ÿêŽÎ!17M7#5'67#53533#&'&'7'6'673'67&767#7335#53533#3##5#W "00# ?  Y P  3   % ‡#%  ++ T    ” "P   ((!! ÿèŠÐ #'+/5;73533##5#3533533##5##5#3#735#35#35#'67&'*,,* ,,hhBBBBBB  8 À gI *) "   E ðÐ"8O7'63533##5'67#7&'&'3'67#&''6#'735#53533#3##Ñ sAAA# * ^ F"! 1   c" $$Ð  ##21 4 0  !' &  6 ÿérÐ"&3@73#3#'6553&'5##5#35#33533567'533367'533C&L  %    '  Ð ;>+ 49Y =,]  V  VJÿéóÀ73&''67&'#367Y~%, +- .!  ÀP9"$$$1F<)05MÿîõÑ $73#'6333267##"&5477#‡bl'dC#  +DDÑ " @  ASÿëôÏ73267#"&''7&'37&'íX (0 --!  “ ;8 >I ))C GÿéùÄ'73'#"''327&''67&'765#67#[† (   42  0> .Ä`22' 2'#7&(W )L5LÿèøÐ 7&''6&'3'67#š%+ &(&3!  4†$ *pÐ&*)# *?0MÿéçÉ7#"''3255#'665535#35#ç  WSSTSÉÅ  /," 1$_?,k, kÿéëÉ7#"''3255#'665535#35#ë  E CCCCÉà ,,# 1%`?.n.i¼ 7##55#35i>>**¼£¸I6666+ÿèÕM 7#5##535#35#Õ‚‚‚‚‚Me e%7 ÿæéÊ%)-73#3#"''3265#'67#'67#'67#735#35#-©t — OK!!? 7*)Ê] L4<% 0- 79OÿéòÏ73#3##5#535#'6wi9>>LL$ Ï BbbB!ÿéîL73533#3##5#535#'6@/RR``hh? I   ÿêôÏ73533#3##5#535#'6A4TTccpp= !Ç00<SS< *ÿéì73533#3##5#535#'6C.HH``dd9 Œ ###88# iÿéóÏ733#3##5#535#'673¬++33==!  Ï1=RR= $.YÿèîÏ"'73673#"''3265##5'67#'67735¤7  #& *" .##Ï"7E(hZ0 ) ($H6TVòÏ7&'3265#"&''7&'7º  ;D   ( 85Ï      ÿéîƒ73533#3##5#535#'6:8YY``iiA   55  rÿéèÐ 73#5##53635#35# <N$NNNNÐ ÄÅ^:‡:mÿçóÐ+17#673267#"''67&'#67'53&'37&'ð8  !$ 6  ¦: 1*!Hn  *(   FÿéôÏ73533#3##5#535#'6q#<*PPffff5 É ZÿñòÎ#73533#33#53535#35#35#35#35#g988-˜-9 FFFFFFFF·‹‹;665]ÿìõÐ>DJ73673#3#&'#3#"''3267#3267#"&55'67#5367#7&'7'6l-:?N * J  +)) &([¦  *8 B  5   ^ÿèöÏ*0673533#3'67#535#&'36533#'67#7&'&'q///8 q9/ C8>; ,; Z ¸ 1  5*'&>   <ÿèîT73533#3##5#535#'6N!IIaaii/ Q!!  hÿéïÇ&,7#"''3255#353#5335##536735#&'ï  ( J(4a ÇÆ  pK\ÿéõÏ"&8<@73#&'#5'67#5367'23&'#35##"''32655##53#735#Ø I# V )"25 22X   WBB!!Ï   @-)Q ;Uf.\ÿèöÐ`f73673#3#3#535#535#53&'3&'33#67327#"''67&'#7#"''3255'75#535'67&' 811:Œ=118 '-+  !   #"UÐ      _   %      ÿèîp73533#3##5#535#'6D+IIaaii7 l ,, WÿóõÂ73#3#3#535#535#`?;;EžE::<ÂKKKKQÿéîÅ!73#3#"''3267##5#735#3355#\„;I  3@ 45I';#ÅI 5 aaD$$$V RÿìøÏ$7335#53533#353#3267#"&55#^%CCII&9   ( 7ŠAR RAS/ 5GÿîøÐ"7&'332767#"&57&'#'6“$ Q  bÐ.‰ }'. /&7-+ ÿèïÐ"'73673#3&''67&'#'67#67Fƒˆq. )%%2 0 ( 7A`   '   "4$7B1[ÿçøÏ*733327#"&547#&''67&'767#53Ž4  "$  Ï,6&$#&"&6 )! 67 DÿõòÁ73#33#537#537#5#P”J G®' &) 5t6Á&C!EÿéõÏ73533#3#&''67#53655#]788EE . 07 ;=A7¤++<:5 $2MÿèõÏ7367&''>''6—!+ 1= " ' ÏX  !=';B-633# $ZÿèóÏ7367&''>''6œ ( ,6  $ ÏX !=&:A.723# $dÿèìÏ%735#53533#3#3#"''3267##5#535#l...8833> +66.€; (VVŽÿèöÏ7367&''>''6º  #   Ïa A 24.82& !@ÿèöÏ067367&''>'3#&'#5'67#535'6'6º  # ,    !! %3  Ïa A 24.8`' db,""& ! ÿéôÏ73&''6676''67'6uO JW 0-9 žÏH [$*BK!4!2/! !'/" !ÿçöµ73&'#'>''67'6v.B B(S (/0•µ2 I@?!.;+ % -TõÒ73&''67#'6d]1$&73E j9U 6Ò   4 ÿçô7367&''66''6w  + HU<)7*?<<# )gÿèôÏ73533#&'#5'67#r181! #*¡..I <‚5#*AfÿéíÃ7#"''3255##53#735#í  a&<<ÿ  §ÇÚ7b@fÿéôÂ'73#3#"''3255#&''67##5365#fŽ=:  ' $9?‹  s  1’¥_ÿçô 73#735#&'''6xii??:)ÂzTv & %" -eÿêóÌ!'73##"''3255#535'2'6'&'ß >>  ==9.  M  ÌXA  <V#  ÿêíÏ#)733##"''3255#'67673'67&'{QQ   N _@DPC6 Š 4V  R -( "$ %! %"!TÿèñÆ!%73#"''32765#'66553'#33#735#p  \ ySSJ<<‡] AA3 1#^?-M>`ÿéòÐ !%73&'73#3#536'&'#5##535#i24|\ )’T 8  mMMM¸  R[ [>+{aóÏ73533#&'#5'67#‡%.% ³13UÿéóÊ73#3#535635#'67&'Í-0f(›9$22PÊ  8{€8Q ]ÿéóÏ#'73533533#3#535#35##5##535#35#e)"–$0))NLLLLL±  Crr'=dÿðóÐ %73#5##53&'&'''63#3#535#«;b8,  !t2?ŽE      |<<>w6(  ($‘ `ÿéîÇ #04873#5#73#5#&'7&''67'63#5##53635#35#`E2KC0B P ! X%9U-UUUUÇ_M_M       j j /;“ÿèðÏ073'67#&''63'67#&''6¹&! 4  "%;  Ï )0   D 0:   ^ÿê÷Ð59=A73533533##3#3#3#&'#'67#5367#535#535#5#5#35#335c4$6668D4( 02 &1:3544#a4 3"Å  2  "& 2 ? dÿéôÊ -273#735#35#3#735#3353353&''67&'#367rssMMMMˆˆ'q (!  #  ÊE* ' '40   YÿçôÈ#'+1773#3#3#535#535#735#33535#3355#5#'67&'jz $& !!3!T!!3!  K! ÈZ66;)   @ÿéòÏDHL735333##35#53353#5##535##5#3#5#'6753353#35#535#535#33535\;::,!!,.%!-<O7µµÈ   ")  *") XÿéõÏ#'9=A73#&'#5'67#5367'23&'#35##"''32655##53#735#Ø K% X *"4644Z   YCC""Ï   @ ))Q ;Uf.ZÿéóÒ-2=CGKQ73&'73673#3#3##"''3255#535#5365#5#35#"&55#733567#35#&'Z(  #0'""  bbZ+5V)a Laaa  ²  ]    ]  5    ? =   MÿêªÑ .73&'73#3#735##"''3255'7567#536URDD9#  %( 5M½ 4^   RÿêõÏ!%)/5;A73&'73#3#3#3#5'65#5#5#'67&''&''&'€".0++++3‚ 9))))) }     Ï Q ,&&  TÿéôÏ17;?EK73673#67&'##"''3255#5'67&'767#33&'35#35#'67&'b)B#  *   )    !8 > +AAAA c·    90  -5  F-)   VÿçìÇ(AOS73&'767#533'67##"''3255'67#'#53#"''3255&'#75#673&'35#`9 ]x/   ) /'ˆ  ?7 a 4        c Gye  / -K   3HÿçêÇ(AOS73&'767#533'67##"''3255'67#'#53#"''3255&'#75#673&'35#R? e‚3  $  - !5*“  F<k  6 $$      f Eye  0 -K   3>ÿéöÏ#'+17=C73&'73#3#3#3##5'65#5#5#&'''67&''&'r& 13----6x #C/////g  n  b    Ï   [ ($% \ÿéóÌ $(6<73#535#535#3#3##"''3255#535#735#'3#67'75#&'mvvc[[c>C   ii^C  %  ÌK  @:  K  UÿèöÑ )/C73#5##536'6'&'3533##5'67#&'3673#&''67#J\#3/ "!!   C  V7H9+ 28 *0Ñ~no "   $$-    2  && aÿéòÏ;?CGK733533##5##5#533#3#"''3255#7'7''275##535#735#33535#335„$$$$##|4?  , &+>5!!4"V!!4"Ï  $N D  /  J[ .,QÿêôÐ 7=SY733#3'67#&''67373&''67'767#'63533#&'#5'67#7&'€. %    0B   . h=D8  # &3 Ð !    #   W  ""  /,1 VÿèôÐag73673#3#3#535#535#53&'3&'33#67327#"''67&'#7#"''3255'75#535'67&'‡ :22<‘@33:)/-  "    $$#XÐ       _   %      XÿèôÏ%4:@X_7'23&'73673#5##53&'&''33267#"&57&'''63&''67&''667#à 4K>" i?     L  Q H  ' (!  - ; Ï    ###    !         `ÿéðÊ#D73#3#5##5##535#3#73#3#73#3#3#"''3255##5##5##537#i~6>+,>5""?!!F((F**TŽBC  08Ê (;;( ) :  $8888=N UÿîôÏ#)/5;CGKO735333##3#535#535#535#33535&'''67&''&'3#53535#35#35#l.77F•<--77.A$$$ d Ta Ÿ%%      ;      333#####YÿéóÏ$=EIO73533#3#535#3'67#3#3#535#3#3##"''3255#535##5##535#&'c;;;4z4;”e%B‘<-š --s?BÅ   $    #   D D*  SÿèôÏ$_s73&'73673#3#3#535#535#&''3&533#67327#"''67&'#&'#5'67#535#'63#3#"''3267#7#^  #<44@Ž<44%&?8-T0%! ÿéó’767&''66''6y " , M 8' 56= ’ % G#7 G1' ^ÿéõ‹7367&''65''6Ÿ ( .1 A  ‹6 +**%6&$ ÿè÷Ï7367&''66''6Æ     Ï/$ C /*"S;# cÿòñÇ7#3#5&''677&'76ðyzŽf  ǯÕ&#!  JÿéõÏ'735333267#"&55#'67#3533##5#Y(8  &1 &&GJJG²I  ;</d$$??SÿèëÏ%735#53533#3#3#"''3267##5#535#]444??;;F  1>>4;#VVOÿêòÐ%73#3#3&'767#'67#537#536”FK[a^ (; W,2 .3Ð    CÿíóÏ )7&''6#3267#"&553#"''326™%) '&!* 8>?!(  3/h  Ï '+)%CU l6 LÿéëÏ#)736733#"''32765#'667#7&'&'S9K 6 7"  N  ‹&&X7 T4C=-Og MÿèöÈ7'6553#&'7#3|!x&, 1&QQdQ+%UUdI!ZQ>UÿêóÏ &73&'73#67&'7''67'67676WC Bœn0/(/  =< 0!# ²  V  #)"&-)cÿéçÑ 73#5##53635#35#™D\*\\\\ÑÅÅ^:ˆ;FÿçòÇ $7'6553'#33673267#"&5s‡^^J&! &-   ( €D6 5@_G4! * * #  Mÿéõ 73#735#'67&'izzRR"#PÂzTu ,!"%Xÿéè¼ 7#5##535#33535#35#èh**>*h**>**¼ÓÓUBBB—BBB@ÿèòÏ*73#3533#"''3255##5##5'67#536Œ\d ):  && '&/Ï""U  =tt[V ,$GÿîóË"(.7&'36732767#"&55'67''67&'‹,8 &"  …  Ë,R*& ((I2 1GŠ #    1  ]  RÿèðÏ"(73'67#'63#"''3257&'''6zm  ^ / :PÏ   +ƒ  _)+.'/( )IÿéèÃ$(7#"''3255##5#'65535#33535#735è   '+))='d))='ý +CC-" 3>]<)))e))) ÿéõÏ$173533#&'#5'675#&''67&''6[XX)A <$(6 @*[# ˆ  µ8B6b\3:@  '  KÿéóÏ$1733#&'#5'675#53&''67&''6”AA- ($ *==)  d  ÏE7*TS*3G   '   QÿéëÈ$(,7#"''3255#'6553533#3#535#3#735#ë  b  ODDÈÅ  ¬SD5 5?_26=mÿôòÁ73#3#3#535#535#&'uv2++9…8,,0`  ÁARRAb mÿéïÁ7#5##53'>&'ãE,  Á˜‡†—-M+'  ")(2ÿð»Ð 73#'6#53#3#67'5#53^S^ $%c*44 22Ð 1$3  C ÿïÏ 73#'6#53#3#67'5#537@J L ** &&Ï 3$7  F ÿïqÏ 73#'6#53#3#67'5#5307@ @$$""Ï 3$8  ExÿçóÐ(.7#673265#"''67&'#67'53'37&'ð1    2  ¦:0$&)$Eo  **(   fÿèòÏ)73#3533#"''3255##5##5'67#53¡GL-    !Ï $##U  @uu\P /'lÿèìÇ 7#5##5##535#33535#335ì####7#Z##7#ÇTT<)))e)))`ÿéóÅ73#735#3#3#"''3267#7#snnDD(“_ Z  ]ÅD D!63_ÿêóÌ!'73##"''3255#535'2'6'&'ß AA  @@;0  T  ÌWA  <U#   ÿèõÒ  (,7&''63##"''3255##5#53#=#26 64.; P‚‚¤  0YN)Ò$(&!%B  )exWka 22cÿòòÇ 7#3#5##53533#"''3255##îw{J('   ǯÕMUgS >l`ÿèòÏ $(,73##"''3255##5#53535335#33535#35#æ  R 333R3´t*  %EEt:'''a'''RÿèðÂ7#5##53'>&'äL0&& " Â’}#G0 $+3ÿæíÉ 73#735##5##53'6656&'3——oo‰L.:8).'&!-É><_LM`&(  KÿéóÐ$*73533#3#535#3533##"''3255#&'X>>>H§K> r!!  r(  ²N<  8  KÿçóÐ%)73&'73#&''67&'#67#3'6573#V>?'*", (I > %!L¹      E1 )gBÿé¦Á7#5##53'>&'¡2#   Áš‰Š›'M'  "+0 DÿèöÏ#'7367'673#&'#'67#3'6673#Q6.G8  T/% .5*-'<“-$+3( $+kFÿç÷È 7'66553#&'7#3&'&'u „ " * \\K% "*% ''|;. +RL="J9&/*CÿèóÇ &733#535#3#3#&''67#535#'6apžp]g=IB03; A EI# Ç+/# )# Jÿè÷Å"&7#3#67&'#67'5#'6553#ëx}6  7 !bbÅC %P`  mD0 5=^*DÿéóÇ *73#535#535##5##53&''67&'767#Ynjjl“y ~) 2 + & eÇL  F"#(   DÿèîÆ $73#"''32765#'6553'#33#735#p~  j†``TBB‡]@A2 4?^?-M>HÿêðÏ17=7'6&'#"''32655'67'67676767&'&'''6Ï 5B ;> ,     #+7-% ^ Ï P? :  & 3  BÿéöÆ!73#3#33#"&''6735#735#d{177' 2% $  7UUÆU'4-9j1JÿêóÏ-37&'3533#67&'#"''32655'675#&'Å bA@@  ! "0A  Ï   ''1 #C ?%#*/ PÿéòÅ!73#33#537#537#35##5##535#X“PE¢% $00>6R[[[Å3"O"FW W8&cÿèöÑ!%7#67&'#67'53&'73535Þ7 ":! 24SSS²f  EK  ¿ +ZÿéçÐ"(733#"''3255##5335#35#'&'7'6˜<   c8&cccc  z Ð=’  ;ª.Lx   [ÿéëÈ#'+/3767#533#"''3255##5##53&'35#33535#335€d'   ,+D++>,j++>,±   //8¥ AJMÿéóÆ 73#3#5##535'67#35#7&'Z‘=7Y5' 2?YYD ÆZjj?(©6_LÿéóÐ 37'2'6'&''&'33##"''3255#53567#à;QO72 )  †EE   MMiÐ  ++ ' KÿéñÐ?767&''67&'3#3533#"''3255##5##5'67#536h  4!)]d4   !! )1Ì      /  8  !TT@= MÿíõÐ +73533#735#33535#3353#3#"''3267#7#Y<<‹))<)e))<)„¨ob g $¹W531( 'IÿéöÇ73#3#&'#5'67#535#735#by2E<* (& *&&9(Í  ?7PP. C I- ÿéóÏ"73533#3#535#'6#5##535#?0WWhæj; ¥………Î $$$$ `bb@-EÿêóÍ"73533#3#535#'6#5##535#m#>>F©O- „```Ç&&&& Z\\;(†ÿêóÍ"73533#3#535#'6#5##535#œ""'g-Y444Ç&&'' Z\\<*ÿéï"73533#3#535#'6#5##535#>1UUdÝe< ¤†††   FG G+ ÿëÌ!73533#3#535#'6#5##535#)''1‚=_888Å%%%% V``9&xÿêóÍ"73533#3#535#'6#5##535#’))/w5 b>>>Ç&&'' X\\<*kÿêóÍ"73533#3#535#'6#5##535#‰--4ƒ; kGGGÇ&&'' W\\<* ÿéwÏ"73533#3#535#'6#5##535# &h/X///Á ((((S\]<*eÿðôÏ)73533#3#535#7&''67&''6u.33:†9.   T  ;””''•)3( ÿèõ673533#&'#5'67#efN$0 :'": /#N.  32  ÿëˆÏ!'73#"''3267#3#"''3267#536'6@0   4T  V)&.1Ï 8 OK2s ‘  ÿðŒÐ7335#53533#353#67'5#7755- /ŠCYYCU.  8 ÿêÐ!73533#3#3#'67#53655#535#233--57 &# 47,,2± 0$  ÿêÏ733#5#'67##53367'@140+ Ï*7$h@ ?\&9:a   ÿêŒÆ 73&'73#67'5#'655321x\!D¤ † f,332 ÿéˆÏ73533#3#&''67#535#/1133 "023/¨''' * *<'Ë7#53&'73#3#'8 1RFZ‹v ÿï‹Ï7#'66553&'7‹S ,©D7, (Nÿî|Á73#67'535#hL+ &3 KSÁbZ  z< ÿý„Â767#53&''67&'+ Pf  ' (›&?))ÿé†Ï 7#5##535335#33535#335†I...I.¢¹¹--J777€777 ÿêzÏ73533533##5##5#35#35# ,,!,,,,£,,,,§§>>> ÿîðÆ"73#735#3267#"&553'#37#3-££{{ BC LM¾iAAUAAÆ=*   uH5"""!ÿêò’"73#735##32767#"&55#;5#.ssš¨=JSKT@@@@’2.;  SÿëÏ$*77'5673#3265#"&''&5&'+ ='&  )ie  È :4 :D3aÿéŽÂ$73#3#"''3255#&''67##537#|20   28Â"‹  t 3’¤" ÿëŠÏ!73533#3#535#3533#67'75#+++5|3+-++6C3-¯   Y$ ( ÿë‡Â 73#3#735#7'676'&' zz hhAA< 3>%! 3  ÂJ%@ ÿéƒÆ73#735##5##535#``88REEEÆW1_kkI6ÿè•Æ!73#33#537#537#35##5##535#€D7‡).-'>CCCÆ5"N"HWX7% ÿéÐ 27'2'6'&'&'#"''3255'7567#53 0F91  #  r2   3;SjÐ  [ + $  ÿç¤Ï4:7#67327#"''67&'#3#"''3265#'6553537&'ž-      0)  A  ¨<)?")9#R%M 5:, -7P''   ÿêšÏ$*073533#3##"''3255#'655#535#'67&'///5"  #!$5/i  ³l  gC+ ':G  ÿí‰Î%73#67'53&'3535&'76K &N %;;; !  Î fG  » ()1  "  ÿê–Æ#'+173#3#&''67&'767#535#35#33535#335|5/1& ##   .040L0Æb  b>>  ÿé–Å %*.733##3#5##5'67#5367#537#3353535#kCQ3  +.$6#%*033Å+, \S   + })ÿéÐ !%73&'73#3#536'&'#5##535#./rU"J 0 aCCC·  TZ Z>, ÿê’Ð %*073#3##5#5367#536365#335367#33535B:''K ##.K,#( Ð l //l :  J  .   ÿé”Ð(,073533#3#3#535#535##"''3255##535#35#:88009ˆ #&>>³-Z F Z)ÿéÏ #'+73533673#3#5##5'67#535#7#35#35#%%(:K: ,/%8::::µ ueoA ÿï—Î(,04873#3#3#67'75#535#535#535'25##5#35#335‡ 999E6778 'Î!! !!X!!!!3!!!­ÿèñÃ7#"''32654'7##5ð  ÃB$ 'BÊÛPÿê©Ð!73533#3#3#'67#53655#535#X " !¯!!" / $ "Kÿê¥Ð /73#53&'3#735#367#"''3255'7567#z"Z#KK$$S$  # 9Ð  .5/   Oÿë£Ä $7#53#"''3267#'67#535#5;5#35#lG ² 02 )))d)Aÿí¡Å &7#53#"''3267#'67#5367#5335#65#jL     %³¤-'5+))9`ÿé¥Ð73533#3#3#'67#535#535#a¯!!!!0 &!!Uÿé¥Ð73533#3#3#'67#535#535#Y¯!!!/ &!!?ÿè¢Ç +733#5367#'67#535#'673#3#&QA^7/" %( 7&( Ç Ÿ  ÿè¡Ó4<@DHLPT73#33##3#"''3255##5##535#535#'6553&'5#35#5353535#33535#335e43* *.  *&&.: ..&8A*F*Ó   T  !i  B4 3?\* '   D ) ÿêœÇ $(,0487#3#25267##"&55#535#55#7355##373535335‘*** (  &&'F I1]1Ç8h g8Ë»° º1* ÿç¦Ë%+PV\73#33#5##53537#35#35#35#&'7&''33267#"'3&''67&''67&567#''6‡@9s'3OOOOOO#  ;   D  G  -$ ) = Ë BB         ( 9 ÿé¢ÐCGKO`7335#535#535#53533#3#3#35335#535#535#53533#3#3#353#3#3#735#7677'7&'   ‹‹rrMM #"?M"ÈN VV N\  -#  ÿéðÇ-173#3#5##53565#5#35#327#"&55#'67#35#àL?ŸAN€ @Ÿ+  !% ,ŸŸÇ¯ ¯cP% )2&|lÿçóÐ#)/7373#33#53537#5#35#3#3&'''6u303/ „ )0^EEEEEE ' ¾ww/  ;ÿçëÈ$(,7#"''3255#'6553533#3#535#3#735#ë v&&&+f(&TT..ÈëTF5 6@`15?;ÿè™Ï73533#"''32765#'6655#E)  ) ¤++)'[ r*B?[ÿëôÇ"73#735#3267#"&553'#37#3dssMM &5  >3†L''9%%ÇB‰%   rI7%%%KÿéóÉ 7&'''6&''6767&'à &) 9*'M/8)" ÉC K>-*G(0 .RL)‹ÿéõÈ 7&'''6''6767&'Ü (7 %ÈCJ?,*G)/  /SP(VÿéóÉ 7&'''6''6767&'Ç #& 6&"K +4& ÉC K>-)F(0  .RG.aÿéòÉ 7&'''6''6767&'Ë "3"F (0# ÉC!J>.)F(0  .SM(7ÿñÅ® $73#53635#35#3#3#3#535#535#u 8r&NNNN600>Ž=//6®LL (-, uÏ767'5'753q5% c  mD?OÿéóÏ#'+73533#3#3##5#535#535#35#33535#335UBCC::HHHH;;B((<'c((<'¼e''e;AUÿéñÃ373##"''3255#7&'#53#"''3255#7&'#5UœœF   “    Û  …()!r²›  …()#u²LÿèñÆ*673#3#"''3255##5##535#&''67&'7''67&'L¥HC  00CI-  S  Æ “  }ŽŽš¬ @&,  &, IÿéöÏ !=7#5##53&'73'67#&''67#3267#"&553#"''325írAE*C 6   t  A  µ$%  ) j)R   d  yD  GÿîôÐ&*.2673#3#3#3#535#535#535#535'25##5#35#335Þ $FKD™CJCC)0Ð"(("Y"""":(((lÿéóÐ#73#3##"''32655#535#535'2å 0099 ::223<Ð-%7 3%*XÿéëÏ $(733#"''3255##537'6'&'3#735#™> kA<Y  FF ÏI„  m‹=  WG%PÿèñÏ%+73533533#3#535#35#35#35#'67&'Y>¡)>>>>>> % M ±mmBC1  KÿéëÇ$(,7#"''3255#'6553533#3#535#3#735#ë j!!SEE!!ÇÄ  ¬SE4 5?_/7=EÿéòÏ#'73533533#3#535#35##5##535#35#N!5!!(­*!455^^^^^^±!!!!Css)=\ÿëõÆ "/73#735#35#3267#"&5536'33#67'\……____w    w,, Æ_9;= )   ^1  KÿêõÏ!373'33#3267#"&'#7&''3#33#7'27537N_10  `‹ mBB#"-8‘>#='$DQD 8"/ `]IÿéîÈ&*.473#3#"''32765#&''67#'67#735#35#33#c|Sm  0  % VVVVViÈU X! 7    31aAÿéòÏ-173533533##5##5#3673#3#5##5'67#35#R#,%%,#9R\ dO %-1OO´,  [ F  Z)QÿéôÏ #48<73#5'675#5373673267#"&5#"''3255##535#35#…00#   :  YYYYYÏY      p  ,…$5RÿçóÇ 4;73#3#535#5#35#335335373#&''67&'67#367Yš2)Š'.U((„8S 5 ' ,C  ÇCC1E      MÿéóÏ /5973673#3#5##535#53&'3535#"&55#'67#333535#   /8.m091 ,@m RmmmÍ ›› - j  i[ÿéôÐ!06:73673#3#5##5365#53&'3535#"&55#'67#333535#„ %3*c-5) .:c LcccÏ››  / j  inÿéóÏ.4873673#3#5##535#53&'3535#"&55#'67#333535#‘  +$S',# + 0S  B SSSÏ›› /j   ilðÏ*0473&'73673#3#535#35#5#"&55#'67#75#335#l ,'x"); 2 TETT¯  uuX 1? ÿéŒÏ,2673673#3##535#53&'#335#"&55#'65#333535#+   ") _"' 8.M  ? MMMÏ Š› -V !&!fKÿçòÎ#)/73533#33#53535#5#3535#5#&'''6Y=CC8 4=vZZZZZZZ@+ " ¾ww. * )     CÿèôÐ59=AEI73673#33##&'#5##5'67#535#535#535#53&'5#3533535335w  17*   ",,"")* =BÐ &% !=IH6 8&MÿéòÏ 87'2'6'&''&''673#3#353#5#5335#535á ;TF> 0 (    n?GG+|+KKÏ     > 0%A 7%0 UÿèóÏ#'+/7;?73533533#3#535#5#35#33533535#335335#5##535#35#U122))1Y))g) VVVVVÁPP ,-\ \ -EÿêöÑ *0AGM73#53635#'673&''67&'767&''33267#"&5''67&'ŠP(gg$  +        $ ‰  Ñ }} vY      N 1 4    eÿéîÇ #/3773#5#73#5#&'7&''67'63#5##5335#35#fB/H@-@ N ! U %6Q+QQQQÇ_M_M       j j&;[ÿèöÐ#)/5;73#3533533##5#'6553&'#3&'''67&''4'±3lB7&  I  F Ð &::R)$OP [) # gÿèõÐ#'-373533#3#3#535#535#3#735#35#35#'67&'o355//;‹;,,3ssNNNNNN % <Ä     DbE ' '     ÿéìp 73#53&'3#3##5##535#ƒa×`M¹¹¹¹³ŠŠŠp"  00 UÿòóÇ 7#3#53#735#3#735#73#735#ò‹Œž-YY3322022ǯÕ!;6L,L,KÿéóÑ(,073'73#3#53&'#67#3#3##5#535#735#35#U@ ?)§(bB)‚8JJJJ7\\\\¼    R1.IÿèôÐ*;Oc73533#&''6655#67&''67'767''67'67&''67&''67&''67&'NHFF? 5?)$H     e          `    ¸+91: 7>+      .       LÿçõÐ.EL73673#&'7#'67#735#&''67&'763&''67&''667#\-F8 bbI     :  ''"  &) 4º  [ 7     O     _ÿéôÊ /473#735#35#3#735#33533533&''67&'#367nvvPPPP(w„ *" % ÊE) ' '41   WÿêòÎ*06<B73#35#535#53#3#"''3267#'67#56&''&''&'''6—''Z(((;\q   j  H    Îa L4 _  ÿéÏ%)157&'73#53635#33535#335'&'3##5##535#J  3 mD <,G,I  ƒƒt>>>Ï QQ33S  x F G) HÿéóÉ 06<73#3#535#5#35#3353353#3##"''3255#'67&'R¡3**2[))u‚‚£F   Jr  É>>,9 ( %  Dÿé÷Î #/5;B73#5'675#73#5'675#&'7&'&''6'6'67'66UE 2PE 2;  a   , 0#. :+ 1 35 )= AA .[ 59ÎV  V      5       + IÿêóÏ39?E733533#3#3#3#&'#'67#5367#535#53&'#53367#7'6'&'ƒ3 *D<<M<, 34 )99E;+/2 / 6<448, #7H  c  Ð333   '# ) H    @ÿëöÊ159=AFJ73267#"&55'67#5367#535#53#3#3#&''5#35#3353353&'##3x !*  5. )8-).›1*Nf+ &))[J27BB  2 ::   $™(UCÿçôÐ "&*067&''633#5367#53&'35#35#35#'67&'–') *) ( :* !ˆL S,cccccc$ !R Ð   jj K ( * !     GÿéôÐ>DIN733#67&'#"''32654''67''67&''67#5'6367#367#335ƒ;,K     "/4"' & !' *6 4 #,@.Ð :   -2     . 1 IÿèïÎ'-3;V7367&''667367&''66''6''6#5##536533#"''32767#'67#u   I    J “u*B  1( 2 &Î    '    ! @))0 ; #,MÿéóÏ(048<@73673#&'#5'67#53&'735'2##53#'#;5##;5#á #!:$ &% !6  !G8e‹=(())(())Ï    "'   Ï hhV$FÿéôÏ;CGK73533#3#&''67#5367#'67#5367#53533#3#&#5##535#35#P"   w    \\\\\¹      +      n n'= KÿéòÈ #'+/73#735#73#735#3#3##5#535#735#33535#335SEE>HH""\‹&&> ŠŠdddddd& #O! !Á gI ) ) "    SÿéëÊ  $7##535#35#7#"''3255#535#5#˜3!!!!†   5""""ÊN’à +.È  uN+ @ÿéòÏ/37;?73#673&'73#3#3#3##5'66553&'35#5#5#35#¤@„ #+/****2g A%qqC"""""Ï 5-   ^ +" .!W 4^!"IÿèóÈ-159=73#3#3673#&'#5'67#53&'735#535#5#35#335335T™0); 9$ %) #3#  ?)-W((ÈB'    7>$ 'B0NÿêøÈ"&*.26:7#3#325267##"&55#535#55#7355##373535335ç044 4 00.TV9!w9!È:h g:̺¯¹2*ÿéïÁ 73#735#&'''6.¤¤||b+ +; -0ÁySu!% +~òÅ 73#735#&'''6XX223  'Åa=\  ! Lÿéî’ 73#735#'67&'_}}UUV’b=V " \ÿéòÁ 73#735#&'''6sppHH?)ÁxTv % %! ,uÿéò 73#735#'67&'‡]]55? ÂzTu ,#!% &!‰ÿêò 73#735#&'''6’TT//2  # ÂzTt"') + # ;å} #'73#735#33535#33573#735#33535#335]]%9%^^&:&}B( & (B( & ‡æÉ #'73#735#33535#33573#735#33535#335]]%9%__&;&ÉB( & (B( & 2ÿèÏe 7#5##535#33535#35#Ïu00E0u00E00e}}/JDÿéér 7#5##535#33535#35#é}44H5}44H55rˆ ‰5###W###%OÞÄ 73#735#33535#335%¹¹??R?‘??R?ÄuDOCŒ» 7#5##535#35#35#35#Œ'    »¬ ¸I:::‚888ÿèðÏ73533#3##5#535#7'6'&'— !!$$$$ H  :  NN+JJ+O  %ZÜÆ 73#735#33535#335%··<FF::4::D  T µ"#<<.   "   {ÿé÷Ä!(73&'#"''3267&''67&'765#67#ŽX   "! (Ä^6. .($9  %Z 7=7Qÿé÷Ñ  ,97&''63#3#735#73#735#&''67&''6ž!+ * ' 6@@";;9;;E   U  Ñ!" ;;/   !   [ÿéöÑ ,97&''63#3#735#73#735#&''67&''6¡( '" 0>>99199B S  Ñ !$ ;;0   !   `ÿé÷Ñ  ,87&''63#3#735#73#735#&''67&''6¢( &" .>>88188A  P  Ñ !;;/      ÿëôÍ73'67#'6'6553&¬:  +   (Í  +i,);#FgÿéóÎ%)-736533#&''67#3##"''3255#3#735#r325 $ ) / Œ   hFF%%¶     9W  T9LÿéóÎ&*.736533#&''67#3##"''3255#3#735#Y?>A& &+ 1 : §  }SS..¶    9W  T:EÿèôÌ$KQW]7'23'73673#5##53&'&''33267##3&''67&''67&567#7&'''6Ü 9SD+  |>   Q" +! +( $ ) DGa Ì    "" '       G  [    >ÿçôÏ #=J73533533#735#33533535#335335#3#3#67'5#'655&'76V+.”*m*Š}}‹b  Š   6  ÁI- + &  - 6$ $7M ' @ÿéõË 3773#735#3353353#3#67&'#7'5'67#735#Z)€šš ‡6  9 &  # aaË:5 3    . !    FÿéõÒ!%+37;7'67&'#7&'3#735#&'735'6#5##535#35#u ;$) Q= -ŠŠ)) 4)&UUUUUŸ   B!  !!  2T T+@ÿèóÑ*/37?C733#&'#'67#3&'73#'655'667#3#3##5##535#L(   <5† +HA jjjjjEEEÑ     8* ,2= M  9 9 FÿçôÑ !%)-39?7#5##53'73#673#5'675#5#5#35#7'6&'''6ïzC9e)4O‚ -#)d\\\\\ V& $ &À%%    ]SG   i }   MÿèòÊ (BHNTZ73#735#35#&''67'6767677&'?7'7&''67'67&''&''&'''6^„„^^^^    8         ÊP0,W  !!    K  EÿéñÊ#F73#3#5##5##535#3#73#3#73#3#3#"''3255##5##5##5367#N™EL97JA))L**U22U44f¬RP   9FÊ (::( *  ;  $8888=O Sÿç÷Ò !%7@IW]cio7&'6'&'6'&'63#735#&''7&'76367'7367'733265#"'&'&'7&'&'7&'Õ ' & jjU   [  :  9 P   F   /   F   Ò         ,I(    8NZNY'! %2        @ÿêôÐ048<@DJPVf733#3'67#'65533265#"&55'75363#735#33535#335&'7&'''6733267#"&5‰CCP n3A" ,>jj,F,#  A  `     Ð  IÿéóÍ#6:>BFJ`m73#73##5##53#5##5&'7&'#3#'6553&'75##5#35#3353353673265#"&5'67'533OIIUII $$4   a   20+…B--    . )Í 2!!22!!2  *"# "+3        6 @ÿçòÐ$QUY]agm7'673533#3#67'5#'67#53535#'673533#3#32767#"&55#'67#3#735#35#35#'67&'Y      '0  #    E……`````` !P ²       )[A $ $      ÿëóÆ733267#"&5'3'>’ !D ƾ " ÀX(6 +7ÿéëÁ 7#5##535#35#ë88888ÁØØZH¢HyÿéóÆ#733&''67&''667#67#'7#‡U      @ #Æ3A'=* G_‰(44<ÿéäG 73533##5#735#335ZYYZGG[F62|ÿèôÍ73#&''67&'#53&'67µ .  0  ÍB+(F4& #6mÿéòÇ!%+17=7#3#3#3#"''3267#55#5#35&''&'''67&'í($$$$-  a4 -  (ÇO7‚&%/€ÿóòÅ7#3#5&''6767&'76ò^^rS      Å®Ò#%  „ÿéîÂ7#"''3255##53#735#î  D//¿  ¨ÇÙ7aA€ÿéôÅ73#3##5#535#'6'&'Šc*1100&O = ÅdSSd%#!#ÿéít!%+17=7#3#3#3#"''3277#55#5#5#'67&'7&''&'âSKKLL^   ´VCCCCC  8c    t   +Z    sóÑ.37373&''67&'67#36773&''67&'#3674 &  'b     à        ÿéí|!%+17=7#3#3#3#"''3267#55#5#5#'67&'7&''&'âSKKKK^  ³UAAAAA  :c   |   - `    xÿëôÏ#73533#&''67&'767#735#335,..% !   ,-°Z"     666rÿèõÐ  7&''6'6'6'66¯  ($ #'1 0*.& $*Ð""$ ! & ,!#'$vÿéìÈ7#"''3255##53#3#735#ì  O>>11ÈÅ  ­Ìß,X7yÿèôÇ73#7#5'75#35#35#75#}q S"000000Ç*( ™&&]%_"kÿèòÆ $73#"''32765#'6553'#33#735#e  QoII@99‡^ HC1 4?^?-M>pÿéôÇ *73#535#535##5##53&''67&'767#€bcPOOOpX `  #   JÇK  G"#'   kÿçóÏ5;73533#67676732765#"&''75#'655#7&'oT;  ! $  U  ›44(     za< ;VD ‚ÿéóÐ!%7#67&'#67'53&'73535ã*   1 $&999³f JK À ){ÿéñÈ 73#735#35#3#3##5#535#‰^^9999g+1122)ÈZ49733xÿéóÏ %73&'73#3#3##5#535#536'&'~. -qP "744..1F , ± #88#pÿéôÐ"'+7&'#3#3#5##535#535#5'63&'35#« ..'8$** )3  88Ð% VV # —$tÿèîÏ373#"''32765#'63#3#353#5335#535#'6T G  /!!Q$$ Ï ›6€  2$43#2 qÿéóÏ$173533#&'#5'675#&''67&''6z.--"  .   K  ´F5'PL'0K    (  ÿëôÆ !.73#735#35#3267#"&5536'33#67'jjCCCCU    Z Æ_9;= +   _0   ÿéõÏ*.73533#3#336767#"&55#'667#535#35#dffL63 '(% /Md+……¸K4 :''KT&AÿôõÂ73#33#537#'7#37#O£k]+´uW&$M LÂ"†/if1BÿéöÏ 73655#535333#&''67#75#M?22:H5458;z&])))I2!54"$/6)BÿéñÅ#735#53#3##"''32655#'67#'t ?T(..   "70&9¦==^ YB-"<=ÿçòÐ '-73673#3&''67&''67#67'&'N)bdT#(% $ +  , '0  £6#    !1M4!o EÿéóÏ"(.733##"''3255#'67#5373#3&'''6—>>  B&. RY,0LŠ-G  B$!$! # $ :ÿèôÒ .4:73#53&'3#735#3#735#3#3##"''3255#'67&'ŸL°N;’’nnPP,,+……¬L   M(  i Ò 'U3% 8       8ÿéöÑ 573#53&'3#735#3#735##535'273#&'#5'6¢I­N=‘‘kkKK## &'‡C-!  ‹x}#I / #-.ÿé“Ä$7#"''3255##5&''67&'76“  UN    Ä  ªÈÛ'   OÿçóË #'+1773#3#535#5#35#3353353#735#35#35#'67&'P£3+•-3]++{††``````$ I  Ë 55 $,bF % &     ÿéõÐ+05733#3267#"&55#'67#5367#'6367#35#R Z :@   ) % >;Z R./6E@;Ð P6   = 0P  ^**jÿéóÏ(,073533#3#3#535#535##"''3255##535#35#q27700=‰9))2s  FFFFFÀR\  $t 0aÿéóÏ27#53&'73#67&'7&'3267#"&55'67'6”(77E $    * #Ÿ  ) !% X # [OB ÿîžÐ (7&''6#3267#"&553#"''326O%!# /:6'  2! ^   Ð (&?\  r7 ÿ雯 $7#3#3267#"&'#67'535'#,20 * R*&ÆK$#)*1B  Ò%%\$$ÿè˜Ï!733#3#'67#535#537'6'&'I66;=# 57225  Q  ÏM*- "*B   ƒÏ 73533#3#67'7&''67#535#)**5=  ).$-)¬##3*   '3 ÿé’Ð73#&'#5'67#535'6„ 000(24/>Ð (#dg"$/% ÿìšÐ"73533#3#535#3533#67'675#222<Š;2233 >K2¯!!  Y$ ' ÿê›Ð*.273673#3#"''3267##5'67#735#53&'35#356  2<  ( "(.0 90Î  @9 O?$!C H- ÿñ¡Ï*7'75#53533#7&''6'&''6@OD;;55   Q  %‹‹"¨  %,  #ÿéÐ"(733#"''3255##5335#35#7'6'&'J3  O0OOOOQ  U  Ð=’  ;ª0Ly   ÿèôÑ,073673#3#32667#"&55#'665#5367#35#7695"(>- '3II·   I<  C('  I O% ÜÊ 73#"''3265'3#É   )Ê „{ ÿç Î !77#5##53&'73'67&'767#'67#67'53#"''325Ÿe>> 8   a ;  ·&(  !o+%" & o  D ÿé£Ï.287#'733#67&'#"''32655'675#53'37&'jCJ(=   #@S$ < S  ˆ8 6,  .6R ÿêšÏ'+/736533#&''67#3##"''3255#3#735#327  ' . Œ   gHH##¶     9V  S:^ÿèöÐ #'+/5;73533##5#3533533##5##5#3#735#35#35#'67&'o2992 44 xxSSSSSS G Á gI *) "    iÿéóÏ 7#5##53&'7&'''6îV2" (¯:((: 6Z$*`9:)mÿéòÐ#'+73533533##5##5##5##535#33535#35#m$$~P0 P0 ²(6%%%\&&& iÿéñÈ #'+/73#735#'3#735#3#3##5#535#735#33535#335´::V99 u2::;;01P1È11/W((45`ÿèôÐ I7'2'6'&''&'&'3#&''67#5367'67'6776767&'â 1H;6  (  #  g D3 '1 $)1  '$Ð     1   $     ! ÿêeÎ6767#"''32654''67&''67''7&'767&''6L     $   Î  "=!     rÿéóÏ &,733#5'667#35#35#35#'67&'œ2d ) & ======J  Ï  y  &87'  tÿèóÐ#'-373533#3#3#535#535#3#735#35#35#'67&'}.//))4|5)).jjDDDDDD  8Ä     DbE ' '    lÿêîÑ#+/373673#53&'35#&'735'6#5##535#35#’   ‚ $$3%  $NNNNNÑ VV ]666 ;cc#5 ÿéUÅ 73#735#35#35#'67&'AA  .  ÅŸn OM4 !båÌ 73#735#35#35#'67&'+««………………& #%U%%$$ÌU; !  ÿæés7#5##5'66&'Ñ{K25 2--) ,*s[HI\.2  +uÿèóÏ)/7767327#"''67&''7''74'37&'â/66    '()  £   $ " % 43  dÿè÷Å#'7#3#67&'#67'5#'66553#íbf,  -    RRÅC  $Q_ mB4 0%^*tÿêòÏ!'7#5##5367#'6733'665&'ë8+ !  -   "‰q__q # 9  #(pÿèöÏ*0673533#3'67#535#&'36533#'67#7&'&'~*++5 f3* </55 &4 Q ¸ 1  5*'&>   <_ÿèõÐ59=AEI73673#33##&'#5##5'67#535#535#535#53&'5#3533535335‘   &*#   !!! 14Ð  %%5II2 8'tÿêïÑ#+/373673#53&'35#&'735'6#5##535#35#™{""0" #HHHHHÑ VV ]666 ;cc#5bÿéóÒ*048@D733#&'#'67#3&'73#'655'667#3#3##5##535#•=  *)h 94 UUUUV333Ò     !  ,* )M M  7 7ÿèôÆ 73#3#33#"&''675#735#0¤EUU'#?A (!K||ÆX%0.: c2ÿéžÈ%+733#"&55#'66553533##5'67#&'| #  966 !1bÈ8  -  jbI%*ÿéžÄ.47#"''32655'675#535#535#533#67&'&'a #@cMMOb=  T   .M2  L ÿè¦ÅB73#67&'#"''32654''67&'''67&'7267&''67#Œ4     / 2#   & @Å  -3      6ñÐ-15973673#53&'3#"''325'#"''3255##535#35#73#P 9 >â=‹  F   >>>>>gÐ   (N  FM  b # 'Fÿéà073#"''3267#'67#É  ] E< D01 % ÿé£Ç"&73#"''3255##53535#335#3#735#   jCG00EE!!ÇUp  Zx‰UUC+C>ÿì›Ï (73353353#3#3#735#67677'7&' !zŠŠ ssMM  :H Â))/=3    ÿé¢É 06<73#3#535#5#35#3353353#3##"''3255#'67&'-&ƒ&,P%%huu’>   A i  É>>,9 ( %   ÿç©Ñ$@FLR767&'7&''667&'7&''6&''67''6767'7'6'63'6I  -3;   ( (-(    . ,0"A A4(] XÑ       4   ( ÿé¡Ð 7;?CG7&'67&'6'&'63#3#&'#5'67#535#735#33535#335,  e  #  55>:  "4@7$$7"Y$$7"Ð      -N -1 / *  ÿê¦Î#'+17=C73&'73#3#3#3##5'65#5#35#&''&'''67&'5 )*%%%%-e9&&&&&X  ?  2Î  X )%%0    ÿè³Ê '-=L7#'6553#353#'67#53365#536'&'73'67#'6'6753&©|E   I     ÊTE6 6@`5 /@( @/ 4     o  = #  ÿé¦Ò $*26:7'67&'#73&3#735#&'735'6#5##535#35#3 0% O"5Jyy!!  -!  !FFFFF " %D    1TT ) ÿë°Ï<KQ733#3#53533#673265#"''67&'#'6553533'73#67'675#'6Y--;•M$    DV  m;-    Ï##"$#  3/756  % ; >  ÿé¢Ê .173#735#3#735#73#735#3533#&'#5'67#37%ee??$==:>>a>??"" (5JÊ5066: /4 ÿèªÑ$9^cglr733#5'667#35#7'53373267#"&553633#3267#"&55#'67#5'667#37#335&'3H‚ D<\\'3%A   MG /  . $) D> !%5( Ñ &  .  $   # (           ÿç«Ð$PTX\`fl7'673533#3#7'5#'67#53535#'673533#3#3267#"&55#'67#3#735#35#35#'67&'       ",    A{{UUUUUU  J °        )[@ $ $       }½73#3#67&'7&''67#UUe,! (-#½(: $ 8 ÿó…¾7#5'67#53#3#=#; (t7 @( c (1s AAÿçÚK736533#"''32765#'67#M`!N. H H; 8   wæÍ73533##'32765#'67#Œ0 /*¢++l$ K]%!S ÿë÷Ï,05733#3276767#"&55#'67#5367#'637#35#:0 ! I*3/ $/'  'Ï I>  C8! /I  Z%%% ÿ÷È$(,073567#533##"''3255#3'7575#75#75#; Gc++  ;t8F   ˜  +> PM97520ÿéÐ28<@73#3#3&'73#3#3#3##5'67#5367#'65#5#35#"R4GL')""""([ $3 Ð    M #%  p"# ÿé‘Ï'/37;?73673#&'#5'67#53&'735'2##53#'#;5##;5#ˆ  )  ( .9&Fl,Ï!    &  Õ hhW' ÿê”Ñ !%+73&'73#3#735#3#735#3#735#35#'6 3?‡xxRR >>(nnHHHH\5AGÁT4# 8A( ! ÿèÏ37;?CK73533533##5##5#3#3#"''3255''75##535#735#33535#3355#7'7!! k-3   1++E+ Å  N K   N` 0 + _$  ÿè•Ñ DHLY73#53&'3#735#73#735##535#535#53533533#3#3#67'5'675#35#67&'S:„5*77088:!  !O   A   Ñ$++p     "    <    IÿéñÅ#735#53#3##"''32655#'67#'x Q%QQQQQQÐ ÈÈC#Y$[%ÿèóÈ7#'6553#33#"&7#3GT /CJ:--dO-&UUd=)2™>ÿééÇ#'73#"''32655##53535#335#3#735#Ë  ¤[(oGG44 ]]99ÇUo Yx‰UUB,B>ÿééÅ73#735##5##535#7#5##535#+ªªƒƒ6999À888ÅW1XqqP>qqP>\ÿéòÏ)57367325667##"'"&5'67'53333##5#53© 1$BB>>Ï,   .2 x&E>>QÿéõÇ*733#"&55#'66553533#&'#5'67#É$ ' =B4$ &$ "+Ç7  ,   o ',RW/'JÿèóÏ5;73533#6767673267#"&''675#'655#7&'XdG   &% ,# 1+o  ›44)      y`< :VC Yÿé÷ÏCI73&'33#67327#"''67&'#67#"''3255'675#535'67&'Ÿ #.-    $      $Y  Í. )*#)&" #.$ 6  + +)YÿéòÏ$*073533#3##"''3255#'655#535#'67&'d877B/  **0B8w  ° f  aE, ); D !"€ÿêõÃ73&''67&'#367†e   ÃT=  .P@(08 ÿè…Ð $*07&''63#3##"''3255#535#'67&'I ! , F**   -- U  Ð$I  E8"   ÿó}Ï!73533#3#67&'7&''67#535#&%%+2 (+#,&¬##31 "  13 ÿéõÒ 7&''63##5##535#~27 54/< Q'—— ‚‚‚Ò(.,&,ddA.QÿèôÏ 7373#'67#&''6767&'d%PS*) #n"( ¨'gE HWX#)  .QN&gÿè¹Æ73#3#"''3267#735#jM49  : 39ÆI'J$-M#dÿéîÐ#73#"''3255#&''675##53&'žC *   &4Ш  /( 7,!+8­ÀTÿì«Æ7#"''3255'67567#536¨!   9NpO C )´ÿîóÊ733267#"&5´  ÊÁ " )ÿé×D 7#5##535#׆††DZ [<) ÿéäÈ%)-7#"''3255#'66553533#3#535#3#735#ä ˜ &/007~3/ aa;;ÈÅ  ¬SD5 1$_07=[ÿéôÏ=7367#535#53533#3673#33##"''3255#53567#'67#i%D8--!! #4 8<<  EE2 i  ' $  ÿêól736533&'73#&''67#\+&[,(I! ] X YQ    <1.„ÿëóË73##5#'6556ä !>#&Ë$††81 ,0c[ÿéõÌ ,27'2'6'&'&'3533##"''3255#&'ä 9TE;/a&&   a%  Ì  =H  E Kÿæ÷Æ#'+073#3#&''67&'767#535#35#33535#335\”B9:7 6!, & 68?$$7%\$$7%Æa    a>? gÿëòÆ"73#735#3267#"&553'#37#3qkkEE #,  60I%%6$$Æ;‚.  yH6$$$YÿéóÈ$*.73#3#5##535#5#35#"&55#'655#333535#Yš2)a)1V'a Laaaȯ ¯f %# !)~UÿìöÏ'159=A73673#'#3267#"&55##5'67#3533&'#35#33535#335a,J*" 1 #!  0N0²  K  W '=?[ÿéòÐ,0473#67&'7&''67#53&'#"''3255##535#35#¨@R#&5=-@K  MMMMMÐ      ed  *|"2XÿèìÏ373#"''32765#'63#3#353#5335#535#'6{e  [ =&**_-- Ï–" z  2$43#2 WÿéëÎ(73'67#'63#35#535#53#5##56‘E  9 &''`''*>`Î "+ !!} xUÿèñÆ(473#3#"''3255##5##535#''67&'7''67&'UœEA .-@E)  M  Æ “  }ŽŽš¬ @&- &- KÿéñÏ,073533533##5##5#373#3#5##5'67#35#` '!!' 6 HQ YI (,+II³- Z D $Z) ÿéóÉ #'+/73#735#'3#735#3#3##5#535#735#33535#335‹VV00€WW11 ·RiiiiQ>>R@’>>R@É330V((34 ÿé÷Ï#'8<@73#&'#5'67#5367'2&'#35##"''3255##53#735#Ï +63" u(9I8V;B OO   ¢.iiEEÏ  *% >  )K  5Qb.YÿéòÏ 77'2'6'&''&''673#3#353#5#5335#535á 7OA: +%   h;BB't'CCÏ     =  0%A 7%0UÿéóË,CY767#53&''67'67#53&''67&'767#53&''67&'#53533#&'#5'6 Of  # 0C   T0C  4E??88EE77>[[[[[[ * #EÄ     DbE ' '     JÿéóÏ/;AG733#3'67#73267#"&55'75#'665533533533#7'6'&'•IIH 5'( !  5%)%ƒp V  Ï     E7- )O£LLLLV?ÿéøÑ%<73#'6553&'3533#'#5'67##5'67#53533#&'§>„C$  g   Ñ P:5 ,7b N%% `L",/TQ",%%4WÿìôÏ$1IQ7#5'675#53533#&7&''6'&''63&''67&''667#­ (99;; '    L    < +'  1n *) Q     6       YÿçôÏ#'-373533#3#535#735#3353#735#35#35#'67&'i355E›C3""5#kYYYYYY  >à +   E_C ' '     RÿèõÏ#'8<@73#&'#5'67#5367'23'#35##"''3255##53#735#Ú  N' [  /<8  88d  e"DD##Ï<) *R  556##3%   e Y  ÆcA   AA ƒ VÿèôË'+?CIO73265#"&553'#33267#"&553'#33533533#3#535#35#'67&'¼  ;c  ;++!!)ž$1++ K   Q<,   Q<,O+     ^ÿêíÑ#+/373673#53&'35#&'735'6#5##535#35#†   !#++  9+  &YYYYYÑ  WW [555 :dd$4‡áÊ 73#735#73#735#SS//\TT..ÊCCÿêâ4 7#5##535#7#5##535#u000±0004J J/J J/LÿèöÑ *0E73#5##536'6'&'3533##5'67#&'3673#&''67#‹Nc%6 3   $$$ F \=M=. 5; .5Ñno€ "   $$-    2 %'  IÿçôÏ #=J73533533#735#33533535#335335#3#3#67'5#'655&'76^)+(g(‚vv„^  ‚  3  ÁI,+'  - 6# %7M ' FÿêöÏ;JP733#3#53533#67327#"''67&'#'6553533&'73#67'675#'611?™R(    J[  s<0    Ï##"&&/!  -5-! #)>  # < ; >ÿìôÑ"(.BH73#3#53&'#53'37#3#735#35#&'7&''33325267##"&5''6šA .«.?& 6-††````6  I  ^$  !  Ñ   5 (K- *&     " Oÿè¬Î 73#"''3265'3#˜   IÎË ±£LÿèôÏ%5;AX_7'23&'73673#5##53&'&''33267#"&57&'''63&''67&''6367#ß 8QC& sB     P W N" +"+#  1 AÏ    ##%    !           RÿéõÔ!%+37;7&'#5'63&'3#735#&'735'6#5##535#35#¡!' C4) @ƒƒ''4$%QQQQQÔ    -B#  ##  0T T+RÿèöÐ #'+/5;73533##5#3533533##5##5#3#735#35#35#'67&'e6>>6 :"": [[[[[[" K Á gI *) "     YÿéðÏ '+/37733#5##537'6'&'3#735##5##535#33535#35#šCsA; ]  eeAAed));)d));))Ï#-.!     320d d&9RÿéñÊ #BFJN73#5'675#73#5'675#&'7&'3&'73#3#3#3##5'65#5#35#^B/MB/8]9$8711118v :+++++ÊW  W      4  U  RÿéôÏ048<@UZ733533##5##5#533&'73#3#3#3#5'65#353535#533&''67#&67#€#$$#$$!85//..4‡ ?-  ---4 ~ .( "( @Ï       5    7     RÿéòÊ#D73#3#5##5##535#3#73#3#73#3#3#"''3255##5##5##537#[Œ>F31D;%%E&&N..N00^ LJ  6@Ê (;;( * :  $8888=N OÿîôÏ#)/5;CGKO735333##3#535#535#535#33535&'''67&''&'3#53535#35#35#d399Iœ@33@@3F&&& f Vd¥&%Á     ;      333#####VÿéòÏ)37DQ733#3#53533&''6'67&53#5#5335&''6'67&¢11=œ   ?   }jS   >   Ï//    2–2::      KÿéóÌ+/37GKOS7#5'75#53#'35#35#5##5'75#53#'35#35#5#7#5'75#53#'35#35#5#ño•XEEEEEE 6 J,ˆ 3 K,~ D>3 % & f F:. % %   F:. % %  ÿéóÏ(26BO733#3#53533&''6'67&53#5#5335&''6'67&|NNdæ..'  X  ¶£|  X  Ï//   2–2::   …ÿéñÅ 735#53#3##"''3255'67#'— (:b   )¦.>>^  L9&!;€ÿ÷óÊ73533533533##5#3#5#5#€ 5Rf QŒ44>>>>JJo‚888…ÿéóÌ73##5#'66556ä (K   1Ì,††>3 5D:‰ÿòîÇ 73#53535#35#35#ä e ******ÇÃÃB0p.o/~ÿìòÄ 73#3#33#"''675#735#ŽW $$ 6 %//ÄU%5+,8  c1€ÿêóÐ'+/736533#&''67#3##"''3255#3#735#ˆ&'*   #s  Q 77¸    ;X  T;\ÿçòÇ 5;73#3#535#5#35#3353353673#&''67&'67#367c.&‚',O&&{4M 20 $ )?  ÇCC1E   QÿèõÓ $(47&'#67'5'63&'73&'3535&'76œ$ _  4' LLL  )- Ó&O4  !"  %%%   ÿìîÅ 7#'655î±Åa8 3=]:ÿôôš73533#3#535#LAAASºSAd66JJ ÿòóÐ)73533#3#535#7&''6'&''6VXXiägV™&| %C++‘ +8+WÿéõÐ1073#&''67&'#53&'67#© :' '+ + AA Ð@*'B#6 `ÿèðÐ73533#3##5#535#7&'7'6g577@@<<5  o ‚NN*JJ*O   WÿîòÌ73#3#535635#Û:1m#&›=)66Ì .j»¿jSÿçóÎ73#&'#5&'75#'66556Ü +:l* .! ?Î *6 ;I *)4,#xÿòðÌ%)-1573#3#3#3#535#535#535#535'25##5#35#335Ö '0b%**#`^ÌZ]"**$_O[9+(((<+Ì#$$#[####7$$$U?òÑ7&'3267#"&''7&'7° AM # - 1/Ñ   "%$ IÿíóÏ273733#'667#7&'32767#"&55'67536eTVa  !   ž119A =4?   K *!  M8^ÿéôÐ %73#53&'3#3##5#535#536'&'©:‹;6 -E==88>T:  Ð 0#88#]ÿêòÑ 27'2'6'&''&'33##"''3255#5357#ç 8QB9/  (   y??   @@&]Ñ    *+ 'aÿèíÈ$(,04733#"''3255##5##53&'767#35#33535#335a‡1  ,&< h&&9,e&&9,È  009¦  WJTÿéôÑ6>7&''6767'&'''63&'''67&''667667#È17! 5!B! (&   8 Ä   /      7  iÿêôÏ!%7#67&'#67'53&'73535à6  <#03PPP³f EL  À  )\ÿéñÇ *73#535#535##5##53&''67&'767#luwd__b„of$,!    NÇK  G$$'   WÿéöÏ:733533##5##5#53#5'673673267#"&55'67}00   <  Ï- s[#2 !/  #  `ÿèìÈ'+7#"''3255#&''67##5365#53#'35#ì  +   #(>2r.0KKee  N  %k} NN '*]ÿéôÏ#(-73#3533##5#5367#53635#335367#335š@=44P*' 3#V 3%Ï d33 d 6@ `ÿéóÏ(,073533#3#3#535#535##"''3255##535#35#h6;;44B“>--6z  MMMMMÀR\  $t 0NÿèøÎ';7373#3#3#&'#'67#5367#5367#3533#3##5#535#_9>B?F[$ / &!(5%$$9977%» b++ÿñ}Ï.73533#3#535#'67&'3533#67'675#$$$-l-$  ?  9%##5) %µ0    +!`ÿéíÈ&,7#"''3255#3673#353#5335##5&'í  f9  $ L+- ÈÆ  ¯8L;LL;L„ßEÿìôÉ )7#'6553533#3#535#3533#3#535#ó} +((1r.+-++5…=-ÉOA; 2>a2P!!I7òË73#3#&'#5'67#535#735#cy4D1 '& "/C2SSË< "44 XÿéóÑ $*0673673267#"&53#735#35#35#'33#'67&'l6*,<- 9%aa;;;;;;3|.  I Ï   T;   :\   ?ÿêôÑ#'=J73#3#'66553&'5##5#35#3353353673267#"&5'67'533¤A1,€ B*(    ) "Ñ =:- .!X =,3"    ! URÿèôÐ*:Nb73533#&''6655#67&''67'77''67'67&''67&''67&''67&'WCBB; 3:&"C     `           Z    ¸+:1: 6?+      .       0ôÏ ,26:V73#53&'733327#"&'&''67&'767#535#'3#735##"''3255'7567#53O+p/h$   #  aa<DJP767'7&''667'7''6'67&'7&''67''6'6'63'6Ž  /5A  H  #+ +#1-C0 -4$D D7*a \Ñ              2   (WÿéîÑ06:73#3#"''3255#3#3#535#535##53&'#53&'367#35#£A #  -$$E"",% ?A ##Ñ   w55’¤> ‚PÿéñÐ#'+/73533#3#535#'6'&'#53#=#73#735#X=@@H¡E=q  P  ˆb?? º**  ¥ tt CC9/XÿéóÐ3;?73673#3#3#3673#53&'735#535#535#53&'#5##535#„&  ?77CC ›#EE::B qXXXÐ     žA A'XÿíóÐ-159=73&'73#3#53&'#67#3#3#3#535#535#735#33535#335a9?#—%[9.€8>>D›D;;5""5&[""5&¼    N.,UÿéõÏ'/37;?73673#&'#5'67#53&'735'2##53#'#;5##;5#à ! 3" %" "0A4^ƒ:$$(($$((Ï   +(  Î ggW$@ÿé¡Ð .73#53&'3#735#367#"''3255'757#rU"KK%%L   !(2Ð  35.  YÿèöÏ #'+/5;73533##5#3533533##5##5#3#735#35#35#'67&'k4::4 6 6 ||VVVVVV I Á gI ) ) "    PÿèöÑ )/C73#5##536'6'&'3533##5'67#&'3673#&''67#M`%51 ###  E [=K<+ 4: ,5Ñ no€!   $$-    2  %' UÿéôÏ(048<73533#3#535#&''67&''6#5##535#3#735#]<AAHŸD<  _  $cccCCÀ::        =m mRA ) WÿéôÉ(,04:73#3#3#3#3##5#535#53&'#535#535#735#335335367#\>::F! $?HHBB5C99>*F!2É9 ‚ Sÿé÷Ð 473#53&'3#735#3#735##5'67#535'673#&¨CšB2‚‚^^DD$$% "6D1=< 8D7! #Ð$R2$ k./    AëÏ73533#3#535##5##5baaU½Tbׯ¼9./ÿìóÃ7#3267#"&553#"''3276Ó/ # V  °¨   ¿I.   ÿè|Î7373&''67&'67#67# $ 5 " "% ¢,Q,  "$@ %7#Œÿîé¼ 7#5##535#é555¼ÌΣ`ÿéòÇ %7'66553'#33673267#"&5‰ tLL< %   €D5 1#_G4! *  + ' kÿóóÏ7&'3#3#3#535#535#¤  &711<ˆ8//6Ï &7<<7`ÿéëÏ$*736733#"''32665#'6767#7&'&'i.@  , ,  K  ‹&&Y6 2?5B 0Of[ÿéõÏ73533#3#&'#5'67#535#r-22=4 !%)6-©&&%2$$2b`0%(2%`ÿéöÏ73533#3#&'#5'67#535#m4992)%&&/4©&&#,&%)`_/$)3#iíÏ 73#53&'&'73#536ˆO¼V!  h @Ô} Ï %   dÿéóÐ7'673#&'#5'67#53¡=4 9. !-6° );5ss4 ";eÿèïÏ!&7373#"''3267##5'67#'672735¥.66 # "" ##Ï#7@ 0iZ&" ($H6ZÿëòÆ 73#3#33#"&''675#735#vm-44&)  -GGÆU&3*: e1Zÿè÷Å"&7#3#67&'#67'5#'6553#ìmq0  2  ZZÅC   $Q`  mB4 4@^*YÿèöÏFL73&'33#673267#"''67&'#67#"''3255'675#535'67&'  !.-    "    'R  É)!)* &%1( ."<  0("  kÿéòÎ 73&'73#3#3##5##535#k:9‡vvvvsMMM² RR2 bÿèöÏ%+73533533#3#535#35#35#35#'67&'m8$888888 %D °nnDC/  XÿìôÊ )7#'6553533#3#535#3533#3#535#ór#((/k(#%((1{6%ÊOB: 1?b2O  ]ÿèôÏ3873533#3#535#'67&'3&''67&''667#q0//;ˆ90 O(D  "% $  $+ 7 ¹*       $ XÿìõÏ=CI7373#3#&'#3#"''3267#3267#"&55'67#5367#7&'7'6h0=BQ  / M   /# .& )*[¦)  -9 E  9    nÿéôÐ#+/373#327#"&'#67'56&'#5##535#35#ß 4/  * <"fNNNNNÐ   ]& Jm m'<YÿéëÇ$(,7#"''3255#'6553533#3#535#3#735#ë  ]K??ÇÄ  ¬SD5 5?_16=]ÿéñÏ,073533533##5##5#373#3#5##5'67#35#k##2CK S?  ),??³- Z F "Z)kÿéõÏ#'+73533533##5##5##5##535#33535#35#k$""$U!!3"U!!3""²%’’7%%%^(((eÿéóÏ 67'2'6'&''&''673#3#353#5#5335#535ä 3J=5 )"   `6==$m#==Ï   >  0%A 7%0]ÿêôÏBHN73533#3#3#676767&'7&'#"''3255'67'67#535#535#&'''6i777007e F  }X::º**  ¤ttCC8._ÿéóÐ3;?73673#3#3#3673#53&'735#535#535#53&'#5##535#†'>88BB’??66<mQQQÐ     B B(XÿéôÏ17;?EK73673#67&'##"''3255#5'67&'767#33&'35#35#'67&'e)A"  *  )   7 > +@@@@  `·    90  -5   E-(   ^ÿèôÏ37;?C73533533##5##5#3#3#3#3##5#535#535#535#5##5#35#335` *!!* …8==AA7b*¼!!( `ÿçôÏ#'-373533#3#535#735#3353#735#35#35#'67&'n233A”@22 fzzTTTTTT <à +   E_D ' &      XÿéøÊ 5973#735#3353353#3#67&'##67'5'67#735#i||$s u0   4   QQÊ87 3    . "  ! _ÿéõÏ'/37;73533#3#535#&''67&''6#5##535#3#735#f9<-/+  ) 8bKKKKKÁ   2 : Il l'<eÿèöÏ3:73533#3#535#&'''63&''67&''667#w-//;„6-S4  3  !'$ "  +º-         `ÿìöÏ)37;?C73673#&'#3265#"&55##5'67#3533&'#35#33535#335k(D&-     -G-²  J   V ';? ÿèö£"AGMS767&'7&'#'667'7&''6'67&''67&''6767''67'67'6f 1BBZ   ; 55 <7(< >#"%  : ; >< +T UB 8g j£        .   "  dÿéôÒ)-173&'73#3#53&'#67#3#3##5#535#735#35#l75#ŽR4$p/??>>.JJJJ¼   Q/0ÿéð›,AG73'67#&'&''6'3353#5#'67#535#3533##"''3255#&'Ÿ7YO, !f 8/LY  Y ›4 '     +1ªB2 '"    `ÿéöÏ $(.4:@73&'73#3#3#3#5'6353535&''&'''67&'ˆ')$$$$*s #####2  >  2Ï O *$%4 ^ÿèïÎ&,2:S737&''667367&''66''6''6#5##53733#"''32765#'67#ƒ  @     @ ƒd#:   ( 3 + Î    (     @))0>:,`ÿéóÏ"&6:>73#&'#5'67#537'23&'#35##"''255##53#735#× D! T ( 1100U S@@ Ï @ ')Q  ;Uf.cÿèôÎ0K73533#3#535#3533#3#535#'3533#7'75#3#3267#"&55#'67#v-..8~3-<FF!ˆ(   + #"À6 2! $2  #`ÿçõÏ #J73533533#735#33533535#335335#3#3#67&'#67'5#'655p%#|#X#qffr,  (   ÁJ- *(    -- 8& $7aÿèôÐag73673#3#3#535#535#53&'33#67327#"''67&'#7#"''3255'75#535'673&7&'6//:…8..50(&   !     +Ð       ]  (       RÿéöÐ&*.48Lf733#"''3255##5#'655367#'635#33535#73573#"''3267#'67#3533#3##5#535#'6u    "   '  C   Д %!!%AA RJ o6 , "F  22 ÿûTÊ736753#5'537+ ʱ‡¤ £—ÿëö¡@QUY73&'73#3#53'#367#733#3#3#3#3#3267#"&5535##"''3255##535#35#*+r)#OTTMNJJJJFF$-' NN 99999   (    b T g ) aÿéñÏ#CGKO733533##5##5#533#735#73#735#3&'73#3#3#3##5'65#5#35#‡ $$ ##==6==D2400005l 6&&&&&Ï  #.." J`ÿçõÐ%QUY]agm7'673533#3#67'5#'67#53535#'673533#3#3267#"&55#'67#3#735#35#35#'67&'s     *      >ttPPPPPP  F °      )[A $ #     ÿèñ•!%)73#3#&'#5'67#535#735#33535#335%´OaO"3 8$!9 1#M`Q>>R<Ž>>R<•V  "55  42rÿéòÁ73#3#"''3255##5##535#r€6/  08Á"i  R’’qƒ"nÿèõÉ'7#3#3#3#67&'#67'5#535êRJJII[3   / É   EM ZliÿèóÏ'-735#535#53533#3#3##5##5'66&'m6++3366..=†s@-"! | M<>O(*!  jÿèõÐ#'-373533#3#3#535#535#3#735#35#35#'67&'t244..:‡:--2ppIIIIII #<Ä     DbE ' '     eÿéóÉ %)/573#3#53'#735#35#3##"''3255#735#'67&'ur5;‹;(LLLLq.   0MM `  ÉE * % E3( %*  bÿéñÏU73533533##5##5##5##53#'67#53#67&'#"''32654''67&''67&j$ $„]LL  (…C      (- ! !¾ ,,)             ÿéŽÎ .7'2'6'&''&'3533#&'#5'67#„ 0F91 (    411  &*Î #   =  AJ(( ÿé›É 06<73#3#535#5#35#3353353#3##"''3255#&'''6‹+&%*O%%gtt=  >m  E É==,:( %   ÿé“É $(.473#3#53'#735#35#3##"''3255#735#'67&'n19†8(IIIIn+   0JJ V  ÉE  * % E2) &*    [ÿéëÎ73#"''32765#'6&'W  L"  ΂  n#/  ÿïòR !7&'7&'''6733267#"&5… Y • /  -#R  ( 7 `ÿéôÏ73533#&''67&'765#nF''$ &% %EŸ00>$+# 1_ÿéìÏ73#"''32765#'6&'‹Y   N   σ  n#2MÿêèÏ73#"''32765#'6&'yg\  Ïf@ j!- ƒëÎ73#"''32765#'6&'¤<  /   Î n P % !ÿëîT732677#"&547#5ÀF799 4M_hT   ÿòðÂ7333267##"&54767#ºt0822G$!f–Â\3 !$Q!ÿëîG7327677#"&547#5ÀF796 3L[dG  &ÿìëc7333267##"&5467#0•]%6%'I#$Kec,  &%ÿðî~7333267##"&54767#&®j+3,.E![„~:  3€ÿñò¾7333267##"&5477#€aG   5J¾  "' $ihÿîòÏ"736773267#"&55'75'7› AC03'.Ï" ;@ %  D9l@ò£(733327#"&547#''67'767#53˜)      £       _HõÏ(733327#"&'5#&''67&'767#53”-    Ï.%     ]ÿéòÏ*733327#"&547#&''67&'765#53Ž2  "!  %%Ï,6&#$&"$7 )" 58 AÿèøÏ*733327#"&547#&''67&'767#53;  & +,  %%Ï,6&$#&!%7 ) 87 gõÏ(73533327#"&55#&''67&'765#q.     ±M# ):  $&  ÿêó„+735333267#"&55#&''67&'765#DP  <64 Coh # Z  $   ÿêó„+735333267#"&55#&''67&'767#!?M  987 ?oh # Z "  `ÿéìÁ73#"''3267#'667#'6m   &) $2  Áš"%‰XNB`0! 'UUïÉ#737&'#"''32767#'667#'6ao     : + É  + 1M &$ SZæÇ73#"''3267#'67#'6_‡  & B ;9ÇL5A4V^ñÈ"737&'#"''32765#'667#'6`p    6 -  È- ,D  ^ÿéìÁ73#"''32767#'665#'6rz  "%$%0 Á¤3.qfEGU## ÿéóË73#&''67#53655'2Ò '/jaPJN N_c&+ZË "?&)ED*+; ;ôÌ7'673#&'#'67#536v&!f90kG6<F 6GU¯ !++ UÿéòË73#&''67#5375'6ß <8. )6=34.BË7J?;!I (AÿéòÊ73#&''67#535'2× "KI3 07<@DAÊ'H B;'+=5 ÿêòt73#&''67#5367'2¿ "f\L NTPZa#Ht  +)  ÿêô’73#&''67#5367'2Î $,j_P S [ U [`%)W’ ,40) Y\íÏ73#'67#5367#'2&'Ú>E1 '3<8 Ï "  < uÿêòÎ7#3#&''67#535'6Ý52$#*01 CÎ4D""66"+=4  ÿæ‹Ï(73533#3#&''67#53655#'6'$$.1 $ * 37À ** +%.  $LÿèñÏ&73533#3#&''67#53655#'6n66A>( ,3 49>$ Ä ** 773!#.   jÿéòÏ%73533#3#&''67#53655#'6‡))42 "%( -1 Ä ** 762#/ ;ƒÏ,73533#3#&'#'67#535#3533#7'75#(((/   0(*&&&/:0*Á    >VÿèôÏ 73#7&'''6'66 1 D `@5 19Ï—}"' &#5% &'+4 .U¦Ï7''67'6767767'”    M '%=8" ?&QôÌ)73673267#"&5'33#7'275367' +   & H)))7; Ì+   _+ KIfÿèðÎ73533#3#5##535#35#f;;;0M1;MMž002qq2~9¬ÿðêº 7#5##535#êºÉʦ”TÿéôÐ%+05733#3267#"&55#'67#5'667#367#335ˆA )(  73 + ". 4 !5)Ð  K;  ?7! )@   9'YÿêóÏ,27&'3533#67&'#"''3255'675#&'Ì  \;::      +; Ï   ''1 #B  <$$*. NÿëóÆ 73#3#33#"&''675#735#nt/77)- # 2NNÆU&4,8f1cÿéóÎ 37'2'6'4''&'3567#533##"''3255#á 2H;7 * !  @Xt;;  @Î  d , (bÿèôÍ ,27'2'6'&'&'3533##"''3255#&'å 7OB6 +  [##   [% Í <I  F gÿéêÉ 73#735##"''3255##535#35#mwwQQj  ]]]]]É>=x  2‘';\ÿéóÏ#'+73533#3#3##5#535#535#35#33535#335c<==88BBCC66<##5$Y##5$¼d''d;@Sÿé÷Î1;73673#3#3#'#3##5#535#5'67#537#537#3533&'d99>9?S )::<<* &#*4- !# ¼  ** D SÿèóÐ"',73#3##5#5367#5335#335367#3355#•A#44Y &)##6$Z"6)# Ð m44 m-I  M ]ÿéóÏ(,073533#3#3#535#535##"''3255##535#35#e7==66D–?..7}  OOOOOÀR\  $t 0]ÿéóÏ'+/736533#&''67#3##"''3255#3#735#g959#. 3 –   nKK))¶     9W  T:UÿèìÏ573#"''32765#'63#3#353#5335#535#'6yh   ^ ?'++a.. Ï –!€ 2$43#2 BÿéïÆ (7'66553'#33353353#353#5#5335#q hh[,e -‹)D5 1#_;*&)88):7)E :)7\ÿéñÎ -7'2'6'&''&'#5'67#53533#&à 7PB7 /    J )7<>9% Î #   gJG $$YÿéóÍ%+17'23#3#353#5#5335#535#536'&''&'æ 9QC5 ;DD(t&CC6Z+    Í 5'D :'5Nÿé§Å73#7#5'75#35#35#675#NX   ÅŠ/*—##W$a'Gÿï™Ï 73#'635#53#3#67'5#f'/   4  Ï  T$$9 D]ÿé÷Í #06<B73#5'675#73#5'675#&'7&'&''6'6'67'6a@ .J@ .5[ ) +& .# * +/ #5 7: *R SÍU  U      5       +YÿéðÑ K73&'73#&''67'763353#3#"''3255#67'7&''67##5367#Z@@–a    Q]9G   ;   84½    11CI  2   PbUÿéóÑ;73#5'67335#35#3#3#"''3265#'67#'67#'67#{mt imPPPP'›ff  %  )  !² C:  )& ';"* #  CÿèöÐ $*06<73#3533533##5#'6553&'#3&'''67&''4'©8w"I =+""  Q M  Ð &::-7#PP [) # QÿèïÎ'-3;W7367&''667367&''66''6''6#5##536533#"''32765#'67#z   F    G n'?   -& 0 $Î    '    ! A((/ : ",ÿèòI"73#3##"''3255#535#535'2Ô %-YYgg gg]]SZI   bÿçôÏ#'-373533#3#535#735#3353#735#35#35#'67&'q022@’?01 exxRRRRRR  ;à +   E_C ' '     lÿûÄl7#"''3255#'65535#35#Ä   &%%%%l^  ))-[ÿèôÏB73533673#5##53'3#735#3#3##"''3255#535#535"'2} p aa::S 88DD   BB77:È %% ))2.(      NÿèõÌ&Nf76767'33#"&55#'6653&'#33#3#"''3267#735#5'67&'767#67#53&''67&'µ        -# JD $!'   +     0N 5I  Ì    # +!93 8          HÿéôÏ28<@FL73673#67&'##"''3255#5'67&'767#33&'35#35#'67&'V/H'  .   -  &= D /HHHH j·    :0  -6   G-)   ZÿíñÏE73533#3#535#3#735##5##5#53#67'7&'3#3#535#535'6_=AA3y3= ttNNsq4d4   55@“@55Å   !% ''%        VÿçôÑ !%)-39?7#5##53'73#673#5'675#5#5#35#7'6&'''6ñm:3\$1Gw ( %ZQQQQQ  P#  "À%%   ]SG   i }   Yÿç÷Ò !%6?HV\bhn7&'6'&'6'&'63#735#&''7&'7367'7367'733265#"'&'&'7&'&'7&'Ö %  % ‹‹eeQ   K 8 7  L   D   -   D   Ò         ,I(    2NZNY%# %2        OÿèòÑ#8\afjp733#5'667#35#7'53373267#"&553633#3267#"&55#'67#5'67#367#335&'zI‚ D>^^(4 &A   NH /   . $+ F @ !%6* Ñ $   /  $     # '         SÿéóÌ+/37GKOS7#5'75#53#'35#35#5##5'75#53#'35#35#5#7#5'75#53#'35#35#5#ñlUBBBBBB1 J+ƒ1 J+~ D>3 % & f F:/ $ %   F:/ $ % …ÿèõÏ#73533#3&''67&'#535#67#Œ('''    $(4 +­"",/    &,nÿêŒÏ&*.73733#&''67#3##"''3255#3#735#..1  %) ~   \ AA¶    9V  S9\ÿèõÐ73#&''67&''667# [! %' ( ! >Ð!D, 1 0 :"= ÿò€Á73#3#7'675375#m&"2=3Á;I  ~zœ ÿ醯!73#33#537#537#35##5##535#s<7 z$'/(@???Æ5#O#HWW7%ÿèÒ 073#53&'3#735#367#"''3255'7567#G0r+]]66d  1 GÒ -51    ÿé{Ð !%73&'73#3#536'&'#5##535#),iLnA + ];;;¸  SZ Z>,ÿëŒÎ )73353353#3#3#735#76767'7&'qyykkDD  7C Ã**08*  ÿé‹Ñ/5973#3#"''255#3#3#535#535##53&'#53&'367#35#P3  "=! 31 Ñ    x55“¤ >‚ ÿèõjG73673673#3#&'#3#"''327#3267#"&55'67#5367#53&'J  +fw-# &D]  Q"=E. $6KL#g           qÿéòÈ'+/37;?73#3533#3#3##5#535#535#535335#735#33535#33535#335wv1 066550 21N1B%ÈM"".+ ZnÿéôÏ.:@F733#3'67#73265#"&55'75#'65533533533#7'6'&'¤77<'     + hWCÏ       E;, +7O¦LLLLRÿéía!%+17=7#3#3#3#"''3267#55#5#5#&'''67&''&'âSKKKK^   ´VBBBBBC  K  ‡  Aa  &N   qÿéóÐ'+/73'73#3#53&'#7#3#3##5#535#735#35#v20!‚ I((k+7766,EEEE¼    Q/0 nÿéîÇ #04873#5#73#5#&'7&''6''63#5##53635#35#r<*A;): I ! 5 !4G$GGGGÇ_N_N      j j /;nÿì÷Ñ *06FL73#53635#'673&''67&'767&'3&''33267#"&5''6 ?rLL       7 ?     Ñ {{ v[      O 1  3!pÿéóÐ H7'2'6'&''&''3#&''67#537'67'6776767&'â -C71  '    _ 8, " ( (/  Ð       4       $kÿéïÏ)?S73#"''32765#'63353#'67#5336'673#"''327653353#'67#5336‰W  N !&   M  <$$  ÏL .  !   V  K - "  oÿéóÏ4767#535#5673#35335#535#53#3&''67&'  V,. (./ '  6 [ ]]^   tÿêòÇ 5;73#3#535#5#35#3353353673#&''67&'67#367ww# p!%C  d'A )'  5 ÇCC1 E     ÿè÷Ï735333267#"&55#'655#(*= F6¤++™ ŠZ9 6PdÿèõË'+?CIO73267#"&553'#33265#"&553'#33533533#3#535#35#'67&'| 73 7m$%!.$$  G  Q<,   Q<,O+      ÿìPÏ73'67#'6367' #   Ï %$m  `ÿéöÐ %+17&''63#3##"''3255#535#'67&'§% " !,B77   ;; \  Ð #"!A  =8 $ oÿëôÆ !.73#735#35#3267#"&5536'33#67'ovvPPPPe   g&&Æ_9;= *  _1  fÿéìÎ)73'67#'63#35#535#53#5##56˜@  2!""U##%8UÎ  #, !!} xkÿéêÆ73#"''3255#3###535#qy  eXXQ7$$ÆÁ¨O [<*eÿçõÐ%QUY]agm73533#3#67'5#'67#535#'635#'673533#3#3267#"&55#'67#3#735#35#35#'67&'u    >      ;ppLLLLLL C Ð      )[A $ $    dÿèòÑ#8\bglr733#5'667#35#7'53373267#"&553633#3267#"&55'67#5"'667#367#335&'‡@s <4OO!-  8   F@)  ' & <5 0"   Ñ $  /  $    # '       ZÿéôÏ=LR733#3#53533#67327#"''67&'#'65534'33&'73#67'675#'6¥++8…M&    @Q l5)  Ï###!%  05-" %(>    ; :tÿïóÎ!)-1573533#3#67&'7&''67#535#3#53535#35#35#€'--7<  +/(2'j     ¸    e???-----tÿèõÏ,0473533533##5##5#3#3#&''67#5367#735#35#{j-6* #& ' ! -3*DDDD½P !(   00 vÿåôÐ#'-373533#3#535#735#3353#735#35#35#'67&',--7~5,,YllFFFFFF  7 Ä ,   CbE & &   lÿèôË'+?CIO73265#"&553'#33267#"&553'#33533533#3#535#35#'67&'Å 5S 4$!"ˆ,!!  B Q<,  Q<,O+     qÿéõÏ'/373533#3#535#3#735#3673#53&'#5##535#s566/q/5llGG„aIIIà   *0#  )= =!qÿé÷Ñ3:73#&'#5'67#535#'2373#&''67'7#367à 2% #11<#K  ( &/ Ñ''     {HòÊ$)733#"&55#'6653&''67&'#367Ö "  a   "   Ê   ;     ÿæîj"&*06<73#3#3#"''3267#&'7#53635#35'67&''&'dY±±ª   - z6%|||“ aj4   Z:      ÿéîn",08<73#3#3##5#535#53&'#53'37#'6553'#3#5##535#µ0 $4..%%.!+| [44"""n   1 ,+*3# <<$-ÿëÎz%/37;73#3#3##5#535#53&'#53&'367#'6553'#33#735#¦   P>++ z  $$ 6 % !36'=A òÏ -37;73#53&''6553'#373#3##5#535#536'&'3#735#ÊPQCP! $-=11 Ï  I;;;C2!33  4R05î¦#,04873&'73#3#3##5#535#53'#67#'6553'#33#735#|-12,,))1 C!Z661FF##˜   '.+ ÿêñ;73533#&'#5'67#eeR&. 6'%6 .'R/  .- ÿéï%.2:>73#3#3##5#535#53&'#53&'367#'6553'#3#5##535#¶+#3--''/ + #}[44  (( H.- '45B0&UU6%MÿèõÑ6BFJV7'67#537#5367#53&'73673#3#3#&'#67'73&'73&'#35#35#67&'j%1,2=(" DBGV' Y   $ FFFF/  )K     5 m " $  [ÿèôÏ#)/73533#33#53535#35#35#35#35#'67&'d8??3™.8OOOOOOOO  H¾xx-,,+"    UÿèñÓ4<@DHLPT73#33##3#"''3255##5##535#535#'6553&'5#35#5353535#33535#335²65+ +0  +((0< 00(:D+I+Ó   T  !i  C3 5=\+ (   C ) YÿïðÈ #'+/373#3#735#33535#3353#3#735#33535#3353#\’’ $$6#Y$$6#pŒŒ%%7$[%%7$y——È B' $ # B( $ %PÿêôÏ=LR733#3#53533#673265#"''67&'#'6553533&'73#67'675#'6 ..;M%    DU  l8-   Ï##"$%! 15-! #)>   < ; cÿçóË #'+1773#3#535#5#35#3353353#735#35#35#'67&'d-'„',Q&&kwwSSSSSS B Ë 55 $,bE & '     DÿéóÏ&*.26Kf733#"''3255##5#'655367#'635#33535#33573#"''3255#'67#3533#3##5#535#'6q        *  J   $$ Ï • )&&%@@  TGq7 $+!E 11  UÿèôÐ .4:73#53&'3#735#3#735#3#3##"''3255#'67&'¨>‘?/YY ??,ttŸF  G& Z Ð 'U8( ;     PÿíóÏ>F73533#3#535#3#735##5##53#&'3#3#535#535'67#&'7#6[?BB8ƒ8? ||VV{yn %88J£E55 S# Å  % !((          RÿéòË >BFJ73#735#35#35#73#735#35#35#3'73#3#3#3##5'65#5#35#a>>6AAG96////8u =*****Ë`E ()C`E () E   ÿë‡Ð+17''6767&'3#3#'67#5365#'6&'f ''+F)582 (,0 :Â! ! 6( B   ÿè„Æ%)-373#3#"''3265#&''67#'67#735#35#33#`8 M     ::::=PÆSVB      21X( ÿéÏ'/373533#3#535#3#735#3673#53&'#5##535#566.p/5kkFF #„dHHHà   *1$ (= =! ÿéŽÈ159=AE73#3#"''3267#3#7&'74''75#535#'67#735#33533535#35#qKY  -"""')""    K#È>iU/ /  qÍ737533#67'7 ,5¢…«DN gÿêõÏ#)73533#3#3267#"&55#535#35#'6u155)  :+1@@ $!¸G? EGN!::cÿòòÎ#73533#33#53535#35#35#35#35#p277-(2BBBBBBBB·‹‹;655`ÿîòÂ4873#"''325567###535#73''67&'767#3#iw ]. C4       \‘‘Âs y "d nR@/   y^ÿéóÑ<73#5'67335#35#3#3#"''3265#'67#'67#'67#‚gnbfJJJJ%’``   $   '   ²C8 )& ' ; ) #  MÿéöÏNRX73533#3'33#6735#"''67&'#3#3#3#67'75#535#535#535#535#75#7&']##.**      " -8!)! a  ¸="+1  #> —pB  uÍ7'675#535#53&'73#3#6r02##(& ') *;2 27 ÿéŽÏ(73533#3#535##5##567'5#'665/,,$_&/pKX   º8,-*8   9#  & ÿð|Ï(73#35#535#53#563533#67'675#7?-e+((09+Ï jb„ !ÿïyÏ$73#35#535#53#56'675#53#67?-eM5* &^%Ï jb©.)tÿèöÐ 1573#67&'7''67#53&''6733267#"&5'3#¶0;  %( ,= Ð #  ! tK?L OheéÎ&7773267#"&55'75'75'2Î '0UVgi! ,(WZHJ"(XÎ      ÿì÷Ñ(777327267##"&55'75'75'6O 3 P+ Ñ.(2   4)- ÿéŒË(AOS733'67##"''3255'67#53&'767##"''3255&'#5'#5673&'75#35#q,    +0   Wt  4  +  U"Ë       We  4 .,K|+   A ÿèÉ -273#735#3#735#73#735#3533#&'#5'67#37dd>>66177W565  *;É3055<16ÿéÏQ73533533#3#5##535#35#3##"''32654''67&''67&''67#53#67& V- FF;   $) $ %|>   ¾,,-\            ÿé’Ë ?CGK73#735#35#35#73#735#35#35#3&'73#3#3#3##5'65#5#35#77,99>-,&&&&.a 2 Ë_D (*C_D (* A RñÐ,28>BF7673#&''67&''##'2655##535367#''6'&'3#735#† ?    M.I  "2 ?  11ª#     ( /JX&&  *   3&  jË73#3#5#53&': #?;N (ËlÿêóÐ !73#'63#3327#"&547#6¥° ¸ ¥Ð   7'0!,GÿèõÃ73&''67&'#367T“,$ & 13#  "ÃT<"%""0M*<0;LÿèçÐ 73#'3'6573#Ôn7Ðçç|C) '9oÇFÿèõÏ73533#&''67#W9FA?4= H9’==S1-FF,6ORÿèíÏ73'67#&''6ŒX;+ aJ (Ï RA!v  0NÿïòÐ73#3#5#53&'™ Fwl‚H ЋŸQÿêðÆ73##53#3#"''3265#itt)Ÿb ] aÆ<*G+KÿîôÏ,7#"''3265#532767#"'&&55'753753ä  &", :( ¤U$/ _Y d ! cB< D>BÿèóÌ73673#&''67'67#367L2_  #"8 55 ,B + š@ #  #"$ 5gÿìõº753#3267#"&735#gzf- 7(RR¹oC   hI`ÿéèà 7#5##535#35#è`````ÃÚÚZG¡G^ÿéìÏ!7#"''3255#&''67##5373ì  * *?¨§  #A­¿''DÿèôÏ 73673#'67#''6767&'[$Z],+ !u %,! ¨fF GXX#)  -RH,JÿéõÐ "73#'63#33267#"&547#rhr ll jÐ  ! ! )bÿéóÐ)73#"''3267#'667#53&''67&'”G  9  Wo%# &! # Ð3""V3   JÿèóÐ+73#"''3267#'667#53&''67&'…S  E !j„*( . ) Ð 3$#Y2  TÿêðÁ73#3#"''3267#5335#367#TœGB  y)BU,/Á*q%bQnnIÿèõÏ 73#7&'''6'66š4G q4` 6@ÏŒm!'( )! ,J,JÿðóÊ733#3#53533¡88=©!!ÊGj••GÿèñÏ733#3#5#'65533¸%u\J!<Ì< jW7#+@n?lÿéõÐ$7367&'#"''325'3'67#®    4-   Ð5 ."!3R  ‡.#1?JÿèôÇ#(733#"&55#'665#53&''67&67#Í" 3  (' ,. ,,LÇ<  0#  *v3  YÿééÏ 7#5##535335#33535#335éj??,,?+j,,?+¡¸¸..I777888SÿéðÏ73533#3#3##5#535#535#X>AA<©&&"'>>'"[ÿòñÇ7#3#5&''67&'76ð‚–l  ǯÕ&#   GÿêêÏ73#'6753&'735#²8s; 6__§\%)3_^6 ÿéâÏ73##'6753&'735#–LŸ Q N‹‹§U$,"6WW/ ÿéyÐ753&'73#'6735#"% D11TUZ<$ "I6lÿêìÏ73#'6553&'735#À,X,'EE§\># 8W_7Sÿæ÷Æ#'-273#3#&''67&'767#535#35#3353655#335dŒ>785 2 ) % 46<""4#W!"4#Æa    a>? ÿéá\ 7#5##535#35#á›››››\ss)A^ÿêëÏ73#'6753&'35#¬ 0c2NNÏ\?"1_k6 ÿê„Ï#'73533533#3#535#35##5##535#35#x(>:::::±  Crr*AÿúˆÏ#)7367#53533#&'#5'3#7'6'&' #""   M`b  5  ÃŽ#MM =D'É ÿç“Ï/37;?CGM7367#535#5#53535333##3#3&''67&'7#735#33535#33535#33567!#0,,,,1<;  ',F,J08   8-   -    ) G; QÿéêÇ7#5##535#"&55#'7335655#êqq  WqÇÞÞ¹+ i/7" ~dix*/?ÿçóÏ"7&&'67'7&''5'6556Î  ! =ÏHT$%WR¨$ ²+_< 9Z9]ÿéäÄ 7#5##535#35#35#ä_______ÄÛÛ<)d)d(DÿèîÏ#(73673#"''3267##5'67#'676735œ!?  +1 2* --"Ï#8A 1ia3"( '#H6FÿéòÏ73#'675353335#¡Gt,Q~``¤N41FFW*SÿêòÏ73#'675353335#¬>f!(FnRR¤N4-JFW*uÿéòÏ73#'655353335#º3T 8YAA¤N5:;FW*zÿïóÏ73533#3#535#3533#3#535#…'''0q.''''3y3'­""$$c$$%%rÿêóÏ28>776767&'7&'#"''3255'67'67'6&'''6Ú . ! !&   D 6Ï 5  D  <   #  lÿéóÏ#@DHL733533##5##5#533#735#73#735#3'73#3#3#3##5'65#5#35#‘ !!99188@*(%%%%+a 4#####Ï  #..#  J lÿéõÐ#'>B[^73#3#&'#5'67#535#53635#35#''67'677767''''67'6767677'¨ 6-  .7  A        O        Ðf 78f 6H   '$   '"  uÿêøÇ $(,0487#3#25267##"&55#535#55#7355##373535335ï((( %  ###@ D/U/Ç8h  g8ʺ° º1*nÿèòÉ -73#735#3#735#'3#735#3533#&'#5'67#ƒWW33 77Q8876+  ,É82876  76nÿéöÉ 4873#735#3353353#3#67&'#67'5'67#735#uvv!j„„ q*   -   KKÉ75 4    4 $  $ wÿéòÌ  5;73#535#535#3#735#'3#7'75#3533##"''3255#&'„ccPKKP388P6T  T  ÌJ  B75      iÿéóÐ@FKP733#67&'#"''32654''67&''67&''67#5'6367#367#335’4"9       # '   ,) 1Ð  9   (*     - - lÿéóÏ"&8<@73#&'#5'67#5367'23&'#35##"''32655##53#735#Ù ? N   $,)++O  K77Ï >'+Q ;Uf.lÿéòÎ(048<@73673#&'#5'67#53&'735'2##53#'#;5##;5#ß  *  (5)Hl.Î   '$   Î hhW$ sÿéîÇ #/3773#5#73#5#&'7&''6''63#5##5335#35#t<*A9': H  4 2E%EEEEÇ_N_N      j j&;ÿçéi#'+/39?733#&'7#'67#5'6367#35#33535#335&''&'WM3      * MH 99J9ƒ99J9+   i <    1  "     sÿéóÏ#'+/DJ73533#3#&''275#535#35#33535#335'#3533##"''3255#&'u244/ +8,,2,I,ET  T!    JJ *,& !      vÿéòÐ'+/73'73#3#53&'#7#3#3##5#535#735#35#{/-|E&&g)3322*AAAA¼    Q/0gÿçóÑBFJP7#35#535333##67&'#"''3255'675#535#'6553&'73535&'ðe&%     &5?  ½4 ##   "'    ! C3 4=[ 0$.  nÿèðÇ9?E73#3#"''3267'6765#735#73#3#"''3267'6765#735#&'7&'p;"&    * (C;!&    *(: N Ç:h!   <:h!  <_   jÿéöÏ%*.?EJ73'67#&'''673&'67#3#3##"''3255#'67'‡ &  F)  / 8>>q/  / Q !Ï <-     K* 89 6 )pÿíôÆ ).>7#3#3#535#35#5#73&''677&'#3673533#3#535#±? 1<  g0229ƒ70Æ6ˆ)>>w8&   $)ŽvÿéóÏ 77'2'6'&''&''673#3#353#5#5335#535ä .C7/  $   S+22]44Ï     ? 1'B 6$1xÿéóÐ&.26:>77'7''535633#"''3267#'67##5##535#33535#35#¢ !A ;K/K/Ð /   LE/5 .Xq q+D[õÏ"7367&'#"''325'3'67#y ( ;#   dX@ 8AÏ    ,+  >."BÿéëÏ#)736733#"''32765#7&''67#7&'L;O:    3;9!  Œ&&Y7 T 9,.ROCÿéôÏ73533#3#&'#5'67#535#V>BB<.*&*.*8>©&&&*%*1mk9!#0&AÿçòÐ '-73673#3&''67&''67#67'&'V'\_R %## %  , $-   £8!     0N4!o  WÿéçÂ7#"''3255##53#735#ç  k)??¾  §ÇÙ6b@]ÿéæÏ73353353#5#353#5#5335#]&((*v%9»?SS?XeMj _MeZÿçóÑ27&'#673267#"''67&'#67'53&'3Ë  4A ' , >Ñ !<" +%Em  * ÿèóv"7367&'#"''325'3'67#x ' 8$   _T< 5>v  .;  S5(8ÿíóÏ4736733#'667#7&'32767#"&55'67536N'ab&r &" " ž9B =3A M )   M<9ÿêôÊ )7#'6553533#3#535#3533#3#535#óŠ!.//74.200;“D2ÊOA= 2?b2O  IÿéöÏ ;733#5##533'67#&''67#3267#"&553#"''325–DqA0*C 6   u  A  Ï$%) j)R   d  zE  HÿêîÄ%+57367&'#"''3255'67567#&''3353#5#_y     "^ €“Ä  $ (2 #  ¡TÿéòÎ"*.273#327#"'#7'56&'#5##535#35#Ù?7 <& NzbbbbbÎ 0  [* Fl l'<HÿééÎ)73'67#'63#35#535#53#5##56ŠL @ *++l,,/BlÎ  !* !!} x;ÿèëÏ473#"''32765#'63#3#353#5335#535#'6c}   t J044n88 Ï ”"  2$43#2 ;ÿéõÏ-73#'6553&'#3&'3733#&''67#  ;DHmm  L,<4 1,9 5)Ï ?>2 1:W #   **)*LÿéóÏ.287#"''32655'675#537#'733#67&'37&'©   $)!I]KQ-D   (A D _ ,) .8 6   £R MÿéòÐ+/373#67&'7''67#53&'#"''3255##535#35#¢DZ"$ 6=4IR  ZZZZZÐ     `i  )€$4OÿéóÏ(,073533#3#3#535#535###53#"''325'#;5#X=CC;;J¤F33=tW 5""""»2t\  G""eóÐ"7367&'#"''3255'67#53x & :% A 9BWÐ    $&  MÿéõÄ.4733#67&'#"''32655'675#535#535#&'dnE  (   $)"KrYY[ ÄM   %. .W HÿèöÏ*0673533#3'67#535#&'36533#'67#7&'&'^5::C  ‚A5 !OBHD 3E e! ¸ 1  5*'%>  ;@ÿèïÏ'-735#535#53533#3#3##5##5'66&'PB55>>AA88IŸ‡P4,/+&% #| M<>O'+ #  EÿéòÏ#'+73533533##5##5##5##535#33535#35#E$6--6$›g++>)g++>))¯ )‹‹5###Y%%%ŠÿïôÏ73533#3#535#3533#3#535#”"&&)c'""%%+j,"­""##c%%%%FÿèõÐ59=AEI73673#33##&'#5##5'67#535#535#535#53&'5#3533535335z   ,4*!  &00&&0- =AÐ %%9II6 8'EÿîðÏ '73353353#3#3#735#3673#53&'W)+ ¤¤„„^^ '  '«/ Â**/<2  BÿèíÇ9?E73#3#"''3267'6765#735#73#3#"''3267'6765#735#&'7&'ND,3   &7 *2TI,3   &7 *6R d Ç:h!   <:i    <_   IÿéïÐ#)/7373#33#53537#5#35#3#3&'''6QABE=¥2>y\\\\\\ (" ¾ww0  BÿèïÐ,I73673#53&'&''67'6767767&'7&''67'6767767&'p+  '¨) /   h   Щ $.)(B( $.((C'JÿéóÉ'+/37;?73#3533#3#3##5#535#535#535335#735#33535#33535#335U‘@@KKFF=>**=-j**=-\/ÉO""/+ ZGÿéíÏCG733533##3#"''32655&''67'75##5&''67&'75##535#5#53#3j8$$'G    4  0C&##K88Ï"s    =s(   :yŠ" HôÏ!38AEI73533#3#535#733#"&55#'665#53&''67&67#'6553'#3#5#011(d)0¾   `  +b(Ä     E       . @ÿéõÑ 7;?CG7&'67&'67&'63#3#&'#5'67#535#735#33535#335k  C  ?  u’BO>' ,) (;H=++>/m++>/Ñ      -O  "84  /1 ;ÿèõÒ!%+17=733#5'667#35#33535#335&'''67&''&'}D - '5 9 **>*h**>*  t f    Ò qe  0M7  PÿéîÇ 37;A7#5##535#&'3&533#67325#"''67&'#3#735#'6îxxx_ P<      <//!ÇÞ ÞÀ®   & 22,  BÿëìÏ !%)/573#5##53&'3#3#535#35#33535#335'67&'šFJ"f+=Œ<())<*f))<*Q " $L Ï +,1\\6:+    DÿèóÏ#'+/7;?73533533#3#535#5#35#33533535#335335#5##535#35#D888.™,8d,,r, _____ÁOO -/[ [.QÿéóÏ#'+1FL73533#3#&''275#535#35#33535#335&'#63533##"''3255#&'UACC: 8I#!88A%%8'_%%8'jn!!  n,    JJ *,& "     IÿððÏ+/7#5##53&'7353367#53#3#3#535#53'35#ëx    <%a)<BF73533533##3#3#3#&'#'>77#5367#535#535#5#5#35#335O> (==?@N<. 6: :D:<;;'p>'';)Å  2 #%   2 ?8ÿçòÑBFJP7#35#535333##67&'#"''3255'675#535#'6553&'73535&'òŽ9++2,   $   &++9F ] ¾3 "$   %-    A4 4=\ 2#+  BÿéôÇ/37;?EK73#676767&'7&'#"''3255'67'67#735#33535#335&'''6VH-,/&    .**<+g**<+ IÇP  $+ %  00v   ÿéñI$7367&'#"''3265'3'67#x  8$   cT4 *>I   5%CÿéóÐ39=A73#3#3&'73#3#3#3##5'67#537#'65#5#35#okEZb& 071111;| "*2  @-....Ð    U  ) p""CÿèõÌ&Nf76767&'33#"&55#'6673&'#33#3#"''3267#735#5'67&'767#67#53&''67&'±      /& MF"'")   -    2Q 8L  Ì    # *"93 8         >ÿîòÐ"&*.4DJP73533#3#''275#535#35#33535#335'#&''33267#"&57&'''6IFFF;  @I&!;;F((;(c((;(  &f  u  ¾I I+ ) '   (  ,  >ÿêñÎ*06<B73#35#535#53#3#"''3267#'67#56&''&''&'''6Œ--h../Bh  y  N       Îa K3_ BÿçòÏ#'+/5;73533533#3#3#535#535#35#35#33535#335'67&'Q!.##,M==K+!4..))<*f))<*P , &O ¹]]_;+    AÿçòÈ#'+1773#3#3#535#535#735#33535#3355#5#'67&'UŠ%%*¥*""'':(b'':(+++ ! T& #ÈZ66<(   ?ÿéóÌ $(5;73#535#535#3#3##"''3255#535#735#'3#7'75#&'Y‡‡skksII!!  €€##kM$+!!  ÌK  @:  K   >ÿèñÆ!'-39?73#3#3#535#535#735#&'735'6&'''67&''&'S?AAL¨I??>++  9, $  v b    ÆcA   AA  † EÿéóÉ &*0673#3#53&'#735#35#3##"''3255#735#'67&'[‡@K©H1aaaa†8   ;bb r ÉE* % D4( %*  xÿèòÐ'+/473#3#3&''67&''67#5'635#35#67•KTU7@       5555Ð L    E2* @ LÿéñÏ37;?C73533533##5##5#3#3#3#3##5#535#535#535#5##5#35#335P(,%%,(“?GGII@n/½ *KÿçíÑ2=HL7&'3#"''3255#3533#3#&'#5'67#535#35&'75#367'35'3#` 3k  Y-,,(     (-  )  nÑ Ä  ¬J 58JJ     ,6» OÿéïÏ '+/37733#5##537'6'&'3#735##5##535#33535#35#•G|F? g kkFFll--?-l--?--Ï#-.!    220d d&9?ÿéòÊ -73#735#3#735#73#735#3533#&'#5'67#aooGG(DDBCCmHI=) (* *=Ê4177:  ":9HÿéñÈ 5;73#735#3353353533#3#3#3##5#535#53&'#535#367#R––+;AAJ=JJLL<F;3*BÈ8;   8 GÿïóÐ #'+/>73533533#735#33533535#3353353#3#735#3673#53'Q..™,u,««ii- 0¬(ÁQ0/+ / #  LÿéòÏ<@DHL733533##5##5#533#3#"''3255#67'7''275##535#735#33535#335v*,,***‹=I 7  $-4G<));*e));*Ï #N D  /  J[ ., BÿìôÑ#)9?E73#3#53'#53'367#3#735#35#&''33267#"&57&'''6 @(£+=&9,YYYY+ ! )k  x  Ñ   5 (K- ) "  " ' BÿéñÏ(048<73533#3#535#&''67&''6#5##535#3#735#KDEEN¯MD  h  'mmmJJ%%¿;;       =kkRB * 8ÿêòÏ=LR733#3#53533#673265#"''67&'#'66553533'73#67'675#'6•55D¢ V+    O a y?3    Ï##"'&" 45,"  >  % < ;AÿéìË "073#735#35#35#'33#5#'65#535#73#3#5##53uOO++++++80 ;1‡24"1ËgI ) ) 5`n; "qpK;;o@ÿëõÈ'-GMS73#3#3#535#535#73#3#3#535#535#&'3673267#"&''67''67&'NGIRGJ #",!   ‰  ÈY  3' 3   9 8ÿéøÉ+;K]q7#53#3&'7'#"''3255##5##5'673''67'76'''67'7''67'76'&''67&'76M«L:   41 % *6    A    M    @    · ’  „žžž£           /       LÿéñÐ #)/7;?CT7#5##53&'7&''33267#"&57&'''63#53535#35#35#3##"''3255#ëtA   [ a ˆ¥&'e”>  C½         '''4 >ÿéñÏR73533533#3#5##535#35#3#'67#53#67&'#"''32655'67''67&F'2++&z"':22__" 3§W    *59)!, +!¾,,-(           CÿéõÏ048<NS73533533##5##5#3&'73#3#3#3#5'6#35#5##53&''67&67#K1)'')1*=@7766B–@00000 )#. (+KÁ      ?    (     :ÿíòÐ "(048<73#'63#53#3#'#335357&'3#53535#35#35#»+2 +ZX++M +¸+)Ð G3I"  5<<<***** >ÿéôÏ$)-15;A733#3#5##533#'#5##5'63&'35#35#35#''67&'ƒIIS}= hh3 %/ ] /K]]]]]] f Ï ## [ Y  & & o    @ÿéóÊ #BFJN73#5'675#73#5'675#&'7&'3&'73#3#3#3##5'65#5#35#KJ!6UL!9@  h @*A?9999Aˆ C44444ÊW  W      4  U  ~ðÐ"7367&'#"''325'3'67#| % :  _O>2:Ð     ' )  ƒÿèõÏ#'-373533#3#535#735#3353#735#35#35#&'''6Œ%&&/o-%&L__999999*  à +   DaD & ' "     EÿçôÌ%+RW]73#33#5##53537#35#35#35#&'7&''332767##3&''67&''67&567''6NžNC„-<``````. A R !R  ( $2)    ]  Ì DD "             '  3  IÿçñÐ#'+/5;73533#3#535##5#;5#35#3#735#35#35#'67&'NEJJ?;E›–YY ††`````` !T à   00)U=    :ÿèõÑ6BFJV7'67#5367#5367#53&'73673#3#3#&'#67'73&'73&'#35#35#67&'Z (629F.'$LIOa- d " + QQQQ6 #/N     6 m & $   <ÿçóÏ#V73533533##5##5#3#735#335335#67327#"''67&'#&''6553&533&'7M'),,)'””+<     @ O À 8A     !$$  MÿèòÐ -159?EU[73#5##53&'3533#3#3#3#535#535#535#35#335335&'7&''33267#"&5''6¡>o?)**77AA8‚8??55)&6 J  W $   Ð $%-    ..   [$      AÿèòÐ -159?EU[73#5##53&'3533#3#3#3#535#535#535#35#335335&'7&''33267#"&5''6˜Hy@ ,..<ÿéñÑ QUY73#53&'3#735#73#735#3533533#3#3#67&'67'5'67#535#535#5#35#—I¥F6??BAA!!e&-((##-L   =  #7, &e---Ñ$+ ++   ,     CÿìôÏCGKO_7335#535#535#53533#3#3#35335#535#535#53533#3#3#353#3#3#735#3673#53&'O™¦¦‰‰bb ( 0±.ËT XX Sc  -    AÿéóË+/37GKOS7#5'75#53#'35#35#5##5'75#53#'35#35#5#7#5'75#53#'35#35#5#ñy _LLLLLL  7 Q/“ 8 Q0~ E@4 & & f G;/ % %   G;/ % %  AÿéòË'+/37;?CGK73#3'753#3#3#3#3##5'67#735#35#35#35#35#35#5#5#35#RD( &GA<<5555?‚   Q""Q Q""Q Q""00000Ë` \` H  E ()J @ÿéìÏ#CGKO733533##5##5#533#735#73#735#3&'73#3#3#3##5'65#5#35#t(**())!CC!!?CC J':<6666=} ?.....Ï  #.." P :ÿçñÑ#`dhlp7#5##535#535#53533#3#535#35#3#35#53#3#3#3#67&'7'5'67#535#535#535#735#35#5#35#ñŽN>>JJKK??--@-- 9) ;++%%6N  A  #9.''E)))‡#$# # 4    %     1-òÐ(,73#"''3265#3#32767#"&55'635A‘  † j_4ITA !KÐN3;  H !Nÿé§Ë73##5#'66556œ 3  %Ë /;5 4E:[ÿçõÓ)/U7&'67327#"'#'67&''7&'7&'673267#"&''67&''7&'7® DC   "! +% RJ  % ,'Ó         H   '    ÿê[Ï733533#3#5#'65/)Ê=BB)O=3# #5 ÿèðÆ"735#53#3##"''3255#'67#'7 mŠÒ488 2T M-c¦??_  [>"0ÿêéX!735#53#3##"''3255#'67#'0oÉ&++   +UF#PE   $ bìÐ733673#5##53&'733#735#v-±.  @””llÐ" ++ - ÿéTÏ73533#7#5'675#'6     Ä11> PF G(ÿêˆÈ  $73#735#35##"''3255##535#35#qqMMMM[  AAAAAÈN..+n  -„#5ÿõîÁ73#3#3#535#535#Í]MMeÜcKK\ÁHKKHWÿèëÐ 73#'3'6573#×a#1Ðçç„=' #4wÇQÿæõÇ"7#5##5333267#"&55'>ÛC,  8 " Ç}}*9 ? 10(3ÿîîY73#3#3&'73#535#535#Î[SS4 ÜdTT_Y   iÿéóÆ"7#3#327#"&'#67'535'#ç.64 .! X-)ÆK$#$)-.B Ò%%\$$bÿëóÍ73#3#353#5#5335#535#'6…W2>>"k">> Í0VC` VDV0 gÿëõÆ .73#735#35#33#67'73267#"&5536g||XXXX)) }  Æ_9;11  ] )   ]"ÿîñd7#32767#"&55#;5#ܧ;KUFTAA@@d@  `\ÿêòÏ:73#5#5335#535#'677'67#&'&''6733#3#3Øn%@@   ]3   #K:T1==# 6.%  0     .%\ÿéóÉ %)/573#3#53&'#735#35#3##"''3255#735#'67&'nw7?”?*QQQQv0   3RRe  ÉE * % E3( %*   KÿéøÏ&+/37=C733#3#5##533#&'#5##5'63&'35#35#35#''67&'‹DDMs9``. $- V *FVVVVVV a Ï ## [ Y  & & o    |ÿè÷Í!7&'7'7''5"'66556ä      6ÍwGMª # ·/I= 8I< ÿèƒÑ DHLY73#53&'3#735#73#735##535#535#53533533#3#3#67'5'675#35#67&'K2s.%11*222D   8   Ñ%)  ) p    !   ;    |ÿêöÃ#73#33265#"&55#67'7#&'|pG2  4Ã$‡ z| ¸M ÿé|Ñ?767&'3#3533#"''3255##5##5'67#5367'67&'!  ;B%     Ê    ;  &YYGB [ÿêõÄ#73#33265#"&55#67'7#&'cˆ\D   4( 8  Ä#†  yz ·I ŠÿêöÃ#73#33265#"&55#67'7#&'Šc>,  .Ã$‡  z| ¸Mÿé{Ð !%73&'73#3#536'&'#5##535##X@i8 &  U444·  RZ Z>- ÿïƒÏ)-15973#3#3#67'675#535#535#535#'25##5#35#335l .  -,7+  ,- !Ï!! !!X!!!!3!!! ÿé|Ï"&*/DJ73533#3#''275#535#35#33535#335'#63533##"''3"55#&')**)'1'')(?( LI  I"Á JJ ,-' #     ÿéƒÑ06:73#3#"''3255#3#3#535#535##53&'#53&'367#35#G2   72 +Ñ Ž  y55“£ @‚ ÿëÎ $(,06<BH73#3#3#535#535'65##5##5#35#35#35#'67&''&''4'+P m P     F  a   Î1++ 7111111<+++++D  ÿé‹Ò)/37?C733#&'#'67#3'73#'655'667#3#3##5##535#19  $(_ 60 PPPPQ...Ò     !  ,* "(R M  7 7[ëÒ7'6'33#5##53'&'3#735#ÃCb®a< „„\\Ò  #8''8#  43ÿêöÉ!%)/473#3#33#"''67&'767#535#35#3353655#335v3*+JF>Q"  )+1+C+Ée  e<C ÿéíS73533533##5##5#35#35#'d((d':ddddDII0YÿéóÏ$173533#&'#5'675#&''67&''6e7::' # &7  Z ´F6)RM%.L   &  ,ÿêÔ] 7#5##535#35#35#Ô]s s ) * \ÿïñÍ+73533#3#535#'67&'3533#3#535#m044@‘=0I J222?•B2µ3    ,   fÿêóÐ#+/373#327#"&'#67'56&'#5##535#35#Þ 61   0# ?(mPPPPPÐ   ]& Jl l'<+ÿéÒS 7#5##535#35#35#Ò‚‚‚‚‚‚‚Sj j $ % ‡ÿçõÏ '-736533#3&''67&''67#677&'‘;<6      ¢7#     0N4!o    ÿè‘Î"&*.7373#3#5##5367#'6655635#35#35#‡ +:($'$/$ D//////Î ŒŒ H: 8G<v:9QÿèòÍ"&*.73#3#5##535#'66556535#35#35#å 44,A&0  N AAAAAAÍH;8G<*K99^ÿîõÏ'+/373533#3#67'7''67#535#3#53535#35#35#q/33>N   /5%9/v— #"¹    i???.....]ÿëîÏ !%)/573#5##53&'3#3#535#35#33535#335'67&'©=h>V#4y2 3!T 3!E  C Ï +,1\\6:+    WÿêöÐ )B7&''67&''6''6#5'6733#33#"&''673§   2  Y    P     Ð   %2   &/ ' yY "/ $E _ÿéðÑ I73&'73#&''67'763353#3#"''3255#67'7&''67##537#_=>‘]     OY7D  8  43½    11CI  2   Pb ZÿéñÏ#BFJN733533##5##5#533#735#73#735#3&'73#3#3#3##5'65#5#35#ƒ"&&"$$==8>>E!5611117p 7'''''Ï  #.." L+ÿéÒK 7#5##535#35#35#Ò‚‚‚‚‚‚‚Kbb " $ [ÿæðÑ3=GMSY_733673#5##53&'733#735#3#3#3#535#535#73&'735#336735'67&''&''&'œ p!  *ffDD ƒ988B’>558   &8  h  z Ð   # 4     U         ÿë€Ï 73#3#&''67#537#'67:(*  $-03  Ï &#;1lÿéôÆ733##"''3255#53567#ym==  99UÆ\ Y! ÿênÆ+733'67##"''3255'67#53&'767#U     ) =Æ  i  @ $,  ZÿéöÏ$7367&'#"''325'3'67#Ÿ " #  <2  Ï8!9"'6Y  Ž0$3? ÿèîT73#3#5##5'67#35#Úƒ …| +;7||T G6@kÿñðÎ73'67#&''6¤ C7% X6 'Î R: q   2iÿóóÐ 73&'73#3#536'&'q4  2|\.ŠG3  ¤ G4>>5591gÿèôÏ73533#&'3##5#535'67#n47- )£,,M!$LS00QC++GkÿòòÇ 7#3#5##53533#"''3255##ïps‡D$% ǯÕMUgS >mkÿéóÏ#'+73533#3#3##5#535#535#35#33535#335p47733<<99//40O0¼e''e;A_ÿñõÏ  &7&''63#&'3673#7&'¢% !"" / PP  )G /‰ Ï%*(&( !X-+/"e!eÿêøÅ@73#67&'##'32655'67&'&''67&'767''67#p,     & +    $<Å @#$? 04      iÿïôÏ&*.2673#3#3#3#535#535#535#535'25##5#35#335à 6:6}4656"'Ï&##&`&&&&6### ÿèîM73#3#5##5'67#35#Ú† ‡| &67||MB 3 7lÿèóÎ#)/73533#33#53535#35#35#35#35#'67&'q588- … -5HHHHHHHH  CÀyy-,,,"      ÿèîF73#3#5##5'67#35#Úƒ‚| )97||F ?/ 4UÿèôÂ!73#3##"''32655#&'''6rllŒ=  :o  HÂ&t p%* *% 5"\ÿêóÏ#)/733##"''3255#'67#53673#3'67&'¤44  8!(EK %$ Y Š.I  D$$! %!VÿéñÏ,047373#3#3#5'67#35##"''3255##535#35#e$RZZ2:‚+c   OOOOO¾ /-a  (x - VÿèòÊ &@FLRX73#735#35#&''67'676777'76777'7''67'67&''&'''67&'i{{VVVV    4     ?  3ÊO/-W    "    L  ÿéñ= 73533##5#ghhg+00 ÿé~Ï73265#"'&''7&'37&'k2   ‘ 9%%I!)G>  ÿèuÒ 7'67&&'3'67#E"  XC®(#3 .2( +#ÿèöÑ 7'67&'&'3'67#º"   Z   F¬($3 '/ +„ÿêóÏ73267#"&''7&'37&'î< #  “ =7"=K!)GA ÿéòÐ733#3#5##5335#­22*4 44Ð.0wwR@€ÿèñÏ73533533##5##5#35#35#€**$****£,,,,©©99ƒ8ÿæòƒ'-39?73#3#3#535#535#73&'735#336735'67&'7&''&''°MTThähUUO  ;O ˜  K  aƒ9        f         ÿçwÄ73#3##5#'655#535#5#`:ÄLjj>( %5LLLL ÿèâÏ73#'66553&'35#ˆN¬ Z>™™Ï 4+A1 /!Y 3 ÿúmÁ 767'7535#35#75#_(2  Á£ ²;(a(b# ÿéÏ#'+73&'73#3#3#3##5'65#5#35#,   "O *Ï   Ž +- 3 3  ÿénÎ $(,7'673&'73#3#3#3##75#5#35#  >'~ 4##$ˆ##4##4$jŸÎ7&'37'5#~  " Î 9e  kOÿÿ•®767#53&''67&'g $7    †>( %“ÿéóÏ"&*7'673&'73#3#3#3##75#5#35#£ ?(~ #'!"&Š!!3""7&ÿèuÉ#';73#3#5##5##535#3#'3#3#'3#3#3#67'7''67#S#,+!5+++LL c5  É-??-.    oÿèõÏ'7367'673#&'#'67#3#'3'66o0"5+ ;#  % # *M'“ -& -hh1) #nÿêöÏ%+05733#3267#"&55'67#5'676367#367#335—: '(  $ %%   & + -Ï L; /))B 7 F*ÿîód#735#53533533#3#3#3#535#535#@FFFF>>JJRäOGG@<  dc   ÿègÉ 7'6'6'6N+ % * %$# *É #" %$ ! ÿê|Ñ#)73673#3##5#'67#53655#5#'&'6  ?  ¢7ZZ=4 &77(w ÿêŒÑ#)73673#3##5#'67#53475#5#'&'F  # N!  ¢7ZZ>4 &77(wÿé•Ï4767#535#5673#35335#535#53#3&''67&'# b22  +15 ) #4 \  ``f    ÿê”Ç #)7#5##53#735#35#3#53&''67&'X ffAAAA&5‚7  EÇ  'S11' (   ÿ陯'<B7#'6553#3#67''3#67&'3533##"''3255#&'= yggH  RR*  (;  ;   zD5 7=_+$_#  4$ !   ÿé•Ñ'=Q73#"''3265#'63367353#'67#'673#"''327653353#'67#53368S  N   +$  T  >%" Ñ I1    : I ,     ÿê—Æ #'+73#3#535#35#'6'&'#5##535#35#$*Š'"5< WpBBBBBÆEEEE  Sf f$5 ÿè—Í.2673533533##5##5#'67#5367#53#3#&'35#35#!!:$ % .5*k+;A!9EEEE·˜  OOr-ÿé–Ñ"&2>73#3#'6553&'5##5#35#3353357'53367'533]0$#f5"G  Ñ =;- 2;X =,]   T U ÿé˜Ï#'+0EK73533#3#&''275#535#35#33535#335&'#3533##"''3255#&'4772 /=1141P1N^   ^(    JJ *,& !      ÿé›É#';73#3#5##5##535#3#73#3#73#3#3#3#"''3267#7#v0;*->3 CH%%H$$Q}} ‘_X ] É #;;# )  %ÿé‘Ê 273#735#35#3#735#33533567#53&''67&'kkEEEE~~#W [u  % ÊE) ' '4E     ÿèšÏ!%)-17=CI73#3#3#535#535'65##5##5#35#35#35#'67&''&''4'-[ ‹ R     J  l   Ï 0**:000000<*****C   ÿêœÊ(,0A76767&''33#5'67&'767#3#735#7677'7&'d   >7 9= $``:: F7 ' È   1&!       Q7,  #ÿîïf!73#735#3267#"&553'#37#32jj>FOH±b<E}‰6%! H JuuuK!    @BÒ "$\2  —  $*  !BÿèõÓ $(47'#67'5'63&'73&'3535&'76–'( g  :0 +TTT .1 Ó" Y5  “ # #$&  hÿèõÓ *.27&''6&'767#67'53&'73535¦ " +M #&  P  ) ->>>Ó!#"+W   1 ’ #ÿéjÏ76767'67'67'6767N(%5  Ÿ5 :9 4 30 ÿðfÏ73'67#&''61*< 1  Ï…3)k   .|ÿíõÏ#73533#353#3267#"&55#5335#|/11,  ,/³ZDV/ 5UCZ|ÿññÉ73#3#535#535'2ä //+l.331ÉKPPIÿéÑ $(7&'3&'73#3#3##5'635#35#A" EEEHH &3333Ñ R ™ C. ÿåõ~ $(47&'#67'5'63'73&'353567&'„.: Š'  B 30),www"  0,~  7 V   !  ¥ÿèðÊ7#"''3255#'65535#35#ð     ÊÆ :8!"?z;)e)ƒðÏ733#3#3##'353#5#535#535#NNFFPPzMRRIIMÏ  DK  mÿéñÐ 57&'7'6'33#5##533#735#3533#&'#5'67#ƒ a ,7]7QQ++*68.  *Ð   %+,"58  !9;! ÿçõh"&27'#67'5'63&'73&'353567&'† 56 ˆ% D /6*5vvv1  11h 1K   "  ÿëfÐ73'67#'6367')0  !   Ð &'v  `ÿêôÐ#cgkos73533#3#3#5##535#535#35#3353#35#53#3#3#3#67&'#67'5'67#535#535#535#735#35#5#35#b>>>33Ar>33>""4#[-  +%%)4    $ !3'&& 6È !&&! 0          1 lÿèõÏBFJ735333##35#53353#5##535##5#3#5#'6753353#35#535#535#33535y0/ /"  "#   #00990A ; &‚'&4 @@ 4& ?"' ; oÿé÷Ñ +77&''63#3#735#73#735#&''67&''6«"  *6644,44;   G  Ñ!";;/   #  tÿèòÉ 5;73#735#3353353533#3#3#3##5#535#53&'#535#367#uxx#_---5-4466/5-+%É::   7  eÿèòÐ48<BHNT73533533##5#5#3#5'75#5373673267#"&5'3#735#&'''67&''4'k FP J  2** 6  X  O ¾`      H[;R  mÿçòÐ "&*.4:@7#5##53&'73#673#5'675#35#35#35#''6'67&'íV3/K -jEEEEEE  =¾'(   ^J D $ % g z    ]ëÌ $*06<7#3#3#3#"''267#55#5#5#'67&''&''&'àQJJJJ\  «Q>>>>>  ‰ Ì   L        jÿéëÐ73#'6553&'35#¶*W,CCÐX8/ 0?Df3rÿíëÇ7#5##535#"&55#'7335655#ëUU  D UÇÙ Ú¹- g+8$ }bgw-+fÿèöÑ#'7367'673#&'#'67#3'6673#h.%3 1ÇP  #+ %  00v   aÿìòÑ *06FL73#53635#'673&''67&'767&'3&''33267#"&5''6˜Bv OO        8 @     Ñ || uZ      O /  2!ÿéôÊ -73#735#3#735#73#735#3533#&'#5'67#OO++22'11I+/%  $Ê4177;  41 /óÑ $*06<733#5'667#35#33535#335&'7&'''67&'UQ4³ 2L G==P===P=)  J  ŸD ÑL; *       €ÿóôÂ73#33#537#'7#37#€pFAtD<1/Â"†,li4}ÿêíÏ73#'6553&'735#Å(M$"::¦[<"9V_7xÿéòÏ 73533#3#67&'7''67#535#‚())4= %* )2(¬##37 %+ 23 ÿçñƒ $*06<733#5'6367#35#33535#335'67&''&''&'YU*¨ ' UP99J8‚99J8 ¸  (  +  ƒ F9 " &      ÿêïÏ735#53533#3#&'#5'67#-''''0*   $q%''%6,RT('1uÿèôÎ$73533#3#&'#5'67#535#'6((.# '3 ++(*&")Y[,"%.(  RõÏ73533#&'#5'67#_`P&6 5+$9 8"Oµ%,76+&fÿôôÂ73#33#537#'7#37#jˆYP#ŽWI?=Â"†/if1WÿéñÅ"735#53#3##"''32655'67#'… 3Dx %%  2,"0¦>>^ X>+ 9ÿéï‘73#3#3##5#'6M•yddll)‘*~ $ ÿçö}*7327#"'&5#'655&''67&'76Í  {# t   }H (# M5)% $H  ÿðð‹ 73&'73#3673#53&'\[Í1 -  DàB n  %*(')& ÿéó7#53##"''3265'##535#²¤å, &I55lh OFW3  ÿèßR 73353353#5# AB«=9NN9UHóÏ73#3#535635#ÆRA 6Eå"^JVVÏ'^e' ÿêà‚ 7#5##535335#33535#35#à˜VVBBVB˜BBVBBg}}1N!ÿéÞ[ 7#5##535#33535#35#Þ•@@U@•@@U@@[rr)>!ÿèÞV #53#5'#335#355#5½TAATATATA nn P!ÿèÞc #53#5'#335#355#5½TAAT@UAT@ {{Z!ÿéÞz 7#5##535#33535#35#Þ•@@U@•@@U@@z‘‘6###Z$$$!ÿèÞˆ 7#5##535#33535#35#Þ•@@TA•@@TAAˆ  ?,,,j,,,xÿéðÐ73#"''3267#'6&'¤F<    Њ$v $0" % ÿé…Ð $*06<733#5'667#35#33535#335&'''67&''4'3+Y    #5# M G Ð cY *C/" sÿéòÐ>767&''67&'3#3533#"''3255##5##5'67#536‹    GM)    !Í   2  9  $UUAA{ÿêøÏ#'+737#"''3255'67#5353635#35#35#§0 + (G  777777Ï[  ?  $!s 2<:tÿéòÎ %)-157&'6'&'67&'6#5##535#33535#35#º      ]   J.J.Î   Pyy-HsÿéóÏ(,073533#3#3#535#535##"''3255##535#35#z.22,,8€5&&.l   AAAAAÀR\  $t 0vÿïóÍ+73533#3#535#'67&'3533#3#535#„())2w2(B @(((3{4(µ3  -   tÿêòÐ6>BF733673#5##53&'733#735#3267#"'&5536#5##535#35#© Z  JJ((9"& '#):::::Ð -. '    6JJ & nÿçóÎ17=73#35335#533#335#535#535#533#535673&'''6ˆ! „ 6(„ CCLMZ  ’‰  f   ÿérÀ 7#'65535#rE22ÀY B2 2?[G5 ÿðtÏ7'67#535#53533#3#&A $%% #$0& )7)$$) ÿéô€7#5##53'66733267#"&5Ó~A/;8&'  4 €aNM`!;5*2  ÿéôm 7#5##53'66733267#"&5ÌxA/<9&  , mTBAS30&-  “ÿëõÆ $73#3265#"&55#'67#735#35#35#›N ))))))Æ2  87+dCClÿèöÐ #'+/5;73533##5#3533533##5##5#3#735#35#35#'67&'w/44/ // ssMMMMMM ; À gI ) ) !     dÿìöÑ!%+1DJ73#3#53&'#53&'367#3#735#35#&'7&''3325265##"&5''6¯2"ƒ /0%nnIIII*<  I     Ñ   8 *H, )"      #  JÿìöÑ $*0DJ73#3#53&'#53'367#3#735#35#&'7&''33325267##"&5''6¥;+—'83,}}WWWW2  E  V    Ñ    7 )I, ( "     " ^ÿèóÐ#'B]73#3#&'#5'67#535#53635#35#''67'6776767'7''67'6776767'¢ =2"  $4?      n    Ð h 9:h2F   &! )   &  - ^ÿêöÐ.26:>BHNTd733#3#"&55'75373267'67#'65533#735#33535#335&'7&'''6733267#"&5›77D  $ &_,]]&9&  :  T  Ð     I=/ 07SD?& !       EÿêòÐ/37;?CIO_e733#3'67#'655332567#"&55'7533#735#33535#335&'7&''33267#"&5''6‹AAKj1@$)#hh+D+"  ?  I     Ð   I=. .8T  '?& !      #  TÿéöÒ#)/5;CGK7'6733#736735#33535#335'67&''4'7&'#5##535#35#`!<%‰$ 8D&&9)b&&9)j ~ ;54SSSSS˜JW * '       PP %  eòÑ#(,7&'#3#3#53&'#535#5'63&'67##35#‚14 1P 8×2P3GQ%!.$Ñ    G cÿéíÊ  $CGKOU7##535#35#7#"''3255#535#5#3533#3#&'#5'67#535#35#'735'6¡,x   ,H'''##    "'   ÊEœá' *Ì „E '   6  #$ 6 4  ^ÿéóË+/37GKOS7#5'75#53#'35#35#5##5'75#53#'35#35#5#7#5'75#53#'35#35#5#ñe†P>>>>>>-C(z-C)~ E?3 & & f G;/ % %   G;/ % %  ÿêôQ!&*/7'67&'#3#3#53&'#535#73&7##35#CI1 25 3J:Þ1L27F 0&'   9 ÿïUÎ"(.7&'3#3#7'75#535#5'6'6'&'/ /$ ')ÎA F flÿêìÏ!%73#"''3267#3#"''3267#5363#”>   Ce  d$]]Ï < #NM6r ›tÿéëÏ 7#5##535335#35#35#35#ëR23 33 3¡¸¸..I777888aÿêöÏ73533#&'#5'67#7&'q174$ )+]  š55A.)9~{4(1>?   iÿèîÏ$*73'67#'63#"''3257&'''6W H  "  6  GÏ   ,ƒ  _)*-',% &[ÿéòÐ=767&''67&'3#3533#"''3255##5##5'67#536u "%#W]1   'Ì      1 8  !TT@? gÿðõÏ-73#'3#7#53&''67&67#3533#3#535#Ž CE    S/00<‹6&+- ) 16./2' 0  o  Ð333  &" ) J   pÿêõÐ27=C733533#3#3#3#&''67#537#535#53&'#5337#7'6'&'˜ $400:2$' * ( -1++/$ +=T  Ð333   %  ) H    ÿópÇ"7#3#3#3#67'7&''67#535m@====C/   " Ç'  (sgÿéïÄ (7'66553'#33353353#353#5#5335#Š wSSK%N#ˆ'B6 .%^<+'"//"38'D ;(8kÿéõÏ06:>DJ7373#327&'##"''3255#5'67&'767#33&'35#35#'67&'w#8  $ #  0 3 !5555  S ·  60  -4   G-)    ÿíóC73#3#3#535335#Î]MMiæ*+]C##3 ÿéóÏ&*.736533#&''67#3##"''3255#3#735#YZ]4+,0> I Sæ&  ¬"dd>>·    8W  T9vÿéóÏ&*.73533#&''67#3##"''3255#3#735#€+.0  ( }   Z ==¸     ;X  U= ÿé€Î'+/73673#&''67#3##"''3255#3#735#,*.    &s   S 77¶     9W  T8‚ÿéõÎ#'73533533#3#535#35##5##535#35#‡s%>77777°!!!!Crr)? oóÐ733533#3#53=(SSfæ0½;NÿêòN(2R733#3#&''67#&''67#5353353#5#53'65#'#&''67#35##&xJJhE 1  D*-W¯p  ! !Ÿ# N     !:8    }ÿñîÇ 73#53535#35#35#â q 000000ÇÃÃ@-o.o. ÿì€Î 73533#3#535#'6##535##%%+p2 \L99Ç'''' YJZ8% ÿé’Ï#AEIM733533##5##5#533#735#73#735#3&'73#3#3#3##5'6353535177/66<.-))))&X Ï  #.."     I    £ÿéñÎ73533#"''32765#'65#­$   ¢,,_Ejy. *q[ÿèóÐ*>Qc73533#&''6655#67''67&'767&''67&'67&''67&''67''67&'`?== 7 .7#!?      [           T    ¸,8/8 7?,      .          nÿèñÏ.4:@7#5##53533#35#&'#67&''6654'&'7&'&'ï[2??1[[(      "   H      ¸¸/—…  "  )    "  `ÿéóÏ"&*/DJ73533#3#''275#535#35#33535#335&'#3533##"''3255#&'c;==6 2A33; 2#U 2#Pc   c)    JJ *,& !     †ÿêïÏ73353353#5#353#5#5335#‡W*»?SS?X eLi _Me`ÿêöÐ (A7&''67&''6''6#5'6733#33#"&''673«  /  Q    K     Ð   '1  '/ )]"1 "H ¨áÏ 73353353#FEÃÌ$EÿéõÐ!+7&'367&'#"''3255#3'67#&" $$M   8 =%& 0(Ð 1;M ˆD!3ÿèîg73##"''3255###535#ß%   ¦„R@@gU  R9 E(SÿñóÇ#'73#3#3#535#535#35##335##35#35#Z’,''3 4''-@M&Ç*]++]***<9999v+b¹ 7#5##535#b"""¹ž§{hk¹ 7#5##535#k...¹ž§{h\¹ 7#5##535#\"""¹ž§{hU¹ 7##535#U-¹Ž§|jS¹ 7#5##535#S¹ž§{hYÿéóÐ"',7333#&''67#535367#'65##67#Š5 )9+ 0/) 59 ) QÐ C%4+ C j11OÿïôÏ #'+/73673#7&''67&'3#53535#35#35#^M  *$  B4¥%$B = /HHH77777M¸ 7#5##535#M¸¦{jI¸ 7#5##535#I¸¦{jZÿêóÐ3;?C733673#5##53&'733#735#3267#"&5536#5##535#35#œs&``<· 7#5##535#>  ·œ¥{kd¹ 7##535#d9%%¹Ž§{hS¹ 7##535#S,¹Ž§|jOÿéîÄ '7'6553'#33353353#353#5#5335#wŠddY+[*‡&D4 4?]=+'"//"47'D :(7M¹ 7##535#M'¹§|jX¹ 7#5##535#X¹ž§{hZÿéòÆ73#3##5#535#'6'&'e‡>  +  %  j %J8! +8 )5>! #&&Ð    3    $     #UÿéôÑ)-173&'73#3#53&'#67#3#3##5#535#735#35#^;;&ž$]?(|3EEFF6VVVV¼   R01DÿèñÓ5=AEIMQU73#33##3#"''3255##5##535#535#'66553&'5#35#5353535#33535#335©<;/ /4    "0..7 D77.AM1"S1"Ó   T   i  C3 0#\* '   C ) @ÿçöÑDHLR7#35#535333##67&'#"''32655'675#535#'66553&'73535&'òˆ7**1,   "    %**7 I[ ¾2 #$   %,    A4 0#[ 2#+  XÿéóÉ &*0673#3#53&'#735#35#3##"''3255#735#'67&'kz9A˜B+TTTTy2   4VVf  ÉE* % E3( %*  TÿêøÈ"&*.26:7#3#325267##"&55#535#55#7355##373535335è/331 ..,PS7 r7 È9h  g9Ì»°º2*RÿéóÌ $(6<73#535#535#3#3##"''3255#535#735#'3#67'75#&'iyyf^^fAC   qq`E  ' ÌK  @:  K  XÿéòÊ#D73#3#5##5##535#3#73#3#73#3#3#"''3255##5##5##537#b†:B/0C9%%D$$L--L..[™GG  5>Ê (;;( * :  $8888=N IÿéòË 26:>BFJ73#735#35#35#73#3#3#3#3##5'673&'7735#35#35#5#5#35#YAA:E< 893333<|  $  -----Ë`E ( ( D` F  A () I ÿì˜Ï/H733#3'67#732767#"&55'75#'65533753353#7'75#533F99?1%&    0  .9# Ï     F9- +6PVKH*%4  1"‹ÿêòº7#3267#"&5535éJ   !6ºoD ¹IIÿðç» 7#5##535#ç@@@»Ê˦“\ÿééÌ7#"''3255#'665535#35#é  H FFGFÌÆ40' 2%a=*f* Uÿé÷Ï7&&55#5'66556Û  !! =Ï#k1I@"À¾7J@ $6#IWÿèóÇ#(733#"&55#'667#53&''67&67#Í ,   u"# )) &*AÇ<  0$  *v2   Jÿèò 73#3##"''3255#&'''6hss”B   >tKÂ&u  r%* )& 5"^ÿééÐ 73#5##53635#35#35#”Jd, ddddddÐ ÈÈE#Y$[%]ÿòðÇ 73#53#3'35q“{ss_2-Õ.TA..EÿéðÇ73#7#5'75#35#35#675#OŸ6>!*GGGG%"GÇwA< R!XKÿèòÏ*07767327#"''67&''7&''7&537&'ÜDOM  !, 0 ==./  £  " &   65   LÿêðÑ&*.267&'3533#3#"''3255##5##535#35#33535#335È  kHJJ@   -(;H ((:-g((:-Ñ !!‡  336Ÿ@FMÿñòÇ73#735#35#53#3#3#535#`‚‚YY9>“A<=x  1‘(;JÿéòÐ"',7333#&''67#535367#'65##67#< (A0 4 71 ?@ / V#Ð  E# 0("E j22FÿïñÎ+73533#3#535#'67&'3533#3#535#Z8>>K§H8!O W;;;J«M;¶1 /   JÿêïÆ #'+73#3#535#35#'6'&'#5##535#35#S–,2¥2)<N  o  ˆUUUUUÆEEEE  Qff$6;ÿèïÇ #)7#5##53#735#35#3#53&''67&'æy‚‚\\\\0I«K 0 'O"!Ç  'S11( )   7ÿêòÑ-DJ7&''33#673265#"''67&'#'65533#67&''655#'6Ô  ))    N`HC   &  Ñ   /5%+$( 'HH<- .7S"%   &7   NÿèñÏ-39?7#5##53533#35#&''67&''67&'&'7&'&'ìx>RR>xx2        ]    ¸¸/—…  #   '  ÿêìÏ#737#5373#3#3&'767#'67#L@EZ^x} j -A #`Gƒ    ÿîòÌ73#3#535635#ÐWI§3<å[E``Ì -j»¿jÿêôÏ"(.733##"''3255#'67#53673#3&'''6TT   Y;E }†B: a* (‹.F  B$$ !# #ÿèðÃ$735#53#3#3#67&'7''67#535#)MXÅXNNe|8=  IR MgMŽ""". (  ,"ÿèðÌ'73#3#67&'7''67#535#535#'2Ö '/OOf|9>  IR MgMM&*[Ì"#. (  ,#! ÿéóÏ48<73#3533#3#&'#5'67#535#535335#535'25#'35Ï $,]]',,%Q<8#": 4$N"(()[[#'U6'=)ÏCC"}ÿé–ÏDJ_7'23&'73'6733#"''3255#67'7&''67##53'767#7&'3&''67'767# 4K>8 L  * )   7 Y;E   2Ï +     m Z   s‚  +  €     ÿê™Ï!18P7#5'67#53533#&7'6'&'3'67&''667#73533#3##5#'735#` -86*  J  !    /  ‡#!  ++ R   [ -0     '!!  ' ÿë”Ï)-273533#3#535##5##53#3#7'7'#735#767#877/q.8‚\KKj9G%DD$ *%) 2  9 ÿéðÀ73#3##"''32655#535#!½Qcc iiXÀAV QAÿéð¾73#3#67&'7''67#%µµás6A JJ *V¾2D (1 )8ÿéîÒ *73&'73#3#735##5##53##"''3255#f^Ý!œœtt¨³ @  I¼   1-1 / -  * ÿëñÇ 7#'655ñ¿ Çc< 4?] ÿçöÐ  7'67&'&'3&'767#€-= N(0: 64  F«! '; ް.(2 ,0) NÿêðÆ%733'67##"''32655#53&'767#^‚5  +  JO  hÆ  ^ Y  HÿèõÏ  7&''6&'3&'767#˜&( '&)4  ){#) bÏ /0/(   ( QÿéòÏ 73533#3#67&'7''67#535#\:::GT') 4:6E:¤+++5 $+  2+OÿéòÏ#7&'73#3#3##5#535#535#536x  Y .C==GGGG<B73673#'#3265#"&55##5'67#3533&'#35#33535#335N3S0'5  $$ #*$!  $$7!X$$7!²  N   X(9>LÿéòÐ !%73&'73#3#536'&'#5##535#W;:Œj .¦a A  {[[[¸  R[ [>+eÿêòÉ#6:>BFJ`l73#73##5##53#5##5&'7&'#3#'6553&'75##5#35#3353353673265#"&5'7'533q;;A::y! K )&!h  6$    !É 2$$21##1    #)"" #+1         6 QÿêóÌ#59=CGK`m73#73##5##53#5##5&'7&'#3#'65534'75##5#35#7353353673265#"&5'67'533_BBJDD ) V ,+(y <((    ( $Ì 2$$21##1    ! )' $,2         6 ‡ÿéöÐ&*73&''67&''667##5##535#¤;    ,A111Ð        ]\\<+5ÿï‹Å73#3#67'75375#735#CB #, ÅO 2 XSi-VÿéõÏ 0EKQ7'67&'67'7''63#"''3255'675#'3#"''3255'675#&''&'‡# O & -   #) F 3LE  2b  =  Ï #&/ +e   %e   % GÿéôÏ 1FLR7'67&'67&'7''63#"''3255'675#'3#"''3255'675#&''&'~% $Q , 1  &.#K "8SK "8i  C  Ï &&1+e   %e   % [ÿìôÎ (,0473533#3#67&'7''67#535#3#53535#35#35#n022;M   19&<0y ™!#¸  eCCC22222lÿéôÐ%73#3#3&'767#'67#537#536 ?BOST "( K!%#&Ð    ÿñf¿73#3#5##5'67#35# Y% /  !'¿ s _+6’DÿñW¿73#3#5##5'67#35# J ' #¿ s a +6’Cÿöêº 7#5##535#ê555ºÃÄ Ž eÿéñÏ '+/37733#5##537'6'&'3#735##5##535#33535#35#¡=h<6 T YY55ZZ$$7#Z$$7##Ï#-.!  420d d&9 pÿéñÏ '+/37733#5##537'6'&'3#735##5##535#33535#35#§7^71 K  SS//SQ 1 Q 1 Ï#-.!  420d d&9 `ÿìôÐ "(048<73#'63#53#3#'#335357&'3#53535#35#35#Å"("LI G  % ” ""Ð K‚4G# 6===***** kÿíóÐ "(048<73#'63#53#3#'#335357&'3#53535#35#35#É$ FDB  # ˆ  Ð J‚3H#  8<<<+++++^ÿèñÏ73#'655353335#³8a(>fLL¤N-& (2;FW*ÿèuÏ73#'655353335#J(F+H33¤N-& (2;FW*YÿéóÏ.287#"''32655'675#537#'733#67&'37&'¯  !%CVFL*?  #= ? X  +( .8 6   ¤R ÿëî[ 73#3##"''3255#&'''6'°°Üa  h! R . ([&  "  ÿéóJ 73#3##"''3255#'67&'(°°æg   l>" {  J        \ÿèíÏ473#"''32765#'63#3#353#5335#535#'6~c   Y 9%((^,,  Ï –"  2$43#2  [ÿéöÒ!%+37;7'67&'#7&'3#735#&'735'6#5##535#35#„ 0!& ?9 '‚‚&&   1%  "OOOOOŸ    A#  ##  2S S+ ÿècÏ73&'73&'#5'67#   $5°   fa ? ^ÿïóÐ #'+/>73533533#735#33533535#3353353#3#735#3673#53'e((‡'c'{”” ||YY$)•!ÁQ0/+ / #  UÿéôÑ RVZ73#53&'3#735#73#735#3533533#3#3#67&'67'5'67#535#535#5#35#£B”=.;;:<<[ %$$(B   4  0& X%%%Ñ#+ ++    +    ?ÿéõÎ $(,EIMQ7&'#5'63&'3#735#73#735#'3#735##"''3255##5##5##535#335335—() R =9 =,,_,,E--W   , Î    &0  0  0 0H !!!!)]$ RÿéöÏ $(,EIMQ7&'#5'63&'3#735#73#735#'3#735##"''3255##5##5##535#335335 $& K 692)) V)) @)) O  )Ï    "0  0  0 0H !!!!)]$ ]ÿéñÍ $(,EIMQ7&'#5'63&'3#735#73#735#'3#735##"''3255##5##5##535#335335¡# F /1 ;(( Q(( >(( K  &Í   *0  0  0 0H !!!!)]$ eÿéöÏ $(,EIMQ7&'#5'63&'3#735#73#735#73#735##"''3255##5##5##535#335335¨# > /- 0'' '' ''   $Ï    #0  0  0 1H !!!!)\"lÿêñÇ733#"&55#'665#5##535#Õ +  ^AAAÇ;  0#  )lqqO=uÿèïÐ"73#3#"''3255##5##535#53&'¯ 341  132Ð \  E‚‚ew  ŽÿêïÏ73533#"''32765#'655#¡( )'£,,d> hc> =Xÿçç–073'67#&''67363'67#&''6g@1] O.6  $G:@y k;4 T–6 ( .A3   ÿçZÐ73&''67&'67#53667#,"    ÐP,  "$~8# 3ÿïï€$73#67'7&''67#3533#3#535#@£]4)  8D/CJJV¼SC€ D ÿòò˜"(73#5'67&&'3673#7&'€T_ P25 39 Lx:Ì"  } .$8J  ÿèó8 7373#&''67&'67#367 D4 %! 5+E 2! :O3 0     iÿéóÏ"&*/DJ73533#3#''275#535#35#33535#335&'#3533##"''3255#&'k8882 /=1181 Q1 L\  \#    JJ *,& !     _ÿê÷ÏDHUbh73&533#673265#"''67&'#3#3#3#67'75#535#535#535#75#'&''67&''67&'_c     ")+    -   E‡!'( +! )  '+ jhW    pÿéóÐ*048@D7#&'#'67#3&'73#'655'673'3673#3##5##535#ó  &(a  <;13PPPPQ000     "  85 +61!   ^  7 7ÿçòÐ!(.7373#3&''6654&''67#677&'‡>@:    £-7#    (;4!r  {ÿéôÌ 7&'''63#"''3267#'67#Î" G   Ì?F?( $'_!HN"Cÿûì¼ 73#3#3# ÀÀ ªªØØ¼CERÿûó¼ 73#3#3#[¡¡¼CEÿêïÆ73##53#3#"''32765#2  <ß }…Æ<*F'CÿèôÐ07''6767&'3#3#&''67#5367#'6¿ 99"$* 9a<LB3 5 C : =B  Ä!    7$ -$ LÿèöÎ#)/7&'36732767#"&55'67''67&'—!/     Î -V-Xj6%" V5% +!#)*"dëÐ73673#''67&'67#367> €) ?'> 1  1J º      |ÿêïÈ7#"''3255##53#3#735#ï MAA77ÈÆ  ¯ÌÞ,W5ÿêÑ#+/373673#53&'35#&'735'6#5##535#35#5~##1#  #KKKKKÑ  WW \555 :dd#4 ÿè—Ï19=73673#3#3#3673#53'735#535#535#53&'#5##535#8#7//55 ‹ 22..6^BBBÏ      Ÿ? @" ÿèšÐ "(0487&''63#3#735#&'735'6#5##535#35#L## +EE~~##0# #KKKKKÐ  A#  ##  .T T,wÿëöÎ=73533#3673##33##"''3255#53567#'67#5367#535#   .-//  ;; & "9)º    sÿéòÄ373##"''3255#7&'#53#"''3255#7&'#5s;   x   Ä  ‡**&"|²  ‡**&"|²‡ÿëôÆ !.73#735#35#3267#"&5536'33#67'‡cc====M    S Æ_9;= +  _/  sÿé÷Í #06<B73#5'675#73#5'675#&'7&'&''6'6'67'6w8 &?8 &+Q # $ ' " "( + ./ #C EÍU  U      5       +tÿéóÉ +/373#3#535#5#35#3353353#3##5#535#735#35#yv##v!!A  ]k,5577,DDDDÉ22#/F  * & nÿéòÊ#D73#3#5##5##535#3#73#3#73#3#3#"''3255##5##5##537#wu39&%8/8A%%A&&N‚;>  ,3Ê (;;( * :  $8888=N lÿèóÏ&*04:@FLR73#3#3#3#535#535#535#535#'235#&'35#'6&''&'''67&'å 771100781144557&!!/    ; 0Ï >    >  f     `  ÿéôs73533#&'#5'67#bcS$7 ;%$9 8"R]*2YX.' ÿò€Ä!%7'75#535#53#3#6'35#33535#335}3>/**+h*))E+B+ tt P wÿéôÍ73'67#&''6§D-O4  !Í R;8e   .{ÿéóÅ#7#3#327#"&'#67'535'#ê'-+ % I&!ÅI#$)-.B Ò%%\%%kÿèòÏ)73#3533#"''3255##5##5'67#536¡FK .    !&Ï##U  @uu\O )(sÿìî¾73#3#5##5'67#35#{s6 H1 !()11¾#"y ` ,<£LzÿêòÇ733#"&55#'667#5##535#Ú & U999Ç;  0$  +lqqO=pÿéñÍ 73#535333&'#«F&@T(—#Y#=@rÿéóÏ27#53&'73#67&'7&'3267#"&55'67#'6 &3-:    %  Ÿ  ) $ S" UOAoÿêõÏ $(,737#"''3255'67#5353635#35#35# / "3 .!J  999999Ï]  @  %# s 2<:ÿéðÄ73#735##5##535#†cc;;VIIIÄT.\klI6yÿéøÑ!%73#67&'#67'53&'3535¨ -/8 ) EEEÑg  DK  Á **tÿçðÆ 73#735#35#35#'67&'~kkCCCCCCBÆ£rOL4 ÿçôÐ F7'2&'7'6'&'67'7'3#&''67#5367'67'6767å *;13  DL! 1+   (-. Ð       $    |ÿéôÐ59=AEI73673#33##&'#5##5'67#535#535#535#53&'5#3533535335œ  !&      ,  ,  Ï   %$6JJ)  <%dÿèôÐ+/37;?EK7#35#53533533#3#3#535#'6553&'75#35#33535#335'67&'òp/)c(1  8(?(7  8¿1  MM C1 5<[ C<-"   nÿêôÊ%7673#3267#"&'#67'7&'nB/,+ .! @» %1,!3@Z  {#;bÿéõÑ 7;?CG7&'67&'67&'63#3#&'#5'67#535#735#33535#335‚   6  3  ^{6>0  .922"T2"Ñ      -O   3/ /1dÿéðÐ K73&'73#&''67&'763353#3#"''3255#67'7''67##537#d;;Œ[    KU4A  4 51½      22B J  5   QbfÿéòÐ19=73673#3#3#3673#53&'735#535#535#53&'#5##535#   611::  Œ 99337iOOOÐ     œC C(ZÿéõË 4873#735#3353353#3#67&'#67'5'67#735#p{{"l„„v. 1    PPË:6 3    -     ÿøpÐ 73#55375#535#'673#3#7XB''   6 &&PV XET/ $ /Q cÿéòÏ#CGKO733533##5##5#533#735#73#735#3&'73#3#3#3##5'65#5#35#!!!!99399A,0,,,,1e 4"""""Ï  #.."   L   kÿéõÏ&.273533#3#535#3#735#3673#53&'#5##535#o7880t17 nnJJ  !ŠeKKKà   *1$  (= =!gÿçòÏ#'+/5;73533533#3#3#535#535#35#35#33535#335'67&'s!;0r/9 ,0N0@ !D ¹]]_;+    iÿîõÐ#'+17GMS73533#3#&''275#535#35#33535#335&'#6&''33265#"&57&'''6r333- /7..3-G-     U  [  ÀI I- ) '   (   ( aÿéöÏ#'+17=C7'673&'73#3#3#3##75#5#5#&'''67&''&'{  ))$$$$+`6#####S  \  V t).   e%% nÿéóÉ +/373#3#535#5#35#3353353#3##5#535#735#35#r}#"z"$H!!ao/9999-HHHHÉ22#1D* ( kÿéóÌ !6<73#535#535#3#735#'3#67'75#3533##"''3255#&'upp]VV]===U; !]   ]!  ÌK  @95     cÿèòÎ(.4<U7367&''667367&''66''6''6#5##53733#"''32765#'67#Š   =    > |[ !7   % 2 * Î     !'    ! A((/<:,hÿèóÐ`f73673#3#3#535#535#53&'3&'33#67327#"''67&'#7#"''3255'75#535'67&'•3--6€7**1"(&       NÐ       _    %      gÿéòÏ<@DHL733533##5##5#533#3#"''3255#7&'7''275##535#735#33535#335‰ ## ""w3=  *  $&811 Q1 Ï #N D  /  J[ .,iÿéïÏT73533533#3#5##535#35#3#'67#53#67&'##"''32654''67''67&k#Y/##JJ  &A      !& ¾,,-)           dÿéòÃ!&+/733##3#5##5'67#5367#5347#3353535#uoKYA ,/!3*,1?AAÃ+, X D    , €*`ÿìõÐ?EK73673#3#&'#3#"''3267#3267#"&55'67#5367#7&'7'6o,:>O  - N   *') $&  \ ¦  *8H  7   eÿìùÏ)37;?C73673#&'#3267#"&55##5'67#3533&'#35#33535#335q&B% *     +C+²  M   W ):@ ÿçóT%73&'73#67&'67'5'67#[h`   #P   9 SF  :   #  Iÿí’Æ73#3#"''3267#735#OC-0  2 ,/ÆK(E!,M%fÿéôÏ%736533#'67#7&'33267#"&5s(AB 2(X     – 9>E)`I Qn !& uÿçöÌ %73533#'67#7&'33267#"&5~!??,' R    •77o,(dJ Qk "& ÿèð—473733#3##'2655##537#3673#3##5#535#53'dil]–M`U04433/~^ Gcu#    ÿéñ—%*0473533673#3#5##5'75327#535#67#35#35#%F< 0Q\'(b\Ft 59x€    Y A @,[ÿêòÉ#6:>BFJ`m73#73##5##53#5##5&'7&'#3#'6553&'75##5#35#3353353673265#"&5'67'533h>>F==$ Q ,)$o 7'!    & É 2$$21##1    #)% $*1        6 _ÿéôÎ!8L7#53533#&'#5'67'6'&'35#53533#3##5#''3'67#&''6“(8:- W  NB""&' /  “** )) H  ƒ((""J .0 8  KÿéôÏ!8O7&'#53533#&'#5'67'635#53533#3##5#''3'67#&''6y  !.@C0"" ^ &&+,! " 7  Ï   2** ,+ L  „((""J-18 EÿéôÏ!8N7&'#53533#&'#5'67'635#53533#3##5#''3'67#&''6t  0CE3#$% d ((--!!$ 8  Ï   3** +, J  ƒ''!!I +38  ÿé~Î.26:>73673#&'3#5##535'67#53&'735'235#33535#35#u ,  % '=( #  '0&=&Î!    (g g,  ž=IÿéðÇ*7#53&''67&67#3533#3##5#535#c‰&- ) %(K,6<?3ÿóï 73533#&'73#536!V[Å-  y @܆g  !pÿñóÐ73533#3#536'&'z01uV *ƒF5¨(( H9B?3=>2]ÿéóÏ(,073533#3#3#535#535##"''3255##535#335e9;;44B–A//9}  O 3»M\  1t2""" ÿêŽÂ 73#3##5#'673# __ {52 MÂ&ŒŒ;# 2Uÿêl 73#3##5#'673#JJ [%#:Â&ŒŒ9% !2UlÿéóÏ(,073533#3#3#535#535###53#"''325'#;5#t06600<‡8((0]Dj  +»2t\  G""qÿéóÏ(,073533#3#3#535#535###53#"''325'#;5#v044..:‚5((0\Ci   +»2t\  G""IÿéóÍ473533#3#3#67&'#67'5'67#535#535#X9AA::H=  7  #4D449¶   R7  4 BÿéöÏ&+/@DJ73'67#&'''673&'67#3#3##"''3255#'''6h&&' 3   X6  <# DNN%—?  Cu,*M Ï D"3    !!P, 62  / #$  IÿçðÎ#@73533533#3#535#35#35#335335#5#3'67#&''67##5M('--#‘ (<''!*CF%QJ< %!À6643'3%  )ÿè¥Ï37;?C73533#3#33##5##"''32655#535#535#535#535#35#3353535?@@557 $   99AA9955?""5""$$$  0!*  0 -@!KÿèòÏ37;?C73533#3#33##5##"''32655#535#535#535#535#35#3353535V@DD99;(   >>KK==88@&&9&&(((  2 !*   2 ,?! ÿé¥Ï#'+0EK73533#3#&''275#535#35#33535#335'#63533##"''3255#&'9>>7 4D 559""5$Y""5$eh   h*    LL )* & "      ÿê¢Ç(9?EIM767#533'67##"''3255#'67#53'#"''3255##5&'''63#735#> ]8   ( .4p   fT   CC""³    Df Ohz   -ÿêñÑ"(,7#3#"''32767#53673#"''326'&'3#Ô4Q   N3     ??¥XK "z  E#  s ÿë‰Ï"&*06<B7'673&'73#3#3#3##75#5#5#&''&'''674'!  !!R1I  / ,…"& d%%  ÿì”Æ#7#3#3#"''3267#'667#'655”d^1/  ÆX!BE# 5C"B4 4>]ÿèÎc736533#"''32765#'67#-:R  B:03H  H%3& ÿêzÆ)733'67##"''3255'67#53&'767#a$    )/GÆ  i  F#$,   ÿèˆÏ#'-373533#3#3#535#535#3#735#35#35#'67&'.11++5z2)).iiCCCCCCA      ?aE & %      ÿòÏ 73533#3#67&'7''67#535#/..7B " ,1-9/¬##30 #)  ,3ÿó‚À73#67&'7&''735#35#aN  ' ::::ÀrB   “MCöÐ 7&''6&'3'67#}/: 73.: M(  ;“ vÐ',.&  " +ÿéÚA 7#5##535#Ú‡‡‡AX X9&(ÿé×T 7#5##535#ׇ‡‡TkkI6 TôÇ73#33#537#537#5#Ñs_)ç8 ,2H¡Q Ç5"M"" ÿéôÁ73##"''32655###535# ç&  ­|L88Á« ¦'XfE2WôÎ733#3#&'#5'67#535#53wccVC#3 9%%6/$AWffÎ %$ KÿåôÏ%+735#535#53533#3#3##5##53'67&'OF33;;DD77K¥V6T K yE35GJKÿæñÏ&,735#535#53533#3#3##5##53'66&'\=22::>>66E•‚P0V )$"}  K9;MO! ŸÿèðÏ#737#53673#3#3&'767#'7#Ÿ!&)(   "y' $ÿé×73#735##5##535#5––pp9:K K. JÿçôÐ)6:>DJPV73533533##5#5#3673267#"&5'3#5'75#5373#735#&'''67&''4'R",&&Q"`,<  Z 22G  l \   ¾   J_ ZAA+»-@S>>,$$7&%#c_#z i!W  "6À6621(, )BôÏ(733#7'7537736732667#"&5G'''3> G")  (Ï%6 ][q0  ( !  ÿñò573#3#(­­åå5_ÿñòÏ %7#5##53&'7&'''63#3#535#ðg= # z3@“?3³.1 % /22ÿêîœ &*.73#3##"''3255#53&'#53&'367##535#Y";  ­<$X :S:mEEœ  F  B : 077&`ÿèõÉ'7#3#3#3#67&'#67'5#535å`YYYYn@   7! É   IM  ZlMÿéóÐ 2BSW[73#53&'3#3#3#3#3265#"&5535#5333673#53&'#"''3255##535#35#vLR46443344 556Œ PD  #####Ð   2     wE   0i  *‚$8VÿêîÑ#73#"''3267#'6##535#35#€d  Y K7$$$$Ñ “$~ &"m~.J ÿéYÏ 73&'#''6.   Ï& «µ* UÿéñÐ "@73#5##53&'3'67#''67#3265#"&553#"''325¤:c:"$< 0    h : Ð $% >k(S  !e zE  _ÿéòÑ !%)73&'73#3673#53&'#5##535#35#d:9‰# " #“$nLLLLLº   An n(>cÿ÷óÊ73533533533##5#3#5#5#c@h|hŒ44>>>>JJo‚888aÿèõÏ%73533#3#&''67#53655#'61174$ &* + 04 Ä,, 572 $, oÿèöÏ"73533#3#&''67#535#'6Œ++30 &/25 Ä *** 65/ %03^ÿêôÏ7'2333#"''67#53&'Þ 2H; ++2 =NX/Ï3)  /@HÿèöÏ "(7373#'67#3&''657'6''6\!_a / ) P  "2 A/  C ³_81U7 .,'8! " \ÿéòÆ73#7#5'75#35#35#75#`/6)@@@@@@Æ{=9 Ž!!T!X QÿéîÑ)?S73#"''32765#'63353#'67#5336'673#"''327653353#'67#5336zh  c '.   e  F* '  ÑJ ,  %  % Z I * %  & V„Ð,73533#3#3#3#"''3265#'67#535#535#/,,%%)DB 7 4))/Ä        ÿéój 73&'73#3#3##5##535#amå´´³³µ’’’X  ,, XÿçóÏ048<@DHO735333##3#3#&''67&'7#537#535#5#5;5#33535#33535#33567#g5559FV   2 $&1+95 ""5"W""5"[&&9&* ,Ä  .   .  ' D Q GÿçõÏ048<@DHO735333##3#3#&''67&'67#537#535#5#5;5#33535#33535#33567#Z;::>Pc'  $5 % (3-@;));(c));(h..@+12Ä  /     /  ' C PPÿéöÏ).2CIO73'67#&'&''673&'67#3#3##"''3255#&'''6r### /   S0  7 @HH!Š:   =lH ÏD"3   !!P* 62  /   XÿéðÇ$)733#"&55#'667#53&''67&67#Ñ ,   t "' &% : Ç<  0#  )v'     'ÿèØN 7#5##535#33535#35#Ø‹==P;‹==P;;Nff';UÿíïÏ573673#3#3#3#3#535#'67#5367#5367#53&'‘ $?DJPV73533533##5#5#3673267#"&5'3#5'75#5373#735#&'''67&''4'[(##OZ(7    U //?  _U  ¾    J_ Z==4T4>TTž111pp1}9ZÿèõÏ%73533#3#&''67#53655#'6{44<9& )- . 38 Ä,, 661!#- eÿçõÐ*07#673265#"''67&'#67'53'37&'ñ<  $ ( :  ¦/$ -%+ Gj  Œ*(   Jÿë÷Ï#)/7&'36732767#"&55'67''67&'Ž"0    ~  Ï .W/Wj6$  X6% + ")*!VÿéðÇ*7#53&''67&67#3533#3##5#535#m ~#)% #& D)166AA??1µ!  N))dïÏ#7&'332667#"&57&'''6w     !  ˆÏ @  A  &Hÿè÷Ð 373'73#3#735#3#735#3#&'#5'67#535'6OJE¤ ŠŠddGG''M ;G6& (' %8I4@À  T6 $ 7 0.  RÿéõÏ#U73533533##5##5#3#735#335335#67327#"''67&'#&''6553'33'7\#)"")#‰‰'=     - <  À 9>    #$#  bÿéôÏ#7373#3#3&'767#'67#537#k/?CPTP &. H*.+²    ZÿèöÈ7'6553#&'7#3‡p#& -"IIdP,&TUdJ"YQ>`ÿóóÐ 73&'73#3#536'&'j67‚b0“M9 ¤ G4=?5591PÿçòÐ%+73673#3&''665&''67#677&'kUWK""  ( "  £+"7"    1M4 !q   rÿéóÇ73#3#3#3##5#535#535#535#wx3//007788....3Ç>>aÿéïÇ73#3#3#3##5#535#535#535#f„83344====33338Ç>>QÿéçÃ%)7#"''3255##5#'65535#33535#735ç   $&$$7$\%$7$ý +CC+$ 3>]=***f* **XÿóõÍ %7&''63#3673#7&'&' "' %#$ 2^^Q +’A    Í $%$#+d-+/"g !ÿéóÎ733#3&''67&'#5367ª//-!  !Î"7'0$!oÿèíÐ73533#"''32765#'667#}!<  ( £-d? hCHE=mÿêóÑ -73&'73#3#735#33##"''3255#53567#r47 llFFr88  ;;S½ 43   `ÿçõÏ.73#'6553&'#3&'36533#&''67#®/e4:RR@"-& &!- * Ï ?@1 1;X #  )'&*hÿèíÏ373#"''32765#'63#3#353#5335#535#'6†[ O 5!$$W'' Ï ›6 |  2$43#2  mÿéóÊ /473#735#35#3#735#33533533&''67&'#367{kkEEEE~~#gu   %  !  ÊE) ' '41    fÿèñÆ!'-39?73#3#3#535#535#735#&'735'6&'''67&''&'ut1008‚7//0/   [  PÆcA   AA ƒ iÿéìÈ#'+/3767#533#"''3255##5##53&'35#33535#335Œ Ys#  %$=$$8%]$$8%±   //8¥ BJ`ÿéôÏ8=737#535#5353373#33##"''3255#53567#'67#767#m#B7,,$$38::   BB2 H i  ( %  5 cÿéõÄ 73#3#33#"&''675#735#xj)// !(   .DDÄS&4+;j/]ÿèñÆ $73#"''32765#'6553'#33#735#‚o  [xRRJ==‡] EB2 4?^?-M> ÿèóa73#3#33#"''675#735#+ªJPP#.(o )Lƒƒa3    * ÿèó^73#3#33#"''675#735#+ªJPP#.(q ) Lƒƒ^2    )bÿìõÐ>DJ73673#3#&'#3#"''3267#3265#"&55'67#5367#7&'7'6q+8<L  * H   )'( %'  [ ¦  *8A  7   jÿïñÍ+73533#3#535#'67&'3533#3#535#|*--7‚7*E F-,,8‡;-µ3    ,   _ÿéóÎ -7'2'6'&''&'#5'67#53533#&á 4K=5 +   H ,59:7$ Î #   jGD"'( ÿèñS73#3#33#"&''675#735#-£GQQ82<. "H~~S.     'WÿêôÑ"&<H73#3#'6553&'5##5#35#3353353673267#"&5'7'533°6)&p;%     ! Ñ =;, 2;X =,3     !!   V]ÿèôÎ0J73533#3#535#3533#3#535#'3533#7'75#3#3267#"&55#'67#p000:ƒ60?II"Ž+   . %$¾5 2! $2 $XÿèóÐ#'@CZ_73#3#&'#5'67#535#53635#35#''67'6767677'7''67'677767'¢?3! !# %2>     n     Ð h !::h0F   &    &"\ÿéñÑ PTX73#53'3#735#73#735#3533533#3#3#67&'7'5'67#535#535#5#35#§=‹9+884::W#!!$<   0   .$S###Ñ#+ ++    ,     zÿëôÆ !.73#735#35#3267#"&5536'33#67'zmmHHHHZ    ^!! Æ_9;= +   _0  ]ÿñðÏ  &7&''63#&'3673#7&'£  (@@  6T  *“$  Ï(''&'  V,+."d!_ÿéòÏ573533#3#3#67&'#67'5'67#535#535#l27722=5  / *:,,2¼   U @ 7"TÿèõÌ&Nf76767'33#"&55#'6653&'#33#3#"''3267#735#5'67&'767#67#53&''67&'¸        +# GA# &   *     -K3G    Ì    # *#94#8          ‰ÿéòÆ!%73#3265#"&55#'67#735#35#35#’T ......Æ/ 46*fBC ÿé‰Ð37;?73#3#3&'73#3#3#3##5'67#5367#'65#5#35#$N-?E  ""Q")4Ð   Y & r"" ÿègÐ"(,048733#"''3255##5#'655'667#35#33535#335/$         + Ð   — *%%)0O  -H ÿé†Ð 73&'73#3#3##5##535# 22ydddda666² V V6# ÿé|Ð 73&'73#3#3##5##535# +/o TTTTS***² V V6#ÿéô† 73#53'3#3##5##535#ƒiægD©©©©§|||†  )  8 8 lÿèïÏ,73'67#&''6'673'67#&©7YO1    $ +3_W-  Ï =/   G9 jÿéôÏ1767&'7&''6'673#3#&''67#5367 *0 K(73& & 0 . .2Ï" " M  $ _ÿîóÐ"&*06FLR73533#3#''275#535#35#33535#335&'#6&''33267#"&57&'''6h8880 3;1181N1    X a  ÀI I- ) '   (  +  YÿèôÑ N73#53&'3#735##5##5#53##67#&'#"''32655'67''67&''6§?Š8.vvPPum/b4       ",2"' & Ñ )( "(          ZÿêõÎ _ci7&''67&''63&533#673265#"''67&'#3#3#3#67'75#535#535#535#75#7&'o   /   ?d"!   $,) ]Î    ( &F!+! ,)  jhG ÿéOÎ 73#53&'3#3##5##535#/C44445Î >TU5%PÿçöÇ+73265#"&547#'65567''67&'ÙI$    ÇG8( .$:/>f62 )3x., #2 "!! ÿêwÐ &73673#3##5#'67#535#5#'&'6  >  ¢7ZZ>2777(w ÿíƒÏ'+/3773##67'5#5'67#5363533&'#35#33535#335?3 $ % #  %7%Ï V *O G79ÿè†Ê/377#'6553#"''32=#35#'6553#"''32=#356  3  @  3  D1+ -3wË ''**<3) -3wË ''** ÿéwÐ#(-73#3533##5#5367#53635#335367#335;,,: %9%Ð b33 b6B uÿéòÏ"(.4:73#3#3#"''3267#5363535&''&'''674'8Q``` ` >>> *(ÏL? -‡ ^ ÿérÇ 7#5##5##535#33535#335r'<'ÇŸSS£>,,,g*** ÿêvÏ'73533#3#&''67#53655#'6 $' # *. Á ,,  (#- $ÿéqÉ 73#735##"''3255##535#35#UU//F   77777É>>w  1';ÿêxÏ1733#3#5##535#53#"''3255'7567#536;&&*F+&&8  (, )= Ï''}%   ÿêzÏ"(.4:73#3#3#"''267#5363535&'#&'''674'9*FKKN N 333   $ !Ï K A+† ^zÿéòÐ5;7''6767&'&'''63&''67&''667#Õ (-  +  2    &Ä # 1   %      tÿê÷Ð#'-37&'#3##"''3255#535#5'63'&'''6« ** ** $;! 1  9Ð) H E !)] !  ÿé|Ï*.273673#3#"''3267##5'67#735#53&'35#35*  (.   !"& 4$Í  >:Q7 AI-ÿëxÉ#'73533533#3#535#35##5##535#35#j%911111®""""Am q(> ÿèŠÎ +873#53&'#5'6'673''67&767#&'U+u5 "  )      Î  .…\&5#5;    %  zÿèòÏ%+73533533#3#535#35#35#35#&'''6})u%))))))+  !±llAB2   ÿêÑ6:>BFJ73673#33##&'#5##5'67#535#535#535#53&'5#35335353351 $   * + Ï   #%  1OO/! 5$yÿéòÇ!%+17=7#3#3#3#"''3267#55#5#35&'#&'''67&'î&!!!!*  \2  )"ÇO7‚&&.  ÿê{Ï#)/73533#33#53535#35#35#35#35#&'''6+))# n #+55555555* Ávv.,++"     ÿç‚Í&,28>D7'67#5'675#5367&'3#5'675#&'7&''6'67'6J  #4 4  "*J  !! & (' 8 :c  !V {X     Y    0  ÿéÉ +/373#3#535#5#35#3353353#3##5#535#735#35# t# o!?    Vd(//22)>>>>É22#/F* &  ÿè€Ï37;?C73533533##5##5#3#3#3#3##5#535#535#535#5##5#35#335g  -//11,  J ½$$) ÿéƒÉ'+/37;?73#3533#3#3##5#535#535#535335#735#33535#33535#335k, .0022/ -,E,<#ÉN##.,\ ÿé†Ð-159=AEK735333##3#3&''67'7#537#535#5#5;5#33535#33535#33567#)( (-99  $!   -) )?)C- +à  ,   ,  ( ES ÿè‡Ó4<@DHLPT73#33##3#"''3255##5##535#535#'6553&'5#35#5353535#33535#335V((!!# " ' 5 '' 10"3"Ó   T  "i  C3 5<\+ (   E+ÿëwÎ!%)/5;A73&'73#3#3#3##5'65#5#5#&''&'''674'#K.D ,  *Ì [ %%   ÿêŠÏCGK735333##35#53353#5##535##5#3#5#'6753353#35#535#535#33535,. .!  !     --88,< < &„)'4 BB4' =!' <  ÿç~Ï#'+/5;73533533#3#3#535#535#35#35#33535#335'67&'/*f)0')@)7 6 ¸\\`=+   ÿé‡Î"&7;?73#&'#5'67#5367'23'#35##"''3255##53#735#o ? E  "*4 ##D  E22Î  &  ? %*M 8Qa*  ÿéÐ-26:@F73673#7'##"''3255#5'67&'77#&'35#35#'67&')3#       "W ,,,,   M  ·    @0 -5 & 1)     ÿéƒÐ,1<BFJP73&'73673#3#3##"''3255#535#5365#5#35#"&55#733567#35#&'    #  LLF 'A F  :F  FF  ²  ]   ]  5 $  @ ;  ÿé€È26:>BF73#3#"''3265&''75#53533#7&'767#'67#735#33533535#35#hEP   #"  I     $!È>l& // M €ÿæõk!%)/5;73#3#3#"''3267#&'7#5335#35'67&''&'yS˜µµª   . xE2………›  _k1   W;      ÿéfÐ!%)/5;73#3#3#"''327&'77#5363535'67&'#4'*&9<BFJ`m73#'3##5##5##5##5&''&'#3#'6553&'75##5#35#33533536732765#"&5'67'533O66<66qY 3 b#`  1      É 1$$11$$1    $(' #+1        6 ÿótÏ73533#3#5##535#35#*((+*++¢---a o-r4 ÿóxÏ7#535#53533#3#=#($++,,#3 o,//,a 33ÿéår!'+73#"''3265#3#"''3267#536&'3#kS  p     2 N––r   !/ ?  7ÿèâ!'+7#3#"''3267#53673#"''326'&'3#µk˜   ˜+R   >  P——\*5 H # 9ÿë€Ï ;7'2'6'&''&'3#3#6753#5'5375#535#'6u ,?4,  !    G$,, '33 Ï   .A 6*2  tÿéõÑ  -:7&''63#3#735#73#735#&''67&''6¬  '3322-229   D  Ñ!";;/   %    ÿçïÒ#'4J7#3#'6553&'75##5#35#33533533#67'73267#"&5536ïC:·Z-,,,>-(˜99!(£ %  %  à *C< 3@]   /   #  ÿéƒÑ"&3@73#3#'6553&'5##5#35#33533567'53367'533O*Y,      = Ñ A90 0=Y 81!!!!!c  T  U„ÿèôÎ%+73533533#3#535#35#35#35#'67&' $ k $$$$$$ 9 °nnCD0 ˆÿóóÏ7&'3#3#3#535#535#·  b'##+k,##'Ï &:::: ÿé†Ï#'+/5;73533533#3#3#535#535#35#35#33535#335'67&'3+i+3)+C+6 6 ¹\\^<+    ÿê}Í%J73#&'&''675'67#535'2367&'#"''3255'67&'767i +$   "  ",)      Í      m%        ÿêŽÍ%I73#&'&''675'67#535'2367&'#"''3255'67&'77z 4*   $ %50     Í      m&        ~êÑ7#5##53&'73&'7367ê®) &   °. 2    ÿéòr'-39?73#3#3#535#535#73&'735#336735'67&''&''&''¯LTThähUUO  ;O ˜  ¹  , (r4       Z       |ÿèóÏ#)/73533#33#53535#5#3535#5#&'''6‚+//& w"+Q55555551 &½vv.++   qÿéöÏ "?73#5##53&'3'67&''667#7#3265#"&553#"''325µ1R12    H  0 Ï $% > j("  g  |F  ÿéòi$-39?73#3#3#'67#535#535#73&'735#336735&'7&''&''¯LTTh¿  hUUO  ;O Z  'i2       T      zÿêôÈ!%)-1597#3#3267##"&55#535#55#37355#355#5#735ë"##  $$"= ;<=>È7b  c7ο·¿3) ÿêuÆ #)7#5##53#735#35#3#53&''67&'t?SS....%d+ 6 Æ&S03' )   ÿéøX!%)-173#3#3267#"&55##535#735#35#33535#335'¥HUU#' 0/?QJ??RC•??RCX4   = 1 ÿéõÍ73#&''67&'#53&'667#¹,   //ÍD**FŽ1%7zÿëõÏ#)73&''67&''667#&'&'¡2  !    &) &Ï(     \  xÿéðÏ)=Q73#"''3265#'63353#'6677#5336'673#"''32653353#'67#5336‘P   F  $       F 7 !  ÏL2  !    V   L1 "  ^öÐ?PTX73&'73#3#53'#367#733#3#3#3#3#3267#"&5535##"''3255##535#35#*-r(#PTTMNJJJJFF# ,& NM ;;;;;Ä        <1 ?ÿëö|>OSW73&'73#3#53'#37#733#3#3#3#3#3267#"&5535##"''3255##535#35#*+r(%QUUMNKKKKGG$ -' NM ;;;;;p !      NB  S  ÿêóÐ7'673#&'#5'67#53¶-&!&      %± +8-lg$ 4 ÿéÑ $(,EIMQ7&'#5'6&'3#735#73#735#'3#735##"''3255##5##5##535#335335G$ E ,8 ### G$$ 6## C  "Ñ   0  0  0 1I """"*\#ÿï}Ï!%73533533#3#535#35###535#35#o'8E3333°  @ao(?RÿèóÏ48<73533#33##3#33#"&''675#535#535#535#3535e8@@4466++  0088008K"""¾$#' =#$­äÏ 73353353#FGÆÉ »ÿé÷Ï73533#&''67#7&'»  / @@T/&BA( 9Q= ÿèód#73533533#3#535#35#'67&'#(E((<æ>(@??C4(  ‡ðÒ 737#'733#737#™sw6â9ll— '!& ÿçð+73533533##5#'67#??;;B 6)9 %%!oñÏ733#537#'77#Ku:â“p iÏ. cðÏ7#'733#53'37«np9à’J d ‰688bðÉ 735#533#535#2€‰*ࢀŸT‡ðÉ 733#535#535#)*ࣂ‚ŠÉ2  ,wƒ !7&'7'63533#&'#5'67##  Q O**!    ƒ     |'ñ„ 7&'''63#"''3267#'67#Ê   N   „   $ 3ÿé²Ñ7'6#5'6Ž >;0GÑ ) se #…ÿéíÃ73#"''32765#'665#•X  è0+v_I GZ^ïÏ73533#3#535#feeWÀUf¯ ++`ðÏ73&'73#3#5#fc°ž³³  .AjðÏ73&'73#3#5#gc°ž³·  (;_ÿêõÏ73&''67#'6=%"  N- !Ï17!/ 8b+YÿèóÄ73#3#"''32767#'655#gŒTK6/2$Ä0r$ LQ5 9T/ 3ôÏ73533#&'#5'67#bbL 4 9&#:5 L¬##,8de6)QÿêóÈ733#"&55#'665#5##535#Ï! 5mQQQÈ<  0%  ,mqqO=]ìÄ73#3#5'67#35#ÓyŒ 0>EffÄ <&%C}òÐ"73#3533#3##5#535#'67#536¦=B ''0033.  Ð ##''ŠÿéôÆ73#7#5'75#35#35#75#f #!$$$$$$Æ€83 R X Cÿé‹Ä73#3#"''3267#735#I=)2  3(*ÄJ(H!.L& ÿçõd#73&'7&'#"''3267#'67#5'6V l 9  : M D '4b% *3  $ IÿéõÊ73#3#535635#'67&'×0=r"*§C/<<ZÊ !8{8P eóÏ7&'3673#&''67#´”^g]"@I# 4) BTÏ    ) ÿêóÏ736533#&''67#7&'£  @  Š''R+$, ,TI ÿêEÏ"7#"''32655'67&''67&'76        Ï +>'((  —ÿçõÐ$*733#5367#'635#35#35#'67&'¸#H  $$$$$$ 2  Ð || H98(  ÿé‘É*:IYg73#3&'7#"''3255##5##5"'6735#''7'76'&''7'7''7'76'''67'7y5"        4Y  .   5  .   É Š …™™ž    6     1      xÿéõÉ'6ETf73#3&'7#"''3255##5##5'6735#''67'7'&''7'7''67'7'&''67&'7€n/     0Q  ( 0  (É  Ž  „™™ž¢   6    1     ŒÿçôÏ73265#"'&''7&'37&'ñ3  !  ‘ ;'#O!)(? ;ÿêžÏ73533#"''32765#'667#O&    ¢--Ž*(\HJAE ÿèàÇ 7'66553'#39 »““€D5 1$_G4! ÿèëË 7'6553'#3/Ш¨¥>B= 2@d& }âÏ 73353#533vDÄDÏ?/BB/ÿêåi7#53#"''3267#'6]FÎ ^)$ @WZ"D12 ÿéçu73653#"''3267#'67#Vc O4' IR[  M%2"28 gôÐ7.''667&'f!E( #%$E &) ÐA# 1 HÿéôÅ73#3##5#'67#5365#5#b‹ '')3 -&(W&ÅLjjI!<:LL; ÿé‰Ï&733533#3#53'67&73#5537 ((-}-   \J¼:MQ !'  7t o[  ÿéîÏ373673#'67#7&'32767#"&55'67536PwzG ?Mš  *&  $  $b?6YB O/&  TC jÿèõÏ#'-373533#3#535#735#3353#735#35#35#&'''6v022<Š;0/`ssKKKKKK3 Ä ,   E_C & &    ]ÿçöÑBFJP7#35#535333##67&'#"''3255'675#535#'6553&'73535&'óo+!!) $     !!+;G ¾3 "$   #(    B3 3>\ 2#+  lÿéóÏ37;?C73533533##5##5#3#3#3#3##5#535#535#535#5##5#35#335l++{6::771 [(½ ( óÐ$=AEK73533#3#535#3'67#3#3#535#3#3##"''3255#535#3#735#&'_bbX½S_Þ ÉžDXÄZHæ   LLµQQ22a  È     *  ‰ÿéæÐ 7#53&+k‚çK ÿéóÆ73#735#3#3#"''3267#7#*¦¦~~1æ¢ ’/ÆED 8 3@óÏ/73673&'73#673267#"&''675#'67#BH $Y #  !$ 3 .<± (  0:$#*GÿêøÐ NRV73&'73#'67&'3533533#3#3#67&'#67'5'67#535#535#5#35#UCC›9 " D U#'##';  4   $4(#\'''À       ; '  '  UôÐ73673#&'#'67#SoF1 8< 0Fµ  (50#fðÉ 733#535#535#)*ࢀ€‰ÉP \õÏ73673#&'#'67#U mE2 8 < 3G¶ "0.! ÿçôA73673#&'#'67# dlZB KP @X/  &'   †õÑ73673#&'#'67#H {3 + >* 0à  aÿéëË $7#"''3255#535#5#'##535#35#ë --ËÉ  qR#1AQà"1 ÿòjÁ73#3#7'6353675#O)1$Á;N |  ÿìÑ/37;?73#3#53&'#53&'37#3#3#67'675#535#735#33535#335G,s*'e*))26**))@)Ñ   4 %N   .-uÿê÷Ð :>DS7'6655633#3'67#733267##"&55'655375#'6733267#"&5æ '4 <%       Ð /E; 6G<      2' '.E'H6+4   GõÎ 7&''6,? B)$F RÎ A>=&–òÏ73533#3#535# SXXläeS   lðÐ"73533#3#&''67#535#&'7#6$QVVi4GP=cQŒD .   + uÿéóÇ %+73#735#3353353#''67&'&'''6|qq.H   +ÇJ*****@Žˆ   -  % ÿêvÎ73#&''667&'767#53&'B &  !  A(Î0#($ "zÿéòÏ73655#535333#&''67#75#€%- 1"  !#Q])**H3"36 $06)  ÿé€Å733265#"&547#3##5#535#X ÅD5! /!9,:InnI ÿéyÂ$73533##"''3255#'67#75#7&' J &K&  e]]R O;. 1.KK? ÿêvÌ"7'2333"&&#"'67667#53&'l '9/!    F(Ì8# ,ÿè}Ð(767&'7''63533533##5#'655#2 %) Ð+  T####QQ0 & ÿésÅ73#735#3#3#"''3267#7#SS++f; >   A ÅD E!7 3 ÿómÏ73533#3#5##535#35# )%%, ),,¢--.a o.s3 fôÐ"73#&'#'67#535367367#335Ï4& /3< &6GH+BAÁ      ÿçñ…#)/5;73#3#3#"''3267#5363535'67&''&'7&'b\³³««4#|||– „  B ?…7(cC    ìÑ73&'73673#5##53&'9 *    &µ' Ï   &' zÿèòÍ 7#5##53&'7&'''6ìF* ¯=*+> 3\).\V5 =ÿîqÏ 7#5##53&'7&'#'6q=%   ¯:)*; ,@L O>U1 8 ÿévÏ73533#3#535##5##535# *++&]#*^...­""$$Occ@- ÿé‚Í73533#3#535##5##535# .22(a$.h555­ ##Oba?-ÿé?Ï 7#5'6-ϰ† ,@ÿêµÏ!'-3973#3#3#"''3267#533535&''&'''674'r%@OOP  N... &$ÏI  D/ [ nÇ 7'7&''62%  ‘/Vf93A-;eòÐH7&''3&'33#67327#"'#'67&'#7#"''3255'75#535'6Ç 7<HC    A(* 4799%5Ð            ÿé~Ï$(,7'6553&'73'#3#"''3255##535#35#,(%??  %%%%%$?/ 0;V  8(&m .‚"5 ÿèÎ&5<73#5#3'67&''67#53&'67#73#"'67'7#325Q(G      -  ",   Î %4(! %/' >X  „K ÿé€Ì&73#35#535#53#67'5#'665#567=-  Ì q@  L,( #&i ÿézÐ %)-157&'6'&'67&'6#5##535#33535#35#H     P  ?)?)Ð   Pv y-I ÿé|Ï#/73533#&'#5'675#''67''6+))  +  H  ²RLE!0L   )  ÿç}à '7'6553'#33353353#353#5#5335#' hDD=  >ˆ(D5 7=^;+�#39(D 9(9^ÿéîÆ '7'6553'#33353353#353#5#5335#‚~ZZP'T&Š(E4 6>_<+%)88):6(D ;)6`ÿéôÇ *7#'66553533#3#535#3533#3#535#ój $$+c&$%%-p1$ÇSD6 1$_0P## ÿéð)7#3#3#535#535#'65533#3#535#53îREEO¯KAAVhDDT¹PAA<3& (-F\ YÿèóÏ6:>75#535#535#535#53533#33##3#33#"&''673535y //66..88==2244()  ? : ;$# v$fÿéòÐ'7&''6767&'3533533##5#'67#Ñ .3 S"#) ´ ,* ]))))RR;,ÿçßÎ 73353353#5#CB­˜ŒÂÂŽ³ ÿéóÉ 87'6553'#3773276767#"&55'75'75'6.pII !(* )B6#& (+F5 5@`:)  ÿëñÐ"736533#32667#"&55#'67#PoM  (,. QO¡† $  ŒAJ*f ÿêòÏ!73533#32667#"&55#'655#6)& :4#Ÿ00‡ ! Ž+J. *A+ÿéîO733##"''3255#53&'ª00   ——d O'  #  ÿéîa733##"''3255#53&'ª00   ——d a4  0  ÿéîÏ73533##"''32655#&'’88 ’7¢--‰ „ % $!ÿèðÌ 15;73#535#535#3#7'75#73#3##"''3255#535#735#&''ªª˜’’˜]$',6+&ke))  ¤¤4>>Q ÌJ  C6  M   ÿéó>733###'3255#53567#4—!df   mmm>    >ì¤ 7#5##53&'7ì°` A..A ÿèPÏ73''677&'67#53667#(    Ï,U)  #' 8& ÿéóÑ-1573673#3#3#535#'67##"''3255##535#35#ž-36!U"  Q   %%%%%À   Kd  ){!1¤ÿéóÏ 7373#&''67&'67#67#¬'    ! Ÿ0Q   &)_B)! æÌ 73#735#'3#735#‰]]77[[55Ì//ÿéáa 7#5##535#3#735#á__<3 2;YZ+#"XÿëóÏ (7&''6#3267#"&553#"''326£ # !!) 356*  4 \   Ï .0),BW m6 _ñÏ'737533#7'773673267#"&5'$$"2>i! !(   #¾HW%[$    kÿèñÏ"73&'73#3#"''3255##5##535#k=483  2;¯  _  H‚‚k} ”ÿéïÏ733#5##5##5335#35#35#35#¹$%$$$Ï,„EE†2 QQÿæïÇ$*CI7#5##5##5##53'65'3'65&'7&'373#&''67&'7#367ê"dK"!  W z/Z    4 & &<" Ç^NL\^NL\'' ''+ #  "     SÿèôÐ"&.26733#5367#'635#33535#3353##5##535#35#†= *…F:  $''7'^''7'}œœ‹RRRRRÐBB 8 $ % R R ' GÿéðÑ I73#53'3#735##5##5#53#67&'#"''32654''67''67&''6£B—B0zzTT{t9!j3    '26)* )! Ñ )( "(            XÿçñÏ /37;A7#5##53&'73#673#&'7#'67#5'675#35#35#35#7'6îl>9`' &?!)   %&WWWWWW ½)*   `    R F ' & h ]ÿèô 73#3##"''3255#&'''6xhh „9  6j  EÂ&t  p%* *% 5"QÿèõÐ48<@DH73673#33##&'#5##5'67#535#535#535#53'5#3533535335ƒ   (0'   ",,"",)8;Ð   %%8II58'ÿê{Ñ 1573#5##53&'3533#3#3#3#5##535#535#535#35#H(F.#&&##''"3#++###33Ñ ##6    SS   |$ÿîð`73#3#3#53'#735#67#ÌÌ ±;à=‹‹gO` 0 4 ÿîð^73#3#3#53&'#735#367#àà¶">Þ>!’’,9J^ 1 4 kÿèôÈ:AIMQ73#3#'67#'737#'67#'737#53#3#3325#"&5'37'#5##535#35#q8 ] ;  9 QJJJJJÈ'   M      _ _!1 fÿèöÐ,04:@DHLRX75#53533533#3#"''3267##5#3#5'67#77353355##655#35#35#35#'67&'”$$$$-  cm   1$ IIIIII  >¬  *    [U ) &  F % #     aÿèðÏ2LPTX\733#3'67#673267#"&55'675#'65533#3##'667#'67#537#735#33535#335Ÿ55@ .    +[$+  '  $)%#7#Ï    I]ÿêöÏ;JP733#3#53533#673265#"''67&'#'6553533&'73#67'675#'6¨**7ƒH"   >O  d4)   Ï##""%/  05," "*>   < : iÿòóÃ#'+/3735#535#53#3#3#73#735#73#735#3#735#73#735#i:778ƒ9::>Š** C++ `** C++ QKKQ´3  3 R4  4 xÿòòÇ 7#3#53#735#ñdez(CCǯÕ<^:qÿíóÐ #73353#5333#32767#"&5535#¢ w1t\ " ./]`Ð:.A@-$@+@lÿéïÐ473533533##5##5##5##53733#"''32765#'67#lƒZ'3")&$·10=F )5+]ÿèöÑ48<73&'73#3#53&'#367#3#32767#"&55#'67#735#35#n54&Ž$1)+s  2 ( MMMM½    (R" (1 #00 `ÿéôÐ $(048733#5'6367#35#33535#3353##5##535#35#9#| 82##5"W##5"pLLLLLÐE=# % & P P ' ‘ÿèõÈ#'735#53#3#7&'7''675#735#35#335™!G!! "(!##!tCCN! #p!€,,, ÿéÏ $*07&''63#3##"''3255#535#&'''6A % E''   //C  3 Ï   J  G<   ÿé…Ñ L73&'73#&''67&'763353#3#"''3255#67&'7''67##5367#00vJ    @G-8  + ,)½      11CI  2  PblíÒ!%)73&'73#3#3#3#5'65#5#5#<;PUNNNN[¿ S@@@@@Ñ  5    |ÿé÷Ð 7&''6&'3'67#°  $#a   LÐ,**+/ !*pÿéòÏ-73673#3#'67#535#73#3##5#535#536u Y ¥7:' "37<7__7{ÿéòÏ-73673#3#'67#535#73#3##5#535#536€  P ¥7;& #27<7__7~ÿóõÆ7#53##5'67&'3#´0l' 6Err´ ŠY%,%#/,+ƒšÿêóÏ73533##"''3255#&'š1  1 ›44ƒ   rÿéêÐ733#5#535#535#5367#'6›7 %__YY\5 ( Ð Š $$zÿõòÇ 7#53##5'67&'3#¯/n*7Bss´‹Z%'*".+*vÿêòÐ2973#53'3673#53&'3673#&''67'67#367¶/s0  |#E  ' ")0 Ð ( P       bëÏ573#"''3265#'67#'6'3#&'#5'67#535'2›A ) # # &$   &.!*Ï B'*    pëÏ773#"''3265#'67#'6'3#&'#5'67#535#'2žA  &  % &!  %.*Ï8 &       vëÏ873#"''3265#'67#'6'3#&'#5'67#535#'2—J  & ! ! &&  &1,Ï1 "        rÿòóÃ#'+/3735#535#53#3#3#73#735#73#735#3#735#73#735#r5335|566:(( ?(( [(( ?(( RKKR´3  3 R4  4  jòÐ,DJ73533#3#3#3#"''3265#'67#535#535#73#&''67&''667#-..'',>=  4   2((-ŒB    +Ç             xñÑ273'67#&''67#3267#"&553#"''325?3PE,  ¢2(% X Ñ +    2  ZóÑ ',:>BFJ73#'673#&''67&''6673733#3#7#77##7#37#3372OZzE      ·X fZ!Ñ            ÿñ|¾*73#67&''67'675&''675#`&   +6  (¾n,5  0  5A f ÿêyÏ!&+17'6733#7'5#'67#5367367#335&'1  ,  # / -& «  JA   O>2J R&B  ÿèÑ 5I7'6'6'&'&'&''67'67676767&'3733#&''67#q #HD  !  V (,   G-/3   'Ñ       ?    '2    ÿèƒÍ#'-3973673267#"'"&53#735#35#35#'33#'67&'% '(! /GG######.Wi#  6 Í   aF & ( 3 2;YZ+#" ÿì„Ï'+/39?EK73#33533533533#3#535#535'635#35#35#&'''67&''4'$KQ    p       F  B Ï  &&&&&&&** p*****B  ÿè€Ê %+73#735#3353353#735#35#35#&'''6pp  Vdd<<<<<<3 $  ÊB =jK++!   fíÑ%8K73#35#535#535#533#5##535673767&''67&'&''67&'764$$–!!!!$6¶ $     .    ¤  B!!>  (      ŸðÓ73#3#5#53&'h¶›®cÓsÿêôÎ_e73&'73673#3#3#535#535#3'33#73265#"''67&'#7#"''3255'75#535'67&'v"1**4{4**3/ %$       !H  ¶      >   "       O÷Ï=735673#3#35335#533#335#535#535#533#&'#'67#  ))))5-,,.0&&&&(8),_+ *}G   4 +  J   ÿé†Ë %+17QX73#735#35#35#73#735#35#35#&'''67'67&'3673#&''67&'67#67#33+22'   B  #  [!A  & @ "ËbE))EbE))      $      añÏ #>BFJNTZ`flr73#53&'&''67'677677'7''67'67676767''3#3#3#735#'&'7&''&'7&'''67'6ƒN&           s====<<#   œ    œ   £ ˜ Ï #                         ÿè†Ï"(.7373#3533##"''32655#'67#&'''66; !!  - \  8 ­"$,,I D$]   gôÔ173'67#&''67#3267#"&553#"''325>6R H-   ¡2!,$ Y Ô 1$ -  @"  ÿéŒÊ%+DK7#5##53#5##53'6673'66&'7&'3673#&''67&'7#367Hv*  ?  , G a'@  ( 2 ÊXJJXXJJX1% #,1& #   %     |ëÏ733673#5##53&'733#735#u  ,³. :‰‰eeÏ ,, ! kñÍ'9P733#"&55#'6653#53#3#3#''#3'6677#535#'667#53&''67&'Ö $ YCjl50  ! $ \ BW    Í    MZ   7?       OÿçóÐ-73673#3#'67#535#73#3##5#535#536X  !!!r&& ¤8<% $18<8__8EÿèñÏ6:>73533#33##3#33#"&''675#535#535#535#3535W>CC77::.. ::BB99>R%%%¾$#  ' =#$ÿèøÇ!%73#3267#"&55#'67#735#35#35#¢F  %  Ç•/ 2.#jEF;ÿéôÏ:@F73673#3#3#&'#3#'67#53655#5'67#5367#5367#&'#&'G:MQPVm  3GM: 06?* !.#*6 DB#"¾   "  T ; ÿéŸÐ,173#&''67&'767#53&'3353#5#'66735#TA , &  `8@C  @@Ð     kv/ ÿé¡Ñ 157#5##53&'735#53533#3#3#3#5##535#535#35# g;D1**''22==2Q2??1QQ¿"" H L K_ ÿ퇼73#3#"''32765#'667#uB=  )( ¼d! 9Q+@SOïÎ 73#7&'''6'66{>`$ !} ;p BHÎC6 0 ÿèVÏ776553'67'56OÏy EE<5  % • ÿë™Î %733#3#533#"''3265''67&'B))4r*  ! [  Î"` K $  ÿèðR7#53&''677&67#4 ®%#0:*.=#"8&r?"  YÿèîÐ773533533##5##5##5##536733#"''32765#'67#b++Œf *5 %3'·10=  F (& +[ÿêòÏ 4;73#53&'3&'73673#3673#&''67&'67#367¬:‰99% &“/R  , ! &<Ï  L        [ÿéóÐ $(733#3#53533#"''3255##535#35# 33@˜C  TTTTTÐ--$q  /‰&:ŸÿëîÐ 73#5##53635#35#½%+ ++++ÐÂÂZ7‡>"TßÐ 73#3#53635#35#i^¡ª½@1ŽŽ––Ð/ .i ' G ÿéó[ 73533#&''275#735#335&'#"TQ Sp6/TAAU?2E1  -bÿéöÐ97&'3733#6767673265#"&5'675#'67#Ê LZ8  ! $   Ð +44#           xm3 1b[ÿèôÉ$73#735#333#&''67#5367#335“PP,,5b;$ '-- 28/B%ÉG%E2+-"!bÿôòÎ .7'2'6'&''&'3#3#535#535'2ä 4J=9 1    s >>7~3>>8Î    &#!!"nÿéóÏ 4A73#5335#&''67&'763673267#"&5'33#67'œ9v'PP;        A&& Ï ^^M<    G"   U*  RÿèóÑ<@HLPTX73#3&'73673#33##&'#5##5'67#535#'6553&'5##5#35#53533535335®9z'"     =%1Ñ   0@@* 2, 4<[U. ÿêaÃ7#"''3255'67567#53T   *š(6 .-}"   7 - WWWW½   (S  %0 "2/bÿéíÏ'+/7#53&'73675##5#35335#5##535#35#í‹! )**) WWWWW³XX  #1ee#3 ÿíõÏ #73#'6333265##"&5477#·/3 71  & Ï   V   A )ðË!'-39?73#3#3#535#535#735#&'735'6'67&''&'7&'"¼URRfÞdNNS@@!CB" x€ 4‹  ËB    "  "" `        RÿèòË %+17OV73#735#35#35#73#735#35#35#&'''67'67&'373#&''67&'67#67#XBB =DD!!!!!!/   V  ) x- \ - 6 '"U 3ËcG ( ( FcG ( (            {ÿéóÆ73#&'3#5##535'67#35#ƒk) (9# $/99Æ 5ij3(©7‚ÿéôÏ'/373533#3#535#3#735#3673#53&'#5##535#„.//(d).aa== rZ>>>à   *1$ (= =! ÿé~Ï'/373533#3#535#3#735#3673#53&'#5##535#.//(d).aa== rZ>>>à   *1$ (= =!OÿìôÎ+05;733#3267#"&55#'67##5367#'6367#335&'†9 .-    96 B 0 !%8/  Î I@ F< 1 U  Z%A jÿéõÒ1773'67#&'&''63533##"''32655#&'œB] S7  "!^   ^#  Ò A4  ^8 3 $ÿèò’ !-73#735#35#3267#"&5536'33#7'&²²ŠŠŠŠ§ %+  * %BB<(# ’O/+-   >   RÿéõÏ,08Q73533533533533#3265#"&55##5#'67#5##5##5#"''3255##5##5353R  3XVtŠ   1¶   ** )),7  !HH;M`ÿéðÎ8<@F73533533##5##5#3#3#"''3267#&''67#'67#735#35#33#h"##" qH_   #  '  KKKK3D GA.  + ) F$RÿéðÏ6:>BH735#53533533#3#3#"''3267#&''67#'67#75#35#35#33#g$$&''Ng   '   )  N&UUUUD733533#3#3#3#&'#5'67#535#535#53&'#53367#7'6'&'_J* ,\QQ`G+$ ,2'4 4E]OOX.(FCVt ”   $$$   '%     ;  gÿêõÐ&,2:P7367&''667367&''66''67'6#5##53533#&'#5'67#‰   @    U  B  B]25-" !-Ð    &    8""+86aÿêõÏ(.4<R7367&''667367&''66''67'6#5##53533#&'#5'67#…   B    X  D  Ca480$ #/Ï    &     8""+96`ÿéõÎ17=73#3#35335#533#335#535#535#533#5356&'''6ˆ  ) J0Î  99BUR "“‡¢  (óÑ &AEIMQW]ciou73#53&'&''67'67676767'7''67'6767767''3#3#3#735#'&'7&''&'7&'''67'6€P!           s<<<<=="  ¡  ž¡§˜Ñ  @  %0  % /   ,    _ÿèóÈ"&7#53#3#7'7&''75#53'35#35#35#œ,l-55!  6A=33GG!!4""†BBK!   #K'~'''VÿèõÍ733#&'#67'5#537'6okA4 ? X!ÍZ@!M`  kT *  ÿòõÐ  &7&''63#3673#7&'&'z/< 84,: L'| 9Ía*Ð)..('e,+."i""RÿõòÆ7#53##5'67&'3#žC•;+CZšš´ Šf (%".,*€ 9ôÑ573'67#&''67#3267#"&553#"''326<6* @'  £1 *# Y   Ñ;% I    Nc9  ÿóÐ7676767&'7&''67'67( '/$ +4"lT1 % #5&@>hÿòêµ 735#53#5#535#peh}mmej8ÃAgÿíôÎ "73353#5333#3267#"&5535#Ÿ#~"8za "*  4/agÎ9/A@.#@+A,ÞÈ"&*.2767#533#"''3255##5##53&'35#35#35#35#[“¼$G  @AHAAU@@UAAU@@²  W  l)/ AöÍ(73673#&'#5'67#53&'735'2Ñ %-  /R&7 ;'$: 8"P) &+YÍ'  "+) &_ÿèíÇ 07#"''3255##536735#&'3#3#5#53&'í  i; i  # <6H %ÇÄ  k‹ßC1  5 #4 ’ÿëõÏ &73&'73#67&'7''67'67676•&$\?   %   ± O,$  -+'WÿéøÒ $(:?73#3#3#3#5'673&'5#5#5#3&''67&'#367°4700008†  $)))))~ ',$  Ñ A    0     LÿèôÏ &*.26:NRX^73#5'675#537367;267##"&53#735#33535#3353533533#3#535#35#'67&'..'  % K‰‰));*e));*}#-$$+§+#5-- !#"H  Ï>     A' # ( !   ,óÒ %AEIMQW]ciou73#53&'&''67'6776767'7''67'67676767''3#3#3#735#'&'7&''&'7&'''67'6ƒP"           s<<<<==" ¡  ž¡§˜Ò  @ $/  $ -   +       QÿéïÐ(7&''6767&'3533533##5#'67#É28"$ V'""(2 (´  -+ ]) ))RR:,ÿênÎ73#3#'67#535#535'6e $##%& %&""-Î & 5! *("TÿèõÏ073673#&'#5'67#33&'3#3#"''3267#7#X7J,! U  +C J Q˜d[ \ µ    J0 'VÿèîÐ573533533##5##5##5##536533#"''3265#'67#^!(""(!m $D  12 ,!·10=  H/7*HÿèðÇ *7#'66553533#3#535#3533#3#535#îy )**4v0)*,,3x3*ÇSE5 2$_3L""IÿèóÏ48<73533#33##3#33#"&''675#535#535#535#3535\=DD6699.. 44<<33=P$$$¾$#& =#$EÿéíÐ$(,7&'73#'65535##"''3255##535#35#ž8xdds  BBBBB¹  <=9 .;Z*;i  -‚"2UÿïñÏ!'7&'73#3#535#53635#'6'&'ƒ Y ,.0œ5)I#=  `  Ï  ‹‹´‹/'&''*$PÿéöÏ&9?73673#3#3#&'#'67#537#537#3#3#'67#535#&'a0CGFK` ;  &#-O#-2C7 !!FM((M&&U„„ še] c "É #;;# )  %œÿêôÌ"(7673267#"''67&''7&'37&'ð,       — .#"# 0%?6IÿèöÏ9=A73673#&'#'67#3533#3673#3#5##5'67#535#35#35#]- Q( ! ( '>QO "%28OOOO¶    ] L  W2IÿéòÐ/KOSW[733#3'67#673267#"&55'75#'65533#3##'3267#'67#5367#735#33535#335“AAL =  ' $:k0? 1+ #.),G,Ð    J?. 07TJ=   & !  \ôÐ2EIM73#&''67&''667#'3533533##5##5#3##'3265#'63#735#¡@     &”S  H  77Ð       5 ! &  ÿëÐ?737#535#53533#3673#367#"''3255'67567#'67*@-##  #    m       ÿû‡Ð %7&''63#'767'&'&'L( DDShA    Ð  %Y ++,!N!!€ÿèõÏ"73#&'#'67&''67#6®@   & ¥<.  6?$%" ÿé”Î$(9=A73#&'#5'67#5367'2&'#35##"''3255##53#735#A J %04& ((P   Q 77Î  # A  'M 8Pa+  ÿèÑ2:>73673#3#3#3673#53&'735#535#535#53&'#5##535#/1++55‚ 66--4cEEEÑ        A A& ÿè“É)-15:73#3#3#3#3##5#535#53&'#535#535#735#33533537#5..54==66.9007$< /' 4.0./ÿóóÏ7&'3#3#3#535#535#º  _%""(f+&&'Ï &7<<7ÿÿK¼ 7##55#35K((¼£½J9977 ÿéò„#'+/37#5#3#3#3##5#535#535#535##535#33535#335íOHHKKhhiiKKHHP+99M9†99M9„$ <  < $I ÿîðR 7#55#353#Ô§“€€¯ßßRHH  &E¼ 7#5##55#35E"¼±¸J9966 RÿèôÐ-15;AEIMSY75#53533533#3#"''3267##5#3#5'67#77353355##655#35#35#35#'67&'†++**3   # q{  # 6* WWWWWW! F¬  *   [V ) &  E % $     SÿéòÉ HLPTX7#'6553533533##5##5#3#3#"''3255#67&'7&''675##535#735#33535#335ò{&&a)4 "   -''?'ÉSF4 6?`@C 2FU' % RÿèñÈ#AGKO73#3#5##5##535#3#'3#3#73#3'73#3#3#3##5'65##5#35#d€6C10C8P&&B$$$$B&&>4511119u 9())))È *--* %      I     ÿùjÐ!73533#3#67&'7&''67#535###  #«%%4/ "$ -4UÿêõÐ%+/3733#3267#"&55#'667#5'6367#35#335= +&   7 "1 0  3"Ð M:  @=E  C'''iõÏ 7'67&'&''67&'76Q) %q'% %' /0 ?*"F 8#Ï       Fÿé«Î#'+73533#3#3##5#535#535#35#33535#335Q !! ))++  - ¹_--_7;SÿèôÐ8<@DHLP73533533#3#3#33##"''3255##5#53535#535#535#35#35#35#33535#35#Z$$''+G:   ^7B&$7$$$$$$6(^$$6((ÀF  %%F-P6ÿñïh 7#55#353#Ó¦’~~¯ßßhVV#0XÿêíÈ73#735#373#"''3267#'67#vppJJ$H  7 6 , !ÈQ-^O6H8SÿéìÏ !73#'3'6573#'&'7&'''6Ùe#!2B]ÏæãtD+ (:oÖ¤""%!!"% $ ^ÿéóÆ 73#3#5##535'67#35#7&'h„72O0 -8OO?ÆZjj;(©6_fÿêóÏ/73533#3#5##535#33##"''3255#53567#l399;^73U@@  :: <¹$$:% ! oÿêôÏ/733#3#5##535#533567#533##"''3255#¦007Z60078 :Q ::  8Ï''„ ' #¤ÿôôÏ73533#3#535#¤FˆGGnn]ÿé÷Ñ $(7'667&'&'3'67##53#=#¦#  "% "#  'r VzU²"!    p SR %%ÿéxÐ&,73533#3#"''3255##5'675##535#&'(+++   %(O  ·4 “E$+-?Qh tÿéõÏ,73533#3#"''3255#&'#5'675##535#ƒ*...    "'*¶5  (0!IH$-)>P[ÿêóÏ 2973#53&'3&'73673#&'67#5373#&''67#6­8ƒ73"$Š4 !*P  3 'C*Ï  L  ^  >  žÿèõÏ#5'67#53533#&'5'Õ u)"/>1176 "cÿèõÐ(7673#3655335#535#53#&''67#n $,3* -, + -°  'rr'{-.+&JÿéòÎ%+1773673#3#3#535#535#7&'&'''674''4'^P  '?55D—?559&  n  m ]  ¤:  ¦ ?ÿéòÎ%+1773673#3#3#535#535#7&'&'''674''4'UV )C88H D::=)  p t a  ¤: ¦  ^ÿèôÅ !%)-3973##7#53737337#3#67#3#735#35#35#'67&'ì w1zzTTTTTT  GÅ dG ( (      VÿèôÅ "&*.4:73##7#53737337#3#67#3#735#35#35#'67&'ë |   !4YYYYYY  JÅ  dG ( (      NÿéõÈ  $(;@73#735#35#3#7#5'75#35#35#75#7#53&''67&67#eWWWW(£P!!=G      ÈF* ( &QZ46&)     `ÿéôÐ 57&'7'6'33#5##533#735#3533#&'#5'67#x n  1>i>%]]77,=@4  0Ð    %/0!68  #<="ŠÿéõÑ-1573673#3#3#535#'67##"''3255##535#35#˜07:&\%  U   )))))À   Ka  *{!1QÿèõÐ-39?EK73'67#&'&''63533#&''67#7&'&'''67&''&'x&81    ;   $8    c  YÐ M> 49    +44/')5B  ™  QÿéðÏ $(A73&'73#3#3#3#5'65#5#5#3353#"''3255##5##r"791111=‰ ;(((((;>  ;Í  @    ##8 %""> [ÿòóÃ#'+/3735#535#53#3#3#73#735#73#735#3#735#73#735#[A>>?‘@AAE˜--L--i--L--PLLP´3  3 R4  4 ›ÿéûÆ!%73#3267#"&55#'67#735#35#35#­@     ÆŽ6  :;.dAB ÿéƒÑ?767&'3#3533#"''3255##5##5'67#5367'67&'"   ?F (   # Ê     ;  &YYGC  ÿç™Ñ-NT733#3'67#73267#"&55'75#'655335'673673##"''3255#7&'G::> +  /, 1*.  ,Ñ     F9. .5P… "  *   ÿé’Î17=73#3#35335#533#335#535#535#533#5356&'''6,  ' ˆ C(Î  99BUR !“‡£ ˆòÏ733#3#53533vTThä(,Ï))’ñÏ733#3#53533zZZdã.+Ï $$HîÓ 73#53&'3#735##5##5aÜe?¢¢}}­¸Ó )* %(( ÿç’Ñ!>DJP767'7&''667'7&''6&''67&5'6767'7'6'63'6>   "&3    " !%!  ' %(5 5,#N IÑ          4 ( ÿé‡Ð,048<73&'73#3#53&'#37#3#3#7'75#535#735#33535#335+2z.#&g*..03?3--*,E,½   (J   -, ÿèzÐ"7367&'#"''3265'3'67#C    4/ ÐG  Z ŠH*4 ÿè‰Ð"7367&'#"''3265'3'67#J   5.  ÐE Y ŠH$8IÿêôÐ 873#'6#"''32767#5327667##"&55'753753}gr #w   " 6 Ð  )I GBD  F+% )$^ÿíöÏ 873#'6#"''32767#53325267##"&55'753753‰Zd o   B Ï$F "IEH  L#-(ÿìöÐ 873#'6#"''3265#53327667##"&55'753753«=C O   '   Ð )CJDM  N/)?ÿë•Í73#&'#5'67#535'6Š      %Í( d`",$>ÿïðÍ !'7&'7'63#3#535#35#'6'&'p  hnœ37²=+>J q  Í   ‹‹‹‹1 )'&(*%ÿé•Ð6:>BFJ73673#33##&'#5##5'67#535#535#535#53&'5#35335353355  *# #   !! 14Ï   #% 1OO2 5$”ÿèóÏ+177673&5#"''67&''7''7&537&'å$))     ¢  1$    53  ÿéóÂ73#3#"'#5##535#3255d)$ #);Â"o "’u‡"4` XNÿéñÏ&.26:>73&'73#676767&'7''67'67##5##535#33535#35#NICS  #$$& =D8•a&&:'a&&:''º   %     Zff$6{ÿêôÏ %+17&''63#3##"''3255#535#'67&'±  "4,, -- J Ï%&#D  A8 =ÿçöÐ"&273#3#&'#'67#537#53635#35#3533##5#‰H>U0 )+ &-:2'^^^^"(("ÐT '&T -2n%%BÿéõÏ,08Q73533533533533#3265#"&55##5#'67#5##5##5#"''3255##5##5353B 5b_•   %$7¶  ++ )),8  #II>( !@ ;ÿéÎ7'6'67#c # Î.a  ) x€ÿèõÈ $(735#53#3#27&'7&''75#735#35#335Š' R''  )11'..(tCCN! #p!€,,,—ÿîõÐ %73#'6333265##"&5477#´4: <%    $"Ð  "B   AŠÿèõÉ&7#3#3#3#67&'#7'5#535ë@9999G(  '  É  DM ZlBÿêƒÅ73#3#"''3267#735#H9%+   + "&ÅK)F!-M&5ÿû¢Ð %7&''63#'767'&'&'p $;;FX7   Ð  %Z **+ O!!ŒÿéðÐ"(733#"''3255##5335#35#'&'7'6¶%  4#4444  R  Ð=“  ;ª0Lu    ?ÿèñÌ 37;7'66553'#33533#3673#3#5##5'67#535#5#5#j iiY - ::%8)W:::–/E7 2$`6%#  V EUDÿëôÎ&EK73#&'&''675'67#535'2367&'#"''3255'67'&'Ú !KK* ", ''. 3$ +@KA    " ) Î  s+      GÿéóÏ E733533#537'6'&'3673#3#3#&'#5'67#535#535#53&'‚6 2Z n  ( ##D<ÿèìÈ#CHLP73#3#5##5##535#3#'3#3#'3#3&'73#3#3#3##5'65#5#35#RŽ>J76I=W**I((I**I)) ":;6666?‚ A.0000È *--* %     J     GÿéòË %+17OU73#735#35#35#73#735#35#35#&'''67'67&'373#&''67'67#367PFF""""""AEE!!!!!!2   Y  ) ~3a&  "< -. '<  ËcG ( ( FcG ( (              GÿéôÐ!048VZ`dj733533##5##5#53##535#35#7#"''3255#535#5#3533#3#&'#5'67#535#35#&'735'6l6**6%%#7''''— =,,,,Q300-(   /3 (  Ð  <‚¾ $¬ n< 3  !) 3-   MÿéóÐ!048W[aek733533##5##5#53##535#35#7#"''3255#535#5#3533#3#&'#5'67#535#35#&'735'6t4''4''"4""""   8((((L-..**    *- &  Ð  ;ƒ¾  #¬ o;  2  '  2,!ðÈ!*.7367&'#"''325567#3'67#3#4—  4  wX: 5BÄÄÈ   "9H N 6)S nóÆ73#3#3#535335#ÒaOOiæ-)]Æ&&4€ÿçõÏ+/7367&''66'''665367&''´ $ " 4 &   = Ï   + ,y )4  " S)ÿç‚Ï-17367&''676''367&''676''C  %  " + #  ! Ï  ,,   )TÿêõÐ'-3;Q7367&''667367&''66''67'6#5##53533#&'#5'67#z   I   `  K In<@6&! %4Ð    &     8"#,<8 bÿéòÎ #'<LPTZ7'2'6'&''&'3#735#3353353533##"''3255#'#67'7''535353&'ã 6NA. (    ††'*"   "3  !!!(Î    -3@  <>$ n   ÿèïS73'73#&'#'67#536t/  $X@ HO AQZR  01  )WÖÈ 73#735#35#35#)­­………………ÈqO-,NÿéíÐ$(,7&'73#'65535##"''3255##535#35#¡5q]]m  =====¹  <<: 09Z*;i  -‚"2}ÿéóÏ06<7'6&'#"''3255'67'67676767&''67&'Þ #* %(       "8 Q  Ï QA  ; & 4! 4ÿéóÎ#)-17;Oj733#"''3255##5#'655'667#35#33535#73573#"''3267#'67#3533#3##5#535#'6[   -P    (( Η )$ )1;  .Gp9 !, "A 11 ZÿêóË +27&'7'6'&'3673#&''67&'67#367¥J ]  .Q. ' '<Ë( N &  " ÿëyÅ %*.733##3#5##5'67#537#5365#3353535#X 6@(  !,&((Å+, Z C + })]ëÆ'73#3#3#535#535#73#3#3#535#535#c*&&)f+##'qb)%%)g+##&Æÿè÷[%+73673267#"&''677&'''67&'LA+0I"&  '$ !%  < ±F.%)   H  " oìÈ'73#3#3#535#535#73#3#3#535#535#c)%%(f+##'qc)%%(f+##'ȈÿéóÏ 73533#3#67&'7''67#535#$$$,3 #($,$«$$46 $+ 34ÿìñE73#3#3'73#535#535#Í\TT3  ÝeTT^E ”ÿêõÐ'+73&''67&''667##5##535#°.      1&&&Ð "       W` aA/ÿíðI73#3#3&'73#535#535#Ì\OO()àeOO\I IÿêôÍ17=73#35335#533#335#535#535#533#535673&'''6k, ¤ 6 . ƒ>>MK\ ‰ f ^ÿèòË %+17OU73#735#35#35#73#735#35#35#&'''67'67&'373#&''67'7#67#c??8@@-  O  ( q*V  1 #)!P -ËcG ( ( FcG ( (           ÿêð773#3#3#535#535#&'#ÔaU &ßeTT_›7  *ÿìð;73#3#3&'73#535#535#ÔaVV2 àfTT_;   ÿç{Ï-73673#3#'67#535#73#3##5#535#536  Q ¤8<% #28<8__8kÿêëÅ ,73#735#33535#33533#"''3267#'67#536}kk,E,6: ' - (%(Åa9?.@"*@2 ÿçóH 7#'67#53##¥B7 1Aæ:5? 0KqÿéóÅ2733'67#3#33#"&''6735#53&'767#~h& ,, "  6B  OÅ +3 !C h  ,QÑÒ 73#53635#35#_h¥%~~~~Ò gg 7AÿórÐ 73#5##53635#35#8/88888е »^<‰;+ÿè×q 73#5##53635#35#qW„=.„„„„q s s2B-]ÑÐ 73#53635#35#i\¤4%}}}}Ð ^^ /8ÿïðN735#53#3#3#535##R^Ñ_SSgàeR'-iÑÐ 73#53635#35#g]¤2$ÐTT +1)ÿéÕg 73#5##53635#35#`i†- ††††gg h,9`ÿèõÑ#'373#3#&'#'67#5367#53635#35#3533##5#˜=6K"   +'LLLL& &Ñ U    U -3k''ÿÿSÎ 73#5##5365#5#-Î ¤ ®Q22D33 =ÿêñÐ#'=JPV\b73#3#'6553&'5##5#35#3353353267#"&5536'33#67'&'''67&''&'¦=.+‡J.    a##m \  R   Ð 0 A1 3:Y2 '    1      JÿêòÐ#'>KQW]c73#3#'6553&'5##5#35#3353353265#"&5536'33#67'&'''67&''&'¯8*'{B*  Y  g  U  N  Ð 0 A1 3;Y2 &   1      WÿêòÐ7;?CGKQW]c73265#"&55#3#67'5#'6553&'73#3#6'5##5#35#335335&'''67&''&'ß  # >4'$$ '  P I b   6C @2 2 5B] *" .   *$ L22> RÿéõË 59=AY_73#735#'3#735##367#533#7#5'75#'665535#35#75#73#&''67&''667#«@@Y??|{%"5   -4%    Ë--)%  >J 4( #GR*+ g!      &[ÿéóÍ73673#3#5##5'67#35#g.JOY@  &).@@ s_&/ƒ?oÿéîÈ&*7#"''3255#&''67##5347#53#'35#î  #   #8+d')>>ed  M  %j| NN '*\ÿèòÏ%+177&'3673#3#3#535#535#'67&''4''4'“  D  &5//7ƒ7//5  u  Ï$p  ÿèfÑ73&'73&'#5'67#!    *?±   pc ? ÿéTÑ73&'73&'#5'67#  .° )  f\ @zÿéëÏ 73#5#533533×]š±¢ÄÄnÿõòÆ7#53##5'67&'3#«6{/ $8Mƒƒµ ˆa&+##/,+‚fÿéôÈ 73#735#35#3#3##5#535#wnnGGGG{5====2ÈZ49733ÿéiÐ73#&'#5'67#535'6`    #',Ð&  mj!#/  ÿçôI73#&'#5'67#535'2Ù (0fL". 9'#: 1$PeP]I/+  \ÿçõÑ"@FLR767&'7&''667'7''6'67&'7&''674''6'6'63'6–  +0;  C   ( '*) <+ +-!= =2'X SÑ           2 (‚ÿêóÐ7'673#&'#5'67#53±2* '*$ '.°  *6+ij+#3\ÿçòÏ#'+/5;73533533#3#3#535#535#35#35#33535#335'67&'i$%A5{3>#-$$ 3"U 3"E $F ¹]]`;*   \ÿíóÏ,048<73&'73#3#53&'#7#3#3#3#535#535#735#33535#335e;9#“#X9-~6;;A—C::5""5#X""5#¼    M-, OÿçôÏ #>K73533533#735#33533535#335335#3#3#67'5#'6655&'76d')‡'b'|qq~Y   }   0 ÁI,+(  - 6# 6K  (  sÿçôÏ#'-373533#3#535#735#3353#735#35#35#'67&'+,,77+,XllFFFFFF  5à +   D_C ' ' !      Uÿé÷Ò!%+17=EIM733#5'667#35#33535#335'67&''4'7&'#5##535#35#Š:$… %72%%8'_%%8'g YW  OOOOOÒJ; &       PP %  ÿé[Ð7'673#&'#5'67#53. #    ­( me%.wïÐ73#3#53&'#53&'367#~Y&>Þ=$Y 9PÐ   A bÿéôÏ1767&'7&''63#3#&''67#5365#'6œ -2M*;5) ) 5 1 16 Ï! ! )! %  ]ÿèøÑ#'+737#"''3255'67#5353635#35#35#›6  (?9&VBBBBBBÑc  ;  %"!s 3<: ÿè€Ñ .273&'73#3673#53&'#53#67'5#'66735#$ )c nX  44º   f::,  ;!  ,rÿéøÑ 5973&'73#3673#53&'3#3267#"&55#'6765#735#†$ )c nX   44º   ,:2  8   ÿè}Ñ,0473'73#3#53&'#367##53#67'5#'6'35#35#()o)]  ::::º    wNN! / Q.xÿé÷Ñ37;73'73#3#53&'#37##53#3267#"&55#'676'35#35#ˆ()o)^   ::::º   wNN#  )  @.ÿëæ~73653#"''3267#'67#OcO4%GLe  R(7'6 @ÿçðy73#3##5#535#Ç[ggeeXy&FF&ÿñî~73#3#5#53&'‡]¤›¯!d~ M` ÿéï€73#3##5#'67#535#5#!Ä,66L3 +36&„J€)HH2%))))ÿìò‚ 7#3#53#735#ç¶ÁÕ;qqII‚p–)Cÿêñ“%+73533#3#535#3533##"''32655#&'!VRRfâhV“(( “% † 9& #  !eâÏ7335#53353353#353#!CO;9MBÁ‹!+##-!)hÿèõÉ'7#3#3#3#67&'#67'5#535êWNNMM`7   2É   EN Zl eÿéòÐ!048W[aek733533##5##5#53##535#35#7#"''3255#535#5#3533#3#&'#5'67#535#35#&'735'6ƒ,, -z   0E'&&##   "'  "  Ð  ;ƒ¾ ! #­ p; !  2 " 2 .   aÿê¦Ï73533#&'#5'67#h  Ÿ00 mf '3]ÿèóÏ6:>735#535#535#535#53533#33##3#33#"&''673535|..55--77;;1 122'(  >: ;$# w$jÿêðÄ%+57367&'#"''3255'67567#&''3353#5#~a   J btÄ  $ $ 6&  ¡Yÿê£Ï73533#&'#5'67#`   ¡..  fl&/hÿéõÑ,067#'733#67&'#"''3255'675#53'37&'À@F&2       > 6   5 W( &Ï =,     L* 86  3 $&ÿéõÏ(733#3#5353333#33#"&''673¹""%e ""    Ï!">>+ B ƒÿèõÑ 57&''6'&''633#33#"&''673Ñ  ,      Ñ   )1  +7!- "F bÿéòÎ +/3773353353#3&'73#3#3#3##5'6#35#35#n$"#)-''''0e7"""""Â''-    i  %& ÿìÎ :7'2'6'&''&'3#3#753#5'53675#535#'6t ,>3. "   >#++&" --Î     ,=  1*0 hÿèôÐ #)AG73673#735#&''67'7&'''63&''67&''667#j"F€\\F      2 9 $  &1 ¾ T4     6        "  ÿéèV'-377'7&'#"''3255'67'67672&'''6¦(4Y;  %'( #T $ M       1   aÿçïÇ'8KO73'767#533'67##"''3255'67##"''3255##5'#5'673&'35#i5  Uo/   & ,…   \T = '      .f  Ohz  %%  3 XÿçôÏ #<I73533533#735#33533535#335335#3#3#7'5#'655&'76h&'ƒ&_&xmmzWy   .  ÁI,+(  - 7% $7L  ' ƒÿêôÏ28>D733533#3#3#3#&''67#537#535#53&'#53367#7'6'&'¨ )&'/'  " %*$$' 1I   Ï555   % G ÿìXÌ!'-767'7''67'67676&'#'674'C     )&±># /+k\ÿêõÏOSY73533#3&533#673755#"''67&'#3#3#3#67'75#535#535#535#535#75#7&'f'#"     '0%# X  ·!<'/ ) *9 –pC  ÿþsÏ767'67'67676'6` #'1 )36§:  0)o  lÿéçÐ733#5#535#535#5367#'6—; 'gg__g= , Њ ## ZÿæöÆ#'-373#3#&''67&'767#535#35#3353655#335k…:351 1( #  248 3R 3 Æa  a>? [ÿæôÎ473#&'#5'67#535'2#533#"''3267#7#'6Û ;/  (5,6]   ,Î (( ‚2 &.hÿéõÎ673#&'#5'67#535#'2#533#"''3267#7#'65à 4# #66"b   #&#!Î)) ‚4 2 )kÿéñÈ 73#735#35#3#3##5#535#{iiCCCCu299::0ÈZ49733bÿêôÎ17=73&''67''667#3533##"''3255#'67&'= " &# "   1'533  5Y  Î     _8  4 !  RÿèïÏ'-735#535#53533#3#3##5##5'66&'a://779900@ŽyE.))%"  | M<>O(* #  eÿìöÈ!%)-173#3#3267#"&55##535#735#35#33535#335mn.77 #5-JJ ##6%[##6%È8_   k`=^ÿéïÐ *.27#5##53&'7#5'673#3#5##5367#35#35#ïd;5 "R!"(((((¸")  Šc$  ES# lÿïòÐ #'+/?73533533#735#33533535#3353353#3#735#3673#53&'t"#x"U"j€€rrNN$†!ÀO/1, .$   ÿæõX$*73'67#&''67#'6'&''6|X )9 6  A H5"%X .'2      RóÐ%+1773&'73673#3#3#535#535#'67&'7&''&'4 0 6]WWgßeRR[ ‚O  cº     6        ÿèeÏ &7&'7'63#3#3#'67#537#535#%@  >S"$ ! Ï  /$ ÿèbÏ '7&'7'63#3#3#'67#5365#535#"@ :L!$Ï  .$ dñÑ.4:73673#3#3#&'7#'67#535#535#53&'&'7&'N 7 9]UUg   › gQQZ7) = Ñ    F    …ÿéôÍ 7&'''63#"''32765#'67#Ï  R    Í4 42 1h  BV"L‚ÿêîÎ73#"''3267#'6##535#¤B  8 1&Δ.#w 0WfF5„ÿèõÌ#7'673533#3#&''67#535£ ##)!  # # (* $(**'453"03+ÿè×f 73#5##53635#35#zQ†E8††††fk k 0; ÿéõÏ 0J73533#3#535#3533#7'75#73533#3#535##53#3267#"&55#'6%##)f*% :5p)/;6# À6 D $/   ÿéƒË '+773#735#3353353#3#67'5'67#735#67&'ll   [qqh9   BB'  Ë:6 3   )   ÿé‹Ï$=EIO73533#3#535#3'67#3#3#535#3#3##"''3255#535##53#=#7&'200*g*2x e P2r-" ~  ((]08Å   #    " "  A @@   )ÿé×> 7#5##535#35#׆††††>U U- ÿé‰Ç73#7#5'675#35#35#75#{ $* &,,,,,,Ç83Ž R Z ÿêðw7#5'75#53#'35#35#5#î*œ%Í#yggggggXQ?4/ uÿñõÊ733#3#53533¹'')€ÊGnŸŸrÿèôÏ#7#5#'667##537333267#"&5í#0  ¤6$FHD?&8++GV tÿé÷Ï7367&''66''6® # - $Ï ?%&<8*S1#mÿèõÏ $(,73##"''3255##5#53535335#33535#35#ç  H -,,H,³q/  +HHq8'''`'''uÿïòÄ73#3#3#535335#‚o***+}2ÄDX}}¯ kÿìöÑ#)/CI73#53'3673#53&'3#735#35#&'7&''33325267##"&5''6²/q- # jjFFFF*;  F     Ñ   .H, )"       # kÿêøÒ LPT73&'73#'67&'3533533#3#3#67&'7'5'67#535#535#5#35#t46},  :E/  +  .#J¾       9 &   &   rÿéóÎ #'<LPTZ7'2'6'&''&'3#735#3353353533##"''3255#'#7&'7''535353&'æ 1F:(  "{{#&  / &Î    ,4B  >=% n   cÿéôÐ 1FLR7&'''667'7&''63#"''3255'675#'3#"''3255'675#&''&'Ç '!   !&?  -F?  -]5Ð & ! ,d   &d   &    ÿéíV73#7#5'75#35#35#75#&´$& $$kkkkkkV:> " & ÿêðX7#5'75#53#'35#35#5#î'' Í zffffff@;1 $ #  ÿé^Æ73#7#5'75#35#35#675# Q    Æ€:3‘""T"[! gÿéñÐ #)/7;?CT7#5##53&'7&''33265#"&57&'''63#53535#35#35#3##"''3255#î^7     O T  s ‰V|2   7½         '''4 aÿèöÎ9CQ7676767'74''67'67676767'74''67'673##533'3353'67#y    ;    &s &$š . " . "a22i'"#'% ÿêðE7#5'75#53#'35#35#5#î''É zffffff 50( ÿèî'+/735333##3#3##5#535#535#535#535#33535-DG##GPPee``KKDDaaDW555v        ƒòÏ733#3#53533zVVdã'0Ï,,)ÿéÖs7#"''3255##535#35#Ö ……………sq  -Š&8,ÿéÒi7#"''3255##535#35#Ò €€€€€ii  )€$4iÿõòÆ 7#53##5'67&'3#©;‚1%:M„„µ‰b&*$#/,+gÿíóÏ .73733#'67#7&'3267#"&55'67536iPQb     22R( 'F? K &"   N7jèÑ/73#673267#"&''675#'67#53673&'´ #S   ( < 2@E<Ï    1 #  fÿêóÏ#)/733##"''3255#'67#53673#3'67&'©00  3 %?E !"  V Š.I  D$$! #! ÿê\É7#"''3255'6555#&'6\     1 ÉÄ  7 )">xq_ B  ÿêcÉ7#"''3255'6555#&'6c    6# ÉÄ  8 )!?xo]  D eÿêìÐ 73#"''3267#'6##535#‡Z  M G0ÐŒ|#&XgG5bóÇ!7#53'67#3#33#"&''67w^Ð E??<530 µ  ( _ÿêòÏ-37&'3533#67&'#"''3255'675#&'Ì  R655      )6 Ï   ''1 #A  <#$*. mÿê÷Ð&,273533#67&'#"''3255'675#7&'&'w/44    $/]  <  §))1 "@  7 "(2:   A wÿê÷Ï,27&'3533#67&'#"''3255'675#&'Ô  N222     2  Ï   ''1 "@  9#0 ¤ÿéõÐ$*73533#3#535#3533##"''3255#&'¨Q -   -  ´  KC  ?  ¢ÿêðÏ733#5##5##5335#35#35#35#Á      Ï-ƒEE…1 Q eÿéòÉ FJNRV7#'6553533533##5##5#3#3#"''3255#7&'7''675##535#735#33535#335òn\&-      +%$8$ÉTE5 7>` B E 3 GW ' $  ÿéñ@73267#"&55#'6655Ÿ ""= @8 + ÿéÎ!%)-73#3#5##535#535'6655635#35#35#w %# ;%%%%%%ÎŽ/J: 5I<u79 ÿéðl"&*73'73#3#3#3##5'65#5#35#C1  VSIIIIW® &SDDDDDk     I    qÿèòÏ(733533##5##5#53&''67&'76‹&&L   Ï7 1" #. # ÿêyÏ'73533533##5##5#67&''67&'    $´""##0$!‡òÒ(77&'77327#"&''7&''#5'6 (  !< ):.'   &Ð       ' ÿèòc"'7#3#3#3#&'#7'5#53567ÖŽ‡‡ˆˆª&  <@3# ((l c    ?OqñÐ *073'67'677367&'326767#"&5'&'b'8J#)"'  (e Ð&  !     D „ÿéðÎ*.2973#3#"''3255''75##535#535'235#3357'75#á ''.   ,%%/%  Î;R   !Yi;Jk $ ÿéò>73#3#&'#'67#5367#)¯OdN=GQ ER]M>"$ [ÿéíÊ  $CNX7##535#35#7#"''3255#535#5#3533#3#&'#5'67#535#35&'75#36735—*€   )L%&&""    "% !  ÊEœá ' )Ì „E '  ; %&; 6   ÿèç¢ $CNY7#"''3255#535#5#'##535#35#3533#3#&'#5'67#535#3&'735#33'6735ç   I5555-G5555 >??77 % "+7> &8  ¢]: ,;º 2  $  2,   8ÿíóÏ "&.26:73#'63#53#3#'#3353533#3#53535#35#35#¯17 %[X,,9BB7»+*Ï  G‚3G#%<<<***** RÿìôÐ "&.26:73#'63#53#3#'#335353#3#53535#35#35#¿$*#PN$$3880¢%$Ð I‚4G#!===***** _ÿè÷Ò !%6?IV\bhn7&'6'&'67&'63#735#&''7&'737'77367'7733265#"&'&''&'&'7&'Ö  M  6  ;~~ZZI   D 3 1   % AÒ      -F ,    1J OL P%% %1)        Kÿè÷Ï $7#67&'#67'7535335#35#Þ? %@##. 98aaaa³f   EH ´(C[ÿèöÐ $7#67&'#67'7535335#35#Þ5  !9 ( 12RRRR²f   DH  ´(Cÿî~Î!%7#67&'767''67535335#35#wI  & $$5555°j8   ª-D:ÿèóÏ%=D73533#3#3265#"&55#'67#535#3&''67&''667#X:;;I0   $$G:0 A & ,#%3 . -  :¹    @        YÿèòÏ$<D73533#3#3265#"&55#'67#535#3&''67&''667#l200=*   <2*8  $) % %  /¹    C       bÿèõÏ$<C73533#3#3265#"&55#'67#535#3&''67&''667#s000<&    :0+6  "' $  " -¹    C       ÿèô£&>E73533#3#3267#"&55#'67#535#3&''67&''667# VSScB ' >& :fVMS 9 ?(+; 2# 5L“    ,      ÿé—Ï/37;?CGN735333##3#3#&''67'67#537#535#5#5;5#33535#33535#33567#-//08E " &&0--J-M0(& Ä  -   -  ) GS CÿêòÎ"(73533#3##"''3255#735#'67&'NDK¢z3   2PP o³I>  9#@ " XÿëôÏ#)73533#3##"''32655#735#'67&'g7>ˆ q/   /KK g  ³H? :$@ ' _ÿêóÐ"(73533#3##"''3255#735#'67&'k7<† k+   ,EE c  ·GE  @#B) !UÿéôÏ "7&''63#3#"''3255##5#Ÿ"% $!%0CC!  1*Ï ,++&6 ![[_ÿéôÏ #7&''63#3#"''3255##5#£# !#.CCx   *(Ï*,(%6 ![[fÿéòÏ #7&''63#3#"''3255##5#¨! "+DDr   +!Ï*+'$!6 ![[ aÿïóÐ #'+/?73533533#735#33533535#3353353#3#735#3673#53&'h'(…&a&y‘‘ {{WW#(’ ÁQ0/+ / #   zÿéöÏ 7#5'753'&'&'ôBECNLH Іt-:ÿçõÏ(0473533#67&'7&''67#33267#"&5''6673#RCG\'+7?*d   V+³!  !IR % U,0('bLÿèõÏ*.673533#67&'7&''367#33267#"&5'3#'3'66c9?F !  69._('¶   HW Zb`-0'SÿçõÎ"2673533#67&'7&''367#3'66733267#"&5'3#k78B  47* K'´  G5, &1S Wf^ÿîôÀ7#533#3#537#5337#7#"y–!C.'0¬\PPHHcPPfÿðóÁ7#533#3#537#5337#7#š%t%;' (®XSSEEfSSZÿéóÎ!17IM7#53533673#&'#5'67&'3'67&''667#353533#3##5#7#3+;  -      ! ",,“** )) Hb -1     %1((0PÿéóÎ!37FL7#53533673#&'#5'67&'353533#3##5#7#3'3'67&''667#Š.?  #0!!!   . $00Z!   “**  *+ I¡-,,-> -1   FÿêóÎ@FL73533#3#3#67767&'7'#"''3255'67'67#535#535#&'''6T@@@88EZ ()"    @ /I::@oB ½    ) #   Š    AÿéôÏ-C73'667#&''673533#3##5#'735##53533#&'#5'6i$"   C*+*?JMA* )% (Ï'.! '$'p#'@>#;ÿéòÏ )-1573353353#3&'73#3#3#3##5'6#35#35#P//—0 :<4444@‡ I33333Ã''-   e %%MÿåðÏ1767&'7&''63#3#&''67#5365#'6$' 7? ]3HB-0. / ?D" Ï! ! (& ,$ EÿæõÈ %73#735#333#&'#'67#5367#335[[66<{A0 58 3=C6† #) x4!*<<GÿèõÏ7&'&''67&'36”R +( '!2 /.  (&ÏP/5F@.&UÿòòÏ!73733#3#537#35#35#35#'33#ZHE T  0 %(  h  ["2   # + !     <    }  = #(^ÿéóÏ'733533##5##5#53&''67&'76))J "( 'Ï7 +( &OÿêóÉ"&*.373#3#3&''67&''67#537#35#35#35#67Y•E=TW  %!.%  -<XXXXXX  É g    g * ) +; QÿéïÑ1J[_c73673#"''3267#'67#3733#"''3267#'67#73733#"''3267#'67##53#"''32=#5#f3:   -* (     P      ,| VVVà   * $ % r eP  )  NÿéëÏ #';?C73353353##"''3255#'65535#35#'#"''3255#'65535#35#b&&…‰          Â++0{ %)S(@9{ %*S(@ PÿçóÈ %+73#735#3353353#735#35#35#&'''6X••,y††``````@! !  È<5oN-,#    fÿèöË  $(:?73#735#35#3#7#5'75#35#35#75#73&''67&'#367vkkEEEE#ŠC  .=    ËI, ( (OY456)     MÿïõÑ 59=M73#5##53&'3533533#3#3#&'#'67#535#535#35#35#3533#3#535#žGu=)$ ### ")%@’?Ñ ..5  "0>EîÐ;S7#&''53&'73535&'#6''67'67'677676767#"''32654'67##5¡ ###67    §¾D f  )2:    # ;"  r€ RÿéòÎ #'<MQU[7'2'6'&''&'3#735#3353353533##"''3255#'#67&'7''535353&'ã =WI5 /    ““+/'   '8 &&&*  Î    -3@  <>$ n   BóÒ %BFJNRX^djpv73#53&'&''67'6776767''&''67'6776767&'73#3#3#735#7&''&'7&''&'7'6''6ƒPq      ‡     !<<<<==r  ‡  ‰†‘Ò  :   *    * *            {ÿòëµ 735#53#5#535#X[o\\Xj8ÃALóÑ173'67#&''67#"''255#3267#"&55C.F ?%  "² 3 +" Ñ I=   + A  X ÿéõÏ-7#673267#"''67&'#'6553533&'7ñ;    r„ °3,&5"" !'&7@I=/ .:T  bÿêëÅ ,73#735#33535#33533#"''3267#'67#534urr.K.9> * 2 , ,/Åa8=.@$+@1˜ÿëóÐ%73#53'67'7&''67'67676Å W# "  "  Ð@P,% -*(`ÿéñÆ%+17=73#3#3#535335#3##'3267#733&''&'''67&'i†900;:!l q\" 2  +Æ''5g:$; &  —ÿëðÆ ,73#735#33535#3353733#"''3267#'67#¤II  '  <*   Æb9@B @+5 , ÿë_Æ +73#735#33535#3353733#"''3267#'67#KK  )  <)   Æb9@BA 15 ,ÿéó{73567#533##"''3255#f€ž#jj  f@ / +¢íÑ 7#5##53&'7í³bÁ ¥íÑ 7#5##53&'7í³bÁ  ÿéð@73533##"''3255#&'ž00   ž7 '    mÿéðÏ7673#3#"''3265#3#y_``  cXX€<"/[$@!+ÿèÕ] 73353#5#533v6•8]S2TF2 ÿèîu73#3#5##5'67#35#Ú‚ Šz /@8zzu\ H [+ÿêî’#)/733##"''3255#'67#53673#3'67&'}LL   Q5B}ˆ 71+ )!![,  '    cÿéòÏ-C73'67&''667#73533#3##5#'735##53533#&'#5'6     0  .790  Ï '/    (!(q#!:9fÿéòÉ /73#735#3353353#5#535#535#53733#3#3##n$H,,##&&#))%%**É@5š$$LÿêõÎ@EK73533#3#3#676767&'7'#"''3255'67'67#535#535#'''6Z>>>66CW  )(! %   > /H99>l-A ½   ) #   ‹    JÿéòÏ +/3773353353#3&'73#3#3#3##5'6#35#35#`')‰+ 26////:yA,,,,,Ã''-  i "$& óÏ!'+/73533#3#535##53#3#53&'35##363#735#eggYÄWe2§Aå?jQ>~±±‹‹Å G))  ) LÿëõÏ,N7#5'67#53533#&7#5'67#53533#&3'67#3#33#"&''675#…    F    ‚%00$1#  >+#   &#  !  *L@ÿëõÏ,M7#5'67#53533#&7#5'67#53533#&3'7#3#33#"&''675#}    J    Œ–*55'!4% C‘,&   '&  !  3  KOÿéõÐ%)73#&''67&'#53&'67##5##535#¢@'*") &AHQOOOÐ     LDa aB0LÿêõÐ ?73&'73#3#735#3353353#67&'67'5'67#53&'WA?– ƒƒ$+B>  5   "5Gº >1  /   LÿèðÐ "(.4DQ73#53'3#735#3353353#7'6'&'&'''667'5'6767&'œFŸC/ˆˆ&:O!r_(!   *5   /Ð )/'11         ) ÿèöÏ-373533#3533#67327#"''67&'#535#7&'888D::     šB8¾  Á ++;"#)6+ #" #P  IÿéòÁ#73#3#'67#5367#33267#"&5jv4AD @; .1.=  ÁN0,AVL   Jÿë÷Ð#)/@7373#3#5367#35#335335&'&'''6733267#"&5WD@DDŠ1@(0  G  n#   ¸ EE J!!!!!9  # - CÿíòÏ!'-=C7367#53673#3#735#3353353#&'7&''33267#"&5''6[+8<DIG†&|››K  ER   – @=  %  & 3ìÒ$73673#3#5367#35#35#35#'33#c\aK†'^Faaaaaa>ºÌÅ ZZ% ! " 9^YÿîõÆ 73#735#35#3533#3#535#lyySSSS699DœF6Æj=EO&&[ÿéñÏ67'23#5##536'&''&'67#53&''67&'á 8QC2 !n_'     Og )  Ï ((  h   cÿéñÏ67'23#5##536'&''&'67#53&''67&'á 4L?/ gZ$     I`  &  Ï ((  h !  ÿèäe)/573#"''3255'675#73#"''3255'675#&'7&'`  #*1$Mjb  #+1%OS  {  ei &i  '   ‰ãÍ #75#53#5'675#53#5'6'&'7&'aJ^"(,’J]"(+‡u ¨C C    ŒãÌ $73#5'675#'3#5'675#4''4'…^#*-$Mn] %)"LQÌ< <     gÿë÷Ð#)/?7373#3#5367#35#335335&'&'''6733267#"&5p7589w*4"&  =  ^     ¸ DD J""""":  # /  fÿíôÏ &,<B737#5373#3#735#3353353#&'7&''33267#"&5''6x",05:9n  d~~@  8 B   • > =  &  '  IòÑ%.26:73#3#3##5#535#53&'#53&'367#'6553'#33#735#¹./**,,0 +'{Z552EE##Ñ   8 % $29(7 EòÑ#,04873#3#3##5#535#53&'#53'367#'6553'#33#735#¹. /**,,0 +({Z552EE##Ñ  :  %" %3:) 8 PòÑ%.26:73#3#3##5#535#53&'#53&'367#'6553'#33#735#¹./**,,0 *'{Z552EE##Ñ   4 # "/7&4 UòÑ%.26:73#3#3##5#535#53&'#53&'367#'6553'#33#735#¹./**,,0 *'{Z552EE##Ñ  1    -5%3 YòÑ%.26:73#3#3##5#535#53&'#53&'367#'6553'#33#735#¹./**,,0 *'{Z552EE##Ñ    0   ,3#2 aòÐ%.26:73#3#3##5#535#53&'#53&'367#'6553'#33#735#¸.0++,,0+'{Z662DD$$Ð    +  )0 . iòÑ#,04873#3#3##5#535#53&'#53&'37#'6553'#33#735#¸. 0++,,0 + '{Z662CC&&Ñ   * %, ) ^ÿêõÑ LPT73&'73#'67&'3533533#3#3#67&'7'5'67#535#535#5#35#b;<Œ3  @ M!"2  .  0"R!!!¿       : "   " _ÿëõÏ =EIM73533#3#&''67#5365#73533#3#&''67#537##5##535#35#g  F    6KKKKK»       Rn n)@ dôÐ3HLP73#&''677&''667#'3533533##5##5#3#"''3265#'63#735#¢@    &”S  H  77Ð     1  # TÿéöÐ $(,06<BH73#3#3#535#535'65##5##5#35#35#35#&'''67&''&'wg ‘]       f ] Ð.// 9......A/////I  YÿèôÈ?GOSW73#3#'67#'737#'67#'7367#53#3#33267#"&5'37'#5##535#35#`@  j  C  B  [VVVVVÈ &   H         _ _!1 ÿéöd 73&'73#3#3##5##535# gqë´´³³µ’’’T ** aÿèöÏ<@D73673#&'#'67#3533#3673#3#5##5'67347#535#35#35#o&H"  "   !5GD -1DDDD¶     ] J X2 [êÊ %+1773#735#35#35#'3#735#35#35#&''&'7'6''6ˆ[[777777~[[777777š c N  b  ÊQ9  :Q9         bóÑ $(DHLP73&'73#3#3#3#5'65#5#35'3'73#3#3#3#5'65#5#35—$&%g,–$&%g. Ï    2    T    2     ÿèöT 73'73#3#3##5##535# ojë´´³³µ‘‘‘G    ' ' ÿèõE73#&''67&''667B‘"&2G-+: .# #&E      ÿéó[ 73&'73#3#3##5##535# elç´´³³µŽŽŽM  (( šÿéòÐ"&*73&'73#3#3#3##5'65#5#35#¹ 2Ð$%$ ‰ -.$$5%%4$ ÿéaÐ"&*73&'73#3#3#3##5'65#5#35#( 2  Ð$%$ ‰ +,$$5%%4$±ÿéôÎ 73#53&'3#3##5##535#ÔC44445Î >TU5%YÿèõÏ7&'67&''67&'ž &" '& %'&) Ï";2)IT.4EOÿéôÏ!'=73'33#673267#"''67&'#7&'3533533##5#'67#XU22     V„  v  ¨''?,@%#,F:  l,,,,55;/YÿñóÀ %73#3#535#&''6'&''6a=?”A@z "   % 5Ñ "-/q"1 "$' !ZÿêõÇ/473#67#5'75#35#35#75#73&''67&'#367Z[  4F     ÇŒ,&š%%^(a"fK8*E1!%-gÿê÷Ç/473#67#5'75#35#35#75#73&''67&'#367iR .C    ÇŒ,&š%%^(a"fM6 *F4+$NÿêóÇ.373#7#5'75#35#35#75#73&''67&'#367Na  7J      ÇŒ,&š$$]'a"fN4*E1!%-XÿéòÏ%-159=73&'73#676767'7''67'67##5##535#33535#35#XD?N  "!!$  8@5[$$7$[$$7$$º   &     Zff$6 ÿéRÏ73533#7#"''3255'675#     ¥**2 G  8;PÿéôÐ (,07#5##53&'7#5'673#3#5##537#35#35#ôrC8  a))4&4444·!(  ‡g $ES#PÿéôÑ $*06<H73&'73#7&'7''67'6776'&'7'6'67&'33##5#53[A<“W   E   cx  6IIEE¹            "33TÿéòÍ37;?7&'#5##5367'&'3#3267#"&55#'67#735#35#35#  ^m\  V  a   3 ,======Í '1 1+ ?\ - B $ $ Gÿé÷Ï >EV\b7#5##53&'733&'33&'#5'67#&'&''62673##"''3255#'67&'ìs>5# E1   V =    Xy‹?  9 a »   $*     $     Q& # 9öÐ=735673#3#35335#533#335#535#535#533#&'#'67# ((((8-//-/%%$$(:8".P- #6sQ   #: 2  W   OÿæóÐ#'+/37QUY]7#'673#&'#3#3#535#35#5#73#735#3353353#3267#"&55#'67#735#35#35#¼9 ,C##=MM  &   5 -![[[[[[µ  !&`)). *N   %7   ;ÿêòÐ $(,048SW[_73#&'#'6'#3#3#535#35#5#73#735#3353353#3267#"&55#'67#735#35#35#¦:    N++CTT  ‹Š(   # 8#ffffffÐ   &_' (, )Q   8 ^ÿêòÐ#'+/37PTX\73#&'#'6'#3#3#535#35#5#73#735#3353353#3267#"&55#'67#735#35#35#².  A !!6FF  rt!   2 *PPPPPPÐ    &_' (, (S    :   \ÿéóÉ *HLPTZ`f73#735#3353357767'7&''67'6773'73#3#3#3##5'65#5#35#'&''67&'dˆˆ'i    6 9 "#%!É7U*   a '% KÿéôÒ6Idhlp7&''7'76'3#3#35#535#535#533#5##5356&''67&'763#3267#"&55#'67#735#35#35#­   . k+ €@     Dr  3NNNNNNÒ    O%%H"      77777·;h  +#3QÿéôÎ,B73'67&''667#733#3##5#5335#533533#&'#5'67#y%    N"!!m<?3! !& '-Î %.  >!$$(!o"(BA$ i˜îÑ 73#'6ƒ^g Ñ sÿêöÄ+73#3##'67#'7367#33267#"&5}t)-  *, 9@Ä&#(,86'fC &  GÿéóË 48<@X^73#735#73#735##367#533#67#5'75#'65535#35#75#73#&''67&''667#YBB!!>BB""6„)%8  ,=$        Ë--)% >J 3) )0GR*, j!      #  XÿêíÉ73#735#3#"''3267#'67#vqqII€  6: 0!ÉR,WT!,@$ $,E>----55=1KÿéòÄ )7#5##5'67&'3533#&'#5'67#ëj-@M;A6% #% )1Ä10! : (,PN('UÿéóÄ )7#5##5'67&'3533#&'#5'67#í`)= F5:3" $ ',Ä10! : )&IM&& ÿèõz 7&''63'67#53'19 68(: O" 5s? z    ZÿèõÒ -7&''63##53#5'357#"''3255##5¡$ # ) 2BB:`  Ò(+'$psh K::J  4o€XÿéùÎ%+D73673#3#&'#'67#5367#7&'7'6373#"''3267#'67#g1 >EY . $ )  j  Y#2   # , #     <    x A (+"CÿèñÅ573#7#5'675#35#35#675#7##'32654'7##5G[   !!!!!  Å…4/“""X%] x@"! DÉÚ8ÿêõÎ #06<733#3#537#53&''67&67##3#"''325''67&'a )] C U    &V   G  Î#5d3,)D(`  K $  EÿéöÏ !.4:733#3#5373&''67&'#3673#"''325''67&'j$T0U     j  C  Ï "F`4!-T@''@M`  K $  <ÿéöÎ*/5;733#3##"''32655#5373&''67&'#367'67&'b##+#  ) 8U     Œ J  Î$f bF`4!-T@''@^ %  EÿéöÏ).4:733#3##"''3255#5373&''67&'#367'67&'j$  $0U     C  Ï "f  bF`4!-T@''@^ $  KÿéöÏ).4:733#3##"''3255#5373&''67&'#367'67&'l#  #/T     }  C  Ï "f  bF_5"1O@'$CY  UÿéöÏ !.4:733#3#5373&''67&'#3673#"''325''67&'x!M0J    _   B  Ï "F_6!0R>&$@M`  K $  cÿéòÎ48<73#3#"''3255#7&'7&''675##535#535'235#335â  55@  . #)<55@$!!3#Î=R  ;Xj=IhÿéóÏ'+73533533##5##5#3533#3#5##535#35#h((;<<.J.; JJ¸3W XW'RÿèôÊ #)D7'6553##57#3'6'&''67&'3533#3##5#535#'6{†,,`` O 97))2244 ”/E5 5@_6::$     \ÿêïÏB733673#5##53&'733#735#35#53#3##"''3255#'67#'Ÿ e SS//=U†    - $)Ï" **  ,; !UÿèðÎ3K7'23#5##536'&''&'3'67#&''6#'735#53533#3##ä 8PB3 pd (     ; 1   ]% Î       1Y"C  A%,,*‡ÿéöÎ#)B73673#3#&'#'67#537#7'6'&'3653#"''3267#'67#“+0?      K  ;  #     ž  8   y A 00']ÿéòÉ /73#735#3353353#5#535#535#53733#3#3##f††'L00((,,%,,((--É@5š$$YÿéõÏ,\7&'#5'63&'3&'&''67&'763353#3#"''3255#67&'7&''67##537# !$ Y 2     IR/B  7   !! 52Ï       ((7;  &  @PSÿéõÏ -9>BSY_7#5##53'73'67&'767&'767#'6&'73'673#3##"''3255#'67&'íj>5!-        g  4 .!H33%z7  0 U º  4      & F /' $  VÿèòÐ #)/5ER73#53&'3#735#3353353#7'6'&'&'''667'5'6767&'¤B–>,$:MkZ'  '4  ,Ð )/'11         ) ÿêøÐ7'673#&'#5'67#53Â$      ¯  *:'f]5 PÿéóÉ *HLPTZ`f73#735#3353356777'7&''67'6773'73#3#3#3##5'65#5#35#'&'&'''6\)n   : = %$É7T,   b '%  DÿçóÐ$7'23&'7333"&&#"'663267#â >>J4   0.5J>‡  ±f  aE, (<D !"DÿéóÏ'/73533#3#535##5##533267#"&5'3'66NBDD;ˆ9B™rZ   0" ¸<2 !3!B F+' !FÿçîÐ673533533##5##5##5##53653#"''32765#'67#R!0##0!œs4= ,= 40±%))3  F &>.SÿèîÆ(,7#"''32655#&''67##5365#53#'35#î  1  /E7~45VVdd L  #i| MM ('‰ÿìöÍ733#&'#67'5#537'6šD% %  ;Í[C!S]  hV* JÿôñÎ .7'2'6'&''&'3#3#535#535'2à =WHA 9  "  … "KKA’=HHBÎ   &%%•ÿëóÇ73267#"&553'#37#3¨ " W4!NH ÅygUUUDÿñôÐ!%73673#33#535367#35#35#35#35#QDCF>°/@ ZZZZZZZZ» ““ :998BÿéñÐ.5767#53&'73#&''67#&'3353#5#'67635#q qEI +1!' "MR OM¨   ?v/  GÿòñÏ $(733#5'6367#35#33535#3353#…A *‹ +6 3 ((<)e((<)‰¨¨Ï  j\# 7FHVÿìòÈ!%)-173#3#3267#"&55##535#735#35#33535#335`u2;; "':0RR'':(b'':(È8_   k`=”ÿéóÇ73#3#3#3##5#535#535#535#—X" &&%%"Ç>>AÿéõÏ;AG73673#3#3#&'#3#'67#53655#5'67#5367#5367#&'#&'M8KONTk  -EK9 /5=$   ,"(4}A@#!¾     "  T ;BÿéòÏ *.2673353353#3&'73#3#3#3##5'6#35#35#X,+- 681111<€E11111Ã''- i "$&DÿêóÏ'-3;Q7367&''65'367&''657'6''6#5##53533#&'#5'67#¾    M    5 M™{?G=-&$/<Ï             C#$*=6 8ÿëõÑ #/5EKQ7'2'6'&''&'#53#3#533#535#535#&''33267#"&5''67&'Ú 9SDB  0 5>?K§I:‹‰vrrx= #     Ñ       $ @  6     !  DÿíóÏ3;?CG73533533##5##5#3533#3#67'7''67#535#3#53535#35#35#O"8##8"7::HW !$ 8?6J7ƒ¯'&Á   T222!!!!! FÿéòÎ #'=MQU[7'2'6'&''&'3#735#3353353533##"''32655#'#7&'7''535353&'â A^N: 2    žž.4+   +=   ***+  Î    -3@ <>$  n   AÿéóÒGLgkos7&''67&'76'3#3#3'67&'76735#535#535#533#5##53563&'3#3267#"&55#'67#735#35#35#ª     / &  %- ‰&9w   "6SSSSSSÒ            N%%GKU  = ! ÿóQ¾ 7#5##535#35#35#Q¾À Ë7%[$\&ÿóK¾ 7#5##535#35#35#K¾À Ë7&\%]&XÿíôÏ5=AEI73533533##5##5#3533#3#67&'7&''67#535#3#53535#35#35#c// 022>K .4/@0t›!"Á  T222!!!!!FÿèòÊ #-:GS73#5'675#'3#5'675#&''&'3&'73#&''67&''63533##5#œM!;QI!7_ P HG¤% ^  sKNNKÊU  P  8      $ %%`ÿèôÉ #-:GS75#53#5'6'5#53#5'67&''&'3&'73#&''67&''63533##5#Ù,>30B7 C ;:Š  V  `>DD>žK P >       $ %%tÿíðÏ &73&'73#67&'7''67'67676u42{V'&# ..% ²  U! ") #%.+  UÿêöÑ #/5;KQ7'2'6'&''&'#53#3#533#535#535#&'7&''33265#"&5''6ß3K>:  )0/r0>Š95}}jeej@ G  T !  Ñ       % @  4       dÿèòÏ %173&'73#&''67&''63533##5#l68‚  F  \====´     '  @??bÿéóÏ/73533#3#535##5##53'66733267#"&5h8;;1t/8…^! *  ¸<1 2!+% &F iÿéóÉ'+/37;?73#3533#3#3##5#535#535#535335#735#33535#33535#335n|6 499662 4!!3#V!!3#I&ÉN"".,[bÿéôÑ"&<I73#3#'6553&'5##5#35#3353353673267#"&5'67'533´3&$j6#      Ñ =<, 2;Y =,3    !   V lÿèôÅ !%)-3973##7#53737337#3#67#3#735#35#35#'67&'î m -ppJJJJJJ  BÅ dG ( (     gÿêïÏ  $(.473#5##53'3#3#535#35#33535#335'67&'¯9`9Q!0r0/L/=  > Ï +,2[[7;+    dÿíõÆ (-=7#3#3#535#35#5#73&''67&'#3673533#3#535#¬C!!8?     o277?=2Æ6ˆ)>>w8&  !,dÿéòÏ *.2673353353#3&'73#3#3#3##5'63#35#35#u v)-''''0e3"""""Ã''- \ !$&jÿéóÏ!%+1773267#"&5536#55#3535#'33#'67&'Û '6 ( 1$0-UE444440qƒ% C Ï   '4``  ' 8^    tÿéóÏ 4A73#53635#&''67&'73673267#"&5'33#67'Ÿ7q%KK8        >$$ Ï ^^ V<    @!    U)  tÿîòÏ '73353353#3#3#735#3673#53&'{p}} jjCC ~Â**/<2  iÿîóÐ'+/373533#3#67'7''67#535#3#53535#35#35#',,9A   */(4'h Š   º   eCCC22222]ÿéöÏ287367&''667'3#&'#5'67#535'6'6À    %     !(  Ï?  "A$.5EA;) a\!-$) eÿéòÏ573533#3#3#67&'#67'5'67#535#535#r/44//93  . '6**/¼  U @ 6#cÿéõÐ 173'33#3265#"'&'#7&''3#33#7'7537nJ'' Jr  \88%- ‘??5/8&[D 7$, _[fÿé÷Ï$173533#&'#5'675#&''67&''6q466%  &4 Q ´H3%ON"*K    "  lÿéóÐ $(733#3#53533#"''3255##535#35#¨,,8‡> IIIIIÐ..#q  /‰&:iÿèöÎ%+73533533#3#535#35#35#35#'67&'r3‰&333333 %A °nnCD/  sÿéòÑ,0473#67&'7&''67#53&'#"''3255##535#35#´2A *.)9C  AAAAAÑ      bi  *€$6cÿîôÏ&*.2673#3#3#3#535#535#535#535'25##5#35#335à ;91s/898#&Ï&$$&_&&&&6$$$eÿëóÐ 15973&'73#33##67&'#67'5'67#5#5;5#35#e=:j*  +  !DDDD»  "!  !3 (  $ !2gÿéóÒ3M73'73#6773#5#67&'7&''67##5367'67#3533#3##5#535#'6i7?D   2. $ !B 00088;;#À    )  ) b ## eÿéõÐ '-39?K73#53&'676767&'7&''67'677'6'&'&'''63533##5#¯6‚8     :  i  x Q   ;<<;Ð  R )     (   * 22aÿðóÏ)73533#3#535#7&''67&''6q055;‰;0  W   ;””''•'5)UÿðóÏ)73533#3#535#7&''67&''6f4;;E™A4  _   ;””&&•(4(DÿðòÏ)73533#3#535#7&''67&''6X:AAL¦G:  !g  ;””&&•'4(=ÿèôÊ$*E7'66553##57#3'6'&''67&'3533#3##5#535#'6j –22oo Z%A=11::<<”/D6 1$_6::$     LÿêòÏA733#3#535#5335#3353353#67&'67'5'67#53&'˜??9„8??%%+@;  1   #1BÏ>>M/  1  +öÐ>OSW73&'73#3#53'#367#733#3#3#3#3#3267#"&5535##"''3255##535#35#)+r($PTTMNJJJJFF# ,' MM 99999¾   %    WI [ # `ÿèôÅ"&7#3#67&'#67'5#'6553#êdh* '   RRÅB  !$Q]  hD3 6?^*_ÿéóÐ .5;73#53&'#5'673&''67&''667#&'±5„9  20      ! Ð  *„b))     $*   bÿêòÎ@FL73533#3#3#67767&'7'#"''3255'67'67#535#535#&'''6j677//;M ""   6 )>116b< ½  ) #   ‹    bÿéøÑ(Mm777;265##"&55'75'75'6773267#"&55'75'75'6'7767'5'75'75'6Ù:a;*e)XÿèôÑ<@IMQUY73#3&'73673#33##&'#5##5'67#535#'6553&'5##5#35#53533535335²5u&!    :%/Ñ   /@@*4* 4<[U)UÿèôÐ (,04Q73#53&'3&'73#3#3#3##5'65#5#35#'677'67'67'67676§EœB B &+ !     Ð "  o *+d+E$ Yÿì÷Ñ#)9?E73#3#53&'#53'367#3#735#35#&''33265#"&57&'''6¬8!%4/*qqKKKK&   "]  e  Ñ   5 (K- ) "  "  '  RÿêòÐ6:>BFJPV\b73265#"&55#3#67'5#'6553'73#3#6'5##5#35#335335&'''67&''&'ß  %  C5(&& ,  S L b   6C @2 2  " '`'N,,,Ð   (7TT5$~ÿéíÏ7#5##5##535335#335í-//¡wVVw..P===kÿéòÏ)159=73533#3#535#&''67&''6#5##535#3#735#r255;‡92  O  !OOO@@À<<      ?l lQA )  cÿéõÒ $*06<DHL733#5'667#35#33535#335'67&''4'7&'#5##535#35#‘6 w 2. 1!R1!]  s  43/FFFFFÒI=  '      OO &  ÿéXÏ$*73#"''255#'67#5353635#&'&'3     ϳ R<. -3L[; I YÿèòÏ $(FJNRdj7'673&'73#3#3#3#75#5#5#''673&'73#3#3#3#75#5#5##53&''67&67#°  BW  Az   *"( ? —      K?      K+    ÿéô}73267#"&55#'655&'¹   M21  }v   i/&56) qÿèõÊ 7&'''667&''67&'Ê"   !  Ê#) (% 1 &#+#!!! )nÿéðÁ$73#3#"''3255#&''67##537#n‚75  #   4:Á"‹  t 1’¤"bÿè÷Å'7#3#3#67&'#67'5#'6655ëb\\e& '    Å  $S_ lD3 0%^_ÿèíÊ'73353#35#53353#5##535#3#5#'65m&[(([% Ê75FF57áKHY YH0 /EqÿìöÈ!%)-173#3#3267#"&55##535#735#35#33535#335yf+22   1)BB1 Q1 È7^  ja=mÿéòÎ37;73#3#"''3255#7&'7&''75##535#535'235#335â 11;    (  $700: 0Î=R  ; Xj=IiÿîòÏ %73353353#3#3#735#3673#53'vtƒƒ mmGG  ‰# Â**/<2kÿéðÑ K73&'73#&''67'763353#3#"''3255#67&'7&''67##5367#k59…U    HP2?   2 0/½    11CI  2  PbbÿêôÑ S73#53&'3#735##5##553#67&'#"''3265'674''67&''2727637277¬:‡9(mmGGjj^&    ((## $ Ñ(( "(          ÿôRÎ 73533#67&'75'675#735#335¨&&a4  9???dÿèòË %+17NU73#735#35#35#73#735#35#35#&'''67'67&'373#&''67'7#67#i<<5==*  K ' l(R  . !' M +ËcG ( ( FcG ( (            ÿçñÓ7#'6553&'7ñÀdÃJV,$US ÿèôh$7'67#53&'73#67&'7'=@ W_iX  C!<)#      !:%  /NäÐ &73#"''3267#3#"''3267#536&'mL   u¢   ¡8Ð (/# O   ÿéòQ&7'67#53&'73#67&'7'F;Qh ^b   !L'(     9    jòÐ&73#67&'67'5'67#53&'€cb   P!  0HeÐ   9   ÿéòK#7'67#53&'73#67&'7'F;Pgba    K( (7     5    ÿé€Ì3:73#&'#5'67#535'23&''67'67#5367#p -- $../    " ! Ì  %f    1   ÿù‡Ã)73#67&''67'75&''675#m.  2>1  ,Ãn'3   ( 0>j ÿìˆÏ#'+73533#673#3#5##5'67#535#35#35#! 1?/ -.!////· vf nD ÿì‹Ð*073533#3#535#&'&'#33267#"&5''61,,(h-19 :  6    ®"",,B  7 <$  ÿìÆ7#53#67'5#'6735#35#35#.Z  % 3333336+ ;=  ’BB ÿìŒÎ!'-7&'3673267#"&55'67''67&':$     ^  Î0?/ATA%$  W0'&$*,#rëÑ 7#5##5367'&''&'믒  H  *  ª8&&8'      ÿê€Ç #)7#5##53#735#35#3#53&''67&'~G [[4444-n,  9 Ç  'S11&  ) ÿé†Ï G\7'2'6'&'3&'733#"''3255#67&'74''67##53'767#67#53''67&'| .A5+ ) ['  #   -  R& );   Ï        o \ v…  g   ÿéZÉ73#67'5#'65#735#35#35#A    É“3  D# 0hGHsëÑ7&'73#5##536'&'€  O 4±Œu  Ñ10    ÿé‡Ï*0673533#3'67#535#&'36533#'67#7&'&''((1  b1'  7,/ 5 - 3 O ¶  - 2 1. - 2  3  XÿêòÉ7&'73&''676'367'Š  I( ) j É")*!i%#!#.$N•  fÿêòÊ7&'73&''676'367'”  C! $ ` Ê#)*"n$!!.$O”  <ÿéòÏ 2:>73#53&''6553'#37&'73#3##5#535#536#5##535#ÊS!S@1  8!+ ;Ï SF$EFO>-!<<!)mmG58ÿéòÏ 2:>73#53&''6553'#37&'73#3##5#535#536#5##535#Æ!X$WH$$,  < #"/ >Ï SG#FFO>-!<<!(koH7HÿéòÏ 2:>73#53&''6553'35&'73#3##5#535#536#5##535#ÌMLC2 ) 3'4Ï SE%EFO>--!<<!(koH7ÿé‡Ï 73353353#3#67'535#qnQ.$(8 QZÂ0==0C=*  JÿésÏ 73353353#3#67'535#a]D%". CIÂ0==0C=*  JUÿêóÑ%+1=733#3#535333533#&'#5'67#7'6'&''3353#5## 88Až(#$     M 8  hhÑ((D++,*  9  yy— `ÿèôÐ08<@D7#'6553533#3'67#7326767#"&55'73#53535#35#35#œ.66A /$& "Ju444444—G;- .6R(      0VV* * ÿêíÐ4733#3'67#6732767#"'"&55'75#'66553rfff Q$B(2 6> QÐ     H<. * R ÿêmÎ.>733#3'67#'65533267#"&55'753#'665367'0))' 1  (     0 Î  E8, -3O"   H= ,? ÿêíÐ/7533#3'67#673267#"&5'675#'655sfffQ$#&1' 3?²     K>0 /9U ÿèrË4;73##5'67#535'2&'373&''67&'67#367g ## $+*"  ?+  !* Ë6&9  4    fðÑ !'7&'73#7&'''6&'7'6''63 t6  H Q · &A Ee Ñ  .+       gÿè÷Ñ<BHL7#673265#"''67&'#3673&''67&'67#'65535367#7&'3#ð  >     N.H J11¬. 5&&1%,C9 "   <. 07S%%y   4¬ÿéòÀ73#3###5##535#32655¬F  +À#q ’u†#4d] ÿêyÐ#'+735#53673#3#&'#5'67#75#5#35#,%.&-(   !R99999<m m 04raÿêíÏ !73353353#&''673'67r "{(    $JY PÃ5AA5G,  ,P@ ÿê”Ï 73353353#&''673'67v'  "GT LÃ5AA5G,  -P@AÿéóÏ*.?EK733#'#5'67#5;533#&'#5'67#3#3##"''3255#'67&'h 6   @~~žD   Gl Ï '' .(G+  (   QÿéòÏ+/@FL7#5'67#53533#73533#&'#5'67#3#3##"''3255#'67&'‚       @ $&  É7T -     c '%  ÿèóÏ73533#&'#5'67#•"$#    !¡..E -qi%*AGÿéöÏ,73533#&'#5'67#73533#&'#5'67#Y   J     ¡.. tx8"-I..E 0yx2*@ÿé¤Ï,73533#'#5'67#73533#&'#5'67#   H    //wp-*A//rp-(CÿéªÏ-73533#&'#5'67#73533#&'#5'67#   H    // sr0)B//nr-*A7ÿéöÏ+73533#'#5'67#73533#&'#5'67#I P!  ¡..ws8"1I..D!6~6)AKÿéöÏ+73533#'#5'67#73533#&'#5'67#[    H     ¡..ty*%7..E 1yv1*@ ÿéñv 7&''63&'73'67#€,;@0.<F(O E!1'Žv  ! $tëÉ'735#535#53#3#3#735#535#53#3#3#( &b)""(ct'!!&b)"")c†|ÿíðÏ &73&'73#67&'7''67'67676|0.tP$#  **#²  V  ") "&.* UÿéöÏ,73533#&'#5'67#73533#&'#5'67#e   C     ¡.. ux-&@..F4zy5)A5ÿéõÏ!27#53533#'#5'67&'''667&'7''6\   Œ*  #'Ž..!jt,${BJ@*)V" (0  +9ÿéõÏ!273533#'#5'67#7&'''6''6767&'E   “%5 "& ¡..'pt+'=:BJ=-*H(0  *VT$  ÿè@Ë 7&'&''6 ! Ë1  6 .+ )?ÿêôÐ4:PV733#3'67#&''67373&''67&'767#'63533#&'#5'67#7&'u=3*      1K   6  uEN@# "$' +9"  Ð ,!   #    X  ""0-2 BÿèòÐ (,04S73#53&'3&'73#3#3#3##5'65#5#35#'6767'67'67'67676›L¬J  K *,       Ð "  r "!*+d/ )($  ZÿêôÏ,06I73533#3#3#3#3##5#535#535#53'#535#37#'&'333#"&'&'75#•"##((!!((''""))""%6  '% . ¼:=Hf   WNÿëóÏ-28J73533#3#3#3#3##5#535#535#53&'#535#367#'&'333#"'&'75#Š&**/.''..,,&&.-&%+< # *+ 43 ¼ ::Ef  W ÿêYÏ7367&''65''6,   Ï<  ) 0G5+$TÿëôÏ"N73&''67&''667#'&'3533#3#3#3#"&'&'75#535#535#535#¥2      %: 0$$$ ''/1 "$'' $Ï       V   WfGÿëôÏ#O73&''67&''667#'&'3533#3#3#3#"&'&'75#5335#535#535#¡5      *?  4'(($$++46 %(++##'Ï       V   WfFÿêõÏ-39K73533#3#3#3#3##5#535#535#53&'#535#367#'&'333#"&''75#†***//((//..((00*&,H  ! .. 7  ¼  : E>g   W¨ÿéøË 7'6'6'6Þ! " ) "Ë #$ ) /!ŠÿéïÅ73#"''3255#3###535#Še RAA?+ÅÆ ±N Z<+NÿçöÐ!%173#3#&'#'67#537#53635#35#3533##5#”A9M* %) #)3-#SSSS##ÐT ')T ,2o%% ÿéó‹-1597&'#5'63&'#"''3255##5##5##535#33533523  Oj|   ($&&&8$(‹   'C  %Z$MÿéóÏCH7'23#5##536'&''&'3673#3&''67'&&''67#67Ü 6M?1lc "&KRO  *$ -  Ï  &&    F       '! \ÿéóÏ@E7'23#5##536'&''&'3673#3&''67&''67#67Þ 3J=.d] %GNM &# .  Ï  &&    G     %! \ÿìôÏ !%8<@7&'67&'67&'63#735#3267#"&553'#37#3v <  >  jyyTT '.  84‰N((:((Ï      //d  V:+SÿíõÐ%573673#&'#'67#33#3#535#5333#3#535#53^2H/& /, #(;))=‡7$$00B—B,,¶   %&;JÿéóÐ )-15R73#53&''673&'73#3#3#3##75#5#35#'677'67'67'6767¥F D  H,+  &    Ð n!%  t*+d-1,  $$’ÿêõÎ$*073533#3##"''3255#'667#535#'67&'   !  M³s  nB5 1<=$ '(+%mÿêòÑ )157#5##53&'735#53533#3#3##5#535##5##535#ï[4;*//22--;;77*oKKK¿"" H  1K K/qÿéøÑ #'7'67&'&'3'67##53#=#± (   "f KlF²" *"    p SR $$§ÿç÷Ï73533#&''67#7&'¯ 8‹DDN2"9;'\C‚ÿíôÎ (,0473533#3#67'7&''67#535#3#53535#35#35#‘"$$*4   && ("[r    ·    gBBB33333gÿéôÄ )7#5##5'67&'3533#&'#5'67#íZ, 5 C74)  *Ä10" < %)PP%#\ÿçôÐ(7673#3655335#535#53#&''67#d #(/6, 0- , 1°  'rr'{/.+&XÿèóÐ7>73#&'#5'67#535'23673#&''67&'67#3#26Ü ;,! $" "+;;H+W #/ & !e.%Ð #--€       ÿçéÎ 73353353#5#OLÀ˜‘ÇÇ“³ ÿéçÇ7#"''3255##5ç  ©ÇÆ  ¯ÌÞ"KïÅ7#3276767#"&55#;5#ݧ:'" SHS??BBÅE  c##bÿéòÐ -73#5##53&'373#'67#67&'7&''6­4[80"PTH $%Ð // S!I)$@ 2  # #hÿèòÒ48<7&''67&'76#"''3255##5'67#53673#35#35#Û  %! !   9"+GO 9999Ò     d^  ,\   +dÿëõÑ#'+735#53673#3#&'#5'67#75#5#35#e;,!7->0! .iGGGGG<n  n74rkÿêõÐ#'+735#53673#3#&'#5'67#75#5#35#r3*3*7* $]AAAAA<n  n78!r`ÿéöÒ%6:>7'6'&''66'&'&'''6#53#"''32=#3#3æ1- (0(. c 7g @@@@Ò  %!    Œ0‡n  D dÿéðÏ&+19=AIM7367&''667367&''66''67'6#5##53#735##5##535#‚     C     U CBcXX44TLLLÏ    !      5-./-99! ÿè‚ #)/73533#33#53535#5#5#35#5#'67&',..' u $,T:::::::>  —  __ &     ZÿèõÐ -159?EU[73#5##53&'3533#3#3#3#535#535#535#35#335335&'7&''33265#"&5''6¬9d:%$$++::3x399++%"/ D  Q "   Ð $%-    ..   [#      eòÑ(7&'3267#"&''7&'7'#5'6° AJ  , 2.K  'Ñ   " A0 TòÑ 7&''6&'3#67#x/: 82); J)6 lÑ"&%   ±ÿðíº 7#5##535#íºÉʦ”£ÿéóÁ73#3##"''3255#«@@P   "Á.m  i¬ÿëôÁ73#3###'3255#²==H  $Á.j  f°ÿêòÁ73#3##"''3255#µ::B   Á/l  i¼ÿêòÁ73#3##"''3255#Â..4   Á/l  iKÿéöÏ#'G73533#3#5##535#3#735#33535#3353'7#3#33#"''675#]<@@EtB<jj+F+o•-66"T @à  "# (A( % "    3WÿêîÏA733673#5##53&'733#735#35#53#3##"''3255#'67#' h  UU11?WŠ   . '+Ï" **  ,; ! HÿëôÑ-159?OU[7&'327#"''67&'#'6553&533#6'3#3#735#&'33267#"&57&'''6Ø    CT)( [2200  #d k Ñ .#   "$+322 33,  / SÿéõÏ+[7&'#5'63&'3&'&''67'763353#3#"''3255#67&'7&''7##5367#Ÿ$$ \ 5        LV0D  9   #"64Ï      ((7;  & @P ÿéÌ26:>BGKOU[aekq73#3##'3265#3#''75#5''6553#67#7#335#335335#335#335&'7#7'6'&'73#''67&'2fLR   (! '$  ƒr  ZaaL6#/L(0v&C6"   $ 2Ac(; n T - œ   %   ÿéÞÏ733#5#535#535#5367#'6ba3©©œœ©q X! 3Ï Š !#ÿÿR¼ 7##535#35#R-¼£½I88MÿêóÏ $(,73##"''3255##5#53535335#33535#35#â  X55!!5#X!!5##µu+  &CCu;(((b'''DÿèöÏ!73733#32765#"&55#'667#Y# $ ,"22‰ CE B=TÿêóÐ 773#'6#"''3267#5327667##"&55'753753„bm s     3 Ð (G' GAD  F+%*$VÿêöÏ#(.473#33##"''3255#'67#5367#535#&'''6œIP)++ D  )0 _  SÏ4A > \!  #]ÿêõÏ#(.473#33##"''3255#'67#537#535#&'''6 DK')) @ (/ Y  OÏ 4A >\!  #ÿèíi#73#3##"''3255#535#535#'2® KKbb  ccKK6i   VÿèõÒ  (,7&''63##"''3255##5#53#5'35ž!$ ""& 2FFj   8<Ò(,)$I  2n€]sh K99JÿèôÊ$*E7'66553##5'6757#3'6'&'&'3533#3##5#535#'6t Œ..ff SN:,,5577”/C7 1$_6:  "$    CÿèôÏ)Nm777;267##"&55'75'75'673267#"&55'75'75'67''677767'5'75'7Ñ!ACEG'  .0'*CR!"$   )#h )#  ! Ï      „         ! QÿèôË/3773#33##&'#5'67#535#535#535#535'235#35#Û CC7+$ $& &$3<<3388-9 $$$$Ë"! <>a2CÿçìÊ'73353#35#53353#5##535#3#5#'65[,k..k+Ê75GG57ãLHZ ZH- ,A\îÌ%7N7#3#53#3#3#&''67#535#'6733#"&55#'66767#53&''67&'?Wil51    %  $  AW    ½Mk          C   ÿíì'7#3#53#5#535#535#53733#3#3##꺼ÎM33,,00'<<66>>£sfÿòòÅ'7#3#53#5#535#535#53733#3#3##ðwx‹6# !!ůӞaÿéóÐ#'+77'673&'73#3#3#3##75#5#35#33##5#53x  !&*$$$$,c7$$$$$<<==‡ "%   \! *00TÿéóÐ#'+77'673&'73#3#3#3##75#5#35#33##5#53n  % */((((1m;)))))BBEE‰ "%   \! *00%ÿìò¡ ,F73#53635#&''67&'7667'53373325267##"&5536nd»@1““z & k!* >k "0 ' )¡UUL3 ^ B   5aÿèõÇ1G73#7#5'75#35#35#75#3&''67&'767#67#53&''67&'iƒc"======%=    )W /E     ÇJQ/22    %   aÿéôÉ'+/37;?73#3533#3#3##5#535#535#535335#735#33535#33535#335h‚98AA>>5 7$$6&\$$6&N(ÉO""/+ ZGÿèõÈ/E73#7#5'75#35#35#75#3''67&'767#67#53&''67&'P›w'KKKKKK+G    2d 6M   ÈJQ/22     &  NÿéòÈ3K73#7#5'75#35#35#75#67#53&''67&'73&''67&'767#\i%CCCCCC -B     FI    4ÈIP-1 H     # $     ÿçôÈ-2I7#5'75#53#'35#35#5##53&''67&67#'67#53&''67&'î'' Í zffffff9e  "2  H^   m SL=-..         JÿéõÏ &73353353#&''6&'3'67#\)*ŒA$( ('* 7  0€!cÃ++1    &)UÿèõÏ '73353353#&''6&'3'67#d'&†= ( $%$ 3+w]Ã++1   &*^ÿèõÏ '73353353#&''6&'3'67#l"#9$ !## 0 ,v[Ã++1   &*aÿé÷Å"&7#3#67&'#67'5#'6553#ìgl+    -  VVÅC   #R^ kA2 5>]*dÿñó¿ %73#3#535#&''6'&''6l‚8=Œ;6f O   ¿©©   1?  0nÿèöÊ$(7#3#67&'#67'5#'66553#ñ\\#   %   IIÊC   )Re qE6 1%a)nÿé÷Ñ "&7'67&'&'3'67##53#=#° '#   "e LnH²"* !  p SR %% >ÿèôÇ !%)/@DH7#'65536533#&''67#'3#735#35#7&'#"''3255##55#35ðb G@@k,   2 ÇSE4 4@_L0D*/* 'L>C( # % F[  %pMÿéöÒ%6:>7'6'&''66'&'&'''6#53#"''32=#3#3æ75 .8-!3 l Cp  JJJJÒ  #%!    Š2‡n  C ÿèõÏ!%)/5;A73&'#"''3255##5'63&'35#35#7'6'&'&'''6w3)   u g]-uuuuš""œ ’  L"#Ï & `  ,s   ;7“      ÿêƒÏ $(.4:@7'#"''3255##5'663&'35#35#7'6'&'&'''6A     . C ....= J P -Ïm 1}(; /3’      ÿéî£#CHLP7#53#3#5##5##533#73#3#73#3&'73#3#3#3##5'65##5#35#vZÈ\fTRdH==g<<<558 2  ' ÈSE5 5@_A&&r  m-C -  RÿéóÈ #'+1A7#'66553533##"''3255#'3#3#735#&'7677'7&'ò| V   =88337- % ÈSD6 0$`A&&s  o,C! -  ?ÿèòÏ^b73#67&'##'32654''67&''67''67#'66553533#3'67#733265#"&55#7Š#€;     &+  + 5FFN9+, & ##x   '      ;) )P*       #[ÿèõÏZ^73#67&'##'32655'67''67''67#'6553533#3'7#733267#"&55#7˜n5       #.;;C /!"  y  $       ;) -5P*     #jÿéõÏZ^73#67&'#'3255'67&#'67&''67#'6553533#3'7#73267#"&55#7 a0       )44<)   w  &       8, -5P*    #pÿêõÏ!%)/5;A73&'73#3#3#3#5'65#5#5#'67&''&''&'“!%!!!!(l .  g   Ï K -%&  ÿê„Î37;767&''67&'373#3#"''3255##5'67#5#5##     &:BH   2 ^222Î   <  _  (^ 2RîÌ'9P7#3#53#3#3#&''67#535#'6733#"&55#'66767#53&''67&'AWil2/    " š #  AW   ¼Uu         G   ÿëðÃ73#3#3#"''32765#7#537# ¿r ’ ‚ !ˆ:? 8Ã##K! ,6#RÿìòÃ73#3#3#"''3265#7#537#^†I `e \!a'+ (Ã""L!05"OÿéöÆ73327#"'&5#3##5#535#Sx  .''&&"Æp6!#/ƒFppFpÿèöÆ735#53327#"&'5#3##5#qf %mFj.-#!(JWFrreÿéöÆ73327#"'&5#3##5#535#hj  &!! Æcd#.†FppF?ÿèñÅ %7#'66553733#"''32765#'67#ñ€ < 'ÅRC4 2!^J..L8 P29'LRÿééÇ 7#5##535#'67&éooo6 & ÇÞÞ½ª^%)T#"ÿééŒ 7#5##535#&''676骪ªP$ $  Œ£ £‡t€ÿéîÆ 7#5##535#'67&îJJJ%   ÆÝݽ¬f&*Y$?ÿéóÏ$)/73&''67&''67#'7367367#7&'˜V # ""3, !Q< = &~&    &2@1"Z•QÿéôÑ&+173&''67&''67#'7367367#7&'¢O    -&J7 4 #  ~ ,     &3?1# Y” ÿéìÎ$)/73&''67&''67#'7367367#7&'pr% *#%1 . *>8-oOU6~ &    (3=0)"[”7ÿéò%*073&''67&''67#'7367367#7&'‰`$( %! -,!^A B.  ]    &0&Du ?ÿéïÐ .73#5##53&'373#'67#&''6767&'¢>nA;. X^'"'| .-!" Ð // R"G%"<0$ #46 pÿêôÏ273533533##5##5#3#3#"''3267#'667#53&'t""H/LE   1<¶? )3 ,1 hÿéòÐ373533533##5##5#3#3#"''3267#'667#53&'m%%G2MB  0""<¶  B)1/+ EÿèòÏ273533533##5##5#3#3#"''3267#'67#53&'O"6##6"UBbY  F ( /*H¶  A (4K 9ÿçëÊ'73353#35#53353#5##535#3#5#'65T/r22r.Ê75GG57ãLHZ ZH. ,A ÿø~Î073&533#327#"&'#7&'3#33#7'7537> >c J..%  ™78*/U@0"8 `\ ÿëÏ!373&533#3265#"'&'#7&''3#367533#7'7 C  ChQ33  & ™6D*0$e>Ddu"> ‚ÿéïÏ!'+73#"''3267#3#"''3267#536&'3#¨-   2P   Q  %NNÏ F 0XG2|#  pDÿêôÑ04873#53'33##67&'67'5'67#5#5;5#35#¢CžD,x0  @   &#RRRRÑ ."!   > -  +  !2jÿîõÐ$473673#&'#'67#33#3#535#5333#3#535#53s)>( & % !1""4t-))8‚7$$¶  &&;`ÿîõÐ%573673#&'#'67#33#3#535#5333#3#535#53j-C+" *' $6%%8}2!!,,<Œ=((¶   &'; iÿèôÐ(59=CIOU73533533##5#5#3673265#"&5'3#5'675#5373#735#&'''67&''4'i$!!GU$0  J  )) 7  R J¾    J_Z     +  ¢,9!    2M4 o   _ÿéðÑ *73&'73#3#735##5##53##"''3255#c7:† ppJJnl^$   '½  3.1/$, )\ÿéïÐ(=CI7&'73#'65535#3#"''3255'675#73#"''3255'675#&''&'£3n[[2  84 !  )  » >!?2 1<1  "2Í '..  &$ !$n !==!^ÿïóÐ$*26:>7&'3673267#"''67''67&'3#53535#35#35#˜ & s   ” "!Ð  94 ?  < UAAA00000dÿèóÏ#)/73533#33#53535#35#35#35#35#'67&'k5990,5KKKKKKKK  = ¿ww0+,+ #    ]ÿéôÐ $(:?73#3#3#3#5'673&'5#5#5#3&''67&'#367µ,0))))2x  """""v "(   Ð E ' /    dÿéòÉ#';73#3#5##5##535#3#73#3#73#3#3#3#"''3267#7#rs/:),=2 AG%%G##Ozz Ž\V \ É #;;# )  %[ÿêöÑ *0AGM73#53635#'673&''67&'767&''33267#"&5''67&'—F~#WW&        x  Ñ || uZ!      N 1 4   ¥ÿéõÏ"73533#3&''67&&'#535#67¬      ®!!-4%  -?H½ 7##55#3535#H&%½¦¹1!!!!T" \ÿìõÏ#)/5E73533#3##5#535#735#33535#335&'7&'''6733267#"&5l44499994""4"[''9'.  F  g  ¾24 4V6   * TÿéöÑ+/7;73#&''6'3#&''6&''63##5##535#¼)   A'  9#$ $%' 4XXeMMMÑ     ! M M1 bÿéöÑ)-5973#&''6'3#&''6&''63##5##535#Á% ;#  1! !" 0 OO\EEEÑ         M M1 F ñË +F7'66553'#3&'7367&'#5'673533#3##5#535#'6k ’ll_1   "2288<- .9S/C + * eóÏ#73533533#3#&'#'67#535#3351B00>8! .=4(9;1DB¿  bÿéíÉ.267#"''255#'65535#35#'#"''3255#'65535#35#í         ÉË A:#=y:(d*LË A8!!?y:(d*ÿéò€#'+73533#3#3##5#535#535#35#33535#335accQQiiggQQa$==Q=Ž==Q=s  B  B % " zíÏ73#5#535#535#53733#3#3##^LLEEGG/KKCCMMÏU     gÿé÷Ï;AG73673#3#3#&'#3#'67#53655#5'67#5367#5367#&'#&'t*8;+)  +/¸)   #I  <<<<<³ )  ##É5(      4(Y !n +   > ðÍ !7HLPf73#735#33533567&'7&''673267#"&5536#"''3255##535#35#73267#"&5536ÌÌ**>+)  +0¸) ##G   ;;;;;± )  "#Í.!     )#G \ #     3ÿèñ 7&''&'''67&'Ö  )  b E         ÿéð¤  7HLPf73#735#33533567'7&''6732767#"&5536#"''3255##535#35#73267#"&5536ÌÌ++=-*   ,1¸) # #I  <<<<<³ * $#¤-       )!H ] $     1 ]ÿèôÈ "7HLPf73#735#33533567&'7&''673267#"&5536#"''3255##535#35#73267#"&5536aŠŠ'g  x    /  n   È7*      4'Z  $o +   = OÿèôÈ !6GKOe73#735#33533567&'7&''673267#"&5536#"''3255##535#35#73267#"&5536T••+n  "ƒ   3  (((((    È7*       4&Z  $o +    = ÿéöÑ*.28>FJ735333##3#&'#5'67#535#535#535#33535&'7'6'3'6573#&ORR==  2>,; " 7  - 7[ÿéõÏ-O7#5'67#53533#&3#5'67#53533#&3'67#3#33#"&''675#Ž   A   y‡ %,,!,   9*$   #$    !  2 MMÿéòÏ  $*@73#53&'3#5##5'6553'#335#7&'73#3##5#535#536ÍNH, 9 9 3( Ï S kOGFO>-w7R!<<!ÿíò¬)-15973'73#3#53&'#37#3#3#3#535#535#735#33535#335 UT(=Ü<%E5E8ªKVVhãgUUK77K8ƒ77K8™  ?    & ! ÿðòÒ-159=73#3#53&'#53&'67#3#3#3#535#535#735#33535#335€[,Cá>/\-E=°NXXiägWWN;;O;Š;;O;Ò   3 M  .,ÿçöÐ37;73#3#53&'#53&'367#3#3265#"&55#'67#735#35#Y'=Þ<$Z : Q1©1 ' F ? /Ð   6 *Q!  '2 #1/ eÿéöË 48<@W]73#735#'3#735##367#533#7#5'75#'65535#35#75#73#&''67&''667#³<<S<<st# 1  *0      Ë- ,)'  ? L 1+ %3HS+, f $     ÿóðÇ#73#3#3#535#535#735#33535#335&¶QUUeßfWWQ==Q=Ž==Q=ÇxD!!!RtÿòðÇ7#3#5#"''3255##5##5353ïij|x  $DZÕ;Q ˆZ   1    ¸     W 3  -  %" Pÿé÷ÐEKQ7&'#673265#"''67&'#3533#3##"''3255#'6655353'67&'â   "   J  [P  9Ð .!6*$/ .I=5I  D=. , VkUÿíøÏ!17=7367#'6733#535#535#&''33267#"&57&'''6s9 2  <!ta]]_3   ]  l  •  [R  (  ,   ÿê‚Í-73#&'#5'67#535'2#'66537'm **  #/-  B Í  #.†+,A    ÿézÍ.73#&'#5'67#535'267'5#'655c &&  *(* Í  #+t9  ; &# ! ÿëÍ#,73#&'#5'67#535'2'67367'm **  #/-" )  Í  #.s? 1>  [ÿéïÏ%767653'67'56##53#"''325˜     ZA   Ï n QQ3'# ŠÆØš gÿéîÁ!%)7##53#"''325'#67&'7''53535Ü9  4/   ¯ÆØ› ˜sC & Ä!!2^ÿéîÁ!%)7##53#"''325'#67&'7''53535Ü>   :2   ¯ÆØ› ˜sC & Ã!!2lÿéïÏ&767653'67'56##53#"''325Ÿ   R:  Ïn OR3' $ ŠÇØš sÿéîÁ"&*7##53#"''325'#67&'7&''53535Ü5 -*  ¯ÆØ› ˜sB &  Ã!!2 ÿêpÍ-73#&'#5'67#535'2#'665367'^ ##   '& ;  Í  ")‡+.@  OÿéîÏ$77653'67'56##53#"''325‘   "bE   Ï n PU.) " ŠÆØš `ÿõ¦Á7#67&'7''53535 . ÁsC & Ä 1 ÿéÎ26:73#3#"''3255#7&'7''75##535#535'235#335€ ..8  % !4..8-Î=R  ;  Xj=Iÿé˜Ò%-159=73'73#676767'7&''67'67##5##535#33535#35#89G    3:+}Q2Q2½   $     \g g$6 ÿé—Æ%+17=73#3#3#535335#3##'3267#733&''&'''67&'„8//9ˆ9 j oZ! 0  ,Æ''4f:$; &   ÿè¤Ï%)-27;?CGMS75#53533533#3#'3267##5#'67#77353355##67#3#735#35#35#'67&':))))1 !#   5(wwRRRRRR  D«  *  ) &  -X? " "      ÿé”Ë 15;73#535#535#3#7'75#73#3##"''3255#535#735#&'iiVPPV ; C:   ``7  ËI  B8  K  ÿê™Ð+/>DH73&'73673#3#3#&''67#5365#535#5#35#"&55#'67#333535#  -'2>: % & 294&+E !R  >RRRµ    _  _ 6     >  ÿé¤Ï E733533#537'6'&'#5'67#535#535#53&'73673#3#3#&@.‘-S f  M" $2>339  =66@6 Ï///-   ®,.   ÿç¢Æ6MSY73#63#5'75#35#35#675#767#53&''67&'#5'6767&''6'6L   ; )=   ='   K    Æ? J )- - "    ~5X   )  ÿè˜Î#<B73533533##5##5#3#735#335335#5#3'67&''67##567#  ##  yy!-7>   )  .À 62& / &4  ÿå”Ò'+/37=C767'7&''563#"''3255#'67#3#735#35#35#&'''6@    &B    ;ttMMMMMM: Ò $    ?6 $/  !@jK++"    ÿç¥Ð(6:>DJPV73533533##5#5#3673267#"&5'3#5'675#5373#735#&'''67&''4' )$$O[)8  V 00> _ U ¾   J_ZDHLYn73#73##5##53#5##5&'7&'#3#'6553&'75##5#35#73533567'53373673265#"&5@@HCCˆ' W ++'v :'O#    Ì 0""0. !/    ! )) $-1   :  6       ÿç›Ð$JNRVZ`f7'673533#3#7'5#'67#535#'67#535#'673533#3#67'3#735#35#35#'67&'      L     _rrNNNNNN  E °       Z@ % %       ÿé•Î#:73#3#3#"''3267#53635353533#&'#5'67#B4Zjjk   l$GGG_)'' %Î@  6$o   [  )*GÿéòÈ%,073#3#5##535#5#35#"&55#'655#333535#G«:.p.8_-p T pppȵ µp 1# -5„{ÿé÷Ï(7365333267#"&55#'67#3533##5#})  % /00/² K  =</e%%??kÿèöÏ,73533#&'#5'67#73533#&'#5'67#q A    ž11 u[' 4I22H /kj+,BŸÿêîÊ7#"''3255#'65535#35#î   ÊÇ <8 !?y<+g+xÿèõÉ7&'73&''676'367'   = # & U  É")*!r& .%O’  wÿïóÐ#73533533##5##5#3#3#5#53&'w%%C-[Wi9µ Tg mêÒ#)73'67#&''67#'6'&''6ub %$!%$# < J 9"$Ò   #   #  aëÑ"(73'67#&''67#'6'&''6vc $% $$$ >  K 9!$Ñ    , .  ’ÿèöÇ )733#5367#3#3#&''67#535#'6¢A^7.8$"    $' Ç 2% " cÿéŸÏ 7#5'6Œ  Ï©†&`ÿè÷Ñ>CIM7#673265#"''67&'#373&''67&'67#'6553&5367#7&'3#ð  C    U1L O44¬1! 5&%1&/A9!  ;/ /8S%z’ 6iÿèóÏ49?DJ73533#3#3#535#535#33#3##"''3265#67#5363&'#33657##&'#s15500<Š;,,1m   ` $ $ " L ;  ÿèõS!:>B73533#67&'7&''275#735#33573533#67'7&''275#735#335((( '2(((++  '3()E1 0[ÿéóÏ#973#3#3#"''3267#53635353533#&'#5'67#—=`ppo  mNNNf++""  "#Ï; 4 j   X  "97`ÿéóÐ.D733533##5##5#533673'73#&'#'67#3533533##5#'67#†""+  ,# , ) !!!Ð7     $" ;77$  ÿéòÏ0F73533533##5##5#3673&'73#&'#'67#3533533##5#'67#;>??>; M A  E!1 >%A 4::;88=!8º%    "# ;66"  ÿéôÏCG73533533##5##5#3533533533##5#3#3#&'#5'67#535#5#5# <C>>C<$9,,]$¡XcW&8 9'#: 4#ObHŸ9¿ !!. 11?^ÿéöÏCG73533533##5##5#3533533533##5#3#3#&'#5'67#535#5#5#c##%%##C\/;-  !.9-c¿ !!- 2. =MÿéöÏCG73533533##5##5#3533533533##5#3#3#&'#5'67#535#5#5#S')**)'$Hh6C2" %$ #4@2o$¾ !!- !61 =bÿéöÐ.a733#3'67#'6553373265#"&55'73#67&'#"''3265'67''67&''67#£//8 [  4   e/    Ð  H;- .6Q   *         kÿíóÏ.6>BFJ73533533##5##5#3533#3#&''67#535#67&'7#3#53535#35#35#k..),,9 +0+7) A ‡   ¿  8!444$$$$$³ÿéóÏ73533##"''3255#&'·     ›44‰  „ªÿéóÐ73533##"''3255#&'«'  '  ›55„    dÿçõÑ$*.26:@F73'67#&''67#'6'&''63#735#35#35#&'''6¦= #   &  . (qqKKKKKK>* !Ñ    #    "  eH* )   ÿåí¬!%)-39?E73'67#&'3#53'67#'635#35#35#'&''6'67&'w^ ! 8 2_¢09 *}}}}}} 6 #- 24Y'#%%¬    WW  T ! ! ‹    r   GÿçõÑ!'+/37=C73'67#&''67#'6'&''63#735#35#35#'67&'šH   , % $ .  < 1ƒƒ]]]]]] ("NÑ     #   "  eH* )   qëÑ"(73'67#&''67#'6'&''6vb !$! $$# :   I 8!#Ñ          ÿèõc 9=A73533#67'7&''275#735#335'3533#67&'7''275#735#335…(++  '3()Æ(++  '3()R7  7  @óÒ;?F733#&'#"''32654''27&''67&''67#537#'77#67#"MeC# 2. 3F<= D@!' -ZaoZJGÒ      9  VÿéóÌ "(SW[_cgl7'6553'#3'6''73#''67&'3#3#"''3265#3#&''75#535#'67#735#33533535#335&'#{ŠffP",2AnPX  ,# ")&##  L%¥ )1¬( 1 @  ?????«)   * Ò       6 *J  b &   ;!òÒ*;?C\767&'7''673;267##"&5536#"''3255##535#35#7;667##"&5536>! )1¬( 1 @  ?????«) * Ò     < .Q  "i )   A CòÒ*:>B\767'7&''673;267##"&5536#"''327##535#35#7;667##"&5536?  *1­) / @  @@@@@¬)   , Ò      .&?  V     2XÿèôÍ&7;?U7''6767&'73267#"&5536#"''3255##535#35#73267#"&5536—   ]   1  u    ¶ (#    Pd  Ï  &" -)G+  (  QÿêõÈ37;?CIM73#3#3#&'#32767#"&55'677#537#535#5#35#3353353&'35#^-%?P' G& .(  +-&-R%%<8,55È8  $  0   8'D  5œÿéöÏ+75##535#53533#3#"''3255#&'#5'6à     L*6G5 !2BDOÿé¤Ï*75##535#53533#3#"''3255#'#5'6x     T"2C5 !8?FxÿéóÏ#+/37367&'#"''325'3'67##5##535#35#¬    .(  jAAAAAÏ   !$  ?(Qh h&9Fÿé÷Ï"*.27367&'#"''325'3'67##5##535#35#—  *   G;) #'‘_____Ï   #'  @)Sh h%8dÿéöÏ"*.27367&'#"''325'3'67##5##535#35#¥     <2  !{LLLLLÏ   #(  @)Qh h%9kÿéöÏ#+/37367&'#"''325'3'67##5##535#35#ª    80  tFFFFFÏ   !& @)Qh h%9UÿéóÐ %73353353##'6553#3##5#535#l$$‡w"a'--..'Æ))17.# %*@$77fÿéóÐ %73353353##'6553#3##5#535#ztyl[$))))$Æ!++ 17.$ %*A$77UÿéôÏ).4:733#3##"''3255#5373&''67&'#367'67&'v#  "1H      w  C  Ï#f  aFV8# %0J5'&6] (  _ÿèöÑ$>BFJO7#5#&''67##5'673#67#3#3&''67''67#735#35#35#67#ï(   # =1 sEH ) & OOOOOO* ; ©$   ,Q   :  = RÿèõÑ$?CGKP7#5#&''67##5'673#67#3#3&''67&''67#735#35#35#67#í+   & #A6 zJM ,")  VVVVVV.B©$   ,Q   :  = `çÒ#73#33#53537#535#5#5#5#W[EÍD\`C{{{{{{{ÒF F) ÿë`Ï 73#3#&''67#5365#'6#) ! Ï1 %$:ÿèñW!73#3#33#"&''675#735#/¦JRR!.)G/ IW0   *bÿéóÏ,08Q73533533533533#3265#"&55##5#'67#5##5##5#"''3255##5##5353b    /  M Nh  -¶  ++ )),8  #II?-  ÎcE58H&'!  ¹ÿéóÅ7#"''32654'7##5ò  Å?!! !CËÜRÿçôÏ)OWbh7'673533#3#3267#"&55#'67#535#'67#535#'673533#3#67'#5##53'665&'´       @     ZP1!$ '%«        M=>N' PÿçôÏ)MU]c7'673533#3#3265#"&55#'67#535#'67#535#'673533#3#67'#5##5'66&'±     C     ]S9&$!«          N=>O)- $ µÿéöÏ73533#&''67#7&'µ  5 ŠEE?B1#3" 5P? ÿèŠÐ,048I]733#3'67#'65533267#"&55'7533#3#735##"''3255##53&'73673##5#;00= P  %3%  !\\OO//E  <  Ð L>2 /;V     (  4 #>J   mÿðóÍ#73533533##5##5##53&'73#3#m((<1^Yl²I SÿêóJ73#3#33#"''675#735#-¨KSS!0*w  (K„„J*      " ÿèñD73#3#33#"&''675#735#1¥OTT$.)F/! DD%    ! kÿéõÑ 7;?CG7&'67&'67&'63#3#&'#5'67#535#735#33535#335ˆ  2  0  Xt29-  *5//N/Ñ      -O  1. /1eÿéïÎ9=AG73533533##5##5#3#3#"''3267#&''67#'67#735#35#33#l!! mD\      &  GGGG2D GC.    + ) F$ ]ÿëøÑ-159?OU[7&'327#"''67&'#'6553533#6'3#3#735#&'33267#"&57&'''6à    : L##Q----      \  b Ñ .    (*211 30,  / gÿéõË 4873#735#3353353#3#67&'#67'5'67#735#tvv"o‡‡ s* $   OOË973   "(    _ëÑ#'+73533#3#3##5#535#535#35#33535#335XYYMMcc``KKX99L:†99L:È 66  gÿéñÊ#E73#3#5##5##535#3#73#3#73#3#3#"''3255##5##5##537#py4;((;2;D''D((Qˆ?@  /6Ê (;;( * :  $8888=N^ÿéöÈ %AQ7#'6553#'#5'67#535'6#535'673#&'#5'63#53533533ðoB    -    /{&ÈKC? 4A] ) .   (" J22>RÿèòÆ %7#'655#"''3267#3265#"&55ñtw   + # ,ÆRD5 6?_3I1y   ’iÿèòÇ %7#'655#"''3267#3267#"&55ðem   %  ' Çl="!>y4I 2y  ’ ÿé{Æ 7#'655#"''3267#67'5zJ[  ÆRC6 6>^'P 7…  £ÿçñÆ &7#'6553#"''3267#3267#"&5ì²1| S0 >.ÆRE4 6>_3K1t  ÿè‹Ï$7373#3533#7#5'675#'67#) ;B %""!!$8!¯   84" oÿêóÌ!'73##"''3255#535'2'6'&'à ::  775+  I  ÌYB  =V"  eÿéîÁ6:73#3#"''3255#&''655#&''655##535#5#e‰'%        ')QÁ%Š  t  (:  # !1 ¡%%%%ÿçîj 733#3##5#535#'67#5373#3zFFaaiiJ -> x† 0A     qÿëôÆ !.73#735#35#3267#"&5536'33#67'quuOOOOc    f%% Æ_9;= *  _1  hÿèîÇ 07#"''3255##53#536'&'3#3#5#53&'î  `VP,!"82C "ÇÄ  ­Íß  5 #4 pÿéòÐ %)-157&'67&'67&'6#5##535#33535#35#ˆ   4   6   Q0!Q0!!Ð   Qyy-GNÿêîÎ %)-157&'67&'67&'6#5##535#35#35#35#p   C   C  l++=//=++=//Î   Qx x-GIÿèôÑ48<7&''67&'76#"''3255##5'67#5373#35#35#Ð  )' $&!"  F '1 ^g FFFFÑ     d^  ,` +\ÿéöÏ'=C73673#3#3#&'#'67#5367#537#3#3#'67#53655#&'j,?CAF[ 5  ")J7;2 ) -47¾    V # *uÿéóÏ %73&'73#3#3##5#535#536'&'z0 .uT #966//2G / ± #88#zÿéóÏ %73&'73#3#3##5#535#536'&'. ,pP !633--0D -  ± #88#‘ÿéóÏ %73#53&'3#3##5#535#536'&'¿&_$) *&&$$%3 "Ï /$88$ÿèðG73533##"''32655#&'œ00 œ>8$  ÿê’Ð73533533##5##5#35#35# 55'5555£----§§==Œ= ÿî“Î767&'7&''6#5##535#D & 11#P===Î7 # "Hdd>+ ÿü‡Í73#7'6756675#t.%U6= 0&Í Y §ª] ÿé›Ê#)/7&'36732765#"&55'677&'''6H  %   Q  Z  Ê +L0Ki3"   Z)23(9& .ÿò’Æ7#53#67'75'67&'P8v)2A5+3  ³ ˆ  f+  ÿó•Í736767''3#5'675#53W  $&&Í8  u  ËÚ*  Lÿø‚Ð733#5#535#535#5367#'6@0 !WWSSX5 $ !Ð {   ÿéŽÐ$*73533#3#535#3533##"''3255#&'---5€7- U  U  ¶!!Q<  8   ÿì“Ï;767&''67'33#"''3255##5##5'67#53673#3,   ! !.,  !+?HË   \7  #RRA>  ÿò‰Ç73#735#35#53#3#67'675#iiCC*/u3--9:*ÇL(w WÿñòÇ73#735#3#3#3#535#535#lwwOO=66A›F44<ÇM*RjÿñòÇ73#735#35#53#3#3#535#wooII/4|4--9ˆ;/ÇM)‚ÿñôÇ73#735#35#53#3#3#535#‡cc;;$(d(%%1r-$ÇM)!! ÿé™Ð59=767&''67&'#"''3255##5'67#53673#35#35#+  ) l =  (1EL====Ð     _b  &`  #3 ÿçqÐ+73'67#&''6&''673'67:)(2/ !   $#(30ÐB/  b   )S>dôÉ%+7'66533265#"&55'675#53#67&'’ S   ]#, $Z#S ·  #?  6% 4.eÿéóÐ73#3#535635#'67&'×&0Z$ˆ5",,JÐ #;†;R ! _ÿéöÑDJP7&'#67325#"''67&'#3533#3##"''3255#'655353'67&'ã       A RM 4Ñ ,:($  .H>5I  D1 08U    ' 6 &>J!  DÿíìÍ'+73673&''667&'67#3677#5##535#D &   0 c  ¢)H.  '$( "3+Éʦ”YÿëïÍ&*73&''67&'67#53667#7#5##535#|!       pÍ*K,  &%$3)wÉʦ• ÿîSÏ 73#'6#53#3#67'5#53%#*  /  Ï  0%9 HOÿëõÐ (J73#'6'3#3#"''3267#'655#53&'3'67#3#33#"&''675#­8? .   CI      Ð !% k"UM0 4N! A ,:  C#n\ÿéôÏ ,7<@QW]7#5##53&'73'67&'767&'767#'6&'33'673#3##"''3255#'67&'îf<3!)     f  2 ,D00$u4  .  Q »   3      % &A  /' $ Lÿè÷Ñ;BHL7#673265#"''67'&'#373&''67&'7#'6553'367#7&'3#ï#  J ]6 O Z;;­4!"3'$1'2(9"   ;/ .8T$${ —  5 ?ÿìöÑ #/5;KQ7'2'6'&''&'#53#3#533#535#535#&'7&''33267#"&5''6ß 6M@6  +/7ƒ9B”?9ƒ‚ollp: L  W  ! Ñ       " A  8       ! ÿéðZ73#3#3#"''3267#7#,¤¤à™€ 3Z  !  vÿéòÐ %5;AY_7'2'6'&''&'#5##5&'33267#"&5''67&''673&''67&767#ã +=2)     hN:      b  A  8 !  / Ð        N      ÿéï_73#5#535#535#53733#3#3##^MMBBLL1KK@@MM_v~ôÊ)7'66533265#"&55#&'3#67'75# R   0Z&.$ #"› 5  ,  4 oÿéóÐ37;767&''67&'3#3#"''3255##5'67#5335#35#ƒ  ! "GNN  8  $8888É   % b  '_ B0rÿêóÏ!'=73'33#673267#"''67&'#7&'3533533##5#'67#rB'&      Ce  V       £,,33'#C9   i%%%%556. >öÐ(,04733533#3#3#&'#'67#5367#535#53#335#35#N><<*f‚1 ,I( +D6'<>dŒŒŒŒÐ  7    7    `ñÐ,EK73533#3#3#3#"''3265#'67#535#535#73#&''67&''667#(00)).=8  .  !.$$(ŠC    +Ç           ÿèñf#(-73#3##5#5367#536367#33537#3355#an=SSz? 5."69JE,2DN>f; ;  "  $ cñÏ173533#7#"''32655'75#73##5#'6556'%%$' -'Ì &1\"*7» #(( .WÿéõÏ )H73#'6'3&'73#3#"''3265#'655#3#3#&''67#5365#'6³8> M #&    \'   ! Ï ! h$SO1 1D.)(  ÿçòš*I73#3#"''32765#'67#53&'73#'63#3#&''67#535#'6D"60  (]Q[ H/40 (#& % 06 š  P /9 ,N      añÑ (F73#'63&'73#3#"''3267#'667#73#3#&''67#5365#'6ŠT]s*#51   " †D&2)# #  06 Ñ  #       5ÿéõÐ (J73#'6'3#3#"''3267#'655#53&'3'67#3#33#"&''675#¡BJ 5 $#   OR ""     Ð # e(NM0 5L" > +8 E& mCÿéõÐ *L73#'6'3#3#"''3267#'655#53&'3'67#3#33#"&''675#¦>E 0    IL      Ð  $ fQN/ 5L" > +9 "D& m ÿèö¥ 'I73#'6'3#3#"''3267#'67#53&'3'67#3#33#"&''675#ŒW` B /.   &Zc ..&'   ¥  L5;! ,T 0  %#2T&ÿèØf 73'73#3#3##5##535#*KL®¢¢¤¤«ŒŒŒW  ..  ÿçÙY 73#53&'3#3##5##535#ƒQ¹R@££££¥€€€Y '( \ÿéîÊ $7#"''3255#535#5#'##535#35#î   .&,ÊÅ  d\%:J[…à$9cñÏ373533#7#"''32655'75#73##5#'6556'%%$' -'Ì &1]"- 7» #((  gñÏ373##5#'65563533#67#"''32655'675#á &1\"*7¤'%% ''Ï'' - XñÏ273533#7#"''32655'675#73##5#'6556'$$# &'Ë &1\!)7¹  &,, 3PñÏ173533#67#"''32655'75#73##5#'6556'$$&  &-'Ë &1\!(7·  ( 22 6GñÏ 373533#67#"''32655'75#73##5#'6556'%%  -'Ë &1\!(7µ * 99 9ÿîìs 73#735#35#3#7’’jjjj5ÖÖs`9::ZÿõòÆ7#53##5'67&'3#¢B8*?V’’´ Še *$".,*€aÿõòÆ 7#53##5'67&'3#¥?Š5 );Q‹‹´Šd$#,#"/,*€ÿèöÏ'733533##5##5#53&''67&'76•""F  Ï7 1! ". 5" ÿëôÐ -73#3#5363535#'&'333#"&''675#:di})PPVVV 2 %>F P,(Ð @A—!r} D`   PdÿèöÏ ,73#"'63'7#3#33#"&''675#Š]d j  //%'   #Ï  $+4A jZÿéóÏ ,73#'63'67#3#33#"&''6735#€cm t  //')  *Ï  &  +4 #BiUÿìôÐ .73#3#536#335#'&'333#"&'&'75#²&BFY"///33= % +& 1 Ð @?–W} F_   P^ÿìôÐ /73#3#536#335#'&'333#"&'&'675#´%@DW!---009 #)# -  Ð @?–W{  D_   PSÿéóÏ17#"''32655'75#53533#73##5#'6556“  d !>&iH : :++2l%ˆˆ=6 15]9ÿéóÏ'+/N735333##3#3##5#535#535#535#535#3353567#'7#5333#"''67&'‡**--44**##++1€ 3?<5B   ¼"!$,&: A!%TÿéóÏ'+/N735333##3#3##5#535#535#535#535#3353567#'7#53333#"''67&'—$ $&&,,""$$+j/  63,9  ¼""#- :!;%#PÿéôÏ'+/N735333##3#3##5#535#535#535#535#3353567#'7#53333#"''67&'•% %''--$$%%,m0  95.:  ¼""#-!:!;%$bÿéôÏ'+/N735333##3#3##5#535#535#535#535#3353567#'7#53333#"''67&'Ÿ" """((!!(`0  00)2  ¼""#-:!;& $dÿéôÏ'+/O735333##3#3##5#535#535#535#535#3353567#'7#53333#"''67&'¡ !!&& (],  .'2 ¼""#-:!:%"bÿéõÎ673#3#535#535'633327#"''67&'767#'7#æ C "_5&'+   "Î7<<28%  7YÿéõÎ573#3#535#535'633327#"''67&'767#'7#ä G#d9(*/    $Î7<<28% !6DÿéôÎ47'673#3#535#5367#'7#533327#"''67&'»*# !! R""Z$%&;$//5  ° 6;;. !67$ ÿéZÏ#'+/73533533##3#3##5#535#535#5#5#35#335   1  »$:)):$NJÿéôÏ'+/P735333##3#3##5#535#535#535#535#3353567#'7#53333#"&''67&'’' '))//%%''.t2"70""  ¼""#-":!;% $ ÿé’Î773#3#535#535'633327#"''67&'767#'7#ˆ @  Z3 $'    Î7<<2:$ !6 ÿéò™-15@7'6735333##3#3##5#535#535#535#535#33535'#5'6@ 4377<>3F$$$ˆ  '™ !         bN ÿéòž-15@7'6735333##3#3##5#535#535#535#535#33535'#5'6@ 6377<>3F$$$ˆ  'ž "     ePEÿêòÏ"(7365337&'#"''32767#'665#'6])6   "%# !) ¥*;"N)WHMCB $  ÿéóÏ!'733#"''32665#'665#53&'''6aI  4)*(%EEt  • Ï*bD ADGMD?*#) +!*! jÿé÷Ã#73#"''32765#'665#'67&'|[  " j ÃwK$€\M JW% #ÿéò@73#3#"''3267#7#äŸ  •1@  cóÐ573&''67&'67#5367#73&''67&'767#@2  # *%T]    FÐ   2 /    #ÿèÝg"/7'67##53673#"''3255#&#&''6w  7UP  D$ !  (9  ct[  E    hóÐ573&''67&'67#53667#73&''67&'767#@1  # *%F]    FÐ  8 2    _êÐ"&73&''67&'67#53667#73#735#B3  # + ']ZZ44Ð    =  +M)lêÐ!%73&''67&'67#5367#73#735#B0  & !, ']ZZ55Ð   /  'G$GñÐ873&''67&'67#5367#767#53&''67&'@2  % )%Y  La    Ð%   = *$   YôÐ673&''674'67#5367#767#53&''67&'@2  %$ ) %f  Ka   Ð   7 &  ^ñÐ773&''67&'67#5367#767#53&''67&'@1  # *& g  Ka    Ð   3 %   ZêÐ#'73&''67&'67#5367#73#735#B2  % ", % ]ZZ44Ð"    9 ,P. ZæÐ"736533#"''3267#'67#73#735##6  $&"SS,,¼ C'#*V1`ìÆ73#3#5'67#35#Ó~wŒ 1?FddÆ ='"AaÿêòÏ 73#53&'3#3##5##535#¦@‘;%xxxxwNNNÏ  >U U5# ,ó73533533##5##5# 5M<<M5r++++3333ÿçåÐ$73'67'567677##53#"''325YL 3  3*$y3Z ¦Y>($ …lbÆÙ   MóÇ73##5'67#&'Ô]%5E$_-!!,Ç`J"( ÿèáÐ7'6553&'73'#3B#PO‹‹f+6!MM  N;( xóÓ73&''67&''667Wm"0 :..= 4%   Ó      RÿçõÌ!%)-TY_73#33#&'75#&'7##53537#35#35#35#33265#"'3&''67&''67&567''6\’F=  6 3*8WWWWWW  K  %".%   S  Ì A   A       (  :  IÿêñÅ!735#53#3##"''32655'67#'x;Nˆ&,,   "6.$7¦-==] WA-#<LÿéóÐ '873#'6'3#'3#7&'#5##53'66733267#"&5¹.4 ,$m I*&& #!  Ð !&YQL  !SBCT./ &% \ÿèñÑ673#67&'7&''53&'35357#"''32654'7##5}2   b  ÑfL # Á **LB$ 'BÊÛeÿèñÑ673#67&'7&''53&'35357#"''32654'7##5ƒ,  _  ÑfL$ Á **LB$ 'BÊÛ‰ÿèóÑ673#67&'7&''53&'35357#"''32654'7##5ž    K ÑdL% Á **KF" 'DÌÛKÿéƒÎ73'67'67#'67276767s    e;0 4 &*26 iÿçõÏ159=AEIP735333##3#3#&''67&'67#5367#535#5#5;5#33535#33535#33567#u01 16DM  +  )%30 0N0R!!4#( 'Ä  -    -  ' E Q  kèÇ73#3#5'67#35#Î~—*6:ppÇ 9% 8aÿéòÆ73#7#5'75#35#35#675#g‹>'"@@@@%@Ɔ2/ ’$$\$Y ÿézÆ73#7#5'75#35#35#75# l $"%%%%%%Æ…3/ R \$ ÿé‡Ç73#7#5'75#35#35#75#q  &*#......Ç…30 R \$Y½ 7##55#3535#Y33!!!!!½¦º1!!!!T"T½ 7##535#35#35#T/½¦¹2"S!T"[ÿéòÏ#'+73533533##5##5##5##535#33535#35#[!0 0![%%7$[%%7$$¯ )‹‹6$$$Y$$$\ÿèôÏ4735#5673#35335#535#53#3&''67&'767#i56##-67& '"  eL[ ]]^ fÿèòÏ6735#5673#35335#535#53#3&''67&'77667#p12 +23! $    _L[ ]]^   PÿéòÐ+159AE7#&'#'67#3&'73#'655'673'3673#3##5##535#ò   20w!DE>?aaaaa<<<     ! :5 ,68   ^  7 7JÿéòÐ+159AE7#&'#'67#3&'73#'655'673'3673#3##5##535#ò 51|!GH@Aeeeed@@@     ! :5 ,67   ^  7 7 …òÑ73#&'#'673#&'#'68># tG*  Ñ " #   òÑ73#&'#'673#&'#'68>$  rH+   Ñ   %  tÁ7#3#567&''67&'tOOb%   ÁœÀ#  ÿÿ\¼ 7##55#35\66##¼£½I7766PÿèòÏ!73#3#"''32765#'667#53&'® 4VN  8> Ïc# 4+57QcÿéòÏ!73#3#"''32765#'665#53&'° 2QE   1; Ïf  <,4=GiÿéòÌ73##5#'66556à $0Z!'! 5Ì ,††?5 ._WÿêöÏ"73#&''67#5353533655#335ä?) (.3;222!§N130 ".N((N ** <dÿéõÐ *7&'367&'#"''255#3'67#‰# !! H   5 6  #Ð  3:R ŽH"6TÿéòÏ'+/3773533533#3#"''3267##5#'67#735#3353355##5#`$**4   *'( $6(µE"2 RR2 (G T""""Qÿê÷Ñ 26:73#53&'33##367&'67'5'67#5#5;5#35#­>“@(p-  :   $JJJJÑ ."!   = /  .  !2ÿéWÏ73533#&'#5'67#   // y|%%/ÿêQÐ73533#&'#5'67#    00  ‹x )QÿèòË15973533533#'3255#'655#'3255#'655#75#35#V <=  5cm^^^^W  R=%"? W  R=%"? MMMM `ÿéðË#+/37;73#3#5##5##535#3#73#3#'3##5##535#33535#35#h‚:@.,>6? !!>r\$$6&\$$6&&Ë (AA( -h h&: QÿéðË#+/37;73#3#5##5##535#3#73#3#73##5##535#33535#35#Y‘AG53E=""G##F!!F%%8i++=,i++=,,Ë (AA( -h h&: dÿéðË#+/37;73#3#5##5##535#3#73#3#73##5##535#33535#35#l~7=++=5=<< 1W""4#W""4##Ë (AA( -h h&: kÿéñË#+/37;73#3#5##5##535#3#73#3#73##5##535#33535#35#tv3:((:1999/R 2 R 2 Ë (BB( -h h&:VÿèïÐ+/377'73#'65535##"''3255##5##5##535#335335 7p]]s      µ >#73 (6a,@e  !####<{.CÿèîÐ,0487&'73#'65535##"''3255##5##5##535#335335—?€mmƒ  "µ  >#83 )5a,@d !####<{.sÿèõÏ"73533#3&''67&'#535#67#{111+   ,1: : ¨'')'    ')nJÿèôÏ '.73#5##53&'3#&''67'67#53667#¡ ?pC[ #!9 26 %- 3Ï++ 6&  [! ^ÿèóÏ &-73#5##53&'3#&''67'7#53667#¬8a:O 1 +.')Ï** 6&  'Z  aÿèóÏ &-73#5##53&'3#&''67'67#5367#®7]9M 0 +. %#'Ï** 6&  D  mÿèóÏ (.73#5##53&'3#&''67&'67#53667#¯4W4K * & ! %Ï** 6&   Z  vÿèòÏ (/73#5##53&'3#&''67&'67#53667#´/P2B ' $ " "Ï** 6'  Z!  ÿèzÏ &-73#5##53&'3#&''67&'7#53667#A)@) :  "   Ï** 7&&    'X XÿéóÏ$=EIO73533#3#535#3'67#3#3#535#3#3##"''3255#535##5##535#&'a9==7|29•€f%B’=.› ..u>CÅ   $    #   E E+  RÿéòÏ$=EIO73533#3#535#3'67#3#3#535#3#3##"''3255#535##5##535#&'\<@@95<› †l(F˜@2  22{AEÅ   $    #   E E+  dÿéóÏ$=EIO73533#3#535#3'67#3#3#535#3#3##"''3255#535##5##535#&'l5992t/5Œw a#=ˆ8+ ,,m:>Å   $    #   E E+  ÿè Ï'+/37733533#3#"''3267##5#'67#735#5335#35#35#35#9%%/ - %+ %%%M#ÏC"7 "SS3!(F 1 T""" ÿî‘Ä&73#67&'7&''67#'75#53533#~< */+}8E7//00Ä) # ( #  ÿéæÏ 73#"''325'3#Ò   2ÏÌ  ®‘ÿé¤Ï=73#3#'6553&'#53&'67#3533#3#7'75#535#'6_: &{(8!4((""'j1%%Ï :/% %-C B    ^óÏ !'73#'&'7&'''6'&''6''6™m ³  R L ¼ (N Rc Ï@@      #    WóÏ !'73#'&'7&'''6'&''6''6™m ³  R L ¼ )N Pa ÏDD         IóÏ !'73#'&'7&'''6'&''6''6˜l ´  S K ¼ *M Qb ÏLL    #   %   OðÈ +07#3#3#535#35#5#7#53&''67&&67#€%%%%i CCh`   $ 0È2x#33R0   ]ñÈ ).7#3#3#535#35#5#7#53&''67&67#€%%$$i EE!!i `   ! 3È-k-.I $    dôÉ */7#3#3#535#35#5#7#53&''67&67#€%%$$i EE!!k [   -É ( _ % % < %   FðÇ */7#3#3#535#35#5#7#53&''67&67#€%%%%i CCg`  " 0Ç5€%87Y4     " ÿõ‡Ï!%+173533533#3#3#5#535#35#35#35#&'''6 1ZOc %111111=   ¼V;MV44)   ÿùiË73753#5'53675" ˳ˆ¥ ¤˜eÿéóÐ'+/3773533533#3#"''3267##5#'67#735#3353355##5#k$%%. ( "& $6$´D"2SS2!'F T""""SÿéóÏ73533#3#535##5##535#SEGG<Š:EUUU®!!##Occ?,OÿéóÏ73533#3#535##5##535#OGII=>>5}4>‚LLL®!!##Occ?,mÿéóÏ73533#3#535##5##535#m8::1t/8zEEE®!!##Occ?,yÿéòÏ73533#3#535##5##535#y322+j+3q@@@­""##Pbb>,UÿèôÈ@HPTX73#3#'67#'737#'67#'7367#53#3#333267#"&5'37'#5##535#35#\A n  E  F  _XXXXXÈ '   F        _ _!1EÿèóÈ*2AIMQ73#3#'67#'737#73#3#'67#'737#37'733265#"&5#5##535#35#OG  RH   &  P ]]]]]È % & 7  %  _ _!1EÿéöÏ"&*@73&'73#3#3#3##5'65#5#5##53533#&'#5'6l&7<6655=z :*****   ÿê‹Ð',07'67#535#5'67&'3#3#&'367#335J   #+ & <%, /*!A & A5 ‚ÿéî¾73#"''32767#'667#'6–X     ¾¦.,tXLHU!$ ÿê‡Ñ"/<7&'3#5'63#735#'3#735#&''67&''6D  7= '!11L11  >  Ñ   0??3  %  ÿêŽÑ"/<7&'3#5'63#735#'3#735#&''67&''6I  :@ *"33O33 A   Ñ   0??3  $  ÿêÑ"/<7&'3#5'63#735#'3#735#&''67&''6I  :@  *"33O33 B  Ñ   /??3  %  GÿéðÌ #)PTX\`dhn7'6553'#3&'7'6'3#''67&'3#3#"''3265#3#''675#5'67#735#3353353535#335&'#6m•qqbk* 4ErQ]   /& $,%  N% ¤;B< 3@c(   $    #G/    /   ÿé¨Ï159=S73533533##5##5#'673&'73#3#3#3#7#35#5#67#53&''67'&!!!!&    56....7‚8%%%%% _{   +  à  >   R   -   lÿéôÏ!'+/573'33#67327#"''67&'#7&'3#735#'6lJ+*    Jp  [88)$&©&/3 ($$+"D7 DE!:  gÿéöÏ &*.473'33#673267#"''67&'#7&'3#735#'6iG0/   Hs  ^<<,&*©&&')#5 &8)/;7 CE!:  iÿéìÇ 26:@7#5##535#&'3533#67325#"''67&'#3#735#'6ìbbbS C0     0)) ÇÞ ÞÀ®$ %'2,  SÿéêÄ73#"''3267#'67##5##535#W“ ?1 *,Ž```ÄK.=1_iiG4 QòÑ &9NT73#"''3255#'67#5353635#&'733#"&55#'6553''67&'767#&'C&   0 00œ &_  !  % IAÑW   /5  #   4      hÿêóÒ&*.267&'3533#3#"''3255##5##535#35#33535#335Ò  \<==6   #"5<""4#W""4#Ò !!ˆ  555Ÿ@GbÿéðÒ%)-157&'3533#3#"''3255##5##535#35#33535#335Ï  ^>??:  '':>''8'_''8'Ò !!ˆ  665Ÿ@GbÿèõÍ733#&'#67'5#537'6ya5, 4 QÍZA!M`  kT * XÿéõÐ !73#'63#3327#"&547#~]f ddt `Ð  !%% %^ÿéëÆ7#5##535#"&55#'655#3335ëhh PÆÝݹ* k.7# -.ekdÿêëÇ7#5##535#"&55#'7335655#ëaa  KaÇÝݹ, i-8" ~cit*-mÿêíÇ7#5##535#"&55#'7335655#íZZ  G ZÇÝݹ, i-8" ~cis(-€ÿêîÇ7#5##535#"&55#'7335655#îII   =IÇÝݹ, i-7# ~cip'-wÿéòÐ767&'7''6#5##535#¥! +0T>>>Ð8 & FhhF4‚ÿéòÐ767&'7''6#5##535#« '+O999Ð6 & GhhF4oÿéòÐ767&'7&''6#5##535# "$ .4XDDDÐ8 & FhhF4dÿéóÐ767&'7&''6#5##535#š&( 49 _LLLÐ7 & FiiF3 KòÐ#'+>73533#3#3##5#535#535#35#33535#33573##5#'6556333,,//66,,3+E+w )K!.Æ  ;   ; " G AA$ 5KòÐ.26:>73##5#'6556'3533#3#3##5#535#535#35#33535#335å )K" .±133,,,,22,,1+F+Ð AA 2 ;   ; !  ]ÿéòÏ#'+/73533533##3#3##5#535#535#5#5#35#335`4#66AAAA55#a4##6$¼$<((<$N ÿì_Ï7367&''65''6-    $Ï> $% 5N&+$ÿê\Î7367&''65''6-  %Î=   & /F6+ #YÿèõÎ/3733533533##5#3#3#&'#5'67#535#5#535#s=c6;0" "% #-:.RÅ++: 88L+CõÐ/57367&''66'3#&'#5'67#535'6'6®  "<%%  *-"1F  Ð" $#17 (.  `ÿêìÐ73#"''3267#'6##535#„^   QI3 ÐŒ|%(XgG5oÿîóÄ 733#537#537#37#37#zo „(.-1/ÄÃTIII°TjÿéõÇ!%)73#3#&'#5'67#535#735#33535#335zk,5'  *7-,E,Çc(.LK*&9A`ÿé÷Ç!%)73#3#&'#5'67#535#735#33535#335rs0;, "# !/=10M0Çc(0ON,'9AnÿéòÇ!%)73#3#&'#5'67#535#735#33535#335}g*4'  &3+*A*Çc(-JH('9AuÿéõÇ!%)73#3#&'#5'67#535#735#33535#335ƒc(/"  %2)(=(Çc(.MJ)'9AeÿèîÈ  $(7#5##53#3##53#"''32=#335îcQQQQl  FFFFÈSCCS!c-e  A`ÿéôÈ !'73#3#535#3#735#35#35#'67&'mz4?Ž;2zzTTTTTT IÈ2nN.-$     XÿéôÈ !'73#3#535#3#735#35#35#'67&'f8C•>5YYYYYY KÈ2nN.-$     eÿéòÈ !'73#3#535#3#735#35#35#'67&'rt1<ˆ8/ttPPPPPP E È2nN..$     JÿéòÏBFJ735333##35#53353#5##535##5#3#5#'6753353#35#535#535#33535d88 8+  ++"  *99@@8I%%% ; &ƒ(&4 DD 4& > ' ; hôÑ "(AGM7&'7'673#&''67&''667#'33#"''3255##5##53'67&'(  _ 8=      $c/   2  3 Ñ        "1 226E   ÿéæ  $7##535#35#7#"''3255#535#5#vG4444·  I7777Jj´) ,›  LJ) ÿèõ^%73#333277#"&55#67'7#&'Þ˜l    ] '2k ^2   - W*  pÿéìÅ 7#5##535#3533#3#535#35#ìXXX?ÅÜ Ü¼ª&DDP$rÿéìÅ 7#5##535#3533#3#535#35#ìVVV<ÅÜ Ü½«&DDP$ÿêbÃ73#3'67#&''67#R*.91    ÃZG >C -9ÿê^Ã73#3'67#&''67#N&*5-    ÃZG =D -9ÿêSÂ73#3'67#&''67#E"$2 +   ÂYG >D  .9;ÿðóÅ 73#735#35#3#53535#35#35#_yyQQQQp¸))Åg=C=JJJ88888pÿðôÅ 73#735#35#3#53535#35#35#†ZZ4444P „    Åg=C=JJJ88888jÿðôÅ 73#735#35#3#53535#35#35#^^8888T ŠÅg=C=JJJ88888 ÿéxÎ $(,>BFJQ7&'#5'6&'3#735#'3#735#'3#735##"''#5##5##535#3353353255= 7 %.  % . . W      Î   0  0  0 1J """*]%$<ÿèñÓ4<@DHLPT73#33##3#"''3255##5##535#535#'6553&'5#35#5353535#33535#335¦?>2 27   $!400;I;;0BR!!3$W!!3$Ó   U  !j  C3 3>\) &   D ( CÿçòT*06767&'7&'#"''3255'67#'6767'67&'²!!#  $%- d R     4     GÿëôÏ>D73533#3#535#3#735##5##5#53#&'3#3#535#535'63'#6JKMM>?K‡‡``‡ˆ<"x (<B73673#&'#'67#3533#3673#3#5##5'67#535#35#35#$1     * 6/ '( ////½      _ N V4ÿóÍÄ7'673&'767U) l'"-2 6 15  A  '1ÿòðÇ "&54632'"32654&€/AA//AA/'65('66?,+??+,?Ä5$$44$$5vÿêŠË73#vËáOÿì°Ë73#'3#œMËßÃ4ÿéÐÌ 73#'3#73#¼ˆCÌãϲ¡’ÿîßÂ73&''67&'76´  ,M P")+ -*ÂL+7/# Xó¨ 7&'3#{ Xææ¨6 )óÀ 7&'3#3#zXææ»»À74ñÈ 7&'3#3#3#|  Yâ⯯ÔÔÈ0"(ÿøéÅ73&''67&'767#'6_^3%<?-+ 1) Q Å C0%  %- !ÿìüÌ '654'7&547'3#å߬¬8438;5791??1.=<0ÿìüÌ '654'7&54773#3#åß ³³8438;5791??1.=<0·qÿìüÌ!73654'7'7#&54773#3#"»¸ ££ ‘‘,)38;5791??1.=.'¨8ÿìüÌ (.3'654'7&5477#5##535#"&55#'7335655#åߦ€€! _€8438;5791??1.=<0Ç»»™" T#0 eNTd&#ÿìüÌ(,73#33654'7'7#&547537#537#35#0J F³+*- >5E5´5`1-38;579 1??1.=3+N5•NÿìüÌ #)'654'7&5477&'3#'67&'åßT  B®®.a8438;5791??1.=<0Ò0 <"*0+3 5*ÿìüÌ &'654'7&547733#"&55'753åß§]LR <?8438;5791??1.=<0— K MB@ÿìüÌ  '654'7&5477&'#'6åßr" 807 18438;5791??1.=<0À3U4zt:5ÿìüÌ 3'654'7&5477365333267#"&55#'667#åß-8  #$ ,8438;5791??1.=<0¤ # s<85,ÿìüÌ '654'7&547'3533##5#åßPQQP8438;5791??1.=<0…PPqqÿíþÌ )N#654'3'#&5473533#'#5'67#73533#3#&'#5'67#535#'6ãÎ   ] !!+$  *0??1-DC´1??0+CD-*)) vk%51 %%)&%SX))) ÿíþÌ 6:>#654'3'#&5473673#3#"''3255##5'67#35#35#ãÎ3X` b  Q #*/QQQQ0??1-DC´1??0+CD-  y  2s "(E=ÿêþÌ 4:#654'3'#&547#5'6327#"&''7&'37&'ãÎ/  "œA  %++0??1-DC´1??0+CD-Ÿz10"3E< &%; ÿÝÿÛ +"&54632'"32654&3#3#3#535335#€5KK54KK4.AA.-AArŠ744>š@#K54JJ45Kî@..AA..@*'3RRkÿÝÿÛ #"&54632'"32654&33#3#53€5KK54KK4.AA.-AAAFFO¢?#K54JJ45Kî@..AA..@/EÿÝÿÛ '+/"&54632'"32654&#5##5##535335#335€5KK54KK4.AA.-AA"55HG55G5#K54JJ45Kî@..AA..@>UEE W));)))ÿÝÿÛ %"&54632'"32654&3#&'#5#€5KK54KK4.AA.-AA€£L" C#K54JJ45Kî@..AA..@1Q„ÿÝÿÛ 4"&54632'"32654&3673#3#3#535#'67#€5KK54KK4.AA.-AA€2W]a1=–E( ! +#K54JJ45Kî@..AA..@3 ++ %#ÿÝÿÛ 15"&54632'"32654&3673#3#5##5'67#35#€5KK54KK4.AA.-AA}8SY `N  +11NN#K54JJ45Kî@..AA..@1  [ E #c- ÿçõÏ;KQW7&'#673265#"''67&'#3#"''32765#'655353'3#3##5#535#&'7'6Ú   %    ' 8²]'++++#  R  Ï  0!"= / :9%M/8. .6P''^SS^ % ÿéñÊ08<@HLTX73#'#5'67#535'6'3#"''3267#'67#'#5##535#35#7#5##535##5##535#°     W:    ÑSÊ )eb!$#M6A6¼ÈL;ˆBHNVZ767&'7''6'&''#"''3255#'65535#35#'##55#357&''67#5##535#À   &     ` ]Ï9$  3  Æ  :3$&UV<+h. bªÇM<<<<(  ,7.1.iiI8]êp73#ÕÕp ÿõðÇ7#53##5'67&'3#zfØZ(1?X'&!,€ÚÚ´Œq1#)$"-+*ÿøñÐ73533533533##5#3#5#5#!'111V'«¾!ž1’22>>>>VVt‡CCCÿèñÃ'7#"''3255#&''67##5365#53#â  F! +7CXhâf  u %$8•¨ÿ÷ñÊ 73533533#7'6'&'M MâÅ”   ÀÀÀÀ§:/ .5-78. ÿòñÏ  73&''65'3&''653# ,&1 @_!52ââÏBD 00)<@*5 4Mžÿ÷îÎ-1767'67'67676'67'67'676763#Ó $%+6#  ] %#)4! QÛÛ›<""!61=#" 50ÿèñÃ267#"''3255#&''67#&''67##535#53#'#3â  $ & (=MâG&&ŠŠ  rA  9¢&&&&ÿéõÏ&,273#67&&'#67'5#535#53533#&'7'6ˆhc  & 05 .$ *eXXYYI  “c  0)P  ^B  vÿêŠË73#vËá ÿéöÏ 7&''663#~#E C%(@-0 Ï ><9$02‘ÿéæÌ 7#56'&'Ó-/7~''Ì.Œ•!,!%ÿçåÐ7#5##5##535335#335åHEYYEEYH©{WW}''XEEE ÿéòÇ#73327#"'&5#3#3##5#535#535#º  M99GGGG>>DÇcc+%-„)%XX%)ÿæïÑ73533#3#3##5#535#535#X[[PPffccOOXª''"$EE$"ÿéãÌ73'67'536773353#5##YI < 5--Ì}>( / sfoya WÿèäÎ!%)-16;?73533533#3#5##5#'67##535#735#33533535#365#35#35##3*44>+2$" <3 3*!^**<%)9-*=++´;I ??(  I<>  \ÿèîÏ  73#'6&'#53#5'#335#Xa"1  z44 Ï&  ƒtvK888P!¯”7&'c//”07 61ÿòñÎ73#3#3#535#535#53&'{ _aTThâfSS_^Î6DD6ÿéïÍ!'73533533#3##5#'67#535#5#7&'/I0077K 4 * 47/ŒI¦''&&FQQ1 %FFFF9  ÿçïÂ$*073##"''255##53#"''3255##5&'7&'ßße  0Ç  68|—   ³—   ³/!"$ !"%0ÿéÄ 73'>y%!" ÄV&7+5 ÿéñÂ767667&''67&'?. *2 8)*C A'1Á_(8#'>  $!-a ÿñòÅ!7673267#"&55'75'6Ð *3878:$ /+V] #fÅ;K %  P;ÿêëÍ7'6767&'7&''6m#: ;&8Ê 9;,NQ2$"8DÿêäÐ!%73#"''3267#3#"''3267#5363#hW  oœ  ›+M  Ð 8 MN5s šÿéóÏ73#3#3##5#'66R™wbbffÏ&'=° ( ÿêõÌ"(73##"''32655#535'2'6'&'Ü )2jj kk(-`H ÌWB =V%   ÿèõË #7'6&'333"&&#"'663367#Ú Zm b  F¹3PL/HA$ J2šË   #1   * ÿéòÏ'73#&'#'67#5367'63#'3'66Í Ws=0 :'B 7CL^OÏ !0/ shh/) #ÿèôÐ 773##5#535'2353#5'675#73673267#"&5Ò $,ccff#(Vj:": "   Ð¥¥]} !+$ %  ÿóõÏ&7#"''327653325667##"&55'753Õ  f*" B%3:¦Q +_  # b MH ÿìéÑ #73#'6333267##"&54767#H š(ŠZ&1((B MfÑ &"=!% 6 ÿèÞÀ73#"''32765#&''6 ¾ ©*#" ##h9GJÀwM€  /ÿéÌÏ76767'67'67'67676¤,50& JQc 3;"#%-&$°@' :A/  3.ÿéèÏ#)7333#"''3267##5#535#5367#7&'fF1WTT>>:2>Ï-&C 1__4G4qLìÒ"&*.73533&'73#3#5##5##535#35#33535#335a<  aS??Ta"??T?“??T?¾  VV ' #  ÿê“Ð BHN7'2'6'&''&''67'67676767&'7'#"''3257&'''6… /C71  $   5       /  H Ð       k   , : )   ÿéúÒ+/37;?CGK733#3#3267#"&55#535#5367#'635#33535#33535#33535#335G V9N\\# 0.TTKZR +88K;†88K;AATIAATIÒ  H H   H H 8 & B & PÿëÄ 73#"''3265{ Ä¿  ÿéóÏ+/39?73533#33##5##"''32655#535#535#535#3535#'&'7'6]^^O; UUkkUU]q;;;;A  }  ¼))4  )<Aa    ÿèóÏ37;?C73533#3#33##5##"''32655#535#535#535#535#35#3353535cffRRUA [[ff[[QQc&==Q>>AAAà  3 !*   3 + ?!ñ²73#3#$··ã㲌 ÿóôÁ73#33#537#'7#7#Õ† z=è• t:lÁ#r-kh22ÿèó¾73##'6765#53##&´´~A2  @ã;¾=%H<„ÿôðÁ73#33#537#537#35#Ìh` à559P?cPÁx -Q “ B !     8  ÿîó£ 73#735#3#735#3#735#35#3##ºº””rrPP,¦¦€€€€3ææ£S3% 6?& ! "Bÿé¤Ð 7#5'6‘  7Щ‹9ç73#ÐÐ8ÿëò¤7'6553&”9M:K;$3K** $ $ ÿéöÐ 7'67&'&'3'67#€,> N(28 81  H«*#"ޝ0*4 06:+ ÿêxÐ73&''65> 3Ð=;$?\JÿíòÍ7'6767&'7''6“./B'.(, 7>9ÍP8 :e*  '/ 3O ’È 767'56‹ È   žÿçño 73&''65'3&''65œ"(+ 5_  .o#8&& -( %#4ÿêè 73533##5#7&'7'6b__b2    2^^55Q   GÿèôÏ '7'67333#"''32765#'67#536y #qiM  8#$ <,-š $+ \ 7*3@SñÇ 73#5##53&'3#Ÿ 9f=7žžÇH58K«FÿèñÃ!(73#3#3673#&''67&'67#67#^ƒƒ ——4b  ': - +Z 6 à % 2 FÿéòÏ073#'6553&'732765#"&55'75'6Ÿ @€<K 68  +.5Ï K?0 0:W /*< ?'@ÿéòÆ $73#735#33267#"&5'3'6673#V~~UUM  Z,ÆX2RY  [6. )/e>ÿéöÇ.267#3267#"&55#;5#'#"''3255#'65535#35#í? !  >   ÇyHÅUUà  89 !>x:(c*>ÿéšÏ73#3#"''3267#'655#53&'u/*   ) Ï!f!PK/ 1H'?ÿé’Ï73533#&'#5'67#F 22pk*/IÿéòÌ'=73673267#"&5'37533#7'633533#&'#5'67#§  S $,EF7% &$ #3Ì%  !  DGZ( ""+FE)"AFòÐ",7333#"''67&''667##53&o* 6=  \ Ð %     +[UÿéíÏ1733673#5##53'&'3#3#67&'7&''6˜   !sC&  ^^‘‘, !"17Ï38&'9+ L  AÿîŸÍ (73&'73#&'''6&''67&'76J#U9 2    «      @ÿéòÒEKQ7&'#67327#"''67&'#3533#3##"''3255#'6553&53'67&'Ø   #*    N$  !aT  ;Ò '.#?! % 5?<4H  C=- 09UkEÿéòÆ%+17=73#3#3#535335#3##'3267#733&''&'''67&'SœD::G¦E$~ ƒm*    ;  0  Æ''4f;#; &  Dÿë¥Í $(733#"''3255##537'6'&'3#735#k$   9&* ;  && ÍI‚  n‰™?   UF)BÿìŸÈ%+73533533#3#535#35#35#35#'67&'F  ]   .  ¯kkAB0  CÿêîÈ 'B^7'6553'#333##"''3255#5357#33##"''3255#5357#'37#"''3255'6757#i‘kk_i(1  66J::   #C9    "—4D5 5?_1    :    >ÿì¡Î $*73&'73#3##"''3255#735#&'''6F#!Y F  ""0  2  ³  GB  ?%@ *ôÏ,Y75##535#53533#3#"''3255#&'#5'6'5##535#53533#3#"''3255#&'#5'6°(,,//)   Z)--//)   s&7#  33  &7# !  /2{ Âb 7#55#35ÂG5##bXX$>ÿìõÏ.4:JPV7367&''65'3#&'#5'67#535'6'6&''33267#"&57&'''6¼     &.   #2    _  h Ï3  (# /.  62 "_  4  0" Uÿéð873353#"''3255##5##U@B   ?8##9 %##>>ÿë¯Ï1573533533##5##5#3#"''3267#3#5##5'635#L9  /,  ¹ n[ Q JS(BÿèõÏ,M7#5'67#53533#&7#5'67#53533#&3'7#3#33#"&''675#}    J    Œ–*55'!4% C‘)#   $#  !  . L:ÿè›e73#3#"''3265#'665#53&'t2.    $e 2 " !<ÿê¢Ï(.4:73#3#3##"''3255#535#53&'#53&'367#'67&'r    !   C  Ï E  @HW    CÿéðÐAEKQW]ci733533#67'275##5#533'67333#"''3265#'6553&'37#67#7&'&''&'''674'u-%% :R01-"" G     q QWX_2: +  *Ð    8    !2 0/ 32  _  p     Bÿé‹Î 73&'73#3#3##5##535#B I==>>>²  R V3! GÿæõÐ!59?CIOU[a7'673&''67&7673#73#3#3#535#535#735#&'735'6'67&'7&''&'{ O& &z599@’@993!! /#  R  X5  ;¢     ¤t8      T     GÿéóÉ +KOSW]ci73#735#33533567677&'7''67'6773&'73#3#3#3##5'65#5#35#'&''67&'Q™™-y   A B %(  * %É7T ,    d '%   9ÿéõÌ 159>V]73#735#'3#735##367#533#7#5'75#'65535#35#675#73#&''67&''667#žJJ))gJJ((•”0+>  1 / C*     Ì/.(% > J 4( */HS*+ g"      " ÿêô 73#32667#"&55#'>5#ÜC -%# " D¦ % ­J#3(1Nÿéò¬)767&'7&'32767#"&55'67'6i6; $ ' B ; /*¬-  !% S! WO@ÿéöË%+177'23533#32667#"&55#'67#73675#335&'Õ Mo\UMT<  ) OJE69MB Ë*K> #  E?3  %B  ÿëòÊ  (73#735#35#'3#33267#"&5'3'66lqqIIIIWc   %=%"ÊvDPCt >   C((  ÿèöÑ,16<7367#'6733#32667#"&55'67#7367#335&'(_ T ,^ 6D   -  4$ DC6=Q<   P8 #  8, 4*E  ÿèôÉ (73353#3267#"&55#'6765#7#5#35"L#L8 &' . '5ƒK$“É88{D ! K,+ #h88UUgîŸ 7'67&'Q- 'w&%Ÿ  ÿèòÏ '/@73#53635#35#'67'5673#535#'66733267#"&5t%T ....#  52!W%' %!8   #!Ïqq :KS ^  y~Xo$& 6   ÿèðÇ)673#3#"''3255##5##535#&''67&''&''67&'ßeY  EEYf”  I  Ç“  {ŽŽš­@%,%, ÿéôÅ 7&'''6''6767&'¯* - F)-k! HG /!3>Å=#,EH)/@(.  1HR  ÿïòË 7&'3#'67&' XÛÛG'(0l+*Ë8 D'07/38/ ÿêôÏ 7&'''63#3#"''3265#7#œ'1 -,.: 8–g m rÏ17 3"%(C'1ÿøðÏ 73#536'&'3#3#°>ÊuV  ªªààÏ q4ÿèôÐ%7'67#53565#53673#3#&'&'‚UU WZOp 4XbXJ FR <:6%-6Ï  ÿèòÎ%+73533533#3#535#35#35#35#'67&'!b +å0!5bbbbbb 4 -f*!#(²kkCB0 ÿèîÐ-K73673#53&'&''67'67676767&''&''67'67676767&'S 1 ?Ú> ›#* "']#* "'Ð¥ %.+E&  %/,E&  ÿéòÑ.6:73673#3#3#&'#'67#5367#537#53&'3'6673#Y .  3YQUq=) 5$> -ARDJY6 NÑ    "$    ˆ%"   S ÿèòÐ#7;?CGKOU[73673267#"&5'3#5'675#533#3#3#535#535#735#33535#3355#35#&'''6‹" #( #/%(!FF1ª!00>ä>22!99L8„99L8"@@@D## $$;) %Ð    (>  9F    , & (  !   ÿéãÐ!733#"''3255#&''67##53uZ G%) 6CWÐ-  … ''+(:§º#ÿéáÂ7#"''3255##535#335á –@@TB¿  MlÙ[HHH ÿêîÑ"73673#3#"''3255##5'67#H|… ‡ o,>´ x _~#+@¾œ767&''67&'R ""”! ÿêóÐ $(,73##"''3255##5#53535335#33535#35#Ù  ‰MM99M<‰99M<<µu*  %CCu;(((b''' ÿéòÉ ;@E7#5##53#3#33#3265#"&55#'67##5367#'6367#335Ô!qqqq O4;  *#I :$W L .18M9ÉK99K  9  & > B _ê¢7#5##5ꬢC00CÿêöŒ73267#"&55#'6655·  E!Œ & t4+);ÿèôÐ)7#5#'67667##5365333267#"&5ãP1 <Q    , ¦A.H ' 6(-@0o %  ÿëߦ73#"''3267#733#N• ” Á¤¤yO"1]Fÿçî²"73#3533#3##5#535#'67#536q ^i1EE__hhK$1 ²00ÿéñžD73#67&'#"''32654''67&'&''67&'767&''67#/¡E# () 0? G/ - ;Až 26 **       ‘èÆ7#5##5è§Æ5$$5ÿèí£ !73#735#35#3#53&'&'''65——oooo9bÚb4&" $$@ ' #£Y65' $  wܧ733#3&''67&'767#53,,(    >§   ÿìå¬+17=C73#35#535#53#3#"''32765#'67#56&''&'''67&'t$44z333Fw—  ” )W    C8  ¬  Q@  Lt   ÿéõËDHLPZ7#5##53533533#3#3#&'#"''3255##5##5'67#5367#535#35#35#35#3533&'#ï·#<$$ `…4% 0,  )?+#6<<{{{{20 G Ë-- A   ** ( A! ! G KÿëÅ 7&''6_)ÅU 941 ÿéôÒ$*73&''67&''667#&'&'^i'2 32.? <'4 \2# !0"V; 9TÒ       $ P  ?ÿë£Ï%+73533533#3#535#35#35#35#'67&'D  b   3  ³ii@A1  Bÿô°˜ 73##5##535#35#Bnne99999˜{ {0MTVîÊ73#3#535#535'2Ö DD>ˆ6BB<Ê ÿéõÐ+9=C[733&'76767&'#5'67'7267#3#3#53&'#735#367#3267#"&55#'667\ B  %M'  E!ˆEÙBbb'9J  D Ê         32  3  &  ÿéãÏ7335#53353353#5#353#5#FP<;;F´SLcQ>RR>XcLj ÿêðÏ735#53533#3#353#5#5335#gRRVVee=ž9go(%%(Q?`R?Q0ÐÅ%+7367&'#"''3255'67567#&'2ž$ $&   $ .| Å ! '2 #4ÓÇ173##'325567#3#735#67#53&''67&'9‚  e00V .@    Çp w &^: * ôÏ 373533533#7&'7'63#3##5#535#53&'736PSæ'  ¡   277882   š5555B   8   ÿçŒÉ73#'67#53655'6 013.46.;É1O$ D * ÿçò` 7#'6553#"''3267#'667#òº#  G, '.`!#! 3#7   ÿé¢ 7'67&3##5##535#U# 0% HOO\CCCr  K L.ÿë¡Î&EJPV77'7&''5673#"''3255#'67#'#3#7'75#535#5'63&''6'&'J   +D     445    & @2 2W[_w{7#'733#67&'#"''32655'27&''67''67#53'373533#67&'7''275#735#33573533#67'7''275#735#335xHM)E    "/)),* ?b3Bt #     "  ¤ !     | /   /  GlÎ73533#7#"''3255'675#%!!    %³  mÿêóÐ87'673&''67&76736533#"''32767#'67#“  ?      V$9   &1 +! *     # _ C2%!ÿçÄ973673#"''3267#'67#:-I  98 ,$' '$  ÿéÐ!%)-3973533533533##5#3#5#5#3#735#35#35#&'''6 =`s ];qqKKKKKK< # ½"3 1bE & %    ÿñ¹° 73'673'6oJ AL 63`°[/&Q>Z&Bÿëù­7673&''67&'8" +O H1<A"”!#3;&!70(!ÿù·’73'67#&''6d J#` W?   -’XF   "/ÿø»ž&*.2673533&'73#3#"''3255##5##535#35#33535#335/>;;   (*=>**=(e**=(‡  X  ###p.,ÿôÁ#'=73#"''3255'67#5353635#35#35#73#3#"''3267#535#K! 0'7&&&&&&B9(,    ,''„ O $ '(E86 8!ÿøÊ›"'+/73533533##5##5#&'#5'6&'3#735#322B#& `  ;>qqII‹    3; ä¨73##5#'66556Ï /?y26 J¨SS"" %-'5ñ®"=73673#3533#7#5'75#'67#735333267#"&55#'67#7%*  #*$ W' $ ™ ! e  XO D9ê¬73#5#535#535#53733#3#3##n55..33066//88¬ž1 é¯"&*06<7'673&'73#3#3#3##75#5#5#'&'&''6p   -/((((0g7%%%%%9  % m    d$$ƒ      5 éª #'+/73#735#73#735#3#3##5#535#735#33535#335=HH&&FII''^Ž>RROO=++>,j++>,ª& & #D   ) & 3ì²59=AE73#&'#'6'3#&'#'63#3##5#'67#535#735#35#35#5#¡7Q6 ‘ 33.  ,4llllllL+²      K   5 1 æ­ <@DH73#735#35#35#73#735#35#35#3&'73#3#3#3#5'65#5#5#8B ã° 73#3#&''67#5365#'6ha7FJ+ "$, 1AF! °! 2ð±107&'#5'65'3#735#Ž** b @F)……]]±  $B<é¨ $+73#735#35#373#&''67'67#67#Giiii-j  # 5 &-#_A¨D) " *     @ᣠ73#735#3#735#73#735#WooII+FF GFF £<;B B ÿêñÌ73533533##5##5#7L77L7tXXXXwwww ÿéðÏ !73533##5#3533533##5#'67#Z[[Z ,c))d2 *+®!!66C****ZZB5ÿèñÐ73533#3##5#535#7'6'&'[ZZffgg[­€  ‚NN*JJ*V   ÿéóÏ#733533533##5##5##5##5#53533\ !! ÊSSSWW{{ttuu{{XXÿòêÄ73353#3#5##535#rBV`tG[^Ã\]pK^buI ÿèôÏ#(-73#3##5#5367#53635#335367#33535oe9NN…! =?3??SA”6>RIR :Ï j11 j :F  + ÿçíÎ+17735#53533#3'67#&'36733#'67#7&'&'aTTUUc À8 /o S[ ;& Gd# v&!&Œ   4 !$=  9ÿèìÐ7&'3#&'#5#x  Q×f-  ]Ð .(\œÿéïÏ 73#535333&'#…jÜ^Oc/" !#šT">DÿæëÏ73#5#'6553533#3‡UMd#ŽŽ¦c.' (38…  Ï &?616`eT  j7 |Ð73#67'56u1GG!"'. 1Ð:I  ´AÿìåN7#3267#"&553#"''325§R +7  B9z  ;4  K&  \òÏ7733#'6655'667##"''3255#3265#"&55Š@ (j  91 _   $ %Ï 3- 1   . =   UÿíˆÑ (73#53635#35#32767#"&5536G0d >>>>F %- (&Ñ ]] 391  O =ÿèá¦736733#"''32765#'667#K0R  ?.}R3 L094+;ÿæð—73#3#"''3267#'667#D¬fX F1—[!B(13M3ÿóë¡733#3#535#53&'ƒBBT¸P>>:  ¡3UU" 7ÿóð©73533#3#535#33#3#535#53FBEEO¯LBBDDT¹QBB•9!!8ÿðó %73#67&'7&''67#3533#3#535#C¤X'* :@4BAAU»RB    W  9ÿèäª "(73#"''325'#5##53#'3'>&'Ñ   71lG  ª¦  ›€nm z`E'#  $% 3ÿñó¦#73#3#3#535#535#735#33535#335K?FFWÀWCC?++=-j++=-¦f<B6ÿéôª '73#735#35#33##"''3255#53567#Eššssss›$UU  TToªO0 +,  2ÿéñ±#)73673##"''3255#735#35#'67&'I1P> Cppppt› a7  2:=0 %9ÿëê¢ !'-73#"''3265'3#735#35#35#73#'67&'Ö  UU000000UQ 7 ¢œ “‚[98Lk     ,ÿçó®#4B7&'73#353#'67#53365#53673'67#'63&''65Q2 ! # (   #- :5 &  ) 2®  3 .?+!=, 4 $ 4*%-2ÿéô®%)-1673#3#3&''27&''67#5367#35#35#35#67#<®XJ]d" ,%%; , 3D jjjjjj> Q®X     X$ " ! G -ÿêò­ &973533##"''3255#'3#3#735#&'27677'67&'–4  4]ZZPP++\  R  0;  ‡&&q  l-D 4  2ÿéòª %,6>B73#735#35#333#"''67&''667#73&'##5##535#J””pppp7 8F   (V +nnnª;#         11 6ÿéõ¯-28>BF733#"''3255##5373#&''67&''667''6'&'3#735#_&   9&U2       F B  (( ¯=p  Zvˆ=3#  ) $)   EF&<ÿéë³8<@DHN733533##5##5#533#3#"''3255#&''275##535#735#33535#335#7&'i....--‹;M   )39L=**=(e**=(³ F : %  @Q * & 9 :ÿéó² &7;?KOSW[736533#&''67#'3#735#35#7&'#"''3255##55#35#53#5##575#'#3355#•!'  UKK....  <   8H88- 6H64444H6”  "-*  %, 8 _FF %  ÿçôÏ!73533#3#67&'7&''67#535#XVVks3; JJ ,\hX¬##33%, .3 ÿñôÑ'+/37&'3#&'#'67#537#'6767&'3#3#3#¦}C/816 +>M ), Khh„„»»Â   )&" k ÿèõÐ&,28767&'7&''6373#&'#'67#'6'67'6i.1 GO'?R zA"" )),: .Aˆ (@ B> 4S UN >s xÐ  / &"   - ÿéîÏ167'23#5##536'&''&'3&''67&'#367Ø Nq]M )°—?  -  ”"3 6(,: 9$)Ï ..N     ÿèóÏ/4735#5673#35335#535#53#3&''67&'#367(NW#66DA222FUM'#4=,-; 6')#I[  ``f   ÿéñÏ>CGKPbg733533673#3#3#3#27#5'75#535#535#53'#53&'7337#35#35#675#73&''67&'#367_*<6ZMMgv%,ePP\45' 8E'00000P`      Ï     ?I      [ ) + .  )ÿìØ¼ 7#5##535#؈ˆˆ¼ÐЧ”ÿêçÐ 73#"''3267#'6#5##535#K š ’ )cFFFБ1%v$3`f?-ÿèäÅ 73#735#3#"''3267#'67#537™™qq&b  PK BHMÅO)D G%.E5 ÿëïÏ73673#3#5##5'67#35#Oy€ r 9GErr¥re%,‚:U.È73#735#UssKK_9!ÿéäÆ73#"''3255#3###535#!à  ¯‚cPPÆÁ§M];) ÿéõÆ!&+/733##3#5##5'67#5367#5367#3353535#´""t ‹x &*5OTEYJOWqxxÆ,-Y D !  , ~&QÿèæI 7#5##535#æmmmI`a=+ ÿçôÊ %73#735#'333#&''67#53565#335I‰‰aa>¤\DM [ QX\PdAÊI#G2%  90$ÿéòÆ73#735#35#5333#'67&'V€€YYXª““"àI - )p#")ÆF"zn[1 aÿìõÏ,73533533##5##5#333267##"&5467#a((t? +5R­!!""(2  ,ÿéçÆ-73#735##"''32655#&''67##53672  xx¡  K! % A\ÆN(R_ G !ex  Bÿë¢Ï73673&''67&'67#67#T'   ¡C/   "$@&*#FõÐ#-7333#"''67&''667#73&'#E2 '"%S%&"  $  'S"Ð $     *.QÿöñÎ,0767'67'67676767'67'67673#’$  R$  ¡C$ (4/C$ (4-w‹óÉ73533#&''655#Œ%**  &%š// * *$4 )ÿèó¥%)73#3#67&'#67'5##5##535#KŠŠ"ÁP    N% %°mmm¥ *(  1BM M0:ÿéó£#'+735333##3#5##535#535#535#3353535#D<GGL{@<+>ÿé´Å $7'6553'#3###5##53533255j Y55  ƒO)"ONB00P jUgB 9Lÿè÷Ð ,287&''6'3#3#"''32767#'655#53&'&'&'Á  8/)   "WÐ%!%$0%g  =K. 0F-f.XLèÏ 73#"''3267#'67#'67#'6_    0 )% Ï N75$ -%  P±V73#735#Paa;;VG%AõÏ+07&'73#'65535#73#&''67&''667E!L88mC  #   ¹  J &.9(D"  Kÿé£Ð73#&'#5'67#535'6˜    #Ð+ id"0% ÿézÏ7'6553&'73'#3#5##535#+  )#99###d#67h L:()adB1JÿöªÏ%73#3#3#67'753675#535#'6g/ 1% ##  Ï &'VQY& MÿêŒÏ73533#7#"''3255'675#O   ¡..1 E  8:Pÿë—Î73533#67##'32655'75#T Ÿ//1? . < pòÏ73&'735#53533#3673# 7 __^^6å‚ '' ZÿéóÐ&733533#3#53'67&'3353#5#o55A™4   Q^r¾6HP".@cc AÿçòÐ#+177333###5#535#535#5335#35#3#'3'667'67&'˜5500==//""""(s    B  Ð'&uu';1ih0( #&#   ÿéóÐ3;?73673#3#3#3673#53&'735#535#535#53&'#5##535#S87\QQ^^8æ8__QQ\1–‡‡‡Ð      šD D( ÿéóÏ'+3773533#3#535#'3533#3#535##5##535#'#5##535#ƒ-//*h*-v-//*h*-Þ888*888®!!##!!##Occ?,cc?, ÿçæw !73'6573#'3#''67&'7&';1 )™Pe  Q  ]  w;4!';Œˆr"   Yÿð¨Ï '73#53635#35#3673267#"&5s"K''''  Ï \\ 2:1  ,ëÐ"&73#"''3265#'6'3#735###535#‚]   T ]BB3!!Ðj&Q zVC P2!ÿéëÇ %73#735#3#735#73#735#'3353#5#5335˜˜ss2TT..pTT--4D®EÇ=<== k&E 8&ÿëòÏ%)-1573533#3#67&'#67'5#535#3#735#73#735#`^^fi #W"-!* g` CCkBB»T  I@  NT54ÿéê‹"73533#3#535#'6#5##535#I'??\Ög2 ’zzz‹  AH H-QæÉ 73#735#3#735#73#735#6““kk0WW11aXX33É7076ÿëÐ#'73533#3#535##5##53##5##535#.11+g).pLBBP666¿-)+"T T6$ÿéƒÉ $(,73#735##"''3255##5##5##535#35#35#ff@@Z   É><}  .11??H’9'''''OÿèóÏ,0473353353#3#535#3533#67'7&''675#75##5#c!"6D˜A4799 @C%#7o&%È#**!2;>   SÿèñÏ>DJ73533#3#5##535#'67'6776767'7&'#"''32657&'''6_<>>?j=tTTTTTpI  %'' 0)Ìff- **       QÿéðÆ'-39?73#3#3#535335#3#"''3267#733&''&'''67&'^Ž=11A”>u  x j%7  .Æ''5g:$: $  Kÿô®Ï)73533#3#535#3#735#76767'7&'P%&&R %OO))   )3»2;4  CÿèñÈ @DH7'6553'#33#3#"''3255#63&'7&''675##535#535'235#335rŠee 0..5   # !%700-6#1—0D4 4>]1" , ? +@P , 7HÿéöÏ(JPTX^b737533#67'6773673267#"&533#"''255##5#'655'6367#35#33535#735Z %-R    )>' *( %52$$7*b%$7*¿2> E    [  '  #.Dÿï¤Ð%+73533533#3#535#35#35#35#'67&'O  V   2 ¬$$##^^9:*   PÿíóÉ%5;A73#3#3#535#535#3535#5##3&'#33267#"&57&'''6\Ž,%%0•.%%+>%%%%   ^  h  É78`%$$; 1 6 " Gÿë¢Ì $*73&'73#3##"''3255#735#&'''6O!RC  !!*  )  ²  EG  D#=Iÿè«Å#'7367#533#67#5'275#35#35#75#O,0F Ÿ  s"|JM Có{ 735#53#3# iVÀViæU ÿéóÈ ,48@D73#735#'3#735#3673&'73#&'#'67##5##535#7#5##535#SS,,€QQ--S. !L<G 2( ;DZ)))§,,,È>>A    % -M M2 M M2 ÿïôÅ#'+/37#53#3#3#535#53'3#735#73#735#3#735#73#735#vcÚcjjfàfiiSDD eDD ‹DD jDD ³NRRA55O55NÿïöÏ ,9F73#&'#'673#&'#'63#3#535#&''67&''6p*   S.  S?H¨M> d Ï  '   1dd   &  Hÿè£Ï /73#53635#35#3#3#"''3265#'665#53't$N ****.+   !Ï NN +-% 2 " ! KÿéðÏ/HLP733#3'67#37#53#3#&''67#'655333667#"&55'7533#735#•;;F o5-t6>7'+' " 0<9/ ) %``??Ï   H  /7R     () Hÿó™Ð73533#353#67'5#5335#H!    !®""XCT+ 5TCXKÿê¤Ð)/5;73&'73#3#3##"''32655#535#53&'#367#&'''6T     !##,  ¸  ? :+V    V…ðÐ 7#5##53'7'67&'ðt?"  @½        íÈ %+73#735#3353353#7&'''6'67&'ƒff   )' ,   C ÈH&&&&&=ql      >ÿê—Î$*073533#3##"''3255#'667#535#'67&'H   !L ³s  nA6 1;9$ OÿèòÏ8<@DHO73533#3#5##535#3#3#"''675'67#53#&'35#33535#335#7&']=>>CsC=p **ER h  P*C*!<à  "# …  * AAK %  NÿëºÎ%FKQW77&'7''563#"''3265#'67#&'#3#67'675#535#5'63&''6'&'u   4      !!+5$$!2 #.Î+  D; &! 4   !#  ;   ÿêìÐ#)/hlp7#5##535#535#53533#3#535#35#&'''63533533#3#3#67&'#67'5'67#535#535#5#35#ì²`LL]]^^MM::N::S%$#% ( $01455--Cb O   /G9''1x444…%%&& 0      *    nÎw$73'67#'6673#35#535#53#†9 &   8*Zw  #  AGÿê£Ï'-3973#3#3##"''3255#535#53&'#53&'367#&'''6w       $  ( Ï (F  AHY   BÿèžÏ"733#3#53533367'67#''6uN  & "  Ï885+/4ÿéìl!73533#3#535#'6#5##535#=,HHbØb6 ………k 789! ÿéõ”!%)-EK7#37#533#67#5'75#'65535#35#75#73#&''67&''667#î¿A9NA5$$$$$$[5      ”$  > H 3( (0HR ( * h!      #  LÿèôÏLPTX\bh73#&''67&''667#'3533#3#3#3#"''3265#'67#535#535#3#735#35#35#'67&'º0        m"## ,- ! $"‚‚]]]]]] # F Ï            WT<       SÿêòÏ59=AEI]aek73533533##5##5#3#3#"''3255#''75##535#735#33535#335'#3533#&''275#735#335&'#6U%+((+%{5E  "(&2C6&&6%[&&6%K:: :J$#:));)Ç 4(  -; .))  % LÿçöÏ0Ufj€73533533##5##5#3533#3#&'7#'7#535#73533327#"&5#&''67&'77#3533#7'75#3#3#67&'7&''67#N*.%%.*    "Q     N"*$£` # 29 +Æ       1;     %    "    DÿéöÏ!&*.26SY_ek73533533##5##5#33#5'667#35#33535#33573#&'#5'67#535'6'67&''&''4'O()**)(#H    %  W       %s M¾  S=  "5['NM&y =ÿì‰È 73#735#35#35#'67&'I88   *  È¡p O P!9  OÿéòÐ/Ycgt733#3#3##5#535#535#5373#"''3265#'67#33#3#&''67#&''67#535333#5#53335&''67&''6o 6I   <>>>4B7.%;ž     7 6˲+/373733#5367#3353#3#3##5#'7#535#735#35#F$:•&05ay&3311?K@TT/(¥  %&   = , Ò®9?E73673673#3#&'#32767#"&5535#5'67#5367#&'#'&';5 FT& A  +' B; !./b!       #      *T 1 ̰!-73533#3#535#3##5'67#735#&'76?777B—A7|C  "VVb   ¦   %,2$     6É« #73#735#3#735#35#35#'67&'KjjFF\\\\\\  A«) !W=  2Ï­!)-151073533#3#''67#535#7&'7#3#53535#35#35#C322?# *2 *>3&5 % ^ %$¢     / ,,,1 Ϊ#73#3#3#535#535#735#35#3#735#Cy2DD<‹ #§7 7    0а#'-373533#3#535#735#3353#735#35#35#'67&'@666F F6$$8$mXXXXXX F¨#  2J5  4Ê­ 5:73#735#3353353533#3#3#3##5#535#53&'#535#7#;ˆˆ(k0//=!5AAAA5  ?0G)­.,     &1Í« &*773#735#3353353#3#7'5'67#735#&'76>„„%}šš €K  XXa - «+$)      - б$AEIMQW]ciouŒ73'73#6777&'74''67'67276767&'7''67'673#3#3#735#&''&'7&'''6'&'''63533#&'#5'67#e5       _     L----)) T _ c   L   DCC$ ($7¢                             "  IðÄ73&''67&'#367*¦$$6<+*7 5&+#Ä#   #GæÆ !73#&'67&'6'&'6ÇÇeM o  Æ    RîÏ73#73&''67&'767#'3#O%g    PTÏ}w)    oLžÐ7''67'6767767&'Œ  M -#:7@$ ÿðôÎ+73533#3#535#&'''63533#3#535#&QVVdÛcQ‰"O !'OQQjçiO´4  "  CóÎ"3767'7&''667&'7&''6'67&'7''6f ') >GT  &+T %*Î   "  ""   ÿëõb"73533#67'675#73533#3#535#)))1<)t)**1v1)F( ,33>õÏG73533#7#"''32655'675#733327#"&'5#&''67&'767#53%    #%}+     ¯  2A/     ^ÿéóÏ '73&'73#&''67&'763#5#533^C>•b    o\© n 9çÐ#<7'6733#"&55#'665#5'66767#53&''67&'K$ "’ %   *  ,AXr$)  Ð !  ! K=     SBîÏ73##5#'66556Ù )8l#5  AÏFF "'"LÿêðÏ67#'66553&'767#533'67##"''3255#53&'ðy ? Md"   .5¹L?0 -!W  ?  C  ? ÿîñÌ4B735#535'273#3#3#535#73673267#"&5'353#5'675#Xff#)WX %-ddWWfâhX€  ! ‡66'ccl     ) J T¼ 7#5##535#35#¼° ¸G58 BöÏ,73533#&'#5'67#73533#&'#5'67#-&&  %p)0&  °CC %)(JK() ÿðöÏ#'+;73533533#3#&'#'67#535#35#35#35#3533#3#535#)_**3;% .A1 +:1);______ 000XÀT0¾T # T14A ÿèñÏ!1L73533#3#535#3533#7'675#73533#3#535#3#3267#"&55#'67#%QSSbÔ^Q #((+-3#q&''-n.&yàM   ( ) D< A 5 0  &- !=èÉ)7#67'7&''535357##53#"''325€K  ) 777i.S ÉQ&  ƒ zŒ\ Pÿòòi73#3#3#535335#[“@99D¢ @i#??T.îx 7'6'&'&'''6Ñ& !Œ ! !!w5# "2$%03x       Pÿêñz73#3#"''32767#'67#53&'ª>]R D $ ,&Cz  8 )< 8ñÊ?73#67&'7&''735#35#73#3#3267#"&55'67#'7365#XE!2222Rl(/$   " $ 1ÊT' f0/* $#!]ÿïõÏ%+;73673#3#&'#'67#5367#7'6'&'3533#3#535#l/69J# %!,+g  N  %&&9…:%š  # @     ŒI=ôÐ#(.47&'#3##"''3255#535#5'63&''67&'–#, "CC   BB+ 2> dÐ     B    YÿéôÆI7#5##53#67&'#"''32655'67&'''67&'767&''67#ím\#     ' .    (!Æ0 2(  02  "&       ÿïñ¢'+/?73533533#3#3#&'#'67#535#535#35#35#3533#3#535#/%2%%((>>( 2")3 +9=%%%72222,,,]ÅV,•  #/?K<òÊ73#735#35#53#3#3#535#^‡‡bbAF¢JFFK§JAÊ1KRÿéòÏ#06<B73533533#3#&'#'67#535#35#3#"''3257&'''67&'`!&#   "#0!!  A P P  µ" %$"""H[ =$ SÿðôÐ !%73#'63#735#3#53535#35#35#wku kkEEd¡%%Ð >@AAA/////(ÿïð573533#3#535#6JNN\ÈXJ#4òÏ#'+?73533#3#3##5#535#535#35#33535#33573##5#'6556244--2233--2.H.x )G.à  B  B & " P QQ,# #>3ÿòò¤,<73533#&'#5'67#'3533#&'#5'67#3533#3#535#”$     W    CFFW¾TC’  '*  .1P ÿïô§ 073#3#&'#'67#5367#735#35#3533#3#535#+ª]/ 'D ' -D6ƒƒƒƒ455V½S4§L   -* TJLõÊ%+17&'73&'##'32765#'67#&''6'6f ,U    / ,2 >    Ê    6MA    *WÈ7#"''3254'7##5W È)  )ž )\Ï 73&'#''60  Ï  s~UÿéõÏ5:>B73533533##5##5#3533673#3#5##5'67#535#67#35#35#X 3##3 +* +D ZR :<+E ! RRRR½   ] N  G1zÿüÈ` 7##535#35#È<****`W d#4=ŒÐ#'+/37335#535#535#53533#3#3#353#735#33535#33555--22//**66i-D-[< <[ ;ÿë¥Ï 173#53635#35#3&'73#3#"''3267#'667#r$Q ----# 41   ! Ï OO +-7  2   4~Ð6767#"''3265'67&''67''67&'767&''6`    # (#!  (Ð            5ñÍ37INTZ733#"&55#'665'6553'#33533533#3#535#35##53&''67&67#&'''6Ù  jgBB> [ D _     .F   Í  # 0534."       2î«"&*G73#3#3#3##5'673&'5#5#35#''67'67'676767676¹*0(())3i  !$$$$$/?!   «    A %   -     :òÏ!&*06CHL733#3#5##5373&''67'&'#3673#&'''67'#5'6&'35#D**7U0NV    ¡==C @  0 W %> 66Ï !2#        õÊ "&*0AEI7#'65536533#&''67#'3#735#35#7&'#"''3255##55#35ðÀ%  `VV5555  7   >O>>Ê>4' (0H:1-#,33  .; K lÐ&73'67#'6673#35#535#53#‹7 '    :*\  #    B LÿéïÍ #'+/3AH73#735#35#3#3#5##5##535#3#73#3#73#3#3#''67#&'#6[††````’@G43F@##G##W33W33T‡‡£ 8@ +~.$Í=% (++(        yîÏ#'-373533#3#535#735#3353#735#35#35#'67&'***2u0**See?????? 5 Ç) 9X> " !      DÊ73533#67'75#  “77L  V ?ÿêóÈ !'+17=CIY7#'6553#3#3#535#535#735#&'735'6'67&''&''&'3533#3#535#òv244:ƒ7332  .   I  s !877>”D8ÈSE5 6?_8       U         OÿéôÍ#GKOSfjo73#3#5##5##535#3#73#3#73#3533533##3#3##5#535#535#5#5#35#3357#"''255#'65535#35#Z>K95G=))G--V88V::`%% :  \   Í %//' " '  ' / ;n //#4ÿöíÏ73533#3#535#accZÈYa‰FFnn ÿòóÉ73#3#535#535'2Ø )1jj^Î\hh(-_É@RR> ÿçãr 7#'6553#5#3#35#Ï—¿AA—BB,,22XE ?ÿëåK7367327667##"&5??5 8E'=$K  # ÿêòp7#5##533267#"&5'3'66ë¯z'5!.-p./"F  L+,  "ÿðîm73#535##53#5+3'&'7'6¦HÚE.Î.((X    X0.X: ÿïï}#7#5#3#3#535#535##53535#5##3ì9//OÝL./8\///-}1==!3|)((ÿïí„'7#5##53#3#3#535#535#3535#5##3ì²¥/88KÛI88/B!88!88„2 !3 33R"!! ÿéó’-59?73'67#3#3#535#3#3##"''3255#535##5##535#&' à ̧C]Í^Ræ%   EE®`((([  ’   #   D C)  ÿëîÆ37'667#533#"''32767#7#3&''67&'767O +)¶. 3aN # #  fK-JLIaJI!%  #  ÿêõÐ!+73&&''67&''6767#73&'#>= >; ;>$ $  /b% ÐB%"(3*.BH\ ÿé÷Ñ973&''67&''667#3533#3#3##5#535#535#\l (/ =0+? 4& + ^2RRRMM^^^^MMRÑ     NÿéòÎ%7&''67&'7673&''6767p  k+(: >+(8 5 )-"  &@## ~$#3ÿéòÒ5:767&'7&''6&'''63&''67&''667h25 # KT+Y(" (> , 0k %6A,,: 5'2Ò  #     ÿèôÏ3873533#3#535#&'''673&''67&''667'OUUfÞdO( &J ( (. g!:?.+: 3& 3º*   ÿéñÈ%)-1673#3#3&''67&''67#5367#35#35#35#67#×fVhh+)B+,; 2$ '(>Y'‡‡‡‡‡‡FWÈg   g** *Q  ÿçòÓ &BFJNS733#5#&#'67##5'6367##53#3&''67&''6'35#35#35#67Z] 8G5 " >- g [ ,³qo  +?/0:%$ "Ó %  ‚RR   K  /  ÿéóÈ (:>DJbi73#3#5367#5#5#35'33#7'753773#3267#"&5735#'67&''3&''67&''667#ÝdBf~!!!![J  v<, g' )k- *:\'4A/)5 ," +SÈ VV"  @@=C3   !D          ÿáòÐ#3DHNTkq73#3#5367#53&'7365#5#35'33#7'753773#3267#"&5735#'67&''3&''67&''667#¢ Ai?d;3XL q7'  j# %m) '1 D 28*'6 -  /  ;Ð TT  @  @74A6    F          ÿèÍu73'67#&''6c j'‡ }!d   ;u  B3   ÿéñœ ")/7#5'673&''67&''667#7&'C  &NR!! &  !0D   œ{X /4C    %@0/  ÿæëÏ".26:>DJ733#5##53''67#&''635#53#3#735#33535#335'67&'fd&.b²`"* a3L 2 GC™BE 44H2z44H2[,)\* )Ï  ((  m  D) %      ÿçôÏ73533#3#&''67#535# SZZe\ DI"T S\`S¦)))BK:&%4- ÿéóÏ!735333#&'#'67#53655#335$JQ\G MM ET[J^?¦))I7G;&", "" 6 ÿçôÏ#73#&''67#5353533655#335Ô^F J8* N`II45I:¨N6E2!,N''N22;ÿéÏu73653#"''32765#'67#.AL  :F >=V O.H7 ÿçöÏ%73533#3#&''67#53655#'6@0PP`]H NN MX`9 Ç,, 5 55""- " ÿéáw 73533##5# WVVWC44GGÿéñÏ#7366533#'67#7&'&''vW^U Lm: ‰$@S&FH;*ƒZ2ÿéäj733##"''32655#53&'š66  ~~N  j: 6 ÿçÊb 73#'3'6573#¶0 '>byy./"*n)ÿïæ7#3#5&''67&'76Öšª½•  %  k    ÿé÷Ð")/7333#&''67#535367#'636565#335\W 2WD H\ R]a P -68L7Ð C& 41#C k% 0-ÿëó‘!%)7#3267#"&55##535335#33535#335ÎF % 1%3GG33G2y33G2w_  n'9ÿèÞ„'7675653'67'56##53#"''325u #$I 4  +{.V „ 5$9 QwŠR ÿéõÑ97373#3#3#&'#3533#3##5#535#5'67#537#537#!O]ack…* "T 777OOPP: -> 6?J½!''  ÿæôÏ(873533#3#535#'333#&''67#5367#73533#3#535#H?DDS¶P?1mb[B I M AYjg.CEEV»RCÄ   x '" L   ÿïñ’73533#3#535#3533#3#535#;:<<`Î\:NQQjàdN~A ÿçõÏ'A73673#3#3#&'#'67#5367#5367#3#3#&''67#5365#[Z`_h‚1# *J* 2D=GU/l,VZ4&).; AMS-¿ $ Y    SçÏ $73#5'677'673'67#&'&'P !7EJ A8 `  Ï|%   % <- 7ÿèð“"7#3#3#3#67&'7''67#535Ѐxxxx  58 IR8-“     aGïÏ$73353#5#'67#535#73533#3#535#   @4P755/p.7Ì"‡0  ##//=ãÑ 67'2'6'&''&'&'#'677'67676767&'Ù Or_O8 7 ‹NN "/3E$Ñ      0     "#ÿèÚ|"&*7#"''3255#'65535#35#'##55#35Ú  97777'33 |w  ")>(=Cl{.ÿè׊%)-7#"''3255#'66553533#3#535#3#735#×  ƒ &#''2r.#[[;;ŠŠ  t;0& $D   (1'ÿèØs$(,7#"''3255#'65535#35#'#5##535#35#Ø  75555#"""""so   !'9%9 >>>J11   ••u$@.3330 ¡      8    @  ÿèàŒ'-3973353#35#53353#5##535#3#5#'65'&'&''6S+h**i+ %  % ˆ"!1 1!&¤42B B2 &72     # ÿçñÏ$(,8<@73533#537#53#3#&''655#35#35#'3#3#537#35#35#ehh!T!D4 D I ]eŸ####šT#G####½?GK%@7%/D?I +LKK, + ÿéÛ "&*26:>B73&'73#3#3#3#5'65#5#35#5##535#33535#35#S$.777`’@@T>’@@T>>     1   HH # Kì… 73#735#33533573#735#335335gg hh  …::wóÉ 73#&''67&'67#53667#¤C  " $ ! É 2     c( hìÍ73353353#3#535#!@>Rc×`TÁ((/RòÑ &7'67#73533##"''32655#&'. ) /^## ^# ‘  Si; 6   ÿèôf9@73673#&''67&'7#67#'3&''67&'67#53667# ?  "  s3    " $ N      7&      A )ÿ#73#3&''67&'67#5367#67#:`*2 % "0 $‡       Q cÿèôÈ"73#735#333#5367#'67&'”NN--4a ‘b^% HÈF&F< ÿûÖ›733#&'#5'67#53¤   ›IO!)HñÇ0573#67#5'675#35#35#675#73&''67&'#367t&- $/////V`   ÇEQ-1 G.   "FJïÏ%).7533'67#3&''67&'#'65535#67›?*+   & && ¾    ! %#&& IâË!'-7#5##5##5##53'667'3'667&''&'à//Œ2 i1 ƒ [  ËZHI[ZHI[5 5 &  jÿéñÐ !%)-73#5##53&'#5##5##535335#33535#335­9a7R!!44!!4!U!!4!Ð .. Km// o*B`ÿçôÏ%+CJ73673#3#&'#'67#5367#7'6'&'373#&''67'67#67#j1;>L# ',k  O  #B  ( $@  £    :    €      [ÿçòÏ.2673353353#3#535##67'7&''675##535335#335o0>;1w5 :=""211#È#**!36;   H *OÿêµÏ  73353353#3#67'5#'655_  HHH= ½-??-> D  A '$ #Kÿé§Å ,73#735#33535#3353533#"''3267#'67#^II ) <$    $Åa8?@D 7 % 0YÿìôÉ!'-=CI7#3#53#3#'67#535#'6&'&''33267#"&57&'''6ëss†0=!*/ #  $,5    [  `Ég‹   0  -  1 4  M…Ê$7#3#3#&''67#537#'67#3#5…1,      XjÊ    [}4ÿçìJ73#&''67&'67#53667#{b"  "C 2 *5$3J      0  CôÏ59=A73533#3#&''67#535#73#3267#"&55#'67#735#35#35#"""(*   "$'"ck    EEEEEE¼   Z   !  A ! # xÿõÇl7#"''3255#'65535#35#Ç  !   l` ++-{ÿûÖg73533#&'#5'67#{%$$   U  /4  ;õÍ #)/573#3#537#35#35#35#''6'6'6&'''6f‹93u-=OOOOOO;% "#) %!!+ '‡ $ Í VV "  W       Qÿè¯Ï 073#53635#35#3&'73#3#"''3267#'67#| H$$$$""4+   Ï NN *-6   3! 8=ÿéöÏ+05;733#326767#"&55#'67#5367#'6367#335&'o%  -! - * $   "Ï  H; A5!*H  ^(E[ÿèôÓ#H73#3#3#"''3267#53635353#67&'7'5'67#53&'<^vvs   r KKK!C6  -   %2:Ó=   l  L    .      YÿîòÏ8<@DH73533533##5##5#3#3#3#3#535#535#535#535'235#33535#335^!(%%(!~3>>5566A™E8877AA4;&$$7"Y$$7"Á   E    E  K ' UÿêõÐ"&<Y7'6553&'73#3533#&'#5'6773533#&'#5'67#676767'7&''67'67x<PPb>$- "+ (#Ï       ]   \ ,    YÿéðÏ (,04EY]73353353#3&'73#3#3#3#5'67#35#5##"''3255##5'673&'7&'#735#f'#ƒ57////8€ 7&&&&&q  g%  (  ?Ê!  .    > +CR/   ÿèñÉ4733#"''3267#7#'67#33##"''3255#53567#&ž 5  7 C :7 .+`dd  iiGÉ+:"+B($6>. +ÿèïŽ733##"''3255#53567#2™#dd  ccxŽ : 6€áÑ 7'2'6'&''&'× Np]OC  +  Ñ      `îÏ73533#3#5##535#eddb±ce¹22 ÿèðÑ;737#535#53533#3673#33##"''3255#53567#'7#-4!rT@@::$ 2JN#[[ \\J'-1l  ) %  ÿéów733##"''3255#53567#7 hh    kkow. * /ÿéó‘5Q733##"''3255#53567#33##"''3255#5357#'37#"''3255'7567#R|GN UUXCV''  ..;^P   &) 4‘ ?   SíÑG73#67677'7&''67'67#67677&'7''67'67#53&'736ª ;+  $/ %-Y  $/ %-/9 < Ñ              ÿæóf %7#'6553567#533##"''3255#óÄPa†XX Pf*& %-H   GôÐ#'+JO73367353#3673#3#5'67#35#35#73'73#3#3##5#535#53&'#37#7 EHZ 3366X(+/**++/ +$Ç   $#D ) 6 _    Bð° 3873#3#53635#35#73#3#3##5#535#53&'#53&'367#>(FJ[5599* $2++**/-°' &X" > L    + ÿéèq73##"''3255#Ï[    `qZ  WÿéñŽ73533##"''32655#&'‘<< ‘;  n W R  ÿéô™73533#&'#5'67#^`S%9 ;%"9 : Pr''59jg5! 3ÿëï“ 7&'3#'67&'… ]ÛÛG%&-l)(“  ' 2#%#) +"ÿéò73#&''67#535'2 !'mbMJR S ac"L!*.-&ÿêò•&7''6767&''3#3#"''3267#735#Õ 00!%% ˜I:=  = 96:!) @T W1 _:8;ÿèí‹!73#3##"''32655#'67&'6““$Ûb e4 ‹E @ # 0ÿéÖ’ 7#3#5##535#35#Ç„“€rr€€’@Q ©.x!'ÿéÙ 7#5##535335#33535#35#ÙŠNN::N<Š::N<<}” ” 9&&&a(((ÿèðž373'667#&''67#3267#"&553#"''326@3(1,&#    œ3'& [   ž 8B 5'    'f " }= ÿñëƒ73#3#3#535#535#&'3–AKKcÕ^GGAwƒ%44%?  ÿéñš$73656533#'67#7&'&''r S]P ?e9 ˆ% C<17*i    >'ÿéð—%73533#3#3#&''67#53655#535#)MKKHHb^G G!I FXbIIM…  ("  ÿìï 17&'3673#6732767#"&5'675#'67#¦ {AxU( + A 9<  >*  LI/(?*ÿêÙŸ 73533##5#735#3355##5#*MNNM;;O;;;ƒi00>C(ÿèØ73#735##5##535#:ŠŠbbŠˆˆˆCASS2ÿéî•!%)-733##3#5##5'67#5367#5367#3353535#/¢tv !(AE/BPTZkvv•#" C 0   $\ÿéó¢ %73#53&'&'73#3##5#535#536…SÃX` Dh]]^^gˆ¢  )   $$ÿéï #'73533#3#3#3#5##535#535#535#35#/GGGMMeeHKddLLG“ J K|6PÉ› 73#735#35#6““kkkk›K- ) +ÿéÖŸ"(733#"''3255##5335#35#7&'7'6uM  ƒJ6ƒƒƒƒ  ‚ Ÿ*s  0Œ'<^  ÿèð“373#67&'#"''32655'67&''67&''67#.¤H  $% /A F0,6 9)#" -%>“   +0 #% !  ÿéí“#'7#'66553#3#67&'#67''3#X £¤O   D  zz:.# %G6   ;8 {ÿèõ›#473533533#3#5##535#35#3'66733267#"&5(-...!p!-A../?<&   ) ˆL::L1-+!$   ÿæòœ73#3#535635#&'''6·2@‡/Få3F2EES" !"@*'œ %Z`%=   [ÿéß73#3#5##537#35#35#[„7=[.8[[[[DJ ÿéñ  -7'2'6'&''&'3533#&'#5'67#À ñ¤%+7&'3673267#"&''67''67&'v5',7 , 7  ! °  ¤  -'+ +    ÿèô™!A733#3&''67&'767#53'3#3#3276767#"&55#'665#›330     CqKKe %  G3™     *M  R/+ ')ô¦'+/73533533#3#3#&'#'67#535#535#35#35#-%2&&D. !!W& (C%92222›  !0 ÿéì—873353#5#'67#535#73#3#"''3255#&''67##537#7-Oƒ66  $  5;‡$4®B-"<d  O  !k|ÿèô˜273353#5#'65#535#73533#3#&'#5'67#535#"  =-P011:-  &50‰.¯F '$"(ML#  ÿéìŸ 057#5'673#535#535##5##53&''67&'#367B  %/pn\UU^‰|m "* *%  Ÿ†j '$D  >        ÿèó¢'+/5;73533533#3#3#&'#'67#535#535#35#35#&'&'+&4++11F9 '%=0 (5A**&94444)$''DAAC“  2*   ÿéì™ %7<73#535#535#'&'&'#5##5'673&''67&'#367eljXQQZ,  Õv=j !)(#   ™D        "      ÿèðª$*GKOSW736732767#"''677&''67&'3##"''3255##5#53535335#33535#35#F:(*))83* 1¨    PQ==Q<==Q<<¢) !  4    :9  9  ) ÿçñ¬#)/7373#33#53537#35#35#35#35#'67&'+MHKG$Û<Itttttttt( %`$%$#  ee & # # #       ÿèø›=C767'7&''5'665567&'67'7''5'66556&'m     0…      3P  ›y ƒ!3+ )3, Z3:_| ˆ!3+ &4, $&ÿçö¨.26:73533533##5##5#3#3267#"&55#'667#735#35#35#0%4$$4%§. & 1 (",)+€€€€€€ž  h   K *,VÿçêŸ *73#535#535##5##53&''67&'767#gijYRRXƒo_  %$  HŸD  @!"     ÿèò¦)-1573533533#3#3#&'#'677#5367#535#35#35#35#,(0++%AaUBLM ;K[I$(:00#yyyyœ I '# I+ (  ÿêò¦ ,0AGM7&'73'67'3'67#&'&''63##53##"''325''67&'¿M?, .G A$    ,PPT¾W   # % s! !k F   4(  '%'     ÿåòª159=AEIP7#535#5#53535333##3#3#&''67&'67#53'35#33535#33535#33567#`=RIIKKTg„3 !%+%&L 2" 8I77K9„77K9@@TBC H5''    b! 8 F  ÿéò¥/37;A73#33#&'#"''3267#'67#5'67#535367#35#35#35#3&'#/ NQ .   5 A 4 # $38<yyyyyye H¥L   "   L# $ # %ÿèñ™ !);@73#535#535#3353#5#'665#535##5##5#53&''67&67#ljiWOOXQ  5,Ñg _ "((  + ™D  "1¯G   (     ÿèé $,073'73#'3353#5#'67#535#73#3##53#=#j1  8K 9-Ukkjj rN‰ #1¬D4 (E CB  ÿèéš%)1573353#5#'67#535#73#33#537#537#35##5##535# 6+Oh42†!$*$DBBB„1±G6 *?'97C C( ÿæóš&,28>D7367'675#53#5&''675'675#&'7&''67'67'6+L >Q/, 0:/9 +.!#":n $7 ;9 .F HJ 4b eš:  H           9     *  ÿéð§ -15973##7#53737337#37#33#&'7#'67#735#35#35#Ñ"$ž!#10H00G33‹¥ $%D , $(§  Y   @ # # ÿéò¢"*.26G7&''333267#"&5''67&'3#53535#3353353##"''3255#z #  )$ ¢ ã##5"%¢¸P U¢        &"""0   ÿéõ¨'+/DJP73533533#3#3#&'#'67#535#535#35#35#3533##"''3255#'67&',#<##!!>A, 3 3/ (:=""#6<<<<111  1  ] œ    !   ) :& #     ÿêô *.26:>B73673#&'#5##5'67#53&'735'635&'35#35#35#35#È K 3J*( € 0&L. CUA5^#G55G99G55G99    MN  Z  , ÿäí¢%-59>DJPV7'6553&'7'67333#"''3265'3'673&'73737&'''67&''4': UH      V& 59& $mt‚ g  Y  #.+  !4 Q     #   ÿëæ¡*06<B73#35#535#53#3#"''3265#'67#56&''&'''67&'m !77ƒ::DJ7373#67&'##"''3255#5'67&'767#3&'#35#35#'67&',< R6   @   B   ,'X !pppp x ”  8  8   + ( !   ÿéé¥#'+D73&'73#3#3#3#5'65#5#5#3353#"''3255##5##77GGMMMMW¿ UBDDDDN)P  )O(¤    4    (  .ÿèô¥ 3773#735#3353353#'67#53#67&'67'535#-¤¤0©ÕÕ, -%1¡F ! S  ||¥/*N))  +   E  ÿéò¢#'+?73#3#&'#5'67#535#53635#35#35#'3353#5#'67#535#Ÿ80@0  +;.#LLLLLLe 9-¢S   21  S !   8$2°F6 *ÿçóŸEc73673267#"&5733'67#3#33#"&''67335#53&'767#3#3#&''67#537#'6+  P[ * %%  "!   /(  >O8*-# ).Ÿ   $    # 4 N%       ÿçë®!6<@DHLRX73&'7'7##"''3255#'6'3#3#7'75#535#'63#735#35#35#'67&'D    [K ").+d ]¬¬„„„„„„ 7 0Z))('®   # !    U<   ÿêöªCTX\73#3#53&'#53&'37#733#3#3#3#3#;667##"&5535##"''3255##535#35#G* l( #JKKHHGGGGDD .  HH  77777ª  3 *  )    i V  #n,ÿæè¬48<@DJP73#3#353#5335#535#'6'3#3#67'75#535#3#735#35#35#'67&'B#//d00 hU"'+$"¢¢}}}}}} & "g%"$$¬        :U< ! "   $gÖÇ 735#53#535#)˜š¯²˜ `&UéÇ7#32767#"&5535Ж8D NF‚ÇB  [ƒñÏ73533##"''32655#&'ƒ> >  £,,_ Z 6ðÑ+3773673#3#5347#53&'5#35#"&55#'67#3327535#W , GR;³8OAF7! !eÑ  ff - 8   D ÿí—Î 9733533#537'6'&'3673#3#67'75#535#53&'5!€'O  `  &900";F7..6Î:::3 ?   0ÿèï\7&&';*X2 .\*\JO ÿèóÐ $73#'63#"''32657&'''6N˜£-A Di %Ð ,‚ _)0 2'5$ + ÿèóÐ#)7'673'673#"''32657&'''6E&˜  Q Di %–#*3 ‚ _)0 2'5$ +ÿêëÏ0733673#5##53'&'3#3#67&'7''67#v  2®a0   %Ép38  FPBÏ39&(;, M$   # ÿéöÐ28<@FL73673#67&'##"''3255#5'67&'767#3&'#35#35#'67&'QmG    :   A    F?U jjjj$ "ƒ·     :-  );    $1/)  ÿêòÐ8>73733#67676732667#"&5'675#'667#7&'/œv!+.&6=*3C " 5+ .‘ ¥++!     $ $  EHC>>  s'í½73#3#3#535#535#xp.**3z3''.½*44* ÿéôÏ ;73533##5#3533533##5##5#3#3267#"&55#'667#YXXY+c//c+ÚC$/%% >»$$3 9#%  ]óÍ "(048<73#'63#53#3#'#335357&'3#53535#35#35#Ä"'#LJ$$J  – #"Í  4g)7   -666%%%%%ÿèàÄ 7#'66553#5#3ÌŽ"·ŽŽl B5 2"]gT2 ÿéôÃ7'66553#5#&'7#3B#¯6ORJ‡‡i C3 0#]hD(/PG43ÿëõz73333267##"&''#'67#536rA  -B 8*+z P " EC6 _ÿïôs73673267#"&5_:2 7B/ :*s+) %  8ÿíõ&7773267#"&55'75'75'6Ñ $(PR]_ *  4@C472O      ,ÿêö"7367&'#"''325'3'67#‡ ! 2 JC3 ./  5D  X8,+ÿéìr 73#"''3267#3#735#+Á®ooIIrd%PD Bÿæïr73##53#67&'7&''6Vƒƒ#7­^,. ?Fr-"  ?ÿèé† 73#5##53&'&'''66• GzC>#& 9 +† .- ;5== <ÿçî‘73533#3#5##535#35#ÿòô…733533533##5#3#5#53#3X"##J•e""$$$$66I\#Cÿéèy 7#5##535335#33535#335è}HH44H5}44H5d{ {-H>ÿêëŒ %73#53&'3673#3##5#535#53&'G B *.PHHEEJ)Œ #  && óÆ733##"''3255#53567#R##  -- =Æ< 8?ÿèí„'/37#"''3254'7##53##"''32655##53#=#  Fh   G8„' +Š›o kXTO &&7ÿèòŠ173#3#'67#53475#53673#3##5#535#536i $ ] ''Š *  ==8ÿéõˆ#.7'63533533533##5#3#5#5#'#5'6` !9asZV ˆ''''??O`...A YE:ÿéê26:73#3#"''3255#7'7&''75##535#535#'235#335ß#+EEQ  = -719LBB!%R6//B2 /6  " BFM735333##3#3#&''67'7#537#535#5#5;5#33535#33535#33567#E?EEJas 4##7 #) &4*D?,,?3r,,?3x22E79 E•'     '5 =jÿæó(733533#3#5333#33#"&''67ƒ**3y&++ '   )5  &Cÿèç˜"*.273673#53'35#&'735'6#5##535#35#p( )¤& 88  @5 ,mmmmm˜ BB ?$  $$  /P P % jÿèõ›&*.473#3#3&''67&''67#5'635#35#67#ƒY``BC #"   AAAA  7›>    9 ) $ 6  sÿæïŒ!9?733673#&'#5'67#53&'733#&''67'67#53667#§ %  B " %  '  Œ   1    .iÿèô˜#48<73#&'#5'67#537'23'#35##"''3255##53#735#Ø C P +0 + ..V  U::˜    2 8 % %MQ9r ( T2'D 8'9Ä«73673#353#5335#53&'Y  ;"|#=  ªJ;LL;J ÿéí… 7#'66553#3##5#535#í· %šEOOKKA…7/" !@%77ÿåㆠ73'66'3#735#53#5#535#T# 2XUVjaaU†O 79Y#"Ž#ÿðñM73533#3#535#,JNNgàeJ2ÿçô•CI73&'33#673267#"''67&'#7#"''32655'75#535'67&'w8DA  $ ( ;(* 077" 5r  •  *$     cÿéñÆ #733#537#537#37#37#3353#5#533up Ž"+-*2/#k"Æe"S"  =gXXXXi:ƒ  $$ $ÿéõš $73#67&'#7'53&'3535}FE V":7%! K1‚‚‚š X  4/  ‘# ÿèô#173'67#'63533#67'675#73&''66ŒQ  B o &.( (0 &  !&&3 9 ($!+ ÿåô#'+/73#3#3#3##5#535#535#535#5##5#35#35#Ê..\ffbbZ**—*)))=**""'ÿèäŒ,7#"''3255##53673#353#5335#53&'ä  ¡D   "= z <$Œ‹  t’¤   -01- ÿæóœ5<73#&'#5'67#535'23#&''67&'67#53667#Ñ %.gL!0 ;'"8 *#JcLW{) D)$-H <%" 9I) Kœ L     3  ÿéï"473533#&'#5'67#7&'''6&''6767&'$!!   ¶!(B *+#q  OS%./71 < 00  ÿèå†.277'7655#'65535#35#7#"''3255#'65535#35#s 0 ////´  86666†  ! &+B*=K! '*C*=ÿçä‘ !'-73#"''3265'3#735#35#35#73#'67&'Ñ   ·iiCCCCCCtlC  ‘‹ ƒ|W55Ii      ÿæõ›EJ7#67327#"''67&'#37#53#3&''67'67#'66553533'767ï<    k \+4   % |  †+ + +.4   ) "B U  ÿéó‘07&'3533#&'#5'67#73#3#3#535#535#©  …$    "]}611<@114‘   PK ##((# ÿï~73533533##5##5#35#35# / /%////zxx""V"ÿïñ¡373673#3#3#3#3#535#'67#5367#537#53&'X3:oglŠ…BR¶P= *@J  š    -0'  ÿéõ 17;?EK73673#67&'##"''3255#5'67&'767#3&'#35#35#'67&'Ka>    8   C  ;8Q hhhh # !ƒŽ   /  .  % #      7ï—!J7#53#3#67'5#'67#'736573655#53#3#3267#"&55'67#'B,`"& %   O*a%)&     †         S0îÒ,047373#'677#3#3#535##"''3255##535#35#fVa   W$4{5!a  IIIIIÆ     ; LÿèôŽ !=K7#'66553'67#'6'&'73#353#'67#5335#5363&''65é´ ˆ2% M8' # "5= #  # 2Ž;2& "E  "   ', ,'  %ÿéò˜%7;?73#3#3##5#535#53&'#53&'367#'3#3#5##53635#35#³."4++++3!+ +h)BF2 //22˜ '' F9 :F ˜ 4i ÿéø›048=AEK733#67327#"''67&'#7#5'275#53&35#35#675#'3#735#7&'©20     --.  šy>>>>>``<<¬  ›  ?I8 ) , ‚0  ÿèí¢!%)B73&'73#3#3#3#5'65#5#5#3353#"''3255##5##6>QSLLLLY WBBBBBM)R  *P&¢    >    (  -ÿèñÐ 6LZ73#5##536#5'67#53&'735#'273673#&3673#&'#'67#3353353#5#p_”C , 87 2Ž_hR: E N=P?>¤ÐfUUfX         *''2 ÿèõŸFf73673267#"&5733'67#3#33#"&''655#53&'767#3#3#&''67#5365#'6# )  % ic' (("#   .7  L]=(+  $), Ÿ    %   !, J  (        ÿçòš .DJNRZ^73&'73#'67#"''32654''67&''67&'36533#&''67#7&'3#3##53#=#NQ,           ?  |@@AA@‚  '  5    ($'#!"@9  $ D ??  ÿèö›)-15W]c7&''3673&'73#3#3#3##5'675#5#35#7673267#"''67&''7'3'&'''6Ñ  }  #$+((((-`  ¾6      E 8 ›  &     _3   g !   %0.-    ÿéëµ!%)FLP73&'73#3#3#3#5'65#5#5##"''3255#'#5'67##53&'35#<8 VSIIIIU¾TAAAAA¬    j  IWEJJ³     9   <  ( "  BQ& ~ÿéò–7#53#3#5##533'>&'¬'m3*2 ; †_OO_"5  Tÿë÷Ï,MSW[_r733#3'7#73267#"&55'75#'6553673265#"''67&''7'37&'3#3#735#276777'67&'{''-       t     cFF@@ % Ï       G=- .7R%*( - '6HD4  Z ) !     ÿéî£#'3T7#3#3#7'2753635#536735#35#73#535#535##5#3#"''3255##5##535##5mDD""%21  &2233TdeTPPSq#*  *$“+ +  )&0a EL?  ;& 99,;†ÿèñ˜ '73#735#35#3533##5#'67#535'6Œ\\8888  ˜B( # %%11  dÿçòÑ"BF^d73673#53&'3#3#5335#35#73&'73#3#3##5#535#53&'#37#3#&''67'67#53667#–)* '):.  *M * ( # )+Ñ   + *aGD  W    )  ÿçõ¦ 59=AY_73#735#'3#735##367#533#7#5'635#'65535#35#75#73#&''67&''667#Š[[99[[99Á¿B9N $5%%%%%%\5      !¦( ( ! 19*! (;D  V      Sÿé¿Ï.26:JX^733#3'67#'65533267#"&55'7533#3#735##"''3255##53673##5#7&'{--4 B  *    GGAA""8  /   Ï LA. 19V    &! 7 &=J$   ÿðêÄ 7&'67&'67&'6GVXÄ7(/3 ;2066(.4 :2/77(.3 :00ÿêÜÊ 73#'3'6573#È›"LÊÞÙYP2 0ES¹ ÿæâÏ !73'6573#'3#7&'''67&'73 *—O/  €  M  ÏsH.(;sæáܪ%+ -$4 #*$* ,# ÿêõS733267#"&5'3'6673#®   y <SJ  L2)  "*b#–ÜÑ 7&'67&'67&'6E O N Ñ   ÿññÁ 73#3#535#Î^hâf\Áªª%ÿññÆ 7#3#3#535#ì³  ¸ÌŒŒÆ-T.Õ.ÿöòÅ %73#3#535#'67&''67&Ñ`gáf]¡  –  Å©©\$0I$$0I$"ÿîðÄ73#5#3276767#"&5535#"±†=%  PIšÄoX! &  q;ÿðïÁ73#5#32652667##"&55335#¸ƒ2 N-ƒ¤ÁrO- ‹!<$ÿòñÁ73267#"'&553#55#38:I PD ®††]M # ¶q Q>ÿïòÁ73#5#3265267##"&57#335#¿—9 S0UAAVBÁr M ) ¨AAA7ÿíãT73#3267#"&5535#Dy 27 A<ylT5-hòË'+73267#"&553'#33267#"&553'#3™)% Z44¢)% Z44  M;+  M;+"`ÞÏ73#35#535#53#56j%==”@@DX¼*Ï eaJëÎ 673533#3#3#'67#5367#5355#7#"''3254'7##5-//*,7> "  )#&-Ó  0À "  $fwÿéîÑ<733533##5#53533#37#3#5#3#"''3255##5##535##5u0##™ ///B006PG  52EOÑ((!-2  II:L.?ôÏ/3;73533533533533#3267#"&55##5#'67#5##5##5#))  @'  x³µ '' .0 ó¬!7367#53#3#&'#'67#735#35#J-ŒGw6 &%7"- %4:ffff\EE !G %  ø¥ 73#3#&'#'67#5367#735#35#2œ]‡5'-H) ) 1B*vvvv¥I  , ' RÿéôÏ4:>BV7#'6553&'73533#3#535#3533##"''3255#&''3#735#276767'67&'ô~A>9B  ?:: ' ¼MA2 2=Z '%%l  g1(    eÿéöÏ!37;L73#&''6#"'673#&3#67&'7&''735#35#7##53#"''325}% U )g?,   `;   Ï     Z-   o8#¡r ÿéí¾73#3##5#535# ÀVccccV¾DkkDÿêðÅ73#3##5#535#'6'&'ÇXeegg[¦   ÅdQQd ) "$ $ÿètÄ73#3#'67#5365#b')*) #'('Ä9 M"A4ÿçîÏ-73673#3#'67#535#73#3##5#535#536% % 0-00, 2/22$$$ ¥7;& "27<7__7sÿè÷Ñ 7&''63#3##5#535#¬" ']&//00$Ñ   ,&JJ&+ÿéãË7&''67'6767767&'¹BN,)$('!$&6;=1 I(0 #6$A6$%[/ qÿíç½73#"''32765#qv  a½ 0.jÿéëÏ (E73353353#5#77&'7''67'6767767&'7''67'67676ONÃJ    o     ²§ÄħÉ ;&  % 42=$  % 40ÿèõÑ9Vt734733&'33&'73#67327#"''67&'#&''67#7676767'7&''67'67&''67'67676767&'..  ( T  ( ) 6" ),™  #  W "'  H(ab'     #    $-k +  '   ,8ÿëî›73533#&'#5'67#CDJ@. *) +;t''89ca3  67ÿèìž$73533#3&''67&'77667#535#CGOOB!' 2#. )  v;G…'       ;ÿèî!73#3##"''32655'67#'735#IŸ)// ';?%G Db*? -'#&*?ÿêîš73##5#'6556Í 2Aˆ4@Gš ]] ,'!$NBÿéê–%733'67##"''3255#53&'767#M D  6   FJ m–C  >  0ÿéò”#7367#53#3#3267#"&55#'67#B?:“DS;  E =;]B HK;@ÿéî¡"73673#3533#3##5#535#'67#C/^i4::IIRRL#‰  %%?ÿôó‰7&'3673#7&'=h5´  ‰))-&}9EB5‚%..&4ÿìñ¢,073#"''3265#3#3276767#"&55'635co dKA&  G4.¢N8="  Z%Gÿçíž733#3#5##5335#XXMs:&ssž eeD1Kÿèß• 7#5##535335#33535#35#ßl??++?-l++?--z’’7$$$\%%%3ÿèó£ $*735333##&''67#53655#535#33535F>D<; >: 33;HH>R002'($0) ' 1ÿëôœ(7367533#7'6773673267#"&5F 0: _&   x‘5F ˜@ =  3ÿèï¤ &7#5'673533##"''32655#&'f  #M M  ¤„a /((_ Z  6ÿçî™17&'32767#"&55'675#'667#5373#6¾  )!   3)+lF™  ?  AG2;&%49ÿéîŸ 7#5'673533#&'#5'67#g  ,3*  #Ÿ‚d '&&2-``*11ÿèô¢%*73533533##5#5#3&''67&'#367<&=&&c&v=/• /9#%0 - &(("   1ÿîóŸ)73533#3#535#7&''6'&''6CCJJYÂUC| `  4kk  w "+ !7ÿèð¦=73533#3673#33##"''3255#53567#'67#5367#535#K0,, ,< 4EE  LL0) 8 ]@0š      8ÿçò¡=B73533#7#"''3255'675#73533#3&''67&'#535#67;  I)++'    )) ‚%4  (+ *      .4ÿéò¥#'+73533#3#3##5#535#535#35#33535#335?LMMBBSSWWBBL00D/s00D/š UU13)ÿêó¤97&'3673#67676732765#"&''75#'67#°  d'w]% ,. $23% &8#. " + 2 , $¤ "      !cO2,D.ÿèôŸ473#3#535#535'667#'7#5333#"''67&'×00*c&**.k $#(?!">?8C  Ÿ&((#R '(-  ?ÿëéœ$,073#3#5##535#5#35#"&55#'655#3327535#?ª8/v05`/v  ZvvvœŒ ŒP    `9ÿéõ¤3;73533#3#535#'67&'#3&''67&''667#K?DDR±M? ! ]"!+O+6&", ' + C–&         6ÿéñ£%273533#&'#5'675#&''67&''6CGKK#2 .) 3!G l  Ž5+"CA"&9   !  <ÿèí§"',73#3##5#5367#5335#335367#33535|U1??_ +%++=,i#*<2: !§]&& ]'; & =ÿéï¡#'73533533#3#535#35##5##535#35#H#0##.².#600[`````6\ \!04ÿìö¦*48<@D73673#&'#327667##"&55#5'67#3533&'#35#33535#335@7 [- 7  & 9  '(!% & &&8$\&&8$   F   A ,32ÿèòž%+73533533##5#5#&'''67&''&':(;,,a(v;\  qf    }!!!!::(((  "4ÿêñ¢"'73533533##5#5#'6553#&'7#3=&8))^&q8‡/ , 8#5``’S $6 #% 5ÿçïŸ(73#3655335#535#53#&''67#56u +/!!"6=3 <; :6œ\\i!%$f6ÿéêŸ  &,73#"''325'3#735#35#35#73#'67&'Ö  —UU......Y] ?  Ÿš  „];;Vy   <ÿéö˜+=B73#67&'7''735#35#7'665333#"&55#53&''67&67#."$ % %#+33((0)BI­   5AA1 +Aÿéï¦37#67&'7&''53'735357#"''3254'7##5‘<   ***p  '•_2  Ÿ &>67 ²5ÿèò¦/473#35335#535#53#3&''67&'#535#5667#r ""51##(;DC$-$&2 - HH;X¦ HHP K‹ &ÿéò²#'+17=C73533533#3#3#"''3265#7#535#335335&''&'''674'&9)9€•—   ›+99K)'  B  6—7 4 >e   ?ÿèô§ $7<T73#53635#35#7#'665333#"&5#53&''67&67#'367326767#"&5Z$N****| ; - R   "w#" § NN ),)(  /!         Aÿéó™B7#67'7&''5353573#3#33267#"&55'67#'7367#Œ8   &&&V  # ! ,™`7    ¦'76  %" .)*ÿçô¥J73#&''67&''667#'3533#3#3#3#"''3267#'67#535#535#¨>   #o $$",/    % ¥ :! "%*(/ (87ÿèï¬#'F73#53'#"''32654'7##53#735#367#"''3255'7567#p&b(  #bQQ--Z  , >¬  0 3¥¶+ (   4ÿèñ§#'+/HM735333##3#535#5#5;5#33535#33535#3353673#&''67'67#67#I>FFJ¢E>,,?2q,,?2w22E78o$ $$8(/ )f B ((7 $     :ÿêô¤ "5K7&''6'#"''3254'7##5367#53&'733#3#67&'7&''67#¬  )!  G5 C( f wA  )- ¤  ( , ±V    3ÿèö¡ $*06<B73#5'675#'37&''675'675#&'7&''6'67'6™M ;ZK,/ 0-#- + )9j "585 'LM> 2b c¡O =      B       9ÿéó¤-1R73533533533533#3267#"&55##5#'67#5##5#3#"''3255##5##535##5?   6 [b=7  %!37“   ## *,  ::/?*.ÿéð§"&<I7#3#'6553&'75##5#35#3353353673267#"&5'67'533ë6/ŽG1+   4 )“1/% '0G #!(     F 5ÿçí#'+1773#3#3#535#535#735#33535#3355#5#'67&'E™#((2·/%% 00B1s00B1"111 # Y% #I, ( -!   3ÿëó¥$*.2D73533##"''3255#'3533#3#535#&''3#735#7677'67&'ž0 0h***#[$*~  h]]99 0;~''i  e'(2'   8ÿîò©#)/?73#3#3#535#535#735#33535#335&'''63533#3#535#G—CEEP¯MCCB00B1s00B1 O***TºS*©@  ( ! I   ,ÿéõ£4:@73533533#3#535#35#35#35#73##5#'66556'67&'8 # f ######Ž  ?  ( <  ‘RR22e pp3* +6.€    6ÿèò¤#3AGM7&'3#3#67'75#535#5'673'67#'63&''65'6'&'h  :"" '1*## "T4 (    $0 6¤  / 2   .&" 0   9ÿêé¥#7;A73533#3#3##5#535#535#35#35#7#"''3255#'65535#35#;###""''" #----˜   # !!"!”NN.,W– #( )2K/L:ÿéö¥28>BF73#&''67&''667#'33#"''3255##537'6'&'3#735#¶0        X' @+- A  ..¥ 0# ' !02p  [x‰+    BC% 2ÿçõ¥!%)-17=CI73#3#3#535#535'65##5##5#35#35#35#'67&''&''&'Z†»u&'f –    ¥!   +!!!!!!1 6   8ÿèõ¨(Pg76767&'33#"&55#'6553&''33#3#"''3267#735#5'67&'767#67#53&''67&'¨       3TJ/3   6 ,   6Q =Q  ¥    3, 0  s    3ÿèð¨#'+/5;73533533#3#3#535#535#5#35#33535#335'67&'A"7))0UE›DM'"l711C2u11C2^ ,&U" !š  KK ; )     3ÿéó¨$*08<@7&'#5'63&'3#73&'7#33533'67335#5##535#35#”&. ^ 6 ; >šš       `````¨    6    .GG # ,ÿêñ£ ,2:>73&'73#'6553'#373#3##5#535#536'&'#5##535#™ TDM''W &##$3  $3- (28>-..0Z[9(8ÿéñ¤'/37;73533#3#535#&''67&''6#5##535#3#735#AJIIS¹SJ  h +yyyXX44™ ,,    3[[D5 $ 1ÿéð§!'+/48Lf733#"''3255##5#'655'6367#35#33535#73573#"''3265#'67#3533#3##5#535#'6Y"   ,U     !!&& § x !4# .8 Y/$ 6 ((  2ÿèô® 473'73#3#735#3#735#3#&'#5'67#535'2™™ssSS//2’’·T  P* h ® N0! 4     4ÿçï¡/37;RY73#&'7#'67#735#35#35#73#&'7#'67#735#35#35#373#&''67'67#67#?L   ++++++HP   ------u?d" :$ ;'2 1g :¡P  8  :P  8  6       .ÿéò¦ "(.FLRX^733#5'6367#35#33535#3357'6'&'3#3#3##5#535#535#&'''67&''4'T+O   / [  & U"%%!!  D @  ¦  XN 56_   11T  3ÿèû«/37;AQW]73653#3#5367#35#335335'3#7#5'75#35#35#75#3&'33267#"&5''67&'Œ'+.-a!#   ¡I l       `  › @@=5n'#xHJ  +  / 5ÿçõ¬ =AEIMQcgk7&'67&'67&'673&'73#3#3#3##5'65#5#35#'3#735#3267#"&553'#37#3L   )  (  +@#xQQ// &" \4$¬         y #++Q( U   B/! 1ÿçñ¦#W[_cgk73#73##5##53#5##5&'7&'#3#673267#"&55#3#7'5#'6553'75##5#35#335335=OOZSS '¨,5 g 66.0    2((% G !!!2¦!%%$ &   *    6# "3  3ÿíõ¦'+/37MScio73733#3#537#35#335335'3##5#535#35#35#35#3#'3#3#67'75#535#&''33267#"&57&'''6‰&(*([!$   œL7 5ddP5 ‹     F  K ™  :: 71¥U@ % ' "     "   &kíÎ73#3#5335'6Þ((1w HÎ3;wd~ÿèñÌ733533##5#'655#53IJ66J8 /::ÌTTT{{H.); ÿéóÏ73533533##5##5#35# 1\11\1E\\œ3333  qqÿçòÄ73#3##5#'67#53655#335#À'66H 62 =?,@FÄFooN# B /1 FråÐ7&''6767'ª LU)6<º" .+'ZëÈ7#32767#"&5535Ò—8DPE„ÈA  X^ëÎ73#67'7&''67#53&'„Z€38GO@fÎ      ]ïÃ73#3#3#535#535#ÄYOOeÞeNNWÃKïÏ$73353#5#'67#535#73533#3#535#% B7R6660p-6Ì"|' ""..ÿéöÎ7327#"&''7&537&'åh : E UV$ “7E+:LB&&?7ˆJ73#ooJÿûa 73#'6bbm5ACaÿèãÅ73#3#"''2667#735#µš¯4²–¡ÅK)G"0O%ÿôïÆ73#3#"''3267#735#3#!³—« ­ ’ŸÝÝÆA4 C¬ÿéìÐ#'-73673#3#"''3267##5#735#3355#7&'o  Ð B6 VJ*$C &Leÿè÷Ï!&73353#3&''67&'#535#53367#¥22 !& & 20 > Ï?3E'    "E3lÿéîÊ7=C767#735#53#3#"''327'6'67#735#53#3#"''327'67&''&'ÕOCG[DM  $*1OP CG[DM  $*2b  b  4BA\("  BA[)"  1    `ÿæôÑ)-1767&'7'3#7&'7&''675#535'635#335˜"% 66# 5B"445!!3$Ñ"  K#  %Kn''' ÿèˆÑ073533#3#535##5##53#3#3#"''327#735# 433&`&4zUEE\FM  O DJ  ( ! , $* WÿêóÑ,048J73673#53&'3##'3265'#"''3255##535#35#73#3##'3267#'67#„ " %–$f  2  """""C[‘ 6 : 0 4Ñ  (L EN  _ $ !>#3 , "ÿòÛº 73#5#535#535#&µ¥¥——¡ºÈB>ÿòíË 733#537#'77#Z t 8ÚŒz†hË <@@ÿéôl%7367&'#"''3255'67'&'z$ +0   (04+Jl+  #&  "  ÿèóm &73767&'#"''3265'&''6t #<   :  ?-$ 7k  "3F Q ÿêòn"8E73#3#&''67#5365#'673673265#"&5'33#67'd0!  !K     n     "  )  c1 \ë7#5##5ë°##w0ï„$*77677'7&'#5'67'67&'''6*   () r  "      )   ÿéôÐ:@DHN73&533#676767327#"''67&''67''67&'#7&'3#735#'6 ML  # &  €¸  ˜QQ++G,6;ª   $7!     8   HJ&F  X šÏ733#67'5#53i  ÏFN  ]?ÿí¬Î 73353353#3#7'5#'655L  QOOH ½/@@/A @  ;%# "Jÿþ¡Î 73353353#3#3#3#535#535#P  OU! V#!Â3??3DGÿýŸÏ #73353353#3##53#3#3#535#53N Q@@ R "V"Â(55(8!Lÿé¬Ï*.273&'73#7&'7''67##"''3255##535#35#L%'3 #  T   +++++¸    @f  (|#3=ÿì Ï /73#53635#35#3'73#3#"''3267#'67#j!M ))))$"3/   ÏPP )05  4 &1Dÿë¯Ï ;AG73353353#3#276767&'7&'#"''3255'67'67#&'''6OVX*       K6  Â++1 , &  S  Kÿê¦Ï %)73353353#3&'73#3#3##5##535#K[#!YMMMMM(((Ä** 2    B B'>ÿçøÌ ?^73#735#35#367#5335#53353353#353#3#&'#&''67#367&'#"''3255'67Uˆˆeeee&502;)+=7\h$ :  $T    ',!Ì>& ! _            ÿëôÌ#)/7&'36732667#"&55'67''67&'m 3(0>   &" #,² Ì ,_,_ m1"% j90 1+,3 5*ÿò€ 7&'33267#"&57&'''6Z     F  Q €%F  E # :ÿïöš"7&'33267#"&57&''6†   &k  x  šh $ i(0 1'2")ÿëºd%7&'3327667##"&5''67&'f   "    dA # ?%  FâÓ73#"''3267#'67#'67#'6LŠ   2,  :4 "ÓV =7*$-2%(GðÏ73673#&'#'67#&'RbJ9BL CLX­0@A1)   EñÎ 73&''65'3&''65›#)+ 5^  0Î#9'' .( % $5PÿîŸÎ7373&''67&'67#67#R$    £+J.  $'E )-ZBíÈ73533##"''32655#&'Z_!! _  ­> 9 9ÔÐ733#535#535#5'6367#T O6ª—––Ž 1F CÐ  ] ! GðÑ)73533&'73##5#3'66#"&55332[;  "a[%  ´  ±  WW$ 3/AñÐ 87#5'67#"''3267#53276767#"&55'753753G  &ª   " %93 ÐgQ 8 730  1$3HÍÐ 73#53635#7&'¥ -šVStt   ÐVV\2C  9ôÎ-373533##"''32655#'67#53&''67&'&'{E   EK G] ! !s  ® H C*     EôÐ !7#5'635'273#3#535#A  $HDD %MMC’=HÐ^E  "   DöÈ%+73267#"&55#'6553#7'75#4'Î 0gX$&.'"•Èd   V)! 00D I@åÏ"&73&''67&'67#5367#73#735#@2  ' ' # PQQ,,Ï    ?8b?CêÄ"767#53#3#"''3255##5##5##5iZÔd` +$$—  > )6666BT ÿêóÏ#06<B73533533#3#&'#'67#535#35#3#"''3257&'''67&'2B44?=& .9/(><2EBB    Xld  ¶$ &'$$$HY  ?" # $ AèÏ73533#3#535#35#33535#335]aaN¬L]#::L:†::L:½YY555íÐ 7#5'673533#&'#5'67#?  %%?D=,#" )8ÐlN ' &!%JH**F šº73##53#67&'7''6X;; H  º95 JÿèôÇ $7#'6655&'36533#&''67#ïx u  J)30( / 5)ÇSE4 2#_! ' %1F 48HMÿé­Á7#5##53'>&'¨/!   Áš‰Š›'O0&  #*0 aÿêòÏ '73&'73#&''67&'7673#5#533a?>‘]    !p]¬   ‘ }k 1óÒ$)/57&'#3##"''3255#535#5'63&''67&'~26 ,^^   YY. K]& )m&$Ò       @  FõÐ$:@7#"''32654''67&''67&'767367&''66''6\   "   T   $ ,#'  Ð !      "    &.$# Iÿé©Ð73#&'#5'67#535'6ž    'Ð, if#/& @ñÒ&,273#7#'6'#5'63#"''325''67&'€cV  /  $j $^ Ò  $iL % >  $ 3Ïm"7&'33267#"&57&''6z   Xf m5 ;' DïÎ+73533#&'#5'67#73##5#'66556)++  #Ì #/X*  8² > $  =ôÌ.4:733#3##"''3255#5373&''67&'767#&'''6?**40  2/F^ "  I  = Ì-  ($2   (  XEìÐ 73533#3#735#X1QQC†``@K) 4ñ©173'67#&''67#3267#"&553#"''326=7RG.  Ÿ. *$ R   © 5*  :L)  ÿìõÍ#'+1EKQ73533533#3#&'#'67#535#35#35#35#&'33276767#"&57&'''6&d)).7! -D. (6+&9dddddd1  " ; ~‰¾M M.-* +  %  Aÿè›Ï73533#&'#5'67#V   ž11 wb(5F[FêÓ 73#"''3267#'67#'67#'6yd   ! &!  Ó VB8*%.2& )@ÿëšÊ73##5#'66556  0   'Ê192 7E9'íÏ"&*/73533#3#&''75#535#35#33535#335'#6]__L Rc_LL]#::N8†::N8)Á N N ,,+  ÿìôe *06<B7&''&'33267#"&5'332767#"&57'6''67&''&'¹bb   q   Z  m  Ì  ` e   G  MG  @$ $    @ïÎ=73533#7#5'75#'673#"''32765#'67#'67#'6" .oX  9 5 "   Ä -' % 'V  6F8)  RÿèÉ73#3#"''3267#735#R<$(   (")ÉJ'M#3K&>ïÑ$7'673#3#3#535335###5'6J%#2…911>™!:  )Ñ %>>S I: -,Íy 73#735#33535#335-  11E3x11E3yM.,_ÿïïÆ(.47#3#53533#3#&''67#53655#'6'&'ëy} (((37     ).(P 9Ƴ×0    @âÏ"&73533#&'#5'67#73#735#35#35#,''  !*obb======² ?A$%‚[:9 -ôÐ'-157373#3#3#&'#5'67#5367#537#3&'#35#35#Uchaj…,! – ,>4>O3gP qqqqÄ   /2 B & GÿéôÒ <73#"''3265#'6#55#353567#533##"''3255#pr j \UD33hXh…BB  XÒR: == d   7å¨73673#3#5'67#35#I m~ |• #7;pp’   9' 88ñÐ  177'67&'73##5'67&'73##"''3255#'6C! C:NNX  8=\   , Ð     K9 "  5  1  6óÏ9=B73#&''67&''667#'#3#327#"&'#67'535&'# A    %'%'$ ! A#Ï (      $3$#  †6  .òÑ048<7#673265#"''67&'#'65534'33&'73#3#735#ìA      ev  ¥[[OO++º&$ ./' %7  "6Pÿëðz73#3#"''32765#'67#53&'©>\R C $ +&Bz 9 (;  7òÐ"49AE73533#3#535#733#"&55#'667#53&''67&67#'#5##53# 4..$a)4É    Z   ( ,L __½  T     %%+2õÏ1SY_7676767&'7&'#"''3255'67'67'667#5367#"''327655'67&'''6Ö !   !     E€ ?V     AÏ  %  "    " 1 *(    +ÿíô+ !7&''&''33267#"&5''6×  ;    ( +   " &  6ëÌ#'+/5;7&'733#5##5##53&'767#5#'#35#'35'&''6) B„!@.*6  gy.**B.>*z /Ì    k""k  9  1  #  )òÑ $6HM73#3#"''3267#'655635#35#733#"&55#'6673&''67&'#367q!+JKO   < 5#9999§  b     ÑD   P*2 $ B"  ( H     =íÑI73#67677&'7&''67'67#67677&'7&''67'67#53&'736ª <+  %2 &,[   $2 &,0: < Ñ  &  '     ÿéö£ -39?73#3#&'#'67#537#735#35#3#"''325''67&'7&',¦Rz6( /?!+ "4K =€€€€+  U  9  £E &  ) % @9  '   4òÏ#'+?73533#3#3##5#535#535#35#33535#33573##5#'6556333,,1144..3/I/w )G.à  C  C & " Q RR,# #>Hÿé¥Ï#'+73533#3#3##5#535#535#35#33535#335J$%% ##&&$ / ¹_++_9=|ìÐ73533#3#535#'63#735#&&)k/ VV00É"" KF$;óÏ/HNT73533&'73#67&'#"''32655'675#73#&''67&''667#&'1 .       "1ŠA    %€  ·     " !* %         +ïÏC73533#3#3#35#535#535#53533#3#3#3#535#535#535#535#535#+))$$**],,&&**++$$--»¨¤¤©#00&&+Ä          E      4öÏ*D7'67&''67&''6#5'6733#33#"&''67B$ "L  J y  &i77+-  Ï     "    H7  (  .ÿêõg /573#735#33535#335&'7&''33267#"&5''6G™™00B1s00B1> P d  (!  gC) %            1ôÏ#'->DJ73533##"''32655#'6553'#33#7&'3##"''3255#&'''6? ?` jEE9JJo  f[$ %K  2 °R N," !*>, "    ÿèòÒ $(,06<Bin7#3#3'67#'6553&'75##5#35#335335&'''67&''33267##3&''67&''67&567#òE<¹¾ ªZ +,,,?+(R 2 W   "e39#'4 . 2Nà *   B4 4=]  6          9  6ïÐ '37;7&'''673'67#'6'&''67&''6'3#735#Z %}= 1L  $}%   &…RR..Ð      $6 ÿèðË%+RW]73#33#5##53537#35#35#35#&'7&''33267#"'3&''67&''67&567#''6ÜoUµ=Z.7 [  m 'r"4E,(5 +! 1\.  Ë C%%C !            : E  ‚<ñÎ73533533##5#5#5#‚- SP---¯aa1Nÿò¶Ï*73533#3#535#3#735#676767'7&'R'**"U 'WW00  5)  ¹56(z7ìÏ 73#"''3267'675#'6&'œE  ( 39  ÏY  )  7ôÏ2?L73533#&'#5'675#7&'36533#&''67#'&''67&''6100  1Á  @'.* $  "%&e   N   ¿4 *+!/! 2)$3       %ôÐ !&*.I73#53&'73#&''67&''667'3#735#367#"''3255'7567#Q/w2fD    °[[77b .  25 JÐ *     %"' !   MÿéôÑ!N73#&'#'6#'673#&3533#3#"''3255#&'#5'675##535#k- g  ,u@CC@  -* %! ,*<@Ñ   '  ) 9:"&-? ,ôÏ7;?C73#&''67&''667'33#27#5'75#5367#35#35#75#£D    ¶W ,,KD666666Ï*     %"* DK-+- ‡=éÑ 73#53635#35#35#«0b;;;;;;Ñ ~~ 298rÿýÊb7#"''3255#'65535#35#Ê  ) ''''bP  $$ ( yÿúÕj73#&''67&'767#53&'¡&      8!j        Gÿé£Ð $*73&'73#3##"''3255#735#&'''6Q RA &  )  ³ EG  D#<  (îÒ (,04873#5##53'3533#3#3##5#535#535#3#735#335335‚d¸dGNOOKKeeaaJJN««!!1!"Ò %& (     =/ 4ôÏ3IMQ73#&''67&''667'3533533##5##5#3#"''32767#'63#735#¨>      ÄS   I <<Ï %      !C * * Hÿè¤Ï 173#53635#35#3#3#"''3265#'667#53&'r"J&&&&-+    Ï NN +-%  2 "&KÿîòÏ9=AEI73533533##5##5#3#3#3#3#535#535#535#535'235#33535#335Q%-((-%‰ EE::<-4"E6~Ð577#"''32654''67&''67''67&'77&''6f     (, # #.Ð  $      0ÿëó­!%)4:@RX73&'73#3#3#3#5'65#5#5#'#5'6&'7&''3326767#"&5''6~ *+%%%%,v 6&&&&&,  G  U  g , ª @n\Bb     "   8öÏ&OU73533#&'#5'67#'3533##5'67#767#533'7##"''3255'67#53&'&'¥    –  d-A       ±'DD-h;*  5       J*ôÐ,0Q73533533533533#3265#"&55##5#'67#5##5#3#"''3255##5##535##5J   1 U\7;    )"42Á      ..$31ñÏ%+AGMS733533#3#3#7'75#535#53&'#53367#73533##"''32655#''6'&'&'6  6--47A6..6' 1V7   7\—  Ï$$$     &  Q L-    /L.ëÎ(,8E733533##3#"''3255##5##535#5#53#3&''67&''&''67&'h?)G   31E)R??  6  Î  E  1DDIY  0   Kÿë·Î(INTZ767&'767#53#"''3267#'&5'56'675#535#5'67'#3#6'3&''6'&'s  6     M+5$$#  !!20  #0Î,  ; %  D½#   !P  ;    1öÏ $+1<@T73353#53373#&''67&''667#''6#5'673#3#3#3#535#535#mVH3         ‚    $JJU"#Y$!Ï#$ %    2 ! N9    #ôÍ0EIMQU[agm7676767&'7&'#"''3255'67'67'6'3##"''3255#53535#35#35#35#'67&'''6'&'ä  %   $ 7A ,  3 33333333  ¾ 5 #  Í  " / *  W% "W           /E‚X73#/SSX',um7&'5#!mtu73#735#UU--uY3(ÿë–$733#3##"''3255#53'67&'Z++0+  72 L  –E  @  ÿêöÉ ?73#3#537#35#35#35#3'33&'73#67327#"''67&'#ÝkY²D](ŒŒŒŒŒŒ(CF+x   %2= 9( MÉ ee * ) ' .     ÿéòÊH73#33#5##53537#35#35#35#67327#"''67&''7&'37&'7ÜiR»=_0~~~~~~–`   '.@ ;) JB- Ê L&&L % " " ,        ÿéòÏ28>FJN733#67327#"''67&'#53&'#53&'73#3&367#7&'#5##535#35#Ÿ;:     ™&93,X4  7FFFFFÏ-" &$$$ '"  $$0^r s)@ ÿ襉#'+1773#3#3#535#535#735#33535#3355#35#'67&'}(•$%%6#Y%%6#%%% @ ‰C    ( % '     8ÿéñk736533#&''6767#DCLD> <& %@S -0   ÿé~É73#'6655635#t !+CE 5"0/É N4!5D8l(Bÿêçd $7#"''3255##5##5##535#35#35#ç   00 dc  ++--5w0Lÿêéq73#5##5353335#‘Pn3X‰nnML L;GCÿæëh7#"''3255##53#735#ë  ‚,KK''hj  Sn€&>;ÿéòw$73#67&'67'5'67#53'Ž FM <  )4B w  ":0  .  6ÿèèi)/573#"''3255'675#73#"''3255'675#&'7&'@I %6TT ")AG b il  $l  $   KÿèºÎ73533#67#"''3255'75#P+++   )0+ž004 @  5  :g ¢È 767'56›È   žmÿçôÊ %7##53#"''3267#3&''67&67#Œ u  Mi  $3 awà5"D6%     "`ÿéôÏ $7#5##53&'7#'65533267#"&5èY3(%F  ²=**= I:7 ,8"q MŸÐ7&''67'67676767&'Ž  M .#:7 B$ HÿêõÏ 7733"&''67&''667#73265#"&55#'655b&-972   i ÏK6  7C$2$m ‚7@!@?XÿùñÍ7&'73#5363#3#„  T *…GOtt™™Í  \6 NõÐ#73533533#3#&'#'67#535#35#1A11<6! &!A, #8>1DAA»  `ÿìñÏ 37#5##53&'7&'''6333267##"&5477#ça: & g8 ! '6E®**   ")  ( RôÏ !7&'7'6'&'3#&'#'67#x  W y Ü7# ,=/ " :Ï   ' $# IÿêôÏ 3733##"''3255#53'&'&''333#"&'&'75#  66X  I  :* (' 0 "Ï1f  a) Ee    ULÿêóÏ.73533#&''655#'&'333#"&''75#$** )$"  ) '& /  !™66( *$4A Fe   UUÿèòÐ$(7367'673#&'#'67#3'6673#Z0;2O, #"  &#  8“ +(-2( #,h_ÿèôÎ"&*73#3##5#535#535'235#35#35#35#ã  BB99<5""5"W""5"L  ¾`  9<K _ÿèïÓ!'373#"''3267#3#"''3267#536&'3353353#•A   Ikj7aÓ 7! (MR >MM   NN>>§A    ' # M    UÿçõÆ $(,07<@7&''67#53#3'#5##5'6735#33535#33567''35#Ž  LH  H!##5$Y##5$L &HH@ JJ @ >p+ :  5 (P„Ñ#'+73533#3#3##5#535#535#35#33535#335100**//44**1*B*Ç  <   < " " Kÿê±Ï")/5107#"''3255&'#5'#535375#7675#7'6'&'§ '& D  >  ˆŠ #bj+0žGG"9C N   GôÓ!(,0J73#53'73#&''67&''667#'3#735#37#"''3255'7567#Q0w2h>    "ƒYY99b,  47 IÓ         !   wÏ`73#3#3#535#535#zR"X# `Kÿé¥Ð(,073533533#3#535#35##"''3255##535#35#NZ!/    '''''·oA&  &  444=**=4""4"^**<*Ñ #$$    2 B  C U~ òÏ-273533#3#3#3#3##5#535#535#53&'#535#367#…(--20((00//))1/(&.¼  :Oÿè¥Ï 073#53635#35#3#3#"''3265#'665#53&'u"I%%%%+)   Ï NN +-% 2 " !Kÿé÷Ç$59=73#"''3255##53535#335#'&'333#"&''75#73#735#å    I 11 <  " ,- 6  M-- ÇI`  LcrII9$, MU  G3 IÿèõÐ '+/?7&''6'3533#3#3##5#535#535#35#35#73#3##5#535#à  k! !%%%%C@!!Ð "Z''Z<:"FF"RÍ#'+/37335#535#535#53533#3#3#353#735#33535#33544''11//))66d(A(j 33 LKÿé®Ï(,073533533##5##5#3#"''3267#'63#735#K8  - 00º o\   M,Eÿë§Ï"9?73533##5'67#7&'7'6&'3&''67'7#5367#P!##   H   & ! ¦))3 4    4     0 `ñÑ !'+/3773#'6'#3#3#53535357&'3#735#335335˜LS '""&e==q 'jj   Ñ  *i. 0ÿéîV"73#3##"''3255#535#535'2« CCbb  ccJJ*1V      @ÿë”Ï573673267#"&53#3#&''67#537#'6P  +   !  Ï         lÿÿÚy $73&''67&''6673#735#Š4    9MM**y    2.KÿéôÏ,1@FJa73&'73673#3#3#&''67#5365#535#5#35#"&55#'67#333535#7#"''32654'7##5N  '*!   %)%!8;   3;;;“  ´     ^    ^ 6   > s?!! CËÜUÿéöÏ$59=N73#&'#'6#'673#&3#67'7&''735#35#7##53#"''325r+ ]  -qC1  mA Ï       Z.  o8#¡r TÿéòÑ-:KOSW73#&''673#&''63673#53&'3#"''325'##53#"''3255#3#373#q(  T(   2  +ž(d  H F  !Ñ      'a  &x_  I:LRÿø–Î73533#3#535##5##535#R><¯##IX\7' NÿçõÏ-159=AELdk737#535#5#53535333##3#3&''67&'7#735#33535#33535#3356773#&''67&''667#"P# %'&   -1#$  0*      8 +   +    ) G< ¨@) - #P)!‚ ðÑ &6:73&'73#3#"''3255##53&'#367#3533#3#535#35#‚*-  D0"7½  u `t…  0  // . ÿéóÐ)?RhŒ7&''67&'763533#&'#5'67#73533#&'#5'67#67&''67&'3673#&'#'67#3#3##"''3255#535#535#'2   v       7    RRv:" .59 +=“BBcc   bb@@ #Ð    %  $$   /       OÿéôÐCHY_e73533533##5##5#&'#5'67&'77'767#'6733&'73'673##"''3255#'67&'S%*((*%„  A       # 24 $ p|7   2  bà  M         H- *  WÿèïË >B7#5##535#3#735#3353353#3#67&'7'5'67#735#ïttt ``   Ukk\(  ::Ëâ ãÈ· + ( &     =ÿèöÐ/5IMQhn73#3#5#53&'3#735#3&''67&'67#53667#'#"''3255#'65535#35#'66533267#"&55&7# KŠ|ŽK5ŒŒhh&          i +   Ð  B) !   3  5Z  )(+" !1Y - MÿèöÐ SW[g7#5##53&'73533533#3#3#&'#67&'67'5'67#5'67#535#535#5#35#3&'73&'#ên?D* ,  0  # #)H!# & ½       3      4 KÿéöÑ MQU[_7#5##53&'73533533#3#3#'#3#33#"''675#5'67#535#535#5#35#3&'#35#õHG1&*88 Q  / &.K?' HH¿%&          '    &$ @ÿéôÑ"&3Im7#3#'6553'75##5#35#33533567'53373673267#"&5#5'67#53&'73533'673#&ð/)~>+S      $ #/#   , ¾ ' E? 6BO   3 ,     D&'     TÿçöÐ /8ANTZ`f7#5##53&'7&'''63#35#535#53#56367'7367'73327#"&'&'7&'&'7&'èp:     ))d++.@ˆ   :  7 KE ,E½)*      =9FF SG S! %"3        LÿéîÏ )-15FY]73353353#3&'73#3#3#3#5'67#35#5##"''3255##5'673&'7&'#735#[+'‹":92222:‰ =,,,,,z  p'  *  B Ê!   /    > +CR.   GÿéõÐ%;K[73#67#53533#'#5''6553&'#5'67#53533#&33#3#3##'353#5#535#535#¦?…    B@     '''&&**E$))""$Ð >    % @2 3;Y L(&     ^ h  Iÿé ÏI73'73#''7&'76#3353#3#"''3255#67&'7''67##537#I" W4   ++'     º       66DK  8  SbGÿé£Ï48<@73533533##3#3#3#&''67#5365#535#535#5#5#35#335K &'    !4  ¼ 0  0 < HÿèôÐ!<@DHou{73#&'#'673#&'#'63#3#&'#'677#5367#735#35#35#&'#"''3255'67'677767'&'''6t" N- MwE`)#- ,SSSSSSL    < Ð      E 0   D          KÿéòÐ<AZ^bz~‚733#67&'##"''32655'274''67''67#537#'77#3533#67'7&''275#735#335'3533#7'7&''275#735#335{L+J      !-(')+ 4ZHTA'  "  †  '  Ð          x+   +  ÿèñÏ"73533#3&''67&'#535#67ceeN)$3:+/?;&$Oc9!'®!!'0  1':-'bóÌ $(6<73#535#535#3#3##"''3255#535#735#'3#7'675#&'sqr_\\^7E  gg##U=   ÌD  <1    B  ÿæêÐ733#3&''67&'#5367n\\Q%"38(*6 5$B#Ð#$2    .'$ ÿèÜÏ73#&''67&''6667#S} %.*!/.# UÏB+$ 3*,ÿè‡ÎB767&''67&'373#367#"''3255'7567#'67#5367#  0 .7 7  26 )   &Ë     ?  !     ÿé…Å"&733#27#5'75#5367#35#35#75#R "&,A=000000Åe&#p DBE ÿçˆÐ)-17#53673#3#3#"''3267#'667#53&75#35C)!-&)I? . >$@@bV  V  + #  = ÿë‘Ï/373533533##5##5#3#"''3267#3##5'635#  M  A9+ » n)T DML"ÿèˆÎ";A73533##5'67#7&'7'6&'3673&''67&'67#367400 +Y  N'-  # 2 ¤**. 7   4  2     GóÐ;?C73#&''67&''667#'3533#3#&'#5'67#535#35#335¢?     &“322)"  ,3,Ð$     1  %  10ÿè‘Ñ!%)-K73533&'73#3#5##5##535#35#33535#35#3#3#"''3267#'67#53&'78-.7.J.3MC   4  ":¿  PQ & % ($ (ÿéŒÎ+17733#3#5##5335'673#&'#5'67#7'6'&'D445V2/4*1*0,  ".^ ?  Î '%]' *:88     ÿçòÓ#?CGKQ733#5##&''67##5'6367#3#3#&''67&''67#735#35#35#667#Z` 6G7!  B 0 g [ ³y  ,7/(F 1# !"M_Ó  %    /S    ; @  ÿêôr !.;7#'6553533#&'#5'675#&''6'&''6ïÀKNN&8 6$. 7$K†  g   r!-) !*2!   &$       ÿçñÎ73&'73#&''67&'#367g  a'# $; 8-*><))%;%% ¥ &8$(=6! 7ÿèÎd73353#5#'6535#/w|ywd|. )  ÿèÚd #73'6673#'3#3##5#&'''6) vaa s00] > d:.+1vuCC     [zÏ73&'73#&''67&'767#**   Eº     ÿìôˆ)-159AEIM73#3#35335#535#535#533#5##535635#3#3#735#3#53535#35#35#C %Y$.º-::,,(( U*è)ssssssˆ  >> ?  6:3  ): :ÿéñÍ73##5#'66556Û F\«<[)bÍ )……A81VÿçìÎ 73#&'#5&'75#'66556Ø F]¬H& " P# cÎ *2 BK  *)3-$xÿéëu73##5#'6556­ 3C©>XIu DD#  $* ÿï€Ç"&*7#53#3#67'675#535#53#3753'355#m2  0; 2 ;\kCA "ACk0/y!!!!!ÿìŸË6@[v767767'7''67'67676767'7''67'67'33#3#76777'74''67'6767774'7''67'67;     3    mwwo‚*   3   ¬        ]]O       ÿêèp 7&'&'   8& %5p6tÿéô…73567#533##"''3255#t8F^44  8G9 6mÿèò’73##5#'6556Ý %/^,6’[[ +& !#HoÿèõŽ$73##"''3255#'67#53535#&'á 666  ŽM1 .' MM<mÿëó%7'67773267#"&55'75'7š // 79DF $*-&)n  $kÿèïÐ *73#'63533#3#"''3255##5##535#‰Yb  244/  ,2Ð )M  6ffOadÿéó #7'6553'#33267#"&5536‘lDD $ Y86 ,686%#   L hÿèõ™73#3#&''67#5365#'6”K.95 , (1 2 36 ™ *)(, ÿéî–"(733#"''3255##5335#35#7'6'&'¬+   G-GGGGJ A  –0i +|!2Z   nÿèò®&*.736533#&''67#3##"''3255#3#735#‡$*-  ! „   _ ??š  +N  K4cÿçõ›%+73533533#3#535#35#35#35#&'''6r/†&//////-" #  SS12(    kÿé÷  06<73#3#535#5#35#3353353#3##"''3255#'67&'vv$!r"#B!![ff ‚4  ;U   22 #,      hÿéõ¥/37;?73#&'3#5##535'67#53&'735'273635#33535#35#Ë(" "0L0 " #//  @/L/Š  V W      ], cÿéõ©"&,48<7&'#5'63&'3#735#&'735'6#5##535#35#ª @ .+ 5zz$$ /"   FFFFF©   8  (CC ! \ÿêöÐ EK]73#'63&'73673#67'#"''32655'67''67&''67#'&'333#"&''75#~hp "  %  !     !  $&%.  Ð *            "F  9^ÿéóÎ ;AG73#'633#535673#3#35335#533#335#535#535#&'''6€^f P"    ' Î  oc ..8ADq   ÿèòÃ$73#3#32767#"&55#'67#5367#Ä\mT - PIUZTÃ^ dM0,AÿéóÂ'73#3#32767#"&55#'67#'7367#ÃQfN* PKG<^Â$T! ZD.*74-$iÿçöÄ)73#3##'67#'7367#33267#"&5}t)-8-)7@Ä&C3+:6'fC &  ÿùwÐ '73#53635#35#3267#"&55369+X 11118 '$ Ð \\ 4:3 A,ÿéÓÄ 7#5##535#35#ÓÄÛÛYF¢I"ÿï6¿73#"¿Ð1ˆ 7##55#35YYFFˆs‡1ÿççd 767'563#"''32765##5i #$"". *¥  <d 5  QE $`rnñÏ73533533#3#535#35#3B55=â;3GBBµ!!!!ÿèî]73#3#67&'7&''67#*ªªÛ„4=  PO#?]   ÿçñh%73#3#"''32765#'67#'67#'67#á” :6 - (!"5hD #-!") HòÏ *7333#"''67&''667#73&'#<7 I$P&'$  % +U" Ï $     &4)ÿé¹0 73#'3'66¥W0GG bÿéìo73533#"''3267#'67#x!@,:3!VM6B7ÿõòV 73533533#7&'7'6PNä$  ¬ OOOO]    ZóÇ%)73#67&'7''6'67&'7''63#ÓÓ’   %)]   %)!ææÇ       &jðÇ 73#3#535#35#'6'&'Ê@KàH=P''` “  Ç9999   ÿçôu"&7#'6553#3#67&'#67''3#RÈ´¸U   L œœ++44(   :* e ÿéó‘ $*73&'73#3##"''3255#735#'67&' hiæ¬H  P‡‡ # &~w   3&  #(  PÿéžÏ73533#&'#5'67#V  ¡..zc )8ÿéë^ 7#5##535#35#7#5##535#35#u88888Â;;;;;^u u,E>u u,E ÿéô†$+377353&'33#"''67&''667##5##535#;6  $R#*$   ,“xxx† >      >@ @& ÿèòt 773#&''67&''667#'3#3#67'753675#šH     .…e' 1= ,t#     %# B?R OçÓ $(73#3#&''67#5365#'673#735#2@'-/' ) /3 gZZ22Ó    S0LòÏ8<A73#&''67&''667#'#3#327#"&'#67'535&'#¢B     ((&&" % E$Ï     "  . t 2 2ÿëò­-59=73533#&'#5'67#73533#&'#5'67##5##535#35#9$    a$    Ammmmm˜  '&   '( @\ \"0UóË/?73#7&'7&''735#35#73#3#'67#'7367#33267#"&5^L/ ' ::::Zh(05    .8  ËC    T # (    4   ÿêõ¦"&,0473#3#&'#5##5'67#5367#735#35#3&'#35#35#*¨Y 4" n 0C8„„„„d B nnnn¦C  > ? ( % D  ' F êÌ *.2673#735#35#3&'73#3#3#3##5'65#5#35#Xˆˆbbbb#160000:w 9+++++ÌG+ %     F    Sÿè¡Ñ 073#53&'3#735#367#"''3255'7567#wH>>D    +Ñ  431  WóÓ )5E73#53635#35#73#3#'67#'7367#7'533733267#"&5;.a====Yi(05    /WF,( KE Ó99 (    E  )   2ÿèï²5=AE73#&'#5'67#535'6'3#&'#5'67#535'6#5##535#35#Ú#"   '4   "&({ppppp²  *)  *'  jX X -bâÌ!%)7#"''3255#'65535#35#'3#735#35#â  D AABAtJJ&&&&ÌT   $%+2U14ÿèñ|8O7#67'7&''53'73535''67'67'67767277#"''3254'67##5¤6 $$$I1 %    ® lO  z ;   E*  z‹Iÿè¦Ï 173#53635#35#3#3#"''3265#'667#53&'r"J&&&&/*    !Ï NN +-%  2 " ! ÿæ÷Ë RVZ^b73#3#53'#735#35#3#35#53#3#3#3#67&'7'5'67#535#535#535#735#35#5#35#(´SdáiKZ6]6==55Da    N 5# 5)[C55==499j<<666Ë6  2     !     1"ÿõÞ·7#5##535#3#Þ”””·ÂÁœ‰:VäÐ 73#"''3267#'67#'67#'6G•  ! 81 !=7!#Ð C',"#(  ÿéêz"(733#"''32765#&''67#'633#L œ I$ =/|z U" 4    ) RóÏ#'+/73533533#3#535#5#35#33533535#335335 M'LL;Â:M‡';((;'(((;'(ÁOO-QïÐ73533#3#535#35#33535#335dffWÀUd!CCWD›CCWD SS .1Fæz 73#735#335335ÍÍ((:.+z4aàÏ73673#53&'35#33535#335Q )  4Á2 EEYCœEEYCÏ  RR 40\àÒ#73673#53&'35#&'735'6Q *  5Á2 EE  JC&  Ð WW Z5  55  OóÏ;73533#3#&''67#5365#73533##3#&''67#5367#'$$*-  "(-'p'%%/* ! " #  $+'¼          JóÇC73#3#7'5#'67#'737#73#3#3267#"&55#'67#'7365#a'* 1 )! (je&. 2 ' ,Ç !   .'#  &% ÿèîÐ"&*73673#3#"''3255##5'67#35#35#Lx‚  p,BCpppp´ €  5}$+IAUêÑ'+073#767'5#53&'7#"''3255#'65535#35#= *G)# *¾ @ ;;=<Ñ 6 ?`   "."/ ÿéõÏ.26:@DH7'67#535#53533533#3#&'#"''3255##735#35#35#&'#35#35#9%2+&&d)).5   jddddddh JjjjjI : : G  %Á !! * * …WéÊ7#"''3255#'65535#35#é   4 3333ÊZ   /, ÿéóÏ73533#3#&'#5'67#535#$QSS]P%8 ;$$9 < P^Q©&&%79hh8  3% ÿéõÏ73533#3#&'#5'67#535#dee[O$< ;&#: :"LZd¨''&26gg6!3& ÿéôÐ73533#&'3##5#535'667#``Q$8 ;%9988#: 5Q£--H!'KW11UF*> ÿéðÏ (73533##5#7&'3'66#"&55332bggb™a  ´  œ33  E  GA ,0 fbÿèíÎ73533#&'#5'67#7&'cdX#5 7""5 8 W™“;;G %F‡†B&(AJ  \ÿéòÈ $(73#3##"''3255##5#535#53535#35#ß  GGGGGÈ?*7  2PP*??,i*>ÿè¿< 7&'&'g%* ,'@8 8=<  ÿêÔO73533#&'#5'67#B9,!2 5 - +3= "77 VÿéðÏ73#5##5#'665335#53533#3Ø!  6699!„‚tB7   $&DÌS7?%5A!>615gÿèòƒ73533#&'#5'67#WZG!5 :$!5 1Dd1;ea50gÿèðÏ&73533533##5##5##53#"''3255##g!!!!"| 7µ@X BzaÿùòÍ7&'73#5363#3#‹ N '}B Imm‘‘Í  \6Oÿÿ®73&''67&'767#Z7    $®<' &ZÿèõÏ%)/73##"''3255#'67#535'673#35#&'ã  H  ckGG  ‹L(  #& !E . L; ÿçùÏ.4K73533#3&533#67327#"&''67&'#535#7&'3533#&'#5'67#400=A@    " Ž<4²  £511  (2¶&' (%%7&+ b  8?!/KäÏ 733#3#5335#35#oaaQ¥@,}}}}Ï VV"0>éË*A767#53&''27&'67#53&''27'767#53&''27&'D'! € - "&<& Ka  w Kb ¶    9       SçÏ $73#5'677'673'67#&'&'P !7EJ A8 c  Ï|%   % <-  :ÿéòq &,27&''6367&'#"''3265'&''6})= 77(9 M  " "0    .  , ) -q  '    :   ÿîòt )7&''6'&''63533#3#535#¸ $x #WWWhähWt ! ,CCMÿç¤Ï73533#3#3#'67#5365#535#`!  ¥** , ! Uÿè Ï73#5#'67#535#533Œ  .&ÏæYE9TAEÿê¡Ç"(7#53#"''3267#'675#5367#5;5#365#hK   ´¥ ,2 %)g]ÿêï` 73533##"''3255#'67&'i755  7\  N7  3 !  Rÿè÷Ï ,73353#533'67&'#53#"''3267#'66Ÿ&…&$#P !*m  .7Ï1&88&+ 'GF/8 ÿèÑf73'67#&''6m e)Œ ‚#a   0f >.  X‹Í73#&'#5'67#535'2x 00  (61Í  !.ÿéóX73267#"&55#'665&'µ  J*XQ " C)&  !1!TÿçöÉ &7&''667#535#535#53#6''6Ù,8 "$2^YY]r-VX +7 //f   ÿéóÒ?GKO73#&'3533##3#&'#5'67#535#5#535335'67#53&'&'7#65##5#|g3  0''ChV!5 9$!72 RfC%%0 AdCB ,900Ò   !  23!  ) HMÿìöÍ "(8>7&'''667&'7''6&'#'6733267#"&57&'Ã/   ).$  4 "_  Í1 0.*  +& 7  8 ÿéõÏ#'+A73533533#3#&'#'67#535#35#35#35#3533#&'#5'67#%i&&,2 $!L+ &4*%8iiiiii;>*( )#-( )Ä J  J., ;!;:  ÿéïÏ#G73533#3#5#&'#5'675##535##5#&'#5'675##535#53533#cddL95& !.%5 <'=PcÅ;.7 -,$8 >'=PccccÅ  '  ( q1   ), 0  Uÿè÷Ð +177&''6'3#3#"''32765#'655#53&'&'&'à  3,'   S  Ð &!!$0%d# >J/ 0F-f. G{Î7&'73#'65535#C!I54º @ !+/KÿèôËBG7#"''3255#'65535#35#7#"''3255#3&''67'&'##567#—     &=  4ËÈ  :1) 6Aa=,h+ o9 $I 3   váž NðË573#7#5'275#35#35#75#767#53&''67&'u5" #111111d J`   ËH N.. -)   ;ôž#73&'7&'#"''3267#'67#5'6aw2-   5I ?. 0ž  $ '    cñÏ-73533#&'#5'67#73533#&'#5'67#,%% 'n(//   #º  -0 +/ Bÿê²Ï !7'673&3#"''32767#'67#l 0E  & Ï7 %())-*\JU"KdÿéêÇ )7#5#;5#35#'673'67#&ê~HG E % S< ÇLL****&  ; Iÿé¡Ð 73#3#&''67#535#'6g+ !Ð' ( (51 $Pÿé©Ä73#7#5'75#35#35#675#PY    Ĉ.*• U$`'Fÿé¶Î "7'67&''67#7&''6q 1 &  &2  Î/   p #(x™  . $! }QñÏ73#&''67&'767#'6˜J     - Ï     Fÿê©Ç+767#533'67##"''32655'67#53&'j 9Q      -® o L) (1  ÿéó[!73'67#3#33#"&''675#Ð D55<421 $`[  ( ASÿèôÈ .73#735#3353353#3#"''32765#'67#53&'e‡‡%,>ZQ   A & .!;ÈJ(((((> : +< QïÐ #)73#53635#35#'&'7'6&'''6y'W2222CÈk!Ð ff3DE *  TïÏ,73533#&'#5'67#73533#&'#5'67#,&& %l)/,   µ 3:'8;‡ʘ 73#735#3#735#‹::CC ˜8=< Fÿé‘Î73&'73&'#5'67#W     #"­   ie +2QÿèìÇ )-177'66553'#3'6'33#"''3255##5335#35#'&' ZZ ')  ;%;;;;*C6 0$^:(  j ,"3Q  ÿéƒÎ273533#3#535##5##53#3533#&'#5'67#/00,h(/sNDD)++  &½  )#'!  )-=ìÑ!-173#3#&''67#535#'63#53#3'35:3#'   *0 eWjhULL9Ñ     D|3"mÿèøÏ !7&''63533#&'#5'67#¬ ! ,&* #$Ï "%""?''//_L !-Lÿé¥Ð#'73#"''3255'67#5353635#35#35#y   * $/Ð · )&s7A9KÿæôÑ%C7#'6553&'73#3#535#535'6333#"''67&'767#'7#ó†B2 D$V, *,%/ »PC2 2>[   &))" '2   'HÿêöÏ$NTZ7'6'367#"''3255'67567#676767&'7'#"''3255'67'6&'''6à , .uA      -_     ";  4 Ï+N B< 4   E >T # MÿçöÐ"&273#3#&'#'67#537#53635#35#3533##5#–?7K) $* "$/+"PPPP !! ÐT '%T ,2o%%SÿéõÐ9B73&'73673#3#3#535#535#367&'#"''325'3'67#b%"=22A<33<<   $  A7% #±  M     9(„òÏ#'+73533#3#3##5#535#535#35#33535#335ˆ+++'',,//((+)>)»ZZ28<òÏ#'+?73533#3#3##5#535#535#35#33535#33573##5#'6556433,,1155//4/I/w )G-Ä  >  > $ ! K MM'! ;TÿéóÏ 6L73#53635#35#73#3#3265#"&55'67#'7367#3673267#"&5jB:O  ' &K    Ï [[4;A%Y  )%&?80&`     _'ðÇ "&*73#3#535#5#35#"&55#'733567#35#_‘0'~$.O#Z EZZZÇ{{K# )! W EöÏ6<BT73533#3#535#335333267#"&55#&''67&'77#'67&'3533#67'75#(((/p/(r$     X  A @(&&0;0(à ;/*         HÿêøÏ'7=CU735333267#"&55#&''67&'77#'3533#3#535#'67&'3533#67'75#Ÿ    OQ  0  , $,"£,,6&$$)#8J%+5 ($, 1 WÿèòÑ #)/573#53635#35#'63533##5#7&''67&'–>v"OOOOZwHAAH 1"D ÑSS .1+  B73533#3#&''67#535#73#3267#"&55#'67#735#35#35##""(*  "%(#bk   % GGGGGG¼    X   > ! " FñÑ *E73#53635#35#76777'7''67'6767767'7''67'67yAI    ¤     Ñnn 7J/ # 0 # EÿèõÐ ")-=AE7#5'673&''67&''667#3#7##53##'326=#35l  K3  &5]*M  **Ð!¢v 9<      ˜ *uc ?  BôÏ+?R73533#&'#5'67#73533#&'#5'67#'&''67&'76&''67&'76  ‰ !             ²  D6 " DA"-   9     ‚ êÉ$(,04733#"''3255##5##53&'767#35#35#35#35#ƒc!  *  I***É { ++.  G>SO÷Í!'-37&'73&'#"''32765#'667#'6'&''6k -V  . !  - %  Í   &  /J $$      ÿèóe'-173533#&'#5'67#73##"''3255###535#"     ![‰ bM0R <7M  H4 ?#WÿéõÏ+2N73533533##5#3&''67&''67#5#67#3533#3#3##5#535#535#Z!1##1 P (   !- =&7<<88DDBB337     *  @     SÿíôÐ!;73#&'#'6#'673#&3&'73#3#3#535#535#u) \ ,r;<@::G¡F55:Ð   !*  %''%Iÿé«Ð)/767&''67&'3533#&'#5'67#7&'_        >Ë    c$$  @>"3  WÿèúV767&''6''6£  +1 K* V # #) E @ÿêôÇ)-Gb7367#"''3255'67567#'66553'#3357#533##"''3255#3567#533##"''3255#jC    1 —qqh:Lh -5  :: )<   ™4  * /#^.8   A  •÷Ï*073267#"''67&'#67'53&533#67&'Ý    !"! {'  " "6[ z%e  PÿïõÐ.6>BFJ73&'73#67&'7&''67#3#733267#"&5'3'663#53535#35#35#WC@N  280<,  V  z£#&¾     244  !*===+++++\ÿéóÏ">BF73#&'#'6#'673#&3#"''32765#3#5'65#35#y' Y(Vc  VGQ @---Ï       c N SF/"Mÿè¬Ç"&7367#533#67#5'75#35#35#75#S).C  Ÿ s"|JMÿéóÑ %)-1H^73#'63533533533533#3#535#35#35#35#3533#&'#5'67#73533#&'#5'67#=£² Û",,.Ž,%$  %q&/%# Ñ   %>  99 @7u Ó]73#3#3#535#535#xY$&^&#]SÿêòÒKPV7#53&'73#3367&'#7'5'67'67&''67'67&''667#67#ƒ(> @YN 7,   ,  "! - % (J$8­   -         ; @öÐ !'-=MSY_e7&'''6733267#"&57&'&'7&'33265#"&5'33267#"&57&'''67'67&'u ;( " -!‰  {     p  CJ  s  c  Ð    # %     %   )#   )    >ôÐ$*.S73533#3673#3#5'675367#535#35#35#'#"''32654''67&''67&'76t%  "5 5h  92%D=DD8      Å   H) J " s +      _ÿéóÏ(.4<Y7367&''66'367&''667'6''6#5##533265#"&55#3##5#535#À   D    0A‰j\ "$$Ï     %    :()#G :,, Pÿå÷Ï#'+/5;73533533##5#5#3#3#535#35#33535#335'67&'X2 Yd21™E8ƒ8A%%8%]%%8%I (!J  ¾  TT .2'    Rÿé«Ï#73533#3#3##5#535#535#35#35#T!  && !))))¹[%%[=; YÿèîÈ #'+73#735#35##5##535#35#7#5##535#35#mppHHHH‚ÈX563x x-I>y y.I[;ïÐ #/7'2'6'&''&'#53#3#533#535#535#à3K=0  */0r/B”?5zyeeefÐ      9 Eÿë©Ñ .73#5335#35#3&'73#3#"''3267#'655#q!J((((!%4-   ÑSS"143 $ *ZÿîóÈ!%973#27#5'635#35#35#75#73#735#3#3#3#535#535#ZT 2 @88cŒ<22A˜E66>ÈI P0/IiEg~òÏ,7#5'67#53533#&'#5'67#53533#&¿ &.( €&//      J‡Í#'+/37335#535#535#53533#3#3#353#735#33535#33544''11..((55c'?'b 66 Q„ ëÇ!%73#"''3255##53535#335#3#735#à E 3 -"".. ÇJ` MbqJJ:%48  IòÒ1MQ73#&''67'767#'6'3533533##5##5#3#"''32765#3#5'635#¤? $ŠN   C8< Ò     @ % & @ÿê½È 06<73#3#535#5#35#3353353#3##"''3255#'67&'Qk c;    NZZ k,  , P  È99*7.  +   NÿêõÑ/5CI73673#3#3#535#535#53&'3'67#'6'&'3&''66''6†  =77B<55=$ *B 5 , S  $ 6 Ð  i          WQñÐ #)73#53635#35#'&'7'6&'''6žA5 Š   KÐ dd 3FD  ) IÿîöÑ $(,04873673#&'#3#5'67#3&'#3#735#3#735#73#735#W,T)" n…˜ " T  ZZ7733-33º  z‹  () #338ÿèôÑ *@QUY73#'6'3&'73#3#"''3267#'665#36533#&''67#3##"''3255#3#735#¥AH  M !#    S   d H66Ñ i#U28=L    'H E 4]ÿçôÐ ,28RVZ73#5##53&'&'3673267#"''67''67&'3533#67&'7&''675#735#335§9h<    $ o  e588 k>+ MMMMMM; "  (BZM ?# )@ÑQ  Q ! 1   "    õÉ048<@EI73#3#3#'#3265#"&55'67#5367#535#5#35#3353353'##3‚q!39  0 &   '( #@   7,  É 4    $ 4 $I  ^ÿíóÎ#'+/3733533##5##5#53#3#53#735#3#735#73#735#€+""+""r|}+NN**"11,11Î&„¨) (2  2 Éc 73#735#3#735#‚CC!!JJ))c( #-^ÿéöÏ!37;L73#&''6#'673#&3#67&'7&''735#35#7##53#"''325w* W +k@.   g>   Ï      Z-   o8#¡r  ô…)047'67&''67353&'3#"''"3#767#35#-!  #?  ? 6!š¨. 3 „„?  # #=4 HÿëõÐ9^u73#67&'767#533#3#"''32767#735#5''6553&'6767'33#"&55#'6653&'3&''67&'767#¬=„  %7 # &  A*       " 9   %Ð ? .*- @1 2:Y&      n     QÿèñÍBGKO73#&''673#&''63533673#3#5##5'67#535#67#5#5#s%K,!  B(" #7MH )41(E ,HHHÍ    ,   W J  C TÿéóÐ/<LPTX73#&'#'673#&'#'63673#53&'3#"''325'#"''3255##535#35#73#i,  O2  + #,˜#e  1  #####BÐ        ,g  ]e *y .*UGÿéôÏ4:>BS7#'6553&'73533#3#535#3533##"''3255#&''3#735#7677'7&'ôˆFDAH   E@@   #+¼MA2 2 +CR.   OÿçòÏ ?DHLPch7&'7'6'33533#3#3#3#27#5'75#535#535#53&'#5337#35#35#75#73&''67&'#367q  u H6$#=66FP! E77> 5$3!!!!!!9B     Ï      A K    \+- *    AÿéöÏ]aei73533533##5##5#3353533&'73#67375#"''7#53#3#367&'#'67#'67#535#35#35#5#R&(--(& Q      47A  A  ¿ #)  1"3( ) u/ I@5) &%) !36MÿçôÊ #'+/37;djp73#735#33535#3353#735#33535#33573#735#33535#335'67'67676767'7&'#"''3257&'''6d{{&&6%[&&6%|JJ+MM-F    !  %  & < Ê6 :" $:" T          MÿêôÑ9=E]aeƒ‡7#'733#67&'##"'''27&''67&''67#53'3732653533#27'7''275#735#33573533#27&'7&''275#735#335ÁLM@    &&,* 7_2C"  X $   $  £ #        W % -     -    ÿéóÍ&<NRVZ^tƒ‡Œ’73533#&'#5'67#7&''67&'73533#&'#5'67#&''7'763#735#3353353533##"''32655#'#''53535&'#7&'    |            kÉÉ-->*,OG G  &" 999'q  »  !        &-/ 0 ,=   X  $0  TÿìòË#'+/37;GS`73#3#5##5##535#3#'3#3#73#3#735#73#735#73#735#3#3#535#&''67&''6`‡;F55F;S''E$$''H((Y++%++$,,s>EžF>   \  Ë 0!11!0 # +  +  + '..    :ÿé©Ð#AGKO73533533##5##5#3#735#73#735#3&'73#3#3#3##5'65#5#35#F(( #(( 0 C (Á  11$ L   ÿéŠÐ $(,73'72655##5##5##5353335#335335P:+:e ¤!ƒ +33==E˜Mc00000 ÿëÏ1FLR7&'#5'6&'3#735#3#"''3255'675#73#"''3255'675#&'7&'U  H )9 XX44 5   $=4   #3  K  Ï    *%\   \      ÿè“É)=Qbfu{73''67'767#73&''67&'767#3&''67&'767#73&''67'767#3#3#5##5365#5#35#"&55#'67#333535#A    /C@    -CA     /C@     -E…-&V(-H 'V BVVVÉ   +      * ZZ . 8  ÿóóÏ733#3#53533„TT[æ'<ÏImžž ÿñóÂ73#3#3#535335#ÒZSSbæ&6dÂCU‚‚« ÿîõÎ(733#7'7537736732667#"&5Q%%$8EE  !'  ÎE`  ¡½L e ÿèõÏ"473&'33#3267#"'&'#7&'3#33#67'7537BA  Á  ™dd1,,=L“!<@''(RJ 4#3 ZWÿéñh 73#7&'''6'66yJh! "† 9n BFhHB  $ 0 ÿéá€!+73533#&'#5'67#7&'7'673#5#533<::2  /  i  )®šX((,, 6   o ÿçõ‘/>D7#67327#"''67&'#'6553'33&'73#67'675#'6ò;       r…¨b' = (       "-$0- #-6  "- 8 >  ÿêõ->DJ7#67327#"''67&'#'6553'33'73##"''3255#'67&'ò;       r… ªb&   )   N  )   1$0- #-6   "H  E 3ÿïó¬-=73533#&'#5'67#73533#&'#5'67#3#535335339#     a$   SÀ"#F”  -+  -,j//<0ÿîô°7G73#&'#5'67#535'6'3#&'#5'67#535'63#53533533á'    +5!     )=MÀ%*=° /+  *'”++9ÿîoÏ#'73#3#3#67'75375#53635#35#8$<< .. ! ))))Ï3 3 86As ,RÿéìÃ73#3'67#&''67#×p c&+A w'X 7PÃ< & ` $; ÿèõ¾173#6732667#"&55#3'67#&''67#âL$ $+ A> ] O0 #-¾F I  ©t-![  /;ÿèðÇ$)733#"&55#'6653&''67&'#367»(, U ²#%5:.,: 4& )!!Ç9  ,"  *h    ÿè|Ï!%73#3#"''3267#'655635#35#r !,FGJ7 5"3333Ï W 7 !' r<A5 ÿêƒÐ(.4767&''67&'3533##"''3255#&'''6   -&&   -W  9È      SP  K  ) ÿéŽÆ!%+173533533#3#'6553'#335#35#'67&'-e mHHJ% 8  Š!# 4>^<+f##:  ÿè…Ð873533#3#535##5##53#3533#7#5'75#'67#53100$_'1sN+4<!#25* ¼  ( "  ÿéˆÏ#'+3773533#3#3##5#535#535#35#33535#335#5##535#044,,3344--0-G-EEE  G  G ) ) JF F* ÿèÐ,2873#35#535#53#563533#&'#5'67#7'6'&'9A0g2,,  (Z?  Ð [VŠ))  .0 7   ÿíôK $7#53#3#537&''6'&''6xcØbiçkD  u  :<9      ÿéóÏ!*.2DIgmq‚†Š73533#3#535#733#"&55#'665'6553'#3#5#7#53&''67&67#3#&'#5'67#5367'23&'#35##"''3255##53#735#122)d*1½  n `(j^  *,9,z ,G1S(]KZZ‘   ž-ddDDÈ    O %     '& )8  ÿìðÆ 7733##7#7#57#337#37#37#* ¤œ o66K4T66C<9mYYnXGGGGYFFF ÿèóy#(-273#3##"''3265#'67#7#53735#3377##67#ÚF  F=:N=?=y,  ,,, J ÿèôÒ/dhmr733#5'6367#35#3673267#"&5'733#&'#3267#"&55'67#5'67'53337#367#335PW7© &JKL% + * TBS?   $&!? 79 HGO K4Ò #         '   # ! *3 # yçË 733#3#5335#š::-a!;;Ë'XXF4ÿéôÍ&9=AE7773267#"&55'75'75'6'3#67#5'675#35#35#75#Ø /18:  '*$'" 0—g $ #""""""Í%&3  6&" ‹1-•""W$`&!ÿìîZ)767673267#"&55'75'75'6Â#'*!N3(-1 ) 4("%J>A9RZ       g ðÏ&,273533#67&'#"''3255'675#7&'&'l4<< !     4^ =  ¨''"  !   :7  7 féÐ !73#53&'&'73#5363#735#¦4w. A"ƒM Fee??Ð  %  6E# ÿèód%E73267#"&55'75'75'277''277767'5'75'7æ4  ".- (*.- $&.0 $' #*     (     aõÆ /573#735#33535#335&'7&''33267#"&5''6vkk-G-  7  A   Æ`7>- 0  , P ðÍHLP7335#535#535#535#535#535333##3#3#3"&''67&'767#'7#3535a-  # ! !$$ 0*  bÀ!         "* _çÏ"&*.4735#53533533#3#3#'67#537#75#35#35#&'j%1>C + ! +3.L%NNNN6 ¡ I $ I ( B  aêÐ!'+/373#3#535#53635#'&''6'&'3#735#35#¶&*2‰%C R  W  ccAAAAÐ ''G'/  . 6O.1 ]ëÓ $(,04107'6733#736735#33535#3353#3#735#35#m $1 t 88!!1"S!!1"iƒƒ eeDDDD¥ ;H$  !?' ! ]éÓ $*06<@DH107'6733#736735#33535#335'67&''4'7&'3#735#35#m $1 t 88!!1"S!!1"[ KQYeeDDDD¥ ;H$          ?' ! $ÿèòÎ#)73#327#"&'#67'56&'&'Î "#MK)  6M YHK  Î&-6( !C6X  ÄO#9Y $ÿéóÆ %7#3#327#"&'#67'535&'#ßELH - U)%2 “BMÆK"%0.A  Í%%Y!ÿêlP73'66X,(P,) #ÿçŒM 73'6673#8@M-( ")bÿí¥Y 73#5#533533’z)*BU K8PPÿê»i 7'67&'3#"''3267#'67#C YD_ $+&i  '2 + ÿé©i 73533##5#735#33535#335<<<<++=*g++=*ZQ 0/ÿè¼u$*73&''67&''667#&'&'FF ),". ) !/ : ! =* )Ï< ( -*)=` ¼5M':ÿèõÑ-37&'3533#67&'#"''32655'675#&'± _b[ * B +49._!Ñ  %%# %$!Sk <#"< Šnµ¢7&'š  ¢ LÿêöÂ73327#"'&5#3533##5#O{  g&&&&Â__,~G>>kkYÿóí¶7#5##535#3#íjjj``¶ÃàŒ; ÿèöÏ,6I7367&'#"''325'33#5#'6675##533'67#3327267##"&5ª  s'2'D(  ,) >%Ï>  &:  ¡!8& z.EB );A&0*[   D ’Ï733#67'5#53Z$$  ÏFO \2ÿêšÏ73533#"''32765#'6655#O'   ¤++Œ) "bIJB>C šÊ767'7''67'6767  ! –C* *#:6!KÿçìÄ 7#5##53#"''32665#7333#ìt2`   b \•mmÄ12LS# &YJ@ÿê‰Ï 73533#67#"''3255'675#B      ¥**2 I  <:@ÿéŠÏ 7#5'673#f  ϰ‚2’Fÿéö™73533#&'#5'67#TCF9% &*+6r''89fe5  4FÿéµÃ &73533##"''3255#'655#75#7&'FN )N) `ccO M;# =RRAPÿéñÏ '7#5##53&'73533#3##5#535#'6íuD799EEHH# ³5##5  #$$(<<( I‡¼ 7#5##55#35‡,¼±¸J9966_ÿéòj73733#&''67#q*;3 / +9 4(K'*)'OÿèìÈ 17#5##535#3533#3#3#"''3267##5#535#535#ìwww "--**1   ##"Èàà¿­$99Fÿïõ[733533#3#53g 66H¯!GEY(0ÿéªÅ$(73533#"''3255##5##5'6553'#3_    [66ƒO  9jjU?%"MMB0DÿçôÊ #73#735#35#3#3#&''67#5367#Xˆˆ````“CQD3 6 C 9 ?E<ÊX545 '! 9ÿê­Î/73533#3#3#"''3255##5##535#535#'6W)),,( &-- Ê G  2__K[ 8ÿèˆÉ7#"''3255#'65535#35#ˆ ÉÉ ?0) *6v9&c*JÿêðÆ #73#735#33535#335#53##5#'66`€€##7#Z##7#U,¥%,Æb9@QQQ% ‹ÿèõÐ 7&''6&'&'·  & !%Ð $"$$<.^ÿèòi73533#&'#5'67#m390 " "%Q#&JO'!LJçÏ 73#"''3267#'67#'67#'6wf    3-&  Ï P88# /'  ÿéõt"E7367&'#"''3255'67#53'367&'#"''3255'67#53¦    " ##a    % ! 0t  %4  1%"'    0  ;*!CÿïðÎ#733533##5##5#5333#3#53533r-))-''%;;E­!Î+1AeeIÿèôÎ'733#3##5#53533'67&''66Ÿ22=EI"3 p  :2 26Î <<;;#     1ÿèíÊ #)/73'6573#'3533#7&'#5'67#7'6'&'O!Šo+,,    %W  A  ÊlH. ,=lá…[[ RM"-[! LÿëôÐ!'733#3#53533'6'&''67&'Ÿ::A¨"8 ^6$ (C Ð&BB  *BÿéóÌ 67'2'6'&''&'3533#3#&''67#5365#Þ ??IA5 5> : Ì  !   1 # )(! VÿèïÐ !%)-73#5##53&'#5##5##535335#33535#335¡ArA])'9:'':)c'':)Ð .. Gr 55t*CbTíÇ 7#3#3#535#êthhw‹UUÇ2sA<ÿëÍ273533#3#5##535#367#"''3255'7567#F!!%7%D  ' .¹ : %  MÿêõÏ%+/73533533##5##5#3##"''32655###535#M),++,)    rZ;((¶!m h< G+Dÿô„¾ 7##55#3535#„--¾¶Ê6%%$$\&BÿéôÏ*0673533#&'#5'67#3#3##"''3255#'67&'LGI< ! ' '=~~¥G  J!m¾ +)<4  1 >ÿé„Ï73533#7#"''3255'675#@    ¥**0 G  99;ÿêÏ73#3#'67#53655#535'6†  !Ï- 2 &'NÿèôÒ *.273#53&'3673#53&'#"''3255##535#35#¡?”= %(¦.w  `````Ò  *    5g  'y!0<ÿîõÐ '+/37&'''63#"''3267#'67#3#53535#35#35#Ã: f *0 +v¹(+Ð % 7#0#J@@@/////?ÿéóÏ/3733#3#3##5#535#535#533#3#5##5'67#35#•BB99JJII33>>DžceQ %&/QQÏg J 2 AMÿéòÐ373&'73##5##5#'67&'3#3#"''3267#735#R@B0, r tr €qy¼ ::;;    +0'1EÿðóÅ #73#735#35#3533533#7'6'&'Weeee&;:®— r  Åb:>‰VVVV^   :ÿé’Á7#5##53'>&'*   Áš‰Š›'O0&  ",0 7ÿé¢Ð %+17&''63#3##"''3255#535#'67&'k  !9!! ## I  Ð%J G:# FÿéóÇA7#67&'7''5353573#3#33267#"&55'67#'7367#‡/ X "   #. +Çx9   Á$$4"">% D  ,#!&>8/&>ÿèõÐ 973#5##53'&'''6&'67'7''5'66556žFyD+'! t  $     UÐ )'(  A'+LY  f)"  &!:ÿí£Î  73353353#3#67'5#'655H  MSSH ½,==,=C  @ %"  Eÿí‡Ï73#3#5##53635#5#_//Ï J_È E&++JÿéíÆ =7#5##535#3#67&'#"''3265'67&''67&''67#í~~~g+    "  'ÆÝ ݰ       CÿèñÏ=CI73533#3#5##535#'67'677767&'7&'#"''32657&'''6OBIIIyCBI%0**) %   )=  »)(}    ! -    AÿïòÈ =M73#&''67'67676767'7&''67'67676767'3533#3#535#Rœœ= !  c    ‡D@@M±PDÈI  .   -ADÿè€Ç7#"''3254'7##5€ ÇG#'EÎßyÿêõd 73533##"''3255#'67&'„,-- , P  S?  < ' EÿèóÏ-1573353353#3#535#3533#67&'7&''675#75##5#[%%8H¢G8;<< DH&&;w)'È#**!2=<  aÿéöÏ%+KQ73673#3#&'#'67#5367#7'6'&'367&'#"''3255'67'&'r+6;R#  $ &%a I  0      Ÿ   >     j.        GÿêòÈ '+7#5##5'67&'3#3#535##5##535#ïy: + +D!N„:H F8…aaaÈ&'    ";G G,AÿéŠÏ735#535#53533#3#3##5#AD&! !&IIKÿòòÏ/573533533##5##5##5##535#535#53#3#3#7&'K+'..'+¤{H55-n/66I£x  ¸0 0†!!0 AÿëôÐ *.N7#5##53&'733#3&''67'767#53'3#3#3276767#"&55#'665#ï{F!  * X>> N 4% ¸((  "    $M R1' %)?ÿêõÏ-EK73533#&'#5'67#73533#&'#5'67#3267#"&55#'667&'O    P$     *   : # ³  ,0 '#2* RI! <%"  , <ÿèôÓ 6:73#53&''67&'3#67&'67'5'67#735#™ G A# %S# "Iy/  9  2(TTÓ  & ;   : % 'FÿéöÑ */<BH73#5##53&'33#3#5373&''67&'#3673#"''325''67&'™ Hw?"S6G   g  D  Ñ ), 5*;'#/!#0B  9#Bÿé÷Ï#CI73533##5'67#&'&''6367&'#"''32655'67'&'P@FF& '4g  () )+ , ;   %   '-!!  º-"     )     uÿë÷Ð 17&''6'''633#33#"&''673Î  /   %%  "   Ð%3 )6 - !D 2ÿéñÅ +17=C7'66553'#33#3#"''3255##5##535#&''&'&''&'b ˜qqk‰?:  (%78_-G-,C2 /"[5$ _  Jbbfw+        @ÿë€È73#3#"''32767#535#@>&(  (&,ÈK(H" 0J)5ÿéöÉ$(9=A7#3#67&'#67'5#'66553##"''3255##535#35#쇇=  <   $ggo   PPPPPÉ# ) ("E6 3"`NS  "h ' >ÿïòÏ,<73533#&'#5'67#73533#&'#5'67#3533#3#535#M  O#      N???N±O?¯  A;' %B>#m>ÿçõÐ 37;?7'2'6'&''&'3#32767#"&55#'67#735#35#35#Û >O°O;Ï *+&    ==ÿéÐ#73533#3#3##5#535#535#35#35#B#%%""((#++++¼Y--Y977ÿé¢Ð %+17&''63#3##"''3255#535#'67&'k  !9!! ## I  Ð%J G:# FÿéœÏ#'+73533#3#3##5#535#535#35#33535#335H!!! ## ! - ¸]((]9=@ÿéñÆ%+17=73#3#3#535335#3##'3267#733&''&'''67&'O F< ! ;_ ;;;;Ð      ).b !( y$%tX  BKÿçôÎDJP73533533##5##5##5##567&'7&'#"''3255'67'677'67&'P"+''+"œxe**#   >  '  c »**#  )  "  A   9ÿçòÐ+/37?EK73533533##5##5#333###5#535#535#5335#35#3#'3'667'67&'L"3++3"D;;66CC55((((.|  $E  ¿  ^^  , &UT'  ?ÿø†Ê767'67'6767'6t$   "$¢6  !-'j CÿèöÒ0EKQ7&'#5'63'3#735#3#"''3255'675#73#"''3255'675#&''&'  $, K 9. .wwPP$H !'6QH #6  J Ò  #) 'V   V        9ÿê Ñ .73&'73#3#735##"''3255'7567#53B#!Z JJ##?  *. ;T½ 4^   cÿüÐv73#&''67&'767#53'¡'  !  @*v       jÐ`73#3#3#535#535#la&##)f*##(`FÿêíÐ $(04873#3#&''67#5365#'673#735##5##535#35#d1$&   )-  T==!^^^^^Ð       W5Xii%:@SôÏ%+73673#3#&'#'67#5367#7'6'&'Q>CJ]) #())96{ W  °   0  AÿéŸÏ#73533#3#3##5#535#535#35#35#F && ##&&  ,,,,ºZ,,Z478ÿé‰Ð73#&'#5'67#535'6      Ð,  fa$.&CÿêòÏ+:>B73533#&'#5'67#73533#&'#5'67###'3255##55#35M    O#     F bubbº  /, 0. H]  (u .ÿèóÈ (C_7'66553'#333##"''3255#5357#33##"''3255#53567#'367#"''3255'6757#] žxxfn9;  <<M=D    -KA    *˜4E6 3#`0   :     LÿèëÉ 9=7#5##535#3733#537#3353#3#3##5#'735#535#735#ë{{{+n%"F`!##%%) ,,->>Éá áÅ´ &&    4ÿìóÇ-39I[73#"''3255#'665#'3#"''3255#'667#'6''633#3#53533'33#7'75367žP  \P    c  V  }b\)1 ÇS >'$ &S >'$ !! <,II[ GC@ÿýžÏ #73353353#3##53#3#3#535#53IUDD#X#%\%Â(55(8!AÿéŸÐ+/37''67#53&'73#67&'#"''3255##535#35#‡  (#/   (((((¢    2k )€$66ÿè¢Ç $(7367#533#67#5'275#35#35#75#<11G   ! ! Ÿ  s!|JM@ÿè¤Ï%+73533533#3#535#35#35#35#&'''6B c"!   ±mmBC0  JÿêôÇ#'+/373#3#3#5##535#535#5#735+335#33535#35#Jª6//-t/006a,>11E/t11E//Ç9f g9eee&K7<ÿéÎ7'6'67#d #Î-b !( xEÿÿƒÎ 73#5##5365#5#_Î ¤ ®R22D33iÿõÒb73533#&'#5'67#k(,,  "S 26 qÃ` 73#735#35#qRR,,,,`Z687ÿèôÏ.26O733#3'7#73267#"&55'75#'665533#735#3#3#&''67#5365#Ž??O =,.  #&+ >ggCCw3B8', 6- 5;2Ï      I:/ +QE( #@ÿéõÐ#0@73533#3#3##5#535#535#35#35#7&''63#3##5#535#B  %%%%f  F%%##¼Y--Y97n)&MM&Eÿóòx %73#3#535#&''67&''6R–AK­NA a  xaa   %   ÿêíR#7367&'#"''325'3'67#y  6!   N@9-*R    #$  :1 #FÿæôÊ#/D73#3#5##5##535#3#73#3#'3#7&''63&'767#53&'Q“?H58KA**K((''L**< "+ )'!) 2&1 "3h>Ê ,##- '       .ÿ餯"&,273533533#3#'6553'#335#35#'67&'Y   Q ]77:   /  Š!#  5=^<+f##: >ÿê Ñ(.4:73&'73#3#3##"''3255#535#53&'#367#&'''6I ! %   $ % #  -¹  @  <*\    8ÿëñÑ,048>NTZ7&''33#67327#"''67&'#'65533#3#735#&''33267#"&57&'''6Ô  21     FW<5522  %mz Ñ #  !$-$!  @ 37, / } òÏ,173533#3#3#3#3##5#535#535#53'#535#37#„),,21))11..))1 0)' /¼ : |ïÈ"&73#"''3255##53535#335#3#735#ã  O54##44ÈKa  MaqKK:(77 8ÿéôÏ159>BFL733#673267#"''67&'#7#5'75#53&35#35#675#'3#735#7&'±%%      %+ vU.....MM))|  Ï+ #,   0R&#\!C38š8 Cÿó¾ 7#5##535#35#35#¾ÅË6$Z$]'PŸíÏ73533533##5##5#P&$,,$&Á:ÿéöÐ#'+TZ`735#53533533#3#&'#'67#735#35#5#'67'677767&'7&'#"''3257&'''6C!K!/ $/& '4KKKKKK:    + B z; ;A # " ]           @ÿé’Ð#73533#3#3##5#535#535#35#35#C %%%%¼Y--Y97>ÿî¯Î 8733533#53'&'7'63#3#7'75#535#53&'736_ _` &!!*+3'!!% Î:::1 6   >ÿêòÐIOUek73&'73673#676767&'7&''67'67#676767'7''67'67#&'7&''332767#"&5''6J%  +  ( !C "O L  X$0  ³    *   +   r  + -:ÿé Ñ473533#3#535##5##53#&'#5'67#535'6F%##!S %Z7?  !¾*''   /-?ÿéöÏ#PX\`73533#3#7'5#'67#535#'635#'673533#3#3267#"&55#'67##5##535#35#U   ' P  #   AeeeeeË & "     5d d$6EÿêñÏ&,2:T]7367&''65'367&''657'6''6#5##5367&'#"''325'3'67#½    R   8  P  ¢†N   )  ?:/$%Ï             @00   !  7(  =ÿçôÑ #'+/5;7#5##53&'7'6553'#3#5#3#735#35#35#'67&'ðJE,, # "      eÒq73#3#535#535'635#½// T#--+00q  ..  W ÿéóz.28CPV7&'733533##3#"''3255##5##535#5#53#3&'''67'7&''67&'''6"U:((&H   52E& M::¢s  V  … z   A  -CCHX          9ÿ鉯 73#735#35#35#'67&'CAA   4 Æ£rOM5 Dÿè€Ç7#"''3254'7##5€ ÇG#'EÎßMÿéî)73#7&'7&''735#35#7##53#"''325MI7!  %%%%}$G V*   h3!†˜j BÿèðÒ 6<BHN7##3#"''3265#'67#5#53'735#535#535#673&''&'''67&'ðY o  n  F=_**,9y&(    3-¿+DA* D+  P   B    ;ÿî÷Ñ$7INT\`dh73#'3255#'67#5353635#&'733#"&55#'6553&''67&'#367&'3#53535#35#35#g         Q    g€³)*Ñk $ 4 ?#  #     >       8777&&&&&DÿéôÐ 8@DHLP73#5##53&'3673#'#5##5'67#53&'735'63&'#535#35#35#35#žGyCB6# Z '2;+\ $$6$$6$$6$$Ð "%  Q P  ]..BÿëºÎ(JOU[767&'767#53#"''3267#'&''56&'#3#67'675#535#5'63&''6'&'n ;    %  %%0;)) &9 ' 6 Î,  ; %" DE  !#   =   6ÿè¡Ï973533#3#535##5##53#3#&'#5'67#535'6A&((#R&_>55>&&  $'*   $    +)9ÿêžÏ).4:73#3#3##"''32655#535#53&'#53&'367#'67&'n     !!&     C  Ï F AHj   CÿéôÐ#0Lag73533#3#3##5#535#535#35#35#7&''637&'#"''3255'675#73#"''3255'675#&'Cb  "'      0'     ,  ¼Y--Y97m   *!e )  6ˆ (  7  6ÿèöÐ/6JNSjo73#3#5#53&'3#735#3''67&'67#53667#'#"''3255#'65535#35#'66733267#"&55&7#œM€’N6ll(         l ,   Ð  B) !  4  7Z  )(+! !1Y - @ÿè‘Ð(,073533#3#3#535#535##"''3255##535#35#DO G  #####Á    Hi  *"25ÿèóÏW[_73533533##5##5#35333##35#53353#5##535##5#3#5#'6753353#35#535#535#33535D(9**9(;>>4&%43' #2;;LL;M+++Ä   2 "s"+ 99 * 5!2   KZòÏ&,2:7367&''66'367&''667'6''6#5##5Á   R   :  N  ›€Ï          6&'AÿèôÏ06HY]a73673#3#3#535#'67#'#"''3254'7##5&'333#"&'&'75#7#"''3255##535#35#›,31D  ! L"# %t  """""¼   G#'EÎß 4_ # Q R  i * 6ÿëôÐ!%)-?EK73533#3#535#735#335'&'3#735#35#35#'333#"&''75#'67&'{*,,5z2**z  7ffAAAAAAP& 04 >"  `  6 Ç )  0X> " ! 6c  UB   9ÿîôÏ5Y733#3'67#&''673767#53&'''67&'33533#3#3#3#535#535#535#53k ;2,    D 8L    '55..22>¸B33,,11Ï  / #      9ll  4ÿèœÎ-73#&'#5'67#535'267'5#'655‰ #"    & " Î  )) w6 5 '# " ]õÐ:?EKP73#&''67'767#'6'3#33#3##5#7#537'63'7#35#5#'#3'§@     + oQZRQ    Ð      &    ;ÿê©ÍCIO73533#3#535##5##53#676767'7'#"''3255'67'67&'''6B())"U"(^>55       ! .  Á   $  %     4   MÿéïÏ'-3;?CKO7367&''667367&''66''67'6#5##53#735##5##535#r   N    gQJzggAAb___Ï               6-./-99!CÿêvÄ73#3#"''3267#535#C1    ÄG+M5N$ 5ÿçñÊ -;AEW]73#735#335335367&'''6553#6673#"''3265''673#'37&''66''6Jžž-T   ¨–T  kP9    Ê2E     ) &+B: q k Y)     6ÿé¯Ñ  .;7'67&3#3#735#73#735#'67&7'67&s ' 5;;** ++ ,  . µ 99S #   #  Aÿåõ~#'+1773#3#3#535#535#735#33535#3355#35#'67&'VŠ&&0´0''((9-f((9-000 U ~A    ' $ &       ?ÿæóÌ #7;?CGKOU[73#5'675#'3#5'675#&''&'3#3#3#535#535#735#33535#3355#35#'67&'M!;RL ;^  M  &&3´/$$**<-i**<-...  Z ÌE  E     -@    & " &     ?ÿèôÐ.4HLPTX\`fl73533#3'33#673265#"''67&'#535#7&'3#3#3#535#535#735#33535#3355#35#'67&'I(((0+*   u0(”‡fv)B)6 Á->$5- 'O?A    ' ' '  !   _ÿñÐ~"(,273533#3#&'#5'67#535#35#&'735'6a/00))   ")/ &  u  6  $( 6 4   @UôÑ$+06<UZ733#3##"''327#7#537'673#36'7##3#&'7#7'673#&''67&767_F  E ? . Y 0      ·      #      9ÿéôÈ#:BFJN73#3#5##5##535#3#73#3#'3#3533#&'#5'67#7#5##535#35#35#QšDM;8JD,,J1166O11   +++++++È %33% & <:#w w-.^ÿðЂ#'+573#67&'#"''3255#53635#35#3'67#,"  %8888) ‚9     39  "  ?ÿïóÉ #'+/37;K73#735#33535#3353#735#33535#33573#735#33535#3353533#3#535#Uˆˆ''8(`''8(‚JJ  *  JJ * EEEP´PEÉD(( &F),)F),1 IÿïòÏ,048>FJNR73533533##5##5##3673#'#3#535#35#5#7&'3#53535#35#35#N'.((.'Y$) U11f + © *)     e+*  +,,,BÿëœÎ !%8<@7&'67&'67&'63#735##3267#"&5535335R  #  % ;EE%%     K q<XB%z  Jk & '==&!.Ð       !!   "!        ,+60   !   .ôz 7&''&'''67&'Í  YF  z"   ! ' ®èÁ73#ÐÐÁ%hÙË 735#53#535#-—²´Ÿ—¤cUÓÑ73'67#&'&''6k_*‘ ‡$L     6ÑC3   '0çÏ 733#3#5335#qbbS±J6‰‰Ï!PP=*cÿùñÍ7&'73#5363#3#  M &{A HkkŽŽÍ  \6 ,õÑ 7#5'6#5'67#53533#&D  &u) ,3@E8+&Ñ rZ%a_/ *%%$ #WæË7365#53#3##5#'67#7#34$®!--F (0‹ACœ 11+/ %fÐ 73533#7#"''32655'675#% %§))!" &&óË"'+733##3#5'67#5367#5367#3353535##±y’¡ #4IO?RMSZp{{Ë## ! " L!  : VVVVVÎ " ;        +P  !e %  &6Ê73'65#ÊH9# !/ïÏ%)/3973#3#3#3#535#535#535#535'235#&'735'6Ú (1ddTTUUeÝdWWSSffR]F@@DA" Ï  ?    ?  c    Vÿðò] 73&'73#3673#53&'`7=‰$   ,œ- N† êÈ$(,04733#"''3255##5##53&'767#35#35#35#35#ˆ^   .  H)))Èu **-†  H: ;öÏ*C7'67&''67&''6#5'6733#33#"&''67B$ !M  J y  &i77,-   Ï     !     E4  ' õÑ,CJ73533#3#3#3#"''3267#'67#535#535#73#&''67&''667#100,-0D@   0  !4+,1‘B  &¾ + #0 %($ "=óÑ,?EK767&''6''6367&''657367&''65''67'6| # M#@ l:     )k    $‰  m  Ñ     " 1           !óÏ!7;?73533533##5#5#3#5'675#5373267#"&5536'3#735#?;@@c?Ž;& **ª    s<<¿$$b     KO-|ÿýÍo7#"''3255#'65535#35#Í   &  %%%%oY  ))+wÿýØu73#&''67&'767#53&'¨(   7#u        LóÇ #'+/73#535#535#335#3357#3#3#55#35#5#`a! 266&)l/;;Ç{4T4{!#7r×j 7&'33267#"&5''67&'¢   Vj 2  +%ÿéÛ\73#735##5##535#5––qq”‘‘‘\/ )99  >óÐ 17=AEIM73#53&''367&''667367&''66''67'6'3#3#3#735#L?  ™  °  ›  PAAAAAAÐ  *     0A     2#  ' :ïÇ4h73#67&'#"''32655'67&''67&'#'67#73#67&'#"''32655'67&''67&''67#d*      " $md*     !  $Ç                   GÿéöÎ1V\b73533#3#67&'#"''3255#'655#535#73533#3##"''3255#'655#535#'67&'U   R Wž± G  o#?) $8#s  oB+ (:> 9îÏ)-15973#35335#535#535#533#5##53567335#3#3#735#1$Y!. · 66((&& •eed)*\  2V -  õœ5;AS73533#3#535#73533327#"&55#''67&'765#'67&'3533#67'75#(''/r1(m(     V  B <#%%/:0#‘   :&)      yÔw%73'67#'6673#35#535#53#“4 %   6(Vw  "  ? Oÿé÷Ñ!:>BZ^b73533#67&'7&''275#735#3353533#7&'7&''675#735#335'3533#67'7''675#735#335b677 7I#"6$$6%*  !  Œ"  Á5]88  3ó£+;K73533#'#5'67#73533#&'#5'67#3#5#535#535#53733#3#3##8$!!    \"(       <<88;;&AA??DDœ    # +R    QÿíóË#'+/37;GUb73#3#5##5##535#3#'3#3#'3#3#735#73#735#73#735#3#3#535#&''67&''6`‡;F55F;U!!D""D))J((..',,&--r@H¢G<  `  Ë /!22!/ " *  *  * %,,      ÿèóÐkosw{–73#3#35337#537#535#533#5#3#&'#5'67#535#3#&'73#&'#'67#5367#5'67#535##53'635#3#3#735#67&''66''6G"Z! 2(      J  - 'K0 -F    (099++..  6584$!  Ð  II G%         %BE;  |     GÿçöÐ6Mp„Š•›§73#3#353#5335#535#'63533#&'#5'675##5'67#53533#&#5#&'7#33'735&'753#5#5&''67&'767'6'''6'6'67'533Œ   8:     ^' XN       G Yv   % %m:IAÐ           " , 70!           "   ( ÿêòÏ7&&'#5'6556Ô ""aÏEO$$UN¾¼EA838X ÿéïÐ@E7'23'73673#5##53'3673#3&''67'&&''67#67Õ Lo\3     ¤& 8…  *:(%1 ' !.D!Ð    ()C      '!  ÿêðÑ 06;AGMS7'2'6'&''&'33#"''32765#'65537#37#&''67&'#4'× Np]Q>  0œ "   § "ot ’  m[  Ñ    %@ ! 0?% 0 $  ÿéóÎ#'=OSW]7'23&'73673#53&'35#3353353533##"''32655#'#67&'7&''535357&'â W|h=,(¾&&8((IE E L  * 9999  Î   22 3;? ; I  oÿéîÆ 7'67&'&''67&'76S &)r""')5 8,#B ="Æ 1&'&$8 )$*$ ÿèõÏ 17'67&'&''67&'763#"''3267##5#\)&k $ %",/ >)!L :$fž L)Ï  !     @< $__ ÿîõÏ 48<7'67&'&''67&'76#3276767#"&55#;5#\* &k $ &"-/ D&+@ 8#22&!Q@F2244Ï         ;D  b"" ÿé÷È+=Obv7#53#3&'7'#"''3255##5##5'673&''67'767&''67'76&''67&'767&''67&'76ucÙbC !  EA ! 8     ^    R   _    ¶   „   £             5        ÿéÀÏ73#5#'67#535#533¬G; 40ŒjVÏæVF4(P= ÿéåÍ733533#3#5#'65.JE£|j#Ì<==(lY6# *=VÿèôÒ6:>BFJ735#'6553&'73#3&'73#3#"''3255##5##535#'35#35#33535#335|15;6.5/  -1cc/N/w-B1 2=Z  3 Y   o 3q/SìÏ736533#&''67##5##5&MPT0+//, 7EƱ¿  2%)fÿéòÑ )73#5##53&'33##"''3255#53567#ª:^6V;;  == @Ñ .. C; 7JîÒ.573#67673#5#&''67##5367'67#53&'&'#6ƒa{ $W 7B6a #& E_<",Ò   )  * ` 5ÿéðž 673#7'6'&'&'''63533#3##5#535#'6ŠX!!„p  /"#$IIRRVV1 žC6        \‘Ï73#&'#5'67#535'6ƒ11  )6,9Ï  !'~XëÏ73#"''32765#'67#'6œ@  ) # ÏH *-"  ÿéôk573533#7#5'75#'673533#3##5#535#'6%9w))//66h)%   %%  MôÏ%+>73533#3#535#73533##"''32655#&'3533#67'675#)**1v1)t? ?  }-,,:=-à   = 8    1ÿéõ«+E73533#&'#5'67#'3533#&'#5'67#3533#3##5#535#'6”!%  Z     'IIUUZZ3 ™  (* ! <   1ÿçñI73533#3##5#535#'6U+CCQQ[[9 I  IîÎ!&;7#53#3#''75#53'35#35#35##7&'3#3#"''3267#735#¢'`'/ /9400<</µM8= @ 5;¡-- *  *B  c4#/ cÿèôÈ "7HLPe73#735#33533567&'7&''673267#"&5536#"''3255##535#35#73267#"&5536g„„(a  r    +     l    È7*      4'Z  $o +    = WîÐ!%)GKOS73&'73#3#3#3#5'65#5#3573&'73#3#3#3#5'65#5#35/  ^*M  ^ )Ð    A   \    @   BõÑ"',0Kchy73#3265#"&55'67#536365#335367#335'3#&'#5'67#535'23&''7&'67#53667#74''6767'¢3,    ! ,D)d(!"  ","+.   $ $¯  Ñ B'  B# $ 3     ;   "    QÿéöÏ!%5FJPVns73#3#5367#53&'7365#5#35'33#7'753773#3267#"&5735#'67&''3&''67&''667À'B+F' 9 . M) V  k 12 )%   # ÏUU =  A<7C5  #L           ¡ÖÏ7&'²Ï¦§ÓÑ7&'¸  Ñ `ÿêõÐ "(7#5##53&'73533##"''3255#&'í_3Q[&&  [#  ¶22  C[  V  TÿéˆÐ 73'65'3#v%"Ð…<& "4b†Tÿþ—Ê7&'37'5#p  + Ê 3j  p ÿèói "57&'7&'36533#&''67#73533#&''67#g  z  ²)*, !''n$5+ ' ( % $#i   %""$(&!NÿéòÍ%28>7'673'675#53#3#"''3267#73#"''3257&'''6¨B  g1!   $_  ,  3— 5! &L'J 7L   ^#%'"1 Lÿê²Î.73533#3#3#"''3255##5##535#535#'6e ##&&$ !&&ÊG  2__K[ _ÿéêÇ )7#5#;5#35#'673'67#&êƒKJ "H ' V@ÇLL****#  < Lÿë¿737#"''3255'7567#P@     +¿% O C7Kÿê¦Ï 73'73#3#3##5##535#K# "[ FFFFC  ° U U8&Tÿí“Ð73#3#5##53635#5#q,-Ð I^È E'Ž++Pÿé¢Ï#'+73533#3#3##5#535#535#35#33535#335Q! ""!  (  ¹_++_9=DðÐ,I73533#3#3#3#"''3265#'67#535#535#73#&''67'767#'6(00)).=9  -  !.$$(ŠD    + Ä              KÿìªÐ$*/7#"''3255##5##53537'6'&'&'''¦ & :  E "  Šˆ tŒŒŽžFF7   L"))!.Eÿé¡Ï 073#53635#35#3#3#"''3265#'665#53&'qC """".,    Ï RR +0" 5 $ !" ÿéË #'/373#735#73#735#3#735#33535#3353##53#=#88188Nmm-G-f„„sMË--(J, & '=::ÿè¬Ð/37;L`733#3'67#'655332767#"&55'7533#3#735##"''3255##53&'73673##5#FCCTq0A4 $'ss ``==X   P  Ð L?1 19V     (  4 #>J   GÿëzË73#3#"''32765#535#O&   ËK"WòÎ /73#735#35#3#3##'3255#'67#'67#'67#gxxRRRR)¡hg   %   "Î:$$     tïÍ#'73&'73#3#3#3#5'65#5#35— !c /Í  l &")_ÿêôÇ#'+/373#3#3#5##535#535#5#735+335#33535#35#_•/**)d)**.S%8))<(d))<((Ç9f g9eee&K7Gÿë¨Í/373533533##5##5#3#"''3267#3##5'635#R2   '$  º m+Y F FN(OÿíôÉ'-HNT73#3#3#535#535#'3#3#3#535#535#&'36732767#"&''67''67&'§BGLBG@ *     €  ÉX  4*4" 9   Dÿé¬Ñ"&*.M73533&'73#3#5##5##535#35#33535#3353#3#"''3267#'67#53&'Q"  ($!"!5!'83 % &½  Z X ' )*  "%ÿîîÏ)-159S73#35337#537#537#533#5##53'67335#3#3#735#3#3#3&'73#535#535#1Z1´ 88,,,, J§MGG(#ÕbDDH™dd`))Y 0S  ' G >ôÌ+<M]k7'#"''3255##5##5'6735#53#3&'''7&'767''7&'76&''7'767''7'76®## EB$ :cÜfCD    \    N    ]    ¹ H  9OOLV            ƒ òÐ06:73#3#"''3255#3#3#535#535##53&'#53&'367#35#½-  7, "Ð  x  b//u† 5 o;ôË)>P`o73#3'7&'#"''3255##5##5'6735#'3#3#"''327#735#&''67'77''67'76''67'7'&''67'7Z“@'     ((  "AH>'/  /%,|    >        4    Ë  N EZZZ` 41&3%       LÿéîÏ(.26T\`73353353#3#3#3#3#5'673'7##35#5##"''3255#&'#5'67##5&'7#35#[+'@9<3333<‰   AD*++++z  # B  c   Ê! /     > +  CR%   FÿçöÏ$(=AEKQW]c73533#3#535#3'67#3#3#535#3#3533##"''3255#'3#735#&''67&'7&''&'SGFF=Œ=G  o+D–@2¤¤J7  7C;;MG Z  > F  Ç      -    Dÿè»Ð+/37HZ733#3'7#'65533267#"&55'7533#3#735##"''3255##53'73673##5#w((3 E"%   GGCC##: 1   Ð  L?1 29V     (  7  (>J    ÿçóÏ$7&&'67&'7&''5'6556È" &%SÏHQ&%YP© $ ³+^= 7\8‡$õÏ#736533#3#&''67#5367#'6Ÿ *,  +.   %øÍ&*73#"''#3267#"&5533265#'6#3žE  & 3; (ÍO  \85 ) IûÏRX7"'655677&'7&''73#67&'##"''32655'67&''67&''67#&'9 0"    Em1       "   &  ´,% "#* S   o    !      zòÏ#7335#53533#353#3267#"&55#€//00, )“-::/C  !TöÏ,07=73533#3#535#7'6'6#3#27'63&'#735#2767#7'6533(h-5 (&'#,*œh 2=DD    5 -Ä      &  !  ÿé’}733533##5##5#53#3#3'00C0000|jj"ÿéßÏ7#5##5##535335#33535#35#ßB?SS??SB•??SBB­•@@”""9&&&^%%%ÿíôÏ!%)-7#327267##"&55##53535##5#35335ÒS  2 =Q??==?®ƒ    ' !!8%%%%%%%% ÿèæÓ!%)-73#"''32767#'6##55#'#33535#D› ”  ${po$%%%%$$Ó Ÿ1.k  #r‹/ÿêðÏ +73533#735#33535#3353#3#"''3267#7#&OS¶;;O?Ž;;O?¹áž •-ÁW51.3%âÍ 7'6'&''&'ÐM  5 Í )   cåÏ%77'7&''5633#"''3267#'67#i($   ,5g  #% Ï /   L= $1$ :÷Ñ&7&'3#&'#'67#5367'6767'¨ €8$ +"@$& /F %/4Å  #ÿèôn #*7&'''673&''67&''6367#¯$"`% !1b,. 44+?6% 0 Zn          ÿêõÊ'+/37;?73#3533#3#3##5#535#535#535335#735#33535#33535#335#¼T)//Yffhh]!,,)TAAU@•AAU@}))=)ÊU   21Y IõÑ#*067&'#3##"''3255#535#5'63&'#'67&'ƒ04 0XX   \\4 NP (,f( &Ñ      7    ÿèôÆ#'+17735#53#3#3#535#735#33535#335#35#'67&'4'·(55<â>4!==Q>==Q>(AAA &. )f3# "1YVV[4#+    ÿíîs7#5##53#53535#35#35#í±¸"Û"oooooos,,WW * ) ÿíñÐ#'+/37;?G735333##3#3#535#535#535#535#33535#5#;5##;5#'3353##SMMSSdÝeYYSSggSg:::>,,++,,++rªÑÄ        S??  ;;M ÿíðË #'+/373#3#735#33535#3353#3#735#33535#3353#ÙÙµµ==P?==P?·à൵==P?==P?µÞÞË B( $ #C) # $ ÿéóÐ)Fcimquy73&533&'73#67327#"&''67&'#7&''67'67676767&'7&''67'67676767&'##535#33535#335 s  )"Z     xV %   %  QT)A)e.=?,!!  *J  !  !LP ]!. ÿèóÏ37;EOYaeimq75#535#535#535#53533#33##3#33#"&''673535'&'67&'67&'6#5##535#33535#35#‹ &&,,%%--22* *** ! 6²   *   )   ='=': :#$ t#g   Kw w,HÿêîÌ %+3;?CG73#735#33535#335&'7'6'67&'#5##53#53535#35#35#+««88L8„88L8¡2" !0Ä '.)H #66E7% $5b¶¸"× mmmmmmÌA( #       ((EE  ÿé_È'75#53#3#"''3267#73533#67'75#F5H/8  ;  =`&K@Y ÿéôÀ#73'67#3#33#"&''675#Ó  HUU:2;/ %`À DK#=P0 ÿêõÏ59=73533#33##3#33#"&''675#535#535#535#3535fhhRRUU-#CC  #KKZZHHfz>>>¾$%& :#$ÿçòÏ#'I73533#3#5##535#3#735#33535#3353'67#3#33#"''675#XYYa®`X11D2v11D2¤Î F66"/)u  (^Ä  %% &F+ & %    *Kÿêõ¢73&''67#'6ƒA " !"W6  #¢*"% U  (Yÿéê• 73#5#533533Ö}),lƒr_‰‰PÿññŒ7353#3#3#5#P~juun‚GE20CKÿéï7'6675#53#3#"''32765‹+#™cR  D?-(#Q .Uÿèê‘"7#'67#533#"''32767#'67#'6„!4#Sy$)_   4.$ IU -;&"0&]ÿîôŽ7#3276767#"&55#;5#âq $A28$$&&ŽV/  Š33^ÿêôœ%767#3#3267#"&'#67'7&'^P(%41  2 BŽ  !0.)A `(Iÿèô˜(733#"&55#'6653&''67&'767#Ç! 1  |$# +#, % b˜%  L&    Dÿçî #7#'66553533#"''32765#'67#îz "5   "-&!=1( %G9P/A7Oÿíñ£ )7&''6#3267#"&553#"''326!( &$' 46;/  4$ a   £ "8?  T*Hÿêõ“*7327#"&547#'655''67&'76×OJ    “')),(=>.+ !,P%  Iÿòó¡7&'35#535#53#3#3#—  =K66<”D;;Kª¡  ‘(''(Nÿìö¡(,73#"''3265#3#3267#"&55'6#3re Y@5 #/  914!!¡V8 >#  W %<ÿéò¢*.7533'67#3&''67'&'767#'665535#—= )3!# (" %  X ** !*     1% #D3!Rÿéñ™73533533##5##5#35#35#RGG*GGGG|€ €%%a);ÿìò'737533#7'6773673267#"&5P,7 Y   wp”6I —:  F  Rÿðñ›73533533533##5#3#5#5#REwŠqp##++++FF[m444Oÿêó¥ 7&''6'6'67'66!( (# $ 6' 1 52 *? D= /Z 5;¥%4 Jÿëóž#7'2333"&&#"'663267#53&'Û 6O@ /:2!.-2e;ž$   Eÿðó“ 73#53535#35#35#Ú®SSSSSS“‘‘1OOHÿèôŸ73#3#&''67#5365#'6y`7B>3 /? = =A Ÿ +/)* Nÿèêž 73#"''32765#'6##535#qn   b W=**ž rP ? L.Xÿèí™73#5##5353335# Gg4MggibaO_.9ÿéìž$(73533#"''32767#'6655#7#5##535#P'  2 œ}!!l GZ 4/$¡ ¢ƒrLÿêì£ '73&'73#67&'7&''67'67676NEBžp/,&, >= -" ‹  @   $ Nÿêîž73#3#3##5#'6wlUIIPP ž-‡ Kÿðñ73#3#3#535335#Y=99E¦!?/5[[wPÿïó–7'67#53&3#3#535#¥ * P]v  #g…;FœC7W '  &&Xÿèé”7#"''3255##53#3#735#é  j!MMGG##”—  š«#?Lÿéð£"&*73#"''3255##5'67#53673#35#35#ƒa  P "*[cPPPPff *]     +1Oÿèñ¤(7'673'67#&'673'67#&p ' @$\ Q#;! 9,+)l b(, p  3 % C! <0 Iÿéó£<7367#535#53533#3673#33##"''3255#5357#'67#]. UB''!! (7 'CC  QQ$%S    Yÿéë˜"&*.2733#"''3255##5##53&'767#35#35#35#35#^ƒ:  .,4  c,,>..>,,>..˜  j  $$*‚  @6=ÿìó¡0673533#6767673265#"&''75#'67#7&'O!gF  $% !+' ": 1 j  ‚       d`%!S0 Eÿéó– 73#3#5##535'67#35#7&'OšB>g=( 4AggO!–FQ Q0~!S^ÿèæ¡"(733#"''3255##5335#35#7'6'&'–<  d8&ddddc[  ¡1p  -‡&7b    Cÿèò§5;7&''6767&'&'''6&''673&''6767¿8?#& 8% )L#+" ,* œ   & M   - Oÿêê§$(,047'3533#3#"''3255##5##535#35#33535#335À fCEE>  +(ÿìó¢%+173533#3#535#&'33267#"&57&'''6PBGG@;BI  %l  u  ‹3 0 6   Dÿðó¡)73533#3#535#7&''67&''6T=>>N¯M=  a   4mmu!*Iÿéó™!7#53#33#537#535##53#=#})”WIª*I8Yˆ''[ ED >ÿìõž !'73#'&'&'''6'&''6''6­K …  9 5 J ISžhd  %    7'  Gÿéï 573533533##5##5##5##53673#"''3267#'67#O%)**)% v(=  -9 / "'&,  7 $1 "Gÿéô£!%)-273533#3&''67&'#535#735#33535#33567Z;::8# ) "- ' =;))<(d))<(U “P    /.< Gÿéõ¢"',7333#&''67#535367#'65##67#€;(?0 72 +3: 0[!¢ 5 &)  5  T##Qÿééœ+/7&'3#"''3255#33#&'#5'67#53'3#r  +]   I %%    #Dœ ‘  z   9>Hÿêë•/387#"''3255#'65535#35#7#"''3255#'65535#35#™   €    •” (& (1H-H=” (' )/H-HIÿéõ,73533#&'#5'67#73533#&'#5'67#S   L!    ~ XS +1(c_!-Kÿéìž'+73#3#&''67#535#'67#5##535#f. %"# ž &   *&  Ÿ ygLÿèõ¡673#&'#5'67#535'63567#533##"''3255#Ó 7A.% ," ,=* 8NJ FaGG  J¡   z   Lÿíö£&26:>B73673#&'#3267#"&55#5'67#'&&'#35335#33535#335U7H.# 3  % 1 )q  11 Q1  B  >     -Hÿêë /<@73533#3#3#"''3255##5##535#535#'673#"''325'3#`""((&  &,,€   œ5  !II:J  ›  …sOÿèò— !73#735#33535#335#53##5#'6^„„$$7'^$$7'Y'£%/'"—P/.@<<+Iÿêò£#',73#3##5#5367#536367#33537#33535F+::[ %-'*<*c"54< $£ U"" U)2# Xÿêð "*.273#327#"'#7'56&5#5##535#35#Ø?7 :1! Kw[[[[[    (  J  =RR* Mÿèî #'+73&'73#3#3#3##5'65#5#35#s%45....6t@+++++    o  )+Mÿêò™&,07#"''3254'7##533##"''3255###535#‹ Bc   F:%™0  1ž¯†  ƒJ W8'Hÿèô 5<73#&'#5'67#535'23673#&''67&'67#67#Ó E3# )% "4E6=K4[$7 , )X-     \       Bÿè÷¡ +177&''6'3#3#"''3267#'655#53&'&'&'Á  >  4*   $\ ¡ ) T1;$ &7" O  "Hÿêô–?73#67&'#"''32654''67&'''67'767&''67#Yˆ:      - 0"    )5– .3       Dÿèõ¡ 57#5'6733#5367#3#3#&''67#5365#'6o -MwH8D'5- #! ' $ /4¡‡i %$ '   @ÿçñ£(73#3655335#535#53#&''67#56} #.281 930-š  NN e!(&^Qÿêì™"&73#"''3255##535335#35#3#735#Ù  u4L""RR00™BU  >[mB" 00/1MÿéðŸ'+733533##5##5#533533#3#5##535#35#q6""6##$HGG;a7H#aaŸ2L ME Dÿíô¢$*:73533#3673#&''677#53655#&'3533#3#535#S;FF  !?0 =1  1=;8;;L«L8•     TIÿèõ¡*0>73#353#'67#5335#53673'67#'6'&'&''66ˆ"  !/ 01# I g  ¡ B3C  C3B (  5+# -Cÿìö 17=CS73533#3#3##5#535#535#73#"''3267#'667#&'&'''6733267#"&5Q RI       N x $"– C,$ N     %  Iÿéóš %+73#735#3353353#''67&'&'''6W)? \   3" šB 7ic       Dÿéõ¢#'-39?73'#"''3255##5'63&'35#35#'&'7'6&'''6”9  S LA SSSS’  =¢ -G  !X. *x    ?ÿéñ® #+/7&''63#'66553&'3535#5##535#“$, ,%&5 6s ;aaaKKK®   D) 9  %: ;#=ÿèó£%8NT73#"''3255#'67#5353635#4'733#"&55#'6553&''67&'767#4'm   %  %%u  H     5,£  31*F P6  )(    K&        :ÿìô¦#'+0A73#3267#"&55'67#536365#33537#335''6767&'~W= #7 =4#,-@+k'+>0¦ X4  (&%X - 6 4  Rÿéì¤%-159=77&'7''563#"''3267#'67##5##535#33535#35#„   )T  ! Ki++=,i++=,,¤#   <2 , "D^ ^"2Jÿéô¡473#35335#535#53#3&''67&'767#535#56ƒ  ),!!!3>6# .$&  j;;žKKU      O9ÿéó¦1A733#3'67#673267#"&55'75#'66553353#3#3#5#MMZ C7  ' $ 2r_oo`s¦     :/%  Bj  Dÿèò§"&,273673#33#535367#5#3535#5#'67&'QA@D;®0>y[[[[[[[  U™ ``%        Cÿíõ±,04873#&'#6732767#"&55'67#53635#35#35#ŠD (0" "( . 9( &%YYYYYY± ^        ^ % & % ?ÿéô¥#'+A7&''3#3#3#3##5'65#5#35#'3&''67&'767#ÌA"M)Z4     !¥   n #&*i3$#  Aÿéó 06<73#3#535#5#35#3353353#3##"''3255#&'''6Ož3*)1Z&&n||¨M  I| S11!,     8ÿèö£ *J73#3#"''32767#'667#53&'73#'63#3#&''67#5365#'6s%$   " E=D 0%     #  £  V 1A$1>   !$%    Eÿéõ/37;?EK73#676767&'7&'#"''3255'67'67#735#33535#335&'''6XŒK  !%)"     +));+f));+ O  K       ,+_   @ÿëö¤"/5FLR73533#&''655#&''6'&''6&'33267#"&57&'''6N@II< 96 J@{   ]  A$ h  u˜ &#&     , ) &  Dÿêõ£ *D7&''6'&''6''6#5'6733#33#"&''673Ð  3   %   X%%  !  £   &   *"bK" 8Gÿæõœ #06<B73#5'675#73#5'675#&'7&'&''6'67'67'6QE4JG68 V &0 .-# 5 %"7(7 1D.X UœA D    #        % Cÿèò§'+/73#3#53'#53&'367#3#3##5#535#735#35#›F$3ª,B"/+‰=PPLL9cccc§ '(B  ) $ Cÿéô¦&+/@FK73'67#&'&''673&'67#3#3##"''3255#'67'f'/ (   T5  =&?CC(‘@   ?  c 0¦ +    ?% &( %   Lÿèç¤"DQ736533#"''32765#'67#73#735##"''3255#&''67##537&''6O$  [==+  .   )A   "–-" 8:P ;  Td *    ;ÿéñœ *06<B7'6553'#33#3#"''3255##5##535#&'7&'&''&'e”ookˆ>9 '"48"  ?   *  n#7) *2J. J 6KKP`        Bÿèò®#'+/IO735333##3#535#5#5;5#33535#33535#3353673#&''67&'67#67#T;@@E—?;((;-h((;-l,,?2‘2f!4 # 3$ $] ;£  (( 9 %    Fÿèô¢,0473533533##5##5#3#3#&''67#5367#735#35#M*+**+* ˆ>QE/95 )6B7dddd“ C  * " Lÿéö§06FLR7367#'6733#535#535#'#"''3254'7##5&''33267#"&57&'''6Ž+"  * ZHCCH  r     K  R  t    G 6+ /£²p    "Gÿçôš%+EL7#5##5##5##53'65'3'65&''&'3673#&''67'67#367è" !iPe F 35c,  (;))*? šA22AA22A         Fÿæð£#'+/5;73533533#3#3#535#535#35#35#33535#335'67&'U $((0L=Š:D( 4$$&&9*c&&9*R ! T ” II I (    >ÿêö§28<@FL73673#67&'##"''3255#5'67&'767#3&'#35#35#'67&'Q;D2   2   2  /.= SSSS  t–   5  3    , ' !    Jÿéô¡3U73&''67&''667#'##'32654'7##53#3#3#3#535#535#'6735#¤3   '  RA##-r2 ¡     & )ž¯C   Eÿéï©'-3;S7367&''66'367&''667'6''6#5##53533#"''3267#'67#Á     S     : P  ‡.D  1> 2,©    7##&0 /  Nÿéêž  $8<A7##535#35#7#"''3255#535#5##"''3255#'65535#35#’2 Š   5####   )((((žCrµ % (Ÿ YC % F  "! $ Dÿèõ¨'Mc76767&'33#"&55#'6553&'33#3#"''327#735#5'67'767#67#53&''67'®        2OF,0  2 )   3M 8L  ¨    ! 3+!0  s    Aÿèò  #'+/73#735#73#735#3#3##5#535#735#33535#335NEE##@DD##\?QQMM;))<-i))<- ..(G  + ) Oÿéîœ %73#735#3#735#'3#735#3353#5#533_}}YY6GG!!kGG!!2.‚/œ/)55*$7 -Dÿëô¦/3E7&'35#535#53#3#3#'35#53#3#7'675#73#67''67&'š(6Bf8 3==     ¦ C++Cb--,  37  Nÿèëž  $(,07##535#35#7#"''3255#535#5##55#35’2 ‹  6$$$$ G5##žCs¶ % (  ZC % OO  Hÿéô© $*26:7&'#5'63'3#735#&'735'6#5##535#35#ž  , G 2 .D‹‹++  6*  #ZZZZZ©     #6    (GG # 9ÿéö°"37;?EK[a7&'#5'6&'3#"''325'#"''3255##55#3573#&'''6733267#"&57&'  &) M 5EU  3   +=++  7 ! ! * q  °     ? :; L 6      =ÿèô£*1:>O7'673353353#73##&''67&''667#'#5'673#67'5#'655^    CU"    r #::8  £'55'5A* #:"qT  -  0  >ÿëõ§"(.4D73'73#3#53&'#3373#735#35#&'''67&''33265#"&5S?B*£(.)]‚‚\\\\6A Œ ` * ™ *B( #         =ÿèô¦ !%;A73#53&'3#5##5'6553'#335#73#3##5#535#536'&'ËNR4 Ce$#. ¦ D Y6<=?.b)I// Iÿèñ¡#+/37;73#3#5##5##535#3#'3#3#'3##5##535#33535#35#Q˜BJ8:LD_''M''M&&L&&‚n//A-n//A--¡ )11+ "  SV ,Hÿèí©=AEIM733533##5##5#53#"''3255#7&'7&''675##535#53#'35#33535#335r-))-**{   7 '/4F8†;9&&9)b&&9)©  n4   9I DD 4 % Rÿé÷£,5;AGM73#35#535#53#56367'733265#"&'367''&'7&'&''&'Š --i//0C!!  s 9  E 0 £   JEQNY*$ *6MW          <ÿèô©!'048@D733#&'#'67#'655'667#3'73#3#3##5##535#|T$  %   TI5:„ ppppsOOO©   2(9' /  ,, ;ÿèó›!%8NTZ73533533#3#'6553'#335#35#733#"&55#'6553&''67&'767#'67&'b   G T002  f   D       0; +  i )2K2#R Y$    J&    -  ;ÿèô¢59=FL7#5##5367#'673'3533#3#&'#5'67#535#35#3353'>&'ë( („     98   oSDCR    !9  269; "5  >ÿéø¯#)AEIM73#&'#5'67#53635#35#35#3&'#"''325##5##5##535#335335€R8)' [ 05'jjjjjj3\   ,¯M M -.  B :ÿèö¦Ed73673267#"&5733'67#3#33#"&''6735#53'767#3#3#&''67#535#'6L  MQ       &. ;E-    ¦     *  &  9P  .    @ÿéó®6BFJV73&'73673#3#3#&'#67'5'67#5367#5365#3&'73&'#35#3567&'M(!(H@BT* `  '1=25@0 MMM +ž   0  J A     Aÿêô¡!%CIO733#5'6367#35#33535#33573#3#3##5#535#535#536'&''6aI  )  P!$$""* !  #,.¡ TJ ,3]**  ‚ Dÿèð® 159J73#&'#'6#'673#&#67'7&''535357##53#"''325b, j   /64  """T"F ®       P#   €z‹^ ?ÿéõ¦ ).8<P73353353#''6'673#&''665&767#'#5'673##53#3#3#535#53p@  m &    n $66AD›** -5 7 -6  & nS  9ÿêó $@P7#'6553#&'#5'67#535'6#5'67#535'673#&3#53533533ïŒO    N     *<—0784 *6G  4    +&&3 ?ÿéò§#BFJN73#3#5##5##535#3#73#3#73#3&'73#3#3#3##5'65#5#35#T‘?L::L@ --M,,M--N++K)AA9999C† A11111§ /!(("0     <    4ÿéö«=AEKQ7'6733#536735#35#35#'3533#3#&'#5'67#535#35#335'67&'µ  &M$,,,,,,k   1  -    ii 2 *,h9 <; 9:Z  :ÿéô§48<@DJP73533#3#3#535#535#'3#&'#5'675#535'63#735#35#35#&'''6‡)++%%2q-!!)    +^^::::::-  œ     \R $DR:     œÿèô—7#5##537#53#3'66&'ê%Q!  r]NL[2* &  5ÿéô¬!%IOU[a733#5'667#35#33535#33573673#3#3##5#535#535#53&'&'''67&''4'_$L ,)   "$$"""  @  = ¬ [Q  &:_ 44 ‚ Dÿêð¤ %+17PV73#735#35#35#73#735#35#35#'67'67&''&'3673#&''67&'7#67#RCC%%%%%%ACC%%%%%%M  Y  ) G 73d# 0 ": )(] 7¤O7  8O7             Hÿé÷«.4:FLRXh7'2#"''32654'7##53#3#535#536'&''&'3#535#535#&'7&'''6733267#"&5ã '9.1  )2t0&@ _bPPPM( ;  V    «1 4©¸   77 /        AÿèðŸ =AEI73#735#35#35#73#735#35#35#3'73#3#3#3##5'65#5#5#SCC######?CC######N'985566B„ A/////ŸN7  8N7    6    Cÿèò© 37;?IMQcgk7&'67&'673&'73#3#3#3##5'6#35#35#'&'63#735##3267#"&5535335R %  H= %  ?HH((?B  $ ©       y +.„   *' #/   @ =ÿèôª#'+[_cgm73&'73#3#3#3##5'65#5#35#'3533533##3#3#3#'67#535#535#535#5#5#35#335&'´>  p ""), "  &6 !  ª   …0+.x*    * 1 P  œÿêó %73#3#5367#35#35#35#'67&'ŸS  G!&&&&&&  (  pp 310#    Dÿéö­ %@DHLPV\bhnt—£73#53&'''67'6727767&'7''67'6727767''3#3#3#735#'&''&'7&''&'''67'6#"''3255#&''67##537&''6:    ~    ]222200   ’  ‚  v  , 8 *E  ­ '                      ?  0    DP     ò´%76767&'3'67#&'” PcY) ?D´   1n (+ X  ÿçéŠ)733#"&55#'66567#53&''67&'¯-0 4/(‹¥  !(1E5%!Š% d    ÿîðŒ 73#3#735#3673#53&'WVV'››uu 3  Aà> ŒA4  "ÿèÞÐ 73#5##53635#35#mf”? 4””””Ð ÆÅ]:‹> ÿçõt!73673#&'#'67#3533##5#R s?* 4 )7 +>(====Y   !"($$ÿéód #7'6'&'3533##5#7&'''6Õ$"”gjjgŽ%$#$0 &(d   :JJ8   ÿéëf #'+73#5##53635#35#73#5##53635#35#86>>>>>†6>>>>>f i i 0:K i i 0:JÿêªÐ)-173#3#3#"''3267#'67#53&'7#53635#35#w" ,&     # "''''ÐP  6 (4 P )0 ÿçòÏ).7533'67#3&''67&'#535#'665567{U =G+ 5" 3 0# 9F B! ¯  00#  &0I;. + SV! ÿí‚Ï-59=A733#3'7#73265#"&55'75#'65537'7535#35#75#;//6 &     &8U $$$$$$Ï     [13eUGU & ) OîÅ73#3##"''3255#535##¼Raa  ggVÅ   QîÅ7#53#&'#5'6xU¼O =+ ,/(0G² ;C ?êÄ!73#3#"''3267##5#735#3355# ¾Vb MV IThCW9Ä6%++48 MóÒ7&'73#536'67&'E   6Ë~S4 +o&& &&Ò  1   BîÐ 7#535#53533#3#67'7&''6XGdRRSSe~>3  FU~   =óÓ47&'67327#"&''67&''7&''7&'37š  _d   %:0 F ^XA?c`Ó  0            UîÏ 73#'6'3#'3#7&'šJQ=0–Ï # -5zpc& JõÏ7&'#5'63&'3#735#}54 &d PN+››wwÏ!    6;óÒ-37&'3533#67&'#"''3255'675#&'­ Œabb  /.   )18*a Ò       &'    BáÌ!%)7#"''3255#'65535#35#'##535#35#á  CAAAA&<))))Ìn   &:&71i u+F*òÏ#)/5;735333##3#535#535#535#33535'67&''&''&'*KLLb×aMMggK_888•·  (  # à      >        %ôÓ &*9?C7&''637#53&'733#3#535#35#5#"&55#'67#75#335#€09 8;%= C;Ž m796TB¹ºÎ;"0 ,j&%$%Ð    ]C $ # =a     ÿçñÏ#)/733#33#53537#535#35#35#35#'67&'{X[F#â&?^aBsssssss* %a%% %&ÏxxA,+#  2ÿéÏa 7#5##535#35#35#Ïwwwwwwwax x ) ,ÿéñw $7'67#7&''6'&''6u b- "F   o Z sg , ! ÿéîÑ048<73673#3#3#3#5##5'67#537#537#53&'35#35#35#[ ,  8f\c~ˆzm);H=DU;mmmmmmÑ  pX  Ž * ) ^ôÐ!&,2733#3##5#5373&''67&'#367'67&':**72/)L]    § N  Ð 22    %    VˆÊ"73#3#327#"&'#67'735#'#g$%! $ CC Ê.  K-ÿéðÐ/37;A73#3#3#3#3##5#535#53&'#535#535#53635#33533567#boVMMg5.T^^__S-4fLLT8*''9%'2GÐ8      8 0u  ÿéóÏ%*.26<B733#3#5##533#&'#5##5'67#3&'35#35#35#7&'''6j\\o³V: C"Dx  C=_)xxxxxx{ u !Ï )(& ]]"// & & s   ÿéÑ#'+/73533#3#535##5##53##5##55#3535#///(d)/nJ;;M;L;;;;;Ä   ($% k l  ( Oÿë¢Ë73533#3#&''67#53655#` ¡**' ( (7$QÿéïÊ ?CG7'6553'#33#3#"''3255#7&'7&''75##535#535#'235#335z]] -**3  "  1**1+˜0D4 4?]2"+> ,AO+ 7Yÿè¯Ç $(7367#533#67#5'275#35#35#75#[',A   Ÿ s!|JNƒË` 73#735#35#ƒHH""""`Z68"mßÌ 73#735#35#35#73#735#35#35#"UU//////TVV//////Ì_C & & D_C & & VÿéóÏ>BFLRX7''67'6767767&'73#3#"''3255##5##535#53635#35#'67&''4'“    >!   ((((S 5e-*8n V=  )VVEUV .4Y# ZÿçóÑ#)/M73#3#5##53&'#53635#35#35#&'''63#3#"''3267#'667#53'ŽF3>k>+ MMMMMM; "  (BZM ?# )@ÑQ  Q ! 1   "   ÿéñf#9=AEJ73733#33#53537#35#35#35#35#'7537#53733#36'35#35#35#5#6‚.'*%o+22222222$57+.'*%H22222222X II K  E2 kÿïÛ3:>BG7367#533#673#&''67''67#5'75#67#35#35#675#l2     J 7 ^  . !   K(- ÿéíÆ*733'67##"''32655'67#53&'767#*¶*#G ? %F G"\j% “Æ &h W>&)7  ÿééÌ):NR733'67##"''3255#'67#53&'767##"''3255##5'673&'7&'#735#*©J  8   '; 3!NZ  й   0 B  ^::Ì     _Z  C`r9  ,ÿéóÏ73#3#&''67#5367#'6L ŠQ`[K G W T X]0$Ï;>2#!1  %ÿéó† 73#3#&''667#5365#'6GˆLcWB ET %* \b4 †   ,)  KéÏ73533#3#3##5#535#535#YZZOO__]]OOY¾S œÏ73767'5'7k  Ï:Y  cfÿéöÏ)7367&'#"''325'&'3'67#¥   & 3  !Ï?$ --$0N  » 5L&:eÿïõÐ 7&''63#3#535#¦$ "# +e(;‰8'Ð **- (7NN ÿéõÐ048<BF73533533#3#&'#3#5##5'67#5'67#535#35#35#35#&'#35#%c$$+3 c n^ &  %81%8ccccccn I ^^à F ;& F * ) 4 BLQñÏ"&+7533'7#3&''67&'#'65535#67Ÿ=(*  "$  %%  ¿      #"%$  \éÐ &73#53635#35#'3#3#7'75#535#¦3i CCCCyY#!!%*3(!!#Ð\\-8= NóÏ/37;?73##5#'66556#3533#3#3##5#535#535#35#33535#335ç *L 3´044,,))33,,0-G-Ï@@- $ 9   9   Nÿé¦Ï,73533#3#3#3#"''3265#'675#535#535#]$&   µ@ '464ÿéõ¨+?C73533#&'#5'67#'3533#&'#5'67#3#3#5##5'67#35#”!%  Z     ·m qe #01ee™ '& !  8E3< P‡Ð 73533#3#535#'6553'35335211)e*2  dRÇ   Q /!VÿèôÉ!%6:>7#3#67&'#7'5#'6553##"''3255##535#35#íqv6  2  ZZ_  AAAAAÉ#  ) ("F6 7?aNS  "h ' _ÿéòÍ!77&'7#3#3#535#'&''63533#&'#5'67#v ‚H??HZ--: #  ?=3"  4Í  1qB   0 86ˆ Êb 73#735#35#ˆBBbW35-ÿéõ³8LP73#&'#5'67#535'673#&'#5'67#535'63#3#5##5'67#35#†   %({#     (‹½t vi  !/1ii³#"    !"   e?0 6Wÿè¨Ï -73#53&'3#735#37#"''3255'7567#‚G@@C   +Ï  330  Oÿê©Ð 073#53635#35#3&'73#3#"''3267#'67#xD####+$    ÐPP *06 9 !)6 ÿíÔL73#3#5##5'67#35#+©i }v *$ vvL>-6ÿëÍH73#3#5##5'67#35#9‹Y wj %jjH<. 6]¤ñÒ73533533##5##5#]!,##,!Â[ÿéôÐEJ[ag73533533##5##5#&'#5'67&'767&'767#'6733&'73'673##"''3255#'67&'b $%%$ x   B     # 3+ iu0   2 \à  H        ! H- *  gÿçòË +159=AGM7#3#3#535#35#5#73&''67&'#37673#735#35#35#'67&'«H!!7B    quuOOOOOO  DË ) a & & M     S[@ ! !     ÿé÷Ñ&=Ryƒ7''67'763533#&'#5'67#73533#&'#5'67#''67&'763673#&'#3#5##5'67#5'67#3&'#35#”      z             wRt7$ S um %  );B` 6 mmÑ       '&   )-    2  <-   JXÿèóÎ%+1bhn7367&''66'367&''667'6''6#5#676767'7'#"''3255'67'67##5&'''6È    J   4H‹D  $    " %l = Î      :(    %   )a    SÿéòÏ159=AGMShn73533533##5##5#3533&'73#3#5##5##535#5#'#35#'35'&'&''673533##"''3255#&']"'&&'"#.  1*).X*)L    L  L À    D E "  E     *' %    SÿéôÈ#:BFJN73#3#5##5##535#3#'3#3#73#3533#&'#5'67#7#5##535#35#35#e†9B0/A;T""A""%%D''^    """""""È -66+ &   :5(w w-. ÿéóÁ 73#3##"''3255#&'''6%¶¶Úb   d¢$#_#Á-l  i$(+$ 5%8ÿë¾Ð73&'73&'#5'67#G+ ' 9$N²  gf B ÿèöÐ/4EKQ733&'33&'#5'67#&'&''67673##"''3255#&'''6=4h%E  {L)   y ¯Æ[   X" U + %Ð. #:  <    p/ , TñÓ 73#53&'3#735#3#735#‡bãhK²²ŒŒ__;;Ó "V4$  SìÑ#):E73#3#3#67'35375#535#'6''6##53#"''325'#5'6^:!%%""03((   ²=   ¢ Ñ  #"+   ^pQ 8 ;)Jÿé Í!'<7#53533#&'#5'67&'7'6&'3533#&''65#g!     ?  7""   "ˆ55  # P `     !ÿéäÒ&7#"''3255#67&'7&''67##537ä  L (-<U¬¥  ;"  $+  #<°Ã& ÿéèÎ59=73#3#"''3255#67&'7&''275##535#535'235#335Õ '/JJ_  K  0?FZJJ(.^866J6Î>N  7  Ug>LÿçíÒ $K73&'73#&''67'763353##"''32655#67&'7''67##537b `Û—  # & x’·Å  \   .37U»       11CJ 3   Qc ÿéòÐ *T[7'#5'63&'3&'&'''7&'763353#3#"''3255#&''67##5367#67'7#~/4  O(:%" %?4   &n‡Qd   . +/ +JE9  Ð    !    ((:: $   >P5  ÿéõÐ7'673#&'#5'67#53uUhW *.fYA>#9 7"Vf± .B!'?y}C'$@ÿèçQ7#533#"''3267#7#'6Y0 <  @ .G ?@2 H ÿèñË.2673#33##&'#5'67#535#535#535#535'235#35#Ô UddO:!3 8&!: 3!>RddRRaaKX <<<<Ë!! #AA!c1PñÑ 73&'73#3#735#3#735#fe⬬‡‡bb>>à X: $ kÿéïÐ #'+7'2'6'&''&'#5##535#35#'3#å 3J=5 *    €444448Ð /0OA~dÿéôÏ%=EIM73673'73#3267#"&55#'67#36732767#"'&5#5##535#35#h- +    )  %2+ 08 " 2- xPPPPP·       -   T T+ ÿèñF7#3#&'#5'67#535'6² %dH", 9&$6 $%Db QF   )+  ÿèˆÏ773533#3#535##5##53#3#&'#5'67#535'6 255,j*2vPFFK&11  .2!0À* "  $( Rÿì÷Ï%+;A73533#3#535#35#33535#335&'#'6733267#"&57&'e9@@7}49""4%Y""4%0  6   #b ¾VV54&   0 6 Xÿè÷Ñ#)/573#67'6775#53635#35#&'''6'67'6›@6 "@  2%UUUUWF \ +N R8 1` bÑ L" ! ,L (+"   &  ( 0ÿéõ¦,H73533#&'#5'67#73533#&'#5'67#3#&'#5'67#535'2=   W!%    C 'SE031 18ÿèö| 73653333267##"&547#'67##AK   6 LF =W2"  )?0ÿçát736533#"''32765#'667#Mc P. +"JZ  S 4&#ÿêË|73'67#&''6g \#~ tU    1|M?    ! ÿèáu73#3#"''3267#735##¯—© ¬ ”›u8':ÿñï™ 7'67&'3#3#535#c / 2V*$")l»TcØaS™ 788ÿêï|!73533533#3##5#'67#535#5#/?00<<A , ! 7:/‚?d 66  ÿïô…&733#353#5#3267#"&55#5335#53scc99 )  4%J6]]…, ;  2 ,ÿéõx73673#&''67#7&'_h`N M 3& GY S19*37 ÿêér'767'5'75373#"''32765#'667#q," "%5m  (X0  :%"`  >1. **ÿéá|73#3#3##5'6U€xnnoo'|  h-ÿéÓk 7#5##535#35#35#Ó~~~~~~~k‚ ‚$43ÿèðw!7'6333"&&#"'663367#53'Õ YgjK:1B,A@ 1-ŠSw   ÿíõ‚)-73#"''3265#3#32767#"&55'635C „ i_4JS@ !L‚F06  E!ÿêéz9736533#"''32767#'67#&''67'67676767&'8   &! %- )c [5*,>& # /"ÿèèw'73#3#"''3255#&''67##5365#Ô^Z  I% " 1BZcw R  <Yj ÿèôt 7&'67&'7''5'6556Ä  - 4   )#XtC#PU    `*%!/ ÿéä„7335#53353353#5#353#5# BO;;;F°4/;7$11%?;+G ÿçæƒ'73'67'56767657#"''3255##5bL 3  +' $%„  2]$: R 6 2P  8s†ÿîï†73533#3#535#3533#3#535#&RRRbÙdRTXXdÝfTt=ÿèï„ 7'673#3#353#5#5335#535J  †Occ:;ff` ); 1)-<Û…7&''6767&'°BJ(*-s #ÿéí"73533#3#535#'6#5##535#E*OO_Ûh7 ž………‡  BF G* ÿéó~ $)-733##3#5##5'67#5367#537#3353535#/£!!{’y !"?D(;X\anyy~; -   O ÿèò–9737#535#53533#3673#33##"''3255#5357#'67#*=lX1100/K8SS ^^%=(- M       #ÿêá#73533#3##5#535#735#33535#35#2CIIXXRRC00D6ˆ>>RDD~599[ÿéæ%)7#53#3#"''3255#&''67##53'35#w>=]  N  =W(ggL55=  '  CUÿéÝ)73'67#'63#35#535#53#5##56hP  K" 3 '<<’<<>R’,  b \ ÿçä‰ '7'6553'#3335#53353353#353#5#6½——‘7@-.A8•W/+ $*H2"L!%%!1 ÿèî˜17735#53533#3'67#&'3&'736533#'67#&'`TTUU`  º> 60 $biWF\Ž(" 'e    '  ÿèæ€"&73#"''3255##53535#335#3#735#Ì   ©\&nHH66nnJJ€8G  2O`88(  )- ÿéñ†+173533#3#535#'&'&'3533#3#535#''6Y8;;J£F8) G=@@MªJ= t    ' "ÿèí‰!9?733#&'#5'67#537'6'&'3673#&''67'7#367u[H2;$, '#CV=  _*Mw4C )#%D / 2=X+‰      O     ÿéå‰ $(>73#"''3255#'67#5353635#35#35#73#3#"''3267#735#I(   5 *@999999TV>H J ;C‰|   Q$ ' & F51 5 ÿçó‹%+1773673#3#3#535#535#53&''67&'7&''&'U ( 6ZPPeÞdOOZ6  H  ]  ‰  e    ,NÍŽ 7'2'6'&''&'Á ?ZKE 3  %  Ž       ÿéõ‡'+@FL73&''67&''667#'#5'673#73533##"''3255#'67&'ˆK&   - 9 ]  !977   9 Z‡   qX b&       ÿçö@F767'7&''5'665567&'57'7''5#'66556&'n    3Š       8L  \ g-$ #+%&+#J_  l-& $+& "ÿçìœ#)/73733#33#53537#35#35#35#35#'67&'%QNQJ×CNzzzzzzzz& "c& $‰ VV !     ÿçñ’#'+17=73#3#3#"''3&'73267#5363535'67&''&'sMޱ±«   ª@0zzz c    ’ ; ( h G     ÿæõš-159=AEL735333##3#3#''27'7#537#535#5#5;5#33535#33535#33567#)KQQZo„1 M Y%N."42C:TK99K?Š99K?‘@@RFA KŒ$   $0 ;ÿèî‹'+/3B776553'67'56'3#7#5'275#35#35#75#7##53##'265¤ )  yW  ¨9  ‹L>>-e^!g<?FŠ›_ iÿæõ{!%73#3267#"&55#'67#735#35#35#yg   ( "CCCCCC{a  % C) ' ÿèó‰,0AGM73'67#'6'3533#3#535#3&''667'3#3##"''3255#'67&'¡@ 3…333,i+3™% &Žbb v1  3  S ‰   +!        ÿéö“3V73&''67&''667#'#"''3254'7##53#3#3#3#535#535#'6735#‡M!+"$#   ='   bV"6633A•A,,& !“    & (ž>       ÿçöy!%<73#3267#"&55#'67#735#35#35#'3#3#67'675375#zf    . '@@@@@@x^" ,5*y` # C & % A$ GDUrìž73533#3#535#-GPPdØ`G‘   ÿèõ–(1:@FL73#35#535#53#56&'733267#"'367'7367'7&'&'7&'l &??•DDFX¹,   ¡$T'& N _ –   C=I   & YGRH R      ÿçô”'+/GM7#5373#3#3#"''3267#'667#5375#3573#&''67&''667#\bh733#33#"''3255#67&'7&''67##535335#&''67#'3#&'#5'67#535'2'6'&'Ÿ88/   .   #B  & ""   &*!  4  •  7= (  BR77(    0+  ;B)   ZìÏ73#767#53&''67&''3#M: Rj  XÏuR     #^…Aí‡735#53533#3##5#'00##&&*j   ÿéòÑ'73##"''32655#'6'3##5#'6™N   ZB'  Ñ ‹(+>««()ÿèæ…!73#"''32765#'67#'67#'6K  JH"@< $…d&BD3.91% 'ÿéò}"7#5##53'66533267#"&5Ìs?/84(   + }gUTf.2 ('$* &ÿéçˆ733#3#5##5335#ijjZ‰C/‰‰ˆ^ ^@-&ÿçÜ} 7#53#5##575#'#3355#:¶>R><<<pp44: ÿéàŒ 7#5##535335#33535#335à˜UUAAUC˜AAUCqˆˆ4!!!T!!!!ÿéã‚ !7#5##535#67#53''67&'ã››› _w 2% ‚™ ™~l(   ÿóï 73&'73#&'73#536!WVÅ-  y @܆g    ! ÿìò(,73#"''3265#'6#32767#"&5535>‘  ˆ u[2E  R?GM2:  Vÿèã€73#"''3255#3##53#=#'¼  ¨™™)uM€}  fK DC  ÿéñˆ %7#5'673533##"''3255#&'E  !1^##  ^$  ˆ rW R  M   ÿéó‡73533#&'3##5#535'67#\[G!4 :$4455(4 3"Hn)7<##95*ÿðî} 7#55#353#Ο‹ww§ÛÛ}gg*?ÿæéˆ#)7#'676753673#"''3267##5'6'35b2 &!+"(,] H!? : =1 !*KJ%*  ÿéè"&73#3#"''3267##5'67#735#33535#&¶P\ E!@ ?H ORf<“C?8/G?%8=ÿéë†73#3#3##5#'6J–xhhqq(†'v ÿèõ‡1673673&''67&'67#67#7#53&''67&67# 0     "O b  ! " /l 4     " "3     ÿéæŠ73#5'673#"''3266535#Bu{ ™! ‘SSe B;% i%*5Cÿéî–'7&''6767&'3533533##5#'67#©JS(14 ‡8J22J2 )8’ !  K@@' ÿæä†"&73733#"''32765#'667#7#5##535#.  Ì...md  A/1.(‰‰dQÿèñ}73##"''32655#3#735#â% ©kkCC}h cF  ÿéóˆ73#3#&''67#5367#'6CŠMi\$6 =%V Jci6 ˆ !,-#  ÿïó73533533533##5#3#5#5# %-0((X-¨¼%ª0]##$$11H[ ÿéò37&'67327#"&''67&''7''7&'37¢  Sc  "65 7/ `[DC_]  2         ÿéí…/73733&'73#673267#"&''675#'67#@@  +R "  $  83 œ  “|[[HHŒi*V Tb!ÿçä…$(7373&''67&'67#67#7#5##535##2   % "¦...n7     )"0Š ŠmZ ÿéó&,73265#"&55#'6553#67'75#&'Ò5dW#&1 '!  t " h0'67C Iÿéè†%)73533#7#"''32655'75#7#5##535#&%% $ $,&Î===l% Ž Žq^ÿèôœ.267'67333##5##"''3255#535#535#53673535L +" S+< DDccBd<<‘£  ÿéò#'+173#3#&''67&'767#535#35#33535#335ÞePS /KQ83&  MPd(< :$(6 @)[[8 } Š.'"99#&.        ÿéóš!%*.73#3533##5#53'67#536365#335367#335naiKKKˆ#-B3?@S>‘3k "0 &  (D31B0   3  N!   ARÿêò’7&''6767&'#5##535#¾  9B%%' 3]]]„ (! CMM4"ÿèôŽ +177&''6'3#3#"''32765#'655#53&'&'&'¬  &P#<3     ,r   Ž% J 1 / =  ! ÿêó£(.R7&'673267#"''67&''7&'7&'673267#"''677&''7&'7ž Pa   1A H WK  nj   #2C 1$^Q £       9        mÿïò 7#3#5#"''3255##5##5353ímr…}  $|¡*4  NNW“X+;;t2) (0)< 6 ,  ÿéñ 48<73533#67#"''3255'675#73533533##5##5#35#35#!     !Y77%7777s)  %xx##T ÿèó– FL7&'7'6#3267#"&55'67#5367#53673#3#&'#"''3257&'#:  •  Y .9 A; 5IFPfoƒ1   H –  g% +      &ÿêó’ !-73#735#35#3267#"&5536'33#7'&²²ŠŠŠŠ§ %+  )%œAA;'# ’O/+-     <  ÿéó— #@73#5##53'3'667##&''6#3267#"&553#"''326c²a*1&0+$% "—3 +% [  — %( & '1#   >U. ÿéó™'-735#53533#3#3#535##5##5'66&''OYYXXMMiæiO­‡S1= 9+2-0/s     $5%*:  ÿíê&,27#3#53533#3#&''67#53655#&'7'6峸Ë)=??ME$ $'( #5D=e£$        ÿéò“05I73533#7#"''3255'675#73&''67&'#3673533#3##5#535#    ^p'&   U,--::::,v .  $")    Dÿèá $7&''67#53#3'67'#;5#35#\  .7¸ji&ˆ |!$""##m##0   ?? 6 'O ÿéó›#+177333###5#535#535#5335#35#3#'3'667'67&'uPPMMffMM<<<<=   /V  › WW .&PP$   ÿéó“,073533533##5##5#3673#3#5##5'67#35#>C88C>V qwk +DGkk„!  G 5 < ÿêó—.26:73673#53&'3#"''3265'#"''3255##535#35#73#N 9Dæ=   T  88888i— )c Za  &w!.,RÿéŒ"(733#"''3255##5335#35#'&'7'6H0   N0NNNN  d  /`  %u"0Y   ÿéâŠ*7#677'7&''535357#"''3255##5{J$ 888y  +ŠZ2    —$5p  Y¡Eó$*7#'65533267#"&5'3#7'675#&'½.R  ¤R %-…  0 8!# KÿéóŽ *733#5367#3#3#&''67#5365#'6arh] h;I= 4 6 <5 =D%Ž #     ÿêï #)73#'#5##55#3535#7&'''6'6£<)<)))))§  < SL CfY ”&:T" 8 ÿé…Ž73533533##5##5#35#35# 00%0000rw w!!Y% ÿçõš!+/37'#67&'7#7'5'63'73&'3535~58 ;   01 E/! D64(uuuš  @      h     ÿéóœ #;A7'6'&'333#&'##5#'67#53373#&''67&'67#67#µ  l  A`F4A'2 *#E_gR  }=H*%'D 2  Bx :œ   ! B    .óš"73533#3#&''67#535#&'7#6!TSSj4 L\AhT” K?Œ   /  ÿêêœLU73#"''3265#353#3#"''3265#353#'67#5335#'67'67#5'66525#3H“  Y!;  ™  W)> ?-,&.  ( $0& œ8 :        ÿéì‘+17=C75#53#3#"''3267#775#53#3#"''3267#7&'7&''67'6`G[DL   Q µHZDO   T q { 0 &* (+q0K60/K506         ò’ )-7#"''325567#5367&'3'67#3#•   u–  5˜R: 1:››g '     /!2Nÿéò•(,073533#3#3#535#535##"''3255##535#35#W@AA99H¤I99@Ž  bbbbb‡    :? S ÿêô— !(,AGM7#5'6&''673&''6767#3#73533##"''3255#'67&'9  b  "A  &' ~<>>   <c  —€` &    %  k(       ÿéò˜ $673#3#&'#'67#5367#735#35#35#67&'7&''61žYƒ9" +A' 9K.xxxxxx)  /5˜Z   ? # # 7   Yÿéñ› %+17&''63#3##"''3255#535#'67&'ž $ #"' . S 77   44 ^›  )  %,   ÿéï›673#3#5##53635#3573#3#"''3255##5##535#9'DG4114z40  ,3› >J œ 6LdE  .eeL^Mñ™$*7'66533267#"&55'3#67'75#&'– H šR!&/%‚ ‰. ".  #    %@ä• 73#'6'3#'3#7&'–@H;-—  •  LFB   ÿçí™-5973'73#7#"''32654'7##5373#53&'#5##535#, 2uÔ  )e   ‚b@@@„ * .’¥  5I I.ÿèì  K73&'73#&''67&'763353#3#"''3255#67'7''67##537#d^Ù–    uŒWj  `  &+ .LF     ##48  "  ;L ÿéï˜'+/37;?73#3533#3#3##5#535#535#535335#735#33535#33535#335#¹S)**S``__P''*R??SA”??SA**>)˜F    * " F Jó‘273#67&'#"''32655'67&''67''67#SšB $   #/ 2(' & !A‘           ÿéó–&,28>73#3#3#3#3##'32667#7#535335#&''&'''67&'#Â`PPn§—›¬ ® *'+OŠ    I 7  –    /4"i      GóŸ873&''67&''667#3533#3#3##5#535#535#‘C &%4*  #1 =;9<<66BB@@449Ÿ    *       ÿêó¢ 1=CIO7&''677'&''6767''&''6767'&''6'67'67'6¨ 8>%=0 ! V#'  $/9 89)9 N. "> @= -U WG :l ož              "   ÿìó48<@F73#3#&'#"''3255#3267#"&55'67#5367#735#35#35#3&'#*ª]8!   W +7 ?6 0F6„„„„„„_AH     & 3 9  ÿéí™#):E73675#535#'673#3#3#67'7''67#"''3255##5#5'6Q))  1 /%   É   v 85C  ™ s ^–¨( _G Yà‘ 73#735#335335 ÀÀ''9(&‘8ÿéðœ"&*0EK73533#3#''275#535#35#33535#335&'#63533##"''3255#&' VYYR Q]1+SSV@@T@”@@T@ /˜¤++   ¤: ’ 9   9     ÿåîœ#'-373533#3#3#535#535#3#735#35#35#'67&''NRRMMeÛbJJN§§+ &a(&%'—  2O9   ÿéóŽ(.9733#3#3#33#"&''6735#53533''6#5'6 669944*, E[# $ !Ž  ,?++8 " VDÿçôœ (,J7#5##53&'733#3&''67'767#53'3#3#32767#"&55#'667#ìµf **0  =pKKe &< F3&&     !7  =$" W ð˜73533#3#535#'63#735#w55@™G&uuOO”  <7 ÿìôœ#'+;73533533#3#&'#'67#535#35#35#35#3533#3#535##a$$,3 *F- #2,#5aaaaaa,--V¼R, @ @ & & .   ÿçñ.26:>BFL735333##3#3#&''67'67#537#535#5#5;5#33535#33535#33567#)LNNWtˆ/ H -&&M /!4 0>4TL::N;‰::N;@@TCC J—%    %4 > ÿéñ•26>BF73533#7#"''3255'675#73533533#3#535#35##5##535#35#   T!$Œ!-!!LMMMMMy" .  "'2W W . ÿçõš"&<H7#3#'6553&'75##5#35#3353353267#"&5536'33#7'íE:°X))));)( (  "†662" Ž4. '-E"#+   2   |ÿèõ™73'67#'6&''6›E 5 " 2™  $+(/  ÿèô &*.:73&'73#'67#5#53533###67''35#35#67&'__×/60£ T # ~~~~O!  60Œ j    e '     ÿèõ™#);73#3#&'#'67#537#735#35#35#'67&''6767&'+¬b„8% 1B' +C 1„„„„„„  %*g7='! ™Q 9   7    ÿçòš*06:@7'6'#"''3255#3#3#535#535#'655'6##535#7'6×( &0  !FÃ+ )T.™0 /š  Ž  x    8@">@) 3;# $ ÿèõ›7;?733#533#3#3#67&'67'5'67#535#535#5#35#ueÕ^XÉ#22#M    H!  9G#22"“___›     .      ÿèð˜*06<73##5#'665563533#&'#5'67#7'6'&''33#ß %I-#     I 3Ui˜ !^^D (4,/22 *2> „;ñœ%+17&'73#"''3267#'67#'&'7&'''6'62 DJ7373#67&'##"''3255#5'67&'767#3&'#35#35#'67&'W kH     A   G     GEO !uuuu # { ‹   1  1  & &     ÿèô• #'+/73#735#73#735#3#3##5#535#735#33535#335ZZ88^ZZ88x¸RjjiiR??S@“??S@•--&F  * $ K²E 73#735#35#KggBBBBEE* ' 8ÿìÆN73#&''67&'767#53&'…: '  a?N       ÿèñž#'-373533#3#535#735#3353#735#35#35#&'''6(MPPiãgM::M=œ­­‡‡‡‡‡‡c,# "*4 9 4–$ 2O8   ÿéô™!%6:>73#&'#5'67#5367'23'#35##"''3255##53#735#Ä"+w9$ y'9OBQP4UUŒ  ,hhDD™    4 3 9I' ÿïñ–*.2A767#533&'76767&'#5'67&'3#735#3673#53'0  BX <    'N( ””ll/;Ô=z          (3$    ÿçô›#'+/5;73533533#3#3#535#535#35#35#33535#335'67&'.H44>iP´Qk<.@HH!>>Q>>>Q>p . 3e&& &'  JJ J) "    ÿèó˜'+?CIO73267#"&553'#33267#"&553'#33533533#3#535#35#'67&'0 &" X445! +$ Y55­)F((>æ=);FF+ (d,&))i  :/  :0 <   #    ÿèêš#)/G7367&''657367&''65''67'63533#"''3267#'67#E   *k    )ˆ o c6\  HK?5š             P / /  :ô–+L73#3##3267#"&55'677#'73655#'3#3#7'5#'67#'73655#†b!&    ! /l_ % $  ,–             ÿèðDHL735333##35#53353#5##535##5#3#5#'6653353#35#535#535#33535(MSSE5##5ED6*  1COOccM_@@@•(  f' 22 '  ,(   ÿçõ™26>B73&''67&''667#'3#3#67'75375#735##5##535#œ> !    /†R+5 %..¹<<<™       ;" JFPLI I- ÿéò’7=A73#&''67#3#&'#5##5'67#535#&''67#3&'35#"»   #f?& r )>g%   D c Orr’   /6 4 /    ? @ ÿèô˜$(-C73#3##5#5367#53637#335367#33535'33533#3#5#'65£=((R%$1$T/', <. ˜O$$ O (- X&,, R@( #6ÿçõ˜ (,0@7&''6'3533#3#3##5#535#535#35#35#73#3##5#535#¯ $Š*//&$--..&$*7777cQ----˜ I  I ) ) 66ÿèñŸ"+/3;?107'655'6733#&'#'7727#3'73#3#3##5##535#8 6([ 1 , AT JQ³————™tttk5+# ")/  &    (( ÿèö˜#',@DHLRX7533'7#3&&''67&'#'65535#67#'3533533#3#535#35#35#35#'67&'°) "    ) #¡' i"''''''9 † '    /$ %,B0UUKK-.%   ÿéê› '+/377&'7'6'33#5##533#735##5##535#33535#35#@ ‡ ?a¯`7]]‰Œ;;O=Œ;;O==›   ++) "MM ( Vë’!%73#"''3255##53535#335#3#735#Õ  m;G))GG''’7E 0DU77& )' ÿèb™ 73533#7#"''32655'675#   y "/ #( ÿçõ˜"&2A7&'#5'63&'3#735#'3#735#&''67&''6z36 { M c 6VV11wVV00  u   ˜   44&      ÿéð¢/<AEIMQU733##&'#5##5'67#535#'6553'73#3'3&'#35#535#767#353533535335¦/!" $ )5Uc23¯5((.eDJb  &..$   ) *.G   @    ÿéìš3GOSW[_7&''56767&''3533#67#"''3255'75#73#"''3267#'67##5##535#33535#35#“    m    "ŽF   B[$$5&[$$5&&{  > $!.  " '*1 2  %@W W, ÿçôž6:>GM7#5##5367#'673'3533#3#&'#5'67#535#35#3353'665&'ç92#  .½,**$$  %,&K@ fSCAQ  7  -275 1 2î— "(73#'6'#3#3#535#35#5#7&'£?G ' 'n""BB""‰ —    ( a ' (    ÿèö–17=73#3#35335#533#335#535#535#533#5356&'''6K))))7++++2%%$$':ìj*&)(?, (– ##,B>kb}    ÿéñ¢ J73#53&'3#735##5##53#67&'#"''3255'67''67&''67#gÚ^=  zz«¶¢P  #&   ,BB/)7 3)) +2¢           ÿëòŸ?F73533#3#535#3#735##5##53#&'3#3#535#535#'67#&'#6hhhS½Vh©©††±¶§ QQeÝdPP$$…9Aš     ÿéì˜#CGKO7675#53#5'7&'7675#53#5'7&'3&'73#3#3#3##5'65#5#35#<I\"'I\"Y2ROEEEESª !WDDDDD„ C   C "   B    ÿéð$(=EIO73533#3#535#3'67#3#3#535#3#3533##"''3255#'#5##535#&' T\\P­JT Ú Æ FXÁVGßßeK   K111g  —      11   ÿéñ˜&:>FJN73533#3#3#&'#5'67#535#535#73533533#3#535#35##5##535#35#$%%!!))   ))!!$h ~(DDDDDD‰  02 2W W . ÿéñŸ ,@DHLRX7'673'3&'73#3#"''32765#'655#3533533#3#535#35#35#35#&'''6  Rß&#/+  l+~#+++++++#    @'  6?' /C ;; " #    ÿèö˜$*>BFn73673#3#&'#'67#5367#7'6'&''#"''3255#'65535#35#3267&'#"''32655'67&'767k19>K  &**f I   s    u   0  ’ $&.Z0I!        ÿéôš(.4<@DHLR73673#&'#5'67#53&'735#'2'&'&'##53#'#;5##;5#''6×  .#.( *?m  À_…8''''''''p š          nPP?  * "  ÿèôœNRVZ^bfk73#&''67&''667#'35333##3#3&''67'67#5367#535#5#5;5#33535#33535#33567«:     ‘++ +.79 "!".+ ,E,G.6 œ +  ! (!   !0,ÿèõ›NSY735#53533#3'33#673265#"''67&'#3#3#3#7'75#535#535#535#275#7&'@4400B75     1&&##''#@E/))$$&&/A „  n   --%   .        ZY:  ÿéöœ$*>BFpv|73673#3#&'#'67#537#7'6'&''#"''3255#'65535#35#&'#"''3255'67'6767767&'&'''6k09?K  ' ))f I   £     8  |      -   ’ $&.Z0I            ÿêõœ#TZ`f7&'3#3#7'675#535#5'635#533#67&'#"''32655'675#535#&''6'&'?  =###*3!! "VGJ]3     4VG  3œ  - / :    #    ÿéó¡)MSv|‚7&''&'3#3#7'675#535#5'67673267#"''67&''7&'7&'67327#"''67&''7&'7#'6'&'¯ f  =###*3!! "·B   F=   $I3¡   - /        8   #       ÿèñ˜HLPTZ73533#7#"''3255'675#73#3#3#3#3##5#535#53&'#535#535#735#335335367#   Qƒ922<3==>>19..7%A!-y" .  "'//      ` ÿèóž=AEKQ7367#'6733#735#35#35#'3533#3#&'#5'67#535#35#335'67&'‡7'  . b>>>>>>†,**$$  %,&B  :k \B $ $ ]7  -275I   ÿëö›@QUY73&'73#3#53'#367#733#3#3#3#3#3267#"&5535##"''3255##535#35#)+r)#PTTMNJJJJFF$ -' NM ;;;;;Œ   '    ^ Q d & ÿèç˜ $BLV7#"''3255#535#5#'##535#35#3533#3#&'#5'67#535#3&'735#336735ç   F4444&J7777:::4/  (3:  "4  ˜•  S<,A+%%##$$,?š          *,  .       ZX ÿèôž"&*.GKOS7&'#5'63&'3#735#73#735#73#735##"''3255##5##5##535#335335|91 h QO@99599699$  &%%%%7%&ž   & & & !4  J ÿîóœ$JNRVZ`f7&'3#3#67'675#535#5'673#3#3#3#535#535#535#535#'235#33535#335'6'&'?  =##)1!! "¯,55--118€600--223 .J.{3œ  - /   ?  ?  G "    Gÿþï-^733#3'67#73267#"&55'75#'65533#67&'##'3255'67''67&''67#ŒGGM B12 $  7 €6     #%"  -       ,& "36           Nÿþñ¥ $(,I73#3#5#&'#'7##53&'#53635#35#35#3&'73#3#"''327#'67#•:2D L3*TTTTTT?9WR   F  !%¥;     ;7    ÿéñœ6ISm‡?67&'7''67'6776767&'7''67'6773##5#'6556'33#3#?7&'7''67'67777'7''67'67x      ?      Ÿ  : )¹rrm€,      /      …            hhL U-BJA         ÿçö¤,QUY]agm7'673533#3#3267#"&55#'67#535#'67#535#'673533#3#67'3#735#35#35#'67&'— '  *^ * ' $ "¥¥# #) &_%%#%ˆ             L6 ÿèñ¡ )-15Gx73&'73#73&'73#3#3#3##5'65#5#35#'&''67'76#3353#3#"''3255#67&'7&''67##5367#+/nŠ"!M )J    ;>%3   '  +(    x%)+]   $$4= '   @Q ÿéê˜ (HNRV\bh73#735#335335777'7''67'6773&'73#3#3#3##5'65#5#35#'&'''67&'#¹¹&&7'&™  &  P "*$$$$,] */  2  * ˜.=        G      ÿéö¡*.3JO_cgk73'73#3#5#3#735##"''3255#'65535#35#73267#"&55&''6555#'3#&'#'67#735#35#35#ahº¬¿®®ˆˆ   ±    ! eA   !!!!!!• ! H  $ # +@    %)#E  1 ÿèô›#'+/37;?C[_cgms7'#5'6&'73#3#537#35#35#35#'3#735#73#735#73#735##"''3255##5##5##535#335335'67&'JB +1  Uf+)W(555555’"" "" ""    4 3 ›   kk +,-2$ $ $ 7 J     ÿêòÐ .B73#53635#3533673#&'#5'67#53&'3#3#"''3267#7#fi¿?2™™&   ,*  /=å¡• ™ .Ðoo fK     \$ !KâÑ 673#53635#3673#&'#5'67#53&'735#'2qcÄK>ŸŸ†-! !1;ÑwwmU       ŠóÑ73533#3#535#'63#735#ž'f,LL&&Ç '' NE!3Tï¤!'-73533##5'67#'3533##5'67#&''&'™!""   ^!""  ¢  Q  •2# 2#       EóÑ ,04P73#53&'33653353#3673#3#5'67#35#35#73673#3##5#535#53&'¹)f'–2KL^  ::;;v  /((&&.Ñ    %$J+ 6 J    moÐ 7&'7&''68 "  ­ (,pmÏ73353353#353#5335#"["Å!!'$$vjñÉ73&''67&'#367zh    É      sòÏ&73533#&'#5'67#733267#"&50++  ,{  ½   $A aÿéõu)/57676767'7&'#"''3255#'67'67&'''6Œ #'.   *, = V ' "  @   bïÏ"47&''6767'&''6767&''&''6767&'ªCL%+/8 %( ^ %) Ê   -        ÿéõÐ#'+V\b73533533#3#&'#'67#535#35#35#35#67&'7&'#"''3255'67'67676&'''6'l""'<( 0<1 ';-':llllllZ(31(   #&3& M ! Å =  = $ # 0       :   \yÐ7&'73#'65535#C"N 99¼ 6 #%\ÿèôÎ"+377'67333#"'&''67&767#7#53#5##535#w  & ,     M CCC‡  . ,     .i&?VV5#iDõÊ 7&'''667&'7&''6Ê-  &*Ê0 0.+  TÿéôÏ $*073&'#73#33#537#'67#'6&'&'t "[31 a:# 6  d   Ï- ¢Ý'xx4/GL%  % aÿô™¾ 7##55#3535#™&&¾¶Ê6%%%%^(0ÿèí«1agm735#535#53533#3#3##5#73#"''3267#'655#&'#"''3255#'67#'673276767&'&'''6=  !!  ]Q    , "# * ,)< F  $n      D: "" U     "  Tÿó¨Å%7#53#67&'7''63533#7'75#rI   #+#³'  G" & \wÓ"+73#"''3255#&'#'67#5353635#&'#D'    1 ÓN    (, ÿéŒÎEKQ73533#3#535##5##53#676767'7&'#"''3255'67'67#&'''63771q-3xTH"   . D  3  Á   %     #    B     `ÿèôÏ$*TZ`73673#3#&'#'67#5367#7'6'&'&'#"''3255'67'6776767'&'''6n/7<M    +)d D  [       ! 3  ¬  5 }$   +    ÿéyÈ $*073##"''3255#53535#35#35#35#&'''6m +   ---------8  5 Èt@  =t * ) *(  òÏ#'+73533#3#3##5#535#535#35#33535#335'''%%((**$$'%8%»ZZ283ÿéñ¥!'-W]c73533##5'67#'3533##5'67#&''&'7&'7&'#"''3255'67'6766&'''6™"!!   ^"!!  £  Q  C"/K   #" J  —0" 0"      %       5   •ÿé÷Ð'+/7&'3#7&'7''75#535'6767'35#335Þ   "('    »L!#L($~***fÿçöÉ 9?73#735#35#35#3'67'6767367&'3267#"&5'&'pvvPPPPPP/      6  É`D ( & $%< &      ^   YÿèøÓ6:@FL73533#3&533#67327#"''67&'#7'675#535#75#7&''6'&'d'*)   (0&$ X  %>· (H)0.!  "6e m˜iL] N„Ñ#'+73533#3#3##5#535#535#35#33535#335100**//44**1*B*Ç  <   < " Zÿé­Ð(,073533533#3#535#35##"''3255##535#35#_  S )  !!!!!·(t  0  0  Kÿéé›0HLPV\b7#"''3255##5##57767&'74''67'6773533#7'74''675#735#335&'''674'é  NK,    ?    V $ !››  †––¡²;  9 <Vÿè§Ï 173#53635#35#3#3#"''3265#'667#53&'x E!!!!''    Ï NN +-%  2 " "O,õÑ3:733#535#535#'6367#73#&''67&''667#t# @/../ J-       Ñ a  3*    !6bÿîôÊ $?\y733#3#76777&'7''67'676777&'7''67'6767677&'7&''67'6767677&'7&''67'67b|||Žh   G   7  G  Ê^]»     !   z     ‹ òÏ#'73533#3#535#735#335#3#535#35'%%*g,'& >BT,,0à (  B- 0i9QÿéˆÏ 7#5'6tϵŒ$ ÿè÷Ÿ!%PV\1073#3#&'#'67#5367#735#35#35#27767&'7&'#"''3255#'67'67&'''6-¦\2# 0B' ,C1‚‚‚‚‚‚8 '$3    !!  9  O ŸH   2 ;        '   UÿèôÉ !%)-28>DT7#'6553#3#3#535#535#735#33535#335'67&''&'7&'3533#3#535#ñyc)**2t0))()A)N a -,9,++5€9,ÉTF6 6@a:  # I      WÿéðÏ)-15S[_73353353#3#3#3#3#5'673&'7##35#5##"''3255#'#5'67##5&'7#35#e'#;47////8‚   >>%%%%%r    ?  ^  Ê! /    > +  CR%   Bÿì¾Ð767'67'67676'6¤"'&,7%#%3?AŸ<#  &?;#h^ÿèôÎ"*267'67333#"''67&7767#7#53#5##535#x  &+2   L! CCC‡  . 0     /j%?VV5#Zÿô•¾ 7##55#3535#•))¾¶Ê6%%%%^(RÿçòÑ#'+/373#'6553&'3#3#3#535#535#735#33535#335³4v?b(++1x5++((>(Ñ MA1 2;Y 4_7=Wÿü—Ï733#3#535#53##535#o<&'Ï#YL W;*‚ ñÏ#'73533#3#535#735#335#3#535#35#‹'%%-o0''FK]4499 +   D**bFOÿè¤Ï 073#53635#35#3#3#"''3265#'665#53&'u!H$$$$*(    Ï NN +-% 2" ![êË%+7#5##53#5##53'6673'66&'7&'w2Å2I" n! U | ËJ88JJ88J$#  $#       <‰Ï 73533#3#535#'6553'#3#5#011(d)0b(à   T 0"NˆÑ#'+/37335#535#535#53533#3#3#353#735#33535#33511%%..++&&22a(=(h  3 3  O iÿéñÌ #'+/3BI73#735#35#3#3#5##5##535#3#73#3#73#3#3#&''67#'7#6sssPPPP|5:*)95<J**J**Gqq ˆ -3 #d (Ì;$ !  '++'      ÿéð© 7'67&'3#3##5#535#e # "JoÃWddggX©    "'@@'ÿéÑx7'673'67#&C )f%/J ‚"\5& % ; ÿêík 73##5'67#&'Ûc#7?!\“& !$kn[$$ÿèÜ}"7&'73#"''3265'3#'367'5#@• ;t7 %}  q ZR;H  Fÿèô~"7&'67&'7&''5'6556Í  + 2  ,a~H %U\ " h-' #1ÿîñ73#3#3#535#535#53&'y ]`TTgâgTT`] '' ÿîõ{ 73#53535#35#35#Ê+è*kkkkkk{zz*?> ÿèê,733'67##"''32655#'67#53&'767#&´& R  9 &B= Vf ‹  5 0- ÿçíŠ!73533#3#67&'7&''67#535#"NQQg{25 "IQH`Nm   ÿíí73533#3#535#3533#3#535#$QRRcØaQSXXdÚbSo;ÿéï 27'2'6'&''&'33##"''3255#53567#× Lm[NB  /  ¨#[b   ii        ÿéõ,7#5'67#53533#&73533#&'#5'67#S $)'' %)'  $6MN(0>&#$TN'0 ÿëö”(26:>B73673#&'#3267#"&55##5'67#3533&'#35#33535#335Fu8, D " .'2 *7:%10 22D0t22D0…D   F  '-ÿéóƒ733#3#3##'353#5#535#535#ŽNNGGRR}NPPHHNƒ%„˜&ÿèó‡*73533#3#535#73&'#'3533#7'75#133;†71” “0339=J;0y2  QB ÿèï„-?D[767#53&''67&''67#53&''67&'#53&''67&67#'67#53&''67&' Kb   i Lc   sb   ! 1 ˆ Lc   o          =        ÿïò#733#33#53537#535#35#35#35#v^`J"ã#@]^Iyyyyyyy kk 9  % & ÿé’Œ 73#53&'3#3##5##535#T4€5$kkkkkDDDŒ +  9 9!ï‰!7#535#53533#3#67&'7&''6[JeGGKKez6-BQH     ÿéÞ’$,048<7677'7''7#53#"''3267#'6#5##535#33535#35#+ &+   z`   # AŒ<Œ<>„  !   /. &WW .ÿéñ‰ #)-5973&'73#73533##"''32655#3#7&'3##5##535#60z‚:  :uddˆwddc;;;u  W R  7 9 ÿéí‹"&*5;73'73#3#3#3##5'65#5#35#'37&'#''6$  &.(())1h 8$$$$$S    Š   X #m  €…"  já– 7&'6'&'6'&'6Ð 9 = –     ÿéò#'->DJ73533##"''32655#'6553'#33#7&'3##"''3255#&'''6—4   4foMM>IIl  b[' "K  6  r] X0% &,C/ #   ÿèï'+/37;?73#3533#3#3##5#535#535#535335#735#33535#33535#335$¸S***S``__P((*Q??SA”??SA**>*B      ( $ B ÿçæŽ -37JP7#'6655367&''6673#"''3265''673#'367&''66''6æ± L   ! g  „  fF   "   Ž:1& "E      r h  Y)       ÿèã”#+/373&'73673#73&'735#336735#5##535#35#2.9ÇGY€€€€€„>    9R R ) ÿçç” $59=CIO767'7&''67'6767673#735##"''3255##535#35#&''4'''6X  %   )ffBB\  OOOOO(    ,  -*W  #l )  ÿéõË<@DHLPTXb73#3#3#3#&'#"''3255##5##5'67#5367#535#535#735#3353355#35#35#35#3533&'#Å0;;]‚1#  1.  ,A3!77/((:*(.AAA"ƒƒƒƒ -. EË+  ;   ##" ;   %   @ ÿéì“$(,IOU[73&'73#3#3#3##5'65#5#35#'7&'7&''67'67676&''4'''6 )$$$$*[ .9# $       “   _&&f) R ÿèó•'CMQU[agvz€7'67'677767&'7'#"''325'&''67'6776767&'73&'73#3#3#&'7&'''67'#5##53635#'&'à      u    C;;;; £À —  ? 97- , 6 Z   -+     8   ÿèôÊ '73#'3#5#53733##3533#3##5#535#w199d66…RSSiijjRÊIII    == ÿêôY7'67#'673&0B o/Y *!a9 A &     TïË %)733##3#5'67#5367#537#3353535#&¬zŒœ )?D0DW[_jttË+    @ ÿæõ^#)/73'67#&''67#'6'&'&''6€W '7 6  < B   8 ^ 0 &3      ÿéïW!7#'67#5367#535#53#3#3#&„S<R_NNQ¸SOPhS:G    ÿçôÒ%uy73673#3#3#535#535#53&'&''3'33#673265#"&''677&'#&'7#3#3#"''3267#7#5'67#535'635`-8]RRdÚbPP\@v >?A?   (   -4   3   %;&4" Ò      W            > ÿèôx773673#3#3#3#&'#'67#5367#535#535#53&'N =  5`RRhjfN:H#N;GSacQQ`6x          TÿéóÒ#'+/37_djp7#3#3'67#&'#'66553&'75##5#35#33533533265##3&''67&''67&567#''67&'ò'$qu# * <(D<       *   O   à *   C5 1#]  :      8 D 4ÿèò¥#Ko73673#3#3##5#535#535#53&'#53&'73673#3#3#'67#5347#5373673#3#3##5#535#535#53&'r%+E::KKII==C% # $!), !^ #%%$$#¥      n      (   ÿëêÆ)/573#"''3255'675#73#"''3255'675#&'7&'b + 4!Nqc + 5 NW  ƒ  Æ¿3[¿3[    ÿçóx 7&''6'63'67'6}47 8:-5 @5 + *<(N IDB;_x      #   ÿéêy#'+73&'73#3#3#3##5'65#5#35#D8LOEEEEQ£ %R?????y W ! ÿéðw".73#&''67#&''67#53&'3533##5#‚\-  N  '.^`heehw        S$$ ÿêòz*077#53&'#53&'73#3#3#&''67'7#5367367#67#bUB!UV! ?| ~1"$*#&@-35C8N(C<       J  ÿèó†#'+/37#5##53533#3#3##5#535#535#35#33535#335î¹MPPNNllhhLLM::L:†::L:†##CC" " uÿèõÐ 27#5'6733#535#'67#535#'673#3#&•&7 M0%   +  Ð¹Š +*-˜   "jÿéõÏ 5;A7&''63#"''3255'675#73#"''3255'675#&'7&'¬ $ .1 ;5 #8 M Ï! .ƒ & 2‚ ' 1    ÿèvÐ &273673#3#'67#537#735#35#&'33##5#53)%2:   % 4444+ º  O /-@   ))tÿëõÏ#'+1A73533#3#3##5#535#535#35#33535#335'&'333#"''75#   ""##  / Y# '*   »XX3:]Hf W ÿéóÐ;?73533673#'67#535#67###5'673#"''32765#35#$E8 A^7I 5+]ZEi4/N -n i  ::¼  \3 5  !P 1 " ÿèóÏ.3;?73533673#673#"''3267#5'67#535#67##5##535#'@E 7W+Q)1W†….6-bY@n@PPP¾  J4% f? ?%ÿîîV%73#&'3#3#535#535'67#67&'# ¾VVeÜcQQ$% *+-5D V      ÿéóÎ%735#53533#3#3#&'#5'67#535#*KVVVVMMdX$: 9%$7:#UaKˆ+.SS,(€ÿæìÈ 7#3#5##535#35#åQXD>>DDÈTi âB0«7 ÿéóÆ73#7#5'75#35#35#675#Ý&(LW+';hhhh9/hÆ„31!!V"[ÿêðw7#5'75#53#'35#35#5#î''®zffffffXP>3/zðÒ 7'67&''67&® .}1  ¤ !(  (  TæÈ $73#7#5'75#35#35#75#73#735#w (.%//////^RR,,ÈE M,- ?T2 ÿçôÉ5;A73#63#5'75#35#35#75#67&'#5'6'6'6p  $+"//////‰ &" =&!&]?  !/ / 1ÉB K +.     (BX  4ÿøÎq73#67#5'275#35#35#675#7“ 29 %FFFF'Fq?J ( , dæÐ"&73#3#&''67#537#'673#735#3C&/2 # % /6 gTT00Ð      K)iDõÊ 7&'''667&'7&''6Ê-  &*Ê0 0.+  cÿéöÎ:R7676767&'74''67'67676767'74''67'6736533533##5#'67#{    9    i#""$"š ." . "s ??9'xHáÎ 73#53635#7&'Ê i:5CCÎUU[2B  DƒÏ!73533#3#535#'6553'#37353..'d+3  c9Æ   O , \ôÏ )A7'67&''6'67&'#5'6333#33#"''67Á  ‘ N  ?   $a::!N   ¯  +    3&    ÿémÈ .73##5#535#35#35#35#35#53#3#67'675#^ D $$$$$$: ! ÈÏqM-.OÿèóÏ735333###5#535#535#33535,GNNKKeeG[:::²35OO"2"" ÿçóÏ'+17735333###5#535#535#335353'6573#'&'''6)KMMLLffK_999£%  >  ¾()qq(76.c\ $ ÿæõÏCGK735333##35#53353#5##535##5#3#5#'6753353#35#535#535#33535#QXXI4 !5ID3" 0CQQiiQcEEEÅ  7 $‰+$4 DD 4$ @"# 7  qòÐ,37&'73#'65535#73#&''67&''667#@'P;;mB      ,Â4 & (    ÿèïÑ $(73#3#5#53&'#"''3255##535#35#„`¨¤"gg  ~~~~~Ñ +Yq  /Š&6#ÿéÜÏ"(733#"''3255##5335#35#7'6'&'uO ŠO;ŠŠŠŠ†  Ï;  <«/Jw  'ÿéÝÉ!73#735##"''32655##55#351¢¢zz˜  Ž¢ŽŽÉE@u +Œ( ÿéçÏ%)-73#'66553&'#3#"''3255##535#35#‰S° Yažž  yyyyyÏ 8$>0 -V #"n  +†%7pëÑ73#67&'7&''67#53&'†Z~37JSBfÑ       ÿéñÓ6:>7&''67&'763673#3#"''3255##5'67#35#35#Ä ))40 "*,)&šR w†~  z !"A>zzzzÓ     > d  '^!22kÿêôÌ 7&'''63533##5#Ä!5885Ì6 9 8 #J..XXléÏ73#'3#73&''67&'767#K-Y`  !   IÏa[SS    aÿêòÏ"(735337&'#"''32765#'6655#'6o%.    $  ¥**;!N hJKA= % sïÏ #73#5'675#5373673267#"&5\%("FF." #(  !ÏY      ÿê–x!.7#"''3255#&''67##5353&''6–  %   #:  li  T   q 6   `ÿö­Ï!7#535#53533#3#67&'7&''6x  S5##5. % (ÿèô®.2673##53#367&'#7'#"''3255##535#35#A–– #½H H*'   ooooo®  +   S  !h ' gÿéôÐ0487'673&''67&767#"''3255##535#35#ˆ A  &'     AAAAA“ $     I`  &u /[ÿéöÅ '17'66553'#3367&'#"''325'3'67# zTT"    .' „#C5 !/$^A/"  &&0  Y 9.9ÿèï® %GT7#5'673533##"''3255#&'#"''3255#&''67##5365&''6e  M M  a   ;   2L .® ;,     /R  =  Wg )   \ÿéôÐ17=CG73673#3#&'3#"''3267#737#'67#537#3&'7'6'&'3#k)9@P#    Y)A  !'<  M  UU¦   3 &! V ¨dÿé÷Ï"BG73533##5'67#&'&''6367&'#"''3255'67'&'o377 (W ! "! -   # º-    *      Sÿí³Ï'73533#3#535#3#735#7677'7&'Z  H HH!! *3¹9;3 fÿèóÐ 6>B73#53&'3673#5#3#"''3255##5##535##53&'#5##535#­8‚6 #-7  $.'%`GGGÐ %    ''"2nI J,dÿéôÏ+8D73533533##5##5#3&'73#&''67&''63533##5#d--83 J  X=??=½#      %   ,,,ôÐ,0473673#3#3#535#'67##"''3255##55#35Œ;BB!'X   `   .@..½   CN   a 2ÿéì±"&*5EIM73'73#3#3#3##5'65#5#5#'#5'6#"''3255##535#35#z44++++1k 5(((((- — vvvvv°   .  O C+OJ ^ " TÿëõÇ$59=73#"''3255##535335#35#'&'333#"''675#3#735#ã   C # .6  $,, 64 R++ÇJ_ KdsJ%%;;1Il^7  P‰Ì !%+17'6553'#33533533#3#535#35#&'''6-fDD? [    ¥ ,+*'       _ÿì¨Î'73533#3#535#3#735#7677'7&'b?CC 'º9<6 QÿêöÏLPTX73533533##5##5##673265#"''7#53#3#367&'#'6553533&'735#35#5#W%($$(%•!   8@K ]  ^  ¿ +1"" * u. #?8A!?@  D23\ÿéóÏ !:>BFL7#5##53&'73533533##5##5#3#3267#"&55#'67#735#35#35#&'êb9Fr#  + %KKKKKKK   ½ % Y   ' ? " #   ÿéõ!%)-1EIOfl73#735#3#3#&'#5'67#535#735#33535#335'#"''3255#'65535#35#7'65533267#"&554',¤¤}}@     #  9    ‰<  +&6    " `  )),'$* **[ TRÿéùÏ^bfj73533533##5##5#33534'33&'73#673265#"''7#53#3#37&'#'67#'65#535#35#35#5#Z!'**'! O    32 ?   >  ¿ #) ,4(  y0 +=@6( '%. ' 59 GïÐ $(X\`dj73&'73#3#3#3#5'6353535'3533533##3#3#3#'67#5365#535#535#5#5#35#335&'Ÿ !#b  ¬*))--8>!  %0))''P* ' Ð  D  Z      #6 ÿôêÅ 73#53#3#'#33535[ËÈYKJGGG’’HÑ(U}(//B..ÿòôà #'+/73#535#535#335#3357#3#3#55#35#5#aa2::”) (m1>>ÃÑ/S***KQ**²@(9')4)'PK?0 -%;0I81 ©ƒ3I$wÿéñ”73#735##5##535#7#5##535#‹WW11i”:8bbC2bbC2 ÿéöÈ #'+/DHP73#535#535#335#3357#3#3#55#35#5#3673#&'#'67#3#'3'66`c#233„"%d+33†Qm8' / , ; );‡G  Èl,L,l -!   88  ÿèóV73673&'73#&'#'67# `/  +[@JN =U5   0+ ÿéó^ '7'67##7&''6'&''6u b-*G  o   ? YR        ÿíòÐ?F73533#3#535#3#735##5##53#&'3#3#535#535#'67#&'#6 iiiU¾Vi¬¬††³¸¨ RRgßePP$%%‰ 1EÇ   & !''        ÿéóÏ%73#35335#535#53#&''67#56\00AC332FT G MO PO#Æ !{v$x0..'qÿèât735#535#53#5##56732œCCBVœ0#)D'""  |  SáÌ73#35#535#53#56m!)BBœFFBVÄ/ÌrmÿéëÏ*06<B73#35#535#53#3#"''32765#'67#56&''&''&'''6n!99‰BBDVz •  &&Z      ÏfG )b’   ÿééÏ26:>B73#35#535#53#563#3#"''3267#'67#5367#735#33535#335o !*CCFFBUÂ//ÂYd  VL ;LZUDDWCšDDWCÏ    OHRH & # + (  ÿéòÐBHN735#'67#5373#3533#3#35#535#535#533#535673#3#35#'67&'Y#"  ( C####"5å""""M#, (m$ ""g  !…    8     ÿèòÏ17=73#3#35335#533#335#535#535#533#5356'67&'H!!!!0*00+4%%%%$7å +(h+% ((Í ::GSW"“‡¥    'ÿéØL73533#3##5#535#C344NNOO3=## ÿéë¬"&*D73#3#3#3#5'673&'5#5#353#35#535#53#5##56‚ STLLLLZ 6 BDDD !*EE—??DW—0¬   2#!   NJ ÿîòÏ)-159AEIM73#3#35335#535#535#533#5##535635#3#3#735#3#53535#35#35#E &W& !2 ³ 055**** P*æ+kkkkkkÏ  ]][&&SYP # >RR & '  ÿéóÏ3J7'23#5##536'&''&'3'67#&''673533#3##5#'735#à TxdK ,µ—:  .  5a P ( "V1&&+*4$1Ï(*    6[ ?   +++'+ÿéîÐAEQ]dh736733#3#5#&'3#3##5#'7#535'67##53&'67#537#3353&'67#3&'67#&'#635#)9Y ! WW^^S b )/ 0D2GQn< 6 ;9 4 1 &JC9  +   + I  % : ÿéóÐ $(,0D[73#3#3#535#535'635#35#35#5##5##5#3'67#&''673533#3##5#'735#@  !!Ä##  p/,w 4` N ) #U1&&+*4#1Ð  &? G-   ""d‹óÑ 73#&'#'673#&'#'6}$ J'  Ñ     ÿéêÐ!73353#'67#53373353353##5#:')$$J*(Їex. &xeee‡‡exKK ÿéó{76767&''67&'@- %#8 9+*B >&,w8!<     ; ÿéó7327#"&''7&537&'éi / :\['c ($30*  !!8   ÿêòÏ#735#535#53533533533#3#3##5# i],8888,]hhi4) \ll\*77*ÿéâ‡73#3#"''3267#735#,¨“£¢”‡</ =ÿóò73533#3#535#VXXiägVT--::#ÿíî73#3267#"&5535##®“:B HD“›J0 " D'ÿòîŒ73#3#5#53&'„ ]¤›¯!dŒUh  ÿéò‚73567#533##"''3255# nx•"ff    n< - )ÿéíÏ573353353##5#3353353##5#'3353#'67#53365)9>RM_()K+ & $É&,,)<%>LL=P11^3 >Q& P= ÿéðŽ73533#3#&''67#53655#'NQRdXE IQ HU[Nw  &41# ÿêó‘$733#353#3267#"&55#5335#53v\\:N "  .)O;]]‘;(:   ":(; ÿéòƒ#7367#53#3#3267#"&55#'67#WL½]oS  ) M BQR9  ?B3 ÿéò 73#'63#3327#"&'#7§° ““¨”  ((-#/ÿêò”$)733#"&55#'665#53&''67&67#¶). P¡ $7@-,9 5$0 _”$    ^     ÿéô˜73#&''67&'#53&'67„ ], ((>B./7 9' %m(% ˜&!    , -%"ÿêï‰ 73'67#'6'6767&E…  v  FJ2X M‰   1&" 0 ÿéò 7'67#73#3#/ ) 4‚‚¢¢@ ).t\ ÿéîƒ73##5'67#&'ÚW$9N&l”##ƒwb""- ÿêòƒ373327267##"&5'#"''3255'67567#536•  $   Tkƒw  F0 'ÿéáš73#5#'6553&'#3„PR\šO(! #+6 ," ÿéì&733'67##"''32655#53&'767#%»+$O  J iq ” 7 3  "ÿéò“%767'5673#3265#"&''3&'4* ]T ''TO % / SN$::  ‡!!+&1ÿéõŒ !7'67&'3#"''32765#'67#W4 0h'(&(a• C D = (Œ $(.J #>1 ÿéâ•#7#"''3255#&''67##53653â  H! - 2?Uzx  a -‘   ÿïó~ #7&'7&'''67332667#"&5~  _” 0   % ~ *0 /+;' /(X!  ÿéô–"735#53533#3&''67&'#367&QggccG$%4=,.D<% #!%S! !ÿèó‘ %7#5'673673265#"&55'67S  /E(!/$ / ‘xb %(: !5  0  ÿèæ…!73#"''32765#'67#'67#'6K  JH"@< $…d&BD3.91% 'ÿéò›7365#535333#&''67#75#cMML]?H"M A\³8F<'89 +) ÿóòƒ733#3#53533yQQeæ/*ƒ(BZZ ÿéó‚73#3#67&'7&''67#!¹¹æ|7@ ! QR)R‚, ! $ ÿèë73##5#'6556Í CY­=\"_ ZZ,'!$FÿééÒ)S73#"''32765#353#'67#53365#'63#"''32765#353#'67#533655#'6H  N!<: &*  " ™  P&=F 3*#2 Ò I ))  %YJ +( ( ÿèñ"73#3##"''32655'67#'735#Ð-66 2QK+fp.9 2,&. ÿêó{ 73&''65'3&''65¡+&1 @_ $6{3.'$,3" ) ': ÿêó˜ 7&'#53##7&'z  _æs5! ˜ 4oaÿéé™%73533#3#3#"''3267##5#535#535#W[[SSb  NWWHHW„/ AA ÿéì‡ "7#'65536733#"''3267#'67#ì´'/V  E+ & +‡9.$ $,B6 F"+8,ÿêï '7#'6655#3267#"&553#"''326è« ŽH '.  85o  ;1$ $E:L a3ÿéò†#7#5##53'665332767#"&5Ìu?073)  ( †m[Zl25 +*'.  ÿéò“7'63533#&&'#67'5#¼!- +‘8šcB )0$ 8“ (==6&%?  J ÿìò )7&''6#3267#"&553#"''326v4: 87!C LQX"@ J/€  "%$0; R,ÿõì† 73#5##53&'3#‚]°dZØØ† ;)*< w ÿéôˆ!'736733#"''32765#'67#&'''6OE6U NK¿  ¢ n  B1 AZJ    ÿëó—173'67#&''67#3267#"&553#"''326;7_ O ' "£4(% \   — k%O   ( l E ÿéó› $(,73##"''3255##5#53535335#33535#335Ø  ‹PP<8.ÿéò'767&'7&''6'3#3#"''3267#735#¬# ** {O8D  H5;_& ', 8R;7 9 ÿéó™#73#&'#'67#5353533655#335Ò [B HJ BXKK38K9};$4*;;  )ÿéë73#3#3##5#'6J–xhhqq(*|  ÿéô  &,73&''67&''6767#&'&'jT+4 ?2 : 0# 6 M3- 00NE JI      E     ÿéó–"73533#3#&''67#5365#'6=+PPg^H KQ IV^4  '2.#  ÿìó˜  &7'67&'3#"''32657&'''6~-9 @5/8 6; Dj z#- V A & (* ÿæð‹733##5##5#53533#335#²**g%%gggggg‹w v"4! ÿéóŽ73#3##5#535#&'7'6ÆYhhiiX   ” ŽB==B    ÿéó˜ &,2736733#3##"''327#67#767#7&'67#7&' ©  ˜¶' ]‚+# !X!""-( Y(   ÿéñ %7#5'673533##"''3255#&'E  !1^##  ^$   x[ W  R   ÿéó”!7&'67&'7''5#'6556Ó  ( .    !c”Y(.ew &  …+4+&*=ÿéâ7335#53353353#5#353#5#GP=;;F´65C=+99+EC5M ÿéó›17&'#673267#"&''67&'#'6553&'3Ä 4R     ) '$ M \›   +312 ÿæä•%)736533#"''32765#'667#7#5##535#%- #Ö...y  g K571/””mZ ÿêó—&,7&'3673#3&''67&''67#67#ÅŸF‡Œp.."&3- # 6@‚ U!—       "'/J ÿéó‚)733#67'7537736732667#"&5L!!2?A& .   ‚*3d_u1 4!  ÿéó™73533#3#&'#5'67#535#]__[N$8 8&#9 7#KZ]…(-LM*&SÿóîŒ73533#3#535#SCDD=Ž=C\00CC ÿëñÏ&*.73#5#53733##'673#"''326653#735#UFF@HHR!—  vvPPÏ7 #Y5 :5G# ÿñó•7'67#53&3#3#535#—4Qs.‹§ %" *—±PeÞeM\, ''ÿéìŒ2736533&'73#673267#"&55'675#'67#CC  *S    " !8 2@n 3 &)   @O$ Bÿèäž!'+7#3#"''3267#53673#"''326'&'3#¬e ›,M   >  Iššv78%W  (  Fÿéòa7#53327#"&'#3##5#53X%‹ >11AAN6-&*9 22 ÿéó£)77&'3&533#67327#"''67&'#3533#'67#È  ¥tRR " % u/+,2 )-£   . %  ' 6.$$*ÿéëŽ!767'56737#"''3255##5-#"0 -) &(Gw  9?)  x  Ip  XŒŸÿéî#+73#3#5##535#35#35#"&55#'67#5#32ÜI=Ÿ=I\$$>Ÿ$* "+Ÿ*z zv Hÿéò73533#&'#5'67#RBH=' && -8l##03a[."- ÿ鋊73#3'67#&''67#t79C@/  #)Š I<  & ÿéó–!73#735#3525#53#3#&''67#/¢¢}}3fN²QjZ=G!W O^–5Z #  ÿîï›73533#3#535#3533#3#535#$RQQbØbRUVVeÞeU‚Fÿéë‘!73533#67&'7&''675#735#335+KII SY00K77K5sD#  $ ÿéó™$*73'67#'6'&'3&''66''6y` R ?t!0 .=,!S™   ' 0,)+ (!" ÿéí‘73#'66556#5##535#Û Ha±±  nFfff‘0( (1+OR S5#Zÿðñ‘73#3#5#53&'®6ni}K‘\o ÿéóœ$73533#3#&'#5'67#535#'6</RReW%6 9%#8 8#Wd: –!")JG% !  ÿéò“97&''67'67676767'7''67'67676767&'f ',  $ … (,!! %' '1,E  '1, E ÿçã’%)7373&''67&'67#67#7#5##535##3   $ "¥///y<"    / (3” ”vdÿéòœ07#53&'73#67&'7&'3267#"&55'67'6_Kg[u03 $#&% A : .#t    8 <<.ÿéëÏ%;K733653353#'67#73353353##5#33653353#'67#73353353##5#/   n*)n1   n*)¾0 7& 0B  B1BB1C,0 6% 0B B0;;0B"" ÿéóŠ&,73265#"&55#'6553#7'675#&'Ò5dW# &1 !  Š #& s3!*;;K P ÿé Ï)-73533533##5##5#3#3##5#'67#535#35#!&!!&!} $" "$/##¶#'MM/%'''fÿéóˆ73#3##"''3255#pyy &  TˆF  Cÿéî 73#3#"''3255##5##5##537#Þe h  .,)Pb"Y  BSSSS\o"ÿèð¡ &-7#5##53&'7373#&''67&'7#367é®b€J ‚0 '# 2*= :?U  ˆ**  6   $ ÿéó—*73#&''67&''667#'3#5'5367Q"$ " 2F —0 &&(ª? cZ Kÿïï73#3#535#535'2Ý #IID—AIIC.55, ÿéò 073673##5'67#33##"''3255#53567#I|‡ .>[l@@  II PŒ dS ! $ !  ÿéö¡(,73#3#5#53&'3'66733267#"&5'3#„_­ž±h5 ! s   7¡ 1Z)  8  :N ÿéï™!%73673#3##5#'67#535#53&'5#I7  .0;;B9 /8=22 i>™&AA(& R&& ÿêí˜4O736733#"''3265#'67#36533#"''32765#'67#734733#"''32665#'67#!Jb  VF<A '-  (%t!1   "'Œ(' = <  " = "ÿéò˜%+73533#3#&'#'67#53655#&'7'6&PRSjVGJK @Q[P" ˆ ‚(,     ÿèó˜$(7367'273#&'#'67#3'6673#R!%RQ #*nB2 AD7D=!Nb   # HÿéíŸ '73#5##53&'3#3##"''32655#535#^³c> Daa  ggIŸ &&8# ÿèç*.37#"''32654'7##5#"''3255#'65535#35#o   *É B????(,’¤ $!<<,E ÿìï‰ &?67'67'6773#3#535#'6/# '0 8, +/ /062x*0("ÿé÷— &7&''6'#5##535#&'3'67#ª# " % 26‚ -|C 8c—  ~ „_M(3 !ÿèð¡/73533#3#5##535#3567#533##"''3255#_]]a°a_gr–#ee  g ++ \   ÿêæ—-373#"''3267'6765#'63533#67'75#7&'‰Q  )16-H o&/ ‰  — h-  //5 ;    ÿèó¡#(.47&'#3##"''3255#535#5'63&''67&'}29 *TT  QQ. JW#"€¡   0  -  M ÿçó¤49767'7&''6&'''673&''67&''667p*. IJ1M(! #'I#"= Z!24'/> 9( 6¤           ÿñï… %73#3#535#&''67&''6!¾UeßfU  ~   …pp /   ÿèò¤@7&'3#3533#"''3255##5##5'67#5367'67&'76Ê  ") ‡‘ .P  <3 )9F#.($¤   2  >>76  Nÿñô– 73#53&'3#536'&'£;‘@78¦XD  –  /3%0(")*"ÿèïœ&*.2673533&'73#3#"''3255##5##535#35#33535#335d: eQ  >=Pd'==Q>==Q>‡ e  %%&}46Jÿèõ‘$)733#"&55#'6653&''67&'#367È# 1  ‹- *#. ) # ‘&  M      ÿè’73#&'#5'67#535'6‚ 11  (469’KJ%ÿçñ‘#73#5#'67#535#5333533#3#535#TB:'3883s-3‘¨A' "6$//KKTÿêî‘73#3#3##5#'6yhVNNOO ‘,~ Rÿêõ’ 73#7&'''6'6š9 Kc'[ \’m_$ %) !" 6Zÿèñ 73#7&'''6'6¡6  D `$c ZfX $ :Eÿèô“ 7#5#'67##535333267#"&5å+Q H(<   v/L1+A/-B  ÿèà‹73#735##53#=#/  zzÀ˜‹?€UU ÿéäŽ7#5##535#357'67&'35#ä¡‘"¡#D %88Ž¥ ¤Q9xx97 c(ÿéô!73533#&'#5'67##5##535#[\Q ?A!$8 4!Gµ|||Š!  &18'BMM3! ÿéô #'+73533#3#3##5#535#535#35#33535#335dccVVjjkkTTd#AAUB—AAUB OO +- ÿéó %73#53&'3673#3##5#535#53&'€WË^5Di[[[[iB  /  **  ÿéò™ %*.733##3#5##5'67#537#5367#3353535#!®##t€  $2 HN@SKPWv€€™## F3  # a ÿéó•373#3#5335'2'3333#"''67&'767#'7#á 11:~=J$QJCU    +&0•'L:V0   #"ÿéô’473#3#535#535'667#'7#5333#"''67&'Ø 770q.66(>… *%4M%MHAQ  ’!!!O  *   ÿçô“)-73#&''67&''667#'#5'673#‘P$ (   1Z  $“.  %2}Y + kÿñíž+73533#3#535#7&''67&''6!TQQdÜdT '|  #2lls !&  ÿçõ /73#5##53&'3#3#3276767#"&55#'67#`±^7——ÔC 3 'J AA ++2) .:  * ÿéò§ #'7&''67&'33#5##5367#35#05 35.9 A49Š )‚f r ‚‚§ &%   F G F ÿèñŸ67'67#535'273#&'##533#"''3267#7#'67#4 /$Pe#(SS "(gM", 8$% 1 5 : A ;#>     ' 3%DñŸ73&'73#3#5#eg¯œ¯ ‡   2ÿêñ”$*.73#3#5##5365#33535#"&55#'67#333535#áPA >K^!_ . $''r(   ” ƒ ](Ufÿïñ 733#537#537#33737#um ‹1+;.,Ž8222|8*ÿéÕ¡"(733#"''3255##5335#35#7'6'&'vK  ƒK7ƒƒƒƒ…{¡1o  .‡$8d    )ÿéò "&73#67&'#7'53&'3535|GD S!74$ G-~~~  [  51  —$ ÿèó™'-37'233##"''3255#53567#536'&''&'Ô Mo\I $``  qq‡‚ 9+™        ÿçô˜FL73&'33#673267#"&''67&'#67#"''3255'75#535'67&'{ ,?DB    ) ' B  1335u˜  !      ÿéó˜ 73#3#&''67#5367#735#35#)¬Nm[H SUHW`J‡‡‡‡˜X $# 44ÿçé’ -73#735#33535#335373#"''3267#'67# ÀÀBBVB˜BBVB¸`b "R2( DX’R102 -  Iÿé÷73533#&'#5'67#Y<B8) )' ,2n""55c]-".ÿèð .73'67#'63533#7'75#7&''66‚V  G f %-#Š/ -1'  # ++6 9+'"*ÿëö™"(:73#3533#3##5#535#'67#536'&'333#"'&'75#‡OY 22<<EE7 (Z  1 %>' …H6  <#%  H $$=  eÿçñ‰736533#&''67#7&'i1?7 1*.00d  b7 00! :9 ÿñëŠ!7#5##535#535#53#3#3&'73#ë­_HHEŸGII" (ÓŠ,,‡""  ÿèëœ(.27#5##5#3#"''3267#53673#"''32'&'3#ë­žkœ œ/P  <  Q¡¡œ,,>+4 L  # <ÿéô—<B767767'67'673#5#3267#"&55#5335#53533#3'6+ #* ‘ ! 05588c(03^*% @ # *5$66   ÿ阘$*73533#3##'2655##5'675##535#&';994   * 4;^ ˆ( n7,=Q   ÿåóŸ #@73#5##53&'3'67#&''67#3267#"&553#"''326„\¯a17 [ K*   £6" -# \  Ÿ &) (V"=   D Z.ÿèî¤(,073533#3#3#535#535##"''3255##535#35#\^^VVeÜcTT\À  ˆˆˆˆˆ˜     >N b ' ÿìm• 73#5##53635#35#<&/////• ‡ ‹A X'dÿîôŽ 73#53#3'35w}ŠwllY E3!! ÿéó“0573#7#5'75#35#35#675#7#53&''67&67#ä~&+%.....Z d  ! 0“_#k=C&3   ÿãï/573533#3#5##535#35#'3673&''67&'67#367v155+=&1==ƒ(   . u [[ U#=7      $aÿñò‘ 73&'73#3#536'&'k37` .‘M7z  1%/*&(*%ÿëô–4735#533#67&'#"''32655'675#&'#535#2ƒ‰œ#`  # :%   +49-4 ¡ƒsC     ÿéó’#'73533#3#&'#5'67#535#'##535#n166>1 $ %.:12{'-JF%$o…]K"ÿçó— .73#735#35#33#67'73267#"&5536#²²‹‹‹‹DD$!, º #, " .&—O/+'" L   Aÿèó˜!%+7&'73##"''32655#&'3#75#''6'4¦!   r0HPP=*3 ˜  w r  ? &$"ÿéᜠ%)-157&'67&'6'&'6#5##535#33535#35#…   U  ˆ  ´™CCVC™CCVCCœ   6h h$:ÿéò';?C7#"''3267#3&''67&'767##5##"''3255#'65535#35#ã   A[      F   *****(/&     P£‡ )-W*Bkÿèë’ 7#5##535335#33535#35#ëX66""6"X""6""u‹ 6$$$\'''ÿél˜73533#7&'#5'67#%!!    #{ cQ!,ÿîôŸ&*.2673#3#3#3#535#535#535#535'25##5#35#335Ö '/a'00(b[ÉZc+//(`%*Z6'&&&:'ŸF+ÿèð› -7'2'6'&''&'3533#&'#5'67#Ù Nr^H =  .  ddW$5 7$!7 3!S›       , &@C& ÿèô•#DL73533#7#"''3255'75#7&'3673#3&''67&''67#67#"   $"¶  JTXM$"  + #:r##.  &"2  )    #9. rÿíé—73#"''32765#'67#'6–G   73  — ` FB0,7!ÿçõŸ#4:7#5'6733#'6'367##3535#33267#"&57&'vI )]4S a X.U R 6::>>   %!, .5 A2f 6%  +  Aÿêô˜$(-7533'67#3&''67&'#'665535#67›=  &4"$"  "&&„  %    ,$ "@2 1ÿêê–#)37367&'#"''3255'6757#&''3353#5#2$ $&   % ..w !­Á–      (  ^^y ÿëô›)-M73#"''3265#3#3267#"&55'6#3'3533#67#"''3255'675# ^ U B8 #,  5/1&&”  ›J4 :! U *B!!$/  %)ÿçõ +27#3#3#535#35#5#73&''67&&'#3267|!!! f AA [f       ;! 2 LM!!Œ L   '.,ÿèó¢;AGM7'67#5367#53673#3#&'#"''3255#3267#"&57&'#7'6'&'< 5GEOgp…2   Y .9  C;| H s  ~  ,      (< g   ÿèò”,73533#7&'#5'67#73##5#'66556(%%     %Æ $0b#,  8x `T +, !YY&$ (1* ÿèð¦05;7#'6553&'73#3267#"&'#67'5#56&'&'ð´ QA 72  ? H7<  +83 *5<    '$ + [+ / ÿæó¤ 2873#53&'3673#53&'3673#&''67&'7#367‚YÉZ 8 9Ú93H†7! ,&F '/=T ¤ "  4       ÿèó§ !%73#53&'3673#53&'#5##535#„UÅZ >Aæ<’{{{§  &  >O O1ÿèí¥ !%73#5##53&'3#3#5##5'67#35#…S Z\Ùy ‡y 0G=yy¥ ((:M > N ÿîñ#'+73#3#3#3#3#535#535#535#535#35#335ÖaRRZZQQgáfPPZZRRa"??S?2  20KÿèæŽ 73#"''32765#'67##5##535#\Š   </ ) #ŠcccŽ3 3 $EN O4"ÿçð–#'+/73#3#3#3##5#535#535#535#5##5#35#335Í##WffggV"",---A,–&&) ÿéò•#A7&'67&'7&''5'66556#"''3255'67567#53Ý  !   BU  ?X•Y-1bu  €2+ '2*=6 -  ÿèô¦3:73533#3#535#'67&''3&''67&''667# VSScÝfV. ' s&$ $%.T : >**; 2# 6M–#          ÿñó¤*/7&'#3#3673#53&'735#535#5'63&'37 2MM-Þ4  NN6 @g(¤  *   * ÿí÷¦*48<@D73673#'#3256767#"&55#5'67#3533&'#35#33535#335K v?0J #11H 0:6+. 044F8~44F8‘  =   > ,/ÿéã—/7#"''3255##53673#53&'3#3#5#53&'ã  ¢E   "57`Yk;—•  ~œ®   % &ÿéô¨&:7373#3#3#&'#'67#5367#537#3533#3##5#535#Uagdmˆ5%0K' .@ 7AO..,,OOOO.˜  % Qÿèô” +177&''6'3#3#"''32767#'655#53&'&'&'¬  %Q#<3    +t   ”  & M $3! "0 >  #Jÿïñ† 73#53535#35#35#×§IIIIII†……,HH ÿçå§%)-7'66553&'73'#3#"''3255##535#35#6 WTœœ rrrrra4' %G  /U  "j )  ÿéö,73533#&'#5'67#73533#&'#5'67#/%%  !-m)2(  &rYQ#,/.dX+6 ÿéô–.4:733#3##"''3255#5373&''67&'767#&'''6?**40  2/F^& *  H  = –B  =.<&! #6   ÿçï™%+73533533#3#535#35#35#35#'67&'h)Ý'0hhhhhh !('b%# $%ˆQQ10&   ÿèç¤373#"''32765#'63#3#353#5335#535#'67 §  Ÿ ^6KK#€&MM# ¤y, _ !&&! ÿéñ¥#(-73#3533##5#532677#5335#335367#335w X_ /OO% @J7AAU>“:@TD¥Y ## Y#5 ÿéð'7#3#3#3#67&'#67'5#535Öˆˆ‰‰¦d  $ V-!* "   44 @Z ÿêö.2773267#"&553'#37#3'#"''3255#'65535#35#Š(  3,sC/p  % ""#"8/  ŠWE333D‰  ! *4:)@  ÿéó•$173533#&'#5'675#&''67&''6[]]+? ;$*3 A(["  †2,&@?(*2  '   ÿèã‘%)-7#"''3255#'65535#35#'#5##535#35#ã DAABA(*****‘  ! (/H.IOƒ Œ5#T!Pÿèð’73#3##5#535#'6'&'\ˆ;GGEE9t Y  ’M99M   ÿèàœ)73'67#'63#35#535#53#5##56iY R<" ==”??BU”)œ   rj ÿéõ¨48<73533#33##3#33#"&''675#535#535#535#3535\^^MMTT-#EA  %LLggKK\p:::š    .    ÿèñ›$(,73&'73#3#3#3##5'65#5#5#F7JPFFFFX®  (Q?CCCC–   e '(( ÿçô«<73'73#&'''6767&'7&'3267#"&55'67'6 h içŸ" V"!=&+   ) ? 7 +•  &   0  42% ÿéó–!%73#3##5#'67#535#735#35#35#5#)°'AA=0 &?B&ŠŠŠŠŠŠc<–d&& G ' & +ÿèï”*733#3#5##5335#'##'2655##5##5353 ;;/; ;; $”%_ _C1E` KgxÿèÜ’ $7&''67#53#3'67'#;5#35#R   -4·m l&ˆ {" ##%%m$$/   ?? 5 &R ÿéé–0497#"''3255#'65535#35#7#"''3255#'65535#35#y  31111´  31111–‘$A@.I J‘$@@.I Iÿëö¤)-73#"''32765#3#3267#"&55'635#qe  Y C; * 5.))¤Y 9<)  Z !:ÿèë˜ 7#5##53#735##5##535#ë­"‘‘kk‘‘‘‘˜,,"86G G)ÿçë“28>7#5##5&'#"''3255#'67'6767767&'&'''6믧   )*(("&#38I& ! O $ “,,9 '  !    %  3   ÿæñ£'+177333###5#535#535#5335#35#3'6673#''67&'qUUPPbbPPBBBB^   tV £  ]] 1&(!  !SK ÿèëŸ$(,04973#3#"''3255#&''275##535#735#33535#335#67+ªLb   5CJ^J77K8ƒ77K8ŸP D  /  IZ /.=ÿçå™.26<73#3#"''3255#&''275##535#535'235#33567'7Ø (0JJ[   />FYIIR]<77K88 ™ 0=  (  AQ0 :=ÿç‘‘ 73#735#35#35#'67&'llGGGGGG @‘}Y56(     ÿèæ›"&73#"''3255##53535#335#3#735#Ì  ©^&rLL::nnJJ›CX  A^pCC2"06ÿꘔ"(733#"''3255##5335#35#7'6'&'L/   M0MMMMW T  ”0c  'z!1_    ÿèôœ(73#3655335#535#53#&''67#56\00=F001EPFIQ GJ#•AAd ).  #`Nÿéö›%)73&''67&''667##5##535#‚M! ( + & $  ?XLLL›     EJ J. ÿék–7#"''3255#'65535#35#k  )))))–– &)0]0K ÿìõ“  -7&''673#53535#35#35#'&''68 &®•CCCCCCO (“   &’’2 OO,  ":æ©7&''6767&'3#735#¬" MX+14 rªª††£  -1 ÿéì 37;73#"''32765#3#5'635#'#"''3255#'65535#35#ŒV JBC) #####  r* [ IG Y'H“ ')/[,Gÿçô¦:AY`73673#&''67'67#67#3673#&''67&'67#67#'3&''67'67#53667#D|.  -,< 0 / 6tE(E  $  9'u2  ! $ –    >       8  5  0ó¡ 7'67&'3#"''3267#'67#b$6 /Z)3 0.N‡  2= 1'¡   + ( ÿêó–$*<73533##"''3255#'3533#3#535#&'3533#67'75#‡? ?l'((/q/'„  w+**3@1+o''Y  U#   ÿêñ”'-397676767'7''67'6773#3#535#&'#'674'- #  %, ?m08z/*=  2f +  llP  ÿèöš 57#5'6733#535#3#3#&''67#53565#'6=  #*¬nnANB-4? 7>E% šƒg $#"&     ÿéô¨ 673#5##53&'&'''63673&'73#&'#'67#| _´c*. ,. + -8a- %U@ J1% @W¨ (($    *   - !ÿèð›#(-173533673#3#5##5'67537#535#67#5#5#2=) C\Xn(`_=[ #=gnn‹  ` E  D"ÿçé ,0473#3#"''3265#&''67#33#5'67#735#35#*¯w ’ B   % : h{ % ŠŠŠŠ M D-   #/.+ ÿéé™'1;I73533#"''32765#'65#'3#&'67&'67&'63#67'75#‡2  +&www   0   1   Vv51=2/{g K\$ R,   6 ÿèó’073#7#5'75#35#35#75#'3#3'2667#735#mb$::::::‚Q3@ '"A 2>’d lAAd<## < ÿêê©4:?CGKO73#"''32765#3#3#"''3255##5##535#5'6&'7##5#35#33535#3357§ ? I@   -(;Bs + ((;-h((;-©  h X  ##$l    9+ ÿïô¡&*.27&'3#535'67#53673&'#&'35#35#35# 9 æ <IRi0  %%8""4''x) 32! A.   6$$$$$ ÿêï›,H73533#3#5##535#3533#"''32665#'67##"''3255'7567#535557\75„1  6 1,    8; =WŽ   n!=(Z$ Q?  ÿìñ£ +/373#5##5335#35#7#5#327267##"&55353350#&&&&&»H  + £ ––8&b+Vh 3 •7777 ÿçó<736533533##5#'67# C<???7+?* //+ ÿçõ¢!'?F767'7''67#'6'#5'6&'3&''67&''667#†$% ", % 1  #ƒ!&K% .% ,$ %)@¢  # ‚i"       ÿæõžFK7#67327#"''67&'#37#53#3&''67'67#'66553533&'767ï<    k \+4   % } €  ‡- + ,-4   ) "B V Fì› 73#3#535#5#35#335335×F:À:E(8&&8(&›66%(ö273'67#&''67#3267#"&553#"''325@8RI1 ¤1!,% V 5*  4 H' ÿé÷› &C7#5##53533##"''3255#'3#&''3#3267#"&55#'675#í´m=  =^QQs  qk!5 =1(#›$$50  + 1  7/( Jö•$*7'66533267#"&55'3#67'675#&'Ž T ªT!(.!† …+ . " !   ÿêó§-5?E7&'#673267#"''67&'#'655353#5##53'>&'Î  ,6      p‚ 0!6  § + '2  *5:/% &,B"L=?N0  ÿèð›,067#5##53#3#5##5365#5#35#"&55#'67#3#7335ð¹²5:•<9j<•' !% &iiX!›$$ rs  [)   -<  ÿèö› $7JO73#3#"''3267#'655635#35#733#"&55#'667#53&&''67&67#q ",GHJ9 5#5555«     e  $ 2› E *  Y/5 % A#  ^   gÿéô›$*73533#3#535#3533##"''3255#&'n444?;4[   [  =-  *  Zÿè÷ !%73#67&'#67'53&'3535œ46  I 5WWW  U   09  ˜!!ÿèî§!%I73&''67&'7#53667#73#735#3#3##"''3255#535#535'28;  #  ,IXX33. !)RR`` jj[[%)T§   - %>2     yÿèó”7'67#535#535333#&'35± $'!!-2 (' #(:g ( ÿéõ)/5;A73#73#3##"''3255#73##"''3255#'67&'7'67&'ZZo]]yj)   /qo/   -_ P  7T  Q  NR  O *  )  ! !>ÿìóž #7#5'673#53&'3#536'&'o !Y+s4. &|D4žd '+ 07)0/*+.(ÿéë£ ,28<73#"''32765#'6'3&'73#67'76'&'##535#‹V  K n# Y>  '1/ $  «.£o X  0$ /*#,,$@O/Uÿéô˜#(.47&'#3##"''3255#535#5'63&''67&'§# #44   22& .L [˜  *  '  F   Dÿêô–"'-37&'#3##"''3255#535#5'63&'&'''6™#+ &EE   GG.7K <L– (  % H  ÿêó§-;?7#673267#"''67&'#'6553533&'733#3##5335#ë8    r„ ‹**%D 22-"/ !*2;3% '.E  6 A' ÿèñž"37;73533#3#3#535#535#'#5'6#"''3255##535#35#V?AA99H¤H88?  #´  aaaaa‘     €b (,F  Z ! kÿìñ“ 73#53535#35#35#á†>>>>>>“••2 PR"ÿèó¢-38=C7##53#5#33#3265#"&55#'67#5'667#367#335&'[5Ùr S >G " *  4( >= 0<H 4;ND 11    *$8<$$7*a$$7*€!!$2  (( k  **.ƒ03Qÿéñ¥%)-1573533'73#3#"''3255##5##535#35#33535#335QC%  K@  .-?C--?.m--?.Œ l  **+ƒ36 ÿêõ› )>DJP7'67&'676767&'7&''67'67#53#"''3267#'66&'#'674'D %* ˆ " #* \`    0 /=  2›-!(-/ -  !3M6?  ÿéï¥59=AEI73&'73673#33##&'#5##5'67#535#535#535#5#35335353354F4N9,'$!# %%1EE11Cx!!&[!&‘ 199- ÿçôŸ=73#'67'676553&'&'3#3#&''665#5365#'6‘KŸ!QZ  ac:E@4 2? '"‡8,0  " (oo MM    ÿéöŸ/LRX7676767&'7'#"''3255'67'67'6'367#"''3255'7567#'67&'Ú ( &*#    3  G›O$  # 9ffŸ *  -  '   ? 8c   ÿçî›#)7#5##53#3#53&'#735#35#'67&'í´!–CaÜe;pppp ' "q$#›**I, )B   ÿéð¬'/37;?7676767&'7&'#'67'67#53&'73##5##535#33535#35#T  67P' WW,Jdc~v@@R>@@R>>v        ?V V-ÿéñ¢ 2GMS7&'''67&''6767&'3#"''3255'675#73#"''3255'675#&'7&'ª!& $'G 0*b-3xa !(,#Nqc !(,$OU   ¢        0S   S    .î¢!73533#3#&''67#535#&'#6'PPPd2AM;dPŠ7 8“  4 ÿêñ¤ AH7&''6'&''6#535#53533#3#3&''67&''6#326½   {   ?gMMMMgŠ{%#1C+*6 -" &ud&¤    M,,     ;ìª.37353373#6732767#"'&55'67#535#67##B? :]$C8 =H 5/ :A (,%NUBg.Ÿ         ÿçô›>D767&'7''5'665567&'67&'7''5#'66556&'y       7‰     7Q›w   }!5, (4, FGINv  ~"6+ *5,'),% ÿéó¤#'<B7#3#67&'#67'5#'6553#3533##"''3255#&'賸L    B. &w**   w& ¤#  % (1. $/WS     ÿçó« 15973#53&'33##67&'67'5'67#5#5;5#35#ƒaÜe?$$>   M   3#2%%wwww« (   6   !   )  ÿéôš#'+;73533#3#3##5#535#535#35#33535#33573#3##5#535#011**4433))0+C+"_'..,,& F F,( M6OO6Jÿéò  $73'73#3673#53&'#5##535#V8C‘(#0¨-pYYYŠ   :JJ2!"íž73&'73673#3#3#535#535#0 5 4ZRRcÙbQQZ  "ÿíò¬#/E73#5363'67&'7#367335&'7'53373673267#"&5p _ºB58  :'# B$ $+  '!¬ WWL     55 7  D     ÿèî¦.;73#'66553&'533#3#535#535&''67&''6„^¹ W JJX¼QAA h ¦ =3' %G) 6P  !   ÿéñ™%)-F73#3#5##535#5#35#"&55#'733565#35#75#53#3267#"'"&55t$E#AE  9E EE¦@S? !™‰ ‰M+$]>2U=! T)Aç• 73#'6'3#'3#7&'šAI :-‹  • LFB   ÿ왜!%+733#5'667#5#'#335#35#'6:;j . +N-08EGœ UJ !%,ÿèì¨ L73&'73#&''67&'763353#3#"''3255#67&'7&''67##537#e^Ù–    uŒWj  `  &* /LF–    %%6;  % >O ÿæñ’$4>D733'67##"''3255#53&'767##5##537#53#3'6656&'\$   %-  BÕG(1t1 H %’  B  >  ZIJ[!2 &   ÿïô‘(-167#5#&'#3#3#53&'#535#5'67##53&7##35#íK18 1J>Þ3 J2 =)Li\ 3*‘)    )! `  ÿèó¢.26<@7'67#5367#53#3#&'3#'32665#7337#'35#35#&'#3#L #4F7¤Vy>* !)  ‚ DQ ~~~~g 0 5‚‚;  ;;    Y ! >7bÿéòŸ&-48<7'67&''673'#"''3255##767#''&'35#35#v  G  =/ 6 ? ====F    K  ƒ  )  &  ÿêóžJd73&''67&''667#'67#533'67##"''32655'67#53&'36533#"''32765#'67#–G   ) 9 q  E\   )2 V&2   "/ )$ž       H 4&%E6 'ÿèö¤#'+/39K733#"''3255##5##53'767#35#35#35#35#'&'333#"''675#`ƒ/  ,*8 ` **<,,<**<,,  1 %;IRJ ¤  ` !!"p 9 ,X  .X   Iÿèö¢<N7&'73#67&'#"''32654''67&''67&''67#333#"''675#( 3ŸB %  !, /%$ # &C=1 %;IRJ ¢          X   Iÿèö§$6R73&''67&''667#'&'333#"''675#33533#3#3##5#535#535#‰E  '$2( )  ?Z  1 %;IRJ N88833FFFF338§       .X   I     ÿèö¢!%)-1C7&'73533#3#3##5#535#535#35#33535#335'333#"''675#( 8AAA::FFGG88A&&9(a&&9(¾1 %;IRJ ¢    C  C ( % X   IKÿêö›57&''67&''633#33#"&''67{  N "88+-  " ›   (  ,/ Gÿéó’(733533#3#5333#33#"&''67l44?™,99%4# !‡-8  &Fÿèò¡"&73673#3##5#'67#5365#53&'5#|  & ''2, %$' % M0¡'DD0$!Z''ÿðì— 7#3#53#735#3#735#73#735#äµ½Ð>ppII-KK##EII##—…§/,11ÿéð«"&*/DJ73533#3#''275#535#35#33535#335'#63533##"''3255#&'cddR Q^1+SSc#@@T@”@@T@0™¤++   ¤: ¢  >  > " !    ÿéòœ#'+3773&'73#3#3#3##5'65#5#35#'#5##535#Š").''''2h1#####/œ   j $((l~„_N\ÿéò¡#'+73&'73#3#3#3##5'65#5#35#ˆ$)/((((3j3$$$$$¡  o ))ÿéîŸ"(9D73#3#3#7'75375#535#'6''67#"''3255##5#5'6f2_+++ Ì  x Ÿ74@   v a‘£$ ]Fÿéöœ7=CT73533#3#535#73533327#"&55#''67&'767#'67&'3533#7'75#())0p.(m*   R  > >*(((/9/*ŠL(7.: ##        ÿèõœ$*06<B7&''675'675#53673#5'675#&'7&''6'67'6}3: 79$B 8!")-$K^ \HBq #2 .>(RNH:ztk     53I    =      ! ÿèï¢'+/37;?73#3533#3#3##5#535#535#535335#735#33535#33535#335#¹S***S``__P((*R??SA”??SA**>*¢J      - ' L  ÿèî¦ '+/73#5##53'#5'673#3#5##537#35#35#„a¶d3 *6=S'7SSSS¦ -- (fI  %f f9:ÿêí¤ 08<73#53&'#"''32654'7##53673#53&'#5##535#N2x0´  -h `@@@¤  / 1™«    5L L/ÿéë -159=CI73#67767'7&'#"''3255#'67'67#735#33535#335&'''6#·v #*0D#   )(  )??S>‘??S> S$ ! G        , )a   JÿçõŸ3973533#3#&'#'67#535#3&''67&''667#T>@@K 0 !H>(J% -#+ $  - <‘  3       ÿçî•&8<@73#3#3267#"&55'67#'7367#'3#67&'7&''735#35#}k&1/  # / # 2dUB ! ////•; " +*!\0  t: ÿéñ¡ 06:73#3#535#5#35#3353353#3##"''3255#'67'ÕE9½7C}'8%%8''¡¨¨âe   j>" {@=¡ 00 +       ÿèó§3773#53''67&'3#67&'7'5'67#735#ƒcÚa* &r(& '(e–= M$2"  -#)qq§ !    4   5    ÿéô– &67367&''6573#735#35#''63#3##5#535#2   ';~~WWWWg  U8@@??5–0  '9;I*( $ && ÿéö¤4:@FL7&'733#3##"''3255#5373&''67&'767#'&''67&'''6) G ($  '#=K   6‚ o  3  ¤  A  <.?&!  !  ) '% #" ! ÿèó—!%5C73533#3#&'#5'67#535#35#33573'67#'6&''66///($  (/(3> 0   ! % Š 8 7788> '!, ÿçõ¦"&<H7#3#'6553&'75##5#35#3353353267#"&5536'33#7'íE:°Y))));)( ( "†662" ’5/" '0G "$-   5  ÿéõ   $6;CG73#53&'33#"&55#'6653#3##53&''67&67#'#5##535#<%^#© %  uNNNNsk " !# " 3?***   )  +      B D+ ÿéó™ C73#735#335335#673265#"''67&'#&''6553'33&'7 ¿¿&&8&'#Y   #!M \* ™;=         *   õ¡ $(733##3#5'67#5367#537#3353535#¸x Œ¡ $5NUEXNSYs{{¡ 1"     H ÿèí¤ /473#735#35#3#735#33533533&''27&'7#367+««…………&ÏÏ**>,.µ²=-.;-# +3¤>&/(    ÿéö ,0Q73533533533533#3267#"&55##5#'67#5##5#3#"''3255##5##535##5$ &&   D! !| }RK  92EMŒ    !!  %"  55'7& ÿéò­.6:>B733#3'7#73267#"&55'75#'665533#53535#35#35#mNNldPR + 8#$&+ Le Âaaaaaa­     >2( $FKII $ "  ÿçï©#)/5;73#'6553&'3533533##5#5#&'''67&'7&'€ [»[5%7--[%n7b  x ;  A  © 51, $-G<))   ÿéòš#'->DJ73533##"''32655#'6553'#33#7&'3##"''3255#&'''6—5   5isPPEPPs  ha' (R  :  {f a4& (/G1!' $  ÿèó˜,DK735#53533#3#3#3#"''3267#'67#535#73#&''67&''667#,//11++/GD  3 3,ŠF   )k  * #0= /  "ÿèô–!)-1573533#&'#5'67#7'6'&''#5##535#35#35#h;=/ !3q S  $$$$$$$X>>#"'TL)'L   ‘ ”(>=ÿæõª/37;?CGL735333##3#3#&''67'67#537#535#5#5;5#33535#33535#33567#)MNNVn„0 N 0(&N4$< 3C:UM::N;‰::N;AAUB? K ¢'     ' " 8 C kÿëó!'73&''67&''667&'&'’E      :  3. 10     A     ÿêò¢,1BHN733&'73&'#'67#&'&''6673##"''3255#&'''6:3 LL yG#    w ¦¶P   R„! !O% !¢    +    N$ !    ÿéó .CI73'67#&'&''6'3353#5#'67#535#3533##"''3255#&'›=XN3    f 7.J`  `     6 )   )/®F2 ' #  ÿéíª ,28F73#5##53&'&''3673267#"&''67''67&'3353#5#533€ \´d 1"'4 , 7!ª  K=¡=ª **  '   )   8#9 0&-Û© )73#53635#3&''67&'767#'67#oaµ=2I 3    -  0©kk cI       ÿéñ«#)/5;73#3#3#"''3267#5363535&'''67&''&'mZš¶¶± °</†††  vd    «D  2 x  T   ÿéé  PU7#5##535#'6'&'3673#3#&'#"''327#3267#"&55'67#5367#'#é«««ƒ W   6DKW       /  +#   ,.m / ··£“         $  & ÿéí¨ !%)/57#5##53&'73#3#535#35#33535#335'67&'í´d_£HJ¨JG66J6€66J6e+ (h'" $%–$$  OO ,."   ÿéñ048<@73##5#'665563533#3#3##5#535#535#35#33535#335å *K!  2´/00)),,22))/+B+ gg-' )4, QQ/1ÿèóž&,28>73#3#3#3#3##'32767#7#535335#&''&'''67&'ÒbPPm§—š© ª (&*^˜    H 8  ž    17%o    ÿçò¡%:LQW]767&''67'733#"&55#'6653533##"''3255#73&''67&'#367&'''6%  !À    …-++   -v_      i  7 ˜       '   N6  3      ÿçò— &-1;AG7&''673#&''67&''667#3#'767'&'#&'O(p?    #yDDRiD  —     " ""A  :ÿçô¤ +/O73#5##53&'33#3''67&'767#53'3#3#3276767#"&55#'667#„_´d)**/    >oKKe &  G4¤ &&(     ";  @%# ÿèî+/3=C7&'73#3##'32765#&''67#'67#735#35#37'5#33#7 ByPf /    SSSSg1 RQc FE (    * % \  Z* =ë£573#"''3265#'67#'6'3#&'#5'67#535'2—F      "   &- *£ =#*   !"  ÿéì¥&/59?EKQW7333#"''3265#'6553&'7'23'677&'37#67#&''&''4'''6Ø  ž! ^(d 6D (4pv~†‚    ¥ !/ 0/ +    71        ÿéôŸ+V73533#3##'6655#&'#5'675##535#73533#3##'3255#&'#5'675##535#***)    &*m+//(    $(+- -  19&0A,  '35"0A ÿéò¢'/37;?73673#&'#5'67#53&'735'2#5##535#33535#35#Ô &-#,R!5 :#$9 /'P+#S[]ƒ77K8ƒ77K88¢   [XX!.1ÿôÈJ "7&'&'''6733267#"&5€  E  c  !  J   + ÿèô¢ #'+/73#735#73#735#3#3##5#535#735#33535#335[[77\[[77x¸RjjiiR??S@“??S@¢//*L  . * ÿéó¦ +/373#3#535#5#35#3353353#3##5#535#735#35#ÙE9Á9E‚+9''9+&¢©KiillJ¦ )) %B  ' $  ï¦"&*73&'73#3#3#3##5'65#5#5#;8 QSIIII[°  TAAAAA£  K  @ÿéõ© 159=7&'#5'6&'3#"''325'#"''3255##535#35#73#–$1 ^ 1JU 6  '''''I©    U  NV  $m * 'F ÿèô¨$(=A73#&'#5'67#5367'2&'#35#33255##53#"''#735#Å $-w;( y+=O!Q81UU h eDD¨    1 ;& '@P<   ÿéëž $8<A7#"''3255#535#5#'##535#35##"''3255#'6555#35ë  M9999+M9999„  5C33ž›  UA % 3Atµ % $O  %%  †ÿéôš &7#"''3267#3&''67&'##567#æ  ;U     A $š)3)    [±}  ÿçò£!77&'7#3#3#535#'&''63533#&'#5'67#1 Äuhh{VVW 5  $edT$4 8%$8 2%S£   ' ]5     #  22 ÿçõ¡48@D73&''67&''667#'3#3#67'6753675#735##5##535#œ>     /†R+5$..¹<<<¡      =$ NJUPL L/ÿèò« 0J73533#3#535#3533#7'75#73533#3#535#3#3267#"&55#'67#!VUUcÙcV$&&(,7,$k%&&/m*%f¿; $+ @9 1    +  * $ í§"&*.73533#3#&''75#535#35#33535#335'#___L   RdcLL_&99L9…99L9 'œ  D  D % $ #  ÿéô¥ 073#735#3#735#73#735#3#3#3#"''3267#'7#5––nn0^^::d[[77{¸¸ç¡–‘/¥( ' '    ÿçñ¤)-1O7&'3673#3"'6267##5'67#735#3355#'3#&'#5'67#535'6‘  G  39  '$ %+ +0C2!""   )++¤  4C959]  KH ÿçõž !%)?73#735#35#3#7#5'75#35#35#75#73&''67&'767#+ªªƒƒƒƒ1æ} (.$222222S`    Kž@( ! ;D & ',      ÿçð§@GKOU[7367676767&'7'#"''3255'67'67''67&'67#5367#73#735#&'''6:7   (%,/>   *,&  $ +K[[77"!R 0*§           ( #=y   ÿèïª #'+/5;73533##5#3533533#3#535#35#35#35#35#'67&'"UUUU2U33­2DUU‡‡‡‡‡‡$ *-,e&% &'œ   [[ % # #     ÿäñ«#'-373533#3#535#735#3353#735#35#35#&'''6(NNNgãhN;;O;›­­‡‡‡‡‡‡c+# #)4 2 3¡ ' 7U<    ÿéî¥5L7&'&''2#5##53673'67#&''635#53533#3##5#'Ü ,8% am«”}( R A  "S &00))**6¥   )!$ I1   !!  ÿêó873#673"&&'#"''32655'67''67&''67#m& )65/   " & ! &1   '$'  ÿéðœ"&*L7'673&'73#3#3#3##75#5#35#'3#3##"''3255'67#'735#~  "&+%%%%-`2 |\   ! !"4]    l((s'A  8,%! 'ÿëe 7'6'6'6J( ") #" + &    + ÿèõ™ ;I7#'655&'73'67#'6'3#353#5#'67#5335#5363&''65ì»2l2 % ( *$  $7>( 4™A5) +1J    "))9 "1 )&+ %î¤!%)-173#3#3#535#535'65##5##5#35#35#35#8ŸÛ ’/0¤!""  *!!!!!!4"""""nÿéò¡)/5767&'7'#"''3255'67'67676&'''6Æ     B Œ/  7  1" T  ÿèî¨DHL735333##35#53353#5##535##5#3#5#'6653353#35#535#535#33535'POOC5##5CC4&  1BRRggPc<<< +  j& 44'  !- +   ÿéì *06<B73#35#535#53#3#"''3265#'67#56&''&''&'''6n%<<@@BTŸ  Ÿ *e    # O:  Kr   wÿëê—"(733#"''3255##5335#35#7'6'&'¥2 I+IIIIH  J  —2c  'z!1]    ÿèñ¡#'+@7&'3673#3##5#535#735#33535#33573##5#'665565 ? *1122*+C+p 'M  /¡   T$$22I bb,' )5, ÿèõ !%)8?L7'#67'535'63&'73&'3535'3'67&''667#67&'£$ Q  +"  ???&F   p  ,  D$m   b r(  '  F ÿåó¤#0D7#53#3#5##5##533#73#3#73#'&''667#53&'73&'vZÈZdQReH==g<0/• (%%(   7    Tð• /7#3#3##535#73#535#67#53&''67&'•01111;DD22  3F    •8'1C   ÿéï£ +IMQU73#53&'#'67'67'67676767673'73#3#3#3##5'65#5#35#…_Ûe5 &  .&-))((0d , £ ^ '  $A  X  ÿéò™6:>BH73#735#73#67327#"''67&'#7#5'75#53&'35#35#75#7&' ^^99xCA      #Xa555555˜  ™+     ,AHR ( + | ÿæð‘"6:@F7#3#3#3#67'7&''67#53533533#3#535#5335#'67&'vB;;;;A-  $' %n"x E  ‘    \-->-C    ÿéñ¡'+/R735333##3#3##5#535#535#535#535#33535'#3#3#3#67&'7''67#535z(/ /33;;66,,))22(;f=9999@. "" •  $$ 8 ` ÿêï¤#+/37;7#53#3#5##5##533#73#3#73##5##535#33535#35#vZÈZeRQdH==g<"   . (H%   " &1. &.RM    ÿéó¤!'OTZ`7'63&'73673#5##53&'&''33267#"'3&''67&''67&567#7&'''6ÙVlh? 5   ' "­*H #( 1 r%,;/,; /#  )6_f  † ¤    !#       9 I    ÿæõ¤0;?P7'673353353#73#&''67&'767#'6#5'673#67'5#'6651 'Sl2      v   !SSF  ¤  --.<4 )  bO+ ' " ÿéù¯$*08<@7&'#5'63&'3#73&'7#33533'67335#5##535#35#ƒ2; (`! C: O¼¼      {{{{{¯    6    3II &  ÿêõ§<KQ733#3#53533#67327#"''67&'#'65534'33'73#67'675#'6zYYcã.*x:    s„ ¦c' > *  §  !"    %(# #,   ( '   ÿ颣!%+17=733#5'667#35#33535#335&'''67&''4'6=r 60/L/  \Q  £ RE "4&   ÿèñ¨<S7#67&'7&''53&'73535#'67'67'672767767#"''32654'7##5¤6 $$$J0    ¬  ‘a/    )N$# / P7 :¡²ÿéõ¤!'Vj7'2733267#"&5''6'&''&'33#"''3255#7&'7&''67##53&'767#67#53''67' 4K>W  (&(  .   . " c0 2E   ¤ • ! ‹   S @    Zi Q     ÿêóª#)/5H73'73#3#53&'#37#3#735#35#&'7&'''6733272767#"&5XW*Bâ?$E8J5¦¦€€€€Fe  ›%  9(™   #?'         ÿéóœ,28PU73#&'#5'67#535'63533#3#535#&'''63&''67&''667]   !#'8,11=…6,W ; ": ")"  % œ OJ#!       ÿîóª #'+/373#3#735#33535#3353#3#735#33535#3353#Îβ²<7&'73#"''3255##53535#335#333#"''675#3#735#( ¶   dAD//j1 %;IRJ kCC##¢  :G 3GW::* X   I ' ÿéé¤ )-97#5##535#3533#3#535#3##5'67#735#67&'é«««433C˜C4r@ NN4 ¤»»¦• &*     ÿèö¢37I7&'3533#3#3#3#3##5#535#535#53&'#535#37#333#"''675#( ==<«? %P?žU= ! ! ,\7()WLMV*!  ÿéò¥#)-16:Ni733#"''3255##5#'655'6367#35#33535#73573#"''3267#'67#3533#3##5#535#'64,   %"&<&f   & ""''11¥ x "" !'3 18Z," 0''   ÿèö£#37;M73533#3&''67&'#535#67'3533#3#535#3#735#76767'7&'…*11*    )*  É2,,+i,2 cc??  2?Œ-      /I,4(      ÿéó’#<733533#3#3#3#535#535#535#53'3#3'667#&''67#(($$**0•1**##&&~]-,#  ’ŽŽ.7*  & ÿèï¯#'<BHNT73#3#'6553&'5##5#35#3353353#'62667#73&'#&'''67&'„aG;´[&),,,>)(€œ ’0   C  4 ¯ , 9+ +4N' 8  1   Iÿçó¨<73&'73#3#'6553&'#33673533#3#3#535#535#'6e6? '{%*7..))4…=++ • *%# !;  1  ÿêñ¡',AGM73&'73#3#3##"''3255#535#53'#67#73##5#'66556'67&'+/2,,  **0B%¤ +M"  4Ÿ O   &  "=cc.( *5-k  ÿçï§%)-15;AGM73#3#3#3#535#535#535#535'235#33535#335&'''67&''&'Ö '.eeNNXXeÞeYYOOffT\?<73#53635#35#7'6'&'&'''63533#&'#5'67#z&V 0000rª © h !edS%2 8%!; 4"R© WW)69      +  45ÿ莟"9@73533##5'67#7&'7'6&'3&''67'67#53667#744 .  Y 2  #    % }""$  0   *      /  ÿèó§$(,059=73#3673#3#5##5'67#535#535#735#33533567#35#35#Åb= ,P,b‚8.b_FFP));+(5;>‚‚‚‚§/ M <  F7 ' ÿèð¤%)/39?EKQ73#3#3#3#535#535#535#535'235#&'735'6&'''67&''&'Ú (1ddTTUUeÝdWWSSffR^G@@   DA" 1 –}  (  ¤33P  M      ÿéñš!'-LR73533##"''32655#'33533#537'6'&'373#3#7'75#535#53&'7&'”7   7^ ~'L _  &!6--46A6..6†  u%%` [6)))$   /  ÿçöž7&'333#"'&'75#(  2 %;IRJ!ž  ,X  I ÿéñ® "(.6:>BS7#5##53'7&''33267#"&57&'''63#53535#3353353##"''3255#íµ` $! *$‚   µâ""4&%·Û` hœ!!            )  ÿèó©$=EIO73533#3#535#3'67#3#3#535#3#3##"''3255#535##5##535#&' WYYM­MWÝ Ë¢HXÁVGæ   NN·b111d   ¡       44 ÿèî£#D7#53#3#5##5##533#73#3#73#3#3#"''3255##5##5##537#uYÈ[eSQcG==g<D73533#3#535#3#735##5##53#'3#3#535#535#'67#'#6hhhU½Th««……¯·§ PPeÞfQQ%%‚/ =§ " ##    ÿéôœ-?Rfy73#3&'7&'#"''32655##5##5'6735#''67&'767&''67&'76&''67&'767&''67&'76Úc?   A@ % 5cO    Y    M    Z    œg \sswz  .      (          ÿçô¡Ij73673267#"&5767#533'67#3#33#"&''66535#53&'3#3#&''67#537#'6" )  &  Of #((!#   0?f:(+  #(,¡           $ I        ÿèð 4JPV73#63#5'75#35#35#675#73&''67&'767#67&'#5'6'6'6t  (.#55555Wb  !  LB%*  -4G[. '*) $5 6 2 ;  #9    C   %G     ‰ÿèóŸ73'67#'6'667&¦: -  "Ÿ  "V!,.. ÿéòª#'+W\b73533533#3#&'#'67#535#35#35#35##'67#'67676767&'7&'#"''3257&'''6r$6 .?- '5$2rrrrrr5%%#  ('9    /? M +(¢5    5   X        ÿéä  &*.2:>73#735#3353353&'73#73#"''325'3#'3#3##5##535#ÉÉ,,>(+¿<<¾  '‹rroonJJJ 21f  VT= 00 ÿèô° 48<_73#5##53'3533533#3#3#&'#'67#535#535#35#35#3#3##"''3255#535#535'2„b³bF(4((&&E+ !P* !/B''(:4444G FF\\   [[DD".°  #       ÿèô¡17=73#3#35335#533#335#535#535#533#5356'67&'R%%%%1&**'0##$$&9ç(%n&" $$ --6DFrh‚      ÿéóž&:>FJN73533#3#3#&'#5'67#535#535#73533533#3#535#35##5##535#35#$%%!!))   ))!!$f€+CCCCCCŽ  135] ]"1ÿçì¢ #BFJN73#5'675#73#5'675#&'7&'3&'73#3#3#3##5'65#5#35#\"',$In\"&IOY3ROEEEESª "VDDDDD¢H  H      *     E    8î¢ "(73#'6'#3#3#535#35#5#7&'ŸBI  ) +r##DD##‰ ¢ *f,+  ÿîñª#)/5;CGKO735333##3#535#535#535#33535'67&''&'7&'3#53535#35#35#(NGGeÞeOOccNb555    fMCÞ!!3$$6        5      ))) ÿçô¤JNRV73353'33&'73#673267#"''67#53#3#367&'#'67#'65#535#7#33535s -    KN a +%d--"(   0%8 w/ H?5( %%/ ' !ÿèò°">BFJO7#5#&''67##5'673#7#3#33&''67&''67#735#35#35#67#ßA)    ; 5H@ £da "-A+1<2   "&||||||?OŒ$    'B  03 ÿèï #'+HN73#3##'2765#&''67#'67#735#35#'3#&'#5'67#535'633#wkEZ(    GGGG)##   '()7EW GH *   * ( + QK"mÿéñ !%IO733#5'6367#35#33535#33573673#3#3##5#535#535#53&''6;*_ " &;&2  ,((00++##(9- D  V@ *8Z .. ~  ÿèîž&NRVZ^73533#3#3#&'#5'67#535#535#73#3#"''3255#7&'7''75##535#735#33535#335"##&&    %&"dn.9   &  2-.I.Ž  12T <  & CU 20ÿëö£#'+<J]7&'3533#3#&'#5'67#535#35#33573'67#'63&''65'333#"&'&'75#% 1"""    " )/$   ­. %>K T.' £   4  +(  4 39  $W H ÿèñ©.26:>BH[ag733#3#"&55'75#'6553'67#732763#735#33535#335&''3;267##"&57&'''6pKKh .1-08Ni XCE$ ‘,,?+j,,?+2  #  3 p  } ©  <3' '/F!4       ÿèõ ?DWin73&'73#3#67&'#"''32655'67''67''67#53'#67#733#"&55#'6653&''67&'#367),1      '  #?#š  a     Š             9.  "!O     ÿçì«#'+/5;73533#3#535#3#735#3353353#735#35#35#'67&'```N°N`ÑÑ,,@,+­®®ˆˆˆˆˆˆ#!)(h$# #%¡ $ I4 ÿçôª4:@QUck73533#3#535#73533327#"&'#''67&'765#'67&'3533#7'75#3#3#''67#&'7#6)**0u2)q    U 8>)))03?1) ­­â4FO<  K 0¡ %%+-                ÿéö§-26<N73#3#"''3255#3#3#535#535##53'#53'67#35#'&'333#"&''75#ŸN#! -&&?##+#'B+6h  1 %BF`fl73673#3#&'#'67#5367#7'6'&''#"''3255#'65535#35#367&'#"''325'&''6h3;@M  " %!--i J   r    |  2 › ('2^2!N"     .   ÿèï¨ *DZ73#53635#35#727767'7''67'677767'7''67'673533#&'#5'67#z@H     Ÿ     %edO2 6#8 0Q¨ \\-:'  (  ]   0.  ÿéò®%;_7#'6553&'7#5'67#53533#&'3533#&'#5'67#3#3##"''3255#535#535'2ñÁ_4   !% Ÿ   ¥!)CCVV   WWEE#'QžC6, ,2L9    '   $      ÿìï¬7;?CGK73#3#673267#"&55#3#67'5#'66553&'5##5#35#335335ƒaE<;   ' =// V&'(((;')¬  ,   +  7 5( 'J(  Fÿéô£'/37;?73673#&'#5'67#53'735#'2##53#'#;5##;5#×  0#.' ,?5_…8''''''''£      ¦SSC ÿçó£.26:>BFLfm737#535#5#53535333##3#3&''67'7#735#33535#33535#3356773#&''67&''667#$#3..,,0?:  (/I/N!!4= A<       '*&&  l7 0Š # & )' ÿèó!'7;?E7&'73#3#535#5#35#335335&'3#3##5#535#735#35#''6'.¤3-š.2_,,¹DŽ?RROO<hhhh/   **    :  # '$ " ÿêí­7;?CY73#5#&'7#3#"''3255'67#53537'67##53&'35#35#35#73#3#"''3267#735#} _4 6 &   7.I" ,^9888888[XEM M AF­    j   D O =0+ 0 &ó¦#'->DJ73533##"''32655#'6553'#33#7&'3##"''3275#'67&'“;  ;hqMMATTv  mb' *  I  < 7# "3&      ÿêé£ 59Z`fl767&'7''5673#"''3265'3#"''3255#'67#3#''#3#67'675#535#5'63&'#'6'&'G    ¤   wC    OQ 33:I!33 50 2>£    3   •-  uR     -    ÿèõª8<AFK[73#'67'6753&'&'73#3267#"&55'67#53637#335367#33567'7''6”T® Xd oX:"9 6/ *,=-i$':2   ª ?4) #  M H* +$H$*    ÿéð"&*.2673533#&'#5'67#7#3#53#735#3#735#73#735#    Üvx‹-LL))// )-- }   Y_!,1ް. +88ÿéõž&AQ7#67#535'673#&'#5''655#5'67#535'673#&3#53533533î¿#*# !   «  $*#!%  7TÄ *CžC    +) %0TR#!     ,$$0 ÿéð¢ */37;?GK73#53&'3533673#3#5##5'67#535#67#35#35#'3#3##5##535#;&^"P$  0<> 4/$? >>>>yLLLLK%%%¢     ` I E7UE E) ÿéðž %)-`73533673#3#5##5'67#535#67#35#35#'3#67'#"''32655'67&''67''67#€! .89/,!: 9999†Z"     "  #  ` I  E7ƒ        ÿèï¨ -159=EIO73#53&'73#3##'2765#&''67#'67#735#35#3#3##5##535#733#7 $]"PkEZ'   GGGGqLLLLL)))LEW¨ GH *   * ( E G* ÿéë¥  $BFJN7##535#35#7#"''3255#535#5#3&'73#3#3#3##5'65#5#35#tM9999Ä   M9999G 41++++2m :(((((¥Bz¼ $ (£  \B $    =   ÿèø¡ #)?7&'73#735#&'33#735#73#735#'673533#&'#5'67#.DiiCC\>FF""DGG##‰ !NPA( , ) &?¡  -  ++ )&$  0/  ÿèö¥ %)-1AV\b73#53&'3#3267#"&55#'667#735#35#35#'3673#53&'3533##"''3255#'67&'D(d&Rd  ??????dn0%%   0  Q  ¥ q) , Q-.0   8 -  *    ÿèñŸ#'7=AEIOU73533#3#&'#5'67#535#35#335'6733#767#35#35#35#'67&'),,$$   $)%& .a1" ======  :• ? 03 ?? ! cc  **    ÿèñ¡GKOSX73533#7#"''3255'75#73#3#3#3#3##5#535#53&'#535#535#735#33533537#  O‹?88C  9DDAA3<009(E!.‚&5  *,,0      d ÿíð£#'+/37#53#3#3#535#53'3#735#73#735#3#735#73#735#vdÞffffÞdddVLL((cLL((‡LL((cLL((’ABB6+ + C,, ÿéõ§ #)/5;JY_e{7&''673326767#"&57&'&'7&'#&'7&''33267#"&5'33267#"&5''67'63533#&'#5'67#w ='  /!‰  }  ‚  @ ‡  ;   o     s  rdgN"/ :&!?7L§                    %  +,   ÿéõ!%)-8I`7'6733#5367#'635#33535#33573##5'673##"''3255#3653#&''67#7 B(^0 %:%==x  ŠD    j,,/   $&  DD 8 ( J bOV S4     ÿíò®048<@DLPTX733#3'67#732767#"&55'75#'665533#735#33535#3353#53535#35#35#pNNh XFH&" 11')2 K(ŽŽ--=-j--=-Å0/®         <2' #D>4   ÿéø£ $@FLRX733#5'667#35#33535#33573#&'#5'67#535'6&'''67&''4'/0` )#'<'{ ,#  &.(4C  N  G £ RC  "4]+*\W%&w   ÿèî¢ ".6HM73#735#335335#5##5#5'673#535#535##5##5#53&''67&67#-¨¨""2!!+¶1 #+nm[WW\‡z% m *(  ! 1 ¢& !UB /  *   ÿéõ  $08<@DJPV7&''67'6767677&'73#735#&''63#53535#35#35#&'''674'Y # %-llHH"  K “ "#j3(N%" 0SP3   8AAA11111   ÿét¡ 733#3#53533367'67''6>$g >  ¡..& ? 1 ÿèï«#):EIZ`f73#3#3#67'35375#535#'6''6##53#"''325'#5'63#3##"''3255#'67&'d7!%%""03)) " °<     ¬¬Þf   f> ,&w" «    "    L]@ * /! 9      ÿæõ«%;OS73#'6553&'3533#&'#5'67#'3533#&'#5'67#3#3#5##5'67#35#[¿a!%   Z      ·nnf  !/0ff«C7+ *4L)  !     -;* 1 ÿé÷  $@FLRX733#5'667#35#33535#335'3#&'#5'67#535'6&'''67&''4'‹<n 7/.J.t#""  $&+¤Y O   RE  !4U NC %s   ÿêó° 49O73#3#53635#35#73#3#3##5#535#53'#53&'67#3533#&'#5'67#8&BEV 1155Œ/#7//..5/$•eeS&/ 8%#8 .(S°--h$IS + N.. ÿèó­ QUY73&'73#3#735#73#735#'67#535#535#53533533#3#3#67&'67'75#35#__ÖTT00STT00R6S@..55755--?Z   K"  S777ž" " v      +  Sÿéð¤%7INcx~„7#3#53#3#3#&''67#5365#'6733#"&55#'6653&''67&'#3673#"''3255'675#73#"''3255'675#&'7&'?Xji21"  " Ÿ " Y   ³c  $-3%Qlc  $,1%Rbs—C ]        *   0B   B     ÿéó£ #AGMSY_733#5'667#35#33535#33573#3#3##5#535#535#536'&'&'''67&''4'+3_ ,%'<'d/((22,,##+>,  N  F £  RB   "4^ //  ~  ÿèó£48<@QUY_e73&'73#67&'7''67#'3533533#3#3#5#535#35#35#35#7##'32655##55#35'&'''6ƒ+0@  *. v,\Yk $,,,,,,¹   <N< k4     š22/22 8 £  5"% 11%      ÿéö©"(.:FLRbh7'2'#"''32654'7##5'6'&''&'#53#3#533#535#535#&'''6733267#"&57&'à5M?H  ¿ ) /3~:C”@7|{jiik7 0    "h  ©1 4©¹   5  +          ÿéó¡)=EIMQ73533#&''67#3#535#&''67#'3353#5#'67#535##5##535#3#735#a=9  B™D  G1(ÒdddEE!!˜    --   ,5¸I1%YYD4 # 3ò  %+1773#735#35#35#73#735#35#35#&'7&'''67'6[[777777`[[777777C { Ž  ~  N7   8N7          „ÿòñŸ73&'73#3#3#535#535#†*)+**.m,&&*ˆ  ,55, ÿéñ§9=BHNTZ`f7'2'3#5##53635#35#767333#"''3265#'65537#37#7&''&'&'''67&'4'Ù 2G;s"&&&&&™   c@EP X%c ? 9§  ‰ ŠC!X&0 4  %/( /Q    h    ÿèô¯"&*.GKOS7&'#5'6&'"3#735#73#735#73#735##"''3255##5##5##535#335335„ 82 hJS855477699%  &%%%%7%&¯   (  (  ( $:  !P  ÿéîŸ#+/7;CG7#53#3#5##5##533#73#3#73##5##535#7#5##535#7#5##535#uYÈ[eRQdG==g<CINy…73#'673#&''67&'767#'63733#3#7#77#'3&'47##3&'#66767&'7&'#"''3255#'67#'6&'''6:IX }9    & V ha#"$& * ;8K& ##   -.!$Y#!!I% "ª           #      1   ÿéð­BFJNRVp73#3#6732673#&'#5'67#53&'7"'5#'6553&'5##5#35#335335#"&55#3#73533'6„`B8=!&  -C$ -1 '=. Y*.///?.' C998  ­ "       !   +8+ +3L"  I%    ÿìsª#'7#3#3#67'75375#536735#35mDD!!21%222˜, , *(1d 8 ÿéë¥ $CGMQW7#"''3255#535#5#'##535#35#3533#3#&'#5'67#535#35#&'735'6ë  M;;;;+L::::>??88 # '-7>%% 2&¥¢  c:,:‚¼ 3  %  3.   ÿèê¡ -:@DY_73#735#335335#'655367&''6673#"''325''673#'&''66536''6ÇÇ**<*+´H    " !n  Š q"  !B ¡+ ()/..    V  P B      ô¤ <B7&'73#735#35##&'3#3#"''3265#'67#'67#'67#'6) C~~ZZZZX 8®yy  ! &    ¤  3   !        ÿçõ¦ $(,048JOU[a7676767'7&''67'6773#735#35#3#735#3353353&''67&'#367'&'''674'(   #  BFW[_dj73&'73#3&533#67327#"''67#53675&'&'#53'#367#5#35'3#7#5'35#35#35#675#7&'b %$   @I c %%ŽP    ¸  ’  "= % NH   G}n# tFJc ÿèø 26;@Eb{‚767'7#"'"&55'67#53673#327675'6'37#335367#335'3#&'#5'67#535'23&''67&'67#53667#Î    $ #8' ;,F*j $$  %+!( +       2   )$$T  T7  M 5 @      M  0  ÿéó¢#'+;?LRW[agms7'673&'73#3#3#3##75#5#35#'3#3#5##535#5#35#"&55#'7335655#35#&'''67&''&'ˆ  %'!!!!(T,ˆj!@9 @   6@ @@Á L E b  Y! `‡ ŠP  " 4"-`     ÿèõ¨"(.48>DTa73#53'#3&'#73#735#335335''6'6'&'73#7&'''6'6767'767&'§BGj  1‹‹'ÁÖ vB *#! 2 >   0¨    „—' !     ( ,    7  #ÿèñ¦ Y]aey73&'73#73&'73#3#3#3##5'#3#"''3255#67'7&''67##5367#5335365#5#35#'&''67&'76(2nˆ #"P %3   '  +(>+G    –   v @ *   CT6%%%)-a    ÿèô¯#'+/3FY^‡“73533#3#3#353#5335#535#535#35#33535#335733#"&55#'6553&''67&'#36766767'7&'#"''3255#'67#'6&'''6355**33h44++3-G-l $ _    t & 5;H&##   -."W# "!I % "¨ *  *-   .      ,       /   ÿéñ­;K[735#'66553'73#3#&'#5'67#535#3#&'#5'67#353#5#535#535#33#3##533?!+ _Y.)   =     1>>001g77@@:}B6+ &K         . c c  ÿèõ¨ #'+17;AGWd73#53&'3533#67'75#73#735#335335'6'&'73#7&'''6'6767'767&'©A”?† %Uƒƒ$n> (  - <   -¨ -//< B'     ( -    7   " ÿéé£ ,INRV\bh73#735#33533567677&'7&''67'6773'73#3#3#3##5'65#5#35#'&'#'67&'"»»&&7'&š "  &  P!(####*\ +.  3  * £0A      N   Iò¯ +?73#53&'67&'#7''7667#5&'#3#"''3267#'67#„cÛc-# 0   HE  $ ¯%   $<  #! %  ÿêö£ GZ_ekqw7''6'67&3'33#673267#"''67'75#535#535#535#7&'#3#3#3#7635#'&'7&'&''6` 8   Xq'&   2<+m&= SÉ  ´$ £      7+ %     T"   SE     !  # &$ #ÿèïD)/5766767&'7'#"''3255#'67#'6&'''6^ % 435811119t  \L5())))™<9"; &"&    < ;   ÿêî— #'73#735#73#735##5##535#7#5##535#8888vÍ—J*J*KR R6&R R6& ÿçô´)-159diyƒ‰73#3#35335#535#535#533#5##535635#3#3#735#3#3#&'#"''3267#'67#5'67#5365#5#35#"&55#'67#333535#3'7#D #\&- º-==--,, L­;A2$%   7D8 . $ @;b;•/ &f+•••_M´   88   869/# 5     5  #.ÿèõf67333#"''67&''667#73265#"&55#'665R,94.F  z  f .    0  &  4ÿêó^&73673###'3255#53&'735'2Û % "S #X$ !%M^"    !3ÿïïE 733533#537'6'&'v<¼C` z  EDDD@ 2ÿîîG73353353#3#535#533p,>¼>+GGG#//3ÿèñZ #733533#537'6'&''67&'r?¼=d|  0% !Y! !Z5553   >   &ÿè«\-73533#&'#5'67#73533#&'#5'67#0   :    L  :6 "   64  ÿé{Í"(.4733##"''3255#5335#35#7'6'&''67&'=%#   %#6666>  ?    J  Í6W>  ;W%5b   ‡   ^ÿéõÏ !'+?EKQW]cio7#5'673#&''67&''667#3#73#3#3#535#535#75#7767535&'35&'''67&''&'  99     & 0N ""&X$  2   ; 8 Ï­Œ).      t>      $  ?      `ôÊ7767#53&''67&'7&'G  Š¥!&7A/*8 0%? ´    oñÐ73353353#3#535#&<?RjâfOÄ((/ ]òÏ'73533#&'#5'675#733267#"&5/**  / · .*$*V  @íÏ73533#7&'7&''75#75##5#&PPP> Se_P <<µ:  ÿïœx73533#67'7''675#735#335522  5>!5""5 a=  ]ÿè¹Ã73#3'67#&''67#dU)'> 2    Ãz/$a   "B ÿéë˜&+/377'6733#"''32765#3#&''75#75#5##5#'#%+ ›   ^A AKOAA& z..hY h T88& &ÿèñ¬6:>73#3#&'#67'5#67#3533#7'7&''275#75##5#A””Ä  N! *‹ 5 cCBB6G^+(C…/1¬ '  ) .0 cÿé¶Ð73#&'#5'675#535'6¬     #Ð, g_)&WòÏ173#3#5335'2'3333#"''67&'767#'7#ã116x4=F#"JC=Z   )%+Ï1"2   _ÿë°Ï73#3#&''67#537#'6u&  Ï1%#;1Nñ¬ &,7&'36732767#"'"''67''67&'j /"%& ,  ©¬  $" (    RóÉ.267#"''3255#'65535#35#3267#"&553'#37#3p 0 ...._$ .) h<)É^   0 -Z?.hÿèôÐ#73533#3##5#535#73#5#53733##v/00====/Ajff">>"qI""˜ÿêòÐ &73#'63567#533##"''3255#·2: ! +?   !Ð %e7 5 ÿè÷Æ48<TX\735#53327#"&'5#3##5#3533#7'7&''275#735#33573533#7'7&''275#735#335CB¹  R==C((( &2(("((( &2((› " + &&77   7   ‡ÿèò¥%7&'73#353#5#'67#53365#536¡  C- #  +< ¥   -.H&@. .uÿèõÑ $(,7&''63533#67'7&''75#735#335µ  * ,,,  ,42,.Ñ  !:E" $!!!X†Ð73533#3#535##5##53#300+k-3tNcc  & #]ÿêóÏ2<@DJP73673#3#&'#67&'7''275#5'67#5367#3533&'35#35#'&'7'6i07=M!) .<+ )*.  1+2  c ¤/ . !  G‡   ÿê÷Ñ/37=D73&'73#&''67&'767#733#&''67#535#'#33655#35# )*    H1*# "" &+1*»     %u*-,%u3""""1 "  LïÐ@FL73#&''67&''667'3533#3##"''3255#'67#535#'67&'ŸC     ²)''+# "/) `  Ð $      + (8  *$  KñÐ+K73533#3#3#3#"''3265#'67#535#535#73#&''67&'767#'6(00)).=8  ,  !.$$(ŠD    * Ä                WåÊ 73#53#3'352³ÅIJ§§”v s 5$ 3ÿèô¾ %).BFJO73#3##5#53267#53635#335367#3355#3533#&''275#735#335&'#xc->>l.%44E3w-1B7- >FG G]+)F22E4(¾ ;  ; !   $ %-  + LèÏ ,0=7&'''673'67#'6'&'3#5'635#7&''6Z $~: / M DW $33x   #Ï       5'2(  NôÒ#)733&''67&'767#'6&'&'Tr"!5E--; .$ 'g &&(''&.,,-Ò    6     IóÕ .DJ73'7&''667#67&''3353#5#'67#535#3533##"''32655#&'¡D\ 1 0    x# @6Q`  ` Õ(    )$&„-$      ÿæù£&*.8<@F73#3#&'#&''275#5'67#5367#735#35#3533&'#35#335&'7#)ª^ …6(  DZ+(F  #1B3††††-. D 33G2 6£@ & " E $ *QëÈ)733'67##"''3255#'67#53&'767#.±#)X <  #@ 9Xc ‹È        iÿëöÊ$*0?EK73#&'##5#'67#535'2'6'&'&''33267#"&57&'''6â 8$    #79)  C:     R  Y Ê*00 (   b8  = !  fÿæõÓ (,048>D7#5'67&'3265#"&''7&'33#735#35#35#'67&'„ U .. "IooIIIIII@ Ó;$     >gH) ( !   _ÿéöÏ7=AEK73&'73#3&'33#673267#"''67#5367&'#53&'#367#35#35#7&'`)(    =F \  j  ²  #.Q/" &$\T ,! Y=dÿõ¸Î(73533#3#535#3#735#7677'7&'d""JII## !) »2;3  ^ÿéôÍ!77&'3#53#3'35'&''63533#&'#5'67#x :M^\KDD2p '  ;<0  ,Í  Nv3#   4 7:!.ÿèöº5BVZ^c7'673'67'3673#353#5#'67#53365#53&'3&''653533#&''275#735#335&'#´ 3 ‰) ! )s   {GK J`+)G44G7(—     -  &   <1  ,`éÑ 73533#''275#735#335&'#6+IO   Mf/.I66H;-Á51 EõÏ28>73533533#3#535#35#35#35#73##5#'6556&'''6,z',,,,,,« )Q# 2^ ( À;; " # PCC. 8c  _ÿïôÇ!%973#63#5'75#35#35#75#73#735#3#3#3#535#535#aS   ;55Yy3))<‹;++2ÇD M-. B_>_ IòÐ!'+/37Ke733##'3255##5#'655'6367#35#33535#33573#"''3267#'67#3533#3##5#535#'65)   %#'>'e   ( ##((11 ÐP   " % D    !     GóÐ>ENR73533533##5##5#3673#&''67&''#"''#5'6767#3265#35#""O C     4 † &L D Ä  '      * " $&% GõÎ#'+/3F]7335#535#535#53533#3#3#353#735#33535#335733#"&55#'6653&''67&'7367#44''11..((55e)@)f   S"  =b  5 5  U;   9  CïÑ9O7#&''53&'73535'#''67'67'676776767#"''3254'7##5£  &&& #7      ¦  ¾D  h   ):;  !4   !n} ÿåö‹"&<PTZ`73#735#3533#7'7''675#75##5#7#'6553265#"&5'#"''3255#'65535#35#74',¤¤~~  2  h<   ‹* 13  !$) ))Y _Y  )((  ?ôÏ48<@DHN733533#3#3#"''3255#&''275##535#535#53#335#33535#335#67&KCAA!Kb   5FM_L >>UCCc::L9…::L9Ï3&    +93(  =õÏ(,048HNT73533&'73#673265#"''67&'#'3#735#35#35#736533#'67#&'''6gD  5       FRJJ''''''@    ¸     #$lK,,     )õÑ)@Rf7&''67&'763533#&'#5'67#73533#&'#5'67#&''67'76373#&'#'67#’    y    !!         tR t5# -3< .?Ñ       ""   '(     1   LòÐ"&*IN73367353#3673#3#5'67#35#35#73&'73#3#3##5#535#53'#33676 IL^  77::W+,/,,++/$È   #!@ & 2 Z   CïÐ'+73533#3#535##5##53#3#5'67#35#fffR·SfÜ·¤t‚Ÿ  !{{Ç   #%%$  \ÿèôÏW[_73533533##5##5#35333##35#53353#5##535##5#3#5#'6753353#35#535#535#33535d+""+ 022& &(  '00>>0BÄ   2 "s"+ 99* 4! 2    EçÓ8FJ767#"''32655'67&''67&''67&'767&''673#"''3265'3#y   )9<*&4 1'!)   @ˆ ,Ó  !        l aX cÿéôÈ:LQf{‡733#"&55#'667##3#53#3#&''67#5347#'63&''67&'#3673#"''3255'675#73#"''3255'675#&'7&'ã    86F     /@   r@   .E@   .; L È    Rp          7Q   Q      1ÿèõ¾ %).BFJPdhlr73#3##5#53267#53635#335367#3355#3533#&''275#735#335&'#673533#&''275#735#335&'#6xc->>l/%44E3w-1B7- J"" !*"# '"# !*"" ¾ ;  ; !   $ %,*;,* %ôÐ%)-26:?RVZ`73533#'3#''275#535'275#735#335&'#35#335'7#73533#''275#735#335&'7#(OM 8F( '1**/,O==O;/e* 4+, '3++ Æ -   '  '  & 6 &7 (  (_ÿéðÏ(,04RZ^73353353#3#3#3#3#5'673&'7##35#5##"''3255#&'#5'67##5&'7#35#k#!8 14,,,,5{   <<#####l   =  Y Ê! .    > +  CR%    ?÷Ë?FJNR7#'67#'7#53#3#7''67#3573#3#3267#"&55'67#'7#67#353#735#35#P ! j(0[i(0*    *x¯¯‰‰‰‰ž   &   1=& AïÏ#3773533#3#3#5##535#535#35#3353#3#5'67#35#accOOf¸bNNa&;;O<•¤s€Ÿ  %{{È "##"0 #  FöÑ#(,04X^d7&''373#3#3#3##5'67'5#5#35#767327#"''67&''7&'3'&'''6Ò ~ +((((-` # !!!!!¾6    F 7  Ñ    K Q   "   ?ëÏ;~7&''67'67676767&'7&''67'67676767&'73#5#535#67767'7&''67'67#676767'7&''67'67#53_ "'   p "' $ÇÇ5     !'" K    "'" ó            !2            ÿöõÏ 733#5353635#35#35#pgê= 3$$7##6$$Ï   °Qÿê¨À73#3##5#535#UM##!!ÀJhhJAÿé­Î73533#&'#5'67#7&'P"   Hš44 zt1$BC Fÿð¨Ì 7'673#53#3#67'5#53e   ,1E"" ##˜  ( 5 EÿéEÎ7'6#5'64  Î "‚bJÿî²Í#73533533#3#535#5#&'''6Rh5%  %™444499999 # Iÿ驯!73#33#537#537#35##5##535#NR'' `/---Æ5$P$IWW7&Aÿé¸Ï*.373533#3##535#35#7#"''3255#'665535#35#A"d   ¤++*Sb*l1mÇ I7* 1$_6']'Cÿé·Ñ 673733#537#35#3#735##"''3255##5##535#53#R#f#+WW33L &/t3À "-0F  33%5  Bÿê°Ï"8733#5367#'635#33535#3353653#&''67#g*^. %:%R,*, $'Ï  WW E54     <ÿé¸Ê ?CGK73#735#35#35#73#735#35#35#3&'73#3#3#3##5'65#5#35#L//*009'("""")U -Ê^C*,A^C*,   H  ÿë÷Ï47'67#535#535#53533#3#3#67&'#67'E 4NhVV____VVh] + U ' .  !L <   ÿêïž 67&'''6767'7'67&'67'5'67'6©' !%M%(=-$ ) " L   4$+#ž !   ? ,  (   ÿë÷œ(,0733##67&'27'5'67#5#5;5#35#.¡%%H*P+0%  3$5""{{{{œ##    K '  (  #4'Oا 733##5#5335#35#vOOOO<<C7#533'67#67&'7'5'67'3255#'67#53&'67#W*ª? 0  ,L$ (  <+ !6 /OU;R      5    !$ =ðÑ $7#53&'73#67&'7&'#'63#735#`Pgdˆ J) " ST'©©‚‚¯    (5hÿìñÐ #73#'63#"''3257&'''6†ah ,   4  GÐ & ~  Y)*-',% &ÿèð¬BH73'67&''667#367&'7'5'67'67&''667#\[Mb" 1  KL8$&  @" 2" 4#%#1. ( Q 2¬&        7       _ÿëªÍ73''67&'67#5367#~     ÍK* $#c!1& ÿð“|&73&'73#67'5'67#67&'81=  !+A  g  7  0 _ÿé¤Ï7'6#5'6  Ï  f"'?îÓ#73#3#3#"''3267#5363535dWŒ´´«   ª2&zzzÓ<   k   ÿëò§/37;?73#3#3#67&'67'5'67#535#535#735#33535#335*¬LWWcX   G%  *(MdWWL::N9‡::N9§C   =      ) %  ÿéò¤27'67#5673#35#535#53#67&'#67'H .!0)#77778LB $L    WZ   < $   ÿéâe $7#"''3255##5'67&'3#735#â  šG  C ;WW//ed  Mj|   1ÿçò¢59=73#735##3267#67&'#7'5'67&&5535335'©©„„¤¯7Q  >    E$ + -&FE¢' $(   +       5 SïÏ$73353#5#'67#535#73533#3#535#% B7R6660p-6Ì v% ))‰óÐ"73#3533#3##5#535#'67#536°7< ""((00, Ð ##''WÿéóÐ273#'6553&'3#3533#3##5#535#'67#536² 0m< 29 !!((33+ ÐH># ´   *Ð  &&!1   j XK ?ðÊ!%)73#3#&'#5'67#535#735#33535#335$·RdC &8*#; 1$KaR??R?‘??R?ÊH    , & Bñ¦ *73#56737'673#&'#5'67#53/6( 1/ %2lS#  $ )ó°059>C73#67'7&''67#32767#"&55#'67#53365#335367#335Zl     %0"D 6=0@AS:Œ8/! !! ",Í    6           - 83ÿèô¨EIMZ7'67#5'67#535#535#53533533#3#3#'#67&'#67'75#35#&'##3&'7L /* '4>##''0%%%%@7*5   >  J000U;2        1   ‘ 8  .ím 7'6'&'73#7&'''6Ô$"‘P')(''5 .,m)  TÿéóÑ,048<7#'66553&'73533#3#3##5#535#535#35#33535#335òt =9-00))00//''-)@)¼M@2 -"Y %  VV 04‡òÏ#'+73533#3#3##5#535#535#35#33535#335‰)**((--++&&)'='½YY37ÿéôÏ(733#3#5353333#33#"&''673¹""%g      Ï!!??, ?  1ö¬6<BU73533#3#535#73533327#"&55#&''67'765#'67&'3533#67'675#*''1v2*s&      YA 7  0; £   %&         Cï¦ '+73#567373#3#&'#5'67#535#735#0;P(9a&5&  $1);;jT:#       ÿèó§ FJN73#735#73#735#'67#535#535#53533533#3#3#67&'7'75#35# VV//UYY44U 4%T?,,55:77//Bm %P)$ V:::§) ) ˆ        8  d  zÿÿÌd7#"''3255#'65535#35#Ì   $  ####dO   #$ $ \ÿèóÏ#'+9=A7'655#53533#&53#3#5367#35#35#'3#3#5367#35#35#¦'=AABB2 .54h63&% &9RR /– MM,0HLL,/Qÿê©Ï(.4:73#3#3##"''3255#535#53&'#53&'367#'67&'    =Ï F  AH W    VÿéôÎ-3GKOSW[_ek73533#3'33#673265#"''67&'#535#7&'3#3#3#535#535#735#33535#3355#35#'67&']"$$)$$   d("‚qWe"5" 2 Á  ++4#"8)! W =C  ) '(     Yÿé÷Í`735673#3#35335#533#335#535#535#533#&'#673#3##"''3255#535#535''67#^  '!  4 **<<  @@++   nP   (6 6  V      OÿéñÏFLdhlrx73533533##5##5##"''3255##5&'75''67'6763775##567&'73533#27&'7''75#735#335'67&'O0 -- 0¢  8      8( -    e      ‹— #    J¢³[ '8 8GÿêôÏ*?R‹7&''67'763533#7&'#5'67#'3533#'#5'67#&''67'76373#&'#673#3##"''3255#535#535"''67#¥      e    U    Q7 Q) "" ))99   ??,,  'Ï      %+  *      7         YÿçõÎ1S[mqˆ73533533##5##5#3533#3#&'7#'67#535#73533327#"'''67&'765#547#3533#67'75#3#3#''67#67&'7#Z"++"    !N       i %tt“ /5 (+)à           "      bìÈ 73#3#535#5#35#335335ØE9À;G(9''9(%È??.ÿçól"7333"&&#"'63267#53&''2Õ (0N%=4,A=! &@—V#&Zl  ÿèïi73#3##5#535#735#35#0¡GeeggF{{{{iK  . (  ÿèö’'+/FL73#3#3#"''3265#'67#53&'#53635#35#73#&''67&''667#A1-7H<   / ""2$>>>>rC    (’>" > #.$      ÿèõÈ#'73#3267#"&55#'667#735#35#35#-¥/ $  / #'*& *}}}}}}È•+   1!#hDDáÑ 7'2'6'&''&'× Mo\OC  3 Ñ    ÿçó‡"&73#3267#"&55#'67#735#35#35#8’* " . #% 8#kkkkkk‡m  L, *  ÿ逯$*735#53#3##5#367&''66''61(a'..12  ' "  ™ ,   &' lòÐ "(73#'6'#3#3#535#35#5#7&'§@G -&&,r FF ™Ð  "& ' ^ & &   Zîƒ7#5##5()OÿèõÎ/6@P7'673353353#3673#&''67&''65#67#'#5'67'5#'655g<;     5\ d O   Î( 0AA0@(8Z , ": #= ‡l%;  B $$ " lòÑ $(,04873#&'#'6'#3#3#535353573#735#335335•O& '!!&e==AjjÑ  & \   -  ÿê”Ð ;?CGKO73#5##53&'3673#&'3#5##5'67#53&'735#'23535#35#35#35#R1Y64  2 -G !+)  ,,,Ð #"'   V L [+-!wÚÏ 7'2#6'&''&'Ð IiXF2  0 Ï  upìÑ 73#'6&'— LV ' Ñ    ÿéòz7#5##5'66333267#"&5Ãc<67 5/ " -zZHGY!-3  +&  vÿéôÑ 17'67333#"''32765#'667#'667#'67#—  JhYG    $:¤   U3()  !!‚ÿéóÄ.73#"''3267#'67#3533#3##5#535#'6†h   % ##((11Ä6 -!> 11 xÿéôÐ:73673#3#3#535#535#53&'3533#3##5#535#'6ž  0**1v2--3++0055Ï   i&&  ÿè‡Ï>CGKPT73533#3#535##5##53#33#"''3255##5#'655'67#37#35#33535#735500(g,5xSE'(     '='Á  %%& J    "  ÿêÝn#(,059733#"''3255##5#'667'67#35#33535#735RS4 :<   )PK66I:…87K:nM '   $  YõÒ-3_c73673267##3#3#&''67#53'67&565#733'67#3#33#"''6735#53&'7#367"& @ )"   ' $]f **< 25Ï      .C   ! + fÿèóÐ %AEIMR7#5#&''67##5'673#67#3#33&''67&''67#735#35#35#67#ñ#     <1 l@@#"  HHHHHH% 5 ©$  ,P   8   = kÿéïÌ)-15T\`73353353#3#3#3#3#5'673'7##35#5##"''3255#&'#5'67##5&'7#35#u2,,&&&&-p   ?8a  4 T Ç   /    > * !  AQ#  ÿéôÐ 73&'73#3#3##5##535# jgç¶¶¶¶²‰‰‰²  V V6# ÿèíÑ+159AE733#&'#'67#3'73#'6655'6367#3#3##5##535#` PG' 8  #RN¶  , \ M žžšsssÑ     9* )HN  > ># ÿéõÐ !-15=A7&''&'73#&'#'67#5363&'73&'#3#3##5##535#z / ‹ 2/! ¤ , l71 O žžžžŸzzzÐ      A '  ? ?#8ÿöË~ 73'73#3#3#3#735#8=C“oooonnJJl     . ÿèõÐ#'+7;?GK73533533#3#&'#'67#535#35#35#35#&'#3&'73#3##5##535#'h''-4 ›  "0-':hhhhhhn V 5U’’’’¡‰‰‰Æ ?  ? % % -   -- _ÿïöÐ#+/3773&'7&'#3#"''3267#7#5'63#53535#35#35#ƒ N  4@D  m ! Ï ) ' ! r:::(((((]ÿéòÐ#)1573'67#'6'&'3&''66''6#5##535#£@  5 $  O ( ! % 4  pGGGÐ         /XV6$\ÿéòÐ'37;CG73&'73673673#3#'#'67#537#3&'73&'3#3##5##535#f   BP  k  )+.  JnnnnrQQQ¯       /  44 ;ôÒ 59=73#5##53&'3533533#3#3#&'#'67#535#535#35#35#„a·dD$4''..C3%+F+ %1=,,$74444Ò%%$     !  6ôÉ#'+/73#3#3#&'#'67#535#535#735#35#5#35#!¹*44=1" +L* -7--)’’’’iBBBÉ9       "  "  _ÿèðÈ$(173&'73673#3##5#535#'6553'#33#53'€  0))((-  WW*f(H   ''1!>y8' Uÿé¤Ð#'73#"''3255'67#5353635#35#35#}   1  ######Ð ¹  /j 286]‰Ï 73533#3#535#'6553'#3#5#111(d*1 a(Æ  E (‡òÏ#'+73533#3#3##5#535#535#35#33535#335Š***&&,,--&&*&:&¼ZZ38TÿéœÉ73#&'#5'67#535'6Ž    É' gd #!WñÍ,048<73#3#"''3267#535##53#3#&''75#53'35#35#35##7L45 33;-l.4 3>:33LL##4$$ Í- & - $$ %  % 9  Uÿè¬Ç"&7367#533#7#5'75#35#35#75#Y''=   Ÿ r#|JMWÿìôÇ,28K[73#"''3265#'6767#'3#"''3265#'667#'6''6'67537533#6733#3#53533­D   LD     PKC")  0Q  ÇP9(% "O8(% !"   † IESJ+HHVÿè«Ï /73#53&'3#735#367#"''3255'7567#ƒJCCJ   1Ï  330  vÿöÈ^7#"''255#'65535#35#È  %  ""#"^R   , ' \‡Ò$(,7#53673#3#3#"''327#'65#5375#35C($-)0H?    / !6'??˜..     $ Xÿð¢Î"73#35#535#53#56#53#7'7q $!H D$Î jd)  ÿéðÒ#,6:>BFNRZ^73673#3#3##5#535#535#53&'3#53'73#53&'3#'3#3#73##5##535#7#5##535#R 5 5`UUggeeTT^5"["‘$\"MM~MMMM~MM0---¾---Ò    ‰‰  W   #  00 0 1…òÏ#'73533#3#535#735#335#3#535#35‹)''-m/)( AEW//3à (   @, 0h8#ÿçÛj 73'73#3#3##5##535##PT¸œœœœ£†††Z    /0 YÿèìL'-373#"''255'675#73#"''3255'675#&'7&'^D   2IE  3@ P LP   P      [ÿéöÏ7CIOag73533#3#3##5#535#535#73533#3#3##5#535#535#3#535#535#&'7&''3336767#"&5''6cKEoppo@ B  N $           GC  9     ! `ÿèöÐ 6>BFJN73#5##53&'3673#&'#5'67#53&'735'2##53#'#;5##;5#¬8`9= (&# )20Nr.  Ð !#)   £ UUF RóÓ'8OSW7'6736733#537#35#73##5'673##"''3255##535#53#3#3##5#'735#5#3 /& l# C33„ ?  g1*Z$$$$,66Ó   >- / ,$    '-eÿí Î 73&'73#3#3##5##535#e;22336­ QW:* YÿéöÑ"(.:FLRbh7'2'#"'#532654'7#7'6'&'#&'#53#3#533#535#535#&'7&''33267#"&5''6Ý /&(j  S"(^%!VVDBBD%  :  A    Ñ <7ß—@     " A 5     "   ^ÿæðÑ3<EKQW]733673#5##53&'733#735#3#3#3#535#535#73'735#33735'67&''&''&'ž n   *eeCC866@=557   &8  g  x Ð   # 4     U        Mÿè¼Ï/37;L`733#3'67#'6553326565#"&55'7533#3#735##"''3255##53&'73673##5#u117 E  -    JJDD""7 0   Ï M=2 .K!   Tÿè®Ï#'+/5;73533#3#535#3#735#3353353#735#35#35#'67&'U###N#ZZ   ENN****** 'Ä   "+&X> ! !     Eÿñ¾Î7&'367'5#m I !5Î6} yFÿèõÏ#)1573'67#'6'&'&''66''6#5##535#—I  <  %  S% # * 9 PPPÏ  ' !  -[[8&RÿïóÐ$*26:>7&'36732765#"''67''67&'3#53535#35#35#“ &   z  ¡$#Ð  74 ?   = UAAA/////UÿêðÑ+/37I73673#53&'3##'3265'##'2655##535#35#73#3##'3267#'67#‚ "%–%e  2  #####C[‘ 5 : / 5Ñ   (L CL ] % >#3 , Kÿð®Ï2873733#3#"''3255##537#3#3##5#535#536'&'K+&(' 9#)8  ²}  iŠš,   z òÏ#'73533#3#535#735#335#3#535#35‚,++2x4,, KPb99>à (  B- 0i9rÿêòÇ'733265#"&55#3#3#'67#535#535#w_Çà  µ*&6! ,&*màÏ #73533533#735#33533535#3353359';Á'':''›'':''¾Q0/ ÿðóÐ/48<L733&'73&'#5'67#&'&''667#3#735#3673#53&'86b% I p B)     *xžžvv 4=Û<Ð  !,     -    I9*    héÏC7335#535#535#53533#3#3#353#5335#535#535#53533#3#3#3vÔÏU PbbP ÿéòg673#67&'#"''32654''67&''67&''67#Hl* #!&  ,<?.(6 4*"" (%%g       5ÿéòW473#67&'#"''32655'67&''67'"'67#>ªI      &2 5* + )!&3GW         ÿéñ£B73#735##5##53#67&'#"''32655'674''67''67#1  {{©¶!¢R %&  .?E,)7 4*) .4£( "!"    !      ÿë‰ÏN73533#3#535##5##53#3#67&'#"''32655'67&''67&''67#211+h*2sOAAj)    $' '   $          +ÔÁ3f73#67'#"''32654''67''67&''67#'3#67&'#"''32655'67''67&''67#‘=       _?          Á               ÿçðÈ !'73#3#535#3#735#35#35#'67&' ¿WhßcT±±‰‰‰‰‰‰' :2^&+ -)È1rP.-% yôÏ73267#"''7&'77&'æM "&k\  ³     '  yõÐ!73&'7&'#"''3267#'67#7'6In &/  9F 9 !/ *­  2 {ïÑ '7#5'6736732767#"&55'67I   &B)$'. # -"Ñ 8&     eõÐ 7&''63&'73'67#/7 92+> Q)C 0  tÐ"   }ôÉ 73##7#53737337#3#7#Ö"$¤ #3/01F3É  |óÐ73533#3#3#535#535#\^^PPjæhNN\Ä      ÿéïÑ#'-37'655673533#3#5355#5#35#&'''65lO LfQVVF™@ErrrrrS" #!*(%“J3-')}   pp/ $    ÿêöÏ!%)-17=73'33#3267#"'&'#7&''3#3#735#35#35#&'''6 •=<  –ÀkkvvQQQQQQ8% ¡..G* -X;  0nO + ,$    |êÏ73533533533##5#3#5#5#"4..Y"œ¯”4Á $4 xóÏ&733#7'753773673267#"&5F**-7;J" )'Ï 0/@   {ôÐ73533#3#535#735#335%PRRméjP==O?à -   ÿæô«#'-3736733#'#5'67#3&'#35#35#35#'67&'J ~5%› *:?g Awwwwww $*+]"" "#’ JN  0 % %    ÿçì‚ 73#735#35#35#&'''6-§§€€€€€€`($ &&=, (‚tS/0%     vôÔ'7&''#5'67327#"&''7&'3¯ `  $¼G   *@9Ô   <*    \íÏ&*.3873533533#3#"''327##5#'67#735#3353355##67#E&88G   2>+  5EX&%7(" +  , '  zèÐ'767&'7''563#"''3255#'67#k !# # )@b  !# Ð&  A5 #0  qèÐ7373#"''3267#'67#73#735#)2   ! * ! %}WW//¾/ . > yòÐ 73533##5#3533533##5##5#"URRU2^//^2¿   sîÒ 7#5'635'673#3#535#@  %IL.$KKA;IÒ:' {íÉ 73#3#535#5#35#335335ÚD;È;D‚+;((;+'É00 ÿèì£ &,273#673#5'675#35#35#35#7'6'67&'5”?+! &5R¤8-A ,',-\(% '&£  ^O B $ % g z     YõÏ$)/73533#&'&'#5'67&''67#67#75#]\ % <%*5 *  %‡ -'!      " fîÏ773533#3#&''67#5365#73533#3#&''67#537#'&&+/  # ! '.'r(&&+/  #-'À         4ÿéòµ159>BFJ736733##&'#&'7#'67#5'67#537#5367#335353'#35#35#35#G<H    9# $5=7KBHN73&'73#3#3#3#5'65#5#5#'#5'63#735#35#35#'67&'v"23..//3 ;++++++ ““oooooo #X#"!"¶  (   I ?& BS;     ÿåö‹ -AEKQW]73#735#3#735#35#35#7#'6553265#"&5'#"''3255#'65535#35#74''67&',¤¤~~<<d  <   žQ '  ‹* &P9 )#( )(Y _Y  )(( 1    gôÐ #'+17=L73533##5#735#335'#3#3#535#35#5#7&'7&'''6733267#"&5†))))*^e##CC##’   5  N     Ç *   ' ] % $       MÿèõÏ7=IMQU7#673265#"''67&'#'67#'65#535#53353537&'3#53#3#'#33535ò    A  R) 37  ²M$:& !' /IK=0 +(, #I81  ©ƒ1H $ ÿäó` %+1773#735#35#35#73#735#35#35#'67&'7'67&'``<<<<<<]dd@@@@@@d 4 X 8 `V< " >V= " !         0ÿæô¸!,28>DHLPTZ`73#3#3#"''3267#533535'#5'6'67&''&'7&'3#735#35#35#'67&'–@`ooi i NNNv(   Q"&R““qqqqqq! $( 3D&&%$¸+   J $ K4:       ?+ añË73#767#53&''67&''3#N5Xo $  [ËfI   #W6ÿçñ®!7#5##5367#5373#3'67&'Úa5W[LPZ P$ %pUBDW  #]  góÏ 7'67&'3#"''3267#'67#\!/ +j%, -&X‡  > 9 . Ï   (# xÿúòÄ 73#5##53&'3#´+I0)zzÄH68J±bñÐ733533##5#3#5#53533#3g122X"™¬##"D11Ð!!.@k}Ð767&'7&''56k !# " )Ð 1    L“wå¿73#735#“RR,,¿H&K_ïË7'673#3#535#53‘1F8 KK?;FF°ÿèêÏ+3;A73533#&''67#3#5##535#&''67##5##5'66&' VY   '`¯a!  !§i@/5 0**) )+¹   0)+0   PC25F!&   ,ÿãóµ',17=C7367333##&'#5##5'67#5367#537#33535&'#3'67&'F<<)  R (HO9K16< - V M!¡ (%()    / =   ÿéô·-15;CI7&'#5##5'67#535#535#53533533#3#3'35#35#&'#'66&'·! b *3>))!!,##,,@,,,,I 5 &.6 3) /*-,Y ,%'+     - ' - !  :ÿçò¶#'+6>FL73&'73#3#3#3##5'65#5#35#'#5'6#5##5'66&'Š +-))**0e 5#####,  ‹c:). +$(" !%¶    =   P  R=X6&(8  QõÑ$N7'673533#3#67'5#'67#5353'673533#3#3267#"&55#'67#535.   $  2I&&.#   $ -¨ '    #  ÿåö‹%9=CRX73#735##'6553265#"&5'#5##5##"''3255#'65535#35#73&''6574',¤¤~~Ž< 4    K S‹* 6$) ))Y _F78GY  )((   pÿèöÐ(06<73&''67&''667#35#53#3##5##53'67&' 8       -&2!Z&5zl9%G >!Ð      U 8((8;   ÿèòÏ%+173533#3##"''32655#'665#535#'67&'#RTTiG ,#! IgR¥ ·#h cC524#E . "!& &"mæÏ736533#"''32665#'67#}6  #,¥S5095=(SßÏ 73#5'5367Ë ÏÁ5  ~q•îË 73&'#•) Ë, uƒ ñ½73#3##5#535#ˆe*..--(½:RR:„êÌ 73353#533­fÌ£ƒ•”‚wìÏ!73#"''3267'6765#'6&'—I$*/'?   Ï )%  uôÎ 73#7&'''6'6«-  8J F BÎ{b" $5Ar óÏ!735333#'67#53655#335&'‚#+? * # #(#6 ¯ C/!  1Rn îÎ#(73673#"''3267##5'67#'672735¬.    $ Î-7 "\< + "=,kìà 73#53535#35#35#Ù111111Ù™3!RT#{èÅ73#"''3267#'67#3#735#i   %& aa;;ÅB +;0SL({æÏ73353353#353#5335#*k(º4II4FN2DF4N~ õÐ(.7#673267#"''67&'#67'53'37&'ê+         - §"+#0\  ))&  mäÐ733#535#535#5367#'6ž 5 aNGGJ+ + !Ð p  w òÏ73533#3#535##5##535#w366.l,3m<<<³CS S5#oôÎ#73533#3#&'#5'67#535#'6**//  "&/ Ä## @@!"  s ðÆ)/573#"''3255'675#73#"''3255'675#&'7&'{5  #<9  '1  P  Ƨ 0 D§ 2 D    k ñÎ$*73'67#'6'&'&''66''6°9 *  #  H   * Î  #" 6 + '""höÏ)/7367&'3267#"&5'3'67'67'&'´    $)"   Ï2   6  ¦b9$ ' 4d èÏ %)73#"''3265'3#3'67#&''67#3#Ö  jG#4 )   MϨ –_$H  5nw ñÇ 73#735#35#3#3##5#535#bb;;;;j+3344,ÇM.,,((móÎ(73533#3#535#7&''6'''6|*,,68*W I S{{%/ '{ ïÌ"(733#"''3255##535#5#7'6'&'¬+  G-,GGGN  K  Ì8p  0†$!v   jôÑ &,7&''63#3#3#535#535#&'7'6´ # ) N--66--  [ Ñ   44+  eëÐ*0673#"''3267#'63533#&'#5'67#7&'7'6ŒS  J  '!!  @Ѐ3q @11 49  !5   píÐ!%)73&'73#3#3#3#5'65#5#35•"!!!!#g -Ð w ,.còÇ773#7#5'275#35#35#675#767#53&''67&'eN   < -@    Ç{!ƒO S;:  fëÐ@V73#"''3265#'6336553353#3#"''3265#'67'67#336553353#'67#†Z U# T  Q  & 'ÐA'  D)  A" qîÏ#'+/5;73533533#3#3#535#535#35#35#33535#335'67&'x1*g*4,+C+9 9 ½LLQ * !  kõÏ!%6:>73#&'#5'67#5367'2&'#35##"''3255##53#735#Û -? P !0(3",,R  R 77Ï  : E 0EV( e ñÏ 0I73533#3#535#3533#7'75#73533#3#535#3#3265#"&55#'67#{,//8~4, ?E=y%   ' Á  -   (   ) m ñÐ!%)/5;A73&'73#3#3#3#5'65#5#5#&'''67&'7&'Ž$'####(n -"""""Q  T .-Ï L!! eóÊ .73#735#3#735#73#735##53533#&'#5'6~dd@@88399(08;;  $Ê-)-.A  &,f îË ">BFJ75#53#5'675#53#5'6'&'7&'3'73#3#3#3#5'65#5#35•(9 R(: L J +..''''.w 3%%%%£N  N  !   )   >  góÏ(MU`f7'673533#3#265#"&55#'67#535#'673533#3#67'5#'67#535#5##53'6652&'¶   K    [C*9  ®         F>./?$   j÷Í#Oaeim73533#3#7'5#'67#535#'635#'673533#3#32765#"&55#'67#3#&'7#'67#735#35#35#w     ?       :n  .  JJJJJJÌ            #R    9   cõÕ )-7#5'673#&''67&'767#'6'3#D  %eM '   2  3ÕJ6        MOÿé®Ñ"73#3#&''67#53655#'6s-  # Ñ&* &7& #YÿèôÍ &,7'655673#3#5##537733'67&'„@. 34,6*< 4‡*?4 15c VFHX+L[  ÿéö«@DHMQ73533533#3#3#&'#3#33#"''675#5'67#535#535#5#35#3&'#35#-'1&&&&A3( &2>##'j111[ =hh         $    %(VîÏ#'+>73533#3#3##5#535#535#35#33535#33573##5#'6556///((--00++/+D+y )H .Æ 55?66 /ŒóÏ#'+73533#3#3##5#535#535#35#33535#335‘&((%%**++&&&'<'¼ZZ39Yÿé¨Ð#)73'73#3##"''3255#735#&'''6[ M?  %%³ EG  D#< kÿèéŒ#'73533#3#5##5##535#735#33535#335t+//8&"4+-Q""4&{0 ? ## @ R‰ òÏ+173533#3#3#3#3##5#535#535#53'#535#367#$'',+$$++))$$+*$$'¼: UÿêóÐ<@D733533##5##5#533533#3673#3#5##5'675367#535#35#35#€-!!-*## 4 AG 93*GGGGÏ.  ` I  X4Oÿë¬Ï&*.73#3#3#"''3265#'67#53'7#53635#35#z +$     #!!!!ÏO4%6 O */ ÿèôÑ37;?CGLfj733533#3#3#"''3255#''275##535#535#53#335#33535#335#7&3#3#3#"''675#735#KCAA!Mb  # 1?L^J >>UCCc88J;…88J;#o›DQQi)s +EwwÑ  4   $24  )  &    VÿéõÐ &*.2Ia73#'635#53533533533533#3#7#3'#3'#33'67#&''673533#3##5#'735#yoz •s !%#,   ?"# "Ð P' 5)   ]ÿçôÐ&FJNRV733533##5##5#53&'3##'3255#3&'73#3#3#3##5'65#5#35#'3#„".."''  )_ N? %3Ï  ˜  „    U  ROÿê´Ï+/>DH73&'73673#3#3#&''67#537#535#5#35#"&55#'67#333535#W $(   ! $("16   -666´     ^   ^ 6     > RÿéôÏ4:>BT7#'6553&'73533#3#535#3533##"''3255#&''3#735#76767'67&'ô€C@<C  A<<  !( ¼M@3 1>Z '%%l  g1(  XÿèðÏ6B]v7&''67'6776767'7''67'6776767'73#5#535#53''67'6767767'7''67'677767'     O     ††ƒƒM     Q     ™  "   " :æ`D  " %   # OóÑ(9PTX736733#537#35#''673##5'673##"''3255##5#'7#535#53#3#3'35#5#O!& m'!C •00…  ”; ,.3+\ ##'R::É    C3 1 .=    3-tÿöØy"&*73&'73#3#3#3##5'65#5#35#C &x    K ‚ ïÈ159=AGK73#3#3#&'#3267#"&55'67#5367#535#5#35#3353353&'##3†c)0 -"   #$8    -'È2  $ # 2$J RÿèöÐ %+06<@DHL^c73&'73#'3&''6673&''667'6''6''67'673#3#3#735#3&''67&'#367’ ."    c    %  c + &&%%-- ?~ $#/*# » !4  0>. 0"( , *   Ið± 4973#3#53635#35#73&'73#3#3##5#535#53'#67#8'?@R --..M./%622..5!B ±' &X! > 8      OÿéóÐ'+RZ^b73533533##5##5#3533533#3#535#35#'3533#3#3#&'#5'67#535#535##5##535#35#[#-$$-#EU g    •'''''Á ' 928Z [!0 ^ÿèùÔ /5BJRX^d73#5##53&''67&'3#35#535#53#56&'73327#"'&'37'737''&'&'7&'¤:k= :  ''^((,>‚;  l 9      D   Ô         B=I  )")8H   SH   S      TÿçøÒ#6HLRXov73&'73673#3#537#35#35#35#'33#67'7536773327#"&553'#3'67&''3&''67&''667#[.  'D3F@+  f * e  ^ 5 ? " ,!  ! 6»    NN !   9 >: C, 0         \ÿçóÎ!%)/37VZ^b733533##5##5#53##'32655#535#5#'##535#35#3&'73#3#3#3##5'65#5#35#‚+""+&&n  2 3"""" F (Í   © cA # 2A|½ #    ?    ZÿèóÇ48<@7#67673&'73#3#3#3##5'#5'6555#5#35#ò{  A  bÇA+$(  n  kt 5, 7>`h,,ZÿéùÒ;?CGMSci7#67673&'73#3#3#3##5'#5''6553'75#5#35#&'7&''33267#"&5''6òz =  A7  @  À="  H F=D2 6;\  D$      # _ÿçðÑ +AEIMQW]7#5##53&'73#3#353#5335#535#'6'3#3#7'675#535#3#735#35#35#&'''6ðm=& A   @5 qqMMMMMM;( À         ;T= !    ÿéóÏ#'+73533#3#3##5#535#535#35#33535#335cggUUkkggQQc&==QA’==QA¼d$$d<>ÿçì; 7'6'&''67&'Ê "'„% #L&14M4$ "2;       ÿêö¯37;?C73533&'#'67#53673#&'#3#3##5#535#535#35#33535#335;;6:2 &E  w6) ;KKffffKK;88L9…88L9p       >  > $ ÿéí†#'+73533#3#3##5#535#535#35#33535#335;<;;HHccffJJ<77J577J5y  F  F & & ÿé™#'+73533#3#3##5#535#535#35#33535#3356991133;;//60N0  E  E % %  ÿçó©159=A736733#&'#'67#3533#3#3##5#535#535#35#33535#335? ‡3" +J& &-8::LLggggLL8::N9‡::N9–     @  @ % " vïÏ;73533#3#&''67#5367#73533#3#&''67#5365#'""'&     +'k$**5+ $  ##À       ÿèóÑ=AEIMSY73#3#35#535#535#53533#3#3#35#535#535#533#535635#33535#335'67&'GG''""%%&&""((G1æ/$6$I( %v))Ñ   E  E ! “‹@' \   ÿéˆÏ7;?CG73533#3#535##5##53#3533#3#3##5#535#535#35#33535#335433*j-4ySHH1..++1166,,1-G-Æ    ::  òÏ#'+73533#3#3##5#535#535#35#33535#335“%%%""''((##%$4$¼ZZ38 ÿé¯Ï#'+FW[_73533#3#3##5#535#535#35#33535#33573&'73#67'7&''67##"''3255##535#35#  '  (    H   """""»^))^<<[   Af  .} 1^ÿéóÇ 'B^7'6553'#3357#533##"''3255#3567#533##"''3255#'#"''3255'7567#53€\\V,7U #, ,33     4 —3F5 6?_0 7  A      \„Ð#'+/373533#3#3#353#5335#535#535#35#33535#335 444++11d33,,4-H-È /  /^ÿïºÐ 9733533#53'&'7'63&'73673#3#67'75#535#yN  L D  '-$Ï:;;2X  ÿèñq#'+73533#3#3##5#535#535#35#33535#335:=<>Q=Ž>>Q=e  ;  ; " ! ÿçôb#'+GKOSW73533#3#3##5#535#535#35#33535#33573533#3#3##5#535#535#35#33535#335///((,,11((/&=&,//))3300)),)@)\77  877  -ôÐ59=AE_ekqw}ƒ7&''67#'736767&'73533#3#3##5#535#535#35#33535#3357&''67#'73767&'&''&'7&'''6'&'''6I    "!!"  *  N      Œw–  2- )5  E  E & )   0&& ÿæôÐ!73#3533#3##5#535#'67#536j v<JJbbqqS:DÐ"** 77 "ÿæòI,767#53&''67&'767#53&''67&'/ E[   r  Kb  0          ÿç|!733#7#5'75#'67#5373#3P%%'<@1 #:C R#   ]ïÎ:73533#3#&''67#5367#73533#3#&''67#5365#'!"''   $+'k$)*5-! %   ##»          jëÏ73#5#535#535#53733#3#3##bNNBBJJ(JJCCNNÏd     7ðÐ!8PVZ735#'67#53673#3533#3##5#767'67'67676676767'67'67'673#T%' '. %‡$   ´ "   !$uEEc Z!"  #W ^ÿé­Î+/373&'73#67'7&''67##"''3255##535#35#^ (  G    ´    =d  .} 0 ÿèóÐ %73&'73#3&'73673#3##5#535#\ WÉB  9 @hUUXXj¯ +  #??#ÿéuÅ 7#'655#3#5##535#p? ?--ÅO*4!KK+2mmF4GÿéšÏ73533#"''3267#'655#_  %% £,,…w"S3 1H"Fÿë¦Ð(.47'67'67676767&'7'##'3257&'''6p     '  - N'!3#  S > "# ZÿêšÌ 73#53&'3#3##5##535#y@ >>>>=Ì @U U7%)ÿê÷œ73##53#67&'#67'H ,ÅU 'P# œ.  )HW @ôÊ"&7#3#67&'#67'5#'6553#ä«´[    N %‰‰Ê+ -'  1%22 ÿèòÏ #GK73533533#735#33533535#335335#3#67&'#67'5#'66553#":(:Ã'':(''':('½ÀS    D%  #à I- ' && -)  5$ 8eké~73#e„„~UïÏ 73533##5#UBDDBŠEEdd\%äÌ 73353#533–&ˆ&Ì”wЇtHîÏ $73#'6333267##"&5477#whr  f;  (8BÏ 1 & 0NöÇ73327#"&'5#3##5#535#T}1++**$ÇQ((*<&@>;UU;JîË-7#"''3267#53276767##"&55'753753à  " 2 «M(MHO R+&3.[ ðÎ733##"''32655#53&'¯--   TT;Î'm h'!"LíÇ7#53#3#"''32765#'65u#›fU  @))´%[  0A)&6Né 7'66553'#3} €XXv5( 'JL9&U"íÆ73#3#3#535#535#YŽ=77C˜A88=Æ.==.MìÏ$733#353#3267#"&55#5335#53’DD&:! 7#EEÏC3E' ,E3CYìË 77'56#"''3255##5•! !r %Ër € jž±RíÈ73#3#67&'7&''67#ett›R&( 3:2È+2 $ 0MðÏ "73&'73#3267#"&55#'655UA <‘q   /"ªP B" ('ZíÅ"735#53#3##"''32655'67#'t ATŠ"$$   1.>ª44A :, #RðÎ735733#&''67#7&'Z8DE'%%1 ;8k  ˜56"-%#/DE KðÄ73##5'67#&'W”9/"EjÄ †h#=,SêÐ7&'3#&''67&'767#™  /” - / `Ð$,   %[ çÏ7#5##5##535335#35#ç)';;'';))§k@@ j((J777O ðÎ!73533533#3##5#'67#535#35#V#$((++%"(*#7$$¥))))+EE- #+++QèÏ%73533#3#3#"''3267##5#535#535#R>DD99C  .??22>¶2 AAQ èÐ!73#3533#3##5#535#'67#53‰OV $44;;HH9 !)Ð !!&&M߯ 7#5#'665535#&'ÜO OO&!%Æh4( 'LE2S%##bèÏ 73533#3#735#b.DD:|TTr]+Z4JóÈ #7'6553'#33673265#"&5r‡ccN% %+ ! ,ŠG#ED>,#  "  KðË73533533533##5#3#5#5#KDvŠv++..--HH[n555DöÏ 473#'6##'3267#5;267##"&55'753753noy } $   = Ï <962  6!]éÇ7#"''3255##53#735#é  d%AAÇ  …¤·,Z5GíÏ"&73533#"''32765#'6655#7#5##535#Q&  & œ¬##v! J["32%© ªŠxLîÏ$*7'673'673#"''325''67&'x   j >   ( k  ¡ "'  i  P, $"") *"]áÎ 73533#735#33535#335]97„%%9#\%%9#§''‹O(((d)))bâÐ 73#5365#35#”@€*=XXXÐ šš L..F3P ìÏ&73533#3#&''67#53655#'6t55?D&* 2@G# È'' "%#"  M ìÍ73#3#3##5#'6yiUJJLL Í "* 'D òÈ "73&'#'3'67#&''6° G-  5  ÈCbº >+'L     "N ðÏ73533##5'67#7&'&'W>@@':u  ¤++„f3!<<  E$+ -#QïÍ!73533#3#67&'7&''67#535#]9>>ER#% 385E9«""* ! (JòÅ7'67#53&3#3#535#¡ , NRk !%au3B”>.‡& ((XéÄ 73#735#3#735#X‘‘iiCCĦ€R0[çÅ7#"''3255##53#3#735#ç  dPPBBÅž  †¡´%F&KòÏ"&*7#"''3255##5'67#53673#35#35#æ  P #2Vb PPPPh  *n   #0SðÏ%73#3##5#'67#535#5365#'&' "((.% T .   Ï*EE+*Q**e  H ôÑ!'-7&'3##"''32655#'6765#'67&'¥9—0   (    Ñ "n i9' >' $ " QñÈ '73#3#535#33535#"&55#'567#33275Q 6-’,1D?j   Q È‚‚ˆ 17 (,3PìÎ73533#3#535#3#735#PDDD9†9DwwOO´?L&G äÊ '+73#"''3265'3#3'67#&''67#3#Ñ   Z.+B 5    ]ʤ ˜ d&J  6uFáÏ!%73#"''32765#3##5'635#35#w^  SC6  ####ÏvYY ^ 77KñÏ "(.73'67'6773&'3267#"&57'6'&'€6 , &    3 n  Ïb8$+KN=  –   ^æÐ73#"''3255##5363#735#’I  `( <<Ð Œ  t‘¤,W4[ãÏ"(733#"''3255##5335#35#'&'7'6•8  Z6"ZZZZ x Ï5r  ,‹':g   NëÅ $(735#53#3#75#35#"&55#'67#333535#W,55+ŠN*c Kcccœ……R!" !aI ôÌ573#&'#5'67#535'2#533#"''3267#7#'66Ø  E6# (& $7D5@n '   , ( Ì  r+  NðÆ773#67&'#"''32655'67&'5'67&''67#W9 ' ,## %  )>Æ        N óÐ.47&'3533#67&'#"''32655'675#&'Ç  `>DD     " )>  Ð %%2( #1  I êÐ*.273673#3'3267##5'67#735#53&'355#z !8F1% &/5># _Ñ 6 32 TîÇ !-73#&'67&'6'&'63#3#535#Y••  k  "  <‹@F˜@9Ç      <$$EóÏ9?7367&''667'#"''32654''67&''67&'76'6µ  4          Ï4  &- 96( 3      " PðÓ 73&'73#3#3#3#735#PB F ‚‚‚‚XXµ ?ZéÉ#'+/3733#"''3255##5##53&'767#35#35#35#35#ZŒ5  +)?  j))=++=))=++É q ((+„   E7NìÇ73#33#537#537#35#3#735#T–RFž($15>81‚‚\\Ç,?=?IòÏ273533#7#"''32655'75#73##5#'6556P  "– ">)®!!&5 ) ,, "gg 1+ &)OVëÆ73#735#3#3#3#535#535#`||VV†;44D•?339Æ@;LñÏ73533#3#535#'63#735#t88F¥L$ ~~XXÌ OD!KèÑ:767'7&''6&'''63&''67&'767#'6‹!  4:!D8 %=   *" 7 %Ñ          F óÒ773&''67&''667#3533#3#3##5#535#535#‚K )!#0'  %  C'<??77FFBB33<Ò      CO îÏ#'+73533#3#3##5#535#535#35#33535#335PEEE;;GGFF;;E((:(b((:(¾WW33QòÈ$*073##"''3255##53##'25655##5&'7&'Q¡¡G  ” !)aÈ~  g„–~ g†˜*K öÐ26:@735333##67&'#"''3255'675#535#535#33535&'`4::     #(55II4F'''l Á""     #%  KïÆ'-37&'#"''3255#535#535#533#6'&''6Î    Gs\\fzHZ  /  (m    GB    PçÉ$(,7#"''3255#'6553533#3#535#3#735#ç  b!U!FF&&É¢  ‹C:) ,3M(23EïÒ!%)73&'73#3#3#3#5'65#5#35u+ 0911119‹ >,,,,Ò q &/OîÏ+73533#3#535#'67&'3533#3#535#_655C—@6 ]X566D™A5½*    #N îÎ4973#&'#5'67#535'23#&''67&'67#5367#Ò C2 %# .A/:[# . % '1#- Î  Q     - BôÏ#)9733#'67#5367#'6367#335&''33267#"&5r?2B0 (.=6  #)<*     Ï A0#A  K4  & P çÉ!%7#3'67#&''67#5#;5#35#çMJ\SB   ,VTÉH @2  H$$$$LïÍ)-73533533##5##5#'67#53673#3#735#Q!3$$3!$  '2;LU TiBB¼^    L'GðÎ!%)73#3#535#'66556535#35#35#á 6;;.j)8  T !FFFFFFÎrr=3 .<2#C1/M ïÆ 27'66553'#335#535#53&'73673#3#3##5#t ‡aa_3((. 0))443“ 6* 'L3"l   EðÏ)E73&'73#3#"''3267#'655#73#'63567#533##"''3255#J+&   c8? % %;  %° O"?=& ';0  Q  * 'VëÈ"&73#"''3255##53535#335#3#735#Ö   mAH//HH$$ÈH[  D\nHH7&55E ëÉ%)-373#3#"''3265#&''67#'67#735#35#33#_Of  .   " %ZZZZCUÉJL3   - ) P"M ñÏ-373533#3#3#3#3##5#535#535#53&'#535#367#W>>>H!&B99EEEE99B"H>2*>¾  7 PôÑ;7'67#&'&''6733#3#353#5335#535#'6t `:   %L>[7DD"'HH u %   ''(  UêÍ'+/37;767&'7&''563#"''3267#'67#3#735#33535#335…    +Q    Aˆˆ&&8)a&&8)Í(   D4 $0&JR21BøÎ-LRX767767'7'#"''3255'67'67'6367#"''3255'67567#&'''6á      8€E    0˜  3 Î (  5 .= 4* e   KêÈ %+73#735#3353353#''67&'&'''6UŒŒ(<Z5ÈF#####;mh     HïÏ#'73533#3#535#735#335#3#535#35#X;88H§K;'';$nr†ZZ^^à +   ?, ,b C JïÌ 77'2'6'&'7&''673#3#353#5#5335#535× 9RD< _  ?   dE73533#3#&'#5'67#535#35#33573#&''67''667#I###    !#" ..    ¼> 78>?"""A$! 0  PïÏ#'+/37;73533533#3#535#5#35#33533535#3353353#735#35#P100'Ž)1[**i*tWWWWà  FF  ( 'E) ' EðÐ#)/5;73#3533533##5#'6553&'5#&'''67&'7&'¨;€'LC*'A  R  -0Ð  .. 2& '.Eo G ôÈO7#'7655#'65535#35#73#67&'#"''32655'67&''67&''67#Œ   0Z&       !È   !$ %.Y4#W$W        M óÏ.2:S73533533533533#33265#"&55##5#'67#5##5##5#"''3255##5##5353P    0 RTtˆ  -º   $$ ''+(  ::,<LíÌ#0=73533533##5##5#3533#3#535#7&''67&''6L"4$$4"6::FœC6  \   ¾`KK\    L òÑ-2=AHLR73673#3#3##"''3255#535#5365#53&'3535#"&55#567#333535#&' "(90!!   ssi08+'=l  "N lll  Ñ   U   U 8    7 5 M ïÏ 0J73533#3#535#3533#7'75#73533#3#535#3#3267#"&55#'67#e044?‹:0 ( Q!PQ˜0  - (( /   )  ! JñÈ37;?CIM73#3#3#&'#3267#"&55'6765#537#535#5#35#3353353&'##3O3+HZ  P )  2* "30*2Z((SH13==È .  + (  . AM ðÌ)-AEKP73#3265#"&5735#'#326565#"&55353533533#3#535#35#'67' G7   &&5   %.!(%%-£*!3(( K /Ì/  &0  ES &   J éË(9?EIM73'767#533'67##"''3255#'67##"''3255##5'67&'3#735#O<  `1   - $7–   h/  3 (@@¨       $S  ?Td   ( IðÏ#'-373533#3#535#735#3353#735#35#35#'67&'X9<Ç(   :W> " !   C ïÐ-`733#3'67#73267#"&55'75#'65533#267&'#"''32655'67&5'67&''67#‰JJP?46  %$ !8}=   #&   $Ð       ='& %LA           JîÏ ,9F73#&''673#&''63#3#535#&''6'67&j(  P/   MŠ>GœC: `   Ï     #QQ     &  CòÏ -L73#53635#35#73#&''67'767#'63#3#"''3267#'67#53&'nL ))))V1       4&8,    +Ï II '-='   &0%P ïÏ6:>BFJ733533##5##5#53#"''3255#''75##535#53#'35#33535#335'#u-))-%%w   %-(.A9‡<8&&8)a&&8) Ï  k9  $ 8H CC 2 % A AñÑ=CGKQUi733673533#3##5#535#'#"''3255##5#'655'6367#35#33535#73573#"''3265#'67#f   ""      *  L  ÑB%%  4 33 !)(  ,; ^.$ M ïÑ Y73#5##53&''67&'3673#67&'#"''32654''67&''67&''67#53&' CzE  F *)D      "14%-+ #9+Ñ             F ñÈ &*773#735#3353353#3#7'5'67#735#67&'X‰‰%†¨¨{A # #!WW2   !$È3. ,     #    MíÑ !%)73#53&'3#735#3#735#3#735#35#3#œH B2ŠŠbbDD!!+wwSSSS!››Ñ %A ' ,5!AôÌ"&*.>767&'76'3'67'767#3#3#735#3673#53&'Ô  6uB6 -*@@yySS  )—$ Ê4.  " 2&   C ÷Ë"(9JZj73#3#"''3255##5##535#&'''6&''67'7'&''67'7''7&'7'''7&'7PE@    ..@FpB # e    8    F    7    Ë} h€€~  *         &  KðÓ"(.2673#3#5##53&'#53635#35#35#'67&'3#735#†L?IF1(aaaaaa 4E€€\\ÓN N   0 .L ðÒ"(.J7#53673#3#5##53'35#35#35#'67&'3&'73#3#"''327#'67#“1&=2E~L#RRRRRR  <U? 8WR  C  $~FF:-       P ñÑ !%6<IQZ`fl7&'6'&'6'&'63#735#67&''7'&'733265#"&'37''367'7&'&'7&'Ï  '  +  jj   R 47  U .   >  Ñ     !F$  .  ! ##); F7B     LôÒ#'+/3_e7&##5'67&''673'67''5#'#33535#33#67&'##'3255#&'#537#537#'6»"†     NJ  R)''''))M„E    ! xcfs3 &©&%  !        3  EìÉ#'+IMQU[ag73#76767'7''67'67#735#3353353&'73#3#3#3#5'65#5#5#'&''&'''6P—      ,4T %#   É1  "   % P C ñË#6:>BFJVl73#73##5##53#5##5&'7&'#3#'6553&'75##5#35#33533567'53373673267#"&5KPPULL $–&1 ] 30(ƒ D.X3 "     Ë#$$# ) . 7 0    ’ÕÑ 7&'6'&'67&'6 y N Ñ    ÿö”Ê 7'7537537'6'&'Ž7G +   W  % ·³±­;/ .6.88. ÿò”Ï"4767&''67&'373#'67#&''6767&'*   " 1 8?!)d %*Î     L 4! ',  2, ÿê£Å573#7#5'75#35#35#75#767#53&''67&'o  B -?    Å($˜$$[%`$69mÿêöÎ !%8<@7&'67&'67&'63#735#3267#"&553'#37#3‹ 3  6 \jjFF)  3*o?.Î    4,b W:* ÿæ™È )373#735#35#35#'33#&'6'&'67&'64XX4444445s†G      i   ÈaF & & :b   ]ÿó©Ð &73#53635#35#3673267#"&5tE   Ð bb 5>4     ÿæ˜Ï#37;?C73533533##5##5#3#735#73#735#3#3##5#535#735#33535#335 ( (88688Su2999900O0  --&L  . * ÿð¡É#+/7;CG73#3#5##5##535#3#73#3#73##53#=##53#=##53#=#w4@..@2 !!>""C&&C%%G+ e) 3+É*;;,0 ]bZ 11]Z 11^Z 11 ÿé—Ï '+/3DJPTX73353353#3'73#3#3#3#5'63#35#5##"''3255##5&'''63#735#" y/2++++3u 2!!!!!g  ]O   ::Ê   /    ? ,CR   ! eôÏ 7&''63&'73'67#€14 65*: A? 8  vÏ    yêÑ &73'67#&''6'3#5'67'&'Ÿ=S K6  %>"%  Ñ2 $  V  (  n­Ï73533#3##535#35#n'¥***Sb*k0oÿíôÏ!)-157#5#'67##535333267#"&53#53535#35#35#ë1- . …   º.!(1/'(  LLL;;;;;˜ îÎ"73533#&'#5'67#7'6'&'   ?0   MM9=%LlÿïóÏ 473533533##5##5#'67&3#3#3#535#535#q##= + EO((1t0''¶'   qÿðôÒ#'+73#3#5'67#53635#3#53535#35#35#§=EEY  &33L €    Ò:&  X9LLL:::::oÿïõÑ)-5=AEI7#53&'73#67'7&''633265#"&5'3#'3'663#53535#35#35#œ&03>  +08   ` †  ¬    !  #43 'AAA11111 rÿêòÈ#+/7;CG73#3#5##5##535#3#'3#3#'3##5##535#7#5##535#7#5##535#{p/6$&8/I:9%%E&& C C È .??. (  l lO?l lO?l lO?fÿéõÏ%;QW]7#'6553&'73533#'#5'67#'3533#'#5'67#3533#&'#5'67#7'6'&'óo ;  6   --"   !W 6»Q96 -7a %    Z!! +( /   ÿæõÔ)-159FK\bfˆ73#3#35335#535#535#533#5##535635#3#3#735#3#3#5365#5#35#"&55#'67#333535#3&'7&'#"''327#'67#5'6C $^'!0Ã->>55.. Oµ>D¾>=g<š2   #h-ššš o (   8A 31 .Ô  AA ?#$9=6 * ??! +    ’êÎ 7'67&'Z),c' ##Î bìÐ 73#'6'3#'3#7&'–NW =/” Ð  !$^WR Gÿô±Ð#)/7&'3#3#7'75#535#5'6'6'&'z  =""(+6*%% !4>  Ð= A  dvÿéóÊ.373#367&''66''63&''67&'#367zrr1   %!#  h      Ê    #L    \ëÐ 273#"''3267'67&'775#'63533#67'75#ŽQ  #  !F m#)1(#ÐF      " '[ÿé²Î73#&'#5'67#535'6©   'Î ) r_!+$d~É 7#3#3#535#35#5#~g AA É)e*) WÐ 733#3#533#7&'''67..7t*0  6  Ð 97    O`òÏ,73533#3#3267#"&55#'67#535#'6o77D/   - ')E&Ï      oÿéóÏ'/373533533##5##5#3#"''3267#'67##5##535#o++w  ,* $'sJJJ»9 "/$EP R7&iÿêóÐ;AG73533#3#5##535#'67'6776767'7&'#"''3257&'''6p4557\647   "    '1 ·)'x     1  !   HPòÒ-187#53&'73#&''6&'7#633267#"&5'3#''66€&=?"6=S + !   *&%  ²      "+*&  S÷Ò)-BHN73&''27&''667#'#5'673#73533##"''3255#'67&'‡P &%  FL  A?? A&R Ò    XA V*     Xÿè®Ð&,2767&''67&'3533##"''3255#'67&'h        9  Ë    XT Q   ŠòÌ#'+73533#3#3##5#535#535#35#33535#335Œ())%%--**##(#6#»XX48/ÿíô\ +7&''63#3#3673#53&'735#535#Œ(5<-!- 4_&HH&»&EE&\           F‰Ï 73533#3#535#'6553'#3#5#011(d)0b(Å   M .\ÿë’È73#3#"''3267#535#\4!   !"ÈK(H" ;J)bÿéöÐ "O73#'673#'6&''&'3533#3#"''3255#&'#5'675##535#"( H%+$85;;8  &' " (!35Ð      ) $9: $.?Zÿé¬Ð(,073533533#3#535#35##"''3255##535#35#^ R+   #####¶ . ) ** ÇI`  LcrII9$93  iÿêòÎ!'-39?V\7&'7&''67&'76'3353#7&'7&'&''67&'3&''67&''667#© %   MW} E   N+A  "   4Î        LM^H   "          VÿïºÐ 9733533#53'&'7'63&'73673#3#7'675#535#uS  U H  "%'- Ï:;;2X   QïÏ#'+/8BKW73533#3#3##5#535#535#35#33535#33573#&'67&'67&'63#3#535#/++''))11((/)?)ee '  *  DX$,i+"Ç :   :  :       $ añÑ "(,04873#'6'#3#3#53535357&'3#735#335335˜KS '""&e==q 'jj   Ñ +h / 0†óÏ#'73533#3#535#735#335#3#53535#%&&.m.%$ @EV//33à (  B, -fJ\ÿéóÏ*17Hd73533533##5##5#3&''67&''667#'&'333#"''75#73533#3#3##5#535#535#`$%&&%$F/     $1!''0/ +%%%&&%%%Á      1T F      ÿéôe).Y^7&'#3#3673#53'735#535#5'63&'''#3#7677'7&'735#535#5'63&'² ** m ,, &,  f &&  09 )) ";e               `ÿéõÏ159=AGMShn73533533##5##5#3533&'73#3#5##5##535#5#'#35#'35'&'&''673533##"''3255#&'i #### !+ .('+R'%F  G G À    D E "  E     *' %    ^ÿéóÐ MQU[_7#5##53&'73533533#3#3#'#3#33#"''6735#5'67#535#535#5#35#3&'#35#íj:9*#  %--D  &  "(> 5 ;;¿'(        '     )$fÿéðÏ(,04S[_73353353#3#3#3#3#5'673&'7##35#5##"''3255#&'#5'67##5&'7#35#r"6 .1****2u   :9!!!!!f   : U  Ê! ,    ? ,  CR%   YÿéöÐ]aei733533##5##5#53&'3353533#673265#"''67#53#3#367&'#'65#'67#535#35#35#5#ƒ&%%&$$] s K    .0 ;  <  Ð  '$ E. ( s+ G@4* )-!  22^ÿîóÍ #'+/37;K73#735#33535#3353#735#33535#33573#735#33535#3353533#3#535#orr/N/mAA  !  BB  !  y999B•A9ÍF* ( %K-0+K-04 HŠÏBH73533533673#3#3#35#535#53#5673#35#535#53'#53&'367#   111&j /// *%Î     - 40  -  'Wÿé´Á7#5##53'>&'¯,   Áš‰Š›'O0&  #*0 ‚ÿÿÕ•73#3##5#'655#535#35#‡K •+GG)  +++‹Ç 73#735#35#‹<<pBP"lÿéëÇ &7#5#;5#35#'673'67#&ëxDC A0 M8 ÇLL****‚% 2 ; Uÿë¤Ì73##5#'66556š . "Ì %††=3 3C8_DéÏ 73#"''3267#'67#'67#'6ˆW   /)"  Ï R::' !3)  _ÿéóÏ ;7&''63#3#735#3#3##"''3255#535#535#'2¥ " " " 0(( hhFFX 300;;   ==448Ï  )     Xÿè¦Ï /73#53&'3#735#37#"''3255'7567#IDDD    +Ï  330  kÿèéŒ#'73533#3#5##5##535#735#33535#335t+//8&"4+-Q""4&{0 ? ## @ RZÿë’È73#3#"''3267#535#Z6 "  " $ÈK(I!6J)ÿéðÈ(7#3#3#3#67&'#677'5#535ÜŽ„„„„Ÿb  &R / 5/) #(È  PM   VlÿêìÎ73533#&'#67'5#7'64–]D M# 4¯#3 -s[[? N\  lm +F-·?73#Fqq?9Ãd 7&''6w&  % 8d:Ã` 73#3#3#@||oo ‰‰`9ÿñÅa73#3##5#535#Dv1<<<<1a44@ Àc 73353#533v"€"cH9KK97ÿðÅh73#3##5#'67#535#5#Bz""%" !N$h55& 5Ìz 73#53&'3267#"&55#'6659ˆ:3   )  z (*  1ÿöÊs 73&'73#3#"''3267#'>5#6D :YO  >))[  . -ÿ÷Ãv73673#'67#&''6767';/EK1 ((g +0 e (& ,):Æ`73#3#3#535#535#Eu0--<Œ<..1`1Åv&7773267#"&55'75'75'6§68CE  ) 7:,/ÿï¾h 7##53#5##75#'#33535#u%€%7%%%%%%% UU /Z=ÿð¿w"73&'73#3#"''3255##5##535#=5994  "17d .  BB1A6ÿîÈk73#3##5#535#&'7'6@}4????5V  k.--. ;ÿóÈi73##"''3255#3#735#;   c BBiK  G/8ÿêÈx%7''6767'3533533##5#'67#-2  V#$##&% p   :..+1ÿüÐy#)7&'3673267#"''67''67&'€  & #   ~  y   7+ 3  5 6Ée73#3#3&'73#535#535#;‰>55 “>009e 1ÿïÐx!%73&''67&''667#3#735#fG '*  ) 8%jjDDx    .50ÿôÌs27&''#5'6767327#"''67&''7&'3¨   C  u/     s   ^F  #  =ÿøÇu 733#67'7&''275#5335#35#v22  /=44!!!5 u:  :)Gÿé¿}$7#67'53&'73535&'76¶]  - 1KKK  $iC$  r      BÿþÂn 73#735#3#735#KkkEE€€ZZn/.3„Õa 7'67&®   /4/ÿñÎ|'159=A73#&'#3265#"&55#5'677#5363533&'#35#33535#335xB * * !1  ,E,| 3  / *  ! 8ÿïÄ|"&*73#3#&''67&'767#53&'7#735#35#Hr8:# ' _:/NNNN|;    % 3ÿý¿w%73'67#'6673#35#535#53#bA  8 ! %%Y''';w  #    C+ÿðÔt,2873#3#"''3267#'667#53&'7&''6&'&'X*&    [      t  9 %) (      @ÿíÈz#'+73#327#"'#7'56'#55#35³ 4- 3. C,gtbPPz       ; 1?? 3ÿïÉy%)-373'33&'73#67327#"''67&'#3#735#'64M 4      O@@+$&f  % " 1( 8ÿéÇ#973673#5##53&'7'23&'767#53&''67'¹ #  k @"& ) D\  )  !! &  7     5ÿéÁƒ!%).73#3#3&''67&'7#535#735#35#35#67#Cw:<>:>>o0)55;ÿïÉ~ $73#3#53&'#53&'367#3#735#35#‚6&Ž$6*$jjEEEE~ ) $E* '1ÿðÌs%+7&'73#3#535#535'635#'&''6F ,,"W",,!/33@   s  55h6    5ÿéÉy!'+173533#3#&'#5'67#535#35#&'735'67>BB7. ! &+4>"" 0%n  7  **7 1  1ÿðÇ{!%)73533673#3#5'67#535#67#35#35#E*! 46c#87*E @@@@m   J6    6,8ÿêȈ$(,047373#33#&'7#'67#535367#5#3535#5#=:7<8/ (  &)5jOOOOOOO} O  O 1ÿêÅ"&*735#53673#3#&'#5'67#735#35#35#7@2*82<0 % #. RRRRRR!Q  Q  $ Q  >ÿðÂ| &73353353#3#3#735#3673#53&'F! s llKK"„!u &  6ÿðÈ{"*.2673533#3#&''67#535#&'7#23#53535#35#35#F/11>$ 17'9/T H ’ #"o      # &&&.ÿðÔu1?73'67#'6'3673#353#'67#53365#53'&''66˜/ ! Q  ""  $ o   u     -  - !  3ÿêÄq!%+17=7#3#3#3#"''3267#55#5#5#&'''67&''4'½1))))8  n6%%%%%GQF q .T        0ÿñÅ6:>B73533#3#&''67#5365#73#3267#"&55#'67#735#35#35#7 @J  ((((((j     !V"  %& = " " 8ÿðÈy+/73533673#5##53&'3#3#3#535#535#735#U  l Z$339622$88v   ""('   /ÿðÑ8<@E73#&''67&''667#'367#533#63#5'635#35#35#675#—/       m*);  9           = G ' * .ÿïÌŒ-AGM7&'#5'6'3#735#3#"''3255'675#73#"''3255'675#&'7&'|"! H 19!qqMM$D  4JD  4< S Œ    8   8       5ÿéÊv #'+/73#735#73#735#3#3##5#535#735#33535#3359@@ =AA!!W8BBAA7%%7&]%%7&v# # 7" 9ÿêdž&*.26733673#5##53&'733#735##5##535#35#35#35#v  j  "XX77YU!!3""3!!3""† (( $ DD # 6ÿìÉ~ 2673#735#3353353#3#67&'67'5'67#735#A~~!u’’t1     #&RR~%  !   /ÿóÉ…;AG73533#3#3#3#3#3#"''75#5335#535#535#53&'#535#367#'&'c(''.*&&--/30 #'**&&)/(&F   z   2?   , EP¹c73#Ettc;ÄŽ 73#3#3#Dxxpp ‰‰Ž O"­73#735#O^^66_9?¿‘7#53#3#3#535#53t/r/++7€5**"&&<ÿüÀ§%735#53533#3#3#"''3267##5#535#F+0066//=   )55+n+>>8ÿ÷¤733##5'67#53&'u77 *8.  ¤%vg0 .( < ÄŸ7373#'67#67'7&''6C+>C&F  "&… :$$,-   R­ 7#55#35­[H55ww2 !!=ÿþ¼£7&'3#&''67&'767#}  (y% #R£  !  ; ħ 73&'73#3267#"&55#'655A53|\   $ ‹  F >  :É™ !7&'&''33267#"&5''6~  C  <   ™ H G' Hÿõ½“ 7#53##5#;5##;5#x0u2-ff8*@ÿòÁ¨"7##5##535#53&'73#3#"''325¤.575:0   P^^@Q > >ÿö˜7'75#53#7#55#5#75—Vz,,,,[V&#7á*73533#&''65#'&'333#"'&'75#h%%     # 9 (* }$$   . -?  1<½¡7'7&''275#53533#535#35#ž,:-----&#AA!2I ·œ 73#735#3#735#SYY55nnHHœ?=C!4É 27&''#5'6767327#"''67&''7&'3§  > q/    pS   %  5ÿþϦ $73&''67&''667#3#735#f? & $!&   !  4ffBB¦       K>Lÿö¹¨%73&'73#67'735#35#67&'L*%Q  ????  #‘  T1 p3(  ?ÿöÁ¤167'23#5##536'&''&'3&''67&'#367² -@5* _V  T     ¤ ##    ;   HÿõĦ$(,073#327#"&&''#67'56&53#735#35#§.(    . 2 aa====¦    J :M-- ;µ§$7'673'6735#535#53#5673a  @  >L#5p€  T^[  1ÿ÷Σ,2873#3#"''3267#'667#53&'7&''6&'&']%"    Q      £  J46 ,7  !'  6ÿì¦!'+173533#3#&'#5'67#535#35#&'735'6<;882&  !%2;  .   ’ D;:D B'  ''   6 ÆŸ &,73#3#535#535'635#'&'&''6³ (( P&& $,,4   Ÿ<<}a    $ 9Æ«!)-157#535#53533#3#67&'7&''63#53535#35#35#j*7,,,,8@  ,1^r      /// ;ÿòĨ!%+173673#33#53537#35#35#35#35#'67&'E-6<4‰(<<<<<<<< @ ˜WW      7ÿøÊ©/5C73#67#'6'3#753#5'67'53765#536'&'&''66›# $    !' _  ©   '7% .$ '  6 %7ÿøÈ¡8<@D7'673#&''67&'767#5367#533#7#5'77#335#75#ž %      g +';   )s )2    # I!Q0gÿéóÐ73533#3#353#5#5335#535#p266>> e;;2¦**$W@\ P?W$ZÿóòÆ&,73#3#"''3255#&''65##535#33#fŒ9.    +A †˜Æu  `  )|&ŠXÿéóÐ 47&''6367#53&'733#3#67'7&''67#¡& $ # 3= P. $ v ŠJ!  /5*Ð !W        YÿïôÐ?73&''67&''667#35#53#3#3#3#535#535#'6F  $( #   8"Y#7722?–C//'Ð     P YÿïóÐ!73#35#535#53#563#3#535#”$$\&&%9„…:AšE7Ð rh‚,,} îÎ!%)73673#3#"''3255##5'67#35#35#†4=H   0  #0000³  j  )q :4MÿíóÐ77'67#5373#3#3#535'67#5373#3#3#535‚  # !+KRW1;Š<# ,!+KRW1;Š<   t   NÿéóÐ"(.473533##"''3255#735#35#7'67&''67&'j211   1QQQQ [B b†JJU0 -23r  Ž }îÐA73&'73673#67&'#"''32655'67&''67&''67#… +        "«             u óÐ-1573673#3#3#535#'67##53#"''32=#5#‚?GH &^&   $W   222À ‰bQ +  VÿêðÏ 159=CIOU73#7&'''63#3#3#3#"''3265#5'65#5#5#&'''67&''&'•, : [ R2....8  pG&&&&&B  L F  Ï9,      0 G(        ÿéuÏ*0673533#&'#5'67#3#3##"''3255#&'''6**    !UU e(  *T  5  ¼  $# 6=  9  ÿéóÐ%)-73&'73#3#3#3##5'65#5#35#H=  HPFFFFW° )SCEEEEÏ !!"‡ 0&!2!!4"ÿêòÐ#'+/5;73&'73#3#3#3##5'675363535357&'''6µ *GI>LDDDDPª >)[FFFFF8n ¯  zB9 F##°  \ÿéð¯#'+73&'73#3#3#3##5'65#5#35#! $*$$$$+b!5$$$$$¯   x ("+,2ÿéï#'+73&'73#3#3#3##5'65#5#35#\. BD====H‘H77777   W!#˜ñÏ73#5#53733##VGG@HHÏ7 ÿéæ>73353#"''3255##5## N'Q  +N'>&&= *''Eÿèí¨<@DH77676767'67'67'6773&'73#3#3#3##5'65#5#35#(   = + N  &+####+c5%%%%%l (F$ &$)   u !"**ÿéê› .26:73#735#'3#735#3'73#3#3#3##5'65#5#35#Š\\88‚]]775UQGGGGU«UCCCCC›//$    I    ÿí†Ï !%8<@7&'67&'67&'63#735#3267#"&553'#37#3& 0   0  PYY55!-& f>,Ï       2.d U:* ÿéîÓ*26:>Oae7'67#53367353#3#3#3#3#5'67&'7##35#5##"''3255##5'673'7&'#735#. 1PZ QSIIIIZÃa 9AAAAA¬  §3  ;  `<<•      7     > *CR.    ÿçõh#'+IMQU73&'73#3#3#3##5'65#5#35#73'73#3#3#3##5'65#5#35#- O )h"&!!!!*Y*g   F  [  A  "ÿéÛN 73#5#535#535##¸§§žž¦Ne  ÿçõd#73&'7&'#"''3267#'67#5'6T m 9  : M D '2b% *3  $  ÿéóa#73#&'#'67#5353533655#335ÕX;FRA]ML6:L=T( &( ( (  ÿæñl  7&''6&'67#53&'|/8 56*8 L& g‚!-l   5   ÿéóa73533533##5##5#35#35# *h,,h*>hhhhOTT< ÿêód)-73#"''3265#3#32767#"&55'6358   „h]1M  Y? Jd;-   4  ÿéîd)733'67##"''32655#'67#53'767##·B9 "B 9!T[ —d   ( $#  ÿçóx773&''27&'767#'636733#"''3267#'67#Uo!2F*)>"/ c 'ES E; (7x      B!   ÿéón 73&'73#3#3##5##535# eiæ ¥¥¥¥¥]   00 ÿéõc473#3#535#535'2'3333#"''67&'767#'7#Ò<<3u/88)4‹B ZC=a    )c      ÿéóe$(7#3#&'#67'5#'665567#'3#é¶¶ "R  †= U‘‘e#  0( 1" 3T 3Uÿéï` 73533#3#"''3255##5##535#UCDD<  )&9CT - ;;0Aÿïï[73#3#3#535#35#'6'&'1žžÈCMÞK?R W ‚  [////    ÿèìl#'+73&'73#3#3#3##5'65#5#35#:;TSHHHHV­ YCCCCCi  H ÿéów4973&'73#3#53&'7367#3673#&''67'67#67#\U6=Û8@‰J†8 &) /))L = ; ;| F g .     ÿéó`&,287&''6767&''3#3#"''327#735#'&'&''6Û$$}C/1  1+1(  - #*88  C. (+       _ÿéód733#3#5##5335#ŒTTGc-ccdG G. ÿêö`,73533#&'#5'67#73533#&'#5'67#,)) "t&.%  N  7A#ED Yÿéëk7#"''3255##53#3#735#ë  lVVNN,,kk Vq‚ . ÿéâa"&*73533#&'#5'67#7#5##535#35#35#*%%  "ÏDDDDDDDO  7> " t t *,ÿêæW #7#5##535#7#5##535#7#5##535#RpsWmmN=mmN=mmN=ÿéöh .77&''6'3&'73#7&''7&'7676773'67#²  *Œ($`¢4*5   .Z# Bh     2 #ÿéçz!%73#735#3#&'7#'67#735#35#35#.¡¡{{°7$# '' , !/ ( ;ŠŠŠŠŠŠz! H    3   ÿéès )159=A7567&'7&'773#"''3255#'67##5##535#33535#35#6   / Rf + %"Y“??QB“??QBB>*   $  +II (ÿéór =7#5##53#3#67&'#"''32655'67&''67''67#ä¥#††(×h  ).   2? B3,6 5+2.Hr""          ÿêòt39?7'63533#&'#5'67#73533#&'#5'67#7'6'6Û! !º   J   „% #0 .t   G@  HB   ÿêõpGa73&''67&''667#'67#533'67##"''32655'67#53&'36533#"''3265#'67#•G    + 8o B[#   &0 S'2   "/ '#p       . $ -(    ÿéòq#'->DJ73533##"''32655#'6553'#33#7&'3##"''3255#&'''6—4   4foMM>IIl  bY$ #K  7  [F A' $7)        ÿèív $(F73&'73#7#"''32654'7##53#735#367#537#"''3255'758‚Ü  (jjGG Rp $  ?i! #u†# 2    ÿéòo (.4:@7'6'&'3#3#535#535'67'67'&''&''&''6à>NKq ¸ #IIA”@II=A2 2G * o  #          ÿéåq #04875#53#5'675#53#5'6'&''&'3#5##53635#35#`K]%.N`!)  j WT‹F9‹‹‹‹P9  :     GG! # ÿçóx#'+17735#53#3#3#535#735#33535#335#35#'67&'4&¶+99@ã>4 ??R@’??R@*CCC '/ *e3$ "12 <<   ?   ÿéíx"&1>D7&'73#3#"''3265#'67#735#35#367'5#&''633#;  GnBX  U  LLLLo5  $  *?Px  :4   # J  E   Tÿîów'+/373533533#3#&'7#'67#3#5#535#35#35#35#\F+  $  !uˆ&FFFFFFn 4   "04    ÿîòu)6:@767#533&'76767&'#5'7&'3#3#53&'#735#367#*  C[ G   b" # ” <Ó:pp6J]       )  ,  ÿéót26GKO73#&''67&''667#'3533533#3#535#35##"''3255##535#35#¤=      &–|(?  =====t        B T  ÿéòm59AE73&''67&''6267#'3#3#67'275375#735##5##535#’A !!  6}Q-7"--¯666m     3 /-899 9!ÿéö€3V73&''67&''667#'#"''3254'7##53#3#3#3#535#535#'6735#‰L +"%$  <&   aV"6633A•B--' "€    " #}6      ÿèøs7;?DHL7&''33#67327#"''67&'#7#5'35#53&35#35#675#'3#735#ß$2/    .-/ šy>>>>>``<OSW73&'73#3#53'#37#733#3#3#3#3#3267#"&5535##"''3255##535#35#*+r(%QUUMNKKKKGG$ -' NM ;;;;;o       MA  R ÿíòq #0<73#735#73#735#73#735#3#3#535#&''67&''6<<;::<<<¥Ò^gæla-  ~ q(  (  ( $22       Bÿêîr %AQ7#'6553#&'#5'67#535'673#&'#5'67#535'63#53533533ì‰O   Y    8Œ+r1) &8               V  ÿéï~!@DHLRX^d73#3#3#"''267#533535'3&'73#3#3#3##5'65#5#35#&''&'''674'¤2P\\Z  Z ???£H%› $"~2 ([ )  P        ÿéï~!MSW[agms73#3#3#"''267#533535'#5#3&'73#3#3#3##5'67##53675#5#35#7&''&'''674'¤2P\\Z  Z ???Y&  I 'ž  &"~2 ([   B <            ÿèóÏ(,073533#3#3#535#535##53#"''3255'#335#\^^VVjæhTT\%¯  O88O;À’5u]  / ÿèóÏ(,073533#3#3#535#535##"''3255##535#35#\^^VVjæhTT\À  ‡‡‡‡‡ÀR]  &u / ÿéòÏ73#5#535#535#53733#3#3##ZMMAAAA5GG>>OOÏå0+*''*+1 ZòÐ73533#3#535#'63#735#<.YYiåh> ±±‹‹Ð  9,5ÿéó£-=M73533#7&'#5'67#73533#&'#5'67#35#535#5353#5#733#3#3##;     W"&   ]?::;;?cCCAAFF–        "" y mW 2ÿéóµ"&7;?OSW[_c736533#&''67#7&''3#735#35##"''3255##535#35#3#3#5##537#35#35#35#35#35#œ&"   A  ‘UU4444I   ;;;;;Ád]‰>JuQ??????—  .  *. ;' GI=)))BÿéôÐ!EIMQ73&''67&''667#3#73533533##3#3##5#535#535#5#5#35#335‹I' ( *>R2!88AABB99#_2&&9$Ð    —i  (  (  0 mÿèôÏ'C733533##5##5#533673##5'67#33##"''3255#53567#Ž  $EK   3C ""  && ,Ï4  nS * '   eóÑ"-?QV73#"''3255#&'7#'67#5353635#&'7#733#"&55#'665#53&''67&67#<.     7  ¦    c  ## - ÑI  (.    =  aÿê±Ð /73'73#3#735#367#"''3255'67567#b O@@G     2¹  31   SÿèòÈ159=AGKQd73#3#3#&'#3265#"&55'67#5367#535#5#35#3353353&'##3'&'333#"&'&'75#‡e*1 -#   %%9    /)S  ('1  È2  $  "2$J ‡QY   K ]†Ð733#3'67#&''673E..*!K B9      Ð  *   ÿéöÑ ;Ag7&''67&''63'33#673265#"''67&'#7&'37533#3#3#7'675#535#535#536  J _˜87    šÀ  ƒ**''++>B''$$&&Ñ     70''""$!?B  =vt XòÏ (<73#53&'67#5&'67&'67''3#"''3265#'67#€dßf   A"   " ‹J  Ï    +,   $ 5/! ÿé…Ñ +/?EI7'67&367#53&'733#3#5##535#5#35#"&55#'665#333535#M $ N9 ?" ! F!$= F   8 FFF·  5    dd5  =  ÿèƒÐ47333533##5#'67#535'67#&'&''6A2.  ?*    Ð 5%%BB)!6     ÿéxo 73#3##"''3255#&'''6XX k+ -X  9 o9  6  ! KÑ 7&''6&'3'67#@ %M  7Ñ    ÿñÇ %73#735#35#'75327537'6'&'[[5555N/:!R Ça8=y SPOLE ÿì€Î"(8>7#53533#&'#5'67'6'&'&'3653#'67#&'3#,// I @  WK-14 *  )K //  #Q    b    #  TñÏ&*.28>D733#3#67'675#5353373#3#537#35#35#35#''6'67&'C&* B /7w40h&1EEEEEEi  † /Ï  %$%DD     –ñÇ!735#53#3##"''32655'67#'ª 3Y   !®!//H 2œ!ïÎ 73533#3#735#œ$$ O((yU'X6ƒìÌ &*73#"''325'3#3'67&''67#67#73#Ý  U>&    *̦  šY#  1=3s‹ðÉ 073#735#35#3#3#"''3265#'67#'67#'67#›JJ((((b<>   &      ÉC) % $;#, #  —òÏ473#35335#535#53#3&''67&'767#535#56®  $!    ?!% Ê PPU        N’ôÏ(,048<767&'767#53#"''3255#'7&''563#735#33535#335±   2  YY$8$Ï ) A 0*  EWS03ƒòÉ #/5;A75#53#5'6'5#53#5'67&''&'&''6'67'67'6Ü. *. 0   -   6   " " !* " ŸII   (         ! ôÈ 06<73#3#535#5#35#3353353#3##"''3255#'67&'Žb]6    HUU g)  , D È11$. ' $   ÿçrÐ1FLR736533#&''67#7&'3533#''655#73533#&''67#7&''&'#&)    G<   2     * & ¯  /  ~   #   )0    ƒõÎ!'<Q7&'36533#&''67#&'7&''33#&''67#53#3533#&''67#×  @'*,  !#/ =   E   Î     +          …õÐ17;?EK73673#67&'##"''3255#5'67&'767#3&'#35#35#&'''6‹",   " %%%%/ * ¼   -% #,   ' & !    …ôÇ'-FLR73#3#3#535#535#73#3#3#535#535#&'3673267#"&''67''67&'‡. / 4-/         V  ÇE  * , ‹ñÏ373#35335#535#53#3&''67&'767#535#56§ #,*     N)*È VVU    Q ÿîÐ"8LR736533#&''67#7&'&'3533#&''655#73533#''67#'&'*,/  #&Q   Z  7   ²    .  W     "  )-  v òÍ,?EK767&''6''6367&''67'367&''67''67'6°   1 ;    :     =  Í      / ?   0   -      ÿçõÑ6AEIV73673#3#3#&'#367'5'67#5367#537#53&'#3'73&3535&'76U= 3pkrˆ+z#  1@;DR7jR32 kggg  $5 Ñ    @ _  U       aðÑ &,287&''6'3#3'67##&''67#3'67'67'6´  %†`24%+ > (    !% *,0 - 0Ñ   #        \ÿé¶Ï !7'67&'#5'67&''6|  '   $  Ï )  ! |_   ' '% #‹ÿèõÇ )733#5367#3#3#&''67#535#'6œFf=3=!(&   ! (*Ç 4 #" Oç±!%)G73&'73#3#3#3#5'65#5#5#'27676767'67'67'67(/****1s . N   C$ ±   . ,%     aòÏ)-15I^733#3'67#732727#"&55'65535#'3#735#3#3#"''3267#7#3267#"&55#'65Ÿ77; &   'pJJ&&b;8  ; Æ   Ï      '#      ÿçôÌ +GKOY]ags7#'655&''3#735#35#36533#'67#5##53'#67'5'675#353&'73&'35357&'67&'ñÁÀ   •TT3333K(*5W 1+ z /!55(.2'.hhh  " %'ÌUF7 7?a  )   4 @-* @2 : !d  l  Sÿí£Î(,073533533#3#535#35##"''3255##535#35#X  O  )    ²8g (z"1kêÐ"&73#3#5367#53&'73635#35#35#Á#61j$4"   2BBBBBBÎ zz  V55kÿê¢Ð 7#5'6  Ч 'oÿéóÆ37;73&'''67&'#367#67&'7&''275##535335#335zl!     + -<,,,Æ   R?   "O.nÿéïÏ/3733#3#3##5#535#535#533#3#5##5'67#35#©00))3333))002xCG7 !)77Ï g I + A ÿçõªCGKQUY]cio73533533#3#3#&'#3#3#3##'3267#&'7#5'67#535#535#35#35#3&'#5#5#5#'67&''&'-!=%%$$@9$ 6AA@@\  '   u  (2<!3====ZB"55555  ]  ¢    & <  !      còÏ!7733#3#67'675#'67#53533'#"''3254'7##5 //@= 3Y2   D  Ï     !!"  Wg ]ÿéóÏ?EIMQW]ci7'#3#3#3#"''3267#5'67#537#53&'73673673#3&'#5#5#5#&''&'''674'Ï ((((7 g *+  =J) @2  )ƒ    . B               ÿçéY $(,28>7#3#3#3#"''3267#&'7#55#5#5#'67&''&'Í=??GGY   " {K77777  h Y  " J       mÿéõÇ (Ea7'6553'#333##"''3255#5357##"''3255'7567#5373567#533##"''3255#Ž vRRHO %%  ++7%  / * ˜4F5 4@_/ _    _ÿë«Ï 073#53&'3#735#367#"''3255'67567#…L ==@     (Ï  -50  gÿêõÏEKOS73533#3'33#673265#"''67'75#535#53#3#6767&'#535#7&'3#735#p((  $H R"m  _CC»44/2!    %C   =+ fÿéðÇ#9AEIM73#3#5##5##535#3#73#3#73#3533#'#5'67#7#5##535#35#35#rw29'(:3=C C!!P   }Ç /55 0 &  <4w w,. jÿéðÏ (,04DR[_73353353#3&'73#3#3#3#5'67#35#5##"''#5'#5673&'75#&'325#35#u!w*+''''-r 5"""""b 2 "VV 5Ê!  .    >   )R%      ÿéñ\!%?CGKQW]ciou{7#3#3#3#"''3267#55#5#5#7#3#3#3#"''3267#55#5#5#&'7&'''67'6'&'7&''&'7&'}&!!!!(  V.Å&!!!!(  V.@ | «  w  = } {~\   (G:   (G             cñÏ06733#3#67'675#53533'#"''3254'7##5'6ž//@< 3Y(AB  g  Ï   !!"  Wg3   ÿêòª;?CHL73533533#3#3#&'3#"''3267#737#5'67#535#535#35#35#3'#3#/%2%%%%B- (  ŒNX #0@%%%72222fF3€€Ÿ     .     ' *?aÿéóÇ (Ea7'6553'#333##"''3255#5357##"''3255'757#5363567#533##"''3255#ƒ~YYNU ''  --<( !2 -  ˜4F5 5?_/ _    ‘ òÏ!%)73673#3#"''3255##5'67#5#5#˜,3 7  !  A!!!³ k  ,p ;"rÿéóÏ=CY73533533##5##5#3#673265#"&55#3'67&''67#67#3533533##5#'67#w  r!         ½      ; ,   # H** fÿçôÎ!26:L73673#3#3#535#'67#'&'#"''3255##55#35'333#"'&'75#”4::!M   |  '8''m&$ )+ ½    HN  a  !U EÿèíÑ"&*.27#53&'73#3#"''3255##537#335#35#3#735#@-aa-)  «*kWWWWWWWppJJ¬ P]  HctP 006ÿéò@73#3267#"&55#'667#ÜH & -+)B@) 0 ÿìõR*737537#"''327#53267#"'&55'717R  <77D$4C #L )-*&  ' ÿêóO $(73#3##"''3255##5#535#53535#35#Ø   ŠŠŠŠŠO   * ÿçòS$7#5#'67##536733267#"&5âM 2/ N=U "  . E*& .+ % ÿéàS73#"''3267#'67##5##535#Ç  RN<HÆ“““S $77 ÿîóP73##5'67#&'3#ÛS "?O#m†/*-,ƒååP/"  $ ÿèó[(-73673&'73#3&''67&''67#67#FJ  Šw"# /''2 '-<]H      ,  ÿéóV $(,73##"''3255##5#53535335#33535#335Ù  ŒNO;;O=Œ;;O=L4 4  %  ÿêõg,073#"''3265#3#;6767##"&55'635HŠ  h`1,U* ( Mg7 "*  4ÿéïl#',7533'67#3&''67&'#'65535#67#ƒXB:#+ 1%$*)JJTS_  ! !0%<  ÿéôT73#7#5'75#35#35#75#Ú',.¥,%8iiiiiiT6 ? " &UÿéóU73533#&'#5'67#^:=," &! +> "?>#ÿèól973&''67&''667#3533#3#3##5#535#535#\n&.?133&$ + \)LJJRR^^__TTLl   ,    ÿîóX +7&''67&''63533#3#535#@ $ƒ  %–WXXiähWX     #66ÿèçm )-73#"''3265'3#&'#5'67#535'63#Õ T51  &48'6Omk _33Mÿèîl !'-73#5##53'3##53##"''325''67&'‰\¶kAB_Ð^  ' % "r# ""l %$ (      ÿêê`0487#"''3255#'65535#35#7#"''3255#'65535#35#{  75555¶  75555`^  **+ 6^  **+ ÿçíc+/373533#3#5##535#5#7#"''3255#'6555#350.."7'0S7Á  <L::NA A7QV  ((  ÿêäh ,04873#"''3265'35#53533#3#&'#5'67#735#33573#Ñ  ¶5>>::33!  ".""5 $he =   )  "   J ÿéô[0673267&''65'3#&'#5'67#535'6'6«  " & 4>(#   (./D  [' #%  )'    $ðv/732767#"&55'67#535#53533#32673#Íz ,5 A8.*#KF//22 8 ?c9J      ÿéòm59=AEI73673#33##&'#5##5'67#535#535#535#53&'5#3533535335X7AL9+& %&& "(5II55F=G&&'_&'l    &&    ÿæòv"&,273673#33#535367#35#35#35#35#&'''6]VZQâGY ‡‡‡‡‡‡‡‡b))((H ) &l J J  ÿçðl  &,7#5##53'73#3#535635#&'''6ë¬g& 8EŽ4Là&N:GGZ&% &&A* &a!! /3   ÿçór-15733533##5##5#533#3#&'#'67#5367#735#35#R?;;?BB%¨Km_;H#G 6L`K„„„„q2  ÿçóh(,9D733533##3#"''3255##5##535#5#53#3&'7&''67'7''6GR662`  NI[200dRR_    h    h 4 "44:H  ;        ÿèñt -573#735#35#3#735#335335#53&''27&7#327)®®ŠŠŠŠ"ÎÎ--?.+™²$5+0@/#ka t-# *    ÿèàu!)-173673#53'3'735#336735#5##535#35#^9*À5DV€€€€€t55+    /@@  ÿåïg $*0673#3#537#35#35#35#''6'6'6&'''6dŠ>5t+8PPPPPP1 .& .* 71 "  gNNN         ÿæôm 4873#735#3353353#3#67&'#67'5'67#735#$··##5&&¼ææª=   N   ††m!  !    ÿçô€ %-157'#'63&'3#73&'735#336735#5##535#35#‡+8«K AaÆÆ" HZ  ŒŒŒŒŒ€   -    (43ÿèì !%)-39?73#5##53&'3#673#5'675#35#35#35#7'6'67&'‡`´d?‘>+" !)A¢7,?~~~~~~ *+',.V*%''  @5*C T  ÿèó}  $/7;AGSZagm7&''6'&''6'&''63#73'67'727#3353&'7&'73327#"'37'737''&'7&'  5  5  ½½!6&v…"MQeV2  œ/9 N-:/V}  2      :) 2) "   ÿéõƒ FJNRV[73#53&'3#35#53#3#3#3#&'367'5'67#535#535#535#735#35#5#35#67WÖjXW7V2??55D" "H$  6,_D66@@.44f33777-  ƒ     &       *  .ÿïÒs9=AF73#&''67&''667#'33#7#5'75#5367#35#35#675#*       e<  2-s        )  6@& # ' +ÿôÐ;CGX7#3#267#"&55##535#535#5335##535#535#5335#53673535#3567&''7&'Ê177* 4&--'5 4&..'5 4%  0kK(   |A     %     ee %))   OáÏ!'-37&'7&''67&'76'3353#7&''&'&'?, €ŸÅžbNÏ   ]]oY    !  ÿéóÐ4JRXj†Œ’˜¤73#3#353#5335#535#'63533#&'#5'67#'3533#&'#5'67##5##5&'7&''67&'76'37&'3&'735&'753#7'6'6'6'33#7'n, G   B  œ  äÀG $    C (  m® +%" + .! 6 8§NNO1+ Ð     "   " 9$$       ;;        ;ÿèêo ).73#3#735###53#"''3255#3##5#53367#;¯¯ff ¯    **$#o $ -6E6  $  róË!I7#53#3#67'5#'67#'73657#53#3#32767#"&55'67#'7365F/f%*   %  n+e(-&      ¼          ‡ðÏ#73533#3&''67&'767#535#‡+++!    E%+®!!!!    !ïË73##5#'6556à $E  ,Ë  ii/ E#‚ôÏ73533#3#&'#5'67#535#‰&$$+!    !-&¯ $&SSƒ ïÎ(.7#67327#"''67&'#67'53537&'í-     ( ­%"("  ,0a }!! ƒòÏ%+733#"''3255#'65535#5#'&'7'6±"  1 $111  _  Ï4u %J&'~   wìÌ!%)73&'73#3#3#3#5'65#35#5#œ ^ ,Ì  d"+HðÌ%+73533533#3#535#35#35#35#'67&'‚%q"%%%%%%9  ¸XX55+  † ëÅ 07#"''3255##536735#&'#53&'73#3#ë  B#B (Å   Qn¹: *  U€óÅ573#3#"''3255#67&'7&'#5#67&'7'#535#€s/+       ,2Å‚ l;  !' +=  "(-˜íÐ L73#53&'&''67&'763353#3#"''3255#67&'7''67##5367#»*l/    8=*1  %   $$Ð       ,,;?  ,  AQ ~òÈ 06<73#3#535#5#35#3353353#3##"''3255#'67&'~s# l"@ Tbbr/ 1 G  È77(4 !    1ÿè÷¨+_dins73533#&'#5'67#'3533#&'#5'67#3#67&'7''67#32767#"'"&55#'67#536367#335367#335”!&    Z     IS!    .8 -0:-14D;~(-?B         !@   !   $' @  # wõÎ8PUmr73733&'33'73#67327#"''677&'#&''67#7''67'6776767'7''67'6776767'x -     (      X      _!NV          E          {òÐ-F733#3'7#75373267#"&55'65533353673#535&'7«..3 F     %   ]  Ð      & !3K;;    'ÿèö²#'8<@jnsx|‚736533&'73#&''67#'3#735#35##"''3255##535#35#3#''67#32767#"&55'67#53635#335367#3357'7#—  $ [SS3333I ;;;;;s  "( KC;55H803F; –    +++ 62     !2  YóÐ#'+?EKQ73533#3#3##5#535#535#35#33535#33573##5#'66556'&'&''6?'++%%''&&##'$9$Z 8$¯  "  Ç 4  4===+ !      KÿçôÏ&,159=AEKQW]7'673&'33#5'67'67&767#3735#33535#335'3#7&'''67&'7&'ƒ > $,(s    3 ).1O1‹–  _  05œ    D9    : & & t›  hÿéºÍ73#&'#5'67#535'6±   (Í) i\")% ÿæ÷Ð.<AEIMQW]ci7#'67#5367#537#53&'73673#3#3#&'33#5'637#35#33535#335'67&''&'7&'§B8 %8K.        nÿéóÎ )157'67333#"''67&767#7#53&#5##535#…  #&.   C :::… - -    /i# LUU5#bÿè÷Ð +177&''6'3#3#"''32767#'655#53&'&'&'Æ  -($   L Ð $!$1%g  @L- 0G-g,kÿý À 7#5##535#35# À¹ ÃM<Œ?gÿêœÎ73#3#5##53635#5#y$$ Î MW ÄM-++`ÿé Ï73&'73&'#5'67#e  '° ) iZ ?dÿìòÏ#'+1B73533#3#3##5#535#535#35#33535#335'&'333#"&''75#“%##!!((&&!!% / [  #&!+  ¼ZZ48\Gd  U`ñÐ+CI73533#3#3#3#"''3265#'67#535#535#73#&''67&''667#(00)).=8  -  !.$$(ŠC    +Ç           @ÿç­Ï !%)-17=CI73353353##53#33#5'637#35#33535#335&'''67&''&'NUT,$W   #5# B ? Â,, 0 G3  ! )        œÿé÷Ï39?73&''67&''667#3533##"''3255#&'''6¹%     !  !G  +  Ï     !  BB ?  ^óË>73#67&'7&''735#35#73#3#3267#"&55'67#'7367#XF#5555Ti#-'    % 5Ë?J ! &      Œ õÂ573#67&'#"''32655'67&''67&''67#b&        )         h‘ïÑ73#&''6'3#&''6½& 7! Ñ     kÿèóÏ@LPT73673#3#3#&'#67&'7#67'5'67#535#535#53&'3&'73&'#3535– 4..6        5--3 $888Î    7    Z    q   ÿðô!%)7#5'673'3675#'#33535#3#Õ¢ 3FH A(6000066wàà_QA!   /.pÿø¤´ 7#5##535#35#¤´² ¼I8ƒ:7ÿêò¶!'-3973#3#3#"''267#5363535&''&'#'674'€Gw““Ž ,ddd   >  2¶ G  9 #y  R /ÿ꿬#'-39?73#3#3#3#"''3267#5365#3535&''&'''674'@y93Xddh   g$-FFF   1  +¬> 2 n   K    ÿêŒÏ8767'7675#53533#"''32765#'67''67'67676A    *    Œ=" "@,,Ž &dx/  +!74  läÏ &*73#"''325'3#3'67#&''67#73#Ñ   À†KD!P E ;  &’ÏF  = '   1=„¸ 73#67'75#C> %¸j r pßÐ#73&''67'7#5367#73#735#>8  & %& ,USS++Ð  $ > |èÏ !7'67#73#3#535#535'6'  £ FF@=EE S› 0Q    5ÿê„Ì1073533#&'#5'67#:   ž..yd#-= ÿì€Ä"2873#3267#"&5535#&'&''33265#"&5''6ZG ,GG3  .  1    Ä?3j  8  :" ÿéŠÊ"6:?73''67&'#53#"''3255#7#'#"''3255#'65535#35#^)   8    (  m/  \á: &~!}  42%'UV=-i,ÿéxÌ 67'2'6'&''&''67#53655#53533#3#&k '7.'     2  "&)$$!!*, Ì  !  ˆ! ÿë“Ï"573533#&'#5'67#7&'&'333#"&'&'75#>  @ I  &$ ( ¥**eU"-65  @e   U oïÏ067367&''66'3#&'#5'67#535'6'6­   % <)"  +.#1G  Ï  $      wñÏ#)/5;73#3#3#"''3267#53635#35&''&'''674'£2ISSV  V777 ( %ÏF  9 &x %  T  ÿé“Ï)-273533#3##535#35#7#"''3255#'6555#35%j   &¥***Sb*l1nÆ =/( 4@_9''+ ÿéÎ@733533##5##5#5333'67##"''32655'67#53&'767#*b"      &=  IÎ-  E 8%!   ÿê}Î 067#5##53&'7&'''636533#&''67#7&'}I-  */0 #&(W  ·)+     4&1 oëÏ'+0735#53533#3#735#7#"''3255#'65535#35#'0022&]::Á   <::::¨   , 3G  !! !  [òÑ:@FL73&'73#3#"''3267#'667#&''67'6767677&'&'4'#'6r74PE   3  %)  &    ¿  +        ÿäóÒ HLP[_clrx~7#5##53&'73533533#3#3#&'#3#3#"''&'7#5'67#535#535#35#35#3673&'#35353267'67&''&'íµda'3++%%B0# —´´©   „ %2=""':3333? C ……… © f¿$$    !   C  &7      tÿí¥Ï73#3##53635#35# !! Ï HRÆE'•2nÿéóÏ %)-39?E73#'63#3#3#"''3267#53635#35&'''67&''&'P[ 5Tbb^   ]BBB =  9 Ï    B  / r % M   qíÑE73#6777'7''67'67#6777&'7''67'67#53&'736ª 8/  + &.Y  !, &.*7 > Ñ                ÿéÏ>BFLRX73533#3#535##5##5#53#3#3#3#"''3267#&'7#5363535&'''67&'944.m/9{Z+T)4QbbY    A @@@  ' "Ä   &3 $ Y=      ÿé‡Ð6;AG73533533##5##5#'#3##"''3255#535#5'63&''67&'4 ** // )5M ¹   3 /  P    ÿé…Ð"&273#3#&'#'67#537#53635#35#3533##5#<-&9   % 4444 ÐQ   Q +1g++ ÿèÅ "&373#735#35##3#67'5#'6553#&'76gg@@@@UXY=  KKC   ÅD* & ''.  ; $&K   ÿé…Ð);73#&''6'3#&''63#534'76767'7&'V  8 7,v5   0;! Ð   "   +  +"' *" %yïÓ!%)-17'673&'73#3#3#3#75#5#5#'3#735#r  %.0++++4}8'''''n@@¤  6 >F' jòÐ"&@H73533#3#&'#5'67#535#35#33573##&''67&''6267#222**  !+2+1B      (Ç !  ! (    7gó¶#3A73673#353#'67#53367#53&'73'67#'63&''66O +(  )j5*   ¶          eñÓFLRX^d7&''67'67676767&'7'#"''3255'67'67676767&'&'7&''&'7'6''6l &."  "   k  †  ‰  \  m  ³                     oõÏ(59=73533533##5#5#3673265#"&5'3#5'75#533#735# C6GG\CŒ6Q    }*%%#KK))É     +9  & (ÿùib7#"''3255#'65535#35#i bU   /+(ÿúog73533#'#5'67#*   U  -1 dÿé­Ï /73#53&'3#735#37#"''3255'7567#ˆF??A     *Ï  330   ÿåö–)-1H\`flrx~73#735#3#3#3#"''327&'765#53635357#'65533267#"&5'#"''3255#'65535#35#74''67&''4',¤¤~~0!3999 :%%%B6  €     c  )  –% - # P)2 0/j qk  00!2  :    7ÿé›Ì 1E7'6'6'&'&'''67'67777&'3533#&''67#’'/.     M #    ;#$&  " ' Ì   :   1   còÒ%)-HO7#5373#3#3#"''327#'67#53&75#3573#&''67&''6667#C(%-)0H?    / "7(??2A    %# ›, ,      %    *  ÿé‹Ï*.26O733#3'67#73265#"&55'65535#3#735#'67#537#53#3#&A..5"     + NN++  !&"S (,Ï     ):0 ,9S'( [    _ñÍ"G73533#&'#5'67#73#735#35#3#3#"''3265#'67#'67#'67#$    ]rrQQQQ”jd         º  //!*         eôÑ#-AGKOSW767#"''32654''67&''67'3&'73#736533#&''67#7&'3#3#3#735#%        ;"!TX ; CCDDDD$$Ì      ! "%    ÿèñÏ16;GMQ73#&'#"''3267#3#"''3267#5'67#5353735#'#36#3673&&'3#Ë#>+   a    3G"@ B8)2, "/(O‹‹¿*  *2 @ * *    !  <hìÑ-1767'67'67276'67'67'676763#Ò +5 \*3  NØØ¿     =eõÏF73533#7#"''3255'75#733327#"&'5#&''67&'767#53&    $*&~*      ¹   '/        ;ÿê—Ì73533#&'#5'67#F   ž.. }m++?=„¸73#67'675#C> % ¸j r ÿé‰Ï)-273533#3##535#35#7#"''3255#'6555#35 &g    &¥***Sb*l1rÊ ?3& 7?a<***2ÿêì°=AEISY]7#5'673&'73#3#3#3#3#"''3265#3#"''3267#5375#5#5#'#5'6&'3#|  /,''''/]M   d‹   Œ*4#####, 1=~~V*  &:A   M A- ] (5íÏ.BHTX\`73#3#3#535#'63'735&'75#&'7#67&''67&'&''#3#3#535#35#5#ŒQ:==9o&  *  '     [44Ï \\" s       b8,DD ÿèóÐ"&3J73#3#'6553&'5##5#35#33533533#67'73267#"&5536ŠZ=9µ\(,+++=,%’44"   $!Ð >>/ 2=Y7-6%  Q  L  ˆÙÑ73'267#'6ii8Œ/T] 7Ñ % )ÿíòF 73#53535#35#35#ÔÉjjjjjjFJJ $ # /ÿêðD73#&'#5'67#535'2Ò &TD18/ 2FS"JD "   +ÿîóG73#3#3#535#535#53&'TUNN^ÈWIIOOG    (ÿçòZ+/573#&''67#53&''7#633267#"&5'3#'3'6S( CK8S< 7 *   /.* #Z &   ,*  +ÿåïN&7#3#3#67'5#'655673&'èž••| f   :N   *%%8  %,ÿêõO-73#35#535#53#326767#"&55#'67#56y 77~778J5 ' ; / .%O  ;  6†òÎ+73533#&'#5'67#73533#&'#5'67#*+*  #s'/&             0ÿéòS$,487353&'33#"''67&''667##5##535#X0   G   ( tttS *     ,, ;ÿéæP &7#5##535#3#&'#5'67#535'2懇‡m(60 +5)/PggSF       ~êÌ#73#73##5##53#5##5&'7&'bbnee3É3H | Ì 2##21""1  *ÿèõT.26:7#673267#"''67&'#'6553&533&'73#3#735#ï5     Zj ‰IIDD$$F  "    % 5ÿéôN +07#3#3##535#73#535##53&''67&67#ŠDAA@@22PUUCC [    *N$ b " +    5ÿéóO%)-173#3#"''3267#535#73#7#5'75#35#35#75#5A/5   5./LpP 333333O) % 7? # % +ÿèôU $(>D73#"''3255#'67#5353635#35#35#73533##"''32655#&'a%   ) ,666666M2  2  UP  6& 1 , &ÿéôu #'+/373#3#735#33535#3353#3#735#33535#3353#/Ãà ££88J588J5¡ÈÈ ªª;;M9†;;M9«ÌÌu ) ) 5ÿêõ¤,H73533#&'#5'67#'3533#&'#5'67#'#'67'67676767'”!%   Z     Œ ?@" )-9 ‘ )'   !  \    & 5ÿéõ¤,2C73533#&'#5'67#'3533#&'#5'67#'6767'7&''6”!%   Z     A#%5#&8?/‘ )'   !  7 (  5ÿíõ¬+Q73533#&'#5'67#73533#&'#5'67#773267#"&55'75'75'6:     Z!%  9"%MO_` " -#BE8;8N    #  .       5ÿéõ¨+/3;?73533#&'#5'67#'3533#&'#5'67#3#735##5##535#”!%  Z      ““mmŒ………›         /,+9 9 0ÿéõ¨+=AEJ[`73533#&'#5'67#'3533#&'#5'67#3#7#5'675#35#35#675#7#53&''67&67#”!%  Z     ·b"& %%%%%K O    " œ        0<F ' )      6ÿæò¬+KOSW[ag73533#&'#5'67#'3533#&'#5'67#3533#3533#3#535#535335#35#35#35#35#&'''6” "      Y     FGG))—))F,FFttttttY 8 $             CC      ÿéðÏ#'+1773533533##5#5#3#3#735#33535#335'67&'4K55s4“KKáá­­99L9…99L9j 3 /b*% ''¾ T22$     ÿéóÐ#'+/5;73533533#3#3#535#535#35#5#'#335#35#'67&'0F22=iM­Kh;0DFFg977777L991 3 /b*% ''º^^]&+    ÿèëš#'+/5;73533533#3#3#535#535#35#35#33535#335'67&'4#)$$DaJ¨JaB#7))+66J6€66J6` . 0W&% &&Ž  HH E *     ÿçòu#'+/5;73533533#3#3#535#535#5#35#33535#335'67&')';((ChO®LjC't;$99L<ˆ99L   X 36p°Ð7''67'67676767&'¤     M .#:5 =( >ÿé©Ï #'-17=CIO73353353#3#3#3#3#535#535#735#&'735'6&''&'''67&'G`\\\'&&+c+$$(  "   -  )Ç$=       Q     ÿçóÍ 0AEI]afjou{‡7#'6553#735#35#7&'36533#&''67#'#"''3255##55#5#3#3#3#535#535#73'#335337335'67&'7&'7&'ð¿RR3333 8*#    9I999£HFFVÀYHHJ … 8A=ÍVG7 7@a(     , 7$   E        ÿíöÆ"&*.26:7#3#327267##"&55#535#55#7355#355#5#735àGGG ; EEDn !4q1n4q111n4Æ9c  d9ǵ¬µ5)ÿìóÈ $(,0473#3#327667##"&55##535#735#35#33535#335&¥KYY  3 ATG AATFšAATFÈ:` $ s_;rñ’ 7'67&'` "0 8X,'**’   [ñ¡ 73#735#33535#3353#%³³AAQ@‘AAQ@¸ââ¡3 _ïÌ #'73#735#'3#735#3#735#33535#3353#„YY77}YY66¬¬<2 Z !t* , $ ÿéôf"(047353&'3#"''67&''667##5##535#9=  CG*+" -2 €€€f 4     (11 ÿéò« 2EJPV767#5&'67&'67''3#"''3265#'65#3353#5##5#'6735#&'''6n    A"    ‹J ‰<;‰‰f  ;«   )& " 2*"4 r:77'5      ÿéò« 2UZ`767#5&'67&'67''3#"''3265#'65#'667#'6753353#5#67&'35#'6n    A"    ‹J j & ;‰<   [‰‰ «   )& " 2*"‹ +5r>  @  #ð® 3BG767#5&'7&'7'563#"''3267#'67#3353#5#'6635#m  ƒ     !´L  Š’  ‹®   $%  $ 0$, >   ÿçô¯3CGKOSW]c767'567&'67#5&''3#"''3267#'67#3353#5#'65735#3#735#35#35#'67&'Å     _    MK   " ““““ssOOOOOO A›  )  -       ! i1 '$ E2    ÿæó®4cgk767'567&'67#5&'#53#"''3255#'63353#5#3#3#3#3#535#535#535#535#'67735#35#à !  `    8H   " š7**%%,,1˜5))$$((2ššBš -   2    &  ‡]  EB`K!ÿè¾O 73#'3'65ªd'%Odc/%ÿèÞm#+/73#535#535#535#53533533#3#3'3'6573#š)…( ""%% %—£    gg  R)3! *(x FóÏ.2EKOSfkqv733#3'67#73267#"&553#'65535#3533#&''67#7&'3#735###'3255##5##53&'#3367335IAAE @()    qq  2 t)!    = œ[[??V #  Ï    % "2""#$* *. 6  &"ÿéái 7'67&73#5#533{& 7«—6!+7t iWÿêô\)-MTt{ŠŽ’£§«73&'73#3#53'#367#73&'73#3#53'#37#'33#3#3#3#3#"&5535##32733#3#3#3#3#"&5535##32'#"''35##535#35#7#"''3255##535#35#  7  `  8  N###$ $#' K$$## ##( £ ™ R        ;>d    ;>64  A4 A ÿéóÏ"&*CGKO7&'#5'63'3#735#73#735#73#735##"''3255##5##5##535#335335€ 45 e PF%T66288477&  (%###6%(Ï   *2220H  !!!!+_# ÿéóÏ#'+73533#3#3##5#535#535#35#33535#335dffTTjjhhRRd&>>R@’>>R@¼d$$d;>zîÊ 73#3#535#5#35#335335ÙD6À6Aƒ04""40#Ê 44 "GÿéìÆ &*.73#5##5353535##3#"''3255##535#35#Õ0OO  IIIIIÆ?""?? !e  '}#4ÿéäÏ#'73533#3#5##5##535#735#33535#335'NPPZFFZN::O<—FF[F¹EV//Z{!!!ÿêæÐ!73#"''3267#'6#5##535#K ™ ’ )fFFFЊ&v$1`f?, ÿëøÓBGMQUYm733#3#;267##"&55##535#535#5335##535#535#5335#5'667#5#7355#35&''67&'76_Q1CGG  : @0>>/?>.==.>B 5XRR0e/d7    Ó  -Z    5  % ®Ÿ–Ÿ4<<       ÿëøÓBGMQUYm733#3#;267##"&55##535#535#5335##535#535#5335#5'667#5#7355#35&''67&'76_Q1CGG  : @0>>/?>.==.>B 5XRR0e/d7    Ó  -Z    5  % ®Ÿ–Ÿ4<<      JåÏ573533#3#67#5'675#535#73#"''3267#'667#)''""$$)n`  # ¼T=/' $' ÿïøÐ %+7&''63#3#3673#535#535#&'~-= 65.> Qz5ZZ :ßeZZ1  Ð%-+%"";;"=ÿéçƒ 73#3##"''3255#'67&'Cvv+Ï] ^1yƒ<  9 •ÿçõÂ#)/73#"''3267#'67#3#735#35#35#'67&' R    II%%%%%% 5  Â( 0nM/."     ÿçõÏ048>RVZ^bhn7#'67'6753533533#3#'#5'67#535#35#335'&'73#"''3267#'67#3#735#35#35#'67&'ó¶ YU     h —N    MM,,,,,,  , ÂRC4 ,*  ` +9=< 9:># *bF ' '    ÿéï•?CGKQW77&'7&'#5'67&'67673673#3#3#3##5'65#5#35#&'''6Z!'    <(,&&&&.b 2!!!!!*  9  ƒ+B?  #   f && ÿèït?CGKQW767'7&'#5'67&'67673673#3#3#3##5'65#5#35#'&'''6\     @%)####*[ 1!!!!!+  9  l# :7      R  fÿêôÇ%)-15;A73#6767&'7&'#5'67&'#'67#735#33535#335&'''6ox= !'$ $ $2 R2  @ÇP   CA 00v    ÿéøÏ!%)-1G7'67#5353367&'#73#735#33535#3353533#&'#5'67#/ #0     +%%'j EE nKK¡  !)e+* ÿè^Ï7353367&'#5'67#  !.®!!$  hc =\ÿóóÏ73533#3#536'&'h6:„g1—Q<¤++ G4=?5591 ÿéóÐ *.2H7#'655353#7&'767&''7535335#35#7#"''3254'7##5óÃ`<  " ****›   '¼M@2 3;Y+].     &9?78ž°ÿï~Ï7#7'7''7535335#35#yI+   ' %%6666·hB" ±+D ÿéõÏ$273533#&'#5'675#&''6'&''6aaa*@ <$'7 @*a¤  w µ<@3][1:?  $ !Aÿê÷Ñ "7&''63#3#"''3255##5#–$/ .$!+ 8 aaˆ 3.Ñ %'*'%: $TTÿçëÐ'-3M7367&''66'367&''66''67'63673#"''3267#'67#­   g    jfE\  LC 9>Ð     !     r 8!5 %HÿéóÐ1=AEIMd733#3'67#6753673267#"&55'655333##5#5;5#33535#33533##'3267#'67#536•>>I r & %:hh *D*0< - . # (2Ð     ,>/ /8TJ!      GÿëõÐ048<@DLPTX733#3'67#753673267#"&55'65533#735#33535#3353#53535#35#35#BBS p&.1ll,J, ‘!#Ð    *>. /8SH<$ ! !$$$ ÿìöÏ048<@DLPTX733#3#67#'655332767#"'&55'7533#735#33535#3353#53535#35#35#jbbrªKcZ )% 25 +-0’’//@.n//@. Ì 2##4 Ï   I84 +5X     +?' ! #%%% ÿíò®+/37;?CKOSW733#3'67#73267#"&55'665535#3#735#33535#3353#53535#35#35#pNNhYFH %%.12 K2ŽŽ-->,j-->,Å00®      "2' #E #4   ÿèíÐ3\`dhl733#3'67#6732767#"'"&5'675#'6655333##3#"''3265#'6765#'#5367#5#5;5#33535#335t]]eQ$ #$ 0 3> S-˜DR F= #  (GA00B2t00B2Ð      I=/ +!SH "   !  ÿéõh26>B73&''67&''667#'3#3#7'75375#735##5##535#’A #   7zR"-8"..¯666h    0)(237 7! .óÑ $*06<733#5'667#35#33535#335&'7&'''67&'UQ4³ 2L G;;O>;;O>) K  ŸE ÑM< +"         uòÑ37;?73&''67&''667#'3#3#67'635375#735#3#735#™> " ( 0 W!!!,6%55][[;;Ñ   "  ! * ]ÿéóÏ.287#"''32655'675#537#'733#67&'37#&'±    'AQAH+=   !C; ;  >; %8 6  ŠT  ÿéóÐ.26>DHN7#'733#67&'#"''3'3255'675#53'37'3#3##5#'673#7&'À9A$9      "2F2µFF \%$<.  Š7 8  .9  %8&ŒŒ9% !2UN  ÿéóÐ-1RX^d7#'733#67&'#"''53255'675#53'3767&'7&'#5'67&'676&'&'''6¾;C&;      4H4 {   5  2  Š7 8  .:  &8:! UP&"9   ÿëô™'+17737#'733#67&'#"''32655#737#&''6‡jm:]   9%   c7cb% H&02S +(  ++ :0 A   ÿéóÐ-1>Z`f7#'733#67&'#"''53255'675#53'37''67&3#3#677'675#535#&'&'¾;C&;      #4H4 Ž" 3< "+##\  N Š7 8  .:  &8     D  ÿæóÐ!%3K7#3533533#'665535335#33533567'7533732767#"&5536ë¶+,9µ [[++=,%}"+ 6U %¼>@/ 0"[V[% P   N  ÿìgÌ 73#3#3#3##5##535#MM\\ HHHHJ&&&ÌS U4! (õÐ'/?PTX73533#733#3#3#3#3#"&5535##326'3673#53&'#"''3255##535#35#(-hrUUMNOOOOO*' MM]L ²tX  ;;;;;Ä   &   Y Zw  &I \ # [ïÃ73#3#3#535#535#ÄYOOeÞeNNWÃÿé÷› (0@QUY733#3#3#3#3#"&5535##326'3533#3673#53&'#"''3255##535#35#‡UUMMNNNNN*( MN]J Ì),htV   ;;;;;›  )   ` b’   )O  c ' IöÐ'9?PTX733#3#3#3#3#3267#"&5535#'3533#3#53&'#367##"''3255##535#35#†VVNNOOOOJJ#,& LMn'+r'#> ?????Ð #      H  9 LÿéìÏ &7#5##53533533#3##5#535#'6ê®`E-HH``dd8 ·9&&9& %%&;;&  ÿêî\)-73#3#5##5'67#35#'3#3#5##5'67#35#…i9 =* &**—i9 <* &**\M .B7M .B -ës #'73#735#33535#33573#735#33535#335dd'@'"cc&?&sF)) *F))  ÿèñ¥26:>BFJQ735333##3#3#&''67&'67#5367#535#5#5;5#33535#33535#33567#I>FFJ_q# %#8% ;I-E>$$,,?2q,,?2w22E78 D‘ %   % 4 = 5ÿçôÐ#'-7'655673#3533#&''67'35&'b P: 9Kƒƒ6A;1 24 4 2p 1'! 26d  5  &($!](  1ÿéðÅ'+17=C73#3#"''3255##5##535#'66553'#3&''&'&''&'`A=  +(:< ›ss 1   J 1   _  Jbbfw B3 0"[5$\        ÿëìÉ%)-15;A73#6767&'7&'#5#'67&'67#735#33535#335&'''6$·c "48F& ! ))8==Q>==Q># !!O' $ÉV  % 54 44{      ÿëkÎ$*767'7'#5'67&'676&'''6Q   3  ­:! VP&"^  \ÿêòÄ$,73#3#"''3255#&''67##535#33##gŠ7,    -B ƒƒÄu  `' (|$Š ÿëmÎ$*767'7'#5'67&'676&'''6Q   3  ­9" UO&"_   ÿèôÏ48<@DHLTX^d73533#3#535#'3#3#73#735#3265#"&55#'67#3#3#73#735#35#35#'#5##535#&'''6b>BB:5>QGGUU\‡‡c   dBBBBZxxTTTTTT+–" Ç  6   Q: O Q1#   EóÑ +F73#53635#35#77'7''67&'676''67&'67677&'zAh    ‚  Ñ mm4K30  '  . ÿìaÉ 73#3#3#3##5##535#HHVV EEEECÉO Q1 ÿéòg $73#53535#3353353##"''3255#ÙÔ""5!%¹åf lg$$$1   >ïÏ.31073&''67&'67#53667#73&''67&'#367</ ! % !) "R` Ï     J:-!    9ñÏ#)/5;73533#6767&'7&''67&'67#&'7'6'67&'gdi  $ '. c  »…”¶ &         ÿèôÇ '+1773#735#33535#3353533533#3#535#5#'67&'$ºº@@T@”@@T@²2A88?â<2‡A &. )f3# "1ÇZ56:    ÿëê”!'-7'#5'67&''676767&'&'''6¼  (+  $ 39@3 $ !"I ' "_ B@ ' 3    ÿèóÓ@FLS767&'7''667'767'6767&'7'&''67''6'67'67'66e$&  ;B        6 C'Q +#` 3 55 -R VG 9m AGÓ         '#   &    )  . ÿïñª'+/?73533533#3#3#&'#'67#535#535#35#35#3533#3#535#0$2%%((>5$ .8. %1<%%$62222%466]ÅV4– 0> ÿéïÒ ,15973#"''325''67&'3#5##5'7532635#35#35#x   5– 'W (IRr Ò8 * " „ h C02 ÿéò¡373533533533##5#3#5#5#3533#&'#5'67##8,,^#¡´ž8eedS<A !@ 4 O’ ->=   #23 ÿé÷Î )-15=AG73&'#'3#7'63#3#32765#"&55#735#'3#3##5##535#7'6; *ŠHHr  nVVnf   ;@@wDDDDCg. *Î"   N; A* O Q1 2 ÿèõÐ*@F[`767&''67&'73265#"&55#'6553533#&'#5'67#7&'#53&''67&67#   Æ   %}))    P  7 n   % 8 È     B 8 m(( RR# %6  $0     ÿç÷Ç$(7#3#67&'#67'75#'66553#貸T 'P$. &ÇF  )HR WB2 1$`+ ÿéñ›73673#3#5##5'67#35# V z… …v -IAvvz  ] G %^* ÿéòÏ (073533#3#735##5##533267#"&5'3'66fdà$™™tt¥±{   " ;%' $ ½54,-", 2!#ÿéðÇ+<73#3#"''3255##5##535#3&''67#73&''67#ßeY  EEYf'( Z(  Ç–  ~‘‘œ¯H XYòÉ!73&'#"''32765#'67#'6cl    8 2,  É 3H?  ÿéfÏ"7353673#&'#5'67#7&'       ~Q. XV#/S ÿèòÏ!%7#67&'#67'67535335#35#ÖR !% W!1&,9LL„„„„²i  HF  ³*D ÿìeÉ 73#3#3#3##5##535#JJXXFFFFG"""ÉO Q1ÿéŸÈ@DHLP7#3533533##5##5#'6553#3#"''3255#7'675##535#735#33535#335Ÿv_)1    -'%<%È  7C7 5@`<@A - DS' & ÿéñÐ=AEIMQY]ae7#'665535333#3'67#73267#"&55'75#'65533#735#33535#3353#53535#35#35#ð¾ \WWe Q@A&$ '7uu/#R/# ¨()ÁQB4 /"\        ?4( (/G88"  ÿèóÏ *H73#'6#3533#3#"''3267#'655#&&'67'675676ŽV^  v'%1,  ×   %2#Ï  "((^TJ06N1 :4h |   9ÿêòÐ-159=AGMSc733#3#"&55'75#'6553'7#73263#735#33535#335&'7&'''6733267#"&5…EER , "5Y C2 imm-I-%  C a  # Ð   I=/ /8S'?& !       =ÿþ»m 73#3#537#735#35#Fo5B~(%HH ZZm/ 33 O cÿéóÌ8<@DYg73#73##5##53#5##53#73##3533533#'65535335#3353353673265#"&5'67'7533p;;A==}*B $k"j  55#"      Ì / /.. )$$ $-2 8        0  ÿèóÌ8<@D\k73#73##5##53#5##53#73##3533533#'65535335#335335367326767#"&5'67'63533bbnee3É6Jn<»*);³[\**<)'<%$  *B", 2Ì / #21" /  *$$ #.2 8     0  ÿéòÏ(HN73#"''3265#'67#'6&''6367&'#"''32655'67'&'›?      /8 67$A H#   !   !*0#( ÏA*+  ;           $ÿèô²9AEI73#&'#5'67#535'6'3#&'#5'67#535'6#5##535#35#á$      "+7     3636…rrrrr²(#    ! gX X -#ÿîô°7G73#&'#5'67#535'6'3#&'#5'67#535'63#53533533à (  ,7 "    +35JNÄ%)>° /+  *(‘++9_ÿèõÐ *F\73#53635#35#''67&'67767'74''67&'676767'3533#&'#5'67#¥*     n    {;;0 ! $0Ðgg 5G    ,    ( .  9:  <óÒ;?CGKOSY_ek7'#5'67&'676767''&'#5'67&'676767&'73#3#3#3#3#735#'&'7&'''67'6á      ‡      $88 JJ<<<<==!  Ÿ  ·   š   ‘ 1,   % 1,  (E   +         GÿçôÏ28>DJP73'67&''667#67&'736533#&''67#7&'&'''67&''&'p%F  #   =" ! $8    d Y Ï f$   '   '& &3A   š  5ÿäøÆ 7&'&'333#"''75#V- 13 =; $Æ    #\OUÿéòÏ!'073533#3#&'#5'67#535#35#&'76735d=<<4& ( " 4=!! 0  ¸T%)IS/$TW0 # 0CÿäøÌ#'+17I73533#3#3##5#535#535#35#33535#335'&'&'333#"'&'75#„+++((--..''+'='u    * .- 77!»XX36_    !\ O ÿéòÏ!'0PV\73533#3#&'#5'67#535#35#&'76735'67&'7'#5'67&'676&'''6k9992$ $ 09 . …  2  ¸T$)GS/%TW0! 0.9" UO&"^   ÿèöÐ6DHLQ[i767&'74''67&'67677'7&''67&'676'3##5'675#35#35#675#73##533'3353'67#Ÿ      L    Ì]! ±&s %$»0 *   Ê/‘&&\$V22k)"#*( ÿéðÏ;W[_cg73533#3#&''67#5367#73533#3#&''67#5365#3533#3#3##5#535#535#35#33535#335'""'&     +'k$**5+ $  ##k\^^PPiieeOO\ <   - ÿë÷Ï#'+17I73533#3#3##5#535#535#35#33535#335'&'&'333#"&''75#PEEE;;GGFF;;E((:(b((:(¬4 &GÏ:  /  d    < $8) ÿèõÏ #)-39?E73#"''3265'3#3'67&''67#67#73#&'''67&''&'Ò  »t7 8+  "( /^8  —}"  ω {/ $20k,   ÿçóÍ '+P73#"''325'3#3'67&''67#67#73#3533#67&'67'75'67#Ð   ¹t<8K  %! /`ˆcfc  $O!)  =TÍb  Y7 % *H.   :   ÿé÷Î )-15=AG73&'#'3#7'63#3#32765#"&55#735#'3#3##5##535#7'6; *ŠHHr  nVVnf   ;@@wDDDDCg. *Î"   N; A* O Q1 2 ÿéòÏMQUY]a7#35#535#535'6735'673#33##&'#5##5'67#535#'66553535#3533535335ð¾5""//% " $BB*! "" %7 a""L"ÂQ        /::)   .& 1!] Y   0ôÐ 7'67&'3#3'67#~); ?326 6UJJ'• |³#. ! XDõÑ 7&''63#3'67#§& &% *88m  VÑ    ÿèaÃ73#3'67&''67#67#Q*.;     Ãu.. (=M  ÿéò¡?EIMQUY73#33##&'#5##5'67#535#535#535#53&'7#'66553533#'#365#3533535335¸3@3(& $ "%..%%/* 0 Rf5 @$  O v   %//"     ?4) &H !   2ÿéʃ73#3#"''3255##5#Kjj˜ C.ƒ9 #__/ѱ #7&''63#3#"''3255##5#}1 0) +88p   . ±  % :: ÿéòÒ !'-59=AR7#5##5353&''33267#"&57&'''63#53535#3353353##"''3255#î´d !  ,%€Š ¹ã##6%(¸ÚZ   mÃ""       "'''1   ÿé|š%7&'3#5'63#"''3255##5#?  3; #\   "š   4* FF ÿégÏ 73#7&''6.&  1 ÏæÃ ) ÿíîÏ'-3;U7367&''657367&''65''67'6#5##53#3#3&'73#535#535#D   )k    (ˆ  o  _´«OLL' &Ó]HHJÏ             ;++   ÿègÏ'7&'73#3#7'67'767#535#536&< "$)  (Ï.$ ÿépÄ 73##5'75#35#35#675# c $""""""ÄÉ/$$[%W ÿîuÏ '-7'67&3#3#677'675#535#&'@!3?## &)4$$  ®"    C5 ÿéóv'7&'#5'63&'3#"''3255##5#~19 i OS:— B3v   %  55 ÿîòp 6@73#735#73#735#73#735#3#3#535#&''67#&''67#<<;::<<<¥Ò1  æj2    )Á  (p' ' ' " 2    2   2ÿîÏ "7&''63#3#"''3255##5#=  #66a "Ï,+* %5 "YYAÿé©Â73#3'67&''67#767#L]//D   Âz0$ .:M   ÿêa 73#3##5#'673#@@ S   4Â(ŒŒ:$ !2UÿêuÇ!*/373#3#5##535#5#35#"&55#'75#326655#35#g#=7 =  76 ==DZ´i 8' &4 CòÉ73#3#3#535#535#3535#5##3ÖG99NåL88DX#99#88É89a&%% ÿéöÏ >DHLRX7#5##53533673#67&'##"''3255#5'67&'767#3&'#35#35#'67&'ë°a^=S6   @   B  -&Y pppp x ¼,,'  8  8   * ( !   -ÿêò†#7367&'#"''325'3'67#‡  " /  NG$$ -3† 7I  ^B2 ÿéwÏ"7353673#&'#5'67#7&'( '' #  ~Q2 Z_%-S EóÑ +F73#53635#35#77'7''67&'676''67&'67677&'zAh    ‚  Ñ mm4K30  '  . ÿçõÏEKOSY_e7#'67'6753533673#67&'##"''3255#5'67&'767#3&'#35#35#'&''67&'ò° UG;D2   3  1   /.= SSSSV  [ r¼OB2 .(  [&   5  3    , ' h     ÿèõ06<B7&''675'675#'67#53673#5'675#'67#'6'67'6}3: 79$B 8!* 4 & $^ \ #'  (#2 .>(RNH:ztk       64J   F      !  ÿë÷Ê 7&'&'333#"&''75##4 &K!44 6  ¯ ;  '; '% 3   ' ) D  Vÿê§Ï73'67'756776‹    £Q3'"ƒ n FÿèìÐ'/37;?7''756767&'73#"''3267#'67##5##535#33535#35#†  ! %Q   Kg**?(g**?((§ E  0 #E 06 ,Wr q*CaåÑ'7''675677&'73#"''3267#'65#\ %*$#0j% ª H  4 !=%-! ÿërÎ%+767'7'#5'67&'676&'''6W    2  ±># TO&" _   ÿé~Ï!'8>7#5353673#&'#5'67&'&'3653#'665#&'3!*  .   PE*13( &E 0/  #O   c    $   ÿïòÏ 73533#&'''6feß“-!"+8(*2™6659>5 I*4 ÿèŸÆ/5;B737&''67#5'675'67#73#5'675'67#'6'67'6>' ( $ !G: !( &+7 432. JÆH     W    ^  \ÿïòÏ%573533#3#3265#"&55#'67#535#3533#3#535#m,88D( %9,044A•@0µ   $ m  IÿéóÇ 173#3#535#5#35#3353353533#&'#5'67#Yš2*).W))‡EF7%$) &5ÇFF5$$$$$L#FF)"bîÇ 73#3#535#5#35#335335ÙC5À:E‚*9&&9*"Ç??.9óÏ$*06<73533#6767&'7&''67&'67#&'7'6'67&'ifl  " %,  c  »ˆ•¶ (      "   ]ÿïói!73#3533#3#3#535#535#'6|\\7722?–C--'i   fÿéò›&*.473#3#3&''67&''67#5'635#35#67#€Ya_: > $!   AAAA  6› =    8 ) # 5  ÿæéh!7'673#"''3265#'67#'67> +˜  OK#? 6C J19$.* P‹Î73#&'#5'67#535'6ƒ.--  &26:Î () ÿéóÑ5BF7#'67'675353&'73#&'#5'67#535'673#"''325'3#ó´ Xz $$   #$)` &»M?2 *"  b  QN& ™  }iÿéí‰!%)4:7373#3#3#3##5'65#5#35#'37&'#''6~" -0**++3h 7"""""R    ‰  W   "q }!  ÿéòÐ:>BFJ73533#3#3#3#67&'67'275'67#535#535#735#33535#335eeÞ¬O[[gY  H%+-  +)NbUUK99K<‡99K<Ä  C   @    ( %  ÿèdÐ7353367&'#5'67#     $2§))   ed 7ÿóðÇ#73#3#3#535#535#735#33535#335&¶QRReßfWWQ==Q=Ž==Q=ÇxC"""R ÿéóÐUY]as73533#335367373#3#3#3##5'#3#"''3255#7&'7''2767##537#75#5#35#'&''67'76/4wF   !$O *5  ) 0-ªK     ½ 11&*)&"$"I  2  Pb""4$$2"y    @ÿèíÇ!C73#3#"''3267'6765'67#735#73#3#"''3267'6747'67#735#ND,3  $ 4 *2TI,3  #%6 *6Ç:h!    <:i     < ÿèóÐ#'73533#&''67&'#367#5##535#a]%%:D.,: 3&5"xxx¶  Zaa@- ÿéê£$(,048EIM7#373#3#3#3##5'67##535#35#5#5#35#7##'3255#535#5#v 7600007m /8888U$$$$$Ž O====£B   ; xº $ B  Œ¡  YC $  ÿé|Ï $9H7#3#'6553535##5#35#3353353673267#"&5'67'27533tN  %       ¸;:/ 1\$0 3¥¶+ (   ÿêóÀ7#53#3267#"&55#'>L7ØF "3  ­¥ $  ªK#2 '1ÿéöÏ'/BGKSW73533#3#535#73265#"&55#'667#5##5#53&''67&67#'3##5##535#...&`'.Ç    I‚\   -…??K333¿<  /$  (G)+.-      %U U6$HñÒ#'C7373#3#3#3#5'6353535'3533#&''67&'767#! %(####,s"""""ž$&     =Ò G N Xÿé÷ÉIP7#5##53#67&'##"''32654'''67&''67&'767&''67#67&'îe‚            &0&  É&&,  &1Y&G        M  ÿéôÐ,26:73533#'3353#5#53373673##"''3255#7&'3#735#m64~> ; 7N  *   e%  FF º#§€Ÿ ’€Xh  d8  E?NÿéóÏ3973533533##5##5##5'673533##"''3255#&'\/##/(  &9  9  ¶pX "R  N MÿéöÒ!E7&'3673#&'#'67#7&'3#3##"''3255#535#535'2Ÿ  5]  %# +!   Z 22BB   ??11  Ò 0)(B L    )AÇ 7&''6 Ç1 ,)'VÿéñÏ.4873533#3673#&'3#5##5'675367&##535#5#5#k$$$   9C   I9$a@CC·    s W v) 9òË 73&'#''63#'673&'#fJ!>"!RRBSGË('& )$" ÿônÐ73533#7'676'&'%(`D (1#¨(( =- >0.03, ÿëêÅ#)/573#"''3255#73#"''3255#'67'6'67'6b Nqc N:&'Š&'R - -Œ , ,ž¥¾¥  *!! ÿèíGKO7#"''3255#'65535#35#73#3#"''3265#&''67#33#5'67#735#35#_ GkF[  $   ! K]  EEEEŸ .-2a0M@G H0    ,+ ' ÿéö©BGLPT`emŠ7'6733#3#;267##"&55##535#535#5335##535#535#5335#767#5#7355#767567&35&''3#&'#5'67#535'6k "A'00 ' ) ( $$ 'J4 / ?? !!  l     !#|  % M    *   % w )&     PG! ÿéòÏ*.26:>BJN73533#3673#&'3#5##5'67#535#35#35#'3#3#3#3##5##535#y  $  @; &D3 ;;;;}EE ^^MMMMM&&&¶! p ^tB­Q Q3  ÿèôÏ(4:@73533#3#3#33#"&''6535#535##5'753'&'&'"""++""Y6/M6 00"ÔDGB  ²"/  $E S"D<9  zwj  '  F òÉ"7'65533&''67&''37367w#o) %  0%|C#CC&9    (:&&:"BôÏ)-17733#3267#"&55#'67#5367#'635#335&'r?20   3 -(=6  $$8(  Ï A- 03%A  K4   ÿê•Ï,0473533#3673#&'3#5##5'675367#535#3535""  7=  C,===·! r VZ+iÿéôÏ8=737#535#5353373#33##"''3255#53567#'67#767#u =3))! "0 566  >>/ C i  ( %  5 iÿéòÏ%+73533#3#3#3##5#535#5367#535#&'u/00;!877445L\;/¸ 11 .  `ÿèñÑ'+/73#3#3#"''3267#353#5335#5363535–:]nnl ?eIIIÑK C+$()$ˆ  ÿèóÑ"&*FK7&'#3#3#3##5'63&'35#35#7#3&''67&'#'65567<9MA@@@@ ! % ....ÃXV )Ñ P  “ ! < ,r->+  '0D3 4>^Q(!# ÿézÑ!%)7&'#3#3#3##5'63&'35#35#> : NBAAAA " & ////Ñ P  “ = , ÿèòÑ#'3?CG7'#3#3#3##5'63&'35#35#7#5##5353#53#3#5'35#35?2 L@???? # ! ----ÅV4"VCK8008Ñ  P  ” = ,e,,Ä ¢>M jSÿéÐ )-157#5##5353373#3#3#3##5'65#5#35#N1* P ,º-/  d"()ÿÿ ÿèòÑ&ó+îÿÿÿé÷Ð&+ï1ÿÿÿèîÏ&1PÿÿÿíóÏ&1 ÿÿÿéóÐ&÷1ÿÿ ÿëîÐ&(0ŒÿÿÿëîÆ&0(ÿÿÿéóÏ&1cÿÿÿéóÑ&%†1ÿÿÿëîÒ&(1eÿÿÿëóÏ&(0Ëÿÿ ÿéõÐ& ¡ÿÿ ÿêóÐ&11fÿÿÿéõÏ&—*[ÿÿ ÿêóÏ&1*\ÿÿ ÿëóÏ&*]1ÿÿ ÿñôÏ&+ + ÿÿ ÿêòÐ&›šÿÿÿèòÐ&)ã™ÿÿÿèòÐ&œ1pÿÿ ÿéòÐ&™1qÿÿÿéòÐ&œ1rÿÿ ÿéòÐ&™1sÿÿÿíòÐ&žÿÿ ÿéòÐ&œ&(1tÿÿ ÿîóÐ&œ1uÿÿÿïóÒ&ܺÿÿ õÎ&+ð1wÿÿ ÿéóÏ& ëØÿÿ ÿçóÏ&V ëÿÿ ÿéóÏ& ëÙÿÿ ÿèëÏ& ëÚÿÿ ÿéóÏ& ëÐÿÿ ÿëòÇ&*a1xÿÿ ÿéóÏ&%Œ îÿÿ ÿéæÐ& ë+ãÿÿ ÿéôÏ& ì%ÿÿ ÿèöÏ& îïÿÿ ÿéõÏ&¹ îÿÿ ÿéñÏ& îÛÿÿ ÿçõÐ&«1zÿÿ ÿéôÏ&6 ëÿÿ ÿìõÐ& ÿÿ ÿìõÐ&ÿÿ ÿéôÏ&! îÿÿ ÿéôÏ& ëÿÿ ÿéòÏ& ìÿÿ ÿèóÏ& îÿÿ ÿéòÐ& ëÿÿ ÿéêÏ& îãÿÿ ÿéõÐ&äÿÿ ÿéôÏ& îÉÿÿ ÿïõÐ&ÿÿ ÿéëÏ& îÿÿ ÿéóÏ& îŸÿÿ ÿéõÑ& î%ÿÿ ÿéôÏ& ë%Žÿÿ ÿéóÏ& ì*–ÿÿ ÿéòÏ& ë\ÿÿ ÿèõÏ&-ã îÿÿ ÿéòÏ& ë1{ÿÿ ÿéíÐ&Õ îÿÿ ÿéùÏ& î%ÿÿ ÿèõÏ&| ìÿÿ ÿéëÏ&Ì& í1|ÿÿ ÿèøÐ& ë%ÿÿ ÿéëÏ& îºÿÿ ÿéõÏ& î,ÿÿ ÿéçÏ& î%‘ÿÿ ÿéòÏ& î%–ÿÿ ÿéôÏ& ì% ÿÿ ÿèöÏ& ëŸÿÿ ÿéñÏ& î:ÿÿ ÿéõÏ& î%·ÿÿ ÿéôÏ& îÜÿÿ ÿéòÏ& î$—ÿÿ ÿéóÏ& î&vÿÿ ÿçòÏ& î^ÿÿ ÿéðÏ& î*cÿÿ ÿéîÏ&%¸ îÿÿ ÿéøÏ& î%¹ÿÿ ÿéøÐ&%º îÿÿ ÿéòÏ& ëbÿÿ ÿéôÏ& ìLÿÿ ÿèóÏ& î…ÿÿ ÿéòÏ&¸%½ÿÿ ÿèõÏ& îµÿÿ ÿéöÏ& îRÿÿ ÿéóÏ& ëGÿÿ ÿé÷Ï& ì%¾ÿÿ ÿéóÏ& îaÿÿ ÿéõÏ&Û îÿÿ ÿéñÏ& ì-âÿÿ ÿéõÏ& î%¿ÿÿ ÿçõÐ&1}ÿÿ ÿèôÏ&@ ëÿÿ ÿèõÏ&%À ëÿÿ ÿéñÏ&%þ ëÿÿ ÿéõÏ& î%ÿÿÿ ÿçõÏ& î`ÿÿ ÿêõÐ&1~ÿÿ ÿèëÏ&& ëÿÿ ÿéòÐ& ë&ÿÿ ÿéñÏ& ë0•ÿÿ ÿèôÏ& î1ÿÿ ÿèõÏ& î,Žÿÿ ÿéõÏ& ëEÿÿ ÿéóÏ& ì&ÿÿ ÿéëÏ&& ëÿÿ ÿéñÏ& ë1€ÿÿ ÿèöÏ& î&ÿÿ ÿéóÏ& î&ÿÿ ÿéçÑ& ë&ÿÿ ÿéòÏ& î¡ÿÿ ÿçòÏ& î&ÿÿ ÿéóÏ&_ îÿÿ ÿèóÏ& ìÿÿ ÿèõÏ& î*dÿÿ ÿéêÏ& ì{ÿÿ ÿéòÏ& îÝÿÿ ÿéêÏ& ì‰ÿÿ ÿéóÏ&d îÿÿ ÿéòÏ& ì.Ñÿÿ ÿèìÏ&e&&t¿ÿÿ ÿéòÏ& î,ÿÿ ÿéõÏ& ë&ÿÿ ÿéòÐ& îhÿÿ ÿéèÏ& ì& ÿÿ ÿé÷Ï& ì®ÿÿ ÿéòÐ& î¤ÿÿ ÿèòÏ&&  ìÿÿ ÿéòÏ&*e îÿÿ ÿéòÏ&Ü ìÿÿ ÿéóÐ& ëgÿÿ ÿèôÏ& î”ÿÿ ÿéóÏ&  îÿÿ ÿéóÏ& ìÝÿÿ ÿéóÏ& îÞÿÿ ÿçöÏ&` îÿÿ ÿèõÏ& î–ÿÿ ÿéóÏ& ëbÿÿ ÿéòÏ&} îÿÿ ÿéóÏ& ì& ÿÿ ÿéðÏ& î£ÿÿ ÿèñÏ&(, îÿÿ ÿéòÏ& î8ÿÿ ÿéóÏ& î Ëÿÿ ÿéëÏ& î¢ÿÿ ÿèñÏ& í1ÿÿ ÿèõÐ& î& ÿÿ ÿèðÏ& ë&ÿÿ ÿéõÐ& î&å™ÿÿ ÿéóÏ&Á îÿÿ ÿéèÏ& î&ÿÿ ÿéöÏ& îbÿÿ ÿéñÏ& ë¡ÿÿ ÿéúÏ&e`ÿÿ ÿéêÏ&# îÿÿ ÿéõÐ& îaÿÿ ÿéòÏ& îWÿÿ ÿéôÑ&Ü ìÿÿ ÿéòÏ& î*fÿÿ ÿéóÏ& ì¦ÿÿ ÿéõÏ& ìÿÿ ÿéòÏ&+ ëÿÿ ÿéóÏ& îäÿÿ ÿéóÏ& î0Óÿÿ ÿéöÏ&$ îÿÿ ÿéõÏ& · ëÿÿ ÿéõÑ& îŒÿÿ ÿéöÑ&] ëÿÿ ÿé÷Ï& î¥ÿÿ ÿèõÏ& î¨ÿÿ ÿéõÑ&¶& ìÿÿ ÿéõÏ& î9ÿÿ ÿéóÐ& ìxÿÿ ÿèëÏ& í&œàÿÿ ÿéóÏ&÷ ìÿÿ ÿéòÏ& î1‚ÿÿ ÿéòÏ& í1ƒÿÿ ÿéóÏ& î$ÿÿ ÿéôÐ& î ÿÿ ÿè÷Ï& ì5ÿÿ ÿèìÏ& ìÿÿ ÿèõÏ& îÑÿÿ ÿçöÏ& îéÿÿ ÿçìÏ&¸&¬ÿÿ ÿéóÐ& ì&"ÿÿ ÿéöÏ&¸œÿÿ ÿéôÏ& î¾ÿÿ ÿéòÏ& î§ÿÿ ÿèôÏ& î0¼ÿÿ ÿèòÑ& ëÕÿÿ ÿéïÏ& ìÃÿÿ ÿéîÏ& ë.ÿÿ ÿéòÐ& ëÛÿÿ ÿéìÑ& ì¡ÿÿ ÿèïÏ&Å ìÿÿ ÿçõÐ& ë(ÿÿ ÿéôÏ&À ìÿÿ ÿéìÏ&¸0Iÿÿ ÿæöÏ& ìpÿÿ ÿéïÏ& ì½ÿÿ ÿèåÏ& î¾ÿÿ ÿåôÑ& ìÿÿ ÿèíÏ& ë¡ÿÿ ÿéëÏ&à&e&$ÿÿ ÿèöÏ& ì&%ÿÿ ÿèóÏ& ëWÿÿ ÿçóÐ& î&#ÿÿ ÿèóÑ& î&úùÿÿ ÿçöÏ& îÕÿÿ ÿç÷Ï& î&&ÿÿ ÿéõÐ& ì ±ÿÿ ÿèóÏ& ì&'ÿÿ ÿè÷Ï& î&(ÿÿ ÿéòÏ& ì.˜ÿÿ ÿéóÏ& ì&)ÿÿ ÿéíÏ& îvÿÿ ÿèîÏ&¸&*ÿÿ ÿéôÏ& ì0yÿÿ ÿéõÏ&/= ìÿÿ ÿéôÏ&] îÿÿ ÿè÷Ï&¸"äÿÿ ÿèñÏ& ìŒÿÿ ÿæõÏ&-á ìÿÿ ÿéðÏ& ì&+ÿÿ ÿéöÏ& ì&,ÿÿ ÿéøÏ& ¹ íÿÿ ÿéóÏ& ë&-ÿÿ ÿéóÐ& ì&JIÿÿ ÿéòÏ&&. îÿÿ ÿèôÑ& ìXÿÿ ÿéôÏ& î&uÿÿ ÿèöÑ& ë&/ÿÿ ÿíõÌ&ªÿÿ ÿéçÐ&&0 îÿÿ ÿéìÐ& í&ùÿÿ ÿéëÏ& ì&1ÿÿ ÿéòÏ&% îÿÿ ÿéòÏ& î©ÿÿ ÿéóÏ&&2 îÿÿ ÿé÷Ï& ìUÿÿ ÿéóÐ& ì&3ÿÿ ÿéñÐ& î&4ÿÿ ÿéóÏ& î¬ÿÿ ÿéóÐ& ì«ÿÿ ÿéõÐ& î&5ÿÿ ÿéöÏ& î&6ÿÿ ÿåðÏ& î-àÿÿ ÿçõÏ& Ö îÿÿ ÿéóÏ& î&7ÿÿ ÿéóÏ& îÖÿÿ ÿéïÏ& î&8ÿÿ ÿéóÏ&&| îÿÿ ÿéòÏ& î)ÿÿ ÿèðÏ& î0ÿÿ ÿéïÏ&( îÿÿ ÿéñÏ& ì&}ÿÿ ÿéòÐ&õ&¸ùÿÿ ÿéõÏ& ëÈÿÿ ÿéôÑ&ÉWÿÿ ÿéóÐ& í ÿÿ ÿçïÏ& î*gÿÿ ÿéóÐ& î^ÿÿ ÿèôÒ& î_ÿÿ ÿéóÏ& î*åÿÿ ÿéõÏ& í.Rÿÿ ÿéöÏ&¸1„ÿÿ ÿéõÏ& í*hÿÿ ÿéöÏ&*i ìÿÿ ÿèóÐ& ì\ÿÿ ÿèòÏ& ì¯ÿÿ ÿèôÏ&Ç ìÿÿ ÿçóÐ& î,aÿÿ ÿéïÏ& î°ÿÿ ÿèñÏ& í&~ÿÿ ÿéöÏ& ì&ÿÿ ÿéëÏ&î íÿÿ ÿèðÐ&f îÿÿ ÿéòÐ& ì*jÿÿ ÿçóÏ&© ìÿÿ ÿéõÑ&W&KJÿÿ ÿéìÏ&¸îÿÿ ÿéëÏ&%&eàÿÿ ÿèóÏ&Ü îÿÿ ÿéïÏ& ì(@ÿÿ ÿéôÐ&&€ ìÿÿ ÿéõÏ& í¾ÿÿ ÿèîÏ& íÈÿÿ ÿéëÏ&&‚ îÿÿ ÿéóÑ&WVÿÿ ÿéóÏ& î&Èÿÿ ÿèñÏ& î&ƒÿÿ ÿéëÏ& ì&„ÿÿ ÿéôÏ&| ëÿÿ ÿéòÏ& ì&…ÿÿ ÿéôÏ&{ îÿÿ ÿééÏ& ì±ÿÿ ÿèñÏ& î,bÿÿ ÿéôÏ& í&,1…ÿÿ ÿéòÏ& î-äÿÿ ÿéóÐ& ì¯ÿÿ ÿéõÐ& Ê ìÿÿ ÿéóÑ&Q îÿÿ ÿéñÏ& ì­ÿÿ ÿéóÏ& î²ÿÿ ÿéöÏ& ì®ÿÿ ÿéøÏ& ì„ÿÿ ÿéòÏ& î³ÿÿ ÿæöÏ& í”ÿÿ ÿéõÏ& ì.ÿÿ ÿéõÏ&¸&&w1†ÿÿ ÿèóÏ& ì{ÿÿ ÿéõÏ& î&†ÿÿ ÿèòÏ& î*éÿÿ ÿéõÏ&&‡ îÿÿ ÿçðÏ& ìÿÿ ÿéôÏ& C ìÿÿ ÿéôÑ& É ìÿÿ ÿåôÏ&*ú ëÿÿ ÿèñÏ&.Qeÿÿ ÿéòÏ& îrÿÿ ÿéóÏ& ¢&}¸ÿÿ ÿèôÏ&!Þ ìÿÿ ÿéöÐ&"¬ ìÿÿ ÿéòÐ& ì#£ÿÿ ÿéñÏ& î#Éÿÿ ÿéôÏ& î!jÿÿ ÿéôÏ&"Z ìÿÿ ÿéöÏ& í´ÿÿ ÿéîÏ& î&ˆÿÿ ÿéîÐ& í »ÿÿ ÿéíÏ& ì-åÿÿ ÿéòÏ&w îÿÿ ÿéòÏ& ì&‰ÿÿ ÿéñÏ& î"ÿÿ ÿèóÏ& î#@ÿÿ ÿèîÐ& ì0ºÿÿ ÿèôÏ& î!åÿÿ ÿéõÏ& í#‹ÿÿ ÿéõÏ& î#Ùÿÿ ÿéôÏ& ì-ÿÿ ÿéóÏ& î"ÿÿ ÿéóÏ& ì"xÿÿ ÿéôÏ& ì&,ÿÿ ÿèòÏ& î!õÿÿ ÿéïÑ& í!³ÿÿ ÿéôÏ&&Š îÿÿ ÿèõÏ& î@ÿÿ ÿéõÑ& î'ÿÿ ÿçóÏ&&‹ îÿÿ ÿéðÏ& î#Mÿÿ ÿèöÏ&%ĸÿÿ ÿéóÑ& î!Âÿÿ ÿéóÏ& ì&Œÿÿ ÿéóÏ&0reÿÿ ÿéòÏ& î1‡ÿÿ ÿèðÏ& î"wÿÿ ÿéíÏ& ì"ÿÿ ÿéóÐ&"’& ì!8ÿÿ ÿéõÏ& î"Žÿÿ ÿéïÏ& î"Gÿÿ ÿäöÏ& î"oÿÿ ÿéòÐ&^ îÿÿ ÿéôÏ& ì#Ÿÿÿ ÿéóÏ& ì"(ÿÿ ÿèóÏ& î‡ÿÿ ÿéìÏ& í&!ÿÿ ÿéñÏ&¸ hÿÿ ÿéíÏ& í qÿÿ ÿéõÏ&¸#„ÿÿ ÿéõÑ& ì#…ÿÿ ÿèòÐ&¹& ì1ˆÿÿ ÿèõÏ& î#³ÿÿ ÿéòÑ&e#êÿÿ ÿéóÐ& ì!ðÿÿ ÿéíÏ& î1‰ÿÿ ÿéñÑ& î#óÿÿ ÿè÷Ï&$Þ ìÿÿ ÿéóÏ&-Ý îÿÿ ÿéöÏ& ì¶ÿÿ ÿéóÏ& íTÿÿ ÿæõÏ& ì$ÿÿ ÿèôÐ& î,Åÿÿ ÿéìÏ& î"Õÿÿ ÿéïÑ& íBÿÿ ÿçòÏ&&‘ îÿÿ ÿéôÏ& ì-Þÿÿ ÿèôÐ& ìfÿÿ ÿèôÐ&&’ îÿÿ ÿéðÏ&$« îÿÿ ÿèöÒ& î$%ÿÿ ÿéóÐ&$_ îÿÿ ÿéôÏ& ì&,1Šÿÿ ÿéöÑ& î$ÿÿ ÿéòÏ&&“ îÿÿ ÿéëÏ& î$Sÿÿ ÿéñÏ& î# ÿÿ ÿéóÑ& î# ÿÿ ÿéóÐ& î#ÿÿ ÿéòÏ& î$>ÿÿ ÿèðÐ&¸/Lÿÿ ÿéóÏ& ì&°#ÿÿ ÿéóÏ& ì&˜|ÿÿ ÿéòÏ&e-ßÿÿ ÿèñÓ&¸1ÿÿ ÿèóÏ& î&”ÿÿ ÿéöÑ&&• ìÿÿ ÿéíÏ& ì-:ÿÿ ÿéöÐ& ëEÿÿ ÿéôÏ&&,eÿÿ ÿéóÏ& ì)ÿÿ ÿéóÏ& ì&šÿÿ ÿèõÐ& í ÿÿ ÿéòÒ&¸1‹ÿÿ ÿéóÑ&b ìÿÿ ÿèôÐ& ì&œÿÿ ÿéöÏ& ì*æÿÿ ÿçõÐ& î&ÿÿ ÿéóÑ& î&›ÿÿ ÿéòÏ& í& ¢ ¡ÿÿ ÿéòÏ& ì1Œÿÿ ÿéõÏ&4&Ý îÿÿ ÿçõÏ&¸+ ÿÿ ÿéóÏ& ì&¡ÿÿ ÿéóÏ&Ð ìÿÿ ÿéôÏ&Ý& ìÜÿÿ ÿé÷Ï&¸&¢ÿÿ ÿéóÏ& îJÿÿ ÿéöÏ&&¥¸ÿÿ ÿçôÐ& ì&¦ÿÿ ÿéïÏ&è& ó íÿÿ ÿèôÏ& î’ÿÿ ÿéôÐ& î&§ÿÿ ÿéóÏ&Æ ìÿÿ ÿçôÏ& îÄÿÿ ÿéóÒ& ë%æÿÿ ÿéóÏ& ì&£ÿÿ ÿéõÏ&·¸ÿÿ ÿèïÏ&&¨ îÿÿ ÿèõÐ&e&1ÿÿ ÿéôÏ& ízÿÿ ÿéöÏ&¸&%1Žÿÿ ÿéîÏ& ì1ÿÿ ÿéñÏ& í#ëÿÿ ÿéóÏ& ì&©ÿÿ ÿéôÏ& ì&ªÿÿ ÿéòÏ&&«¸ÿÿ ÿèôÏ&¸&¬ÿÿ ÿè÷Ï& í&61ÿÿ ÿéìÑ& îšÿÿ ÿèöÐ&&­ ìÿÿ ÿéëÏ&&®&(L ìÿÿ ÿçêÏ&%ë îÿÿ ÿéöÏ&%ì ìÿÿ ÿèóÏ&¸0Ùÿÿ ÿéóÐ& ìtÿÿ ÿéôÏ& î*Óÿÿ ÿèõÏ&¢1‘ÿÿ ÿéòÏ& ì&¯ÿÿ ÿèóÏ&&° ìÿÿ ÿéìÏ&î& í1’ÿÿ ÿéõÏ&¼ ìÿÿ ÿéøÏ&¸&±ÿÿ ÿéóÏ& ì.äÿÿ ÿçóÏ&¸'ÿÿ ÿéòÏ& í.Ôÿÿ ÿéõÏ& ì1“ÿÿ ÿèôÏ& ì&Éÿÿ ÿéõÑ& ì-îÿÿ ÿèôÐ&½ íÿÿ ÿéðÑ& ì&€1”ÿÿ ÿçôÏ& ì&Êÿÿ ÿéóÒ& ì´ÿÿ ÿéôÑ& í'ˆÿÿ ÿéðÏ& ë'ÿÿ ÿèõÐ&&¸1•ÿÿ ÿéõÏ& ì&Ëÿÿ ÿéõÒ& î&Ìÿÿ ÿé÷Ñ& ì½ÿÿ ÿèõÏ& ì1–ÿÿ ÿèóÑ& ì&Íÿÿ ÿèôÏ& í&ä&,1—ÿÿ ÿçôÑ&¸&Îÿÿ ÿèòÏ&&Ï îÿÿ ÿéñÏ&e&Ðÿÿ ÿéôÏ&1 íÿÿ ÿéóÏ&¸¾ÿÿ ÿéõÑ&¸%vÿÿ ÿéòÐ&)'eÿÿ ÿéóÏ& í&†‡ÿÿ ÿéôÏ& ì¨ÿÿ ÿçðÏ&¸*çÿÿ ÿéñÐ& î)$ÿÿ ÿèñÏ&¸%Oÿÿ ÿç÷Ò& î&Ñÿÿ ÿéòÏ&¸¿ÿÿ ÿéôÐ& ì&Òÿÿ ÿé÷Ï& ë÷ÿÿ ÿçôÐ& î&Óÿÿ ÿéñÐ&-- ìÿÿ ÿéïÏ&e&çæÿÿ ÿçôÏ&e),ÿÿ ÿèøÏ&¸&,c1˜ÿÿ ÿé÷Ï&eÿÿ ÿéðÐ& î1™ÿÿ ÿéöÐ&H îÿÿ ÿéóÏ&e&-1šÿÿ ÿèòÑ& ì&Ôÿÿ ÿéñÑ&¸&Õÿÿ ÿæõÐ& í1›ÿÿ ÿéóÏ&¸&Öÿÿ ÿéóÏ&¸1œÿÿ ÿçòÐ&e&×ÿÿ ÿèôÐ&e&~}ÿÿ ÿæóÑ&¸Tÿÿ ÿéõÏ&e1ÿÿ ÿçòÏ&1&e%iÿÿÿéòÐ&™1ŸÿÿÿçóÑ&ÈðÿÿÿçòÐ&É&™1¤ÿÿÿéõÐ&™ÿÿ ÿéöÏ&!ÿÿ ÿéöÏ&!yÿÿ ÿéöÏ&!! ÿÿ ÿéöÏ&ï!ÿÿ ÿèõÏ&àáÿÿ ÿéöÏ&!Ýÿÿ ÿèõÏ&ÁÂÿÿ ÿéöÏ&! !ÿÿ ÿêøÐ&ê%€ÿÿ ÿçöÏ&ÑÿÿÿéçÇ&/1³ÿÿÿêîÉ&ª&«©ÿÿÿêöÆ&Ä1·ÿÿÿëíÆ&Ä1¹ÿÿÿçîÆ&Ä1ºÿÿ ÿðõÆ&ÞÄÿÿ ÿéòÆ&ÄYÿÿ ÿèòÈ&(& é ìÿÿÿéñÆ&Ä1»ÿÿ ÿèõÆ&Å1¼ÿÿÿèíÆ&Ä1½ÿÿ ÿèòÈ&(& é1¾ÿÿÿéíÆ&Ä"ÿÿÿìíÆ&Ä1¿ÿÿ ÿèéÈ&Ç:ÿÿ ÿéöÏ&ÇÆÿÿ ÿîõÈ&Ç&óÿÿ ÿéëÏ&Ǻÿÿ ÿéöÏ&Ç&ôÿÿÿéñÅ&±&õÿÿ ÿéöÈ&Çñÿÿ ÿéòÐ&Çiÿÿ ÿèõÏ&Ç*dÿÿ ÿçòÐ&Ç&öÿÿ ÿéóÏ&Ç&÷ÿÿ ÿéóÏ&Ç÷ÿÿÿçìÏ&&¬ÿÿ ÿéôÑ&ÇÜÿÿÿéóÑ& ÿÿÿéõÏ&ÿÿÿéëÈ&çÿÿ ÿéôÐ&Ç—ÿÿ ÿéõÏ&.òÿÿ ÿéôÑ&ÇÈÿÿ ÿëôÏ&Ç|ÿÿ ÿéóÏ&²Çÿÿ ÿçëÈ&Ç&sÿÿÿèóÏ&{ÿÿ ÿè÷Ñ&ÏÇÿÿ ÿîóÏ&Ç™ÿÿÿéõÐ&!ÿÿ ÿîõÉ& •Çÿÿ ÿéôÏ&,dÿÿÿé÷Ñ&$#ÿÿÿéðÑ&&€ÿÿÿèóÎ&ƒ&‚ÿÿÿèôÏ&Þ&1ÃÿÿÿèôÒ&&øÿÿ ÿéöÑ&&ùÇÿÿÿéóÎ&&†‡ÿÿ ÿèôÈ&hÿÿ ÿé÷Æ&XTÿÿÿéõÏ&_`ÿÿ ÿé÷Æ&TUÿÿ ÿé÷Æ&TVÿÿ ÿé÷Æ&TWÿÿ ÿéñÒ&-·°ÿÿ ÿé÷Æ&T1Äÿÿ ÿçðÐ&>&;1ÅÿÿÿêõÏ&´&±²ÿÿ ÿé÷Æ&T&zÿÿ ÿéúÏ&µ&¶³ÿÿÿêíÄ&÷öÿÿÿêíÅ&ö1ÉÿÿÿêíÇ&ö1ÊÿÿÿéôÏ&ø1Ëÿÿ ÿçëÏ&&{Èÿÿ ÿéæÏ&Ô¢ÿÿ ÿéëÐ&›Õÿÿ ÿéæÏ&'¢ÿÿÿçæÏ&¢1ÌÿÿÿéæÏ&Ö¢ÿÿÿéëÐ&&ú›ÿÿ ÿéëÎ&›kÿÿÿèæÏ&¢ÿÿÿéëÎ&R›ÿÿ ÿçëÎ& í›ÿÿÿéëÏ&&û›ÿÿ ÿéëÎ&&ü›ÿÿÿéæÏ&§¢ÿÿÿéæÏ&¢&ýÿÿ ÿèæÏ&¢&þÿÿÿéëÎ&&ÿ›ÿÿ ÿéëÐ&'›ÿÿÿèëÏ&›0Åÿÿ ÿèèÎ&óÒÿÿ ÿéëÎ&ß›ÿÿÿèìÏ&¤ÿÿÿéëÎ&›'ÿÿÿèëÏ&'›ÿÿ ÿéæÏ& ¢ÿÿ ÿéìÏ&Ç'ÿÿ ÿéëÑ&f›ÿÿ ÿéæÐ&'¢ÿÿÿéëÏ&£àÿÿÿèëÎ& ›ÿÿ ÿéëÎ&›eÿÿÿéëÎ&›dÿÿ ÿéæÏ&0Æ0Çÿÿ ÿé÷Ï&C0ÿÿ ÿéëÐ&›' ÿÿ ÿèëÐ&Í›ÿÿ ÿéëÎ&› ÿÿ ÿéëÏ&!¯›ÿÿÿéëÎ&!°›ÿÿ ÿéõÐ&ò!­ÿÿÿèëÎ&¤›ÿÿ ÿéëÏ&!®›ÿÿ ÿéæÐ&¢¡ÿÿ ÿéëÑ&Y›ÿÿ ÿéëÏ&›.ãÿÿÿéæÏ&¢.ÖÿÿÿéëÎ&'&›ÿÿ ÿèëÐ&T›ÿÿ ÿéëÐ&›' ÿÿ ÿéëÎ&£›ÿÿÿéæÏ&¢ ÿÿÿéæÏ&!€¢ÿÿ ÿéëÏ&›' ÿÿÿéëÐ&›' ÿÿ ÿèôÑ&' 'ÿÿ ÿéëÏ&!~›ÿÿ ÿéæÏ&¡¢ÿÿ ÿéîÑ&)™ÿÿÿéëÎ&¥›ÿÿ ÿéëÐ&›¢ÿÿ ÿéëÏ&£›ÿÿ ÿéëÎ&›¤ÿÿÿéëÐ& H›ÿÿÿéæÐ&0Ç&]ÿÿÿèëÏ&›*èÿÿÿéìÏ&ÿÿ ÿçëÎ&'›ÿÿÿéëÏ&›'ÿÿÿéëÏ&'›ÿÿ ÿèìÏ& ÙÿÿÿçëÏ&Ý›ÿÿÿèëÎ&'(›ÿÿÿéëÐ& &›ÿÿ ÿéëÐ&,e›ÿÿÿéëÎ&''›ÿÿ ÿéëÎ&›ºÿÿÿéìÏ&$ÑÿÿÿéñÐ&')'*ÿÿ ÿèìÏ&$ÿÿ ÿèìÏ&†ÿÿ ÿéìÏ&#ÚÿÿÿéìÏ&'+ÿÿÿéëÎ&›"ÿÿ ÿéëÏ&˜›ÿÿ ÿéîÐ&0à0áÿÿÿéëÑ&›,fÿÿÿéëÏ&#B›ÿÿÿéëÏ&',›ÿÿ ÿéëÐ&›ÿÿÿéìÏ&0Èÿÿ ÿéëÏ&›*êÿÿ ÿçóÐ&þ1Íÿÿ ÿéëÏ&à-æÿÿ ÿçìÑ&'.ÿÿ ÿéëÎ&›'-ÿÿ ÿéëÐ&›'/ÿÿ ÿéìÏ&*ëÿÿ ÿéëÎ&'0›ÿÿÿèëÏ&'1àÿÿ ÿéëÏ&³›ÿÿ ÿéëÏ&›&1ÎÿÿÿéëÐ&ßàÿÿ ÿéòÑ&É.ÿÿÿéëÎ&›1Ïÿÿ ÿéìÒ&'2ÿÿ ÿéëÎ&'4›ÿÿÿéìÏ&'3ÿÿÿéëÑ&&Á›ÿÿ ÿéìÏ&0æÿÿ ÿçìÑ&%uÿÿÿéîÑ&0á0âÿÿ ÿçëÐ&9›ÿÿÿé÷Ñ&&Â0âÿÿ ÿèëÑ&à'5ÿÿ ÿçëÐ&à'6ÿÿ ÿéëÒ&à1ÐÿÿÿéëÐ&à1Ñÿÿ ÿéóÏ&ê1ÿÿ ÿëèÐ&ëÿÿ ÿéíÏ&ìÆÿÿ ÿæêÏ&í*uÿÿÿèïÑ&NLÿÿ ÿéîÏ&,g ðÿÿÿêïÎ&,hûÿÿ ÿéíÏ&î´ÿÿ ÿéíÏ&î'7ÿÿ ÿéíÏ&ÜîÿÿÿêôÐ&û0‰ÿÿ ÿéîÏ&' ðÿÿ ÿéîÏ&¸ ðÿÿ ÿéîÏ&Œ ðÿÿ ÿæîÏ& ð(+ÿÿ ÿéîÏ&'8 ðÿÿ ÿéïÏ&*î òÿÿ ÿéíÏ&î’ÿÿÿèñÐ&v&÷*ïÿÿÿéëÍ&ÿÿÿéõÏ&!²!±ÿÿ ÿéîÏ& ð¥ÿÿÿéïÏ& ñÿÿ ÿéîÏ&, ðÿÿ ÿéîÐ& ð¢ÿÿÿçõÏ&(&'91Òÿÿ ÿèíÏ&îÁÿÿÿéîÏ&¤ ðÿÿ ÿéîÏ&* ðÿÿÿéïÏ&¥ ñÿÿÿéîÏ& ¯ ðÿÿÿéæÉ&ò ôÿÿ ÿë÷Ï&';':ÿÿ ÿèîÏ&’ ðÿÿ ÿéïÑ&“ ñÿÿ ÿéïÏ&'< ñÿÿ ÿéîÏ& ï ðÿÿÿéïÏ& ñ.ÿÿ ÿéïÏ& ñ!iÿÿÿéïÏ& ñ …ÿÿÿéîÈ& &àáÿÿ ÿéïÏ&] ñÿÿ ÿêóÐ&*ð1Óÿÿ ÿéïÏ&$ ñÿÿ ÿéöÏ&3-çÿÿÿèîÏ&L&å ÿÿ ÿçôÐ&%)1Ôÿÿ ÿéîÏ& ðŠÿÿÿé÷Ï&(.&† õÿÿ ÿèïÏ&*ñ ñÿÿ ÿéïÏ&#“ ñÿÿ ÿéïÐ&Ê ñÿÿÿéïÐ& ò'=ÿÿ ÿéïÐ& ñ1Õÿÿ ÿéïÏ& ò'>ÿÿ ÿéïÑ&'? òÿÿÿêõÎ&í"-ÿÿÿèïÏ&'@ òÿÿ ÿèõÐ&ô&õpÿÿ ÿèïÏ&ó òÿÿ ÿéïÏ& òÿÿÿéïÏ&& óÿÿ ÿèïÑ& ò'Aÿÿ ÿéïÏ& ò*ÿÿ ÿéçÐ&Y_ÿÿ ÿéçÐ&Y^ÿÿ ÿéçÐ&Y`ÿÿ ÿéçÐ&Y1Öÿÿ ÿéçÐ&Yaÿÿ ÿéùÐ&Y1×ÿÿ ÿéçÐ&bYÿÿ ÿéçÐ&Y1Øÿÿ ÿéíÍ&Z\ÿÿ ÿéçÏ&[cÿÿ ÿéçÏ&[dÿÿ ÿéíÍ&Z1Ùÿÿ ÿéíÍ&ëZÿÿ ÿêóÐ&üûÿÿ ÿéíÍ&Z1Úÿÿ ÿéíÍ&Z1Ûÿÿ ÿéóÏ& ëëÿÿ ÿçöÏ&.vÿÿÿòîÇ&âéÿÿÿòîÇ&âêÿÿÿòîÇ&âíÿÿÿòîÇ&â1ÜÿÿÿòîÇ&âéÿÿÿòîÇ&âãÿÿÿòîÇ&âçÿÿÿòîÇ&èâÿÿÿòñÇ&â1ÝÿÿÿòîÇ&â1ÞÿÿÿòôÇ&æ&âåÿÿÿòîÇ&äâÿÿÿòîÇ&â1ßÿÿÿòîÇ&â1àÿÿÿðîÊ&ðñÿÿÿòîÇ&âîÿÿÿòîÇ&â1áÿÿÿòîÇ&â1âÿÿÿòîÇ&â1ãÿÿÿòîÇ&â1äÿÿÿòðÇ&â1åÿÿÿòîÇ&â1æÿÿÿðîÊ&ñòÿÿÿòîÇ&âóÿÿÿòîÇ&â1çÿÿ ÿéõÏ&êÿÿ ÿèòÏ&"0ÿÿ ÿèñÏ&"!ÿÿ ÿèöÏ&"¶ÿÿÿéæÐ&*#+ãÿÿ ÿêëÏ&&SúÿÿÿêëÏ&úÃÿÿÿéêÎ&`1ôÿÿÿéêÐ&`1öÿÿ ÿéëÄ&ÌxÿÿÿéêÀ&*ó`ÿÿ ÿéëÏ&*òÌÿÿÿìõÏ&!±1÷ÿÿ ÿéëÐ&Ìÿÿ ÿéëÐ&¿Ìÿÿ ÿëðË&àáÿÿ ÿéëË&ÍÌÿÿ ÿéõÏ&1øÿÿÿéëÑ&Ì1ùÿÿÿèîÏ&,i/¸ÿÿ ÿèîÇ&Gsÿÿ ÿèîÇ&s1úÿÿ ÿæðÇ&s1ûÿÿ ÿèîÇ&?sÿÿ ÿèîÇ&s1üÿÿ ÿèîÇ&Csÿÿ ÿèîÇ&sÿÿ ÿèòÇ&‘sÿÿ ÿèîÊ&Aÿÿ ÿèòÇ&>sÿÿ ÿèðÇ&s1ýÿÿ ÿèóÇ&s1þÿÿ ÿèîÇ&s1ÿÿÿ ÿèðÇ&Îsÿÿ ÿèîÇ&sHÿÿ ÿèóÊ&A2ÿÿ ÿèòÇ&s! ÿÿ ÿèôÇ&s2ÿÿ ÿèòÇ&Isÿÿ ÿèóÇ&sJÿÿ ÿèóÇ&Ksÿÿ ÿèñÇ&s2ÿÿ ÿèîÇ&s2ÿÿ ÿèîÇ&Nsÿÿ ÿèïÇ&s&MLÿÿ ÿè÷Ê&AOÿÿ ÿçóÇ&s2ÿÿ ÿèôÊ&A2ÿÿ ÿæóÇ&@sÿÿ ÿèòÇ&s2ÿÿ ÿçõÇ&sPÿÿ ÿèòÇ&s2ÿÿ ÿèõÇ&s&—˜ÿÿ ÿèñÇ&sQÿÿ ÿèõÊ&A2ÿÿ ÿèîÊ&A2 ÿÿ ÿèóÊ&A2 ÿÿ ÿéõÏ&ëêÿÿ ÿèõÂ&œÿÿÿèõÏ&œBÿÿ ÿêõÎ&,j'Sÿÿ ÿéõÇ&0Ÿ'SÿÿÿèðÏ&,kïÿÿ ÿèõÐ&'Tœÿÿ ÿéòÏ&¿¾ÿÿ ÿéôÏ&'U4ÿÿÿíìÌ&âãÿÿ ÿéöÏ&™ÿÿÿéèÃ&Ò*.ÿÿÿéêÀ&`*$ÿÿÿéÞÏ&Ç*#ÿÿÿèöÊ&i*%ÿÿÿêóÄ&Ñ*#ÿÿÿíóÊ&ë*2ÿÿÿòîÇ&â2ÿÿÿéòÏ&j*#ÿÿÿçõÁ&Ó*#ÿÿÿè÷Ï&k*.ÿÿÿéíÏ&ì*#ÿÿÿééÃ&Ò*#ÿÿÿêõÂ&¹*2ÿÿÿéðÀ&l*#ÿÿÿîõÐ&m*%ÿÿÿéïÑ&NÿÿÿéîÊ&n*#ÿÿÿéôÆ&o*%ÿÿÿêòÏ&(*#ÿÿÿôöÏ&p*%ÿÿÿìóÌ&q*%ÿÿÿéóÃ&ï*%ÿÿÿêñÍ&s*%ÿÿÿèïÆ&;*#ÿÿÿéòÏ&¬*%ÿÿÿèóÏ&%Á*%ÿÿÿîóÄ&)*2ÿÿ ÿéöÐ&ÿÿ ÿéõÃ&«ÿÿÿèöÑ&Ó*%ÿÿÿéöÏ&*%ÿÿÿìõÍ&,*'ÿÿÿîõÎ&/*2ÿÿÿèöÏ&¡*%ÿÿÿéóÃ& *%ÿÿ ÿéóÇ&0‘*öÿÿÿìõÄ&õ*'ÿÿÿìõÏ&!q*'ÿÿÿéôÏ&Û*'ÿÿÿêñÏ&ú&Q*'ÿÿÿéöÐ&*ô*õÿÿÿéñÍ&ñ*2ÿÿÿéòÐ&±*2ÿÿÿèôÏ&Ê*'ÿÿ ÿèæÐ&0’2ÿÿÿèôÏ&'W*%ÿÿÿèõÏ&*#ÿÿÿèèÐ&/&'X*%ÿÿÿèôÏ&(/*%ÿÿÿéîÐ&'Y*'ÿÿÿéöÏ&B*'ÿÿÿéóÆ&…*/ÿÿÿéõÑ&²*%ÿÿÿìðÏ&{*'ÿÿÿìóÊ&'Z&'[**ÿÿÿéóÏ&%¢*%ÿÿ ÿéôÇ&*÷*õÿÿÿêñÅ&0•*2ÿÿÿêìÐ&*2*ÙÿÿÿèòÆ&0$*/ÿÿÿéõÍ&*2ÿÿ ÿéøÏ&'E'\ÿÿÿéöÏ&/*2ÿÿÿèöÄ&Ó*%ÿÿÿéñÌ&¦*2ÿÿÿèíÏ&£*%ÿÿÿéòÁ&*&. ÿÿÿìõÏ&*%2ÿÿÿéõÏ&¢*2ÿÿÿòñÇ&%þ*'ÿÿÿèñÅ&À*&ÿÿÿèðÂ&& *%ÿÿÿëóÏ&'F**ÿÿÿêìÏ&)þ*#ÿÿÿéóÏ&Ô*%ÿÿÿèõÏ&–*1ÿÿÿéóÅ&'ì*%ÿÿÿêðÇ&Ã*&ÿÿÿèôÂ&Ø*'ÿÿÿçõÏ&Y*'ÿÿÿèòÏ&&*2ÿÿÿêïÏ&(0&***ŠÿÿÿèóÏ&î*#ÿÿÿéõÃ&3*%ÿÿÿéõÏ&*#ÿÿÿêëÇ&*'0ñÿÿÿéòÆ&*3*'ÿÿÿéôÌ&(1ÿÿÿè÷Ï&ñ*%ÿÿÿíòÌ&-**ÿÿÿé÷Ï&S*/ÿÿÿêëÐ&W*2ÿÿÿéóÁ&¶*%ÿÿÿéöÏ&**&2ÿÿÿèìÇ&&*%ÿÿÿõòÆ&*20iÿÿÿéóÅ&&*%ÿÿÿéïÐ&R*#ÿÿÿêóÌ&&*'ÿÿÿõöÄ&Á*%ÿÿÿéóÏ&"W*#ÿÿÿòõÆ&*#ÿÿÿéóÎ&*%ÿÿÿòòÇ&&*'ÿÿÿééÏ&µ*%ÿÿÿíôÐ&?**ÿÿÿèöÎ&***™ÿÿÿéòÏ&**0°ÿÿÿêõÐ&'G*%ÿÿÿéóÐ&U*%ÿÿ ÿéêÐ&÷*uÿÿÿéóÐ&*%0÷ÿÿÿéõÐ&2ÿÿÿéõÐ&* *'ÿÿÿéòÎ&²*'ÿÿÿêóÏ&g&f*'ÿÿ ÿéóÆ&¸·ÿÿÿéñÍ&¡*'ÿÿÿèðÎ&(2*%ÿÿÿêêÏ&+Õ&(3*+ÿÿÿèòÏ&'H*'ÿÿÿíôÏ&'I*/ÿÿÿéõÏ&!*%ÿÿÿêòÏ&S*#ÿÿÿîóÏ&Â*%ÿÿÿöñÎ&**2ÿÿÿéóÇ&Á*#ÿÿÿé÷Ï&+*'ÿÿÿëòÐ&Ù*'ÿÿÿðóÄ&Õ*%ÿÿÿè÷Ï&)*2ÿÿÿèëÏ&­&à**ÿÿ ÿéóÐ&-&ÇÿÿÿéðÏ&¶*%ÿÿÿéôÏ&Z*/ÿÿÿèóÈ&'K&³ÿÿÿèõÍ&©*%ÿÿÿéòÏ&*%0ÕÿÿÿéöÏ&˜*/ÿÿÿéõÐ&\*2ÿÿÿêíÑ&ž*'ÿÿÿééÐ&'J*%ÿÿÿèöÎ&Ö*2ÿÿÿéóÐ&•*'ÿÿÿéóÏ&?*'ÿÿÿéóÏ&x*%ÿÿÿé÷Ì&B*'ÿÿÿòõÅ&Ô*%ÿÿÿéôÏ&N**ÿÿÿéëÉ& ³*'ÿÿÿëòÎ&±*'ÿÿÿéóÏ&K&q*+ÿÿÿéóÇ&Ö*'ÿÿÿéîÈ&.*'ÿÿÿèïÍ&0*'ÿÿÿéîÏ&v*'ÿÿÿèíÏ&*%ÿÿÿïóÏ&*%ÿÿÿéôÑ& ¸*%ÿÿÿéñÐ&ô*/ÿÿÿèíÒ&¾*%ÿÿÿéóÏ&*2-èÿÿÿêöÉ&$*'ÿÿÿïóÈ&*'ÿÿÿññÄ&ß*'ÿÿÿëóÉ&**&ú2 ÿÿÿëôÏ&*'ÿÿÿéòÏ&'N*'ÿÿÿêíÏ&*%.âÿÿÿêóÓ&¹*'ÿÿÿéõÐ&V**ÿÿÿéóÎ&Ø&Ù**ÿÿÿèóÏ&X*'ÿÿÿéõÇ&'O*'ÿÿÿèñÑ&ë*%ÿÿÿçôÏ&Ö*'ÿÿÿèòÐ&Ö*'ÿÿÿëïÏ&º&•**ÿÿÿêóÍ&E*%ÿÿÿæóÆ&Í*%ÿÿÿèóÏ&'P*/ÿÿÿé÷Ï&'Q*'ÿÿÿéòÏ&'R*'ÿÿÿéêÐ&c*2ÿÿÿñóÄ&ç*'ÿÿÿèñÅ&&i&&e*+ÿÿÿéöÆ&&,*/ÿÿÿêóÆ&¸'_ÿÿÿéôÏ&'^*'ÿÿÿêôÏ& *'ÿÿÿéñÏ&0fÿÿÿéóÏ&**0qÿÿÿèôÍ&(8*2ÿÿÿèñÍ&*'ÿÿÿéðÒ&0í*'ÿÿÿéôÈ&/*'ÿÿÿéóÏ&ò*%ÿÿÿæ÷Æ&'b*'ÿÿÿèîÐ&Î*!ÿÿÿêòÏ&*20ŽÿÿÿæîÐ&=*/ÿÿÿèôÆ&é*%ÿÿÿé÷Ñ&*2,ÍÿÿÿçõÑ&*% ÿÿ ÿèóÇ&s2!ÿÿÿëòÆ&'c*%ÿÿÿéôÏ&*'ÿÿÿçõÏ& Õ*'ÿÿÿéõÐ&ã**ÿÿÿéõÊ&**ÿÿÿéìÐ&–&*'ÿÿÿéòÐ&**'ÿÿ ÿéóÐ&Ç2"ÿÿÿðóÏ&*'.—ÿÿÿéóÈ&'d*'ÿÿÿéóÅ&Š*'ÿÿÿñóÇ&*"**ÿÿÿéóÏ&Í*%ÿÿÿéöÇ&”*%ÿÿÿèóÐ&*/2#ÿÿÿìöÎ&*ù2$ÿÿÿèîÐ&*2,lÿÿÿéðÐ&Q*2ÿÿÿëñÏ&­&¬*2ÿÿÿéóÐ&*'*(ÿÿÿêöÏ&`&_*'ÿÿÿéîÁ&**/¸ÿÿÿèøÎ&'±**ÿÿÿèòÏ&²*/ÿÿÿèöÎ&*'»ÿÿ ÿéîÑ&„…ÿÿÿéôÐ&Ÿ**ÿÿÿèïÏ&*1& 2%ÿÿÿéíÃ&°*/ÿÿÿçöÏ& _*2ÿÿÿçõÏ&Þ*&ÿÿÿçòÏ&Ù*'ÿÿÿìöÏ&*''eÿÿÿéóÏ&%Ó*%ÿÿÿéòÐ&*''fÿÿÿìõÑ&Ü&Ý*'ÿÿÿè÷Ð&**2&ÿÿÿéóÏ&&*+ÿÿÿêòÏ&*',mÿÿÿïòÏ&£*'ÿÿÿíòÏ&*/&è2'ÿÿÿèðÇ&, *1ÿÿÿéëÇ&'Û*2ÿÿÿéóÐ&*',nÿÿÿêøÅ&ü**ÿÿÿéòÏ& V*'ÿÿÿéòÏ&¿*'ÿÿÿéöÏ&*1.éÿÿÿéóÀ&*+&~*ÿÿÿéñÎ&*2(AÿÿÿñòÏ&+*'ÿÿÿêóÑ&"f*'ÿÿ ÿéóÏ&­ýÿÿÿéìÊ&f2(ÿÿÿéóÏ&1*'ÿÿÿèóÏ&*2+­ÿÿÿéîÄ&*/*0ÿÿÿéõÏ&2)ÿÿÿèìÏ&'g*'ÿÿÿèôÏ&Û*%ÿÿÿéëÎ&'h*'ÿÿÿèõÆ& Õ**ÿÿÿéìÐ&*1&¿2*ÿÿÿóòÅ&#j*'ÿÿ ÿèõÏ&-2+ÿÿÿéóÐ& I*'ÿÿÿèñÆ&'i*+ÿÿÿéïÏ&*+&[2,ÿÿÿèôÐ&]*%ÿÿÿèõÑ&&*+ÿÿÿêóÐ&*+&b2-ÿÿÿæñÏ&*'*ûÿÿÿëîÐ&**&,o2.ÿÿ ÿéòÏ&, 2/ÿÿÿèðÏ&*+&*ü 8ÿÿÿéóÐ&*'20ÿÿÿéôÏ&€&®*1ÿÿÿéôÑ&9*'ÿÿÿèñÑ&**0—ÿÿÿçòÐ&*'21ÿÿÿéìÑ&!À…ÿÿÿéîÑ&ã**ÿÿÿèóÏ&!ê*'ÿÿÿèöÏ&á&%Ã*+ÿÿÿïóÎ&Ù*'ÿÿÿêôÐ&"¤*'ÿÿÿëîÉ& r*'ÿÿÿèóÆ&#>*'ÿÿÿéóÏ&*'"µÿÿÿéëÏ&!}&à*1ÿÿÿéñÏ&#Ñ*'ÿÿÿé÷Ï&q&r*+ÿÿÿéöÐ&ß**ÿÿÿèóÎ&?**ÿÿ ÿçæÉ&924ÿÿÿéõÏ&.&/**ÿÿÿéîÇ&!#*'ÿÿÿéñÏ&'j*1ÿÿÿéóÑ&X*2ÿÿÿéôÏ&¼*'ÿÿÿçòÇ&'›*'ÿÿÿéõÈ&*%ÿÿÿéïÅ&"G**ÿÿÿèóÏ&â**ÿÿÿéõÏ&"ë*/ÿÿÿéõÏ&£**ÿÿÿéîÈ&&ˆ**ÿÿÿéïÏ&**&[25ÿÿÿèìÉ&à*'ÿÿÿéòÐ&"ö*'ÿÿÿèóÎ&!ö*'ÿÿÿêòÐ&L26ÿÿÿìõÑ&*2"±ÿÿÿèôÏ&$€*/ÿÿÿîòÏ&"*'ÿÿÿéóÏ&!»*'ÿÿÿéõÑ&ä**ÿÿÿéôÏ&!"*'ÿÿÿèòÏ&!æ*/ÿÿÿèõÓ&'œ**ÿÿÿëôÇ&! */ÿÿÿëïÐ&”&•*+ÿÿÿòôÏ&"g**ÿÿÿéòÏ&*'0¢ÿÿÿéëÑ&*ý.ÏÿÿÿéóÐ&!ñ*'ÿÿÿíõÐ&**/ÿÿÿéöÏ&*'ÿÿÿèôÏ&#´*'ÿÿÿéëÑ&.Ï29ÿÿ ÿèóÉ&è2:ÿÿÿèõÐ&T2;ÿÿÿéóÏ&'Þ*2ÿÿÿéòÐ&% *'ÿÿÿêóÉ&*/-éÿÿÿéóÏ&$l*'ÿÿÿèõÐ& */ÿÿÿìôÏ&*'/ÿÿÿêôÏ&*''ßÿÿÿéôÈ&*'1ÿÿÿéïÑ&**-êÿÿÿïôÏ&*'*)ÿÿÿçíË&$ì*+ÿÿÿéñÇ&*2ÿÿÿéóÏ&R*'ÿÿÿêðÑ&*2‡ÿÿÿîõÏ&)i*%ÿÿÿéõÏ&*'#CÿÿÿéóË&'n*'ÿÿÿçóÐ&æ*'ÿÿÿéôÆ&'o*/ÿÿÿèöÏ&% *'ÿÿÿéîÑ&$–*'ÿÿÿçñÏ&#*2ÿÿÿèõÐ&*''pÿÿÿéóÏ&$D*'ÿÿÿéðÆ&*'$ÿÿÿíóÐ&å*/ÿÿÿéõÏ&***oÿÿÿðôÅ&É*2ÿÿÿéïÉ&.þ2<ÿÿÿèóÏ&**2=ÿÿÿçöÐ&*/.ÿÿÿÿèñÏ&*'2>ÿÿ ÿéóÐ&/'qÿÿÿéõÐ&€&*+ÿÿÿêðÏ&$|*'ÿÿÿèôÏ&**$eÿÿÿéòÈ&**/;ÿÿÿèòÐ&**2?ÿÿÿìóÈ&$A*'ÿÿÿèöÐ&**2@ÿÿÿéóÏ&**/ÿÿÿíõÉ&*+&Þ2AÿÿÿéôÉ&*'/9ÿÿÿèõÐ&*+&2BÿÿÿíõÏ&*+&Þ2CÿÿÿéòÏ&**-<ÿÿÿèôÏ&%**'ÿÿÿéõÏ&*+&!ä2DÿÿÿéõÏ&ç&è&é*+ÿÿÿçôÐ&'r**ÿÿÿéîÑ&¹*2ÿÿÿéõÒ&~*1ÿÿÿéëÏ&'s&'t2EÿÿÿéôÑ&*'2Fÿÿÿê÷Ð&°**ÿÿÿéóÏ&¡**ÿÿ ÿçóÏ&'u2GÿÿÿéóÉ&'v**ÿÿÿçóÏ&**+ÿÿÿèôÌ&**2Hÿÿ ÿéöÏ& ‹ÿÿÿé÷Í&'w**ÿÿÿêòÏ&*'/SÿÿÿéîÇ&q*+ÿÿÿòóÇ&&š*+ÿÿÿéðÆ&*'2IÿÿÿèõÐ&'x**ÿÿÿéîÐ&d&efÿÿÿéóÏ&'y*/ÿÿÿéøÑ&'z*1ÿÿÿìôÏ&'{*'ÿÿÿèôÎ&>&’*+ÿÿÿéïÏ& ó&!;*+ÿÿÿèñÏ&$&&e*+ÿÿÿéëÏ&**-ëÿÿÿæïÇ&*+,(ÿÿÿéõÑ&**#}ÿÿÿéóÏ&†**ÿÿÿçóÈ&**-ìÿÿÿéõÈ&**,×ÿÿÿéøÏ&*+&.ý2JÿÿÿèïÎ&&¨*+ÿÿÿéòÏ&%à*+ÿÿÿéõÑ&¼**ÿÿÿèñÈ&*/2KÿÿÿèíÐ&ê&Æ*+ÿÿÿçôÏ&'|*'ÿÿÿéöÏ&*+2LÿÿÿèôÎ&<**ÿÿÿèôÐ&*+&Þ2MÿÿÿéöÐ&ë*+ÿÿÿéôÏ&%é*'ÿÿÿèõÏ&'}**ÿÿÿéòÏ&'~*'ÿÿÿéòÈ&*%ÿÿÿéóÉ&'*'ÿÿÿèñÆ&'€*'ÿÿÿèôË&'**ÿÿÿíóÉ&*'2NÿÿÿéóÒ&%æ*'ÿÿÿéòÏ&#ì*/ÿÿÿèôÈ&**0Øÿÿÿè÷Ì&*+&62OÿÿÿèõÐ&*+&2PÿÿÿçìÇ&%ê*'ÿÿÿêíÑ&'‚*'ÿÿÿêõÏ&%è**ÿÿÿîïÏ&2**ÿÿ ÿêóÊ&'ƒ&'„2QÿÿÿéóÏ&ÿ*/ÿÿÿîöË&%**ÿÿÿêóÐ&&¤*'ÿÿÿèõÊ&Ô*/ÿÿÿéõÏ&*'._ÿÿÿéóÌ&%í**ÿÿÿêóÑ&**.ØÿÿÿèôÐ&**,)ÿÿÿé÷Ñ&&Ã**ÿÿÿêõÏ&*+.üÿÿÿèöÑ&'…**ÿÿÿéñÈ&'*'ÿÿÿéòÏ&**.åÿÿÿçôÏ&'†*/ÿÿÿêöÏ&'‡*1ÿÿÿé÷Ê&ö**ÿÿÿìöÑ&)ô**ÿÿÿïöÏ&**2TÿÿÿèõÐ&*+&2UÿÿÿéõË&¤**ÿÿÿèôÏ&'Š*+ÿÿÿéóÐ&*+/ÿÿÿèôÏ&*/-ÿÿÿéõÔ&'‹**ÿÿÿéðÏ&*12VÿÿÿèöÐ&'Œ*'ÿÿÿéðÏ&**,†ÿÿÿéõÑ&!ä&!Ã*+ÿÿÿéöÐ&*-&2WÿÿÿéðÏ&'**ÿÿÿèôÐ&*+&Þ2XÿÿÿïõÑ&*+-îÿÿÿéòÏ&*1.ÕÿÿÿéòÐ&**&!Ä2YÿÿÿèóÊ&**.æÿÿÿéôÒ&Q**ÿÿÿéñÊ&'Ž**ÿÿÿíôÐ&P**ÿÿÿíõÈ&*+&Þ2ZÿÿÿéôÏ&'**ÿÿÿéòÊ&'*+ÿÿÿèôÏ&í*+ÿÿÿêõÎ&*-&/2[ÿÿÿéôÐ&*'7ÿÿÿçøÒ&Õ**ÿÿÿîôÏ&'‘**ÿÿÿéïÑ&*++ÿÿÿéöÏ&**/ ÿÿÿêóÐ&***,ÿÿÿéõÏ&**.`ÿÿÿèòÏ&**2\ÿÿÿéöÒ&**)øÿÿÿé÷È&÷*+ÿÿÿçõÌ&*+0”ÿÿÿéòÏ&'’**ÿÿÿééÊ&È&ÄÅÿÿÿîñË&%Q**ÿÿÿèôÒ&%*/ÿÿÿèïÏ&*+& 2]ÿÿ ÿéôË&’&“”ÿÿÿçôÐ&*+*þÿÿÿè÷È&R*1ÿÿÿéøÑ&û*/ÿÿÿéöÐ&H*+ÿÿÿéëÊ&*+&&®2_ÿÿÿèøÏ&*+&,c2`ÿÿÿèöÏ&*+&2aÿÿ ÿéóÏ&,~,€ÿÿÿèîÐ&»-ïÿÿÿèñÈ&**,ÀÿÿÿéòÑ&*ÿ+ÿÿÿéîÑ&¿2bÿÿ ÿéõÌ&,2cÿÿÿèòÑ&7*%ÿÿÿèòË&*+,}ÿÿÿéñÑ&%÷**ÿÿÿéòÎ&*+-ðÿÿÿèôÏ&*+2dÿÿÿéóÏ&O*+ÿÿÿéóÏ&*-&šYÿÿÿéóÌ&'“*+ÿÿÿëñË&ÿ& ¤ £ÿÿÿéóÏ&†&)“*-ÿÿ ÿéöÈ&%-$ÉÿÿÿêòÏ&**2eÿÿÿçöÏ&*+2fÿÿÿéóÉ&*+.çÿÿÿçìÑ&ï&îíÿÿÿçõÐ&**‡ÿÿÿéöÏ&*+2gÿÿ ÿéôÏ&,,€ÿÿÿêïÑ&*-&è2hÿÿÿéðÌ&*10åÿÿÿéòÐ&*+2iÿÿÿèïÏ&1*+ÿÿÿééÇ&2jÿÿÿééÇ&2kÿÿÿééÇ&2lÿÿÿééÇ&ÿÿÿééÇ&2mÿÿÿééÇ&zÿÿÿééÇ&2nÿÿÿééÇ&2oÿÿÿéèÇ&2pÿÿÿééÇ&2qÿÿÿééÇ&lÿÿÿééÇ&mÿÿÿééÇ&2rÿÿÿééÇ&nÿÿÿééÇ&oÿÿÿééÇ&2tÿÿÿééÇ&wÿÿÿééÇ&2uÿÿÿééÇ&xÿÿÿééÇ&2vÿÿÿééÇ&yÿÿÿééÇ&ÿÿÿééÇ&zÿÿÿéèÇ&2wÿÿÿéèÇ&&|{ÿÿÿéèÇ&}ÿÿÿéèÇ&2xÿÿÿéèÇ&2yÿÿÿéèÇ&2zÿÿÿéèÇ&ÿÿÿéèÇ&2{ÿÿÿéèÇ&2|ÿÿÿéèÇ&2}ÿÿÿéèÇ&›ÿÿÿéèÇ&‘ÿÿÿéèÇ&2~ÿÿÿéèÇ&2ÿÿÿéèÇ&2€ÿÿÿéèÇ&2ÿÿÿéèÇ&2‚ÿÿÿéèÇ&2ƒÿÿÿéèÇ&2„ÿÿÿéèÇ&2…ÿÿÿéèÇ&2†ÿÿÿéèÇ&2‡ÿÿÿéèÇ&2ˆÿÿÿíòÏ&2½ÿÿÿêóÌ&½ÑÿÿÿñòÄ&2‰ÿÿÿè÷Ï&ðkÿÿ ÿìôÅ&'ž'ÿÿÿéðÌ&ðlÿÿ ÿîõÐ&µmÿÿÿêðÌ&ðÿÿÿî÷Ì&ðÿÿÿìõÌ&ðÿÿ ÿîôÏ&µ·ÿÿÿèíÐ&Åðÿÿ ÿéìÏ&( µÿÿÿéóÌ&ðïÿÿ ÿéêÏ&µ¾ÿÿÿêóÐ&ð¿ÿÿ ÿéëË&µ%3ÿÿ ÿéñÍ&µñÿÿ ÿéóË&µ…ÿÿÿðóÌ&ðßÿÿ ÿèôË&µÿÿ ÿêóÎ&µÀÿÿ ÿèöÑ&µÓÿÿ ÿêìÐ&µ*Ùÿÿ ÿìøÏ&µ#ÿÿÿèòÏ&ð0«ÿÿ ÿéôÏ&Ûµÿÿ ÿðóÏ&›Ùÿÿ ÿèðË&lµÿÿÿéõÑ&ð²ÿÿ ÿéóË&µ ÿÿ ÿéòÏ&¶bÿÿ ÿéöÏ&Bµÿÿ ÿðòÆ&›2ŠÿÿÿñòÏ&2‹ÿÿÿçõÌ&ð!vÿÿ ÿèñË&µÀÿÿ ÿèðË&µ& ÿÿÿêìÏ&ð)þÿÿ ÿéõÐ&µ' ÿÿ ÿðóÏ&›&œšÿÿ ÿèôÏ&µÿÿ ÿèðÐ&'¡µÿÿ ÿéìÏ&µ!wÿÿÿòõÌ&ðÿÿ ÿõöË&µÁÿÿ ÿîóÏ&µÂÿÿ ÿéóÎ&µÿÿ ÿéóË&¶dÿÿ ÿéõÏ&µÿÿ ÿêðË&õÿÿ ÿéòÐ&kµÿÿ ÿõòË&µ,ÿÿ ÿéíË&%ʵÿÿ ÿêöÏ&0®µÿÿ ÿéòÏ&0°µÿÿ ÿéïÐ&& ò2Œÿÿ ÿîòÌ&µ'¢ÿÿ ÿèôË&µØÿÿ ÿéóË&µ¶ÿÿ ÿèôÏ&¶”ÿÿ ÿçóÎ&'£µÿÿ ÿçõÏ&¶‡ÿÿ ÿéòÎ&²µÿÿ ÿêóÌ&µ&ÿÿ ÿóóÐ&¶gÿÿ ÿðóÏ&+å›ÿÿ ÿíóÏ&µ'¦ÿÿ ÿêòÏ&µ(Êÿÿ ÿñòÑ&&I'¥ÿÿ ÿíôÐ&ø¶ÿÿ ÿðòË&›&žŸÿÿ ÿéîË&.µÿÿ ÿéôÏ& ¶ÿÿ ÿðóÎ&›2Žÿÿ ÿéóÐ&¶•ÿÿÿðñÉ&++ÿÿ ÿðòÏ&›ÿÿ ÿé÷Ì&¶Bÿÿ ÿéòÑ&¶&SQÿÿ ÿé÷Ï&+µÿÿ ÿëõÏ&+2ÿÿ ÿéõË&µ'Oÿÿ ÿêõÑ&µŽÿÿ ÿëòÐ&µÙÿÿ ÿéðÏ&¶µÿÿ ÿêöË&µ$ÿÿ ÿðóÑ&H&I›ÿÿ ÿéóË&µÿÿ ÿòõË&µÿÿÿ ÿðóË&µÕÿÿ ÿéôÑ&µ ¸ÿÿ ÿðóË&B›ÿÿ ÿèíÒ&µ¾ÿÿÿñòÆ&Þÿÿ ÿèõÏ&µáÿÿ ÿðõÏ&›2ÿÿ ÿèïÍ&µ0ÿÿ ÿññË&¶ßÿÿ ÿéõÐ&µóÿÿ ÿéôÏ&µ°ÿÿ ÿíôÎ&µ,”ÿÿ ÿéóÎ&¶&ØÙÿÿ ÿéóÏ&µ2‘ÿÿ ÿèóÏ&µ0½ÿÿ ÿéôÐ&µ'§ÿÿ ÿçõÑ&µŽÿÿ ÿèñÐ&&f&&e¶ÿÿ ÿêòÑ&'¨¶ÿÿ ÿîôÐ&è2’ÿÿ ÿðòÏ&˜&›2“ÿÿ ÿêðÏ&µ2”ÿÿ ÿéõÏ&/=¶ÿÿ ÿæ÷Ë&µ'bÿÿ ÿéôÏ&µÿÿ ÿæîÐ&¶=ÿÿ ÿèíË&µ'©ÿÿ ÿéôÑ&'ªµÿÿ ÿñóË&µçÿÿ ÿêôÏ&'«µÿÿ ÿçøÏ&¶:ÿÿ ÿéõË&ÿÿ ÿéñË&µ'¬ÿÿ ÿéõÌ&µ'aÿÿ ÿêòÓ&µiÿÿ ÿéðÒ&µ0íÿÿ ÿñòË&µ0@ÿÿ ÿéöÏ&µ'­ÿÿ ÿéóÏ&&2–ÿÿ ÿéôË&[µÿÿ ÿèìË&µ'®ÿÿ ÿðöÏ&›2—ÿÿ ÿìöÑ&¶ ÿÿ ÿèöÏ&¶<ÿÿ ÿèòÐ&µzÿÿ ÿóòË&µ#jÿÿ ÿìõÐ& Êÿÿ ÿéóÏ&µ1ÿÿ ÿéôÏ&'¯µÿÿ ÿéóÏ&µ'°ÿÿ ÿçðË&µÿÿ ÿéóÑ&µ!ÿÿ ÿèõÒ&¶ ÿÿ ÿéöÏ&Iÿÿ ÿèôÏ&µÛÿÿ ÿíòÏ&+¶ÿÿ ÿéñÎ&(Aµÿÿ ÿéöÏ&.Sÿÿ ÿèøÎ&'±¶ÿÿ ÿéëÎ&¶'hÿÿ ÿòòÎ&µrÿÿ ÿïòÏ&£¶ÿÿÿéøÏ&'²ÿÿÿ ÿéøÏ&ÿÀÿÿ ÿéìË&µÿÿ ÿéòÐ&µ%Ðÿÿ ÿêóÑ&"fµÿÿ ÿéôÏ&ÿµÿÿ ÿéóË&µŸÿÿ ÿéïË&¶(@ÿÿ ÿêõË&µ/ÿÿ ÿçöÏ& _µÿÿ ÿðòÇ&›0Ïÿÿ ÿéôÐ&¶Ÿÿÿ ÿéíË&'³µÿÿ ÿéòÐ&µ'fÿÿ ÿðòÇ&#k›ÿÿ ÿèíË&&ÇÆÿÿ ÿéîË&¶èÿÿ ÿìôÎ&,¶ÿÿ ÿèôÏ&'صÿÿ ÿìôË&¶'´ÿÿÿíòÐ&à 4ÿÿ ÿéòË&¶.Lÿÿ ÿîôÑ&y&èzÿÿ ÿðôË&¶ÿÿ ÿéíË&5µÿÿ ÿéõÏ&:¶ÿÿ ÿéîË&µ!#ÿÿ ÿèõÎ&¶@ÿÿ ÿé÷Ï&¶&rqÿÿ ÿîôÏ&$a&'µèÿÿ ÿéîË&¶ sÿÿ ÿéñË&µ"ÿÿ ÿñôÐ&&Ú#fÿÿ ÿè÷Ë&¶"Cÿÿ ÿéîË&&ˆ¶ÿÿ ÿéôÏ&&Øÿÿ ÿïóÎ&µÙÿÿ ÿéöÏ&¶ÿÿ ÿìõÑ&'¶ÿÿ ÿêôË&µ3ÿÿ ÿïñË&¶#ÉÿÿÿéôÏ&Á4ÿÿ ÿðòÉ&›2šÿÿ ÿéëË&µ þÿÿ ÿçõË&Yµÿÿ ÿéóÏ&¶Íÿÿ ÿéñÏ&µ)‚ÿÿ ÿéóÑ&µXÿÿ ÿêõË&¶:ÿÿ ÿîôÏ&¶!^ÿÿ ÿéõË&¶ pÿÿ ÿîôÐ&…& èÿÿ ÿòòË&J&¶2›ÿÿ ÿéöÐ&ßÿÿ ÿéòË&¶wÿÿ ÿîôÈ&„&è2œÿÿ ÿêñË&J&¶2ÿÿ ÿîôÊ&è2žÿÿ ÿéöÒ&/E¶ÿÿ ÿéñÑ&µ#ôÿÿÿíòÏ&Þ&ßàÿÿ ÿêîË&µ#{ÿÿ ÿéõÏ&32Ÿÿÿ ÿéöÏ&Nµÿÿ ÿîòÏ&Lµÿÿ ÿðòÑ&›&¿Àÿÿ ÿéóÐ&${&Mÿÿ ÿèóË& áµÿÿ ÿéõÏ&µ#Cÿÿ ÿéõÏ&¶*oÿÿ ÿîôÐ&ð&è2 ÿÿ ÿéôÑ&¶Ðÿÿ ÿéòÐ&¶% ÿÿ ÿéôË&¶2¡ÿÿ ÿéõË&¶$ÿÿ ÿéîÑ&$–¶ÿÿÿïñÑ&G2¢ÿÿ ÿéóÑ&µ'¶ÿÿ ÿçñÏ&µ#ÿÿ ÿîôÏ&è&…2£ÿÿ ÿèõË&¢µÿÿ ÿéðË&µ$ÿÿ ÿéòÏ&¶2¤ÿÿ ÿðôÐ&¶2¥ÿÿ ÿçóÐ&µæÿÿ ÿéôË&ȶÿÿ ÿðôË&¶Îÿÿ ÿéñÏ&¶%ÿÿ ÿîõÑ&…&èÿÿ ÿðòÐ&›&  ÿÿ ÿéóÑ&bÿÿ ÿéíÏ&-:ÿÿ ÿçðÒ&¼2¦ÿÿ ÿêôÑ&'·ÿÿ ÿîôÏ&è2§ÿÿ ÿéòÐ&Ç2¨ÿÿ ÿéöÏ&µNÿÿ ÿéóÏ&¶+ÿÿ ÿèôÐ&¶'¸ÿÿ ÿîôÏ&'¹èÿÿ ÿçôÐ&µ1ÿÿ ÿèôË&.™ÿÿ ÿéôË&µ&žÿÿ ÿéóË&¶'vÿÿ ÿèöÑ&¶,yÿÿ ÿîôÉ&é&êèÿÿ ÿéõÏ&,„¶ÿÿ ÿéôÑ&n¶ÿÿ ÿéïÏ& ó&#Nÿÿ ÿèñÓ&1ÿÿ ÿîöÐ&è0 ÿÿ ÿçõÑ&'ºÿÿ ÿèñÐ&&e&&gÿÿ ÿðòÒ&›sÿÿ ÿïòÏ&$þµÿÿ ÿéîÑ&'»ÿÿ ÿéóÏ&“¶ÿÿ ÿïôÏ&k2©ÿÿ ÿéòÏ&µ-<ÿÿ ÿéíÏ&µ,zÿÿ ÿéõÐ&ê&,{ÿÿ ÿéñÐ&'¼ÿÿ ÿé÷Ë&&ì2ªÿÿ ÿîôÏ&!¨&!§èÿÿ ÿèôÎ&<ÿÿ ÿêíÑ&¶'‚ÿÿ ÿéóÏ&¶'yÿÿ ÿéòË&µÿÿ ÿéóÐ&'½¶ÿÿ ÿêóÐ&&¤¶ÿÿ ÿíóÐ&¶'¾ÿÿ ÿéõÏ&¶'¿ÿÿ ÿîôË&,|èÿÿ ÿéôÐ&'À&,"ÿÿ ÿéóÒ&µ%æÿÿ ÿîôÒ&"ì&!¨èÿÿ ÿìóÑ&"Š&$2«ÿÿ ÿìóÑ&"Š&$2¬ÿÿ ÿîöË&¶%ÿÿ ÿéöÐ&ëÿÿ ÿèöÏ&µ'Áÿÿ ÿéõÏ&¶2­ÿÿ ÿéìË&&î2®ÿÿ ÿèöÑ&¶'Âÿÿ ÿéôÏ&'öÿÿ ÿîõÐ&u&è2¯ÿÿ ÿèõÐ&&2°ÿÿ ÿî÷Ð&C&è2±ÿÿ ÿéôË&¶'Äÿÿ ÿðòÑ&›.ÿÿ ÿîôÍ&è2²ÿÿ ÿîôÐ&œ&è2³ÿÿÿñòÑ&ÿÿ ÿïóÒ&´¶ÿÿ ÿé÷Ð&¶'Åÿÿ ÿèôÏ&¶-ÿÿ ÿêòÏ&.š¶ÿÿ ÿêøÐ&+æÿÿ ÿèõÐ&µ¢ÿÿ ÿíôÐ&P¶ÿÿ ÿîôÏ&è2´ÿÿ ÿíóÏ&.uÿÿ ÿìõÊ&$2µÿÿ ÿéòÏ&0Ãÿÿ ÿéïÑ&¶+ÿÿ ÿéðË&¶%óÿÿ ÿîôÏ&'‘ÿÿ ÿîôË&%jèÿÿ ÿèôÒ&%¶ÿÿ ÿéøÑ&û¶ÿÿ ÿèïË&&ô2¶ÿÿ ÿéïÍ&2·ÿÿ ÿëôÏ&Ü&2¸ÿÿ ÿèòÐ&¶.aÿÿ ÿìöÐ&$.›ÿÿ ÿè÷Ë&Rÿÿ ÿçõÏ&#&!2¹ÿÿ ÿéñÑ&¶%÷ÿÿ ÿêóË&2ºÿÿ ÿéóË&.Gÿÿ ÿîôÉ&&¹&&¸èÿÿ ÿéôÍ&2»ÿÿ ÿèôÏ&  ÿÿ ÿéíÏ&+Kÿÿ ÿçðÐ&+2¾ÿÿÿëëÏ&'Æ2¿ÿÿÿêòÏ&'Æ2ÀÿÿÿððÐ&+2ÁÿÿÿïïÏ&+ 2Âÿÿ ÿéñË&¶$ZÿÿÿïîÏ&V2Ãÿÿ ÿéóÐ&+ 2Äÿÿ ÿëóÏ& û úÿÿ ÿéóÒ&¶%æÿÿÿèïÑ&MNÿÿÿêòÏ&øðÿÿÿèñÑ&PQÿÿÿêëÏ&”úÿÿÿìóÎ&”'ÇÿÿÿéëÎ&”Ìÿÿ ÿèðÉ&+è2Ïÿÿ ÿéòÐ&™2Ðÿÿ ÿèïÏ&¸ÿÿ ÿèìÏ&ÿÿ ÿèïÏ&|ÿÿ ÿéôÐ&+ç2Õÿÿ ÿéôÐ&+ç2×ÿÿ ÿéôÐ&+ç2Ùÿÿ ÿçôÐ&+ç2Úÿÿ ÿéòÄ&}Kÿÿ ÿïõÐ&&2Ûÿÿ ÿëôÐ&¾2Ýÿÿ ÿèôÐ&¾2Þÿÿ ÿèõÏ&&º+éÿÿ ÿïôÐ&¾2áÿÿ ÿéóÏ&& ÿÿ ÿçôÐ&*‹¾ÿÿ ÿéóÏ&ñ ÿÿ ÿéòÏ&K2ãÿÿ ÿèôÐ&¾2äÿÿ ÿéòÏ& 2åÿÿ ÿçôÑ&+ê2æÿÿ ÿèõÐ&&2çÿÿ ÿéóÐ& J ÿÿ ÿèôÐ&¾2èÿÿ ÿéõÐ&&%ÿÿ ÿèõÇ&§2éÿÿ ÿçôÒ&+ê2êÿÿ ÿçôÒ&+ê2ëÿÿ ÿéòÏ&  ÿÿ ÿìôÐ&¾2ìÿÿ ÿêöÐ&‡2íÿÿ ÿèöÐ&‡2îÿÿ ÿéòÐ&j ÿÿ ÿéõÑ&+ë2ðÿÿ ÿéòÉ&Á& 2ñÿÿ ÿçôÒ&+ê-ñÿÿ ÿéòÏ&1'ÿÿ ÿèõÏ&%œÿÿ ÿèìÏ&(Þÿÿ ÿèóÏ& #ÿÿ ÿèóÏ&&%ÿÿ ÿèôÏ&·(ÿÿ ÿèôÏ&#üÿÿ ÿèóÏ&#ýÿÿ ÿèôÏ&‡oÿÿ ÿèêÏ&(¾ÿÿ ÿèöÏ&þ2òÿÿÿèôÏ&üÿÿ ÿèìÏ&#Yÿÿ ÿèéÎ&'È'Éÿÿ ÿè÷Ï&%ÿÿ ÿèòÏ&+Ãÿÿ ÿèóÏ&(Èÿÿ ÿèóÐ&  ÿÿ ÿèëÏ&-ò%ÿÿ ÿèïÏ&#;ÿÿ ÿèñÏ&‡®ÿÿ ÿèôÏ&(ÿÿ ÿèöÏ&(¡ÿÿ ÿèõÏ&‡Rÿÿ ÿèòÏ&‡&yÿÿ ÿèìÏ&‡(¾ÿÿ ÿèõÏ&#ÿÿ ÿèõÏ&`#ÿÿ ÿèöÑ&‡­ÿÿ ÿçõÏ&(!vÿÿ ÿèôÏ&((/ÿÿ ÿèòÍ&2óÿÿ ÿèôÏ&üKÿÿ ÿèóÏ&()ÿÿ ÿèîÏ&ð#ÿÿ ÿèóÏ&‡!rÿÿ ÿèôÏ&‡Úÿÿ ÿèõÏ&‡ÿÿ ÿèñÏ&(8ÿÿ ÿçóÎ&¤¥ÿÿ ÿèôÏ&%:ÿÿ ÿèöÏ&Þ(ÿÿ ÿèóÐ&#…ÿÿ ÿèöÏ&(Þÿÿ ÿèôÏ&‡…ÿÿ ÿèëÏ&('Ìÿÿ ÿèòÏ&‡Îÿÿ ÿèòÏ&('Êÿÿ ÿèëÏ&‡)ÿÿÿ ÿèêÏ&‡jÿÿ ÿèöÏ&(äÿÿ ÿèîÏ&*Xÿÿ ÿèóÑ&-ó Kÿÿ ÿèóÏ&‡'Ëÿÿ ÿèóÏ&(Ôÿÿ ÿèõÏ&('Íÿÿ ÿèöÏ&'Î(ÿÿ ÿè÷Ï&*ÿÿ ÿèïÐ&#Rÿÿ ÿèòÏ&'Ïÿÿ ÿèóÐ&‡'Ðÿÿ ÿèëÐ&*Wÿÿ ÿèôÏ&!m(ÿÿ ÿèóÏ&#ÿÿ ÿèôÏ&‡ÿÿ ÿèóÑ& K2ôÿÿ ÿçõÏ&¦‡ÿÿ ÿèïÏ&]‡ÿÿ ÿèïÏ&‡'Ñÿÿ ÿèòÐ&#0öÿÿ ÿèòÏ&&*ÿÿ ÿèöÏ&*¢ÿÿ ÿèöÏ&±#ÿÿ ÿèöÏ&‡ÿÿ ÿèõÏ&(ÿÿ ÿèóÏ&‡ÿÿ ÿèòÏ&*.Òÿÿ ÿèóÏ&ˆ‡ÿÿ ÿèóÐ&· Kÿÿ ÿèóÏ&(Áÿÿ ÿèõÏ&*Ïÿÿ ÿèóÏ&‡æÿÿ ÿèôÐ&*&@?ÿÿ ÿè÷Ï&(Eÿÿ ÿèìÏ&a‡ÿÿ ÿèóÐ&"é Kÿÿ ÿèöÏ&(—ÿÿ ÿèóÏ&‡0Öÿÿ ÿèíÒ&*¾ÿÿ ÿèóÏ&‡gÿÿ ÿèôÐ&(Pÿÿ ÿèóÏ&(ÿÿ ÿèòÏ&‡Xÿÿ ÿèôÐ&*š2õÿÿ ÿè÷Ï&)(ÿÿ ÿèóÓ&*¹ÿÿ ÿçóÐ&Õ*Œÿÿ ÿèëÏ&‡Æÿÿ ÿèóÏ&‡Çÿÿ ÿçóÑ&È#ÿÿ ÿèõÏ&(Ôÿÿ ÿèõÐ&ó*ÿÿ ÿèóÏ&(0½ÿÿ ÿèêÏ&(µÿÿ ÿèóÍ&¨&© Kÿÿ ÿçúÐ&_*Œÿÿ ÿèôÑ&* ¸ÿÿ ÿèòÏ&‡{ÿÿ ÿèóÏ&(æÿÿ ÿèòÐ&(Ùÿÿ ÿèóÏ&*âÿÿ ÿèìÏ&‡aÿÿ ÿèîÏ&‡ÿÿ ÿèõÑ&(2ÿÿ ÿèôÏ&*`ÿÿ ÿèòÏ& ÿÿ ÿçöÐ&ø*Œÿÿ ÿéõÏ&-ô2öÿÿ ÿèóÏ&(~ÿÿ ÿèñÏ&(àÿÿ ÿèõÏ&*¼ÿÿ ÿèöÏ&(áÿÿ ÿèòÏ&ðÿÿ ÿèóÏ&‡'ÿÿ ÿèñÏ&(Lÿÿ ÿèóÏ&(ëÿÿ ÿçôÐ&*Œ0Ýÿÿ ÿèóÏ& K0Êÿÿ ÿçóÐ&Ó*Œÿÿ ÿèôÏ&( ®ÿÿ ÿèòÏ&('Òÿÿ ÿçòÐ&%>*Œÿÿ ÿèõÐ&L‡ÿÿ ÿçòÐ&¨*Œÿÿ ÿèëÏ&‡-õÿÿ ÿèôÏ&(,sÿÿ ÿçñÐ&&e&&h*Œÿÿ ÿèñÏ&(Žÿÿ ÿèéÏ&‡ÿÿ ÿè÷Ï&*'Óÿÿ ÿèóÐ&(Œÿÿ ÿèöÏ&*'Ôÿÿ ÿèøÑ&* ÿÿ ÿèôÏ&(ÿÿ ÿèòÏ&‡'Õÿÿ ÿèôÏ&‡2÷ÿÿ ÿçòÏ&(¨ÿÿ ÿèìÏ&*'®ÿÿ ÿçëÐ&–&à*Œÿÿ ÿèíÏ&*&Ó2øÿÿ ÿçõÐ&*Œ.3ÿÿÿèòÇ&2ùÿÿ ÿçòÐ&£*Œÿÿ ÿèöÏ&‡'Öÿÿ ÿçóÐ&-ö&}*Œÿÿ ÿèîÏ&‡±ÿÿ ÿçôÐ&'×*Œÿÿ ÿçóÐ&"%&**Œÿÿ ÿèïÐ&‡xÿÿ ÿèõÑ&*Oÿÿ ÿèõÐ&‡#¡ÿÿÿèòÐ&•&2úÿÿ ÿèñÏ&*(Aÿÿ ÿèôÏ&*'Øÿÿ ÿçöÐ&"H*Œÿÿ ÿç÷Ð&*Œ+)ÿÿ ÿçöÐ&*Œ.Wÿÿ ÿèóÏ&‡&Çÿÿ ÿè÷Ï&(1ÿÿ ÿèõÑ&‰(ÿÿ ÿèôÏ&(Ûÿÿ ÿèóÐ& Kÿÿ ÿèóÏ&(,ÿÿ ÿèöÏ&* ÿÿ ÿèöÏ&( `ÿÿ ÿèõÏ&*'Ùÿÿ ÿèôÐ&‡'Úÿÿ ÿèôÏ&*Yÿÿ ÿèóÈ& K0Íÿÿ ÿçôÑ&9*Œÿÿ ÿèòÏ&*¿ÿÿ ÿèîÏ&*éÿÿ ÿèñÐ&‡gÿÿ ÿèóÏ&#)ÿÿ ÿçëÐ&'Û*Œÿÿ ÿèòÏ&‡ Wÿÿ ÿçóÐ&Ÿ*Œÿÿ ÿèóÏ&‡'ÿÿ ÿçóÐ&/ø*Œÿÿ ÿèõÏ&&bcÿÿ ÿèòÏ&‡,tÿÿ ÿèòÏ&(#jÿÿ ÿçõÐ&¨*ŒÿÿÿèòË&2ûÿÿ ÿèôÏ&*Òÿÿ ÿèñÐ&‡2üÿÿ ÿèðÑ&*/ƒÿÿ ÿçõÏ&*Yÿÿ ÿèòÏ&&Ú#aÿÿ ÿèóÏ&*"µÿÿ ÿèñÏ&‡'Üÿÿ ÿçöÐ& ‹*Œÿÿ ÿèñÏ&*$[ÿÿ ÿèõÏ&(#Iÿÿ ÿèôÏ&(!•ÿÿ ÿçòÐ&#¥*Œÿÿ ÿèöÏ&‡"_ÿÿ ÿèõÏ&'݇ÿÿ ÿèóÏ&*Íÿÿ ÿèóÏ&(ˆÿÿÿèòÉ&É&Êÿÿ ÿè÷Ï&"c(ÿÿ ÿèõÑ&‡1ÿÿ ÿèòÏ&‡"Fÿÿ ÿèôÏ&*!ëÿÿ ÿèòÏ&*"ÿÿ ÿçïÐ& ÿ*Œÿÿ ÿçòÐ&"¥*Œÿÿ ÿèóÏ&‡ fÿÿ ÿèòÐ&"Êÿÿ ÿèóÏ&("ÿÿ ÿèõÏ&(°ÿÿ ÿèìÏ& †‡ÿÿ ÿè÷Ï&¥(ÿÿ ÿçïÐ&*Œ0¹ÿÿ ÿèëÏ&‡"*ÿÿ ÿèîÏ&*!#ÿÿ ÿçíÐ&Æ&")*Œÿÿ ÿçôÐ&É*Œÿÿ ÿèöÏ&*"Äÿÿ ÿèöÏ&*ÿÿ ÿèòÐ&*#íÿÿ ÿèîÑ&(%®ÿÿ ÿèóÏ&('Þÿÿ ÿèóÏ&‡,uÿÿ ÿçõÑ&$‰*Œÿÿ ÿèòÏ&‡$Áÿÿ ÿçôÏ&32ýÿÿ ÿèöÐ&*Vÿÿ ÿèôÏ&(üÿÿ ÿçòÏ&(2þÿÿ ÿèñÏ&*%ÿÿ ÿçóÐ&÷&*Œ2ÿÿÿ ÿèòÑ&&¸&ÿÿ ÿçõÐ&*Œÿÿ ÿèñÏ&("Öÿÿ ÿçôÐ&$2*Œÿÿ ÿèôÑ&(Œÿÿ ÿèõÏ&*$nÿÿ ÿèõÑ&(—ÿÿ ÿèòÏ&‡0¤ÿÿ ÿç÷Ð&Ë*Œÿÿ ÿèöÏ&*Nÿÿ ÿèóÏ& á*ÿÿ ÿèóÏ&&  Kÿÿ ÿçôÐ&$…*Œÿÿ ÿèôÏ&*'ßÿÿ ÿèïÏ&*+ÿÿ ÿèõÐ&(ÿÿ ÿèóÏ&‡$¸ÿÿ ÿçóÐ&,&*Œ3ÿÿ ÿçóÐ&/*Œÿÿ ÿèòÐ&*/Mÿÿ ÿçôÐ&*Œ3ÿÿ ÿèóÏ&(†ÿÿ ÿèôÏ&#~*ÿÿ ÿèôÏ&*'àÿÿ ÿèõÐ&0L ­ÿÿ ÿèôÏ&(%ÞÿÿÿèóË&k&3ÿÿ ÿçôÑ&n*Œÿÿ ÿçöÑ&|*Œÿÿ ÿçôÒ&*£ÿÿ ÿèóÏ&*$ùÿÿ ÿçóÐ&ÿ&"Ï3ÿÿ ÿèîÑ&*¹ÿÿ ÿèôÏ&3ÿÿ ÿèñÏ&(-÷ÿÿ ÿèóÏ&*+ÿÿ ÿèñÏ&*Øÿÿ ÿç÷Ð&°*Œÿÿ ÿèôÏ& ­& ´,ÿÿ ÿè÷Ï&‡ÿÿ ÿèöÏ&(Nÿÿ ÿçöÐ&Ò*Œÿÿ ÿçðÑ&(pÿÿ ÿèóÏ&*#ÿÿ ÿèñÑ&*'áÿÿÿèôÏ&9ÿÿ ÿèóÐ&*/_ÿÿ ÿçöÐ&.#*Œÿÿ ÿçõÐ&%è*Œÿÿ ÿçóÑ&,&"%*Œÿÿ ÿèóÐ&'â*ÿÿ ÿçòÏ&*%âÿÿ ÿèëÏ&*&+ì3ÿÿ ÿèîÏ&*&ï3ÿÿ ÿçôÐ&'ã*Œÿÿ ÿçòÐ&´*Œÿÿ ÿèöÏ&(ÿÿ ÿçöÐ&F*Œÿÿ ÿèõÍ&+*3ÿÿ ÿèôÏ&*'äÿÿ ÿçôÏ&*'åÿÿ ÿçôÐ&%(*Œÿÿ ÿèõÏ&(šÿÿ ÿèòÏ&*ÿÿ ÿèõÏ&*%åÿÿ ÿèòÏ&(üÿÿ ÿèöÑ&*&Äÿÿ ÿçóÐ&÷&*Œ3ÿÿ ÿèöÏ&,&%M3 ÿÿ ÿèòÑ&.ÿÿ ÿèõÓ&(Sÿÿ ÿèõÏ&'ç*ÿÿ ÿçóÑ&,v*Œÿÿ ÿèøÏ&*'æÿÿ ÿèôÓ&*3 ÿÿ ÿçòÐ&*Œ3 ÿÿ ÿèøÏ&¡(ÿÿ ÿèôÏ&*%òÿÿ ÿèõÑ&*. ÿÿ ÿèôÒ&Q*ÿÿ ÿçõÐ&*Œ3 ÿÿ ÿèòÏ&‡ðÿÿ ÿçóÐ&%õ*Œÿÿ ÿçôÐ&%ô*Œÿÿ ÿçóÐ&*Œ3 ÿÿ ÿçóÑ&(¡ÿÿ ÿèðÏ&*%óÿÿ ÿçöÐ&'è*Œÿÿ ÿçñÊ&A3ÿÿ ÿèñÏ&*(PÿÿÿèòÉ&Ïÿÿ ÿëðÐ&-ø&-ù3ÿÿ ÿåöÓ&¨3ÿÿ ÿèòÐ&*8ÿÿ ÿçõÐ&*Œ3ÿÿ ÿèõÐ&*3ÿÿ ÿèïÏ& ­& 3ÿÿ ÿèõÏ&*3ÿÿ ÿçöÏ& ­& ¬ ´ÿÿ ÿçôÐ&+(*Œÿÿ ÿçðÐ&*Œ3ÿÿ ÿèòÑ&‡-ÿÿ ÿèõÏ& ­+,ÿÿ ÿèôÏ&,3ÿÿ ÿèðÏ&*3ÿÿ ÿçóÐ&*l*Œÿÿ ÿçóÓ&#…ÿÿ ÿçõÐ&-@*Œÿÿ ÿèðÏ&,0åÿÿ ÿêòÏ&03ÿÿ ÿéôÆ&ðoÿÿÿèïÑ&G3ÿÿ ÿéóÏ&ð>ÿÿÿéóÑ&-ú3ÿÿ ÿéóÏ&53ÿÿ ÿèõÏ&ðÿÿ ÿîóÇ&6 öÿÿ ÿêôÐ&ðøÿÿ ÿéóÏ&5ÿÿ ÿè÷Ï&ðñÿÿ ÿéóÐ&40Šÿÿ ÿéóÑ&.Ï3ÿÿ ÿéôÐ&ð7ÿÿ ÿéóÏ&5zÿÿ ÿêñÏ&ð{ÿÿÿèóÂ&~&yxÿÿ ÿéõÑ&ðOÿÿÿèøÒ&(Zÿÿÿ ÿèóÊ&E3ÿÿ ÿêòÅ&ð#lÿÿ ÿéóÑ&3ÿÿ ÿéóÏ&ÿÿ ÿæóÐ&þ3 ÿÿ ÿéóÑ&ÿÿ ÿéðÊ&ð%óÿÿ ÿêôÏ&,w%ôÿÿ ÿéôÐ&,3!ÿÿ ÿéóÑ&,&3"ÿÿ ÿéóÒ&,xÿÿÿéíÑ&03#ÿÿÿñíÑ&0/ÿÿÿéõÑ&GìÿÿÿéíÑ&GîÿÿÿéñÑ&03$ÿÿÿèïÑ&G¾ÿÿ ÿéôÑ&G3%ÿÿÿëïÑ&03&ÿÿÿéòÑ&G3'ÿÿ ÿéíÑ&ÓGÿÿÿìòÑ&ÔGÿÿÿëðÑ&Õ0ÿÿ ÿéîÑ&GÖÿÿÿêòÑ&G3(ÿÿÿèíÑ&G3)ÿÿÿéíÑ&G3*ÿÿÿéíÑ&G3+ÿÿÿèðÑ&G3,ÿÿ ÿðõÑ&GÞÿÿÿñíÑ&03-ÿÿÿéñÑ&G3.ÿÿÿéðÑ&G3/ÿÿ ÿìïÑ&G30ÿÿÿêíÑ&G31ÿÿ ÿèóÑ&G€ÿÿÿòîÑ&GÖÿÿÿïòÑ&GHÿÿ ÿéíÑ&G|ÿÿÿóíÑ&GËÿÿÿîíÑ&ÌGÿÿ ÿè÷Ñ&IGÿÿÿêíÑ&GãÿÿÿèíÑ&G32ÿÿ ÿèïÑ&G;ÿÿÿéîÑ&G33ÿÿÿéíÑ&G#ÿÿÿéóÑ&G34ÿÿÿéïÑ&G35ÿÿ ÿçóÑ&G&#36ÿÿÿéíÑ&G37ÿÿÿèðÑ&G38ÿÿÿéíÑ&G39ÿÿ ÿéóÑ&GVÿÿÿèõÑ&G3:ÿÿ ÿæòÑ&G3;ÿÿ ÿéíÑ&G&T3<ÿÿ ÿéñÑ&G3=ÿÿÿèóÑ&G3>ÿÿ ÿéôÑ&G3?ÿÿÿéôÑ&G3@ÿÿ ÿéôÑ&G3AÿÿÿçíÑ&G3BÿÿÿêñÑ&G&æ3CÿÿÿèôÑ&G3Dÿÿ ÿêíÑ&äGÿÿÿçíÑ&GãÿÿÿëôÑ&&â3EÿÿÿéíÑ&G" ÿÿ ÿîóÑ& ø&GÙÿÿ ÿéìÑ&3FÿÿÿèôÑ&G3Gÿÿ ÿéíÑ&G3Hÿÿ ÿèóÑ&G3IÿÿÿéíÑ&G tÿÿÿéòÑ&G"ÿÿÿéíÑ&G3JÿÿÿèðÑ&3KÿÿÿçñÑ&3Lÿÿ ÿèøÑ&3MÿÿÿçöÑ&3Nÿÿ ÿçìÑ&&3OÿÿÿèòÑ&3Pÿÿ ÿêòÑ&3QÿÿÿåòÑ&3Rÿÿ ÿéòÑ&3SÿÿÿèñÑ&G3Tÿÿ ÿèíÑ&G3Uÿÿ ÿèíÑ&G3Vÿÿ ÿæóÑ&G3WÿÿÿéðÑ&3XÿÿÿéòÑ&G3Yÿÿ ÿéõÑ&3Zÿÿ ÿêôÑ&G3[ÿÿÿäíÑ&G3\ÿÿÿëíÑ&G3]ÿÿÿéóÑ&G3^ÿÿ ÿéöÑ&G3_ÿÿÿéìÑ&3`ÿÿÿèôÑ&3aÿÿ ÿéòÑ&3bÿÿÿçóÑ&G3cÿÿÿçíÑ&-û3dÿÿÿêöÑ&-ü3eÿÿÿæíÑ&-ü3fÿÿ ÿêòÏ&(ÿÿÿéîÇ&,3gÿÿÿéîÇ&,3hÿÿ ÿêóÏ&'éÿÿ ÿêóÏ&‚ÿÿ ÿéóÐ&Öÿÿ ÿéöÏ&!3iÿÿ ÿéóÒ&0Þÿÿ ÿéõÒ&K,‚ÿÿ ÿéóÏ&|}ÿÿÿéðÑ&-ý3jÿÿ ÿéóÏ&}%ÿÿÿéóÏ&}3kÿÿÿçóÑ&tuÿÿÿèïÏ&@3lÿÿ ÿéõÐ&hÿÿ ÿéîÇ&ÜÝÿÿ ÿéóÍ&ÿÿ ÿñòÍ&Aÿÿ ÿèöÏ&B&CDÿÿ ÿçöÏ&"vÿÿ ÿïõÐ&"0Ðÿÿ ÿêòÏ&,»ÿÿ ÿêòÏ&,3rÿÿ ÿêóÏ&,¢ÿÿ ÿéñÎ&!g!hÿÿ ÿéõÏ&:<ÿÿ ÿéñÎ&!h#&ÿÿ ÿéñÐ&!h$1ÿÿ ÿéóÎ&!h3tÿÿ ÿèõÇ&+Ö3wÿÿ ÿèôÇ&+Ö3xÿÿ ÿèõÉ&:3yÿÿ ÿèöÉ&:3zÿÿ ÿèìÉ&:3{ÿÿ ÿèòÉ&:ÿÿ ÿæïÉ&:3|ÿÿ ÿèëÉ&:3}ÿÿ ÿçîÉ&:3~ÿÿ ÿèëÉ&:3ÿÿ ÿèëÉ&:&»ÿÿ ÿèëÉ&:3€ÿÿ ÿèôÉ&83ÿÿ ÿèëÉ&:3‚ÿÿ ÿèïÉ&8*ÿÿ ÿèëÉ&8Šÿÿ ÿèòÉ&89ÿÿ ÿèöÉ&;:ÿÿ ÿèñÉ&8<ÿÿ ÿèõÉ&8&>=ÿÿ ÿèëÉ&8?ÿÿ ÿèëÉ&@Aÿÿ ÿçõÍ&#™#˜ÿÿ ÿèëÉ&83ƒÿÿ ÿéóÉ&,3„ÿÿ ÿèíÉ&A3…ÿÿ ÿèòÉ&83†ÿÿ ÿèõÉ&83‡ÿÿ ÿèðÉ& L8ÿÿ ÿèëÉ&B3ˆÿÿ ÿèìÉ&A(ÿÿ ÿèòÉ&B#¶ÿÿ ÿèñÊ&E3‰ÿÿ ÿæóÉ&C&A3Šÿÿ ÿèëÉ&B3‹ÿÿ ÿèõÊ&E&F3Œÿÿ ÿæïÉ&>&A3ÿÿ ÿèóÉ&C&DBÿÿ ÿçñÊ&F&GEÿÿ ÿèôÊ&F&E3Žÿÿ ÿèñÊ&E3ÿÿ ÿèìË&+×3ÿÿ ÿæðË&+×3‘ÿÿ ÿéôÐ&+ÛäÿÿÿéçÏ&+Ú+ØÿÿÿêåÏ&+Ù+ØÿÿÿêòÎ&žÿÿÿî÷Ë&žÿÿÿêìË&žœÿÿÿéõË&´žÿÿÿéëÏ&a'ëÿÿÿéðÏ&ž-þÿÿÿçâÏ&¤3”ÿÿÿìðÏ&¤3•ÿÿÿéõË&ž`ÿÿÿéñË&žyÿÿÿìðÏ&žgÿÿÿéïÅ&3/ÿÿÿéóË&ž‡ÿÿÿèõÏ&eˆÿÿÿéôË&žÿÿÿéöË&ÞžÿÿÿèõÏ&žÿÿ ÿéóÏ&¤ÿÿÿèöÑ&ž­ÿÿÿêóË&!ržÿÿ ÿéóÏ&3Þÿÿ ÿèôÏ&£¤ÿÿÿòôË&ž…ÿÿÿéäÏ&e3–ÿÿÿèôË&äžÿÿ ÿèôÌ&-ÿ($ÿÿ ÿçöÏ&e)ÙÿÿÿîñÏ&“¤ÿÿÿéïÏ&)ØeÿÿÿêöÏ&ž±ÿÿÿòôË&žžÿÿÿéçÇ&/3˜ÿÿÿéóÏ&e)ÛÿÿÿêìÐ&ž-¯ÿÿÿéòÐ&ž&òóÿÿÿèóÏ&ŸÿÿÿððÏ&)Úeÿÿ ÿéâÏ&}eÿÿÿòõË&žÿÿ ÿèîÏ&.¤ÿÿÿèíÏ&vŒÿÿÿéëÏ&ž)ÿÿÿÿèéË&/0ÑÿÿÿçõÏ&ž¦ÿÿÿððÏ&žiÿÿÿõòË&ž-©ÿÿÿéïÏ&Ÿ&!I óÿÿ ÿèòÐ&)Ü&>%œÿÿÿéóÏ&)Ý3ÿÿÿéóÏ&žÿÿÿéèÐ&%žžÿÿÿéóË&ž'ìÿÿÿéíÏ&e3™ÿÿ ÿæöÏ&eZÿÿÿèóÏ&žîÿÿÿéóË&žÿÿÿêîÏ&.eÿÿÿéóÏ&žÿÿÿåãÏ&e3šÿÿÿêâÏ&)Þ¤ÿÿÿææÏ&e ÿÿÿéðË&ž*ÖÿÿÿéòÐ&ž,ÿÿÿé÷Ñ&ŸÞÿÿÿèõÏ&eßÿÿÿéõÐ&žÿÿ ÿéõÏ&Œ‚ÿÿ&ÿèÜÑ&£¢ÿÿÿêíÑ&ŸŸÿÿÿðóË&ž&ÿÿÿéôÏ&DŒÿÿÿêòË&žÄÿÿÿéôÐ&ž™ÿÿÿéìË&ažÿÿÿè÷Ï&ž7ÿÿÿëòÏ&YžÿÿÿèóÏ&ž0¾ÿÿÿêõÑ&2ŸÿÿÿòõË&ÜžÿÿÿéóÐ&0ÑNÿÿ ÿðöÏ&e&´3›ÿÿ ÿäâÏ&e&ª«ÿÿ ÿçôÏ&Œÿÿ ÿéìÏ&|ŒÿÿÿéñÏ&ž±ÿÿÿæöÏ&Ÿ³ÿÿÿèöÏ&áŸÿÿÿéóÑ&ž"ÿÿÿéíÑ&ˆ3ÿÿÿé÷Ï&žcÿÿÿçôÏ&Œ3œÿÿÿéïÌ&ŸWÿÿÿêóÒ&Ÿ0ìÿÿÿéêÐ&ž–ÿÿÿéòË&žÿÿ ÿæöÏ&'íÿÿÿéôÏ&žÿÿ ÿéñÐ&n3ÿÿÿèôË&žrÿÿÿéòÐ&/ŸÿÿÿêòÏ&Œ3žÿÿÿçøÏ&Ÿ?ÿÿ ÿêóÒ&âçÿÿÿæöË&žAÿÿÿçõÑ&Ÿ ÿÿÿçõÏ&Ÿ ØÿÿÿéóË&žýÿÿÿéõÏ&Œ3Ÿÿÿ ÿèôÏ&e3 ÿÿÿéïÐ&ž,9ÿÿÿéöÏ&žÿÿÿñóÐ&žÉÿÿÿéìÏ&ŒPÿÿ ÿåôÏ&Œ3¡ÿÿÿéðË&ž»ÿÿÿéóÏ&Ÿ'îÿÿÿéóÎ&ž&ÇÿÿÿéôÏ&ž'ïÿÿÿèòÏ&Œ,ƒÿÿÿéñÏ&Œnÿÿ ÿéðÏ&eˆÿÿÿéôË&ž,ÿÿ ÿéðÏ&Œ,ÿÿÿèäÏ&Œ3¢ÿÿÿéøÏ&Ÿ ÿÿ ÿéôÏ&Œ ÿÿÿèöÏ&'ðžÿÿÿéîË&Ÿ, ÿÿÿéóÏ&ž'ÿÿÿêóÑ&Ÿ%%ÿÿ ÿïóÏ&e˜ÿÿÿéôÏ&Ÿ ÿÿÿéôÑ&žÿÿÿæóÏ&3£ÿÿÿèòÒ&/žÿÿÿéóÎ&ž)ÿÿÿìöÏ&Ÿ'ñÿÿ ÿéïÏ&e3¤ÿÿÿèóÏ&Ÿ,ÿÿ ÿèåÏ&e3¥ÿÿÿçôÏ&Œ 9ÿÿÿéãÏ&ŒêÿÿÿéðÐ&ž# ÿÿÿçäÏ&Œ3¦ÿÿÿìõÑ&ž1ÿÿÿéöÏ&ŸÇÿÿ ÿæõÏ&Œ3§ÿÿÿçõË&ž!0ÿÿÿéòÏ&feÿÿÿéóÏ&ž&ŽÿÿÿèõË&žxÿÿÿéñÑ&žÿÿ ÿèðÏ&Œ"ÂÿÿÿéóË&žóÿÿÿêòÏ&Œ&"+€ÿÿÿçòË&žÿÿÿêõË&žÿÿ ÿéóÏ&e3¨ÿÿÿïóÎ&žÿÿ ÿéòÏ&Œ0}ÿÿÿè÷Ï&Ÿ ÿÿ ÿèðÏ&!Œÿÿ ÿèóÐ&=&>ÿÿÿêòÐ&Ÿ!´ÿÿÿæôÍ&$ÒŸÿÿÿçìË&!žÿÿ ÿèóÏ&Œ& ¹3©ÿÿÿëðË&ž uÿÿ ÿçúÏ&ŒhÿÿÿéðË&’žÿÿÿêëÇ&ßæÿÿÿôëÏ&eàÿÿÿéöË&Ÿ#ÍÿÿÿéóÏ&Ÿ#Þÿÿ ÿéóÏ&œ&›ŒÿÿÿçóÏ&Œ#‡ÿÿÿêîÏ&Œ+ÿÿÿèöÏ&#²žÿÿ ÿêóÓ&á&èéÿÿÿèöÒ&Ÿ$&ÿÿÿèòÐ&Ÿ$ÿÿÿéòÏ&Ÿ.ÿÿÿéïÐ&ž%ÿÿÿçñÏ&Ÿ#ÿÿÿéñÏ&%ÿÿÿèóÐ&ŸtÿÿÿèõÏ&Œ#õÿÿÿéðÑ&Ÿ$•ÿÿÿíòÐ&ž2ÿÿÿé÷Ð&$ŸÿÿÿëõÑ&Ÿ/ÿÿÿïñÏ&3ªÿÿÿéöÒ&/ŸÿÿÿèðË&wŸÿÿÿêöÐ&Ÿ*ÿÿÿèòÏ&Œ3«ÿÿÿé÷Í&žÿÿÿéôÒ&žÿÿÿéóÏ&Ÿ0ÿÿ ÿèöÏ&'òÿÿÿèõÏ&i&hŒÿÿÿéòË&Ÿ/‰ÿÿÿçõÏ&Ÿ0›ÿÿÿéôÒ&Ÿ'óÿÿÿéñÏ&Œ3¬ÿÿÿèóÏ&ž{ÿÿÿòóË&#`ŸÿÿÿéðÏ&'ôŒÿÿÿéðÏ&e&‰3­ÿÿÿéðÏ&e&ЉÿÿÿéòÏ&žÿÿÿèòÏ&gÿÿÿéîË&Ÿ%ÛÿÿÿéöÏ&Œ&Ò3®ÿÿÿêîÑ&ž'ÿÿÿêòÏ&üŸÿÿ ÿèóÏ&Œ& ¹3¯ÿÿÿéöÏ&'õŸÿÿÿèïÎ&Ÿ'öÿÿÿéôÎ&Ÿ*Ñÿÿ ÿéõÏ&3°ÿÿÿéïÏ&@&3±ÿÿÿîöË&ŸÿÿÿêîÒ&ç&!¨3²ÿÿÿéóÒ&žiÿÿÿéóÏ&Ÿ'÷ÿÿÿèôÏ&Œ3³ÿÿÿèôÎ&ž'øÿÿÿéôË&žØÿÿÿéíÑ&3,‡ÿÿÿçõÏ&'ùžÿÿÿéðÏ&,ˆÿÿÿèôÐ&'úŸÿÿÿéòÏ&Œ3´ÿÿÿé÷Ñ&Ÿ&Åÿÿ ÿéøÏ&3µÿÿÿéöÐ&'ü'ûÿÿÿéðÎ&Ÿ,…ÿÿ ÿèíÏ&3¶ÿÿÿéòË&Ÿ.ÿÿÿèõÏ&3¸ÿÿÿêõÏ&Ÿ,ŠÿÿÿéóÏ&Ÿ0ÄÿÿÿèóÏ&Œ&[\ÿÿÿéõÎ&,‹Ÿÿÿ ÿçòÏ&Œ3¹ÿÿ ÿèöÏ&Œ3ºÿÿÿéëÏ&*3»ÿÿÿëöÏ&'ýÿÿ ÿèòÏ&&/3¼ÿÿÿéðÏ&Ÿ/ÿÿÿë÷Ï&'ü3½ÿÿÿèòÑ&Ÿ7ÿÿ ÿéîÏ&3¾ÿÿ ÿèôÏ&Œ‹ÿÿÿéõÏ&ŽÿÿÿéñÏ&Ÿ'þÿÿÿçñÏ&%&3¿ÿÿÿçõÐ&Ÿ'ÿÿÿ ÿêóÑ&ç,ŒÿÿÿçõÏ&& ¦ ¥ÿÿ ÿçõÏ&/& ¥ÿÿÿçòÑ&Ÿ3Àÿÿ ÿçõÏ&+®3Áÿÿÿé÷Ï&+¯&'ü3Âÿÿ ÿêõÏ&+Â3Æÿÿ ÿëôÉ&\uÿÿÿèñÑ&(3Çÿÿ ÿêñÀ&ÅÆÿÿ ÿèôÁ&€ÿÿ ÿèöÐ&%&ÿÿ ÿèöÐ&;§ÿÿ ÿìóÌ&T,ÿÿ ÿíõÐ&ò3Ïÿÿ ÿèóË&+°3ÐÿÿÿéóÏ&ÑjÿÿÿééÐ&ÿÿÿèöÏ&÷ÿÿÿéðÏ&ÿÿÿéõÏ&÷ÿÿÿéìÐ&ÿÿ ÿéðÑ&¶·ÿÿÿèôÏ&÷!ÿÿÿéêÏ&÷ÿÿÿèõÏ&÷ÿÿÿéôÐ&0‰ÿÿÿèóÏ&÷ÿÿÿéêÐ&MjÿÿÿéòÏ&jNÿÿÿçòÐ&÷PÿÿÿèîÒ&+±­ÿÿÿéòÏ&÷(-ÿÿ"ÿéßÐ&‹ÿÿÿçôÏ&÷%ÌÿÿÿéíÏ&òÿÿ"ÿéßÏ&3ÑÿÿÿéóÏ&å÷ÿÿÿéôÑ&÷àÿÿ ÿéõÐ&+³ñÿÿÿéêÐ&0‹ÿÿÿéëÐ&¤¦ÿÿÿåðÏ&÷¢ÿÿÿéôÏ&÷bÿÿÿéêÐ&÷–ÿÿÿéòÐ&(¥ÿÿÿéëÎ&3ÒÿÿÿéñÏ&ÿÿÿéôÏ&÷*ÿÿÿèõÏ&÷(ÿÿÿçöÒ&÷fÿÿÿéôÏ&+²3ÔÿÿÿéõÐ&ý‹ÿÿÿèóÏ&(÷ÿÿÿéîÏ&÷ãÿÿÿéìÏ&ý †ÿÿÿéóÏ&÷6ÿÿÿèóÐ&p&@YÿÿÿéóÏ&÷ fÿÿÿèõÏ&j^ÿÿ ÿéóÈ&(&+´3ÕÿÿÿéóÐ&÷!ŠÿÿÿéõÏ&ýÿÿÿéîÏ&÷" ÿÿ ÿéòÐ&8gÿÿÿéòÏ&ý1ÿÿ ÿéòÑ&¸&(y8ÿÿÿéöÏ&ý$OÿÿÿéóÏ&ý$¸ÿÿÿèóÏ& â÷ÿÿÿéõÑ&ý—ÿÿÿçõÑ&xýÿÿÿéôÏ&p%Þÿÿ ÿéøÏ&k&+´3ÖÿÿÿéîÏ&poÿÿÿèõÐ&÷(ÿÿÿéöÏ&ý%,ÿÿÿéôÒ&ý'óÿÿÿéóÏ&ý(ÿÿÿéòÏ&pÿÿÿéóÐ&ý* ÿÿÿéöÏ&pFÿÿÿéöÐ&p.#ÿÿÿéòÏ&ýüÿÿÿéóÏ&ý´ÿÿÿéôÏ&98ÿÿÿéôÐ&8ùÿÿ ÿéòÑ&.8ÿÿÿéøÏ&ý¡ÿÿÿéóÒ&pÄÿÿÿèöÐ&ý'ÿÿÿéñÏ&ý(ÿÿÿéðÐ&h2ÿÿÿéóÏ&p0ÄÿÿÿéõÏ&÷ËÿÿÿéôÏ&p3×ÿÿÿéöÏ&ý3ØÿÿÿèõÐ&/ýÿÿÿèóÄ&!,3Ûÿÿ ÿè÷Ñ&¥3Ýÿÿ ÿíçÐ&,’3ßÿÿÿéíÏ&_îÿÿ ÿèðÐ&ü1ÿÿ ÿèíÐ&ü2ÿÿ ÿéóÐ&Æ ÿÿ ÿéòÐ&Æ3ÿÿ ÿèíÐ&ü4ÿÿ ÿéïÐ&ýÆÿÿ ÿéðÐ&0Æÿÿ ÿèñÐ&þÇÿÿ ÿéíÐ&Çÿÿÿ ÿéîÐ&Æ3âÿÿ ÿèíÐ&Æ3ãÿÿ ÿèîÐ&Æ3äÿÿ ÿéîÐ&Æ3åÿÿ ÿéíÐ&Æ3æÿÿ ÿæíÐ&Æùÿÿ ÿéòÐ&Æ3çÿÿ ÿéîÐ&Æ3èÿÿ ÿèóÐ&ü3éÿÿ ÿéðÐ&Æ•ÿÿ ÿéñÐ&Ç3êÿÿ ÿçíÐ&Æ3ëÿÿ ÿèíÐ&ü3ìÿÿ ÿèóÐ&Æ3íÿÿ ÿéôÐ&Æ3îÿÿ ÿèïÐ&Ç3ïÿÿ ÿçîÐ&ü3ðÿÿ ÿéòÐ&Æ/uÿÿ ÿéïÐ&Æ·ÿÿ ÿéòÐ&'Æÿÿ ÿèôÐ&ÆCÿÿ ÿèíÐ&ÆHÿÿ ÿéîÐ&Æ3ñÿÿ ÿèôÐ&Æ3òÿÿ ÿéóÐ&Æ3óÿÿ ÿèðÐ&Æ3ôÿÿ ÿçòÐ&Æ3õÿÿ ÿéòÐ&Ç3öÿÿ ÿéóÐ&Æ3÷ÿÿ ÿèôÐ&Ç3øÿÿ ÿéíÐ&Æ3ùÿÿ ÿèïÐ&Æàÿÿ ÿéõÐ&Æ3úÿÿ ÿéñÐ&Ç3ûÿÿ ÿèíÐ&Æ3üÿÿ ÿéïÐ&Æ3ýÿÿ ÿéöÐ&Ç3þÿÿ ÿèòÐ&Ç3ÿÿÿ ÿéôÑ&$Jÿÿ ÿéñÐ&Æ4ÿÿ ÿçïÐ&Æ4ÿÿ ÿéíÐ&Ç4ÿÿ ÿéíÐ&Çqÿÿ ÿéòÐ&$<Çÿÿ ÿéöÐ&Ç4ÿÿ ÿéíÐ&Ç%ÿÿ ÿé÷Ð&Ç#öÿÿ ÿéíÐ&Ç4ÿÿ ÿéòÐ&Ç4ÿÿ ÿèõÑ&$4ÿÿ ÿéïÐ&Ç4ÿÿ ÿèòÐ&Ç4ÿÿ ÿéòÐ&Ç4 ÿÿ ÿçõÐ&Ç& ¥ §ÿÿ ÿèôÐ&Ç4 ÿÿ ÿéóÐ&Ç4 ÿÿ ÿéðÑ&$$ÿÿÿ ÿçôÐ&Ç4 ÿÿ ÿèðÑ&$4 ÿÿ ÿèñÐ&Ç4ÿÿ ÿéôÐ&Ç4ÿÿ ÿèöÐ&Ç4ÿÿ ÿéóÐ&Ç4ÿÿ ÿéðÐ&Ç4ÿÿ ÿçíÐ&Ç4ÿÿ ÿéóÐ&Ç4ÿÿ ÿéòÑ&$4ÿÿ ÿéðÑ&*&)$ÿÿ ÿéõÐ&Ç4ÿÿ ÿèòÐ&Ç4ÿÿ ÿéíÐ&Ç4ÿÿ ÿéöÐ&Ç4ÿÿ ÿçõÐ&Ç4ÿÿ ÿèõÑ&$4ÿÿ ÿèðÑ&$4ÿÿ ÿéóÐ&Ç4ÿÿ ÿéñÐ&Ç4ÿÿ ÿéñÐ&Ç4ÿÿ ÿéðÐ&Ç4 ÿÿ ÿèôÑ&$4!ÿÿ ÿåòÑ&$4"ÿÿ ÿéóÑ&$œÿÿ ÿçïÐ&Ç4#ÿÿ ÿéòÐ&Ç4$ÿÿ ÿèûÑ&$4%ÿÿ ÿçõÑ&$4&ÿÿ ÿçñÑ&$4'ÿÿ ÿéõÐ&Ç4(ÿÿ ÿèôÎ&%@4)ÿÿ ÿèôÎ&%B%@ÿÿÿéöÏ&%AÿÿÿéöÏ&%A"ÿÿÿéöÆ&%A!ÿÿÿéöÆ&%A ÿÿ ÿêóÐ&+µ4-ÿÿ ÿçóÈ&M4.ÿÿ ÿçóÎ&M4/ÿÿ ÿçóÃ&M40ÿÿ ÿçóÏ&öÙÿÿ ÿçóÏ&ñöÿÿ ÿçóÏ&ö41ÿÿ ÿçôÏ&9öÿÿÿçòÏ&+¶43ÿÿÿçòÏ&+¶44ÿÿ ÿèôÏ& FÿÿÿéôÐ& ¦ÿÿÿéØÏ&ø ýÿÿÿèôÏ&ß þÿÿÿêôÏ&· üÿÿÿêõÇ&¸ ÿÿÿÿèõÍ& ü0îÿÿÿêóÆ&Á üÿÿÿè÷Ï& ÿ49ÿÿÿéòÎ& ü²ÿÿÿèóÏ& ÿîÿÿÿèîÏ&X üÿÿÿéóÏ& üÔÿÿÿè÷Ï&ñ üÿÿÿéêÆ&j ÿÿÿÿèóÐ&0ƒÿÿÿêõÆ& ÿ%"ÿÿÿéóÇ& ÿÁÿÿ ÿèõÐ&LÿÿÿèîÐ&úÿÿÿéêÐ& ÿcÿÿÿêòÆ&ʨÿÿÿêóÑ& ü"fÿÿÿèõÉ&+ üÿÿÿêôÏ& üYÿÿÿæôÑ& ü4;ÿÿÿéíÉ&ÉÊÿÿÿéôÎ& üÒÿÿÿèóÈ& ü,ÿÿÿèòÇ&o&ÿÿÿéóÑ& üjÿÿ ÿèôÑ&ÿ4<ÿÿÿéòÊ&#þ üÿÿÿéôÉ&Ê/9ÿÿÿêôÆ&Ê#~ÿÿÿêóÑ&Ê4=ÿÿÿéôÑ&ûÿÿÿéòÈ&ÊÿÿÿçòÏ&Ê%âÿÿÿêôÈ& ÿ ÿÿÿéõË&¤ÿÿÿé÷É&üÿÿ ÿèñÒ&,xÿÿÿéðÎ&ÃÿÿÿéêÏ&,“ÿÿÿéôÏ&+º4@ÿÿÿèóÉ&+»4AÿÿÿêòÏ&+¹4Bÿÿ ÿéóÒ&+·&14CÿÿÿçñÉ&+¸&+½&+¾+¼ÿÿÿçñÒ&+·&+¸&+½+¾ÿÿÿçðÒ&+·&+¸&+½4Dÿÿ ÿéõÍ&Ü&ÿÿ ÿéõÍ&m&ÿÿ ÿéõÎ&&(ÿÿÿéóÏ&$#ÿÿ ÿè÷Ê&('ÿÿÿè÷Ï&'.êÿÿ ÿêõÏ&%&ÿÿÿè÷Ê&'(ÿÿ ÿè÷Ð&‹'ÿÿ ÿéõÍ&&( ÿÿ ÿèëÏ& Ã( ÿÿ ÿèóÏ& Éÿÿ ÿèðÏ& Ã×ÿÿ ÿèóÏ& Ã&xÿÿ ÿèôÏ& Ã(·ÿÿ ÿéíÐ&+À&&4Fÿÿ ÿèôÐ&&ÿÿ ÿèôÏ& Ôÿÿ ÿçõÐ&‡&ÿÿ ÿéòÏ&8öÿÿ ÿéóÏ&ö Âÿÿ ÿèôÏ& Éÿÿ ÿèòÏ& ÃÝÿÿ ÿèôÏ& Ã%Dÿÿ ÿèõÏ& Ã%"ÿÿ ÿèóÐ& ÃIÿÿ ÿèóÏ& ÃÖÿÿ ÿêíÑ&&žÿÿ ÿèöÏ& Ã$ÿÿ ÿèðÏ& øÿÿ ÿéêÐ&&#ÿÿ ÿéöÐ&õÃÿÿ ÿèöÐ&&Âÿÿ ÿéõÐ&&ãÿÿ ÿêòÐ&&%ÿÿ ÿèóÏ& ÃÍÿÿ ÿèõÐ& Ä Ãÿÿ ÿèöÏ& Ãùÿÿ ÿèõÑ& Ãýÿÿ ÿèóÏ& Ãþÿÿ ÿéóÐ&ö]ÿÿ ÿèõÏ& ÃZÿÿ ÿèôÏ&ÿ Ãÿÿ ÿèìÐ&ø Ãÿÿ ÿèôÐ&öôÿÿ ÿèëÏ& Ã&ÿÿ ÿèóÏ& Ã&ÿÿ ÿèðÏ&õ&ûúÿÿ ÿèñÏ& Ã"ÿÿ ÿéöÏ&õ´ÿÿ ÿêõÑ&&'ÿÿ ÿèôÐ&ö!„ÿÿ ÿèóÏ&öZÿÿ ÿéîÐ& »õÿÿ ÿéîÑ&&$–ÿÿ ÿéòÐ&&&“ÿÿ ÿéôÏ&õ&,4Gÿÿ ÿèôÐ&föÿÿ ÿèôÐ&/.&ÿÿ ÿê÷Ð&&.ÿÿ ÿèõÐ&&õ4Hÿÿ ÿéôÏ&õ&,4Iÿÿ ÿèóÏ&øùÿÿ ÿéòÏ&.öÿÿ ÿèõÐ&õ&4Jÿÿ ÿéõÒ&ö&Ìÿÿ ÿéôÏ&õ&,4Kÿÿ ÿèõÐ&õ&4Lÿÿ ÿèõÐ&õ&4Mÿÿ ÿéóÐ&õ+ÿÿ ÿéñÑ&&%÷ÿÿ ÿçøÏ&ö4Nÿÿ ÿéóÏ&iØÿÿ ÿéèÏ&AÒÿÿ ÿîõÅ&[ÿÿ ÿîõÇ&æ[ÿÿ ÿéóÏ&Ÿ@ÿÿ ÿïóÏ&^]ÿÿ ÿïòÅ&^`ÿÿÿçòÏ&+¶4Pÿÿ ÿéòÏ&Aÿÿ ÿé÷Ï&Aÿÿ ÿéòÏ&7ÿÿ ÿïòÏ&+Á^ÿÿ ÿïòÏ&^+Âÿÿ ÿéóÏ&Aÿÿ ÿéöÐ&Æ4Qÿÿ ÿïöÐ&^ÿÿ ÿïòÐ&( ÿÿ ÿéëÏ&7 ÿÿ ÿèóÏ&…7ÿÿ ÿéòÏ&@¬ÿÿÿéõÒ&[4Rÿÿ ÿéòÏ&m7ÿÿ ÿéöÏ&Þiÿÿ ÿéóÏ&&x@ÿÿ ÿéöÏ&BAÿÿ ÿéìÐ&7ÿÿ ÿèõÏ&iÿÿ ÿèôÏ&7ÿÿ ÿéöÏ&A&ÿÿ ÿéôÏ&@"ÿÿ ÿéøÏ&7#ÿÿ ÿèöÑ&Ó@ÿÿ ÿîõÑ&ê[ÿÿ ÿéìÏ&'@ÿÿ ÿéóÏ&i)ÿÿ ÿéõÑ&²iÿÿ ÿéñÏ&iñÿÿ ÿîõÓ&[4Sÿÿ ÿéõÐ&+0ïÿÿ ÿîõÏ&Þ§ÿÿ ÿéõÏ&Û7ÿÿ ÿîõÏ&[4Tÿÿ ÿîõÎ&[4Uÿÿ ÿéòÏ&@. ÿÿ ÿéôÏ&@…ÿÿ ÿèõÏ&i0îÿÿ ÿéóÏ&9'Fÿÿ ÿéôÐ&–?ÿÿ ÿéêÏ&ijÿÿ ÿéõÏ&9cÿÿ ÿéòÏ&@,ÿÿ ÿéóÐ&U@ÿÿ ÿîõÏ&!¬[ÿÿ ÿçöÏ&–`ÿÿ ÿéëÐ&@Wÿÿ ÿèóÏ&@+-ÿÿ ÿîõÐ&0ˆ[ÿÿ ÿéöÏ&&–4Vÿÿ ÿéôÏ&‰@ÿÿ ÿéèÐ&i%žÿÿ ÿèòÏ&@+.ÿÿ ÿéóÏ&iÿÿ ÿéòÏ&+/@ÿÿ ÿéòÏ&@Ýÿÿ ÿéöÏ&@Áÿÿ ÿçõÏ&9‡ÿÿ ÿîõÄ&&¼[ÿÿ ÿéëÏ&@»ÿÿ ÿîõÏ&¦§ÿÿ ÿéòÐ&@kÿÿ ÿèõÏ&@+0ÿÿ ÿîõÐ&[&I4Wÿÿ ÿëõÐ&„4Xÿÿ ÿéóÏ&@dÿÿ ÿéôÏ&9%Dÿÿ ÿîõÑ&,‘[ÿÿ ÿéðÏ&@Ãÿÿ ÿé÷Ï&;iÿÿ ÿéòÏ&90°ÿÿ ÿéëÏ&90ðÿÿ ÿé÷Ï&@+2ÿÿ ÿéïÏ&9& ò(0ÿÿ ÿéòÏ&@*eÿÿ ÿîõÐ&*[ÿÿ ÿéôÏ&%Ë7ÿÿ ÿéõÏ&@3ÿÿ ÿçõÐ&+1@ÿÿ ÿéõÏ&–¥ÿÿ ÿîõÑ&§4Yÿÿ ÿîõÐ&§4Zÿÿ ÿéõÐ&– ´ÿÿ ÿîõÐ&§4[ÿÿ ÿîõÎ&[4\ÿÿ ÿéðÏ&@+3ÿÿ ÿèîÏ&iÿÿ ÿîõÐ&[4]ÿÿ ÿéîÑ&9+ÿÿ ÿéóÐ&iKÿÿ ÿéóÏ&90Óÿÿ ÿéòÏ&±@ÿÿ ÿéòÏ&iŽÿÿ ÿéóÏ&9ÿÿ ÿéðÏ&@ÿÿ ÿéñÏ&9!ÿÿ ÿîõÑ&ˆ[ÿÿ ÿé÷Ï&B@ÿÿ ÿé÷Ï&@+ÿÿ ÿîöÈ&[4^ÿÿ ÿéõÏ&ÿAÿÿ ÿéóÏ&@Öÿÿ ÿèôÐ&Piÿÿ ÿîõÏ&[4_ÿÿ ÿé÷Ï&@'ÿÿ ÿîõÐ&Å[ÿÿ ÿëõÏ&ƒ„ÿÿ ÿéêÏ&#–ÿÿ ÿîõÏ&§&ÿÿ ÿè÷Ï&@)ÿÿ ÿéîÏ&–vÿÿ ÿéòÏ&U@ÿÿ ÿèöÏ&9@ÿÿ ÿîõÏ&-&,[ÿÿ ÿéôÏ&9Àÿÿ ÿéöÎ&86ÿÿ ÿèíÒ&@¾ÿÿ ÿîõÄ&[4`ÿÿ ÿéöÏ&$@ÿÿ ÿîõÆ&f§ÿÿ ÿéõÐ&7\ÿÿ ÿéîÏ&9.ÿÿ ÿéõÏ&– ·ÿÿ ÿéöÑ&“9ÿÿ ÿîõÒ&Χÿÿ ÿéôÑ&@ ¸ÿÿ ÿèõÏ&á7ÿÿ ÿîõË&§Bÿÿ ÿîõÏ&§4bÿÿ ÿîõÆ&[âÿÿÿîõÐ&§4cÿÿ ÿéïÏ&–& ò4dÿÿ ÿèôÏ&@4eÿÿ ÿéôÏ&@,”ÿÿ ÿéëÏ&–&à4fÿÿ ÿéòÏ&@4gÿÿ ÿéóÏ&©9ÿÿÿêòÈ&€,•ÿÿ ÿèíÏ&9'©ÿÿ ÿéêÏ&i(9ÿÿ ÿéîÏ&9Þÿÿ ÿéêÐ&c@ÿÿ ÿéôÐ&7ÿÿ ÿëõÒ&„4hÿÿ ÿéõÐ&ã–ÿÿ ÿéôÏ&.09ÿÿ ÿîöÍ&,–[ÿÿ ÿîõÏ&[0gÿÿ ÿéõÐ&9. ÿÿ ÿéïÏ&–&8ÿÿ ÿéôÏ&7/ÿÿ ÿéóÏ&E@ÿÿ ÿîõÐ&[4iÿÿ ÿéòÏ&7'cÿÿ ÿéõÐ&–‚ÿÿ ÿéòÐ&@*ÿÿ ÿéôÏ&– ÿÿ ÿéôÐ&+(4ÿÿ ÿéùÏ&70ÿÿ ÿéôÑ&9'ªÿÿ ÿéòÏ&0@@ÿÿ ÿéóÏ&7çÿÿ ÿéóÏ&@Šÿÿ ÿëõÏ&ð&ñ„ÿÿ ÿéôÏ&7'«ÿÿ ÿëõÏ&x„ÿÿ ÿëõÐ&‚„ÿÿ ÿèõÑ&@`ÿÿ ÿéìÐ&&–4jÿÿ ÿîõÒ&§4kÿÿ ÿéîÏ&×7ÿÿ ÿìôÏ&%gÿÿ ÿìôÈ&gÿÿ ÿéõÏ&@*4ÿÿ ÿéíÐ&Ô&9Õÿÿ ÿéõÑ&ý9ÿÿ ÿéóÐ&–]ÿÿ ÿîõÐ&[ JÿÿÿêòÒ&.€ÿÿ ÿéóÏ&A1ÿÿ ÿèõÏ&i2ÿÿÿéìÊ&f4lÿÿ ÿçõÏ&Þ9ÿÿ ÿèõÏ& 9ÿÿÿêòÒ&€hÿÿ ÿèðÐ&7iÿÿ ÿéòÏ&9¿ÿÿ ÿéòÏ&9 Xÿÿ ÿéõÏ&9Ýÿÿ ÿéóÐ&7Èÿÿ ÿé÷Ï&9 ÿÿ ÿéøÏ&– ÿÿ ÿîõÎ&§4mÿÿ ÿéôÏ&A(mÿÿ ÿîõÌ&§4nÿÿ ÿéóÏ&–²ÿÿ ÿéëÏ&9&ÿÿ ÿéóÑ&@"fÿÿ ÿéõÏ&/@ÿÿ ÿîõÐ&ð&§4oÿÿ ÿéôÏ&@Zÿÿ ÿéñÐ&++ÿÿ ÿîõÑ&§&4pÿÿ ÿéõÏ&š–ÿÿ ÿèóÏ&–&.è4rÿÿ ÿë÷Ï&=„ÿÿ ÿéõÐ&i%ªÿÿ ÿèôÏ&@Ûÿÿ ÿéíÏ&i¾ÿÿ ÿèíÏ&9,—ÿÿ ÿèõÏ& Ý9ÿÿ ÿéõÓ&9&Ý4sÿÿ ÿéóÏ&@*5ÿÿ ÿéóÏ&@%Óÿÿ ÿéìÐ&9øÿÿ ÿéöÏ&>&%4tÿÿ ÿéôÐ&9ŸÿÿÿêòÏ&€4uÿÿ ÿîõÇ&§#mÿÿ ÿìôÏ&+44vÿÿ ÿîõÎ&§4wÿÿ ÿèõÏ&–&,˜4xÿÿ ÿéðÐ&@ ÿÿ ÿçïÏ&@*gÿÿ ÿèøÐ&– .ÿÿ ÿîõÑ&[4yÿÿ ÿìôÓ&g&0“4zÿÿ ÿéïÏ&94{ÿÿ ÿèôÏ&–&Þ 8ÿÿ ÿéôÏ&@Òÿÿ ÿçñÏ&9/Jÿÿ ÿéñÏ&@"‹ÿÿ ÿéïÏ&7Áÿÿ ÿéóÏ&@!ÿÿ ÿîõÏ&§4|ÿÿ ÿèóÏ&9âÿÿ ÿèóÏ&?9ÿÿ ÿéõÑ&9'ÿÿ ÿìôÐ&g4}ÿÿ ÿéôÒ&94~ÿÿ ÿëõÏ&l&„4ÿÿ ÿéóÏ&@7ÿÿ ÿéëÏ&!&–àÿÿ ÿèîÐ&–0ºÿÿ ÿéõÏ&9#Ìÿÿ ÿéñÏ&@"ÿÿ ÿèöÏ&%Ã&>áÿÿ ÿîõÐ&§0þÿÿ ÿéòÏ&9"ÿÿ ÿèóÏ&9#@ÿÿ ÿéñÏ&9!<ÿÿ ÿîõÐ&§4€ÿÿ ÿêöÐ&#ˆ€ÿÿ ÿéöÏ&–#‰ÿÿ ÿéíÏ&5iÿÿ ÿèòÏ&9Ÿÿÿ ÿëõÏ&„4ÿÿ ÿèöÐ&A!…ÿÿ ÿìôÒ&[gÿÿ ÿéïÏ&9"Gÿÿ ÿéêÏ&9Iÿÿ ÿéñÏ&7"Dÿÿ ÿçõÏ&Yiÿÿ ÿéòÑ&@+ÿÿ ÿéôÏ&93ÿÿ ÿéóÏ&@Ùÿÿ ÿéôÐ&9"£ÿÿÿêòÇ& v€ÿÿÿéõÐ&G&hFÿÿ ÿéïÏ&_–ÿÿ ÿéñÏ&–#Éÿÿ ÿëõÑ&„4‚ÿÿ ÿéôÏ&9Îÿÿ ÿéöÏ&–"ÿÿ ÿéðÏ&J&@4ƒÿÿ ÿéóÐ&!ñ9ÿÿ ÿéðÏ&9"ÿÿ ÿéñÑ&9#ôÿÿ ÿëõÐ&„4„ÿÿ ÿéôÏ&@1ÿÿ ÿéõÏ&–.ÿÿ ÿîõÑ&¿&[Àÿÿ ÿéòÏ&7'mÿÿ ÿéøÒ&,™7ÿÿ ÿéòÏ&@$Pÿÿ ÿéïÏ&9#'ÿÿ ÿèöÒ&–$%ÿÿ ÿéïÑ&–-êÿÿ ÿéòÏ&9Lÿÿ ÿëõÏ&„4…ÿÿ ÿéóÑ&@'¶ÿÿ ÿéöÏ&9$tÿÿ ÿéöÏ&–$hÿÿ ÿêôÈ&É4†ÿÿ ÿèôÐ&9*6ÿÿÿêòÈ&&~€ÿÿ ÿëõÌ&„4‡ÿÿ ÿéõÏ&9$ÿÿ ÿéôÏ&@"„ÿÿ ÿèóÏ&7$“ÿÿ ÿêòÑ&€4ˆÿÿ ÿîõÑ&§4‰ÿÿ ÿéñÏ&9,ðÿÿ ÿèõÐ&9'pÿÿÿêòÒ&/ë€ÿÿ ÿèöÏ&9ÿÿ ÿéõÏ&@ÿÿ ÿçóÐ&@æÿÿ ÿèóÏ&A áÿÿ ÿéòÏ&@/;ÿÿ ÿéóÏ&9¡ÿÿ ÿéóÏ&9'vÿÿ ÿéöÏ&9%+ÿÿ ÿéöÏ&n4Šÿÿ ÿéîÏ&–qÿÿ ÿçõÑ&9'ºÿÿ ÿëõÏ&„4‹ÿÿ ÿèôÏ&>&Þ4Œÿÿ ÿéòÏ&@.ÿÿ ÿìôÊ&$øgÿÿ ÿéôÑ&–*7ÿÿ ÿéïÏ&>& ó!fÿÿ ÿèôÐ&–'¸ÿÿ ÿéóÏ&9Jÿÿ ÿèôÏ&9,Öÿÿ ÿëõÏ&v„ÿÿ ÿéõÐ&Þ&@4ÿÿ ÿîõÏ&§4Žÿÿ ÿìôÏ&g4ÿÿ ÿéõÏ&œ–ÿÿ ÿéôÏ&@#~ÿÿ ÿëöÏ&„4ÿÿ ÿéòÏ&@$þÿÿ ÿêõÐ&˜4‘ÿÿ ÿéóÑ&7(Gÿÿ ÿêôÏ&€4’ÿÿ ÿéóÏ&@+ÿÿ ÿéòÏ&@ Þÿÿ ÿéõÏ&–%Úÿÿ ÿéíÏ&9:ÿÿ ÿèñÓ&–*8ÿÿ ÿçöÑ&–*9ÿÿ ÿëöÐ&„0 ÿÿ ÿçóÏ&@+ÿÿ ÿëõÐ&„ÿÿ ÿéõÒ&–~ÿÿ ÿîõÐ&§4”ÿÿ ÿé÷Ï&–'wÿÿ ÿéöÑ&9%Øÿÿ ÿìõÑ&gÄÿÿ ÿëõÎ&h&„4–ÿÿ ÿé÷Ï&–&n4—ÿÿ ÿêòÏ&$a&$`€ÿÿ ÿëõÏ&„úÿÿ ÿëõÏ&„&j4˜ÿÿ ÿèõÏ&9'}ÿÿ ÿéíÑ&9'‚ÿÿ ÿéôÏ&9*Òÿÿ ÿêòÈ&"Ø&"×€ÿÿ ÿçôÏ&'|+ÿÿ ÿéóÐ&º@ÿÿ ÿéöÐ&ž&4+ÿÿ ÿîõÏ&§4™ÿÿ ÿéòÏ&@'~ÿÿÿêóÏ&S.ÿÿ ÿéòÏ&@ÿÿ ÿéóÏ&9'ÿÿ ÿìôÐ&g4šÿÿ ÿèóÏ&–&°ÿÿ ÿéôÑ&–4›ÿÿ ÿèôÏ&–<ÿÿ ÿèöÐ&–'Œÿÿ ÿéóÐ&–'¾ÿÿ ÿêôÏ&€4œÿÿ ÿëõÑ&„&h4ÿÿ ÿéîÏ&–&0b4žÿÿ ÿéîÏ&9&0b4Ÿÿÿ ÿéóÏ&@*:ÿÿ ÿéôÏ&9'ãÿÿ ÿéöÐ&ë–ÿÿ ÿèôÏ&>&º&»¹ÿÿ ÿçìÏ&9%êÿÿ ÿè÷Ð&6&–4 ÿÿ ÿìôÒ&g4¡ÿÿ ÿéóÏ&*<9ÿÿ ÿéøÏ&–*;ÿÿ ÿîõÑ&§.ÿÿ ÿéöÑ&–)ôÿÿ ÿéõÏ&9.ÿÿ ÿéöÑ&7&Äÿÿ ÿéòÐ&0¥9ÿÿ ÿëõÏ&„4¢ÿÿ ÿéôÑ&9/"ÿÿ ÿèõÐ&–&4£ÿÿ ÿéõÏ&@¤ÿÿ ÿéòÏ&–4¤ÿÿ ÿìôÐ&%&g4¥ÿÿ ÿèôÏ&9-ÿÿ ÿé÷Ï&9öÿÿ ÿë÷Ð&„&C4¦ÿÿ ÿéöÐ&?>ÿÿ ÿéóÑ&$4§ÿÿ ÿèöÑ&9'…ÿÿ ÿîöÏ&§4¨ÿÿ ÿéñÏ&–)ÿÿ ÿè÷Ð&–+5ÿÿ ÿéõÐ&. 9ÿÿ ÿëõÏ&…&„„ÿÿ ÿçóÐ&<& ª «ÿÿ ÿèôÐ&(ˆ9ÿÿ ÿëõÏ&„&jiÿÿ ÿêôÐ&…&€4©ÿÿ ÿéñÏ&9FÿÿÿêòÏ&€4ªÿÿ ÿçøÒ&9Õÿÿ ÿêòÏ&…&€4«ÿÿ ÿéòÏ&–0Ãÿÿ ÿéöÏ&–/ ÿÿ ÿéòÏ&–*=ÿÿ ÿéôÒ&9Qÿÿ ÿèôÏ&/D>ÿÿ ÿèõÑ&(+ÿÿ ÿé÷Ï&9÷ÿÿ ÿèòÏ&%[9ÿÿ ÿèôÒ&9%ÿÿ ÿçõÏ&90”ÿÿ ÿèïÏ&>& 4¬ÿÿ ÿéõÏ&@+6ÿÿ ÿëöÏ&„4­ÿÿ ÿéõÏ&56ÿÿ ÿéóÐ&§9ÿÿ ÿçõÐ&=<ÿÿ ÿèðÐ&–. ÿÿ ÿìôÍ&g4®ÿÿ ÿéñÑ&9%÷ÿÿ ÿéôÏ&>++ÿÿ ÿèôÏ&>,šÿÿ ÿéòÏ&–*>ÿÿ ÿéóÏ&–Oÿÿ ÿéóÏ&9'“ÿÿ ÿëóÏ&3&ÿÿ ÿëõÒ&„,›ÿÿÿêòÏ&U€ÿÿ ÿæóÑ&>Tÿÿ ÿéðÏ&ÖÿÿÿêïÒ&SRÿÿ ÿìôÒ&1gÿÿ ÿèõÒ&“4¯ÿÿ ÿèõÒ&“4°ÿÿ ÿéôÏ&.ÿÿ ÿéöÐ&UVÿÿ ÿèúÐ&T4±ÿÿ ÿèóÏ&XKÿÿ ÿéòÐ&âZÿÿÿèóÏ&YXÿÿÿéõÐ&5[ÿÿ ÿéõÏ&-ô4²ÿÿÿèóÏ&\Xÿÿ ÿéòÐ&âáÿÿ ÿéòÐ&]âÿÿÿéõÐ&^5ÿÿ ÿêóÐ&4<ÿÿ ÿéõÐ&:5ÿÿ ÿéòÐ&‘âÿÿ ÿéõÐ&5_ÿÿ ÿéõÐ&5aÿÿ ÿéôÐ&=>ÿÿÿèöÏ&ghÿÿ ÿéòÐ&bâÿÿÿéõÐ&5cÿÿ ÿéóÐ&;<ÿÿÿéõÐ&d5ÿÿÿéõÐ&e5ÿÿ ÿéõÐ&*?5ÿÿÿéõÐ&f5ÿÿ ÿéõÐ&i5ÿÿ ÿèöÏ&. 4¶ÿÿ ÿéòÐ&*@(½ÿÿ ÿéñÐ&ü4·ÿÿ ÿçòÐ&ýþÿÿ ÿçóÐ&ýÿÿÿ ÿèóÏ&ÿÿ ÿéòÌ&0­4¸ÿÿ ÿèçÏ&4¹ÿÿ ÿèéÏ&4ºÿÿ ÿæëÏ&4»ÿÿ ÿèòÏ&4¼ÿÿ ÿèèÏ&4½ÿÿ ÿéòÐ&ÿÿ ÿèïÏ& Mÿÿ ÿèôÏ&áÿÿ ÿéðÏ&þœÿÿ ÿéèÐ&ëþÿÿ ÿéëÏ&úþÿÿ ÿèöÏ&-ïÿÿ ÿéóÏ&Ñ-ÿÿ ÿéìÏ&Þÿÿ ÿéôÏ&þ6ÿÿ ÿéóÏ&-ýÿÿ ÿéôÏ&-( ÿÿ ÿéìÏ&-( ÿÿ ÿéóÏ&È-ÿÿ ÿéðÏ&lÿÿ ÿéóÏ&-&ÿÿ ÿèõÏ&-šÿÿ ÿéôÏ&„·ÿÿ ÿéòÏ&-ÿÿ ÿéçÏ&þ*Aÿÿ ÿéõÏ&-³ÿÿ ÿéòÏ&-(ÿÿ ÿéóÏ&- ÿÿ ÿéòÏ&(ÿÿ ÿéìÏ&(ÿÿ ÿéóÐ&¿-ÿÿ ÿèíÏ&Óÿÿ ÿéêÏ&,“-ÿÿ ÿéëÏ&„%3ÿÿ ÿéóÏ&)„ÿÿ ÿéôÏ&„Ûÿÿ ÿéóÏ&-ßÿÿ ÿéóÏ&5ÿÿ ÿéóÏ&‰-ÿÿ ÿèöÑ&Óÿÿ ÿéóÏ&Àÿÿ ÿèöÏ& ÿÿ ÿéöÏ&„/ÿÿ ÿéòÏ&(%ÿÿÿéõÏ&ÂÿÿÿèôÏ&Âÿÿ ÿéõÑ&²ÿÿ ÿèòÏ&0$ÿÿ ÿéòÏ&ºÿÿ ÿéôÏ&.-ÿÿ ÿèõÏ&ÿÿ ÿèõÏ&Ëÿÿ ÿéôÏ&wÿÿ ÿéìÐ&„ÿÿ ÿèôÏ&(/ÿÿ ÿéõÏ&R-ÿÿ ÿéíÏ&ô-ÿÿ ÿééÏ&*Bÿÿ ÿéöÏ&B.7ÿÿ ÿéõÏ&„õÿÿ ÿéôÏ&"ÿÿ ÿçõÏ&!vÿÿ ÿéöÏ&Þÿÿ ÿèðÏ&„&ú4¿ÿÿ ÿéñÏ&„8ÿÿ ÿé÷Ï&*Cÿÿ ÿéõÏ&Ûÿÿ ÿèóÏ&*Dÿÿ ÿéõÏ&-‘ÿÿÿéòÐ&±ÿÿ ÿéñÏ&-ñÿÿ ÿéòÏ&„. ÿÿ ÿéõÐ&&ïðÿÿÿéòÏ&ÂAÿÿ ÿèöÏ&-+8ÿÿ ÿéôÏ&+7ÿÿ ÿéôÏ&…ÿÿ ÿéôÏ&Fÿÿ ÿéóÏ&„'Fÿÿ ÿéëÏ&-(Áÿÿ ÿçôÏ&-4Àÿÿ ÿéôÏ&%Ëÿÿ ÿéóÏ&-ÿÿ ÿéóÏ&/'ÿÿ ÿèòÏ&+..7ÿÿ ÿèôÏ&ÿÿ ÿéòÐ&kÿÿ ÿéôÏ&4Áÿÿ ÿèöÐ&Âÿÿ ÿéòÏ&ÝÿÿÿéöÏ&Â%!ÿÿ ÿéôÐ&?ÿÿ ÿéðÏ&Ãÿÿ ÿéóÏ&+ÿÿ ÿèóÏ&-îÿÿ ÿèõÏ&+ÿÿ ÿéôÏ&-+ÿÿ ÿéõÏ&-kÿÿ ÿéïÐ&Rÿÿ ÿèìÏ&&ÿÿ ÿéëÏ&»ÿÿ ÿéóÏ&"Wÿÿ ÿéóÏ&)Kÿÿ ÿéòÏ&0°ÿÿ ÿéóÏ&-'Ëÿÿ ÿéöÏ&-äÿÿ ÿçóÏ&-'£ÿÿ ÿèôÏ&„Øÿÿ ÿéóÏ&ÿÿ ÿéóÐ&+9ÿÿ ÿéòÏ&².7ÿÿ ÿèöÐ&/(&ð.7ÿÿ ÿèóÏ&-ÿÿ ÿéèÐ&-%žÿÿ ÿçõÏ&„‡ÿÿÿéóÐ&0ƒ^ÿÿ ÿéíÏ&,Çÿÿ ÿéóÏ&ÿÿ ÿéóÏ&Áÿÿ ÿéòÏ&-Îÿÿ ÿçòÐ&+:ÿÿ ÿéóÐ&/)ÿÿ ÿéïÐ&& ò4Âÿÿ ÿéëÐ&Wÿÿ ÿééÏ&µÿÿ ÿéïÐ&,œÿÿ ÿéêÏ&jÿÿÿéóÎ&,+;ÿÿ ÿéïÏ&+<ÿÿ ÿéòÏ&.Òÿÿ ÿéõÐ&4Ãÿÿ ÿéõÏ&ÿÿ ÿéóÏ&'¦ÿÿ ÿéöÏ&/*ÿÿ ÿéçÏ&+=ÿÿÿéñÏ&Â4Äÿÿ ÿéòÏ&Sÿÿ ÿéôÑ&/sÿÿ ÿéðÏ&„+3ÿÿ ÿéõÏ&~-ÿÿ ÿéõÏ&„ ·ÿÿ ÿéõÏ&sÿÿ ÿéòÏ&„0Õÿÿ ÿéöÏ&Uÿÿ ÿéòÐ&q&<ÿÿ ÿèïÏ&0ÿÿ ÿèõÐ&/,4Åÿÿ ÿèõÐ&L/,ÿÿ ÿéöÑ&“ÿÿ ÿéôÏ&P.7ÿÿ ÿéòÏ&¨ÿÿ ÿéóÏ&ÿÿ ÿèîÏ&ÿÿ ÿéñÏ&$.7ÿÿ ÿéõÏ&Šÿÿ ÿèöÏ&+ÿÿÿèõÏ&Âáÿÿ ÿçôÐ&%ÿÿ ÿéôÑ& ¸ÿÿÿéôÑ&íÍÿÿ ÿé÷Ï&õÿÿ ÿéóÐ&-Kÿÿ ÿéóÏ&„ÿÿÿéóÏ&ÕÂÿÿ ÿéðÏ&-ÿÿÿéðÏ&^&ÿÿÿèóÏ&Â0½ÿÿ ÿéðÏ&Íÿÿ ÿéõÐ&„\ÿÿ ÿèôÐ&Pÿÿ ÿèõÏ&,ž.7ÿÿ ÿéîÏ&.„ÿÿÿéðÐ&0†^ÿÿ ÿé÷Ï&BÿÿÿéòÐ&ÂÙÿÿ ÿéôÏ&­ÿÿ ÿéòÏ&+ÿÿ ÿéñÏ&4Æÿÿ ÿèôÏ&/,4ÇÿÿÿéõÏ&Í&ÉÊÿÿÿèòÐ&úËÿÿ ÿéôÏ&.74Èÿÿ ÿéóÏ&.74Éÿÿ ÿæöÏ&pÿÿ ÿéôÏ&„ÿÿ ÿéíÏ&-éÿÿ ÿèòÐ&.74Êÿÿ ÿéóÑ&!.7ÿÿ ÿèñÑ&„ëÿÿ ÿéóÏ&©ÿÿ ÿéïÏ&,ÿÿ ÿéôÏ&ÿÿ ÿéôÐ&ÿÿ ÿèñÏ&&i&&e.7ÿÿ ÿéóÏ&.7.—ÿÿ ÿéôÏ& ÿÿ ÿæ÷Ï&„(¿ÿÿ ÿè÷Ï&&(.7ÿÿÿéóÏ&^0Éÿÿ ÿéòÏ&%ÿÿ ÿéõÐ&ƒÿÿ ÿèñÏ&%Ïÿÿ ÿéòÏ&©ÿÿ ÿéòÏ&'cÿÿ ÿéôÏ&%=.7ÿÿ ÿéõÏ&.7ÿÿÿèñÏ&ÂŽÿÿ ÿéôÐ&(4ÿÿ ÿçõÏ& Õÿÿ ÿèôÏ&4Ëÿÿ ÿéôÏ&%$ÿÿÿéóÏ&EÂÿÿ ÿéóÏ&Š„ÿÿ ÿéôÏ&ì.7ÿÿ ÿéóÏ&(5ÿÿ ÿèíÏ&'©ÿÿ ÿéîÏ&Þÿÿ ÿéòÏ&„'Rÿÿ ÿéõÐ&ã.7ÿÿ ÿéóÏ&(6ÿÿ ÿéóÏ&(7ÿÿÿèôÏ&Â(8ÿÿ ÿèìÐ&&ÿÿ ÿéôÏ&/ÿÿ ÿéêÐ&cÿÿ ÿéõÏ&.ÿÿ ÿéêÏ&(9ÿÿ ÿçöÏ&4Ìÿÿ ÿéíÏ&?ÿÿ ÿéðÒ&0íÿÿ ÿçõÑ&Žÿÿ ÿéóÏ&Àÿÿ ÿéôÑ&'ª„ÿÿ ÿéóÏ&(:ÿÿ ÿéóÏ&ìÿÿ ÿéöÐ&4Íÿÿ ÿèîÐ&,Ÿ.7ÿÿÿéôÏ&Â[ÿÿ ÿéõÏ&+>ÿÿ ÿéõÐ&®ÿÿ ÿèïÓ&-4Îÿÿ ÿéöÏ&"H„ÿÿ ÿèøÏ&'±.7ÿÿ ÿèõÑ&&.7ÿÿ ÿçõÏ&Þÿÿ ÿéîÏ&.70bÿÿ ÿèóÐ&(<ÿÿ ÿéñÏ&¼ÿÿ ÿéëÏ&(&à.7ÿÿ ÿéõÏ&/ÿÿ ÿèðÏ&, ÿÿÿéõÐ&Â%ªÿÿ ÿçóÏ&©.7ÿÿ ÿéòÏ&£.7ÿÿ ÿèóÏ&„,¡ÿÿ ÿé÷Ï&Kÿÿ ÿéõÏ&„ @ÿÿ ÿéõÑ& ÿÿ ÿèõÑ&‰ÿÿÿéóÏ&1Âÿÿ ÿéõÏ&„Ýÿÿ ÿéõÐ&&!ä4Ïÿÿ ÿèõÏ&2.7ÿÿÿéðÐ& ÿÿ ÿéóÏ&Ÿÿÿ ÿéóÏ& ÿÿ ÿéóÏ&(=ÿÿ ÿèõÏ& Ý.7ÿÿ ÿéñÏ&..7ÿÿÿéòÏ& Vÿÿ ÿéòÐ&%ÐÿÿÿéôÏ&Â(mÿÿ ÿéóÏ&„(>ÿÿ ÿèìÏ&(?.7ÿÿ ÿéíÏ&%ÕÿÿÿèöÏ&»ÿÿ ÿéóÐ& I.7ÿÿÿéôÈ&Í0Íÿÿ ÿéõÏ&d.7ÿÿ ÿéòÏ&#jÿÿ ÿéïÏ&„(@ÿÿ ÿéòÒ&¢.7ÿÿ ÿé÷Ð&&ýìÿÿÿèöÏ& `Âÿÿ ÿèöÏ&<ÿÿ ÿèôÏ&Ûÿÿ ÿéôÑ&9ÿÿÿéôÏ&ÂYÿÿ ÿéñÏ&„(Aÿÿ ÿéòÏ&.L.7ÿÿÿéôÑ&Ï&ÐÍÿÿ ÿéíÏ&É„ÿÿ ÿéòÏ&„,mÿÿ ÿéòÏ&+ÿÿ ÿéôÐ&Ÿÿÿ ÿéöÏ&'e.7ÿÿ ÿéóÏ&%Óÿÿ ÿéóÏ&.5.7ÿÿ ÿéîÏ&¿ÿÿ ÿèöÏ& .7ÿÿ ÿéíÐ&,¢ÿÿ ÿéóÐ&,nÿÿ ÿéòÎ&á&âÑÿÿ ÿéóÏ&Ó&ÒÔÿÿ ÿéëÏ&Ðÿÿ ÿçðÑ&‡ÿÿ ÿéíÏ&Ñÿÿ ÿèõÒ&„/-ÿÿ ÿèñÐ&×&&eÿÿ ÿçòÑ&Óÿÿ ÿèøÐ& +.7ÿÿ ÿéôÏ&„4Ðÿÿ ÿçñÏ&/J.7ÿÿ ÿéñÏ&,£ÿÿ ÿéõÏ&"ë.7ÿÿ ÿéõÏ&:.7ÿÿ ÿéôÐ&&.7ÿÿ ÿéòÐ&#¥ÿÿ ÿéöÏ&#‰.7ÿÿ ÿéôÌ&Í4Ñÿÿ ÿéõÏ&"z.7ÿÿ ÿéóÏ&"µ.7ÿÿ ÿéíÏ&/›.7ÿÿ ÿéôÏ&#J.7ÿÿ ÿéëÏ&„" ÿÿ ÿèóÏ&#@.7ÿÿ ÿéöÏ&„",ÿÿ ÿéöÏ&,¤.7ÿÿ ÿéòÏ&„"ÿÿ ÿéòÏ&0¢ÿÿ ÿéñÏ&„"ÿÿ ÿèóÏ&!ö.7ÿÿ ÿéöÐ&ç&,êÿÿ ÿéóÏ&Ùÿÿ ÿäöÏ&„"oÿÿ ÿèóÏ&Z.7ÿÿ ÿéõÑ&'ÿÿ ÿèïÐ&„0¹ÿÿ ÿçõÏ&„Yÿÿ ÿéõÏ&£ÿÿ ÿèóÏ&!ê.7ÿÿ ÿéôÏ&¼.7ÿÿ ÿéóÑ&„Xÿÿ ÿéñÏ&„$Zÿÿ ÿéñÏ&#É.7ÿÿ ÿéõÏ&#Ù.7ÿÿ ÿèóÏ&â.7ÿÿ ÿéîÏ&/¸.7ÿÿ ÿéîÑ&ã.7ÿÿÿéôÐ&Ð&Í4Òÿÿ ÿéðÑ&/ƒÿÿ ÿéôÏ&-.7ÿÿ ÿèöÐ&&á%ÃÿÿÿéôÐ&Í"Êÿÿ ÿéñÏ&"Dÿÿ ÿéóÏ&!ÿÿ ÿéóÐ&&ÿÿ ÿéôÏ&!^ÿÿÿéôÏ&Ð&Í4Óÿÿ ÿèóÏ&?ÿÿ ÿéôÏ&„!"ÿÿ ÿèòÏ&„Ÿÿÿ ÿéôÏ&.70{ÿÿ ÿèñÏ&&e&(C.7ÿÿ ÿèóÏ&„!÷ÿÿ ÿéôÏ&„"hÿÿ ÿéóÏ&„#°ÿÿ ÿéóÏ&„(Bÿÿ ÿéóÐ&0–ÿÿ ÿéöÐ&(D&%ÿÿ ÿéóÐ&oÿÿ ÿéíÐ&Õ&.74Ôÿÿ ÿèôÏ&#´.7ÿÿ ÿéóÏ&4Õÿÿ ÿèôÐ&,Åÿÿ ÿéðÏ&$¬.7ÿÿ ÿéîÑ&+ÿÿ ÿè÷Ï&$ß.7ÿÿ ÿéõÏ&„$Êÿÿ ÿèõÏ&„¢ÿÿ ÿéóÏ&.74Öÿÿ ÿéöÏ&$tÿÿ ÿéòÏ&.6.7ÿÿ ÿéîÑ&$–.7ÿÿ ÿéóÐ&åÿÿ ÿéôÏ&"„.7ÿÿÿéõÏ&Â)iÿÿ ÿèòÏ&;.7ÿÿ ÿéîÐ&„#Áÿÿ ÿéóÏ&$D.7ÿÿ ÿéïÑ&-ê.7ÿÿ ÿèõÐ&'p.7ÿÿ ÿèöÏ&% .7ÿÿ ÿéòÐ&„% ÿÿ ÿéóÐ&&,Ä,¥ÿÿ ÿçíÐ&$ìÿÿ ÿé÷Ï&„&ì#vÿÿ ÿéðÏ&#wÿÿ ÿéóÐ&#z.7ÿÿ ÿéôÏ&*)ÿÿ ÿéöÑ&#u&â.7ÿÿ ÿèïÏ&„+ÿÿ ÿéóÏ&#|ÿÿ ÿéîÏ&#{.7ÿÿ ÿéôÑ&Ð.7ÿÿ ÿèôÑ&#x#yÿÿ ÿçõÐ&&&  ÿÿ ÿéõÏ&„#Cÿÿ ÿéõÏ&„$ÿÿ ÿèóÏ&„$“ÿÿÿéóÏ&ÂMÿÿ ÿéðÑ&‡ÿÿ ÿéôÑ&4×ÿÿÿéõÏ&Âÿÿ ÿèõÐ& ÿÿ ÿçóÐ&æÿÿ ÿéðÏ&$.7ÿÿ ÿèòÐ&Ýÿÿ ÿéóÏ&R.7ÿÿ ÿéîÏ&$‘„ÿÿ ÿéòÑ&á&â4ØÿÿÿçñÏ&Â#ÿÿ ÿéóÏ&$Aÿÿ ÿèôÏ&„4Ùÿÿ ÿéôÏ&1ÿÿ ÿéòÏ&/;.7ÿÿ ÿéõÑ&„&†4Úÿÿ ÿæïÏ&.74Ûÿÿ ÿéòÏ&'m.7ÿÿ ÿèòÐ&„/Mÿÿ ÿéóÏ&)’&)“.7ÿÿ ÿèôÐ&(&.74Üÿÿ ÿéôÐ&.8.7ÿÿ ÿé÷Ï&„(Eÿÿ ÿéöÐ&E.7ÿÿ ÿéîÏ&q.7ÿÿ ÿéòÏ&w.7ÿÿ ÿéôÐ&.ûÿÿ ÿéôÑ&.9.7ÿÿ ÿéîÑ&„¹ÿÿ ÿéõÏ&„4Ýÿÿ ÿéðÑ&(Fÿÿ ÿèôÏ&,Ö.7ÿÿ ÿéôÑ&'·.7ÿÿ ÿéôÏ&„'àÿÿ ÿçóÏ&+ÿÿ ÿéöÑ&%Øÿÿ ÿçîÐ&4Þÿÿ ÿéóÑ&(G.7ÿÿ ÿçõÐ&&ÏÐÿÿ ÿéòÏ&..7ÿÿ ÿèôÏ&„/.ÿÿ ÿéõÑ&$4ßÿÿ ÿéõÐ&&)ñ4àÿÿ ÿèöÑ&,y.7ÿÿ ÿèöÐ&„(HÿÿÿéôÐ&Í&#\+ÿÿ ÿéöÐ&Í0 ÿÿÿéöÏ&Í4áÿÿ ÿèôÐ&&Þ4âÿÿ ÿéôÏ&#~ÿÿ ÿéòÏ&,¦.7ÿÿ ÿéõÒ&~.7ÿÿ ÿéóÏ&+ÿÿ ÿéõÑ&„#€ÿÿ ÿéöÏ&%+ÿÿÿéõÏ&j4ãÿÿ ÿéíÏ&:ÿÿ ÿçõÑ&'º.7ÿÿ ÿéóÏ&„'vÿÿ ÿéöÏ&.7ÿÿ ÿçõÏ&4äÿÿÿèôÑ&k&#x4åÿÿ ÿæïÏ&,(.7ÿÿ ÿèõÏ&Ô.7ÿÿ ÿéóÐ&&÷4æÿÿ ÿèïÏ&(I.7ÿÿÿèôÓ&(J4çÿÿ ÿéëÐ&&&®(Lÿÿ ÿéîÏ&.7&0b4èÿÿ ÿçôÏ&(Kÿÿ ÿéóÏ&%íÿÿ ÿéîÏ&„/!ÿÿ ÿèôÏ&(Mÿÿ ÿèõÐ&&4éÿÿ ÿèôÏ&<.7ÿÿ ÿèôÐ&&Þ4êÿÿ ÿèõÐ&&.74ëÿÿ ÿçòÏ&%â.7ÿÿ ÿéöÑ&/Ž.7ÿÿ ÿéóÒ&„%æÿÿ ÿèõÐ&ì.7ÿÿ ÿéöÏ&%.7ÿÿ ÿéòÏ&„#îÿÿ ÿéóÐ&'¾ÿÿ ÿèõÏ&'}.7ÿÿ ÿéôÐ&ê&,§ÿÿ ÿéóÏ&„'ÿÿ ÿéòÏ&„ÿÿ ÿèõÐ&&4ìÿÿ ÿèõÏ&(N.7ÿÿ ÿèöÏ&,¨„ÿÿ ÿéôÐ&(Oÿÿ ÿéöÐ&ëÿÿ ÿèôÐ&//ÿÿ ÿéõÏ&'¿.7ÿÿ ÿéõÏ&.7,×ÿÿ ÿèôÏ&’ÿÿ ÿéõÑ&&,Ù ÿÿ ÿéóÐ&&¤ÿÿ ÿéõÐ&!ä&4íÿÿ ÿéòÐ&%..7ÿÿ ÿéóÐ&&4îÿÿ ÿèôÐ&,).7ÿÿ ÿéòÏ&.:.7ÿÿ ÿèóÑ&.74ïÿÿ ÿéõÐ&&Þ4ðÿÿ ÿéôÑ&/".7ÿÿ ÿèõÐ&&.74ñÿÿ ÿé÷Ï&.74òÿÿ ÿé÷Ñ&&Ã.7ÿÿ ÿèõÐ&4óÿÿ ÿéóÐ&/ÿÿ ÿéðÐ&0¶ÿÿ ÿçôÏ&„-Oÿÿ ÿéòÐ&,©.7ÿÿ ÿéóÒ&´.7ÿÿ ÿéôÏ&'Ä.7ÿÿ ÿéñÏ&'.7ÿÿÿèôÍ&k&#x4ôÿÿ ÿéðÏ&'.7ÿÿ ÿé÷Ï&ö.7ÿÿ ÿéôÐ&Í,ªÿÿ ÿéóÐ&&÷4õÿÿ ÿéõÏ&„¤ÿÿ ÿéõÏ&/#.7ÿÿ ÿéòÐ&.70¦ÿÿ ÿéðÏ&,†„ÿÿ ÿéòÐ&.Óÿÿ ÿéôÐ&Í.ÿÿ ÿèöÑ&'….7ÿÿ ÿèôÏ&-.7ÿÿ ÿéöÏ&/Þ.7ÿÿ ÿèõÐ&&4öÿÿ ÿçøÒ&Õ.7ÿÿ ÿéñÏ&(P.7ÿÿ ÿéóÏ&Êÿÿ ÿéòÏ&0Ã.7ÿÿÿéòÐ&Â8ÿÿÿéôÑ&Í4÷ÿÿ ÿé÷Ð&.;ÿÿ ÿéöÐ&.<4øÿÿ ÿèôÐ&$à&$áÿÿ ÿéðÏ&„%óÿÿ ÿèôÐ&/Dÿÿ ÿéóÐ&&‡4ùÿÿ ÿéôÏ&„'ÿÿ ÿçôÑ&(Q.7ÿÿ ÿéôÒ&Q.7ÿÿ ÿèïÐ&&ô4úÿÿ ÿéôÐ&4ûÿÿ ÿéöÏ&.74üÿÿ ÿèôÒ&%.7ÿÿ ÿéòÑ&.74ýÿÿ ÿçñÐ&& ©4þÿÿ ÿç÷Ò&(R.7ÿÿ ÿèôÐ&/£ÿÿ ÿçõÐ&4ÿÿÿ ÿéöÒ&)ø.7ÿÿ ÿèóÐ&@ÿÿ ÿçõÏ&.70”ÿÿ ÿéõÑ&&Þ5ÿÿ ÿèõÑ&(.7ÿÿ ÿéôÐ&.75ÿÿ ÿéòÐ&)÷.7ÿÿ ÿèóÐ&?&=.7ÿÿ ÿèóÐ&>&¡.7ÿÿ ÿèòÐ&)0.7ÿÿ ÿèñÏ&,À.7ÿÿ ÿèïÏ&.75ÿÿ ÿèöÐ&5ÿÿ ÿéøÑ&û.7ÿÿ ÿéöÐ&H.7ÿÿ ÿèöÐ&.75ÿÿ ÿçôÐ&0ÿÿ ÿéöÑ&5ÿÿ ÿéíÏ&£.7ÿÿ ÿé÷Ð&;ÿÿ ÿèòÏ&,}.7ÿÿ ÿéôÑ&.75ÿÿ ÿéñÑ&%÷.7ÿÿ ÿèòÑ&(Sÿÿ ÿçöÐ&5ÿÿ ÿéîÏ&.75 ÿÿ ÿéóÏ&(T.7ÿÿ ÿéõÐ&.75 ÿÿ ÿéòÐ&&.,5 ÿÿ ÿçõÐ&‡.7ÿÿ ÿèôÓ&…#xÿÿ ÿéòÐ&&.,5 ÿÿ ÿèôÐ&.75 ÿÿ ÿéóÐ&&Öÿÿ ÿçñÑ&%ø.7ÿÿ ÿéôÒ&.Aÿÿ ÿéðÐ&Ãÿÿ ÿæóÐ&.=ÿÿ ÿéòÐ&.75ÿÿ ÿèïÐ&1ÿÿÿèõÏ&(U(Vÿÿ ÿéóÏ&«5ÿÿÿèõÏ&Bÿÿ ÿèôÏ&)ÿÿ ÿèõÏ&AÿÿÿèõÏ&ÿÿ ÿèõÐ&Æ(Wÿÿ ÿèõÏ&,­Pÿÿ ÿèõÏ&Q-ÿÿ ÿèõÏ&(X-ÿÿÿéöÏ&NÿÿÿèôÏ&çOÿÿ ÿèôÏ&+‘ÿÿ ÿéöÑ&äÿÿ ÿèôÏ&oÿÿ ÿèôÏ&•ÿÿ ÿéóÎ&+?.Bÿÿ ÿèôÏ&nÿÿ ÿéöÐ&LÿÿÿèõÏ&-5ÿÿ ÿèôÐ&+çÿÿ ÿèõÐ&T-ÿÿ ÿèõÏ&a-ÿÿ ÿèôÏ&ç(Yÿÿ ÿèõÏ&- °ÿÿ ÿèõÏ&-ÿÿ ÿèôÏ&ÿÿ ÿèõÏ&-,=ÿÿ ÿèõÐ&,«-ÿÿ ÿèõÐ&,¬,­ÿÿ ÿèôÑ& çÿÿÿèôÏ&”æÿÿÿèôÏ&÷æÿÿ ÿèõÏ&-5ÿÿ ÿèõÏ&.C-ÿÿ ÿéöÏ&|ÿÿÿçõÏ&âãÿÿÿèõÒ&(Z-ÿÿÿéóÐ&$(Vÿÿ ÿèõÐ&-([ÿÿ ÿèôÏ& Úçÿÿ ÿçõÐ&-5ÿÿ ÿèôÏ&ç5ÿÿ ÿèôÏ&ç"ÿÿÿéóÐ&#$ÿÿÿèõÏ&-5ÿÿÿèóÐ&% $ÿÿÿèôÏ&æ(\ÿÿ ÿíóÐ&*5ÿÿÿèôÑ&æ(]ÿÿÿèõÐ&&ÿÿÿèôÑ&ç5ÿÿ ÿçôÏ&(ÄæÿÿÿèôÏ&ç5ÿÿÿéóÐ&$™ÿÿ ÿéóÐ&$(ÿÿ ÿèôÑ&æ,¯ÿÿ ÿèôÏ&,®æÿÿ ÿéóÎ&+?+„ÿÿ ÿèôÏ&,°æÿÿÿèôÑ&æ0äÿÿÿçôÑ&ûûÿÿ ÿêôÒ&/5ÿÿ ÿèõÐ&'&(&ÿÿ ÿéöÐ&5Áÿÿ ÿèöÐ&Á5ÿÿ ÿéöÐ&ÂÁÿÿ ÿéõÐ&¢)ÿÿ ÿèöÐ&Á5ÿÿ ÿèôÐ&ÿÿ ÿêôÏ&&øÿÿ ÿèïÐ&¢0¹ÿÿÿçíÑ&“”ÿÿ ÿçöÐ&&,²5 ÿÿÿéíÍ&“–ÿÿ ÿìõÑ&—5!ÿÿ ÿèøÏ&M•ÿÿ ÿèöÐ&BCÿÿ ÿéøÐ&LMÿÿÿéðÉ&&W,³ÿÿÿèöÐ&C,±ÿÿ ÿéöÏ&C]ÿÿ ÿéöÏ&$3Cÿÿ ÿèöÐ&´¥ÿÿ ÿéøÏ&M+šÿÿÿéõÏ&,Ã5$ÿÿ ÿéòÏ&K0­ÿÿ ÿêóÎ&¸}ÿÿ ÿêóÊ&»!rÿÿ ÿéóÏ& Í}ÿÿÿêóÏ&(Ã}ÿÿ ÿêóÏ&(Â}ÿÿ ÿèóÏ&}±ÿÿ ÿéóÑ&|}ÿÿ ÿêóË&}5%ÿÿ ÿêóÎ&}%ÿÿ ÿéðÍ& Ç#7ÿÿÿèôË&Þ5&ÿÿ ÿèôÌ&Þ/$ÿÿ ÿé÷Ï&w&§¹ÿÿ ÿéôÐ&w&º5'ÿÿ ÿéöÏ&y,éÿÿ ÿéôÏ&w&§5(ÿÿ ÿèòÏ&&y5)ÿÿ ÿèõÏ&y&5*ÿÿ ÿéóÏ&y&5+ÿÿ ÿéõÏ&yxÿÿ ÿèïÐ&y5,ÿÿ ÿèöÏ&w0mÿÿ ÿéôÏ&w&ÿÿ ÿéöÏ&]&yÿÿ ÿéóÐ&y&=5-ÿÿ ÿèõÏ&y&5.ÿÿ ÿçóÏ&D&yÿÿ ÿéõÐ&<&w=ÿÿ ÿéòÏ&y&5/ÿÿ ÿèòÏ&y&­50ÿÿ ÿçõÏ&y&­51ÿÿ ÿéòÏ&yüÿÿ ÿé÷Ñ&y&.E52ÿÿ ÿéõÑ&y&.E53ÿÿ ÿèõÑ&!©&.E54ÿÿ ÿèöÐ&!©55ÿÿ ÿèóÎ&!©56ÿÿÿçöÄ&U59ÿÿÿêöÐ&.F5:ÿÿ"ÿéèÃ&(¬5<ÿÿ ÿéçÏ&[5=ÿÿ ÿéõÏ& ¯Hÿÿ ÿéõÏ&òñÿÿ ÿèõÇ&IóÿÿÿéóÄ&V¨ÿÿÿéðÇ&ILÿÿ ÿéòÆ&KJÿÿÿéìÎ&Y–ÿÿÿéðÀ&lTÿÿ ÿè߯&)ÜJÿÿÿêòÏ&(–ÿÿÿêóÐ&¿0ªÿÿÿóôÂ&wVÿÿ ÿèôÆ&JÿÿÿéõÍ&TRÿÿÿìøÏ&V#ÿÿÿéòÏ&¬TÿÿÿêìÐ&*ÙVÿÿÿççÇ&I5>ÿÿ ÿéðÇ&w&ÿvÿÿÿèõÏ&‘0ªÿÿÿèóÆ&R…ÿÿ*ÿëïÇ&I3ÿÿÿêïÇ&¨§ÿÿÿêëÏ&0ª(ÁÿÿÿèòÏ&0ª0«ÿÿ ÿçôÇ&wªÿÿ ÿéõÃ&«òÿÿÿéáÇ&I(ÀÿÿÿéíÂ&ô–ÿÿÿéëÉ&%“%’ÿÿÿèìÐ&%”ÿÿÿéôÎ&TÚÿÿÿèöÑ&ÓTÿÿÿìðÏ&{VÿÿÿéñÏ&ò5?ÿÿÿéñÍ&ñRÿÿÿèîÇ&I5@ÿÿÿçñÇ&¨5AÿÿÿéòÏ&“5BÿÿÿéôÂ&T%ËÿÿÿêöÏ&R0®ÿÿÿéóÏ&VÔÿÿÿééÏ&TµÿÿÿçõÏ&DYÿÿ ÿéôÇ& ƒ&¨5Cÿÿÿé÷Ï&RSÿÿÿéóÐ&UTÿÿÿêëÐ&VWÿÿÿéêÄ&Tjÿÿ ÿéìÇ& €&¨5Dÿÿ ÿïóÇ&|wÿÿÿðòÇ&I,µÿÿÿéòÏ&D0°ÿÿÿèõÏ&R+0ÿÿÿçåÇ&¨,¶ÿÿÿêðÇ&RÃÿÿ ÿé÷Ñ&MNÿÿÿéõÐ&/&* ÿÿÿèðÈ&,· ÿÿ ÿçêÇ&¨&  €ÿÿ ÿîöÅ&æ0hÿÿÿõòÆ&J5EÿÿÿêõÏ&RÿÿÿéôÇ&*IÿÿÿéóÐ&TKÿÿ ÿéñÇ&ëwÿÿÿé÷Ï&R+ÿÿÿòõÅ&TÔÿÿÿéõÐ&Tóÿÿ ÿèóÇ&%”5FÿÿÿðóÄ&TÕÿÿÿéðÇ&ò5GÿÿÿèíÒ&¾VÿÿÿèîÈ& ½ÿÿÿèãÇ&¨¼ÿÿÿéóÇ&VÖÿÿÿëôÏ&RÿÿÿéôÐ&UVÿÿÿéíÉ&«ªÿÿÿéóÊ&T¬ÿÿÿé÷Ñ&V,ÍÿÿÿçõÑ&R ÿÿÿêøÑ& RÿÿÿéñÆ&TòÿÿÿééÉ&ª,¸ÿÿÿéòÐ&D*ÿÿ ÿçöÇ&¨<ÿÿÿéðÒ&0íVÿÿÿéñÏ&0eòÿÿÿéóÅ&VŠÿÿÿçõÑ&RŽÿÿÿéõÐ&RƒÿÿÿêóÍ&ETÿÿ ÿçôÈ& 5HÿÿÿêõÐ&R,ÂÿÿÿçôÏ&ªDÿÿÿéòÏ&V YÿÿÿéóÏ&V1ÿÿ ÿéóÉ&ª5IÿÿÿéóÏ&G&'`5JÿÿÿèôÏ&ÛTÿÿÿçöÏ&R _ÿÿ ÿéïÎ&òÜÿÿÿéóÏ&V(=ÿÿÿéëÇ&I5Kÿÿ ÿéôÉ&ª5Lÿÿ ÿèòÇ&¨5MÿÿÿéìÇ&Rÿÿ ÿéçÓ&ò5NÿÿÿìöÏ&D'eÿÿÿéöÏ&R"HÿÿÿëôÏ&RZÿÿÿéóÏ&D&f,¹ÿÿÿèóÎ&R%ÖÿÿÿéñÐ& :“ÿÿ ÿèòÇ&¨ NÿÿÿîòÏ&V"ÿÿÿéöÐ&,º&ç,êÿÿÿéöÄ&G Œÿÿ ÿéòË&ä,»ÿÿÿéóÇ&V!ÿÿÿèõÈ&TxÿÿÿéòÏ&“5OÿÿÿéõÍ&/&"zÿÿÿéðÈ&V’ÿÿÿè÷Ï&!ßRÿÿÿéòÐ&V"öÿÿÿéóÏ&V"¶ÿÿÿéõÏ&R:ÿÿÿèòÌ&RŸÿÿÿéóÑ&VXÿÿÿçõÉ&YVÿÿÿéöÎ&V"YÿÿÿèóÇ& áVÿÿÿîòÏ&LDÿÿÿéóË&%äÿÿÿéõÏ&D*oÿÿÿçõÏ&"!0ÿÿ ÿèòÇ&s5PÿÿÿéóÏ&/&/ÿÿÿîóË&,¼5QÿÿÿéöÏ&G+!ÿÿÿéòÏ& ÞDÿÿ ÿéòÐ&“0øÿÿ ÿêõÏ&l5RÿÿÿèôÏ&%*VÿÿÿêöÐ&,½EÿÿÿîóÊ&G$÷ÿÿÿéôÑ&VnÿÿÿêòÏ&D/Sÿÿÿê÷Ð&°GÿÿÿéóÏ&D+ÿÿÿéôÏ&D'ãÿÿ ÿëôÌ&u5SÿÿÿéòÈ&DÿÿÿéóÉ&D)PÿÿÿéôÏ&“9ÿÿÿéôÎ&D%'ÿÿÿèôÑ&G&,5TÿÿÿéõÏ&VšÿÿÿîïÏ&G2ÿÿÿîóÓ&,¼5UÿÿÿéóÏ&G†ÿÿ ÿèïÇ&s5VÿÿÿæòË&äãÿÿÿíóÐ&D'¾ÿÿÿèôÎ&G<ÿÿÿèôÐ&G,¾ÿÿÿéóÉ&D'ÿÿÿïêÌ&Ê5WÿÿÿèñÈ& 5XÿÿÿèõÐ&G&5YÿÿÿèôÏ&G'ŠÿÿÿéðÊ&D%óÿÿÿçôÇ&R€ÿÿÿéñÏ&GFÿÿÿèõÐ&V¢ÿÿÿéóÊ&GÊÿÿÿéõÈ&G%cÿÿÿéòÉ&,¿RÿÿÿèôÒ&%‚/&ÿÿÿçôÐ&G+(ÿÿÿèñÈ&G,ÀÿÿÿèôÏ&G%öÿÿÿéöÐ&HGÿÿÿéóÒ&@-ñÿÿÿêóÌ&G*lÿÿÿçñÑ&G%øÿÿÿéóË&.G,ºÿÿÿéäÐ&ò5\ÿÿ ÿéêÇ&w5]ÿÿ ÿéóÏ&“5^ÿÿÿéïÐ&“5_ÿÿ ÿéóÇ&w×ÿÿÿèðÉ&ª& 5`ÿÿÿéàÏ&ò5aÿÿÿèàÒ&%”5bÿÿÿéóÏ&ò5cÿÿ ÿéóÈ&  ÿÿ ÿéóÇ&“5dÿÿÿéöÏ&"ÛÿÿÿéðÐ&,Á’ÿÿ ÿéôÉ&õ çÿÿ ÿéôÉ&14ÿÿ ÿçõÏ&Yÿÿ ÿéëÏ&õ´ÿÿ ÿéìÐ&30ÿÿÿ ÿèìÎ&õ|ÿÿ ÿé÷Ì&3Eÿÿ ÿéöÎ&õØÿÿ ÿèõÐ&õLÿÿÿèêÏ&I ÿÿ ÿçõÑ&3 ÿÿÿïðÑ&-(5fÿÿ ÿèêÏ& Iÿÿ ÿèêÏ&°±ÿÿ ÿèõÏ&!àÿÿ ÿéöË&3#ÍÿÿÿïðÊ&-(&Ì5hÿÿ ÿèóÏ&-Nÿÿ ÿèñÏ&(ÿÿÿèöÐ&HÄÿÿ ÿéòÏ&ÿ2ÿÿÿèöÏ&¸iÿÿ ÿéëÏ&ÿúÿÿ ÿèôÈ&ÙÿÿÿéèÏ&Ò¸ÿÿ ÿéíÏ&îÿÿ ÿéôÏ&º&ÿÿÿéõÏ&¸¹ÿÿ ÿéßÏ&˜ÿÿ ÿéóÏ&MÿÿÿéîÏ&¸*ÿÿÿéóÏ&ѸÿÿÿêîÑ&Ûÿÿ ÿè÷Ï&ºkÿÿ ÿêõÏ&ñôÿÿÿçõÏ&¸ÓÿÿÿéðÏ&¸ÂÿÿÿéóÏ&¸&ÿÿÿéðÏ&¸ÿÿÿèõÏ&¸šÿÿ ÿéõÏ&õÿÿ ÿèöÏ&º‚ÿÿÿéõÏ&¸³ÿÿ ÿéôÏ&oÿÿ ÿéóÐ&~5ÿÿ ÿéõÏ&ÿÿ ÿéòÏ&ÿÿ ÿéòÏ&º(ÿÿÿéìÏ&¸Yÿÿ ÿé÷Ï&ºÿÿ ÿéôÏ&º( ÿÿ ÿèôÏ&”+ÃÿÿÿéóÏ&¸ÿÿ ÿéòÏ&ºÿÿÿéõÏ&¸yÿÿÿéöÏ&¸ÿÿÿé÷Ï&¸ÿÿÿéóÏ&¸ÈÿÿÿêóÑ&Vôÿÿ ÿñõÏ&ÿÿ ÿéêÏ&¾ºÿÿÿèóÏ&¸+ÅÿÿÿéõÏ&+ĸÿÿÿéíÏ&¸%9ÿÿÿèïÏ&;¸ÿÿ ÿèôÏ&º(/ÿÿÿéöÏ&Þ¸ÿÿ ÿéòÐ&º±ÿÿ ÿéóÏ&º ÿÿ ÿêôÏ&+ÆLÿÿ ÿèôÆ&JÙÿÿ ÿéõÏ&)ÕòÿÿÿéõÑ&¸²ÿÿ ÿéòÏ&¬ÿÿ ÿéòÏ&ººÿÿ ÿéõÏ&ºõÿÿ ÿéðÏ&+"ºÿÿ ÿéñÏ&º&ú/Õÿÿ ÿéõÏ&/ºÿÿÿéóÏ&¸1ÿÿ ÿéñÏ&º8ÿÿÿéóÐ&&¸ÿÿ ÿéòÏ&º&yÿÿ ÿéóÏ&ºÀÿÿ ÿéóÏ&º‰ÿÿ ÿéìÐ&º*ÙÿÿÿéìÏ&¸Òÿÿ ÿéôÏ&ºÿÿ ÿéõÏ&nºÿÿ ÿéõÏ&º,ÿÿ ÿéôÏ&ºwÿÿ ÿèòÏ&º0«ÿÿÿéôÏ&¸Úÿÿ ÿéóÏ&º!sÿÿ ÿéöÏ&/ ÿÿ ÿéòÏ& 5nÿÿÿéóÏ&¸!rÿÿÿéôÏ&¸)ÖÿÿÿéñÏ&¸)×ÿÿÿéõÏ&¸‘ÿÿ ÿèöÑ&ÓºÿÿÿèôÏ&¸!ÿÿ ÿéõÏ&…ÿÿ ÿèíÏ&º£ÿÿ ÿèòÏ&º0$ÿÿÿèõÏ&¸ÿÿ ÿèõÏ&ÿÿ ÿèöÏ&ºŸÿÿ ÿçõÏ&º!vÿÿÿéöÏ&¸iÿÿ ÿéñÏ&©ÿÿ ÿéôÏ&º…ÿÿ ÿèöÏ&‰5oÿÿ ÿèñÏ&ºÀÿÿÿéëÏ&¸(Áÿÿ ÿæõÏ&º)IÿÿÿèõÏ&¸ÿÿÿåñÐ&~šÿÿ ÿéóÏ&º,$ÿÿ ÿçöÏ&+dÿÿ ÿêßÒ&°5pÿÿ ÿéõÏ&ºÿÿ ÿéóÏ&ºÿÿ ÿéóÏ&ºÿÿ ÿèóÏ&èlÿÿÿçôÏ&¸%Ìÿÿ ÿéíÏ&º.Hÿÿ ÿéóÏ&&ÿÿ ÿèôÐ&”0Œÿÿ ÿéìÏ& Îÿÿ ÿéëÐ&Wºÿÿ ÿéôÐ&øÿÿÿéõÏ&k¸ÿÿ ÿéóÏ&ºQÿÿ ÿéðÏ&º5qÿÿ ÿèóÏ&ºÿÿ ÿéóÏ&ºÂÿÿ ÿéöÏ&,éÿÿ ÿçõÏ&Yÿÿ ÿéôÏ&%Ëÿÿ ÿéðÏ&ºÃÿÿÿéóÐ&¸)vÿÿÿèóÏ&¸ÿÿÿéôÏ&¸+ÿÿ ÿéõÏ&!ÿÿ ÿèôÑ&Ù¨ÿÿ ÿéêÏ&(oÿÿ ÿéöÏ&%! ÿÿ ÿéóÏ&º&/Õÿÿ ÿéèÐ&º%žÿÿ ÿèóÐ&è5rÿÿ ÿéóÏ&º™ÿÿ ÿèôÎ&”&˜—ÿÿ ÿèôÐ&•&–”ÿÿ ÿèóÉ&è5sÿÿ ÿéñÏ& Ãÿÿ ÿèìÏ&º&ÿÿ ÿéëÏ&º»ÿÿ ÿéìÏ&!wÿÿ ÿéóÏ&ºÁÿÿ ÿçóÏ&º'£ÿÿÿéóÐ&¸Uÿÿ ÿèòÏ&º&ÿÿÿéòÏ&¸Sÿÿ ÿèôÏ&º”ÿÿ ÿèõÏ&+ºÿÿ ÿéòÏ&ÝÿÿÿññÐ&,Æ~ÿÿ ÿéöÏ&ºÁÿÿ ÿè÷Ï&ºñÿÿ ÿéîÏ& &õ5tÿÿ ÿéïÐ& &!o òÿÿÿéòÏ&0°0²ÿÿ ÿçòÐ&ºPÿÿ ÿééÏ&ºµÿÿ ÿéóÏ&º¶ÿÿÿèñÐ&~4ÿÿ ÿéóÏ&º'Ëÿÿ ÿé÷Ï&ºÿÿ ÿéïÏ& /¶ÿÿ ÿèôÏ&,%”ÿÿÿéõÏ&¡0²ÿÿ ÿéíÏ&º0òÿÿ ÿéõÏ&3ºÿÿ ÿéòÏ&º0jÿÿ ÿéíÏ&º,ÇÿÿÿîòÐ&~5uÿÿ ÿéóÏ&º'ÿÿ ÿéòÏ&ººÿÿ ÿéôÏ&‰ÿÿ ÿèñÏ&º,&ÿÿ ÿéôÏ&º5vÿÿ ÿéïÐ&h&[5wÿÿ ÿèôÏ& Øÿÿ ÿæñÏ&5xÿÿÿèòÑ&.Ï5yÿÿÿèòÏ&0²0´ÿÿ ÿèôÏ&º)€ÿÿ ÿèõÏ&»ÿÿ ÿèðÏ&º5zÿÿ ÿéóÏ&'¦ÿÿ ÿéóÏ&º)ÿÿ ÿéòÏ&º(Êÿÿ ÿéõÏ&º ÿÿ ÿéòÏ&º5{ÿÿÿéóÏ&&0²5|ÿÿ ÿéíÑ&ºŸÿÿ ÿéöÑ&“ÿÿ ÿèóÏ&è&ÿÿ ÿéóÏ&Öÿÿ ÿèîÏ&ºÿÿ ÿèöÏ& Öÿÿ ÿéõÏ&Šºÿÿ ÿéóÏ&xºÿÿ ÿèôÈ&Ùçÿÿ ÿéóÐ&ãºÿÿ ÿèôÐ&>&=èÿÿ ÿèõÏ&º©ÿÿ ÿéóÏ&ºÿÿ ÿèôÏ&” ÿÿ ÿéìÏ&,Èhÿÿ ÿéòÏ& ÿÿÿéïÏ&,0²ÿÿ ÿéöÏ& –ÿÿ ÿéôÏ&Qÿÿ ÿéòÏ&ºÅÿÿÿéòÏ&¸0ÿÿ ÿéòÏ&{ºÿÿ ÿèïÏ&1ºÿÿ ÿéóÏ& ÿÿ ÿéòÏ&ºXÿÿ ÿèõÏ&5}ÿÿ ÿèïÏ&h&¦ ÿÿ ÿéóÏ&º¹ÿÿ ÿéôÐ&7ºÿÿ ÿéöÏ&$ÿÿÿéðÏ&¸ÿÿ ÿéõÏ& ºÿÿ ÿéõÐ&ºÿÿ ÿèôÏ&”ðÿÿ ÿèôÏ&Ø”ÿÿÿéóÏ&Ø&Ù0²ÿÿ ÿéóÏ&ºÿÿ ÿé÷Ï& Bÿÿ ÿé÷Ï&+ÿÿ ÿéõÑ&Žÿÿ ÿéóÏ&ÿÿ ÿèóÏ&Zèÿÿ ÿèóÏ&º0½ÿÿ ÿéõÐ&úòÿÿ ÿè÷Ï&)ÿÿ ÿèóÏ&è5ÿÿ ÿéõÐ&óÿÿ ÿéóÏ&ºÕÿÿÿèñÏ&Ä&&e0²ÿÿ ÿéîÏ& .ÿÿ ÿèôË&Ø5€ÿÿ ÿèôÍ&×Ùÿÿ ÿéõÏ&ºÿÿÿ ÿéòÏ&0ÕÿÿÿéìÏ&¸Òÿÿ ÿèòÐ&Öÿÿ ÿéóÏ& -ÿÿ ÿéóÏ&hÙÿÿ ÿéôÒ&ÿÿ ÿéñÏ&àÿÿ ÿèõÏ&¼ÿÿ ÿåðÏ&º£ÿÿ ÿéíÏ&ºéÿÿ ÿéôÏ&º,”ÿÿ ÿèöÏ& áÿÿ ÿéôÐ& Uÿÿ ÿèóÏ&Vÿÿ ÿèóÏ&è5ÿÿ ÿéóÑ&ºÔÿÿ ÿéöÏ&&`_ÿÿ ÿè÷Ï&º'Óÿÿ ÿéóÏ&,ɺÿÿ ÿéòÏ& 0@ÿÿÿéòÏ&¸©ÿÿ ÿéóÏ&º,Êÿÿ ÿéóÐ&º³ÿÿ ÿèñÏ&Žÿÿ ÿèíÏ& '©ÿÿ ÿéíÏ&?ÿÿ ÿéòÐ&*ÿÿÿèõÐ&¸Lÿÿ ÿéôÏ& %$ÿÿÿéòÐ&ç5‚ÿÿÿîòÐ&ç5ƒÿÿ ÿéòÏ&*Çÿÿ ÿéôÏ&º/ÿÿ ÿéùÏ&0ºÿÿ ÿèôÐ&•&(”ÿÿ ÿéóÏ&(5ÿÿ ÿéôÏ& %=ÿÿ ÿéõÐ& „ÿÿÿçñÏ&&e&0²5„ÿÿ ÿæðÏ&ºÎÿÿ ÿèôÏ&,Ì& 5…ÿÿ ÿèóÏ&è0fÿÿÿééÏ&¸ÿÿ ÿéöÐ&(lÿÿ ÿéñÏ&º&­¬ÿÿ ÿéóÏ&ºEÿÿ ÿéóÏ&ÿÿ ÿèöÏ& &K%Ãÿÿ ÿé÷Ñ&,Íÿÿ ÿéóÏ&*ºÿÿ ÿéóÏ& îÿÿ ÿèôÏ&ºéÿÿ ÿæ÷Ï&(¿ÿÿÿèñÏ&&&e5†ÿÿ ÿçõÏ& Øÿÿ ÿêõÐ&[&K5‡ÿÿÿéòÒ&ÊËÿÿ ÿèêÏ&ºÌÿÿ ÿéõÏ&º’ÿÿ ÿéêÐ&ºcÿÿ ÿèõÏ& /?ÿÿÿè÷Ï&0²5ˆÿÿ ÿèõÏ&b&c5‰ÿÿ ÿéóÏ& Šÿÿ ÿèôÏ&³&”5Šÿÿ ÿéóÏ&ºëÿÿÿéôÏ&¸õÿÿ ÿéöÏ&”ÿÿ ÿéóÏ&'ºÿÿ ÿçõÑ& ÿÿ ÿèñÏ&%Ϻÿÿ ÿèóÐ&ºŒÿÿ ÿéôÐ& .Kÿÿ ÿéîÏ&ßÿÿÿéôÐ&0²ÿÿ ÿèôÐ&º>ÿÿÿéõÏ&0²ÿÿ ÿéõÏ&b&c5‹ÿÿ ÿèóÏ&ºÓÿÿ ÿéóÏ&º%Òÿÿ ÿéõÏ&b&caÿÿ ÿéóÏ&+ÿÿ ÿéõÏ&)zºÿÿ ÿçöÏ&º5Œÿÿ ÿèôÏ& /0ÿÿ ÿéóÏ&  ÿÿ ÿéöÏ&5Žÿÿ ÿéóÏ&º(=ÿÿ ÿèïÏ&ºwÿÿ ÿèöÏ&»ºÿÿ ÿéóÏ&º+Nÿÿ ÿéôÏ&º(mÿÿ ÿéóÏ&.Mÿÿ ÿéòÏ&ºÿÿ ÿèôÐ&”ÿÿ ÿéóÐ&º Oÿÿ ÿé÷Ï& (;ÿÿ ÿéòÐ&%Ðÿÿ ÿéôÐ&'Úºÿÿ ÿéõÑ& ýÿÿ ÿèõÏ&2ÿÿÿéõÐ&,Î,Ïÿÿ ÿéíÏ& Éÿÿ ÿè÷Ð& 5‘ÿÿ ÿéîÏ& èÿÿ ÿéîÏ&ìÿÿ ÿèõÒ& ÿÿ ÿèôÏ&ÖØÿÿ ÿéïÏ&%­ÿÿ ÿé÷Ï&Kÿÿ ÿéóÏ&%Óÿÿ ÿéóÑ& !ÿÿ ÿçõÓ&)@ÿÿ ÿèôÐ&#f&è5’ÿÿÿçìÏ&/10²ÿÿ ÿèôÏ&ºÛÿÿ ÿèöÏ& <ÿÿ ÿéõÐ&º%ªÿÿ ÿéöÐ&~&€ÿÿ ÿéõÑ&º ÿÿÿéòÏ&£0²ÿÿ ÿèôÏ&'Ø ÿÿ ÿäôÏ&àÿÿ ÿéöÏ& ׺ÿÿÿèôÏ&0²5“ÿÿ ÿéõÏ& /ÿÿ ÿéóÏ&'îÿÿ ÿéõÏ& .3ÿÿ ÿèóË&è5”ÿÿ ÿéòÏ&º Yÿÿ ÿèðÐ& iÿÿ ÿèôÏ&k&Ø5•ÿÿ ÿçõÏ&b&c+Ìÿÿ ÿèõÏ&.N5–ÿÿ ÿéöÏ&"Hÿÿ ÿéóÑ&"fÿÿ ÿéóÏ&,Ðÿÿ ÿéóÏ&º&Çÿÿ ÿéëÏ&¾ºÿÿÿçðÏ&¸ÿÿ ÿéîÏ&ºþÿÿ ÿèòÏ&.ÿÿ ÿéôÏ&ºYÿÿ ÿéóÐ&ɺÿÿ ÿéòÏ& rÿÿ ÿéôÐ& Ÿÿÿ ÿéòÏ&#jÿÿ ÿéñÏ&¼ºÿÿ ÿéôÏ&'¯ºÿÿÿéöÏ&.Uÿÿ ÿéøÏ&ü ÿÿ ÿéðÐ&º# ÿÿ ÿèõÏ&,Ñ&h5—ÿÿ ÿéôÑ&9 ÿÿ ÿéîÏ&º±ÿÿ ÿéîÏ& ïÿÿ ÿéöÏ& '­ÿÿ ÿéôÐ&  (ÿÿ ÿèöÏ&%«ÿÿ ÿèôÐ&Ø 4ÿÿÿéëÏ&0²&à(ÿÿ ÿéíÏ& Ñÿÿ ÿçõÏ&¨ÿÿ ÿéêÏ&º5˜ÿÿ ÿéìÐ&h&¿5™ÿÿ ÿéùÏ& .Pÿÿ ÿèõÒ&.Oÿÿ ÿéóÐ&  ÿÿ ÿéñÏ& ,£ÿÿÿéòÏ&~&}0²ÿÿ ÿèóÏ&ˆºÿÿÿèñÏ&&e&0²5šÿÿ ÿéóÐ& "÷ÿÿ ÿèóÏ&#;ÿÿÿèöÏ&#&˜0²ÿÿÿéöÏ& Œ0²ÿÿ ÿéöÏ& #ÎÿÿÿéöÐ&ß0²ÿÿ ÿéöÐ&h&ç,êÿÿ ÿéóÏ& ÙÿÿÿéñÏ&#É0²ÿÿÿéòÏ&/&5›ÿÿ ÿéõÏ& "îÿÿ ÿéöÏ& "Yÿÿ ÿéòÏ&.Xÿÿ ÿéôÐ& "¤ÿÿ ÿéôÏ&"hÿÿ ÿèïÐ&º0¹ÿÿ ÿéíÏ&5ºÿÿ ÿéñÏ&º$[ÿÿ ÿéñÏ&'ܺÿÿ ÿçõÏ&YÿÿÿèïÏ& ±& 0²ÿÿ ÿèòÏ& !æÿÿ ÿéóÏ&!ÿÿ ÿéõÐ&/ ÿÿÿéõÏ&"z0²ÿÿ ÿéöÏ&",ÿÿ ÿéõÏ&: ÿÿÿéôÏ&#ž0²ÿÿ ÿéñÏ&º)‚ÿÿÿéîÏ&/¸0²ÿÿ ÿéôÏ&0{hÿÿ ÿèóÏ&è&Ú5œÿÿÿèõÏ&,Ñ&0²5ÿÿ ÿéõÏ&c&b5žÿÿ ÿéóÏ&.Yºÿÿ ÿéîÏ&h&KJÿÿ ÿéõÏ& :ÿÿ ÿèôÏ&5Ÿÿÿ ÿéðÑ& /ƒÿÿ ÿéóÏ& "µÿÿÿéõÑ&ä0²ÿÿÿéôÐ&&0²ÿÿ ÿéëÏ& þÿÿ ÿèòÏ& Ÿÿÿ ÿéòÏ&"žÿÿ ÿèóÐ& gºÿÿ ÿèôÏ&q&"å ÿÿ ÿèõÏ&º°ÿÿ ÿäöÏ&ºýÿÿ ÿéðÏ&’ÿÿÿéóÏ&#­+ÿÿ ÿèòÏ&)hÿÿ ÿèõÐ&º,Òÿÿ ÿéöÏ& 01ÿÿ ÿé÷Ï&"cÿÿ ÿéïÑ&!Áÿÿ ÿéñÏ& ÿÿ ÿèóÒ& /Òÿÿ ÿéòÐ&º<ÿÿÿèöÏ&á&%Ã0²ÿÿÿéóÏ&30²ÿÿ ÿéõÏ&#Iÿÿ ÿéõÑ&º"±ÿÿ ÿèôÏ& #´ÿÿ ÿèóÐ&è5 ÿÿ ÿéôÐ&#XºÿÿÿéñÏ&#­%×ÿÿ ÿéóÐ&Hÿÿ ÿéõÏ&hœÿÿÿèïÏ&+#5¡ÿÿÿéóÐ&0–0²ÿÿ ÿéöÏ& ÿÿ ÿéòÏ&º!¿ÿÿ ÿéíÐ& &Õ5¢ÿÿÿéõÏ&!”0²ÿÿ ÿéïÏ&h&,'5£ÿÿ ÿèìÏ&º5¤ÿÿ ÿéóÏ& -éÿÿ ÿéóÏ&º$Íÿÿ ÿéõÏ&$uÿÿ ÿéóÐ&/†ÿÿÿèñÑ&0—0²ÿÿ ÿéöÏ& Nÿÿ ÿèôÎ&ÿ5¥ÿÿ ÿéðÏ&#w ÿÿ ÿèôÑ&Ø5¦ÿÿ ÿéõÏ&#CÿÿÿéòÏ&,Ó0²ÿÿ ÿèõÏ& $nÿÿ ÿéðÑ&$•ÿÿ ÿè÷Ï& Ëÿÿ ÿèóÏ& áºÿÿ ÿéôÏ& 'ßÿÿÿéòÏ&'m0²ÿÿ ÿéôÏ& .Dÿÿ ÿéöÏ&º$Oÿÿ ÿèøÏ&¦5§ÿÿ ÿéòÏ&/4ÿÿ ÿéîÏ& $‘ÿÿ ÿèôÐ& $ñÿÿ ÿéñÏ&ÿÿÿéóÐ&/60²ÿÿ ÿéóÏ&$Ⱥÿÿ ÿéóÐ& &/â5¨ÿÿ ÿèôÏ&”& ÿÿÿéóÐ&L&M0²ÿÿ ÿéóÏ&$Cºÿÿ ÿé÷Ñ&0± ÿÿ ÿéõÏ&ºÿÿÿæôÑ&0²5©ÿÿ ÿéñÏ& %ÿÿ ÿéöÐ&Vÿÿ ÿèôÐ&$ÿÿ ÿéðÏ&º$­ÿÿ ÿéóÏ&$›ÿÿ ÿéîÏ&$Tÿÿ ÿéõÏ&)iºÿÿ ÿèôÐ&ºÿÿ ÿéóÏ&Mºÿÿ ÿéòÏ&L ÿÿ ÿéòÐ& % ÿÿÿéöÏ&5ªÿÿ ÿèóÑ&¸&ºèÿÿ ÿèóÏ&$“ÿÿÿéóÏ&#¬#­ÿÿ ÿéóÑ& '¶ÿÿÿéóÏ&$„0²ÿÿ ÿèôÑ&¿&ÀØÿÿ ÿèôÐ& ,Åÿÿ ÿéôÐ& 0oÿÿÿèõÐ& 0²ÿÿ ÿéïÏ&+$ ÿÿ ÿèõÐ&ÿÿ ÿéôÑ&Œÿÿ ÿéôÏ&1ÿÿ ÿçöÐ& 5«ÿÿ ÿéõÐ&5¬ÿÿ ÿèôÏ&(‚ºÿÿ ÿéóÐ&$0ÿÿ ÿéñÐ&º#Âÿÿ ÿéøÑ& $õÿÿ ÿèòÐ&/Mÿÿ ÿéóÏ& &.-ÿÿ ÿéîÏ&%ÛÿÿÿéõÏ&Þ&0²5­ÿÿ ÿéòÏ& /Sÿÿ ÿèñÓ&(ƒÿÿ ÿèôÏ&Ø5®ÿÿÿèñÑ&&e&%ç0²ÿÿÿéóÏ&5¯ÿÿ ÿéóÏ& +ÿÿÿçõÏ&Ï&Ðÿÿ ÿéõÒ&h~ÿÿ ÿçõÑ&xÿÿ ÿéöÏ&4&º5°ÿÿ ÿèôÏ&h&’>ÿÿ ÿèôÐ&ØjÿÿÿéõÐ&/U0²ÿÿ ÿéîÏ&qhÿÿ ÿèöÏ&Ø5±ÿÿÿéøÏ&5²ÿÿ ÿèòÑ& 5³ÿÿÿèøÏ&,c&0²5´ÿÿ ÿèöÏ&Ø5µÿÿ ÿéóÏ&¡ ÿÿ ÿéôÏ& &žÿÿ ÿéòÏ& $þÿÿ ÿéîÑ&º¹ÿÿ ÿé÷Ð& /Yÿÿ ÿèôÑ&Ø5¶ÿÿÿéöÏ&&  ÿÿ ÿéöÐ&Ehÿÿ ÿéðÐ&º*¸ÿÿÿèõÐ&0³5·ÿÿÿèöÑ&,y0²ÿÿÿèôÐ&'¸0²ÿÿ ÿéôÏ& 5¸ÿÿÿéõÏ&Þ&0²5¹ÿÿ ÿèôÏ&,Õÿÿ ÿèõÐ& 'xÿÿ ÿéôÏ&º'àÿÿÿé÷Ï&,&0²5ºÿÿÿéõÑ&#}0²ÿÿ ÿçôÐ& 1ÿÿ ÿéõÑ& #€ÿÿ ÿçöÐ& &##‚ÿÿ ÿèöÑ&ã5»ÿÿ ÿéóÏ& #ÿÿ ÿéóÏ& ¦ÿÿ ÿéóÏ&º†ÿÿ ÿé÷Ï&ºÿÿ ÿèôÐ&/Z ÿÿ ÿéôÏ&#~ ÿÿ ÿéôÑ& nÿÿ ÿéòÏ& Þÿÿ ÿéöÏ&Nºÿÿ ÿéîÏ&ºÿÿ ÿç÷Ð&$Ýÿÿ ÿéõÏ&5¼ÿÿÿéôÐ&0²5½ÿÿ ÿéôÐ&h&(5¾ÿÿ ÿèôÏ&.ZÿÿÿéóÐ&ë0²ÿÿ ÿçòÏ& %âÿÿÿéõÏ&%Ú0²ÿÿ ÿèúÏ&&¼5¿ÿÿÿéñÐ&'¼0²ÿÿ ÿéïÏ&º4ÿÿÿæïÏ&,(0²ÿÿ ÿéôÏ& /[ÿÿ ÿéöÏ&F ÿÿ ÿéõÏ& %èÿÿÿéõÏ&,×0²ÿÿ ÿéóÐ& &¤ÿÿÿéóÐ&P&/â0²ÿÿÿéóÏ&†0²ÿÿ ÿçôÏ&hÄÿÿÿéôÏ&0²5Àÿÿ ÿéóÒ& %æÿÿÿé÷Ð&&%5Áÿÿ ÿéòÏ&ºÿÿ ÿéõÐ&h5Âÿÿ ÿéóÏ& 5Ãÿÿ ÿèõÐ&h&5ÄÿÿÿçöÏ&/^0²ÿÿÿèôÏ&<0²ÿÿ ÿéôÏ& %'ÿÿÿèõÏ&'}0²ÿÿÿéîÏ&0b&0²5Æÿÿ ÿéòÏ&ºüÿÿ ÿéóÐ&'âºÿÿ ÿéõÏ&á&àßÿÿ ÿéôÏ&'ãÿÿÿèñÏ&70²ÿÿ ÿèðÏ& .\ÿÿÿèõÑ&&%ç0²ÿÿ ÿéïÏ&.[ÿÿ ÿéôÐ& ,Øÿÿ ÿçìÏ& %êÿÿÿéöÏ&%0²ÿÿÿéòÏ&%à0²ÿÿ ÿèõÏ& Ôÿÿ ÿéóÏ&'ÿÿ ÿéóÐ&º ÿÿÿéõÑ&¼0²ÿÿÿéòÒ&0²5Çÿÿ ÿéôÐ& ÿÿÿéõÑ&&,Ù ÿÿÿèöÐ&Ø5Èÿÿ ÿèõÐ&&B5Éÿÿ ÿéóÏ&´ºÿÿ ÿéíÑ& '‚ÿÿ ÿèöÐ&'ÿÿ ÿéóÏ& 5Êÿÿ ÿèõÐ& ,Úÿÿ ÿå÷Ï& 5Ëÿÿ ÿéóÐ&/_ ÿÿÿèïÏ&(I0²ÿÿÿéòÏ&/a0²ÿÿ ÿéõÏ&šÿÿ ÿéöÏ&h&!.]ÿÿ ÿé÷Ð&W&h5ÌÿÿÿèîÏ&0²5ÍÿÿÿèôÐ&,)0²ÿÿÿé÷Ï&"ð&"ï0²ÿÿ ÿéøÏ&¡ÿÿ ÿéðÏ&(„ ÿÿ ÿéõÓ& Sÿÿ ÿé÷Ð& 'Åÿÿ ÿèõÐ&z&&B5Îÿÿ ÿèõÑ&h&5Ïÿÿ ÿéôÏ& (…ÿÿÿéðÏ&,Û0²ÿÿ ÿéóÏ& 5Ðÿÿ ÿéòÏ& .^ÿÿ ÿé÷Ñ&.£ÿÿÿéõÏ&._0²ÿÿÿéòÐ&0¦0²ÿÿ ÿéðÏ& 0µÿÿÿçúÏ&#ß5Ñÿÿ ÿéôÏ&h&)(ÿÿÿéðÏ&'0²ÿÿ ÿèôÍ&Ø&&5ÒÿÿÿéõÏ&Þ&!¦0²ÿÿ ÿèóÑ&è.ÿÿÿéõÏ&.0²ÿÿÿéõÏ&&Þ5ÓÿÿÿéõÔ&'‹0²ÿÿ ÿéóÏ&(‡hÿÿ ÿçóÏ&(†ºÿÿ ÿèôÒ&Ø5Ôÿÿ ÿéôÏ&Øÿÿ ÿéöÑ&&Ä ÿÿ ÿéõÏ&'ç ÿÿÿéõÐ&!œ&Þ0²ÿÿÿèôÐ&%ñ0²ÿÿ ÿèïÏ& &h5Õÿÿ ÿéõÑ&5Öÿÿ ÿèôÐ&(ˆÿÿ ÿé÷Ð& &ì5×ÿÿ ÿéõÏ& .`ÿÿÿéñÏ&F0²ÿÿÿé÷Ð&&EFÿÿÿéóÏ&%õ0²ÿÿ ÿéóÏ&(‰hÿÿ ÿçñÏ& ,+ÿÿ ÿéôÏ&'ÿÿÿéöÑ&0²5Øÿÿ ÿé÷Ï& üÿÿÿéôÒ&Q0²ÿÿÿèôÑ&5Ùÿÿ ÿéðÑ&h,*ÿÿÿéôÐ&P0²ÿÿ ÿéñÏ&0"ÿÿ ÿçôÐ&5ÚÿÿÿéóÏ&Ê0²ÿÿÿéòÏ&0²5ÛÿÿÿçøÒ&Õ0²ÿÿ ÿéóÏ&—&“hÿÿÿéöÐ&&ÿÿ ÿçóÑ& 5Üÿÿ ÿçõÏ&þÿÿ ÿèòÏ&%[ÿÿÿéõÏ&Þ&0²5ÝÿÿÿêñË&(%kÿÿ ÿéóÏ&h%hÿÿÿéöÒ&)ø0²ÿÿ ÿéóÏ&5ÞÿÿÿéîÏ&0b&0²5ßÿÿ ÿéöÏ& 5àÿÿ ÿéôÐ&ã&â5áÿÿ ÿçôÏ&  ÿÿÿéøÐ&–&"ñÿÿÿèóÐ&@ÿÿ ÿéõÐ& 5âÿÿ ÿèñÏ& 5ãÿÿÿçóÏ&&%…÷ÿÿÿéóÐ&0²5äÿÿÿéôÏ&0²5åÿÿ ÿéôÏ&h&25æÿÿÿéøÑ&û0²ÿÿ ÿè÷Ï&hRÿÿ ÿèôÑ&Ø5çÿÿ ÿéûÏ&h&,Ý5èÿÿ ÿéóÏ& ,ÜÿÿÿéøÐ&.b&5éÿÿ ÿèòÐ&.a ÿÿ ÿêôÐ&(5êÿÿÿéöÐ&H0²ÿÿÿèòÐ&)00²ÿÿÿé÷Ï&0²5ëÿÿ ÿèôÏ& 5ìÿÿ ÿéñÏ&h5íÿÿ ÿèòÏ&h,}ÿÿ ÿéõÏ&h+,ÿÿ ÿéñÑ& %÷ÿÿ ÿéóÏ& 5îÿÿ ÿèòÑ& 7ÿÿ ÿéíÏ&£hÿÿÿéùÐ&5ïÿÿÿéîÏ&0²5ðÿÿ ÿçòÏ&h5ñÿÿ ÿéóÏ& Oÿÿ ÿéòÏ& (ŠÿÿÿéöÏ&5òÿÿ ÿéóÏ&h.cÿÿ ÿéóÏ& *lÿÿÿçõÐ&‡0²ÿÿÿêóÒ&(-ñÿÿÿçñÑ&%ø0²ÿÿ ÿæóÐ&h.=ÿÿÿéóÐ&-ÿÿÿéðÏ&0²0åÿÿÿçôÏ&5óÿÿÿéôÑ&0²5ôÿÿÿéòÏ&0²5öÿÿÿéûÐ&&,Ý5÷ÿÿÿéõÑ&±°ÿÿ ÿéõÑ&²ÿÿ ÿéöÏ&´³ÿÿ ÿéöÏ&³µÿÿÿéõÑ&T²ÿÿÿéõÏ&·ƒÿÿ ÿéõÏ&¸áÿÿ ÿéõÐ&¹ƒÿÿÿéõÏ&báÿÿ ÿéõÏ&eƒÿÿ ÿéõÑ&äáÿÿ ÿéõÏ&áxÿÿÿéöÐ&%5øÿÿÿéõÏ&ƒ ÿÿÿéõÏ& ¯áÿÿ ÿéõÑ&,Þáÿÿ ÿéõÐ&(‹áÿÿÿéõÏ&(Vàÿÿ ÿèõÏ&±ƒÿÿÿçõÏ&áâÿÿ ÿèõÏ&à Ûÿÿ ÿéõÑ&¶ÿÿ ÿéõÏ&áºÿÿÿéõÏ&èƒÿÿ ÿéõÏ&á]ÿÿ ÿéõÏ&à‰ÿÿÿéõÏ&á!øÿÿ ÿéõÏ&à –ÿÿÿéöÑ&³!Åÿÿ ÿèõÏ&á(Œÿÿ ÿéöÏ&%#ŠÿÿÿéõÐ&,íàÿÿÿèõÏ&á% ÿÿ ÿèöÏ&$â%ÿÿ ÿéõÏ&$áÿÿÿçõÏ&à#ÿÿ ÿéõÏ&€áÿÿÿéõÏ&™áÿÿ ÿçöÑ&%,ßÿÿÿéôÐ&&Æ'=ÿÿÿéöÏ&%dÿÿ ÿèõÐ&à%‰ÿÿ ÿéõÏ&à(ÿÿ ÿéõÏ&á5ùÿÿÿéõÑ&à0ãÿÿ ÿéöÏ&%(Žÿÿ ÿéõÏ&á Íÿÿ ÿéöÏ&%,àÿÿ ÿèöÏ&%5úÿÿÿéöÏ&S%ÿÿ ÿèõÏ&(ÿÿ ÿéóÐ&*5ÿÿÿ ÿïóÄ&}|ÿÿ ÿéóÐ&(NÿÿÿéòÏ&,á6ÿÿ ÿçõÏ&,â6ÿÿ ÿêõÏ&,â6ÿÿ ÿèóÇ&s6ÿÿÿèôÌ& w0ÿÿ ÿèôÊ&A6ÿÿÿéôÏ&E6ÿÿ ÿåóÊ& ‘ÿÿ ÿåðÏ&g‘ÿÿ ÿåóÐ&‘(°ÿÿ ÿåõË&‘`ÿÿÿçõÇ&UVÿÿ ÿåõÆ&‘ÿÿÿêöÏ&%!1ÿÿÿéöÐ&³1ÿÿ ÿåòÐ&‘0öÿÿ ÿåòÏ&&‘ÿÿ ÿåôÏ&‘ÁÿÿÿêíÑ&Ÿ1ÿÿ ÿåöÏ&‘—ÿÿ ÿåõÏ&‘»ÿÿÿêòÄ&©1ÿÿ ÿåóÐ&‘³ÿÿÿèôÏ& Ù1ÿÿ ÿåòÏ&‘-±ÿÿ ÿåõÏ&(‘ÿÿ ÿåöÈ&‘ÿÿ ÿåðÏ&‘+Uÿÿ ÿå÷Ï&‘Lÿÿ ÿåõÐ&‘#¡ÿÿ ÿåòÎ&‘(‘ÿÿÿêöÏ&'ñ1ÿÿÿçõÓ&)@1ÿÿ ÿåôÏ&'ï‘ÿÿ ÿåôÎ&‘ÔÿÿÿêòÃ&(’1ÿÿ ÿåõÈ&‘$ÿÿ ÿåôÅ&‘Éÿÿ ÿåóÏ&$‘ÿÿÿèòÐ&/M1ÿÿÿéóÏ&01ÿÿÿêóÏ&#_1ÿÿÿéóÑ&(“1ÿÿÿêïÏ&.„1ÿÿ ÿåóÐ&‘ÿÿÿè÷Ï&?&61ÿÿÿêïÏ&41ÿÿÿéòÈ&1ÿÿÿêôÈ& 1ÿÿÿé÷Ñ&&Å1ÿÿÿçóÑ&¡1ÿÿ ÿåõÐ&‘# ÿÿÿéöÏ&(”1ÿÿÿêõÏ&+,1ÿÿÿèõÇ&·Tÿÿ ÿèõÏ&# Tÿÿ ÿèõÍ&(•Uÿÿ ÿèõÏ&T6 ÿÿ ÿèõÐ&T6 ÿÿ ÿèôÏ&(–ÿÿÿ ÿèõÏ&wTÿÿ ÿèôÎ&/gÿÿÿ ÿèöÇ&˜6 ÿÿ ÿèõÏ&(—TÿÿÿèõÏ&(˜TÿÿÿèôÐ&ÿ6 ÿÿÿèöÏ&% ˜ÿÿÿèôÏ&ÿ6 ÿÿ ÿèõÐ&—TÿÿÿèöÇ&™˜ÿÿ ÿèõÐ&T6ÿÿ ÿè÷Ï&&&ÿÿ ÿíôÌ&/h6ÿÿ ÿèóÏ&+ 6ÿÿ ÿéóÏ&ÓÔÿÿ ÿçöÐ&‡(™ÿÿÿéðÐ&ÿÿÿé÷Î&21ÿÿÿì÷Í&pÿÿ&ÿëïÆ&3ÿÿÿçñÐ&45ÿÿÿê÷Ï&67ÿÿ ÿìòÑ&ÍÐÿÿÿìòÐ&ÐÎÿÿ ÿíôÐ&6ÿÿ ÿíôÐ&Ìÿÿÿê÷Ê&F6ÿÿ ÿéùÎ&ïðÿÿ ÿíõÐ&÷Yÿÿ ÿíôÐ&äYÿÿ ÿíôÐ&×YÿÿÿìîÓ&,ã6ÿÿ ÿíôÐ&Y6ÿÿ ÿíôÔ&YZÿÿ ÿíôÐ&Y6ÿÿ ÿèõÏ& Úÿÿ ÿèóÎ&(š6ÿÿ ÿèõÐ& - ,ÿÿÿéõÏ& ‡ÿÿ ÿíõÐ&Y6ÿÿ ÿéõÏ&#ŠÿÿÿéõÏ&"ŒÿÿÿëõÏ&$· -ÿÿÿì÷Ñ&(›6ÿÿ ÿéõÏ&$Uÿÿ ÿçõÑ&,äÿÿ ÿçõÏ&(Äÿÿÿì÷Ñ&(›6ÿÿ ÿéóÐ&&þÿÿ ÿéõÐ&,å -ÿÿ ÿéõÏ&(œÿÿÿêóÐ&[( ÿÿ ÿíôÐ&Y6ÿÿ ÿíôÓ&Y6ÿÿ ÿìõÑ&€ -ÿÿ ÿèõÏ&(ÿÿÿéõÏ&(žÿÿ ÿíôÓ&Y6ÿÿ ÿéõÏ&(Ÿÿÿ ÿéóË&(¡'ìÿÿÿçöÐ&Ø6"ÿÿÿæõÒ&[ÖÿÿÿçöÐ&ØXÿÿÿçöÐ&Ø6#ÿÿÿçöÐ&Ø6$ÿÿÿèõÒ&[ÕÿÿÿéõÒ&[6%ÿÿÿéõÒ&y[ÿÿÿèõÑ&\9ÿÿÿéõÒ&[6&ÿÿÿèõÑ&\6'ÿÿÿéõÒ&[6(ÿÿÿèõÒ&[[ÿÿÿéõÒ&[6)ÿÿÿèõÑ&\6*ÿÿÿæõÒ&[žÿÿÿéõÒ&[ºÿÿÿçõÑ&\6+ÿÿÿéõÒ&[6,ÿÿÿèõÑ&\6-ÿÿÿèõÑ&ª\ÿÿÿéõÒ&#n[ÿÿÿäõÒ&[äÿÿÿèõÑ&\6.ÿÿÿçóÐ&(¢6/ÿÿ ÿèõÑ&\Íÿÿ ÿèõÑ&\$Fÿÿ ÿèëÏ&Ú ÿÿ ÿéôÐ&žáÿÿ ÿéùÎ&  ÿÿ ÿéøÏ& ²áÿÿ ÿêóÍ&ÖÐÿÿ ÿçóÏ& Vÿÿ ÿèöÎ& ïÿÿ ÿéôÐ&+Ûžÿÿ ÿêîÍ&Öõÿÿ ÿéóÍ& ²%Œÿÿ ÿèõÍ& ²&(£65ÿÿ ÿéèÏ& (ÿÿ ÿèçÐ& (¤ÿÿ ÿèøÏ& (ÿÿ ÿèôÍ&Öƒÿÿ ÿèõÏ& (¥ÿÿ ÿèíÏ& (¦ÿÿ ÿéòÐ& ²(§ÿÿ ÿéõÑ&% ÿÿ ÿéêÏ& ²ãÿÿ ÿéóÎ& ¨ÿÿ ÿéðÎ& ¬ÿÿ ÿéòÎ& /jÿÿ ÿêöÍ&Ö66ÿÿ ÿéõÎ& («ÿÿ ÿèóÍ& ²(ªÿÿ ÿêôÍ&ÖÉÿÿ ÿéôÏ& ²(©ÿÿ ÿéðÍ& ²(¨ÿÿ ÿéöÏ& ²pÿÿ ÿéíÍ& ²%2ÿÿ ÿèõÏ& ²µÿÿ ÿèôÎ& ÿÿ ÿéôÎ& +Üÿÿ ÿéèÍ& ²(¬ÿÿ ÿéíÍ& ²67ÿÿ ÿéôÎ& wÿÿ ÿéòÏ&D ÿÿ ÿéìÏ& ²(­ÿÿ ÿèôÏ& ²(®ÿÿ ÿéõÏ& ²–ÿÿ ÿéöÏ& Cÿÿ ÿèóÎ& …ÿÿ ÿéóÎ& Áÿÿ ÿéìÐ& ÿÿ ÿéõÎ& ÿÿ ÿéòÏ&$—Öÿÿ ÿéêÍ& ²)ÿÿ ÿéöÏ& ²&ôÿÿ ÿéóÎ&® ÿÿ ÿéõÐ& ²(¯ÿÿ ÿéôÏ& ²Üÿÿ ÿèïÐ&*,çÿÿ ÿéøÐ& ²%ºÿÿ ÿéóÍ& ²aÿÿ ÿéòÍ& ²(&ÿÿ ÿçõÎ& `ÿÿ ÿéòÍ& ê ²ÿÿ ÿéòÏ&b ²ÿÿ ÿèõÏ& Ìÿÿ ÿéôÏ& ²Áÿÿ ÿéñÍ& ²-âÿÿ ÿéòÏ& mÿÿ ÿêòÏ&×Öÿÿ ÿêõÍ&Ö&óÿÿ ÿéñÏ&Ö&qúÿÿ ÿéìÏ& ²&Ç69ÿÿ ÿé÷Ï&Ö%¾ÿÿ ÿèóÐ& (±ÿÿÿéõÏ&(áòÿÿ ÿêðÍ&Ö(²ÿÿ ÿéðÏ& {ÿÿ ÿéëÏ&Öºÿÿ ÿéõÎ& 8ÿÿ ÿèõÏ& (³ÿÿ ÿéóÎ& (´ÿÿ ÿçòÏ&Ö^ÿÿ ÿèñÏ&(µ ÿÿ ÿèõÐ&(¶,æÿÿ ÿéëÐ& Óÿÿ ÿèôÎ& (·ÿÿ ÿèöÎ& &ÿÿ ÿéðÏ&Ö(¹ÿÿ ÿêñÍ&Ö(ºÿÿ ÿèñÍ&/n ²ÿÿ ÿéõÏ& ²Eÿÿ ÿéóÏ& ²&ÿÿ ÿéëÏ& ²(âÿÿ ÿéêÏ& (»ÿÿ ÿéôÏ&Ö(ãÿÿ ÿéõÏ& ²¤ÿÿ ÿéõÏ&¥ ²ÿÿ ÿéòÎ& Ýÿÿ ÿéñÍ&ÖÃÿÿ ÿêðÏ&Ö£ÿÿ ÿêôÐ&Ö,èÿÿ ÿéòÍ&Ö}ÿÿ ÿèöÐ& Âÿÿ ÿèòÍ& ²*Eÿÿ ÿçòÐ& ²(äÿÿ ÿéòÏ& ²8ÿÿ ÿééÏ& ²(¸ÿÿ ÿéèÍ& ²& ÿÿ ÿéòÐ& ²iÿÿ ÿéêÍ& ²0êÿÿ ÿéòÏ& ²¡ÿÿ ÿéóÏ& bÿÿ ÿéóÎ& +Çÿÿ ÿéêÍ& ²‰ÿÿ ÿé÷Í& ²òÿÿ ÿéçÍ& ²(åÿÿ ÿéëÎ& ¢ÿÿ ÿéóÍ& ²_ÿÿ ÿééÍ&/oÖÿÿ ÿèñÏ& (,ÿÿ ÿéìÏ& ²&¿6:ÿÿ ÿéçÑ& &ÿÿ ÿéóÍ& ²& ÿÿ ÿèõÏ&Ö–ÿÿ ÿéæÏ& ²(æÿÿ ÿéïÏ&Ö&  ñÿÿ ÿéïÏ& ²& ò6;ÿÿ ÿçóÏ&Ö(Æÿÿ ÿéòÍ& ²&õ*Ëÿÿ ÿéóÎ&Öÿÿ ÿéòÏ& ²*eÿÿ ÿéîÏ& ²/¼ÿÿ ÿéêÍ& ²(Åÿÿ ÿéóÍ& ²dÿÿ ÿéòÍ& ²Üÿÿ ÿçóÐ&Ö.dÿÿ ÿèôÏ& ”ÿÿ ÿçóÎ& '£ÿÿ ÿéòÐ& ²¤ÿÿ ÿèõÏ& ²*dÿÿ ÿéôÐ& ?ÿÿ ÿèôÏ& ÿÿ ÿéóÐ& gÿÿ ÿçñÍ& ²Éÿÿ ÿçóÑ&Ö(çÿÿ ÿéóÏ& ² Âÿÿ ÿéòÎ& %Eÿÿ ÿéäÍ& ²(Çÿÿ ÿéóÏ& Ôÿÿ ÿéóÐ&Ö&›šÿÿ ÿéóÏ&Ö&qÿÿ ÿèóÏ& ²ÿÿ ÿéõÍ& ²cÿÿ ÿçöÏ& ²`ÿÿ ÿèîÏ& (Èÿÿ ÿéõÐ& ´ ²ÿÿ ÿèòÄ&+Èÿÿ ÿèóÍ&(èÿÿ ÿéóÏ& ²(éÿÿ ÿéòÏ& (Éÿÿ ÿé÷Í& ²®ÿÿ ÿèöÏ& ² ÿÿ ÿçìÍ& ²6<ÿÿ ÿéóÏ&Ö/rÿÿ ÿéðÍ& ²*Õÿÿ ÿéõÎ& %"ÿÿ ÿçõÐ&( ²ÿÿ ÿéóÏ& ²0Ôÿÿ ÿèòÏ&A ²ÿÿ ÿéêÍ&#Öÿÿ ÿéëÍ&Öcÿÿ ÿéñÐ& ²ÿÿ ÿéóÍ& ²ÿÿ ÿéôÏ& ²Rÿÿ ÿéòÏ& ²*fÿÿ ÿèìÏ&&¥.ôÿÿ ÿéóÍ& ²Îÿÿ ÿééÐ& ²*Fÿÿ ÿéïÍ&ÖÃÿÿ ÿéóÎ& ²&ìíÿÿ ÿéòÐ& ²&MQÿÿ ÿèôË&Ñ.ôÿÿ ÿéóÍ& ²Öÿÿ ÿéóÏ&÷ ²ÿÿ ÿéóÏ& ²ÿÿ ÿéöÏ& ”ÿÿ ÿéóÐ&yÖÿÿ ÿéõÐ& ²aÿÿ ÿèôÏ&Ö0¼ÿÿ ÿéêÍ& ²©ÿÿ ÿè÷Ï& ²5ÿÿ ÿéñÐ& ²Øÿÿ ÿéóÏ&M&K ²ÿÿ ÿéöÐ& ²Ãÿÿ ÿéòÏ&§Öÿÿ ÿèõÍ& ²¨ÿÿ ÿçôÐ&Ö'ÿÿ ÿèïÍ& ²Åÿÿ ÿéôÏ& ²Âÿÿ ÿéøÍ& ²›ÿÿ ÿéòÍ& ²ÿÿ ÿé÷Í&¥ ²ÿÿ ÿèòÏ&&ÿÿ ÿêðÍ&Ö*Gÿÿ ÿéðÍ& ²*Hÿÿ ÿèèÏ& ²vÿÿ ÿèìÍ&.ô0Iÿÿ ÿéóÏ& ²äÿÿ ÿéìÑ& ²¡ÿÿ ÿéíÏ& ²wÿÿ ÿéóÍ& ²)ÿÿ ÿéñÏ& ²ìÿÿ ÿéòÍ& ²×ÿÿ ÿéèÏ& ¶ÿÿ ÿéõÏ& ² ·ÿÿ ÿêóÏ&Ö€ÿÿ ÿéôÑ& ²Üÿÿ ÿéõÍ& ²öÿÿ ÿèõÏ& ²Ñÿÿ ÿéíÏ&­ ²ÿÿ ÿèôÐ& ²oÿÿ ÿèòÐ& ²Ùÿÿ ÿæöÏ&p ²ÿÿ ÿéóÑ& ² ÿÿ ÿèòÏ& ²*IÿÿÿéñÏ&&ÿÿ ÿåôÑ& ²ÿÿ ÿèíÏ&¡ ÿÿ ÿèôÏ& ²’ÿÿ ÿèìÏ&&&$.ôÿÿ ÿèóÏ& ²Wÿÿ ÿçóÐ& ²&#ÿÿ ÿéìÐ&& ²³ÿÿ ÿéóÍ& ²²ÿÿ ÿéóÏ&°&¯Öÿÿ ÿçöÏ& ²Õÿÿ ÿèòÍ&± ²ÿÿ ÿèóÍ& ²Ôÿÿ ÿèóÏ&}&.ô6=ÿÿ ÿèôÑ&X ²ÿÿ ÿéõÍ&+Í ²ÿÿ ÿéöÍ& ²&,ÿÿ ÿèôÏ& ²&æ6>ÿÿ ÿéñÐ& ²&4ÿÿ ÿéôÏ&  ÿÿ ÿéòÍ& ²öÿÿ ÿéõÏ& ²‘ÿÿ ÿéïÐ&/v ²ÿÿ ÿéôÎ& &uÿÿ ÿêðÑ&Ö*Jÿÿ ÿêòÍ&Ö*Kÿÿ ÿéöÐ& ²&š6?ÿÿ ÿéóÍ& ²&:ÿÿ ÿèöÑ& &/ÿÿ ÿéóÍ& ²¬ÿÿ ÿè÷Í& ²"äÿÿ ÿéòÐ& ²*Lÿÿ ÿéóÎ& Šÿÿ ÿéëÐ& ²&ù›ÿÿ ÿé÷Í& ²Uÿÿ ÿé÷Í& ²&n6@ÿÿ ÿéñÏ& ²6Aÿÿ ÿéõÐ& ² ±ÿÿ ÿéóÍ& ²&)ÿÿ ÿçõÏ& ² Öÿÿ ÿèîÏ&N&l.ôÿÿ ÿéìÍ&%; ²ÿÿ ÿéóÐ&«Öÿÿ ÿèñÍ& ²ÿÿ ÿéóÏ& ².eÿÿ ÿæñÎ& êÿÿ ÿéñÎ& ñÿÿ ÿéóÐ& ²êÿÿ ÿéëÍ&à ²ÿÿ ÿéõÐ& ²&5ÿÿ ÿéõÎ& Ùÿÿ ÿèòË&4&.ô6Bÿÿ ÿéòÍ& ²«ÿÿ ÿéçÐ& ²&0ÿÿ ÿéïÎ& ²*Mÿÿ ÿéòÍ&ç&è ²ÿÿ ÿéôÐ&ê& ²šÿÿ ÿéëÍ& ²&1ÿÿ ÿéõÎ&Öéÿÿ ÿèõË&.ôÿÿ ÿéøÏ& ¹ ²ÿÿ ÿèôÏ& ²ëÿÿ ÿéôÍ& ²ìÿÿ ÿééÍ&Ö*Nÿÿ ÿéõÏ& ²/=ÿÿ ÿéïÏ& ²&8ÿÿ ÿêóÏ&Ö&Mjÿÿ ÿéôÐ& ²€ÿÿ ÿèôÐ& ²*˜ÿÿ ÿéòÏ& ²&6Cÿÿ ÿéòÏ& ²)ÿÿ ÿéóÏ&.f ²ÿÿ ÿçîÐ& ².gÿÿ ÿéöÏ&ù ÿÿ ÿèôÐ&Ü&+É.ôÿÿ ÿèìÍ& ²6Dÿÿ ÿèîÍ& ².hÿÿ ÿéòÐ& ²*Oÿÿ ÿéóÐ&Î&Ï ²ÿÿ ÿèìÎ&×& ²Öÿÿ ÿèìÎ&Ø& ²Öÿÿ ÿèöÍ&,ú&.i.ôÿÿ ÿêõÍ&Ö&( 6Eÿÿ ÿéòÐ&Ö*jÿÿ ÿèéÐ&Öjÿÿ ÿéïÏ&ÖÃÿÿ ÿèëÏ&à&.ô6Fÿÿ ÿéôÍ& ²(êÿÿ ÿèõÑ&e.ôÿÿ ÿêóÐ&¯Öÿÿ ÿéöÏ& ²(ëÿÿ ÿéîÍ& ²(ìÿÿ ÿè÷Ñ&ÖÏÿÿ ÿéëÍ& ²îÿÿ ÿéñÍ& ²­ÿÿ ÿèõÑ& ²&ÿÿ ÿêôÏ&Ö|ÿÿ ÿéòÎ&(í ²ÿÿ ÿé÷Ï& ²/õÿÿ ÿêøÍ&Öüÿÿ ÿéóÑ&ÖËÿÿ ÿéóÍ& ²þÿÿ ÿéõÐ& Ê ²ÿÿ ÿêîÎ&Ö0/ÿÿ ÿèóÏ&'—&™.ôÿÿ ÿèôÑ& ²00ÿÿ ÿèñÏ&Ö&ƒÿÿ ÿéïÍ&(@Öÿÿ ÿéõÍ& ².ÿÿ ÿééÎ& ²(îÿÿ ÿèöÏ&.ì.ôÿÿ ÿèëÐ& ²ÿÿ ÿéëÍ& ²&„ÿÿ ÿçôÍ& ²6Gÿÿ ÿééÍ&±Öÿÿ ÿèöÎ&.T.ôÿÿ ÿèõÏ&.ôÿÿ ÿèòÏ&Ö/yÿÿ ÿêôÐ&.lÖÿÿ ÿêñÎ&*PÖÿÿ ÿéòÏ& ²³ÿÿ ÿéíÏ& ²ÿÿÿ ÿèëÏ&(ï.ôÿÿ ÿéóÑ&ÖQÿÿ ÿéõÏ& ²(ðÿÿ ÿèëÏ&à&.ô6Hÿÿ ÿèîÍ& ²Èÿÿ ÿèóË&.k&.ô6Iÿÿ ÿèõÏ&.ó.ôÿÿ ÿçóÏ&© ²ÿÿ ÿéðÍ& ²6Jÿÿ ÿèóÏ& ²Üÿÿ ÿèïÏ& ²?ÿÿ ÿéöÏ& ²®ÿÿ ÿèõÐ&»&.ô6Kÿÿ ÿéóÏ&(ñÖÿÿ ÿêóÏ&Ö™ÿÿ ÿéôÑ& ²Èÿÿ ÿèóÏ&{ ²ÿÿ ÿéøÏ&„Öÿÿ ÿéñÎ& ².jÿÿ ÿéïÏ& ²°ÿÿ ÿèòÏ&&.ô6Lÿÿ ÿéôÐ& ²—ÿÿ ÿéòÐ&Ö(òÿÿ ÿêõÑ&Ö ÿÿ ÿéòÍ&Ö.Lÿÿ ÿèòÏ&¯ ²ÿÿ ÿéóÑ&[ ²ÿÿ ÿêòÏ&Ö&è6Mÿÿ ÿçëË&/z.ôÿÿ ÿéóÏ& ²&ÿÿ ÿêõÍ&Ö&†ÿÿ ÿéóÏ& ²(óÿÿ ÿéöÏ& ²*iÿÿ ÿèôÒ&_ ²ÿÿ ÿèõË& .ôÿÿÿéõÐ&(ô6Nÿÿ ÿêðÎ&Ö6Oÿÿ ÿéôÏ&Ö Eÿÿ ÿéòÏ& ²&‰ÿÿ ÿéóÏ&Ö²ÿÿ ÿéëÍ&Ï ²ÿÿ ÿéñÐ&.mÖÿÿ ÿèôÎ&Ö6Pÿÿ ÿèíË&.ô6Qÿÿ ÿéôÐ& ²6Rÿÿ ÿéõÍ&Ö(õÿÿ ÿèïÏ&Ö(÷ÿÿ ÿèöÏ& ²(öÿÿ ÿèòÏ& 6.ôÿÿ ÿêòÍ&.oÖÿÿ ÿéóÍ& ²6Sÿÿ ÿéñÏ& ².nÿÿ ÿéìÏ& ²&Úÿÿ ÿèïÐ& ²6Tÿÿ ÿèøÐ& ² .ÿÿ ÿéõÏ& ²"¯ÿÿ ÿéòÏ& ²/ÿÿ ÿèõÐ&!.ôÿÿ ÿéóÍ& ²"Bÿÿ ÿéõÏ& ²#„ÿÿ ÿéðÑ& ²!µÿÿ ÿèóÐ&•&è6Uÿÿ ÿèôÏ& ²$ÿÿ ÿéõÍ& ²#‹ÿÿ ÿéöÏ& ²"iÿÿ ÿèïÏ&*Š&.ô6Vÿÿ ÿèòË&#Û.ôÿÿ ÿéìÍ&q ²ÿÿ ÿéðÑ& ² ÿÿ ÿèîÍ& ²#?ÿÿ ÿéóÍ& ²1ÿÿ ÿèõÎ& ²@ÿÿ ÿéìÏ&& ²!ÿÿ ÿèèÍ&Ö"3ÿÿ ÿêõÏ&Ö6Wÿÿ ÿèóÏ&!z.ôÿÿ ÿèóÏ& ²!íÿÿ ÿéôÑ&Å& ²Æÿÿ ÿêòÏ&Ö"Ÿÿÿ ÿèôË&+Ê&+Ë.ôÿÿ ÿéñÎ& "Dÿÿ ÿèòÏ&(ø.ôÿÿ ÿèôÏ& ²!Þÿÿ ÿèòÎ&»&¹&º.ôÿÿ ÿèìÏ&/œ ²ÿÿ ÿèöÏ&_&.ô6Xÿÿ ÿéóÏ&"xÖÿÿ ÿèîÎ&Ö!–ÿÿ ÿêôÏ&!ýÖÿÿ ÿéóÍ&Ö!ÿÿ ÿèôÏ&.ô6Yÿÿ ÿéóÍ& ²"{ÿÿ ÿèõÑ&å&.ô6Zÿÿ ÿèóÏ&.p&.ô6[ÿÿ ÿèçË&!.ôÿÿ ÿéòÏ&Ö×ÿÿ ÿéóÑ& ²!Âÿÿ ÿèôÒ& ²6\ÿÿ ÿèóÏ&l&k.ôÿÿ ÿèõÏ&.q.ôÿÿ ÿéîÐ& ² »ÿÿ ÿèóÏ& ²‡ÿÿ ÿèòË&"J.ôÿÿ ÿéñÍ&Ö$\ÿÿ ÿäöÍ& ²"qÿÿ ÿéõÐ& ²6]ÿÿ ÿéòÐ& ²#£ÿÿ ÿèóÏ&0r.ôÿÿ ÿèëÏ&#¾&#½.ôÿÿ ÿèëÏ&r.ôÿÿ ÿèôÏ&#¼.ôÿÿ ÿèëÎ&#O.ôÿÿ ÿéñÍ&Ö"ÿÿ ÿéôÍ& ²-ÿÿ ÿéñÏ& h ²ÿÿ ÿéõÑ& 'ÿÿ ÿéóÏ&a ²ÿÿ ÿéíÍ& ² qÿÿ ÿéíÍ&Ö"ÿÿ ÿéóÍ&) ²ÿÿ ÿèöÐ&,ê&».ôÿÿ ÿéòÏ&m ²ÿÿ ÿéîÍ& ²Òÿÿ ÿéëÍ&¦ ²ÿÿ ÿéõÍ&Ö":ÿÿ ÿêóÏ&Ö!eÿÿ ÿèöÏ&,ë&%Ã.ôÿÿ ÿêõÍ&Ö •ÿÿ ÿçðÍ& ²"ÿÿ ÿéóÏ& ²6^ÿÿ ÿèòÍ& ²"¦ÿÿ ÿéòÏ& ²"·ÿÿ ÿéðÍ& ²,ìÿÿ ÿéôÐ& ²$†ÿÿ ÿéôÎ& ²"Zÿÿ ÿéóÏ& ²!¼ÿÿ ÿéðÍ& ²! ÿÿ ÿèöÏ&"Å.ôÿÿ ÿéòÐ&Ö6_ÿÿ ÿéóÍ& ²6`ÿÿ ÿéóÏ&K ²ÿÿ ÿèëÏ&!|&à.ôÿÿ ÿçòÏ&Ö"ÿÿ ÿèóÏ&,î&.ô6aÿÿ ÿèöÐ&&.ô6bÿÿ ÿèñÐ&#ï.ôÿÿ ÿèóË&.ô6cÿÿ ÿéöÎ& ²$;ÿÿ ÿéïÍ& ²*Qÿÿ ÿèôÏ&™&(ù.ôÿÿ ÿèòÑ&$.ôÿÿ ÿè÷Ë&Ê.ôÿÿ ÿéóÏ& ²$Çÿÿ ÿèõÐ& ²(úÿÿ ÿéòÎ& ²,ÔÿÿÿéðÑ&ð&€ÿÿ ÿéôÍ& ²$Óÿÿ ÿéòÏ& ²%ÿÿ ÿéóÐ& ²#ÿÿ ÿèõÐ&.ô6dÿÿ ÿéìÏ&Ö=ÿÿ ÿèñÐ&$4.ôÿÿ ÿèðË&"….ôÿÿ ÿèïË&*R.ôÿÿ ÿéòÏ& ²#ÿÿ ÿèóÐ&M&$z.ôÿÿ ÿèõÎ&$K.ôÿÿ ÿèóÏ& !& %.ôÿÿ ÿéìÍ&Ö"Õÿÿ ÿéöÏ& ²¶ÿÿ ÿèôÎ&,&.ô6eÿÿ ÿæõÍ& ²$ÿÿ ÿèôÐ& ²fÿÿ ÿéõÍ& ²Cÿÿ ÿèóÏ&,ï&.ô6fÿÿ ÿçíË&$í.ôÿÿ ÿéðÏ& ²(ûÿÿ ÿèñÐ&$o.ôÿÿ ÿèôÎ&% .ôÿÿ ÿèõÎ& ¢ÿÿ ÿéóÏ& ²$kÿÿ ÿéöÑ& ²$ÿÿ ÿèíË&.ô6gÿÿ ÿèñÏ&Ö6hÿÿ ÿèíÍ& ²(üÿÿ ÿéëÍ& ²$Sÿÿ ÿéòÍ& ²6iÿÿ ÿéôÍ& ²gÿÿ ÿéðÑ& ²#÷ÿÿ ÿèðÏ&&½&&¾.ôÿÿ ÿéñÏ&Ö,ðÿÿ ÿèôÏ&,ñ&.ô6jÿÿ ÿèïÑ&B.ôÿÿ ÿéôÏ& ²*pÿÿ ÿèöÒ& ²$%ÿÿ ÿéòÑ&*S ²ÿÿ ÿéðÍ& ²$ ÿÿ ÿéïÐ& ²(ýÿÿ ÿéòÐ& ²%ÿÿ ÿéïÍ& ²$Qÿÿ ÿéöÏ& ²$iÿÿ ÿèïÐ&(þ.ôÿÿ ÿèöÐ&Ë&Ê&.ô6kÿÿ ÿèóÏ& ²6lÿÿ ÿèòÏ&& ÿÿ ÿéóÏ&$Õ ²ÿÿ ÿéôÏ& ²-Þÿÿ ÿéìÍ& ²#(ÿÿ ÿêóÍ&$Öÿÿ ÿéñÐ&$©Öÿÿ ÿèóÎ& ²$¹ÿÿ ÿéöÏ&36mÿÿ ÿéôÑ& ²/~ÿÿ ÿéôÐ&& ²ÿÿ ÿéòÍ& ²6nÿÿ ÿèöÐ&/¯.ôÿÿ ÿçöÐ& ²,òÿÿ ÿéõÐ& ²$ôÿÿ ÿéñÐ&Ö øÿÿ ÿèôÐ&z&.ô6oÿÿ ÿèõÍ& ²/:ÿÿ ÿéóÏ&Öƒÿÿ ÿêòÏ&Ö6pÿÿ ÿèôÑ&‰&ˆ.ôÿÿ ÿéóÐ&$/ ²ÿÿ ÿçóÐ&ó&÷ ²ÿÿ ÿèðÐ& ²/Lÿÿ ÿèóÏ&|&˜.ôÿÿ ÿéöÐ&Ë& ²&ÊÌÿÿ ÿéöÐ& ²/Vÿÿ ÿéóÍ& ²(ÿÿÿ ÿçñÏ&°&±.ôÿÿ ÿèõÏ&,ó.ôÿÿ ÿéôÐ& ²6qÿÿ ÿçõÑ& ²'ºÿÿ ÿéîÑ&Ö'»ÿÿ ÿéôÑ& ²,ôÿÿ ÿèôÏ&,&.ôÿÿ ÿèñÏ& ²*Tÿÿ ÿèòÐ&µ&´.ôÿÿ ÿçðÑ&¶.ôÿÿ ÿéõÒ& ²¡ÿÿ ÿéõÏ& ²6rÿÿ ÿèñÓ& ²1ÿÿ ÿèôÓ&.ô6sÿÿ ÿèíÏ&).ôÿÿ ÿéôÏ&)ÿÿ ÿèõÒ&)Öÿÿ ÿéóÍ& ²&¡ÿÿ ÿéöÑ& ²6tÿÿ ÿéõÑ& ²)ÿÿ ÿé÷Ï& ²6uÿÿ ÿèöÏ&,ö&,õ.ôÿÿ ÿéöÏ& ²*æÿÿ ÿéôÑ& ²'·ÿÿ ÿçõÏ&+ .ôÿÿ ÿéîÍ& ²)ÿÿ ÿè÷Ð&,ö&.ô6vÿÿ ÿèñË&.ô6wÿÿ ÿèóÏ&S.ôÿÿ ÿèõË&,÷&.ô6xÿÿ ÿèðÑ&h.ôÿÿ ÿèìÏ&).ôÿÿ ÿèóÏ&).ôÿÿ ÿéöÍ& ²6yÿÿ ÿéóÏ& ²)ÿÿ ÿéóÍ& ²&šÿÿ ÿèòÏ&.ô6zÿÿ ÿçõÐ&Ö6{ÿÿ ÿêðÏ&Ö)ÿÿ ÿéöÏ&Ö%+ÿÿ ÿèóÑ&b.ôÿÿ ÿé÷Ð& ²) ÿÿ ÿèôË&Ü&Ý.ôÿÿ ÿçòÏ&.ô6|ÿÿ ÿèõÏ&.ô6}ÿÿ ÿéóÐ&&þÿÿ ÿèõÐ&,ø&.ô6~ÿÿ ÿèõÐ&.ô0]ÿÿ ÿèóÐ&0&'š.ôÿÿ ÿéóÍ&J ²ÿÿ ÿèõÐ& ² ÿÿ ÿèòÐ&#¿.ôÿÿ ÿçòÑ& ²) ÿÿ ÿéôÍ& ²) ÿÿ ÿéíÏ& ²-:ÿÿ ÿçöÏ& ²&%.ôÿÿ ÿèõË&,ù&,ú.ôÿÿ ÿéóÑ& ²&›ÿÿ ÿèôÐ&,&.ô6ÿÿ ÿéõÏ&y ²ÿÿ ÿèñÐ&&e& ²&gÿÿ ÿèôÏ&Þ&.ô6€ÿÿ ÿéñÍ&Ö6ÿÿ ÿèôÐ&&œ.ôÿÿ ÿé÷Î& ²&¢ÿÿ ÿéòÏ& ².rÿÿ ÿéôÑ& ²$Üÿÿ ÿéñÐ&j) ÿÿ ÿéñÍ& ²6‚ÿÿÿéóÏ&„6ƒÿÿ ÿèóÐ&.ô6„ÿÿ ÿéóÐ& ²) ÿÿ ÿçôÎ& ²6…ÿÿ ÿçòÐ&Ö6†ÿÿ ÿèõÐ&&,û.ôÿÿ ÿèóÏ&˜&.ô6‡ÿÿ ÿèóÏ&•&÷.ôÿÿ ÿçêÍ& ²%ëÿÿ ÿèöÏ&%ì.ôÿÿ ÿèõÍ& ²)ÿÿ ÿéôÐ& ²&§ÿÿ ÿèòÐ&).ôÿÿ ÿèîÏ&&&.ôÿÿ ÿéöÐ& ²ëÿÿ ÿéöÏ&0Ú ²ÿÿ ÿéóÏ& ²&©ÿÿ ÿéòÏ& ²%àÿÿ ÿèóË&.ô0Ùÿÿ ÿéôÏ&Ö&ªÿÿ ÿèöÒ&Ö6ˆÿÿ ÿèöÐ&*n&*m.ôÿÿ ÿèñÎ&).ôÿÿ ÿèôÍ&Ö’ÿÿ ÿèôÑ&,&.ô6‰ÿÿ ÿçòÏ& ²)ÿÿ ÿèíË&ð&.ô6Šÿÿ ÿèîË&ñ&.ô6‹ÿÿ ÿéôÏ& ²zÿÿ ÿéìÑ& ²šÿÿ ÿçòÍ&) ²ÿÿ ÿêíÐ&Ö6Œÿÿ ÿèôÏ&&.ô6ÿÿ ÿéòÍ& ²&«ÿÿ ÿèóË&i.ôÿÿ ÿèîÏ&J&.ô6Žÿÿ ÿèóÌ&).ôÿÿ ÿçôÏ&Ä ²ÿÿ ÿèðÐ&,ü&.ô6ÿÿ ÿèñÍ&,ýÖÿÿ ÿèóÏ&#&0.ôÿÿ ÿèñË&).ôÿÿ ÿéóÐ&&Öÿÿ ÿêòÏ&Ö6ÿÿ ÿèóË&.ô6‘ÿÿ ÿèôÎ&,þ.ôÿÿ ÿéóÐ&t ²ÿÿ ÿéóÐ&b ²ÿÿ ÿéôÏ& ²*Óÿÿ ÿèëË&.ô6’ÿÿ ÿèóË&.ô6“ÿÿ ÿéòÏ& ²²ÿÿ ÿèôÏ&,&.ô6”ÿÿ ÿêöÍ&Ö%ÿÿ ÿêòÏ&µÖÿÿ ÿèôÏ&&¬.ôÿÿ ÿèïÎ& ²&¨ÿÿ ÿèôÐ&,&.ô6•ÿÿ ÿèôÎ&,&.ô6–ÿÿ ÿéóÍ& ²)ÿÿ ÿèôÏ&Þ&.ô6—ÿÿ ÿèóÐ& ü&.ô/âÿÿ ÿè÷Ï& ü&'.ôÿÿ ÿèñÍ&Ö8ÿÿ ÿéôÍ& ²6˜ÿÿ ÿèòË&Ç&´.ôÿÿ ÿèòÐ&)&.ô6™ÿÿ ÿèóÎ&&;&.ô6šÿÿ ÿéñÏ&Ö)ÿÿ ÿèîË&ñ&.ô6›ÿÿ ÿèîË&ñ&.ô6œÿÿ ÿçíÑ&).ôÿÿ ÿèôÏ& ²6ÿÿ ÿèøË&&±.ôÿÿ ÿèòË&).ôÿÿ ÿéïÏ& ²)ÿÿ ÿèõÐ&.ô6žÿÿ ÿéñÍ& ²)ÿÿ ÿèóÎ&-.ôÿÿ ÿçñË& ¨& ©.ôÿÿ ÿéóÐ&) ²ÿÿ ÿéôÐ&& ²6ŸÿÿÿêíÑ&6 ÿÿ ÿæôË&.ô6¡ÿÿ ÿèòÏ&).ôÿÿ ÿçõÑ& ²/åÿÿ ÿèòÐ&.ö.ôÿÿ ÿéõÒ&Ö&Ìÿÿ ÿéôÐ& ².õÿÿ ÿé÷Ñ&½ ²ÿÿ ÿèôË&(&.ô6¢ÿÿ ÿéóÏ& ²,ÿÿÿ ÿèöÑ& ²jÿÿ ÿéõÍ& ²&Ëÿÿ ÿèôÑ&Þ&.ô6£ÿÿ ÿêóÒ&´Öÿÿ ÿèñÑ&.ô6¤ÿÿ ÿèóÑ&&Í.ôÿÿ ÿêôÑ&Ö)ÿÿ ÿèòÏ&.Ô.ôÿÿ ÿèòÏ& ²/cÿÿ ÿéôÏ& ²&Ü6¥ÿÿ ÿèóÏ&.ô.äÿÿ ÿèôÏ&ã&å&,.ôÿÿ ÿéðÍ&­ ²ÿÿ ÿèôÑ& ²-ÿÿ ÿçôÏ& ²&Êÿÿ ÿèôË&Ü&.ô6¦ÿÿ ÿèöÐ& ²&­ÿÿ ÿèñÏ&).ôÿÿ ÿèôÏ&.ô6§ÿÿ ÿèóÏ&˜&.ô6¨ÿÿ ÿéòÏ& ²) ÿÿ ÿéõÏ& ².ÿÿ ÿéóÏ&!d/ôÿÿ ÿéôÏ&"& ²6©ÿÿ ÿéìÍ&)! ²ÿÿ ÿéõÍ&)" ²ÿÿ ÿçóÐ& «& ².ôÿÿ ÿèóÏ&Ž& ³.ôÿÿ ÿèøË&)#.ôÿÿ ÿèòÍ& ²&Ïÿÿ ÿéñÐ& ²)$ÿÿ ÿéóÏ& ².sÿÿ ÿèñÏ&)%.ôÿÿ ÿèôÏ&¨.ôÿÿ ÿèöÐ&.ô6ªÿÿ ÿèòÐ&6.ôÿÿ ÿèõÑ&%v.ôÿÿ ÿèñÑ&-.ôÿÿ ÿèñË&&Ð.ôÿÿ ÿèòÍ&.{ ²ÿÿ ÿèöÐ&µ&.ô6«ÿÿ ÿèóÏ&¾.ôÿÿ ÿéõÑ&.t ²ÿÿ ÿèóÐ&.ô&/â6¬ÿÿ ÿèòÐ&.ô6­ÿÿ ÿèõÏ&)&.ôÿÿ ÿèòÐ&)'.ôÿÿ ÿèôÏ&)(.ôÿÿ ÿêóÏ&Ö.uÿÿ ÿèõÐ& !&* .ôÿÿ ÿèóË&)).ôÿÿ ÿèóÐ&˜&—.ôÿÿ ÿçôÑ&Ö&Îÿÿ ÿèôÑ&(&.ô6®ÿÿ ÿèöÏ&.ô6¯ÿÿ ÿèñÏ&.ô6°ÿÿ ÿçôÑ&.ô6±ÿÿ ÿèíË&ð&.ô6²ÿÿ ÿéóÐ&)*6³ÿÿ ÿèõÑ&ë&.ô6´ÿÿ ÿèõÏ&)+&.ô6µÿÿ ÿèóÐ& ²@ÿÿ ÿéôÐ& ²&Òÿÿ ÿéòÍ& ²-ÿÿ ÿçôÍ& ²),ÿÿ ÿèõÑ&)..ôÿÿ ÿéôÐ& ²&6¶ÿÿ ÿéòÏ& ²%Yÿÿ ÿçñÐ& ²)-ÿÿ ÿèôÒ& ²%ƒÿÿ ÿèðÒ& ²6·ÿÿ ÿè÷Ñ&.ô6¸ÿÿ ÿéôÐ& ²6¹ÿÿ ÿèñÐ&--.ôÿÿ ÿèòÐ&%U.ôÿÿ ÿçóÏ&)/.ôÿÿ ÿèïÏ& &.ô6ºÿÿ ÿè÷Ë&%d.ôÿÿ ÿèôÏ&(&.ô6»ÿÿ ÿçñÏ&Ž& ©.ôÿÿ ÿèìË&-.ôÿÿ ÿèòÐ&)1.ôÿÿ ÿéøÑ& ²Êÿÿ ÿèøÏ&,c&.ô6¼ÿÿ ÿèôÐ&.ô6½ÿÿ ÿèöÐ&.ô6¾ÿÿ ÿèôÏ&&$ .ôÿÿ ÿé÷Í& ²ÿÿ ÿèñÑ&#&.ô6¿ÿÿ ÿèóÏ&.ô6Àÿÿ ÿéòÏ&& ²6Áÿÿ ÿèôÏ&.ô6Âÿÿ ÿèôÐ&.ô6Ãÿÿ ÿèôÏ&.ô6Äÿÿ ÿèðÐ& ². ÿÿ ÿèôÏ&2&1.ôÿÿ ÿèöÐ&)2.ôÿÿ ÿçõÐ&)3& ².ôÿÿ ÿçñÎ& ©&.ô6Åÿÿ ÿèõÐ&#T6Æÿÿ ÿèôÍ&(&.ô6Çÿÿ ÿç÷Ì& ª&i.ôÿÿ ÿéïÏ&Ö6Èÿÿ ÿèõË&+Ó&.ô6Éÿÿ ÿçñË&.ô6Êÿÿ ÿèõÑ&&.ô6Ëÿÿ ÿèïÐ&)4.ôÿÿ ÿéòÍ&- ²ÿÿ ÿåõÑ&\& ²6Ìÿÿ ÿæóÍ& ²6Íÿÿ ÿè÷Î&)6.ôÿÿ ÿéõÎ& ²*„ÿÿ ÿèñÑ&)7.ôÿÿ ÿèôÐ&.ô6Îÿÿ ÿèñÑ&)8.ôÿÿ ÿèêË&ò&.ô6Ïÿÿ ÿçôÑ&1&.ô6Ðÿÿ ÿèôË&.ô6Ñÿÿ ÿèêË&ò&.ô6Òÿÿ ÿèòÎ&.v.ôÿÿ ÿéôÏ&)9 ²ÿÿ ÿéóÍ& ²):ÿÿ ÿéóÍ& ²6Óÿÿ ÿéòÏ& ²6Ôÿÿ ÿéòÍ& ²);ÿÿ ÿèóÏ&)“&.ô6Õÿÿ ÿèòË&.ô6Öÿÿ ÿèìÏ&)<.ôÿÿ ÿèóË&&.ôÿÿ ÿèóÏ&.ô6×ÿÿ ÿèóÍ&&Ö.ôÿÿ ÿçòÐ&&×.ôÿÿ ÿèôÐ&}&.ô6Øÿÿ ÿèõÒ&.ô6Ùÿÿ ÿèõÒ&&Œ.ôÿÿ ÿèôÐ&~&}.ôÿÿ ÿèóÒ&.w.ôÿÿ ÿèïÍ& ²&ó6Úÿÿ ÿèöË&&.ôÿÿ ÿèìÌ&.ô6Ûÿÿ ÿèíÌ&.ô6Üÿÿ ÿèòÐ&.>.ôÿÿ ÿèôÐ&-.ôÿÿ ÿçñÑ&)=.ôÿÿ ÿæöÐ&.ô6Ýÿÿ ÿèöÐ&.ô6Þÿÿ ÿæôÒ&#U&#V#Wÿÿ ÿç÷Ë&i&.ô6ßÿÿ ÿèöÑ&.ô6àÿÿ ÿèõÎ&%&%.ôÿÿ ÿçóÐ&.ô6áÿÿÿçöÁ&%Æ6ãÿÿ ÿêóÏ&mÑÿÿ ÿçëÏ&mÈÿÿ ÿêóÏ&mÊÿÿ ÿèóË& 6äÿÿ ÿêõÏ&ymÿÿÿèõÒ&%Ç ÿÿ ÿêóÏ& µ²ÿÿ ÿéìÏ&mYÿÿ ÿèóÐ&Æ ÿÿÿçôÑ&0%Èÿÿ ÿéêÏ&¾ µÿÿ ÿéíÏ&% %9ÿÿ ÿéòÏ& µ&yÿÿ ÿéöÏ&ÕÙÿÿ ÿéóÏ&)ëÿÿ ÿèóÇ& Iÿÿ ÿéõÏ& µRÿÿ ÿêìÏ&m(¾ÿÿ ÿéõÑ& µ²ÿÿ ÿèóÑ&3 ÿÿ ÿèôÏ& µ%Éÿÿ ÿèôÏ&% (/ÿÿ ÿéôÏ&”mÿÿ ÿéöÏ&ëBÿÿ ÿéòÏ& µíÿÿ ÿêõÏ& µÿÿ ÿéñÏ&ñëÿÿ ÿèóÑ& 6åÿÿÿèóÏ&V%Áÿÿ ÿèìÏ&% %Âÿÿ ÿêóÏ& µ'Fÿÿ ÿéòÏ&è% ÿÿ ÿéôÏ&!m% ÿÿ ÿéêÏ&j% ÿÿ ÿçõÏ&‡ µÿÿ ÿéóÏ&ëÔÿÿ ÿéóÏ&Á% ÿÿ ÿêôÐ& µøÿÿ ÿéíÏ&ë%ÊÿÿÿêòÐ&)>LÿÿÿåõÏ&¦ÿÿ ÿéôÏ&ë%Ëÿÿ ÿéöÏ&% %!ÿÿ ÿéõÏ& µ!ÿÿ ÿêóÏ& µ'Ëÿÿ ÿéóÐ& µUÿÿÿêòÏ&L6æÿÿ ÿéòÏ& µÎÿÿ ÿéõÏ&ë/+ÿÿ ÿçôÏ&%Ì µÿÿ ÿéõÏ&ë3ÿÿ ÿêóÏ& µ%Íÿÿ ÿéõÏ&ë ÿÿ ÿéñÏ&% 6çÿÿ ÿéõÏ&% %"ÿÿ ÿéôÏ&Àëÿÿ ÿéóÏ&ë&ØÙÿÿ ÿéöÑ&ë“ÿÿÿêòÍ&L&®¯ÿÿ ÿéðÏ& µ¶ÿÿ ÿéõÑ&O6èÿÿ ÿéóÏ&â% ÿÿ ÿèóË& 6éÿÿ ÿé÷Ï&ëEÿÿ ÿéõÏ&sëÿÿ ÿéóÏ&~% ÿÿ ÿéîÏ&ë.ÿÿ ÿéôÐ&7 µÿÿ ÿèïÏ& µ1ÿÿ ÿéõÐ& µ\ÿÿ ÿéôÑ& ¸ µÿÿ ÿêîÏ&!Ž µÿÿ ÿêõÏ& µÜÿÿ ÿèõÈ&-tÿÿ ÿé÷Ï&í&ìëÿÿ ÿéëÏ&ë ³ÿÿ ÿéòÏ&{% ÿÿÿéóÑ&32ÿÿ ÿéòÐ&ëÙÿÿ ÿêóÏ& µÿÿ ÿéóÏ&“% ÿÿ ÿèõÏ&¼% ÿÿ ÿéôÐ&ëUÿÿ ÿèóÏ& µVÿÿÿåõÏ&ð&ÿÿ ÿç÷Ï&ëÿÿ ÿèõÐ&t&(6êÿÿ ÿéòÐ&% *ÿÿ ÿéóÐ&³% ÿÿ ÿéíÏ&ë%<ÿÿ ÿéðÒ&ë0íÿÿ ÿéòÏ&©% ÿÿ ÿéôÏ&.ù%=ÿÿ ÿéõÏ&’ëÿÿ ÿéõÐ&ëƒÿÿ ÿèõÑ&ópÿÿ ÿèõÐ& µLÿÿ ÿéõÏ&ëÿÿ ÿéöÏ&% %#ÿÿ ÿéôÏ&ë%$ÿÿ ÿç÷Ï&o&nøÿÿ ÿéöÏ&X% ÿÿ ÿéõÏ&ò&óôÿÿ ÿèõË&t6ëÿÿ ÿééÏ& µÿÿ ÿæóÆ&- 6ìÿÿ ÿéôÏ&/øÿÿ ÿéóÏ&ò6íÿÿ ÿçõÑ& % ÿÿ ÿèóÐ&Œ% ÿÿÿêóÏ&L6îÿÿ ÿéóÏ&ëŠÿÿ ÿé÷Ñ& µ,Íÿÿ ÿéîÑ& µ ¶ÿÿ ÿéõÐ&ë®ÿÿ ÿéíÐ&ë&ÙÕÿÿ ÿèñÏ&ë%Ïÿÿ ÿèõÑ&,pÿÿ ÿéòÐ&ë%Ðÿÿ ÿèóÏ&b& %ÑÿÿÿèíÉ&6ïÿÿ ÿéôÏ&% (mÿÿ ÿéóÑ&% %%ÿÿ ÿéóÏ&ë%Óÿÿ ÿéóÏ&ë1ÿÿ ÿéóÐ&ë%Ôÿÿ ÿèõÄ&t6ðÿÿ ÿéöÏ&ë"Hÿÿ ÿèîÏ&ë1ÿÿ ÿçöÐ&ø&)?#‚ÿÿ ÿéòÏ&ë Yÿÿ ÿéíÏ& µ%ÕÿÿÿêóÑ&36ñÿÿ ÿéõÏ&d*ÿÿ ÿéñÏ&O6òÿÿ ÿéôÏ&›&·% ÿÿ ÿèóÏ&ë%Öÿÿ ÿéóÏ&ëÙÿÿÿéòÏ&0ú0üÿÿÿêõÐ&/0üÿÿ ÿéñÏ&ë!aÿÿ ÿèöÏ&ø&#"#!ÿÿ ÿéöÏ& ‹ëÿÿ ÿéóÏ&*!ÿÿ ÿéõÏ&ëØÿÿ ÿéòÏ&ë"žÿÿ ÿêóÏ& µ8ÿÿ ÿéõÑ&% "±ÿÿÿèöÏ&0ü&á%Ãÿÿ ÿèõÐ&#¦tÿÿ ÿè÷Ï&!ßëÿÿ ÿéóÐ&"ø% ÿÿ ÿèóÏ&ˆ% ÿÿÿçóÏ&O- ÿÿ ÿèõÊ&Ï&tÐÿÿ ÿèòÏ&øŸÿÿ ÿéöÐ&ë!ÿÿ ÿéôÏ&ëÿÿ ÿéóÊ&ò6óÿÿ ÿéôÏ&ë6ôÿÿ ÿèïÏ&!ëÿÿ ÿèõÐ&t6õÿÿ ÿèíÏ&"4% ÿÿ ÿèõÏ&ë0ýÿÿ ÿéôÏ&ë0tÿÿÿè÷Ï&å&æ ÿÿ ÿéõÏ&ë#Iÿÿ ÿé÷Ï&ë"cÿÿ ÿéõÏ&ë£ÿÿÿêòÏ&{&L6öÿÿ ÿèõÆ&{&ztÿÿ ÿèóÏ&#;% ÿÿ ÿèõÏ&x% ÿÿ ÿéóÏ& µ&Žÿÿ ÿçõÏ&ëYÿÿ ÿèõÏ&3pÿÿ ÿéñÏ&%×ëÿÿ ÿåõÏ&"Æÿÿ ÿéîÏ&*&JKÿÿ ÿèïÐ&ë0¹ÿÿ ÿéöÏ&ë&Jâÿÿ ÿéôÑ&ËÐÿÿ ÿéóÏ&ø#|ÿÿ ÿéöÏ&ë$Rÿÿ ÿéïÏ&ë6÷ÿÿ ÿé÷Ï&ë$gÿÿ ÿéõÑ&ë$‰ÿÿ ÿéõÏ&ëÿÿ ÿéõÏ&% )iÿÿ ÿéòÐ&ø% ÿÿ ÿèõÊ&Ñ&t&Ò6øÿÿ ÿèõÏ&ë¢ÿÿ ÿèõÒ&t/ìÿÿ ÿèõÏ&p6ùÿÿ ÿèóÏ& áëÿÿ ÿéóÏ&ò&Þÿÿ ÿéöÏ&ëNÿÿ ÿéôÏ&ë1ÿÿ ÿèõÐ& ëÿÿ ÿéñÏ&ë%ÿÿ ÿèõÄ&Ó&Ôtÿÿ ÿéôÏ&ë/9ÿÿ ÿéóÏ&†% ÿÿ ÿêöÑ&Ë%Øÿÿ ÿêôÑ&ø%Ùÿÿ ÿêõÏ&.ù%Úÿÿ ÿèõÑ&Wtÿÿ ÿéîÏ&ë%Ûÿÿ ÿçóÏ&.ù+ÿÿ ÿêôÏ&.ù.ûÿÿ ÿéòÏ&ë&E6úÿÿ ÿêõÏ&*&Þ6ûÿÿ ÿåöÏ&6üÿÿ ÿéöÏ&Õ&»¼ÿÿ ÿèõÐ&/Wëÿÿ ÿèðÏ&*&á%Üÿÿ ÿèõÑ&t6ýÿÿ ÿé÷Ð&ë%Ýÿÿ ÿéôÏ&ë#~ÿÿ ÿèùÏ&è&épÿÿ ÿéõÌ&5&6!ÿÿ ÿéôÏ& µ%Þÿÿ ÿéòÏ&ë”ÿÿ ÿèôÏ&*0ØÿÿÿèñÑ&%ä/ ÿÿ ÿéõÏ&ëšÿÿ ÿçôÏ&ë%ßÿÿ ÿéòÏ&.ù1 ÿÿÿéöÏ&F0üÿÿ ÿçòÏ&ë%âÿÿ ÿéòÏ&ëÿÿ ÿéóÏ&ø†ÿÿ ÿéóÏ&ë%ãÿÿ ÿèõÐ&ëìÿÿÿèôÏ&çèÿÿ ÿèôÒ&éçÿÿ ÿéõÏ&ë%åÿÿÿéóÒ&%æ0üÿÿ ÿêöÏ&*%ÿÿ ÿèõÑ&Ë&%çÿÿ ÿèôÑ&Ø6þÿÿ ÿéõÏ&ë%èÿÿ ÿéôÏ&ë%éÿÿ ÿçìÏ&ë%êÿÿ ÿéôÏ&ë%'ÿÿ ÿèôÏ&ë%(ÿÿ ÿéõÏ&% %&ÿÿ ÿèõÏ&t6ÿÿÿ ÿéóÏ&% %íÿÿ ÿéðÏ&ø&ú7ÿÿ ÿéðÏ&ú&ø7ÿÿ ÿåõÏ&…&"ÿÿÿçõÏ&- - ÿÿ ÿéöÇ&Õ7ÿÿ ÿéîÏ&Ë&0b7ÿÿÿéðÏ&& 7ÿÿ ÿèöÑ&ë%îÿÿ ÿéôÏ&Ø% ÿÿ ÿéóÑ&òÿÿ ÿéòÏ&ë%ïÿÿ ÿé÷Ï&ëöÿÿ ÿéôÐ&ë%ðÿÿ ÿêõÏ&ø&Þ!¦ÿÿÿèôÐ&%ñ0üÿÿ ÿéôÏ&*&)(ÿÿ ÿéñÏ&ë'ÿÿ ÿèóÐ& 7ÿÿ ÿèôÏ&ë%òÿÿ ÿé÷Ñ&ë.£ÿÿ ÿèóÑ&ë&&%ÿÿ ÿéöÒ&ë*€ÿÿ ÿêóÏ&*.øÿÿÿéðÎ&%ó0üÿÿÿåõÇ&7ÿÿ ÿèõÐ&ë¢ÿÿ ÿéôÏ&ë%ôÿÿ ÿéóÏ&ë%õÿÿ ÿèõÐ&+âpÿÿ ÿéóÏ&*Êÿÿ ÿéöÏ&*7ÿÿ ÿêôÐ&*Pÿÿ ÿéöÏ&Õ7ÿÿ ÿêõÐ&*- ÿÿ ÿéñÏ&ë%Rÿÿ ÿé÷Ï&ø÷ÿÿ ÿèõÏ&p&l7 ÿÿ ÿêòÐ&Ë-.ÿÿ ÿèôÑ&ë%„ÿÿ ÿèóÐ&*@ÿÿ ÿéøÑ&ûËÿÿ ÿéðÏ&Ë&ú7 ÿÿ ÿèôÏ&*%öÿÿ ÿéñÑ&ø%÷ÿÿ ÿéöÏ&**…ÿÿ ÿéíÏ&*–ÿÿ ÿéòÏ&ë- ÿÿ ÿé÷Ñ&0û7 ÿÿ ÿéóÏ&*Oÿÿ ÿèóÐ&Ç&‰7 ÿÿ ÿçñÑ&*%øÿÿ ÿæóÐ&*.=ÿÿ ÿêóÏ&*7 ÿÿ ÿçöÐ&*7ÿÿ ÿéöÑ&lkÿÿ ÿæõÏ&ÿÿ ÿéõÏ&U&VWÿÿÿòõÌ&Ðÿÿ ÿèôÏ&%ÉKÿÿ ÿéóÏ&¶$'ÿÿ ÿéóÏ&¹Kÿÿ ÿèöÒ&$'$&ÿÿ ÿéõÏ&$''çÿÿ ÿéòÏ& Âÿÿ ÿèóÏ& ÿÿ ÿéðÏ& |ÿÿ ÿçõÓ&#Œ)@ÿÿ ÿéóÏ& )ÿÿ ÿèöÏ&'! ÿÿ ÿèöÏ&#ŒÇÿÿ ÿèõÏ& ¯ÿÿ ÿéñÑ& $”ÿÿ ÿèôÒ&)A7ÿÿ ÿçôÏ&Å#ŒÿÿÿêìÐ&)D)Cÿÿ ÿéóÏ&xMÿÿ ÿéèÐ&ëxÿÿÿéîÐ&ö%ÿÿ ÿéôÏ&z·ÿÿ ÿéõÏ&xyÿÿÿéíÑ&0%™ÿÿ ÿéìÏ&œ¬ÿÿ ÿéòÏ&z%¡ÿÿ ÿèôÏ&xÿÿ ÿéðÏ&{zÿÿ ÿéóÏ&%š¬ÿÿ ÿèîÏ&¬%›ÿÿÿèòÐ&r&%¤%œÿÿ ÿéóÏ&¬ÿÿ ÿéëÏ&z)ÿÿÿ ÿéóÏ&¬%£ÿÿ ÿèôÏ&%¦ÿÿ ÿéòÏ&¬%§ÿÿÿèîÏ&%¤7ÿÿ ÿèõÐ&ñ%¥ÿÿ ÿéôÏ&`zÿÿ ÿéòÑ&z7ÿÿ ÿéóÐ&zJÿÿ ÿéòÏ&zÒÿÿ ÿèôÏ& 0Ýÿÿ ÿéòÏ&©¬ÿÿÿèîÒ&%¬7ÿÿ ÿéóÏ&¬ýÿÿ ÿéóÏ&zEÿÿ ÿèðÉ&A7ÿÿÿèîÏ&³&%¥7ÿÿÿèîÏ& &%¥7 ÿÿ ÿéóÏ&z&Çÿÿ ÿéïÏ&z%­ÿÿ ÿéòÏ&¬%©ÿÿ ÿéôÏ&%¨7!ÿÿ ÿéõÐ&z%ªÿÿ ÿéóÑ&¬%%ÿÿ ÿèöÏ&z%«ÿÿ ÿçóÏ&¬ÿÿ ÿèöÎ& ‹ ÿÿ ÿèóÏ& 0sÿÿ ÿèôÏ&%¬7"ÿÿ ÿèïÐ&z0¹ÿÿ ÿéôÐ&•&–zÿÿ ÿéõÏ&¬";ÿÿ ÿèòÐ& % ÿÿ ÿéîÑ&z%®ÿÿ ÿéóÐ&z$bÿÿÿèîÏ&ø&%¥ ÿÿ ÿéðÑ&z‡ÿÿ ÿéõÑ&$7#ÿÿ ÿéôÏ&%—&»¼ÿÿ ÿçóÐ&ÿ&þ7$ÿÿ ÿéóÏ&z´ÿÿ ÿéõÏ&z%´ÿÿÿéîÎ&%—7%ÿÿ ÿèöÐ&z%µÿÿ ÿéòÏ&z,¿ÿÿ ÿçôÏ&zÅÿÿ ÿç÷Ò&z±ÿÿ ÿèôÏ&z7&ÿÿ ÿéòÐ&z-/ÿÿ ÿéöÏ&z%eÿÿ ÿèôÏ&)E%öÿÿ ÿèîÐ&%¬7'ÿÿÿéõÑ&%—7(ÿÿ ÿèöÏ& 7)ÿÿ ÿéöÏ&ª7*ÿÿ ÿèïÑ&%»7+ÿÿ ÿéñÐ&nßÿÿ ÿéõÐ&$nÿÿ ÿçøÐ&n%¼ÿÿ ÿéòÐ&n}ÿÿ ÿéóÐ&n¨ÿÿ ÿéõÐ&nmÿÿ ÿèöÏ& ÿÿ ÿéóÐ&n¿ÿÿ ÿèïÐ&n;ÿÿ ÿéòÐ&mnÿÿ ÿéòÐ&obÿÿ ÿéñÐ&p'Bÿÿ ÿéöÐ&oCÿÿ ÿéìÐ&nÿÿ ÿéöÏ&$'ÿÿ ÿèôÐ&oÊÿÿ ÿéôÐ&wnÿÿ ÿéóÐ&o)ÿÿ ÿèóÐ&%Ánÿÿ ÿéñÐ&n®ÿÿ ÿéëÐ&n ÿÿ ÿèðÐ&n& ÿÿ ÿéòÐ&o0iÿÿÿèïÈ&--ÿÿ ÿèôÐ&n,,ÿÿ ÿéóÐ&n%£ÿÿ ÿéôÐ&nøÿÿ ÿèìÐ&n&ÿÿ ÿè÷Ð&ñnÿÿ ÿçõÐ&oYÿÿ ÿéòÐ&o0°ÿÿ ÿéðÐ&oÃÿÿ ÿéóÐ&p&›šÿÿ ÿéëÐ&nWÿÿ ÿçóÐ&n%Ÿÿÿ ÿéòÐ&oÝÿÿ ÿéòÐ&nèÿÿ ÿéèÐ&n%žÿÿ ÿéòÐ&¡oÿÿ ÿéòÐ&nSÿÿ ÿéõÐ&pÿÿÿ ÿéöÐ&o$ÿÿ ÿèôÐ&nPÿÿ ÿéõÐ&o\ÿÿ ÿé÷Ð&oBÿÿ ÿéòÐ&n0Õÿÿ ÿèõÐ&oÏÿÿ ÿéöÐ&oøÿÿ ÿéõÐ&n7,ÿÿ ÿéîÐ&o.ÿÿ ÿéòÐ&o±ÿÿ ÿéöÐ&oŽÿÿ ÿæöÐ&n³ÿÿ ÿéóÐ&p&,ï7-ÿÿ ÿèóÐ&nVÿÿ ÿéóÑ&o!ÿÿ ÿèôÐ&o&]7.ÿÿ ÿéôÐ&o&FEÿÿ ÿéõÐ&pãÿÿ ÿéóÐ&oÿÿ ÿéòÐ&o*ÿÿ ÿééÐ&nÿÿ ÿéóÐ&oìÿÿ ÿçõÐ&o Õÿÿ ÿéòÐ&n0Žÿÿ ÿçõÑ&n ÿÿ ÿèõÐ&nLÿÿ ÿèôÐ&néÿÿ ÿéóÐ&p0qÿÿ ÿéõÐ&pÿÿ ÿéöÐ&p&`_ÿÿ ÿéëÐ&o&–àÿÿ ÿéõÐ&pÈÿÿ ÿèòÐ&p²ÿÿ ÿéôÐ&o'¯ÿÿ ÿçöÐ&o _ÿÿ ÿèóÏ&+Î7/ÿÿ ÿèôÐ&]&aÿÿ ÿéóÐ&o%Óÿÿ ÿéíÐ&o-ÿÿ ÿéôÐ&n(mÿÿÿèôÐ&)F]ÿÿ ÿé÷Ð&n1ÿÿ ÿéòÏ&¿70ÿÿ ÿéîÐ&n±ÿÿ ÿéóÐ&n&Çÿÿ ÿèïÏ&¿& 71ÿÿ ÿéóÐ&¤oÿÿ ÿéòÐ&o >ÿÿ ÿéóÐ&o(=ÿÿ ÿéóÐ&o1ÿÿ ÿèõÑ&&pÿÿ ÿéõÐ&o•ÿÿ ÿéêÐ&o72ÿÿ ÿéîÐ&p&JKÿÿ ÿéõÐ&o#Ìÿÿ ÿéõÐ&o"zÿÿ ÿèóÐ&o#>ÿÿ ÿêõÏ&¿:ÿÿ ÿéîÐ&n!#ÿÿ ÿéóÐ&nÓÿÿ ÿéóÐ&n+ÿÿ ÿéòÐ&o0¢ÿÿ ÿèìÐ&oàÿÿ ÿéõÐ&n"îÿÿÿèôÏ&P"¸ÿÿ ÿèóÐ&nˆÿÿ ÿéôÐ&o!"ÿÿ ÿéôÐ&o#Jÿÿ ÿéðÐ&’nÿÿ ÿéöÐ&o ‹ÿÿ ÿé÷Ð&r&pqÿÿ ÿèïÐ&o0¹ÿÿ ÿéôÐ&&oÿÿ ÿèôÐ&&]ÿÿ ÿèïÐ&o!ÿÿ ÿéôÐ&o"hÿÿ ÿéòÐ&o'mÿÿ ÿéóÏ&¿&-73ÿÿ ÿéõÐ&o$uÿÿ ÿéóÐ&nMÿÿ ÿéóÐ&o$Æÿÿ ÿèöÐ&o% ÿÿ ÿè÷Ð&oËÿÿÿèôÐ&](\ÿÿ ÿêóÏ&¿&+Ï74ÿÿ ÿéñÐ&¿&†75ÿÿ ÿèõÐ&o$nÿÿ ÿèõÐ&o ÿÿ ÿéôÐ&o&žÿÿ ÿèöÑ&o,yÿÿ ÿéôÒ&stÿÿ ÿéöÐ&nNÿÿ ÿéôÑ&onÿÿ ÿèôÏ&¿&Þ76ÿÿÿæñÐ&77ÿÿ ÿèõÐ&pÔÿÿÿæóÏ&+'ÿÿ ÿéóÐ&¿&÷78ÿÿ ÿçòÐ&o%âÿÿ ÿéóÐ&o&¤ÿÿ ÿçêÐ&p%ëÿÿ ÿéóÐ&n´ÿÿ ÿèôÐ&p<ÿÿ ÿéôÐ&o%éÿÿ ÿéòÐ&o&Ÿÿÿ ÿéõÐ&o%åÿÿ ÿèôÐ&& ]ÿÿ ÿéôÐ&p&,79ÿÿ ÿéðÐ&p,†ÿÿ ÿéõÐ&p¤ÿÿ ÿéñÐ&o'ÿÿ ÿéöÐ&p'‡ÿÿ ÿéõÔ&o'‹ÿÿ ÿé÷Ñ&p½ÿÿ ÿéöÐ&?+Ðÿÿ ÿçóÐ& ª& «+Ðÿÿ ÿé÷Ð&püÿÿ ÿèõÐ&o¢ÿÿ ÿéôÒ&pQÿÿ ÿéôÐ&p'ÿÿ ÿéðÐ&o%óÿÿ ÿç÷Ò&p(Rÿÿ ÿçõÐ&p0”ÿÿ ÿèôÑ&o%„ÿÿ ÿèôÏ&P7:ÿÿ ÿçõÐ&¿& ´+ÑÿÿÿèóÐ&+Ï7;ÿÿ ÿéõÏ&¿&+Ó7<ÿÿ ÿéñÑ&p%÷ÿÿ ÿéóÐ&pOÿÿ ÿèôÏ&¿7=ÿÿ ÿéóÐ&p.cÿÿ ÿéóÐ&p.Gÿÿ ÿéòÏ&¿¾ÿÿ ÿéðÐ&pÃÿÿ ÿèõÏ&þ¹ÿÿ ÿíðÏ&þ.ðÿÿÿéòÐ&™&7>ÿÿ ÿéõÏ&xþÿÿÿõîÁ&)G7?ÿÿÿõîÁ&)G7@ÿÿ ÿêóÄ&ÑÀÿÿ ÿêõÂ&À¹ÿÿ ÿñóÂ&Ênÿÿ ÿéìÎ&nYÿÿ ÿèëÐ&À)Hÿÿ ÿéóÄ&&nÿÿ ÿêõÏ&À+Äÿÿ ÿéðÂ&nÂÿÿ ÿî÷Æ&nÿÿ ÿèïÆ&À;ÿÿ ÿéòÏ&¬Àÿÿ ÿéõÍ&Àÿÿ ÿèöÏ&À¡ÿÿ ÿéñÅ&X'Bÿÿ ÿéôÎ&ÀÚÿÿ ÿéôÏ&:nÿÿ ÿéëÉ&n%’ÿÿ ÿéöÏ&Bÿÿ ÿèõÏ&ÀËÿÿ ÿóôÂ&wÀÿÿ ÿéöÃ&ÀÞÿÿ ÿèõÏ&nÿÿ ÿèðÅ&lXÿÿ ÿìõÍ&,ÿÿ ÿèìÏ&À%Âÿÿ ÿéóÃ& ÿÿ ÿæõÇ&)IÀÿÿ ÿçõÏ&^Yÿÿ ÿçôÐ&@&X+Ôÿÿ ÿ÷óÊ&ÀQÿÿ ÿéóÎ&Àÿÿ ÿéóÅ&Àÿÿ ÿéóÏ&Àÿÿ ÿíôÐ&øÀÿÿ ÿéóÏ&ÀÔÿÿÿîîÐ&)J7Aÿÿ ÿèôÏ&ÿÿ ÿíöÌ&1ÿÿ ÿêëÐ&ÀWÿÿ ÿèìÇ&&ÿÿ ÿéêÄ&Àjÿÿ ÿéèÐ&À%žÿÿ ÿéóÂ&À¶ÿÿ ÿèòÏ&X&ÿÿ ÿéïÐ&Rnÿÿ ÿéòÐ&kÀÿÿ ÿòõÆ&nÿÿ ÿêìÏ&+Õ& ¿ÿÿ ÿéóÆ&À)Kÿÿ ÿèòË& Ÿÿÿ ÿéïÏ&X/¶ÿÿ ÿêõË&^5ÿÿ ÿèöÐ&ÀÂÿÿ ÿèîÏ&ÀXÿÿ ÿóôÂ&À&w7Bÿÿ ÿéòÏ&nTÿÿ ÿíóÏ&'¦ÿÿ ÿéóÏ&Àÿÿ ÿèôÐ&ÀPÿÿ ÿéôÏ&XPÿÿ ÿé÷Ï&+Xÿÿ ÿéóÏ&Xâÿÿ ÿèñÐ&'ÿÿ ÿèïÍ&^0ÿÿ ÿéìÉ&Àaÿÿ ÿéòÏ&À{ÿÿ ÿéðÏ&¶ÿÿ ÿêïÆ&Gÿÿ ÿéõÐ&\ÿÿ ÿéöÏ&–ÿÿ ÿêíÑ&žÀÿÿ ÿëóÍ&)Lÿÿ ÿéóÇ&ÀÁÿÿ ÿèíÒ&¾Àÿÿ ÿé÷Ì&Eÿÿ ÿéôÑ& ¸Àÿÿ ÿéóÎ&X&ÙØÿÿ ÿïóÏ&Àÿÿ ÿéóÏ&À'ÿÿ ÿèôÏ&&ÿÿ ÿëúÅ& ^ÿÿ ÿêóË&-ÿÿ ÿéóÊ&X©ÿÿ ÿé÷Ï&X'Qÿÿ ÿñòÇ&À0@ÿÿ ÿèóÐ&ÀŒÿÿ ÿêõÏ& &‡ÿÿ ÿéóÅ&Šÿÿ ÿçøÏ&=ÿÿ ÿéòÃ&*Çÿÿ ÿèôÆ&Àéÿÿ ÿéòÎ&X%>ÿÿ ÿéñÆ&Àòÿÿ ÿëóÆ&À(6ÿÿ ÿé÷Ñ&À,Íÿÿ ÿéóÏ&^0nÿÿ ÿêóÏ&X(5ÿÿ ÿéêÉ&(9ÿÿ ÿèõÐ&ÀLÿÿ ÿñóÄ&Xìÿÿ ÿæôÎ&-ÿÿ ÿéóÐ&³Àÿÿ ÿèôÐ&À>ÿÿ ÿèñÇ& &&e7Cÿÿ ÿéòÐ&X*ÿÿ ÿèõÏ&/>ÿÿ ÿéëÏ&à& 7Dÿÿ ÿêöÐ&X&âIÿÿ ÿéðÐ&ÀQÿÿ ÿçõÑ&Žÿÿ ÿçõÓ&X)@ÿÿ ÿéñÅ&¼Xÿÿ ÿéóÄ&.Mÿÿ ÿéöÈ&7Eÿÿ ÿçôÏ&ªXÿÿ ÿéöÏ&.V ÿÿ ÿêøÅ&Xüÿÿ ÿéòÐ&X%Ðÿÿ ÿéóÑ&!Xÿÿ ÿèòÏ&X²ÿÿ ÿéóÎ&À&Çÿÿ ÿëõÆ&X)Mÿÿ ÿéíÃ&X°ÿÿ ÿèöÎ&X»ÿÿ ÿé÷Î&(;Xÿÿ ÿéöÏ&"HXÿÿ ÿé÷Ä&ŒÀÿÿ ÿéõÑ&ýXÿÿ ÿèðÐ&iXÿÿ ÿèôÏ&ÛXÿÿ ÿéëÇ&À¾ÿÿ ÿéóÐ& OXÿÿ ÿéöÏ& .íÿÿ ÿéñÉ&.ï.îÿÿÿìòÆ&-9ÿÿÿîñÈ&)N-ÿÿ ÿéòÏ& YXÿÿ ÿçóÏ&X&ú-ÿÿ ÿëôÏ&X[ÿÿ ÿéóÇ&!ÿÿ ÿéòÎ&X.Xÿÿ ÿéíÈ& ˆXÿÿ ÿèïÇ&X!ÿÿ ÿéöÎ&X"Yÿÿ ÿîòÏ&À"žÿÿ ÿïóÉ&8Ôÿÿ ÿéöÐ& ßÿÿ ÿéóÐ&X"÷ÿÿ ÿéõÏ&X£ÿÿ ÿéòÐ&<^ÿÿ ÿèòÐ&X7Fÿÿ ÿéòÐ&#£ ÿÿ ÿéõÏ&"îÿÿ ÿçõÉ&Yÿÿ ÿéôÐ&#XXÿÿ ÿéöÄ& ‹Xÿÿ ÿèòÌ&Ÿÿÿ ÿéñÏ&¿Àÿÿ ÿéîÏ&J&K ÿÿ ÿè÷Ï&!ßXÿÿ ÿéöÏ&Xÿÿ ÿèóÏ&Àˆÿÿÿè÷Æ&--ÿÿ ÿéñÏ&%Xÿÿ ÿéöÏ&Nÿÿ ÿêðÏ&$|Àÿÿ ÿêòÏ&)OXÿÿ ÿðôÅ&ÀÉÿÿ ÿèõÏ&$nXÿÿ ÿêðÇ&#wXÿÿÿíëÏ& 7Gÿÿ ÿéñÇ&ÿÿ ÿéôÑ&Рÿÿ ÿéõÆ&$Xÿÿ ÿèñÑ&0— ÿÿ ÿéôÑ&ŒÀÿÿ ÿèôÏ&(‚Xÿÿ ÿèõÐ& Xÿÿ ÿíóÐ&Àåÿÿ ÿêôÅ&"†ÿÿ ÿéòÏ&X'mÿÿ ÿéóÏ& /ÿÿ ÿéôÏ&X7Hÿÿ ÿéóÏ&X+ÿÿ ÿêöÐ& Eÿÿ ÿïóÏ&#_ÿÿÿìóÌ&-&k7Iÿÿ ÿéòÏ&X-<ÿÿ ÿêöÑ&X%Øÿÿ ÿïöÍ&X7Jÿÿ ÿéðÑ& (Fÿÿ ÿéõÑ&X#€ÿÿ ÿé÷Í&X(Eÿÿ ÿéõÐ& 0^ÿÿ ÿèõÐ& &ÿÿ ÿëòÏ&X&ú7Kÿÿ ÿéòÏ&X Þÿÿ ÿéôÑ&Xnÿÿ ÿæïÇ& ,(ÿÿ ÿêõÐ& &-7Lÿÿ ÿîöË& %ÿÿ ÿêíÑ&X'‚ÿÿ ÿéóÌ&X%íÿÿÿìòÏ&ð&-7Mÿÿ ÿéôÏ& *Òÿÿ ÿçìÇ&X%êÿÿ ÿçòÏ&X%âÿÿ ÿêóÐ&X&¤ÿÿ ÿéóÉ&X)Pÿÿ ÿêòÏ&^üÿÿ ÿíõÍ&Þ& 7Nÿÿ ÿêôÇ&X7Oÿÿ ÿèôÐ&Xýÿÿ ÿèõÐ& &7Pÿÿ ÿèôÏ& 'Šÿÿ ÿíòÑ&-.ÿÿ ÿêôÐ& %ðÿÿ ÿèôÏ& -ÿÿ ÿéøÊ&À¡ÿÿ ÿéðÏ&X'ÿÿ ÿíõÇ& &!Þÿÿ ÿéõÔ&X'‹ÿÿ ÿéõË&¤ÿÿ ÿíôÉ& 7Qÿÿ ÿíõÌ& &Þ!¦ÿÿ ÿêôÍ&- ÿÿ ÿîôÏ&X%ôÿÿ ÿéóÑ&÷& 7Rÿÿ ÿçóÑ&¡ÿÿ ÿéóÏ&X%õÿÿ ÿèôÉ&.|Xÿÿ ÿìôÌ&-7Tÿÿ ÿéõÑ&5ÿÿ ÿéøÏ& )Qÿÿ ÿéðÊ&X%óÿÿ ÿéõÏ&X!×ÿÿ ÿíôÏ&X.zÿÿ ÿéóÆ& %hÿÿ ÿèóÐ& @ÿÿ ÿèòÍ&X%[ÿÿ ÿèõÑ&X/üÿÿ ÿíõÐ& &Þ7Uÿÿ ÿéöÐ&H ÿÿ ÿçôÏ&0 ÿÿ ÿèòË&X-ÿÿÿêôË&-7Vÿÿ ÿéñÑ& %÷ÿÿ ÿéîÏ& 7Wÿÿ ÿéóÏ&O ÿÿ ÿçöÏ& 7Xÿÿ ÿçõÐ& ‡ÿÿ ÿèöÐ& &07Yÿÿ ÿçòÏ&(¼ÿÿ ÿçõÏ&¼7[ÿÿ ÿçøÏ&¼7\ÿÿ ÿçøÏ&EüÿÿÿçõÏ&GFÿÿ ÿç÷Í&z)Rÿÿ ÿéóÐ&u&wvÿÿ ÿè÷Ñ&)S)Rÿÿ ÿçûÏ&! 7]ÿÿ ÿéóÎ&xÿÿ ÿêõÄ&)Vÿÿ ÿéóË&xyÿÿ ÿéöÏ&ynÿÿÿèõÏ&›1 ÿÿÿëõÄ&+·ÿÿ ÿéôÆ&x! ÿÿ ÿéóÉ&xïÿÿÿéõÏ&7^ÿÿÿêõÏ&_aÿÿ ÿéöÎ&mnÿÿ ÿêõÑ&*)™ÿÿ ÿèõÏ& 1 ÿÿÿéõÆ&Ýÿÿ ÿéöÑ&)T)UÿÿÿêõÐ&.ÿÿ ÿèöË&.ÝnÿÿÿéöÐ&)Xnÿÿ ÿêöÏ&)Y)Tÿÿ ÿçöÏ&- nÿÿ ÿèöÐ&)W"½ÿÿÿêõÑ&  ÿÿ ÿëõÉ& —+ÿÿÿéõÉ& ˜ÿÿÿçñÏ&& øÿÿ ÿêöÐ&.á)Tÿÿ ÿéöÑ&)[)WÿÿÿêöÄ&)WšÿÿÿçñÏ&&ÿÿ ÿéöÏ&)T)ZÿÿÿêöÏ&.7_ÿÿ ÿêõÎ&%‡0ÿÿÿéõÏ&µ+ÿÿ ÿêöÎ&)\)Wÿÿ ÿêõÑ&..ÿÿ ÿéöÒ&)])WÿÿÿêõÑ&-,ÿÿÿêõÉ&/.ÿÿ ÿèöÐ&0)WÿÿÿçòÏ&+¶7`ÿÿ ÿéóÏ&5&Nÿÿ ÿéöË&nÿÿ ÿêóÎ&³´ÿÿÿéíÒ&)`)^ÿÿ ÿòòÎ&%Fÿÿ ÿêëÎ&-!ÿÿÿêöÎ&)_%GÿÿÿèòÂ&~ÿÿ ÿèåÑ&€ÿÿÿêìÑ&ƒ&‚ÿÿ ÿêâÆ&ÿÿÿèóÂ&qoÿÿÿéíÆ&rÿÿÿèíÐ&FÅÿÿÿèÞÐ&)áÆÿÿÿðóÏ&p´ÿÿ ÿçóÆ&&¿-"ÿÿÿéâÍ&)â7eÿÿÿéìÐ&%5%4ÿÿ ÿéóÐ&ÂÃÿÿÿêïÎ&G*ØÿÿÿêòÎ&F¾ÿÿÿéöÎ&ÄFÿÿÿéõÏ&FEÿÿÿèôÏ&GÿÿÿèöÏ&F¥ÿÿÿéöÏ&{ÿÿ ÿêèÏ& µïÿÿÿèõÏ&(á)àÿÿÿèóÏ&ÿÿÿéåÏ&)ß7fÿÿ ÿè÷Ñ&M7gÿÿÿéöÐ&{³ÿÿÿèðÐ&-1+#ÿÿ ÿéõÐ&ÀÁÿÿÿèôÉ&-07hÿÿ!ÿéÞÐ&-))ßÿÿ ÿè÷Ð&-2äÿÿÿéóÐ&GNÿÿÿéõÐ&ÿÿÿïôÏ&Gôÿÿ ÿêõÈ&ƒ„ÿÿÿé÷Ï&®ÿÿ ÿèõÎ&-3Mÿÿ ÿèõÑ&ä7jÿÿÿêõÏ&GdÿÿÿçõÑ&{ ÿÿ ÿè÷Ñ&äåÿÿÿíîÈ&„7lÿÿÿéôÏ&|{ÿÿÿéöÇ& ×{ÿÿÿéóÎ&&ÇÿÿÿéöÐ&"IÿÿÿîñÏ&!aÿÿÿíóÏ&´ÿÿÿéôÎ&*Ñÿÿ ÿéôÈ& 7rÿÿÿéóÏ&0ÄÿÿÿîòÍ&& ÿÿ ÿèöÏ&?ÿÿ ÿèöÐ&?&ÿÿ ÿéóÐ&ˆ-#ÿÿ ÿèðÑ&‚sÿÿ ÿèðÑ&‚1ÿÿ ÿèðÑ&‚7ÿÿ ÿèðÑ&‚•ÿÿ ÿèðÑ&‚8ÿÿÿèóÒ&9}ÿÿ ÿèõÑ&‚7vÿÿ ÿèðÑ&‚7wÿÿ ÿèñÑ&‚7xÿÿ ÿèðÑ&‚7yÿÿ ÿèðÑ&‚7zÿÿ ÿèöÑ&%ù‚ÿÿ ÿèðÑ&‚7ÿÿ ÿèôÑ&‚7{ÿÿ ÿèòÑ&¦‚ÿÿ ÿèôÑ&‚7|ÿÿÿèóÒ&}:ÿÿ ÿèôÑ&‚7}ÿÿ ÿçðÑ&‚7~ÿÿ ÿèñÑ&‚7ÿÿ ÿèõÑ&‚7€ÿÿ ÿèóÑ&‚7ÿÿ ÿèöÑ&‚7‚ÿÿÿèóÒ&}7ƒÿÿ ÿèñÑ&‚7„ÿÿ ÿèðÑ&§‚ÿÿÿéòÒ&€7…ÿÿ ÿèñÑ&‚7†ÿÿÿèôÒ&}éÿÿ ÿèóÑ&‚7‡ÿÿ ÿèóÑ&‚7ˆÿÿÿèóÒ&}&´ÿÿÿæ÷Ò&}~ÿÿÿèóÒ&}7‰ÿÿ ÿèôÑ&‚7Šÿÿ ÿçðÑ&u‚ÿÿ ÿèðÑ&‚7‹ÿÿ ÿèðÑ&‚7ŒÿÿÿèóÒ&}7ÿÿÿèóÒ&}7Žÿÿ ÿèðÑ&‚7ÿÿÿèóÒ&}ÿÿ ÿèñÑ&‚7ÿÿ ÿèðÑ&‚‘ÿÿ ÿèóÑ&‚7‘ÿÿÿèôÒ&}_ÿÿÿèóÒ&}ÿÿ ÿèðÑ&‚7’ÿÿÿèôÒ&}9ÿÿ ÿèðÑ&‚Ÿÿÿ ÿèðÑ&‚7“ÿÿÿèóÒ&}uÿÿ ÿèñÑ&‚7”ÿÿÿèóÒ&}»ÿÿÿèóÒ&}äÿÿÿèôÒ&}Gÿÿ ÿèðÑ&‚ãÿÿÿèóÒ&}åÿÿ ÿèóÑ&÷‚ÿÿ ÿèóÑ&­‚ÿÿÿèóÒ&}7•ÿÿ ÿèðÑ&‚7–ÿÿÿèóÒ&}7—ÿÿÿèóÒ&}7˜ÿÿ ÿèðÑ&‚7™ÿÿÿèòÒ&€7šÿÿÿèóÒ&}7›ÿÿÿèóÒ&}7œÿÿÿèóÒ&}7ÿÿÿèóÒ&}7žÿÿÿèóÒ&}7ŸÿÿÿèõÒ&}7 ÿÿÿèóÒ&}7¡ÿÿ ÿèôÑ&‚7¢ÿÿ ÿèõÑ&‚7£ÿÿÿèóÒ&}7¤ÿÿ ÿèðÑ&‚7¥ÿÿ ÿèðÑ&k‚ÿÿ ÿèðÑ&ë‚ÿÿÿèóÒ& P}ÿÿÿèúÒ&€ÿÿ ÿèõÑ&‚7¦ÿÿ ÿèðÑ&‚7§ÿÿ ÿèõÑ&‚7¨ÿÿ ÿèñÑ&«‚ÿÿ ÿèöÑ&‚7©ÿÿÿèóÒ&}7ªÿÿ ÿèòÑ&‚7«ÿÿ ÿèòÑ&‚7¬ÿÿ ÿèðÑ&‚7­ÿÿ ÿèðÑ&ë‚ÿÿ ÿèðÑ&‚7®ÿÿÿéòÒ&€7¯ÿÿÿèôÒ&}7°ÿÿÿè÷Ò&}7±ÿÿÿèóÒ&}oÿÿÿèôÒ&}7²ÿÿÿèóÒ&}ÕÿÿÿèóÒ&#}ÿÿÿèóÒ&}#ÿÿÿèõÒ&}7³ÿÿÿéúÒ&€#àÿÿÿèóÒ&}& µ ¶ÿÿÿèóÒ&}"ÿÿÿèóÒ&}4ÿÿÿçóÒ&}7´ÿÿÿèóÒ&}7µÿÿÿçôÒ&}"°ÿÿÿèóÒ&}7¶ÿÿÿçóÒ&} ŽÿÿÿèóÒ&!Æ}ÿÿÿèôÒ&}7·ÿÿÿèôÒ&}#·ÿÿÿèôÒ&}"‡ÿÿÿèõÒ&}7¸ÿÿÿèöÒ&}7¹ÿÿÿèôÒ&}$ŠÿÿÿèóÒ&}7ºÿÿÿéöÒ&€& Ú ÛÿÿÿéõÒ&€ÌÿÿÿèõÒ&}7»ÿÿÿçòÓ&}7¼ÿÿÿèóÒ&€7½ÿÿÿèôÒ&}7¾ÿÿÿèóÒ&}7¿ÿÿ ÿèòÑ&‚#ÿÿ ÿèôÑ&‚7ÀÿÿÿéóÒ&€7ÁÿÿÿèóÒ&}7Âÿÿÿè÷Ò&}#DÿÿÿèõÒ&}7ÃÿÿÿèôÒ&}7ÄÿÿÿèóÒ&}7ÅÿÿÿèöÒ&}7ÆÿÿÿèõÒ&}7ÇÿÿÿéöÒ&€7ÈÿÿÿèõÒ&}7ÉÿÿÿæõÒ&}7ÊÿÿÿèòÒ&€7ËÿÿÿèôÒ&}7ÌÿÿÿèóÒ&}7ÍÿÿÿèóÒ&}7ÎÿÿÿçòÓ&}7ÏÿÿÿèôÒ&}7ÐÿÿÿèôÒ&}%ÿÿÿéöÒ&€7ÑÿÿÿçôÒ&}7ÒÿÿÿæóÒ&}7ÓÿÿÿèöÒ&}7ÔÿÿÿéôÒ&€7ÕÿÿÿçòÓ&}7ÖÿÿÿéòÒ&€7×ÿÿÿçõÓ&}7ØÿÿÿèòÒ&€7ÙÿÿÿèóÒ&}7ÚÿÿÿèôÒ&}7ÛÿÿÿèòÒ&€7ÜÿÿÿèôÒ&}7ÝÿÿÿçöÓ&}7ÞÿÿÿèôÒ&€7ßÿÿÿèõÒ&}7àÿÿÿèôÒ&}7áÿÿÿèòÒ&€7âÿÿÿçòÓ&}7ãÿÿÿè÷Ò&}7äÿÿÿèôÒ&}7åÿÿÿèóÒ&}7æÿÿÿèôÒ&}7çÿÿÿçøÓ&}7èÿÿÿèôÒ&€%wÿÿÿçöÓ&}7éÿÿÿçóÓ&}7êÿÿÿéôÒ&€7ëÿÿÿçòÓ&}7ìÿÿÿéõÒ&€7íÿÿÿèóÒ&}7îÿÿÿçòÓ&}7ïÿÿÿçöÓ&}7ðÿÿÿçôÓ&}7ñÿÿÿæôÒ&}&‘7òÿÿÿçôÓ&}7óÿÿÿçòÓ&}7ôÿÿÿç÷Ó&}7õÿÿÿèóÒ&}7öÿÿÿçòÓ&}7÷ÿÿÿçôÓ&}7øÿÿÿæóÒ&}&‘7ùÿÿÿçöÓ&}7úÿÿ ÿçöÏ&ƒ7üÿÿ ÿîöÏ&ƒ7ýÿÿ ÿçöÏ&ƒ&…„ÿÿÿìðÐ&œ-%ÿÿ'ÿìèÐ&T‹ÿÿÿéðÒ&-$ÿÿ ÿéðÐ&‹ÿÿ ÿêñÐ&ŒÿÿÿéìÏ&Y%6ÿÿ"ÿèòÏ&-&7ÿÿÿïðÐ&-'-(ÿÿÿèõÏ&‘ÿÿÿìöÎ&D-,ÿÿÿçõÏ&’Yÿÿ ÿçõÐ&-)7ÿÿÿÿèôÐ&PÿÿÿéóÏ&æ“ÿÿÿéóÐ&-)8ÿÿÿíôÎ&’,”ÿÿÿé÷Ï&c“ÿÿÿêóÎ&E’ÿÿÿéïÁ&ÿÿÿëõÏ&’’ÿÿ ÿéïÎ&-*ÜÿÿÿîòÏ&L-,ÿÿÿéëÐ&-)8ÿÿÿéòÐ&% -,ÿÿÿèöÒ&îíÿÿÿèõÑ&-+’ÿÿÿêòÏ&’üÿÿÿèõÐ&&-,8ÿÿÿèóÐ&+R-,ÿÿÿêòÐ&¨-.ÿÿÿéòÎ&- -,ÿÿÿçóÐ& ã!,ÿÿ ÿéóÐ&-4ûÿÿ ÿéôÐ&®-5ÿÿÿéôÏ&­®ÿÿ ÿéõÏ&%°†ÿÿÿéõÏ&+¬†ÿÿ ÿéõÏ&† ýÿÿ ÿéõÏ&†! ÿÿÿçôÐ&!! ãÿÿ ÿéõÑ&†%¯ÿÿ ÿéõÏ&†8ÿÿ ÿéõÐ&%±†ÿÿ ÿéõÐ&%²%³ÿÿ ÿîóÅ& ö8ÿÿ ÿîóÅ& ö8ÿÿ ÿîóÄ& ø8ÿÿ ÿîóÐ& ûÿÿ ÿîóÏ&Ù ÷ÿÿ ÿîóÈ&r øÿÿ ÿîóÐ& ÷ÿÿ ÿîóÒ& ö8ÿÿ ÿîóÐ& ø8 ÿÿ ÿîóÐ&$+ ÷ÿÿ ÿîóÓ& ø8 ÿÿ ÿîóÏ& û&ïîÿÿ ÿîóÏ& û8 ÿÿ ÿîõÏ& ø8 ÿÿ ÿîóÏ&ñ&ð øÿÿ ÿîóÏ&ò øÿÿ ÿîóÐ&Å øÿÿ ÿîóÏ&-&, øÿÿ ÿîóÐ&Æ øÿÿ ÿîóÒ&8 ÿÿ ÿîóÑ&‹ øÿÿ ÿîóÐ&•& öÇÿÿ ÿîôË& ùÿÿ ÿîóÐ& ú ÿÿ ÿîóÌ& ø8ÿÿ ÿîóÏ& ù8ÿÿ ÿîóÐ&Ð øÿÿ ÿîõÏ&;&ÿÿ ÿîóÏ&Èÿÿ ÿîôÓ&Ô8ÿÿ ÿîôÏ&Ó& øÒÿÿ ÿîôÏ&…&" úÿÿ ÿîóÒ&Ñ øÿÿ ÿîóÑ& ú8ÿÿÿêóÄ&ÑtÿÿÿéóÄ& ߨÿÿÿéðÀ&tÂÿÿÿðóÏ& ßÿÿÿêòÎ& ßÿÿÿêîÏ&t*ÚÿÿÿééÏ&¸!pÿÿÿìõÏ& à!qÿÿÿêóÊ& ß!rÿÿÿêóÏ& ß!sÿÿÿéôÎ&Ú ßÿÿÿçõÄ& ß!vÿÿÿêðÁ& ß!nÿÿÿèõÏ&‘0 ÿÿÿèôÏ& à(/ÿÿÿëôÏ& à"ÿÿÿíõÍ&n ßÿÿÿòôÇ& ß…ÿÿÿòôÂ& ß!mÿÿÿéïÏ& ß& ó!IÿÿÿéìÏ& ß!wÿÿÿçóÐ& ß%ŸÿÿÿèöÐ& ßÿÿÿéòÐ&t0öÿÿ ÿêîÐ&%H)bÿÿÿé÷Ï&S0¡ÿÿÿêòÏ&tSÿÿÿéóÅ& ß'ìÿÿ ÿéöÐ&2-6ÿÿÿèõÏ& ß+ÿÿÿêðÇ&Ã0¡ÿÿ ÿéôÏ&ƒ2ÿÿÿíöÌ&‡1ÿÿÿéêÄ&j ßÿÿÿê÷Ï&t³ÿÿÿéóÏ& ßÔÿÿÿïóÏ& ß~ÿÿÿéôÏ&0 ]ÿÿÿè÷Ï& à)ÿÿÿéòÆ&0 ßÿÿÿêêÏ&µ ßÿÿÿêíÑ& àžÿÿÿèíÏ& ßÿÿÿïóÈ& ßÿÿ ÿéõÐ&ñ8ÿÿÿèòÐ& ßÖÿÿÿèöÎ&Ö ßÿÿÿé÷Ì&B‡ÿÿÿéðÏ& ß¶ÿÿÿêõÉ& ß~ÿÿÿéòÐ&‡÷ÿÿÿéñÈ&8ÿÿÿéóÑ&‡!ÿÿÿçõÑ&  ßÿÿÿéêÐ&c ßÿÿÿéôÈ&‡/ÿÿÿëõÏ& ß’ÿÿÿèóÐ&Œ0 ÿÿÿééÉ& ßÿÿÿé÷Ï&‡'QÿÿÿêøÑ& 0 ÿÿÿëñÆ& ßLÿÿÿéòÐ& à*ÿÿÿêîÈ& àßÿÿÿéöÏ& ßÿÿÿñõÏ&)z ßÿÿÿèôÏ& àÛÿÿÿéóÏ& à ÿÿÿéöÏ&"H àÿÿÿèôÏ& à'ØÿÿÿçõÏ&Þ0¡ÿÿÿìôÊ&'×0 ÿÿÿéóÏ& ß'°ÿÿÿéóÏ& à¤ÿÿÿéóÏ& à)aÿÿÿéóÏ&1 ßÿÿÿìõÏ&‡'ÙÿÿÿïòÏ&‡£ÿÿÿéôÐ& ߟÿÿÿêôÐ&)b8ÿÿÿéôÏ&'¯ àÿÿÿïñÍ&‡)cÿÿÿêóÐ&‡)dÿÿÿèöÏ& à `ÿÿÿé÷Ä&Œ ßÿÿÿçòÈ&ÇÆÿÿÿèóÏ&+­0 ÿÿÿéñÎ& à(AÿÿÿéëÇ&¾ àÿÿÿéöÏ& àÿÿÿéóÏ&#\&)e8ÿÿÿéóÏ& ß+ÿÿÿéóÊ&"0 ÿÿÿèõÍ& à"|ÿÿ ÿêôÐ&#b&#c)bÿÿÿéõÈ& ß";ÿÿ ÿçõÏ&)f)gÿÿÿèòÍ&)h0¡ÿÿÿéòÏ&‡0¢ÿÿÿè÷Ï&‡&"Î%ýÿÿÿëòÎ&ú&ù‡ÿÿÿéõÏ&‡*oÿÿ ÿèõÑ&T8ÿÿÿçóÐ&‡æÿÿÿìôÎ&‡*qÿÿÿèôÏ&0 0£ÿÿÿêðÑ&‡‡ÿÿ ÿèóÊ&$ÅÿÿÿèóÇ& á àÿÿÿéôÏ&‡‚ÿÿÿéôÑ&‡nÿÿÿéòÏ&tÿÿÿèõÏ&£‡ÿÿÿëîÏ& à)jÿÿÿêöÐ&‡)kÿÿÿçôÐ& ß1ÿÿÿéðÑ&‡)lÿÿÿéòÏ& Þ‡ÿÿÿéóÉ&†‡ÿÿÿðóÏ& à¦ÿÿÿèøË&,c&0¡8ÿÿÿéñÏ&n&M&)nÿÿÿìõÏ& à/ÿÿÿéôÑ&û)eÿÿÿêõÏ&%è‡ÿÿÿêóÐ&‡&¤ÿÿÿéïÊ&0 8ÿÿÿîöË& ßÿÿÿéóÉ& ß%ãÿÿÿèðÎ&.\.xÿÿÿéôÏ&‡'ãÿÿÿèõÐ&‡&8 ÿÿÿèôÏ&‡'äÿÿÿçìÇ&.x%êÿÿÿíóÐ&‡'¾ÿÿÿéöÐ&‡.#ÿÿÿéôÎ&‡%'ÿÿÿçôÏ&‡'|ÿÿÿéîÊ&‡&ï8!ÿÿÿèôÏ&‡%òÿÿÿéöÒ&‡*€ÿÿÿéòÐ&0¡0¥ÿÿÿéöÑ&‡&ÄÿÿÿéòÑ&W)eÿÿ ÿéðÌ&-¹8"ÿÿÿéøÊ& ß¡ÿÿÿèõÐ&‡¢ÿÿÿéñÏ& ß(ÿÿÿçóÑ& ß¡ÿÿÿéóÏ&‡8#ÿÿÿèôÑ&%„0 ÿÿÿèõÑ& à/üÿÿÿçóÑ& à8$ÿÿÿèñÈ&.x,ÀÿÿÿéöÐ&}‡ÿÿÿéñÏ&‡)mÿÿ ÿéðÓ&)n…ÿÿ ÿéñÒ&/ý8%ÿÿÿæðÑ&‡)oÿÿÿèïÉ&ô&.y8&ÿÿÿéðÌ&/Œ0åÿÿ ÿèõÏ&!C)rÿÿ ÿéóÏ&)rÿÿÿéóÐ&ö8*ÿÿ ÿëêÏ&)p*uÿÿ ÿéèÐ&‹&/6ÿÿ ÿéõÏ&Š`ÿÿ ÿëôÏ&‹žÿÿ ÿèöÏ&Šáÿÿ ÿëôÏ&Š&Aÿÿ ÿëôÏ&Šøÿÿ ÿèõÑ&Љÿÿ ÿéõÏ&Š%´ÿÿ ÿêîÑ&Š'ÿÿ ÿéõÏ&Š!×ÿÿ ÿèôÏ&/¢/þÿÿ ÿêõÂ&»ªÿÿ ÿéôÆ&Ã)qÿÿ ÿéóÄ&Ã&ÿÿÿéõ¿&g´ÿÿÿìóÌ&gýÿÿ ÿêòÎ&Ãÿÿ ÿñóÁ&ÃÊÿÿÿñðÎ&g)uÿÿ ÿèöÁ&»ÿÿ ÿêóÐ&¿@ÿÿÿéíÇ&g%9ÿÿ ÿèïÆ&Ã;ÿÿ ÿèôÏ&@(/ÿÿ ÿéóÅ&p»ÿÿÿéöÏ&C)sÿÿ ÿéöÎ&ÃÄÿÿ ÿèîÏ&)t8+ÿÿÿéíÏ&C&+À8,ÿÿ ÿéõÑ&²Ãÿÿ ÿèöÏ&çÿÿÿêôÎ&¿gÿÿ ÿéóÆ&‡»ÿÿÿéñÅ&gyÿÿÿìõÍ&gÿÿ ÿèõÇ&»Uÿÿ ÿéôÅ&ÃÿÿÿéöÏ&giÿÿ ÿéôÐ&Ã*rÿÿÿèðÏ&·Cÿÿ ÿìõÏ&Ãÿÿ ÿæõÇ&@)IÿÿÿçöÇ&Ì+dÿÿÿéóÏ&*s¸ÿÿ ÿéóÐ&ÃUÿÿ ÿñõÆ&Ãÿÿ ÿñòÁ&Ã&ÿÿÿéóÁ&C¶ÿÿ ÿîóÏ&òÿÿÿèóÏ&gîÿÿ ÿèôÏ&63ÿÿÿéòÏ&gNÿÿÿéòÏ&/’CÿÿÿéóÐ&*s0ÒÿÿÿèôÂ&*sÿÿ ÿñóÏ&Ã'ËÿÿÿñóÐ&g)vÿÿÿê÷Ï&g³ÿÿ ÿèôÐ&)t0‰ÿÿ ÿéöÏ&Ã8-ÿÿ ÿéóÅ&ÃÿÿÿçõÏ&FgÿÿÿíôÐ&øCÿÿÿéò¿&Îgÿÿ ÿèóÏ&@ÿÿ ÿèôÏ&Ã)wÿÿ ÿéïÐ&ÃRÿÿÿñòÇ&C)xÿÿ ÿèòÏ&Ã-ºÿÿ ÿèóÅ&»lÿÿ ÿèóÏ&@)tÿÿ ÿïõÐ&Ã8.ÿÿÿêòÏ&g ÿÿ ÿêõÎ&»¹ÿÿ ÿéëÏ&ôÿÿÿéöÏ&˜CÿÿÿïóÏ&*s~ÿÿÿéìÐ&CÝÿÿÿéóÏ&g0Öÿÿ ÿéóÏ&Ãÿÿ ÿêõÑ&»2ÿÿ ÿéõÐ&Ãÿÿ ÿêõÉ&ÃHÿÿÿèïÏ&C&¡ ÿÿÿëóÆ&Cæÿÿ ÿéìÈ&ÃaÿÿÿéòÇ&ÒCÿÿ ÿéöÇ&Ã|ÿÿÿæöÏ&C³ÿÿ ÿæôÏ&Ãÿÿ ÿîòÄ&éÿÿ ÿéêÐ&Öÿÿ ÿêóÍ&ÃEÿÿ ÿèõÐ&ÃLÿÿÿéöÐ&C(lÿÿÿèôÏ&C Ùÿÿ ÿèôÏ&@0Ýÿÿ ÿéóÏ&Ã)yÿÿ ÿèñÏ&0e)tÿÿÿé÷Ï&gcÿÿ ÿèôÐ&>@ÿÿ ÿæöÆ&»AÿÿÿðóÍ&0gÿÿ ÿéíÏ&?Ãÿÿ ÿèôÆ&Ãrÿÿ ÿèóÏ&)t0ÊÿÿÿêîÈ&Cßÿÿ ÿéïÌ&ÃWÿÿ ÿéöÏ&Öÿÿ ÿñòÌ&Ã)ÇÿÿÿéõÏ&*t&.œÿÿ ÿêøÅ&»){ÿÿ ÿèñÈ&0Í)tÿÿÿéíÉ&ÉÌÿÿ ÿïôÏ&Ã)|ÿÿÿñóÐ&gÉÿÿ ÿéóÑ&Ã"ÿÿ ÿéóÏ&Ã'ÿÿÿéöÏ&.í*tÿÿÿéîÇ&ìCÿÿ ÿèñÐ&•&)}80ÿÿÿéôÑ&9Ìÿÿ ÿéëÇ&@¾ÿÿÿé÷Ä&ŒCÿÿÿêòÆ&*sÿÿÿèòÏ&C.ÿÿ ÿéóÏ&ÃÿÿÿèôÐ&*s]ÿÿ ÿéõÐ&ËÿÿÿéõÐ&C)ÿÿ ÿéóÎ&Ã&Çÿÿ ÿéøÏ&à $ÿÿÿéöÏ&C"HÿÿÿçôÏ&CªÿÿÿéïÇ&%­Cÿÿ ÿéõÐ&Ã#¡ÿÿÿåóÏ&-7*sÿÿ ÿè÷Ð&à /ÿÿ ÿèîÉ&-8)}ÿÿÿèõÎ&°*sÿÿÿéðÑ&C/ƒÿÿ ÿèóÏ&Ã/×ÿÿ ÿéñÆ&Ã!Œÿÿ ÿéðÈ&Ã’ÿÿÿèõÏ&g!áÿÿ ÿçíÐ&»:ÿÿ ÿèîÐ&)t81ÿÿ ÿèóÆ&Ã/®ÿÿ ÿèõÈ&Ã^ÿÿÿïóÎ&CÙÿÿÿéôÏ&C&##(ÿÿÿéöÄ& ‹Cÿÿ ÿçõÉ&Ã!0ÿÿ ÿéñÏ&ÂÃÿÿÿïñÏ&Ì,£ÿÿ ÿéöÐ&@!ÿÿÿéïÑ&C!ÁÿÿÿéóÏ&cCÿÿÿñôÏ&C"hÿÿ ÿéóÏ&» fÿÿ ÿîòÏ&Ã" ÿÿÿêðÏ&g$­ÿÿ ÿéòÐ&Ã$Îÿÿ ÿéñÇ&Ã"Ûÿÿ ÿéóÈ&@$ËÿÿÿèóÐ&CDÿÿÿéóÌ&$›Ìÿÿ ÿèòÐ&»$ÿÿÿéðÑ&C$¦ÿÿÿéïÆ&C#'ÿÿ ÿéôÑ&»#øÿÿÿéóË&Ì'nÿÿ ÿíòÐ&»2ÿÿ ÿèóÎ&)~ÃÿÿÿêðÑ&C‡ÿÿÿèôÐ&Cÿÿ ÿèõÐ&@ÿÿ ÿèòÑ&)&¸ºÿÿÿîòÏ&ÌLÿÿÿêôÍ&C/…ÿÿÿîõÏ&C)iÿÿÿëöÐ&C/°ÿÿÿéóÏ&C*ÿÿ ÿèóÏ&)82ÿÿÿèõÐ&Ì&83ÿÿÿéíÏ&C-9ÿÿÿé÷Í&(ECÿÿ ÿèñÏ&Ã*ÿÿÿéñÏ&*&#Q*tÿÿÿèóÐ&Ì*ÿÿÿçõÑ&xCÿÿ ÿéôÇ&Ã)Ëÿÿ ÿèõÐ&Ã(ÿÿ ÿéõÑ&$84ÿÿÿé÷Ð&Ì/±ÿÿÿéòÏ&C-;ÿÿ ÿèóÐ&k&)}85ÿÿÿèôÉ&C86ÿÿÿèôÐ&ýÌÿÿÿéòÍ&C87ÿÿ ÿêïÑ&Ã'#ÿÿÿîöË&CÿÿÿéîÊ&C&ï88ÿÿÿéôÎ&Ì%'ÿÿÿéóÉ&C%ãÿÿÿçòÏ&C%âÿÿÿêòÏ&Cüÿÿ ÿéöÏ&»0ÛÿÿÿèôÎ&%(*tÿÿÿéòÈ&Cÿÿ ÿèõÊ&A89ÿÿÿéöÏ&*s'õÿÿÿéõÏ&CšÿÿÿéõÏ&C%åÿÿÿèõÐ&&*t8:ÿÿÿèöÑ&%î*tÿÿÿèõÐ&&Ì8;ÿÿÿéðË&C0·ÿÿÿéõÏ&/¦Cÿÿ ÿííÑ&8<ÿÿÿéñÏ&C*vÿÿÿèöÐ&C%µÿÿÿîôÈ&C ÿÿÿéòÏ&*t/§ÿÿÿéõÎ&,‹CÿÿÿçóÑ&¡CÿÿÿèöË&Ž*tÿÿÿìôÐ&C*xÿÿ ÿëöÐ&.¬8=ÿÿÿéðÊ&C%óÿÿÿéóÏ&C-=ÿÿÿéòÒ&$v&*t8>ÿÿÿéõÏ&+6ÌÿÿÿéôÐ&C8?ÿÿÿçòË&C8@ÿÿÿèôÑ&Ì%„ÿÿÿéóÆ&%o*tÿÿ ÿéîË&n%tÿÿÿèòÍ&C%[ÿÿÿéòÈ&C->ÿÿÿèóÐ&C)õÿÿÿèòÈ&.¥CÿÿÿèóÎ&*t8BÿÿÿèöÈ&Ì-?ÿÿ ÿéöÐ&¯%tÿÿÿéòÏ&*t8CÿÿÿéôÈ&Ì8DÿÿÿçõÐ&*t‡ÿÿÿéõË&-@*tÿÿ ÿéòÐ&21ÿÿ ÿéìÑ&±Þÿÿ ÿéõÐ&1yÿÿ ÿéìÑ&±Yÿÿ ÿéõÑ&±ÿÿ ÿéðÐ&2ÿÿ ÿéóÑ&±²ÿÿ ÿèöÑ&± ÿÿ ÿéõÑ&`±ÿÿ ÿè÷Ñ&±¬ÿÿ ÿèôÑ&4ÿÿ ÿèñÑ&ñ-Dÿÿ ÿéóÑ&±ßÿÿ ÿéòÑ&±0¬ÿÿ ÿèõÑ&±Uÿÿ ÿéîÑ&4œÿÿ ÿèòÑ&Î-Dÿÿ ÿéóÑ&K-Aÿÿ ÿéòÑ&±(-ÿÿ ÿéêÑ&j4ÿÿ ÿçòÑ&±Pÿÿ ÿéòÑ&²4ÿÿ ÿéõÑ&54ÿÿ ÿéõÑ&±ÿÿ ÿèóÑ&î-Dÿÿ ÿéóÑ&±Uÿÿ ÿéóÑ&±¸ÿÿ ÿéóÑ&±ÿÿ ÿéõÑ&3±ÿÿ ÿèìÑ&!w-DÿÿÿèïÏ&.§.¦ÿÿ ÿéêÑ&4(oÿÿ ÿèôÏ&ƒ4ÿÿ ÿèîÑ&4Xÿÿ ÿéõÑ&±ÿÿÿ ÿéïÑ&4Hÿÿ ÿéðÑ&4¶ÿÿ ÿé÷Ñ&KEÿÿÿëîÈ&µ*}ÿÿ ÿéöÑ&4˜ÿÿ ÿéõÑ&4Žÿÿ ÿèôÑ& ¸-Dÿÿ ÿåðÑ&£-Dÿÿ ÿéóÑ&4Eÿÿ ÿéöÑ&”4ÿÿ ÿè÷Ñ&'Ó-Dÿÿ ÿéôÑ&K.Kÿÿ ÿéôÑ&±|ÿÿ ÿèìÑ&K'®ÿÿ ÿèíÑ&4*ÿÿ ÿèöÑ&4»ÿÿ ÿé÷Ñ&41ÿÿ ÿéóÑ&K1ÿÿ ÿéóÑ&4*|ÿÿ ÿéóÓ&*~8Hÿÿ ÿëõÏ&*}&bcÿÿ ÿèëÑ&¾-Dÿÿ ÿè÷Ñ&Œ-Dÿÿ ÿéôÑ&4Òÿÿ ÿéóÑ&4!ÿÿ ÿéôÑ&4!"ÿÿ ÿéôÑ&4 ™ÿÿ ÿéîÑ&K!#ÿÿ ÿèóÐ&* gÿÿ ÿéíÑ&45ÿÿ ÿèòÑ&4Ÿÿÿ ÿéîÑ&4 xÿÿ ÿéõÑ&4"îÿÿ ÿçõÑ&KYÿÿ ÿéóÑ&4"ÿÿ ÿèóÑ&"ø-Dÿÿ ÿé÷Ñ&4"cÿÿ ÿéöÑ&4",ÿÿ ÿéïÑ&4ÿÿ ÿèòÑ&-C-Dÿÿ ÿçóÑ&4æÿÿÿçîÏ&ì&ê ÿÿ ÿéôÑ&4žÿÿ ÿéóÑ&$›Kÿÿ ÿéñÑ&4ÿÿ ÿéïÑ&4&œ›ÿÿ ÿéîÑ&I&JKÿÿ ÿéóÑ&*~8Iÿÿ ÿèõÑ&š-Dÿÿ ÿèôÑ&ýKÿÿ ÿéòÑ&4ÿÿ ÿéóÑ&4'ÿÿ ÿèöÒ&**€ÿÿ ÿéôÑ&4&!¦úÿÿ ÿéóÑ&4*‚ÿÿ ÿéöÑ&K'èÿÿ ÿéóÑ&-E0Âÿÿ ÿéòÑ&K->ÿÿ ÿéôÑ&K*ƒÿÿ ÿéñÑ&K*†ÿÿ ÿçõÑ&‡-Eÿÿ ÿç÷Ñ&i&-E8Jÿÿ ÿêñÐ&·ÿÿÿèñÐ&·8Pÿÿ ÿèôÐ&ß÷ÿÿ ÿçóÐ&;ÿÿ ÿéóÍ&ýÿÿ ÿéóÍ&&ÿÿ ÿéëÏ&-FÿÿÿéñÐ&¸·ÿÿÿé÷Ð& °%úÿÿÿéîÐ& °œÿÿÿéôÐ& °ÚÿÿÿéõÐ&n °ÿÿÿéôÐ& °”ÿÿÿèôÐ& °(/ÿÿ ÿéõÐ&,-Rÿÿ ÿéôÏ& Òÿÿ ÿé÷Ï&ÿÿ ÿéðÐ&Ã-Rÿÿ ÿéöÐ&!Jÿÿ ÿéëÏ&)ÿÿÿ ÿéõÍ&ÿÿÿéòÐ& °-Gÿÿ ÿçòÐ&Pÿÿ ÿéõÏ&kÿÿ ÿéóÍ&ÿÿ ÿéöÏ&±ÿÿÿèöÐ& °+ÿÿ ÿèóÏ&îÿÿÿéöÐ& °*ÿÿ ÿéôÍ&žÿÿ ÿèîÏ&%›ÿÿÿéòÐ& °0öÿÿ ÿçôÍ&%ÌÿÿÿèîÐ&* °ÿÿ ÿêõÏ& ÿÿ ÿéóÍ&&ÿÿ ÿéóÏ&0ÖÿÿÿéòÐ& °ÚÿÿÿèíÐ& °ÿÿÿéíÐ& °&  ÿÿ ÿéòÐ&*-RÿÿÿèõÐ& °LÿÿÿéóÐ& °³ÿÿÿçõÑ& ° ÿÿÿéöÐ& °ÿÿ ÿèìÍ&ÁÿÿÿéôÐ& °-Hÿÿ ÿèóÐ&Œÿÿ ÿéòÍ&0Aÿÿ ÿéöÐ&(l-Rÿÿ ÿéêÐ&–ÿÿ ÿéôÏ&bÿÿ ÿéóÐ&  "ÿÿ ÿéñÍ&+Mÿÿ ÿéîÐ&è-RÿÿÿéóÐ& °ÿÿÿéõÑ& ° ÿÿ ÿéóÑ&%%ÿÿÿèôÐ& °]ÿÿ ÿèöÎ&»ÿÿ ÿéòÎ&%©ÿÿÿéõÐ&‹-Iÿÿ ÿéîÐ&ì-Rÿÿ ÿèôÐ&'Ø-Rÿÿ ÿé÷Í&1ÿÿ ÿçôÑ&-J8RÿÿÿéëÐ& °¾ÿÿ ÿèöÐ&<-Rÿÿ ÿéöÐ&D!JÿÿÿéóÐ& °"øÿÿ ÿèïÐ&-R0¹ÿÿ ÿéíÍ&5ÿÿÿéôÐ& °!_ÿÿ ÿéöÐ&#Î-RÿÿÿéñÐ& °$]ÿÿÿéóÐ& °"­ÿÿ ÿéïÐ&8Sÿÿ ÿéøÐ&-R/²ÿÿ ÿéöÐ&^-Rÿÿ ÿéôÐ&ž-Rÿÿ ÿèôÐ&(‚-Rÿÿ ÿéóÎ&$¸ÿÿÿéõÑ& °—ÿÿ ÿéôÐ&-R8Tÿÿ ÿèñÔ&% 8Uÿÿ ÿéòÐ&% -Rÿÿ ÿèôÏ&ÿ8Vÿÿ ÿé÷Ð&-R8Wÿÿ ÿéöÐ&N-RÿÿÿéöÐ&û+!ÿÿ ÿè÷Ñ&-R8Xÿÿ ÿçõÑ&-K-Rÿÿ ÿéõÐ&Æ8Yÿÿ ÿèôÐ&.Z-RÿÿÿéõÐ&›ûÿÿ ÿé÷Ð&(E-Rÿÿ ÿéóÐ&-L)åÿÿÿèõÐ&-I&˜ÿÿ ÿéõÏ&z!ÿÿ ÿéöÐ&.I-Rÿÿ ÿéõÒ&.J-Rÿÿ ÿéñÑ&'á-Rÿÿ ÿçòÐ&-M-Rÿÿ ÿèôÐ&ý-RÿÿÿéóÐ&ûºÿÿ ÿèôÐ&%(-Rÿÿ ÿéõÐ&%´-RÿÿÿéõÐ&û%èÿÿ ÿéóÐ&-N-RÿÿÿéõÐ&Þ&û!¦ÿÿ ÿçôÐ&-O-Rÿÿ ÿéõÐ&'ç-RÿÿÿéôÐ&û(…ÿÿ ÿéõÑ&-R. ÿÿ ÿçøÒ&Õ-Rÿÿ ÿçôÏ&-P/»ÿÿ ÿéöÑ&.~-Rÿÿ ÿéôÐ&'-Rÿÿ ÿèôÒ&%‚-Rÿÿ ÿé÷Ò&-Q-RÿÿÿéòÐ&û-.ÿÿ ÿéôÑ&*ƒ-Rÿÿ ÿéòÐ&- -RÿÿÿèîÑ&08ZÿÿÿìîÒ&(­ÿÿÿèöÒ&­8[ÿÿÿçîÒ&­8\ÿÿÿêîÒ&­8]ÿÿÿèëÑ&—8^ÿÿÿñïÑ&G8_ÿÿÿêîÒ&­®ÿÿÿêïÑ&—8`ÿÿ ÿêòÒ&­('ÿÿ ÿéëÑ&—˜ÿÿÿïôÑ&—8aÿÿÿéõÒ&­8bÿÿÿêëÑ&—8cÿÿÿéîÒ&­8dÿÿÿéîÒ&­8eÿÿÿèðÑ&—8fÿÿÿíõÑ&š8gÿÿÿêîÒ&­8hÿÿÿèëÑ&—8iÿÿÿèôÒ&­8jÿÿÿéîÑ&š8kÿÿÿçîÑ&š8lÿÿ ÿêëÑ&+&,—ÿÿÿéòÑ&°&¯šÿÿÿîïÑ&—8mÿÿÿèïÑ&š8nÿÿÿïðÑ&*—ÿÿ ÿîõÒ&­&§8oÿÿ ÿèñÑ&—¦ÿÿÿéôÑ&—ÿÿ ÿéóÑ&Š8pÿÿ ÿéóÑ&Љÿÿ ÿéóÑ&š8qÿÿ ÿèóÑ&Š8rÿÿÿêîÑ&š8sÿÿÿéîÑ&š8tÿÿÿéîÑ&š8uÿÿ ÿçìÔ&68vÿÿÿèõÑ&®‘ÿÿÿéóÏ&A@ÿÿÿéïÑ&pšÿÿÿæòÑ&š&æåÿÿÿèîÑ&‘8wÿÿ ÿèóÑ&Š!ÇÿÿÿèîÑ&š8xÿÿ ÿéñÑ&š8yÿÿÿéïÑ&‘#œÿÿ ÿèöÑ&š#ŽÿÿÿèîÑ&š8zÿÿ ÿéóÑ&Š8{ÿÿ ÿçóÑ&š8|ÿÿÿéîÑ&‘&l8}ÿÿ ÿéõÑ&š8~ÿÿÿéñÑ&š&™˜ÿÿ ÿçöÑ&š8ÿÿÿçìÔ&68€ÿÿÿçñÑ&š8ÿÿÿæõÔ&68‚ÿÿÿèîÑ&‘8ƒÿÿ ÿìôÑ&‘&5gÿÿ ÿæõÑ&å&Š8„ÿÿ ÿèóÑ&Š8…ÿÿÿéöÑ&‘8†ÿÿÿçöÑ&š8‡ÿÿÿåðÔ&6/]ÿÿÿç÷Ô&"8&"98ˆÿÿÿèõÔ&68‰ÿÿÿçôÔ&68ŠÿÿÿçíÔ&"98‹ÿÿÿéúÔ&"98Œÿÿ ÿèîÔ&"98ÿÿ ÿéóÏ&ijÿÿ ÿéóÏ&k ÿÿ ÿèôÏ&lmÿÿ ÿíõÏ&nlÿÿ ÿéôÏ&lÚÿÿÿðòÏ&,µ8Žÿÿ ÿèôÏ&l(/ÿÿ ÿêìÏ&lÿÿ ÿéóÏ&iÿÿ ÿêòÏ&lSÿÿ ÿóóÏ&kjÿÿÿçõÐ&ó-Sÿÿ ÿèñÏ&iDÿÿ ÿéôÏ&l-Tÿÿ ÿçõÑ&Š ÿÿ ÿéòÐ&Š/ÿÿ ÿèöÏ&lÿÿ ÿèøÑ&l-UÿÿÿïòÈ&Ö0Ìÿÿ ÿéóÑ&Š$ÿÿ ÿéðÏ&l’ÿÿ ÿéòÏ&Š#—ÿÿ ÿèóÏ&Šˆÿÿ ÿëöÏ&Šuÿÿ ÿèøÑ&-W-Vÿÿ ÿéóÔ&Œ&W&X8ÿÿ ÿè÷Ñ&-X-Yÿÿ ÿõóÑ& çÿÿ ÿëòÑ&Ô-Zÿÿ ÿèòÑ&³0¨ÿÿ ÿçòÑ&Ô-[ÿÿ ÿñòÑ&Ô-\ÿÿ ÿñóÑ& èÿÿ ÿêóÑ&(0§ÿÿ ÿéòÑ&<0§ÿÿ ÿéòÑ&-]0§ÿÿ ÿéòÑ& éÑÿÿ ÿîòÑ&“0§ÿÿ ÿéòÑ& ºÔÿÿ ÿéòÑ&Ôÿÿ ÿçöÑ&Ôÿÿ ÿèòÑ&O0§ÿÿ ÿéòÑ& ëÕÿÿ ÿèòÑ&Õ8‘ÿÿ ÿêôÑ&0§ÿÿ ÿèôÑ&0¨ÿÿ ÿéóÑ&0¨ÿÿ ÿéòÑ&;0§ÿÿ ÿíòÑ&ÏÕÿÿ ÿéòÑ&Õ8’ÿÿ ÿéòÑ&0¨8“ÿÿ ÿñòÑ&%I0¨ÿÿ ÿçòÑ&0¨8”ÿÿ ÿéòÑ&0¨8•ÿÿ ÿéòÑ&0§8–ÿÿ ÿéòÑ&o éÿÿ ÿóòÑ&Ô8—ÿÿ ÿèòÑ& éÿÿ ÿìòÑ&0§8˜ÿÿ ÿéòÑ&}0§ÿÿ ÿèòÑ&0§8™ÿÿ ÿéòÑ&Õ8šÿÿ ÿéóÑ&0¨8›ÿÿ ÿðòÑ&0¨8œÿÿ ÿæòÑ&0¨8ÿÿ ÿéòÑ& é8žÿÿ ÿæöÑ&Z0¨ÿÿ ÿéòÑ&0§8Ÿÿÿ ÿèõÑ&0§8 ÿÿ ÿèòÑ& évÿÿ ÿéòÑ&0§8¡ÿÿ ÿéòÑ& é8¢ÿÿ ÿæòÑ&0§8£ÿÿ ÿèòÑ&Ô8¤ÿÿ ÿèòÑ&Û&Ú0§ÿÿ ÿéóÑ&Ô8¥ÿÿ ÿìòÑ&-^0§ÿÿ ÿïóÑ&Õ8¦ÿÿ ÿéòÑ&Õ8§ÿÿ ÿçòÑ&Ô&ËÌÿÿ ÿéòÑ&0§8¨ÿÿ ÿèóÑ&ß&K0§ÿÿ ÿîòÑ&0¨8©ÿÿ ÿéôÑ&Õÿÿ ÿêòÑ&å0¨ÿÿ ÿéòÑ& êÿÿ ÿéòÑ&Ë&Õ8ªÿÿ ÿéóÑ&0§8«ÿÿ ÿêòÑ& ê-_ÿÿ ÿèóÑ&§ éÿÿ ÿèòÑ&0§8¬ÿÿ ÿîôÑ&”0¨ÿÿ ÿéòÑ&0§8­ÿÿ ÿçòÑ&Ô8®ÿÿ ÿéóÑ& é&TJÿÿ ÿïòÑ& éÿÿ ÿéóÑ&0¨8¯ÿÿ ÿèòÑ& éªÿÿ ÿèõÑ&ß0¨ÿÿ ÿéóÑ&Ì‹ÿÿ ÿéòÑ&0§8°ÿÿ ÿéòÑ& é*ÿÿ ÿéòÑ&&0§ÿÿÿèôÑ&i8±ÿÿ ÿêòÑ&0§8²ÿÿ ÿéòÑ& é8³ÿÿ ÿèóÑ&0§8´ÿÿ ÿéòÑ&£& é8µÿÿ ÿéòÑ& é8¶ÿÿ ÿéòÑ&0§8·ÿÿ ÿéõÑ& é8¸ÿÿ ÿéõÑ&ô éÿÿ ÿéòÑ& é8¹ÿÿ ÿéóÑ&>0§ÿÿ ÿéòÑ&Ï êÿÿ ÿðòÑ&Ô8ºÿÿ ÿéòÑ&ç& é8»ÿÿ ÿèôÑ&Ô&öõÿÿ ÿéòÑ& é8¼ÿÿ ÿêõÑ&%?0§ÿÿ ÿéõÑ& é Üÿÿ ÿéóÑ& é ÿÿ ÿéòÑ& é&<ÿÿ ÿéóÑ&0§8½ÿÿ ÿèòÑ& é8¾ÿÿ ÿéòÑ&- éÿÿ ÿîòÑ& é8¿ÿÿ ÿéòÑ& é8Àÿÿ ÿèóÑ& é8Áÿÿ ÿñóÑ&0¨8Âÿÿ ÿéòÑ&0§8Ãÿÿ ÿéóÑ&0¨8Äÿÿ ÿéóÑ& é8Åÿÿ ÿéóÑ& é8Æÿÿ ÿìòÑ& é8Çÿÿ ÿéòÑ&ê éÿÿ ÿêòÑ&5& é8Èÿÿ ÿèôÑ&0§8Éÿÿ ÿêóÑ&i8Êÿÿ ÿéòÑ& é&4£ÿÿ ÿêòÑ& ê&t8ËÿÿÿéòÑ&iµÿÿ ÿéóÑ&¥ÌÿÿÿéòÑ&i8Ìÿÿ ÿéõÑ&i8ÍÿÿÿêòÑ&iFÿÿ ÿèòÑ&Û&0§8Îÿÿ ÿéòÑ& é8Ïÿÿ ÿêóÑ&0§8Ðÿÿ ÿéóÑ& ê8ÑÿÿÿéòÑ&iÒÿÿ ÿéòÑ& é8Òÿÿ ÿêòÑ& é&Ýæÿÿ ÿéôÑ& é8Óÿÿ ÿïòÑ& é ÿÿ ÿéòÑ& é8Ôÿÿ ÿèóÑ& ê8Õÿÿ ÿêóÑ& ê8Öÿÿ ÿîòÑ& êÿÿÿéòÑ&ilÿÿ ÿéóÑ& é8×ÿÿ ÿéòÑ& énÿÿ ÿéóÑ&i8Øÿÿ ÿíòÑ& é8Ùÿÿ ÿéòÑ& é8Úÿÿ ÿèòÑ& ê8Ûÿÿ ÿèòÑ& éÖÿÿ ÿéóÑ&Ì8Üÿÿ ÿéóÑ& é8Ýÿÿ ÿêóÑ& é8Þÿÿ ÿéóÑ&T&"æ éÿÿ ÿéòÑ&s éÿÿ ÿéòÑ& ê!ÿÿ ÿéòÑ&"yiÿÿ ÿèòÑ&" éÿÿ ÿèòÑ&5 éÿÿ ÿéòÑ&#Ë éÿÿ ÿéòÑ&«& é8ßÿÿ ÿéòÑ& é8àÿÿ ÿíóÑ&i"²ÿÿ ÿéóÑ&Ü&Ý éÿÿ ÿéòÑ&i"òÿÿ ÿéòÑ&i"¾ÿÿ ÿèôÑ& ê&Ø8áÿÿ ÿéòÑ&5&4 éÿÿÿïòÑ&`iÿÿ ÿéóÑ& é&ç8âÿÿ ÿêòÑ&0§8ãÿÿ ÿèóÑ& é& ¹8äÿÿÿéòÑ&i"ÿÿ ÿçõÑ& ê8åÿÿ ÿéóÑ& é8æÿÿ ÿçòÑ&$ êÿÿ ÿîóÑ& ù&i8çÿÿ ÿêòÑ&i8èÿÿÿéóÑ&%iÿÿ ÿíòÑ& é/3ÿÿ ÿéòÑ& é8éÿÿ ÿèõÑ&p& é8êÿÿ ÿéóÑ&i$5ÿÿ ÿêõÑ& é&ÛÚÿÿ ÿéòÑ&T& é8ëÿÿ ÿêôÑ& ê8ìÿÿ ÿéòÑ&Ì8íÿÿ ÿêóÑ&$iÿÿÿéòÑ&$§iÿÿ ÿéòÑ&"Ù éÿÿ ÿèôÑ& ê$ÿÿÿìòÑ&i/7ÿÿ ÿéòÑ&$¯iÿÿ ÿéòÑ&Ò& é8îÿÿ ÿéòÑ& é8ïÿÿ ÿêòÑ&Ì$ãÿÿÿèôÑ&Ì&#x8ðÿÿ ÿìóÑ&i$öÿÿ ÿîóÑ& ø& é8ñÿÿ ÿçòÑ& é8òÿÿÿèòÑ&Ì8óÿÿÿçòÑ&i/RÿÿÿéòÑ&Ì8ôÿÿ ÿçöÑ& ê&á8õÿÿ ÿéóÑ&Ì8öÿÿÿçöÑ&Ì&á8÷ÿÿ ÿêóÑ&Ì8øÿÿ ÿìóÒ&÷8ùÿÿÿéòÑ&{iÿÿÿçòÑ&i ÿÿ ÿéòÑ&i8úÿÿ ÿèòÑ& é&˜8ûÿÿÿéòÑ&Ì8üÿÿÿåòÑ&Ì8ýÿÿ ÿéóÑ&0§8þÿÿÿèòÑ&inÿÿ ÿèòÑ&œ& é ÿÿ ÿèòÑ&iœÿÿÿçôÑ&i8ÿÿÿ ÿçòÑ& ê0[ÿÿ ÿèóÑ& é&ß9ÿÿ ÿìôÑ&Ì9ÿÿ ÿîóÑ&I& é úÿÿ ÿèóÑ& ¸& é ¹ÿÿÿçòÑ&Ì9ÿÿÿéòÑ&i9ÿÿ ÿçõÑ& é9ÿÿ ÿèõÑ&Ü& é9ÿÿ ÿèôÑ&i9ÿÿ ÿèõÑ&Ì9ÿÿ ÿçòÑ& ê9ÿÿ ÿèõÑ&i9 ÿÿ ÿèòÑ& é9 ÿÿ ÿèôÑ& é&Ø9 ÿÿÿéöÑ&i&$w9 ÿÿ ÿçòÑ&5& é" ÿÿ ÿéõÑ& ê9 ÿÿ ÿèôÑ&i9ÿÿÿèðÒ&÷øÿÿ ÿëóÑ&&ÌŒÿÿÿèòÑ&õ&i9ÿÿÿéòÑ&ö&i9ÿÿÿèòÑ&Ì9ÿÿ ÿéôÑ&i9ÿÿ ÿïòÑ& é9ÿÿ ÿçôÑ&Ì9ÿÿ ÿèóÑ&i9ÿÿÿèòÑ&&i9ÿÿÿéôÑ&@&i9ÿÿ ÿèòÑ&Ì9ÿÿ ÿçõÑ& é9ÿÿ ÿéòÑ& é9ÿÿ ÿèôÑ& ê9ÿÿ ÿçõÑ& é9ÿÿÿèòÑ&Ì9ÿÿÿèöÑ&i9ÿÿÿéòÑ&i9ÿÿ ÿèóÑ& ê&à9 ÿÿÿèöÑ&Ì&$69!ÿÿ ÿçõÑ& ê9"ÿÿ ÿéòÑ&Ì9#ÿÿÿêöÑ&i&$w5ÿÿÿéòÑ&i9$ÿÿ ÿçôÑ& é9%ÿÿ ÿîóÑ& ù&i9&ÿÿ ÿèöÑ& ê9'ÿÿÿéòÑ&i9(ÿÿÿêõÑ& š& ›iÿÿÿëòÒ&÷9)ÿÿÿéòÑ&i9*ÿÿÿéòÑ&Ì9+ÿÿ ÿéòÑ&i9,ÿÿ ÿéòÑ&Ì9-ÿÿ ÿèöÑ& é9.ÿÿ ÿéôÑ&i9/ÿÿÿèôÑ&i90ÿÿÿèõÑ&Ì91ÿÿÿéðÒ&/I÷ÿÿ ÿéöÑ& ê92ÿÿ ÿêõÑ& é93ÿÿ ÿíòÑ&©Ìÿÿ ÿéóÑ& é94ÿÿÿèòÑ&i95ÿÿ ÿèóÑ& é96ÿÿÿëöÑ&i97ÿÿÿèòÑ&i98ÿÿ ÿêõÑ& ê99ÿÿ ÿèôÑ&i9:ÿÿ ÿîóÑ& é9;ÿÿÿçöÑ&á&Ì9<ÿÿÿçöÑ&á&Ì9=ÿÿÿéòÑ&i9>ÿÿÿçöÒ&÷9?ÿÿÿèòÑ&i9@ÿÿ ÿéòÑ&i9Aÿÿ ÿéöÑ&i9Bÿÿ ÿèôÑ&i9Cÿÿ ÿéôÐ&_+Ûÿÿ ÿèóÏ&j•ÿÿ ÿèöÏ&˜/lÿÿ ÿèôÏ&•üÿÿ ÿèõÐ&•¡ÿÿ ÿéóÑ& `ÿÿ ÿèëÏ&•aÿÿ ÿèôÏ&•bÿÿ ÿèîÏ&•ÿÿ ÿèóÏ&•ÿÿ ÿèôÏ&•cÿÿ ÿèòÏ&•dÿÿ ÿéõÒ&efÿÿ ÿéõÏ&˜ÿÿ ÿèòÏ&•¾ÿÿ ÿèðÏ&•gÿÿ ÿèòÏ&•hÿÿ ÿèôÏ&•¿ÿÿ ÿéóÎ&2xÿÿ ÿèöÏ&•iÿÿ ÿèèÐ&+%&/•ÿÿ ÿèôÏ&•¤ÿÿ ÿèìÏ&•(¾ÿÿ ÿèõÏ&•ÿÿ ÿèóÏ&•jÿÿ ÿèôÏ&•žÿÿ ÿèêÐ&•Mÿÿ ÿèõÏ&•kÿÿ ÿèõÏ&•ÿÿ ÿèòÏ&•Nÿÿ ÿéòÏ&-`xÿÿ ÿèóÏ&•lÿÿ ÿèñÏ&•Óÿÿ ÿèìÏ&•aÿÿ ÿéòÑ&x/Óÿÿ ÿèôÏ&½žÿÿÿèòÏ&n&moÿÿ ÿéóÑ&˜Ôÿÿ ÿèñÏ&•ÿÿÿçòÒ&pqÿÿ ÿéòÏ&˜Äÿÿ ÿéôÑ&˜àÿÿ ÿèõÐ&•Lÿÿ ÿèôÏ&•rÿÿ ÿéòÐ&•&(!xÿÿ ÿéóÏ&yxÿÿ ÿæöÏ&•Aÿÿ ÿéóÏ&˜ëÿÿÿéòÑ&0‚9Eÿÿ ÿèòÏ&½.ÿÿ ÿèóÏ&•)ÿÿ ÿèõÏ&•-aÿÿ ÿéõÎ&åÿÿ ÿèõÑ&•Rÿÿ ÿéóÏ&˜'ÿÿ ÿè÷Ï&•1ÿÿ ÿèöÏ&•–ÿÿ ÿè÷Ð&• /ÿÿ ÿèóÏ&•sÿÿ ÿèöÏ&•#Hÿÿ ÿèóÐ&½&@Yÿÿ ÿéñÏ&˜$]ÿÿ ÿèîÏ&„&J#×ÿÿ ÿéòÐ&˜#¢ÿÿ ÿéóÏ&¾½ÿÿ ÿèóÐ&˜tÿÿ ÿéöÏ&˜uÿÿ ÿéöÏ&˜vÿÿ ÿèðÏ&½wÿÿ ÿéóÐ&½$bÿÿ ÿèôÏ&•!ÿÿ ÿèòÏ&˜-Cÿÿ ÿéôÑ&˜$ÿÿ ÿéóÏ&˜$ÿÿ ÿéõÑ&—˜ÿÿ ÿéõÑ&G&½9Fÿÿ ÿèôÐ&‹&Ç9Gÿÿ ÿçõÑ&˜xÿÿ ÿçòÒ&yzÿÿ ÿèóÏ&½{ÿÿ ÿçöÑ&½|ÿÿ ÿèõÏ&˜£ÿÿ ÿéòÏ&˜,ÿÿ ÿèõÏ&½~ÿÿ ÿéòÑ&.ÿÿ ÿçôÏ&˜™ÿÿ ÿèóÐ&•*yÿÿ ÿéñÏ&½0"ÿÿ ÿéïÏ&½ÿÿÿèôÑ&¨9Hÿÿ ÿéòÏ&½->ÿÿ ÿèóÐ&‚&ƒ9Iÿÿ ÿèóÏ&ƒ&‚9Jÿÿ ÿéòÐ&-b½ÿÿ ÿéðÏ&œ›ÿÿ ÿéóÏ&Ñ›ÿÿ ÿéßÏ&Z˜ÿÿ ÿé÷Ï&Zÿÿ ÿèõÏ&šQÿÿ ÿéóÏ&›ÿÿ ÿèíÐ&QÅÿÿ ÿéìÏ&YZÿÿ ÿéòÏ&Zÿÿ ÿéðÏ&´Zÿÿ ÿéòÏ& Ñÿÿ ÿéõÏ&Q›ÿÿ ÿéìÏ&œQÿÿ ÿçöÐ&Áÿÿ ÿéõÏ&RQÿÿ ÿéôÏ&*ÌQÿÿ ÿéîÏ&ð Ñÿÿ ÿéöÏ&Qÿÿ ÿéôÏ&” Ñÿÿ ÿéóÏ&Q1ÿÿ ÿéôÏ&ž›ÿÿ ÿèöÏ&Q§ÿÿ ÿéïÏ&*›ÿÿ ÿéòÏ&º Ñÿÿ ÿéõÏ&žÿÿ ÿéèÐ& Ñ&6/ÿÿ ÿèôÏ&Q(/ÿÿ ÿèôÏ&]mÿÿ ÿéôÏ& Ñ Òÿÿ ÿéóÏ&‡Qÿÿ ÿéôÏ&ÚQÿÿ ÿéöÏ&Z¬ÿÿ ÿéïÏ&Q¬ÿÿ ÿèôÏ&Q!ÿÿ ÿèöÑ& Ñ­ÿÿ ÿçóÏ&Óÿÿ ÿéòÏ&Q0¬ÿÿÿçëÐ&¯®ÿÿÿçñË&°&ª9Kÿÿ ÿéóÏ& Ñ&}/Õÿÿ ÿéòÏ&Q(-ÿÿ ÿçôÏ&ƒªÿÿ ÿéëÏ& Ð)ÿÿÿ ÿçòÏ&ª9LÿÿÿçëÉ&-0ÿÿ ÿéèÏ& ïÿÿ ÿèôÐ&žÐÿÿ ÿéóÏ& ÑQÿÿ ÿéïÐ&R Ñÿÿ ÿéòÏ& ÑSÿÿ ÿéòÏ& ÑTÿÿ ÿéôÏ&Qœÿÿ ÿéîÏ& Ñÿÿ ÿéöÏ& Ñÿÿ ÿéöÏ&ž±ÿÿ ÿéóÐ&¸0Òÿÿ ÿéóÏ& Ѳÿÿ ÿéöÐ& ѳÿÿ ÿéòÐ& Ñ0öÿÿ ÿéëÏ& Ñ´ÿÿ ÿéöÏ&ž,éÿÿ ÿéõÏ&ž·ÿÿ ÿéðÏ&Q.}ÿÿ ÿéõÏ&Qÿÿ ÿéïÏ& Ѹÿÿ ÿèðÏ&ÇZÿÿ ÿéìÏ&Zÿÿ ÿéêÐ&ZMÿÿ ÿèõÏ&Qgÿÿ ÿêõÏ&]¹ÿÿ ÿéòÏ&Qºÿÿ ÿéôÏ& &»/ÿÿ ÿçõÐ&(Qÿÿ ÿéòÏ&Z0×ÿÿ ÿéöÏ&]™ÿÿ ÿèìÏ&¸¼ÿÿ ÿéôÏ&Qôÿÿ ÿèñÏ&D Ñÿÿ ÿéôÏ&~ Ñÿÿ ÿéöÏ&Qóÿÿ ÿè÷Ï& Ñ ÿÿ ÿéõÐ&[&Y9MÿÿÿçíÐ&&ªÿÿ ÿéòÏ&Q¤ÿÿ ÿéôÏ&Q`ÿÿ ÿéõÐ&‹ Ñÿÿ ÿéíÑ& ÑŸÿÿ ÿéóÏ& åÿÿ ÿéôÑ&à Ñÿÿ ÿéìÏ& Ñaÿÿ ÿéöÏ&Aøÿÿ ÿé÷Ï& ѽÿÿ ÿéìÏ&ždÿÿÿéïÏ&19Nÿÿ ÿéõÐ&ùñÿÿÿçëÐ&ª0‡ÿÿ ÿéôÐ&™Qÿÿ ÿéóÏ&Q+ÿÿ ÿéóÏ& Ð'ÿÿ ÿéôÑ&˜ Ñÿÿ ÿéóÐ& Ðzÿÿ ÿèõÏ& ÑZÿÿ ÿéöÐ& ÑvÿÿÿéõÏ&É&ʾÿÿ ÿééÏ& Ñÿÿ ÿéòÐ& ¿ÿÿ ÿêøÑ&¸ ÿÿ ÿéôÐ& ÑÀÿÿ ÿèìÏ& ÑÁÿÿ ÿé÷Ð& Ñ-²ÿÿ ÿèöÏ&\ÿÿ ÿèñÐ&g&&e&jÿÿ ÿéêÐ& Ñ–ÿÿ ÿçõÏ&Qÿÿ ÿéöÏ&¸”ÿÿ ÿæöÏ&AQÿÿ ÿèõÐ&Q•ÿÿ ÿæôÏ&¸-ÿÿ ÿé÷Ï&ZÆÿÿ ÿéôÏ& Ñ,Ëÿÿ ÿéòÏ&j%>ÿÿ ÿèñÏ&žÿÿ ÿéïÏ& Ðáÿÿ ÿéóÐ& Ѳÿÿ ÿéòÏ&© Ðÿÿ ÿéôÏ&üíÿÿ ÿéõÏ&A!ÿÿ ÿéóÏ&—žÿÿ ÿéóÏ&.€¸ÿÿ ÿéóÏ&îAÿÿ ÿéõÑ&]Rÿÿ ÿéöÏ&-z.ñÿÿ ÿéôÏ& )|ÿÿ ÿçõÏ&]+Bÿÿ ÿéõÑ&-g ÿÿ ÿéôÏ&`\ÿÿ ÿéëÏ&¾Aÿÿ ÿìõÐ&g%ªÿÿ ÿêóÑ&¸%%ÿÿ ÿéöÐ& "Iÿÿ ÿéóÏ& Ñ'ÿÿ ÿçöÒ&f Ñÿÿ ÿéñÏ& Ð.ÿÿ ÿéõÐ&‹ Ñÿÿ ÿçòÐ&1&ª9Pÿÿ ÿèíÏ&¸+Cÿÿ ÿéñÐ&X Ñÿÿ ÿéíÏ&¸-iÿÿ ÿèïÏ&¸-hÿÿ ÿéöÏ& Ð ×ÿÿ ÿèõÏ&]-jÿÿ ÿèòÏ&¸.ÿÿ ÿéøÏ&¸ ÿÿ ÿèôÏ&¸9Qÿÿ ÿéóÏ&ž&Çÿÿ ÿéôÑ&QÌÿÿ ÿéóÏ&ž)ÿÿ ÿéòÏ& Zžÿÿ ÿèõÏ& ÑVÿÿ ÿèðÏ& Ñuÿÿ ÿéõÏ& Þÿÿ ÿèóÏ& Ð-dÿÿ ÿèóÏ&Qïÿÿ ÿéôÏ& (mÿÿ ÿêõÌ&-z.3ÿÿ ÿéìÏ&žÿÿ ÿéðÐ& # ÿÿ ÿèñÏ&¸ÿÿÿèñÈ&«0Íÿÿ ÿéôÐ& Ñÿÿ ÿèõÑ&¸‰ÿÿ ÿèöÏ&žhÿÿ ÿëõÏ&]&!9Rÿÿ ÿé÷Ï& Ñ"nÿÿ ÿéóÏ& Ñ6ÿÿ ÿéñÐ&Q-kÿÿ ÿéöÏ& Ñ"mÿÿ ÿéìÏ&tjÿÿ ÿéöÐ&A!ÿÿ ÿéïÏ& !=ÿÿ ÿéöÐ&]#Yÿÿ ÿèòÏ& Ð"@ÿÿ ÿéôÏ&víÿÿ ÿäöÏ&]ýÿÿ ÿéôÏ&g&!1(ÿÿ ÿéôÏ& Ð!_ÿÿ ÿéïÑ&žÿÿ ÿéóÏ&ž*ÿÿ ÿéõÏ&A"îÿÿ ÿèõÏ& аÿÿ ÿë÷Ï&]¥ÿÿ ÿéóÏ& Ñ&Žÿÿ ÿçíÐ&¸:ÿÿ ÿèõÏ& Ó]ÿÿ ÿéôÏ&g9Sÿÿ ÿéòÏ& Ð"Fÿÿ ÿèôÐ&ž!†ÿÿ ÿéóÐ&ž!Šÿÿ ÿéöÏ& Çÿÿ ÿèóÐ&Y& @ÿÿ ÿèöÏ&«&-l9Tÿÿ ÿèðÑ&$9Uÿÿ ÿéõÏ&]Ùÿÿ ÿèôÐ& &@"çÿÿ ÿéñÏ& Ñ!(ÿÿ ÿéóÏ&¸óÿÿ ÿéñÏ& !Œÿÿ ÿèõÐ&«&9Vÿÿ ÿéôÏ& Ð"óÿÿ ÿéñÏ& Ñ$]ÿÿ ÿéöÏ& "7ÿÿ ÿè÷Ñ&A/ÖÿÿÿéîÏ& &ø1ÿÿ ÿêðÏ&g#wÿÿ ÿéòÏ&Q$Jÿÿ ÿéôÐ&A0pÿÿ ÿéôÏ&Ã&úAÿÿ ÿéñÑ&Q$”ÿÿ ÿéóÏ& ÑMÿÿ ÿèïÓ&«&9Wÿÿ ÿçïÏ& -mÿÿ ÿèõÐ&]ÿÿ ÿéòÐ& Ð2ÿÿ ÿè÷Ï&¸Íÿÿ ÿé÷Ï&-n¸ÿÿ ÿéõÏ&Qÿÿ ÿêðÑ&g‡ÿÿ ÿéóÐ& Ñ.“ÿÿ ÿéóÏ& $¸ÿÿ ÿéöÏ& Ñvÿÿ ÿèõÏ&ž$ÿÿ ÿçòÐ&ž-oÿÿ ÿéòÐ& $Îÿÿ ÿéôÏ&üAÿÿÿèôÎ&ÿ9Xÿÿ ÿéïÏ& $ªÿÿ ÿèôÏ&39Yÿÿ ÿéôÏ&í9Zÿÿ ÿéôÏ&A'ßÿÿ ÿèôÏ&¸$rÿÿ ÿéòÏ&f&egÿÿ ÿéöÏ&A-pÿÿ ÿéóÏ&¸.ÿÿ ÿéôÏ&.úAÿÿ ÿéðÐ&j*¸ÿÿ ÿéïÐ&g-…ÿÿ ÿêïÏ&¸.„ÿÿ ÿéõÏ&g&f-qÿÿ ÿèõÑ&g&f-rÿÿ ÿéôÏ&¸)Ëÿÿ ÿéóÏ&¸*ÿÿ ÿéóÒ&.”žÿÿ ÿéôÏ&g%Þÿÿ ÿéöÐ&0 1ÿÿ ÿçõÏ& 0›ÿÿ ÿèõÏ&£ Ðÿÿ ÿéóÏ&¸†ÿÿ ÿêõÏ&]&G9[ÿÿ ÿéñÐ&Ç9\ÿÿ ÿèõÐ&«0Lÿÿ ÿéòÑ&A)Ìÿÿ ÿèõÐ&¸&˜ÿÿ ÿçõÑ&Axÿÿ ÿéòÏ& -sÿÿ ÿèóÐ&«ÿÿ ÿéõÐ&.•¸ÿÿ ÿéíÏ&A-9ÿÿÿèïÌ&«/2ÿÿ ÿéõÑ& Ð*·ÿÿ ÿé÷Ï&žÿÿ ÿéóÏ&-t-ÿÿ ÿé÷Ð&g&}9]ÿÿ ÿçöÏ& 9^ÿÿ ÿèøÓ&«9_ÿÿÿéóÑ&k&-v9`ÿÿ ÿèôÐ&-u Ðÿÿ ÿéòÏ&/¥jÿÿ ÿéóÐ&A+`ÿÿ ÿéóÏ&¸'÷ÿÿ ÿéïÑ&Q'#ÿÿ ÿèöÏ&]-íÿÿ ÿéöÏ&jFÿÿ ÿéòÐ&A*¹ÿÿ ÿèóÐ&«&÷9aÿÿ ÿéôÏ&¸*Ñÿÿ ÿçïÏ&¸-wÿÿ ÿéòÏ&žüÿÿ ÿéôÏ&]* ÿÿ ÿéóÒ&¸iÿÿ ÿéîÏ&ï&j9bÿÿ ÿèôÏ&¸'øÿÿ ÿéñÏ& Ð'ÿÿ ÿèóÏ&«9cÿÿ ÿéòÏ&j%áÿÿ ÿçôÏ& (Kÿÿ ÿêòÐ&¸·ÿÿ ÿèõÏ&g~ÿÿ ÿèòÏ&ž9ÿÿ ÿéôÏ&A.÷ÿÿ ÿéøÏ&Ÿ ÿÿ ÿéöÒ&g*€ÿÿÿèïÒ&«&9dÿÿÿéñÏ&l9eÿÿ ÿéõÏ&]*ºÿÿ ÿéøÏ&¡Aÿÿ ÿèöÐ&«'ûÿÿ ÿèõÐ&«&9fÿÿ ÿéòÐ&¾.ÿÿ ÿêõÓ&¸Sÿÿ ÿé÷Ñ&A.£ÿÿ ÿçôÏ&A-xÿÿ ÿéöÏ&j&â!£ÿÿ ÿéôÏ&]Øÿÿ ÿèöÑ&4&«9gÿÿ ÿéñÏ&¸0"ÿÿ ÿéôÏ&j9hÿÿ ÿçóÑ&¡ ÿÿ ÿéöÏ&j&â9iÿÿ ÿéóÐ&ž*yÿÿ ÿéôÏ&j&-y9jÿÿ ÿèõÐ&A¢ÿÿ ÿè÷Ò&÷9kÿÿ ÿéõÑ& Ð5ÿÿ ÿêñÏ&¸%Sÿÿ ÿéòÏ&´& å æÿÿ ÿç÷Ï&h&ijÿÿ ÿèóÐ&«&?=ÿÿ ÿèôÐ&]*µÿÿ ÿçõÏ&Aþÿÿ ÿçôÏ& ÐÅÿÿÿèïÍ&«ÿÿ ÿêõÏ&-z-{ÿÿ ÿèòÐ&A%Tÿÿ ÿç÷Ï&«&iªÿÿ ÿéóÑ&AÍÿÿ ÿèôÏ&«9lÿÿ ÿèòÏ&g-ÿÿ ÿèòÑ&g7ÿÿ ÿéôÑ& Ñêÿÿ ÿêõÎ&-z+bÿÿ ÿéðÏ&j9mÿÿ ÿçõÐ&«‡ÿÿ ÿéóÏ&j.@ÿÿ ÿéòÏ&A*Ðÿÿ ÿéôÐ&¬¢ÿÿ ÿêòÐ&¸.?ÿÿ ÿéÞÏ&Ç-|ÿÿ ÿéðÏ&,lÿÿ ÿñóÏ&,Èÿÿ ÿêòÏ&,(ÿÿ ÿéóÏ&, ÿÿ ÿîõÐ&m,ÿÿ ÿéìÏ&,Yÿÿ ÿéóÏ&£‰ÿÿ ÿçøÏ&,%¼ÿÿ ÿêóÐ&¿,ÿÿ ÿî÷Ï&,ÿÿ ÿéìÏ&,("ÿÿ ÿéêÏ&,ÿÿ ÿçõÏ&,!vÿÿ ÿìõÏ&,ÿÿ ÿìõÏ&,ÿÿ ÿèôÏ&,(/ÿÿ ÿéëÏ&š,ÿÿ ÿèíÏ&££ÿÿ ÿèöÏ&£Ÿÿÿ ÿìôÏ&,Fÿÿ ÿéôÏ&,Úÿÿ ÿêôÏ&,*¶ÿÿ ÿéõÏ&,Rÿÿ ÿéòÏ&,0¬ÿÿ ÿîóÏ&£)ÿÿ ÿéñÏ&,8ÿÿ ÿèõÏ&,»ÿÿ ÿéöÏ&,ÿÿ ÿ÷óÏ&,Qÿÿ ÿçòÐ&£Pÿÿ ÿêõÏ&£/+ÿÿ ÿòõÏ&,ÿÿ ÿéïÐ&R,ÿÿ ÿëèÏ&ï,ÿÿ ÿéòÏ&,&µÿÿ ÿéõÏ&,!ÿÿ ÿéçÐ&,-}ÿÿ ÿèðÐ&'¡£ÿÿ ÿéòÏ&-0°ÿÿ ÿééÏ&£µÿÿ ÿéêÏ&j,ÿÿ ÿéðÏ&,*Öÿÿ ÿîõÏ&,%"ÿÿ ÿéóÐ&,0÷ÿÿ ÿèñÐ&&e&-&kÿÿ ÿéöÏ&£øÿÿ ÿéóÏ&,0Öÿÿ ÿéõÐ&,óÿÿ ÿèõÏ&¼£ÿÿ ÿéóÏ&-&ÙØÿÿ ÿèóÏ&,Vÿÿ ÿéôÑ& ¸,ÿÿ ÿêíÑ&,Ÿÿÿ ÿéóÐ&,zÿÿ ÿéõÐ&,ÿÿ ÿíöÐ&,ÿÿ ÿèôÐ&,Pÿÿ ÿéóÏ&,'ÿÿ ÿæöÏ&,-~ÿÿ ÿéêÐ&,cÿÿ ÿééÏ&,ÿÿ ÿæôÏ&,-ÿÿ ÿèñÏ&,Žÿÿ ÿêôÏ&,-‚ÿÿ ÿòóÏ&—,ÿÿ ÿèóÐ&,Œÿÿ ÿèïÏ&£-ƒÿÿ ÿéóÏ&,6ÿÿ ÿèôÏ&£'Øÿÿ ÿèöÏ&£%«ÿÿ ÿéóÏ&,&Çÿÿ ÿéóÐ&£ Oÿÿ ÿèòÏ&£ Wÿÿ ÿéìÐ&£øÿÿ ÿëôÏ&,(mÿÿ ÿìöÏ&£-„ÿÿ ÿéõÐ&‹,ÿÿ ÿèïÏ&,wÿÿ ÿéñÏ&,.ÿÿ ÿéíÏ&-Éÿÿ ÿéëÏ&,¾ÿÿ ÿèôÏ&,9oÿÿ ÿìõÐ&£%ªÿÿ ÿéõÑ&£Oÿÿ ÿéôÑ&,Íÿÿ ÿéñÐ&,gÿÿ ÿé÷Ï&,Œÿÿ ÿéöÏ&£ ×ÿÿ ÿéðÐ&£# ÿÿ ÿéïÏ&,!=ÿÿ ÿéíÏ&.&2-ÿÿ ÿéöÐ&£!ÿÿ ÿéòÏ&,"Kÿÿ ÿéóÐ&-0–ÿÿ ÿéóÏ&,"ÿÿ ÿêöÏ&-&-l9pÿÿ ÿäöÏ&,ýÿÿ ÿæòÏ&,!ÿÿÿ ÿì÷Ï&,¥ÿÿ ÿïòÏ&-£ÿÿ ÿèöÏ&-&#"#!ÿÿ ÿèôÐ&,&@"çÿÿ ÿèóÐ&,&@Yÿÿ ÿìôÐ&£0oÿÿ ÿèõÏ&, Óÿÿ ÿéïÑ&,ÿÿ ÿèôÐ&£#¸ÿÿ ÿèïÐ&£0¹ÿÿ ÿéòÏ&+,ÿÿ ÿéõÏ&£"îÿÿ ÿêðÏ&£#wÿÿ ÿêöÏ&,vÿÿ ÿéôÏ&,üÿÿ ÿçóÐ&,&rÿÿ ÿëôÏ&-.ûÿÿ ÿéòÐ&£% ÿÿ ÿçòÑ&£9qÿÿ ÿéðÐ&£*¸ÿÿ ÿîòÏ&,$Iÿÿ ÿèõÐ&,ÿÿ ÿèòÐ&£/Mÿÿ ÿéóÏ&,†ÿÿ ÿéóÏ&,*ÿÿ ÿéôÏ&,)Ëÿÿ ÿæïÏ&-,(ÿÿ ÿéïÐ&£-…ÿÿ ÿé÷Ï&,ÿÿ ÿéõÑ&,*·ÿÿ ÿéóÏ&-&9rÿÿ ÿéôÏ&£* ÿÿ ÿéòÐ&,*¹ÿÿ ÿêîÑ&,'ÿÿ ÿîôÏ&, ÿÿ ÿíõÏ&-&Þ9sÿÿ ÿéøÏ&,¡ÿÿ ÿéõÏ&,*ºÿÿ ÿèõÐ&-&9tÿÿ ÿçôÏ&-0ÿÿ ÿðòÐ&¤ÿÿÿéñÑ&dOÿÿ ÿéôÐ&feÿÿ ÿèñÐ&ehÿÿ ÿèóÐ&çeÿÿ ÿèóÐ&*»ÿÿ ÿçõË&j9uÿÿ ÿçõÏ&j& ÿÿ ÿéóÏ&l&k9vÿÿ ÿçðÑ&qpÿÿ ÿéóÒ&oiÿÿ ÿèôÐ&o*ÿÿÿéòÑ&m&º9wÿÿÿéðÑ&rsÿÿÿéîÉ&ÏlÿÿÿéðË&mnÿÿ ÿéñÐ&o9xÿÿ ÿéóÑ&Îqÿÿ ÿéòÐ&o*¼ÿÿÿéðÆ&Ä9yÿÿÿéÝÈ&9zÿÿÿêíÈ&9{ÿÿÿèÝÈ&9|ÿÿÿèôÈ&9}ÿÿÿîñÈ&9~ÿÿ ÿîõÉ&ï9ÿÿ ÿèêÉ&Á9€ÿÿÿéîÈ&ÿÿ"ÿéêÉ&Á/ÿÿ ÿðóÈ&0ÿÿÿçíÈ&9ÿÿÿííÉ&ï9‚ÿÿ"ÿçÜÊ&1ÿÿÿéïÊ&9ƒÿÿÿéõÉ&ï9„ÿÿ ÿëöÊ&9…ÿÿÿéðÊ& [ÿÿÿéóÉ&ï9†ÿÿÿèóÉ&Á9‡ÿÿÿèïÉ&Á9ˆÿÿÿéóÉ&ÁBÿÿÿïòÊ&9‰ÿÿÿéâÉ&"&Á9ŠÿÿÿèðÉ&*ÎÁÿÿ ÿéñÉ&Á*Ïÿÿ ÿìôÉ&"/&gÁÿÿ ÿèõÉ&Á&p9‹ÿÿÿéïÊ&"ÚÿÿÿéÞÊ&9ŒÿÿÿéñÉ&Á9ÿÿÿéíÉ&Á9Žÿÿ ÿéóÊ&&19ÿÿ ÿéòÊ&9ÿÿÿèïÊ&9‘ÿÿÿçæÊ&9’ÿÿÿèãÊ&9“ÿÿ ÿîôÊ&¹ÿÿ ÿèîÊ&G&=ÿÿÿççÊ&9”ÿÿÿéìÊ&9–ÿÿÿèñÍ&/ /Ÿÿÿ ÿèôÊ&&G!>ÿÿ ÿèñÊ&&G!?ÿÿ ÿèóÊ&9—ÿÿ ÿéôÐ&½¾ÿÿ ÿéòÐ&Å ÿÿÿêôÑ&Å9™ÿÿ ÿèôÏ&¥¿ÿÿÿêòÒ&MLÿÿ ÿèõÏ&¥Uÿÿ ÿçõÏ&¥FÿÿÿçðÏ&ÂÁÿÿ ÿèòÏ&¥Äÿÿ ÿèòÏ&¥%§ÿÿ ÿèõÏ&¥Qÿÿ ÿè÷Ï&¥ÃÿÿÿæõÑ&-‡Åÿÿ ÿèöÏ&ú¥ÿÿ ÿéòË&N9šÿÿ ÿéòÏ&RNÿÿ ÿèòÏ&¥ÿÿ ÿçõÏ&¥ÿÿ ÿçõÑ& -‰ÿÿÿæõÑ&P9›ÿÿ ÿèöÐ&dÆÿÿ ÿèöÏ&dÇÿÿ ÿéóÐ&-ˆ9œÿÿ ÿèðÏ&d’ÿÿ ÿèóÏ&c-‰ÿÿ ÿè÷Ï&-‰Ìÿÿ ÿèòÏ&ü-‰ÿÿ ÿèöÐ&'-Šÿÿ ÿèõÓ&S-Šÿÿ ÿè÷Ñ&&Å-Šÿÿ ÿåöÓ&¨©ÿÿÿèôÑ&-‹9žÿÿ ÿèñÏ&-Š0"ÿÿ ÿèóÒ&-‰9Ÿÿÿ ÿèòÊ&E9 ÿÿ ÿêòÅ&Oÿÿ ÿçóÉ&MWÿÿ ÿéîÏ&LNÿÿÿèðÏ&›.ÿÿ ÿéôÍ&O-Œÿÿ ÿêëÏ&QPÿÿ ÿéòÏ&«ªÿÿÿéìË&SRÿÿ ÿçôË&UTÿÿ ÿèëÎ&VQÿÿ ÿêïÏ&G#éÿÿ ÿêóÐ&ObÿÿÿðòÉ&,µWÿÿ ÿéõÏ&X†ÿÿÿêëÏ&aQÿÿ ÿçóË&R9¢ÿÿ ÿèõÌ&O-Žÿÿ ÿêîÎ&O-ÿÿÿèãÊ&F-ÿÿ ÿèïÏ&G-ŠÿÿÿéóÑ&í Qÿÿ ÿèëÏ&Q ÿÿ ÿè÷Ï&ÿÿ ÿêñÐ&[&YZÿÿÿèóË&R Ýÿÿ ÿêôÏ&O_ÿÿÿéêË&R9£ÿÿÿéðË&R9¤ÿÿÿéïÐ& Qÿÿ ÿéïÇ&:9ÿÿ ÿêòË&R9¥ÿÿÿçòÏ&87ÿÿ ÿçôÒ&#§8ÿÿ ÿèôÊ&;"ÿÿ ÿèìÐ&^"½ÿÿ ÿè÷Ë&X#ÐÿÿÿéøÇ& î ïÿÿ ÿèóÍ&.9¦ÿÿ ÿèõÐ&X9§ÿÿÿéïÇ&:$ ÿÿÿéíÊ&;%ÿÿ ÿéõÏ&¦9¨ÿÿ ÿèëÐ&Q9©ÿÿ ÿéëÉ&äQÿÿÿéîÌ& Q/2ÿÿ ÿéõÏ&X9ªÿÿ ÿéòÏ&X+iÿÿ ÿêìÎ&%ˆ^ÿÿ ÿèìÐ&^%‰ÿÿ ÿéõÏ&-ÿÿ ÿéïÎ&:*ÔÿÿÿçïÌ&.zÿÿÿêìÏ&^]ÿÿ ÿéïË&-‘:ÿÿ ÿéìÏ&-’^ÿÿ ÿèòÏ&ïðÿÿ ÿêóÏ&[ZÿÿÿéñÏ&-“\ÿÿ ÿîñÏ&_9­ÿÿ ÿèóÅ&Æ Kÿÿ ÿéóÅ& ÆÿÿÿéôÌ&ÈÇÿÿÿéóÏ&}Çÿÿ ÿéóÏ&¤Éÿÿ ÿèôÏ&bùÿÿ ÿèõÏ&Eèÿÿ ÿèõÏ&­¹ÿÿ ÿèôÏ&è¤ÿÿ ÿèöÏ&¬­ÿÿ ÿèõÏ&­ÿÿ ÿèòÐ&è0öÿÿ ÿæìÏ&­9¯ÿÿ ÿéìÐ&ÝÎÿÿ ÿèôÏ&ž­ÿÿ ÿè÷Ñ&èçÿÿ ÿéïÐ&Ýßÿÿ ÿéïÐ&ú,9ÿÿ ÿèóÏ&èÿÿ ÿéìÐ&ú‘ÿÿ ÿéðÐ& uúÿÿ ÿèõÐ&ú&ûˆÿÿ ÿéôÐ&úüÿÿ ÿéôÐ&ú$7ÿÿ ÿéñÑ&ú$”ÿÿ ÿçõÐ&ú0›ÿÿ ÿçõÐ&Ý!Uÿÿ ÿçõÐ&Ýþÿÿ ÿèôÐ&ÿÝÿÿ ÿéòÏ&3-”ÿÿ ÿèóÇ&8qÿÿ ÿéðÇ&-”ÿÿ ÿêôÐ&¾9±ÿÿÿêðÒ&-•9²ÿÿ ÿèöÑ&0ž­ÿÿ ÿéõÊ&-–0žÿÿ ÿèôÏ&8-—ÿÿ ÿèôÏ&z0žÿÿ ÿé÷Ï&-˜0žÿÿ ÿèõÏ&-™!«ÿÿ ÿçõÏ&F8ÿÿ ÿéòÆ&-š0žÿÿ ÿéïÏ& ó&!I!¶ÿÿ ÿéïÏ&!«/¹ÿÿÿêðÑ&-«!·ÿÿ ÿéòÆ&&¶0žÿÿ ÿéòÎ&Ä8ÿÿ ÿéòÆ&Ê!«ÿÿ ÿéóÏ&0Ö8ÿÿ ÿèôÇ&&ç8ÿÿ ÿéóÏ&58ÿÿ ÿéöÎ&Ø8ÿÿ ÿïðÈ&-(9³ÿÿ ÿéóÏ&'!«ÿÿ ÿçôÉ&Î9´ÿÿ ÿéóÐ&É!«ÿÿ ÿéöÏ&0è!«ÿÿÿèíÉ&9µÿÿÿêðÐ&!·9¶ÿÿ ÿéõÊ&!«&!9·ÿÿ ÿéôÑ&!«Ìÿÿ ÿéòÐ&!´!¶ÿÿ ÿéõÍ&"‚!«ÿÿ ÿéöÎ&!«9¸ÿÿ ÿéôÏ&!¸8ÿÿ ÿéõÎ&!«&!9¹ÿÿ ÿéôÐ&-ž!«ÿÿ ÿèöÎ&-£!«ÿÿ ÿéòÑ&)Ì!«ÿÿÿéóÐ&#\&-Ÿ+ÿÿ ÿéîÏ&&-Ÿ9ºÿÿÿêôÏ&- 9»ÿÿ ÿé÷Ð&.!«ÿÿ ÿèõÏ&+ß8ÿÿ ÿéðË&®&¯°ÿÿ ÿéöÏ&F-¡ÿÿ ÿéóÒ&Ä!¶ÿÿ ÿéñÐ&-¢!¶ÿÿ ÿéôÏ&.9¼ÿÿ ÿê÷Ò&s-¤ÿÿ ÿåóÏ&‘ÿÿ ÿéóÐ&ˆ‰ÿÿ ÿéóÏ&‰ÿÿ ÿèòÐ&-¥9Àÿÿ ÿéôÉ&1›ÿÿ ÿèíÐ&1+@ÿÿ ÿéõÉ&1´ÿÿ ÿèôÑ&€ÿÿ ÿéòÎ&õÿÿ ÿéõÏ&õ›ÿÿ ÿéìÉ&œõÿÿ ÿéóÏ&1ÿÿ ÿéõÏ&õyÿÿ ÿéóÉ&õÊÿÿ ÿéõÍ&1õÿÿ ÿéóÉ&1&ÿÿ ÿéðÉ&1ÿÿ ÿéíÉ&3%9ÿÿ ÿèõÉ&õUÿÿ ÿèõÏ&õÿÿ ÿèöÑ&Ó3ÿÿ ÿéöÎ&õÄÿÿ ÿéõÉ&õÿÿ ÿéòÏ&õ0¬ÿÿ ÿéõÏ&õÿÿ ÿéôÏ&õ*Ìÿÿ ÿéîÏ&õ°ÿÿ ÿéöÏ&1aÿÿÿéòÏ&-¦-§ÿÿ ÿèôÏ&õmÿÿÿéëÑ&-¨9Åÿÿ ÿéóÊ&!rõÿÿ ÿéõÑ&1¶ÿÿ ÿéôÌ&õ9Çÿÿ ÿèïÏ&3Ùÿÿ ÿéõÏ&õEÿÿ ÿéôÏ&õ—ÿÿÿééÏ&-¨9Èÿÿ ÿéîÏ&õœÿÿ ÿèõÍ&õÿÿ ÿéòÏ&39Éÿÿ ÿéïÐ&õRÿÿ ÿéòÏ&õ(-ÿÿ ÿéõÉ&õêÿÿ ÿéõÏ&wõÿÿ ÿèôÐ&õÐÿÿ ÿéêÐ&M1ÿÿ ÿêìÐ&-®-¯ÿÿÿéïÏ&-¨9Êÿÿ ÿè÷Ï&ñÿÿ ÿéòÐ&õ0öÿÿ ÿèïÏ&õ'Ñÿÿ ÿéëÏ&´-®ÿÿ ÿçôÉ&õ%Ìÿÿ ÿèôÏ&ƒ‚ÿÿ ÿéóÏ&3&}/Õÿÿ ÿèóÏ&õÿÿ ÿéöÐ&3³ÿÿ ÿèóÏ&Ôÿÿ ÿéóÐ&3Uÿÿ ÿéòÉ&õ-©ÿÿ ÿèéÉ&õ/ÿÿ ÿéóÏ&1ÿÿ ÿèóÏ&õîÿÿ ÿéôÐ&3øÿÿ ÿéóÏ&õ"Wÿÿ ÿéêÏ&"X¡ÿÿ ÿéöÏ&3,éÿÿÿéóÇ&-¨-°ÿÿ ÿéöÏ&õ±ÿÿ ÿéóÏ&õ-ªÿÿ ÿéóÏ&õ-¬ÿÿ ÿéñÍ&õ*­ÿÿ ÿéòÏ&1(Ëÿÿ ÿéõÉ&3%"ÿÿÿèóÐ&0ƒ0„ÿÿ ÿéìÉ&õdÿÿ ÿéõÐ&3óÿÿ ÿè÷Ï&õ7ÿÿ ÿéöÌ&õóÿÿ ÿéôÐ&õ7ÿÿ ÿéõÐ&õÿÿ ÿéìÉ&3aÿÿ ÿéóÉ&3&ÿÿ ÿèôÐ&P3ÿÿ ÿéïÏ&3xÿÿ ÿéòÉ&Äõÿÿ ÿèóÏ&30¾ÿÿ ÿéôÎ&õ&»/ÿÿ ÿéóÎ&õåÿÿÿéõÐ&ñ&ò&óôÿÿÿêõÏ&÷9Ëÿÿ ÿéðÌ&-,ÿÿ ÿé÷Ì&E-­ÿÿ ÿéðÏ&õ.ÿÿ ÿèòÑ&ÈÉÿÿ ÿéõÑ&23ÿÿ ÿéôÌ&õ+ÿÿ ÿèòÐ&÷ÿÿ ÿéõÐ&30¯ÿÿ ÿèõÏ&õZÿÿ ÿéóÎ&õ¥ÿÿ ÿéóÑ&õÕÿÿ ÿèôÑ&õ¦ÿÿ ÿéòÐ&3&&*ÿÿ ÿéôÏ&õ…ÿÿ ÿçôÏ&3×ÿÿÿèïÏ&z0„ÿÿ ÿéøÑ&3 ÿÿ ÿéôÏ&õ,Ëÿÿ ÿçõÏ&õÿÿ ÿéòÏ&3-±ÿÿ ÿèïÏ&&[9Ìÿÿ ÿéòÉ&©õÿÿ ÿéóÏ&ôõÿÿ ÿéóÏ&3.–ÿÿ ÿèôÍ&3(8ÿÿ ÿèõÎ&0xÿÿ ÿèõÐ&„ÿÿ ÿèôÊ&A9Íÿÿ ÿèôÉ&.œ3ÿÿ ÿçõÏ&3 Øÿÿ ÿçõÑ& -­ÿÿ ÿéôÑ&W9Îÿÿ ÿèôÏ&õcÿÿ ÿéóÐ&õ³ÿÿ ÿéòÉ&õ0Aÿÿ ÿéóÒ&30ìÿÿ ÿéôÉ&ø3ÿÿ ÿéôÏ&õbÿÿ ÿèöÉ&9Ïÿÿ ÿéíË&3Øÿÿ ÿéîÉ&õ-Bÿÿ ÿéõÏ&3)zÿÿ ÿèõÉ&-aõÿÿ ÿèòÏ&3.ÿÿ ÿéõÐ&õ‹ÿÿ ÿèôÐ&3]ÿÿ ÿéõÐ&3+Lÿÿ ÿéôÏ&3.’ÿÿ ÿçõÏ&3¨ÿÿ ÿèõÑ&3‰ÿÿ ÿéóÏ&õ'ÿÿ ÿéóÏ&1ÿÿ ÿéóÐ&3.ÿÿ ÿéöÏ&3'ñÿÿ ÿéõÑ&3 ÿÿÿèñÈ&É0Íÿÿ ÿèöÉ& ×ÿÿ ÿèðÑ&$9ÐÿÿÿèóÐ&Ä ÿÿ ÿéðÉ&»õÿÿ ÿéóÐ&3 Oÿÿ ÿéóÐ&Éõÿÿ ÿèöÏ&"Hÿÿ ÿéõÑ&3Oÿÿ ÿéôÑ&3Íÿÿ ÿèõÉ&ÿÿ ÿæõÏ&3"dÿÿ ÿéôÏ&3"ôÿÿ ÿéóÐ&3Hÿÿ ÿèöÏ&01ÿÿ ÿéñÉ&õ!Œÿÿ ÿéîÉ&3 xÿÿ ÿéóÑ&3Xÿÿ ÿéóÉ&3Óÿÿ ÿéñÏ&3¿ÿÿ ÿéöÏ&3Çÿÿ ÿéòÏ&3"¹ÿÿ ÿéôÏ&õ!_ÿÿ ÿéõÊ&õÿÿ ÿé÷É&3¥ÿÿ ÿèóÍ&õ!‹ÿÿ ÿçòÉ&3ÿÿÿèôÏ&Ä0tÿÿ ÿèóÉ&3#;ÿÿÿèïÉ&Ä&[ÿÿ ÿèõÐ&3,Òÿÿ ÿèôÏ&&##(ÿÿ ÿéíÉ&53ÿÿ ÿçõÉ&õ!0ÿÿ ÿèðÐ&3!%ÿÿ ÿéöÐ&õ#Zÿÿ ÿèóÐ&!ôÿÿ ÿéòÉ&3"Kÿÿ ÿéôÉ&3Èÿÿ ÿèôÐ&9ÑÿÿÿèöÉ&Ä&Jâÿÿ ÿéðÑ&3$•ÿÿ ÿéïÐ&&ÿÿ ÿéôÉ&3$Eÿÿ ÿéòÎ&3.žÿÿ ÿéóÑ&3&#s#tÿÿ ÿéðÉ&3$ ÿÿ ÿéòÏ&3$Iÿÿ ÿéöÏ&õvÿÿÿéðÏ&ð& ÿÿ ÿéöÒ&3/ÿÿ ÿéóÏ&3,uÿÿ ÿèòÑ&ÿÿ ÿèòÐ&3/Mÿÿ ÿéóÑ&3(“ÿÿ ÿèîÉ&oÿÿ ÿéòÏ&-;3ÿÿ ÿéóÉ&3†ÿÿ ÿèõÉ&~ÿÿ ÿèóÏ&¦ÿÿ ÿèöÏ&Nÿÿ ÿé÷Ï&39Òÿÿ ÿéóÏ&3*ÿÿ ÿéõÐ&3.•ÿÿ ÿé÷Í&3ÿÿ ÿçõÏ&õ0›ÿÿ ÿéóÑ&3&/3ÿÿ ÿèïÉ&4ÿÿ ÿéôÎ&3*Ñÿÿ ÿêóÏ&´-­ÿÿÿè÷Ï&Ä&n9Óÿÿ ÿèôÏ&/\ÿÿ ÿèóÐ&39Ôÿÿ ÿèôÏ&* ÿÿ ÿèøÑ&.Ÿÿÿ ÿèôÎ&%(ÿÿ ÿéòÏ&3üÿÿÿèöÏ&ÄFÿÿ ÿéöÏ&3'õÿÿ ÿéòÐ&3*¹ÿÿ ÿèöÐ&.#ÿÿ ÿèôÏ&9Õÿÿ ÿèóÑ&0š&. 0™ÿÿ ÿèõÐ&&G9Öÿÿ ÿèöÐ&3'ÿÿ ÿéðÑ&$9×ÿÿ ÿèõÓ&SÿÿÿèõÉ&Ä9Øÿÿ ÿèóÒ&Äÿÿ ÿéöÒ&*€3ÿÿ ÿçôÏ&-xÿÿ ÿéóÌ&-&k9Ùÿÿ ÿèôÑ&.¡ÿÿ ÿéòÐ&.ÿÿÿèôÐ&Ä.¢ÿÿ ÿèõÏ&/dÿÿÿèñÉ&Ä'ÿÿ ÿè÷Ñ&.£ÿÿ ÿèðÏ&,4ÿÿ ÿéðÎ&3,…ÿÿ ÿé÷Ñ&&Å3ÿÿ ÿéøÊ&3¡ÿÿ ÿèõÏ&&/‹9Úÿÿ ÿéõÑ&35ÿÿ ÿçóÑ&¡3ÿÿ ÿèõÐ&¢ÿÿ ÿèñÊ&0"ÿÿ ÿéõÏ&3!×ÿÿÿèöÏ&Ä9ÛÿÿÿèòÐ&Ä.¤ÿÿ ÿèóÏ&9Üÿÿ ÿç÷Ò&±3ÿÿÿçôÐ&Ä+(ÿÿ ÿéóÑ&3Îÿÿ ÿèòÉ&.¥ÿÿ ÿéõÓ&§9Ýÿÿ ÿéòË&3.¨ÿÿÿèùÏ&Ä9Þÿÿ ÿèðÓ&„…ÿÿÿèïÐ&†9ßÿÿÿçõÐ&‡ÄÿÿÿèöÌ&®¬ÿÿÿéòÏ&&*Ü9ãÿÿ ÿèôÒ&ÎØÿÿ ÿèóÒ&Î9åÿÿÿéóÒ&Ï9æÿÿ ÿêõÑ&‘.áÿÿ ÿèõÏ&--ÿÿÿéõÐ&.ÿÿ ÿîóÄ&T2ÿÿ ÿçøÏ&1?ÿÿ ÿéóÐ&1$pÿÿÿèâÎ&¤9éÿÿ ÿçóÌ&ö9êÿÿ ÿéöÐ&.«9ïÿÿ ÿéñÏ&n9ðÿÿ ÿéôÏ&n ÒÿÿÿèõÏ&.©.ªÿÿ ÿèïÐ&)*ÿÿÿé÷Î&p.©ÿÿÿèóÏ&ñ.©ÿÿ ÿèóÐ&,+ÿÿ ÿéóÐ&.­,ÿÿ ÿèòÐ&+Vÿÿ ÿéìÑ&Çÿÿ ÿéòÑ&ÿÿ ÿéëÑ&aÿÿ ÿèõÑ&*ÿÿ ÿéõÑ&ÿÿ ÿéóÑ&Ãÿÿ ÿéóÑ&+ÿÿ ÿéöÑ&aÿÿ ÿéóÑ&…ÿÿ ÿèõÑ&Tÿÿ ÿé÷Ñ&ÿÿ ÿéìÑ&(¾ÿÿ ÿéíÑ&.®ÿÿ ÿèôÑ&,ÿÿ ÿéõÑ&-ÿÿ ÿçõÏ&A¦ÿÿ ÿéëÑ&·ÿÿ ÿæïÑ&¸ÿÿ ÿéðÑ&jÿÿ ÿéêÑ&Mÿÿ ÿéðÑ&.}ÿÿ ÿéóÑ&.ÿÿ ÿéòÑ&*¬ÿÿ ÿèéÑ&/ÿÿ ÿéòÑ&(Ëÿÿ ÿèñÑ&8ÿÿ ÿéóÑ&{ÿÿ ÿéðÑ&0ÿÿ ÿéöÑ&Òÿÿ ÿéóÑ&²ÿÿ ÿéôÑ&ÿÿ ÿèìÑ&!Xÿÿ ÿéõÑ&dÿÿ ÿéõÑ& 0wÿÿ ÿèóÑ&Õÿÿ ÿèôÏ&A =ÿÿ ÿèõÑ&A1ÿÿ ÿéóÑ&!›ÿÿ ÿèöÏ&A#Íÿÿ ÿçíÑ&: ÿÿ ÿèéÏ&A ‰ÿÿ ÿèõÏ&A¯ÿÿ ÿéðÑ& $•ÿÿ ÿèòÐ&A2ÿÿ ÿéòÑ& $Jÿÿ ÿèòÏ&A0¤ÿÿ ÿèõÐ&A$(ÿÿ ÿèóÏ&A3ÿÿ ÿçõÏ&A0›ÿÿ ÿéòÑ& 0ÿÿ ÿéïÑ& 4ÿÿ ÿçóÑ& &D9õÿÿ ÿéóÑ&´ ÿÿ ÿèñÏ&A*wÿÿ ÿèòÏ&A.¯ÿÿ ÿèðÑ&,3 ÿÿ ÿèóÐ&A*Äÿÿ ÿèóÐ&A*yÿÿ ÿéñÑ& (ÿÿ ÿéõÑ&%x5ÿÿ ÿéõÒ&.° ÿÿ ÿéóÑ& 6ÿÿ ÿèòÑ&7.±ÿÿ ÿèòÏ&.².±ÿÿ ÿêõÉ&~ÿÿ ÿéõÏ&€ÿÿ ÿéöÐ&uvÿÿ ÿèôÐ&xwÿÿ ÿêôÑ&‚)™ÿÿ ÿéôÐ&yzÿÿÿéôÐ&€zÿÿÿðñÐ&v(ÿÿÿêñÐ&uvÿÿ ÿèõÏ&öõÿÿ ÿéóÏ&õ9÷ÿÿ ÿéðÏ&"õÿÿÿèñÐ&vÏÿÿÿèñÐ&vçÿÿÿéôÐ&v.³ÿÿ ÿêóÐ&v(ÿÿ ÿéóÏ&m9øÿÿÿéðÏ&õ¹ÿÿÿéñÏ&mîÿÿÿéñÏ&m½ÿÿÿéñÏ&m9úÿÿÿóòÏ&õ9ûÿÿÿéñÐ&vdÿÿÿíñÐ&v9üÿÿÿòðÏ&õ9ýÿÿ ÿéòÐ&v9þÿÿÿéñÏ&mHÿÿÿéòÏ&;õÿÿÿéñÐ&v:ÿÿÿêóÏ&m:ÿÿÿèòÏ&Nmÿÿ ÿéòÏ&m:ÿÿÿéöÏ&õIÿÿ ÿéòÏ&Ñ:ÿÿÿêòÏ&Ñ:ÿÿ ÿéôÐ&v:ÿÿÿêñÐ&v:ÿÿ ÿéòÏ&m:ÿÿ ÿéñÏ&m:ÿÿ ÿêòÏ&m: ÿÿ ÿèõÐ&v¨ÿÿÿéñÏ&m: ÿÿ ÿéñÏ&m: ÿÿÿèõÐ&ˆvÿÿ ÿéóÏ&õÿÿÿéòÏ&m: ÿÿ ÿéòÏ&m ðÿÿÿéõÏ&m: ÿÿÿîñÐ&v“ÿÿÿéñÏ&m:ÿÿ ÿïóÏ&õ:ÿÿ ÿéôÐ&v:ÿÿÿèóÏ&m:ÿÿÿéñÐ&v$˜ÿÿÿèñÐ&v:ÿÿÿéòÏ&m:ÿÿÿéñÏ&Ômÿÿ ÿóòÏ&õ:ÿÿ ÿéóÐ&v:ÿÿ ÿèñÏ&m:ÿÿ ÿêôÏ&((mÿÿÿìòÏ&ÑÔÿÿÿèñÏ&Ñ:ÿÿÿéñÐ&ÚvÿÿÿéñÏ&ç&æmÿÿÿêôÐ&vÿÿ ÿêóÏ&õ:ÿÿ ÿéóÐ&%ûvÿÿ ÿêöÏ&?mÿÿ ÿêóÐ&v:ÿÿ ÿéðÏ&õ&!"ÿÿÿéñÏ&m:ÿÿ ÿéñÏ&m:ÿÿÿêñÏ&m:ÿÿÿéòÏ&m:ÿÿ ÿéòÏ&m:ÿÿ ÿìòÏ&m: ÿÿÿõðÏ&õ:!ÿÿ ÿéôÏ&õ:"ÿÿ ÿëóÏ&m:#ÿÿ ÿéóÏ&m:$ÿÿ ÿæöÐ&vZÿÿÿéñÏ&mpÿÿ ÿéñÐ&}vÿÿÿéñÐ&v:%ÿÿÿèñÐ&v)ãÿÿÿéñÐ&v:&ÿÿÿôñÐ&v:'ÿÿÿèñÏ&m:(ÿÿÿéñÏ&m:)ÿÿ ÿíòÏ&Ñ:*ÿÿ ÿéñÏ&m:+ÿÿÿèñÏ&mÿÿÿèñÏ&m:,ÿÿÿïñÏ&m:-ÿÿ ÿñòÐ&v:.ÿÿÿéñÐ&v:/ÿÿ ÿéòÐ&v:0ÿÿÿéñÏ&m&r:1ÿÿ ÿêóÏ&Ñ:2ÿÿÿéñÏ&m:3ÿÿÿéñÐ&v:4ÿÿÿéñÏ&/pmÿÿÿêñÏ&Ñ:5ÿÿ ÿéóÐ&v:6ÿÿÿéòÏ&m:7ÿÿ ÿéóÏ&m:8ÿÿÿéñÏ&m:9ÿÿ ÿéôÏ&Ñ::ÿÿ ÿðõÏ&mÞÿÿ ÿéóÏ&m:;ÿÿ ÿìóÐ&v:<ÿÿÿæñÏ&m:=ÿÿ ÿéóÏ&m:>ÿÿ ÿéóÏ&k:?ÿÿ ÿéñÏ&m:@ÿÿ ÿéóÏ&m:AÿÿÿëñÐ&ÕvÿÿÿèñÏ&vÑÿÿÿéñÐ&v:Bÿÿ ÿéóÐ&v:CÿÿÿêõÏ&m&ÛÞÿÿ ÿæñÏ&m:Dÿÿ ÿéñÏ&mŸÿÿÿæñÏ&m ÿÿ ÿêóÏ&m:Eÿÿ ÿéóÐ&v:Fÿÿ ÿéóÏ&m:GÿÿÿéñÏ&ç&m:Hÿÿ ÿñóÏ&Ñ:JÿÿÿéñÏ&m:KÿÿÿèñÏ&m:Lÿÿ ÿñòÐ&v&AWÿÿÿéòÏ&m& :Mÿÿ ÿèóÏ&l€ÿÿ ÿéñÏ&Ñ·ÿÿÿêñÏ&Ñÿÿ ÿéóÏ&m:NÿÿÿéñÏ&m:OÿÿÿéôÏ&DmÿÿÿéñÏ&Ñ:PÿÿÿðñÏ&+&mÿÿÿéòÏ&Ñ&ç:Qÿÿ ÿéñÏ&m&£:Rÿÿ ÿéóÏ&Ñ:SÿÿÿæñÏ& ÑÿÿÿîñÏ&m:Tÿÿ ÿéóÏ&m‹ÿÿÿéðÏ&õ:Uÿÿ ÿéóÏ&m:Vÿÿ ÿéñÏ&m:WÿÿÿéôÏ&ñmÿÿÿëñÏ&m&5:Xÿÿ ÿêñÏ&mVÿÿÿèóÐ&§vÿÿÿéôÏ&Ñ&çêÿÿÿéóÏ&m:Yÿÿ ÿéòÏ&m:ZÿÿÿëñÐ&5&8vÿÿÿéñÏ&mvÿÿÿéñÏ&ÑeÿÿÿéóÏ&ç&JmÿÿÿçñÏ&m:[ÿÿÿéòÏ&m:\ÿÿÿèñÏ&ªmÿÿ ÿéóÏ&m:^ÿÿ ÿéñÏ&Ñ#®ÿÿÿñòÏ&#¯mÿÿÿèóÏ&ÑÓÿÿ ÿîôÏ&”õÿÿÿçñÏ&ÑÿÿÿèõÐ&vßÿÿ ÿéëÏ&›:_ÿÿÿéóÏ& &m:`ÿÿ ÿéóÏ&mÛÿÿ ÿéñÏ&m&¢£ÿÿÿéñÏ&m:aÿÿÿèñÏ&m:bÿÿÿéóÏ&Ñ:cÿÿÿîñÏ&0ÑÿÿÿéñÏ&m&ç:dÿÿ ÿéòÏ&Ñ:eÿÿÿçòÏ&8mÿÿ ÿéöÏ&m:fÿÿ ÿéñÏ&Ñ:gÿÿ ÿêñÏ&m:hÿÿ ÿìòÏ&Ñ`ÿÿ ÿêñÏ&Ñ&ÿÿÿéòÏ&m:iÿÿÿèñÏ& ÑÿÿÿéòÏ&m+ÿÿ ÿèóÏ&Ñ:jÿÿ ÿéôÐ&[vÿÿÿèñÏ&mìÿÿÿåñÏ&&mÛÿÿÿéñÏ&m:kÿÿ ÿèôÏ&m& ÙÿÿÿéñÏ&ѯÿÿ ÿèòÐ&&vWÿÿÿèñÏ&%¶& mÿÿ ÿèóÐ&v&W ÿÿÿéòÏ&Ñÿÿ ÿèòÏ&mÿÿÿèñÐ&H&vGÿÿÿèñÏ&m:lÿÿÿéñÏ&mýÿÿÿìñÐ&v:mÿÿÿêòÏ&m:nÿÿÿêñÏ&m&¾:oÿÿÿïñÏ&ÑÿÿÿèõÏ&Ñ&t:pÿÿ ÿëõÏ&Ñ&#„ÿÿÿé÷Ï&Ñ:qÿÿÿéñÏ&Ñ&ç§ÿÿÿèñÏ&Ñ:rÿÿÿêñÏ&m:sÿÿÿéõÏ&m&%ü9ÿÿ ÿèóÏ&m:tÿÿ ÿçóÏ&‘mÿÿÿçóÏ&k:uÿÿ ÿèñÏ&Ñ;ÿÿÿññÏ&m:vÿÿ ÿèòÏ&k:wÿÿÿéôÏ&Ñ&ç:xÿÿÿèñÏ&m:yÿÿÿéñÏ&mÞÿÿ ÿçõÏ&Ñ&r:zÿÿ ÿèñÏ&Ñ&£:{ÿÿÿçñÏ&Ñ:|ÿÿÿéñÏ&Ñ&ç:}ÿÿ ÿèôÏ&kˆÿÿÿèôÏ&Ñÿÿ ÿçõÏ&Ñ&r:~ÿÿÿèñÏ&t&Ñ:ÿÿÿèôÏ&Ñ&5:€ÿÿÿèñÏ&m:ÿÿÿèôÏ&kˆÿÿÿéñÏ&Ñ:‚ÿÿÿéôÏ&Ñ:ƒÿÿÿíñÏ&ѵÿÿ ÿéôÏ&Ñ:„ÿÿ ÿéóÏ&m:…ÿÿ ÿéòÏ&l:†ÿÿ ÿéóÏ&Ñ:‡ÿÿÿéôÏ&m:ˆÿÿ ÿçôÏ&m:‰ÿÿÿññÏ&Ñ:ŠÿÿÿçõÏ&m:‹ÿÿ ÿéòÏ&Ñ:Œÿÿ ÿèñÏ&k:ÿÿ ÿçóÏ&Ñ Þÿÿ ÿîõÏ&§&Ñ:ŽÿÿÿêñÏ&Ñ:ÿÿÿéñÏ&Ñ&9:ÿÿÿéñÏ&l:‘ÿÿ ÿçõÏ&lóÿÿÿéòÏ&Ñ:’ÿÿ ÿèóÏ&Ñ:“ÿÿÿçôÏ&Ñ:”ÿÿ ÿéóÏ&Ñ:•ÿÿÿçñÏ&Ñ:–ÿÿÿé÷Ï&m&5:—ÿÿÿèñÐ&v:˜ÿÿ ÿéòÏ&ÑÿÿÿëöÏ&m:™ÿÿÿéõÏ&m:šÿÿÿçñÏ&Ñ:›ÿÿÿéôÏ&m:œÿÿ ÿòòÐ&v*ŽÿÿÿçñÏ&m&9:ÿÿÿéõÏ&9&8mÿÿÿññÏ&m:žÿÿÿèñÏ&l:ŸÿÿÿéôÏ&Ñ: ÿÿ ÿéñÏ&l&æ:¡ÿÿ ÿåóÏ&m:¢ÿÿÿèñÏ&l:£ÿÿÿêñÏ&Ñ&¿:¤ÿÿÿëôÏ&5&Ñ:¥ÿÿ ÿéöÏ&Ñ ÿÿÿèñÏ&Ulÿÿ ÿéóÏ&Ñ:¦ÿÿÿãñÏ&m:§ÿÿÿêòÏ&Š&m:¨ÿÿÿëôÏ&Ñ:©ÿÿÿèñÏ&Ñ ÿÿÿéóÏ&m:ªÿÿÿéñÏ&ÑÒÿÿÿçóÏ&l:«ÿÿÿèóÏ&m:¬ÿÿÿéñÏ&Ñ:­ÿÿÿèñÏ&¯lÿÿÿéòÏ&m:®ÿÿ ÿéòÏ&m #ÿÿÿèñÏ&l²ÿÿÿèñÏ&Ñ&Š:¯ÿÿÿéóÏ&Ñ&:°ÿÿÿîôÏ&k:±ÿÿÿéñÏ&l1 ÿÿÿèñÏ&Ñ:²ÿÿÿèôÏ&m:³ÿÿ ÿéñÏ&Ñ&œ:´ÿÿÿçõÏ&l:µÿÿ ÿçôÏ&Ñ&r:¶ÿÿÿêñÏ&Ñ:·ÿÿ ÿëôÏ&m:¸ÿÿÿçõÏ&m:¹ÿÿÿèóÏ&Ñ:ºÿÿ ÿèòÏ&Ñ:»ÿÿ ÿèñÏ&Ñ:¼ÿÿ ÿæóÏ&Ñ:½ÿÿ ÿèóÏ&Ñ:¾ÿÿÿèñÏ&Ñ:¿ÿÿÿîñÏ&n:ÀÿÿÿèñÏ&5&Ñ:Áÿÿ ÿèñÏ&ÑtÿÿÿçñÏ&Ñ:Âÿÿ ÿéòÏ&Ñ:ÃÿÿÿèôÏ&Ñ:ÄÿÿÿéñÏ&Ñ Rÿÿ ÿñóÏ&m:Åÿÿÿí÷Ï&l:ÆÿÿÿéñÏ&Ñ:ÇÿÿÿéôÏ&l:ÈÿÿÿêñÏ&FÑÿÿÿèôÏ&m:ÉÿÿÿêñÏ&Û&m:Êÿÿ ÿçñÏ&Ñ:Ëÿÿ ÿéöÏ&Ñ:ÌÿÿÿèóÏ&òmÿÿ ÿéôÏ&Ñ:Íÿÿ ÿéóÏ&Ñ ÿÿ ÿéñÏ&4&£ÑÿÿÿçñÏ&Ñ:Îÿÿ ÿéóÏ&Ñqÿÿ ÿèñÏ&l:ÏÿÿÿéñÏ&Ñ:ÐÿÿÿéñÏ&l:Ñÿÿ ÿêöÏ&Ñ:Òÿÿ ÿéóÏ&m:ÓÿÿÿçñÏ&lßÿÿÿèñÏ&m:Ôÿÿ ÿçñÏ&Ñ&r:ÕÿÿÿçñÏ&_žÿÿÿèñÏ&m:Öÿÿ ÿéõÏ&l:×ÿÿ ÿèñÏ&Ñ:Øÿÿ ÿçôÏ&l:ÙÿÿÿîñÏ&lÙÿÿ ÿéóÏ&m Aÿÿ ÿéóÏ&Ñ:ÚÿÿÿèñÏ&Ñ:ÛÿÿÿèñÏ&Ñ:Üÿÿ ÿéñÏ&Ñ:Ýÿÿ ÿçöÏ&Ñ&r:Þÿÿ ÿêõÏ&ÎÑÿÿÿçñÏ&m&  ÿÿÿèñÏ&Ñ:ßÿÿÿçñÏ&Ñ:àÿÿ ÿæñÏ&l:áÿÿÿçñÏ&Ñ&ÑÒÿÿ ÿéôÏ&Ñ"Ìÿÿ ÿéóÏ&Ñ&œ›ÿÿ ÿéõÏ&Ñ"“ÿÿÿèñÏ&l:âÿÿÿçñÏ&Ñ:ãÿÿÿèñÏ&n"vÿÿ ÿéôÏ&ÑÚÿÿÿññÏ&Ñ"¡ÿÿ ÿèòÏ&k"¨ÿÿÿéñÏ&"ºÑÿÿÿçñÏ&Ñ&£:äÿÿÿèñÏ&l:åÿÿ ÿéñÏ&k"[ÿÿÿêñÏ&æ&Ñ:æÿÿ ÿèôÏ&Ñ:çÿÿ ÿéñÏ&"¾ÑÿÿÿéñÏ&l ŠÿÿÿéñÏ&!ÈÑÿÿ ÿêóÏ&n"Òÿÿ ÿçöÏ&Ñ&r:èÿÿ ÿçòÏ&r&qÑÿÿÿéòÏ&t&slÿÿ ÿéôÏ& & lÿÿÿéóÏ&u&vÑÿÿ ÿéñÏ&w&l:éÿÿ ÿìõÏ&Ñ:êÿÿ ÿéöÏ&l"Çÿÿ ÿéôÏ&l#Kÿÿ ÿéôÏ&n&q:ëÿÿ ÿéñÏ&l:ìÿÿÿçôÏ&l:íÿÿÿêñÏ&l" ÿÿ ÿéòÏ&l0~ÿÿ ÿîóÏ&l& ù:îÿÿÿêóÏ&Ñ:ïÿÿ ÿêñÏ&m:ðÿÿ ÿèöÏ&l:ñÿÿÿéôÏ&Ñ:òÿÿÿèñÏ&Ñ:óÿÿ ÿéñÏ&msÿÿÿðñÏ&#RlÿÿÿçñÏ&l:ôÿÿ ÿçôÏ&#›Ñÿÿ ÿéñÏ&l:õÿÿÿèóÏ&Ñ:öÿÿ ÿíóÏ&Ñ"²ÿÿ ÿèñÏ&"Ð&Tlÿÿ ÿêñÏ&l:÷ÿÿ ÿïôÏ&Ñ:øÿÿÿðñÏ&n!cÿÿÿéñÏ&#¨lÿÿÿèñÏ&n"ùÿÿ ÿêñÏ&l:ùÿÿÿèñÏ&#<lÿÿÿìñÏ&l:úÿÿÿëñÏ&l#Øÿÿ ÿçóÏ&l&p:ûÿÿÿéñÏ&Ñ ÿÿ ÿéõÏ&l&#$#%ÿÿ ÿéñÏ&m#Ëÿÿ ÿçõÏ&Ñ:üÿÿ ÿëõÏ&l&"‘„ÿÿ ÿæõÏ&Ñ:ýÿÿ ÿèñÏ&Ñ!ÿÿ ÿçóÏ&l"}ÿÿÿèñÏ&!¹ÑÿÿÿéñÏ&n!$ÿÿÿêòÏ&"+&€mÿÿ ÿèñÏ&l"ÃÿÿÿæòÏ&n"rÿÿÿèòÏ&l&:þÿÿ ÿëöÏ&„&l:ÿÿÿÿéñÏ&l"ÿÿÿé÷Ï&l;ÿÿ ÿçöÏ&Ñ&#;ÿÿ ÿêóÏ&o;ÿÿÿéõÏ&#ÒÑÿÿÿéñÏ&l"ÿÿ ÿéòÏ&l ÿÿÿæñÏ&#¹mÿÿÿéñÏ&Ñ#ðÿÿ ÿçóÏ&ø&rmÿÿÿèñÏ&l;ÿÿÿèõÏ&Ñ#ùÿÿ ÿèöÏ&Ñ;ÿÿÿéôÏ&l&u;ÿÿÿè÷Ï&5&Ñ;ÿÿÿèñÏ&n;ÿÿÿéñÏ&n$ ÿÿ ÿèóÏ&Ñ&t;ÿÿ ÿéõÏ&m; ÿÿ ÿéñÏ&$~lÿÿ ÿçóÏ&l&r; ÿÿÿéñÏ&l; ÿÿ ÿëõÏ&l$‹ÿÿÿèñÏ&$¨lÿÿÿéôÏ&Ñ&Ò; ÿÿÿêôÏ&5&Ñ; ÿÿ ÿêóÏ&o;ÿÿ ÿèñÏ&l;ÿÿ ÿéñÏ&œ&Ñ;ÿÿÿçñÏ&$xkÿÿ ÿïñÏ&l#ÿÿÿèóÏ&n;ÿÿ ÿêñÏ&k;ÿÿ ÿéñÏ&Ñ$®ÿÿ ÿèïÏ& ;ÿÿ ÿçòÏ&Ñ;ÿÿ ÿéñÏ&l;ÿÿ ÿçñÏ&o&r;ÿÿÿèñÏ&Á&Âmÿÿ ÿêõÏ&Ñ;ÿÿ ÿèõÏ&l&qpÿÿÿéñÏ&j;ÿÿ ÿçôÏ&m;ÿÿÿéñÏ&n;ÿÿ ÿéóÏ&l$)ÿÿ ÿìôÏ&l&g;ÿÿÿçñÏ&%lÿÿÿéöÏ&l;ÿÿ ÿçôÏ&l$qÿÿÿçñÏ&l;ÿÿÿéñÏ&l;ÿÿ ÿç÷Ï&Ñ&rBÿÿ ÿéñÏ&kZÿÿÿéñÏ&#)lÿÿ ÿéôÏ&l$ŽÿÿÿéñÏ&n;ÿÿ ÿîóÏ&Ñ& ù; ÿÿÿêñÏ&l;!ÿÿ ÿéñÏ&n&f;"ÿÿ ÿçôÏ&l$ÿÿÿçôÏ&Ñ;#ÿÿ ÿéóÏ&n;$ÿÿ ÿçóÏ&l;%ÿÿ ÿéôÏ&l;&ÿÿÿéòÏ&ç&Ñ;'ÿÿ ÿèõÏ&t&l;(ÿÿÿíòÏ&l;)ÿÿ ÿéõÏ&Ñ&&ÿÿ ÿèñÏ&Ñ;*ÿÿ ÿéóÏ&Ñ&Þüÿÿ ÿéôÏ&l&ŒÿÿÿéñÏ&l;+ÿÿ ÿîóÏ&m& ø;,ÿÿ ÿêñÏ&æ&Ñ;-ÿÿÿèñÏ&l;.ÿÿ ÿæñÏ&Ñ;/ÿÿ ÿïôÏ&Ñ;0ÿÿ ÿèóÏ&n;1ÿÿ ÿéòÏ&l&üýÿÿ ÿéòÏ&l&ü;2ÿÿ ÿêóÏ&l;3ÿÿÿèöÏ&n;4ÿÿÿèöÏ&l;5ÿÿÿèöÏ&l;6ÿÿÿèöÏ&k;7ÿÿÿéöÏ&Ñ& ;8ÿÿÿéóÏ& &m;9ÿÿ ÿçòÏ&Ñ&r;:ÿÿÿðñÏ&Ñ;;ÿÿÿíòÏ&%lÿÿÿéñÏ&n;<ÿÿÿéòÏ&Ñ;=ÿÿÿéòÏ&l&t;>ÿÿÿéñÏ&Ñ;?ÿÿÿéöÏ&l;@ÿÿ ÿéõÏ&l0 ÿÿ ÿèõÏ&l;AÿÿÿèñÏ&n;BÿÿÿéñÏ&orÿÿ ÿèñÏ&l;CÿÿÿêñÏ&n;DÿÿÿéñÏ&n;Eÿÿ ÿçõÏ&l&r;FÿÿÿçñÏ&Ñ;GÿÿÿéñÏ&n;Hÿÿ ÿèóÏ&Ñ;Iÿÿ ÿéôÏ&Ñ;Jÿÿ ÿéöÏ&l;KÿÿÿèóÏ&Ñ;Lÿÿ ÿçõÏ&Ñ;MÿÿÿéõÏ&Ñ;NÿÿÿéñÏ&l•ÿÿ ÿéóÏ&Ñ;Oÿÿ ÿèõÏ&p&n;PÿÿÿèñÏ&n;Qÿÿ ÿêñÏ&l^ÿÿÿéöÏ&l;Rÿÿ ÿéòÏ&ž;Sÿÿ ÿçñÏ&l;Tÿÿ ÿèöÏ&k'òÿÿ ÿèöÏ&0_lÿÿ ÿéòÏ&Ñ;Uÿÿ ÿèóÏ&Ñ;VÿÿÿèôÏ&Ñ;WÿÿÿæõÏ&n;Xÿÿ ÿçòÏ&Ñ0[ÿÿÿëóÏ&&Ñ;Yÿÿ ÿêòÏ&l;Zÿÿ ÿéóÏ&l;[ÿÿÿéñÏ&l;\ÿÿ ÿìôÏ&g&l;]ÿÿÿéñÏ&l;^ÿÿÿçñÏ&l/QÿÿÿéñÏ&k;_ÿÿÿéñÏ&l;`ÿÿÿéñÏ&l;aÿÿÿèóÏ&l;bÿÿ ÿèôÏ&l&DCÿÿÿèôÏ&jpÿÿÿèñÏ&nmÿÿÿéöÏ&&kÒÿÿ ÿéøÏ&n/Xÿÿ ÿçòÏ&l;cÿÿ ÿêôÏ& & kÿÿÿèòÏ& lÿÿÿçñÏ& mÿÿÿçòÏ&Ñ;dÿÿÿæñÏ&Ú&ÛkÿÿÿçôÏ&Ñ;eÿÿÿèñÏ&l;fÿÿÿèôÏ&Ñÿÿ ÿèôÏ&n&Ø;gÿÿ ÿéñÏ&k;hÿÿ ÿéôÏ&l;iÿÿÿêòÏ&lkÿÿ ÿéòÏ&k;jÿÿÿéñÏ&l&ù;kÿÿ ÿçñÏ&l&r zÿÿ ÿéôÏ& &oÿÿ ÿèôÏ&n;lÿÿ ÿéóÏ&n;mÿÿ ÿèõÏ&k&p;nÿÿ ÿíõÏ&lJÿÿÿìñÏ&Klÿÿ ÿçõÏ&k&r;oÿÿ ÿèôÏ&ž;pÿÿÿéñÏ&l;qÿÿÿæòÏ&n:ÿÿÿéôÏ&l&Ä;rÿÿ ÿèñÏ&l&!ž!ÿÿ ÿçòÏ&l;sÿÿÿçõÏ&k;tÿÿÿèòÏ&n;uÿÿÿêñÏ&S&l;vÿÿ ÿéôÏ&n;wÿÿ ÿçñÏ&Ñ;xÿÿÿëóÏ&l&‚ÿÿ ÿçõÏ&l;yÿÿÿçñÏ&j;zÿÿÿèñÏ&l;{ÿÿÿäñÏ&n;|ÿÿÿéñÏ&k;}ÿÿ ÿêóÏ&m&%J;~ÿÿÿéñÏ&Ñ;ÿÿÿéñÏ&l& À;€ÿÿ ÿçôÏ&l&!‡ÿÿ ÿèõÏ&l;ÿÿ ÿêñÏ&n&"!"ÿÿ ÿèõÏ&l&p;‚ÿÿÿíòÏ&l/¨ÿÿÿéòÏ&k&;ƒÿÿ ÿèñÏ&n;„ÿÿÿéñÏ&l;…ÿÿ ÿéñÏ&Ñ&œ;†ÿÿÿèñÏ&Ñ;‡ÿÿ ÿðôÏ&Ë&ÊÑÿÿ ÿèõÏ&k;ˆÿÿÿåóÏ&j;‰ÿÿÿçôÏ&l& ¿ ¾ÿÿÿçöÏ&l&á;ŠÿÿÿéñÏ&Ñ;‹ÿÿ ÿéòÏ&k;Œÿÿ ÿæñÏ&m;ÿÿ ÿéñÏ&n;ŽÿÿÿêñÏ&j;ÿÿ ÿçõÏ&Ñ&r$GÿÿÿéôÏ&l;ÿÿÿéôÏ&l&;‘ÿÿ ÿçñÏ&k&%rÿÿ ÿçòÏ&k&r$yÿÿ ÿèñÏ&Ñ;’ÿÿÿéóÏ&k;“ÿÿ ÿæõÏ&k;”ÿÿ ÿéùÏ&n;•ÿÿ ÿêõÏ&n;–ÿÿ ÿéñÏ&Ñ&æ;—ÿÿÿåñÏ&n/äÿÿÿèñÏ&l;˜ÿÿÿéõÏ&n;™ÿÿÿçñÏ&L&K&&MnÿÿÿêóÏ&l;šÿÿ ÿéóÏ&l;›ÿÿ ÿîóÑ&;œÿÿÿéñÏ&n;ÿÿ ÿçôÏ&k;žÿÿÿèöÏ&l;ŸÿÿÿéñÏ&n; ÿÿÿèöÏ&l;¡ÿÿ ÿéõÏ&Ñ;¢ÿÿ ÿåôÏ&l&"";£ÿÿÿéòÏ&Ñ;¤ÿÿÿéñÏ&l(€ÿÿ ÿèñÏ&ž;¥ÿÿ ÿèõÏ&n;¦ÿÿ ÿèõÏ&l;§ÿÿ ÿéñÏ&l& À ÁÿÿÿèñÏ&n;¨ÿÿ ÿéòÏ&l;©ÿÿ ÿèöÏ&n;ªÿÿ ÿéóÏ&Ñ;«ÿÿÿèñÏ&n;¬ÿÿÿçñÏ&n&rqÿÿÿçñÏ&n&s&tuÿÿÿçóÏ&g&ž;­ÿÿ ÿêñÏ&l;®ÿÿÿçñÏ&ž;¯ÿÿ ÿçòÏ&l;°ÿÿÿèôÏ&n&;±ÿÿ ÿèóÏ&l;²ÿÿÿèñÏ&k;³ÿÿÿéñÏ&l;´ÿÿÿçöÏ&k&$Ä;µÿÿÿéñÏ&n;¶ÿÿ ÿèóÏ&n;·ÿÿ ÿêóÏ&w&vjÿÿÿèñÏ&n;¸ÿÿ ÿçóÏ&n&r;¹ÿÿ ÿìòÑ&;ºÿÿÿçõÏ&n%yÿÿÿêõÏ&n&  œÿÿ ÿéôÏ&k;»ÿÿÿçôÏ&l;¼ÿÿ ÿçôÏ&õ&ô&lóÿÿ ÿéõÏ&n&%áÿÿ ÿèñÏ&l;½ÿÿÿèóÏ&n&%;¾ÿÿ ÿéòÏ&ž;¿ÿÿÿéñÏ&n;Àÿÿ ÿèôÏ&n;Áÿÿ ÿèôÏ&k;ÂÿÿÿèõÏ&l&""~ÿÿ ÿéóÏ&l;ÃÿÿÿçñÏ&n;Äÿÿ ÿîóÏ&n& ù;ÅÿÿÿîñÏ&n;Æÿÿ ÿçôÏ&l;Çÿÿ ÿç÷Ï&n&Žÿÿ ÿèòÑ&;Èÿÿ ÿèñÏ&n;ÉÿÿÿéñÏ&Ñ;Êÿÿ ÿèñÏ&l;ËÿÿÿëöÏ&n;Ìÿÿ ÿèñÏ&n;ÍÿÿÿèõÏ&l;ÎÿÿÿçñÏ&n;Ïÿÿ ÿèôÏ&n%_ÿÿ ÿçôÑ&;ÐÿÿÿéñÏ&l%aÿÿÿêñÏ&l%mÿÿÿéöÏ&n;Ñÿÿ ÿèôÏ&n;ÒÿÿÿéñÏ&n/¡ÿÿ ÿèöÏ&l;ÓÿÿÿèñÏ&l;Ôÿÿ ÿéòÏ&n;Õÿÿ ÿèñÏ&k&‰;Öÿÿ ÿçôÏ&k&r;×ÿÿÿçóÏ&n;Øÿÿ ÿèóÏ&l;ÙÿÿÿçòÏ&j&gfÿÿ ÿêñÏ&l;Úÿÿ ÿìôÏ&g&n;ÛÿÿÿêñÏ&l;Üÿÿ ÿèõÏ&l;ÝÿÿÿéñÏ&l;ÞÿÿÿéõÏ&l;ßÿÿÿéñÏ&l;àÿÿ ÿéñÏ&n;áÿÿÿèñÏ&k;âÿÿÿéñÏ&n;ãÿÿ ÿèøÏ&k;äÿÿ ÿèöÏ&l;åÿÿ ÿèñÏ&l;æÿÿ ÿéñÏ&n/HÿÿÿèñÏ&l;çÿÿÿíñÏ&n;èÿÿÿéõÏ&l;éÿÿ ÿéõÏ&Ñ;êÿÿ ÿíòÏ&ž;ëÿÿ ÿéøÏ&Ñ;ìÿÿÿèñÏ&n;íÿÿÿéõÏ&l;îÿÿ ÿçôÏ&k& ¾;ïÿÿÿèñÏ&n;ðÿÿÿæõÏ&l;ñÿÿ ÿé÷Ï&k;òÿÿ ÿêóÑ&;óÿÿÿêñÏ&n&(~(ÿÿÿèóÏ&n;ôÿÿÿéñÏ&n;õÿÿ ÿéóÏ&l;öÿÿ ÿèóÏ&k;÷ÿÿ ÿéñÏ&n&!A!@ÿÿ ÿèôÏ&n;øÿÿÿéöÏ&n;ùÿÿ ÿéóÏ&j;úÿÿ ÿèóÏ&n&*;ûÿÿÿëöÏ&l'ýÿÿ ÿèñÏ&ð&n;üÿÿÿéñÏ&k;ýÿÿÿèôÏ&j;þÿÿÿéñÏ&l;ÿÿÿÿçöÏ&n<ÿÿÿèòÏ&n<ÿÿÿéñÏ&n<ÿÿ ÿéñÏ&n&G<ÿÿÿéñÏ&n<ÿÿ ÿèñÏ&n<ÿÿ ÿîôÏ&Ô&n<ÿÿ ÿçõÏ&n<ÿÿ ÿçóÏ&n<ÿÿ ÿïóÏ&n< ÿÿ ÿèóÏ&n&ð< ÿÿ ÿêôÑ&< ÿÿ ÿèöÏ&n< ÿÿÿèøÏ&k< ÿÿÿéóÏ&j<ÿÿ ÿèõÏ&ž<ÿÿÿèñÏ&k<ÿÿ ÿèôÑ&<ÿÿ ÿéñÏ&l<ÿÿ ÿèõÏ&ž<ÿÿ ÿéñÏ&j<ÿÿ ÿîóÏ&!x&ž<ÿÿÿêöÏ&j<ÿÿ ÿèòÑ&&%n<ÿÿÿéóÏ&Ñ<ÿÿÿçñÏ& Â&l<ÿÿ ÿçôÑ&<ÿÿ ÿéöÑ&&ÿÿÿèðÑ&‹ŒÿÿÿèñÑ&ŽÿÿÿèòÑ&ÿÿ ÿèïÍ&’‘ÿÿ ÿèôÏ&ÿÿÿæóÑ&–ÿÿ ÿçõÏ&—<ÿÿ ÿêóÐ&.Ú<ÿÿÿèôÑ&“ÿÿÿèðÑ&‹<ÿÿÿèðÑ&<ÿÿ ÿèíÐ&˜”ÿÿ ÿèïÐ&˜•ÿÿ ÿèôÏ&¶ÿÿ ÿèñÐ&.Ú<ÿÿ ÿèõÏ&¸·ÿÿ ÿéóÏ&/{¹ÿÿ ÿèöÏ&º»ÿÿ ÿéöÑ&¼ºÿÿÿéðÏ&¾½ÿÿ ÿè÷Ñ&™&'< ÿÿ ÿéóÏ&¹ÿÿÿéõÐ& ã.•ÿÿÿéóÑ&/ÙLÿÿÿéóÏ& ã+Dÿÿ ÿæöÐ&|0 ÿÿÿèöÑ&L&—ÿÿÿèõÑ&L£ÿÿ ÿæùÏ&nÿÿ ÿçõÑ&!Ÿ! ÿÿ ÿæòÐ&|òÿÿ ÿéôÑ&µ´ÿÿ ÿèòÎ&ò*Çÿÿ ÿéôÏ&0YµÿÿÿçòÐ&œ&C=ÿÿÿéõÐ&o‹ÿÿ ÿèóÑ&ÕÇÿÿ ÿæòÏ& qÿÿÿéôÐ&o›ÿÿÿç÷Ç& oÿÿÿé÷Ð&o-²ÿÿ ÿè÷Å&Ç'ÿÿ ÿæòÏ&Ïÿÿ ÿéõÏ&lkÿÿ ÿèõÐ&Ç.ÿÿÿéóÏ&o6ÿÿÿèöÏ&o'!ÿÿÿéìÇ&oÿÿ ÿãóÑ&$=ÿÿ ÿéòÐ&mnÿÿ ÿèóÏ&Çñÿÿ ÿéòÏ& °' ÿÿÿæóÐ&#\&Ï+ÿÿ ÿéöÏ&vlÿÿ ÿèõÐ&Ç'"ÿÿ ÿéôÑ&=ÿÿÿçòÎ&0Ÿÿÿ ÿçòÊ&A=ÿÿÿæõÑ&Ï=ÿÿÿéïÑ&o'#ÿÿ ÿèóÒ&Ç'$ÿÿ ÿåöÓ&§=ÿÿ ÿèöÑ&Œ=ÿÿ ÿèõÏ&-0ÿÿ ÿéõÎ&Ä0ÿÿ ÿèóÏ&Å0ÿÿ ÿêôÐ&‚0ÿÿ ÿêöÎ&00ÿÿ ÿéóÏ& j0ÿÿ ÿéóÏ&#0ÿÿ ÿéöÎ& ’ ‘ÿÿ ÿéôÑ& ‘$ ÿÿ ÿçôÏ&Ë=ÿÿ ÿçôÏ&Ë=ÿÿ ÿçôÏ&Ë=ÿÿ ÿçôÏ&#Ëÿÿ ÿçôÏ&Ë=ÿÿ ÿçôÏ&ËÉÿÿ ÿçôÏ&Ê=ÿÿ ÿçôÏ&Ê=ÿÿ ÿçôÏ&Ê=ÿÿ ÿçôÏ&Ê=ÿÿ ÿçôÏ&Ê=ÿÿ ÿçôÑ&ÌÊÿÿ ÿçôÏ&Ê= ÿÿ ÿçôÏ&Ê=!ÿÿ ÿçôÏ&Ê="ÿÿ ÿçõÐ&Ê=#ÿÿ ÿçôÐ&Ê=$ÿÿ ÿçôÏ&Ê=%ÿÿ ÿçôÏ&Ê ÿÿ ÿçôÏ&Ê=&ÿÿ ÿçôÏ&yÊÿÿ ÿçôÏ&Ê='ÿÿ ÿçôÏ&Ê=(ÿÿ ÿçöÏ&#=)ÿÿ ÿçöÏ&;#ÿÿ ÿçöÏ&#=*ÿÿ ÿçôÏ&Ê=+ÿÿ ÿçöÏ&#=,ÿÿ ÿçôÏ&Ê=-ÿÿ ÿçöÑ&#=.ÿÿ ÿçöÐ&#=/ÿÿ ÿçôÏ&Ê’ÿÿ ÿçôÏ& \Êÿÿ ÿçôÐ&Ê=0ÿÿ ÿçöÏ&#=1ÿÿ ÿçöÏ&&#ÿÿ ÿçöÏ&Ê"ÿÿ ÿçöÐ&#=2ÿÿ ÿçôÏ&Ê=3ÿÿ ÿçöÏ&#=4ÿÿ ÿçöÏ&#=5ÿÿ ÿçôÐ&Ê=6ÿÿ ÿçöÏ&#=7ÿÿ ÿçöÏ&#=8ÿÿ ÿçöÏ&#=9ÿÿ ÿç÷Ï&#=:ÿÿ ÿèöÊ&Ñôÿÿ ÿéìÎ&ÑYÿÿ ÿéðÃ&ŠÂÿÿ ÿêòÎ&Œÿÿ ÿèóÇ&¡+Jÿÿ ÿéôÏ&ÑÃÿÿ ÿéöÎ&ŠÄÿÿ ÿéôÅ&Ñÿÿ ÿíóÊ&ßÿÿ ÿéóÆ&чÿÿ ÿëõÇ&Ñÿÿ ÿèõÏ&Šÿÿ ÿéõË&`Šÿÿ ÿìõÑ&Š-ÿÿ ÿçóÎ&Ѹÿÿ ÿéòÐ&Ñ0öÿÿ ÿíóÊ&ŒQÿÿ ÿéöÐ&³ÿÿ ÿèôÐ&ÐÑÿÿ ÿèöÏ&Š+ÿÿ ÿéóÏ&Ñÿÿ ÿíðÏ&Šiÿÿ ÿêìÏ&ÎÍÿÿ ÿíöÌ&1Íÿÿ ÿíôÐ&Àÿÿ ÿíóÏ&Ñ'Ëÿÿ ÿéóÏ&OŠÿÿ ÿéòÄ&ÑÎÿÿ ÿéòÎ&²ÿÿ ÿèóÏ&Šÿÿ ÿíõÆ&Œÿÿ ÿèõË&ÏÍÿÿ ÿèóÏ&Ñÿÿ ÿêðÇ&ÍÃÿÿ ÿíôÆ&Šžÿÿ ÿêòÏ&Ñ ÿÿ ÿêõÉ&Ñ~ÿÿ ÿè÷Ï&Ñ7ÿÿ ÿéõÑ&Œôÿÿ ÿèîÏ&Ñÿÿ ÿéóÏ&Ñæÿÿ ÿèôÐ&PŒÿÿ ÿéöÏ&Ñ—ÿÿ ÿíöÑ&Œaÿÿ ÿéõÐ&óÿÿ ÿçõÐ&Ñ(ÿÿ ÿêõÑ&Ñ2ÿÿ ÿèôÉ&00ÿÿ ÿíóÏ&~Ñÿÿ ÿíóÄ&Ñ&ÿÿ ÿéõÐ&Š‹ÿÿ ÿéóÏ&æŒÿÿ ÿéóÐ&ŠNÿÿ ÿéôÑ&àÑÿÿ ÿé÷Ì&Eÿÿ ÿéñÇ&Óÿÿ ÿèõÏ&Œ»ÿÿ ÿæôÏ&Ñÿÿ ÿéòÏ&Š,ÿÿ ÿêûË&Œ&Hºÿÿ ÿéõÈ&Ñ<ÿÿ ÿèôÑ&Ѧÿÿ ÿèñÆ&+Iÿÿ ÿìõÄ& &!ÿÿ ÿèõÕ&+J=;ÿÿ ÿéôÏ&Œ$ÿÿ ÿéõÄ&Œ+Hÿÿ ÿéóÅ&Ðÿÿ ÿéêÐ&Š–ÿÿ ÿéóÎ&Ñ0ÿÿ ÿèóÏ&+K0Yÿÿ ÿçõÑ& Œÿÿ ÿéõÐ&„ÿÿ ÿéôÏ& ®ÿÿ ÿèõÐ&LÑÿÿ ÿéìÈ&+Fÿÿ ÿéóÏ&Žÿÿ ÿéôÏ&+Gÿÿ ÿéöÏ&Œ/öÿÿ ÿçõÓ&)@ÿÿ ÿèöÎ&Œ»ÿÿ ÿèõÑ&‰Œÿÿ ÿéõÐ&Œ‹ÿÿ ÿèòÏ&Ñ Wÿÿ ÿèóÏ&Œ-dÿÿ ÿéóÏ&Šÿÿ ÿìõÑ& ÿÿ ÿéîÏ& ÿÿ ÿêõÇ&.3/`ÿÿ ÿéøÏ& ÿÿ ÿíñÍ&Œ+Mÿÿ ÿèöÏ&Œ'ðÿÿ ÿé÷Ç&Œ1ÿÿ ÿéðÅ&Œ»ÿÿ ÿéíÑ&/&/`=<ÿÿ ÿéöÏ&Í"Hÿÿ ÿìõÐ&Œ+Lÿÿ ÿéíÇ&Ñÿÿ ÿéõÐ&Ñ#¡ÿÿ ÿèòÏ&Œ.ÿÿ ÿèõÐ&0Œÿÿ ÿéóÎ&Ñ&Çÿÿ ÿéôÏ&/ú/`ÿÿ ÿéóÎ&+Nÿÿ ÿéõÑ&Oÿÿ ÿíñÍ&0ÿÿ ÿèôÍ&==ÿÿ ÿèñÐ&Ñ ÿÿ ÿèñÎ&Í&Û&eÿÿ ÿéöÏ&/`ÿÿ ÿèôÏ&$‚ÿÿ ÿéöÎ&Œ"_ÿÿ ÿéíÉ&ÑJÿÿ ÿíñÏ&Œ!aÿÿ ÿéóÊ&Œóÿÿ ÿíóÎ&Œÿÿ ÿèóÏ&Ñ‹ÿÿ ÿéóÏ&/`0sÿÿ ÿçõÉ&ŒYÿÿ ÿéòÎ&Œ.¹ÿÿ ÿéíÇ&5ÿÿ ÿéõÏ&0/`ÿÿ ÿèõÎ&°ÿÿ ÿèïÐ&Í0¹ÿÿ ÿéõÈ&#Iÿÿ ÿéïÑ&Œÿÿ ÿíôÏ&Œ"jÿÿ ÿéöÑ&=>ÿÿ ÿéóÎ&Œ$¸ÿÿ ÿíòÐ&Œ2ÿÿ ÿèôÐ&ÿÿ ÿêîË&$Tÿÿ ÿèõÐ& /`ÿÿ ÿéòÈ&Œ$Ìÿÿ ÿçóÐ&æÿÿ ÿéöÒ&/ÿÿ ÿèõÇ&/8ÿÿ ÿéòÏ&Œÿÿ ÿéïÐ&Ñ%ÿÿ ÿèñÏ&+O=?ÿÿ ÿéôÉ&/9ÿÿ ÿé÷Ð&/Y/`ÿÿ ÿêôÑ&+Pÿÿ ÿèôÒ&0 +Oÿÿ ÿìóÏ&¦/`ÿÿ ÿéóÏ&0ÿÿ ÿéïÐ&-…ÿÿ ÿéõÏ&f&-q/`ÿÿ ÿéöÇ&Í& Ãÿÿ ÿèõÐ&Œ&˜ÿÿ ÿèöÐ&ÒÍÿÿÿéóÐ&ÓÛÿÿ ÿéîÑ&Œ¹ÿÿ ÿéòÏ&Í Þÿÿ ÿèõÑ&f&-r/`ÿÿ ÿêöÏ&â&/`=@ÿÿ ÿéíÏ&Í-9ÿÿ ÿèóÏ&{ÿÿ ÿèôÑ&û+Oÿÿ ÿçôÏ&(Kÿÿ ÿíöË&Œÿÿ ÿêîÑ&Œ'ÿÿ ÿêòÏ&üÿÿ ÿéóÈ&/`/bÿÿ ÿéóÒ&iÿÿ ÿèõÌ&þÿÿ ÿè÷Ð&6&/`=AÿÿÿèõÊ&ÔÓÿÿ ÿéôÎ&Œ*Ñÿÿ ÿèôÎ&+Qÿÿ ÿéóÏ&'÷ÿÿ ÿêóÐ&Í&¤ÿÿ ÿèðÑ&&3=Bÿÿ ÿéøÊ&Œ¡ÿÿ ÿëòÏ&ú&/`=Cÿÿ ÿèòÐ&/ÿ.ÿÿ ÿéñÈ&Í'ÿÿ ÿèõÏ&/dÿÿ ÿêóÐ&=Dÿÿ ÿèõÐ&&/`=Eÿÿ ÿéóÏ&%õ/`ÿÿ ÿçøÒ&Õ/`ÿÿ ÿéõÐ&/`=Gÿÿ ÿéòÊ&Œðÿÿ ÿéöÉ&'è/`ÿÿ ÿçôÐ&/`=Hÿÿ ÿç÷Ò&±ÿÿÿéóÏ&Ó&0=Iÿÿ ÿèóÐ&+R/`ÿÿ ÿèòÍ&%\ÿÿÿéòÐ&Ó%Vÿÿ ÿéôÏ&/`=Jÿÿ ÿèðÏ&/`=Kÿÿ ÿêóÑ&0=Lÿÿ ÿéöÐ&}ÿÿ ÿéðË&ú&/`=Mÿÿ ÿëòÈ&ú&/`=Nÿÿ ÿçôÏ&0/`ÿÿ ÿéíÊ&–/`ÿÿ ÿèöÐ&/`=Oÿÿ ÿéñÑ&Í+Sÿÿ ÿèòÑ&&0=Pÿÿ ÿéóÌ&(T/`ÿÿ ÿéòË&.¨ÿÿÿéóÐ&Ó=Qÿÿ ÿèùÔ&/`=Rÿÿ ÿçõÐ&‡/`ÿÿ ÿçøÒ&/`=Sÿÿ ÿéöÎ&Æ/`ÿÿ ÿçóÎ&/`=Tÿÿ ÿéêÐ&Ö×ÿÿ ÿéòÐ&Iÿÿ ÿèõÐ&gÿÿ ÿèôÐ&&ÿÿ ÿéõÐ&<ÿÿ ÿèîÐ&”“ÿÿ ÿéñÐ&#Ç”ÿÿ ÿèóÐ&!—ÿÿ ÿéóÐ&çÿÿ ÿèïÐ&'ö/‘ÿÿ ÿèóÐ&/‘=Uÿÿ ÿéòÐ&”-†ÿÿ ÿéùÒ&/‘=Vÿÿ ÿçðÑ&/‘=Wÿÿ ÿéóÏ& Ì1ÿÿ ÿéøÏ&à ÍÿÿÿéïÏ&!+…ÿÿ ÿéõÏ& Í!*ÿÿ ÿèöÏ& ÍHÿÿ ÿéóÏ& Í!,ÿÿ ÿéöÏ& ΄ÿÿ ÿéîÏ& Íÿÿ ÿèõÏ& ÎUÿÿ ÿéõÐ&¬ Îÿÿ ÿèòÏ& Î0%ÿÿ ÿéïÏ& Ξÿÿ ÿéôÏ& Î Òÿÿ ÿéôÏ& Τÿÿ ÿéõÏ& ̓ÿÿ ÿéñÏ& Í)µÿÿ ÿèõÏ&!C Îÿÿ ÿéöÏ& ͬÿÿÿçïÏ&!+=Yÿÿ ÿéìÐ&2 Íÿÿ ÿéõÏ& Îôÿÿ ÿèóÏ& Ôîÿÿ ÿçõÏ& ÔFÿÿ ÿéòÐ& Î0ôÿÿ ÿèõÐ& Î&åÿÿ ÿêöÒ&ø=Zÿÿ ÿéõÏ& Î!Mÿÿ ÿéñÏ& Îþÿÿ ÿçõÏ& ÎFÿÿ ÿéôÏ& Íœÿÿ ÿéòÏ& Ô²ÿÿ ÿéòÏ& Î/”ÿÿ ÿçòÐ& Î/‚ÿÿ ÿéëÏ& Í·ÿÿ ÿéòÏ& Í&¶ÿÿ ÿéîÏ& Îÿÿ ÿéóÏ& Î.ÿÿ ÿéòÏ& Î(-ÿÿ ÿéòÏ& Îÿÿ ÿéôÏ& Î ÿÿ ÿéóÏ& Î ÿÿ ÿéïÏ&E Îÿÿ ÿèïÏ& Î ÿÿ ÿéóÏ&/•=[ÿÿ ÿéòÏ& Τÿÿ ÿéõÐ& ΋ÿÿ ÿéôÐ& Ιÿÿ ÿéöÑ& Îbÿÿ ÿéòÏ&8 Îÿÿ ÿèöÏ&. =\ÿÿ ÿéóÏ& Î+ÿÿ ÿçóÏ&=]ÿÿ ÿéóÏ& Ô ÿÿ ÿéôÏ& Î ÿÿ ÿéêÐ& Îÿÿ ÿçõÏ& Ôÿÿ ÿéòÏ& Îÿÿ ÿéóÏ&Ñ Ôÿÿ ÿéöÏ& Î)–ÿÿ ÿéóÐ& Î,ÿÿ ÿéòÏ& Îÿÿ ÿéëÏ&¾ Ôÿÿ ÿçöÏ& Îÿÿ ÿèõÏ&V Îÿÿ ÿé÷Ï& Ô.4ÿÿ ÿçöÒ&f Îÿÿ ÿèñÏ& Ôÿÿ ÿéðÐ& Ô# ÿÿ ÿèñÏ&!(ïÿÿ ÿèïÏ& Ô-hÿÿ ÿéöÏ& Ô Øÿÿ ÿéõÏ& Î1ÿÿ ÿéíÏ& Ô/–ÿÿ ÿéóÏ& Î)éÿÿ ÿéôÏ& Î+TÿÿÿéòÏ&/—=^ÿÿ ÿéòÏ& Î,AÿÿÿéòÏ&/˜/—ÿÿ ÿéøÏ& Ô $ÿÿ ÿéôÏ& Î`ÿÿ ÿéöÏ& Î#Hÿÿ ÿäöÏ& Î"sÿÿ ÿéóÏ& ÎŒÿÿ ÿé÷Ï& Ô/™ÿÿ ÿéóÏ&/š Îÿÿ ÿéñÏ& Îÿÿ ÿéóÏ& Ô&Žÿÿ ÿéñÏ& Î/ÿÿ ÿéöÏ& Ôÿÿ ÿèóÐ& Ï Îÿÿ ÿéïÏ& Îÿÿ ÿéöÏ& Ôÿÿ ÿéõÏ& Îÿÿ ÿèôÏ&ÿ=`ÿÿ ÿèôÏ& Ô$rÿÿ ÿéòÑ& Ô/ÿÿ ÿéòÏ& Ô$Âÿÿ ÿéôÑ& Ô.‚ÿÿ ÿé÷Ï& Ôÿÿ ÿéõÑ& Î0ÿÿ ÿéóÏ& Î(Ùÿÿ ÿéõÏ& Ô&G=aÿÿ ÿéïÏ& Ô4ÿÿ ÿéóÏ&÷=bÿÿ ÿéóÏ& Ô'÷ÿÿ ÿéóÏ& Ô=cÿÿ ÿéõÐ& Î* ÿÿ ÿéõÏ& Ô*ÿÿ ÿèöÐ& Ô)òÿÿ ÿéòÏ& Ôüÿÿ ÿéôÏ& Ô*Ñÿÿ ÿéïÏ& Ô0ÿÿ ÿéòÏ&.¯ Ôÿÿ ÿéøÑ& Ô0ÿÿ ÿéõÏ& Ô0 ÿÿ ÿèôÐ&%q'úÿÿ ÿçóÐ&#h&#g=dÿÿ ÿéóÐ&%q&/á=eÿÿ ÿéñÏ& Ô0"ÿÿÿè÷Ï&,Y=fÿÿ ÿéóÐ& Ô*yÿÿÿçôÑ&0!=gÿÿ ÿéòÏ&%r%qÿÿ ÿéôÐ&…=hÿÿ ÿèóÐ&%q)õÿÿ ÿéöÏ& Ô0#ÿÿ ÿéóÑ& ÔÎÿÿÿèòÏ&0(3ÿÿ ÿéõÏ&þÿÿ ÿéóÏ&&þÿÿ ÿéìÏ&œþÿÿ ÿéôÐ&þ*rÿÿ ÿèòÏ&0%þÿÿ ÿéôÏ&þFÿÿ ÿéõÑ&þ²ÿÿÿæòÏ&ÿ=jÿÿ ÿéóÏ&þÿÿ ÿéóÐ&¶ÿÿ ÿèñÏ&þ*zÿÿ ÿéëÏ&þ)ÿÿÿ ÿçôÏ&þ%Ìÿÿ ÿéòÏ&þ(-ÿÿ ÿéóÏ&þ0)ÿÿ ÿéöÐ&þ³ÿÿ ÿéòÏ&þ ÿÿ ÿéðÏ&þ|ÿÿ ÿéõÏ&þQÿÿ ÿéõÏ&þ ÿÿÿçõÏ&÷=kÿÿ ÿéóÏ&þ&ÿÿ ÿèöÐ&áÿÿ ÿéöÑ&“ÿÿ ÿéõÐ&‹þÿÿ ÿéòÏ&¤þÿÿ ÿéóÐ&Ðÿÿ ÿéóÒ&0ìÿÿ ÿéîÐ&0*ÿÿÿçïÎ&0+=lÿÿÿçîÏ&0+=mÿÿ ÿèóÏ&°ïÿÿ ÿéôÏ&þ0,ÿÿ ÿèîÐ&0-ÿÿ ÿéöÐ& ×ÿÿ ÿéòÐ&þ0.ÿÿ ÿéöÐ&01ÿÿ ÿéíÐ&5ÿÿ ÿäöÏ&ýþÿÿ ÿéöÐ&ÿÿ ÿéðÐ&…=nÿÿ ÿéòÐ&$Áÿÿ ÿéðÑ&‡ÿÿ ÿéöÏ&þÿÿ ÿéôÑ&+Pÿÿ ÿéóÐ&&÷=oÿÿ ÿéôÐ&*Ñÿÿ ÿéóÏ&n02ÿÿÿéóÏ&03=qÿÿ ÿèöÐ&ÿÿ ÿéðÐ&É&Ê=rÿÿ ÿéðÐ&Ê&ÉËÿÿ ÿéðÐ&É&ÊÌÿÿ ÿéðÐ&É&ÊÍÿÿ ÿéðÐ&É&ÊÎÿÿÿéóÏ&.Í04ÿÿ ÿéðÐ&u&Ê=sÿÿ ÿéðÐ&Ê&u=tÿÿ ÿè÷Ç&s=uÿÿÿèôÊ&05=vÿÿ ÿèöÊ&/B%-ÿÿ ÿëôÉ&u=xÿÿ ÿëôÏ&ãuÿÿ ÿëôÉ&;uÿÿ ÿëôÏ&u=yÿÿ ÿëôÐ&äuÿÿ ÿëôÉ&–uÿÿ ÿëôÐ&åuÿÿ ÿëôÌ&u=zÿÿ ÿëôÊ&uÿÿ ÿëôÉ& uÿÿ ÿëôÏ&u={ÿÿ ÿëöÉ&u=|ÿÿ ÿëôË&u=}ÿÿ ÿëôÎ&u=~ÿÿ ÿëôÉ&u=ÿÿ ÿëôÉ&u=€ÿÿ ÿëôÉ&u=ÿÿ ÿëôÏ&u=‚ÿÿ ÿëôË&u=ƒÿÿ ÿëôÉ&u=„ÿÿ ÿëôÍ&¼uÿÿ ÿëôÏ&u=…ÿÿ ÿëôÉ&u=†ÿÿ ÿëôÏ&®uÿÿ ÿëôÏ&»uÿÿ ÿëôÎ&u=‡ÿÿ ÿëôÉ&®uÿÿ ÿëôÉ&u=ˆÿÿ ÿëôÐ&u=‰ÿÿ ÿëôÏ&u=Šÿÿ ÿëôÎ&u=‹ÿÿ ÿëôÉ& ñuÿÿ ÿëôÏ&u=Œÿÿ ÿëôÐ&u=ÿÿ ÿëôÉ&u=Žÿÿ ÿëôÏ&u=ÿÿ ÿëôÉ&u=ÿÿ ÿëôÉ&~uÿÿ ÿëôË&u=‘ÿÿ ÿëöÏ&u=’ÿÿ ÿëôÉ&u=“ÿÿ ÿëôÏ&u=”ÿÿ ÿëôÏ&suÿÿ ÿëôÏ&u=•ÿÿ ÿëôÎ&u=–ÿÿ ÿëôÐ&u=—ÿÿ ÿëôÏ&u=˜ÿÿ ÿëôÍ&u=™ÿÿ ÿëôÉ&u=šÿÿ ÿëôÏ&u=›ÿÿ ÿëôÍ&u=œÿÿ ÿëôÉ&u=ÿÿ ÿëôÉ&u=žÿÿ ÿëôÉ&u=Ÿÿÿ ÿëôÏ&u= ÿÿ ÿëôÏ&$uÿÿ ÿëôÏ&u=¡ÿÿ ÿëôÑ&u=¢ÿÿ ÿëôÉ&u=£ÿÿ ÿëôÑ& uÿÿ ÿëôÎ&u=¤ÿÿ ÿëôÊ&u=¥ÿÿ ÿëôÏ&u=¦ÿÿ ÿëôÉ&Muÿÿ ÿëôÑ&uÜÿÿ ÿëôÌ&zuÿÿ ÿëôÏ&u=§ÿÿ ÿëôÎ&|uÿÿ ÿëôË&uÿÿ ÿëôÏ&Åuÿÿ ÿëôÐ&u=¨ÿÿ ÿëôÏ&çuÿÿ ÿëôÏ&J&uIÿÿ ÿëôÑ&-uÿÿ ÿëôÏ&uÿÿ ÿëôÏ&u=©ÿÿ ÿëôÉ&u=ªÿÿ ÿëôÌ&u=«ÿÿ ÿëôÉ&u=¬ÿÿ ÿëôÐ&u=­ÿÿ ÿëôÐ&u=®ÿÿ ÿëôÏ&3uÿÿ ÿëôÑ&u=¯ÿÿ ÿëôÉ&u=°ÿÿ ÿëôÏ&u=±ÿÿ ÿëôÉ&uÿÿ ÿëôÓ&u=²ÿÿ ÿëôÉ&u=³ÿÿ ÿëôÏ&N&Muÿÿ ÿëôÉ&u=´ÿÿ ÿëôÏ&u=µÿÿ ÿëôÉ&u=¶ÿÿ ÿëôÐ& ºuÿÿ ÿëôÏ&u=·ÿÿ ÿëôÑ&u=¸ÿÿ ÿëôÒ&u=¹ÿÿ ÿëôÏ&u=ºÿÿ ÿëôÏ&d&cuÿÿ ÿëôÉ&u=»ÿÿ ÿëöÍ&\uÿÿ ÿëôÐ&Tuÿÿ ÿëöÐ&u=¼ÿÿ ÿëôÉ&u=½ÿÿ ÿëôÉ&u=¾ÿÿ ÿëôÒ&u=¿ÿÿ ÿëôÎ&u ]ÿÿ ÿëôÏ&u=Àÿÿ ÿëôÎ&u=Áÿÿ ÿëôÏ&u=Âÿÿ ÿëôÏ&uÅÿÿ ÿëôÉ&u=Ãÿÿ ÿëôÉ&" uÿÿ ÿëôÍ&u=Äÿÿ ÿëôÐ&#–uÿÿ ÿëôÉ&u"#ÿÿ ÿëôÎ&u=Åÿÿ ÿëôÐ&!¥uÿÿ ÿëôÏ&uÿÿ ÿëôÉ&u=Æÿÿ ÿëôÉ& {uÿÿ ÿëôÏ& kuÿÿ ÿëôÏ&u=Çÿÿ ÿëôÉ&!-uÿÿ ÿëôÐ&"¿uÿÿ ÿëôÉ&u=Èÿÿ ÿëôÉ&u=Éÿÿ ÿëôÉ& “uÿÿ ÿëôÐ&"³uÿÿ ÿëôÐ&!¡uÿÿ ÿëôÏ&u!šÿÿ ÿëôÏ&u=Êÿÿ ÿëôÏ&"ûuÿÿ ÿëôÏ&"¼uÿÿ ÿëôÏ&"uÿÿ ÿëôÏ&$9uÿÿ ÿëôÑ&u=Ëÿÿ ÿëôÍ&u=Ìÿÿ ÿëøÎ&u=Íÿÿ ÿëôÉ&u=Îÿÿ ÿëôÏ&$äuÿÿ ÿëôÏ&vuÿÿ ÿëôÐ&$ðuÿÿ ÿëôË&$Vuÿÿ ÿëôÏ&u=Ïÿÿ ÿëôÌ&u=Ðÿÿ ÿëôÐ&uÿÿ ÿëõÐ&u=Ñÿÿ ÿëôÒ&u=Òÿÿ ÿëõÏ&u=Óÿÿ ÿëôÏ&u=Ôÿÿ ÿëôÐ&u=Õÿÿ ÿëôÉ&u=Öÿÿ ÿëôÏ&u=×ÿÿ ÿëôË&/uÿÿ ÿëôÌ&u=Øÿÿ ÿëôÐ&%Šuÿÿ ÿëôÑ&u=Ùÿÿ ÿëôÏ&u=Úÿÿ ÿëôÉ&u=Ûÿÿ ÿëôÌ&u=Üÿÿ ÿëôË&u=Ýÿÿ ÿëôÏ&u=Þÿÿ ÿëôÉ&Æ&Çuÿÿ ÿëõÒ&uƒÿÿ ÿëôÐ&u=ßÿÿ ÿëôÏ&u=àÿÿ ÿëôÏ&(}uÿÿ ÿëôÏ&u=áÿÿ ÿëôÏ&u=âÿÿ ÿëôÑ&u=ãÿÿ ÿëôÑ&u=äÿÿ ÿëôÉ&u=åÿÿ ÿëôÑ&u=æÿÿ ÿëôÌ&u=çÿÿ ÿë÷Ë&u=èÿÿ ÿë÷Ð&‘&’uÿÿ ÿëôÓ&u=éÿÿ ÿëôÒ&u=êÿÿ ÿëôÑ&u=ëÿÿ ÿëôÒ&u=ìÿÿ ÿëôÉ&u=íÿÿ ÿëôË&u=îÿÿ ÿéðÃ&&LÿÿÿéðÃ&&KÿÿÿêòÑ&&P=ïÿÿ ÿéñÄ&'þÿÿÿéðÃ&µÿÿÿéñË&&IþÿÿÿéðÃ&Òÿÿ ÿéðÏ&&Jÿÿ ÿéðÏ&&Hÿÿ ÿéðÆ&&Gÿÿ ÿéñÌ&þPÿÿ ÿéðÏ&Qÿÿ ÿéñÅ&Üþÿÿ ÿéñÃ&åþÿÿ ÿéñÏ&þ&Fÿÿ ÿéñÐ&&Eþÿÿ ÿéñÃ& òþÿÿ ÿéñÐ&þ&Dÿÿ ÿéñÇ&Éþÿÿ ÿéðÏ&&CÿÿÿéñÏ&þ&Mÿÿ ÿéñÐ&06þÿÿ ÿéñÎ&þ07ÿÿ ÿéñÍ&08þÿÿ ÿèñÊ&09ŠÿÿÿèñÆ&0:ŠÿÿÿèñÃ&Š&Rÿÿ ÿéðÄ&xÿÿ ÿéñÍ&0;þÿÿÿéñÏ&þ&QÿÿÿéñÐ&0<þÿÿ ÿèñÊ&Š=ðÿÿ ÿéñÏ&`þÿÿ ÿéñÏ&þ&Sÿÿ ÿéñÏ&þšÿÿ ÿéñÐ&þ0=ÿÿÿèñÏ&Šÿÿ ÿéñÑ&þäÿÿ ÿéñÏ&þ=ñÿÿ ÿéñÄ&0Æþÿÿ ÿèñÑ&Š‹ÿÿ ÿèñÊ&Šÿÿ ÿéðÏ&¥ÿÿÿéðÐ&ÐÿÿÿéðÏ& ÿÿ ÿéñÏ&þýÿÿ ÿèñÑ&Š\ÿÿÿèñÍ&ÝþÿÿÿèñÊ&±ŠÿÿÿèñÊ&"&eÿÿ ÿçñÏ&&X&eÿÿ ÿéñÃ&&Tþÿÿ ÿèñÏ&0>ŠÿÿÿéñÆ&þ&UÿÿÿèñÐ&Š.ÿÿÿèñÆ&&VŠÿÿ ÿéñÐ&&Wþÿÿ ÿéñÌ&&=þÿÿ ÿèñÏ&&YŠÿÿÿéðÎ&&Zÿÿ ÿçñÏ&þ àÿÿ ÿèñÆ&Š&[ÿÿ ÿèñÅ&Š&\ÿÿÿéðÇ&0?ÿÿÿèñÏ&¥Šÿÿ ÿéñË&þÍÿÿÿéñÆ&þ!€ÿÿÿèñÄ&Š!ÿÿÿèñÉ&ŠŽÿÿÿéñÐ&þ&]ÿÿ ÿèñÐ&0CŠÿÿ ÿçñÏ&áŠÿÿ ÿéñÐ&&^þÿÿ ÿèñÐ&Š&_ÿÿ ÿéñÐ&&`þÿÿÿçñÏ&ÝŠÿÿÿèñÅ&&e=òÿÿ ÿéñÑ&þ)šÿÿ ÿèñÏ&Š&aÿÿÿèñÏ& cŠÿÿÿèñÏ&&e.ëÿÿ ÿèñÎ&&dŠÿÿ ÿèñÍ&Ë&&e/½ÿÿ ÿæñÐ&ŠØÿÿ ÿéðÈ&"<ÿÿ ÿçöÐ&0D=óÿÿ ÿæñÈ&Š=ôÿÿ ÿèñÐ&Š"üÿÿÿéñÏ&þ&cÿÿÿèñÆ&Š#Æÿÿ ÿèñÈ&Š!ÿÿ ÿèñÏ&Š&bÿÿ ÿèñÏ&Š#±ÿÿÿèñÇ&Š"Óÿÿ ÿèñÏ&Š#Šÿÿ ÿèñÉ&Š –ÿÿÿèñÎ&Š/¾ÿÿ ÿèñÆ&Š!.ÿÿ ÿèñÏ& í&&e&lÿÿÿèñÍ&Š^ÿÿ ÿèñÑ&0—ËÿÿÿèñÏ&Š)›ÿÿ ÿèñÇ&Š)œÿÿ ÿèñÐ&Š$ˆÿÿ ÿèñÆ&)ŠÿÿÿèñÒ&Š/¿ÿÿ ÿèñÆ&Š)Ÿÿÿ ÿèñÑ&Š)žÿÿÿçñÏ&Š#ÿÿ ÿèñÐ&Ë&&e=õÿÿÿèñÉ&$ŠÿÿÿèñÐ&Š%ÿÿ ÿèñÓ&&e&mÿÿ ÿèñÆ&‰Šÿÿ ÿèñÍ&) Šÿÿ ÿèñÐ&ŠÊÿÿÿèñÑ&)¡Šÿÿ ÿèñÍ&;&eÿÿ ÿèñÏ&%Šÿÿ ÿèñÏ&Š)¢ÿÿ ÿèñÉ&Š)£ÿÿ ÿèñÎ&/ËŠÿÿ ÿèñÆ&Š/Àÿÿ ÿèñÐ&‹ŠÿÿÿèñÊ&Š)¤ÿÿ ÿèñÏ&)¥Šÿÿ ÿèñÊ&)¦ŠÿÿÿîôÑ&ü)§ÿÿ ÿèñË&Š/Âÿÿ ÿèñÏ&&e/ÁÿÿÿèñÑ&Š*œÿÿÿèñÏ&Š#òÿÿÿèñÐ&/Êÿÿ ÿåñÒ&Š/Çÿÿ ÿèñÏ&*Šÿÿ ÿèñÎ&å&eÿÿ ÿèñÏ&Š'>ÿÿÿèñÈ&ŠeÿÿÿèñÇ&Š&nÿÿ ÿèñÏ&&e/Äÿÿ ÿèñÉ&(Šÿÿ ÿèñÐ&*žŠÿÿÿèñÎ&/ÆŠÿÿ ÿçñÆ&&e/ÅÿÿÿèñÒ&%&eÿÿÿèñÑ&%P&eÿÿ ÿçñË&&e&oÿÿ ÿæñÏ&Š=öÿÿ ÿçñÐ&&e/Èÿÿ ÿèñÑ&&e'5ÿÿÿèñÉ&&e=÷ÿÿÿèñÏ&ŠSÿÿ ÿèñÏ&Š=øÿÿÿèñÐ&&e&pÿÿ ÿçñÐ&/ÊŠÿÿ ÿèñÌ&&e/Éÿÿ ÿèóÈ&²qÿÿ ÿéðÐ&)äÿÿ ÿé÷È&²ÿÿ ÿéóÏ&ÿÿ ÿéôÏ&Ÿÿÿ ÿéóÈ&²!,ÿÿ ÿèòË&/Ì.ôÿÿ ÿéôÏ&=ùÿÿ ÿé÷Ï&²/Íÿÿ ÿéôÍ&¤ÿÿ ÿéõÏ&%1ÿÿ ÿéìË&²+ÿÿ ÿèõÈ&²Tÿÿ ÿéôÎ&#¿ÿÿ ÿéöÈ&¬ÿÿ ÿçõÏ&˜ÿÿ ÿéóÏ&²Oÿÿ ÿéóÈ&.ÿÿ ÿéòÏ&²lÿÿ ÿæïÐ&¸ÿÿ ÿèòÏ&¹ÿÿ ÿéïÏ&²#-ÿÿ ÿéöÐ&!JÿÿÿèõÐ&ÿÿ ÿéîÏ&ÿÿ ÿéôÐ&²…ÿÿ ÿèëÏ&Sÿÿ ÿéïÈ&*›ÿÿ ÿéðÏ&ÿÿ ÿéõÏ&²áÿÿ ÿéóÑ&=úÿÿ ÿéôÈ&0Bÿÿ ÿèôÐ&&²ÿÿ ÿéõÏ&dÿÿ ÿéöÎ&*Ÿÿÿ ÿéõÐ&ÿÿ ÿéóÍ&²&>ÿÿ ÿèõÑ&eÿÿ ÿéõÌ&²ÿÿ ÿéòÐ&Úÿÿ ÿèóÈ&1ÿÿ ÿéòÈ&#* ÿÿ ÿéóÐ&²&ëÿÿ ÿéóÐ&)ÿÿ ÿé÷È&#"nÿÿ ÿèöÏ&#/Îÿÿ ÿéùÏ&# 3ÿÿ ÿèîÏ&&ïÿÿ ÿéòÐ&²mÿÿ ÿçöÒ&fÿÿ ÿéóÑ&#ÿÿ ÿéòÏ&rÿÿ ÿéöÈ& Ö#ÿÿ ÿéóÏ&ÿÿ ÿéôÈ&²*¡ÿÿ ÿéõÉ&²"ÿÿ ÿéóÏ&#6ÿÿ ÿéîÏ&#&/Ï=ûÿÿ ÿéñÈ&²$^ÿÿ ÿéóÉ&²9ÿÿ ÿéôÏ&#=üÿÿ ÿéóÐ&$:#ÿÿ ÿèòÏ&ý0¤ÿÿ ÿèöÎ&#&=ýÿÿ ÿéóÏ&#=þÿÿ ÿéôÑ&#úÿÿ ÿéòÏ&#ÿÿ ÿéõÈ&#ÿÿÿéìÏ&ü&úùÿÿ ÿé÷Ð&$,#ÿÿ ÿéïÏ&#$’ÿÿ ÿéôÒ&=ÿÿÿ ÿéôÑ&$!ÿÿ ÿéóÒ& ÿÿ ÿéóÉ&#$-ÿÿ ÿéóÈ&çÿÿ ÿéðÑ&²"Qÿÿ ÿé÷Í&*¢ÿÿ ÿéóÌ&/2 ÿÿ ÿéóÕ& ÿÿ ÿéõÐ&* ÿÿ ÿéõÏ&/fÿÿ ÿéõÑ&#>ÿÿ ÿéóÉ&*£ÿÿ ÿèõÌ&þýÿÿ ÿçôÏ&-ÿÿ ÿéôÈ&ýØÿÿ ÿéòÐ&#-†ÿÿ ÿéõÏ&#/eÿÿ ÿéöÑ&#-›ÿÿ ÿéøÒ&#-œÿÿ ÿéòÊ&#*¤ÿÿ ÿèóÏ&#*¥ÿÿ ÿèòÐ&ý)Áÿÿ ÿéòÈ&#>ÿÿ ÿéõÏ&ý>ÿÿ ÿéôÑ&#êÿÿ ÿéóÎ&#-ÿÿ ÿéòÉ&ý*kÿÿ ÿéöË&ý/«ÿÿ ÿéôÎ&¤*¦ÿÿÿçöÎ&98ÿÿÿéëÏ&·;ÿÿÿéòÎ&<*×ÿÿÿéôÎ&ÙØÿÿ ÿéïÆ&*§*ÿÿ ÿìóÒ&/.ÿÿ ÿíòÑ&3˜ÿÿ ÿëôÎ&›ÿÿ ÿêïÑ&—˜ÿÿ ÿçëÏ&Èÿÿ ÿéæÑ&¢˜ÿÿ ÿèóÑ&q˜ÿÿ ÿêëÑ&ú˜ÿÿ ÿéøÏ&àÿÿ ÿéíÏ&îÿÿ ÿéòÑ&˜Àÿÿ ÿèøÑ&˜Áÿÿ ÿèöÏ&Úÿÿ ÿðòÎ&œ>ÿÿ ÿèóÏ&èÿÿ ÿéìÎ&Yÿÿ ÿêõÑ&&˜ÿÿ ÿèôÐ&Lÿÿ ÿñêÏ&*uÿÿ ÿèíÐ&Åÿÿ ÿéôÎ&bÿÿ ÿéöÏ&„ÿÿ ÿéðÎ&´ÿÿ ÿêðÎ&ÿÿ ÿéóÎ&žÿÿ ÿñòÏ&ÿÿ ÿêñÏ&$ÿÿ ÿèöÏ&Hÿÿ ÿîõÐ&¡ÿÿ ÿêóÏ&ÿÿ ÿèöÏ&Ÿÿÿ ÿîôÏ&Ÿÿÿ ÿñòÏ& ÿÿ ÿéôÎ&*¨ÿÿ ÿèôÏ&üÿÿ ÿéöÏ&ÿÿ ÿêöÐ& ÿÿ ÿéòÏ&0­ÿÿ ÿëõÎ&ÿÿ ÿéóÐ&…ÿÿ ÿèôÏ&â!ÿÿ ÿéóÎ&ÿÿ ÿéôÏ&”ÿÿ ÿéëÏ&%’ÿÿ ÿéòÎ&¨&yÿÿ ÿéöÎ&¨Äÿÿ ÿéïÏ&žÿÿ ÿëöÎ&6¨ÿÿ ÿéóÏ&£ÿÿ ÿëõÐ&¬ÿÿ ÿéïÐ&Öÿÿ ÿéèÐ&¨&/6ÿÿ ÿèöÑ&­ÿÿ ÿéóÐ&Ãÿÿ ÿèõÏ&!Fÿÿ ÿèõÏ&¹ÿÿ ÿëóÎ&¨1ÿÿ ÿêôÏ&¿ÿÿ ÿèõÏ&Íÿÿ ÿèôÏ&%ÿÿ ÿìõÏ&âÿÿ ÿèôÏ&âmÿÿ ÿêîÏ&*Úÿÿ ÿéòÎ&™ÿÿ ÿéíÎ&ôÿÿ ÿé÷Ï&â%úÿÿ ÿéôÏ&—ÿÿ ÿéöÏ&aÿÿ ÿêìÏ&(¾ÿÿ ÿçöÏ&9ÿÿ ÿîôÏ&6öÿÿ ÿçõÏ&"•ÿÿ ÿèïÐ&*‰¨ÿÿ ÿéóÎ&*©ÿÿ ÿçõÏ&¨Fÿÿ ÿéóÎ&.ÿÿ ÿçõÏ&¦ÿÿ ÿéòÐ&0ôÿÿ ÿéóÏ&¨ÿÿ ÿçòÐ&/‚ÿÿ ÿéôÏ&®¨ÿÿ ÿëòÎ&&¨ÿÿ ÿæïÐ&¸ÿÿ ÿèòÏ&¨*ªÿÿ ÿêëÏ&·ÿÿ ÿëèÎ&ï¨ÿÿ ÿèéÎ&/ÿÿ ÿèöÏ&+ÿÿ ÿëôÎ&žÿÿ ÿéóÏ&Oÿÿ ÿëðÏ&jÿÿ ÿëðÏ&.}ÿÿ ÿéîÎ&ÿÿ ÿëôÐ&¨Àÿÿ ÿéöÐ&!Jÿÿ ÿêõÏ&¤5ÿÿ ÿëóÏ&ˆ¨ÿÿ ÿñîÏ&!Hÿÿ ÿëîÎ&*«ÿÿ ÿéêÐ&Mÿÿ ÿëôÏ&œÿÿ ÿèðÑ&4ÿÿ ÿëðÎ&¨/­ÿÿ ÿéõÏ&â·ÿÿ ÿèòÏ&¹ÿÿ ÿéòÎ&&¶ÿÿ ÿéïÏ&â/¹ÿÿ ÿêòÎ&*¬ÿÿ ÿçóÐ&&ÿÿ ÿéõÏ&¨!Mÿÿ ÿèóÏ&âÿÿ ÿèõÏ&gÿÿ ÿéòÏ&¨Tÿÿ ÿêìÎ&ÿÿ ÿêöÏ&ÿÿ ÿïôÏ&!m¤ÿÿ ÿèôÎ&¨ÿÿ ÿééÎ&!p¨ÿÿ ÿëóÎ&íÿÿ ÿèõÎ&¨/Ðÿÿ ÿéíÎ&ˆÿÿ ÿêõÏ&¤¹ÿÿ ÿéñÎ&¨*­ÿÿ ÿîôÐ&ö>ÿÿ ÿèïÏ&â&¤ ÿÿ ÿèñÎ&8ÿÿ ÿéòÏ&¤¨ÿÿ ÿèïÏ&+^¨ÿÿ ÿèôÎ&&çÿÿ ÿéõÐ&‹¨ÿÿ ÿèóÐ&çÿÿ ÿéõÏ& âÿÿ ÿèôÏ&Ùÿÿ ÿéöÑ&éÿÿ ÿêõÎ&Lÿÿ ÿèëÏ&Sâÿÿ ÿéóÏ&*®ÿÿ ÿéìÎ&a¨ÿÿ ÿèñÎ&¨Dÿÿ ÿèôÏ&¨ÿÿ ÿëôÏ&¨ôÿÿ ÿéõÒ&¨™ÿÿ ÿéôÏ&¨&F/Õÿÿ ÿéôÏ&âSÿÿ ÿëóÎ&Tÿÿ ÿîôÉ&0Eöÿÿ ÿéóÏ&æâÿÿ ÿñöÑ&bÿÿ ÿêóÎ&=ÿÿ ÿè÷Ï&¨7ÿÿ ÿéöÏ&—¨ÿÿ ÿèóÏ&ÿÿ ÿêíÏ&¸ÿÿ ÿéöÑ&Òÿÿ ÿé÷Î&½¨ÿÿ ÿéóÏ&5ÿÿ ÿéôÐ&õ&/>ÿÿ ÿé÷Ï&â'ÿÿ ÿëòÏ&¨Yÿÿ ÿéòÏ&0×ÿÿ ÿéòÎ& ¨ÿÿÿëïÐ&Ü0Jÿÿ ÿéôÏ&¨…ÿÿ ÿé÷Ï&®¨ÿÿ ÿéìÎ&¨dÿÿ ÿéöÏ&óâÿÿ ÿèóÏ&¨0¿ÿÿ ÿéòÎ&@ÿÿ ÿéòÏ&€ÿÿ ÿëöÐ&ƒÿÿ ÿêóÏ&¨ÿÿ ÿéóÐ&¨ÿÿ ÿîôÐ&úöÿÿ ÿéñÎ&¨-ÿÿ ÿèôÏ&âcÿÿ ÿîôÏ&ö0cÿÿ ÿêõÏ&¨*¯ÿÿ ÿê÷Ð&¨-²ÿÿ ÿéêÐ&ÿÿ ÿéõÎ&¨-€ÿÿ ÿèõÐ&¨•ÿÿ ÿïôÏ&&Aâÿÿ ÿëóÎ&ÿÿ ÿéðÎ&*°ÿÿ ÿéõÐ&¨Šÿÿ ÿéøÑ&*±ÿÿ ÿéóÎ&>ÿÿ ÿéóÏ&&íÿÿ ÿîôÐ&ö>ÿÿ ÿçðÎ&*²ÿÿÿïóÐ& ;&()•ÿÿ ÿèöÏ&¤ÿÿ ÿé÷Î&ÆÿÿÿéõÐ&Ü!ÿÿ ÿéòÏ&»%>ÿÿ ÿêóÏ&"—ÿÿ ÿçõÏ&¨ÿÿ ÿè÷Ï& ßâÿÿ ÿéòÐ&¤/ÿÿ ÿèõÑ&¨eÿÿ ÿéôÏ&âÿÿÿéëÐ&Ü&à> ÿÿ ÿìóÏ&"¤ÿÿ ÿééÎ&¨ÿÿ ÿéôÎ&¨×ÿÿ ÿéóÎ&¨ýÿÿ ÿéõÎ&…¨ÿÿ ÿëòÎ&¨ÿÿ ÿéôÏ&â“ÿÿ ÿè÷Ï&â'ÿÿ ÿé÷Ñ&/CÿÿÿéïÐ&ßÜÿÿ ÿèòÎ&¨&èÿÿ ÿéòÏ&Jÿÿ ÿé÷Ï&c¨ÿÿ ÿëóÐ&/Ñÿÿ ÿêòÐ&Úÿÿ ÿéôÏ&bâÿÿ ÿçøÏ&¤?ÿÿ ÿêóÏ&Eâÿÿ ÿëóÎ&WÿÿÿéóÐ&HÜÿÿ ÿéóÐ&0Fâÿÿ ÿêõÏ&¨.ÿÿ ÿê÷Ï&¤.4ÿÿ ÿéðÏ&»âÿÿ ÿèõÎ&#ÿÿ ÿéöÐ&"IâÿÿÿïóÉ& ;&ì> ÿÿ ÿéíÏ&-iâÿÿ ÿèíÏ&â+Cÿÿ ÿèîÐ&¨“ÿÿ ÿéøÏ& $¨ÿÿ ÿéõÎ&¨1ÿÿ ÿèõÏ&¨Vÿÿ ÿéõÑ&â-gÿÿ ÿéóÏ&¨'ÿÿ ÿìõÐ&â*ÿÿ ÿéôÐ&¨'Úÿÿ ÿéíÏ&¤/–ÿÿ ÿéóÐ&¨/ùÿÿ ÿéóÎ&)¨ÿÿ ÿéíÎ&åÿÿ ÿïòÏ&¤#lÿÿ ÿéõÐ&‹¨ÿÿ ÿèóÏ&"%&*»ÿÿ ÿèóÐ&âÛÿÿ ÿéöÏ&¨/÷ÿÿ ÿëôÎ&+Tÿÿ ÿïóÐ&ì& ;> ÿÿ ÿïôÏ&)|âÿÿ ÿéòÐ&0.¨ÿÿ ÿéóÑ&â"ÿÿ ÿéöÐ&¨ Fÿÿ ÿéõÑ&Râÿÿ ÿêóÑ&¨+Aÿÿ ÿèóÏ&¨ïÿÿ ÿëôÑ&̨ÿÿ ÿéóÏ&*ÿÿ ÿçöÒ&f¨ÿÿ ÿéöÏ& ؤÿÿ ÿèöÎ&¨.ÿÿ ÿéòÑ&.‘ÿÿ ÿèðÏ&¨uÿÿ ÿéòÐ&V¨ÿÿ ÿéòÐ&'¨ÿÿ ÿéíÎ&³ÿÿ ÿçõÏ&¨­ÿÿ ÿéìÎ&¨ÿÿ ÿéôÏ& ¤ÿÿ ÿéëÏ&â¾ÿÿ ÿéìÎ&1 ¨ÿÿ ÿéóÏ&ÿÿ ÿé÷Î&"n¨ÿÿ ÿïòÏ&â <ÿÿ ÿëñÎ&¨+Mÿÿ ÿéöÏ&¨–ÿÿ ÿéòÏ&.Œâÿÿ ÿé÷Ï&.ލÿÿ ÿéóÐ&¨.ÿÿ ÿéòÐ&/x¨ÿÿ ÿéõÐ&¤.ÿÿ ÿéöÐ&¨ BÿÿÿïóÐ& ; 5ÿÿ ÿëôÏ&¨`ÿÿ ÿéíÏ&ûâÿÿ ÿéòÏ&!ÿÿ ÿéóÏ&!Ѩÿÿ ÿéóÏ&âóÿÿ ÿéöÏ&¤Õÿÿ ÿéñÎ&!Œ¨ÿÿÿïóÏ&]& ;> ÿÿ ÿèôÑ&¨$ƒÿÿ ÿèóÏ&â!‹ÿÿ ÿéóÐ&¨!Šÿÿ ÿéöÏ&â#Íÿÿ ÿèôÐ&¨!ˆÿÿ ÿéôÎ&&#ÿÿ ÿêòÎ&¨!‰ÿÿ ÿéñÎ&¨!(ÿÿ ÿëíÎ&¨!/ÿÿ ÿéñÑ&¨ÿÿÿéëÐ&à&Ü!‚ÿÿ ÿìôÐ&•&<=ÿÿ ÿçõÎ&¨!0ÿÿ ÿéôÏ&â&!1(ÿÿ ÿéõÏ&â ÿÿ ÿéóÏ& f¨ÿÿ ÿëõÑ&¨1ÿÿ ÿèóÎ&¨#Aÿÿ ÿéóÏ&¨> ÿÿ ÿèòÎ&¨!úÿÿ ÿéôÏ&»!"ÿÿ ÿêñÏ&â/ÿÿ ÿîôÏ&#c&#eöÿÿÿéöÐ&Ü.‹ÿÿÿèóÐ&@&ÜYÿÿ ÿéöÏ&¨ÿÿ ÿèôÏ&â"©ÿÿ ÿèõÎ&¯¨ÿÿ ÿéóÏ&0s»ÿÿ ÿì÷Ï&¤¥ÿÿ ÿîõÐ&¤/€ÿÿ ÿëòÏ&¨" ÿÿ ÿéóÏ&6âÿÿ ÿéñÏ&âÿÿ ÿéöÐ&¤!ÿÿ ÿëôÏ&¨!_ÿÿÿéõÐ&ÜAÿÿ ÿèóÎ&!—¨ÿÿÿçõÐ&ú&Üûÿÿ ÿëòÐ&¨2ÿÿ ÿêîÎ&¨$Xÿÿ ÿéñÑ&¨$”ÿÿ ÿèõÐ&¤ÿÿ ÿêóÐ&¨>ÿÿ ÿêöÏ&$fâÿÿ ÿìôÒ&ð&¶>ÿÿ ÿëóÐ&.Ѝÿÿ ÿéôÏ&¤üÿÿ ÿé÷Ð&â$ÿÿ ÿèòÐ&¤$ÿÿ ÿéîÐ&$}¨ÿÿ ÿèõÑ&â$*ÿÿ ÿéðÎ&¨$ÿÿÿêîÐ&$ïÜÿÿÿêõÐ&#r&GÜÿÿ ÿêöÏ&¨vÿÿ ÿéõÏ&¨#Eÿÿ ÿéóÏ&.ˆ¨ÿÿ ÿé÷Ï&-nâÿÿÿèóÐ&ÜDÿÿ ÿçõÏ&¨#ÿÿÿïóÏ& & ;ÿÿ ÿêöÏ&â$Oÿÿ ÿì÷Ò&=>ÿÿ ÿéïÐ&¨%ÿÿ ÿëòÏ&.‰ÿÿ ÿéóÐ&â/5ÿÿÿèôÐ&Ü&(>ÿÿ ÿèòÏ&â0¤ÿÿ ÿéòÐ&¨$Îÿÿ ÿéóÏ&â.‡ÿÿ ÿçóÐ&¨&rÿÿÿèñÑ&Ü0˜ÿÿ ÿëòÏ&¨$Jÿÿ ÿéòÏ&$¤ÿÿ ÿéõÏ&â$@ÿÿ ÿêõÐ&¨/ÿÿ ÿëõÑ&¤$Œÿÿ ÿéõÑ&¤—ÿÿ ÿéñÎ&¨"Ûÿÿ ÿêõÏ&¤&GÞÿÿ ÿèñÏ&â*ÿÿ ÿëóÎ&çÿÿÿéõÐ&Ü0Zÿÿ ÿéóÏ&â*ÿÿ ÿèôÎ&¨.ƒÿÿÿëõÐ&)ý0LÿÿÿëòÐ&ú&Ü>ÿÿ ÿìôÐ&¶&#\+ÿÿ ÿèõÏ&â£ÿÿ ÿéôÎ&èÿÿ ÿéóÏ&â.ÿÿ ÿêòÏ&¨/Pÿÿ ÿé÷Ï&âÿÿ ÿéîÑ&â¹ÿÿ ÿçõÑ&âxÿÿ ÿêïÏ&¤.„ÿÿ ÿéôÑ&â.‚ÿÿ ÿçôÒ&ê>ÿÿÿíõÐ&Ü.…ÿÿÿéóÐ&ÛÜÿÿ ÿéòÏ&â.†ÿÿ ÿéöÑ&¤0Gÿÿ ÿëóÏ&¨§ÿÿ ÿéóÎ&¨+Dÿÿ ÿçôÒ&£¤ÿÿ ÿéôÒ&âÿÿ ÿèöÑ&â,:ÿÿ ÿéóÎ&¨$-ÿÿÿèöÐ&ÜÒÿÿ ÿçõÏ&â0›ÿÿÿéïÐ&Ü-…ÿÿÿêöÐ&Ü*ÿÿ ÿìôÏ&¶&>ÿÿ ÿìôÐ&¶0ùÿÿ ÿçðÑ&¤pÿÿ ÿçöÑ&¤+àÿÿ ÿéóÏ&+á¨ÿÿ ÿéöÏ&¤0Ûÿÿ ÿêõÐ&* ¨ÿÿ ÿëõÐ&¨*¿ÿÿÿèõÐ&Ü&,<>ÿÿ ÿèõÏ&âþÿÿ ÿéôÏ&â*Ñÿÿ ÿéöÐ&¤>ÿÿÿéòÐ&Ü%áÿÿÿéóÐ&÷&Ü>ÿÿ ÿéñÐ&â)ºÿÿ ÿèõÏ&¨+ßÿÿ ÿèóÏ&#6ÿÿ ÿçòÏ&¨*¾ÿÿ ÿìôÐ&=&!ª!¤ÿÿ ÿêòÏ&âüÿÿÿèõÐ&Ü(jÿÿ ÿèõÏ&»&"%"$ÿÿÿçõÐ&ú&Ü"&ÿÿ ÿéóÐ&â(Ôÿÿ ÿêíÎ&ž¨ÿÿ ÿéöÏ&*Àâÿÿ ÿéóÒ&¨ÿÿ ÿéõÏ&¨*ÿÿ ÿéóÐ&»&lmÿÿ ÿèòÏ&â*ÃÿÿÿèõÐ&Ü&>ÿÿ ÿéóÎ&*Á¨ÿÿ ÿèôÏ&â,1ÿÿ ÿèôÐ&»ýÿÿ ÿíóÏ&´âÿÿ ÿîöÏ&âÿÿ ÿìõÏ&¤&#q!ÿÿ ÿéôÐ&âcÿÿ ÿêóÐ&¼»ÿÿ ÿéóÐ&ýÿÿ ÿèöÐ&¨,2ÿÿÿêöÐ&Ü&â!£ÿÿ ÿèðÏ&,3âÿÿ ÿéðÏ&â,4ÿÿ ÿêöÏ&¤,5ÿÿÿèôÑ&Ü.¡ÿÿ ÿéøÏ&¡¤ÿÿ ÿé÷Ñ&¨)¿ÿÿ ÿêðÏ&¤#7ÿÿ ÿéñÏ&¤0¸ÿÿ ÿéóÏ&»>ÿÿ ÿéõÎ&0 ¨ÿÿ ÿéöÏ&¤/Ýÿÿ ÿéôÎ&بÿÿ ÿêõÏ&¤&G>ÿÿ ÿéñÏ&¨*wÿÿ ÿéöÐ&â/ßÿÿ ÿèöÐ&¨)òÿÿÿêôÐ&Ü.÷ÿÿ ÿïóÐ& ;.ÿÿ ÿìöÑ&â)óÿÿÿèôÐ&Ü%òÿÿ ÿêòÏ&â>ÿÿÿéóÐ&Ü0Äÿÿ ÿêõÐ&¤,‰ÿÿÿéóÐ&Ü&/á>ÿÿ ÿéõÑ&â5ÿÿÿéöÐ&Ü'èÿÿ ÿëóÏ&/à¨ÿÿ ÿéõÏ&!Öÿÿ ÿìôÏ&¶>ÿÿ ÿçóÑ&¡âÿÿ ÿéñÐ&-¢¤ÿÿÿéñÐ&Ü0"ÿÿ ÿíóÐ&â*yÿÿ ÿìôÑ&¶>ÿÿÿêöÐ&Ü&â>ÿÿ ÿèòÏ&¤%\ÿÿÿéóÐ&Ü%^ÿÿÿèóÐ&Ü&%W%XÿÿÿèòÒ&Ü%~ÿÿÿéóÐ&Ü> ÿÿ ÿç÷Ò&¤±ÿÿÿèóÐ&Ü)õÿÿ ÿêöÐ&¤)öÿÿÿêòÐ&Ü-/ÿÿ ÿéöÏ&â%fÿÿÿéöÐ&Ü}ÿÿ ÿïóÏ&¤,6ÿÿ ÿéóÑ&¤Îÿÿ ÿéôÑ&)ù>!ÿÿÿéíÐ&Ü)úÿÿ ÿéõÏ&¤>"ÿÿÿê÷Ð&Ü*‘ÿÿ ÿéöÏ&â*‡ÿÿÿèòÑ&Ü7ÿÿ ÿéòÑ&¤-ÿÿÿéóÐ&Ü>#ÿÿ ÿéðÏ&¨>$ÿÿ ÿéóÏ&¨(ÎÿÿÿéöÐ&Ü>%ÿÿÿéóÐ&Ü)ûÿÿÿíóÐ&Ü>&ÿÿÿéóÐ&Ü.@ÿÿ ÿçõÐ&â(pÿÿ ÿìôÒ&¶,xÿÿ ÿêôÏ&¹&)ü>'ÿÿÿèöÏ&0H&0)ýÿÿ ÿéóÏ&»ÅÿÿÿæðÑ&)ý)oÿÿÿéóÐ&Ü/éÿÿ ÿíòÏ&&3ÿÿ ÿïôÏ&w›ÿÿ ÿéóÏ&wjÿÿ ÿèóÏ&qwÿÿ ÿéæÏ&¢&ÿÿ ÿêëÏ&wúÿÿ ÿêïÏ&w—ÿÿ ÿïòÏ& &ÿÿ ÿéóÏ&Q ÿÿ ÿèíÐ&Å&ÿÿ ÿêõÏ&wõÿÿ ÿéöÏ&„&ÿÿ ÿéìÏ&Y&ÿÿ ÿèðÒ&Q¡ÿÿ ÿèôÏ&ü&ÿÿ ÿèöÏ&Ÿ&ÿÿ ÿéòÏ&™&ÿÿ ÿéôÏ&Q›ÿÿ ÿéôÏ&—&ÿÿ ÿïôÏ&ž&ÿÿ ÿìõÏ&Qÿÿ ÿèôÏ&O(/ÿÿ ÿéîÏ&Qœÿÿ ÿéîÏ&Q°ÿÿ ÿéïÏ&Q&ÿÿ ÿéëÏ&Ošÿÿ ÿêòÏ&O¾ÿÿ ÿèöÑ&­Qÿÿ ÿéêÏ&¡&ÿÿ ÿéõÑ&¶&ÿÿ ÿêïÏ&w*Øÿÿ ÿêìÏ&O)þÿÿ ÿéíÐ&QÕÿÿ ÿéöÏ&a&ÿÿ ÿéóÐ&…&ÿÿ ÿé÷Ï&%ú&ÿÿ ÿéôÏ&”&ÿÿ ÿîóÏ&Q1ÿÿ ÿëõÏ&&ÿÿ ÿïòÏ&Q&ÿÿ ÿèõÏ&P»ÿÿ ÿïôÏ&O!mÿÿ ÿéöÏ&Qÿÿ ÿéóÏ&Qÿÿ ÿèôÏ&Q)wÿÿ ÿéóÏ&Q.ÿÿ ÿïòÏ&Q,7ÿÿ ÿèòÏ&O&ÿÿ ÿèôÐ&OÐÿÿ ÿçóÐ&&&ÿÿ ÿéóÏ&Qÿÿ ÿééÏ&Q!pÿÿ ÿïóÏ&î&ÿÿ ÿèìÏ&O&ÿÿ ÿëèÏ&Qïÿÿ ÿéëÏ&Q)ÿÿÿ ÿéòÏ&Q(-ÿÿ ÿéêÐ&M&ÿÿ ÿçõÏ&¦Qÿÿ ÿêòÏ&Q ÿÿ ÿêñÏ&Q*ˆÿÿ ÿéïÏ&O/¹ÿÿ ÿèïÐ&Q*‰ÿÿ ÿíðÏ&Q.}ÿÿ ÿïðÏ&j&ÿÿ ÿë÷Ï&Pÿÿ ÿéòÏ&O'Êÿÿ ÿèóÏ&Oÿÿ ÿéðÏ&Q*Öÿÿ ÿêóÏ&Qÿÿ ÿëòÏ&QYÿÿ ÿéóÏ&ÁQÿÿ ÿéòÏ&Q€ÿÿ ÿçøÏ&P?ÿÿ ÿæöÏ&Qÿÿ ÿèñÏ&à&È&eÿÿ ÿæôÏ&Qÿÿ ÿéíÏ&Qêÿÿ ÿéìÏ&aOÿÿ ÿèìÏ&Á&ÿÿ ÿéîÏ&Q‹ÿÿ ÿéìÏ&Qdÿÿ ÿíóÐ&Q,8ÿÿ ÿèïÏ&à& >(ÿÿ ÿèôÏ&O›ÿÿ ÿéóÏ&Qæÿÿ ÿéõÏ&P0xÿÿ ÿéòÐ&QAÿÿ ÿéôÐ&QTÿÿ ÿïöÑ&Oaÿÿ ÿéóÏ&Q¥ÿÿ ÿéôÑ&Qàÿÿ ÿé÷Ï&PEÿÿ ÿéõÐ&Q‹ÿÿ ÿêíÏ&¸&ÿÿ ÿéóÑ&Q"ÿÿ ÿíöÐ&Qvÿÿ ÿèôÐ&POÿÿ ÿé÷Ï&O®ÿÿ ÿêóÐ&OÓÿÿ ÿéóÏ&O'ÿÿ ÿéíÏ&à&%7%8ÿÿ ÿèóÏ&Q0¾ÿÿ ÿêõÏ&Q~ÿÿ ÿëïÏ&à0Jÿÿ ÿéóÏ&PŽÿÿ ÿéïÐ&Q,9ÿÿ ÿêóÒ&P0ìÿÿ ÿéöÏ&Oÿÿ ÿéóÐ&PHÿÿ ÿëóÐ&à&Iúÿÿ ÿïõÏ&O*ÿÿ ÿéêÐ&cOÿÿ ÿçôÏ&RQÿÿ ÿïóÏ&Oëÿÿ ÿïòÏ&Q0Aÿÿ ÿéïÐ&ßàÿÿ ÿéîÏ&-BOÿÿ ÿêóÏ&Q&?ÿÿ ÿé÷Ï&Ocÿÿ ÿæôÏ&O-ÿÿ ÿïôÏ&O&Aÿÿ ÿéõÏ&Q…ÿÿ ÿéôÏ&Oÿÿ ÿéóÏ&Q*ÿÿ ÿèöÐ&Q&ÿÿ ÿèíÏ&P&Ó>)ÿÿ ÿèíÏ&P&Ó>*ÿÿ ÿéôÏ&Obÿÿ ÿèóÐ&ŒPÿÿ ÿèõÐ&QLÿÿ ÿéöÏ&P”ÿÿ ÿèòÏ&Q&èÿÿ ÿéóÏ&à&~*ÿÿ ÿéóÏ&O'ÿÿ ÿéóÏ&Q6ÿÿ ÿéñÏ&O'Üÿÿ ÿéóÏ&&ÿÿ ÿéõÏ&O'Ýÿÿ ÿéóÏ&P Gÿÿ ÿêòÏ&Oÿÿ ÿéõÏ&O1ÿÿ ÿëôÏ&O(mÿÿ ÿéíÏ&Oÿÿ ÿéìÏ&Q1 ÿÿ ÿéëÏ&Q>+ÿÿ ÿïòÏ&£àÿÿ ÿéõÐ&O‹ÿÿ ÿéïÐ&Qxÿÿ ÿçöÐ&à&#‚>,ÿÿ ÿìõÐ&O*ÿÿ ÿìõÏ&P&!>-ÿÿ ÿéõÐ&Q#¡ÿÿ ÿèóÏ&Qïÿÿ ÿëôÑ&QÌÿÿ ÿéóÏ&à0sÿÿ ÿéðÏ&P»ÿÿ ÿïòÏ&O <ÿÿ ÿéðÐ&O# ÿÿ ÿéôÏ&O#šÿÿ ÿéòÐ&Q<ÿÿ ÿéòÐ&à&0ßÿÿ ÿì÷Ï&O¥ÿÿ ÿêõÏ&Oÿÿ ÿèòÏ&Q!ûÿÿ ÿéõÏ&à"Ëÿÿ ÿîôÏ&!_Qÿÿ ÿèöÏ&à&#"#!ÿÿ ÿèòÏ&Q0¤ÿÿ ÿèõÏ&P Óÿÿ ÿéóÐ&O]ÿÿ ÿèôÑ&O$ƒÿÿ ÿèôÏ&O!˜ÿÿ ÿèôÐ&P#¸ÿÿ ÿéòÐ&#Oÿÿ ÿçìÏ&O!ÿÿ ÿéöÏ&PNÿÿ ÿçóÐ&Q&rÿÿ ÿéðÏ&O$ ÿÿ ÿèõÏ&/8Pÿÿ ÿéñÏ&P$Ïÿÿ ÿëõÑ&O/ÿÿ ÿéóÏ&O>.ÿÿ ÿéïÐ&O%ÿÿ ÿéòÐ&P%ÿÿ ÿéðÑ&Q$•ÿÿ ÿîòÏ&P$Iÿÿ ÿéõÑ&P—ÿÿ ÿêóÐ&O/Nÿÿ ÿéóÏ&P†ÿÿ ÿïóÏ&à¦ÿÿ ÿéóÏ&O*ÿÿ ÿéôÏ&P)Ëÿÿ ÿçôÒ&à£ÿÿ ÿèöÑ&P,:ÿÿ ÿéîÑ&P¹ÿÿ ÿéõÏ&à0Zÿÿ ÿëõÐ&0K0Lÿÿ ÿèôÏ&O*ÿÿ ÿèóÏ&Püÿÿ ÿéôÏ&P* ÿÿ ÿêóÐ&O* ÿÿ ÿéôÐ&P,;ÿÿ ÿèõÐ&à&>/ÿÿ ÿçíÑ&à”ÿÿ ÿéôÐ&Ocÿÿ ÿèðÑ&P&3>0ÿÿ ÿèõÏ&à&,<>1ÿÿ ÿîöÏ&Pÿÿ ÿéõÏ&P!×ÿÿ ÿéðÏ&P0·ÿÿ ÿéñÏ&P'ÿÿ ÿèôÑ&à.¡ÿÿ ÿìöÑ&O)óÿÿ ÿéôÏ&à0Mÿÿ ÿêòÐ&à-/ÿÿ ÿéòÑ&O-ÿÿ ÿêòÎ&(*ÿÿ ÿèöÏ&+ÿÿ ÿéïÇ&* * ÿÿ ÿéõÏ&*ÿÿÿéìÊ&f>4ÿÿÿéìÊ&f>5ÿÿÿéìÊ&f>6ÿÿÿéìÊ&feÿÿÿéíË&ü>7ÿÿÿéìÊ&f~ÿÿÿéìÊ&f>8ÿÿÿéíË&ü>9ÿÿÿèíÉ&>:ÿÿÿéíË&ü>;ÿÿÿèíÉ&><ÿÿÿéìÊ&f>=ÿÿÿèíÉ&>>ÿÿÿéìÊ&f>?ÿÿÿèíÉ&>@ÿÿÿéìÊ&f>AÿÿÿèíÉ&>BÿÿÿèíÉ&>CÿÿÿèíÉ&>DÿÿÿèíÉ&>EÿÿÿèíÉ&>FÿÿÿèíÉ&>GÿÿÿèíÉ&>HÿÿÿèíÉ&>IÿÿÿéíË&ü>JÿÿÿèíÉ&œÿÿÿèíÉ&ßÿÿÿèíÉ&>KÿÿÿèíÉ&êÿÿÿèíÉ&>LÿÿÿèíÉ&>ÿÿÿèíÉ&õÿÿÿèíÉ&>MÿÿÿèíÉ&ãÿÿÿèíÉ&>NÿÿÿèíÉ&>OÿÿÿèíÉ&%CÿÿÿèíÉ&ÓÿÿÿèíÉ&‹ÿÿÿèíÉ&ŠÿÿÿéëÈ&ÛdÿÿÿèíÉ&´ÿÿ ÿèíÎ&û&§>PÿÿÿèíÉ&>QÿÿÿéëÈ&d>RÿÿÿèíÉ&>SÿÿÿèíÉ&>TÿÿÿèíÉ&>UÿÿÿèíÉ&>VÿÿÿéëÈ&d>WÿÿÿéëÈ&d!{ÿÿÿèíÉ&"=ÿÿÿéëÈ&d>XÿÿÿèíÉ&>YÿÿÿèíÉ&>ZÿÿÿéëÈ&d"ýÿÿÿèíÉ& ŸÿÿÿèíÉ&>[ÿÿÿçíÉ&"€ÿÿÿèíÉ&>\ÿÿÿèíÉ&>]ÿÿÿéëÈ&d>^ÿÿÿéëÈ&d>_ÿÿÿèíÉ&$YÿÿÿèíÉ&>`ÿÿÿèíÉ&>aÿÿÿèíÉ&>bÿÿÿèíÉ&>cÿÿÿèíÉ&&ÒÿÿÿéëÈ&d>dÿÿÿèíÉ&>eÿÿÿèíÉ&$ÿÿÿéëÈ&d>fÿÿÿéëÈ&d>gÿÿÿéëÈ&deÿÿÿèíÉ&>hÿÿÿèíÉ&(|ÿÿÿéëÈ&d>iÿÿÿéëÈ&d>jÿÿÿéëÈ&d>kÿÿÿèæÒ&’>lÿÿÿèæÒ&’¤ÿÿÿèæÒ&’>mÿÿÿèæÒ&’ÿÿÿèæÒ&’>nÿÿÿèæÒ&F’ÿÿÿèæÒ&’>oÿÿÿèæÒ&’>pÿÿÿèæÒ&’>qÿÿÿèæÒ&’>rÿÿÿèæÒ&’>sÿÿÿèæÒ&’>tÿÿÿèæÒ&’>uÿÿÿèæÒ&’>vÿÿÿèæÒ&’>wÿÿÿèæÒ&’>xÿÿÿèæÒ&’öÿÿÿèæÒ&’>yÿÿÿèæÒ&’>zÿÿÿèæÒ&’>{ÿÿÿèæÒ&’>|ÿÿÿèæÒ&’>}ÿÿÿèæÒ&’>~ÿÿÿèæÒ&£’ÿÿÿèæÒ&’äÿÿÿèæÒ&’ïÿÿÿèæÒ&‰’ÿÿÿèæÒ&’>ÿÿÿèæÒ&‘’ÿÿÿèæÒ&’ÿÿÿèæÒ&µ’ÿÿÿèæÒ&’ dÿÿÿèæÒ&’>€ÿÿÿèæÒ&’>ÿÿÿèæÒ&’>‚ÿÿÿèæÒ&’>ƒÿÿÿèæÒ&’“ÿÿÿèæÒ&’>„ÿÿÿèæÒ&">’ÿÿÿèæÒ&’>…ÿÿÿèæÒ&’"ÿÿÿèæÒ&’>†ÿÿÿèæÒ&’>‡ÿÿÿèæÒ&’>ˆÿÿÿèæÒ&’>‰ÿÿÿèíÏ&ÝìÿÿÿçõÏ&Ý«ÿÿÿéöÆ&m/mÿÿÿéóÊ&m ÿÿÿéõÆ&m³ÿÿÿéõÐ&mmÿÿÿéóÎ&m²ÿÿÿèòÆ&m0$ÿÿÿèõÏ&Ý‘ÿÿÿéòÐ&m±ÿÿÿèõÏ&ÝËÿÿÿèöÇ&ÝÞÿÿÿèóÊ&ßÝÿÿÿéõÍ&m,ÿÿÿèóÏ&m=ÿÿÿèòÏ&Ý0«ÿÿÿèíÇ&ôÝÿÿÿèëÉ&Ý%’ÿÿÿèðÏ&·mÿÿÿèöÏ&Ý¡ÿÿÿèóÏ&Ý"WÿÿÿèóÏ&ÝîÿÿÿèõÇ&ÝÿÿÿèóÐ&ÝUÿÿÿèóÏ&ÝÿÿÿéóÆ&m¶ÿÿÿéóÏ&mÂÿÿÿèóÏ&mÿÿÿéôÆ&m%ËÿÿÿéóÐ&m&@}ÿÿÿèôÆ&m)€ÿÿÿèóÐ&Ý>ŠÿÿÿéóÏ&m'¦ÿÿÿéóÏ&m)ÿÿÿéõÆ&m%"ÿÿÿèíÏ&mÿÿÿéòÆ&>‹ÿÿÿéóÆ&mÿÿÿéóÐ&m}ÿÿÿéöÏ&–mÿÿÿèòÏ&Ý{ÿÿÿèõÉ&~ÝÿÿÿéòÆ&mÅÿÿÿéõÐ&móÿÿÿéôÐ&m7ÿÿÿæöÏ&m³ÿÿÿéòÆ&m©ÿÿÿéóÏ&mÿÿÿèôÏ&m ÙÿÿÿéõÏ&àmÿÿÿéóÍ&&ªÿÿÿéóÎ&mÀÿÿÿéóÏ&ÍmÿÿÿéõÏ&m’ÿÿÿéóÏ&m(:ÿÿÿèõÐ&ZãÿÿÿèîÑ&Ý ¶ÿÿÿéóÏ&m+ÿÿÿéõÆ&m.ÿÿÿéôÈ&m[ÿÿÿéõÏ&)zmÿÿÿéòÐ&m%ÐÿÿÿéóÐ& OmÿÿÿèõÇ&Z.3ÿÿÿéóÎ&m&ÇÿÿÿéøÏ&m ÿÿÿéóÐ&m>ŒÿÿÿéîÏ&¿ÿÿÿéòÏ&£ÿÿÿéõÏ&mÿÿÿéôÏ&m'¯ÿÿÿèôÏ&m'ØÿÿÿèìÏ&m'gÿÿÿéëÎ&m'hÿÿÿéñÍ&m)cÿÿÿéõÐ&m )ÿÿÿéóÏ&+mÿÿÿçõÉ&YÿÿÿèõÈ&m"AÿÿÿéôÏ&!^ÿÿÿéöÏ&mÿÿÿéóÊ&m"ÿÿÿéîÉ& rÿÿÿéôÐ&m>ÿÿÿè÷Ñ&0NÿÿÿèóÆ&m#;ÿÿÿéóÐ&m>ŽÿÿÿéøÐ&m©ÿÿÿéñÏ&m)‚ÿÿÿéõÑ&m"±ÿÿÿéñÏ&m#ÓÿÿÿèòÎ&Z&ú>ÿÿÿéøÏ&/²mÿÿÿéòÏ&mLÿÿÿèõÐ&'pÿÿÿéóÐ&m>ÿÿÿéðÆ&m$ ÿÿÿèõÈ&m$ÿÿÿéñÑ&m#ôÿÿÿéôÏ&*)ÿÿÿéóÐ&m>‘ÿÿÿéöÏ& ÿÿÿéôÑ&mnÿÿÿéîÏ&mÿÿÿèõÐ&Z&ÿÿÿéöÏ&.IÿÿÿéõÒ&¢ÿÿÿèôÎ&%(ÿÿÿéôÎ&%'ÿÿÿçôÏ&'|mÿÿÿéõÐ&&Þ>’ÿÿÿéõÐ&&Þ>“ÿÿÿèöÑ&'Âÿÿÿé÷Ñ&&Ãÿÿÿè÷É&ZüÿÿÿçøÒ&ÕÿÿÿèóÏ&Z%õÿÿÿèòÊ&)ƒÿÿÿéöÑ&0OÿÿÿéðÏ&m>”ÿÿ ÿêôÒ&³²ÿÿÿèöÐ&ZHÿÿ ÿé÷Ï&1Nÿÿ ÿé÷Ï&1>•ÿÿÿèðÒ& ÿÿ ÿéñÑ&„)„ÿÿ ÿéõÐ&‹ÿÿ ÿéóÐ& n)…ÿÿ ÿèðÇ&s&R>˜ÿÿ ÿèóÒ&)† nÿÿ ÿçóÐ&)Œ nÿÿ ÿéóÐ& nPÿÿ ÿéõÐ&‡‹ÿÿ ÿèôÐ&UØÿÿ ÿèïÏ&)>™ÿÿ ÿéñÏ&ˆ>šÿÿ ÿéõÐ&‹ŠÿÿÿéóÐ&)tÿÿÿééÒ&>›ÿÿ ÿéóÐ&7)ÿÿÿèòÐ&œ>œÿÿ ÿéõÐ&)Ž‹ÿÿ ÿéõÐ&‹-5ÿÿ ÿéóÐ&(&')ÿÿÿéóÐ&†ÿÿ ÿéóÐ&,= nÿÿ ÿéóÏ&˜)ÿÿ ÿéóÏ&9˜ÿÿÿéóÐ& m nÿÿ ÿéòÏ&¦&¨§ÿÿ ÿéõÏ&q!×ÿÿ ÿèðÐ&r& sÿÿÿéñÏ&k>ÿÿ ÿéóÑ&˜%¯ÿÿ ÿéóÐ&$»˜ÿÿ ÿéóÏ&˜>žÿÿ ÿèóÑ&),Qÿÿ ÿéóÏ&)‘&))“ÿÿ ÿéóÏ&˜Šÿÿ ÿéóÑ&,>˜ÿÿ ÿéóÏ&€˜ÿÿ ÿçõÒ&,?> ÿÿÿéðË&0P ¾ÿÿÿéïË& ¼>¡ÿÿÿéïË& ¼ Áÿÿ ÿèôË& ½ÿÿ ÿçõË& ¾>¢ÿÿÿéòË&$¢ ¾ÿÿ ÿèïË&(&' ¾ÿÿ ÿéóË& ¾>£ÿÿÿæñÌ& À>¤ÿÿÿèïË&+# ¼ÿÿ ÿéóË& ¾>¥ÿÿ ÿêóË& ¾>¦ÿÿ ÿéïÌ& À>§ÿÿ ÿéóË& ¾)ÿÿÿçóÌ& À>¨ÿÿÿéôË& ¾*ÿÿÿèïË& ½QÿÿÿèïÌ& À+ÿÿÿçôË&-&, ¾ÿÿÿéïÌ&R Àÿÿ ÿéóÌ& À>©ÿÿ ÿéõÌ& À>ªÿÿ ÿéóÌ& À>«ÿÿÿçïË& ¾&->¬ÿÿÿéòÌ& À‹ÿÿÿïïË& ¾>­ÿÿÿæðÌ& ¿.ÿÿ ÿèïÌ& À>®ÿÿ ÿéóÎ&>¯ÿÿ ÿèòÎ& Nÿÿ ÿéóÌ& À>°ÿÿÿçóÌ& À&->±ÿÿÿè÷Ð&,@;ÿÿÿèòÌ& À eÿÿ ÿêöË& ¾>²ÿÿ ÿéðÎ&&>³ÿÿ ÿêóÎ&!âÿÿ ÿéïË& ¾>´ÿÿÿêïË& ¾>µÿÿÿéòÌ& À ”ÿÿ ÿèôÎ&&ÿÿÿéöÌ& À>¶ÿÿ ÿèóÎ&ý&üÿÿÿéïÌ& ¿>·ÿÿÿéðÎ&>¸ÿÿÿéóÎ&>¹ÿÿ ÿêòÎ&>ºÿÿÿêõÎ&>»ÿÿ ÿéòÎ&>¼ÿÿ ÿèðÎ&>½ÿÿ ÿéòÎ&>¾ÿÿÿéðÎ&>¿ÿÿ ÿçóÌ& ¿>ÀÿÿÿéïÌ& ¿>ÁÿÿÿéóÌ&°& ¿>Âÿÿ ÿîòÎ&>Ãÿÿ ÿéóÎ&>Äÿÿ ÿéòÎ&>ÅÿÿÿéöÌ& ¿>Æÿÿ ÿèøÎ&>Çÿÿ ÿéðÎ&&ÿÿ ÿéðÎ&({ÿÿÿéóÎ&>Èÿÿ ÿîòÌ& ¿>Éÿÿ ÿçõÌ& ¿%zÿÿÿèòÎ&>Êÿÿ ÿéóÎ&>Ëÿÿ ÿêðÌ& ¿>Ìÿÿ ÿéðÎ&>ÍÿÿÿéïÌ& ¿>ÎÿÿÿèöÐ&&)”>ÏÿÿÿëöÌ& ¿>Ðÿÿ ÿíòÎ&>ÑÿÿÿèòÐ&0Q)”ÿÿ ÿéðÎ&&>Òÿÿ ÿéïÌ& ¿>Óÿÿ ÿéïÌ& ¿>Ôÿÿ ÿèôÐ&,„ÿÿ ÿéóÏ&'+íÿÿ ÿéóÏ&Š'°ÿÿ ÿéôÐ&w„ÿÿ ÿéóÑ&„%ÿÿ ÿéðÐ&„Iÿÿ ÿéôÑ&…„ÿÿ ÿéôÑ&„¦ÿÿ ÿéòÐ&0R>Øÿÿ ÿéóÐ&Ç>Ùÿÿ ÿêóÑ&õ"Mÿÿ ÿèîÇ&E&sDÿÿ ÿêðÆ&H"Mÿÿ ÿèóÊ&A>Úÿÿ ÿèóÏ&qÿÿ ÿèöÏ&Ÿÿÿ ÿéóÏ&!,ÿÿ ÿéîÏ&ÿÿ ÿéìÏ&Yÿÿ ÿéõÏ&!*ÿÿ ÿéöÏ&ÿÿ ÿèöÑ&!Z­ÿÿ ÿéóÏ&}ÿÿ ÿéõÏ&&!E!Dÿÿ ÿéõÏ&ÿÿ ÿéèÐ&/& 6ÿÿ ÿèõÏ&!Fÿÿ ÿéîÏ& °ÿÿ ÿéõÏ&!Gÿÿ ÿéîÏ&!Hÿÿ ÿéóÏ&íÿÿ ÿèðÏ&Çÿÿ ÿéóÏ& Qÿÿ ÿéïÏ& & ó!Iÿÿ ÿéîÏ&ÿÿ ÿéôÏ& ®ÿÿ ÿéöÐ&!Jÿÿ ÿéóÏ& &!L!Kÿÿ ÿéõÏ&3ÿÿ ÿéõÏ& !Mÿÿ ÿéòÏ&!Nÿÿ ÿé÷Ñ&çÿÿ ÿéòÏ&0×ÿÿ ÿéôÏ& ôÿÿ ÿèóÏ& 0¿ÿÿ ÿéõÏ&Lÿÿ ÿèôÊ&0S!Oÿÿ ÿéóÏ&²ÿÿ ÿèöÏ& &!Pÿÿ ÿèõÏ&!Z)•ÿÿ ÿéöÏ&)–ÿÿ ÿéôÐ& í>Ûÿÿ ÿèìÑ&!Xÿÿ ÿéëÏ&!Wÿÿ ÿéóÐ&Yÿÿ ÿéöÏ& /÷ÿÿ ÿèîÐ& “ÿÿ ÿéóÏ&) ÿÿ ÿéðÏ&  ÿÿ ÿéõÐ& &!R!Qÿÿ ÿèõÏ&¯ ÿÿ ÿéöÏ&&ÿÿ ÿèóÐ& 2ÿÿ ÿèôÏ& !îÿÿ ÿéõÏ& "Íÿÿ ÿéñÏ& ÿÿ ÿèóÐ&0&1ÿÿ ÿéñÏ&!Z/ÿÿ ÿéóÏ&0s0zÿÿ ÿèôÏ& &Q"èÿÿ ÿéóÏ& óÿÿ ÿèôÏ& >Üÿÿ ÿèôÐ&!Z!Yÿÿ ÿéöÏ&!Z#Fÿÿ ÿéòÐ& $cÿÿ ÿèóÑ& >Ýÿÿ ÿèóÉ&  ÿÿ ÿéóÐ&0& >Þÿÿ ÿçõÏ& !Sÿÿ ÿçõÏ& !Uÿÿ ÿéõÏ&!Tÿÿ ÿéôÏ& .÷ÿÿ ÿéõÏ& !Öÿÿ ÿèôÏ& !Vÿÿ ÿèòÏ& >ßÿÿ ÿçõÐ& # ÿÿ ÿéõÏ&Ë ÿÿ ÿéôÐ&)5 ÿÿ ÿéîÐ&#ÿÿ ÿçòÐ&"ÿ#ÿÿ ÿéõÐ&#!Gÿÿ ÿèõÐ&öóÿÿ ÿé÷Ñ&ç#ÿÿ ÿéóÐ&¦#ÿÿ ÿèõÐ&##ÿÿ ÿéóÑ&##ÿÿ ÿéôÐ&&##ÿÿ ÿéòÐ&!2#ÿÿ ÿéöÐ&·#ÿÿ ÿçöÐ&!3tÿÿ ÿèóÐ&##ÿÿ ÿèôÐ&!Y#ÿÿ ÿéôÐ&Ç#ÿÿ ÿè÷Ñ&# #ÿÿ ÿéôÐ&##ÿÿ ÿéïÐ&##ÿÿ ÿçõÑ&# # ÿÿ ÿéîÎ&q 'ÿÿ ÿèíÏ&¥rÿÿ ÿçöÏ&stÿÿ ÿéôÏ&Æ1ÿÿ ÿèóÏ&Æ$ºÿÿ ÿóóÏ&Ñ!\ÿÿ ÿîóÐ&)—&ì>àÿÿ ÿîòÏ&!]>âÿÿÿéîÑ&!Ë!ÊÿÿÿèðÑ&!Ì!Êÿÿ ÿéôÑ&!ÍÿÿÿéôÑ&!Î!Ïÿÿ ÿéóÑ&!Í!ÑÿÿÿèõÑ&!Î!Ðÿÿ ÿéóÑ&!Ò>ãÿÿ ÿéóÐ&™!ÓÿÿÿéñÒ&!Ô!Óÿÿ ÿéõÑ&!Í!Öÿÿ ÿèõÈ&yxÿÿÿèõÈ&:xÿÿ ÿèõÎ&^ÿÿ ÿèõÈ&xÿÿ ÿèõÏ&]^ÿÿ ÿèöÈ& Åÿÿ ÿèõÉ&)˜xÿÿ ÿèõÈ&Àxÿÿ ÿéõÇ&ž!ÿÿ ÿèõÏ&^ Æÿÿ ÿèõÍ&^ Çÿÿ ÿéõÇ&! ÈÿÿÿéõÇ& É!ÿÿ ÿèõÇ&!—ÿÿ ÿéõÍ&!˜ÿÿ ÿéõÍ&"!ÿÿ ÿéõÏ&!¿ÿÿÿçóÐ& ã„ÿÿÿéõÏ&!cÿÿ ÿéóÇ&„ äÿÿ ÿèõÏ&!­ÿÿ ÿéõÐ&!ëÿÿ ÿéóÍ&o„ÿÿ ÿèóÏ&„0Áÿÿ ÿéòÏ&“´ÿÿ ÿéõÏ&,!ÿÿÿéõÇ&!Ÿÿÿ ÿéóÐ&„ ÿÿÿèõÐ&^¥ÿÿ ÿéóÇ&X„ÿÿ ÿéóÑ&„)™ÿÿ ÿéòÌ&´Gÿÿ ÿéóÏ&D„ÿÿ ÿéõÇ&!ÿÿ ÿèòÐ& ¡>äÿÿ ÿçóÏ& á„ÿÿ ÿçñÎ& ©0|ÿÿ ÿéõÌ&5&!>åÿÿ ÿéòÇ&R´ÿÿ ÿèóÑ& Ô&„>æÿÿÿéóÇ&„ Óÿÿ ÿéóÍ&/µ„ÿÿ ÿéóÐ&=„ÿÿ ÿéóÏ& °„ÿÿ ÿéóÍ&/³„ÿÿ ÿéòÑ&´ÏÿÿÿçóÏ&„- ÿÿÿéòÇ&´ ÐÿÿÿéòÏ& Ò´ÿÿ ÿéóÊ&|„ÿÿ ÿèóÌ&5& Ñ„ÿÿ ÿéõÏ&!ÿÿÿèóÐ&„yÿÿ ÿéòÇ&´"0ÿÿ ÿçöÊ&"tÿÿ ÿéòÏ&´„ÿÿ ÿéóÇ&„zÿÿ ÿéòÐ&!è ¡ÿÿ ÿéòÇ& ¡! ÿÿ ÿéòÏ& Ï!ÿÿÿéòÉ&´ |ÿÿ ÿèòÏ&´Žÿÿ ÿèòÏ&´…ÿÿ ÿéóÇ&„>çÿÿÿéòÏ&)¨ ¡ÿÿ ÿéòÇ&³´ÿÿÿéòË&´ÿÿ ÿéòÏ&´)©ÿÿ ÿçóÏ&„‚ÿÿ ÿéòÏ&$8´ÿÿ ÿéòÉ& ¡4ÿÿ ÿéòÎ& ¡>èÿÿ ÿéòÍ&´Šÿÿ ÿçòÈ&´zÿÿ ÿéòÏ&´)ªÿÿ ÿéöÑ&€ÿÿ ÿéòÎ&´‚ÿÿ ÿéòÉ&ƒ´ÿÿÿéòÐ&i´ÿÿÿéòÑ&´0âÿÿÿéòÏ& Ï]ÿÿ ÿéòÑ&´ Îÿÿ ÿéòÇ& Í´ÿÿÿèñÏ&0X>éÿÿ ÿèòÑ& Ë Ìÿÿ ÿéòÍ&x&ý&î´ÿÿ ÿéöË& Êÿÿ ÿéòÏ&´~ÿÿ ÿéóÇ&y“ÿÿÿéóÇ&:;ÿÿ ÿéöÇ&|ÿÿ ÿéóÇ&;ÿÿ ÿéóÏ&}–ÿÿ ÿèóÉ&;)˜ÿÿ ÿéóÇ&À“ÿÿ ÿèöÇ&|—ÿÿ ÿéóÇ&}0&ÿÿ ÿéóÍ&{"ÿÿ ÿéóÍ& Ç{ÿÿ ÿéóÍ&{˜ÿÿ ÿéóÇ&{žÿÿ ÿéóÇ& È{ÿÿÿéöÇ&}|ÿÿÿèóÏ&{*{ÿÿÿéöÏ&a|ÿÿÿçóÐ&{ ãÿÿ ÿéóÇ&{’ÿÿ ÿéóÏ&,{ÿÿ ÿéóÏ&D{ÿÿ ÿéóÐ&{)«ÿÿ ÿéóÌ&5&<}ÿÿ ÿéóÐ&{ ÿÿÿéóÇ&{Ÿÿÿ ÿéóÐ&{=ÿÿ ÿéóÍ&}/³ÿÿ ÿéóÒ&}ÿÿ ÿéóÏ&{zÿÿ ÿéóÊ&}|ÿÿ ÿçöÊ&u~ÿÿ ÿéóÇ&z}ÿÿ ÿèóÏ&}ÿÿ ÿèóÏ&…ÿÿ ÿéóÏ&„ÿÿ ÿçóÇ&ƒÿÿÿéóÏ&€ÿÿ ÿçóÏ&}‚ÿÿÿéóË&ÿÿ ÿéóÉ&ƒÿÿ ÿéóÑ&€ÿÿ ÿèóÈ&}ÿÿÿèñÑ&{0Xÿÿ ÿéóÏ&~ÿÿ ÿéóË&á#áÿÿ ÿçúË&hgÿÿ ÿéóÉ&á>êÿÿ ÿéóÎ&á>ëÿÿ ÿéöÐ&~}ÿÿ ÿéøÏ&|#éÿÿ ÿéõÐ&âáÿÿ ÿéóÌ&°>ìÿÿ ÿéóÉ&{áÿÿ ÿéôÉ&áÿÿ ÿéöÈ&"1°ÿÿ ÿéóÉ&°>íÿÿ ÿéøÏ&#ã#âÿÿ ÿéóÏ&á>îÿÿ ÿéøÏ&"Þãÿÿ ÿéóÈ&"ˆ°ÿÿÿéøÉ&éãÿÿ ÿéõÏ&}>ïÿÿ ÿéøÉ&#äãÿÿ ÿéóÉ&°>ðÿÿ ÿéôÈ&°>ñÿÿ ÿéøÉ&äãÿÿ ÿçøÐ&ã>òÿÿ ÿéõÎ&°>óÿÿ ÿéõÐ&°>ôÿÿ ÿéôÈ&°>õÿÿÿéøÏ&#â#åÿÿ ÿêôÎ&#æÿÿ ÿçöÏ&#è#éÿÿ ÿêñÈ&ÿÿ ÿêñÏ&>öÿÿ ÿç÷É&)¬)­ÿÿ ÿç÷Ð&)­>÷ÿÿ ÿêõÍ&)®>øÿÿ ÿéøÎ& ÿÿ ÿèõÓ&Ç)°ÿÿÿéõÑ&>´ÿÿÿèóÑ&>qÿÿÿéóÑ&>"ßÿÿ ÿèõÓ&)³)±ÿÿÿèõÓ&)²)±ÿÿÿéõÑ&)´ ÅÿÿÿéñÑ& Å)µÿÿÿéòÑ&(* ÆÿÿÿéðÑ&ü&û ÅÿÿÿéõÑ&)¶ƒÿÿ ÿéóÑ&¯ÃÿÿÿéõÑ&ƒ>ÿÿÿéòÑ& Å0ôÿÿÿéôÑ& È"–ÿÿÿéïÑ& Ç/¹ÿÿ ÿçôÌ&0ÿÿÿéíÑ&ˆ ÅÿÿÿéõÑ&3 ÅÿÿÿèðÑ&4 ÅÿÿÿèöÑ& Å0kÿÿÿéóÑ& Å5ÿÿÿèõÑ& ÆQÿÿÿèóÑ&ç ÆÿÿÿéìÑ&a Çÿÿ ÿåõÏ& )·ÿÿÿèíÑ&b ÆÿÿÿèôÑ&&ç Åÿÿ ÿæõÊ&C&BAÿÿ ÿçôÐ&æÿÿÿéóÑ&"— ÆÿÿÿèóÑ& Å’ÿÿÿé÷Ñ&c ÇÿÿÿéòÑ& ÆÚÿÿÿèõÑ& ÈeÿÿÿéóÑ& ÆÿÿÿéõÑ& · ÅÿÿÿéõÑ&d ÆÿÿÿéóÑ& È0TÿÿÿéôÑ& Æ&ñÿÿÿéôÑ&/w ÈÿÿÿçöÒ&f ÆÿÿÿéöÒ&g ×ÿÿÿéòÑ& Ç,AÿÿÿéíÑ&å ÅÿÿÿèóÑ& Æíÿÿ ÿçôÏ&)¹ÿÿÿé÷Ñ&(x ÈÿÿÿéòÑ& ÈWÿÿÿçõÑ& È&©ªÿÿÿèòÑ& Ç"@ÿÿÿéòÑ& Å!2ÿÿÿèðÒ&)¸&g!ÿÿÿéòÑ& Èÿÿ ÿåõÑ&)·>úÿÿÿéöÑ& È"õÿÿÿéòÒ&g&/>ûÿÿÿèõÒ&g&@>üÿÿÿèðÑ&0 ÆÿÿÿçõÑ& È!0ÿÿÿèóÑ& È#Aÿÿ ÿéóÑ&¯#1ÿÿÿéöÑ&$f$jÿÿÿéôÑ& È#úÿÿÿéïÑ&% ÈÿÿÿéóÑ&(g ÆÿÿÿéóÑ& È(sÿÿÿéôÑ& È1ÿÿÿèõÑ& È(tÿÿÿéóÑ& Æ$ØÿÿÿéóÑ& Ç#`ÿÿÿéôÑ&$Ù ÈÿÿÿéòÑ& Æ%ÿÿÿåôÑ&(u ÆÿÿÿèôÑ& Ç(vÿÿÿéóÑ& ÆýÿÿÿéõÑ& È(wÿÿÿéðÑ& È5ÿÿÿçõÑ&$j!UÿÿÿèóÑ& Ç#6ÿÿÿéñÑ& Ç)ºÿÿ ÿçõÒ&)»&º>ýÿÿÿçõÏ&Ì>þÿÿÿéôÒ&g(rÿÿÿçõÒ&!ÔÌÿÿÿéòÒ& È!ÕÿÿÿèöÑ& È)òÿÿÿéñÑ&$j(ÿÿÿèòÑ& Ç(qÿÿÿéòÑ&$j-ÿÿÿçõÑ&$j(pÿÿ ÿêõÐ&«ªÿÿ ÿéíÐ&«%9ÿÿ ÿëõÐ&¬«ÿÿ ÿç÷Ð&­)¼ÿÿ ÿëñÐ&«®ÿÿ ÿéõÐ&«`ÿÿ ÿçóÐ&¯)¼ÿÿ ÿêòÐ&«¾ÿÿ ÿéõÑ&«¶ÿÿ ÿèõÐ&»)¼ÿÿ ÿèîÑ&¿)¼ÿÿ ÿëõÐ&«3ÿÿ ÿéêÐ&(o)¼ÿÿ ÿéòÐ&«0öÿÿ ÿéóÐ&Á)¼ÿÿ ÿèõÐ&¼)¼ÿÿ ÿèíÒ&½¾ÿÿ ÿéòÐ&«¤ÿÿ ÿéóÐ&æ)¼ÿÿ ÿêôÐ&)¼,Ëÿÿ ÿé÷Ð&c)¼ÿÿ ÿéöÐ&½(lÿÿ ÿèñÐ&“)¼ÿÿ ÿëôÐ&(m)¼ÿÿ ÿéìÐ&«(nÿÿ ÿéñÐ&½Xÿÿ ÿëôÐ&"j)¼ÿÿ ÿæòÐ&!ÿ)¼ÿÿ ÿèòÐ&½0¤ÿÿ ÿéóÐ&½pÿÿ ÿèõÐ&£)¼ÿÿ ÿéñÐ&½%ÿÿ ÿëôÑ&½$Úÿÿ ÿëóÐ&#_)¼ÿÿ ÿéôÐ&½%Þÿÿ ÿèõÐ&&(k?ÿÿ ÿèõÐ&½(jÿÿ ÿêôÐ&½)½ÿÿ ÿè÷Ð&(i?ÿÿ ÿèöÏ&Chÿÿ ÿçõÉ&Ã"•ÿÿ ÿéôË&Ã"–ÿÿ ÿéóÏ&"—Ãÿÿ ÿéôÐ&ÃÂÿÿ ÿéöÏ&Ã"˜ÿÿ ÿèóÐ&Ã!‘ÿÿ ÿéôÐ&Ã"™ÿÿ ÿéôÉ&Ã1ÿÿ ÿé÷Ð&™šÿÿ ÿèöÒ&"š&"›"œÿÿÿèõÇ&æœÿÿ ÿéìÈ&Ç"ÕÿÿÿéóÇ&!,æÿÿÿéðÐ&æ)äÿÿÿèöÏ&æHÿÿÿéóÌ&"߈ÿÿÿéõÎ&"àæÿÿÿèíÐ&ˆ"áÿÿÿèðÊ&"ã"âÿÿÿéëÇ&ˆ&ÙÿÿÿéóÇ&ˆ&ÚÿÿÿéõÏ&ÎæÿÿÿèôÍ&ˆ&ÜÿÿÿéíÊ&&Û"âÿÿÿçøÏ&ùˆÿÿ ÿéòÈ&q&ÝÿÿÿéõÏ&ˆBÿÿÿéôÏ&—éÿÿÿèøÈ&úˆÿÿÿéòÇ&&ÞæÿÿÿèõÏ&ˆ-ÿÿÿéóÌ&æ äÿÿÿéîÇ&ˆ&ßÿÿÿèðÇ&!̈ÿÿ ÿéôÔ&,]ÎÿÿÿéôÇ&æ&àÿÿÿéëÏ&æ·ÿÿÿéóÇ&ˆ ûÿÿÿéôÏ&æœÿÿÿéóÑ&&â&áÿÿÿéìÎ&éÿÿÿéõÇ&æ,CÿÿÿéîÇ&æ!HÿÿÿéíÐ&&ã'qÿÿÿèöÏ&dæÿÿÿèõÐ&æ&åÿÿÿéòÐ&æ0ôÿÿÿéóÐ&é&,D?ÿÿÿéôÏ&æ&äÿÿÿéôË&é"–ÿÿÿéðÏ&éiÿÿÿéîÇ&æ0óÿÿÿèóÐ&æçÿÿÿé÷Ì&SæÿÿÿéóÇ&æTÿÿÿéóÏ&ûéÿÿÿéìÈ&é&æÿÿÿéöÑ&ébÿÿÿèòÏ&èéÿÿÿèôÇ&&çæÿÿÿæôÎ&æ#.ÿÿÿéòÏ&¤éÿÿÿéíÉ&æwÿÿÿéõÐ&é‹ÿÿ ÿèëÏ&S*ÿÿÿéóÏ&é0UÿÿÿèòÇ&é&èÿÿÿéõÏ&æ ·ÿÿÿéôÇ&é&éÿÿÿçóÏ&é&êÿÿÿéóÐ&&ëæÿÿÿéñÈ&æ&ìÿÿÿéõÏ&déÿÿÿéëÉ&æ!WÿÿÿéóÐ&édÿÿÿèõÑ&éeÿÿÿéóÏ&é(ÿÿÿéóÏ&æ&íÿÿÿéôÏ&é+_ÿÿÿé÷Ç&é"nÿÿÿéõÐ&é‹ÿÿÿéìÇ&éŒÿÿÿéôÐ&æ&îÿÿÿéòÏ&æ,BÿÿÿéôÇ&æ&ñÿÿÿèîÏ&æ&ïÿÿÿéóÏ&é&ðÿÿÿéòÇ&é1ÿÿÿéóÐ&é)ÈÿÿÿèòÏ&æ+tÿÿÿéôÐ&ÂéÿÿÿéóÇ&é?ÿÿÿéóÏ&é *ÿÿÿéñÈ&éÿÿÿéòÇ&é(hÿÿ ÿéòÐ&Î&01ÿÿÿéðÐ&é"ÀÿÿÿéôÏ&é#ªÿÿÿéøÉ&éÿÿÿéôÑ&æ!Ïÿÿ ÿéôÏ&*0vÿÿÿéïÏ&é?ÿÿÿéóÉ&é"ÿÿ ÿéõÇ&* ÿÿÿéôË&é#ÏÿÿÿéõÍ&é"‚ÿÿÿéöÈ&é&ÿÿÿéîÇ&é"ƒÿÿÿéóÐ&kæÿÿÿéôÑ&æ#úÿÿÿéóÏ&é(gÿÿ ÿçõÑ&?ÿÿÿéòÏ&é$ÔÿÿÿéòÏ&(a?ÿÿÿéïÐ&é%ÿÿ ÿèóÏ&?ÿÿÿéóÐ&é(eÿÿÿéóÏ&æWÿÿÿéòÇ&$úéÿÿÿéôÇ&éÏÿÿÿéïÏ&é(fÿÿÿéôÇ&é!ÿÿ ÿéïÏ&)Ê*ÿÿÿéòÏ&%éÿÿ ÿéöÐ&0(aÿÿÿéîÇ&é(cÿÿÿéôÇ&èæÿÿÿéóÐ&é(bÿÿ ÿçöÐ&0V?ÿÿÿéñÐ&(a0WÿÿÿèõÐ&é!ÝÿÿÿéóÉ&é$-ÿÿÿé÷Ñ&é(dÿÿÿéóÇ&æçÿÿÿéòÈ&é(_ÿÿÿéíÇ&éžÿÿÿéôÏ&é(`ÿÿÿéôÏ&é#ÿÿÿèõÏ&)¾éÿÿÿèóÏ&é#6ÿÿÿéôÎ&éÿÿÿéõÇ&é? ÿÿ ÿèõÐ&& ? ÿÿÿéòÈ&æ'ÿÿÿéïÑ&é'#ÿÿÿéóÉ&é*£ÿÿÿéóÏ&é(Õÿÿ ÿêõÏ&*? ÿÿÿé÷Ñ&é)¿ÿÿÿéòÒ&é!Õÿÿ ÿéôÐ&ÍÎÿÿÿèòÉ&é)ÀÿÿÿçòÐ&)Âéÿÿ ÿéñÈ&)*ÿÿ ÿèòÐ&)Á*ÿÿ ÿéóÑ&*6ÿÿÿéôÑ&êéÿÿÿèòÏ&,éÿÿ ÿéðÇ&*? ÿÿ ÿéñÏ& &  ÿÿÿéðÏ&é? ÿÿÿéóÏ&é(Îÿÿ ÿêòÉ&**kÿÿ ÿéñÌ&)Ã?ÿÿ ÿèõÈ&œ?ÿÿ ÿèöÏ&?HÿÿÿèíÐ&Å@ÿÿÿêöÏ&@ÿÿÿêòÇ&@Iÿÿ ÿçøÏ&?ùÿÿÿéëÐ&)Ä@ÿÿ ÿêîÈ&?!HÿÿÿêôÏ&@&äÿÿÿêëÇ&)ÅAÿÿÿéóÏ&A&/ÕÿÿÿêìÎ&@ÿÿÿéêÐ&@,Eÿÿ ÿêôÏ&?œÿÿÿêðÏ&@iÿÿÿéóÐ&0ƒBÿÿÿééÐ&ÎCÿÿÿéòÇ&@*×ÿÿÿéòÐ&@0ôÿÿÿæôÏ&EÿÿÿééÉ&,³<ÿÿÿèöÑ&E)ÆÿÿÿéôÐ&ATÿÿÿéõÐ&@‹ÿÿÿéôÐ&@™ÿÿÿéóÎ&AåÿÿÿéòÇ&ATÿÿÿêóÏ&E'ÿÿÿêòÌ&A)ÇÿÿÿèõÑ&e@ÿÿÿèòÎ&@)ÉÿÿÿêóÐ&@)ÈÿÿÿéõÇ&A1ÿÿÿéõÐ&A‹ÿÿÿè÷Ð&E /ÿÿÿçíÐ&E:ÿÿÿêñÏ&#d?ÿÿÿêôÇ&@!ÿÿ ÿêôÐ&#c&#b#dÿÿÿêôÐ&#b&#^#dÿÿÿéïÐ&@%ÿÿ ÿêòÑ&?ÿÿÿéïÏ&E)ÊÿÿÿéóÉ&$-AÿÿÿéôÇ&A)ËÿÿÿêòÑ&E)ÌÿÿÿéóÇ&E?ÿÿÿéñÈ&)EÿÿÿèòÏ&E+ÿÿÿéòÑ&E-ÿÿ ÿéøÏ&ÿ3ÿÿ ÿéñÉ&#,4ÿÿ ÿéöÏ&a3ÿÿ ÿèõÉ&T3ÿÿ ÿçòÏ&ª3ÿÿ ÿéõÏ&†4ÿÿÿéóÍ&65ÿÿ ÿéóÎ&73ÿÿ ÿéïÏ&#-4ÿÿ ÿæôÎ&4#.ÿÿ ÿèöÐ&4#/ÿÿ ÿèóÌ&3ÿÿ ÿéôÐ&Ô3ÿÿ ÿéôÐ&…3ÿÿ ÿèõÉ&R3ÿÿ ÿèóÐ&ç4ÿÿ ÿéóÎ�3ÿÿ ÿéõÉ&31ÿÿ ÿéøÐ&98ÿÿÿèöÏ&&5?ÿÿ ÿéòÏ&3#ºÿÿ ÿéóÏ3ÿÿ ÿéñÐ&3#2ÿÿ ÿéòÏ&#3ÿÿ ÿéôÐ3ÿÿ ÿéôÐ&/O3ÿÿÿèòÐ5ÿÿ ÿçóÏ&3#5ÿÿ ÿèóÏ&8#6ÿÿ ÿéðÉ8ÿÿ ÿéóÏ&8?ÿÿÿçôÎ&5?ÿÿ ÿéòÐ&8#8ÿÿ ÿçñÑ 8ÿÿ ÿè÷Ð&#:8ÿÿÿèòÑ&%&¸¹ÿÿÿéôÑ&%)Íÿÿ ÿéöÎ& ?ÿÿ ÿìõÏ&?ÿÿ ÿéòÏ&$¢ÿÿ ÿêóÏ&ë?ÿÿ ÿêóÏ&[ÿÿ ÿçòÏ&?ÿÿ ÿéôÏ&@ÿÿ ÿéòÏ&?ÿÿ ÿîóÏ&?ÿÿ ÿèöÎ& 8ÿÿ ÿèóÏ&ë?ÿÿ ÿéóÏ&?ÿÿ ÿêõÏ&?ÿÿÿéòÐ&?ÿÿ ÿéòÐ&,´ÿÿÿçòÐ&Âÿÿ ÿéôÏ&? ÿÿ ÿéòÏ&¯ÿÿ ÿçóÏ&L&ë?!ÿÿ ÿéòÏ&ÿÿ ÿéóÏ&nÿÿÿèóÐ&?"ÿÿ ÿîóÏ&?#ÿÿÿéòÐ&RÿÿÿèòÐ&?$ÿÿÿèòÐ&?%ÿÿÿçòÐ&ÿÿÿêòÐ&?&ÿÿ ÿèöÏ&ìëÿÿ ÿèõÐ&(^ÿÿ ÿèóÐ&"`ÿÿÿéòÐ&#«ÿÿ ÿçòÐ&"ÿÿ ÿçòÏ&?'ÿÿ ÿêòÐ&?(ÿÿ ÿéôÏ&?)ÿÿÿéòÐ&$¾&a?*ÿÿÿéòÐ&?+ÿÿÿæòÐ&$¾?,ÿÿÿçòÐ&?-ÿÿÿçóÐ&$¾?.ÿÿ ÿçòÐ&$¾$¿ÿÿÿçóÐ&?/ÿÿÿèòÐ&$¼?0ÿÿÿèòÐ&$¾?1ÿÿ ÿåòÐ&?2ÿÿÿèòÐ&$À$¼ÿÿ ÿæôÐ&$¾?3ÿÿ ÿçôÐ&$¼?4ÿÿÿèòÐ&$¼?5ÿÿÿèóÐ&$¼?6ÿÿÿéõÐ&$¼?7ÿÿÿèîÏ&"#ÿÿÿèîÏ&$&ÿÿÿèîÏ&&%ÿÿÿèîÏ&&'ÿÿÿèîÏ&"?8ÿÿÿèîÏ&!?9ÿÿÿìèÏ&T?:ÿÿÿèíÐ&.Ü?<ÿÿÿéóË&™?=ÿÿÿè÷Ë&$ #ÐÿÿÿéóÑ&$$ÿÿÿéïÏ&š™ÿÿ ÿéôÏ&Ž?>ÿÿ ÿéõÏ&Š??ÿÿ ÿéõÏ&Š‹ÿÿ ÿéôÑ&Œÿÿ ÿéôÏ&ŽÿÿÿéôÑ&Œÿÿ ÿéôÏ&Ž?@ÿÿ ÿéóÐ&+?Aÿÿ ÿè÷Ç&F&Esÿÿ ÿéóÐ&+?Bÿÿ ÿéóÐ&)+ÿÿ ÿéôÐ&*+ÿÿ ÿéóÐ&+?Cÿÿ ÿéóÐ&+?Dÿÿ ÿéóÐ&+?Eÿÿ ÿéóÐ&+?Fÿÿ ÿèôÑ&.Ý#üÿÿ ÿéóÐ&+?Gÿÿ ÿéóÐ&+?Hÿÿ ÿè÷Ñ&$?Iÿÿ ÿéõÐ&+?Jÿÿ ÿéóÐ&+?Kÿÿ ÿèöÊ&A?Lÿÿ ÿèôÐ&#ý?Mÿÿ ÿéìÐ&íÇÿÿ ÿéòÐ&íÿÿ ÿéóÐ&Oýÿÿ ÿéðÐ&)ä)åÿÿ ÿéõÐ&!E&!DOÿÿ ÿèõÐ&¹íÿÿ ÿéöÐ&Qaÿÿ ÿéõÐ&¬Oÿÿ ÿéóÐ&QÃÿÿ ÿéóÑ&)Î@ÿÿ ÿèôÐ&í&Üÿÿ ÿéôÐ&í)Ïÿÿ ÿéíÐ&í)Ðÿÿ ÿéóÐ&…Qÿÿ ÿéôÐ&¿Qÿÿ ÿéïÐ&Ožÿÿ ÿçöÐ&*Ííÿÿ ÿéóÐ&O.ÿÿ ÿèéÐ&O/ÿÿ ÿéòÐ&O)Ñÿÿ ÿèòÐ&¹Oÿÿ ÿéòÐ&Q,Fÿÿ ÿéðÐ&Ojÿÿ ÿéîÐ&O/qÿÿ ÿéñÐ&Oþÿÿ ÿéôÐ&†"–ÿÿÿçôÌ&)Ò0ÿÿ ÿéïÐ&)Óíÿÿ ÿéìÐ&Oÿÿ ÿéòÐ&)‰)åÿÿ ÿéóÐ&í%Kÿÿ ÿéòÐ&O0ôÿÿ ÿéóÐ&ûOÿÿ ÿéóÐ&O&!E/âÿÿ ÿæïÐ&í¸ÿÿ ÿéïÐ&)å#-ÿÿ ÿéîÐ&O!:ÿÿ ÿéõÐ&)å+¦ÿÿ ÿéóÐ&fíÿÿ ÿéôÐ&Oîÿÿ ÿéïÐ&OEÿÿ ÿèòÐ&O0Àÿÿ ÿéõÑ&Q‘ÿÿ ÿé÷Ð&SOÿÿ ÿèôÐ&)ÔQÿÿÿçòÍ&±&²ÿÿ ÿéôÐ&…Oÿÿ ÿéìÐ&†&æÿÿ ÿéðÐ&Oÿÿ ÿéòÐ&€Oÿÿ ÿèõÐ&Qíÿÿ ÿéóÐ&í(Ìÿÿ ÿéòÐ&íNÿÿ ÿé÷Ñ&Oçÿÿ ÿéòÐ&Y†ÿÿ ÿèóÐ&†&.è/Õÿÿ ÿéóÐ&Qdÿÿ ÿéóÐ&Qƒÿÿ ÿéöÐ&O)–ÿÿ ÿèìÑ&!XOÿÿ ÿèõÑ&Oeÿÿ ÿéõÐ&dOÿÿ ÿéôÐ&†Òÿÿ ÿéóÐ&O(Íÿÿ ÿèõÐ&ROÿÿ ÿéòÐ&O!5ÿÿ ÿé÷Ð&O-³ÿÿ ÿéòÐ&OÚÿÿ ÿè÷Ð&Qÿÿ ÿçôÏ&¸?Nÿÿ ÿéóÐ&WQÿÿÿçñÑ&.Þ)Òÿÿ ÿèïÐ&†& ?Oÿÿ ÿéòÐ&O)æÿÿ ÿéìÐ&îOÿÿ ÿéøÐ&O)çÿÿ ÿéòÐ&Q)èÿÿ ÿèòÐ&O+tÿÿ ÿéóÐ&O)éÿÿ ÿéóÑ&O#ÿÿ ÿéôÐ&O ÿÿ ÿéìÐ&OŒÿÿ ÿéòÐ&O,Gÿÿ ÿéõÐ&OHÿÿ ÿéóÐ&&ðQÿÿ ÿéôÐ&†ÿÿ ÿçöÐ&Qÿÿ ÿéìÐ&†!ÿÿ ÿéôÐ&O&ñÿÿ ÿéóÐ&Q)êÿÿ ÿéóÐ&O?Qÿÿ ÿéïÐ&¶Oÿÿ ÿéòÐ&Qaÿÿ ÿèõÐ&VOÿÿ ÿê÷Ï&.4ÿÿ ÿçòÏ&,Hÿÿ ÿéöÑ&Q ÿÿ ÿèõÐ&†·ÿÿ ÿè÷Ð&†?Rÿÿ ÿé÷Ò&OPÿÿ ÿéóÐ&Q"ÿÿ ÿèöÐ&†&/Ô/Õÿÿ ÿéîÐ&†/ºÿÿ ÿèõÐ&O"«ÿÿ ÿè÷Ñ&†.ßÿÿ ÿéðÐ&O }ÿÿ ÿéöÐ&†"\ÿÿ ÿéöÐ&Q#Gÿÿ ÿéöÐ&·Qÿÿ ÿéòÐ&Oÿÿ ÿéöÐ&QÛÿÿ ÿéñÐ&†#Åÿÿ ÿéóÐ&†&Žÿÿ ÿè÷Ï&%ý&"2ÿÿ ÿéôÏ&0uÿÿ ÿéòÐ&O!ÿÿ ÿèóÐ&† Ïÿÿ ÿéòÐ&Q".ÿÿ ÿé÷Ð&†!ÿÿ ÿéõÏ& ÿÿ ÿèíÏ&&Æ!ÿÿ ÿéôÐ&Q1ÿÿ ÿéôÐ&Q"™ÿÿ ÿéñÐ&O#2ÿÿ ÿéóÐ&Q(àÿÿ ÿéõÐ&-´&ù?Sÿÿ ÿéóÎ&ù&?Tÿÿ ÿéóÐ&+óOÿÿ ÿéîÐ&†$Wÿÿ ÿéóÐ&O(ßÿÿ ÿéóÐ&O$ÿÿ ÿéòÐ&$ò†ÿÿ ÿéòÐ&O$Bÿÿ ÿéòÐ&Q$Hÿÿ ÿèðÐ&†(Üÿÿ ÿéðÏ&ù&-µ?Uÿÿ ÿêòÏ&?VÿÿÿçòÐ&?Wÿÿ ÿéñÏ&úùÿÿ ÿçõÐ&õ&?Xÿÿ ÿéöÐ&†(Ýÿÿ ÿé÷Ð&$×&ù?Yÿÿ ÿéôÐ&†(Þÿÿ ÿèõÐ&!ÝOÿÿ ÿéóÐ&O$Øÿÿ ÿéîÐ&(×Qÿÿ ÿèóÐ&†3ÿÿ ÿéóÐ&$-†ÿÿ ÿèóÐ&O'ÿÿÿçóË&(Ø?Zÿÿ ÿêûÏ&H&?[ÿÿ ÿéóÐ&O(Ùÿÿ ÿéòÐ&(ÚQÿÿ ÿçóÑ&†(Ûÿÿ ÿéïÐ&¯OÿÿÿçôÑ&1 ÿÿ ÿéíÐ&ž†ÿÿ ÿéôÐ&(`Oÿÿ ÿéóÐ&†(Ôÿÿ ÿèõÏ&þÿÿ ÿéóÐ&†(Õÿÿ ÿèõÐ&)¾†ÿÿ ÿéóÒ&†ÿÿ ÿéóÐ&ýOÿÿ ÿéòÐ&†(Öÿÿ ÿèóÎ&ùüÿÿ ÿéôÐ&†ÿÿ ÿéòÐ&O(Óÿÿ ÿèóÐ&†#6ÿÿ ÿéõÐ&†(wÿÿ ÿéöÐ&†(ÒÿÿÿçòÑ&¿ÿÿ ÿéõÒ&Oïÿÿ ÿèòÐ&†(Ñÿÿ ÿéòÒ&!ÕQÿÿ ÿéøÐ&†(Ðÿÿ ÿéòÐ&O#8ÿÿ ÿéòÐ&O)ëÿÿ ÿé÷Ñ&†%{ÿÿ ÿçóÐ&)ì†ÿÿ ÿéòÏ&-¶ÿÿ ÿéõÐ&†(Ïÿÿ ÿéõÐ&ˆÿÿ ÿéóÑ&!&†?\ÿÿ ÿèóÐ&†?]ÿÿ ÿéóÐ&,K†ÿÿ ÿéóÑ&†6ÿÿ ÿéóÐ&†(Îÿÿ ÿéòÐ&†*kÿÿ ÿéõÏ&O:ÿÿ ÿéóÑ&@Bÿÿ ÿéóÐ&C…ÿÿ ÿçòÐ&C"ÿÿÿ ÿéñÏ&Cþÿÿ ÿéóÏ&COÿÿ ÿéòÏ&C(Ëÿÿ ÿéóÐ&D&F/âÿÿ ÿíóÐ&CûÿÿÿðôÑ&.Ï?^ÿÿ ÿéòÐ&C0ôÿÿ ÿïóÏ&C(Ìÿÿ ÿéòÏ&C0×ÿÿ ÿéòÏ&D€ÿÿ ÿêïÏ&DEÿÿ ÿèõÑ&DKÿÿ ÿèõÐ&CQÿÿ ÿéòÏ&NOÿÿ ÿíõÐ&LMÿÿ ÿêòÏ&CSÿÿ ÿèõÏ&CRÿÿ ÿéòÏ&JTÿÿ ÿêûÐ&I&HJÿÿ ÿðõÏ&DUÿÿ ÿñóÏ&CWÿÿ ÿéóÐ&J&/â?_ÿÿ ÿêóÏ&þJÿÿ ÿêóÏ&D(ÍÿÿÿðôÏ&ûúÿÿ ÿè÷Ð&Cÿÿ ÿéîÏ&û/·ÿÿ ÿéóÏ&D)éÿÿ ÿèõÏ&DVÿÿ ÿê÷Ï&ÿ.4ÿÿ ÿéôÐ&DÂÿÿ ÿëôÏ&D&ñÿÿ ÿéíÏ&D³ÿÿ ÿéìÏ&J1ÿÿ ÿçöÏ&Cÿÿ ÿìöÑ&D ÿÿ ÿêìÏ&DŒÿÿ ÿéòÐ&Caÿÿ ÿéôÏ&J!ÿÿ ÿéòÏ&C)èÿÿ ÿéòÏ&D!òÿÿ ÿèõÏ&D¯ÿÿ ÿìòÏ&D".ÿÿ ÿêòÏ&D!ÿÿ ÿè÷Ï&%ý&û"2ÿÿ ÿèóÐ&D Ïÿÿ ÿíòÏ&Dÿÿ ÿçíÐ&ÿ:ÿÿ ÿêôÏ&D!ÿÿ ÿíòÐ&œ0Wÿÿ ÿèôÏ&J&bcÿÿ ÿêîÏ&J$Xÿÿ ÿéóÏ&+óCÿÿ ÿéóÏ&D(ßÿÿ ÿéñÏ&ûúÿÿ ÿéóÏ&D$-ÿÿ ÿéïÏ&D¯ÿÿ ÿíôÑ&œ1 ÿÿ ÿéóÏ&D$Øÿÿ ÿíóÑ&œ,Nÿÿ ÿèòÑ&J!’ÿÿ ÿèóÏ&ûüÿÿ ÿéóÐ&Dýÿÿ ÿéôÏ&Jÿÿ ÿéóÒ&Dÿÿ ÿïòÐ&D#8ÿÿÿëòÑ&k(ÿÿ ÿçôÒ&ðñÿÿ ÿéòÐ&ÿÿÿÿéîÐ&ÿÿ ÿèòÊ&A?`ÿÿ ÿéòÒ&Ê-·ÿÿ ÿéòÏ&Äÿÿ ÿéòÏ&,ÿÿ ÿéóÐ&ÿÿ ÿéòÏ&)íÿÿ ÿé÷Æ&T?aÿÿÿéîÏ&*%ÿÿ ÿèòÐ&+öóÿÿÿèôÒ&hgÿÿ ÿèòÏ& Æÿÿ ÿèòÒ&)†ÿÿ ÿéòÏ&)îÿÿ ÿéòÏ&˜ÿÿ ÿéòÏ&+ôÿÿ ÿçòÏ&)Œÿÿ ÿéòÏ&nÿÿ ÿéòÏ&uÿÿ ÿéòÏ&+n+õÿÿÿéòÏ&+itÿÿ ÿéòÏ&+÷ÿÿ ÿéòÏ&r+iÿÿ ÿéòÏ&qÿÿ ÿèóÊ&A&RSÿÿ ÿéòÏ&‡ÿÿÿéòÏ&+i0©ÿÿ ÿçñÐ&'q+ýÿÿÿéòÏ&cÿÿ ÿéòÏ&+i+øÿÿÿëòÑ&klÿÿ ÿéòÏ&kÿÿÿèòÐ&+ùÿÿ ÿéòÏ&‹ÿÿ ÿçñÑ&,M+ýÿÿÿéòÏ&tÿÿ ÿéòÏ&+úÿÿÿéòÏ&nÿÿ ÿéòÏ&ïÿÿ ÿéôÏ&þ?bÿÿ ÿéòÏ&+ûÿÿ ÿèòÏ&+ÿ+nÿÿ ÿçôÐ&+ü+ýÿÿÿéòÏ&+jÿÿ ÿéòÏ&+kÿÿÿéòÏ&+i,ÿÿÿéóÐ&{ÿÿÿèòÑ&+þgÿÿÿéòÐ&§ÿÿ ÿéòÏ&ü+iÿÿÿèòÐ&óËÿÿ ÿéòÏ&nÿÿ ÿéòÏ&-»ÿÿ ÿèòÏ&+i0Áÿÿ ÿéòÏ&,ÿÿ ÿèïÏ& ?cÿÿÿéòÏ&ÿÿ ÿèòÐ&ó&.ô?dÿÿ ÿèñÐ&P?eÿÿ ÿèòÐ&Úÿÿ ÿéòÐ&‘ÿÿ ÿèñÏ&P?fÿÿ ÿéòÏ&¬ÿÿÿèòÐ&,&ó?gÿÿ ÿéòÑ&ÿÿ ÿéòÏ&2+iÿÿÿéòÐ&†ÿÿ ÿéôÏ&ö&,/ÿÿ ÿéòÏ&0žÿÿ ÿéòÐ& âÿÿ ÿèòÐ&ó?hÿÿ ÿê÷Ð&+p+nÿÿÿèòÐ&ó/ÿÿÿéòÏ&,OÿÿÿéòÏ&+i+lÿÿ ÿéòÏ&9ÿÿÿéòÏ&+mÿÿ ÿéòÐ&+o+nÿÿÿéòÏ&Uÿÿ ÿèòÑ&)Uóÿÿ ÿéòÏ&+i-ÿÿ ÿéòÏ&Æÿÿ ÿéòÏ&+i/´ÿÿ ÿéòÏ&+i§ÿÿ ÿèòÐ&ó+qÿÿ ÿèòÐ&òóÿÿÿæòÐ&,(zÿÿ ÿèóÑ&OPÿÿ ÿéòÏ&&@+iÿÿ ÿèòÐ&ó/|ÿÿ ÿèòÐ&+i’ÿÿ ÿéòÐ&+eÿÿ ÿèòÐ&+ÿÿ ÿéôÏ&þ?iÿÿ ÿèòÐ&+fóÿÿ ÿéòÏ& ^+iÿÿÿèôÏ&+gþÿÿ ÿéòÐ&+hÿÿ ÿèòÐ&ó9ÿÿÿéòÏ&'²+iÿÿÿéòÏ&+r+iÿÿÿèòÐ&,óÿÿ ÿèòÐ&ó ÿÿ ÿèòÐ&ó,Pÿÿ ÿèòÐ&,óÿÿ ÿèòÐ&ó*ÿÿ ÿèïÏ& ,Iÿÿ ÿèôÏ&+sþÿÿ ÿéóÐ&)+nÿÿ ÿèòÐ& Üóÿÿ ÿèòÏ&¸&¹+nÿÿ ÿèòÏ&+n+tÿÿÿéòÏ&b+iÿÿ ÿèòÐ&, óÿÿ ÿéòÐ&„+iÿÿ ÿèòÐ&, óÿÿ ÿéòÏ&, ÿÿ ÿéòÏ&ÿÿÿèòÐ&óâÿÿÿéòÑ&+i+ÿÿ ÿèòÐ&sóÿÿ ÿèòÐ&ó½ÿÿÿçòÐ&ó, ÿÿÿéòÏ&+i?jÿÿÿéôÏ&þ?kÿÿ ÿéóÏ& »& ¼ ½ÿÿ ÿèòÐ&#Lóÿÿ ÿèïÏ& ?lÿÿ ÿçöÏ&t?mÿÿÿéóÏ& ½?nÿÿÿèòÐ&!óÿÿ ÿèòÐ&ózÿÿÿèòÐ&ó#Ôÿÿ ÿèòÐ&ó?oÿÿÿèòÐ&ó"ÿÿ ÿèòÐ&-¸óÿÿ ÿèòÐ&ó?pÿÿÿèòÐ&ó#ÄÿÿÿèòÐ&$·óÿÿ ÿèòÐ&"ªóÿÿÿèòÐ&ó"Áÿÿ ÿèòÐ&ó! ÿÿ ÿèïÏ& ?qÿÿ ÿèòÐ&ó!ãÿÿ ÿèòÐ&"êóÿÿ ÿèòÏ&$µ&$¶Pÿÿ ÿéòÏ&"?+iÿÿÿéòÏ&"aÿÿ ÿèòÐ&"bóÿÿ ÿèòÑ&"'?rÿÿ ÿèñÐ&$£&$¤Pÿÿ ÿèòÐ&$´óÿÿ ÿèòÏ&.à&$æ?tÿÿ ÿèòÐ&$°óÿÿ ÿèòÑ&ó%¯ÿÿ ÿéñÑ&$"ÿÿÿèòÑ&ó$±ÿÿ ÿèôÏ&þ$²ÿÿÿèòÐ&ó$³ÿÿ ÿèòÐ&/Góÿÿ ÿéòÏ&3+iÿÿÿèòÑ&ó+uÿÿ ÿéóÏ&¥?uÿÿ ÿèïÑ& ?vÿÿ ÿèòÐ&ó$MÿÿÿèòÐ&ó+”ÿÿÿèòÐ&$ûóÿÿ ÿèòÑ&ó,Qÿÿ ÿèòÐ&$óÿÿÿèòÐ&,Róÿÿ ÿèöÏ&˜?wÿÿ ÿèõÏ&$æ$åÿÿÿèòÐ&$ óÿÿ ÿèòÐ&ó?xÿÿ ÿéòÏ&+v+nÿÿ ÿéòÐ&+i.áÿÿ ÿèòÐ&ó?yÿÿ ÿéòÏ&+i+wÿÿ ÿèòÐ&ó?zÿÿÿèòÐ&ó?{ÿÿ ÿèòÐ&ó)Zÿÿ ÿèòÐ&,Sóÿÿ ÿèñÓ&P?|ÿÿ ÿèñÍ& ,`ÿÿÿèòÐ&ópÿÿ ÿèòÐ& ?}ÿÿ ÿèöÐ& 0ÿÿ ÿçòÐ&ó+xÿÿÿèñÓ&+}ÿÿ ÿèòÐ&ó+|ÿÿ ÿèòÐ&ó+{ÿÿÿèòÐ&óoÿÿ ÿæñÑ&0\(zÿÿ ÿèòÐ&,Tóÿÿ ÿèóÊ&A&¬?~ÿÿ ÿèòÐ&ó+yÿÿ ÿéòÏ&+i%-ÿÿ ÿèñÓ& ?ÿÿÿéòÏ&+i+~ÿÿ ÿèòÐ&ó+zÿÿ ÿèôÔ&Ÿ ÿÿÿéñÑ&+ÿÿ ÿçòÐ&ó+€ÿÿ ÿèòÐ&ó*ÔÿÿÿéñÑ&+ÿÿ ÿéñÑ&+‚ÿÿ ÿèõÏ& ?€ÿÿ ÿèñÓ&B&A ÿÿÿéôÏ&þ&ý?ÿÿÿéôÏ&þ&ý?‚ÿÿ ÿèñÑ&ÿÿÿ ÿèòÐ&,Uóÿÿ ÿèòÐ&ó+ƒÿÿ ÿéñÑ&!Ùÿÿ ÿèòÓ&«¬ÿÿ ÿèõÒ&‡ ÿÿ ÿéóÐ&+†&÷?ƒÿÿ ÿèïÑ& ,VÿÿÿèòÐ&+‡óÿÿ ÿæòÑ&(z.ÿÿ ÿèòÐ&ó+„ÿÿ ÿåöÓ&,W?„ÿÿ ÿèóÏ& ½&.ô?…ÿÿ ÿèôÏ&,X$æÿÿÿæõÒ&+…?†ÿÿ ÿèòÐ&ó+ˆÿÿ ÿéôÏ&þ?‡ÿÿ ÿèòÐ&%±óÿÿ ÿèñÍ&"'?ˆÿÿ ÿèòÐ&ó+‰ÿÿÿéôÏ&þ+Òÿÿ ÿèòÐ&ó+ŠÿÿÿéñÑ&+‹ÿÿ ÿèôÑ&"'?‰ÿÿÿæ÷Ï&+…,Yÿÿ ÿéôÏ&þ%pÿÿ ÿèöÏ&%g$æÿÿ ÿéñÑ&+ŒÿÿÿçöÐ&++¨ÿÿÿèòÐ&ó+Žÿÿ ÿéñÑ&,Zÿÿ ÿèòÐ&ó~ÿÿÿéôÏ&þ+ÿÿ ÿæñÏ&,[(zÿÿ ÿéîÐ&ÿfÿÿ ÿèîÑ&ÿÿÿçóÒ&ÿÿÿèîÑ&*%ÿÿÿêïÏ&·ÿÿ ÿéíÏ&‡sÿÿ ÿéîÏ&qfÿÿ ÿéîÏ&frÿÿÿêîÏ&+ÿÿÿèñÑ&,\*ìÿÿÿèïÏ&*{ÿÿÿéîÏ&+jÿÿÿêïÏ&nÿÿÿéîÏ&ftÿÿ ÿèôÔ&,]+“ÿÿÿéòÏ&lmÿÿÿéìÑ&+’?‹ÿÿÿéõÏ&D?ŒÿÿÿêïÏ&Ëÿÿ ÿéîÏ&fnÿÿ ÿéðÏ& & í?ÿÿ ÿêïÐ&‘ÿÿÿèïÏ&+“õÿÿ ÿèïÏ&&.ô?ŽÿÿÿêïÏ&+mÿÿÿéðÏ& !ÿÿÿéïÏ&+lÿÿ ÿéïÏ&&@ÿÿ ÿéïÏ&ò/}ÿÿ ÿéïÏ&~ÿÿÿéíÏ&ÿÿ ÿéñÑ&*ì+qÿÿ ÿéïÏ&/|/}ÿÿÿêïÏ&+rÿÿ ÿéïÐ&,"ÿÿ ÿêïÏ&+fÿÿ ÿéïÐ&+hÿÿÿèíÏ&+gÿÿÿéïÑ&+ÿÿ ÿéðÏ& ?ÿÿ ÿêïÏ&zÿÿ ÿéïÏ&4ÿÿÿèíÐ&!ÿÿ ÿéíÏ&!ÿÿ ÿéòÐ&D&01ÿÿÿêïÏ&+”ÿÿÿêïÑ&+uÿÿ ÿèïÐ&$°ÿÿ ÿéíÏ&,^ÿÿ ÿéíÐ&,#ÿÿ ÿéíÏ&Šÿÿ ÿéíÐ&‰ÿÿ ÿéíÏ&*íÿÿÿéñÓ&C&ADÿÿ ÿéñÑ&*ì!Ùÿÿ ÿéôÒ&ˆDÿÿ ÿéðÑ&$?ÿÿ ÿéõÐ&!Ø!×ÿÿ ÿéíÏ&~ÿÿÿéõÐ&tuÿÿÿé÷Ð&vtÿÿ ÿéòÏ&##ÿÿ ÿéõÑ&#+•ÿÿ ÿîóÏ& ù?‘ÿÿ ÿéòÏ&##ÿÿ ÿçïÒ&=¼ÿÿ ÿêòÑ&‡?“ÿÿ ÿçóÒ&¼½ÿÿ ÿçñÒ&‰ˆÿÿ ÿçòÒ&Š?”ÿÿ ÿçðÒ&+–?•ÿÿ ÿçóÒ&+–?–ÿÿ ÿçõÊ&èéÿÿ ÿçõÏ&†Œÿÿ ÿçôÒ&‹Šÿÿ ÿçïÒ&ëêÿÿ ÿçòÒ&ê?—ÿÿ ÿåïÒ&ê?˜ÿÿ ÿçõÒ&Š?™ÿÿ ÿèôÑ&+—+˜ÿÿ ÿçõÎ&é?šÿÿ ÿçòÒ&ê?›ÿÿ ÿçïÒ&ê?œÿÿ ÿçõÌ&Œ?ÿÿ ÿçõÒ&ê?žÿÿ ÿçôÒ&ê?Ÿÿÿ ÿçóÒ&ê? ÿÿ ÿçóÒ&$êÿÿ ÿçôÒ&ê?¡ÿÿ ÿéôÐ&%‹ÿÿÿéôÓ&$é?¢ÿÿ ÿäóÒ&%|$êÿÿ ÿæöÔ&"U&"S"Tÿÿ ÿéóÏ&ÂÃÿÿ ÿèõÐ&ô&¿¾ÿÿ ÿèõÏ&ôÀÿÿ ÿèñÏ&Áôÿÿ ÿèóÑ&õôÿÿ ÿèòÏ&ô"Vÿÿ ÿèôÏ&ÛÜÿÿ ÿèïÏ&Ü ÿÿ ÿèóÏ&ÜÝÿÿ ÿèðÑ&Ü"Qÿÿ ÿéóÐ&"O"Pÿÿ ÿèõÐ&"NÀÿÿ ÿèïÏ&  ÿÿ ÿèóÏ& Ýÿÿ ÿèõÐ&Ç&FGÿÿ ÿéõÐ&Ç?£ÿÿ ÿéõÐ&Ç?¤ÿÿ ÿéõÑ&$?¥ÿÿ ÿéõÑ&$?¦ÿÿ ÿéõÑ&$?§ÿÿ ÿæòÑ&$?¨ÿÿ ÿéóÏ&+™+šÿÿÿèëÑ&+?«ÿÿ ÿçòÑ&,V?¬ÿÿ ÿéòÐ&+œ)‰ÿÿ ÿéðÑ&"Q+›ÿÿ ÿêóÏ&)ˆöÿÿ ÿèöÑ&ö)‡ÿÿ ÿéõÏ&o%1ÿÿ ÿéöÈ&o?®ÿÿ ÿèôÐ&]öÿÿ ÿèõÎ&t?¯ÿÿ ÿèñÏ&o)ŠÿÿÿæòÒ&-¼)‹ÿÿ ÿêïÏ&*oÿÿ ÿéñÐ&*& 2?°ÿÿ ÿéóÏ&Ooÿÿ ÿèïÏ&oÿÿ ÿéóÏ&foÿÿ ÿèõÑ& 0eÿÿ ÿêùÏ& 2 3ÿÿÿéòÐ&caÿÿÿéöÏ&+ cÿÿ ÿéòÏ&,J+žÿÿÿéòÏ&,_+žÿÿ ÿèöÏ&!Ûoÿÿÿé÷Ò&cPÿÿ ÿêòÈ& 1 0ÿÿÿèôÏ&!ïcÿÿ ÿêòÎ& 0!Üÿÿ ÿéóÑ&!Ú 0ÿÿ ÿèóÏ& 0+Ÿÿÿ ÿèõÐ& 2!ÝÿÿÿéòÍ&+¡,`ÿÿ ÿèõÐ&ù&?±ÿÿÿéóÐ&*’cÿÿÿéóÏ&cÿÿ ÿéôÏ&1*”ÿÿ ÿçòÐ&1*“ÿÿ ÿéóÐ&10ÿÿ ÿéõË& ó ôÿÿÿéõÏ&+ñ& ô?µÿÿÿéøÐ&+òýÿÿ ÿêôÈ&+¢+£ÿÿ ÿéøÐ&,LýÿÿÿéøÑ&ýüÿÿÿéöË&þ&ÿ?¶ÿÿ ÿéöÐ&.ÿÿÿëõË& ö õÿÿÿéøÌ&+¤?·ÿÿÿèíÈ&('ÿÿ ÿèðÌ&#$ÿÿ ÿèëÐ&%&ÿÿÿèôÑ&]Xÿÿ ÿêõÐ&ZYÿÿÿèôÐ&-¾Uÿÿ ÿèôÑ&]?¸ÿÿÿèôÑ&]0Xÿÿ ÿèóÒ&-½[ÿÿ ÿéôÒ&[?¹ÿÿ ÿèóÒ&"‰[ÿÿ ÿìóÒ&[\ÿÿÿéôÌ&÷*”ÿÿÿèôÐ&]÷ÿÿÿéõÍ&÷+¥ÿÿÿçòÐ&÷"ÿÿÿÿéõÏ&÷+¦ÿÿÿéìÐ&÷2ÿÿÿéóÎ&÷%LÿÿÿéîÌ&÷!:ÿÿÿéíÏ&÷øÿÿÿçóÐ&!9!8ÿÿÿèöÌ&÷!7ÿÿÿéòÌ&÷!5ÿÿÿéðÍ&nðÿÿÿéóÏ&÷!6ÿÿÿéôÌ&÷!!ÿÿÿéôÍ&n!4ÿÿÿéñÍ&n#ÃÿÿÿéóÏ&lnÿÿÿçõÐ&"l$çÿÿÿçôÐ&*³nÿÿÿçôÐ&"l*´ÿÿÿéôÌ&÷$üÿÿ ÿéøÐ&,àÿÿ ÿéòÐ&43ÿÿ ÿéõÐ&,+ÿÿ ÿéìÐ&,2ÿÿ ÿé÷Ð&,1ÿÿ ÿèðÐ&,0ÿÿ ÿéõÐ&,"kÿÿ ÿéôÐ&,/ÿÿ ÿèôÐ&+.ÿÿ ÿçôÐ&-,ÿÿ ÿéôÐ&+*ÿÿ ÿéòÒ&º?ºÿÿ ÿéòÒ&º?»ÿÿ ÿëóÒ&Œ&º?¼ÿÿ ÿçôÒ&º?½ÿÿ ÿæóÒ&º?¾ÿÿ ÿèöÐ&?¿ÿÿ ÿèöÐ&Á?ÀÿÿÿéñÏ&úùÿÿÿéõÐ&NùÿÿÿéñÏ&N'•ÿÿÿéóÏ&'—NÿÿÿèõÏ&«Nÿÿ ÿéóÑ&õOÿÿ ÿéóÏ&'–Oÿÿ ÿéùÏ&POÿÿ ÿéòÐ&0õOÿÿÿéòÏ&&·NÿÿÿéîÏ&N'˜ÿÿ ÿèðÏ&!ÌOÿÿÿçõÏ&eNÿÿ ÿçõÐ&feÿÿÿéìÐ&2Nÿÿ ÿëõÒ&õôÿÿÿç÷Ð&)NÿÿÿéõÏ&Nÿÿ ÿçóÏ& !ÿÿ ÿéòÏ&'™Oÿÿ ÿéðÏ&åOÿÿ ÿéòÏ&O!5ÿÿ ÿéóÐ&O'šÿÿ ÿçöÏ& aÿÿ ÿéõÏ&*Oÿÿ ÿèôÏ&ÿÿÿ ÿéðÏ&-¿Oÿÿ ÿèõÏ&!éOÿÿ ÿéïÏ& ~Oÿÿ ÿéóÏ&O"Ôÿÿ ÿéôÏ&O#Üÿÿ ÿéôÏ&$NOÿÿ ÿéòÓ&##ÿÿ ÿéðÏ&+§ÿÿ ÿèóÏ&+Ÿÿÿ ÿêóÏ&*?Áÿÿ ÿéóÐ&*?Âÿÿ ÿéñÏ&+Ýúÿÿ ÿéîÎ&R*ÿÿ ÿèöÐ&dgÿÿ ÿéóÐ&ûRÿÿ ÿèðÎ&!ÌRÿÿ ÿéùÎ&PRÿÿ ÿèôÎ&QRÿÿ ÿéòÎ&R!5ÿÿ ÿéòÎ&R'™ÿÿ ÿéðÎ&R-¿ÿÿ ÿéòÐ&g#Ýÿÿ ÿéóÐ&rÇÿÿ ÿéöÐ&¯-Àÿÿ ÿé÷Ò&s7ÿÿ ÿç÷Ò&¸sÿÿ ÿë÷Ô&ì+©ÿÿÿêöÐ&+¨?ÃÿÿÿçóÏ&@?ÿÿÿèóÑ&íAÿÿÿéöÐ&û<ÿÿ ÿéóÑ&+ª+«ÿÿ ÿéóÏ&#Ö#Õÿÿ ÿéòÑ& Ï+«ÿÿÿëöÎ&˜UÿÿÿëõÎ&®&\ xÿÿÿëõÎ&®&[ ›ÿÿÿéõÎ&®&[ °ÿÿÿðöÎ&£&X »ÿÿÿéõÎ&®&[ ÚÿÿÿçõÎ&¹&a ïÿÿÿìõÎ&®&[ ÿÿÿíõÎ&®&[ ÿÿÿëõÎ&¹&a .ÿÿÿíõÎ&¹&a CÿÿÿñõÎ&¹&a XÿÿÿìõÎ&¹&a mÿÿÿíõÎ&¹&a ‚ÿÿÿíõÎ&¹&a —ÿÿÿëõÎ&¹&a ¬ÿÿÿïõÎ&®&[ ÁÿÿÿîõÎ&®&[ ÖÿÿÿêõÎ&¹&a ëÿÿÿèöÎ&®&^ ÿÿÿéõÎ&®&[ ÿÿÿçöÎ&®&^ *ÿÿÿçõÎ&®&[ 1ÿÿÿçõÎ&¹&[ TÿÿÿëõÎ&®&[ iÿÿÿìõÎ&¹&a ~ÿÿÿíõÎ&®&[ “ÿÿÿçõÎ&¹&[ ¨ÿÿ ÿëÐÎ&šdÿÿ ÿëÐÎ&°&j ˆÿÿ ÿëÐÎ&°&j ÿÿ ÿéìÎ&°&j ²ÿÿ ÿíÚÎ&¥&g Çÿÿ ÿéãÎ&°&j Üÿÿ ÿçßÎ&»&p ñÿÿ ÿìÕÎ&°&j ÿÿ ÿíÕÎ&»&p ÿÿ ÿëÐÎ&»&p 0ÿÿ ÿíÐÎ&»&p Eÿÿ ÿìÐÎ&»&p Zÿÿ ÿìéÎ&»&p oÿÿ ÿíÔÎ&»&p „ÿÿ ÿíÕÎ&»&p ™ÿÿ ÿëÛÎ&»&p ®ÿÿ ÿïÐÎ&°&j Ãÿÿ ÿîÐÎ&°&j Øÿÿ ÿêìÎ&»&p íÿÿ ÿèåÎ&°&m ÿÿ ÿééÎ&°&j ÿÿ ÿçÔÎ&°&m ,ÿÿ ÿçÞÎ&°&j Aÿÿ ÿçÞÎ&»&j Vÿÿ ÿëÐÎ&°&j kÿÿ ÿìÕÎ&»&p €ÿÿ ÿíØÎ&°&j •ÿÿ ÿçÜÎ&»&j ªÿÿÿëöÎ&˜sÿÿÿëöÎ&®&y †ÿÿÿëöÎ&®&y ›ÿÿÿéöÎ&®&y °ÿÿÿíöÎ&£&v ÅÿÿÿéöÎ&®&y ÚÿÿÿçöÎ&¹& ïÿÿÿìöÎ&®&y ÿÿÿíöÎ&¹& ÿÿÿëöÎ&¹& .ÿÿÿíöÎ&¹& CÿÿÿñöÎ&¹& XÿÿÿìöÎ&¹& mÿÿÿíöÎ&¹& ‚ÿÿÿíöÎ&¹& —ÿÿÿëöÎ&¹& ¬ÿÿÿïöÎ&®&y ÁÿÿÿîöÎ&®&y ÖÿÿÿêöÎ&¹& ëÿÿÿèöÎ&®&| ÿÿÿéöÎ&®&y ÿÿÿçöÎ&®&| *ÿÿÿçöÎ&®&y ?ÿÿÿçöÎ&¹&y TÿÿÿëöÎ&®&y iÿÿÿìöÎ&¹& ~ÿÿÿíöÎ&®&y “ÿÿÿçöÎ&¹&y ¨ÿÿ ÿëÐÎ&š‚ÿÿ ÿëÐÎ&°&ˆ ˆÿÿ ÿëÐÎ&°&ˆ ÿÿ ÿéìÎ&°&ˆ ²ÿÿ ÿíÚÎ&¥&… Çÿÿ ÿéãÎ&°&ˆ Üÿÿ ÿçßÎ&»&Ž ñÿÿ ÿìÕÎ&°&ˆ ÿÿ ÿíÕÎ&»&Ž ÿÿ ÿëÐÎ&»&Ž 0ÿÿ ÿíÐÎ&»&Ž Eÿÿ ÿìÐÎ&»&Ž Zÿÿ ÿìéÎ&»&Ž oÿÿ ÿíÔÎ&»&Ž „ÿÿ ÿíÕÎ&»&Ž ™ÿÿ ÿëÛÎ&»&Ž ®ÿÿ ÿïÐÎ&°&ˆ Ãÿÿ ÿîÐÎ&°&ˆ Øÿÿ ÿêìÎ&»&Ž íÿÿ ÿèåÎ&°&‹ ÿÿ ÿééÎ&°&ˆ ÿÿ ÿçÔÎ&°&‹ ,ÿÿ ÿçÞÎ&°&ˆ Aÿÿ ÿçÞÎ&»&ˆ Vÿÿ ÿëÐÎ&°&ˆ kÿÿ ÿìÕÎ&»&Ž €ÿÿ ÿíØÎ&°&ˆ •ÿÿ ÿçÜÎ&»&ˆ ªÿÿ ÿëÐÎ&™‘ÿÿ ÿëÐÎ&¯&¤ ‡ÿÿ ÿëÐÎ&¯&¤ œÿÿ ÿéìÎ&¯&¤ ±ÿÿÿðÕÎ&›& ¸£ÿÿ ÿéãÎ&¯&¤ Ûÿÿ ÿçßÎ&º&® ðÿÿ ÿìÕÎ&¯&¤ ÿÿ ÿíÕÎ& &¯¤ÿÿ ÿëÐÎ&º&® /ÿÿ ÿíÐÎ&º&® Dÿÿ ÿìÐÎ&º&® Yÿÿ ÿìéÎ&º&® nÿÿ ÿíÔÎ&º&® ƒÿÿ ÿíÕÎ&º&® ˜ÿÿ ÿëÛÎ&º&® ­ÿÿ ÿïÐÎ&¯&¤ Âÿÿ ÿîÐÎ&¯&¤ ×ÿÿ ÿêìÎ&º&® ìÿÿ ÿèãÎ&¸& ó¤ÿÿ ÿééÎ&¯&¤ ÿÿ ÿçÔÎ&¯&¸ +ÿÿ ÿçÞÎ&¯&¤ @ÿÿ ÿçÞÎ&º&® Uÿÿ ÿëÐÎ&¯&¤ jÿÿ ÿìÕÎ&º&® ÿÿ ÿíØÎ&¯&¤ ”ÿÿ ÿçÖÎ&º&® ©ÿÿ ÿëÐÎ&šÂÿÿ ÿëÐÎ&°&Ô ˆÿÿ ÿëÐÎ&°&Ô ÿÿ ÿéìÎ&°&Ô ²ÿÿ ÿíÚÎ&¥&Ê Çÿÿ ÿéãÎ&°&Ô Üÿÿ ÿçßÎ&»&Þ ñÿÿ ÿìÕÎ&°&Ô ÿÿ ÿíÕÎ&»&Þ ÿÿ ÿëÐÎ&»&Þ 0ÿÿ ÿíÐÎ&»&Þ Eÿÿ ÿìÐÎ&»&Þ Zÿÿ ÿìéÎ&»&Þ oÿÿ ÿíÔÎ&»&Þ „ÿÿ ÿíÕÎ&»&Þ ™ÿÿ ÿëÛÎ&»&Þ ®ÿÿ ÿïÐÎ&°&Ô Ãÿÿ ÿîÐÎ&°&Ô Øÿÿ ÿêìÎ&»&Þ íÿÿ ÿèåÎ&°&è ÿÿ ÿééÎ&Ý&° ÿÿ ÿçÔÎ&°&è ,ÿÿ ÿçÞÎ&°&Ô Aÿÿ ÿçÞÎ&»&Þ Vÿÿ ÿëÐÎ&°&Ô kÿÿ ÿìÕÎ&»&Þ €ÿÿ ÿíØÎ&°&Ô •ÿÿ ÿçÜÎ&»&Þ ªÿÿ ÿëÐÎ&™òÿÿ ÿëÐÎ&¯& ‡ ÿÿ ÿëÐÎ&¯&  œÿÿ ÿéìÎ&¯&  ±ÿÿ ÿðÕÎ&ü& ¸¤ÿÿ ÿéãÎ&¯&  Ûÿÿ ÿçßÎ&º&  ðÿÿ ÿìÕÎ&¯&  ÿÿ ÿíÕÎ&¯&  ÿÿ ÿëÐÎ&º&  /ÿÿ ÿíÐÎ&º&  Dÿÿ ÿìÐÎ&º&  Yÿÿ ÿìéÎ&º&  nÿÿ ÿíÔÎ&º&  ƒÿÿ ÿíÕÎ&º&  ˜ÿÿ ÿëÛÎ&º&  ­ÿÿ ÿïÐÎ&¯&  Âÿÿ ÿîÐÎ&¯&  ×ÿÿ ÿêìÎ&º&  ìÿÿ ÿèäÎ&¯&  ÿÿ ÿééÎ&¯&  ÿÿ ÿçÔÎ& &¯ +ÿÿ ÿçÞÎ&¯&  @ÿÿ ÿçÞÎ&º&  Uÿÿ ÿëÐÎ&¯&  jÿÿ ÿìÕÎ&º&  ÿÿ ÿíØÎ&¯&  ”ÿÿ ÿçÖÎ&º&  ©ÿÿ ÿëÐÎ&š !ÿÿ ÿëÐÎ&°& 5 ˆÿÿ ÿëÐÎ&°& 5 ÿÿ ÿéìÎ&°& 5 ²ÿÿ ÿíÚÎ&¥& + Çÿÿ ÿéãÎ&°& 5 Üÿÿ ÿçßÎ&»& ? ñÿÿ ÿìÕÎ&°& 5 ÿÿ ÿíÕÎ&»& ? ÿÿ ÿëÐÎ&»& ? 0ÿÿ ÿíÐÎ&»& ? Eÿÿ ÿìÐÎ&»& ? Zÿÿ ÿìéÎ&»& ? oÿÿ ÿíÔÎ&»& ? „ÿÿ ÿíÕÎ&»& ? ™ÿÿ ÿëÛÎ&»& ? ®ÿÿ ÿïÐÎ&°& 5 Ãÿÿ ÿîÐÎ&°& 5 Øÿÿ ÿêìÎ&»& ? íÿÿ ÿèåÎ&°& I ÿÿ ÿééÎ&°& 5 ÿÿ ÿçÔÎ&°& I ,ÿÿ ÿçÞÎ&°& 5 Aÿÿ ÿçÞÎ&»& ? Vÿÿ ÿëÐÎ&°& 5 kÿÿ ÿìÕÎ&»& ? €ÿÿ ÿíØÎ&°& 5 •ÿÿ ÿçÜÎ&»& ? ªÿÿ ê½&› SÿÿÿëêÉ&±& d ‰ÿÿÿëêÉ&±& d žÿÿÿéêÉ&±& d ³ÿÿÿíêÉ&¦& [ ÈÿÿÿéêÉ&±& d ÝÿÿÿçêÉ&¼& n òÿÿÿíêÉ&±& d ÿÿÿíêÉ&¼& n ÿÿÿìêÉ&¼& n 1ÿÿÿíêÉ&¼& n FÿÿÿíêÉ&¼& n [ÿÿÿìêÉ&¼& n pÿÿÿìêÉ&¼& n …ÿÿÿíêÉ&¼& n šÿÿÿëêÉ&¼& n ¯ÿÿÿïêÉ&±& d ÄÿÿÿîêÉ&±& d ÙÿÿÿêìÉ&¼& n îÿÿÿèêÉ& õ& d¼ÿÿÿéêÉ&±& d ÿÿÿçêÉ&¼& d -ÿÿÿçêÉ&±& d BÿÿÿçêÉ&¼& n WÿÿÿëêÉ&±& d lÿÿÿìêÉ&¼& n ÿÿÿíêÉ&±& d –ÿÿÿçêÉ&¼& n «ÿÿÿëöÎ& ÿÿÿëöÎ&³& • ŠÿÿÿëöÎ&³& • ŸÿÿÿêöÎ&³& • ´ÿÿÿðöÎ& ‹&¨ »ÿÿÿéöÎ&³& • ÞÿÿÿçöÎ&¾& Ÿ óÿÿÿìöÎ&³& • ÿÿÿíöÎ&¾& Ÿ ÿÿÿëöÎ&¾& Ÿ 2ÿÿÿîöÎ&¾& Ÿ GÿÿÿîöÎ&¾& Ÿ \ÿÿÿìöÎ&¾& Ÿ qÿÿÿíöÎ&¾& Ÿ †ÿÿÿíöÎ&¾& Ÿ ›ÿÿÿéöÎ&¾& Ÿ °ÿÿÿïöÎ&³& • ÅÿÿÿîöÎ&³& • ÚÿÿÿêöÎ&¾& Ÿ ïÿÿÿçöÎ&³& © ÿÿÿéöÎ&³& • ÿÿÿçöÎ&³& © .ÿÿÿçöÎ&³& • CÿÿÿçöÎ&¾& Ÿ XÿÿÿëöÎ&³& • mÿÿÿìöÎ&¾& Ÿ ‚ÿÿÿíöÎ&³& • —ÿÿÿçöÎ&¾& Ÿ ¬ÿÿÿëÐÎ&Ÿ ³ÿÿÿëÐÎ&µ& Ç ŠÿÿÿëÐÎ&µ& Ç ŸÿÿÿêëÎ&µ& Ç ´ÿÿÿíÚÎ&ª& ½ ÉÿÿÿéãÎ&µ& Ç ÞÿÿÿçßÎ&À& Ñ óÿÿÿìÕÎ&µ& Ç ÿÿÿíÕÎ&À& Ñ ÿÿÿëÐÎ&À& Ñ 2ÿÿÿîÐÎ&À& Ñ GÿÿÿîÐÎ&À& Ñ \ÿÿÿììÎ&À& Ñ qÿÿÿíÔÎ&À& Ñ †ÿÿÿíÕÎ&À& Ñ ›ÿÿÿéÛÎ&À& Ñ °ÿÿÿïÐÎ&µ& Ç ÅÿÿÿîÐÎ&µ& Ç ÚÿÿÿêìÎ&À& Ñ ïÿÿÿçåÎ&µ& Û ÿÿÿééÎ&µ& Ç ÿÿÿçÔÎ&µ& Û .ÿÿÿçâÎ&µ& Ç CÿÿÿçâÎ&À& Ñ XÿÿÿëÐÎ&µ& Ç mÿÿÿìÕÎ&À& Ñ ‚ÿÿÿíØÎ&µ& Ç —ÿÿÿçÜÎ&À& Ñ ¬ÿÿÿëÐÎ& åÿÿÿëÐÎ&³& ø ŠÿÿÿëÐÎ&³& ø ŸÿÿÿêëÎ&³& ø ´ÿÿÿíÚÎ&¨& î ÉÿÿÿéãÎ&³& ø ÞÿÿÿçßÎ&¾&  óÿÿÿìÕÎ&³& ø ÿÿÿíÕÎ&¾&  ÿÿÿëÐÎ&¾&  2ÿÿÿîÐÎ&¾&  GÿÿÿîÐÎ&¾&  \ÿÿÿììÎ&¾&  qÿÿÿíÔÎ&¾&  †ÿÿÿíÕÎ&¾&  ›ÿÿÿéÛÎ&¾&  °ÿÿÿïÐÎ&³& ø ÅÿÿÿîÐÎ&³& ø ÚÿÿÿêìÎ&¾&  ïÿÿÿçåÎ&³&  ÿÿÿééÎ&³& ø ÿÿÿçÔÎ&³&  .ÿÿÿçâÎ&³& ø CÿÿÿçâÎ&¾&  XÿÿÿëÐÎ&³& ø mÿÿÿìÕÎ&¾&  ‚ÿÿÿíØÎ&³& ø —ÿÿÿçÜÎ&¾&  ¬ÿÿ ë½&› ÿÿÿëëÉ&±& * ‰ÿÿÿëëÉ&±& * žÿÿÿéëÉ&±& * ³ÿÿÿíëÉ&¦&  ÈÿÿÿéëÉ&±& * ÝÿÿÿçëÉ&¼& 4 òÿÿÿíëÉ&±& * ÿÿÿíëÉ&¼& 4 ÿÿÿìëÉ&¼& 4 1ÿÿÿíëÉ&¼& 4 FÿÿÿíëÉ&¼& 4 [ÿÿÿìëÉ&¼& 4 pÿÿÿìëÉ&¼& 4 …ÿÿÿíëÉ&¼& 4 šÿÿÿëëÉ&¼& 4 ¯ÿÿÿïëÉ&±& * ÄÿÿÿîëÉ&±& * ÙÿÿÿêìÉ&¼& 4 îÿÿÿèëÉ&±& > ÿÿÿéëÉ&±& * ÿÿÿçëÉ&±& > -ÿÿÿçëÉ&±& * BÿÿÿçëÉ&¼& 4 WÿÿÿëëÉ&±& * lÿÿÿìëÉ&¼& 4 ÿÿÿíëÉ&±& * –ÿÿÿçëÉ&¼& 4 «ÿÿÿëëÉ& HœÿÿÿëëÉ& ‰&² SÿÿÿëëÉ&²& S žÿÿÿéëÉ&²& S ³ÿÿÿíëÉ&§& N ÈÿÿÿéëÉ&²& S ÝÿÿÿçëÉ&½& h òÿÿÿïëÊ& U& ùÂÿÿÿíëÉ&½& h ÿÿÿìëÉ&½& h 1ÿÿÿíëÉ&½& h FÿÿÿíëÉ&½& h [ÿÿÿìëÉ&½& h pÿÿÿìëÉ&½& h …ÿÿÿíëÉ&½& h šÿÿÿëëÉ&½& h ¯ÿÿÿïëÉ&²& S ÄÿÿÿîëÉ&²& S ÙÿÿÿêìÉ&½& h îÿÿÿèëÉ&²& a ÿÿÿéëÉ&²& S ÿÿÿçëÉ& & U²ÿÿÿçëÉ&²& S BÿÿÿçëÉ&½& Z WÿÿÿëëÉ&²& S lÿÿÿìëÉ&½& h ÿÿÿíëÉ&²& S –ÿÿÿçëÉ&½& Z «ÿÿÿëÐÎ&ž oÿÿÿëÐÎ&´& } ŒÿÿÿëÐÎ&´& } ¡ÿÿÿéìÎ&´& } ¶ÿÿÿíÚÎ& v& Ë´ÿÿÿéãÎ&´& } àÿÿÿçßÎ&¿& ’ õÿÿÿìÕÎ&´& } ÿÿÿíÕÎ&¿& ’ ÿÿÿëÐÎ&¿& ’ 4ÿÿÿîÐÎ&¿& ’ IÿÿÿîÐÎ&¿& ’ ^ÿÿÿìéÎ&¿& ’ sÿÿÿíÔÎ&¿& ’ ˆÿÿÿíÕÎ&¿& ’ ÿÿÿèÛÎ&¿& ’ ²ÿÿÿïÐÎ&´& } ÇÿÿÿîÐÎ&´& } ÜÿÿÿêìÎ&¿& ’ ñÿÿÿçåÎ&´& ‹ ÿÿÿééÎ&´& } ÿÿÿçÔÎ&´& ‹ 0ÿÿÿçÞÎ&´& } EÿÿÿçßÎ&¿& „ ZÿÿÿëÐÎ&´& } oÿÿÿìÕÎ&¿& ’ „ÿÿÿíØÎ&´& } ™ÿÿÿçÜÎ&¿& „ ®ÿÿÿëÐÎ&  ™ÿÿÿëÐÎ&¶& § ŒÿÿÿëÐÎ&¶& § ¡ÿÿÿéìÎ&¶& § ¶ÿÿÿíÚÎ&«&   ËÿÿÿéãÎ&¶& § àÿÿÿçßÎ&Á& ¼ õÿÿÿìÕÎ&¶& § ÿÿÿíÕÎ&Á& ¼ ÿÿÿëÐÎ&Á& ¼ 4ÿÿÿîÐÎ&Á& ¼ IÿÿÿîÐÎ&Á& ¼ ^ÿÿÿìéÎ&Á& ¼ sÿÿÿíÔÎ&Á& ¼ ˆÿÿÿíÕÎ&Á& ¼ ÿÿÿèÛÎ&Á& ¼ ²ÿÿÿïÐÎ&¶& § ÇÿÿÿîÐÎ&¶& § ÜÿÿÿêìÎ&Á& ¼ ñÿÿÿçåÎ&¶& µ ÿÿÿééÎ&¶& § ÿÿÿçÔÎ&¶& µ 0ÿÿÿçÞÎ&¶& § EÿÿÿçßÎ&Á& ® ZÿÿÿëÐÎ&¶& § oÿÿÿìÕÎ&Á& ¼ „ÿÿÿíØÎ&¶& § ™ÿÿÿçÜÎ&Á& ® ®ÿÿÿëÐÎ&ž ÃÿÿÿëÐÎ&´& Ñ ‹ÿÿÿëÐÎ&´& Ñ  ÿÿÿêëÎ&´& Ñ µÿÿÿíÚÎ&©& Ê ÊÿÿÿéãÎ&´& Ñ ßÿÿÿçßÎ&¿& æ ôÿÿÿìÕÎ&´& Ñ ÿÿÿíÕÎ&¿& æ ÿÿÿëÐÎ&¿& æ 3ÿÿÿîÐÎ&¿& æ HÿÿÿîÐÎ&¿& æ ]ÿÿÿìéÎ&¿& æ rÿÿÿíÔÎ&¿& æ ‡ÿÿÿíÕÎ&¿& æ œÿÿÿëÛÎ&¿& æ ±ÿÿÿïÐÎ&´& Ñ ÆÿÿÿîÐÎ&´& Ñ ÛÿÿÿêìÎ&¿& æ ðÿÿÿçåÎ&´& ß ÿÿÿééÎ&´& Ñ ÿÿÿçÔÎ&´& ß /ÿÿÿçÞÎ&´& Ñ DÿÿÿçßÎ&¿& Ø YÿÿÿëÐÎ&´& Ñ nÿÿÿìÕÎ&¿& æ ƒÿÿÿíØÎ&´& Ñ ˜ÿÿÿç×Î&¿& Ø ­ÿÿÿíëÉ&œ íÿÿÿëëÉ&²& û ‰ÿÿÿëëÉ&²& û žÿÿÿéëÉ&²& û ³ÿÿÿíëÉ&§& ô ÈÿÿÿéëÉ&²& û ÝÿÿÿçëÉ&½&  òÿÿÿíëÉ&²& û ÿÿÿíëÉ&½&  ÿÿÿìëÉ&½&  1ÿÿÿíëÉ&½&  FÿÿÿíëÉ&½&  [ÿÿÿìëÉ&½&  pÿÿÿìëÉ&½&  …ÿÿÿíëÉ&½&  šÿÿÿëëÉ&½&  ¯ÿÿÿïëÉ&²& û ÄÿÿÿîëÉ&²& û ÙÿÿÿêìÉ&½&  îÿÿÿèëÉ&²&  ÿÿÿéëÉ&²& û ÿÿÿçëÉ&²&  -ÿÿÿçëÉ&²& û BÿÿÿçëÉ&½&  WÿÿÿëëÉ&²& û lÿÿÿìëÉ&½&  ÿÿÿíëÉ&²& û –ÿÿÿçëÉ&½&  «ÿÿ ë½&¡ ÿÿÿëëÉ&§& $ ‰ÿÿÿëëÉ&·& $ žÿÿÿéëÉ&·& $ ³ÿÿÿíëÊ& È&¬ &ÿÿÿéëÉ&·& $ ÝÿÿÿçëÊ&Â& 9 òÿÿÿíëÉ&·& $ ÿÿÿíëÊ&Â& 9 ÿÿÿìëÊ&Â& 9 1ÿÿÿíëÊ&Â& 9 FÿÿÿíëÊ&Â& 9 [ÿÿÿìëÊ&Â& 9 pÿÿÿìëÊ&Â& 9 …ÿÿÿíëÊ&Â& 9 šÿÿÿëëÊ&Â& 9 ¯ÿÿÿïëÊ& $& ÄÿÿÿîëÉ&·& $ ÙÿÿÿêìÊ&Â& 9 îÿÿÿèëÉ&·& 2 ÿÿÿéëÉ&·& $ ÿÿÿçëÉ&·& 2 -ÿÿÿçëÉ&·& $ BÿÿÿçëÊ&Â& + WÿÿÿëëÉ&·& $ lÿÿÿìëÊ&Â& 9 ÿÿÿíëÉ&·& $ –ÿÿÿçëÊ&Â& + «ÿÿÿëÐÎ&¢ @ÿÿÿëÐÎ&¸& M ŠÿÿÿëÐÎ&¸& M ŸÿÿÿêëÎ&¸& M ´ÿÿÿíÚÎ&­& F ÉÿÿÿéãÎ&¸& M ÞÿÿÿçßÎ&Ã& b óÿÿÿìÕÎ&¸& M ÿÿÿíÕÎ&Ã& b ÿÿÿëÐÎ&Ã& b 2ÿÿÿîÐÎ&Ã& b GÿÿÿîÐÎ&Ã& b \ÿÿÿììÎ&Ã& b qÿÿÿíÔÎ&Ã& b †ÿÿÿíÕÎ&Ã& b ›ÿÿÿéÛÎ&Ã& b °ÿÿÿïÐÎ&¸& M ÅÿÿÿîÐÎ&¸& M ÚÿÿÿêìÎ&Ã& b ïÿÿÿçåÎ&¸& [ ÿÿÿééÎ&¸& M ÿÿÿçÔÎ&¸& [ .ÿÿÿçâÎ&¸& M CÿÿÿçâÎ&Ã& T XÿÿÿëÐÎ&¸& M mÿÿÿìÕÎ&Ã& b ‚ÿÿÿíØÎ&¸& M —ÿÿÿçÜÎ&Ã& T ¬ÿÿÿëÐÎ&˜ iÿÿÿëÐÎ&®& o ‡ÿÿÿëÐÎ&®& o œÿÿÿéìÎ&®& o ±ÿÿÿðÕÎ& l&£ »ÿÿÿéãÎ&®& o ÛÿÿÿçßÎ&¹& u ðÿÿÿìÕÎ&®& o ÿÿÿíÕÎ&¹& u ÿÿÿëÐÎ&¹& u /ÿÿÿíÐÎ&¹& u DÿÿÿìÐÎ&¹& u YÿÿÿìéÎ&¹& u nÿÿÿíÔÎ&¹& u ƒÿÿÿíÕÎ&¹& u ˜ÿÿÿëÛÎ&¹& u ­ÿÿ ÿïÐÎ&¯& p ÂÿÿÿîÐÎ&®& o ×ÿÿÿêìÎ&¹& u ìÿÿÿèäÎ&®& r ÿÿÿééÎ&®& o ÿÿÿçÔÎ&®& r +ÿÿÿçÞÎ&®& o @ÿÿÿçÞÎ&¹& o UÿÿÿëÐÎ&®& o jÿÿÿìÕÎ&¹& u ÿÿÿíØÎ&®& u ”ÿÿÿçÖÎ&¹& o ©ÿÿÿëöÎ&VÄÿÿÿëõÎ&Ú&\ †ÿÿÿëõÎ&Ú&\ ›ÿÿÿéõÎ&Ú&\ °ÿÿÿíöÎ&Ï&Y ÅÿÿÿéõÎ&Ú&\ ÚÿÿÿçõÎ&å&b ïÿÿÿìõÎ&Ú&\ ÿÿÿíõÎ&å&b ÿÿÿëõÎ&å&b .ÿÿÿíõÎ&å&b CÿÿÿñõÎ&å&b XÿÿÿìõÎ&å&b mÿÿÿíõÎ&å&b ‚ÿÿÿíõÎ&å&b —ÿÿÿëõÎ&å&b ¬ÿÿÿïõÎ&Ú&\ ÁÿÿÿîõÎ&Ú&\ ÖÿÿÿêõÎ&å&b ëÿÿÿèõÎ&Ú&_ ÿÿÿéõÎ&Ú&\ ÿÿÿçõÎ&Ú&_ *ÿÿÿçõÎ&Ú&\ ?ÿÿÿçõÎ&å&\ TÿÿÿëõÎ&Ú&\ iÿÿÿìõÎ&å&b ~ÿÿÿíõÎ&Ú&\ “ÿÿÿçõÎ&å&\ ¨ÿÿ ÿëÑÎ&Æeÿÿ ÿëÐÎ&Ü&k ˆÿÿ ÿëÐÎ&Ü&k ÿÿ ÿéìÎ&Ü&k ²ÿÿÿíÚÎ&Ñ&h Çÿÿ ÿéãÎ&Ü&k Üÿÿ ÿçßÎ&ç&q ñÿÿ ÿìÕÎ&Ü&k ÿÿ ÿíÕÎ&ç&q ÿÿ ÿëÑÎ&ç&q 0ÿÿ ÿíÑÎ&ç&q Eÿÿ ÿìÑÎ&ç&q Zÿÿ ÿìéÎ&ç&q oÿÿ ÿíÔÎ&ç&q „ÿÿ ÿíÕÎ&ç&q ™ÿÿ ÿëÛÎ&ç&q ®ÿÿ ÿïÐÎ&Ü&k Ãÿÿ ÿîÐÎ&Ü&k Øÿÿ ÿêìÎ&ç&q íÿÿ ÿèåÍ&Ü&n ÿÿ ÿééÎ&Ü&k ÿÿ ÿçÔÍ&Ü&n ,ÿÿ ÿçÞÎ&Ü&k Aÿÿ ÿçÞÎ&ç&k Vÿÿ ÿëÐÎ&Ü&k kÿÿ ÿìÕÎ&ç&q €ÿÿ ÿíØÎ&Ü&k •ÿÿ ÿçÜÎ&ç&k ªÿÿÿëöÎ&ÄtÿÿÿëöÎ&Ú&z †ÿÿÿëöÎ&Ú&z ›ÿÿÿéöÎ&Ú&z °ÿÿÿíöÎ&Ï&w ÅÿÿÿéöÎ&Ú&z ÚÿÿÿçöÎ&å&€ ïÿÿÿìöÎ&Ú&z ÿÿÿíöÎ&å&€ ÿÿÿëöÎ&å&€ .ÿÿÿíöÎ&å&€ CÿÿÿñöÎ&å&€ XÿÿÿìöÎ&å&€ mÿÿÿíöÎ&å&€ ‚ÿÿÿíöÎ&å&€ —ÿÿÿëöÎ&å&€ ¬ÿÿÿïöÎ&Ú&z ÁÿÿÿîöÎ&Ú&z ÖÿÿÿêöÎ&å&€ ëÿÿÿèöÎ&Ú&} ÿÿÿéöÎ&Ú&z ÿÿÿçöÎ&Ú&} *ÿÿÿçöÎ&Ú&z ?ÿÿÿçöÎ&å&z TÿÿÿëöÎ&Ú&z iÿÿÿìöÎ&å&€ ~ÿÿÿíöÎ&Ú&z “ÿÿÿçöÎ&å&z ¨ÿÿ ÿëÐÎ&ƃÿÿ ÿëÐÎ&Ü&‰ ˆÿÿ ÿëÐÎ&Ü&‰ ÿÿ ÿéìÎ&Ü&‰ ²ÿÿÿíÚÎ&Ñ&† Çÿÿ ÿéãÎ&Ü&‰ Üÿÿ ÿçßÎ&ç& ñÿÿ ÿìÕÎ&Ü&‰ ÿÿ ÿíÕÎ&ç& ÿÿ ÿëÐÎ&ç& 0ÿÿ ÿíÐÎ&ç& Eÿÿ ÿìÐÎ&ç& Zÿÿ ÿìéÎ&ç& oÿÿ ÿíÔÎ&ç& „ÿÿ ÿíÕÎ&ç& ™ÿÿ ÿëÛÎ&ç& ®ÿÿ ÿïÐÎ&Ü&‰ Ãÿÿ ÿîÐÎ&Ü&‰ Øÿÿ ÿêìÎ&ç& íÿÿ ÿèåÎ&Ü&Œ ÿÿ ÿééÎ&Ü&‰ ÿÿ ÿçÔÎ&Ü&Œ ,ÿÿ ÿçÞÎ&Ü&‰ Aÿÿ ÿçÞÎ&ç&‰ Vÿÿ ÿëÐÎ&Ü&‰ kÿÿ ÿìÕÎ&ç& €ÿÿ ÿíØÎ&Ü&‰ •ÿÿ ÿçÜÎ&ç&‰ ªÿÿ ÿëÐÎ&Å’ÿÿ ÿëÐÎ&Û&¥ ‡ÿÿ ÿëÐÎ&Û&¥ œÿÿ ÿéìÎ&Û&¥ ±ÿÿ ÿíÚÎ&Ð&œ Æÿÿ ÿéãÎ&Û&¥ Ûÿÿ ÿçßÎ&æ&¯ ðÿÿ ÿìÕÎ&Û&¥ ÿÿ ÿíÕÎ&æ&¯ ÿÿ ÿëÐÎ&æ&¯ /ÿÿ ÿíÐÎ&æ&¯ Dÿÿ ÿìÐÎ&æ&¯ Yÿÿ ÿìéÎ&æ&¯ nÿÿ ÿíÔÎ&æ&¯ ƒÿÿ ÿíÕÎ&æ&¯ ˜ÿÿ ÿëÛÎ&æ&¯ ­ÿÿ ÿïÐÎ&Û&¥ Âÿÿ ÿîÐÎ&Û&¥ ×ÿÿ ÿêìÎ&æ&¯ ìÿÿ ÿèäÎ&Û&¹ ÿÿ ÿééÎ&Û&¥ ÿÿ ÿçÔÎ&Û&¹ +ÿÿ ÿçÞÎ&Û&¥ @ÿÿ ÿçÞÎ&æ&¯ Uÿÿ ÿëÐÎ&Û&¥ jÿÿ ÿìÕÎ&æ&¯ ÿÿ ÿíØÎ&Û&¥ ”ÿÿ ÿçÖÎ&æ&¯ ©ÿÿ ÿëÐÎ&ÃÆÿÿ ÿëÐÎ&Ü&Õ ˆÿÿ ÿëÐÎ&Ü&Õ ÿÿ ÿéìÎ&Ü&Õ ²ÿÿÿíÚÎ&Ñ&Ë Çÿÿ ÿéãÎ&Ü&Õ Üÿÿ ÿçßÎ&ç&ß ñÿÿ ÿìÕÎ&Ü&Õ ÿÿ ÿíÕÎ&ç&ß ÿÿ ÿëÐÎ&ç&ß 0ÿÿ ÿíÐÎ&ç&ß Eÿÿ ÿìÐÎ&ç&ß Zÿÿ ÿìéÎ&ç&ß oÿÿ ÿíÔÎ&ç&ß „ÿÿ ÿíÕÎ&ç&ß ™ÿÿ ÿëÛÎ&ç&ß ®ÿÿ ÿïÐÎ&Ü&Õ Ãÿÿ ÿîÐÎ&Ü&Õ Øÿÿ ÿêìÎ&ç&ß íÿÿ ÿèåÎ&Ü&é ÿÿ ÿééÎ&Ü&Õ ÿÿ ÿçÔÎ&Ü&é ,ÿÿ ÿçÞÎ&Ü&Õ Aÿÿ ÿçÞÎ&ç&ß Vÿÿ ÿëÐÎ&Ü&Õ kÿÿ ÿìÕÎ&ç&ß €ÿÿ ÿíØÎ&Ü&Õ •ÿÿ ÿçÜÎ&ç&ß ªÿÿ ÿëÐÎ&Åóÿÿ ÿëÐÎ&Û&  ‡ÿÿ ÿëÐÎ&Û&  œÿÿ ÿéìÎ&Û&  ±ÿÿ ÿíÚÎ&Ð&ý Æÿÿ ÿéãÎ&Û&  Ûÿÿ ÿçßÎ&æ&  ðÿÿ ÿìÕÎ&Û&  ÿÿ ÿíÕÎ&æ&  ÿÿ ÿëÐÎ&æ&  /ÿÿ ÿíÐÎ&æ&  Dÿÿ ÿìÐÎ&æ&  Yÿÿ ÿìéÎ&æ&  nÿÿ ÿíÔÎ&æ&  ƒÿÿ ÿíÕÎ&æ&  ˜ÿÿ ÿëÛÎ&æ&  ­ÿÿ ÿïÐÎ&Û&  Âÿÿ ÿîÐÎ&Û&  ×ÿÿ ÿêìÎ&æ&  ìÿÿ ÿèäÎ&Û&  ÿÿ ÿééÎ&Û&  ÿÿ ÿçÔÎ&Û&  +ÿÿ ÿçÞÎ&Û&  @ÿÿ ÿçÞÎ&æ&  Uÿÿ ÿëÐÎ&Û&  jÿÿ ÿìÕÎ&æ&  ÿÿ ÿíØÎ&Û&  ”ÿÿ ÿçÖÎ&æ&  ©ÿÿ ÿëÐÎ&Æ "ÿÿ ÿëÐÎ&Ü& 6 ˆÿÿ ÿëÐÎ&Ü& 6 ÿÿ ÿéìÎ&Ü& 6 ²ÿÿÿíÚÎ&Ñ& , Çÿÿ ÿéãÎ&Ü& 6 Üÿÿ ÿçßÎ&ç& @ ñÿÿ ÿìÕÎ&Ü& 6 ÿÿ ÿíÕÎ&ç& @ ÿÿ ÿëÐÎ&ç& @ 0ÿÿ ÿíÐÎ&ç& @ Eÿÿ ÿìÐÎ&ç& @ Zÿÿ ÿìéÎ&ç& @ oÿÿ ÿíÔÎ&ç& @ „ÿÿ ÿíÕÎ&ç& @ ™ÿÿ ÿëÛÎ&ç& @ ®ÿÿ ÿïÐÎ&Ü& 6 Ãÿÿ ÿîÐÎ&Ü& 6 Øÿÿ ÿêìÎ&ç& @ íÿÿ ÿèåÎ&Ü& J ÿÿ ÿééÎ&Ü& 6 ÿÿ ÿçÔÎ&Ü& J ,ÿÿ ÿçÞÎ&Ü& 6 Aÿÿ ÿçÞÎ&ç& @ Vÿÿ ÿëÐÎ&Ü& 6 kÿÿ ÿìÕÎ&ç& @ €ÿÿ ÿíØÎ&Ü& 6 •ÿÿ ÿçÜÎ&ç& @ ªÿÿ êÀ&Ç TÿÿÿëêÉ&Ý& e ‰ÿÿÿëêÉ&Ý& e žÿÿÿéêÉ&Ý& e ³ÿÿÿíêÉ&Ò& \ ÈÿÿÿéêÉ&Ý& e ÝÿÿÿçêÉ&è& o òÿÿÿíêÉ&Ý& e ÿÿÿíêÉ&è& o ÿÿÿìêÉ&è& o 1ÿÿÿíêÉ&è& o FÿÿÿíêÉ&è& o [ÿÿÿìêÉ&è& o pÿÿÿìêÉ&è& o …ÿÿÿíêÉ&è& o šÿÿÿëêÉ&è& o ¯ÿÿÿïêÉ&Ý& e ÄÿÿÿîêÉ&Ý& e ÙÿÿÿêìÉ&è& o îÿÿÿèêÉ&Ý& x ÿÿÿéêÉ&Ý& e ÿÿÿçêÉ&Ý& x -ÿÿÿçêÉ&Ý& e BÿÿÿçêÉ&è& o WÿÿÿëêÉ&Ý& e lÿÿÿìêÉ&è& o ÿÿÿíêÉ&Ý& e –ÿÿÿçêÉ&è& o «ÿÿÿëöÎ&É ‚ÿÿÿëöÎ&ß& – ŠÿÿÿëöÎ&ß& – ŸÿÿÿêöÎ&ß& – ´ÿÿÿíöÎ&Ô& Œ ÉÿÿÿéöÎ&ß& – ÞÿÿÿçöÎ&ê&   óÿÿÿìöÎ&ß& – ÿÿÿíöÎ&ê&   ÿÿÿëöÎ&ê&   2ÿÿÿîöÎ&ê&   GÿÿÿîöÎ&ê&   \ÿÿÿìöÎ&ê&   qÿÿÿíöÎ&ê&   †ÿÿÿíöÎ&ê&   ›ÿÿÿéöÎ&ê&   °ÿÿÿïöÎ&ß& – ÅÿÿÿîöÎ&ß& – ÚÿÿÿêöÎ&ê&   ïÿÿÿçöÎ&ß& ª ÿÿÿéöÎ&ß& – ÿÿÿçöÎ&ß& ª .ÿÿÿçöÎ&ß& – CÿÿÿçöÎ&ê&   XÿÿÿëöÎ&ß& – mÿÿÿìöÎ&ê&   ‚ÿÿÿíöÎ&ß& – —ÿÿÿçöÎ&ê&   ¬ÿÿÿëÐÎ&Ë ´ÿÿÿëÐÎ&á& È ŠÿÿÿëÐÎ&á& È ŸÿÿÿêëÎ&á& È ´ÿÿÿíÚÎ&Ö& ¾ ÉÿÿÿéãÎ&á& È ÞÿÿÿçßÎ&ì& Ò óÿÿÿìÕÎ&á& È ÿÿÿíÕÎ&ì& Ò ÿÿÿëÐÎ&ì& Ò 2ÿÿÿîÐÎ&ì& Ò GÿÿÿîÐÎ&ì& Ò \ÿÿÿììÎ&ì& Ò qÿÿÿíÔÎ&ì& Ò †ÿÿÿíÕÎ&ì& Ò ›ÿÿÿéÛÎ&ì& Ò °ÿÿÿïÐÎ&á& È ÅÿÿÿîÐÎ&á& È ÚÿÿÿêìÎ&ì& Ò ïÿÿÿçåÎ&á& Ü ÿÿÿééÎ&á& È ÿÿÿçÔÎ&á& Ü .ÿÿÿçâÎ&á& È CÿÿÿçâÎ&ì& Ò XÿÿÿëÐÎ&á& È mÿÿÿìÕÎ&ì& Ò ‚ÿÿÿíØÎ&á& È —ÿÿÿçÜÎ&ì& Ò ¬ÿÿÿëÐÎ&É æÿÿÿëÐÎ&ß& ù ŠÿÿÿëÐÎ&ß& ù ŸÿÿÿêëÎ&ß& ù ´ÿÿÿíÚÎ&Ô& ï ÉÿÿÿéãÎ&ß& ù ÞÿÿÿçßÎ&ê&  óÿÿÿìÕÎ&ß& ù ÿÿÿíÕÎ&ê&  ÿÿÿëÐÎ&ê&  2ÿÿÿîÐÎ&ê&  GÿÿÿîÐÎ&ê&  \ÿÿÿììÎ&ê&  qÿÿÿíÔÎ&ê&  †ÿÿÿíÕÎ&ê&  ›ÿÿÿéÛÎ&ê&  °ÿÿÿïÐÎ&ß& ù ÅÿÿÿîÐÎ&ß& ù ÚÿÿÿêìÎ&ê&  ïÿÿÿçåÎ&ß&  ÿÿÿééÎ&ß& ù ÿÿÿçÔÎ&ß&  .ÿÿÿçâÎ&ß& ù CÿÿÿçâÎ&ê&  XÿÿÿëÐÎ&ß& ù mÿÿÿìÕÎ&ê&  ‚ÿÿÿíØÎ&ß& ù —ÿÿÿçÜÎ&ê&  ¬ÿÿ ëÀ&Ç ÿÿÿëëÉ&Ý& + ‰ÿÿÿëëÉ&Ý& + žÿÿÿéëÉ&Ý& + ³ÿÿÿíëÉ&Ò& ! ÈÿÿÿéëÉ&Ý& + ÝÿÿÿçëÉ&è& 5 òÿÿÿíëÉ&Ý& + ÿÿÿíëÉ&è& 5 ÿÿÿìëÉ&è& 5 1ÿÿÿíëÉ&è& 5 FÿÿÿíëÉ&è& 5 [ÿÿÿìëÉ&è& 5 pÿÿÿìëÉ&è& 5 …ÿÿÿíëÉ&è& 5 šÿÿÿëëÉ&è& 5 ¯ÿÿÿïëÉ&Ý& + ÄÿÿÿîëÉ&Ý& + ÙÿÿÿêìÉ&è& 5 îÿÿÿèëÉ&Ý& ? ÿÿÿéëÉ&Ý& + ÿÿÿçëÉ&Ý& ? -ÿÿÿçëÉ&Ý& + BÿÿÿçëÉ&è& 5 WÿÿÿëëÉ&Ý& + lÿÿÿìëÉ&è& 5 ÿÿÿíëÉ&Ý& + –ÿÿÿçëÉ&è& 5 «ÿÿÿëëÉ&È HÿÿÿëëÉ&Þ& S ‰ÿÿÿëëÉ&Þ& S žÿÿÿéëÉ&Þ& S ³ÿÿÿíëÉ&Ó& N ÈÿÿÿéëÉ&Þ& S ÝÿÿÿçëÉ&é& h òÿÿÿíëÉ&Þ& S ÿÿÿíëÉ&é& h ÿÿÿìëÉ&é& h 1ÿÿÿíëÉ&é& h FÿÿÿíëÉ&é& h [ÿÿÿìëÉ&é& h pÿÿÿìëÉ&é& h …ÿÿÿíëÉ&é& h šÿÿÿëëÉ&é& h ¯ÿÿÿïëÉ&Þ& S ÄÿÿÿîëÉ&Þ& S ÙÿÿÿêìÉ&é& h îÿÿÿèëÉ&Þ& a ÿÿÿéëÉ&Þ& S ÿÿÿçëÉ&Þ& S -ÿÿÿçëÉ&Þ& S BÿÿÿçëÉ&é& Z WÿÿÿëëÉ&Þ& S lÿÿÿìëÉ&é& h ÿÿÿíëÉ&Þ& S –ÿÿÿçëÉ&é& Z «ÿÿÿëÐÎ&Ê oÿÿÿëÐÎ&à& } ŒÿÿÿëÐÎ&à& } ¡ÿÿÿéìÎ&à& } ¶ÿÿÿíÚÎ&Õ& v ËÿÿÿéãÎ&à& } àÿÿÿçßÎ&ë& ’ õÿÿÿìÕÎ&à& } ÿÿÿíÕÎ&ë& ’ ÿÿÿëÐÎ&ë& ’ 4ÿÿÿîÐÎ&ë& ’ IÿÿÿîÐÎ&ë& ’ ^ÿÿÿìéÎ&ë& ’ sÿÿÿíÔÎ&ë& ’ ˆÿÿÿíÕÎ&ë& ’ ÿÿÿèÛÎ&ë& ’ ²ÿÿÿïÐÎ&à& } ÇÿÿÿîÐÎ&à& } ÜÿÿÿêìÎ&ë& ’ ñÿÿÿçåÎ&à& ‹ ÿÿÿééÎ&à& } ÿÿÿçÔÎ&à& ‹ 0ÿÿÿçÞÎ&à& } EÿÿÿçßÎ&ë& „ ZÿÿÿëÐÎ&à& } oÿÿÿìÕÎ&ë& ’ „ÿÿÿíØÎ&à& } ™ÿÿÿçÜÎ&ë& „ ®ÿÿÿëÐÎ&Ì ™ÿÿÿëÐÎ&â& § ŒÿÿÿëÐÎ&â& § ¡ÿÿÿéìÎ&â& § ¶ÿÿÿíÚÎ&×&   ËÿÿÿéãÎ&â& § àÿÿÿçßÎ&í& ¼ õÿÿÿìÕÎ&â& § ÿÿÿíÕÎ&í& ¼ ÿÿÿëÐÎ&í& ¼ 4ÿÿÿîÐÎ&í& ¼ IÿÿÿîÐÎ&í& ¼ ^ÿÿÿìéÎ&í& ¼ sÿÿÿíÔÎ&í& ¼ ˆÿÿÿíÕÎ&í& ¼ ÿÿÿèÛÎ&í& ¼ ²ÿÿÿïÐÎ&â& § ÇÿÿÿîÐÎ&â& § ÜÿÿÿêìÎ&í& ¼ ñÿÿÿçåÎ&â& µ ÿÿÿééÎ&â& § ÿÿÿçÔÎ&â& µ 0ÿÿÿçÞÎ&â& § EÿÿÿçßÎ&í& ® ZÿÿÿëÐÎ&â& § oÿÿÿìÕÎ&í& ¼ „ÿÿÿíØÎ&â& § ™ÿÿÿçÜÎ&í& ® ®ÿÿÿëÐÎ& ÃÊÿÿÿëÐÎ&à& Ñ ‹ÿÿÿëÐÎ&à& Ñ  ÿÿÿêëÎ&à& Ñ µÿÿÿíÚÎ&Õ& Ê ÊÿÿÿéãÎ&à& Ñ ßÿÿÿçßÎ&ë& æ ôÿÿÿìÕÎ&à& Ñ ÿÿÿíÕÎ&ë& æ ÿÿÿëÐÎ&ë& æ 3ÿÿÿîÐÎ&ë& æ HÿÿÿîÐÎ&ë& æ ]ÿÿÿìéÎ&ë& æ rÿÿÿíÔÎ&ë& æ ‡ÿÿÿíÕÎ&ë& æ œÿÿÿëÛÎ&ë& æ ±ÿÿÿïÐÎ&à& Ñ ÆÿÿÿîÐÎ&à& Ñ ÛÿÿÿêìÎ&ë& æ ðÿÿÿçåÎ&à& ß ÿÿÿééÎ&à& Ñ ÿÿÿçÔÎ&à& ß /ÿÿÿçÞÎ&à& Ñ DÿÿÿçßÎ&ë& Ø YÿÿÿëÐÎ&à& Ñ nÿÿÿìÕÎ&ë& æ ƒÿÿÿíØÎ&à& Ñ ˜ÿÿÿç×Î&ë& Ø ­ÿÿÿíëÉ&È íÿÿÿëëÉ&Þ& û ‰ÿÿÿëëÉ&Þ& û žÿÿÿéëÉ&Þ& û ³ÿÿÿíëÉ&Ó& ô ÈÿÿÿéëÉ&Þ& û ÝÿÿÿçëÉ&é&  òÿÿÿíëÉ&Þ& û ÿÿÿíëÉ&é&  ÿÿÿìëÉ&é&  1ÿÿÿíëÉ&é&  FÿÿÿíëÉ&é&  [ÿÿÿìëÉ&é&  pÿÿÿìëÉ&é&  …ÿÿÿíëÉ&é&  šÿÿÿëëÉ&é&  ¯ÿÿÿïëÉ&Þ& û ÄÿÿÿîëÉ&Þ& û ÙÿÿÿêìÉ&é&  îÿÿÿèëÉ&Þ&  ÿÿÿéëÉ&Þ& û ÿÿÿçëÉ&Þ&  -ÿÿÿçëÉ&Þ& û BÿÿÿçëÉ&é&  WÿÿÿëëÉ&Þ& û lÿÿÿìëÉ&é&  ÿÿÿíëÉ&Þ& û –ÿÿÿçëÉ&é&  «ÿÿ ë½&Í ÿÿÿëëÉ&ã& $ ‰ÿÿÿëëÉ&ã& $ žÿÿÿéëÉ&ã& $ ³ÿÿÿíëÉ&Ø&  ÈÿÿÿéëÉ&ã& $ ÝÿÿÿçëÉ&î& 9 òÿÿÿíëÉ&ã& $ ÿÿÿíëÉ&ã& $ ÿÿÿìëÉ&î& 9 1ÿÿÿíëÉ&î& 9 FÿÿÿíëÉ&î& 9 [ÿÿÿìëÉ&î& 9 pÿÿÿìëÉ&î& 9 …ÿÿÿíëÉ&î& 9 šÿÿÿëëÉ&î& 9 ¯ÿÿÿïëÉ&ã& $ ÄÿÿÿîëÉ&ã& $ ÙÿÿÿêìÉ&î& 9 îÿÿÿèëÉ&ã& 2 ÿÿÿéëÉ&ã& $ ÿÿÿçëÉ&ã& 2 -ÿÿÿçëÉ&ã& $ BÿÿÿçëÉ&î& + WÿÿÿëëÉ&ã& $ lÿÿÿìëÉ&ã& $ ÿÿÿíëÉ&ã& $ –ÿÿÿçëÉ&î& + «ÿÿÿëÐÎ&Î @ÿÿÿëÐÎ&ä& M ŠÿÿÿëÐÎ&ä& M ŸÿÿÿêëÎ&ä& M ´ÿÿÿíÚÎ&Ù& F ÉÿÿÿéãÎ&ä& M ÞÿÿÿçßÎ&ï& b óÿÿÿìÕÎ&ä& M ÿÿÿíÕÎ&ï& b ÿÿÿëÐÎ&ï& b 2ÿÿÿîÐÎ&ï& b GÿÿÿîÐÎ&ï& b \ÿÿÿììÎ&ï& b qÿÿÿíÔÎ&ï& b †ÿÿÿíÕÎ&ï& b ›ÿÿÿéÛÎ&ï& b °ÿÿÿïÐÎ&ä& M ÅÿÿÿîÐÎ&ä& M ÚÿÿÿêìÎ&ï& b ïÿÿÿçåÎ&ä& [ ÿÿÿééÎ&ä& M ÿÿÿçÔÎ&ä& [ .ÿÿÿçâÎ&ä& M CÿÿÿçâÎ&ï& T XÿÿÿëÐÎ&ä& M mÿÿÿìÕÎ&ï& b ‚ÿÿÿíØÎ&ä& M —ÿÿÿçÜÎ&ï& T ¬ÿÿ ÿëÐÎ& jÅÿÿÿëÐÎ&Ú& p ‡ÿÿÿëÐÎ&Ú& p œÿÿÿéìÎ&Ú& p ±ÿÿÿíÚÎ&Ï& m ÆÿÿÿéãÎ&Ú& p ÛÿÿÿçßÎ&å& v ðÿÿÿìÕÎ&Ú& p ÿÿÿíÕÎ&å& v ÿÿÿëÐÎ&å& v /ÿÿÿíÐÎ&å& v DÿÿÿìÐÎ&å& v YÿÿÿìéÎ&å& v nÿÿÿíÔÎ&å& v ƒÿÿÿíÕÎ&å& v ˜ÿÿÿëÛÎ&å& v ­ÿÿÿïÐÎ&Ú& p ÂÿÿÿîÐÎ&Ú& p ×ÿÿÿêìÎ&å& v ìÿÿÿèäÎ&Ú& s ÿÿÿééÎ&Ú& p ÿÿÿçÔÎ&Ú& s +ÿÿÿçÞÎ&Ú& p @ÿÿÿçÞÎ&å& p UÿÿÿëÐÎ&Ú& p jÿÿÿìÕÎ&å& v ÿÿÿíØÎ&Ú& p ”ÿÿÿçÖÎ&å& p ©ÿÿÿëöÎ&UðÿÿÿëõÎ&&[ xÿÿÿëõÎ&&[ ÿÿÿèõÎ&&[ ¢ÿÿÿíöÎ&ù&Z ÅÿÿÿêõÎ&&[ ÌÿÿÿçõÎ& &a áÿÿÿïõÎ&&[ öÿÿÿíõÎ&[&  ÿÿÿëõÎ& &a ÿÿÿíõÎ& &a 5ÿÿÿíõÎ& &a JÿÿÿìõÎ& &a _ÿÿÿíõÎ& &a tÿÿÿíõÎ& &a ‰ÿÿÿçõÎ& &a žÿÿÿïõÎ&&[ ³ÿÿÿîõÎ&&[ ÈÿÿÿèõÎ& &a ÝÿÿÿèöÎ&&^ òÿÿÿéõÎ&&[ ÿÿÿçöÎ&&^ ÿÿÿçõÎ&&[ 1ÿÿÿçõÎ& &[ FÿÿÿëõÎ&&[ [ÿÿÿìõÎ& &a pÿÿÿíõÎ&&[ …ÿÿÿçõÎ& &[ šÿÿÿëÐÎ&òdÿÿÿëÐÎ&&j zÿÿÿëÐÎ&&j ÿÿÿèìÎ&&j ¤ÿÿÿðÕÎ&û&… ¹ÿÿÿéãÎ&&j ÎÿÿÿçßÎ& &p ãÿÿÿïÕÎ&&j øÿÿÿíÕÎ& &p ÿÿÿëÐÎ& &p "ÿÿÿíÐÎ& &p 7ÿÿÿíÐÎ& &p LÿÿÿìéÎ& &p aÿÿÿíÔÎ& &p vÿÿÿíÕÎ& &p ‹ÿÿÿçÛÎ& &p  ÿÿÿïÐÎ& µ&jÿÿÿîÐÎ&&j ÊÿÿÿèìÎ& &p ßÿÿÿèàÎ&&m ôÿÿÿééÎ&&j ÿÿÿçÔÎ&&m ÿÿÿçÞÎ&&j 3ÿÿÿçÞÎ& &j HÿÿÿëÐÎ&&j ]ÿÿÿìÕÎ& &p rÿÿÿíØÎ&&j ‡ÿÿÿçÜÎ& &j œÿÿÿëöÎ&ðsÿÿÿëöÎ&&y xÿÿÿëöÎ&&y ÿÿÿèöÎ&&y ¢ÿÿÿðöÎ&ù&v ·ÿÿÿêöÎ&&y ÌÿÿÿçöÎ& & áÿÿÿïöÎ&&y öÿÿÿíöÎ& & ÿÿÿëöÎ& & ÿÿÿíöÎ& & 5ÿÿÿíöÎ& & JÿÿÿìöÎ& & _ÿÿÿíöÎ& & tÿÿÿíöÎ& & ‰ÿÿÿçöÎ& & žÿÿÿïöÎ&&y ³ÿÿÿîöÎ&&y ÈÿÿÿèöÎ& & ÝÿÿÿèöÎ&&| òÿÿÿéöÎ&&y ÿÿÿçöÎ&&| ÿÿÿçöÎ&&y 1ÿÿÿçöÎ& &y FÿÿÿëöÎ&&y [ÿÿÿìöÎ& & pÿÿÿíöÎ&&y …ÿÿÿçöÎ& &y šÿÿÿëÐÎ&ò‚ÿÿÿëÐÎ&&ˆ zÿÿÿëÐÎ&&ˆ ÿÿÿèìÎ&&ˆ ¤ÿÿÿðÕÎ&û&… ¹ÿÿÿéãÎ&&ˆ ÎÿÿÿçßÎ& &Ž ãÿÿÿïÕÎ&&ˆ øÿÿÿíÕÎ& &Ž ÿÿÿëÐÎ& &Ž "ÿÿÿíÐÎ& &Ž 7ÿÿÿíÐÎ& &Ž LÿÿÿìéÎ& &Ž aÿÿÿíÔÎ& &Ž vÿÿÿíÕÎ& &Ž ‹ÿÿÿçÛÎ& &Ž  ÿÿÿïÐÎ&&ˆ µÿÿÿîÐÎ&&ˆ ÊÿÿÿèìÎ& &Ž ßÿÿÿèàÎ&&‹ ôÿÿÿééÎ&&ˆ ÿÿÿçÔÎ&&‹ ÿÿÿçÞÎ&&ˆ 3ÿÿÿçÞÎ& &ˆ HÿÿÿëÐÎ&&ˆ ]ÿÿÿìÕÎ& &Ž rÿÿÿíØÎ&&ˆ ‡ÿÿÿçÜÎ& &ˆ œÿÿÿëÐÎ&ñ”ÿÿÿëÐÎ&&§ yÿÿÿëÐÎ&&§ ŽÿÿÿèìÎ&&§ £ÿÿÿðÕÎ&ú&ž ¸ÿÿÿéãÎ&&§ ÍÿÿÿçßÎ& &± âÿÿÿïÕÎ&&§ ÷ÿÿÿíÕÎ& &± ÿÿÿëÐÎ& &± !ÿÿÿíÐÎ& &± 6ÿÿÿíÐÎ& &± KÿÿÿìéÎ& &± `ÿÿÿíÔÎ& &± uÿÿÿíÕÎ& &± ŠÿÿÿçÛÎ& &± ŸÿÿÿïÐÎ&¤& ´ÿÿÿîÐÎ&&§ ÉÿÿÿèìÎ& &± ÞÿÿÿèãÎ&&» óÿÿÿééÎ&&§ ÿÿÿçÔÎ&&» ÿÿÿçÞÎ&&§ 2ÿÿÿçÞÎ& &± GÿÿÿëÐÎ&&§ \ÿÿÿìÕÎ& &± qÿÿÿíØÎ&&§ †ÿÿÿçÖÎ& &± ›ÿÿÿëÐÎ&òÄÿÿÿëÐÎ&&× zÿÿÿëÐÎ&&× ÿÿÿèìÎ&&× ¤ÿÿÿðÕÎ&û&Í ¹ÿÿÿéãÎ&&× ÎÿÿÿçßÎ& &á ãÿÿÿïÕÎ&&× øÿÿÿíÕÎ& &á ÿÿÿëÐÎ& &á "ÿÿÿíÐÎ& &á 7ÿÿÿíÐÎ& &á LÿÿÿìéÎ& &á aÿÿÿíÔÎ& &á vÿÿÿíÕÎ& &á ‹ÿÿÿçÛÎ& &á  ÿÿÿïÐÎ&&× µÿÿÿîÐÎ&&× ÊÿÿÿèìÎ& &á ßÿÿÿèàÎ&&ë ôÿÿÿééÎ&&× ÿÿÿçÔÎ&&ë ÿÿÿçÞÎ&&× 3ÿÿÿçÞÎ& &á HÿÿÿëÐÎ&&× ]ÿÿÿìÕÎ& &á rÿÿÿíØÎ&&× ‡ÿÿÿçÜÎ& &á œÿÿÿëÐÎ&ñõÿÿÿëÐÎ&&  yÿÿÿëÐÎ&&  ŽÿÿÿèìÎ&&  £ÿÿÿðÕÎ&ú&  ¸ÿÿÿéãÎ&&  ÍÿÿÿçßÎ& &  âÿÿÿïÕÎ&&  ÷ÿÿÿíÕÎ& &  ÿÿÿëÐÎ& &  !ÿÿÿíÐÎ& &  6ÿÿÿíÐÎ& &  KÿÿÿìéÎ& &  `ÿÿÿíÔÎ& &  uÿÿÿíÕÎ& &  ŠÿÿÿçÛÎ& &  ŸÿÿÿïÐÎ& &  µÿÿÿîÐÎ&&  ÉÿÿÿèìÎ& &  ÞÿÿÿèãÎ&&  óÿÿÿééÎ&&  ÿÿÿçÔÎ&&  ÿÿÿçÞÎ&&  2ÿÿÿçÞÎ& &  GÿÿÿëÐÎ&&  \ÿÿÿìÕÎ& &  qÿÿÿíØÎ&&  †ÿÿÿçÖÎ& &  ›ÿÿÿëÐÎ&ò $ÿÿÿëÐÎ&& 8 zÿÿÿëÐÎ&& 8 ÿÿÿèìÎ&& 8 ¤ÿÿÿðÕÎ&û& . ¹ÿÿÿéãÎ&& 8 ÎÿÿÿçßÎ& & B ãÿÿÿïÕÎ&& 8 øÿÿÿíÕÎ& & B ÿÿÿëÐÎ& & B "ÿÿÿíÐÎ& & B 7ÿÿÿíÐÎ& & B LÿÿÿìéÎ& & B aÿÿÿíÔÎ& & B vÿÿÿíÕÎ& & B ‹ÿÿÿçÛÎ& & B  ÿÿÿïÐÎ&& 8 µÿÿÿîÐÎ&& 8 ÊÿÿÿèìÎ& & B ßÿÿÿèàÎ&& L ôÿÿÿééÎ&& 8 ÿÿÿçÔÎ&& L ÿÿÿçÞÎ&& 8 3ÿÿÿçÞÎ& & B HÿÿÿëÐÎ&& 8 ]ÿÿÿìÕÎ& & B rÿÿÿíØÎ&& 8 ‡ÿÿÿçÜÎ& & B œÿÿ êÅ&ó VÿÿÿëêÏ&& g {ÿÿÿëêÏ&& g ÿÿÿêêÏ&& g ¥ÿÿÿíêÏ&& È zÿÿÿéêÏ&& g ÏÿÿÿçêÏ&& q äÿÿÿïêÏ&& g ùÿÿÿíêÏ&& q ÿÿÿëêÏ&& q #ÿÿÿíêÏ&& q 8ÿÿÿðêÏ&& q MÿÿÿìêÏ&& q bÿÿÿíêÏ&& q wÿÿÿíêÏ&& q ŒÿÿÿçêÏ&& q ¡ÿÿÿïêÏ&& g ¶ÿÿÿîêÏ&& g ËÿÿÿèìÏ&& q àÿÿÿèêÏ&& z õÿÿÿéêÏ&& g ÿÿÿçêÏ&& z ÿÿÿçêÏ&& g 4ÿÿÿçêÏ&& q IÿÿÿëêÏ&& g ^ÿÿÿìêÏ&& q sÿÿÿíêÏ&& g ˆÿÿÿçêÏ&& g ÿÿÿëöÎ&õ „ÿÿÿëöÎ&& ˜ |ÿÿÿëöÎ&& ˜ ‘ÿÿÿêöÎ&& ˜ ¦ÿÿÿðöÎ&þ& Ž »ÿÿÿêöÎ&& ˜ ÐÿÿÿçöÎ&& ¢ åÿÿÿïöÎ&& ˜ úÿÿÿíöÎ&& ¢ ÿÿÿëöÎ&& ¢ $ÿÿÿíöÎ&& ¢ 9ÿÿÿíöÎ&& ¢ NÿÿÿìöÎ&& ¢ cÿÿÿîöÎ&& ¢ xÿÿÿíöÎ&& ¢ ÿÿÿçöÎ&& ¢ ¢ÿÿÿïöÎ&& ˜ ·ÿÿÿîöÎ&& ˜ ÌÿÿÿèöÎ&& ¢ áÿÿÿèöÎ&& ¬ öÿÿÿéöÎ&& ˜ ÿÿÿçöÎ&& ¬ ÿÿÿçöÎ&& ˜ 5ÿÿÿçöÎ&& ¢ JÿÿÿëöÎ&& ˜ _ÿÿÿìöÎ&& ¢ tÿÿÿíöÎ&& ˜ ‰ÿÿÿçöÎ&& ¢ žÿÿÿëÐÎ&÷ ¶ÿÿÿëÐÎ& & Ê |ÿÿÿëÐÎ& & Ê ‘ÿÿÿêëÎ& & Ê ¦ÿÿÿðÕÎ&& À »ÿÿÿêãÎ& & Ê ÐÿÿÿçßÎ&& Ô åÿÿÿïÕÎ& & Ê úÿÿÿíÕÎ&& Ô ÿÿÿëÐÎ&& Ô $ÿÿÿíÐÎ&& Ô 9ÿÿÿíÐÎ&& Ô NÿÿÿìéÎ&& Ô cÿÿÿîÔÎ&& Ô xÿÿÿíÕÎ&& Ô ÿÿÿçÛÎ&& Ô ¢ÿÿÿïÐÎ& & Ê ·ÿÿÿîÐÎ& & Ê ÌÿÿÿèéÎ&& Ô áÿÿÿèãÎ& & Þ öÿÿÿééÎ& & Ê ÿÿÿçÔÎ& & Þ ÿÿÿçâÎ& & Ê 5ÿÿÿçâÎ&& Ô JÿÿÿëÐÎ& & Ê _ÿÿÿìÕÎ&& Ô tÿÿÿíØÎ& & Ê ‰ÿÿÿçÜÎ&& Ô žÿÿÿëÐÎ&õ èÿÿÿëÐÎ&& û |ÿÿÿëÐÎ&& û ‘ÿÿÿêëÎ&& û ¦ÿÿÿðÕÎ&þ& ñ »ÿÿÿêãÎ&& û ÐÿÿÿçßÎ&&  åÿÿÿïÕÎ&& û úÿÿÿíÕÎ&&  ÿÿÿëÐÎ&&  $ÿÿÿíÐÎ&&  9ÿÿÿíÐÎ&&  NÿÿÿìéÎ&&  cÿÿÿîÔÎ&&  xÿÿÿíÕÎ&&  ÿÿÿçÛÎ&&  ¢ÿÿÿïÐÎ&& û ·ÿÿÿîÐÎ&& û ÌÿÿÿèéÎ&&  áÿÿÿèãÎ&&  öÿÿÿééÎ&& û ÿÿÿçÔÎ&&  ÿÿÿçâÎ&& û 5ÿÿÿçâÎ&&  JÿÿÿëÐÎ&& û _ÿÿÿìÕÎ&&  tÿÿÿíØÎ&& û ‰ÿÿÿçÜÎ&&  žÿÿ ëÅ&ó ÿÿÿëëÏ&& - {ÿÿÿëëÏ&& - ÿÿÿêëÏ&& - ¥ÿÿÿðëÏ&ü& # ºÿÿÿéëÏ&& - ÏÿÿÿçëÏ&& 7 äÿÿÿïëÏ&& - ùÿÿÿíëÏ&& 7 ÿÿÿëëÏ&& 7 #ÿÿÿíëÏ&& 7 8ÿÿÿðëÏ&& 7 MÿÿÿìëÏ&& 7 bÿÿÿíëÏ&& 7 wÿÿÿíëÏ&& 7 ŒÿÿÿçëÏ&& 7 ¡ÿÿÿïëÏ&& - ¶ÿÿÿîëÏ&& - ËÿÿÿèìÏ&& 7 àÿÿÿèëÏ&& A õÿÿÿéëÏ&& - ÿÿÿçëÏ&& A ÿÿÿçëÏ&& - 4ÿÿÿçëÏ&& 7 IÿÿÿëëÏ&& - ^ÿÿÿìëÏ&& 7 sÿÿÿíëÏ&& - ˆÿÿÿçëÏ&& 7 ÿÿÿëëÏ& JôÿÿÿëëÏ&& U {ÿÿÿëëÏ&& U ÿÿÿêëÏ&& U ¥ÿÿÿíëÏ&& N ÈÿÿÿéëÏ&& U ÏÿÿÿçëÏ&& j äÿÿÿïëÏ&& U ùÿÿÿíëÏ&& j ÿÿÿëëÏ&& j #ÿÿÿíëÏ&& j 8ÿÿÿðëÏ&& j MÿÿÿìëÏ&& j bÿÿÿíëÏ&& j wÿÿÿíëÏ&& j ŒÿÿÿçëÏ&& j ¡ÿÿÿïëÏ&& U ¶ÿÿÿîëÏ&& U ËÿÿÿèìÏ&& j àÿÿÿèëÏ&& c õÿÿÿéëÏ&& U ÿÿÿçëÏ&& U ÿÿÿçëÏ&& U 4ÿÿÿçëÏ&& \ IÿÿÿëëÏ&& U ^ÿÿÿìëÏ&& j sÿÿÿíëÏ&& U ˆÿÿÿçëÏ&& \ ÿÿÿëÐÎ&ö qÿÿÿëÐÎ&&  ~ÿÿÿëÐÎ&&  “ÿÿÿêëÎ&&  ¨ÿÿÿðÕÎ&ÿ& x ½ÿÿÿéãÎ&&  ÒÿÿÿçßÎ&& ” çÿÿÿïÕÎ&&  üÿÿÿíÕÎ&& ” ÿÿÿëÐÎ&& ” &ÿÿÿíÐÎ&& ” ;ÿÿÿíÐÎ&& ” PÿÿÿëéÎ&& ” eÿÿÿîÔÎ&& ” zÿÿÿíÖÎ&& ” ÿÿÿçÛÎ&& ” ¤ÿÿÿïÐÎ&&  ¹ÿÿÿîÐÎ&&  ÎÿÿÿêéÎ&& ” ãÿÿÿèãÎ&&  øÿÿÿçéÎ&&  ÿÿÿçÔÎ&&  "ÿÿÿçÞÎ&&  7ÿÿÿíÞÎ&& † LÿÿÿëÐÎ&&  aÿÿÿìÕÎ&& ” vÿÿÿíØÎ&&  ‹ÿÿÿçÜÎ&& †  ÿÿÿëÐÎ&ø ›ÿÿÿëÐÎ& & © ~ÿÿÿëÐÎ& & © “ÿÿÿêëÎ& & © ¨ÿÿÿðÕÎ&& ¢ ½ÿÿÿéãÎ& & © ÒÿÿÿçßÎ&& ¾ çÿÿÿïÕÎ& & © üÿÿÿíÕÎ&& ¾ ÿÿÿëÐÎ&& ¾ &ÿÿÿíÐÎ&& ¾ ;ÿÿÿíÐÎ&& ¾ PÿÿÿëéÎ&& ¾ eÿÿÿîÔÎ&& ¾ zÿÿÿíÖÎ&& ¾ ÿÿÿçÛÎ&& ¾ ¤ÿÿÿïÐÎ& & © ¹ÿÿÿîÐÎ& & © ÎÿÿÿêéÎ&& ¾ ãÿÿÿèãÎ& & · øÿÿÿçéÎ& & © ÿÿÿçÔÎ& & · "ÿÿÿçÞÎ& & © 7ÿÿÿíÞÎ&& ° LÿÿÿëÐÎ& & © aÿÿÿìÕÎ&& ¾ vÿÿÿíØÎ& & © ‹ÿÿÿçÜÎ&& °  ÿÿÿëÐÎ&ö ÅÿÿÿëÐÎ&& Ó }ÿÿÿëÐÎ&& Ó ’ÿÿÿêëÎ&& Ó §ÿÿÿðÕÎ&ÿ& Ì ¼ÿÿÿéãÎ&& Ó ÑÿÿÿçßÎ&& è æÿÿÿïÕÎ&& Ó ûÿÿÿíÕÎ&& è ÿÿÿëÐÎ&& è %ÿÿÿíÐÎ&& è :ÿÿÿíÐÎ&& è OÿÿÿëèÎ&& è dÿÿÿîÔÎ&& è yÿÿÿíÖÎ&& è ŽÿÿÿçÛÎ&& è £ÿÿÿïÐÎ&& Ó ¸ÿÿÿîÐÎ&& Ó ÍÿÿÿêéÎ&& è âÿÿÿèãÎ&& á ÷ÿÿÿçéÎ&& Ó ÿÿÿçÔÎ&& á !ÿÿÿçÞÎ&& Ó 6ÿÿÿçÞÎ&& Ú KÿÿÿëÐÎ&& Ó `ÿÿÿìÕÎ&& è uÿÿÿíØÎ&& Ó ŠÿÿÿçÖÎ&& Ú ŸÿÿÿíëÏ&ô ïÿÿÿëëÏ&& ý {ÿÿÿëëÏ&& ý ÿÿÿêëÏ&& ý ¥ÿÿÿðëÏ&ý& ö ºÿÿÿéëÏ&& ý ÏÿÿÿçëÏ&&  äÿÿÿïëÏ&& ý ùÿÿÿíëÏ&&  ÿÿÿëëÏ&&  #ÿÿÿíëÏ&&  8ÿÿÿðëÏ&&  MÿÿÿìëÏ&&  bÿÿÿíëÏ&&  wÿÿÿíëÏ&&  ŒÿÿÿçëÏ&&  ¡ÿÿÿïëÏ&& ý ¶ÿÿÿîëÏ&& ý ËÿÿÿèìÏ&&  àÿÿÿèëÏ&&  õÿÿÿéëÏ&& ý ÿÿÿçëÏ&&  ÿÿÿçëÏ&& ý 4ÿÿÿçëÏ&&  IÿÿÿëëÏ&& ý ^ÿÿÿìëÏ&&  sÿÿÿíëÏ&& ý ˆÿÿÿçëÏ&&  ÿÿ ëÅ&ó ÿÿÿëëÏ&& & {ÿÿÿëëÏ&& & ÿÿÿêëÏ&& & ¥ÿÿÿíëÏ&& & ÈÿÿÿéëÏ&& & ÏÿÿÿçëÏ&& ; äÿÿÿïëÏ&& & ùÿÿÿíëÏ& & ;ÿÿÿëëÏ&& ; #ÿÿÿíëÏ&& ; 8ÿÿÿðëÏ&& ; MÿÿÿìëÏ&& ; bÿÿÿíëÏ&& ; wÿÿÿíëÏ&& ; ŒÿÿÿçëÏ&& ; ¡ÿÿÿïëÏ&& & ¶ÿÿÿîëÏ&& & ËÿÿÿèìÏ&& ; àÿÿÿèëÏ&& 4 õÿÿÿéëÏ&& & ÿÿÿçëÏ&& & -ÿÿÿçëÏ&& & 4ÿÿÿçëÏ&& - IÿÿÿëëÏ&& & ^ÿÿÿìëÏ&& ; sÿÿÿíëÏ&& & ˆÿÿÿçëÏ&& - ÿÿÿëÐÎ&õ BÿÿÿëÐÎ&& O |ÿÿÿëÐÎ&& O ‘ÿÿÿêëÎ&& O ¦ÿÿÿðÕÎ&þ& H »ÿÿÿêãÎ&& O ÐÿÿÿçßÎ&& d åÿÿÿïÕÎ&& O úÿÿÿíÕÎ&& d ÿÿÿëÐÎ&& d $ÿÿÿíÐÎ&& d 9ÿÿÿíÐÎ&& d NÿÿÿìéÎ&& d cÿÿÿîÔÎ&& d xÿÿÿíÕÎ&& d ÿÿÿçÛÎ&& d ¢ÿÿÿïÐÎ&& O ·ÿÿÿîÐÎ&& O ÌÿÿÿèéÎ&& d áÿÿÿèãÎ&& ] öÿÿÿééÎ&& O ÿÿÿçÔÎ&& ] ÿÿÿçâÎ&& O 5ÿÿÿçâÎ&& V JÿÿÿëÐÎ&& O _ÿÿÿìÕÎ&& d tÿÿÿíØÎ&& O ‰ÿÿÿçÜÎ&& V žÿÿÿëÐÎ& iðÿÿÿëÐÎ&& o yÿÿÿëÐÎ&& o ŽÿÿÿèìÎ&& o £ÿÿÿðÕÎ&ù& l ¸ÿÿÿéãÎ&& o ÍÿÿÿçßÎ& & u âÿÿÿïÕÎ&& o ÷ÿÿÿíÕÎ& & u ÿÿÿëÐÎ& & u !ÿÿÿíÐÎ& & u 6ÿÿÿíÐÎ& & u KÿÿÿìéÎ& & u `ÿÿÿíÔÎ& & u uÿÿÿíÕÎ& & u ŠÿÿÿçÛÎ& & u ŸÿÿÿïÐÎ&& ´ oÿÿÿîÐÎ&& o ÉÿÿÿèìÎ& & u ÞÿÿÿèãÎ&& r óÿÿÿééÎ&& o ÿÿÿçÔÎ&& r ÿÿÿçÞÎ&& o 2ÿÿÿçÞÎ& & o GÿÿÿëÐÎ&& o \ÿÿÿìÕÎ& & u qÿÿÿíØÎ&& o †ÿÿÿçÖÎ& & o ›ÿÿÿëöÎ&UÿÿÿëõÎ&&&[ xÿÿÿëõÎ&&&[ ÿÿÿèõÎ&&&[ ¢ÿÿÿðöÎ&X& ·ÿÿÿêõÎ&&&[ ÌÿÿÿçõÎ&/&a áÿÿÿïõÎ&&&[ öÿÿÿíõÎ&/&[ ÿÿÿëõÎ&/&a ÿÿÿíõÎ&/&a 5ÿÿÿíõÎ&/&a JÿÿÿìõÎ&/&a _ÿÿÿíõÎ&/&a tÿÿÿíõÎ&/&a ‰ÿÿÿçõÎ&/&a žÿÿÿïõÎ&[&/ ³ÿÿÿîõÎ&[&/ ÈÿÿÿèõÎ&/&a ÝÿÿÿèöÎ&&&^ òÿÿÿéõÎ&&&[ ÿÿÿçõÎ&&&` ÿÿÿçõÎ&&&[ 1ÿÿÿçõÎ&/&[ FÿÿÿëõÎ&&&[ [ÿÿÿìõÎ&/&a pÿÿÿíõÎ&&&[ …ÿÿÿçõÎ&/&[ šÿÿÿëÐÎ&dÿÿÿëÐÎ&(&j zÿÿÿëÐÎ&(&j ÿÿÿèìÎ&(&j ¤ÿÿÿðÕÎ&&g ¹ÿÿÿéãÎ&(&j ÎÿÿÿçßÎ&1&p ãÿÿÿïÕÎ&(&j øÿÿÿíÕÎ&1&p ÿÿÿëÐÎ&1&p "ÿÿÿíÐÎ&1&p 7ÿÿÿíÐÎ&1&p LÿÿÿìéÎ&1&p aÿÿÿíÔÎ&1&p vÿÿÿíÕÎ&1&p ‹ÿÿÿçÛÎ&1&p  ÿÿÿïÐÎ&(&j µÿÿÿîÐÎ&(&j ÊÿÿÿèìÎ&1&p ßÿÿÿèàÎ&(&m ôÿÿÿééÎ&(&j ÿÿÿçÔÎ&(&m ÿÿÿçÞÎ&(&j 3ÿÿÿçÞÎ&1&j HÿÿÿëÐÎ&(&j ]ÿÿÿìÕÎ&1&p rÿÿÿíØÎ&(&j ‡ÿÿÿçÜÎ&1&j œÿÿÿëöÎ&sÿÿÿëöÎ&&&y xÿÿÿëöÎ&&&y ÿÿÿèöÎ&&&y ¢ÿÿÿðöÎ&&v ·ÿÿÿêöÎ&&&y ÌÿÿÿçöÎ&/& áÿÿÿïöÎ&&&y öÿÿÿíöÎ&/& ÿÿÿëöÎ&/& ÿÿÿíöÎ&/& 5ÿÿÿíöÎ&/& JÿÿÿìöÎ&/& _ÿÿÿíöÎ&/& tÿÿÿíöÎ&/& ‰ÿÿÿçöÎ&/& žÿÿÿïöÎ&&&y ³ÿÿÿîöÎ&&&y ÈÿÿÿèöÎ&/& ÝÿÿÿèöÎ&&&| òÿÿÿéöÎ&&&y ÿÿÿçöÎ&&&| ÿÿÿçöÎ&&&y 1ÿÿÿçöÎ&/&y FÿÿÿëöÎ&&&y [ÿÿÿìöÎ&/& pÿÿÿíöÎ&&&y …ÿÿÿçöÎ&/&y šÿÿÿëÐÎ&‚ÿÿÿëÐÎ&(&ˆ zÿÿÿëÐÎ&(&ˆ ÿÿÿèìÎ&(&ˆ ¤ÿÿÿðÕÎ&&… ¹ÿÿÿéãÎ&(&ˆ ÎÿÿÿçßÎ&1&Ž ãÿÿÿïÕÎ&(&ˆ øÿÿÿíÕÎ&1&Ž ÿÿÿëÐÎ&1&Ž "ÿÿÿíÐÎ&1&Ž 7ÿÿÿíÐÎ&1&Ž LÿÿÿìéÎ&1&Ž aÿÿÿíÔÎ&1&Ž vÿÿÿíÕÎ&1&Ž ‹ÿÿÿçÛÎ&1&Ž  ÿÿÿïÐÎ&(&ˆ µÿÿÿîÐÎ&(&ˆ ÊÿÿÿèìÎ&1&Ž ßÿÿÿèàÎ&(&‹ ôÿÿÿééÎ&(&ˆ ÿÿÿçÔÎ&(&‹ ÿÿÿçÞÎ&(&ˆ 3ÿÿÿçÞÎ&1&ˆ HÿÿÿëÐÎ&(&ˆ ]ÿÿÿìÕÎ&1&Ž rÿÿÿíØÎ&(&ˆ ‡ÿÿÿçÜÎ&1&ˆ œÿÿÿëÐÎ&”ÿÿÿëÐÎ&'&© yÿÿÿëÐÎ&'&© ŽÿÿÿèìÎ&'&© £ÿÿÿðÕÎ&'&ž ¸ÿÿÿéãÎ&'&© ÍÿÿÿçßÎ&0&³ âÿÿÿïÕÎ&'&© ÷ÿÿÿíÕÎ&0&³ ÿÿÿëÐÎ&0&³ !ÿÿÿíÐÎ&0&³ 6ÿÿÿíÐÎ&0&³ KÿÿÿìéÎ&0&³ `ÿÿÿíÔÎ&0&³ uÿÿÿíÕÎ&0&³ ŠÿÿÿçÛÎ&0&³ ŸÿÿÿïÐÎ&'&© ´ÿÿÿîÐÎ&'&© ÉÿÿÿèìÎ&0&³ ÞÿÿÿèãÎ&'&½ óÿÿÿééÎ&'&© ÿÿÿçÔÎ&'&½ ÿÿÿçÞÎ&'&© 2ÿÿÿçÞÎ&0&³ GÿÿÿëÐÎ&'&© \ÿÿÿìÕÎ&0&³ qÿÿÿíØÎ&'&© †ÿÿÿçÖÎ&0&³ ›ÿÿÿëÐÎ&ÄÿÿÿëÐÎ&(&Ù zÿÿÿëÐÎ&(&Ù ÿÿÿèìÎ&(&Ù ¤ÿÿÿðÕÎ&&Ï ¹ÿÿÿéãÎ&(&Ù ÎÿÿÿçßÎ&1&ã ãÿÿÿïÕÎ&(&Ù øÿÿÿíÕÎ&1&ã ÿÿÿëÐÎ&1&ã "ÿÿÿíÐÎ&1&ã 7ÿÿÿíÐÎ&1&ã LÿÿÿìéÎ&1&ã aÿÿÿíÔÎ&1&ã vÿÿÿíÕÎ&1&ã ‹ÿÿÿçÛÎ&1&ã  ÿÿÿïÐÎ&(&Ù µÿÿÿîÐÎ&(&Ù ÊÿÿÿèìÎ&1&ã ßÿÿÿèàÎ&(&í ôÿÿÿééÎ&(&Ù ÿÿÿçÔÎ&(&í ÿÿÿçÞÎ&(&Ù 3ÿÿÿçÞÎ&1&ã HÿÿÿëÐÎ&(&Ù ]ÿÿÿìÕÎ&1&ã rÿÿÿíØÎ&(&Ù ‡ÿÿÿçÜÎ&1&ã œÿÿÿëÐÎ&÷ÿÿÿëÐÎ&'&  yÿÿÿëÐÎ&'&  ŽÿÿÿèìÎ&'&  £ÿÿÿðÕÎ&&ÿ ¸ÿÿÿéãÎ&'&  ÍÿÿÿçßÎ&0&  âÿÿÿïÕÎ&'&  ÷ÿÿÿíÕÎ&0&  ÿÿÿëÐÎ&0&  !ÿÿÿíÐÎ&0&  6ÿÿÿíÐÎ&0&  KÿÿÿìéÎ&0&  `ÿÿÿíÔÎ&0&  uÿÿÿíÕÎ&0&  ŠÿÿÿçÛÎ&0&  ŸÿÿÿïÐÎ&'&  ´ÿÿÿîÐÎ&'&  ÉÿÿÿèìÎ&0&  ÞÿÿÿèãÎ&'&  óÿÿÿééÎ&'&  ÿÿÿçÔÎ&'&  ÿÿÿçÞÎ&'&  2ÿÿÿçÞÎ&0&  GÿÿÿëÐÎ&'&  \ÿÿÿìÕÎ&0&  qÿÿÿíØÎ&'&  †ÿÿÿçÖÎ&0&  ›ÿÿÿëÐÎ& &ÿÿÿëÐÎ&(& : zÿÿÿëÐÎ&(& : ÿÿÿèìÎ&(& : ¤ÿÿÿðÕÎ&& 0 ¹ÿÿÿéãÎ&(& : ÎÿÿÿçßÎ&1& D ãÿÿÿïÕÎ&(& : øÿÿÿíÕÎ&1& D ÿÿÿëÐÎ&1& D "ÿÿÿíÐÎ&1& D 7ÿÿÿíÐÎ&1& D LÿÿÿìéÎ&1& D aÿÿÿíÔÎ&1& D vÿÿÿíÕÎ&1& D ‹ÿÿÿçÛÎ&1& D  ÿÿÿïÐÎ&(& : µÿÿÿîÐÎ&(& : ÊÿÿÿèìÎ&1& D ßÿÿÿèàÎ&(& N ôÿÿÿééÎ&(& : ÿÿÿçÔÎ&(& N ÿÿÿçÞÎ&(& : 3ÿÿÿçÞÎ&1& D HÿÿÿëÐÎ&(& : ]ÿÿÿìÕÎ&1& D rÿÿÿíØÎ&(& : ‡ÿÿÿçÜÎ&1& D œÿÿ ê½& VÿÿÿëêÉ&)& h {ÿÿÿëêÉ&)& h ÿÿÿêêÉ&)& h ¥ÿÿÿðêÉ& & ^ ºÿÿÿéêÉ&)& h ÏÿÿÿçêÉ&2& r äÿÿÿïêÉ&)& h ùÿÿÿíêÉ& &2 rÿÿÿëêÉ&2& r #ÿÿÿíêÉ&2& r 8ÿÿÿðêÉ&2& r MÿÿÿìêÉ&2& r bÿÿÿíêÉ&2& r wÿÿÿíêÉ&2& r ŒÿÿÿçêÉ&2& r ¡ÿÿÿïêÉ&)& h ¶ÿÿÿîêÉ&)& h ËÿÿÿèìÉ&2& r àÿÿÿèêÉ&)& { õÿÿÿéêÉ&)& h ÿÿÿçêÉ&)& h ÿÿÿçêÉ&)& h 4ÿÿÿçêÉ&2& r IÿÿÿëêÉ&)& h ^ÿÿÿìêÉ&2& r sÿÿÿíêÉ&)& h ˆÿÿÿçêÉ&2& r ÿÿÿëöÎ& …ÿÿÿëöÎ&+& ™ |ÿÿÿëöÎ&+& ™ ‘ÿÿÿêöÎ&+& ™ ¦ÿÿÿðöÎ&"&  »ÿÿÿêöÎ&+& ™ ÐÿÿÿçöÎ&4& £ åÿÿÿïöÎ&+& ™ úÿÿÿíöÎ&4& £ ÿÿÿëöÎ&4& £ $ÿÿÿíöÎ&4& £ 9ÿÿÿíöÎ&4& £ NÿÿÿìöÎ&4& £ cÿÿÿîöÎ&4& £ xÿÿÿíöÎ&4& £ ÿÿÿçöÎ&4& £ ¢ÿÿÿïöÎ&+& ™ ·ÿÿÿîöÎ&+& ™ ÌÿÿÿèöÎ&4& £ áÿÿÿèöÎ&+& ­ öÿÿÿéöÎ&+& ™ ÿÿÿçöÎ&+& ­ ÿÿÿçöÎ&+& ™ 5ÿÿÿçöÎ&4& £ JÿÿÿëöÎ&+& ™ _ÿÿÿìöÎ&4& £ tÿÿÿíöÎ&+& ™ ‰ÿÿÿçöÎ&4& £ žÿÿÿëÐÎ& ·ÿÿÿëÐÎ&-& Ë |ÿÿÿëÐÎ&-& Ë ‘ÿÿÿêëÎ&-& Ë ¦ÿÿÿðÕÎ&$& Á »ÿÿÿêãÎ&-& Ë ÐÿÿÿçßÎ&6& Õ åÿÿÿïÕÎ&-& Ë úÿÿÿíÕÎ&6& Õ ÿÿÿëÐÎ&6& Õ $ÿÿÿíÐÎ&6& Õ 9ÿÿÿíÐÎ&6& Õ NÿÿÿìéÎ&6& Õ cÿÿÿîÔÎ&6& Õ xÿÿÿíÕÎ&6& Õ ÿÿÿçÛÎ&6& Õ ¢ÿÿÿïÐÎ&-& Ë ·ÿÿÿîÐÎ&-& Ë ÌÿÿÿèéÎ&6& Õ áÿÿÿèãÎ&-& ß öÿÿÿééÎ&-& Ë ÿÿÿçÔÎ&-& ß ÿÿÿçâÎ&-& Ë 5ÿÿÿçâÎ&6& Õ JÿÿÿëÐÎ&-& Ë _ÿÿÿìÕÎ&6& Õ tÿÿÿíØÎ&-& Ë ‰ÿÿÿçÜÎ&6& Õ žÿÿÿëÐÎ& èÿÿÿëÐÎ&+& ü |ÿÿÿëÐÎ&+& ü ‘ÿÿÿêëÎ&+& ü ¦ÿÿÿðÕÎ& ñ& »#ÿÿÿêãÎ&+& ü ÐÿÿÿçßÎ&4&  åÿÿÿïÕÎ&+& ü úÿÿÿíÕÎ& &4 ÿÿÿëÐÎ&4&  $ÿÿÿíÐÎ&4&  9ÿÿÿíÐÎ&4&  NÿÿÿìéÎ&4&  cÿÿÿîÔÎ&4&  xÿÿÿíÕÎ&4&  ÿÿÿçÛÎ&4&  ¢ÿÿÿïÐÎ&+& ü ·ÿÿÿîÐÎ&+& ü ÌÿÿÿèéÎ&4&  áÿÿÿèãÎ&+&  öÿÿÿééÎ&+& ü ÿÿÿçÔÎ&+&  ÿÿÿçâÎ&+& ü 5ÿÿÿçâÎ&4&  JÿÿÿëÐÎ&+& ü _ÿÿÿìÕÎ&4&  tÿÿÿíØÎ&+& ü ‰ÿÿÿçÜÎ&4&  žÿÿ ë½& ÿÿÿëëÉ&)& . {ÿÿÿëëÉ&)& . ÿÿÿêëÉ&)& . ¥ÿÿÿðëÉ& & $ ºÿÿÿéëÉ&)& . ÏÿÿÿçëÉ&2& 8 äÿÿÿïëÉ&)& . ùÿÿÿíëÉ&2& 8 ÿÿÿëëÉ&2& 8 #ÿÿÿíëÉ&2& 8 8ÿÿÿðëÉ&2& 8 MÿÿÿìëÉ&2& 8 bÿÿÿíëÉ&2& 8 wÿÿÿíëÉ&2& 8 ŒÿÿÿçëÉ&2& 8 ¡ÿÿÿïëÉ&)& . ¶ÿÿÿîëÉ&)& . ËÿÿÿèìÉ&2& 8 àÿÿÿèëÉ&)& B õÿÿÿéëÉ&)& . ÿÿÿçëÉ&)& B ÿÿÿçëÉ&)& . 4ÿÿÿçëÉ&2& 8 IÿÿÿëëÉ&)& . ^ÿÿÿìëÉ&2& 8 sÿÿÿíëÉ&)& . ˆÿÿÿçëÉ&2& 8 ÿÿÿëëÉ& JÿÿÿëëÉ&*& V {ÿÿÿëëÉ&*& V ÿÿÿêëÉ&*& V ¥ÿÿÿðëÉ&!& Q ºÿÿÿéëÉ&*& V ÏÿÿÿçëÉ&3& k äÿÿÿïëÉ&*& V ùÿÿÿíëÉ&3& k ÿÿÿëëÉ&3& k #ÿÿÿíëÉ&3& k 8ÿÿÿðëÉ&3& k MÿÿÿìëÉ&3& k bÿÿÿíëÉ&3& k wÿÿÿíëÉ&3& k ŒÿÿÿçëÉ&3& k ¡ÿÿÿïëÉ&*& V ¶ÿÿÿîëÉ&*& V ËÿÿÿèìÉ&3& k àÿÿÿèëÉ&*& d õÿÿÿéëÉ&*& V ÿÿÿçëÉ& &* VÿÿÿçëÉ&*& V 4ÿÿÿçëÉ&3& ] IÿÿÿëëÉ&*& V ^ÿÿÿìëÉ&3& k sÿÿÿíëÉ&*& V ˆÿÿÿçëÉ&3& ] ÿÿÿëÐÎ& rÿÿÿëÐÎ&,& € ~ÿÿÿëÐÎ&,& € “ÿÿÿêëÎ&,& € ¨ÿÿÿðÕÎ&#& y ½ÿÿÿéãÎ&,& € ÒÿÿÿçßÎ&5& • çÿÿÿïÕÎ&,& € üÿÿÿíÕÎ&5& • ÿÿÿëÐÎ&5& • &ÿÿÿíÐÎ&5& • ;ÿÿÿíÐÎ&5& • PÿÿÿëéÎ&5& • eÿÿÿîÔÎ&5& • zÿÿÿíÖÎ&5& • ÿÿÿçÛÎ&5& • ¤ÿÿÿïÐÎ&,& € ¹ÿÿÿîÐÎ&,& € ÎÿÿÿêéÎ&5& • ãÿÿÿèãÎ&,& Ž øÿÿÿçéÎ&,& € ÿÿÿçÔÎ&,& Ž "ÿÿÿçÞÎ&,& € 7ÿÿÿíÞÎ&5& ‡ LÿÿÿëÐÎ&,& € aÿÿÿìÕÎ&5& • vÿÿÿíØÎ&,& € ‹ÿÿÿçÜÎ&5& ‡  ÿÿÿëÐÎ& œÿÿÿëÐÎ&.& ª ~ÿÿÿëÐÎ&.& ª “ÿÿÿêëÎ&.& ª ¨ÿÿÿðÕÎ&%& £ ½ÿÿÿéãÎ&.& ª ÒÿÿÿçßÎ&7& ¿ çÿÿÿïÕÎ&.& ª üÿÿÿíÕÎ&7& ¿ ÿÿÿëÐÎ&7& ¿ &ÿÿÿíÐÎ&7& ¿ ;ÿÿÿíÐÎ&7& ¿ PÿÿÿëéÎ&7& ¿ eÿÿÿîÔÎ&7& ¿ zÿÿÿíÖÎ&7& ¿ ÿÿÿçÛÎ&7& ¿ ¤ÿÿÿïÐÎ&.& ª ¹ÿÿÿîÐÎ&.& ª ÎÿÿÿêéÎ&7& ¿ ãÿÿÿèãÎ&.& ¸ øÿÿÿçéÎ&.& ª ÿÿÿçÔÎ&.& ¸ "ÿÿÿçÞÎ&.& ª 7ÿÿÿíÞÎ&7& ± LÿÿÿëÐÎ&.& ª aÿÿÿìÕÎ&7& ¿ vÿÿÿíØÎ&.& ª ‹ÿÿÿçÜÎ&7& ±  ÿÿÿëÐÎ& ÆÿÿÿëÐÎ&,& Ô }ÿÿÿëÐÎ&,& Ô ’ÿÿÿêëÎ&,& Ô §ÿÿÿðÕÎ&#& Í ¼ÿÿÿéãÎ&,& Ô ÑÿÿÿçßÎ&5& é æÿÿÿïÕÎ&,& Ô ûÿÿÿíÕÎ&5& é ÿÿÿëÐÎ&5& é %ÿÿÿíÐÎ&5& é :ÿÿÿíÐÎ&5& é OÿÿÿëèÎ&5& é dÿÿÿîÔÎ&5& é yÿÿÿíÖÎ&5& é ŽÿÿÿçÛÎ&5& é £ÿÿÿïÐÎ&,& Ô ¸ÿÿÿîÐÎ&,& Ô ÍÿÿÿêéÎ&5& é âÿÿÿèãÎ&,& â ÷ÿÿÿçéÎ&,& Ô ÿÿÿçÔÎ&,& â !ÿÿÿçÞÎ&,& Ô 6ÿÿÿçÞÎ&5& Û KÿÿÿëÐÎ&,& Ô `ÿÿÿìÕÎ&5& é uÿÿÿíØÎ&,& Ô ŠÿÿÿçÖÎ&5& Û ŸÿÿÿíëÉ& ðÿÿÿëëÉ&*& þ {ÿÿÿëëÉ&*& þ ÿÿÿêëÉ&*& þ ¥ÿÿÿðëÉ&!& ÷ ºÿÿÿéëÉ&*& þ ÏÿÿÿçëÉ&3&  äÿÿÿïëÉ&*& þ ùÿÿÿíëÉ&3&  ÿÿÿëëÉ&3&  #ÿÿÿíëÉ&3&  8ÿÿÿðëÉ&3&  MÿÿÿìëÉ&3&  bÿÿÿíëÉ&3&  wÿÿÿíëÉ&3&  ŒÿÿÿçëÉ&3&  ¡ÿÿÿïëÉ&*& þ ¶ÿÿÿîëÉ&*& þ ËÿÿÿèìÉ&3&  àÿÿÿèëÉ&*&  õÿÿÿéëÉ&*& þ ÿÿÿçëÉ&*&  ÿÿÿçëÉ&*& þ 4ÿÿÿçëÉ&3&  IÿÿÿëëÉ&*& þ ^ÿÿÿìëÉ&3&  sÿÿÿíëÉ&*& þ ˆÿÿÿçëÉ&3&  ÿÿ ë½& ÿÿÿëëÉ&!& ' {ÿÿÿëëÉ&)& ' ÿÿÿêëÉ&)& ' ¥ÿÿÿðëÉ&!& º ÿÿÿéëÉ&)& ' ÏÿÿÿçëÉ&2& < äÿÿÿïëÉ&!& ù 'ÿÿÿíëÉ& <& 3ÿÿÿëëÉ&2& < #ÿÿÿíëÉ&2& < 8ÿÿÿðëÉ&2& < MÿÿÿìëÉ&2& < bÿÿÿíëÉ&2& < wÿÿÿíëÉ&2& < ŒÿÿÿçëÉ&2& < ¡ÿÿÿïëÉ&)& ' ¶ÿÿÿîëÉ&)& ' ËÿÿÿèìÉ&2& < àÿÿÿèëÉ&)& 5 õÿÿÿéëÉ&)& ' ÿÿÿçëÉ&)& 5 ÿÿÿçëÉ&)& ' 4ÿÿÿçëÉ&2& . IÿÿÿëëÉ&)& ' ^ÿÿÿìëÉ&2& < sÿÿÿíëÉ&)& ' ˆÿÿÿçëÉ&2& . ÿÿÿëÐÎ& CÿÿÿëÐÎ&+& P |ÿÿÿëÐÎ&+& P ‘ÿÿÿêëÎ&+& P ¦ÿÿÿðÕÎ&"& I »ÿÿÿêãÎ&+& P ÐÿÿÿçßÎ&4& e åÿÿÿïÕÎ&+& P úÿÿÿíÕÎ&4& e ÿÿÿëÐÎ&4& e $ÿÿÿíÐÎ&4& e 9ÿÿÿíÐÎ&4& e NÿÿÿìéÎ&4& e cÿÿÿîÔÎ&4& e xÿÿÿíÕÎ&4& e ÿÿÿçÛÎ&4& e ¢ÿÿÿïÐÎ&+& P ·ÿÿÿîÐÎ&+& P ÌÿÿÿèéÎ&4& e áÿÿÿèãÎ&+& ^ öÿÿÿééÎ&+& P ÿÿÿçÔÎ&+& ^ ÿÿÿçâÎ&+& P 5ÿÿÿçâÎ&4& W JÿÿÿëÐÎ&+& P _ÿÿÿìÕÎ&4& e tÿÿÿíØÎ&+& P ‰ÿÿÿçÜÎ&4& W žÿÿÿëÐÎ& iÿÿÿëÐÎ&&& o yÿÿÿëÐÎ&&& o ŽÿÿÿèìÎ&&& o £ÿÿÿðÕÎ&& l ¸ÿÿÿéãÎ&&& o ÍÿÿÿçßÎ&/& u âÿÿÿïÕÎ&&& o ÷ÿÿÿíÕÎ&/& u ÿÿÿëÐÎ&/& u !ÿÿÿíÐÎ&/& u 6ÿÿÿíÐÎ&/& u KÿÿÿìéÎ&/& u `ÿÿÿíÔÎ&/& u uÿÿÿíÕÎ&/& u ŠÿÿÿçÛÎ&/& u ŸÿÿÿïÐÎ&&& o ´ÿÿÿîÐÎ&&& o ÉÿÿÿèìÎ&/& u ÞÿÿÿèãÎ&&& r óÿÿÿééÎ&&& o ÿÿÿçÔÎ&&& r ÿÿÿçÞÎ&&& o 2ÿÿÿçÞÎ&/& o GÿÿÿëÐÎ&&& o \ÿÿÿìÕÎ&/& u qÿÿÿíØÎ&&& o †ÿÿÿçÖÎ&/& o ›ÿÿÿëöÎ&9VÿÿÿëõÎ&J&\ xÿÿÿëõÎ&J&\ ÿÿÿèõÎ&J&\ ¢ÿÿÿðöÎ&A&Y ·ÿÿÿêõÎ&J&\ ÌÿÿÿçõÎ&S&b áÿÿÿïõÎ&J&\ öÿÿÿíõÎ&S&b ÿÿÿëõÎ&S&b ÿÿÿíõÎ&S&b 5ÿÿÿíõÎ&S&b JÿÿÿìõÎ&S&b _ÿÿÿíõÎ&S&b tÿÿÿíõÎ&S&b ‰ÿÿÿçõÎ&S&b žÿÿÿïõÎ&J&\ ³ÿÿÿîõÎ&J&\ ÈÿÿÿèõÎ&S&b ÝÿÿÿèõÎ&J&_ òÿÿÿéõÎ&J&\ ÿÿÿçõÎ&_& *JÿÿÿçõÎ&J&\ 1ÿÿÿçõÎ&S&\ FÿÿÿëõÎ&J&\ [ÿÿÿìõÎ&S&b pÿÿÿíõÎ&J&\ …ÿÿÿçõÎ&S&\ šÿÿÿëÑÎ&e:ÿÿÿëÐÎ&L&k zÿÿÿëÐÎ&L&k ÿÿÿèìÎ&L&k ¤ÿÿÿðÕÎ&C&h ¹ÿÿÿéãÎ&L&k ÎÿÿÿçßÎ&U&q ãÿÿÿïÕÎ&L&k øÿÿÿíÕÎ&U&q ÿÿÿëÑÎ&U&q "ÿÿÿíÑÎ&U&q 7ÿÿÿíÑÎ&U&q LÿÿÿìéÎ&U&q aÿÿÿíÔÎ&U&q vÿÿÿíÕÎ&U&q ‹ÿÿÿçÛÎ&U&q  ÿÿÿïÐÎ&L&k µÿÿÿîÐÎ&L&k ÊÿÿÿèìÎ&U&q ßÿÿÿèàÍ&L&n ôÿÿÿééÎ&L&k ÿÿÿçÔÍ&L&n ÿÿÿçÞÎ&L&k 3ÿÿÿçÞÎ&U&k HÿÿÿëÐÎ&L&k ]ÿÿÿìÕÎ&U&q rÿÿÿíØÎ&L&k ‡ÿÿÿçÜÎ&U&k œÿÿÿëöÎ&8tÿÿÿëöÎ&J&z xÿÿÿëöÎ&J&z ÿÿÿèöÎ&J&z ¢ÿÿÿðöÎ&A&w ·ÿÿÿêöÎ&J&z ÌÿÿÿçöÎ&S&€ áÿÿÿïöÎ&J&z öÿÿÿíöÎ&S&€ ÿÿÿëöÎ&S&€ ÿÿÿíöÎ&S&€ 5ÿÿÿíöÎ&S&€ JÿÿÿìöÎ&S&€ _ÿÿÿíöÎ&S&€ tÿÿÿíöÎ&S&€ ‰ÿÿÿçöÎ&S&€ žÿÿÿïöÎ&J&z ³ÿÿÿîöÎ&J&z ÈÿÿÿèöÎ&S&€ ÝÿÿÿèöÎ&J&} òÿÿÿéöÎ&J&z ÿÿÿçöÎ&J&} ÿÿÿçöÎ&J&z 1ÿÿÿçöÎ&S&z FÿÿÿëöÎ&J&z [ÿÿÿìöÎ&S&€ pÿÿÿíöÎ&J&z …ÿÿÿçöÎ&S&z šÿÿÿëÐÎ&:ƒÿÿÿëÐÎ&L&‰ zÿÿÿëÐÎ&L&‰ ÿÿÿèìÎ&L&‰ ¤ÿÿÿðÕÎ&C&† ¹ÿÿÿéãÎ&L&‰ ÎÿÿÿçßÎ&U& ãÿÿÿïÕÎ&L&‰ øÿÿÿíÕÎ&U& ÿÿÿëÐÎ&U& "ÿÿÿíÐÎ&U& 7ÿÿÿíÐÎ&U& LÿÿÿìéÎ&U& aÿÿÿíÔÎ&U& vÿÿÿíÕÎ&U& ‹ÿÿÿçÛÎ&U&  ÿÿÿïÐÎ&L&‰ µÿÿÿîÐÎ&L&‰ ÊÿÿÿèìÎ&U& ßÿÿÿèàÎ&L&Œ ôÿÿÿééÎ&L&‰ ÿÿÿçÔÎ&L&Œ ÿÿÿçÞÎ&L&‰ 3ÿÿÿçÞÎ&U&‰ HÿÿÿëÐÎ&L&‰ ]ÿÿÿìÕÎ&U& rÿÿÿíØÎ&L&‰ ‡ÿÿÿçÜÎ&U&‰ œÿÿÿëÐÎ&9“ÿÿÿëÐÎ&K&¦ yÿÿÿëÐÎ&K&¦ ŽÿÿÿèìÎ&K&¦ £ÿÿÿðÕÎ&B& ¸ÿÿÿéãÎ&K&¦ ÍÿÿÿçßÎ&T&° âÿÿÿïÕÎ&K&¦ ÷ÿÿÿíÕÎ&¤& KÿÿÿëÐÎ&T&° !ÿÿÿíÐÎ&T&° 6ÿÿÿíÐÎ&T&° KÿÿÿìéÎ&T&° `ÿÿÿíÔÎ&T&° uÿÿÿíÕÎ&T&° ŠÿÿÿçÛÎ&T&° ŸÿÿÿïÐÎ&K&¦ ´ÿÿÿîÐÎ&K&¦ ÉÿÿÿèìÎ&T&° ÞÿÿÿèãÎ&K&º óÿÿÿééÎ&K&¦ ÿÿÿçÔÎ&K&º ÿÿÿçÞÎ&K&¦ 2ÿÿÿçÞÎ&T&° GÿÿÿëÐÎ&K&¦ \ÿÿÿìÕÎ&T&° qÿÿÿíØÎ&K&¦ †ÿÿÿçÖÎ&T&° ›ÿÿÿëÐÎ&:ÃÿÿÿëÐÎ&L&Ö zÿÿÿëÐÎ&L&Ö ÿÿÿèìÎ&L&Ö ¤ÿÿÿðÕÎ&C&Ì ¹ÿÿÿéãÎ&L&Ö ÎÿÿÿçßÎ&U&à ãÿÿÿïÕÎ&L&Ö øÿÿÿíÕÎ&U&à ÿÿÿëÐÎ&U&à "ÿÿÿíÐÎ&U&à 7ÿÿÿíÐÎ&U&à LÿÿÿìéÎ&U&à aÿÿÿíÔÎ&U&à vÿÿÿíÕÎ&U&à ‹ÿÿÿçÛÎ&U&à  ÿÿÿïÐÎ&L&Ö µÿÿÿîÐÎ&L&Ö ÊÿÿÿèìÎ&U&à ßÿÿÿèàÎ&L&ê ôÿÿÿééÎ&L&Ö ÿÿÿçÔÎ&L&ê ÿÿÿçÞÎ&L&Ö 3ÿÿÿçÞÎ&U&à HÿÿÿëÐÎ&L&Ö ]ÿÿÿìÕÎ&U&à rÿÿÿíØÎ&L&Ö ‡ÿÿÿçÜÎ&U&à œÿÿÿëÐÎ&9ôÿÿÿëÐÎ&K&  yÿÿÿëÐÎ&K&  ŽÿÿÿèìÎ&K&  £ÿÿÿðÕÎ&B&þ ¸ÿÿÿéãÎ&K&  ÍÿÿÿçßÎ&T&  âÿÿÿïÕÎ&K&  ÷ÿÿÿíÕÎ&T&  ÿÿÿëÐÎ&T&  !ÿÿÿíÐÎ&T&  6ÿÿÿíÐÎ&T&  KÿÿÿìéÎ&T&  `ÿÿÿíÔÎ&T&  uÿÿÿíÕÎ&T&  ŠÿÿÿçÛÎ&T&  ŸÿÿÿïÐÎ&K&  ´ÿÿÿîÐÎ&K&  ÉÿÿÿèìÎ&T&  ÞÿÿÿèãÎ&K&  óÿÿÿééÎ&K&  ÿÿÿçÔÎ&K&  ÿÿÿçÞÎ&K&  2ÿÿÿçÞÎ&T&  GÿÿÿëÐÎ&K&  \ÿÿÿìÕÎ&T&  qÿÿÿíØÎ&K&  †ÿÿÿçÖÎ&T&  ›ÿÿÿëÐÎ&: #ÿÿÿëÐÎ&L& 7 zÿÿÿëÐÎ&L& 7 ÿÿÿèìÎ&L& 7 ¤ÿÿÿðÕÎ&C& - ¹ÿÿÿéãÎ&L& 7 ÎÿÿÿçßÎ&U& A ãÿÿÿïÕÎ&L& 7 øÿÿÿíÕÎ&U& A ÿÿÿëÐÎ&U& A "ÿÿÿíÐÎ&U& A 7ÿÿÿíÐÎ&U& A LÿÿÿìéÎ&U& A aÿÿÿíÔÎ&U& A vÿÿÿíÕÎ&U& A ‹ÿÿÿçÛÎ&U& A  ÿÿÿïÐÎ&L& 7 µÿÿÿîÐÎ&L& 7 ÊÿÿÿèìÎ&U& A ßÿÿÿèàÎ&L& K ôÿÿÿééÎ&L& 7 ÿÿÿçÔÎ&L& K ÿÿÿçÞÎ&L& 7 3ÿÿÿçÞÎ&U& A HÿÿÿëÐÎ&L& 7 ]ÿÿÿìÕÎ&U& A rÿÿÿíØÎ&L& 7 ‡ÿÿÿçÜÎ&U& A œÿÿ ê½&; UÿÿÿëêÊ&M& h {ÿÿÿëêÊ&M& h ÿÿÿêêÊ&M& h ¥ÿÿÿðêÊ&D& ^ ºÿÿÿéêÊ&M& h ÏÿÿÿçêÉ&V& r äÿÿÿïêÊ&M& h ùÿÿÿíêÉ&V& r ÿÿÿëêÉ&V& r #ÿÿÿíêÉ&V& r 8ÿÿÿðêÉ&V& r MÿÿÿìêÉ&V& r bÿÿÿíêÉ&V& r wÿÿÿíêÉ&V& r ŒÿÿÿçêÉ&V& r ¡ÿÿÿïêÊ&M& h ¶ÿÿÿîêÊ&M& h ËÿÿÿèìÉ&V& r àÿÿÿèêÊ&M& { õÿÿÿéêÊ&M& h ÿÿÿçêÊ&M& { ÿÿÿçêÊ&M& h 4ÿÿÿçêÉ&V& r IÿÿÿëêÊ&M& h ^ÿÿÿìêÉ&V& r sÿÿÿíêÊ&M& h ˆÿÿÿçêÉ&V& r ÿÿÿëöÎ&= …ÿÿÿëöÎ&O& ™ |ÿÿÿëöÎ&O& ™ ‘ÿÿÿêöÎ&O& ™ ¦ÿÿÿðöÎ&F&  »ÿÿÿêöÎ&O& ™ ÐÿÿÿçöÎ&X& £ åÿÿÿïöÎ&O& ™ úÿÿÿíöÎ&X& £ ÿÿÿëöÎ&X& £ $ÿÿÿíöÎ&X& £ 9ÿÿÿíöÎ&X& £ NÿÿÿìöÎ&X& £ cÿÿÿîöÎ&X& £ xÿÿÿíöÎ&X& £ ÿÿÿçöÎ&X& £ ¢ÿÿÿïöÎ&O& ™ ·ÿÿÿîöÎ&O& ™ ÌÿÿÿèöÎ&X& £ áÿÿÿèöÎ&O& ­ öÿÿÿéöÎ&O& ™ ÿÿÿçöÎ&O& ­ ÿÿÿçöÎ&O& ™ 5ÿÿÿçöÎ&X& £ JÿÿÿëöÎ&O& ™ _ÿÿÿìöÎ&X& £ tÿÿÿíöÎ&O& ™ ‰ÿÿÿçöÎ&X& £ žÿÿÿëÐÎ&? ·ÿÿÿëÐÎ&Q& Ë |ÿÿÿëÐÎ&Q& Ë ‘ÿÿÿêëÎ&Q& Ë ¦ÿÿÿðÕÎ&H& Á »ÿÿÿêãÎ&Q& Ë ÐÿÿÿçßÎ&Z& Õ åÿÿÿïÕÎ&Q& Ë úÿÿÿíÕÎ&Z& Õ ÿÿÿëÐÎ&Z& Õ $ÿÿÿíÐÎ&Z& Õ 9ÿÿÿíÐÎ&Z& Õ NÿÿÿìéÎ&Z& Õ cÿÿÿîÔÎ&Z& Õ xÿÿÿíÕÎ&Z& Õ ÿÿÿçÛÎ&Z& Õ ¢ÿÿÿïÐÎ&Q& Ë ·ÿÿÿîÐÎ&Q& Ë ÌÿÿÿèéÎ&Z& Õ áÿÿÿèãÎ&Q& ß öÿÿÿééÎ&Q& Ë ÿÿÿçÔÎ&Q& ß ÿÿÿçâÎ&Q& Ë 5ÿÿÿçâÎ&Z& Õ JÿÿÿëÐÎ&Q& Ë _ÿÿÿìÕÎ&Z& Õ tÿÿÿíØÎ&Q& Ë ‰ÿÿÿçÜÎ&Z& Õ žÿÿÿëÐÎ&= éÿÿÿëÐÎ&O& ü |ÿÿÿëÐÎ&O& ü ‘ÿÿÿêëÎ&O& ü ¦ÿÿÿðÕÎ&F& ò »ÿÿÿêãÎ&O& ü ÐÿÿÿçßÎ&X&  åÿÿÿïÕÎ&O& ü úÿÿÿíÕÎ&X&  ÿÿÿëÐÎ&X&  $ÿÿÿíÐÎ&X&  9ÿÿÿíÐÎ&X&  NÿÿÿìéÎ&X&  cÿÿÿîÔÎ&X&  xÿÿÿíÕÎ&X&  ÿÿÿçÛÎ&X&  ¢ÿÿÿïÐÎ&O& ü ·ÿÿÿîÐÎ&O& ü ÌÿÿÿèéÎ&X&  áÿÿÿèãÎ&O&  öÿÿÿééÎ&O& ü ÿÿÿçÔÎ&O&  ÿÿÿçâÎ&O& ü 5ÿÿÿçâÎ&X&  JÿÿÿëÐÎ&O& ü _ÿÿÿìÕÎ&X&  tÿÿÿíØÎ&O& ü ‰ÿÿÿçÜÎ&X&  žÿÿ ë½&; ÿÿÿëëÊ&M& . {ÿÿÿëëÊ&M& . ÿÿÿêëÊ&M& . ¥ÿÿÿðëÊ&D& $ ºÿÿÿéëÊ&M& . ÏÿÿÿçëÉ&V& 8 äÿÿÿïëÊ&M& . ùÿÿÿíëÉ&V& 8 ÿÿÿëëÉ&V& 8 #ÿÿÿíëÉ&V& 8 8ÿÿÿðëÉ&V& 8 MÿÿÿìëÉ&V& 8 bÿÿÿíëÉ&V& 8 wÿÿÿíëÉ&V& 8 ŒÿÿÿçëÉ&V& 8 ¡ÿÿÿïëÊ&M& . ¶ÿÿÿîëÊ&M& . ËÿÿÿèìÉ&V& 8 àÿÿÿèëÊ&M& B õÿÿÿéëÊ&M& . ÿÿÿçëÊ&M& B ÿÿÿçëÊ&M& . 4ÿÿÿçëÉ&V& 8 IÿÿÿëëÊ&M& . ^ÿÿÿìëÉ&V& 8 sÿÿÿíëÊ&M& . ˆÿÿÿçëÉ&V& 8 ÿÿÿëëÊ&< IÿÿÿëëÊ&N& T {ÿÿÿëëÊ&N& T ÿÿÿêëÊ&N& T ¥ÿÿÿðëÊ&E& O ºÿÿÿéëÊ&N& T ÏÿÿÿçëÉ&W& i äÿÿÿïëÊ&N& T ùÿÿÿíëÉ&W& i ÿÿÿëëÉ&W& i #ÿÿÿíëÉ&W& i 8ÿÿÿðëÉ&W& i MÿÿÿìëÉ&W& i bÿÿÿíëÉ&W& i wÿÿÿíëÉ&W& i ŒÿÿÿçëÉ&W& i ¡ÿÿÿïëÊ&N& T ¶ÿÿÿîëÊ&N& T ËÿÿÿèìÉ&W& i àÿÿÿèëÊ&N& b õÿÿÿéëÊ&N& T ÿÿÿçëÊ&N& T ÿÿÿçëÊ&N& T 4ÿÿÿçëÉ&W& [ IÿÿÿëëÊ&N& T ^ÿÿÿìëÉ&W& i sÿÿÿíëÊ&N& T ˆÿÿÿçëÉ&W& [ ÿÿÿëÐÎ&> pÿÿÿëÐÎ&P& ~ ~ÿÿÿëÐÎ&P& ~ “ÿÿÿêëÎ&P& ~ ¨ÿÿÿðÕÎ&G& w ½ÿÿÿéãÎ&P& ~ ÒÿÿÿçßÎ&Y& “ çÿÿÿïÕÎ&P& ~ üÿÿÿíÕÎ&Y& “ ÿÿÿëÐÎ&Y& “ &ÿÿÿíÐÎ&Y& “ ;ÿÿÿíÐÎ&Y& “ PÿÿÿëéÎ&Y& “ eÿÿÿîÔÎ&Y& “ zÿÿÿíÖÎ&Y& “ ÿÿÿçÛÎ&Y& “ ¤ÿÿÿïÐÎ&P& ~ ¹ÿÿÿîÐÎ&P& ~ ÎÿÿÿêéÎ&Y& “ ãÿÿÿèãÎ&P& Œ øÿÿÿçéÎ&P& ~ ÿÿÿçÔÎ&P& Œ "ÿÿÿçÞÎ&P& ~ 7ÿÿÿíÞÎ&Y& … LÿÿÿëÐÎ&P& ~ aÿÿÿìÕÎ&Y& “ vÿÿÿíØÎ&P& ~ ‹ÿÿÿçÜÎ&Y& …  ÿÿÿëÐÎ&@ šÿÿÿëÐÎ&R& ¨ ~ÿÿÿëÐÎ&R& ¨ “ÿÿÿêëÎ&R& ¨ ¨ÿÿÿðÕÎ&I& ¡ ½ÿÿÿéãÎ&R& ¨ ÒÿÿÿçßÎ&[& ½ çÿÿÿïÕÎ&R& ¨ üÿÿÿíÕÎ&[& ½ ÿÿÿëÐÎ&[& ½ &ÿÿÿíÐÎ&[& ½ ;ÿÿÿíÐÎ&[& ½ PÿÿÿëéÎ&[& ½ eÿÿÿîÔÎ&[& ½ zÿÿÿíÖÎ&[& ½ ÿÿÿçÛÎ&[& ½ ¤ÿÿÿïÐÎ&R& ¨ ¹ÿÿÿîÐÎ&R& ¨ ÎÿÿÿêéÎ&[& ½ ãÿÿÿèãÎ&R& ¶ øÿÿÿçéÎ&R& ¨ ÿÿÿçÔÎ&R& ¶ "ÿÿÿçÞÎ&R& ¨ 7ÿÿÿíÞÎ&[& ¯ LÿÿÿëÐÎ&R& ¨ aÿÿÿìÕÎ&[& ½ vÿÿÿíØÎ&R& ¨ ‹ÿÿÿçÜÎ&[& ¯  ÿÿÿëÐÎ&> ÄÿÿÿëÐÎ&P& Ò }ÿÿÿëÐÎ&P& Ò ’ÿÿÿêëÎ&P& Ò §ÿÿÿðÕÎ&G& Ë ¼ÿÿÿéãÎ&P& Ò ÑÿÿÿçßÎ&Y& ç æÿÿÿïÕÎ&P& Ò ûÿÿÿíÕÎ&Y& ç ÿÿÿëÐÎ&Y& ç %ÿÿÿíÐÎ&Y& ç :ÿÿÿíÐÎ&Y& ç OÿÿÿëèÎ&Y& ç dÿÿÿîÔÎ&Y& ç yÿÿÿíÖÎ&Y& ç ŽÿÿÿçÛÎ&Y& ç £ÿÿÿïÐÎ&P& Ò ¸ÿÿÿîÐÎ&P& Ò ÍÿÿÿêéÎ&Y& ç âÿÿÿèãÎ&P& à ÷ÿÿÿçéÎ&P& Ò ÿÿÿçÔÎ&P& à !ÿÿÿçÞÎ&P& Ò 6ÿÿÿçÞÎ&Y& Ù KÿÿÿëÐÎ&P& Ò `ÿÿÿìÕÎ&Y& ç uÿÿÿíØÎ&P& Ò ŠÿÿÿçÖÎ&Y& Ù ŸÿÿÿíëÊ&< îÿÿÿëëÊ&N& ü {ÿÿÿëëÊ&N& ü ÿÿÿêëÊ&N& ü ¥ÿÿÿðëÊ&E& õ ºÿÿÿéëÊ&N& ü ÏÿÿÿçëÉ&W&  äÿÿÿïëÊ&N& ü ùÿÿÿíëÉ&W&  ÿÿÿëëÉ&W&  #ÿÿÿíëÉ&W&  8ÿÿÿðëÉ&W&  MÿÿÿìëÉ&W&  bÿÿÿíëÉ&W&  wÿÿÿíëÉ&W&  ŒÿÿÿçëÉ&W&  ¡ÿÿÿïëÊ&N& ü ¶ÿÿÿîëÊ&N& ü ËÿÿÿèìÉ&W&  àÿÿÿèëÊ&N&  õÿÿÿéëÊ&N& ü ÿÿÿçëÊ&N&  ÿÿÿçëÊ&N& ü 4ÿÿÿçëÉ&W&  IÿÿÿëëÊ&N& ü ^ÿÿÿìëÉ&W&  sÿÿÿíëÊ&N& ü ˆÿÿÿçëÉ&W&  ÿÿ ë½&; ÿÿÿëëÊ& %& {MÿÿÿëëÊ&M& % ÿÿÿêëÊ&M& % ¥ÿÿÿðëÊ&D&  ºÿÿÿéëÊ&M& % ÏÿÿÿçëÉ&V& : äÿÿÿïëÊ&M& % ùÿÿÿíëÉ&V& : ÿÿÿëëÉ&V& : #ÿÿÿíëÉ&V& : 8ÿÿÿðëÉ&V& : MÿÿÿìëÉ&V& : bÿÿÿíëÉ&V& : wÿÿÿíëÉ&V& : ŒÿÿÿçëÉ&V& : ¡ÿÿÿïëÊ&M& % ¶ÿÿÿîëÊ&M& % ËÿÿÿèìÉ&V& : àÿÿÿèëÊ& 3& õMÿÿÿéëÊ&M& % ÿÿÿçëÊ&M& 3 ÿÿÿçëÊ&M& % 4ÿÿÿçëÉ&V& , IÿÿÿëëÊ&M& % ^ÿÿÿìëÉ&V& : sÿÿÿíëÊ&M& % ˆÿÿÿçëÉ&V& , ÿÿÿëÐÎ&= AÿÿÿëÐÎ&O& N |ÿÿÿëÐÎ&O& N ‘ÿÿÿêëÎ&O& N ¦ÿÿÿðÕÎ&F& G »ÿÿÿêãÎ&O& N ÐÿÿÿçßÎ&X& c åÿÿÿïÕÎ&O& N úÿÿÿíÕÎ&X& c ÿÿÿëÐÎ&X& c $ÿÿÿíÐÎ&X& c 9ÿÿÿíÐÎ&X& c NÿÿÿìéÎ&X& c cÿÿÿîÔÎ&X& c xÿÿÿíÕÎ&X& c ÿÿÿçÛÎ&X& c ¢ÿÿÿïÐÎ&O& N ·ÿÿÿîÐÎ&O& N ÌÿÿÿèéÎ&X& c áÿÿÿèãÎ&O& \ öÿÿÿééÎ&O& N ÿÿÿçÔÎ&O& \ ÿÿÿçâÎ&O& N 5ÿÿÿçâÎ&X& U JÿÿÿëÐÎ&O& N _ÿÿÿìÕÎ&X& c tÿÿÿíØÎ&O& N ‰ÿÿÿçÜÎ&X& U žÿÿÿëÐÎ&8 jÿÿÿëÐÎ&J& p yÿÿÿëÐÎ&J& p ŽÿÿÿèìÎ&J& p £ÿÿÿðÕÎ&A& m ¸ÿÿÿéãÎ&J& p ÍÿÿÿçßÎ&S& v âÿÿÿïÕÎ&J& p ÷ÿÿÿíÕÎ&S& v ÿÿÿëÐÎ&S& v !ÿÿÿíÐÎ&S& v 6ÿÿÿíÐÎ&S& v KÿÿÿìéÎ&S& v `ÿÿÿíÔÎ&S& v uÿÿÿíÕÎ&S& v ŠÿÿÿçÛÎ&S& v ŸÿÿÿïÐÎ&J& p ´ÿÿÿîÐÎ&J& p ÉÿÿÿèìÎ&S& v ÞÿÿÿèãÎ&J& s óÿÿÿééÎ&J& p ÿÿÿçÔÎ&J& s ÿÿÿçÞÎ&J& p 2ÿÿÿçÞÎ&S& p GÿÿÿëÐÎ&J& p \ÿÿÿìÕÎ&S& v qÿÿÿíØÎ&J& p †ÿÿÿçÖÎ&S& p ›ÿÿÿëöÎ&U\ÿÿÿëõÎ&[& ymÿÿÿëõÎ&m&[ ÿÿÿèõÎ&m&[ ¢ÿÿÿðöÎ&e& ·XÿÿÿêõÎ&m&[ ÌÿÿÿçõÎ&v&a áÿÿÿïõÎ&m&[ öÿÿÿíõÎ&v&a ÿÿÿëõÎ&v&a ÿÿÿíõÎ&v&a 5ÿÿÿíõÎ&v&a JÿÿÿìõÎ&v&a _ÿÿÿíõÎ&v&a tÿÿÿíõÎ&v&a ‰ÿÿÿçõÎ&v&a žÿÿÿïõÎ&[&m ³ÿÿÿîõÎ&m&[ ÈÿÿÿèõÎ&v&a ÝÿÿÿèöÎ&m&^ òÿÿÿéõÎ&m&[ ÿÿÿçöÎ&m&^ ÿÿÿçõÎ&m&[ 1ÿÿÿçõÎ&v&[ FÿÿÿëõÎ&m&[ [ÿÿÿìõÎ&v&a pÿÿÿíõÎ&m&[ …ÿÿÿçõÎ&v&[ šÿÿÿëÐÎ&d^ÿÿÿëÐÎ&o&j zÿÿÿëÐÎ&o&j ÿÿÿèìÎ&o&j ¤ÿÿÿðÕÎ&f&g ¹ÿÿÿéãÎ&o&j ÎÿÿÿçßÎ&x&p ãÿÿÿïÕÎ&o&j øÿÿÿíÕÎ&x&p ÿÿÿëÐÎ&x&p "ÿÿÿíÐÎ&x&p 7ÿÿÿíÐÎ&x&p LÿÿÿìéÎ&x&p aÿÿÿíÔÎ&x&p vÿÿÿíÕÎ&x&p ‹ÿÿÿçÛÎ&x&p  ÿÿÿïÐÎ&o&j µÿÿÿîÐÎ&o&j ÊÿÿÿèìÎ&x&p ßÿÿÿèàÎ&o&m ôÿÿÿééÎ&o&j ÿÿÿçÔÎ&o&m ÿÿÿçÞÎ&o&j 3ÿÿÿçÞÎ&x&j HÿÿÿëÐÎ&o&j ]ÿÿÿìÕÎ&x&p rÿÿÿíØÎ&o&j ‡ÿÿÿçÜÎ&x&j œÿÿÿëöÎ&\sÿÿÿëöÎ&m& yyÿÿÿëöÎ&m&y ÿÿÿèöÎ&m&y ¢ÿÿÿðöÎ&e&v ·ÿÿÿêöÎ&m&y ÌÿÿÿçöÎ&v& áÿÿÿïöÎ&m&y öÿÿÿíöÎ&v& ÿÿÿëöÎ&v& ÿÿÿíöÎ&v& 5ÿÿÿíöÎ&v& JÿÿÿìöÎ&v& _ÿÿÿíöÎ&v& tÿÿÿíöÎ&v& ‰ÿÿÿçöÎ&v& žÿÿÿïöÎ&m&y ³ÿÿÿîöÎ&m&y ÈÿÿÿèöÎ&v& ÝÿÿÿèöÎ&m&| òÿÿÿéöÎ&m&y ÿÿÿçöÎ&m&| ÿÿÿçöÎ&m&y 1ÿÿÿçöÎ&v&y FÿÿÿëöÎ&m&y [ÿÿÿìöÎ&v& pÿÿÿíöÎ&m&y …ÿÿÿçöÎ&v&y šÿÿÿëÐÎ&^‚ÿÿÿëÐÎ&o&ˆ zÿÿÿëÐÎ&o&ˆ ÿÿÿèìÎ&o&ˆ ¤ÿÿÿðÕÎ&f&… ¹ÿÿÿéãÎ&o&ˆ ÎÿÿÿçßÎ&x&Ž ãÿÿÿïÕÎ&o&ˆ øÿÿÿíÕÎ&x&Ž ÿÿÿëÐÎ&x&Ž "ÿÿÿíÐÎ&x&Ž 7ÿÿÿíÐÎ&x&Ž LÿÿÿìéÎ&x&Ž aÿÿÿíÔÎ&x&Ž vÿÿÿíÕÎ&x&Ž ‹ÿÿÿçÛÎ&x&Ž  ÿÿÿïÐÎ&o&ˆ µÿÿÿîÐÎ&o&ˆ ÊÿÿÿèìÎ&x&Ž ßÿÿÿèàÎ&o&‹ ôÿÿÿééÎ&o&ˆ ÿÿÿçÔÎ&o&‹ ÿÿÿçÞÎ&o&ˆ 3ÿÿÿçÞÎ&x&ˆ HÿÿÿëÐÎ&o&ˆ ]ÿÿÿìÕÎ&x&Ž rÿÿÿíØÎ&o&ˆ ‡ÿÿÿçÜÎ&x&ˆ œÿÿÿëÐÎ&]šÿÿÿëÐÎ&n&¬ yÿÿÿëÐÎ&n&¬ ŽÿÿÿèìÎ&n&¬ £ÿÿÿðÕÍ& ¸&e ÿÿÿéãÎ&n&¬ ÍÿÿÿçßÎ&w&¶ âÿÿÿïÕÎ&n&¬ ÷ÿÿÿíÕÎ&w&¶ ÿÿÿëÐÎ&w&¶ !ÿÿÿíÐÎ&w&¶ 6ÿÿÿíÐÎ&w&¶ KÿÿÿìéÎ&w&¶ `ÿÿÿíÔÎ&w&¶ uÿÿÿíÕÎ&w&¶ ŠÿÿÿçÛÎ&w&¶ ŸÿÿÿïÐÎ&n& ´¬ÿÿÿîÐÎ&¬&n ÉÿÿÿèìÎ&w&¶ ÞÿÿÿèãÎ&n&À óÿÿÿééÎ&n&¬ ÿÿÿçÔÎ&n&À ÿÿÿçÞÎ&n&¬ 2ÿÿÿçÞÎ&w&¶ GÿÿÿëÐÎ&n&¬ \ÿÿÿìÕÎ&w&¶ qÿÿÿíØÎ&n&¬ †ÿÿÿçÜÎ& š&¶wÿÿÿëÐÎ&^ÃÿÿÿëÐÎ&o&Ü zÿÿÿëÐÎ&o&Ü ÿÿÿèìÎ&o&Ü ¤ÿÿÿðÕÎ&f&Ò ¹ÿÿÿéãÎ&o&Ü ÎÿÿÿçßÎ&x&æ ãÿÿÿïÕÎ&o&Ü øÿÿÿíÕÎ&x&æ ÿÿÿëÐÎ&x&æ "ÿÿÿíÐÎ&x&æ 7ÿÿÿíÐÎ&x&æ LÿÿÿìéÎ&x&æ aÿÿÿíÔÎ&x&æ vÿÿÿíÕÎ&x&æ ‹ÿÿÿçÛÎ&x&æ  ÿÿÿïÐÎ&o&Ü µÿÿÿîÐÎ&o&Ü ÊÿÿÿèìÎ&x&æ ßÿÿÿèàÎ&o&ð ôÿÿÿééÎ&o&Ü ÿÿÿçÔÎ&o&ð ÿÿÿçÞÎ&o&Ü 3ÿÿÿçÞÎ&x&æ HÿÿÿëÐÎ&o&Ü ]ÿÿÿìÕÎ&x&æ rÿÿÿíØÎ&o&Ü ‡ÿÿÿçÜÎ&x&æ œÿÿÿëÐÎ&]÷ÿÿÿëÐÎ& &n yÿÿÿëÐÎ&n&  ŽÿÿÿèìÎ&n&  £ÿÿÿðÕÎ&ÿ&f ¹ÿÿÿéãÎ&n&  ÍÿÿÿçßÎ&w&  âÿÿÿïÕÎ&n&  ÷ÿÿÿíÕÎ&w&  ÿÿÿëÐÎ&w&  !ÿÿÿíÐÎ&w&  6ÿÿÿíÐÎ&w&  KÿÿÿìéÎ&w&  `ÿÿÿíÔÎ&w&  uÿÿÿíÕÎ&w&  ŠÿÿÿçÛÎ&w&  ŸÿÿÿïÐÎ&n&  ´ÿÿÿîÐÎ&n&  ÉÿÿÿèìÎ&w&  ÞÿÿÿèãÎ&n&  óÿÿÿééÎ&n&  ÿÿÿçÔÎ&n&  ÿÿÿçÞÎ&n&  2ÿÿÿçÞÎ&w&  GÿÿÿëÐÎ&n&  \ÿÿÿìÕÎ&w&  qÿÿÿíØÎ&n&  †ÿÿÿçÖÎ&w&  ›ÿÿÿëÐÎ&^ &ÿÿÿëÐÎ&o& = zÿÿÿëÐÎ&o& = ÿÿÿèìÎ&o& = ¤ÿÿÿðÕÎ&f& 3 ¹ÿÿÿéãÎ&o& = ÎÿÿÿçßÎ&x& G ãÿÿÿïÕÎ&o& = øÿÿÿíÕÎ&x& G ÿÿÿëÐÎ&x& G "ÿÿÿíÐÎ&x& G 7ÿÿÿíÐÎ&x& G LÿÿÿìéÎ&x& G aÿÿÿíÔÎ&x& G vÿÿÿíÕÎ&x& G ‹ÿÿÿçÛÎ&x& G  ÿÿÿïÐÎ&o& = µÿÿÿîÐÎ&o& = ÊÿÿÿèìÎ&x& G ßÿÿÿèàÎ&o& Q ôÿÿÿééÎ&o& = ÿÿÿçÔÎ&o& Q ÿÿÿçÞÎ&o& = 3ÿÿÿçÞÎ&x& G HÿÿÿëÐÎ&o& = ]ÿÿÿìÕÎ&x& G rÿÿÿíØÎ&o& = ‡ÿÿÿçÜÎ&x& G œÿÿ ê¿&_ WÿÿÿëêÉ&p& m {ÿÿÿëêÉ&p& m ÿÿÿêêÉ&p& m ¥ÿÿÿðêÉ&g& c ºÿÿÿéêÉ&p& m ÏÿÿÿçêÌ&y& w äÿÿÿïêÉ&p& m ùÿÿÿíêÌ&y& w ÿÿÿëêÌ&y& w #ÿÿÿíêÌ&y& w 8ÿÿÿðêÌ&y& w MÿÿÿìêÌ&y& w bÿÿÿíêÌ&y& w wÿÿÿíêÌ&y& w ŒÿÿÿçêÌ&y& w ¡ÿÿÿïêÉ&p& m ¶ÿÿÿîêÉ&p& m ËÿÿÿèìÌ&y& w àÿÿÿèêÉ&p& € õÿÿÿéêÉ&p& m ÿÿÿçêÉ&p& € ÿÿÿçêÉ&p& m 4ÿÿÿçêÌ&y& w IÿÿÿëêÉ&p& m ^ÿÿÿìêÌ&y& w sÿÿÿíêÉ&p& m ˆÿÿÿçêÌ&y& w ÿÿÿëöÎ&a ŠÿÿÿëöÎ&r& ž ƒÿÿÿëöÎ&r& ž ˜ÿÿÿêöÎ&r& ž ­ÿÿÿíöÎ&i& ” ÂÿÿÿéöÎ&r& ž ×ÿÿÿçöÎ&{& ¨ ìÿÿÿíöÎ&r& ž ÿÿÿíöÎ&{& ¨ ÿÿÿëöÎ&{& ¨ +ÿÿÿíöÎ&{& ¨ @ÿÿÿìöÎ&{& ¨ UÿÿÿìöÎ&{& ¨ jÿÿÿîöÎ&{& ¨ ÿÿÿíöÎ&{& ¨ ”ÿÿÿèöÎ&{& ¨ ©ÿÿÿïöÎ&r& ž ¾ÿÿÿîöÎ&r& ž ÓÿÿÿêöÎ&{& ¨ èÿÿÿêöÎ&r& ² ýÿÿÿìöÎ&r& ž ÿÿÿêöÎ&r& ² 'ÿÿÿëöÎ&r& ž <ÿÿÿëöÎ&{& ¨ QÿÿÿëöÎ&r& ž fÿÿÿíöÎ&{& ¨ {ÿÿÿðöÎ&r& ž ÿÿÿçöÎ&{& ¨ ¥ÿÿÿëÐÎ&c ¼ÿÿÿëÐÎ&t& Ð ƒÿÿÿëÐÎ&t& Ð ˜ÿÿÿêëÎ&t& Ð ­ÿÿÿíÕÎ&k& Æ ÂÿÿÿéãÎ&t& Ð ×ÿÿÿçßÎ&}& Ú ìÿÿÿíÕÎ&t& Ð ÿÿÿíÕÎ&}& Ú ÿÿÿëÐÎ&}& Ú +ÿÿÿíÐÎ&}& Ú @ÿÿÿìÐÎ&}& Ú UÿÿÿìéÎ&}& Ú jÿÿÿîÔÎ&}& Ú ÿÿÿíÕÎ&}& Ú ”ÿÿÿèÛÎ&}& Ú ©ÿÿÿïÐÎ&t& Ð ¾ÿÿÿîÐÎ&t& Ð ÓÿÿÿêéÎ&}& Ú èÿÿÿêãÎ&t& ä ýÿÿÿìéÎ&t& Ð ÿÿÿêÔÎ&t& ä 'ÿÿÿëâÎ&t& Ð <ÿÿÿëáÎ&}& Ú QÿÿÿëÐÎ&t& Ð fÿÿÿíÕÎ&}& Ú {ÿÿÿðØÎ&t& Ð ÿÿÿçÜÎ&}& Ú ¥ÿÿÿëÐÎ& íaÿÿÿëÐÎ&r&  ƒÿÿÿëÐÎ&r&  ˜ÿÿÿêëÎ&r&  ­ÿÿÿíÕÎ&i& ÷ ÂÿÿÿéãÎ&r&  ×ÿÿÿçßÎ&{&  ìÿÿÿíÕÎ&r&  ÿÿÿíÕÎ&{&  ÿÿÿëÐÎ&{&  +ÿÿÿíÐÎ&{&  @ÿÿÿìÐÎ&{&  UÿÿÿìéÎ&{&  jÿÿÿîÔÎ&{&  ÿÿÿíÕÎ&{&  ”ÿÿÿèÛÎ&{&  ©ÿÿÿïÐÎ&r&  ¾ÿÿÿîÐÎ&r&  ÓÿÿÿêéÎ&{&  èÿÿÿêãÎ&r&  ýÿÿÿìéÎ&r&  ÿÿÿêÔÎ&r&  'ÿÿÿëâÎ&r&  <ÿÿÿëáÎ&{&  QÿÿÿëÐÎ&r&  fÿÿÿíÕÎ&{&  {ÿÿÿðØÎ&r&  ÿÿÿçÜÎ&{&  ¥ÿÿ ë¿&_ ÿÿÿëëÉ&p& 3 {ÿÿÿëëÉ&p& 3 ÿÿÿêëÉ&p& 3 ¥ÿÿÿðëÉ&g& ) ºÿÿÿéëÉ&p& 3 ÏÿÿÿçëÌ&y& = äÿÿÿïëÉ&p& 3 ùÿÿÿíëÌ&y& = ÿÿÿëëÌ&y& = #ÿÿÿíëÌ&y& = 8ÿÿÿðëÌ&y& = MÿÿÿìëÌ&y& = bÿÿÿíëÌ&y& = wÿÿÿíëÌ&y& = ŒÿÿÿçëÌ&y& = ¡ÿÿÿïëÉ&p& 3 ¶ÿÿÿîëÉ&p& 3 ËÿÿÿèìÌ&y& = àÿÿÿèëÉ&p& G õÿÿÿéëÉ&p& 3 ÿÿÿçëÉ&p& G ÿÿÿçëÉ&p& 3 4ÿÿÿçëÌ&y& = IÿÿÿëëÉ&p& 3 ^ÿÿÿìëÌ&y& = sÿÿÿíëÉ&p& 3 ˆÿÿÿçëÌ&y& = ÿÿÿëëÉ&` KÿÿÿëëÌ& Y&q {ÿÿÿëëÌ&q& Y ÿÿÿêëÌ&q& Y ¥ÿÿÿðëÌ&h& R ºÿÿÿéëÌ&q& Y ÏÿÿÿçëÌ&z& n äÿÿÿïëÌ&q& Y ùÿÿÿíëÌ& &z nÿÿÿëëÌ&z& n #ÿÿÿíëÌ&z& n 8ÿÿÿðëÌ&z& n MÿÿÿìëÌ&z& n bÿÿÿíëÌ&z& n wÿÿÿíëÌ&z& n ŒÿÿÿçëÌ&z& n ¡ÿÿÿïëÌ& Y& ¶qÿÿÿîëÌ&z& Y ËÿÿÿèìÌ&z& n àÿÿÿèëÌ&q& g õÿÿÿéëÌ&q& Y ÿÿÿçëÌ&q& Y ÿÿÿçëÌ&q& Y 4ÿÿÿçëÌ&z& ` IÿÿÿëëÌ&q& Y ^ÿÿÿìëÌ&z& n sÿÿÿíëÌ&q& Y ˆÿÿÿçëÌ&z& ` ÿÿÿëÐÎ&b uÿÿÿëÐÎ&s& ƒ …ÿÿÿëÐÎ&s& ƒ šÿÿÿêëÎ&s& ƒ ¯ÿÿÿíÕÎ&j& | ÄÿÿÿéãÎ&s& ƒ ÙÿÿÿçßÎ&|& ˜ îÿÿÿìÕÎ&s& ƒ ÿÿÿíÕÎ&|& ˜ ÿÿÿëÐÎ&|& ˜ -ÿÿÿíÐÎ&|& ˜ BÿÿÿìÐÎ&|& ˜ WÿÿÿìéÎ&|& ˜ lÿÿÿîÔÎ&|& ˜ ÿÿÿîÕÎ&|& ˜ –ÿÿÿçÛÎ&|& ˜ «ÿÿÿïÐÎ&s& ƒ ÀÿÿÿîÐÎ&s& ƒ ÕÿÿÿêéÎ&|& ˜ êÿÿÿêäÎ&s& ‘ ÿÿÿÿìéÎ&s& ƒ ÿÿÿêÔÎ&s& ‘ )ÿÿÿêÞÎ&s& ƒ >ÿÿÿëÞÎ&|& Š SÿÿÿëÐÎ&s& ƒ hÿÿÿíÕÎ&|& ˜ }ÿÿÿðØÎ&s& ƒ ’ÿÿÿçÜÎ&|& Š §ÿÿÿëÐÎ&d ŸÿÿÿëÐÎ&u& ­ …ÿÿÿëÐÎ&u& ­ šÿÿÿêëÎ&u& ­ ¯ÿÿÿíÕÎ&l& ¦ ÄÿÿÿéãÎ&u& ­ ÙÿÿÿçßÎ&~&  îÿÿÿìÕÎ&u& ­ ÿÿÿíÕÎ&~&  ÿÿÿëÐÎ&~&  -ÿÿÿíÐÎ&~&  BÿÿÿìÐÎ&~&  WÿÿÿìéÎ&~&  lÿÿÿîÔÎ&~&  ÿÿÿîÕÎ&~&  –ÿÿÿçÛÎ&~&  «ÿÿÿïÐÎ&u& ­ ÀÿÿÿîÐÎ&u& ­ ÕÿÿÿêéÎ&~&  êÿÿÿêäÎ&u& » ÿÿÿÿìéÎ&u& ­ ÿÿÿêÔÎ&u& » )ÿÿÿêÞÎ&u& ­ >ÿÿÿëÞÎ&~& ´ SÿÿÿëÐÎ&u& ­ hÿÿÿíÕÎ&~&  }ÿÿÿðØÎ&u& ­ ’ÿÿÿçÜÎ&~& ´ §ÿÿÿëÑÎ&b ÉÿÿÿëÐÎ&s& × „ÿÿÿëÐÎ&s& × ™ÿÿÿêëÎ&s& × ®ÿÿÿíÕÎ&j& Ð ÃÿÿÿéãÎ&s& × ØÿÿÿçßÎ&|& ì íÿÿÿìÕÎ&s& × ÿÿÿíÕÎ&|& ì ÿÿÿëÐÎ&|& ì ,ÿÿÿíÐÎ&|& ì AÿÿÿìÐÎ&|& ì VÿÿÿìéÎ&|& ì kÿÿÿîÔÎ&|& ì €ÿÿÿîÕÎ&|& ì •ÿÿÿèÛÎ&|& ì ªÿÿÿïÐÎ&s& × ¿ÿÿÿîÐÎ&s& × ÔÿÿÿêéÎ&|& ì éÿÿÿêãÎ&s& å þÿÿÿìéÎ&s& × ÿÿÿêÔÎ&s& å (ÿÿÿêÞÎ&s& × =ÿÿÿëÞÎ&|& Þ RÿÿÿëÐÎ&s& × gÿÿÿíÕÎ&|& ì |ÿÿÿðØÎ&s& × ‘ÿÿÿç×Î&|& Þ ¦ÿÿÿíëÉ&` ðÿÿÿëëÌ&q&  {ÿÿÿëëÌ&q&  ÿÿÿêëÌ&q&  ¥ÿÿÿðëÌ&h& ú ºÿÿÿéëÌ&q&  ÏÿÿÿçëÌ&z&  äÿÿÿïëÌ&q&  ùÿÿÿíëÌ&z&  ÿÿÿëëÌ&z&  #ÿÿÿíëÌ&z&  8ÿÿÿðëÌ&z&  MÿÿÿìëÌ&z&  bÿÿÿíëÌ&z&  wÿÿÿíëÌ&z&  ŒÿÿÿçëÌ&z&  ¡ÿÿÿïëÌ&q&  ¶ÿÿÿîëÌ&q&  ËÿÿÿèìÌ&z&  àÿÿÿèëÌ&q&  õÿÿÿéëÌ&q&  ÿÿÿçëÌ&q&  ÿÿÿçëÌ&q&  4ÿÿÿçëÌ&z&  IÿÿÿëëÌ&q&  ^ÿÿÿìëÌ&z&  sÿÿÿíëÌ&q&  ˆÿÿÿçëÌ&z&  ÿÿ ë¿&_ ÿÿÿëëÉ&p& * {ÿÿÿëëÉ&p& * ÿÿÿêëÉ&p& * ¥ÿÿÿðëÌ& & ºhÿÿÿéëÉ&p& * ÏÿÿÿçëÌ&y& ? äÿÿÿïëÉ&p& * ùÿÿÿíëÉ&p&  ?ÿÿÿëëÌ&y& ? #ÿÿÿíëÌ&y& ? 8ÿÿÿðëÌ&y& ? MÿÿÿìëÌ&y& ? bÿÿÿíëÌ&y& ? wÿÿÿíëÌ&y& ? ŒÿÿÿçëÌ&y& ? ¡ÿÿÿïëÉ&p& ¶ 'ÿÿÿîëÉ&p& * ËÿÿÿèìÌ&y& ? àÿÿÿèëÉ&p& * õÿÿÿéëÉ&p& * ÿÿÿçëÉ&p& 8 ÿÿÿçëÉ&p& * 4ÿÿÿçëÌ&y& 1 IÿÿÿëëÉ&p& * ^ÿÿÿìëÌ&y& ? sÿÿÿíëÉ&p& * ˆÿÿÿçëÌ&y& 1 ÿÿÿëÐÎ&a EÿÿÿëÐÎ&r& S ƒÿÿÿëÐÎ&r& S ˜ÿÿÿêëÎ&r& S ­ÿÿÿíÕÎ&i& L ÂÿÿÿéãÎ&r& S ×ÿÿÿçßÎ&{& h ìÿÿÿíÕÎ&r& S ÿÿÿíÕÎ&{& h ÿÿÿëÐÎ&{& h +ÿÿÿíÐÎ&{& h @ÿÿÿìÐÎ&{& h UÿÿÿìéÎ&{& h jÿÿÿîÔÎ&{& h ÿÿÿíÕÎ&{& h ”ÿÿÿèÛÎ&{& h ©ÿÿÿïÐÎ&r& S ¾ÿÿÿîÐÎ&r& S ÓÿÿÿêéÎ&{& h èÿÿÿêãÎ&r& a ýÿÿÿìéÎ&r& S ÿÿÿêÔÎ&r& a 'ÿÿÿëâÎ&r& S <ÿÿÿëáÎ&{& Z QÿÿÿëÐÎ&r& S fÿÿÿíÕÎ&{& h {ÿÿÿðØÎ&r& S ÿÿÿçÜÎ&{& Z ¥ÿÿÿëÐÎ&\ iÿÿÿëÐÎ&m& o yÿÿÿëÐÎ&m& o ŽÿÿÿèìÎ&m& o £ÿÿÿðÕÎ&e& l ¸ÿÿÿéãÎ&m& o ÍÿÿÿçßÎ&v& u âÿÿÿïÕÎ&m& o ÷ÿÿÿíÕÎ&v& u ÿÿÿëÐÎ&v& u !ÿÿÿíÐÎ&v& u 6ÿÿÿíÐÎ&v& u KÿÿÿìéÎ&v& u `ÿÿÿíÔÎ&v& u uÿÿÿíÕÎ&v& u ŠÿÿÿçÛÎ&v& u ŸÿÿÿïÐÎ&m& o ´ÿÿÿîÐÎ&m& o ÉÿÿÿèìÎ&v& u ÞÿÿÿèãÎ&m& r óÿÿÿééÎ&m& o ÿÿÿçÔÎ&m& r ÿÿÿçÞÎ&m& o 2ÿÿÿçÞÎ&v& o GÿÿÿëÐÎ&m& o \ÿÿÿìÕÎ&v& u qÿÿÿíØÎ&m& o †ÿÿÿçÖÎ&v& o ›ÿÿÿëöÎ&UÿÿÿëõÎ&[& xÿÿÿëõÎ&&[ ÿÿÿèõÎ&&[ ¢ÿÿÿðöÎ&&X ·ÿÿÿêõÎ&&[ ÌÿÿÿçõÎ&&[ áÿÿÿïõÎ&&[ öÿÿÿíõÎ&& aÿÿÿëõÎ&™&a ÿÿÿíõÎ&™&a 5ÿÿÿíõÎ&™&a JÿÿÿìõÎ&™&a _ÿÿÿíõÎ&™&a tÿÿÿíõÎ&™&a ‰ÿÿÿçõÎ&™&a žÿÿÿïõÎ&&[ ³ÿÿÿîõÎ&&[ ÈÿÿÿèõÎ&™&a ÝÿÿÿèöÎ&&^ òÿÿÿéõÎ&&[ ÿÿÿçöÎ&&^ ÿÿÿçõÎ&&\ ?ÿÿÿçõÎ&™&[ FÿÿÿëõÎ&&[ [ÿÿÿìõÎ&&a pÿÿÿíõÎ&&[ …ÿÿÿçõÎ&™&[ šÿÿÿëÐÎ&dÿÿÿëÐÎ&j&’ zÿÿÿëÐÎ&’&j ÿÿÿèìÎ&’&j ¤ÿÿÿðÕÎ&‰&g ¹ÿÿÿéãÎ&’&j ÎÿÿÿçßÎ&›&p ãÿÿÿïÕÎ&’&j øÿÿÿíÕÎ&›&p ÿÿÿëÐÎ&›&p "ÿÿÿíÐÎ&›&p 7ÿÿÿíÐÎ&›&p LÿÿÿìéÎ&›&p aÿÿÿíÔÎ&›&p vÿÿÿíÕÎ&›&p ‹ÿÿÿçÛÎ&›&p  ÿÿÿïÐÎ&’&j µÿÿÿîÐÎ&’&j ÊÿÿÿèìÎ&›&p ßÿÿÿèàÎ&’&m ôÿÿÿééÎ&’&j ÿÿÿçÔÎ&’&m ÿÿÿçÞÎ&’&j 3ÿÿÿçÞÎ&›&j HÿÿÿëÐÎ&’&j ]ÿÿÿìÕÎ&›&p rÿÿÿíØÎ&’&j ‡ÿÿÿçÜÎ&›&j œÿÿÿëöÎ&sÿÿÿëöÎ&&y xÿÿÿëöÎ&&y ÿÿÿèöÎ&&y ¢ÿÿÿðöÎ&ˆ&v ·ÿÿÿêöÎ&&y ÌÿÿÿçöÎ&™& áÿÿÿïöÎ&&y öÿÿÿíöÎ&™& ÿÿÿëöÎ&™& ÿÿÿíöÎ&™& 5ÿÿÿíöÎ&™& JÿÿÿìöÎ&™& _ÿÿÿíöÎ&™& tÿÿÿíöÎ&™& ‰ÿÿÿçöÎ&™& žÿÿÿïöÎ&&y ³ÿÿÿîöÎ&&y ÈÿÿÿèöÎ&™& ÝÿÿÿèöÎ&&| òÿÿÿéöÎ&&y ÿÿÿçöÎ&&| ÿÿÿçöÎ&&y 1ÿÿÿçöÎ&™&y FÿÿÿëöÎ&&y [ÿÿÿìöÎ&™& pÿÿÿíöÎ&&y …ÿÿÿçöÎ&™&y šÿÿÿëÐÎ&‚ÿÿÿëÐÎ&’&ˆ zÿÿÿëÐÎ&’&ˆ ÿÿÿèìÎ&’&ˆ ¤ÿÿÿðÕÎ&‰&… ¹ÿÿÿéãÎ&’&ˆ ÎÿÿÿçßÎ&›&Ž ãÿÿÿïÕÎ&’&ˆ øÿÿÿíÕÎ&›&Ž ÿÿÿëÐÎ&›&Ž "ÿÿÿíÐÎ&›&Ž 7ÿÿÿíÐÎ&›&Ž LÿÿÿìéÎ&›&Ž aÿÿÿíÔÎ&›&Ž vÿÿÿíÕÎ&›&Ž ‹ÿÿÿçÛÎ&›&Ž  ÿÿÿïÐÎ&’&ˆ µÿÿÿîÐÎ&’&ˆ ÊÿÿÿèìÎ&›&Ž ßÿÿÿèàÎ&’&‹ ôÿÿÿééÎ&’&ˆ ÿÿÿçÔÎ&’&‹ ÿÿÿçÞÎ&’&ˆ 3ÿÿÿçÞÎ&›&ˆ HÿÿÿëÐÎ&’&ˆ ]ÿÿÿìÕÎ&›&Ž rÿÿÿíØÎ&’&ˆ ‡ÿÿÿçÜÎ&›&ˆ œÿÿÿëÐÎ&€•ÿÿÿëÐÎ&‘&¨ yÿÿÿëÐÎ&‘&¨ ŽÿÿÿèìÎ&‘&¨ £ÿÿÿíÚÍ&ˆ& Æ ÿÿÿéãÎ&‘&¨ ÍÿÿÿçßÎ&š&² âÿÿÿïÕÎ&‘&¨ ÷ÿÿÿíÕÎ&š&² ÿÿÿëÐÎ&š&² !ÿÿÿíÐÎ&š&² 6ÿÿÿíÐÎ&š&² KÿÿÿìéÎ&š&² `ÿÿÿíÔÎ&š&² uÿÿÿíÕÎ&š&² ŠÿÿÿçÛÎ&š&² ŸÿÿÿïÐÎ&‘&¨ ´ÿÿÿîÐÎ&‘&¨ ÉÿÿÿèìÎ&š&² ÞÿÿÿèãÎ&‘&¼ óÿÿÿééÎ&‘&¨ ÿÿÿçÔÎ&‘&¼ ÿÿÿçÞÎ&‘&¨ 2ÿÿÿçÞÎ&š&² GÿÿÿëÐÎ&‘&¨ \ÿÿÿìÕÎ&š&² qÿÿÿíØÎ&‘&¨ †ÿÿÿçÖÎ&š&² ›ÿÿÿëÐÎ&ÅÿÿÿëÐÎ&’&Ø zÿÿÿëÐÎ&’&Ø ÿÿÿèìÎ&’&Ø ¤ÿÿÿðÕÎ&‰&Î ¹ÿÿÿéãÎ&’&Ø ÎÿÿÿçßÎ&›&â ãÿÿÿïÕÎ&’&Ø øÿÿÿíÕÎ&›&â ÿÿÿëÐÎ&›&â "ÿÿÿíÐÎ&›&â 7ÿÿÿíÐÎ&›&â LÿÿÿìéÎ&›&â aÿÿÿíÔÎ&›&â vÿÿÿíÕÎ&›&â ‹ÿÿÿçÛÎ&›&â  ÿÿÿïÐÎ&’&Ø µÿÿÿîÐÎ&’&Ø ÊÿÿÿèìÎ&›&â ßÿÿÿèàÎ&’&ì ôÿÿÿééÎ&’&Ø ÿÿÿçÔÎ&’&ì ÿÿÿçÞÎ&’&Ø 3ÿÿÿçÞÎ&›&â HÿÿÿëÐÎ&’&Ø ]ÿÿÿìÕÎ&›&â rÿÿÿíØÎ&’&Ø ‡ÿÿÿçÜÎ&›&â œÿÿÿëÐÎ&€÷ÿÿÿëÐÎ&‘&  yÿÿÿëÐÎ&‘&  ŽÿÿÿèìÎ&‘&  £ÿÿÿðÕÎ&ÿ& ¸‘ÿÿÿéãÎ&‘&  ÍÿÿÿçßÎ&š&  âÿÿÿïÕÎ&‘&  ÷ÿÿÿíÕÎ&š&  ÿÿÿëÐÎ&š&  !ÿÿÿíÐÎ&š&  6ÿÿÿíÐÎ&š&  KÿÿÿìéÎ&š&  `ÿÿÿíÔÎ&š&  uÿÿÿíÕÎ&š&  ŠÿÿÿçÛÎ&š&  ŸÿÿÿïÐÎ&‘&  ´ÿÿÿîÐÎ&‘&  ÉÿÿÿèìÎ&š&  ÞÿÿÿèãÎ&‘&  óÿÿÿééÎ&‘&  ÿÿÿçÔÎ&‘&  ÿÿÿçÞÎ&‘&  2ÿÿÿçÞÎ&‘&  GÿÿÿëÐÎ&‘&  \ÿÿÿìÕÎ&š&  qÿÿÿíØÎ&‘&  †ÿÿÿçÖÎ&š&  ›ÿÿÿëÐÎ& %ÿÿÿëÐÎ&’& 9 zÿÿÿëÐÎ&’& 9 ÿÿÿèìÎ&’& 9 ¤ÿÿÿðÕÎ&‰& / ¹ÿÿÿéãÎ&’& 9 ÎÿÿÿçßÎ&›& C ãÿÿÿïÕÎ&’& 9 øÿÿÿíÕÎ&›& C ÿÿÿëÐÎ&›& C "ÿÿÿíÐÎ&›& C 7ÿÿÿíÐÎ&›& C LÿÿÿìéÎ&›& C aÿÿÿíÔÎ&›& C vÿÿÿíÕÎ&›& C ‹ÿÿÿçÛÎ&›& C  ÿÿÿïÐÎ&’& 9 µÿÿÿîÐÎ&’& 9 ÊÿÿÿèìÎ&›& C ßÿÿÿèàÎ&’& M ôÿÿÿééÎ&’& 9 ÿÿÿçÔÎ&’& M ÿÿÿçÞÎ&’& 9 3ÿÿÿçÞÎ&›& C HÿÿÿëÐÎ&’& 9 ]ÿÿÿìÕÎ&›& C rÿÿÿíØÎ&’& 9 ‡ÿÿÿçÜÎ&›& C œÿÿ ê½&‚ VÿÿÿëêÉ& h&“ {ÿÿÿëêÉ& h& “ÿÿÿêêÉ&“& h ¥ÿÿÿðêÉ&Š& ^ ºÿÿÿéêÉ&“& h ÏÿÿÿçêÉ&œ& r äÿÿÿïêÉ&“& h ùÿÿÿíêÉ&œ& r ÿÿÿëêÉ&œ& r #ÿÿÿíêÉ&œ& r 8ÿÿÿðêÉ&œ& r MÿÿÿìêÉ&œ& r bÿÿÿíêÉ&œ& r wÿÿÿíêÉ&œ& r ŒÿÿÿçêÉ&œ& r ¡ÿÿÿïêÉ&“& h ¶ÿÿÿîêÉ&“& h ËÿÿÿèìÉ&œ& r àÿÿÿèêÉ& õ& {“ÿÿÿéêÉ&“& h ÿÿÿçêÉ&“& { ÿÿÿçêÉ&“& h 4ÿÿÿçêÉ&œ& r IÿÿÿëêÉ&“& h ^ÿÿÿìêÉ&œ& r sÿÿÿíêÉ&“& h ˆÿÿÿçêÉ&œ& r ÿÿÿëöÎ&„ …ÿÿÿëöÎ&•& ™ |ÿÿÿëöÎ&•& ™ ‘ÿÿÿêöÎ&•& ™ ¦ÿÿÿðöÎ&Œ&  »ÿÿÿêöÎ&•& ™ ÐÿÿÿçöÎ&ž& £ åÿÿÿïöÎ&•& ™ úÿÿÿíöÎ&ž& £ ÿÿÿëöÎ&ž& £ $ÿÿÿíöÎ&ž& £ 9ÿÿÿíöÎ&ž& £ NÿÿÿìöÎ&ž& £ cÿÿÿîöÎ&ž& £ xÿÿÿíöÎ&ž& £ ÿÿÿçöÎ&ž& £ ¢ÿÿÿïöÎ&•& ™ ·ÿÿÿîöÎ&•& ™ ÌÿÿÿèöÎ&ž& £ áÿÿÿèöÎ&•& ­ öÿÿÿéöÎ&•& ™ ÿÿÿçöÎ&•& ­ ÿÿÿçöÎ&•& ™ 5ÿÿÿçöÎ&ž& £ JÿÿÿëöÎ&•& ™ _ÿÿÿìöÎ&ž& £ tÿÿÿíöÎ&•& ™ ‰ÿÿÿçöÎ&ž& £ žÿÿÿëÐÎ&† ·ÿÿÿëÐÎ&—& Ë |ÿÿÿëÐÎ&—& Ë ‘ÿÿÿêëÎ&—& Ë ¦ÿÿÿðÕÎ&Ž& Á »ÿÿÿêãÎ&—& Ë ÐÿÿÿçßÎ& & Õ åÿÿÿïÕÎ&—& Ë úÿÿÿíÕÎ& & Õ ÿÿÿëÐÎ& & Õ $ÿÿÿíÐÎ& & Õ 9ÿÿÿíÐÎ& & Õ NÿÿÿìéÎ& & Õ cÿÿÿîÔÎ& & Õ xÿÿÿíÕÎ& & Õ ÿÿÿçÛÎ& & Õ ¢ÿÿÿïÐÎ&—& Ë ·ÿÿÿîÐÎ&—& Ë ÌÿÿÿèéÎ& & Õ áÿÿÿèãÎ&—& ß öÿÿÿééÎ&—& Ë ÿÿÿçÔÎ&—& ß ÿÿÿçâÎ&—& Ë 5ÿÿÿçâÎ& & Õ JÿÿÿëÐÎ&—& Ë _ÿÿÿìÕÎ& & Õ tÿÿÿíØÎ&—& Ë ‰ÿÿÿçÜÎ& & Õ žÿÿÿëÐÎ&„ éÿÿÿëÐÎ&•& ü |ÿÿÿëÐÎ&•& ü ‘ÿÿÿêëÎ&•& ü ¦ÿÿÿðÕÎ&Œ& ò »ÿÿÿêãÎ&•& ü ÐÿÿÿçßÎ&ž&  åÿÿÿïÕÎ&•& ü úÿÿÿíÕÎ&ž&  ÿÿÿëÐÎ&ž&  $ÿÿÿíÐÎ&ž&  9ÿÿÿíÐÎ&ž&  NÿÿÿìéÎ&ž&  cÿÿÿîÔÎ&ž&  xÿÿÿíÕÎ&ž&  ÿÿÿçÛÎ&ž&  ¢ÿÿÿïÐÎ&•& ü ·ÿÿÿîÐÎ&•& ü ÌÿÿÿèéÎ&ž&  áÿÿÿèãÎ&•&  öÿÿÿééÎ&•& ü ÿÿÿçÔÎ&•&  ÿÿÿçâÎ&•& ü 5ÿÿÿçâÎ&ž&  JÿÿÿëÐÎ&•& ü _ÿÿÿìÕÎ&ž&  tÿÿÿíØÎ&•& ü ‰ÿÿÿçÜÎ&ž&  žÿÿ ë½&‚ ÿÿÿëëÉ&“& . {ÿÿÿëëÉ&“& . ÿÿÿêëÉ&“& . ¥ÿÿÿðëÉ&Š& $ ºÿÿÿéëÉ&“& . ÏÿÿÿçëÉ&œ& 8 äÿÿÿïëÉ&“& . ùÿÿÿíëÉ&œ& 8 ÿÿÿëëÉ&œ& 8 #ÿÿÿíëÉ&œ& 8 8ÿÿÿðëÉ&œ& 8 MÿÿÿìëÉ&œ& 8 bÿÿÿíëÉ&œ& 8 wÿÿÿíëÉ&œ& 8 ŒÿÿÿçëÉ&œ& 8 ¡ÿÿÿïëÉ&“& . ¶ÿÿÿîëÉ&“& . ËÿÿÿèìÉ&œ& 8 àÿÿÿèëÉ&“& B õÿÿÿéëÉ&“& . ÿÿÿçëÉ&“& B ÿÿÿçëÉ&“& . 4ÿÿÿçëÉ&œ& 8 IÿÿÿëëÉ&“& . ^ÿÿÿìëÉ&œ& 8 sÿÿÿíëÉ&“& . ˆÿÿÿçëÉ&œ& 8 ÿÿÿëëÉ&ƒ JÿÿÿëëÉ&”& V {ÿÿÿëëÉ&”& V ÿÿÿêëÉ&”& V ¥ÿÿÿðëÉ& Q& º‹ÿÿÿéëÉ&”& V ÏÿÿÿçëÉ&& k äÿÿÿïëÉ&‹& ù VÿÿÿíëÉ& k& ÿÿÿëëÉ&& k #ÿÿÿíëÉ&& k 8ÿÿÿðëÉ&& k MÿÿÿìëÉ&& k bÿÿÿíëÉ&& k wÿÿÿíëÉ&& k ŒÿÿÿçëÉ&& k ¡ÿÿÿïëÉ&”& V ¶ÿÿÿîëÉ&”& V ËÿÿÿèìÉ&& k àÿÿÿèëÉ&”& d õÿÿÿéëÉ&”& V ÿÿÿçëÉ&”& V ÿÿÿçëÉ&”& V 4ÿÿÿçëÉ&& ] IÿÿÿëëÉ&”& V ^ÿÿÿìëÉ&& k sÿÿÿíëÉ&”& V ˆÿÿÿçëÉ&& ] ÿÿÿëÐÎ&… rÿÿÿëÐÎ&–& € ~ÿÿÿëÐÎ&–& € “ÿÿÿêëÎ&–& € ¨ÿÿÿðÕÎ&& y ½ÿÿÿéãÎ&–& € ÒÿÿÿçßÎ&Ÿ& • çÿÿÿïÕÎ&–& € üÿÿÿíÕÎ&Ÿ& • ÿÿÿëÐÎ&Ÿ& • &ÿÿÿíÐÎ&Ÿ& • ;ÿÿÿíÐÎ&Ÿ& • PÿÿÿëéÎ&Ÿ& • eÿÿÿîÔÎ&Ÿ& • zÿÿÿíÖÎ&Ÿ& • ÿÿÿçÛÎ&Ÿ& • ¤ÿÿÿïÐÎ&–& € ¹ÿÿÿîÐÎ&–& € ÎÿÿÿêéÎ&Ÿ& • ãÿÿÿèãÎ&–& Ž øÿÿÿçéÎ&–& € ÿÿÿçÔÎ&–& Ž "ÿÿÿçÞÎ&–& € 7ÿÿÿíÞÎ&Ÿ& ‡ LÿÿÿëÐÎ&–& € aÿÿÿìÕÎ&Ÿ& • vÿÿÿíØÎ&–& € ‹ÿÿÿçÜÎ&Ÿ& ‡  ÿÿÿëÐÎ&‡ œÿÿÿëÐÎ&˜& ª ~ÿÿÿëÐÎ&˜& ª “ÿÿÿêëÎ&˜& ª ¨ÿÿÿðÕÎ&& £ ½ÿÿÿéãÎ&˜& ª ÒÿÿÿçßÎ&¡& ¿ çÿÿÿïÕÎ&˜& ª üÿÿÿíÕÎ&¡& ¿ ÿÿÿëÐÎ&¡& ¿ &ÿÿÿíÐÎ&¡& ¿ ;ÿÿÿíÐÎ&¡& ¿ PÿÿÿëéÎ&¡& ¿ eÿÿÿîÔÎ&¡& ¿ zÿÿÿíÖÎ&¡& ¿ ÿÿÿçÛÎ&¡& ¿ ¤ÿÿÿïÐÎ&˜& ª ¹ÿÿÿîÐÎ&˜& ª ÎÿÿÿêéÎ&¡& ¿ ãÿÿÿèãÎ&˜& ¸ øÿÿÿçéÎ&˜& ª ÿÿÿçÔÎ&˜& ¸ "ÿÿÿçÞÎ&˜& ª 7ÿÿÿíÞÎ&¡& ± LÿÿÿëÐÎ&˜& ª aÿÿÿìÕÎ&¡& ¿ vÿÿÿíØÎ&˜& ª ‹ÿÿÿçÜÎ&¡& ±  ÿÿÿëÐÎ&… ÆÿÿÿëÐÎ&–& Ô }ÿÿÿëÐÎ&–& Ô ’ÿÿÿêëÎ&–& Ô §ÿÿÿðÕÎ&& Í ¼ÿÿÿéãÎ&–& Ô ÑÿÿÿçßÎ&Ÿ& é æÿÿÿïÕÎ&–& Ô ûÿÿÿíÕÎ&Ÿ& é ÿÿÿëÐÎ&Ÿ& é %ÿÿÿíÐÎ&Ÿ& é :ÿÿÿíÐÎ&Ÿ& é OÿÿÿëèÎ&Ÿ& é dÿÿÿîÔÎ&Ÿ& é yÿÿÿíÖÎ&Ÿ& é ŽÿÿÿçÛÎ&Ÿ& é £ÿÿÿïÐÎ&–& Ô ¸ÿÿÿîÐÎ&–& Ô ÍÿÿÿêéÎ&Ÿ& é âÿÿÿèãÎ&–& â ÷ÿÿÿçéÎ&–& Ô ÿÿÿçÔÎ&–& â !ÿÿÿçÞÎ&–& Ô 6ÿÿÿçÞÎ&Ÿ& Û KÿÿÿëÐÎ&–& Ô `ÿÿÿìÕÎ&Ÿ& é uÿÿÿíØÎ&–& Ô ŠÿÿÿçÖÎ&Ÿ& Û ŸÿÿÿíëÉ&ƒ ðÿÿÿëëÉ&”& þ {ÿÿÿëëÉ&”& þ ÿÿÿêëÉ&”& þ ¥ÿÿÿðëÉ&‹& ÷ ºÿÿÿéëÉ&”& þ ÏÿÿÿçëÉ&&  äÿÿÿïëÉ&”& þ ùÿÿÿíëÉ&&  ÿÿÿëëÉ&&  #ÿÿÿíëÉ&&  8ÿÿÿðëÉ&&  MÿÿÿìëÉ&&  bÿÿÿíëÉ&&  wÿÿÿíëÉ&&  ŒÿÿÿçëÉ&&  ¡ÿÿÿïëÉ&”& þ ¶ÿÿÿîëÉ&”& þ ËÿÿÿèìÉ&&  àÿÿÿèëÉ&”&  õÿÿÿéëÉ&”& þ ÿÿÿçëÉ&”&  ÿÿÿçëÉ&”& þ 4ÿÿÿçëÉ&&  IÿÿÿëëÉ&”& þ ^ÿÿÿìëÉ&&  sÿÿÿíëÉ&”& þ ˆÿÿÿçëÉ&&  ÿÿ ë½&‚ ÿÿÿëëÉ&“& ' {ÿÿÿëëÉ&“& ' ÿÿÿêëÉ&“& ' ¥ÿÿÿðëÉ&Š&  ºÿÿÿéëÉ&“& ' ÏÿÿÿçëÉ&œ& < äÿÿÿïëÉ&“& ' ùÿÿÿíëÉ&œ& < ÿÿÿëëÉ&œ& < #ÿÿÿíëÉ&œ& < 8ÿÿÿðëÉ&œ& < MÿÿÿìëÉ&œ& < bÿÿÿíëÉ&œ& < wÿÿÿíëÉ&œ& < ŒÿÿÿçëÉ&œ& < ¡ÿÿÿïëÉ&“& ' ¶ÿÿÿîëÉ&“& ' ËÿÿÿèìÉ&œ& < àÿÿÿèëÉ&“& 5 õÿÿÿéëÉ&“& ' ÿÿÿçëÉ&“& 5 ÿÿÿçëÉ&“& ' 4ÿÿÿçëÉ&œ& . IÿÿÿëëÉ&“& ' ^ÿÿÿìëÉ&œ& < sÿÿÿíëÉ&“& ' ˆÿÿÿçëÉ&œ& . ÿÿÿëÐÎ&„ CÿÿÿëÐÎ&•& P |ÿÿÿëÐÎ&•& P ‘ÿÿÿêëÎ&•& P ¦ÿÿÿðÕÎ&Œ& I »ÿÿÿêãÎ&•& P ÐÿÿÿçßÎ&ž& e åÿÿÿïÕÎ&•& P úÿÿÿíÕÎ&ž& e ÿÿÿëÐÎ&ž& e $ÿÿÿíÐÎ&ž& e 9ÿÿÿíÐÎ&ž& e NÿÿÿìéÎ&ž& e cÿÿÿîÔÎ&ž& e xÿÿÿíÕÎ&ž& e ÿÿÿçÛÎ&ž& e ¢ÿÿÿïÐÎ&•& P ·ÿÿÿîÐÎ&•& P ÌÿÿÿèéÎ&ž& e áÿÿÿèãÎ&•& ^ öÿÿÿééÎ&•& P ÿÿÿçÔÎ&•& ^ ÿÿÿçâÎ&•& P 5ÿÿÿçâÎ&ž& W JÿÿÿëÐÎ&•& P _ÿÿÿìÕÎ&ž& e tÿÿÿíØÎ&•& P ‰ÿÿÿçÜÎ&ž& W žÿÿÿëÐÎ&€ iÿÿÿëÐÎ&& o yÿÿÿëÐÎ&& o ŽÿÿÿèìÎ&& o £ÿÿÿðÕÎ& l&ˆ ·ÿÿÿéãÎ&& o ÍÿÿÿçßÎ&™& u âÿÿÿïÕÎ&& ö oÿÿÿíÕÎ& o& ÿÿÿëÐÎ&™& u !ÿÿÿíÐÎ&™& u 6ÿÿÿíÐÎ&™& u KÿÿÿìéÎ&™& u `ÿÿÿíÔÎ&™& u uÿÿÿíÕÎ&™& u ŠÿÿÿçÛÎ&™& u ŸÿÿÿïÐÎ&& o ´ÿÿÿîÐÎ&& o ÉÿÿÿèìÎ&™& u ÞÿÿÿèãÎ&& r óÿÿÿééÎ&& o ÿÿÿçÔÎ&& r ÿÿÿçÞÎ&& o 2ÿÿÿçÞÎ& p& G‘ÿÿÿëÐÎ&& o \ÿÿÿìÕÎ&™& u qÿÿÿíØÎ&& o †ÿÿÿçÖÎ&™& o ›ÿÿÿëöÎ&U¢ÿÿÿëõÎ&³&\ xÿÿÿëõÎ&³&\ ÿÿÿèõÎ&³&[ ¢ÿÿÿðöÎ&³&X ·ÿÿÿêõÎ&³&[ ÌÿÿÿçõÎ&¼&a áÿÿÿìõÎ&\& ¼ÿÿÿíõÎ&¼& aÿÿÿëõÎ&¼& aÿÿÿíõÎ&¼&a 5ÿÿÿíõÎ&¼&a JÿÿÿìõÎ&¼&a _ÿÿÿíõÎ&¼&a tÿÿÿíõÎ&¼&a ‰ÿÿÿçõÎ&¼&a žÿÿÿïõÎ&³&[ ³ÿÿÿîõÎ&³&[ ÈÿÿÿèõÎ&¼&a ÝÿÿÿèöÎ&³&^ òÿÿÿéõÎ&³&[ ÿÿÿçöÎ&^&³ ÿÿÿçõÎ&³&[ 1ÿÿÿçõÎ&¼&[ FÿÿÿëõÎ&³&[ [ÿÿÿìõÎ&¼&a pÿÿÿíõÎ&³&[ …ÿÿÿçõÎ&¼&[ šÿÿÿëÐÎ&¤dÿÿÿëÐÎ&j&µ zÿÿÿëÐÎ&µ&j ÿÿÿèìÎ&µ&j ¤ÿÿÿðÕÎ&¬&g ¹ÿÿÿéãÎ&µ&j ÎÿÿÿçßÎ&¾&p ãÿÿÿïÕÎ&µ&j øÿÿÿíÕÎ&¾&p ÿÿÿëÐÎ&¾&p "ÿÿÿíÐÎ&¾&p 7ÿÿÿíÐÎ&¾&p LÿÿÿìéÎ&¾&p aÿÿÿíÔÎ&¾&p vÿÿÿíÕÎ&¾&p ‹ÿÿÿçÛÎ&¾&p  ÿÿÿïÐÎ&µ&j µÿÿÿîÐÎ&µ&j ÊÿÿÿèìÎ&¾&p ßÿÿÿèàÎ&µ&m ôÿÿÿééÎ&µ&j ÿÿÿçÔÎ&µ&m ÿÿÿçÞÎ&µ&j 3ÿÿÿçÞÎ&¾&j HÿÿÿëÐÎ&µ&j ]ÿÿÿìÕÎ&¾&p rÿÿÿíØÎ&µ&j ‡ÿÿÿçÜÎ&¾&j œÿÿÿëöÎ&¢sÿÿÿëöÎ&³&y xÿÿÿëöÎ&³&y ÿÿÿèöÎ&³&y ¢ÿÿÿðöÎ&«&v ·ÿÿÿêöÎ&³&y ÌÿÿÿçöÎ&¼& áÿÿÿïöÎ&³&y öÿÿÿíöÎ&¼& ÿÿÿëöÎ&¼& ÿÿÿíöÎ&¼& 5ÿÿÿíöÎ&¼& JÿÿÿìöÎ&¼& _ÿÿÿíöÎ&¼& tÿÿÿíöÎ&¼& ‰ÿÿÿçöÎ&¼& žÿÿÿïöÎ&³&y ³ÿÿÿîöÎ&³&y ÈÿÿÿèöÎ&¼& ÝÿÿÿèöÎ&³&| òÿÿÿéöÎ&³&y ÿÿÿçöÎ&³&| ÿÿÿçöÎ&³&y 1ÿÿÿçöÎ&¼&y FÿÿÿëöÎ&³&y [ÿÿÿìöÎ&¼& pÿÿÿíöÎ&³&y …ÿÿÿçöÎ&¼&y šÿÿÿëÐÎ&¤‚ÿÿÿëÐÎ&µ&ˆ zÿÿÿëÐÎ&µ&ˆ ÿÿÿèìÎ&µ&ˆ ¤ÿÿÿðÕÎ&¬&… ¹ÿÿÿéãÎ&µ&ˆ ÎÿÿÿçßÎ&¾&Ž ãÿÿÿïÕÎ&µ&ˆ øÿÿÿíÕÎ&¾&Ž ÿÿÿëÐÎ&¾&Ž "ÿÿÿíÐÎ&¾&Ž 7ÿÿÿíÐÎ&¾&Ž LÿÿÿìéÎ&¾&Ž aÿÿÿíÔÎ&¾&Ž vÿÿÿíÕÎ&¾&Ž ‹ÿÿÿçÛÎ&¾&Ž  ÿÿÿïÐÎ&µ&ˆ µÿÿÿîÐÎ&µ&ˆ ÊÿÿÿèìÎ&¾&Ž ßÿÿÿèàÎ&µ&‹ ôÿÿÿééÎ&µ&ˆ ÿÿÿçÔÎ&µ&‹ ÿÿÿçÞÎ&µ&ˆ 3ÿÿÿçÞÎ&¾&ˆ HÿÿÿëÐÎ&µ&ˆ ]ÿÿÿìÕÎ&¾&Ž rÿÿÿíØÎ&µ&ˆ ‡ÿÿÿçÜÎ&¾&ˆ œÿÿÿëÐÎ&£™ÿÿÿëÐÎ&´&¨ yÿÿÿëÐÎ&´&¨ ŽÿÿÿèìÎ&´&¨ £ÿÿÿðÕÍ&«& ¸ ÿÿÿéãÎ&´&¨ ÍÿÿÿçßÎ&½&² âÿÿÿïÕÎ&´&¨ ÷ÿÿÿíÕÎ&´& ²ÿÿÿëÐÎ&½&² !ÿÿÿíÐÎ&½&² 6ÿÿÿíÐÎ&½&² KÿÿÿìéÎ&½&² `ÿÿÿíÔÎ&½&² uÿÿÿíÕÎ&½&² ŠÿÿÿçÛÎ&½&² ŸÿÿÿïÐÎ&²&½ ´ÿÿÿîÐÎ&½&² ÉÿÿÿèìÎ&½&² ÞÿÿÿèãÎ& ó&¼´ÿÿÿééÎ&´&¨ ÿÿÿçÔÎ&´&¼ ÿÿÿçÞÎ&´&¨ 2ÿÿÿçÞÎ&½&² GÿÿÿëÐÎ&´&¨ \ÿÿÿìÕÎ&½&² qÿÿÿíØÎ&´&¨ †ÿÿÿçÖÎ&½&² ›ÿÿÿëÐÎ&¤ÅÿÿÿëÐÎ&µ&Ø zÿÿÿëÐÎ&µ&Ø ÿÿÿèìÎ&µ&Ø ¤ÿÿÿðÕÎ&¬&Î ¹ÿÿÿéãÎ&µ&Ø ÎÿÿÿçßÎ&¾&â ãÿÿÿïÕÎ&µ&Ø øÿÿÿíÕÎ&¾&â ÿÿÿëÐÎ&¾&â "ÿÿÿíÐÎ&¾&â 7ÿÿÿíÐÎ&¾&â LÿÿÿìéÎ&¾&â aÿÿÿíÔÎ&¾&â vÿÿÿíÕÎ&¾&â ‹ÿÿÿçÛÎ&¾&â  ÿÿÿïÐÎ&µ&Ø µÿÿÿîÐÎ&µ&Ø ÊÿÿÿèìÎ&¾&â ßÿÿÿèàÎ&µ&ì ôÿÿÿééÎ&µ&Ø ÿÿÿçÔÎ&µ&ì ÿÿÿçÞÎ&µ&Ø 3ÿÿÿçÞÎ&¾&â HÿÿÿëÐÎ&µ&Ø ]ÿÿÿìÕÎ&¾&â rÿÿÿíØÎ&µ&Ø ‡ÿÿÿçÜÎ&¾&â œÿÿÿëÐÎ&£öÿÿÿëÐÎ&´&  yÿÿÿëÐÎ&´&  ŽÿÿÿèìÎ&´&  £ÿÿÿðÕÎ&´&ÿ ¸ÿÿÿéãÎ&´&  ÍÿÿÿçßÎ&½&  âÿÿÿïÕÎ&´&  ÷ÿÿÿíÕÎ&½&  ÿÿÿëÐÎ&½&  !ÿÿÿíÐÎ&½&  6ÿÿÿíÐÎ&½&  KÿÿÿìéÎ&½&  `ÿÿÿíÔÎ&½&  uÿÿÿíÕÎ&½&  ŠÿÿÿçÛÎ&½&  ŸÿÿÿïÐÎ&´&  ´ÿÿÿîÐÎ&´&  ÉÿÿÿèìÎ&½&  ÞÿÿÿèãÎ&´&  óÿÿÿééÎ&´&  ÿÿÿçÔÎ&´&  ÿÿÿçÞÎ&´&  2ÿÿÿçÞÎ&½&  GÿÿÿëÐÎ&´&  \ÿÿÿìÕÎ&½&  qÿÿÿíØÎ&´&  †ÿÿÿçÖÎ&½&  ›ÿÿÿëÐÎ&¤ %ÿÿÿëÐÎ&µ& 9 zÿÿÿëÐÎ&µ& 9 ÿÿÿèìÎ&µ& 9 ¤ÿÿÿðÕÎ&¬& / ¹ÿÿÿéãÎ&µ& 9 ÎÿÿÿçßÎ&¾& C ãÿÿÿïÕÎ&µ& 9 øÿÿÿíÕÎ&¾& C ÿÿÿëÐÎ&¾& C "ÿÿÿíÐÎ&¾& C 7ÿÿÿíÐÎ&¾& C LÿÿÿìéÎ&¾& C aÿÿÿíÔÎ&¾& C vÿÿÿíÕÎ&¾& C ‹ÿÿÿçÛÎ&¾& C  ÿÿÿïÐÎ&µ& 9 µÿÿÿîÐÎ&µ& 9 ÊÿÿÿèìÎ&¾& C ßÿÿÿèàÎ&µ& M ôÿÿÿééÎ&µ& 9 ÿÿÿçÔÎ&µ& M ÿÿÿçÞÎ&µ& 9 3ÿÿÿçÞÎ&¾& C HÿÿÿëÐÎ&µ& 9 ]ÿÿÿìÕÎ&¾& C rÿÿÿíØÎ&µ& 9 ‡ÿÿÿçÜÎ&¾& C œÿÿ ê½&¥ WÿÿÿëêÉ&¶& h {ÿÿÿëêÉ&¶& h ÿÿÿêêÉ&¶& h ¥ÿÿÿðêÉ& ^& º­ÿÿÿéêÉ&¶& h ÏÿÿÿçêÉ&¿& r äÿÿÿïêÉ&¶& h ùÿÿÿíêÉ&¿& r ÿÿÿëêÉ&¿& r #ÿÿÿíêÉ&¿& r 8ÿÿÿðêÉ&¿& r MÿÿÿìêÉ&¿& r bÿÿÿíêÉ&¿& r wÿÿÿíêÉ&¿& r ŒÿÿÿçêÉ&¿& r ¡ÿÿÿïêÉ&¶& h ¶ÿÿÿîêÉ&¶& h ËÿÿÿèìÉ&¿& r àÿÿÿèêÉ&¶& { õÿÿÿéêÉ&¶& h ÿÿÿçêÉ&¶& { ÿÿÿçêÉ&¶& h 4ÿÿÿçêÉ&¿& r IÿÿÿëêÉ&¶& h ^ÿÿÿìêÉ&¿& r sÿÿÿíêÉ&¶& h ˆÿÿÿçêÉ&¿& r ÿÿÿëöÎ&§ …ÿÿÿëöÎ&¸& ™ |ÿÿÿëöÎ&¸& ™ ‘ÿÿÿêöÎ&¸& ™ ¦ÿÿÿðöÎ&¯&  »ÿÿÿêöÎ&¸& ™ ÐÿÿÿçöÎ&Á& £ åÿÿÿïöÎ&¸& ™ úÿÿÿíöÎ&Á& £ ÿÿÿëöÎ&Á& £ $ÿÿÿíöÎ&Á& £ 9ÿÿÿíöÎ&Á& £ NÿÿÿìöÎ&Á& £ cÿÿÿîöÎ&Á& £ xÿÿÿíöÎ&Á& £ ÿÿÿçöÎ&Á& £ ¢ÿÿÿïöÎ&¸& ™ ·ÿÿÿîöÎ&¸& ™ ÌÿÿÿèöÎ&Á& £ áÿÿÿèöÎ&¸& ­ öÿÿÿéöÎ&¸& ™ ÿÿÿçöÎ&¸& ­ ÿÿÿçöÎ&¸& ™ 5ÿÿÿçöÎ&Á& £ JÿÿÿëöÎ&¸& ™ _ÿÿÿìöÎ&Á& £ tÿÿÿíöÎ&¸& ™ ‰ÿÿÿçöÎ&Á& £ žÿÿÿëÐÎ&© ·ÿÿÿëÐÎ&º& Ë |ÿÿÿëÐÎ&º& Ë ‘ÿÿÿêëÎ&º& Ë ¦ÿÿÿðÕÎ&±& Á »ÿÿÿêãÎ&º& Ë ÐÿÿÿçßÎ&Ã& Õ åÿÿÿïÕÎ&º& Ë úÿÿÿíÕÎ&Ã& Õ ÿÿÿëÐÎ&Ã& Õ $ÿÿÿíÐÎ&Ã& Õ 9ÿÿÿíÐÎ&Ã& Õ NÿÿÿìéÎ&Ã& Õ cÿÿÿîÔÎ&Ã& Õ xÿÿÿíÕÎ&Ã& Õ ÿÿÿçÛÎ&Ã& Õ ¢ÿÿÿïÐÎ&º& Ë ·ÿÿÿîÐÎ&º& Ë ÌÿÿÿèéÎ&Ã& Õ áÿÿÿèãÎ&º& ß öÿÿÿééÎ&º& Ë ÿÿÿçÔÎ&º& ß ÿÿÿçâÎ&º& Ë 5ÿÿÿçâÎ&Ã& Õ JÿÿÿëÐÎ&º& Ë _ÿÿÿìÕÎ&Ã& Õ tÿÿÿíØÎ&º& Ë ‰ÿÿÿçÜÎ&Ã& Õ žÿÿÿëÐÎ&§ éÿÿÿëÐÎ&¸& ü |ÿÿÿëÐÎ&¸& ü ‘ÿÿÿêëÎ&¸& ü ¦ÿÿÿðÕÎ&¯& ò »ÿÿÿêãÎ&¸& ü ÐÿÿÿçßÎ&Á&  åÿÿÿïÕÎ&¸& ü úÿÿÿíÕÎ&Á&  ÿÿÿëÐÎ&Á&  $ÿÿÿíÐÎ&Á&  9ÿÿÿíÐÎ&Á&  NÿÿÿìéÎ&Á&  cÿÿÿîÔÎ&Á&  xÿÿÿíÕÎ&Á&  ÿÿÿçÛÎ&Á&  ¢ÿÿÿïÐÎ&¸& ü ·ÿÿÿîÐÎ&¸& ü ÌÿÿÿèéÎ&Á&  áÿÿÿèãÎ&¸&  öÿÿÿééÎ&¸& ü ÿÿÿçÔÎ&¸&  ÿÿÿçâÎ&¸& ü 5ÿÿÿçâÎ&Á&  JÿÿÿëÐÎ&¸& ü _ÿÿÿìÕÎ&Á&  tÿÿÿíØÎ&¸& ü ‰ÿÿÿçÜÎ&Á&  žÿÿ ë½&¥ ÿÿÿëëÉ&¶& . {ÿÿÿëëÉ&¶& . ÿÿÿêëÉ&¶& . ¥ÿÿÿðëÉ&­& $ ºÿÿÿéëÉ&¶& . ÏÿÿÿçëÉ&¿& 8 äÿÿÿïëÉ&¶& . ùÿÿÿíëÉ&¿& 8 ÿÿÿëëÉ&¿& 8 #ÿÿÿíëÉ&¿& 8 8ÿÿÿðëÉ&¿& 8 MÿÿÿìëÉ&¿& 8 bÿÿÿíëÉ&¿& 8 wÿÿÿíëÉ&¿& 8 ŒÿÿÿçëÉ&¿& 8 ¡ÿÿÿïëÉ&¶& . ¶ÿÿÿîëÉ&¶& . ËÿÿÿèìÉ&¿& 8 àÿÿÿèëÉ&¶& B õÿÿÿéëÉ&¶& . ÿÿÿçëÉ&¶& B ÿÿÿçëÉ&¶& . 4ÿÿÿçëÉ&¿& 8 IÿÿÿëëÉ&¶& . ^ÿÿÿìëÉ&¿& 8 sÿÿÿíëÉ&¶& . ˆÿÿÿçëÉ&¿& 8 ÿÿÿëëÉ&¦ JÿÿÿëëÉ&·& V {ÿÿÿëëÉ&·& V ÿÿÿêëÉ&·& V ¥ÿÿÿðëÉ& Q&® ºÿÿÿéëÉ&·& V ÏÿÿÿçëÉ&À& k äÿÿÿïëÉ&·& V ùÿÿÿíëÉ&·& V ÿÿÿëëÉ&À& k #ÿÿÿíëÉ&À& k 8ÿÿÿðëÉ&À& k MÿÿÿìëÉ&À& k bÿÿÿíëÉ&À& k wÿÿÿíëÉ&À& k ŒÿÿÿçëÉ&À& k ¡ÿÿÿïëÉ&·& V ¶ÿÿÿîëÉ&·& V ËÿÿÿèìÉ&À& k àÿÿÿèëÉ&·& d õÿÿÿéëÉ&·& V ÿÿÿçëÉ&·& V ÿÿÿçëÉ&·& V 4ÿÿÿçëÉ&À& ] IÿÿÿëëÉ&·& V ^ÿÿÿìëÉ&·& k sÿÿÿíëÉ&·& V ˆÿÿÿçëÉ&À& ] ÿÿÿëÐÎ&¨ rÿÿÿëÐÎ&¹& € ~ÿÿÿëÐÎ&¹& € “ÿÿÿêëÎ&¹& € ¨ÿÿÿðÕÎ&°& y ½ÿÿÿéãÎ&¹& € ÒÿÿÿçßÎ&Â& • çÿÿÿïÕÎ&¹& € üÿÿÿíÕÎ&Â& • ÿÿÿëÐÎ&Â& • &ÿÿÿíÐÎ&Â& • ;ÿÿÿíÐÎ&Â& • PÿÿÿëéÎ&Â& • eÿÿÿîÔÎ&Â& • zÿÿÿíÖÎ&Â& • ÿÿÿçÛÎ&Â& • ¤ÿÿÿïÐÎ&¹& € ¹ÿÿÿîÐÎ&¹& € ÎÿÿÿêéÎ&Â& • ãÿÿÿèãÎ&¹& Ž øÿÿÿçéÎ&¹& € ÿÿÿçÔÎ&¹& Ž "ÿÿÿçÞÎ&¹& € 7ÿÿÿíÞÎ&Â& ‡ LÿÿÿëÐÎ&¹& € aÿÿÿìÕÎ&Â& • vÿÿÿíØÎ&¹& € ‹ÿÿÿçÜÎ&Â& ‡  ÿÿÿëÐÎ&ª œÿÿÿëÐÎ&»& ª ~ÿÿÿëÐÎ&»& ª “ÿÿÿêëÎ&»& ª ¨ÿÿÿðÕÎ&²& £ ½ÿÿÿéãÎ&»& ª ÒÿÿÿçßÎ&Ä& ¿ çÿÿÿïÕÎ&»& ª üÿÿÿíÕÎ&Ä& ¿ ÿÿÿëÐÎ&Ä& ¿ &ÿÿÿíÐÎ&Ä& ¿ ;ÿÿÿíÐÎ&Ä& ¿ PÿÿÿëéÎ&Ä& ¿ eÿÿÿîÔÎ&Ä& ¿ zÿÿÿíÖÎ&Ä& ¿ ÿÿÿçÛÎ&Ä& ¿ ¤ÿÿÿïÐÎ&»& ª ¹ÿÿÿîÐÎ&»& ª ÎÿÿÿêéÎ&Ä& ¿ ãÿÿÿèãÎ&»& ¸ øÿÿÿçéÎ&»& ª ÿÿÿçÔÎ&»& ¸ "ÿÿÿçÞÎ&»& ª 7ÿÿÿíÞÎ&Ä& ± LÿÿÿëÐÎ&»& ª aÿÿÿìÕÎ&Ä& ¿ vÿÿÿíØÎ&»& ª ‹ÿÿÿçÜÎ&Ä& ±  ÿÿÿëÐÎ&¨ ÆÿÿÿëÐÎ&¹& Ô }ÿÿÿëÐÎ&¹& Ô ’ÿÿÿêëÎ&¹& Ô §ÿÿÿðÕÎ&°& Í ¼ÿÿÿéãÎ&¹& Ô ÑÿÿÿçßÎ&Â& é æÿÿÿïÕÎ&¹& Ô ûÿÿÿíÕÎ&Â& é ÿÿÿëÐÎ&Â& é %ÿÿÿíÐÎ&Â& é :ÿÿÿíÐÎ&Â& é OÿÿÿëèÎ&Â& é dÿÿÿîÔÎ&Â& é yÿÿÿíÖÎ&Â& é ŽÿÿÿçÛÎ&Â& é £ÿÿÿïÐÎ&¹& Ô ¸ÿÿÿîÐÎ&¹& Ô ÍÿÿÿêéÎ&Â& é âÿÿÿèãÎ&¹& â ÷ÿÿÿçéÎ&¹& Ô ÿÿÿçÔÎ&¹& â !ÿÿÿçÞÎ&¹& Ô 6ÿÿÿçÞÎ&Â& Û KÿÿÿëÐÎ&¹& Ô `ÿÿÿìÕÎ&Â& é uÿÿÿíØÎ&¹& Ô ŠÿÿÿçÖÎ&Â& Û ŸÿÿÿíëÉ&¦ ðÿÿÿëëÉ&·& þ {ÿÿÿëëÉ&·& þ ÿÿÿêëÉ&·& þ ¥ÿÿÿðëÉ&®& ÷ ºÿÿÿéëÉ&·& þ ÏÿÿÿçëÉ&À&  äÿÿÿïëÉ&·& þ ùÿÿÿíëÉ&À&  ÿÿÿëëÉ&À&  #ÿÿÿíëÉ&À&  8ÿÿÿðëÉ&À&  MÿÿÿìëÉ&À&  bÿÿÿíëÉ&À&  wÿÿÿíëÉ&À&  ŒÿÿÿçëÉ&À&  ¡ÿÿÿïëÉ&·& þ ¶ÿÿÿîëÉ&·& þ ËÿÿÿèìÉ&À&  àÿÿÿèëÉ&·&  õÿÿÿéëÉ&·& þ ÿÿÿçëÉ&·&  ÿÿÿçëÉ&·& þ 4ÿÿÿçëÉ&À&  IÿÿÿëëÉ&·& þ ^ÿÿÿìëÉ&À&  sÿÿÿíëÉ&·& þ ˆÿÿÿçëÉ&À&  ÿÿ ë½&¥ ÿÿÿëëÉ&¶& ' {ÿÿÿëëÉ&¶& ' ÿÿÿêëÉ&¶& ' ¥ÿÿÿðëÉ&­&  ºÿÿÿéëÉ&¶& ' ÏÿÿÿçëÉ&¿& < äÿÿÿïëÉ&¶& ' ùÿÿÿíëÉ&¿& < ÿÿÿëëÉ&¿& < #ÿÿÿíëÉ&¿& < 8ÿÿÿðëÉ&¿& < MÿÿÿìëÉ&¿& < bÿÿÿíëÉ&¿& < wÿÿÿíëÉ&¿& < ŒÿÿÿçëÉ&¿& < ¡ÿÿÿïëÉ&¶& ' ¶ÿÿÿîëÉ&¶& ' ËÿÿÿèìÉ&¿& < àÿÿÿèëÉ&¶& 5 õÿÿÿéëÉ&¶& ' ÿÿÿçëÉ&¶& 5 ÿÿÿçëÉ&¶& ' 4ÿÿÿçëÉ&¿& . IÿÿÿëëÉ&¶& ' ^ÿÿÿìëÉ&¿& < sÿÿÿíëÉ&¶& ' ˆÿÿÿçëÉ&¿& . ÿÿÿëÐÎ&§ CÿÿÿëÐÎ&¸& P |ÿÿÿëÐÎ&¸& P ‘ÿÿÿêëÎ&¸& P ¦ÿÿÿðÕÎ&¯& I »ÿÿÿêãÎ&¸& P ÐÿÿÿçßÎ&Á& e åÿÿÿïÕÎ&¸& P úÿÿÿíÕÎ&Á& e ÿÿÿëÐÎ&Á& e $ÿÿÿíÐÎ&Á& e 9ÿÿÿíÐÎ&Á& e NÿÿÿìéÎ&Á& e cÿÿÿîÔÎ&Á& e xÿÿÿíÕÎ&Á& e ÿÿÿçÛÎ&Á& e ¢ÿÿÿïÐÎ&¸& P ·ÿÿÿîÐÎ&¸& P ÌÿÿÿèéÎ&Á& e áÿÿÿèãÎ&¸& ^ öÿÿÿééÎ&¸& P ÿÿÿçÔÎ&¸& ^ ÿÿÿçâÎ&¸& P 5ÿÿÿçâÎ&Á& W JÿÿÿëÐÎ&¸& P _ÿÿÿìÕÎ&Á& e tÿÿÿíØÎ&¸& P ‰ÿÿÿçÜÎ&Á& W žÿÿÿëÐÎ&¢ iÿÿÿëÐÎ&³& o yÿÿÿëÐÎ&³& o ŽÿÿÿèìÎ&³& o £ÿÿÿðÕÎ&«& l ¸ÿÿÿéãÎ&³& o ÍÿÿÿçßÎ&¼& u âÿÿÿïÕÎ&³& o ÷ÿÿÿíÕÎ&¼& u ÿÿÿëÐÎ&¼& u !ÿÿÿíÐÎ&¼& u 6ÿÿÿíÐÎ&¼& u KÿÿÿìéÎ&¼& u `ÿÿÿíÔÎ&¼& u uÿÿÿíÕÎ&¼& u ŠÿÿÿçÛÎ&¼& u ŸÿÿÿïÐÎ&³& o ´ÿÿÿîÐÎ&³& o ÉÿÿÿèìÎ&¼& u ÞÿÿÿèãÎ&³& r óÿÿÿééÎ&³& o ÿÿÿçÔÎ&³& r ÿÿÿçÞÎ& o&³ 2ÿÿÿçÞÎ&¼& o GÿÿÿëÐÎ&³& o \ÿÿÿìÕÎ&¼& u qÿÿÿíØÎ&³& o †ÿÿÿçÖÎ&¼& o ›ÿÿÿëöÎ&ÅWÿÿÿëöÎ&×&] xÿÿÿëöÎ&×&] ÿÿÿèöÎ&×&] ¢ÿÿÿðöÎ&Î&Z ·ÿÿÿêöÎ&×&] ÌÿÿÿçõÎ&à&c áÿÿÿïöÎ&×&] öÿÿÿíõÎ&à&c ÿÿÿëõÎ&à&c ÿÿÿíõÎ&à&c 5ÿÿÿíõÎ&à&c JÿÿÿìõÎ&à&c _ÿÿÿíõÎ&à&c tÿÿÿíõÎ&à&c ‰ÿÿÿçõÎ&à&c žÿÿÿïöÎ&×&] ³ÿÿÿîöÎ&×&] ÈÿÿÿèõÎ&à&c ÝÿÿÿèõÎ&×&` òÿÿÿéöÎ&×&] ÿÿÿçõÎ&×&` ÿÿÿçöÎ&×&] 1ÿÿÿçöÎ&à&] FÿÿÿëöÎ&×&] [ÿÿÿìõÎ&à&c pÿÿÿíöÎ&×&] …ÿÿÿçöÎ&à&] šÿÿÿëÑÎ&ÇfÿÿÿëÑÎ&Ù&l zÿÿÿëÑÎ&Ù&l ÿÿÿèìÎ&Ù&l ¤ÿÿÿðÕÎ&Ð&i ¹ÿÿÿéãÎ&Ù&l ÎÿÿÿçßÎ&â&r ãÿÿÿïÕÎ&Ù&l øÿÿÿíÕÎ&â&r ÿÿÿëÑÎ&â&r "ÿÿÿíÑÎ&â&r 7ÿÿÿíÑÎ&â&r LÿÿÿìéÎ&â&r aÿÿÿíÔÎ&â&r vÿÿÿíÕÎ&â&r ‹ÿÿÿçÛÎ&â&r  ÿÿÿïÑÎ&Ù&l µÿÿÿîÑÎ&Ù&l ÊÿÿÿèìÎ&â&r ßÿÿÿèàÎ&Ù&o ôÿÿÿééÎ&Ù&l ÿÿÿçÔÎ&Ù&o ÿÿÿçÞÎ&Ù&l 3ÿÿÿçÞÎ&â&l HÿÿÿëÑÎ&Ù&l ]ÿÿÿìÕÎ&â&r rÿÿÿíØÎ&Ù&l ‡ÿÿÿçÜÎ&â&l œÿÿÿëöÎ&ÅuÿÿÿëöÎ&×&{ xÿÿÿëöÎ&×&{ ÿÿÿèöÎ&×&{ ¢ÿÿÿðöÎ&Î&x ·ÿÿÿêöÎ&×&{ ÌÿÿÿçöÎ&à& áÿÿÿïöÎ&×&{ öÿÿÿíöÎ&à& ÿÿÿëöÎ&à& ÿÿÿíöÎ&à& 5ÿÿÿíöÎ&à& JÿÿÿìöÎ&à& _ÿÿÿíöÎ&à& tÿÿÿíöÎ&à& ‰ÿÿÿçöÎ&à& žÿÿÿïöÎ&×&{ ³ÿÿÿîöÎ&×&{ ÈÿÿÿèöÎ&à& ÝÿÿÿèöÎ&×&~ òÿÿÿéöÎ&×&{ ÿÿÿçöÎ&×&~ ÿÿÿçöÎ&×&{ 1ÿÿÿçöÎ&à&{ FÿÿÿëöÎ&×&{ [ÿÿÿìöÎ&à& pÿÿÿíöÎ&×&{ …ÿÿÿçöÎ&à&{ šÿÿÿëÐÎ&Ç„ÿÿÿëÑÎ&Ù&Š zÿÿÿëÑÎ&Ù&Š ÿÿÿèìÎ&Ù&Š ¤ÿÿÿðÕÎ&Ð&‡ ¹ÿÿÿéãÎ&Ù&Š ÎÿÿÿçßÎ&â& ãÿÿÿïÕÎ&Ù&Š øÿÿÿíÕÎ&â& ÿÿÿëÑÎ&â& "ÿÿÿíÑÎ&â& 7ÿÿÿíÑÎ&â& LÿÿÿìéÎ&â& aÿÿÿíÔÎ&â& vÿÿÿíÕÎ&â& ‹ÿÿÿçÛÎ&â&  ÿÿÿïÑÎ&Ù&Š µÿÿÿîÑÎ&Ù&Š ÊÿÿÿèìÎ&â& ßÿÿÿèàÎ&Ù& ôÿÿÿééÎ&Ù&Š ÿÿÿçÔÎ&Ù& ÿÿÿçÞÎ&Ù&Š 3ÿÿÿçÞÎ&â&Š HÿÿÿëÑÎ&Ù&Š ]ÿÿÿìÕÎ&â& rÿÿÿíØÎ&Ù&Š ‡ÿÿÿçÜÎ&â&Š œÿÿÿëÑÎ&ƘÿÿÿëÐÎ&Ø&« yÿÿÿëÐÎ&Ø&« ŽÿÿÿèìÎ&Ø&« £ÿÿÿðÕÎ&Ï&¡ ¸ÿÿÿéãÎ&Ø&« ÍÿÿÿçßÎ&á&µ âÿÿÿïÕÎ&Ø&« ÷ÿÿÿíÕÎ&á&µ ÿÿÿëÐÎ&á&µ !ÿÿÿíÐÎ&á&µ 6ÿÿÿíÐÎ&á&µ KÿÿÿìéÎ&á&µ `ÿÿÿíÔÎ&á&µ uÿÿÿíÕÎ&á&µ ŠÿÿÿçÛÎ&á&µ ŸÿÿÿïÐÎ&Ø&« ´ÿÿÿîÐÎ&Ø&« ÉÿÿÿèìÎ&á&µ ÞÿÿÿèãÎ&Ø&¿ óÿÿÿééÎ&Ø&« ÿÿÿçÔÎ&Ø&¿ ÿÿÿçÞÎ&Ø&« 2ÿÿÿçÞÎ&á&µ GÿÿÿëÐÎ&Ø&« \ÿÿÿìÕÎ&á&µ qÿÿÿíØÎ&Ø&« †ÿÿÿçÖÎ&á&µ ›ÿÿÿëÐÎ&ÇÈÿÿÿëÑÎ&Ù&Û zÿÿÿëÑÎ&Ù&Û ÿÿÿèìÎ&Ù&Û ¤ÿÿÿðÕÎ&Ð&Ñ ¹ÿÿÿéãÎ&Ù&Û ÎÿÿÿçßÎ&â&å ãÿÿÿïÕÎ&Ù&Û øÿÿÿíÕÎ&â&å ÿÿÿëÑÎ&â&å "ÿÿÿíÑÎ&â&å 7ÿÿÿíÑÎ&â&å LÿÿÿìéÎ&â&å aÿÿÿíÔÎ&â&å vÿÿÿíÕÎ&â&å ‹ÿÿÿçÛÎ&â&å  ÿÿÿïÑÎ&Ù&Û µÿÿÿîÑÎ&Ù&Û ÊÿÿÿèìÎ&â&å ßÿÿÿèàÎ&Ù&ï ôÿÿÿééÎ&Ù&Û ÿÿÿçÔÎ&Ù&ï ÿÿÿçÞÎ&Ù&Û 3ÿÿÿçÞÎ&â&å HÿÿÿëÑÎ&Ù&Û ]ÿÿÿìÕÎ&â&å rÿÿÿíØÎ&Ù&Û ‡ÿÿÿçÜÎ&â&å œÿÿÿëÐÎ&ÆùÿÿÿëÐÎ&Ø&  yÿÿÿëÐÎ&Ø&  ŽÿÿÿèìÎ&Ø&  £ÿÿÿðÕÎ&Ï&  ¸ÿÿÿéãÎ&Ø&  ÍÿÿÿçßÎ&á&  âÿÿÿïÕÎ&Ø&  ÷ÿÿÿíÕÎ&á&  ÿÿÿëÐÎ&á&  !ÿÿÿíÐÎ&á&  6ÿÿÿíÐÎ&á&  KÿÿÿìéÎ&á&  `ÿÿÿíÔÎ&á&  uÿÿÿíÕÎ&á&  ŠÿÿÿçÛÎ&á&  ŸÿÿÿïÐÎ&Ø&  ´ÿÿÿîÐÎ&Ø&  ÉÿÿÿèìÎ&á&  ÞÿÿÿèãÎ&Ø&  óÿÿÿééÎ&Ø&  ÿÿÿçÔÎ&Ø&  ÿÿÿçÞÎ&Ø&  2ÿÿÿçÞÎ&á&  GÿÿÿëÐÎ&Ø&  \ÿÿÿìÕÎ&á&  qÿÿÿíØÎ&Ø&  †ÿÿÿçÖÎ&á&  ›ÿÿÿëÐÎ&Ç (ÿÿÿëÐÎ&Ù& < zÿÿÿëÐÎ&Ù& < ÿÿÿèìÎ&Ù& < ¤ÿÿÿðÕÎ&Ð& 2 ¹ÿÿÿéãÎ&Ù& < ÎÿÿÿçßÎ&â& F ãÿÿÿïÕÎ&Ù& < øÿÿÿíÕÎ&â& F ÿÿÿëÑÎ&â& F "ÿÿÿíÑÎ&â& F 7ÿÿÿíÑÎ&â& F LÿÿÿìéÎ&â& F aÿÿÿíÔÎ&â& F vÿÿÿíÕÎ&â& F ‹ÿÿÿçÛÎ&â& F  ÿÿÿïÐÎ&Ù& < µÿÿÿîÐÎ&Ù& < ÊÿÿÿèìÎ&â& F ßÿÿÿèàÎ&Ù& P ôÿÿÿééÎ&Ù& < ÿÿÿçÔÎ&Ù& P ÿÿÿçÞÎ&Ù& < 3ÿÿÿçÞÎ&â& F HÿÿÿëÐÎ&Ù& < ]ÿÿÿìÕÎ&â& F rÿÿÿíØÎ&Ù& < ‡ÿÿÿçÜÎ&â& F œÿÿ ê¼&È YÿÿÿëêÈ&Ú& k {ÿÿÿëêÈ&Ú& k ÿÿÿêêÈ&Ú& k ¥ÿÿÿðêÈ&Ñ& a ºÿÿÿéêÈ&Ú& k ÏÿÿÿçêÈ&ã& u äÿÿÿïêÈ&Ú& k ùÿÿÿíêÈ&ã& u ÿÿÿëêÈ&ã& u #ÿÿÿíêÈ&ã& u 8ÿÿÿðêÈ&ã& u MÿÿÿìêÈ&ã& u bÿÿÿíêÈ&ã& u wÿÿÿíêÈ&ã& u ŒÿÿÿçêÈ&ã& u ¡ÿÿÿïêÈ&Ú& k ¶ÿÿÿîêÈ&Ú& k ËÿÿÿèìÈ&ã& u àÿÿÿèêÈ&Ú& ~ õÿÿÿéêÈ&Ú& k ÿÿÿçêÈ&Ú& ~ ÿÿÿçêÈ&Ú& k 4ÿÿÿçêÈ&ã& u IÿÿÿëêÈ&Ú& k ^ÿÿÿìêÈ&ã& u sÿÿÿíêÈ&Ú& k ˆÿÿÿçêÈ&ã& u ÿÿÿëöÎ&Ê ˆÿÿÿëõÎ&Ü& œ |ÿÿÿëõÎ&Ü& œ ‘ÿÿÿêõÎ&Ü& œ ¦ÿÿÿðöÎ&Ó& ’ »ÿÿÿêõÎ&Ü& œ ÐÿÿÿçöÎ&å& ¦ åÿÿÿïõÎ&Ü& œ úÿÿÿíöÎ&å& ¦ ÿÿÿëöÎ&å& ¦ $ÿÿÿíöÎ&å& ¦ 9ÿÿÿíöÎ&å& ¦ NÿÿÿìöÎ&å& ¦ cÿÿÿîöÎ&å& ¦ xÿÿÿíöÎ&å& ¦ ÿÿÿçöÎ&å& ¦ ¢ÿÿÿïõÎ&Ü& œ ·ÿÿÿîõÎ&Ü& œ ÌÿÿÿèöÎ&å& ¦ áÿÿÿèöÎ&Ü& ° öÿÿÿéõÎ&Ü& œ ÿÿÿçöÎ&Ü& ° ÿÿÿçõÎ&Ü& œ 5ÿÿÿçöÎ&å& ¦ JÿÿÿëõÎ&Ü& œ _ÿÿÿìöÎ&å& ¦ tÿÿÿíõÎ&Ü& œ ‰ÿÿÿçöÎ&å& ¦ žÿÿÿëÐÎ&Ì ºÿÿÿëÐÎ&Þ& Î |ÿÿÿëÐÎ&Þ& Î ‘ÿÿÿêëÎ&Þ& Î ¦ÿÿÿðÕÎ&Õ& Ä »ÿÿÿêãÎ&Þ& Î ÐÿÿÿçßÎ&ç& Ø åÿÿÿïÕÎ&Þ& Î úÿÿÿíÕÎ&ç& Ø ÿÿÿëÐÎ&ç& Ø $ÿÿÿíÐÎ&ç& Ø 9ÿÿÿíÐÎ&ç& Ø NÿÿÿìéÎ&ç& Ø cÿÿÿîÔÎ&ç& Ø xÿÿÿíÕÎ&ç& Ø ÿÿÿçÛÎ&ç& Ø ¢ÿÿÿïÐÎ&Þ& Î ·ÿÿÿîÐÎ&Þ& Î ÌÿÿÿèéÎ&ç& Ø áÿÿÿèãÎ&Þ& â öÿÿÿééÎ&Þ& Î ÿÿÿçÔÎ&Þ& â ÿÿÿçâÎ&Þ& Î 5ÿÿÿçâÎ&ç& Ø JÿÿÿëÐÎ&Þ& Î _ÿÿÿìÕÎ&ç& Ø tÿÿÿíØÎ&Þ& Î ‰ÿÿÿçÜÎ&ç& Ø žÿÿÿëÑÎ&Ê ëÿÿÿëÐÎ&Ü& ÿ |ÿÿÿëÐÎ&Ü& ÿ ‘ÿÿÿêëÎ&Ü& ÿ ¦ÿÿÿðÕÎ&Ó& õ »ÿÿÿêãÎ&Ü& ÿ ÐÿÿÿçßÎ&å&  åÿÿÿïÕÎ&Ü& ÿ úÿÿÿíÕÎ&å&  ÿÿÿëÑÎ&å&  $ÿÿÿíÑÎ&å&  9ÿÿÿíÑÎ&å&  NÿÿÿìéÎ&å&  cÿÿÿîÔÎ&å&  xÿÿÿíÕÎ&å&  ÿÿÿçÛÎ&å&  ¢ÿÿÿïÐÎ&Ü& ÿ ·ÿÿÿîÐÎ&Ü& ÿ ÌÿÿÿèéÎ&å&  áÿÿÿèãÎ&Ü&  öÿÿÿééÎ&Ü& ÿ ÿÿÿçÔÎ&Ü&  ÿÿÿçâÎ&Ü& ÿ 5ÿÿÿçâÎ&å&  JÿÿÿëÐÎ&Ü& ÿ _ÿÿÿìÕÎ&å&  tÿÿÿíØÎ&Ü& ÿ ‰ÿÿÿçÜÎ&å&  žÿÿ ë¼&È ÿÿÿëëÈ&Ú& 1 {ÿÿÿëëÈ&Ú& 1 ÿÿÿêëÈ&Ú& 1 ¥ÿÿÿðëÈ&Ñ& ' ºÿÿÿéëÈ&Ú& 1 ÏÿÿÿçëÈ&ã& ; äÿÿÿïëÈ&Ú& 1 ùÿÿÿíëÈ&ã& ; ÿÿÿëëÈ&ã& ; #ÿÿÿíëÈ&ã& ; 8ÿÿÿðëÈ&ã& ; MÿÿÿìëÈ&ã& ; bÿÿÿíëÈ&ã& ; wÿÿÿíëÈ&ã& ; ŒÿÿÿçëÈ&ã& ; ¡ÿÿÿïëÈ&Ú& 1 ¶ÿÿÿîëÈ&Ú& 1 ËÿÿÿèìÈ&ã& ; àÿÿÿèëÈ&Ú& E õÿÿÿéëÈ&Ú& 1 ÿÿÿçëÈ&Ú& E ÿÿÿçëÈ&Ú& 1 4ÿÿÿçëÈ&ã& ; IÿÿÿëëÈ&Ú& 1 ^ÿÿÿìëÈ&ã& ; sÿÿÿíëÈ&Ú& 1 ˆÿÿÿçëÈ&ã& ; ÿÿÿëëÈ&É LÿÿÿëëÈ&Û& X {ÿÿÿëëÈ&Û& X ÿÿÿêëÈ&Û& X ¥ÿÿÿðëÈ&Ò& º QÿÿÿéëÈ&Û& X ÏÿÿÿçëÈ&ä& m äÿÿÿïëÈ&Û& X ùÿÿÿíëÈ&ä& m ÿÿÿëëÈ&ä& m #ÿÿÿíëÈ&ä& m 8ÿÿÿðëÈ&ä& m MÿÿÿìëÈ&ä& m bÿÿÿíëÈ&ä& m wÿÿÿíëÈ&ä& m ŒÿÿÿçëÈ&ä& m ¡ÿÿÿïëÈ&Û& X ¶ÿÿÿîëÈ&Û& X ËÿÿÿèìÈ&ä& m àÿÿÿèëÈ&Û& f õÿÿÿéëÈ&Û& X ÿÿÿçëÈ&Û& X ÿÿÿçëÈ&Û& X 4ÿÿÿçëÈ&ä& _ IÿÿÿëëÈ&Û& X ^ÿÿÿìëÈ&ä& m sÿÿÿíëÈ&Û& X ˆÿÿÿçëÈ&ä& _ ÿÿÿëÐÎ&Ë tÿÿÿëÐÎ&Ý& ‚ ~ÿÿÿëÐÎ&Ý& ‚ “ÿÿÿêëÎ&Ý& ‚ ¨ÿÿÿðÕÎ&Ô& { ½ÿÿÿéãÎ&Ý& ‚ ÒÿÿÿçßÎ&æ& — çÿÿÿïÕÎ&Ý& ‚ üÿÿÿíÕÎ&æ& — ÿÿÿëÐÎ&æ& — &ÿÿÿíÐÎ&æ& — ;ÿÿÿíÐÎ&æ& — PÿÿÿëéÎ&æ& — eÿÿÿîÔÎ&æ& — zÿÿÿíÖÎ&æ& — ÿÿÿçÛÎ&æ& — ¤ÿÿÿïÐÎ&Ý& ‚ ¹ÿÿÿîÐÎ&Ý& ‚ ÎÿÿÿêéÎ&æ& — ãÿÿÿèãÎ&Ý&  øÿÿÿçéÎ&Ý& ‚ ÿÿÿçÔÎ&Ý&  "ÿÿÿçÞÎ&Ý& ‚ 7ÿÿÿíÞÎ&æ& ‰ LÿÿÿëÐÎ&Ý& ‚ aÿÿÿìÕÎ&æ& — vÿÿÿíØÎ&Ý& ‚ ‹ÿÿÿçÜÎ&æ& ‰  ÿÿÿëÐÎ&Í žÿÿÿëÐÎ&ß& ¬ ~ÿÿÿëÐÎ&ß& ¬ “ÿÿÿêëÎ&ß& ¬ ¨ÿÿÿðÕÎ&Ö& ¥ ½ÿÿÿéãÎ&ß& ¬ ÒÿÿÿçßÎ&è& Á çÿÿÿïÕÎ&ß& ¬ üÿÿÿíÕÎ&è& Á ÿÿÿëÐÎ&è& Á &ÿÿÿíÐÎ&è& Á ;ÿÿÿíÐÎ&è& Á PÿÿÿëéÎ&è& Á eÿÿÿîÔÎ&è& Á zÿÿÿíÖÎ&è& Á ÿÿÿçÛÎ&è& Á ¤ÿÿÿïÐÎ&ß& ¬ ¹ÿÿÿîÐÎ&ß& ¬ ÎÿÿÿêéÎ&è& Á ãÿÿÿèãÎ&ß& º øÿÿÿçéÎ&ß& ¬ ÿÿÿçÔÎ&ß& º "ÿÿÿçÞÎ&ß& ¬ 7ÿÿÿíÞÎ&è& ³ LÿÿÿëÐÎ&ß& ¬ aÿÿÿìÕÎ&è& Á vÿÿÿíØÎ&ß& ¬ ‹ÿÿÿçÜÎ&è& ³  ÿÿÿëÑÎ&Ë ÈÿÿÿëÐÎ&Ý& Ö }ÿÿÿëÐÎ&Ý& Ö ’ÿÿÿêëÎ&Ý& Ö §ÿÿÿðÕÎ&Ô& Ï ¼ÿÿÿéãÎ&Ý& Ö ÑÿÿÿçßÎ&æ& ë æÿÿÿïÕÎ&Ý& Ö ûÿÿÿíÕÎ&æ& ë ÿÿÿëÐÎ&æ& ë %ÿÿÿíÐÎ&æ& ë :ÿÿÿíÐÎ&æ& ë OÿÿÿëèÎ&æ& ë dÿÿÿîÔÎ&æ& ë yÿÿÿíÖÎ&æ& ë ŽÿÿÿçÛÎ&æ& ë £ÿÿÿïÐÎ&Ý& Ö ¸ÿÿÿîÐÎ&Ý& Ö ÍÿÿÿêéÎ&æ& ë âÿÿÿèãÎ&Ý& ä ÷ÿÿÿçéÎ&Ý& Ö ÿÿÿçÔÎ&Ý& ä !ÿÿÿçÞÎ&Ý& Ö 6ÿÿÿçÞÎ&æ& Ý KÿÿÿëÐÎ&Ý& Ö `ÿÿÿìÕÎ&æ& ë uÿÿÿíØÎ&Ý& Ö ŠÿÿÿçÖÎ&æ& Ý ŸÿÿÿíëÈ&É òÿÿÿëëÈ&Û&  {ÿÿÿëëÈ&Û&  ÿÿÿêëÈ&Û&  ¥ÿÿÿðëÈ&Ò& ù ºÿÿÿéëÈ&Û&  ÏÿÿÿçëÈ&ä&  äÿÿÿïëÈ&Û&  ùÿÿÿíëÈ&ä&  ÿÿÿëëÈ&ä&  #ÿÿÿíëÈ&ä&  8ÿÿÿðëÈ&ä&  MÿÿÿìëÈ&ä&  bÿÿÿíëÈ&ä&  wÿÿÿíëÈ&ä&  ŒÿÿÿçëÈ&ä&  ¡ÿÿÿïëÈ&Û&  ¶ÿÿÿîëÈ&Û&  ËÿÿÿèìÈ&ä&  àÿÿÿèëÈ&Û&  õÿÿÿéëÈ&Û&  ÿÿÿçëÈ&Û&  ÿÿÿçëÈ&Û&  4ÿÿÿçëÈ&ä&  IÿÿÿëëÈ&Û&  ^ÿÿÿìëÈ&ä&  sÿÿÿíëÈ&Û&  ˆÿÿÿçëÈ&ä&  ÿÿ ë¼&È ÿÿÿëëÈ&Ú& ) {ÿÿÿëëÈ&Ú& ) ÿÿÿêëÈ&Ú& ) ¥ÿÿÿðëÈ&Ñ& " ºÿÿÿéëÈ&Ú& ) ÏÿÿÿçëÈ&ã& > äÿÿÿïëÈ&Ú& ) ùÿÿÿíëÈ&ã& > ÿÿÿëëÈ&ã& > #ÿÿÿíëÈ&ã& > 8ÿÿÿðëÈ&ã& > MÿÿÿìëÈ&ã& > bÿÿÿíëÈ&ã& > wÿÿÿíëÈ&ã& > ŒÿÿÿçëÈ&ã& > ¡ÿÿÿïëÈ&Ú& ) ¶ÿÿÿîëÈ&Ú& ) ËÿÿÿèìÈ&ã& > àÿÿÿèëÈ&Ú& 7 õÿÿÿéëÈ&Ú& ) ÿÿÿçëÈ&Ú& 7 ÿÿÿçëÈ&Ú& ) 4ÿÿÿçëÈ&ã& 0 IÿÿÿëëÈ&Ú& ) ^ÿÿÿìëÈ&ã& > sÿÿÿíëÈ&Ú& ) ˆÿÿÿçëÈ&ã& 0 ÿÿÿëÐÎ&Ê DÿÿÿëÐÎ&Ü& R |ÿÿÿëÐÎ&Ü& R ‘ÿÿÿêëÎ&Ü& R ¦ÿÿÿðÕÎ&Ó& K »ÿÿÿêãÎ&Ü& R ÐÿÿÿçßÎ&å& g åÿÿÿïÕÎ&Ü& R úÿÿÿíÕÎ&å& g ÿÿÿëÐÎ&å& g $ÿÿÿíÐÎ&å& g 9ÿÿÿíÐÎ&å& g NÿÿÿìéÎ&å& g cÿÿÿîÔÎ&å& g xÿÿÿíÕÎ&å& g ÿÿÿçÛÎ&å& g ¢ÿÿÿïÐÎ&Ü& R ·ÿÿÿîÐÎ&Ü& R ÌÿÿÿèéÎ&å& g áÿÿÿèãÎ&Ü& ` öÿÿÿééÎ&Ü& R ÿÿÿçÔÎ&Ü& ` ÿÿÿçâÎ&Ü& R 5ÿÿÿçâÎ&å& Y JÿÿÿëÐÎ&Ü& R _ÿÿÿìÕÎ&å& g tÿÿÿíØÎ&Ü& R ‰ÿÿÿçÜÎ&å& Y žÿÿÿëÑÎ&Å kÿÿÿëÐÎ&×& q yÿÿÿëÐÎ&×& q ŽÿÿÿèìÎ&×& q £ÿÿÿðÕÎ&Î& n ¸ÿÿÿéãÎ&×& q ÍÿÿÿçßÎ&à& w âÿÿÿïÕÎ&×& q ÷ÿÿÿíÕÎ&à& w ÿÿÿëÑÎ&à& w !ÿÿÿíÑÎ&à& w 6ÿÿÿíÑÎ&à& w KÿÿÿìéÎ&à& w `ÿÿÿíÔÎ&à& w uÿÿÿíÕÎ&à& w ŠÿÿÿçÛÎ&à& w ŸÿÿÿïÐÎ&×& q ´ÿÿÿîÐÎ&×& q ÉÿÿÿèìÎ&à& w ÞÿÿÿèãÎ&×& t óÿÿÿééÎ&×& q ÿÿÿçÔÎ&×& t ÿÿÿçÞÎ&×& q 2ÿÿÿçÞÎ&à& q GÿÿÿëÐÎ&×& q \ÿÿÿìÕÎ&à& w qÿÿÿíØÎ&×& q †ÿÿÿçÖÎ&à& q ›ÿÿÿëöÎ&Uéÿÿ ÿëõÎ&û&[ xÿÿ ÿëõÎ&û&[ ÿÿ ÿèõÎ&û&[ ¢ÿÿ ÿðöÎ&ò& ·Xÿÿ ÿêõÎ&û&[ Ìÿÿ ÿçõÎ&&a áÿÿ ÿïõÎ&û&[ öÿÿ ÿíõÎ&a& ûÿÿ ÿëõÎ&&a ÿÿ ÿíõÎ&&a 5ÿÿ ÿíõÎ&&a Jÿÿ ÿìõÎ&&a _ÿÿ ÿíõÎ&&a tÿÿ ÿíõÎ&&a ‰ÿÿ ÿçõÎ&&a žÿÿ ÿïõÎ&û&[ ³ÿÿ ÿîõÎ&û&[ Èÿÿ ÿèõÎ&&a Ýÿÿ ÿèöÎ&û&^ òÿÿ ÿéõÎ&û&[ ÿÿ ÿçöÎ&û&^ -ÿÿ ÿçõÎ&û&[ 1ÿÿ ÿçõÎ&&[ Fÿÿ ÿëõÎ&û&[ [ÿÿ ÿìõÎ&&a pÿÿ ÿíõÎ&û&[ …ÿÿ ÿçõÎ&&[ šÿÿ ÿëÐÎ&ëdÿÿÿëÐÎ&j&ý zÿÿÿëÐÎ&ý&j ÿÿÿèìÎ&ý&j ¤ÿÿÿðÕÎ&ô&g ¹ÿÿÿéãÎ&ý&j Îÿÿ ÿçßÎ&&p ãÿÿÿïÕÎ&ý&j øÿÿ ÿíÕÎ&&p ÿÿ ÿëÐÎ&&p "ÿÿ ÿíÐÎ&&p 7ÿÿ ÿíÐÎ&&p Lÿÿ ÿìéÎ&&p aÿÿ ÿíÔÎ&&p vÿÿ ÿíÕÎ&&p ‹ÿÿ ÿçÛÎ&&p  ÿÿÿïÐÎ&ý&j µÿÿÿîÐÎ&ý&j Êÿÿ ÿèìÎ&&p ßÿÿÿèàÎ&ý&m ôÿÿÿééÎ&ý&j ÿÿÿçÔÎ&m& ,ýÿÿÿçÞÎ&ý&j 3ÿÿ ÿçÞÎ&&j HÿÿÿëÐÎ&ý&j ]ÿÿ ÿìÕÎ&&p rÿÿÿíØÎ&ý&j ‡ÿÿ ÿçÜÎ&&j œÿÿÿëöÎ&ésÿÿ ÿëöÎ&û&y xÿÿ ÿëöÎ&û&y ÿÿ ÿèöÎ&û&y ¢ÿÿ ÿðöÎ&ò&v ·ÿÿ ÿêöÎ&û&y Ìÿÿ ÿçöÎ&& áÿÿ ÿïöÎ&û&y öÿÿ ÿíöÎ&& ÿÿ ÿëöÎ&& ÿÿ ÿíöÎ&& 5ÿÿ ÿíöÎ&& Jÿÿ ÿìöÎ&& _ÿÿ ÿíöÎ&& tÿÿ ÿíöÎ&& ‰ÿÿ ÿçöÎ&& žÿÿ ÿïöÎ&û&y ³ÿÿ ÿîöÎ&û&y Èÿÿ ÿèöÎ&& Ýÿÿ ÿèöÎ&û&| òÿÿ ÿéöÎ&û&y ÿÿ ÿçöÎ&û&| ÿÿ ÿçöÎ&û&y 1ÿÿ ÿçöÎ&&y Fÿÿ ÿëöÎ&û&y [ÿÿ ÿìöÎ&& pÿÿ ÿíöÎ&û&y …ÿÿ ÿçöÎ&&y šÿÿ ÿëÐÎ&ë‚ÿÿÿëÐÎ&ý&ˆ zÿÿÿëÐÎ&ý&ˆ ÿÿÿèìÎ&ý&ˆ ¤ÿÿÿðÕÎ&ô&… ¹ÿÿÿéãÎ&ý&ˆ Îÿÿ ÿçßÎ&&Ž ãÿÿÿïÕÎ&ý&ˆ øÿÿ ÿíÕÎ&&Ž ÿÿ ÿëÐÎ&&Ž "ÿÿ ÿíÐÎ&&Ž 7ÿÿ ÿíÐÎ&&Ž Lÿÿ ÿìéÎ&&Ž aÿÿ ÿíÔÎ&&Ž vÿÿ ÿíÕÎ&&Ž ‹ÿÿ ÿçÛÎ&&Ž  ÿÿÿïÐÎ&ý&ˆ µÿÿÿîÐÎ&ý&ˆ Êÿÿ ÿèìÎ&&Ž ßÿÿÿèàÎ&ý&‹ ôÿÿÿééÎ&ý&ˆ ÿÿÿçÔÎ&ý&‹ ÿÿÿçÞÎ&ý&ˆ 3ÿÿ ÿçÞÎ&&ˆ HÿÿÿëÐÎ&ý&ˆ ]ÿÿ ÿìÕÎ&&Ž rÿÿÿíØÎ&ý&ˆ ‡ÿÿ ÿçÜÎ&&ˆ œÿÿÿëÐÎ&ê‘ÿÿÿëÐÎ&¤& ‡üÿÿÿëÐÎ&ü&© ŽÿÿÿèìÎ&ü&© £ÿÿÿðÕÎ&ó& ¸›ÿÿÿéãÎ&ü&© ÍÿÿÿçßÎ&&³ âÿÿÿïÕÎ&ü&© ÷ÿÿÿíÕÎ&ü& ·ÿÿÿëÐÎ&&³ !ÿÿÿíÐÎ&&³ 6ÿÿÿíÐÎ&&³ KÿÿÿìéÎ&&³ `ÿÿÿíÔÎ&&³ uÿÿÿíÕÎ&&³ ŠÿÿÿçÛÎ&&³ ŸÿÿÿïÐÎ&ü&© ´ÿÿÿîÐÎ&ü&© ÉÿÿÿèìÎ&&³ ÞÿÿÿèãÎ&ü&½ óÿÿÿééÎ&ü&© ÿÿÿçÔÎ&À&ü ÿÿÿçÞÎ&ü&© 2ÿÿÿçÞÎ&&³ GÿÿÿëÐÎ&ü&© \ÿÿÿìÕÎ&&³ qÿÿÿíØÎ&ü&© †ÿÿÿçÖÎ&&³ ›ÿÿ ÿëÐÎ&ëÉÿÿÿëÐÎ&ý&Ù zÿÿÿëÐÎ&ý&Ù ÿÿÿèìÎ&ý&Ù ¤ÿÿÿðÕÎ&ô&Ï ¹ÿÿÿéãÎ&ý&Ù Îÿÿ ÿçßÎ&&ã ãÿÿÿïÕÎ&ý&Ù øÿÿ ÿíÕÎ&&ã ÿÿ ÿëÐÎ&&ã "ÿÿ ÿíÐÎ&&ã 7ÿÿ ÿíÐÎ&&ã Lÿÿ ÿìéÎ&&ã aÿÿ ÿíÔÎ&&ã vÿÿ ÿíÕÎ&&ã ‹ÿÿ ÿçÛÎ&&ã  ÿÿÿïÐÎ&ý&Ù µÿÿÿîÐÎ&ý&Ù Êÿÿ ÿèìÎ&&ã ßÿÿÿèàÎ&ý&í ôÿÿÿééÎ&ý&Ù ÿÿÿçÔÎ&ý&í ÿÿÿçÞÎ&ý&Ù 3ÿÿ ÿçÞÎ&&ã HÿÿÿëÐÎ&ý&Ù ]ÿÿ ÿìÕÎ&&ã rÿÿÿíØÎ&ý&Ù ‡ÿÿ ÿçÜÎ&&ã œÿÿÿëÐÎ&ê÷ÿÿÿëÐÎ&ü&  yÿÿÿëÐÎ&ü&  ŽÿÿÿèìÎ&ü&  £ÿÿÿðÕÎ&ó&ÿ ¸ÿÿÿéãÎ&ü&  ÍÿÿÿçßÎ&&  âÿÿÿïÕÎ&ü&  ÷ÿÿÿíÕÎ&&  ÿÿÿëÐÎ&&  !ÿÿÿíÐÎ&&  6ÿÿÿíÐÎ&&  KÿÿÿìéÎ&&  `ÿÿÿíÔÎ&&  uÿÿÿíÕÎ&&  ŠÿÿÿçÛÎ&&  ŸÿÿÿïÐÎ&ü&  ´ÿÿÿîÐÎ&ü&  ÉÿÿÿèìÎ&&  ÞÿÿÿèãÎ&ü&  óÿÿÿééÎ&ü&  ÿÿÿçÔÎ&ü&  ÿÿÿçÞÎ&ü&  2ÿÿÿçÞÎ&&  GÿÿÿëÐÎ&ü&  \ÿÿÿìÕÎ&&  qÿÿÿíØÎ&ü&  †ÿÿÿçÖÎ&&  ›ÿÿ ÿëÐÎ&ë &ÿÿÿëÐÎ&ý& : zÿÿÿëÐÎ&ý& : ÿÿÿèìÎ&ý& : ¤ÿÿÿðÕÎ&ô& 0 ¹ÿÿÿéãÎ&ý& : Îÿÿ ÿçßÎ&& D ãÿÿÿïÕÎ&ý& : øÿÿ ÿíÕÎ&& D ÿÿ ÿëÐÎ&& D "ÿÿ ÿíÐÎ&& D 7ÿÿ ÿíÐÎ&& D Lÿÿ ÿìéÎ&& D aÿÿ ÿíÔÎ&& D vÿÿ ÿíÕÎ&& D ‹ÿÿ ÿçÛÎ&& D  ÿÿÿïÐÎ&ý& : µÿÿÿîÐÎ&ý& : Êÿÿ ÿèìÎ&& D ßÿÿÿèàÎ&ý& N ôÿÿÿééÎ&ý& : ÿÿÿçÔÎ&ý& N ÿÿÿçÞÎ&ý& : 3ÿÿ ÿçÞÎ&& D HÿÿÿëÐÎ&ý& : ]ÿÿ ÿìÕÎ&& D rÿÿÿíØÎ&ý& : ‡ÿÿ ÿçÜÎ&& D œÿÿ êÃ&ì WÿÿÿëêÎ& i&þ {ÿÿÿëêÎ&þ& i ÿÿÿêêÎ&þ& i ¥ÿÿÿðêÎ&õ& _ ºÿÿÿéêÎ&þ& i ÏÿÿÿçêÎ&& s äÿÿÿïêÎ&þ& i ùÿÿÿíêÎ&& s ÿÿÿëêÎ&& s #ÿÿÿíêÎ&& s 8ÿÿÿðêÎ&& s MÿÿÿìêÎ&& s bÿÿÿíêÎ&& s wÿÿÿíêÎ&& s ŒÿÿÿçêÎ&& s ¡ÿÿÿïêÎ&þ& i ¶ÿÿÿîêÎ&þ& i ËÿÿÿèìÎ&& s àÿÿÿèêÎ&þ& | õÿÿÿéêÎ&þ& i ÿÿÿçêÎ&þ& | ÿÿÿçêÎ&þ& i 4ÿÿÿçêÎ&& s IÿÿÿëêÎ&þ& i ^ÿÿÿìêÎ&& s sÿÿÿíêÎ&þ& i ˆÿÿÿçêÎ&& s ÿÿÿëöÎ&î †ÿÿÿëöÎ&& š |ÿÿÿëöÎ&& š ‘ÿÿÿêöÎ&& š ¦ÿÿÿðöÎ&÷&  »ÿÿÿêöÎ&& š ÐÿÿÿçöÎ& & ¤ åÿÿÿïöÎ&& š úÿÿÿíöÎ& & ¤ ÿÿÿëöÎ& & ¤ $ÿÿÿíöÎ& & ¤ 9ÿÿÿíöÎ& & ¤ NÿÿÿìöÎ& & ¤ cÿÿÿîöÎ& & ¤ xÿÿÿíöÎ& & ¤ ÿÿÿçöÎ& & ¤ ¢ÿÿÿïöÎ&& š ·ÿÿÿîöÎ&& š ÌÿÿÿèöÎ& & ¤ áÿÿÿèöÎ&& ® öÿÿÿéöÎ&& š ÿÿÿçöÎ&& ® ÿÿÿçöÎ&& š 5ÿÿÿçöÎ& & ¤ JÿÿÿëöÎ&& š _ÿÿÿìöÎ& & ¤ tÿÿÿíöÎ&& š ‰ÿÿÿçöÎ& & ¤ žÿÿ ÿëÐÎ&ð ¸ÿÿÿëÐÎ&& Ì |ÿÿÿëÐÎ&& Ì ‘ÿÿÿêëÎ&& Ì ¦ÿÿÿðÕÎ&ù&  »ÿÿÿêãÎ&& Ì ÐÿÿÿçßÎ& & Ö åÿÿÿïÕÎ&& Ì úÿÿÿíÕÎ& & Ö ÿÿÿëÐÎ& & Ö $ÿÿÿíÐÎ& & Ö 9ÿÿÿíÐÎ& & Ö NÿÿÿìéÎ& & Ö cÿÿÿîÔÎ& & Ö xÿÿÿíÕÎ& & Ö ÿÿÿçÛÎ& & Ö ¢ÿÿÿïÐÎ&& Ì ·ÿÿÿîÐÎ&& Ì ÌÿÿÿèéÎ& & Ö áÿÿÿèãÎ&& à öÿÿÿééÎ&& Ì ÿÿÿçÔÎ&& à ÿÿÿçâÎ&& Ì 5ÿÿÿçâÎ& & Ö JÿÿÿëÐÎ&& Ì _ÿÿÿìÕÎ& & Ö tÿÿÿíØÎ&& Ì ‰ÿÿÿçÜÎ& & Ö žÿÿÿëÐÎ&î íÿÿÿëÐÎ&& ý |ÿÿÿëÐÎ&& ý ‘ÿÿÿêëÎ&& ý ¦ÿÿÿðÕÎ&÷& ó »ÿÿÿêãÎ&& ý ÐÿÿÿçßÎ& &  åÿÿÿïÕÎ&& ý úÿÿÿíÕÎ& &  ÿÿÿëÐÎ& &  $ÿÿÿíÐÎ& &  9ÿÿÿíÐÎ& &  NÿÿÿìéÎ& &  cÿÿÿîÔÎ& &  xÿÿÿíÕÎ& &  ÿÿÿçÛÎ& &  ¢ÿÿÿïÐÎ&& ý ·ÿÿÿîÐÎ&& ý ÌÿÿÿèéÎ& &  áÿÿÿèãÎ&&  öÿÿÿééÎ&& ý ÿÿÿçÔÎ&&  ÿÿÿçâÎ&& ý 5ÿÿÿçâÎ& &  JÿÿÿëÐÎ&& ý _ÿÿÿìÕÎ& &  tÿÿÿíØÎ&& ý ‰ÿÿÿçÜÎ& &  žÿÿ ëÃ&ì ÿÿÿëëÎ&þ& / {ÿÿÿëëÎ&þ& / ÿÿÿêëÎ&þ& / ¥ÿÿÿðëÎ&õ& % ºÿÿÿéëÎ&þ& / ÏÿÿÿçëÎ&& 9 äÿÿÿïëÎ&þ& / ùÿÿÿíëÎ&& 9 ÿÿÿëëÎ&& 9 #ÿÿÿíëÎ&& 9 8ÿÿÿðëÎ&& 9 MÿÿÿìëÎ&& 9 bÿÿÿíëÎ&& 9 wÿÿÿíëÎ&& 9 ŒÿÿÿçëÎ&& 9 ¡ÿÿÿïëÎ&þ& / ¶ÿÿÿîëÎ&þ& / ËÿÿÿèìÎ&& 9 àÿÿÿèëÎ&þ& C õÿÿÿéëÎ&þ& / ÿÿÿçëÎ&þ& C ÿÿÿçëÎ&þ& / 4ÿÿÿçëÎ&& 9 IÿÿÿëëÎ&þ& / ^ÿÿÿìëÎ&& 9 sÿÿÿíëÎ&þ& / ˆÿÿÿçëÎ&& 9 ÿÿÿëëÎ& KíÿÿÿëëÎ&ÿ& V {ÿÿÿëëÎ&ÿ& V ÿÿÿêëÎ&ÿ& V ¥ÿÿÿðëÎ&ÿ& Q ºÿÿÿéëÎ&ÿ& V ÏÿÿÿçëÎ&& k äÿÿÿïëÎ&ÿ& V ùÿÿÿíëÎ&& k ÿÿÿëëÎ&& k #ÿÿÿíëÎ&& k 8ÿÿÿðëÎ&& k MÿÿÿìëÎ&& k bÿÿÿíëÎ&& k wÿÿÿíëÎ&& k ŒÿÿÿçëÎ&& k ¡ÿÿÿïëÎ&ÿ& V ¶ÿÿÿîëÎ&ÿ& V ËÿÿÿèìÎ&& k àÿÿÿèëÎ&ÿ& d õÿÿÿéëÎ&ÿ& V ÿÿÿçëÎ&ÿ& V ÿÿÿçëÎ&ÿ& V 4ÿÿÿçëÎ&& ] IÿÿÿëëÎ&ÿ& V ^ÿÿÿìëÎ&& k sÿÿÿíëÎ&ÿ& V ˆÿÿÿçëÎ&& ] ÿÿÿëÐÎ&ï rÿÿÿëÐÎ&& € ~ÿÿÿëÐÎ&& € “ÿÿÿêëÎ&& € ¨ÿÿÿðÕÎ&ø& y ½ÿÿÿéãÎ&& € ÒÿÿÿçßÎ& & • çÿÿÿïÕÎ&& € üÿÿÿíÕÎ& & • ÿÿÿëÐÎ& & • &ÿÿÿíÐÎ& & • ;ÿÿÿíÐÎ& & • PÿÿÿëéÎ& & • eÿÿÿîÔÎ& & • zÿÿÿíÖÎ& & • ÿÿÿçÛÎ& & • ¤ÿÿÿïÐÎ&& € ¹ÿÿÿîÐÎ&& € ÎÿÿÿêéÎ& & • ãÿÿÿèãÎ&& Ž øÿÿÿçéÎ&& € ÿÿÿçÔÎ&& Ž "ÿÿÿçÞÎ&& € 7ÿÿÿíÞÎ& & ‡ LÿÿÿëÐÎ&& € aÿÿÿìÕÎ& & • vÿÿÿíØÎ&& € ‹ÿÿÿçÜÎ& & ‡  ÿÿÿëÐÎ&ñ œÿÿÿëÐÎ&& ª ~ÿÿÿëÐÎ&& ª “ÿÿÿêëÎ&& ª ¨ÿÿÿðÕÎ&ú& £ ½ÿÿÿéãÎ&& ª ÒÿÿÿçßÎ& & ¿ çÿÿÿïÕÎ&& ª üÿÿÿíÕÎ& & ¿ ÿÿÿëÐÎ& & ¿ &ÿÿÿíÐÎ& & ¿ ;ÿÿÿíÐÎ& & ¿ PÿÿÿëéÎ& & ¿ eÿÿÿîÔÎ& & ¿ zÿÿÿíÖÎ& & ¿ ÿÿÿçÛÎ& & ¿ ¤ÿÿÿïÐÎ&& ª ¹ÿÿÿîÐÎ&& ª ÎÿÿÿêéÎ& & ¿ ãÿÿÿèãÎ&& ¸ øÿÿÿçéÎ&& ª ÿÿÿçÔÎ&& ¸ "ÿÿÿçÞÎ&& ª 7ÿÿÿíÞÎ& & ± LÿÿÿëÐÎ&& ª aÿÿÿìÕÎ& & ¿ vÿÿÿíØÎ&& ª ‹ÿÿÿçÜÎ& & ±  ÿÿÿëÐÎ&ï ÆÿÿÿëÐÎ&& Ô }ÿÿÿëÐÎ&& Ô ’ÿÿÿêëÎ&& Ô §ÿÿÿðÕÎ&ø& Í ¼ÿÿÿéãÎ&& Ô ÑÿÿÿçßÎ& & é æÿÿÿïÕÎ&& Ô ûÿÿÿíÕÎ& & é ÿÿÿëÐÎ& & é %ÿÿÿíÐÎ& & é :ÿÿÿíÐÎ& & é OÿÿÿëèÎ& & é dÿÿÿîÔÎ& & é yÿÿÿíÖÎ& & é ŽÿÿÿçÛÎ& & é £ÿÿÿïÐÎ&& Ô ¸ÿÿÿîÐÎ&& Ô ÍÿÿÿêéÎ& & é âÿÿÿèãÎ&& â ÷ÿÿÿçéÎ&& Ô ÿÿÿçÔÎ&& â !ÿÿÿçÞÎ&& Ô 6ÿÿÿçÞÎ& & Û KÿÿÿëÐÎ&& Ô `ÿÿÿìÕÎ& & é uÿÿÿíØÎ&& Ô ŠÿÿÿçÖÎ& & Û ŸÿÿÿíëÎ&í ðÿÿÿëëÎ&ÿ& þ {ÿÿÿëëÎ&ÿ& þ ÿÿÿêëÎ&ÿ& þ ¥ÿÿÿðëÎ&ö& ÷ ºÿÿÿéëÎ&ÿ& þ ÏÿÿÿçëÎ&&  äÿÿÿïëÎ&ÿ& þ ùÿÿÿíëÎ&&  ÿÿÿëëÎ&&  #ÿÿÿíëÎ&&  8ÿÿÿðëÎ&&  MÿÿÿìëÎ&&  bÿÿÿíëÎ&&  wÿÿÿíëÎ&&  ŒÿÿÿçëÎ&&  ¡ÿÿÿïëÎ&ÿ& þ ¶ÿÿÿîëÎ&ÿ& þ ËÿÿÿèìÎ&&  àÿÿÿèëÎ&ÿ&  õÿÿÿéëÎ&ÿ& þ ÿÿÿçëÎ&ÿ&  ÿÿÿçëÎ&ÿ& þ 4ÿÿÿçëÎ&&  IÿÿÿëëÎ&ÿ& þ ^ÿÿÿìëÎ&&  sÿÿÿíëÎ&ÿ& þ ˆÿÿÿçëÎ&&  ÿÿ ëÃ&ì ÿÿÿëëÎ&þ& ' {ÿÿÿëëÎ&þ& ' ÿÿÿêëÎ&þ& ' ¥ÿÿÿðëÎ& & ºöÿÿÿéëÎ&þ& ' ÏÿÿÿçëÎ&& < äÿÿÿïëÎ&þ& ' ùÿÿÿíëÎ&& < ÿÿÿëëÎ&& < #ÿÿÿíëÎ&& < 8ÿÿÿðëÎ&& < MÿÿÿìëÎ&& < bÿÿÿíëÎ&& < wÿÿÿíëÎ&& < ŒÿÿÿçëÎ&& < ¡ÿÿÿïëÎ&þ& ' ¶ÿÿÿîëÎ&þ& ' ËÿÿÿèìÎ&& < àÿÿÿèëÎ&þ& 5 õÿÿÿéëÎ&þ& ' ÿÿÿçëÎ& 5& þÿÿÿçëÎ&þ& ' 4ÿÿÿçëÎ&& . IÿÿÿëëÎ&þ& ' ^ÿÿÿìëÎ&& < sÿÿÿíëÎ&þ& ' ˆÿÿÿçëÎ&& . ÿÿÿëÐÎ&î CÿÿÿëÐÎ&& P |ÿÿÿëÐÎ&& P ‘ÿÿÿêëÎ&& P ¦ÿÿÿðÕÎ&÷& I »ÿÿÿêãÎ&& P ÐÿÿÿçßÎ& & e åÿÿÿïÕÎ&& P úÿÿÿíÕÎ& & e ÿÿÿëÐÎ& & e $ÿÿÿíÐÎ& & e 9ÿÿÿíÐÎ& & e NÿÿÿìéÎ& & e cÿÿÿîÔÎ& & e xÿÿÿíÕÎ& & e ÿÿÿçÛÎ& & e ¢ÿÿÿïÐÎ&& P ·ÿÿÿîÐÎ&& P ÌÿÿÿèéÎ& & e áÿÿÿèãÎ&& ^ öÿÿÿééÎ&& P ÿÿÿçÔÎ&& ^ ÿÿÿçâÎ&& P 5ÿÿÿçâÎ& & W JÿÿÿëÐÎ&& P _ÿÿÿìÕÎ& & e tÿÿÿíØÎ&& P ‰ÿÿÿçÜÎ& & W žÿÿÿëÐÎ&é iÿÿ ÿëÐÎ& o&û xÿÿ ÿëÐÎ&û& o Žÿÿ ÿèìÎ&û& o £ÿÿ ÿðÕÎ& l& »òÿÿ ÿéãÎ&û& o Íÿÿ ÿçßÎ&& u âÿÿ ÿïÕÎ&û& o ÷ÿÿ ÿíÕÎ&û& o ÿÿ ÿëÐÎ&& u !ÿÿ ÿíÐÎ&& u 6ÿÿ ÿíÐÎ&& u Kÿÿ ÿìéÎ&& u `ÿÿ ÿíÔÎ&& u uÿÿ ÿíÕÎ&& u Šÿÿ ÿçÛÎ&& u Ÿÿÿ ÿïÐÎ&û& o ´ÿÿ ÿîÐÎ&û& o Éÿÿ ÿèìÎ&& u Þÿÿ ÿèãÎ&û& r óÿÿ ÿééÎ&û& o ÿÿ ÿçÔÎ&û& r ÿÿ ÿçÞÎ&û& o 2ÿÿ ÿçÞÎ&& o Gÿÿ ÿëÐÎ&û& o \ÿÿ ÿìÕÎ&& u qÿÿ ÿíØÎ&û& o †ÿÿ ÿçÖÎ&& o ›ÿÿ ÿëöÎ&V ÿÿÿëõÎ&&\ xÿÿÿëõÎ&&\ ÿÿÿèõÎ&&\ ¢ÿÿ ÿðöÎ&&Y ·ÿÿÿêõÎ&&\ Ìÿÿ ÿçõÎ&(&b áÿÿÿïõÎ&&\ öÿÿ ÿíõÎ&(&b ÿÿ ÿëõÎ&(&b ÿÿ ÿíõÎ&(&b 5ÿÿ ÿíõÎ&(&b Jÿÿ ÿìõÎ&(&b _ÿÿ ÿíõÎ&(&b tÿÿ ÿíõÎ&(&b ‰ÿÿ ÿçõÎ&(&b žÿÿÿïõÎ&&\ ³ÿÿÿîõÎ&&\ Èÿÿ ÿèõÎ&(&b ÝÿÿÿèõÎ&&_ òÿÿÿéõÎ&&\ ÿÿÿçõÎ&&_ ÿÿÿçõÎ&&\ 1ÿÿ ÿçõÎ&(&\ FÿÿÿëõÎ&&\ [ÿÿ ÿìõÎ&(&b pÿÿÿíõÎ&&\ …ÿÿ ÿçõÎ&(&\ šÿÿÿëÑÎ&eÿÿÿëÐÎ&!&k zÿÿÿëÐÎ&!&k ÿÿÿèìÎ&!&k ¤ÿÿÿðÕÎ&&h ¹ÿÿÿéãÎ&!&k ÎÿÿÿçßÎ&*&q ãÿÿÿïÕÎ&!&k øÿÿÿíÕÎ&*&q ÿÿÿëÑÎ&*&q "ÿÿÿíÑÎ&*&q 7ÿÿÿíÑÎ&*&q LÿÿÿìéÎ&*&q aÿÿÿíÔÎ&*&q vÿÿÿíÕÎ&*&q ‹ÿÿÿçÛÎ&*&q  ÿÿÿïÐÎ&!&k µÿÿÿîÐÎ&!&k ÊÿÿÿèìÎ&*&q ßÿÿÿèàÍ&!&n ôÿÿÿééÎ&!&k ÿÿÿçÔÍ&!&n ÿÿÿçÞÎ&!&k 3ÿÿÿçÞÎ&*&k HÿÿÿëÐÎ&!&k ]ÿÿÿìÕÎ&*&q rÿÿÿíØÎ&!&k ‡ÿÿÿçÜÎ&*&k œÿÿ ÿëöÎ& tÿÿÿëöÎ&&z xÿÿÿëöÎ&&z ÿÿÿèöÎ&&z ¢ÿÿ ÿðöÎ&&w ·ÿÿÿêöÎ&&z Ìÿÿ ÿçöÎ&(&€ áÿÿÿïöÎ&&z öÿÿ ÿíöÎ&(&€ ÿÿ ÿëöÎ&(&€ ÿÿ ÿíöÎ&(&€ 5ÿÿ ÿíöÎ&(&€ Jÿÿ ÿìöÎ&(&€ _ÿÿ ÿíöÎ&(&€ tÿÿ ÿíöÎ&(&€ ‰ÿÿ ÿçöÎ&(&€ žÿÿÿïöÎ&&z ³ÿÿÿîöÎ&&z Èÿÿ ÿèöÎ&(&€ ÝÿÿÿèöÎ&&} òÿÿÿéöÎ&&z ÿÿÿçöÎ&&} ÿÿÿçöÎ&&z 1ÿÿ ÿçöÎ&(&z FÿÿÿëöÎ&&z [ÿÿ ÿìöÎ&(&€ pÿÿÿíöÎ&&z …ÿÿ ÿçöÎ&(&z šÿÿÿëÐÎ&ƒÿÿÿëÐÎ&!&‰ zÿÿÿëÐÎ&!&‰ ÿÿÿèìÎ&!&‰ ¤ÿÿÿðÕÎ&&† ¹ÿÿÿéãÎ&!&‰ ÎÿÿÿçßÎ&*& ãÿÿÿïÕÎ&!&‰ øÿÿÿíÕÎ&*& ÿÿÿëÐÎ&*& "ÿÿÿíÐÎ&*& 7ÿÿÿíÐÎ&*& LÿÿÿìéÎ&*& aÿÿÿíÔÎ&*& vÿÿÿíÕÎ&*& ‹ÿÿÿçÛÎ&*&  ÿÿÿïÐÎ&!&‰ µÿÿÿîÐÎ&!&‰ ÊÿÿÿèìÎ&*& ßÿÿÿèàÎ&!&Œ ôÿÿÿééÎ&!&‰ ÿÿÿçÔÎ&!&Œ ÿÿÿçÞÎ&!&‰ 3ÿÿÿçÞÎ&*&‰ HÿÿÿëÐÎ&!&‰ ]ÿÿÿìÕÎ&*& rÿÿÿíØÎ&!&‰ ‡ÿÿÿçÜÎ&*&‰ œÿÿÿëÐÎ&“ÿÿÿëÐÎ& &¦ yÿÿÿëÐÎ& &¦ ŽÿÿÿèìÎ& &¦ £ÿÿÿðÕÎ&& ¸ÿÿÿéãÎ& &¦ ÍÿÿÿçßÎ&)&° âÿÿÿïÕÎ& &¦ ÷ÿÿÿíÕÎ&)&° ÿÿÿëÐÎ&)&° !ÿÿÿíÐÎ&)&° 6ÿÿÿíÐÎ&)&° KÿÿÿìéÎ&)&° `ÿÿÿíÔÎ&)&° uÿÿÿíÕÎ&)&° ŠÿÿÿçÛÎ&)&° ŸÿÿÿïÐÎ& &¦ ´ÿÿÿîÐÎ& &¦ ÉÿÿÿèìÎ&)&° ÞÿÿÿèãÎ& &º óÿÿÿééÎ& &¦ ÿÿÿçÔÎ& &º ÿÿÿçÞÎ& &¦ 2ÿÿÿçÞÎ&)&° GÿÿÿëÐÎ& &¦ \ÿÿÿìÕÎ&)&° qÿÿÿíØÎ& &¦ †ÿÿÿçÖÎ&)&° ›ÿÿÿëÐÎ&ÃÿÿÿëÐÎ&!&Ö zÿÿÿëÐÎ&!&Ö ÿÿÿèìÎ&!&Ö ¤ÿÿÿðÕÎ&&Ì ¹ÿÿÿéãÎ&!&Ö ÎÿÿÿçßÎ&*&à ãÿÿÿïÕÎ&!&Ö øÿÿÿíÕÎ&*&à ÿÿÿëÐÎ&*&à "ÿÿÿíÐÎ&*&à 7ÿÿÿíÐÎ&*&à LÿÿÿìéÎ&*&à aÿÿÿíÔÎ&*&à vÿÿÿíÕÎ&*&à ‹ÿÿÿçÛÎ&*&à  ÿÿÿïÐÎ&!&Ö µÿÿÿîÐÎ&!&Ö ÊÿÿÿèìÎ&*&à ßÿÿÿèàÎ&!&ê ôÿÿÿééÎ&!&Ö ÿÿÿçÔÎ&!&ê ÿÿÿçÞÎ&!&Ö 3ÿÿÿçÞÎ&*&à HÿÿÿëÐÎ&!&Ö ]ÿÿÿìÕÎ&*&à rÿÿÿíØÎ&!&Ö ‡ÿÿÿçÜÎ&*&à œÿÿÿëÐÎ&ôÿÿÿëÐÎ& &  yÿÿÿëÐÎ& &  ŽÿÿÿèìÎ& &  £ÿÿÿðÕÎ&&þ ¸ÿÿÿéãÎ& &  ÍÿÿÿçßÎ&)&  âÿÿÿïÕÎ& &  ÷ÿÿÿíÕÎ&)&  ÿÿÿëÐÎ&)&  !ÿÿÿíÐÎ&)&  6ÿÿÿíÐÎ&)&  KÿÿÿìéÎ&)&  `ÿÿÿíÔÎ&)&  uÿÿÿíÕÎ&)&  ŠÿÿÿçÛÎ&)&  ŸÿÿÿïÐÎ& &  ´ÿÿÿîÐÎ& &  ÉÿÿÿèìÎ&)&  ÞÿÿÿèãÎ& &  óÿÿÿééÎ& &  ÿÿÿçÔÎ& &  ÿÿÿçÞÎ& &  2ÿÿÿçÞÎ&)&  GÿÿÿëÐÎ& &  \ÿÿÿìÕÎ&)&  qÿÿÿíØÎ& &  †ÿÿÿçÖÎ&)&  ›ÿÿÿëÐÎ& #ÿÿÿëÐÎ&!& 7 zÿÿÿëÐÎ&!& 7 ÿÿÿèìÎ&!& 7 ¤ÿÿÿðÕÎ&& - ¹ÿÿÿéãÎ&!& 7 ÎÿÿÿçßÎ&*& A ãÿÿÿïÕÎ&!& 7 øÿÿÿíÕÎ&*& A ÿÿÿëÐÎ&*& A "ÿÿÿíÐÎ&*& A 7ÿÿÿíÐÎ&*& A LÿÿÿìéÎ&*& A aÿÿÿíÔÎ&*& A vÿÿÿíÕÎ&*& A ‹ÿÿÿçÛÎ&*& A  ÿÿÿïÐÎ&!& 7 µÿÿÿîÐÎ&!& 7 ÊÿÿÿèìÎ&*& A ßÿÿÿèàÎ&!& K ôÿÿÿééÎ&!& 7 ÿÿÿçÔÎ&!& K ÿÿÿçÞÎ&!& 7 3ÿÿÿçÞÎ&*& A HÿÿÿëÐÎ&!& 7 ]ÿÿÿìÕÎ&*& A rÿÿÿíØÎ&!& 7 ‡ÿÿÿçÜÎ&*& A œÿÿ ê¾& UÿÿÿëêÎ&"& f {ÿÿÿëêÎ&"& f ÿÿÿêêÎ&"& f ¥ÿÿÿðêË&& ] ºÿÿÿéêÎ&"& f ÏÿÿÿçêË&+& p äÿÿÿïêÎ&"& f ùÿÿÿíêË&+& p ÿÿÿëêË&+& p #ÿÿÿíêË&+& p 8ÿÿÿðêË&+& p MÿÿÿìêË&+& p bÿÿÿíêË&+& p wÿÿÿíêË&+& p ŒÿÿÿçêË&+& p ¡ÿÿÿïêÎ&"& f ¶ÿÿÿîêÎ&"& f ËÿÿÿèìË&+& p àÿÿÿèêÎ&"& y õÿÿÿéêÎ&"& f ÿÿÿçêÎ&"& y ÿÿÿçêÎ&"& f 4ÿÿÿçêË&+& p IÿÿÿëêÎ&"& f ^ÿÿÿìêË&+& p sÿÿÿíêÎ&"& f ˆÿÿÿçêË&+& p ÿÿ ÿëöÎ& ƒÿÿÿëöÎ&$& — |ÿÿÿëöÎ&$& — ‘ÿÿÿêöÎ&$& — ¦ÿÿÿðöÎ&&  »ÿÿÿêöÎ&$& — ÐÿÿÿçöÎ&-& ¡ åÿÿÿïöÎ&$& — úÿÿÿíöÎ&-& ¡ ÿÿÿëöÎ&-& ¡ $ÿÿÿíöÎ&-& ¡ 9ÿÿÿíöÎ&-& ¡ NÿÿÿìöÎ&-& ¡ cÿÿÿîöÎ&-& ¡ xÿÿÿíöÎ&-& ¡ ÿÿÿçöÎ&-& ¡ ¢ÿÿÿïöÎ&$& — ·ÿÿÿîöÎ&$& — ÌÿÿÿèöÎ&-& ¡ áÿÿÿèöÎ&$& « öÿÿÿéöÎ&$& — ÿÿÿçöÎ&$& « ÿÿÿçöÎ&$& — 5ÿÿÿçöÎ&-& ¡ JÿÿÿëöÎ&$& — _ÿÿÿìöÎ&-& ¡ tÿÿÿíöÎ&$& — ‰ÿÿÿçöÎ&-& ¡ žÿÿ ÿëÐÎ& µÿÿ ÿëÐÎ&&& É |ÿÿ ÿëÐÎ&&& É ‘ÿÿ ÿêëÎ&&& É ¦ÿÿ ÿðÕÎ&& ¿ »ÿÿ ÿêãÎ&&& É ÐÿÿÿçßÎ&/& Ó åÿÿ ÿïÕÎ&&& É úÿÿÿíÕÎ&/& Ó ÿÿÿëÐÎ&/& Ó $ÿÿÿíÐÎ&/& Ó 9ÿÿÿíÐÎ&/& Ó NÿÿÿìéÎ&/& Ó cÿÿÿîÔÎ&/& Ó xÿÿÿíÕÎ&/& Ó ÿÿÿçÛÎ&/& Ó ¢ÿÿ ÿïÐÎ&&& É ·ÿÿ ÿîÐÎ&&& É ÌÿÿÿèéÎ&/& Ó áÿÿ ÿèãÎ&&& Ý öÿÿ ÿééÎ&&& É ÿÿ ÿçÔÎ&&& Ý ÿÿ ÿçâÎ&&& É 5ÿÿÿçâÎ&/& Ó Jÿÿ ÿëÐÎ&&& É _ÿÿÿìÕÎ&/& Ó tÿÿ ÿíØÎ&&& É ‰ÿÿÿçÜÎ&/& Ó žÿÿ ÿëÐÎ& çÿÿÿëÐÎ&$& ú |ÿÿÿëÐÎ&$& ú ‘ÿÿÿêëÎ&$& ú ¦ÿÿÿðÕÎ&& ð »ÿÿÿêãÎ&$& ú ÐÿÿÿçßÎ&-&  åÿÿÿïÕÎ&$& ú úÿÿÿíÕÎ&-&  ÿÿÿëÐÎ&-&  $ÿÿÿíÐÎ&-&  9ÿÿÿíÐÎ&-&  NÿÿÿìéÎ&-&  cÿÿÿîÔÎ&-&  xÿÿÿíÕÎ&-&  ÿÿÿçÛÎ&-&  ¢ÿÿÿïÐÎ&$& ú ·ÿÿÿîÐÎ&$& ú ÌÿÿÿèéÎ&-&  áÿÿÿèãÎ&$&  öÿÿÿééÎ&$& ú ÿÿÿçÔÎ&$&  ÿÿÿçâÎ&$& ú 5ÿÿÿçâÎ&-&  JÿÿÿëÐÎ&$& ú _ÿÿÿìÕÎ&-&  tÿÿÿíØÎ&$& ú ‰ÿÿÿçÜÎ&-&  žÿÿ ë¾& ÿÿÿëëÎ&"& , {ÿÿÿëëÎ&"& , ÿÿÿêëÎ&"& , ¥ÿÿÿðëË&& " ºÿÿÿéëÎ&"& , ÏÿÿÿçëË&+& 6 äÿÿÿïëÎ&"& , ùÿÿÿíëË&+& 6 ÿÿÿëëË&+& 6 #ÿÿÿíëË&+& 6 8ÿÿÿðëË&+& 6 MÿÿÿìëË&+& 6 bÿÿÿíëË&+& 6 wÿÿÿíëË&+& 6 ŒÿÿÿçëË&+& 6 ¡ÿÿÿïëÎ&"& , ¶ÿÿÿîëÎ&"& , ËÿÿÿèìË&+& 6 àÿÿÿèëÎ&"& @ õÿÿÿéëÎ&"& , ÿÿÿçëÎ&"& @ ÿÿÿçëÎ&"& , 4ÿÿÿçëË&+& 6 IÿÿÿëëÎ&"& , ^ÿÿÿìëË&+& 6 sÿÿÿíëÎ&"& , ˆÿÿÿçëË&+& 6 ÿÿÿëëË& IÿÿÿëëË&#& T {ÿÿÿëëË&#& T ÿÿÿêëË&#& T ¥ÿÿÿðëË&& O ºÿÿÿéëË&#& T ÏÿÿÿçëË&,& i äÿÿÿïëË&#& T ùÿÿÿíëË&,& i ÿÿÿëëË&,& i #ÿÿÿíëË&,& i 8ÿÿÿðëË&,& i MÿÿÿìëË&,& i bÿÿÿíëË&,& i wÿÿÿíëË&,& i ŒÿÿÿçëË&,& i ¡ÿÿÿïëË&#& T ¶ÿÿÿîëË&#& T ËÿÿÿèìË&,& i àÿÿÿèëË&#& b õÿÿÿéëË&#& T ÿÿÿçëË&#& T ÿÿÿçëË&#& T 4ÿÿÿçëË&,& [ IÿÿÿëëË&#& T ^ÿÿÿìëË&,& i sÿÿÿíëË&#& T ˆÿÿÿçëË&,& [ ÿÿ ÿëÐÎ& pÿÿÿëÐÎ&%& ~ ~ÿÿÿëÐÎ&%& ~ “ÿÿÿêëÎ&%& ~ ¨ÿÿÿðÕÎ&& w ½ÿÿÿéãÎ&%& ~ ÒÿÿÿçßÎ&.& “ çÿÿÿïÕÎ&%& ~ üÿÿÿíÕÎ&.& “ ÿÿÿëÐÎ&.& “ &ÿÿÿíÐÎ&.& “ ;ÿÿÿíÐÎ&.& “ PÿÿÿëéÎ&.& “ eÿÿÿîÔÎ&.& “ zÿÿÿíÖÎ&.& “ ÿÿÿçÛÎ&.& “ ¤ÿÿÿïÐÎ&%& ~ ¹ÿÿÿîÐÎ&%& ~ ÎÿÿÿêéÎ&.& “ ãÿÿÿèãÎ&%& Œ øÿÿÿçéÎ&%& ~ ÿÿÿçÔÎ&%& Œ "ÿÿÿçÞÎ&%& ~ 7ÿÿÿíÞÎ&.& … LÿÿÿëÐÎ&%& ~ aÿÿÿìÕÎ&.& “ vÿÿÿíØÎ&%& ~ ‹ÿÿÿçÜÎ&.& …  ÿÿ ÿëÐÎ& šÿÿÿëÐÎ&'& ¨ ~ÿÿÿëÐÎ&'& ¨ “ÿÿÿêëÎ&'& ¨ ¨ÿÿ ÿðÕÎ&& ¡ ½ÿÿÿéãÎ&'& ¨ Òÿÿ ÿçßÎ&0& ½ çÿÿÿïÕÎ&'& ¨ üÿÿ ÿíÕÎ&0& ½ ÿÿ ÿëÐÎ&0& ½ &ÿÿ ÿíÐÎ&0& ½ ;ÿÿ ÿíÐÎ&0& ½ Pÿÿ ÿëéÎ&0& ½ eÿÿ ÿîÔÎ&0& ½ zÿÿ ÿíÖÎ&0& ½ ÿÿ ÿçÛÎ&0& ½ ¤ÿÿÿïÐÎ&'& ¨ ¹ÿÿÿîÐÎ&'& ¨ Îÿÿ ÿêéÎ&0& ½ ãÿÿÿèãÎ&'& ¶ øÿÿÿçéÎ&'& ¨ ÿÿÿçÔÎ&'& ¶ "ÿÿÿçÞÎ&'& ¨ 7ÿÿ ÿíÞÎ&0& ¯ LÿÿÿëÐÎ&'& ¨ aÿÿ ÿìÕÎ&0& ½ vÿÿÿíØÎ&'& ¨ ‹ÿÿ ÿçÜÎ&0& ¯  ÿÿ ÿëÐÎ& ÄÿÿÿëÐÎ&%& Ò }ÿÿÿëÐÎ&%& Ò ’ÿÿÿêëÎ&%& Ò §ÿÿÿðÕÎ&& Ë ¼ÿÿÿéãÎ&%& Ò ÑÿÿÿçßÎ&.& ç æÿÿÿïÕÎ&%& Ò ûÿÿÿíÕÎ&.& ç ÿÿÿëÐÎ&.& ç %ÿÿÿíÐÎ&.& ç :ÿÿÿíÐÎ&.& ç OÿÿÿëèÎ&.& ç dÿÿÿîÔÎ&.& ç yÿÿÿíÖÎ&.& ç ŽÿÿÿçÛÎ&.& ç £ÿÿÿïÐÎ&%& Ò ¸ÿÿÿîÐÎ&%& Ò ÍÿÿÿêéÎ&.& ç âÿÿÿèãÎ&%& à ÷ÿÿÿçéÎ&%& Ò ÿÿÿçÔÎ&%& à !ÿÿÿçÞÎ&%& Ò 6ÿÿÿçÞÎ&.& Ù KÿÿÿëÐÎ&%& Ò `ÿÿÿìÕÎ&.& ç uÿÿÿíØÎ&%& Ò ŠÿÿÿçÖÎ&.& Ù ŸÿÿÿíëË& îÿÿÿëëË&#& ü {ÿÿÿëëË&#& ü ÿÿÿêëË&#& ü ¥ÿÿÿðëË&& õ ºÿÿÿéëË&#& ü ÏÿÿÿçëË&,&  äÿÿÿïëË&#& ü ùÿÿÿíëË&,&  ÿÿÿëëË&,&  #ÿÿÿíëË&,&  8ÿÿÿðëË&,&  MÿÿÿìëË&,&  bÿÿÿíëË&,&  wÿÿÿíëË&,&  ŒÿÿÿçëË&,&  ¡ÿÿÿïëË&#& ü ¶ÿÿÿîëË&#& ü ËÿÿÿèìË&,&  àÿÿÿèëË&#&  õÿÿÿéëË&#& ü ÿÿÿçëË&#&  ÿÿÿçëË&#& ü 4ÿÿÿçëË&,&  IÿÿÿëëË&#& ü ^ÿÿÿìëË&,&  sÿÿÿíëË&#& ü ˆÿÿÿçëË&,&  ÿÿ ë¾& ÿÿÿëëÎ&"& % {ÿÿÿëëÎ&"& % ÿÿÿêëÎ&"& % ¥ÿÿÿðëË&&  ºÿÿÿéëÎ&"& % ÏÿÿÿçëË&+& : äÿÿÿïëÎ&"& % ùÿÿÿíëË&+& : ÿÿÿëëË&+& : #ÿÿÿíëË&+& : 8ÿÿÿðëË&+& : MÿÿÿìëË&+& : bÿÿÿíëË&+& : wÿÿÿíëË&+& : ŒÿÿÿçëË&+& : ¡ÿÿÿïëÎ&"& % ¶ÿÿÿîëÎ&"& % ËÿÿÿèìË&+& : àÿÿÿèëÎ&"& 3 õÿÿÿéëÎ&"& % ÿÿÿçëÎ&"& 3 ÿÿÿçëÎ&"& % 4ÿÿÿçëË&+& , IÿÿÿëëÎ&"& % ^ÿÿÿìëË&+& : sÿÿÿíëÎ&"& % ˆÿÿÿçëË&+& , ÿÿ ÿëÐÎ& AÿÿÿëÐÎ&$& N |ÿÿÿëÐÎ&$& N ‘ÿÿÿêëÎ&$& N ¦ÿÿÿðÕÎ&& G »ÿÿÿêãÎ&$& N ÐÿÿÿçßÎ&-& c åÿÿÿïÕÎ&$& N úÿÿÿíÕÎ&-& c ÿÿÿëÐÎ&-& c $ÿÿÿíÐÎ&-& c 9ÿÿÿíÐÎ&-& c NÿÿÿìéÎ&-& c cÿÿÿîÔÎ&-& c xÿÿÿíÕÎ&-& c ÿÿÿçÛÎ&-& c ¢ÿÿÿïÐÎ&$& N ·ÿÿÿîÐÎ&$& N ÌÿÿÿèéÎ&-& c áÿÿÿèãÎ&$& \ öÿÿÿééÎ&$& N ÿÿÿçÔÎ&$& \ ÿÿÿçâÎ&$& N 5ÿÿÿçâÎ&-& U JÿÿÿëÐÎ&$& N _ÿÿÿìÕÎ&-& c tÿÿÿíØÎ&$& N ‰ÿÿÿçÜÎ&-& U žÿÿ ÿëÐÎ&  jÿÿÿëÐÎ&& p yÿÿÿëÐÎ&& p ŽÿÿÿèìÎ&& p £ÿÿ ÿðÕÎ&& m ¸ÿÿÿéãÎ&& p Íÿÿ ÿçßÎ&(& v âÿÿÿïÕÎ&& p ÷ÿÿ ÿíÕÎ&(& v ÿÿ ÿëÐÎ&(& v !ÿÿ ÿíÐÎ&(& v 6ÿÿ ÿíÐÎ&(& v Kÿÿ ÿìéÎ&(& v `ÿÿ ÿíÔÎ&(& v uÿÿ ÿíÕÎ&(& v Šÿÿ ÿçÛÎ&(& v ŸÿÿÿïÐÎ&& p ´ÿÿÿîÐÎ&& p Éÿÿ ÿèìÎ&(& v ÞÿÿÿèãÎ&& s óÿÿÿééÎ&& p ÿÿÿçÔÎ&& s ÿÿÿçÞÎ&& p 2ÿÿ ÿçÞÎ&(& p GÿÿÿëÐÎ&& p \ÿÿ ÿìÕÎ&(& v qÿÿÿíØÎ&& p †ÿÿ ÿçÖÎ&(& p ›ÿÿÿëöÎ&U1ÿÿÿëõÎ&A&[ xÿÿÿëõÎ&A&[ ÿÿÿèõÎ&A&[ ¢ÿÿÿðöÎ&:&X »ÿÿÿêõÎ&A&[ ÌÿÿÿçõÎ& ã&aJÿÿÿïõÎ&A&[ öÿÿÿíõÎ&J&a ÿÿÿëõÎ&J&a ÿÿÿíõÎ&J&a 5ÿÿÿíõÎ&J&a JÿÿÿìõÎ&J&a _ÿÿÿíõÎ&J&a tÿÿÿíõÎ&J&a ‰ÿÿÿçõÎ&J&a žÿÿÿïõÎ&J&a ³ÿÿÿîõÎ&A&[ ÈÿÿÿèõÎ&J&a ÝÿÿÿèöÎ&A&^ òÿÿÿéõÎ&A&a ÿÿÿçöÎ&A&^ ÿÿÿçõÎ&A&[ 1ÿÿÿçõÎ&J&[ FÿÿÿëõÎ&A&[ [ÿÿÿìõÎ&J&a pÿÿÿíõÎ&J&a …ÿÿÿçõÎ&J&[ šÿÿÿëÐÎ&3dÿÿÿëÐÎ&C&j zÿÿÿëÐÎ&C&j ÿÿÿèìÎ&C&j ¤ÿÿÿðÕÎ&;&g ¹ÿÿÿéãÎ&C&j ÎÿÿÿçßÎ&L&p ãÿÿÿïÕÎ&C&j øÿÿÿíÕÎ&L&p ÿÿÿëÐÎ&L&p "ÿÿÿíÐÎ&L&p 7ÿÿÿíÐÎ&L&p LÿÿÿìéÎ&L&p aÿÿÿíÔÎ&L&p vÿÿÿíÕÎ&L&p ‹ÿÿÿçÛÎ&L&p  ÿÿÿïÐÎ&C&j µÿÿÿîÐÎ&C&j ÊÿÿÿèìÎ&L&p ßÿÿÿèàÎ&C&m ôÿÿÿééÎ&C&j ÿÿÿçÔÎ&C&m ÿÿÿçÞÎ&C&j 3ÿÿÿçÞÎ&L&j HÿÿÿëÐÎ&C&j ]ÿÿÿìÕÎ&L&p rÿÿÿíØÎ&C&j ‡ÿÿÿçÜÎ&L&j œÿÿÿëöÎ&s1ÿÿÿëöÎ&A&y xÿÿÿëöÎ&A&y ÿÿÿèöÎ&A&y ¢ÿÿÿðöÎ&:&v ·ÿÿÿêöÎ&A&y ÌÿÿÿçöÎ&J& áÿÿÿïöÎ&A&y öÿÿÿíöÎ&J& ÿÿÿëöÎ&J& ÿÿÿíöÎ&J& 5ÿÿÿíöÎ&J& JÿÿÿìöÎ&J& _ÿÿÿíöÎ&J& tÿÿÿíöÎ&J& ‰ÿÿÿçöÎ&J& žÿÿÿïöÎ&A&y ³ÿÿÿîöÎ&A&y ÈÿÿÿèöÎ&J& ÝÿÿÿèöÎ&A&| òÿÿÿéöÎ&A&y ÿÿÿçöÎ&A&| *ÿÿÿçöÎ&A&y 1ÿÿÿçöÎ&J&y FÿÿÿëöÎ&A&y [ÿÿÿìöÎ&J& pÿÿÿíöÎ&A&y …ÿÿÿçöÎ&J&y šÿÿÿëÐÎ&3‚ÿÿÿëÐÎ&C&ˆ zÿÿÿëÐÎ&C&ˆ ÿÿÿèìÎ&C&ˆ ¤ÿÿÿðÕÎ&;&… ¹ÿÿÿéãÎ&C&ˆ ÎÿÿÿçßÎ&L&Ž ãÿÿÿïÕÎ&C&ˆ øÿÿÿíÕÎ&L&Ž ÿÿÿëÐÎ&L&Ž "ÿÿÿíÐÎ&L&Ž 7ÿÿÿíÐÎ&L&Ž LÿÿÿìéÎ&L&Ž aÿÿÿíÔÎ&L&Ž vÿÿÿíÕÎ&L&Ž ‹ÿÿÿçÛÎ&L&Ž  ÿÿÿïÐÎ&C&ˆ µÿÿÿîÐÎ&C&ˆ ÊÿÿÿèìÎ&L&Ž ßÿÿÿèàÎ&C&‹ ôÿÿÿééÎ&C&ˆ ÿÿÿçÔÎ&C&‹ ÿÿÿçÞÎ&C&ˆ 3ÿÿÿçÞÎ&L&ˆ HÿÿÿëÐÎ&C&ˆ ]ÿÿÿìÕÎ&L&Ž rÿÿÿíØÎ&C&ˆ ‡ÿÿÿçÜÎ&L&ˆ œÿÿÿëÐÎ&2‘ÿÿÿëÐÎ&B&¨ yÿÿÿëÐÎ&B&¨ ŽÿÿÿèìÎ&B&¨ £ÿÿÿðÕÎ& ¸&›:ÿÿÿéãÎ&B&¨ ÍÿÿÿçßÎ&K&² âÿÿÿïÕÎ&B&¨ ÷ÿÿÿíÕÎ& &¨BÿÿÿëÐÎ&K&² !ÿÿÿíÐÎ&K&² 6ÿÿÿíÐÎ&K&² KÿÿÿìéÎ&K&² `ÿÿÿíÔÎ&K&² uÿÿÿíÕÎ&K&² ŠÿÿÿçÛÎ&K&² ŸÿÿÿïÐÎ&B&¨ ´ÿÿÿîÐÎ&B&¨ ÉÿÿÿèìÎ&B&¨ ÞÿÿÿèãÎ&B& ó¼ÿÿÿééÎ&B&¨ ÿÿÿçÔÎ&B&¼ ÿÿÿçÞÎ&B&¨ 2ÿÿÿçÞÎ&K&² GÿÿÿëÐÎ&B&¨ \ÿÿÿìÕÎ&K&² qÿÿÿíØÎ&B&¨ †ÿÿÿçÖÎ&K&² ›ÿÿÿëÐÎ&É3ÿÿÿëÐÎ&C&Ø zÿÿÿëÐÎ&C&Ø ÿÿÿèìÎ&C&Ø ¤ÿÿÿðÕÎ&;&Î ¹ÿÿÿéãÎ&C&Ø ÎÿÿÿçßÎ&L&â ãÿÿÿïÕÎ&C&Ø øÿÿÿíÕÎ&L&â ÿÿÿëÐÎ&L&â "ÿÿÿíÐÎ&L&â 7ÿÿÿíÐÎ&L&â LÿÿÿìéÎ&L&â aÿÿÿíÔÎ&L&â vÿÿÿíÕÎ&L&â ‹ÿÿÿçÛÎ&L&â  ÿÿÿïÐÎ&C&Ø µÿÿÿîÐÎ&C&Ø ÊÿÿÿèìÎ&L&â ßÿÿÿèàÎ&C&ì ôÿÿÿééÎ&C&Ø ÿÿÿçÔÎ&C&ì ÿÿÿçÞÎ&C&Ø 3ÿÿÿçÞÎ&L&â HÿÿÿëÐÎ&C&Ø ]ÿÿÿìÕÎ&L&â rÿÿÿíØÎ&C&Ø ‡ÿÿÿçÜÎ&L&â œÿÿÿëÐÎ&2÷ÿÿÿëÐÎ& &B yÿÿÿëÐÎ&B&  ŽÿÿÿèìÎ&B&  £ÿÿÿðÕÎ& ¸&:ÿÿÿÿéãÎ&B&  ÍÿÿÿçßÎ&K&  âÿÿÿïÕÎ&B&  ÷ÿÿÿíÕÎ&B&  ÿÿÿëÐÎ&K&  !ÿÿÿíÐÎ&K&  6ÿÿÿíÐÎ&K&  KÿÿÿìéÎ&K&  `ÿÿÿíÔÎ&K&  uÿÿÿíÕÎ&K&  ŠÿÿÿçÛÎ&K&  ŸÿÿÿïÐÎ&B&  ´ÿÿÿîÐÎ&B&  ÉÿÿÿèìÎ&K&  ÞÿÿÿèãÎ&B&  óÿÿÿééÎ&B&  ÿÿÿçÔÎ& &B ÿÿÿçÞÎ&B&  2ÿÿÿçÞÎ&K&  GÿÿÿëÐÎ&B&  \ÿÿÿìÕÎ&K&  qÿÿÿíØÎ&B&  †ÿÿÿçÖÎ&K&  ›ÿÿÿëÐÎ& &3ÿÿÿëÐÎ&C& 9 zÿÿÿëÐÎ&C& 9 ÿÿÿèìÎ&C& 9 ¤ÿÿÿðÕÎ&;& / ¹ÿÿÿéãÎ&C& 9 ÎÿÿÿçßÎ&L& C ãÿÿÿïÕÎ&C& 9 øÿÿÿíÕÎ&L& C ÿÿÿëÐÎ&L& C "ÿÿÿíÐÎ&L& C 7ÿÿÿíÐÎ&L& C LÿÿÿìéÎ&L& C aÿÿÿíÔÎ&L& C vÿÿÿíÕÎ&L& C ‹ÿÿÿçÛÎ&L& C  ÿÿÿïÐÎ&C& 9 µÿÿÿîÐÎ&C& 9 ÊÿÿÿèìÎ&L& C ßÿÿÿèàÎ&C& M ôÿÿÿééÎ&C& 9 ÿÿÿçÔÎ&C& M ÿÿÿçÞÎ&C& 9 3ÿÿÿçÞÎ&L& C HÿÿÿëÐÎ&C& 9 ]ÿÿÿìÕÎ&L& C rÿÿÿíØÎ&C& 9 ‡ÿÿÿçÜÎ&L& C œÿÿ êÁ&4 WÿÿÿëêÏ&D& h {ÿÿÿëêÏ&D& h ÿÿÿêêÏ&D& h ¥ÿÿÿðêÏ& ^& º<ÿÿÿéêÏ&D& h ÏÿÿÿçêÏ&M& r äÿÿÿïêÏ&D& h ùÿÿÿíêÏ&M&  rÿÿÿëêÏ&M& r #ÿÿÿíêÏ&M& r 8ÿÿÿðêÏ&M& r MÿÿÿìêÏ&M& r bÿÿÿíêÏ&M& r wÿÿÿíêÏ&M& r ŒÿÿÿçêÏ&M& r ¡ÿÿÿïêÏ&D& h ¶ÿÿÿîêÏ&D& h ËÿÿÿèìÏ&M& r àÿÿÿèêÏ&D& { õÿÿÿéêÏ&D& h ÿÿÿçêÏ&D& { ÿÿÿçêÏ&D& h 4ÿÿÿçêÏ&M& r IÿÿÿëêÏ&D& h ^ÿÿÿìêÏ&M& r sÿÿÿíêÏ&D& h ˆÿÿÿçêÏ&M& r ÿÿÿëöÎ&6 †ÿÿÿëöÎ&F& ™ |ÿÿÿëöÎ&F& ™ ‘ÿÿÿêöÎ&F& ™ ¦ÿÿÿðöÎ& & »=ÿÿÿêöÎ&F& ™ ÐÿÿÿçöÎ&O& £ åÿÿÿïöÎ&F& ™ úÿÿÿíöÎ&O& £ ÿÿÿëöÎ&O& £ $ÿÿÿíöÎ&O& £ 9ÿÿÿíöÎ&O& £ NÿÿÿìöÎ&O& £ cÿÿÿîöÎ&O& £ xÿÿÿíöÎ&O& £ ÿÿÿçöÎ&O& £ ¢ÿÿÿïöÎ&F& ™ ·ÿÿÿîöÎ&F& ™ ÌÿÿÿèöÎ&O& £ áÿÿÿèöÎ&F& ­ öÿÿÿéöÎ&F& ™ ÿÿÿçöÎ& ­&F ÿÿÿçöÎ&F& ™ 5ÿÿÿçöÎ&O& £ JÿÿÿëöÎ&F& ™ _ÿÿÿìöÎ&O& £ tÿÿÿíöÎ&F& ™ ‰ÿÿÿçöÎ&O& £ žÿÿÿëÐÎ&8 ·ÿÿÿëÐÎ&H& Ë |ÿÿÿëÐÎ&H& Ë ‘ÿÿÿêëÎ&H& Ë ¦ÿÿÿðÕÎ&?& Á »ÿÿÿêãÎ&H& Ë ÐÿÿÿçßÎ&Q& Õ åÿÿÿïÕÎ&H& Ë úÿÿÿíÕÎ&Q& Õ ÿÿÿëÐÎ&Q& Õ $ÿÿÿíÐÎ&Q& Õ 9ÿÿÿíÐÎ&Q& Õ NÿÿÿìéÎ&Q& Õ cÿÿÿîÔÎ&Q& Õ xÿÿÿíÕÎ&Q& Õ ÿÿÿçÛÎ&Q& Õ ¢ÿÿÿïÐÎ&H& Ë ·ÿÿÿîÐÎ&H& Ë ÌÿÿÿèéÎ&Q& Õ áÿÿÿèãÎ&H& ß öÿÿÿééÎ&H& Ë ÿÿÿçÔÎ&H& ß ÿÿÿçâÎ&H& Ë 5ÿÿÿçâÎ&Q& Õ JÿÿÿëÐÎ&H& Ë _ÿÿÿìÕÎ&Q& Õ tÿÿÿíØÎ&H& Ë ‰ÿÿÿçÜÎ&Q& Õ žÿÿÿëÐÎ&6 íÿÿÿëÐÎ&F& ü |ÿÿÿëÐÎ&F& ü ‘ÿÿÿêëÎ&F& ü ¦ÿÿÿðÕÎ&=& ò »ÿÿÿêãÎ&F& ü ÐÿÿÿçßÎ&O&  åÿÿÿïÕÎ&F& ü úÿÿÿíÕÎ&O&  ÿÿÿëÐÎ&O&  $ÿÿÿíÐÎ&O&  9ÿÿÿíÐÎ&O&  NÿÿÿìéÎ&O&  cÿÿÿîÔÎ&O&  xÿÿÿíÕÎ&O&  ÿÿÿçÛÎ&O&  ¢ÿÿÿïÐÎ&F& ü ·ÿÿÿîÐÎ&F& ü ÌÿÿÿèéÎ&O&  áÿÿÿèãÎ&F&  öÿÿÿééÎ&F& ü ÿÿÿçÔÎ&F&  ÿÿÿçâÎ&F& ü 5ÿÿÿçâÎ&O&  JÿÿÿëÐÎ&F& ü _ÿÿÿìÕÎ&O&  tÿÿÿíØÎ&F& ü ‰ÿÿÿçÜÎ&O&  žÿÿ ëÁ&4 ÿÿÿëëÏ&D& . {ÿÿÿëëÏ&D& . ÿÿÿêëÏ&D& . ¥ÿÿÿðëÏ&<& $ ºÿÿÿéëÏ&D& . ÏÿÿÿçëÏ&M& 8 äÿÿÿïëÏ&D& . ùÿÿÿíëÏ&M& 8 ÿÿÿëëÏ&M& 8 #ÿÿÿíëÏ&M& 8 8ÿÿÿðëÏ&M& 8 MÿÿÿìëÏ&M& 8 bÿÿÿíëÏ&M& 8 wÿÿÿíëÏ&M& 8 ŒÿÿÿçëÏ&M& 8 ¡ÿÿÿïëÏ&D& . ¶ÿÿÿîëÏ&D& . ËÿÿÿèìÏ&M& 8 àÿÿÿèëÏ&D& B õÿÿÿéëÏ&D& . ÿÿÿçëÏ& .&D ÿÿÿçëÏ&D& . 4ÿÿÿçëÏ&M& 8 IÿÿÿëëÏ&D& . ^ÿÿÿìëÏ&M& 8 sÿÿÿíëÏ&D& . ˆÿÿÿçëÏ&M& 8 ÿÿÿëëÏ&5 KÿÿÿëëÏ&E& V {ÿÿÿëëÏ&E& V ÿÿÿêëÏ&E& V ¥ÿÿÿðëÏ& Q& º<ÿÿÿéëÏ&E& V ÏÿÿÿçëÏ&N& k äÿÿÿïëÏ&E& V ùÿÿÿíëÏ&E& V ÿÿÿëëÏ&N& k #ÿÿÿíëÏ&N& k 8ÿÿÿðëÏ&N& k MÿÿÿìëÏ&N& k bÿÿÿíëÏ&N& k wÿÿÿíëÏ&N& k ŒÿÿÿçëÏ&N& k ¡ÿÿÿïëÏ& ¶& YEÿÿÿîëÏ&E& V ËÿÿÿèìÏ&N& k àÿÿÿèëÏ&E& õ VÿÿÿéëÏ&E& V ÿÿÿçëÏ&E& V ÿÿÿçëÏ&E& 4 VÿÿÿçëÏ&N& ] IÿÿÿëëÏ&E& V ^ÿÿÿìëÏ&N& k sÿÿÿíëÏ&E& V ˆÿÿÿçëÏ&N& ] ÿÿÿëÐÎ& r7ÿÿÿëÐÎ&G& € ~ÿÿÿëÐÎ&G& € “ÿÿÿêëÎ&G& € ¨ÿÿÿðÕÎ&>& y ½ÿÿÿéãÎ&G& € ÒÿÿÿçßÎ&P& • çÿÿÿïÕÎ&G& € üÿÿÿíÕÎ&G& € ÿÿÿëÐÎ&P& • &ÿÿÿíÐÎ&P& • ;ÿÿÿíÐÎ&P& • PÿÿÿëéÎ&P& • eÿÿÿîÔÎ&P& • zÿÿÿíÖÎ&P& • ÿÿÿçÛÎ&P& • ¤ÿÿÿïÐÎ&G& € ¹ÿÿÿîÐÎ&G& € ÎÿÿÿêéÎ&P& • ãÿÿÿèãÎ&G& Ž øÿÿÿçéÎ&G& € ÿÿÿçÔÎ&G& Ž "ÿÿÿçÞÎ&G& € 7ÿÿÿíÞÎ&P& ‡ LÿÿÿëÐÎ&G& € aÿÿÿìÕÎ&P& • vÿÿÿíØÎ&G& € ‹ÿÿÿçÜÎ&P& ‡  ÿÿÿëÐÎ&9 œÿÿÿëÐÎ&I& ª ~ÿÿÿëÐÎ&I& ª “ÿÿÿêëÎ&I& ª ¨ÿÿÿðÕÎ&@& £ ½ÿÿÿéãÎ&I& ª ÒÿÿÿçßÎ&R& ¿ çÿÿÿïÕÎ&I& ª üÿÿÿíÕÎ&R& ¿ ÿÿÿëÐÎ&R& ¿ &ÿÿÿíÐÎ&R& ¿ ;ÿÿÿíÐÎ&R& ¿ PÿÿÿëéÎ&R& ¿ eÿÿÿîÔÎ&R& ¿ zÿÿÿíÖÎ&R& ¿ ÿÿÿçÛÎ&R& ¿ ¤ÿÿÿïÐÎ&I& ª ¹ÿÿÿîÐÎ&I& ª ÎÿÿÿêéÎ&R& ¿ ãÿÿÿèãÎ&I& ¸ øÿÿÿçéÎ&I& ª ÿÿÿçÔÎ&I& ¸ "ÿÿÿçÞÎ&I& ª 7ÿÿÿíÞÎ&R& ± LÿÿÿëÐÎ&I& ª aÿÿÿìÕÎ&R& ¿ vÿÿÿíØÎ&I& ª ‹ÿÿÿçÜÎ&R& ±  ÿÿÿëÐÎ&7 ÆÿÿÿëÐÎ&G& Ô }ÿÿÿëÐÎ&G& Ô ’ÿÿÿêëÎ&G& Ô §ÿÿÿðÕÎ&>& Í ¼ÿÿÿéãÎ&G& Ô ÑÿÿÿçßÎ&P& é æÿÿÿïÕÎ&G& Ô ûÿÿÿíÕÎ&P& é ÿÿÿëÐÎ&P& é %ÿÿÿíÐÎ&P& é :ÿÿÿíÐÎ&P& é OÿÿÿëèÎ&P& é dÿÿÿîÔÎ&P& é yÿÿÿíÖÎ&P& é ŽÿÿÿçÛÎ&P& é £ÿÿÿïÐÎ&G& Ô ¸ÿÿÿîÐÎ&G& Ô ÍÿÿÿêéÎ&P& é âÿÿÿèãÎ&G& â ÷ÿÿÿçéÎ&G& Ô ÿÿÿçÔÎ&G& â !ÿÿÿçÞÎ&G& Ô 6ÿÿÿçÞÎ&P& Û KÿÿÿëÐÎ&G& Ô `ÿÿÿìÕÎ&P& é uÿÿÿíØÎ&G& Ô ŠÿÿÿçÖÎ&P& Û ŸÿÿÿíëÏ& ð5ÿÿÿëëÏ&E& þ {ÿÿÿëëÏ&E& þ ÿÿÿêëÏ&E& þ ¥ÿÿÿðëÏ&<& ÷ ºÿÿÿéëÏ&E& þ ÏÿÿÿçëÏ&N&  äÿÿÿïëÏ&E& þ ùÿÿÿíëÏ&N&  ÿÿÿëëÏ&N&  #ÿÿÿíëÏ&N&  8ÿÿÿðëÏ&N&  MÿÿÿìëÏ&N&  bÿÿÿíëÏ&N&  wÿÿÿíëÏ&N&  ŒÿÿÿçëÏ&N&  ¡ÿÿÿïëÏ&E& þ ¶ÿÿÿîëÏ&E& þ ËÿÿÿèìÏ&N&  àÿÿÿèëÏ&E&  õÿÿÿéëÏ&E& þ ÿÿÿçëÏ&E& þ ÿÿÿçëÏ&E& þ 4ÿÿÿçëÏ&N&  IÿÿÿëëÏ&E& þ ^ÿÿÿìëÏ&N&  sÿÿÿíëÏ&E& þ ˆÿÿÿçëÏ&N&  ÿÿ ëÁ&4 ÿÿÿëëÏ&D& ' {ÿÿÿëëÏ&D& ' ÿÿÿêëÏ&D& ' ¥ÿÿÿðëÏ& & º<ÿÿÿéëÏ&D& ' ÏÿÿÿçëÏ&M& < äÿÿÿïëÏ&D& ' ùÿÿÿíëÏ&M&  <ÿÿÿëëÏ&M& < #ÿÿÿíëÏ&M& < 8ÿÿÿðëÏ&M& < MÿÿÿìëÏ&M& < bÿÿÿíëÏ&M& < wÿÿÿíëÏ&M& < ŒÿÿÿçëÏ&M& < ¡ÿÿÿïëÏ& ¶& 'DÿÿÿîëÏ&D& ' ËÿÿÿèìÏ&M& < àÿÿÿèëÏ&D& 5 õÿÿÿéëÏ&D& ' ÿÿÿçëÏ&D& 5 ÿÿÿçëÏ&D& ' 4ÿÿÿçëÏ&M& . IÿÿÿëëÏ&D& ' ^ÿÿÿìëÏ&M& < sÿÿÿíëÏ&D& ' ˆÿÿÿçëÏ&M& . ÿÿÿëÐÎ&6 CÿÿÿëÐÎ&F& P |ÿÿÿëÐÎ&F& P ‘ÿÿÿêëÎ&F& P ¦ÿÿÿðÕÎ&=& I »ÿÿÿêãÎ&F& P ÐÿÿÿçßÎ&O& e åÿÿÿïÕÎ&F& P úÿÿÿíÕÎ&O& e ÿÿÿëÐÎ&O& e $ÿÿÿíÐÎ&O& e 9ÿÿÿíÐÎ&O& e NÿÿÿìéÎ&O& e cÿÿÿîÔÎ&O& e xÿÿÿíÕÎ&O& e ÿÿÿçÛÎ&O& e ¢ÿÿÿïÐÎ&F& P ·ÿÿÿîÐÎ&F& P ÌÿÿÿèéÎ&O& e áÿÿÿèãÎ&F& ^ öÿÿÿééÎ&F& P ÿÿÿçÔÎ&F& ^ ÿÿÿçâÎ&F& P 5ÿÿÿçâÎ&O& W JÿÿÿëÐÎ&F& P _ÿÿÿìÕÎ&O& e tÿÿÿíØÎ&F& P ‰ÿÿÿçÜÎ&O& W žÿÿÿëÐÎ& i2ÿÿÿëÐÎ&A& o yÿÿÿëÐÎ&A& o ŽÿÿÿèìÎ&A& o £ÿÿÿðÕÎ&:& » lÿÿÿéãÎ&A& o ÍÿÿÿçßÎ&J& u âÿÿÿïÕÎ&A& o ÷ÿÿÿíÕÎ& o&B ÿÿÿëÐÎ&J& u !ÿÿÿíÐÎ&J& u 6ÿÿÿíÐÎ&J& u KÿÿÿìéÎ&J& u `ÿÿÿíÔÎ&J& u uÿÿÿíÕÎ&J& u ŠÿÿÿçÛÎ&J& u ŸÿÿÿïÐÎ&J& o ´ÿÿÿîÐÎ&J& o ÉÿÿÿèìÎ&J& u ÞÿÿÿèãÎ&A& r óÿÿÿééÎ&B& o ÿÿÿçÔÎ&A& r ÿÿÿçÞÎ&A& o 2ÿÿÿçÞÎ&J& o GÿÿÿëÐÎ&A& o \ÿÿÿìÕÎ&J& u qÿÿÿíØÎ&A& o †ÿÿÿçÖÎ&J& o ›ÿÿÿëöÎ&USÿÿÿëõÎ&e&[ xÿÿÿëõÎ&e&[ ÿÿÿèõÎ&e&[ ¢ÿÿÿðöÎ&\&X ·ÿÿÿêõÎ&e&[ ÌÿÿÿçõÎ&n&a áÿÿÿïõÎ&e&[ öÿÿÿíõÎ&n&a ÿÿÿëõÎ&n&a ÿÿÿíõÎ&n&a 5ÿÿÿíõÎ&n&a JÿÿÿìõÎ&n&a _ÿÿÿíõÎ&n&a tÿÿÿíõÎ&n&a ‰ÿÿÿçõÎ&n&a žÿÿÿïõÎ&e&[ ³ÿÿÿîõÎ&e&[ ÈÿÿÿèõÎ&n&a ÝÿÿÿèöÎ&e&^ òÿÿÿéõÎ&e&[ ÿÿÿçöÎ&e&^ *ÿÿÿçõÎ&e&[ 1ÿÿÿçõÎ&n&[ FÿÿÿëõÎ&e&[ [ÿÿÿìõÎ&n&a pÿÿÿíõÎ&e&[ …ÿÿÿçõÎ&n&[ šÿÿÿëÐÎ&Udÿÿ ÿëÐÎ&g&j zÿÿ ÿëÐÎ&g&j ÿÿ ÿèìÎ&g&j ¤ÿÿ ÿðÕÎ&^&g ¹ÿÿ ÿéãÎ&g&j Îÿÿ ÿçßÎ&p&p ãÿÿ ÿïÕÎ&g&j øÿÿ ÿíÕÎ&p&p ÿÿ ÿëÐÎ&p&p "ÿÿ ÿíÐÎ&p&p 7ÿÿ ÿíÐÎ&p&p Lÿÿ ÿìéÎ&p&p aÿÿ ÿíÔÎ&p&p vÿÿ ÿíÕÎ&p&p ‹ÿÿ ÿçÛÎ&p&p  ÿÿ ÿïÐÎ&g&j µÿÿ ÿîÐÎ&g&j Êÿÿ ÿèìÎ&p&p ßÿÿ ÿèàÎ&g&m ôÿÿ ÿééÎ&g&j ÿÿ ÿçÔÎ&m&g ÿÿ ÿçÞÎ&g&j 3ÿÿ ÿçÞÎ&p&j Hÿÿ ÿëÐÎ&g&j ]ÿÿ ÿìÕÎ&p&p rÿÿ ÿíØÎ&g&j ‡ÿÿ ÿçÜÎ&p&j œÿÿÿëöÎ&SsÿÿÿëöÎ&e&y xÿÿÿëöÎ&e&y ÿÿÿèöÎ&e&y ¢ÿÿÿðöÎ&\&v ·ÿÿÿêöÎ&e&y ÌÿÿÿçöÎ&n& áÿÿÿïöÎ&e&y öÿÿÿíöÎ&n& ÿÿÿëöÎ&n& ÿÿÿíöÎ&n& 5ÿÿÿíöÎ&n& JÿÿÿìöÎ&n& _ÿÿÿíöÎ&n& tÿÿÿíöÎ&n& ‰ÿÿÿçöÎ&n& žÿÿÿïöÎ&e&y ³ÿÿÿîöÎ&e&y ÈÿÿÿèöÎ&n& ÝÿÿÿèöÎ&e&| òÿÿÿéöÎ&e&y ÿÿÿçöÎ&e&| ÿÿÿçöÎ&e&y 1ÿÿÿçöÎ&n&y FÿÿÿëöÎ&e&y [ÿÿÿìöÎ&n& pÿÿÿíöÎ&e&y …ÿÿÿçöÎ&n&y šÿÿÿëÐÎ&U‚ÿÿ ÿëÐÎ&g&ˆ zÿÿ ÿëÐÎ&g&ˆ ÿÿ ÿèìÎ&g&ˆ ¤ÿÿ ÿðÕÎ&^&… ¹ÿÿ ÿéãÎ&g&ˆ Îÿÿ ÿçßÎ&p&Ž ãÿÿ ÿïÕÎ&g&ˆ øÿÿ ÿíÕÎ&p&Ž ÿÿ ÿëÐÎ&p&Ž "ÿÿ ÿíÐÎ&p&Ž 7ÿÿ ÿíÐÎ&p&Ž Lÿÿ ÿìéÎ&p&Ž aÿÿ ÿíÔÎ&p&Ž vÿÿ ÿíÕÎ&p&Ž ‹ÿÿ ÿçÛÎ&p&Ž  ÿÿ ÿïÐÎ&g&ˆ µÿÿ ÿîÐÎ&g&ˆ Êÿÿ ÿèìÎ&p&Ž ßÿÿ ÿèàÎ&g&‹ ôÿÿ ÿééÎ&g&ˆ ÿÿ ÿçÔÎ&g&‹ ÿÿ ÿçÞÎ&g&ˆ 3ÿÿ ÿçÞÎ&p&ˆ Hÿÿ ÿëÐÎ&g&ˆ ]ÿÿ ÿìÕÎ&p&Ž rÿÿ ÿíØÎ&g&ˆ ‡ÿÿ ÿçÜÎ&p&ˆ œÿÿ ÿëÐÎ&T‘ÿÿÿëÐÎ&e& x©ÿÿ ÿëÐÎ&f&© Žÿÿ ÿèìÎ&f&© £ÿÿ ÿðÕÎ&]& ¸›ÿÿ ÿéãÎ&f&© Íÿÿ ÿçßÎ&o&³ âÿÿ ÿïÕÎ&f&© ÷ÿÿÿíÕÎ& &n³ÿÿ ÿëÐÎ&o&³ !ÿÿ ÿíÐÎ&o&³ 6ÿÿ ÿíÐÎ&o&³ Kÿÿ ÿìéÎ&o&³ `ÿÿ ÿíÔÎ&o&³ uÿÿ ÿíÕÎ&o&³ Šÿÿ ÿçÛÎ&o&³ ŸÿÿÿïÐÎ&³&n ´ÿÿ ÿîÐÎ&f&© Éÿÿ ÿèìÎ&o&³ Þÿÿ ÿèãÎ&f&½ óÿÿ ÿééÎ&f&© ÿÿ ÿçÔÎ&f&½ ÿÿ ÿçÞÎ&f&© 2ÿÿ ÿçÞÎ&o&³ Gÿÿ ÿëÐÎ&f&© \ÿÿ ÿìÕÎ&o&³ qÿÿ ÿíØÎ&f&© †ÿÿ ÿçÖÎ&o&³ ›ÿÿÿëÐÎ&ÉUÿÿ ÿëÐÎ&g&Ù zÿÿ ÿëÐÎ&g&Ù ÿÿ ÿèìÎ&g&Ù ¤ÿÿ ÿðÕÎ&^&Ï ¹ÿÿ ÿéãÎ&g&Ù Îÿÿ ÿçßÎ&p&ã ãÿÿ ÿïÕÎ&g&Ù øÿÿ ÿíÕÎ&p&ã ÿÿ ÿëÐÎ&p&ã "ÿÿ ÿíÐÎ&p&ã 7ÿÿ ÿíÐÎ&p&ã Lÿÿ ÿìéÎ&p&ã aÿÿ ÿíÔÎ&p&ã vÿÿ ÿíÕÎ&p&ã ‹ÿÿ ÿçÛÎ&p&ã  ÿÿ ÿïÐÎ&g&Ù µÿÿ ÿîÐÎ&g&Ù Êÿÿ ÿèìÎ&p&ã ßÿÿ ÿèàÎ&g&í ôÿÿ ÿééÎ&g&Ù ÿÿ ÿçÔÎ&g&í ÿÿ ÿçÞÎ&g&Ù 3ÿÿ ÿçÞÎ&p&ã Hÿÿ ÿëÐÎ&g&Ù ]ÿÿ ÿìÕÎ&p&ã rÿÿ ÿíØÎ&g&Ù ‡ÿÿ ÿçÜÎ&p&ã œÿÿ ÿëÐÎ&T÷ÿÿ ÿëÐÎ&f&  yÿÿ ÿëÐÎ&f&  Žÿÿ ÿèìÎ&f&  £ÿÿ ÿðÕÎ&]&ÿ ¸ÿÿ ÿéãÎ&f&  Íÿÿ ÿçßÎ&o&  âÿÿ ÿïÕÎ&f&  ÷ÿÿ ÿíÕÎ&o&  ÿÿ ÿëÐÎ&o&  !ÿÿ ÿíÐÎ&o&  6ÿÿ ÿíÐÎ&o&  Kÿÿ ÿìéÎ&o&  `ÿÿ ÿíÔÎ&o&  uÿÿ ÿíÕÎ&o&  Šÿÿ ÿçÛÎ&o&  Ÿÿÿ ÿïÐÎ&f&  ´ÿÿ ÿîÐÎ&f&  Éÿÿ ÿèìÎ&o&  Þÿÿ ÿèãÎ&f&  óÿÿ ÿééÎ& & fÿÿ ÿçÔÎ&f&  ÿÿ ÿçÞÎ&f&  2ÿÿ ÿçÞÎ&o&  Gÿÿ ÿëÐÎ&f&  \ÿÿ ÿìÕÎ&o&  qÿÿ ÿíØÎ&f&  †ÿÿ ÿçÖÎ&o&  ›ÿÿÿëÐÎ&U &ÿÿ ÿëÐÎ&g& : zÿÿ ÿëÐÎ&g& : ÿÿ ÿèìÎ&g& : ¤ÿÿ ÿðÕÎ&^& 0 ¹ÿÿ ÿéãÎ&g& : Îÿÿ ÿçßÎ&p& D ãÿÿ ÿïÕÎ&g& : øÿÿ ÿíÕÎ&p& D ÿÿ ÿëÐÎ&p& D "ÿÿ ÿíÐÎ&p& D 7ÿÿ ÿíÐÎ&p& D Lÿÿ ÿìéÎ&p& D aÿÿ ÿíÔÎ&p& D vÿÿ ÿíÕÎ&p& D ‹ÿÿ ÿçÛÎ&p& D  ÿÿ ÿïÐÎ&g& : µÿÿ ÿîÐÎ&g& : Êÿÿ ÿèìÎ&p& D ßÿÿ ÿèàÎ&g& N ôÿÿ ÿééÎ&g& : ÿÿ ÿçÔÎ&g& N ÿÿ ÿçÞÎ&g& : 3ÿÿ ÿçÞÎ&p& D Hÿÿ ÿëÐÎ&g& : ]ÿÿ ÿìÕÎ&p& D rÿÿ ÿíØÎ&g& : ‡ÿÿ ÿçÜÎ&p& D œÿÿ ê½&V WÿÿÿëêÉ&h& i {ÿÿÿëêÉ&h& i ÿÿÿêêÉ&h& i ¥ÿÿÿðêÉ& º&h _ÿÿÿéêÉ&h& i ÏÿÿÿçêÉ&q& s äÿÿÿïêÉ&h& i ùÿÿÿíêÉ&q& s ÿÿÿëêÉ&q& s #ÿÿÿíêÉ&q& s 8ÿÿÿðêÉ&q& s MÿÿÿìêÉ&q& s bÿÿÿíêÉ&q& s wÿÿÿíêÉ&q& s ŒÿÿÿçêÉ&q& s ¡ÿÿÿïêÉ&h& i ¶ÿÿÿîêÉ&h& i ËÿÿÿèìÉ&q& s àÿÿÿèêÉ&h& | õÿÿÿéêÉ&h& i ÿÿÿçêÉ&h& | ÿÿÿçêÉ&h& i 4ÿÿÿçêÉ&q& s IÿÿÿëêÉ&h& i ^ÿÿÿìêÉ&q& s sÿÿÿíêÉ&h& i ˆÿÿÿçêÉ&q& s ÿÿÿëöÎ& †XÿÿÿëöÎ&j& š |ÿÿÿëöÎ&j& š ‘ÿÿÿêöÎ&j& š ¦ÿÿÿðöÎ&a&  »ÿÿÿêöÎ&j& š ÐÿÿÿçöÎ&s& ¤ åÿÿÿïöÎ&j& š úÿÿÿíöÎ&s& ¤ ÿÿÿëöÎ&s& ¤ $ÿÿÿíöÎ&s& ¤ 9ÿÿÿíöÎ&s& ¤ NÿÿÿìöÎ&s& ¤ cÿÿÿîöÎ&s& ¤ xÿÿÿíöÎ&s& ¤ ÿÿÿçöÎ&s& ¤ ¢ÿÿÿïöÎ&j& š ·ÿÿÿîöÎ&j& š ÌÿÿÿèöÎ&s& ¤ áÿÿÿèöÎ&j& ® öÿÿÿéöÎ&j& š ÿÿÿçöÎ&j& ® ÿÿÿçöÎ&j& š 5ÿÿÿçöÎ&s& ¤ JÿÿÿëöÎ&j& š _ÿÿÿìöÎ&s& ¤ tÿÿÿíöÎ&j& š ‰ÿÿÿçöÎ&s& ¤ žÿÿÿëÐÎ&Z ¸ÿÿÿëÐÎ&l& Ì |ÿÿÿëÐÎ&l& Ì ‘ÿÿÿêëÎ&l& Ì ¦ÿÿÿðÕÎ&c&  »ÿÿÿêãÎ&l& Ì ÐÿÿÿçßÎ&u& Ö åÿÿÿïÕÎ&l& Ì úÿÿÿíÕÎ&u& Ö ÿÿÿëÐÎ&u& Ö $ÿÿÿíÐÎ&u& Ö 9ÿÿÿíÐÎ&u& Ö NÿÿÿìéÎ&u& Ö cÿÿÿîÔÎ&u& Ö xÿÿÿíÕÎ&u& Ö ÿÿÿçÛÎ&u& Ö ¢ÿÿÿïÐÎ&l& Ì ·ÿÿÿîÐÎ&l& Ì ÌÿÿÿèéÎ&u& Ö áÿÿÿèãÎ&l& à öÿÿÿééÎ&l& Ì ÿÿÿçÔÎ&l& à ÿÿÿçâÎ&l& Ì 5ÿÿÿçâÎ&u& Ö JÿÿÿëÐÎ&l& Ì _ÿÿÿìÕÎ&u& Ö tÿÿÿíØÎ&l& Ì ‰ÿÿÿçÜÎ&u& Ö žÿÿÿëÐÎ&X íÿÿÿëÐÎ&j& ý |ÿÿÿëÐÎ&j& ý ‘ÿÿÿêëÎ&j& ý ¦ÿÿÿðÕÎ&a& ó »ÿÿÿêãÎ&j& ý ÐÿÿÿçßÎ&s&  åÿÿÿïÕÎ&j& ý úÿÿÿíÕÎ&s&  ÿÿÿëÐÎ&s&  $ÿÿÿíÐÎ&s&  9ÿÿÿíÐÎ&s&  NÿÿÿìéÎ&s&  cÿÿÿîÔÎ&s&  xÿÿÿíÕÎ&s&  ÿÿÿçÛÎ&s&  ¢ÿÿÿïÐÎ&j& ý ·ÿÿÿîÐÎ&j& ý ÌÿÿÿèéÎ&s&  áÿÿÿèãÎ&j&  öÿÿÿééÎ&j& ý ÿÿÿçÔÎ&j&  ÿÿÿçâÎ&j& ý 5ÿÿÿçâÎ&s&  JÿÿÿëÐÎ&j& ý _ÿÿÿìÕÎ&s&  tÿÿÿíØÎ&j& ý ‰ÿÿÿçÜÎ&s&  žÿÿ ë½&V ÿÿÿëëÉ&h& / {ÿÿÿëëÉ&h& / ÿÿÿêëÉ&h& / ¥ÿÿÿðëÉ&_& % ºÿÿÿéëÉ&h& / ÏÿÿÿçëÉ&q& 9 äÿÿÿïëÉ&h& / ùÿÿÿíëÉ&q& 9 ÿÿÿëëÉ&q& 9 #ÿÿÿíëÉ&q& 9 8ÿÿÿðëÉ&q& 9 MÿÿÿìëÉ&q& 9 bÿÿÿíëÉ&q& 9 wÿÿÿíëÉ&q& 9 ŒÿÿÿçëÉ&q& 9 ¡ÿÿÿïëÉ&h& / ¶ÿÿÿîëÉ&h& / ËÿÿÿèìÉ&q& 9 àÿÿÿèëÉ&h& C õÿÿÿéëÉ&h& / ÿÿÿçëÉ&h& C ÿÿÿçëÉ&h& / 4ÿÿÿçëÉ&q& 9 IÿÿÿëëÉ&h& / ^ÿÿÿìëÉ&q& 9 sÿÿÿíëÉ&h& / ˆÿÿÿçëÉ&q& 9 ÿÿÿëëÉ&W KÿÿÿëëÉ&i& V {ÿÿÿëëÉ&i& V ÿÿÿêëÉ&i& V ¥ÿÿÿðëÉ& Q& º`ÿÿÿéëÉ&i& V ÏÿÿÿçëÉ&r& k äÿÿÿïëÉ&i& ù VÿÿÿíëÉ& &r kÿÿÿëëÉ&r& k #ÿÿÿíëÉ&r& k 8ÿÿÿðëÉ&r& k MÿÿÿìëÉ&r& k bÿÿÿíëÉ&r& k wÿÿÿíëÉ&r& k ŒÿÿÿçëÉ&r& k ¡ÿÿÿïëÉ&i& V ¶ÿÿÿîëÉ&i& V ËÿÿÿèìÉ&r& k àÿÿÿèëÉ&i& d õÿÿÿéëÉ&i& V ÿÿÿçëÉ&i&  VÿÿÿçëÉ&i& V 4ÿÿÿçëÉ&r& ] IÿÿÿëëÉ&i& V ^ÿÿÿìëÉ&r& k sÿÿÿíëÉ&i& V ˆÿÿÿçëÉ&r& ] ÿÿÿëÐÎ&Y rÿÿÿëÐÎ&k& € ~ÿÿÿëÐÎ&k& € “ÿÿÿêëÎ&k& € ¨ÿÿÿðÕÎ&b& y ½ÿÿÿéãÎ&k& € ÒÿÿÿçßÎ&t& • çÿÿÿïÕÎ&k& € üÿÿÿíÕÎ&t& • ÿÿÿëÐÎ&t& • &ÿÿÿíÐÎ&t& • ;ÿÿÿíÐÎ&t& • PÿÿÿëéÎ&t& • eÿÿÿîÔÎ&t& • zÿÿÿíÖÎ&t& • ÿÿÿçÛÎ&t& • ¤ÿÿÿïÐÎ&k& € ¹ÿÿÿîÐÎ&k& € ÎÿÿÿêéÎ&t& • ãÿÿÿèãÎ&k& Ž øÿÿÿçéÎ&k& € ÿÿÿçÔÎ&k& Ž "ÿÿÿçÞÎ&k& € 7ÿÿÿíÞÎ&t& ‡ LÿÿÿëÐÎ&k& € aÿÿÿìÕÎ&t& • vÿÿÿíØÎ&k& € ‹ÿÿÿçÜÎ&t& ‡  ÿÿÿëÐÎ&[ œÿÿÿëÐÎ&m& ª ~ÿÿÿëÐÎ&m& ª “ÿÿÿêëÎ&m& ª ¨ÿÿÿðÕÎ&d& £ ½ÿÿÿéãÎ&m& ª ÒÿÿÿçßÎ&v& ¿ çÿÿÿïÕÎ&m& ª üÿÿÿíÕÎ&v& ¿ ÿÿÿëÐÎ&v& ¿ &ÿÿÿíÐÎ&v& ¿ ;ÿÿÿíÐÎ&v& ¿ PÿÿÿëéÎ&v& ¿ eÿÿÿîÔÎ&v& ¿ zÿÿÿíÖÎ&v& ¿ ÿÿÿçÛÎ&v& ¿ ¤ÿÿÿïÐÎ&m& ª ¹ÿÿÿîÐÎ&m& ª ÎÿÿÿêéÎ&v& ¿ ãÿÿÿèãÎ&m& ¸ øÿÿÿçéÎ&m& ª ÿÿÿçÔÎ&m& ¸ "ÿÿÿçÞÎ&m& ª 7ÿÿÿíÞÎ&v& ± LÿÿÿëÐÎ&m& ª aÿÿÿìÕÎ&v& ¿ vÿÿÿíØÎ&m& ª ‹ÿÿÿçÜÎ&v& ±  ÿÿÿëÐÎ&Y ÆÿÿÿëÐÎ&k& Ô }ÿÿÿëÐÎ&k& Ô ’ÿÿÿêëÎ&k& Ô §ÿÿÿðÕÎ&b& Í ¼ÿÿÿéãÎ&k& Ô ÑÿÿÿçßÎ&t& é æÿÿÿïÕÎ&k& Ô ûÿÿÿíÕÎ&t& é ÿÿÿëÐÎ&t& é %ÿÿÿíÐÎ&t& é :ÿÿÿíÐÎ&t& é OÿÿÿëèÎ&t& é dÿÿÿîÔÎ&t& é yÿÿÿíÖÎ&t& é ŽÿÿÿçÛÎ&t& é £ÿÿÿïÐÎ&k& Ô ¸ÿÿÿîÐÎ&k& Ô ÍÿÿÿêéÎ&t& é âÿÿÿèãÎ&k& â ÷ÿÿÿçéÎ&k& Ô ÿÿÿçÔÎ&k& â !ÿÿÿçÞÎ&k& Ô 6ÿÿÿçÞÎ&t& Û KÿÿÿëÐÎ&k& Ô `ÿÿÿìÕÎ&t& é uÿÿÿíØÎ&k& Ô ŠÿÿÿçÖÎ&t& Û ŸÿÿÿíëÉ&W ðÿÿÿëëÉ&i& þ {ÿÿÿëëÉ&i& þ ÿÿÿêëÉ&i& þ ¥ÿÿÿðëÉ&`& ÷ ºÿÿÿéëÉ&i& þ ÏÿÿÿçëÉ&r&  äÿÿÿïëÉ&i& þ ùÿÿÿíëÉ&r&  ÿÿÿëëÉ&r&  #ÿÿÿíëÉ&r&  8ÿÿÿðëÉ&r&  MÿÿÿìëÉ&r&  bÿÿÿíëÉ&r&  wÿÿÿíëÉ&r&  ŒÿÿÿçëÉ&r&  ¡ÿÿÿïëÉ&i& þ ¶ÿÿÿîëÉ&i& þ ËÿÿÿèìÉ&r&  àÿÿÿèëÉ&i&  õÿÿÿéëÉ&i& þ ÿÿÿçëÉ&i&  ÿÿÿçëÉ&i& þ 4ÿÿÿçëÉ&r&  IÿÿÿëëÉ&i& þ ^ÿÿÿìëÉ&r&  sÿÿÿíëÉ&i& þ ˆÿÿÿçëÉ&r&  ÿÿ ë½&V ÿÿÿëëÉ&h& ' {ÿÿÿëëÉ&h& ' ÿÿÿêëÉ&h& ' ¥ÿÿÿðëÉ&_&  ºÿÿÿéëÉ&h& ' ÏÿÿÿçëÉ&q& < äÿÿÿïëÉ&h& ' ùÿÿÿíëÉ&q& < ÿÿÿëëÉ&q& < #ÿÿÿíëÉ&q& < 8ÿÿÿðëÉ&q& < MÿÿÿìëÉ&q& < bÿÿÿíëÉ&q& < wÿÿÿíëÉ&q& < ŒÿÿÿçëÉ&q& < ¡ÿÿÿïëÉ&h& ¶ %ÿÿÿîëÉ&h& ' ËÿÿÿèìÉ&q& < àÿÿÿèëÉ&h& 5 õÿÿÿéëÉ&h& ' ÿÿÿçëÉ&h&  5ÿÿÿçëÉ&h& ' 4ÿÿÿçëÉ&q& . IÿÿÿëëÉ&h& ' ^ÿÿÿìëÉ&q& < sÿÿÿíëÉ&h& ' ˆÿÿÿçëÉ&q& . ÿÿÿëÐÎ&X CÿÿÿëÐÎ&j& P |ÿÿÿëÐÎ&j& P ‘ÿÿÿêëÎ&j& P ¦ÿÿÿðÕÎ&a& I »ÿÿÿêãÎ&j& P ÐÿÿÿçßÎ&s& e åÿÿÿïÕÎ&j& P úÿÿÿíÕÎ&s& e ÿÿÿëÐÎ&s& e $ÿÿÿíÐÎ&s& e 9ÿÿÿíÐÎ&s& e NÿÿÿìéÎ&s& e cÿÿÿîÔÎ&s& e xÿÿÿíÕÎ&s& e ÿÿÿçÛÎ&s& e ¢ÿÿÿïÐÎ&j& P ·ÿÿÿîÐÎ&j& P ÌÿÿÿèéÎ&s& e áÿÿÿèãÎ&j& ^ öÿÿÿééÎ&j& P ÿÿÿçÔÎ&j& ^ ÿÿÿçâÎ&j& P 5ÿÿÿçâÎ&s& W JÿÿÿëÐÎ&j& P _ÿÿÿìÕÎ&s& e tÿÿÿíØÎ&j& P ‰ÿÿÿçÜÎ&s& W žÿÿ ÿëÐÎ&T iÿÿÿëÐÎ& o&e xÿÿÿëÐÎ&e& o ŽÿÿÿèìÎ&e& o £ÿÿÿðÕÎ&\& l »ÿÿÿéãÎ&e& o ÍÿÿÿçßÎ&n& u âÿÿÿïÕÎ&e& o ÷ÿÿÿíÕÎ&e&  uÿÿÿëÐÎ&n& u !ÿÿÿíÐÎ&n& u 6ÿÿÿíÐÎ&n& u KÿÿÿìéÎ&n& u `ÿÿÿíÔÎ&n& u uÿÿÿíÕÎ&n& u ŠÿÿÿçÛÎ&n& u ŸÿÿÿïÐÎ&n& u ´ÿÿÿîÐÎ&n& u ÉÿÿÿèìÎ&n& u ÞÿÿÿèãÎ&n& r óÿÿÿééÎ&e& o ÿÿÿçÔÎ&e& r ÿÿÿçÞÎ&e& o 2ÿÿÿçÞÎ&n& o GÿÿÿëÐÎ&e& o \ÿÿÿìÕÎ&n& u qÿÿÿíØÎ&e& o †ÿÿÿçÖÎ&n& o ›ÿÿ ÿëöÎ&wVÿÿÿëõÎ&‰&\ xÿÿÿëõÎ&‰&\ ÿÿÿèõÎ&‰&\ ¢ÿÿ ÿðöÎ&€&Y ·ÿÿÿêõÎ&‰&\ ÌÿÿÿçõÎ&’&b áÿÿÿïõÎ&‰&\ öÿÿÿíõÎ&’&b ÿÿÿëõÎ&’&b ÿÿÿíõÎ&’&b 5ÿÿÿíõÎ&’&b JÿÿÿìõÎ&’&b _ÿÿÿíõÎ&’&b tÿÿÿíõÎ&’&b ‰ÿÿÿçõÎ&’&b žÿÿÿïõÎ&‰&\ ³ÿÿÿîõÎ&‰&\ ÈÿÿÿèõÎ&’&b ÝÿÿÿèõÎ&‰&_ òÿÿÿéõÎ&‰&\ ÿÿÿçõÎ&‰&_ ÿÿÿçõÎ&‰&\ 1ÿÿÿçõÎ&’&\ FÿÿÿëõÎ&‰&\ [ÿÿÿìõÎ&’&b pÿÿÿíõÎ&‰&\ …ÿÿÿçõÎ&’&\ šÿÿÿëÑÎ&yeÿÿÿëÐÎ&‹&k zÿÿÿëÐÎ&‹&k ÿÿÿèìÎ&‹&k ¤ÿÿÿðÕÎ&‚&h ¹ÿÿÿéãÎ&‹&k ÎÿÿÿçßÎ&”&q ãÿÿÿïÕÎ&‹&k øÿÿÿíÕÎ&”&q ÿÿÿëÑÎ&”&q "ÿÿÿíÑÎ&”&q 7ÿÿÿíÑÎ&”&q LÿÿÿìéÎ&”&q aÿÿÿíÔÎ&”&q vÿÿÿíÕÎ&”&q ‹ÿÿÿçÛÎ&”&q  ÿÿÿïÐÎ&‹&k µÿÿÿîÐÎ&‹&k ÊÿÿÿèìÎ&”&q ßÿÿÿèàÍ&‹&n ôÿÿÿééÎ&‹&k ÿÿÿçÔÍ&‹&n ÿÿÿçÞÎ&‹&k 3ÿÿÿçÞÎ&”&k HÿÿÿëÐÎ&‹&k ]ÿÿÿìÕÎ&”&q rÿÿÿíØÎ&‹&k ‡ÿÿÿçÜÎ&”&k œÿÿ ÿëöÎ&wtÿÿÿëöÎ&‰&z xÿÿÿëöÎ&‰&z ÿÿÿèöÎ&‰&z ¢ÿÿ ÿðöÎ&€&w ·ÿÿÿêöÎ&‰&z ÌÿÿÿçöÎ&’&€ áÿÿÿïöÎ&‰&z öÿÿÿíöÎ&’&€ ÿÿÿëöÎ&’&€ ÿÿÿíöÎ&’&€ 5ÿÿÿíöÎ&’&€ JÿÿÿìöÎ&’&€ _ÿÿÿíöÎ&’&€ tÿÿÿíöÎ&’&€ ‰ÿÿÿçöÎ&’&€ žÿÿÿïöÎ&‰&z ³ÿÿÿîöÎ&‰&z ÈÿÿÿèöÎ&’&€ ÝÿÿÿèöÎ&‰&} òÿÿÿéöÎ&‰&z ÿÿÿçöÎ&‰&} ÿÿÿçöÎ&‰&z 1ÿÿÿçöÎ&’&z FÿÿÿëöÎ&‰&z [ÿÿÿìöÎ&’&€ pÿÿÿíöÎ&‰&z …ÿÿÿçöÎ&’&z šÿÿÿëÐÎ&yƒÿÿÿëÐÎ&‹&‰ zÿÿÿëÐÎ&‹&‰ ÿÿÿèìÎ&‹&‰ ¤ÿÿÿðÕÎ&‚&† ¹ÿÿÿéãÎ&‹&‰ ÎÿÿÿçßÎ&”& ãÿÿÿïÕÎ&‹&‰ øÿÿÿíÕÎ&”& ÿÿÿëÐÎ&”& "ÿÿÿíÐÎ&”& 7ÿÿÿíÐÎ&”& LÿÿÿìéÎ&”& aÿÿÿíÔÎ&”& vÿÿÿíÕÎ&”& ‹ÿÿÿçÛÎ&”&  ÿÿÿïÐÎ&‹&‰ µÿÿÿîÐÎ&‹&‰ ÊÿÿÿèìÎ&”& ßÿÿÿèàÎ&‹&Œ ôÿÿÿééÎ&‹&‰ ÿÿÿçÔÎ&‹&Œ ÿÿÿçÞÎ&‹&‰ 3ÿÿÿçÞÎ&”&‰ HÿÿÿëÐÎ&‹&‰ ]ÿÿÿìÕÎ&”& rÿÿÿíØÎ&‹&‰ ‡ÿÿÿçÜÎ&”&‰ œÿÿ ÿëÐÎ&x“ÿÿÿëÐÎ&Š&¦ yÿÿÿëÐÎ&Š&¦ ŽÿÿÿèìÎ&Š&¦ £ÿÿÿðÕÎ&& ¸ÿÿÿéãÎ&Š&¦ ÍÿÿÿçßÎ&“&° âÿÿÿïÕÎ&Š&¦ ÷ÿÿÿíÕÎ&Š&¦ ÿÿÿëÐÎ&“&° !ÿÿÿíÐÎ&“&° 6ÿÿÿíÐÎ&“&° KÿÿÿìéÎ&“&° `ÿÿÿíÔÎ&“&° uÿÿÿíÕÎ&“&° ŠÿÿÿçÛÎ&“&° ŸÿÿÿïÐÎ&Š&¦ ´ÿÿÿîÐÎ&Š&¦ ÉÿÿÿèìÎ&“&° ÞÿÿÿèãÎ&Š&º óÿÿÿééÎ&Š&¦ ÿÿÿçÔÎ&Š&º ÿÿÿçÞÎ&Š&¦ 2ÿÿÿçÞÎ&“&° GÿÿÿëÐÎ&Š&¦ \ÿÿÿìÕÎ&“&° qÿÿÿíØÎ&Š&¦ †ÿÿÿçÖÎ&“&° ›ÿÿÿëÐÎ&yÃÿÿÿëÐÎ&‹&Ö zÿÿÿëÐÎ&‹&Ö ÿÿÿèìÎ&‹&Ö ¤ÿÿÿðÕÎ&‚&Ì ¹ÿÿÿéãÎ&‹&Ö ÎÿÿÿçßÎ&”&à ãÿÿÿïÕÎ&‹&Ö øÿÿÿíÕÎ&”&à ÿÿÿëÐÎ&”&à "ÿÿÿíÐÎ&”&à 7ÿÿÿíÐÎ&”&à LÿÿÿìéÎ&”&à aÿÿÿíÔÎ&”&à vÿÿÿíÕÎ&”&à ‹ÿÿÿçÛÎ&”&à  ÿÿÿïÐÎ&‹&Ö µÿÿÿîÐÎ&‹&Ö ÊÿÿÿèìÎ&”&à ßÿÿÿèàÎ&‹&ê ôÿÿÿééÎ&‹&Ö ÿÿÿçÔÎ&‹&ê ÿÿÿçÞÎ&‹&Ö 3ÿÿÿçÞÎ&”&à HÿÿÿëÐÎ&‹&Ö ]ÿÿÿìÕÎ&”&à rÿÿÿíØÎ&‹&Ö ‡ÿÿÿçÜÎ&”&à œÿÿ ÿëÐÎ&xôÿÿÿëÐÎ&Š&  yÿÿÿëÐÎ&Š&  ŽÿÿÿèìÎ&Š&  £ÿÿÿðÕÎ&&þ ¸ÿÿÿéãÎ&Š&  ÍÿÿÿçßÎ&“&  âÿÿÿïÕÎ&Š&  ÷ÿÿÿíÕÎ&“&  ÿÿÿëÐÎ&“&  !ÿÿÿíÐÎ&“&  6ÿÿÿíÐÎ&“&  KÿÿÿìéÎ&“&  `ÿÿÿíÔÎ&“&  uÿÿÿíÕÎ&“&  ŠÿÿÿçÛÎ&“&  ŸÿÿÿïÐÎ&Š&  ´ÿÿÿîÐÎ&Š&  ÉÿÿÿèìÎ&“&  ÞÿÿÿèãÎ&Š&  óÿÿÿééÎ&Š&  ÿÿÿçÔÎ&Š&  ÿÿÿçÞÎ&Š&  2ÿÿÿçÞÎ&“&  GÿÿÿëÐÎ&Š&  \ÿÿÿìÕÎ&“&  qÿÿÿíØÎ&Š&  †ÿÿÿçÖÎ&“&  ›ÿÿÿëÐÎ&y #ÿÿÿëÐÎ&‹& 7 zÿÿÿëÐÎ&‹& 7 ÿÿÿèìÎ&‹& 7 ¤ÿÿÿðÕÎ&‚& - ¹ÿÿÿéãÎ&‹& 7 ÎÿÿÿçßÎ&”& A ãÿÿÿïÕÎ&‹& 7 øÿÿÿíÕÎ&”& A ÿÿÿëÐÎ&”& A "ÿÿÿíÐÎ&”& A 7ÿÿÿíÐÎ&”& A LÿÿÿìéÎ&”& A aÿÿÿíÔÎ&”& A vÿÿÿíÕÎ&”& A ‹ÿÿÿçÛÎ&”& A  ÿÿÿïÐÎ&‹& 7 µÿÿÿîÐÎ&‹& 7 ÊÿÿÿèìÎ&”& A ßÿÿÿèàÎ&‹& K ôÿÿÿééÎ&‹& 7 ÿÿÿçÔÎ&‹& K ÿÿÿçÞÎ&‹& 7 3ÿÿÿçÞÎ&”& A HÿÿÿëÐÎ&‹& 7 ]ÿÿÿìÕÎ&”& A rÿÿÿíØÎ&‹& 7 ‡ÿÿÿçÜÎ&”& A œÿÿ ê½&z UÿÿÿëêÉ&Œ& f {ÿÿÿëêÉ&Œ& f ÿÿÿêêÉ&Œ& f ¥ÿÿÿðêÉ&ƒ& ] ºÿÿÿéêÉ&Œ& f ÏÿÿÿçêÉ&•& p äÿÿÿïêÉ&Œ& f ùÿÿÿíêÉ&•& p ÿÿÿëêÉ&•& p #ÿÿÿíêÉ&•& p 8ÿÿÿðêÉ&•& p MÿÿÿìêÉ&•& p bÿÿÿíêÉ&•& p wÿÿÿíêÉ&•& p ŒÿÿÿçêÉ&•& p ¡ÿÿÿïêÉ&Œ& f ¶ÿÿÿîêÉ&Œ& f ËÿÿÿèìÉ&•& p àÿÿÿèêÉ&Œ& y õÿÿÿéêÉ&Œ& f ÿÿÿçêÉ&Œ& y ÿÿÿçêÉ&Œ& f 4ÿÿÿçêÉ&•& p IÿÿÿëêÉ&Œ& f ^ÿÿÿìêÉ&•& p sÿÿÿíêÉ&Œ& f ˆÿÿÿçêÉ&•& p ÿÿ ÿëöÎ&| ƒÿÿ ÿëöÎ&Ž& — |ÿÿ ÿëöÎ&Ž& — ‘ÿÿ ÿêöÎ&Ž& — ¦ÿÿ ÿðöÎ&…&  »ÿÿ ÿêöÎ&Ž& — Ðÿÿ ÿçöÎ&—& ¡ åÿÿ ÿïöÎ&Ž& — úÿÿ ÿíöÎ&—& ¡ ÿÿ ÿëöÎ&—& ¡ $ÿÿ ÿíöÎ&—& ¡ 9ÿÿ ÿíöÎ&—& ¡ Nÿÿ ÿìöÎ&—& ¡ cÿÿ ÿîöÎ&—& ¡ xÿÿ ÿíöÎ&—& ¡ ÿÿ ÿçöÎ&—& ¡ ¢ÿÿ ÿïöÎ&Ž& — ·ÿÿ ÿîöÎ&Ž& — Ìÿÿ ÿèöÎ&—& ¡ áÿÿ ÿèöÎ&Ž& « öÿÿ ÿéöÎ&Ž& — ÿÿ ÿçöÎ&Ž& « ÿÿ ÿçöÎ&Ž& — 5ÿÿ ÿçöÎ&—& ¡ Jÿÿ ÿëöÎ&Ž& — _ÿÿ ÿìöÎ&—& ¡ tÿÿ ÿíöÎ&Ž& — ‰ÿÿ ÿçöÎ&—& ¡ žÿÿ ÿëÐÎ&~ µÿÿ ÿëÐÎ&& É |ÿÿ ÿëÐÎ&& É ‘ÿÿ ÿêëÎ&& É ¦ÿÿ ÿðÕÎ&‡& ¿ »ÿÿ ÿêãÎ&& É Ðÿÿ ÿçßÎ&™& Ó åÿÿ ÿïÕÎ&& É úÿÿ ÿíÕÎ&™& Ó ÿÿ ÿëÐÎ&™& Ó $ÿÿ ÿíÐÎ&™& Ó 9ÿÿ ÿíÐÎ&™& Ó Nÿÿ ÿìéÎ&™& Ó cÿÿ ÿîÔÎ&™& Ó xÿÿ ÿíÕÎ&™& Ó ÿÿ ÿçÛÎ&™& Ó ¢ÿÿ ÿïÐÎ&& É ·ÿÿ ÿîÐÎ&& É Ìÿÿ ÿèéÎ&™& Ó áÿÿ ÿèãÎ&& Ý öÿÿ ÿééÎ&& É ÿÿ ÿçÔÎ&& Ý ÿÿ ÿçâÎ&& É 5ÿÿ ÿçâÎ&™& Ó Jÿÿ ÿëÐÎ&& É _ÿÿ ÿìÕÎ&™& Ó tÿÿ ÿíØÎ&& É ‰ÿÿ ÿçÜÎ&™& Ó žÿÿ ÿëÐÎ&| çÿÿ ÿëÐÎ&Ž& ú |ÿÿ ÿëÐÎ&Ž& ú ‘ÿÿ ÿêëÎ&Ž& ú ¦ÿÿ ÿðÕÎ&…& ð »ÿÿ ÿêãÎ&Ž& ú Ðÿÿ ÿçßÎ&—&  åÿÿ ÿïÕÎ&Ž& ú úÿÿ ÿíÕÎ&—&  ÿÿ ÿëÐÎ&—&  $ÿÿ ÿíÐÎ&—&  9ÿÿ ÿíÐÎ&—&  Nÿÿ ÿìéÎ&—&  cÿÿ ÿîÔÎ&—&  xÿÿ ÿíÕÎ&—&  ÿÿ ÿçÛÎ&—&  ¢ÿÿ ÿïÐÎ&Ž& ú ·ÿÿ ÿîÐÎ&Ž& ú Ìÿÿ ÿèéÎ&—&  áÿÿ ÿèãÎ&Ž&  öÿÿ ÿééÎ&Ž& ú ÿÿ ÿçÔÎ&Ž&  ÿÿ ÿçâÎ&Ž& ú 5ÿÿ ÿçâÎ&—&  Jÿÿ ÿëÐÎ&Ž& ú _ÿÿ ÿìÕÎ&—&  tÿÿ ÿíØÎ&Ž& ú ‰ÿÿ ÿçÜÎ&—&  žÿÿ ë½&z ÿÿÿëëÉ&Œ& , {ÿÿÿëëÉ&Œ& , ÿÿÿêëÉ&Œ& , ¥ÿÿÿðëÉ&ƒ& " ºÿÿÿéëÉ&Œ& , ÏÿÿÿçëÉ&•& 6 äÿÿÿïëÉ&Œ& , ùÿÿÿíëÉ&•& 6 ÿÿÿëëÉ&•& 6 #ÿÿÿíëÉ&•& 6 8ÿÿÿðëÉ&•& 6 MÿÿÿìëÉ&•& 6 bÿÿÿíëÉ&•& 6 wÿÿÿíëÉ&•& 6 ŒÿÿÿçëÉ&•& 6 ¡ÿÿÿïëÉ&Œ& , ¶ÿÿÿîëÉ&Œ& , ËÿÿÿèìÉ&•& 6 àÿÿÿèëÉ&Œ& @ õÿÿÿéëÉ&Œ& , ÿÿÿçëÉ&Œ& @ ÿÿÿçëÉ&Œ& , 4ÿÿÿçëÉ&•& 6 IÿÿÿëëÉ&Œ& , ^ÿÿÿìëÉ&•& 6 sÿÿÿíëÉ&Œ& , ˆÿÿÿçëÉ&•& 6 ÿÿÿëëÉ&{ IÿÿÿëëÉ&& T {ÿÿÿëëÉ&& T ÿÿÿêëÉ&& T ¥ÿÿÿðëÉ&„& O ºÿÿÿéëÉ&& T ÏÿÿÿçëÉ&–& i äÿÿÿïëÉ&& T ùÿÿÿíëÉ&–& i ÿÿÿëëÉ&–& i #ÿÿÿíëÉ&–& i 8ÿÿÿðëÉ&–& i MÿÿÿìëÉ&–& i bÿÿÿíëÉ&–& i wÿÿÿíëÉ&–& i ŒÿÿÿçëÉ&–& i ¡ÿÿÿïëÉ&& T ¶ÿÿÿîëÉ&& T ËÿÿÿèìÉ&–& i àÿÿÿèëÉ&& b õÿÿÿéëÉ&& T ÿÿÿçëÉ&& T ÿÿÿçëÉ&& T 4ÿÿÿçëÉ&–& [ IÿÿÿëëÉ&& T ^ÿÿÿìëÉ&–& i sÿÿÿíëÉ&& T ˆÿÿÿçëÉ&–& [ ÿÿ ÿëÐÎ&} pÿÿ ÿëÐÎ&& ~ ~ÿÿ ÿëÐÎ&& ~ “ÿÿ ÿêëÎ&& ~ ¨ÿÿÿðÕÎ&†& w ½ÿÿ ÿéãÎ&& ~ Òÿÿ ÿçßÎ&˜& “ çÿÿ ÿïÕÎ&& ~ üÿÿ ÿíÕÎ&˜& “ ÿÿ ÿëÐÎ&˜& “ &ÿÿ ÿíÐÎ&˜& “ ;ÿÿ ÿíÐÎ&˜& “ Pÿÿ ÿëéÎ&˜& “ eÿÿ ÿîÔÎ&˜& “ zÿÿ ÿíÖÎ&˜& “ ÿÿ ÿçÛÎ&˜& “ ¤ÿÿ ÿïÐÎ&& ~ ¹ÿÿ ÿîÐÎ&& ~ Îÿÿ ÿêéÎ&˜& “ ãÿÿ ÿèãÎ&& Œ øÿÿ ÿçéÎ&& ~ ÿÿ ÿçÔÎ&& Œ "ÿÿ ÿçÞÎ&& ~ 7ÿÿ ÿíÞÎ&˜& … Lÿÿ ÿëÐÎ&& ~ aÿÿ ÿìÕÎ&˜& “ vÿÿ ÿíØÎ&& ~ ‹ÿÿ ÿçÜÎ&˜& …  ÿÿ ÿëÐÎ& šÿÿ ÿëÐÎ&‘& ¨ ~ÿÿ ÿëÐÎ&‘& ¨ “ÿÿ ÿêëÎ&‘& ¨ ¨ÿÿ ÿðÕÎ&ˆ& ¡ ½ÿÿ ÿéãÎ&‘& ¨ Òÿÿ ÿçßÎ&š& ½ çÿÿ ÿïÕÎ&‘& ¨ üÿÿ ÿíÕÎ&š& ½ ÿÿ ÿëÐÎ&š& ½ &ÿÿ ÿíÐÎ&š& ½ ;ÿÿ ÿíÐÎ&š& ½ Pÿÿ ÿëéÎ&š& ½ eÿÿ ÿîÔÎ&š& ½ zÿÿ ÿíÖÎ&š& ½ ÿÿ ÿçÛÎ&š& ½ ¤ÿÿ ÿïÐÎ&‘& ¨ ¹ÿÿ ÿîÐÎ&‘& ¨ Îÿÿ ÿêéÎ&š& ½ ãÿÿ ÿèãÎ&‘& ¶ øÿÿ ÿçéÎ&‘& ¨ ÿÿ ÿçÔÎ&‘& ¶ "ÿÿ ÿçÞÎ&‘& ¨ 7ÿÿ ÿíÞÎ&š& ¯ Lÿÿ ÿëÐÎ&‘& ¨ aÿÿ ÿìÕÎ&š& ½ vÿÿ ÿíØÎ&‘& ¨ ‹ÿÿ ÿçÜÎ&š& ¯  ÿÿ ÿëÐÎ&} Äÿÿ ÿëÐÎ&& Ò }ÿÿ ÿëÐÎ&& Ò ’ÿÿ ÿêëÎ&& Ò §ÿÿÿðÕÎ&†& Ë ¼ÿÿ ÿéãÎ&& Ò Ñÿÿ ÿçßÎ&˜& ç æÿÿ ÿïÕÎ&& Ò ûÿÿ ÿíÕÎ&˜& ç ÿÿ ÿëÐÎ&˜& ç %ÿÿ ÿíÐÎ&˜& ç :ÿÿ ÿíÐÎ&˜& ç Oÿÿ ÿëèÎ&˜& ç dÿÿ ÿîÔÎ&˜& ç yÿÿ ÿíÖÎ&˜& ç Žÿÿ ÿçÛÎ&˜& ç £ÿÿ ÿïÐÎ&& Ò ¸ÿÿ ÿîÐÎ&& Ò Íÿÿ ÿêéÎ&˜& ç âÿÿ ÿèãÎ&& à ÷ÿÿ ÿçéÎ&& Ò ÿÿ ÿçÔÎ&& à !ÿÿ ÿçÞÎ&& Ò 6ÿÿ ÿçÞÎ&˜& Ù Kÿÿ ÿëÐÎ&& Ò `ÿÿ ÿìÕÎ&˜& ç uÿÿ ÿíØÎ&& Ò Šÿÿ ÿçÖÎ&˜& Ù ŸÿÿÿíëÉ&{ îÿÿÿëëÉ&& ü {ÿÿÿëëÉ&& ü ÿÿÿêëÉ&& ü ¥ÿÿÿðëÉ&„& õ ºÿÿÿéëÉ&& ü ÏÿÿÿçëÉ&–&  äÿÿÿïëÉ&& ü ùÿÿÿíëÉ&–&  ÿÿÿëëÉ&–&  #ÿÿÿíëÉ&–&  8ÿÿÿðëÉ&–&  MÿÿÿìëÉ&–&  bÿÿÿíëÉ&–&  wÿÿÿíëÉ&–&  ŒÿÿÿçëÉ&–&  ¡ÿÿÿïëÉ&& ü ¶ÿÿÿîëÉ&& ü ËÿÿÿèìÉ&–&  àÿÿÿèëÉ&&  õÿÿÿéëÉ&& ü ÿÿÿçëÉ&&  ÿÿÿçëÉ&& ü 4ÿÿÿçëÉ&–&  IÿÿÿëëÉ&& ü ^ÿÿÿìëÉ&–&  sÿÿÿíëÉ&& ü ˆÿÿÿçëÉ&–&  ÿÿ ë½&z ÿÿÿëëÉ&Œ& % {ÿÿÿëëÉ&Œ& % ÿÿÿêëÉ&Œ& % ¥ÿÿÿðëÉ&ƒ&  ºÿÿÿéëÉ&Œ& % ÏÿÿÿçëÉ&•& : äÿÿÿïëÉ&Œ& % ùÿÿÿíëÉ&•& : ÿÿÿëëÉ&•& : #ÿÿÿíëÉ&•& : 8ÿÿÿðëÉ&•& : MÿÿÿìëÉ&•& : bÿÿÿíëÉ&•& : wÿÿÿíëÉ&•& : ŒÿÿÿçëÉ&•& : ¡ÿÿÿïëÉ&Œ& % ¶ÿÿÿîëÉ&Œ& % ËÿÿÿèìÉ&•& : àÿÿÿèëÉ&Œ& 3 õÿÿÿéëÉ&Œ& % ÿÿÿçëÉ&Œ& 3 ÿÿÿçëÉ&Œ& % 4ÿÿÿçëÉ&•& , IÿÿÿëëÉ&Œ& % ^ÿÿÿìëÉ&•& : sÿÿÿíëÉ&Œ& % ˆÿÿÿçëÉ&•& , ÿÿ ÿëÐÎ&| Aÿÿ ÿëÐÎ&Ž& N |ÿÿ ÿëÐÎ&Ž& N ‘ÿÿ ÿêëÎ&Ž& N ¦ÿÿ ÿðÕÎ&…& G »ÿÿ ÿêãÎ&Ž& N Ðÿÿ ÿçßÎ&—& c åÿÿ ÿïÕÎ&Ž& N úÿÿ ÿíÕÎ&—& c ÿÿ ÿëÐÎ&—& c $ÿÿ ÿíÐÎ&—& c 9ÿÿ ÿíÐÎ&—& c Nÿÿ ÿìéÎ&—& c cÿÿ ÿîÔÎ&—& c xÿÿ ÿíÕÎ&—& c ÿÿ ÿçÛÎ&—& c ¢ÿÿ ÿïÐÎ&Ž& N ·ÿÿ ÿîÐÎ&Ž& N Ìÿÿ ÿèéÎ&—& c áÿÿ ÿèãÎ&Ž& \ öÿÿ ÿééÎ&Ž& N ÿÿ ÿçÔÎ&Ž& \ ÿÿ ÿçâÎ&Ž& N 5ÿÿ ÿçâÎ&—& U Jÿÿ ÿëÐÎ&Ž& N _ÿÿ ÿìÕÎ&—& c tÿÿ ÿíØÎ&Ž& N ‰ÿÿ ÿçÜÎ&—& U žÿÿ ÿëÐÎ&w jÿÿÿëÐÎ&‰& p yÿÿÿëÐÎ&‰& p ŽÿÿÿèìÎ&‰& p £ÿÿ ÿðÕÎ&€& m ¸ÿÿÿéãÎ&‰& p ÍÿÿÿçßÎ&’& v âÿÿÿïÕÎ&‰& p ÷ÿÿÿíÕÎ&’& v ÿÿÿëÐÎ&’& v !ÿÿÿíÐÎ&’& v 6ÿÿÿíÐÎ&’& v KÿÿÿìéÎ&’& v `ÿÿÿíÔÎ&’& v uÿÿÿíÕÎ&’& v ŠÿÿÿçÛÎ&’& v ŸÿÿÿïÐÎ&‰& p ´ÿÿÿîÐÎ&‰& p ÉÿÿÿèìÎ&’& v ÞÿÿÿèãÎ&‰& s óÿÿÿééÎ&‰& p ÿÿÿçÔÎ&‰& s ÿÿÿçÞÎ&‰& p 2ÿÿÿçÞÎ&’& p GÿÿÿëÐÎ&‰& p \ÿÿÿìÕÎ&’& v qÿÿÿíØÎ&‰& p †ÿÿÿçÖÎ&’& p ›ÿÿÿëöÎ&›UÿÿÿëõÎ&­&[ xÿÿÿëõÎ&­&[ ÿÿÿèõÎ&­&[ ¢ÿÿÿðöÎ&¤& ·XÿÿÿêõÎ&­&[ ÌÿÿÿçõÎ&¶&a áÿÿÿïõÎ&­&[ öÿÿÿíõÎ&¶&a ÿÿÿëõÎ&¶&a ÿÿÿíõÎ&¶&a 5ÿÿÿíõÎ&¶&a JÿÿÿìõÎ&¶&a _ÿÿÿíõÎ&¶&a tÿÿÿíõÎ&¶&a ‰ÿÿÿçõÎ&¶&a žÿÿÿïõÎ&[& ³­ÿÿÿîõÎ&­&[ ÈÿÿÿèõÎ&¶&a ÝÿÿÿèöÎ&­&^ òÿÿÿéõÎ&­&[ ÿÿÿçöÎ&­&^ ÿÿÿçõÎ&­&[ 1ÿÿÿçõÎ&¶&[ FÿÿÿëõÎ&­&[ [ÿÿÿìõÎ&¶&a pÿÿÿíõÎ&­&[ …ÿÿÿçõÎ&¶&[ šÿÿ ÿëÐÎ&dÿÿ ÿëÐÎ&¯&j zÿÿ ÿëÐÎ&¯&j ÿÿ ÿèìÎ&¯&j ¤ÿÿ ÿðÕÎ&¦&g ¹ÿÿ ÿéãÎ&¯&j Îÿÿ ÿçßÎ&¸&p ãÿÿ ÿïÕÎ&¯&j øÿÿ ÿíÕÎ&¸&p ÿÿ ÿëÐÎ&¸&p "ÿÿ ÿíÐÎ&¸&p 7ÿÿ ÿíÐÎ&¸&p Lÿÿ ÿìéÎ&¸&p aÿÿ ÿíÔÎ&¸&p vÿÿ ÿíÕÎ&¸&p ‹ÿÿ ÿçÛÎ&¸&p  ÿÿ ÿïÐÎ&¯&j µÿÿ ÿîÐÎ&¯&j Êÿÿ ÿèìÎ&¸&p ßÿÿ ÿèàÎ&¯&m ôÿÿ ÿééÎ&¯&j ÿÿ ÿçÔÎ&¯&m ÿÿ ÿçÞÎ&¯&j 3ÿÿ ÿçÞÎ&¸&j Hÿÿ ÿëÐÎ&¯&j ]ÿÿ ÿìÕÎ&¸&p rÿÿ ÿíØÎ&¯&j ‡ÿÿ ÿçÜÎ&¸&j œÿÿÿëöÎ&›sÿÿÿëöÎ&­&y xÿÿÿëöÎ&­&y ÿÿÿèöÎ&­&y ¢ÿÿÿðöÎ&¤&v ·ÿÿÿêöÎ&­&y ÌÿÿÿçöÎ&¶& áÿÿÿïöÎ&­&y öÿÿÿíöÎ&¶& ÿÿÿëöÎ&¶& ÿÿÿíöÎ&¶& 5ÿÿÿíöÎ&¶& JÿÿÿìöÎ&¶& _ÿÿÿíöÎ&¶& tÿÿÿíöÎ&¶& ‰ÿÿÿçöÎ&¶& žÿÿÿïöÎ&­&y ³ÿÿÿîöÎ&­&y ÈÿÿÿèöÎ&¶& ÝÿÿÿèöÎ&­&| òÿÿÿéöÎ&­&y ÿÿÿçöÎ&­&| ÿÿÿçöÎ&­&y 1ÿÿÿçöÎ&¶&y FÿÿÿëöÎ&­&y [ÿÿÿìöÎ&¶& pÿÿÿíöÎ&­&y …ÿÿÿçöÎ&¶&y šÿÿ ÿëÐÎ&‚ÿÿ ÿëÐÎ&¯&ˆ zÿÿ ÿëÐÎ&¯&ˆ ÿÿ ÿèìÎ&¯&ˆ ¤ÿÿ ÿðÕÎ&¦&… ¹ÿÿ ÿéãÎ&¯&ˆ Îÿÿ ÿçßÎ&¸&Ž ãÿÿ ÿïÕÎ&¯&ˆ øÿÿ ÿíÕÎ&¸&Ž ÿÿ ÿëÐÎ&¸&Ž "ÿÿ ÿíÐÎ&¸&Ž 7ÿÿ ÿíÐÎ&¸&Ž Lÿÿ ÿìéÎ&¸&Ž aÿÿ ÿíÔÎ&¸&Ž vÿÿ ÿíÕÎ&¸&Ž ‹ÿÿ ÿçÛÎ&¸&Ž  ÿÿ ÿïÐÎ&¯&ˆ µÿÿ ÿîÐÎ&¯&ˆ Êÿÿ ÿèìÎ&¸&Ž ßÿÿ ÿèàÎ&¯&‹ ôÿÿ ÿééÎ&¯&ˆ ÿÿ ÿçÔÎ&¯&‹ ÿÿ ÿçÞÎ&¯&ˆ 3ÿÿ ÿçÞÎ&¸&ˆ Hÿÿ ÿëÐÎ&¯&ˆ ]ÿÿ ÿìÕÎ&¸&Ž rÿÿ ÿíØÎ&¯&ˆ ‡ÿÿ ÿçÜÎ&¸&ˆ œÿÿ ÿëÐÎ&‘œÿÿ ÿëÐÎ&®&­ yÿÿ ÿëÐÎ&®&­ Žÿÿ ÿèìÎ&®&­ £ÿÿ ÿðÕÎ&¥& ¸£ÿÿ ÿéãÎ&®&­ Íÿÿ ÿçßÎ&·&· âÿÿ ÿïÕÎ&®&­ ÷ÿÿ ÿíÕÎ&·&· ÿÿ ÿëÐÎ&·&· !ÿÿ ÿíÐÎ&·&· 6ÿÿ ÿíÐÎ&·&· Kÿÿ ÿìéÎ&·&· `ÿÿ ÿíÔÎ&·&· uÿÿ ÿíÕÎ&·&· Šÿÿ ÿçÛÎ&·&· Ÿÿÿ ÿïÐÎ&®&­ ´ÿÿ ÿîÐÎ&®&­ Éÿÿ ÿèìÎ&·&· ÞÿÿÿèãÎ& ó&­Áÿÿ ÿééÎ&®&­ ÿÿÿçÔÎ&Á&­ ÿÿ ÿçÞÎ&®&­ 2ÿÿ ÿçÞÎ&·&· Gÿÿ ÿëÐÎ&®&­ \ÿÿ ÿìÕÎ&·&· qÿÿ ÿíØÎ&®&­ †ÿÿ ÿçÖÎ&·&· ›ÿÿ ÿëÐÎ&Éÿÿ ÿëÐÎ&¯&Ý zÿÿ ÿëÐÎ&¯&Ý ÿÿ ÿèìÎ&¯&Ý ¤ÿÿ ÿðÕÎ&¦&Ó ¹ÿÿ ÿéãÎ&¯&Ý Îÿÿ ÿçßÎ&¸&ç ãÿÿ ÿïÕÎ&¯&Ý øÿÿ ÿíÕÎ&¸&ç ÿÿ ÿëÐÎ&¸&ç "ÿÿ ÿíÐÎ&¸&ç 7ÿÿ ÿíÐÎ&¸&ç Lÿÿ ÿìéÎ&¸&ç aÿÿ ÿíÔÎ&¸&ç vÿÿ ÿíÕÎ&¸&ç ‹ÿÿ ÿçÛÎ&¸&ç  ÿÿ ÿïÐÎ&¯&Ý µÿÿ ÿîÐÎ&¯&Ý Êÿÿ ÿèìÎ&¸&ç ßÿÿ ÿèàÎ&¯&ñ ôÿÿ ÿééÎ&¯&Ý ÿÿ ÿçÔÎ&¯&ñ ÿÿ ÿçÞÎ&¯&Ý 3ÿÿ ÿçÞÎ&¸&ç Hÿÿ ÿëÐÎ&¯&Ý ]ÿÿ ÿìÕÎ&¸&ç rÿÿ ÿíØÎ&¯&Ý ‡ÿÿ ÿçÜÎ&¸&ç œÿÿ ÿëÐÎ&œûÿÿ ÿëÐÎ&®&  yÿÿ ÿëÐÎ&®&  Žÿÿ ÿèìÎ&®&  £ÿÿ ÿðÕÎ&¥&  ¸ÿÿ ÿéãÎ&®&  Íÿÿ ÿçßÎ&·&  âÿÿ ÿïÕÎ&®&  ÷ÿÿ ÿíÕÎ&·&  ÿÿ ÿëÐÎ&·&  !ÿÿ ÿíÐÎ&·&  6ÿÿ ÿíÐÎ&·&  Kÿÿ ÿìéÎ&·&  `ÿÿ ÿíÔÎ&·&  uÿÿ ÿíÕÎ&·&  Šÿÿ ÿçÛÎ&·&  Ÿÿÿ ÿïÐÎ&®&  ´ÿÿ ÿîÐÎ&®&  Éÿÿ ÿèìÎ&·&  Þÿÿ ÿèãÎ&®&  óÿÿ ÿééÎ& &® ÿÿ ÿçÔÎ&®&  ÿÿ ÿçÞÎ&®&  2ÿÿ ÿçÞÎ&·&  Gÿÿ ÿëÐÎ&®&  \ÿÿ ÿìÕÎ&·&  qÿÿ ÿíØÎ&®&  †ÿÿ ÿçÖÎ&·&  ›ÿÿ ÿëÐÎ& *ÿÿ ÿëÐÎ&¯& > zÿÿ ÿëÐÎ&¯& > ÿÿ ÿèìÎ&¯& > ¤ÿÿ ÿðÕÎ&¦& 4 ¹ÿÿ ÿéãÎ&¯& > Îÿÿ ÿçßÎ&¸& H ãÿÿ ÿïÕÎ&¯& > øÿÿ ÿíÕÎ&¸& H ÿÿ ÿëÐÎ&¸& H "ÿÿ ÿíÐÎ&¸& H 7ÿÿ ÿíÐÎ&¸& H Lÿÿ ÿìéÎ&¸& H aÿÿ ÿíÔÎ&¸& H vÿÿ ÿíÕÎ&¸& H ‹ÿÿ ÿçÛÎ&¸& H  ÿÿ ÿïÐÎ&¯& > µÿÿ ÿîÐÎ&¯& > Êÿÿ ÿèìÎ&¸& H ßÿÿ ÿèàÎ&¯& R ôÿÿ ÿééÎ&¯& > ÿÿ ÿçÔÎ&¯& R ÿÿ ÿçÞÎ&¯& > 3ÿÿ ÿçÞÎ&¸& H Hÿÿ ÿëÐÎ&¯& > ]ÿÿ ÿìÕÎ&¸& H rÿÿ ÿíØÎ&¯& > ‡ÿÿ ÿçÜÎ&¸& H œÿÿ êÉ&ž ZÿÿÿëêÏ&°& m {ÿÿÿëêÏ&°& m ÿÿÿêêÏ&°& m ¥ÿÿÿðêÏ&§& c ºÿÿÿéêÏ&°& m ÏÿÿÿçêÏ&¹& w äÿÿÿïêÏ&°& m ùÿÿÿíêÏ&¹& w ÿÿÿëêÏ&¹& w #ÿÿÿíêÏ&¹& w 8ÿÿÿðêÏ&¹& w MÿÿÿìêÏ&¹& w bÿÿÿíêÏ&¹& w wÿÿÿíêÏ&¹& w ŒÿÿÿçêÏ&¹& w ¡ÿÿÿïêÏ&°& m ¶ÿÿÿîêÏ&°& m ËÿÿÿèìÏ&¹& w àÿÿÿèêÏ&°& € õÿÿÿéêÏ&°& m ÿÿÿçêÏ&°& € ÿÿÿçêÏ&°& m 4ÿÿÿçêÏ&¹& w IÿÿÿëêÏ&°& m ^ÿÿÿìêÏ&¹& w sÿÿÿíêÏ&°& m ˆÿÿÿçêÏ&¹& w ÿÿÿëöÎ&  ŠÿÿÿëöÎ&²& ž ƒÿÿÿëöÎ&²& ž ˜ÿÿÿêöÎ&²& ž ­ÿÿÿíöÎ&©& ” ÂÿÿÿéöÎ&²& ž ×ÿÿÿçöÎ&»& ¨ ìÿÿÿíöÎ&²& ž ÿÿÿíöÎ&»& ¨ ÿÿÿëöÎ&»& ¨ +ÿÿÿíöÎ&»& ¨ @ÿÿÿìöÎ&»& ¨ UÿÿÿìöÎ&»& ¨ jÿÿÿîöÎ&»& ¨ ÿÿÿíöÎ&»& ¨ ”ÿÿÿèöÎ&»& ¨ ©ÿÿÿïöÎ&²& ž ¾ÿÿÿîöÎ&²& ž ÓÿÿÿêöÎ&»& ¨ èÿÿÿêöÎ&²& ² ýÿÿÿìöÎ&²& ž ÿÿÿêöÎ&²& ² 'ÿÿÿëöÎ&²& ž <ÿÿÿëöÎ&»& ¨ QÿÿÿëöÎ&²& ž fÿÿÿíöÎ&»& ¨ {ÿÿÿðöÎ&²& ž ÿÿÿçöÎ&»& ¨ ¥ÿÿÿëÐÎ&¢ ¼ÿÿÿëÐÎ&´& Ð ƒÿÿÿëÐÎ&´& Ð ˜ÿÿÿêëÎ&´& Ð ­ÿÿ ÿíÕÎ&«& Æ ÂÿÿÿéãÎ&´& Ð ×ÿÿ ÿçßÎ&½& Ú ìÿÿÿíÕÎ&´& Ð ÿÿ ÿíÕÎ&½& Ú ÿÿ ÿëÐÎ&½& Ú +ÿÿ ÿíÐÎ&½& Ú @ÿÿ ÿìÐÎ&½& Ú Uÿÿ ÿìéÎ&½& Ú jÿÿ ÿîÔÎ&½& Ú ÿÿ ÿíÕÎ&½& Ú ”ÿÿ ÿèÛÎ&½& Ú ©ÿÿÿïÐÎ&´& Ð ¾ÿÿÿîÐÎ&´& Ð Óÿÿ ÿêéÎ&½& Ú èÿÿÿêãÎ&´& ä ýÿÿÿìéÎ&´& Ð ÿÿÿêÔÎ&´& ä 'ÿÿÿëâÎ&´& Ð <ÿÿ ÿëáÎ&½& Ú QÿÿÿëÐÎ&´& Ð fÿÿ ÿíÕÎ&½& Ú {ÿÿÿðØÎ&´& Ð ÿÿ ÿçÜÎ&½& Ú ¥ÿÿÿëÐÎ&  íÿÿÿëÐÎ&²&  ƒÿÿÿëÐÎ&²&  ˜ÿÿÿêëÎ&²&  ­ÿÿÿíÕÎ&©& ÷ ÂÿÿÿéãÎ&²&  ×ÿÿÿçßÎ&»&  ìÿÿÿíÕÎ&²&  ÿÿÿíÕÎ&»&  ÿÿÿëÐÎ&»&  +ÿÿÿíÐÎ&»&  @ÿÿÿìÐÎ&»&  UÿÿÿìéÎ&»&  jÿÿÿîÔÎ&»&  ÿÿÿíÕÎ&»&  ”ÿÿÿèÛÎ&»&  ©ÿÿÿïÐÎ&²&  ¾ÿÿÿîÐÎ&²&  ÓÿÿÿêéÎ&»&  èÿÿÿêãÎ&²&  ýÿÿÿìéÎ&²&  ÿÿÿêÔÎ&²&  'ÿÿÿëâÎ&²&  <ÿÿÿëáÎ&»&  QÿÿÿëÐÎ&²&  fÿÿÿíÕÎ&»&  {ÿÿÿðØÎ&²&  ÿÿÿçÜÎ&»&  ¥ÿÿ ëÉ&ž ÿÿÿëëÏ&°& 3 {ÿÿÿëëÏ&°& 3 ÿÿÿêëÏ&°& 3 ¥ÿÿÿðëÏ&§& ) ºÿÿÿéëÏ&°& 3 ÏÿÿÿçëÏ&¹& = äÿÿÿïëÏ&°& 3 ùÿÿÿíëÏ&¹& = ÿÿÿëëÏ&¹& = #ÿÿÿíëÏ&¹& = 8ÿÿÿðëÏ&¹& = MÿÿÿìëÏ&¹& = bÿÿÿíëÏ&¹& = wÿÿÿíëÏ&¹& = ŒÿÿÿçëÏ&¹& = ¡ÿÿÿïëÏ&°& 3 ¶ÿÿÿîëÏ&°& 3 ËÿÿÿèìÏ&¹& = àÿÿÿèëÏ&°& G õÿÿÿéëÏ&°& 3 ÿÿÿçëÏ&°& G ÿÿÿçëÏ&°& 3 4ÿÿÿçëÏ&¹& = IÿÿÿëëÏ&°& 3 ^ÿÿÿìëÏ&¹& = sÿÿÿíëÏ&°& 3 ˆÿÿÿçëÏ&¹& = ÿÿÿëëÏ&Ÿ MÿÿÿëëÏ&±& Y {ÿÿÿëëÏ&±& Y ÿÿÿêëÏ&±& Y ¥ÿÿÿðëÏ&¨& R ºÿÿÿéëÏ&±& Y ÏÿÿÿçëÏ&º& n äÿÿÿïëÏ&±& Y ùÿÿÿíëÏ&±& k ÿÿÿëëÏ&º& n #ÿÿÿíëÏ&º& n 8ÿÿÿðëÏ&º& n MÿÿÿìëÏ&º& n bÿÿÿíëÏ&º& n wÿÿÿíëÏ&º& n ŒÿÿÿçëÏ&º& n ¡ÿÿÿïëÏ&±& Y ¶ÿÿÿîëÏ&±& Y ËÿÿÿèìÏ&º& n àÿÿÿèëÏ&±& g õÿÿÿéëÏ&±& Y ÿÿÿçëÏ&±& Y ÿÿÿçëÏ&±& Y 4ÿÿÿçëÏ&º& ` IÿÿÿëëÏ&±& Y ^ÿÿÿìëÏ&º& n sÿÿÿíëÏ&±& Y ˆÿÿÿçëÏ&º& ` ÿÿÿëÐÎ&¡ uÿÿÿëÐÎ&³& ƒ …ÿÿÿëÐÎ&³& ƒ šÿÿÿêëÎ&³& ƒ ¯ÿÿÿíÕÎ&ª& | ÄÿÿÿéãÎ&³& ƒ ÙÿÿÿçßÎ&¼& ˜ îÿÿÿìÕÎ&³& ƒ ÿÿÿíÕÎ&¼& ˜ ÿÿÿëÐÎ&¼& ˜ -ÿÿÿíÐÎ&¼& ˜ BÿÿÿìÐÎ&¼& ˜ WÿÿÿìéÎ&¼& ˜ lÿÿÿîÔÎ&¼& ˜ ÿÿÿîÕÎ&¼& ˜ –ÿÿÿçÛÎ&¼& ˜ «ÿÿÿïÐÎ&³& ƒ ÀÿÿÿîÐÎ&³& ƒ ÕÿÿÿêéÎ&¼& ˜ êÿÿÿêäÎ&³& ‘ ÿÿÿÿìéÎ&³& ƒ ÿÿÿêÔÎ&³& ‘ )ÿÿÿêÞÎ&³& ƒ >ÿÿÿëÞÎ&¼& Š SÿÿÿëÐÎ&³& ƒ hÿÿÿíÕÎ&¼& ˜ }ÿÿÿðØÎ&³& ƒ ’ÿÿÿçÜÎ&¼& Š §ÿÿÿëÐÎ&£ Ÿÿÿ ÿëÐÎ&µ& ­ …ÿÿ ÿëÐÎ&µ& ­ šÿÿ ÿêëÎ&µ& ­ ¯ÿÿÿíÕÎ&¬& ¦ Äÿÿ ÿéãÎ&µ& ­ Ùÿÿ ÿçßÎ&¾&  îÿÿ ÿìÕÎ&µ& ­ ÿÿ ÿíÕÎ&¾&  ÿÿ ÿëÐÎ&¾&  -ÿÿ ÿíÐÎ&¾&  Bÿÿ ÿìÐÎ&¾&  Wÿÿ ÿìéÎ&¾&  lÿÿ ÿîÔÎ&¾&  ÿÿ ÿîÕÎ&¾&  –ÿÿ ÿçÛÎ&¾&  «ÿÿ ÿïÐÎ&µ& ­ Àÿÿ ÿîÐÎ&µ& ­ Õÿÿ ÿêéÎ&¾&  êÿÿ ÿêäÎ&µ& » ÿÿÿ ÿìéÎ&µ& ­ ÿÿ ÿêÔÎ&µ& » )ÿÿ ÿêÞÎ&µ& ­ >ÿÿ ÿëÞÎ&¾& ´ Sÿÿ ÿëÐÎ&µ& ­ hÿÿ ÿíÕÎ&¾&  }ÿÿ ÿðØÎ&µ& ­ ’ÿÿ ÿçÜÎ&¾& ´ §ÿÿÿëÑÎ&¡ ÉÿÿÿëÐÎ&³& × „ÿÿÿëÐÎ&³& × ™ÿÿÿêëÎ&³& × ®ÿÿÿíÕÎ&ª& Ð ÃÿÿÿéãÎ&³& × ØÿÿÿçßÎ&¼& ì íÿÿÿìÕÎ&³& × ÿÿÿíÕÎ&¼& ì ÿÿÿëÐÎ&¼& ì ,ÿÿÿíÐÎ&¼& ì AÿÿÿìÐÎ&¼& ì VÿÿÿìéÎ&¼& ì kÿÿÿîÔÎ&¼& ì €ÿÿÿîÕÎ&¼& ì •ÿÿÿèÛÎ&¼& ì ªÿÿÿïÐÎ&³& × ¿ÿÿÿîÐÎ&³& × ÔÿÿÿêéÎ&¼& ì éÿÿÿêãÎ&³& å þÿÿÿìéÎ&³& × ÿÿÿêÔÎ&³& å (ÿÿÿêÞÎ&³& × =ÿÿÿëÞÎ&¼& Þ RÿÿÿëÐÎ&³& × gÿÿÿíÕÎ&¼& ì |ÿÿÿðØÎ&³& × ‘ÿÿÿç×Î&¼& Þ ¦ÿÿÿíëÏ&Ÿ óÿÿÿëëÏ&±&  {ÿÿÿëëÏ&±&  ÿÿÿêëÏ&±&  ¥ÿÿÿðëÏ&¨& ú ºÿÿÿéëÏ&±&  ÏÿÿÿçëÏ&º&  äÿÿÿïëÏ&±&  ùÿÿÿíëÏ&º&  ÿÿÿëëÏ&º&  #ÿÿÿíëÏ&º&  8ÿÿÿðëÏ&º&  MÿÿÿìëÏ&º&  bÿÿÿíëÏ&º&  wÿÿÿíëÏ&º&  ŒÿÿÿçëÏ&º&  ¡ÿÿÿïëÏ&±&  ¶ÿÿÿîëÏ&±&  ËÿÿÿèìÏ&º&  àÿÿÿèëÏ&±&  õÿÿÿéëÏ&±&  ÿÿÿçëÏ&±&  ÿÿÿçëÏ&±&  4ÿÿÿçëÏ&º&  IÿÿÿëëÏ&±&  ^ÿÿÿìëÏ&º&  sÿÿÿíëÏ&±&  ˆÿÿÿçëÏ&º&  ÿÿ ëÉ&ž ÿÿÿëëÏ&°& * {ÿÿÿëëÏ&°& * ÿÿÿêëÏ&°& * ¥ÿÿÿðëÏ&§& # ºÿÿÿéëÏ&°& * ÏÿÿÿçëÏ&¹& ? äÿÿÿïëÏ&°& * ùÿÿÿíëÏ&¹& ? ÿÿÿëëÏ&¹& ? #ÿÿÿíëÏ&¹& ? 8ÿÿÿðëÏ&¹& ? MÿÿÿìëÏ&¹& ? bÿÿÿíëÏ&¹& ? wÿÿÿíëÏ&¹& ? ŒÿÿÿçëÏ&¹& ? ¡ÿÿÿïëÏ&°& * ¶ÿÿÿîëÏ&°& * ËÿÿÿèìÏ&¹& ? àÿÿÿèëÏ&°& 8 õÿÿÿéëÏ&°& * ÿÿÿçëÏ&°& 8 ÿÿÿçëÏ&°& * 4ÿÿÿçëÏ&¹& 1 IÿÿÿëëÏ&°& * ^ÿÿÿìëÏ&¹& ? sÿÿÿíëÏ&°& * ˆÿÿÿçëÏ&¹& 1 ÿÿÿëÐÎ&  EÿÿÿëÐÎ&²& S ƒÿÿÿëÐÎ&²& S ˜ÿÿÿêëÎ&²& S ­ÿÿÿíÕÎ&©& L ÂÿÿÿéãÎ&²& S ×ÿÿÿçßÎ&»& h ìÿÿÿíÕÎ&²& S ÿÿÿíÕÎ&»& h ÿÿÿëÐÎ&»& h +ÿÿÿíÐÎ&»& h @ÿÿÿìÐÎ&»& h UÿÿÿìéÎ&»& h jÿÿÿîÔÎ&»& h ÿÿÿíÕÎ&»& h ”ÿÿÿèÛÎ&»& h ©ÿÿÿïÐÎ&²& S ¾ÿÿÿîÐÎ&²& S ÓÿÿÿêéÎ&»& h èÿÿÿêãÎ&²& a ýÿÿÿìéÎ&²& S ÿÿÿêÔÎ&²& a 'ÿÿÿëâÎ&²& S <ÿÿÿëáÎ&»& Z QÿÿÿëÐÎ&²& S fÿÿÿíÕÎ&»& h {ÿÿÿðØÎ&²& S ÿÿÿçÜÎ&»& Z ¥ÿÿÿëÐÎ&› iÿÿÿëÐÎ& o&­ xÿÿÿëÐÎ&­& o ŽÿÿÿèìÎ&­& o £ÿÿÿðÕÎ& l& ¸¤ÿÿÿéãÎ&­& o ÍÿÿÿçßÎ&¶& u âÿÿÿïÕÎ&­& o ÷ÿÿÿíÕÎ&­&  uÿÿÿëÐÎ&¶& u !ÿÿÿíÐÎ&¶& u 6ÿÿÿíÐÎ&¶& u KÿÿÿìéÎ&¶& u `ÿÿÿíÔÎ&¶& u uÿÿÿíÕÎ&¶& u ŠÿÿÿçÛÎ&¶& u ŸÿÿÿïÐÎ& u&­ ³ÿÿÿîÐÎ&­& o ÉÿÿÿèìÎ&¶& u ÞÿÿÿèãÎ&­& r óÿÿÿééÎ&­& o ÿÿÿçÔÎ&­& r !ÿÿÿçÞÎ&­& o 2ÿÿÿçÞÎ&¶& o GÿÿÿëÐÎ&­& o \ÿÿÿìÕÎ&¶& u qÿÿÿíØÎ&­& o †ÿÿÿçÖÎ&¶& o ›ÿÿÿëöÎ&¿UÿÿÿëõÎ&Ô&[ xÿÿÿëõÎ&Ô&[ ÿÿÿèõÎ&Ô&[ ¢ÿÿÿðöÎ&Ê&X ·ÿÿÿêõÎ&Ô&[ ÌÿÿÿçõÎ&ß&a áÿÿÿïõÎ&Ô&[ öÿÿÿíõÎ&ß&a ÿÿÿëõÎ&ß&a ÿÿÿíõÎ&ß&a 5ÿÿÿíõÎ&ß&a JÿÿÿìõÎ&ß&a _ÿÿÿíõÎ&ß&a tÿÿÿíõÎ&ß&a ‰ÿÿÿçõÎ&ß&a žÿÿÿïõÎ&Ô&[ ³ÿÿÿîõÎ&Ô&[ ÈÿÿÿèõÎ&ß&a ÝÿÿÿèöÎ&Ô&^ òÿÿÿéõÎ&Ô&[ ÿÿÿçöÎ&Ô&^ ÿÿÿçõÎ&Ô&[ 1ÿÿÿçõÎ&ß&[ FÿÿÿëõÎ&Ô&[ [ÿÿÿìõÎ&ß&a pÿÿÿíõÎ&Ô&[ …ÿÿÿçõÎ&ß&[ šÿÿ ÿëÐÎ&Ádÿÿ ÿëÐÎ&Ö&j zÿÿ ÿëÐÎ&Ö&j ÿÿ ÿèìÎ&Ö&j ¤ÿÿ ÿðÕÎ&Ì&g ¹ÿÿ ÿéãÎ&Ö&j Îÿÿ ÿçßÎ&á&p ãÿÿ ÿïÕÎ&Ö&j øÿÿ ÿíÕÎ&á&p ÿÿ ÿëÐÎ&á&p "ÿÿ ÿíÐÎ&á&p 7ÿÿ ÿíÐÎ&á&p Lÿÿ ÿìéÎ&á&p aÿÿ ÿíÔÎ&á&p vÿÿ ÿíÕÎ&á&p ‹ÿÿ ÿçÛÎ&á&p  ÿÿ ÿïÐÎ&Ö&j µÿÿ ÿîÐÎ&Ö&j Êÿÿ ÿèìÎ&á&p ßÿÿ ÿèàÎ&Ö&m ôÿÿ ÿééÎ&Ö&j ÿÿ ÿçÔÎ&Ö&m ÿÿ ÿçÞÎ&Ö&j 3ÿÿ ÿçÞÎ&á&j Hÿÿ ÿëÐÎ&Ö&j ]ÿÿ ÿìÕÎ&á&p rÿÿ ÿíØÎ&Ö&j ‡ÿÿ ÿçÜÎ&á&j œÿÿÿëöÎ&¿sÿÿÿëöÎ&Ô&y xÿÿÿëöÎ&Ô&y ÿÿÿèöÎ&Ô&y ¢ÿÿÿðöÎ&Ê&v ·ÿÿÿêöÎ&Ô&y ÌÿÿÿçöÎ&ß& áÿÿÿïöÎ&Ô&y öÿÿÿíöÎ&ß& ÿÿÿëöÎ&ß& ÿÿÿíöÎ&ß& 5ÿÿÿíöÎ&ß& JÿÿÿìöÎ&ß& _ÿÿÿíöÎ&ß& tÿÿÿíöÎ&ß& ‰ÿÿÿçöÎ&ß& žÿÿÿïöÎ&Ô&y ³ÿÿÿîöÎ&Ô&y ÈÿÿÿèöÎ&ß& ÝÿÿÿèöÎ&Ô&| òÿÿÿéöÎ&Ô&y ÿÿÿçöÎ&Ô&| ÿÿÿçöÎ&Ô&y 1ÿÿÿçöÎ&ß&y FÿÿÿëöÎ&Ô&y [ÿÿÿìöÎ&ß& pÿÿÿíöÎ&Ô&y …ÿÿÿçöÎ&ß&y šÿÿ ÿëÐÎ&Á‚ÿÿ ÿëÐÎ&Ö&ˆ zÿÿ ÿëÐÎ&Ö&ˆ ÿÿ ÿèìÎ&Ö&ˆ ¤ÿÿ ÿðÕÎ&Ì&… ¹ÿÿ ÿéãÎ&Ö&ˆ Îÿÿ ÿçßÎ&á&Ž ãÿÿ ÿïÕÎ&Ö&ˆ øÿÿ ÿíÕÎ&á&Ž ÿÿ ÿëÐÎ&á&Ž "ÿÿ ÿíÐÎ&á&Ž 7ÿÿ ÿíÐÎ&á&Ž Lÿÿ ÿìéÎ&á&Ž aÿÿ ÿíÔÎ&á&Ž vÿÿ ÿíÕÎ&á&Ž ‹ÿÿ ÿçÛÎ&á&Ž  ÿÿ ÿïÐÎ&Ö&ˆ µÿÿ ÿîÐÎ&Ö&ˆ Êÿÿ ÿèìÎ&á&Ž ßÿÿ ÿèàÎ&Ö&‹ ôÿÿ ÿééÎ&Ö&ˆ ÿÿ ÿçÔÎ&Ö&‹ ÿÿ ÿçÞÎ&Ö&ˆ 3ÿÿ ÿçÞÎ&á&ˆ Hÿÿ ÿëÐÎ&Ö&ˆ ]ÿÿ ÿìÕÎ&á&Ž rÿÿ ÿíØÎ&Ö&ˆ ‡ÿÿ ÿçÜÎ&á&ˆ œÿÿ ÿëÐÎ&À‘ÿÿ ÿëÐÎ&Õ&¤ yÿÿ ÿëÐÎ&Õ&¤ Žÿÿ ÿèìÎ&Õ&¤ £ÿÿ ÿðÕÎ&Ë&› ¸ÿÿ ÿéãÎ&Õ&¤ Íÿÿ ÿçßÎ&à&® âÿÿ ÿïÕÎ&Õ&¤ ÷ÿÿ ÿíÕÎ&à&® ÿÿ ÿëÐÎ&à&® !ÿÿ ÿíÐÎ&à&® 6ÿÿ ÿíÐÎ&à&® Kÿÿ ÿìéÎ&à&® `ÿÿ ÿíÔÎ&à&® uÿÿ ÿíÕÎ&à&® Šÿÿ ÿçÛÎ&à&® Ÿÿÿ ÿïÐÎ&Õ&¤ ´ÿÿ ÿîÐÎ&Õ&¤ Éÿÿ ÿèìÎ&à&® Þÿÿ ÿèãÎ&Õ&¸ óÿÿ ÿééÎ&Õ&¤ ÿÿ ÿçÔÎ&Õ&¸ ÿÿ ÿçÞÎ&Õ&¤ 2ÿÿ ÿçÞÎ&à&® Gÿÿ ÿëÐÎ&Õ&¤ \ÿÿ ÿìÕÎ&à&® qÿÿ ÿíØÎ&Õ&¤ †ÿÿ ÿçÖÎ&à&® ›ÿÿ ÿëÐÎ&ÂÁÿÿ ÿëÐÎ&Ö&Ô zÿÿ ÿëÐÎ&Ö&Ô ÿÿ ÿèìÎ&Ö&Ô ¤ÿÿ ÿðÕÎ&Ì&Ê ¹ÿÿ ÿéãÎ&Ö&Ô Îÿÿ ÿçßÎ&á&Þ ãÿÿ ÿïÕÎ&Ö&Ô øÿÿ ÿíÕÎ&á&Þ ÿÿ ÿëÐÎ&á&Þ "ÿÿ ÿíÐÎ&á&Þ 7ÿÿ ÿíÐÎ&á&Þ Lÿÿ ÿìéÎ&á&Þ aÿÿ ÿíÔÎ&á&Þ vÿÿ ÿíÕÎ&á&Þ ‹ÿÿ ÿçÛÎ&á&Þ  ÿÿ ÿïÐÎ&Ö&Ô µÿÿ ÿîÐÎ&Ö&Ô Êÿÿ ÿèìÎ&á&Þ ßÿÿ ÿèàÎ&Ö&è ôÿÿ ÿééÎ&Ö&Ô ÿÿ ÿçÔÎ&Ö&è ÿÿ ÿçÞÎ&Ö&Ô 3ÿÿ ÿçÞÎ&á&Þ Hÿÿ ÿëÐÎ&Ö&Ô ]ÿÿ ÿìÕÎ&á&Þ rÿÿ ÿíØÎ&Ö&Ô ‡ÿÿ ÿçÜÎ&á&Þ œÿÿ ÿëÐÎ&Àòÿÿ ÿëÐÎ&Õ&  yÿÿ ÿëÐÎ&Õ&  Žÿÿ ÿèìÎ&Õ&  £ÿÿ ÿðÕÎ&Ë&ü ¸ÿÿ ÿéãÎ&Õ&  Íÿÿ ÿçßÎ&à&  âÿÿ ÿïÕÎ&Õ&  ÷ÿÿ ÿíÕÎ&à&  ÿÿ ÿëÐÎ&à&  !ÿÿ ÿíÐÎ&à&  6ÿÿ ÿíÐÎ&à&  Kÿÿ ÿìéÎ&à&  `ÿÿ ÿíÔÎ&à&  uÿÿ ÿíÕÎ&à&  Šÿÿ ÿçÛÎ&à&  Ÿÿÿ ÿïÐÎ&Õ&  ´ÿÿ ÿîÐÎ&Õ&  Éÿÿ ÿèìÎ&à&  Þÿÿ ÿèãÎ&Õ&  óÿÿ ÿééÎ&Õ&  ÿÿ ÿçÔÎ&Õ&  ÿÿ ÿçÞÎ&Õ&  2ÿÿ ÿçÞÎ&à&  Gÿÿ ÿëÐÎ&Õ&  \ÿÿ ÿìÕÎ&à&  qÿÿ ÿíØÎ&Õ&  †ÿÿ ÿçÖÎ&à&  ›ÿÿ ÿëÐÎ&Á !ÿÿ ÿëÐÎ&Ö& 5 zÿÿ ÿëÐÎ&Ö& 5 ÿÿ ÿèìÎ&Ö& 5 ¤ÿÿ ÿðÕÎ&Ì& + ¹ÿÿ ÿéãÎ&Ö& 5 Îÿÿ ÿçßÎ&á& ? ãÿÿ ÿïÕÎ&Ö& 5 øÿÿ ÿíÕÎ&á& ? ÿÿ ÿëÐÎ&á& ? "ÿÿ ÿíÐÎ&á& ? 7ÿÿ ÿíÐÎ&á& ? Lÿÿ ÿìéÎ&á& ? aÿÿ ÿíÔÎ&á& ? vÿÿ ÿíÕÎ&á& ? ‹ÿÿ ÿçÛÎ&á& ?  ÿÿ ÿïÐÎ&Ö& 5 µÿÿ ÿîÐÎ&Ö& 5 Êÿÿ ÿèìÎ&á& ? ßÿÿ ÿèàÎ&Ö& I ôÿÿ ÿééÎ&Ö& 5 ÿÿ ÿçÔÎ&Ö& I ÿÿ ÿçÞÎ&Ö& 5 3ÿÿ ÿçÞÎ&á& ? Hÿÿ ÿëÐÎ&Ö& 5 ]ÿÿ ÿìÕÎ&á& ? rÿÿ ÿíØÎ&Ö& 5 ‡ÿÿ ÿçÜÎ&á& ? œÿÿ ê½& SÿÿÿëêÉ&×& l {ÿÿÿëêÉ&×& l ÿÿÿêêÉ&×& l ¥ÿÿÿðêÉ&Í& b ºÿÿÿéêÉ&×& l ÏÿÿÿçêÉ&â& v äÿÿÿïêÉ&×& l ùÿÿÿíêÉ&â& v ÿÿÿëêÉ&â& v #ÿÿÿíêÉ&â& v 8ÿÿÿðêÉ&â& v MÿÿÿìêÉ&â& v bÿÿÿíêÉ&â& v wÿÿÿíêÉ&â& v ŒÿÿÿçêÉ&â& v ¡ÿÿÿïêÉ&×& l ¶ÿÿÿîêÉ&×& l ËÿÿÿèìÉ&â& v àÿÿÿèêÉ&×&  õÿÿÿéêÉ&×& l ÿÿÿçêÉ&×&  ÿÿÿçêÉ&×& l 4ÿÿÿçêÉ&â& v IÿÿÿëêÉ&×& l ^ÿÿÿìêÉ&â& v sÿÿÿíêÉ&×& l ˆÿÿÿçêÉ&â& v ÿÿÿëöÎ&Ä ‰ÿÿÿëöÎ&Ù&  |ÿÿÿëöÎ&Ù&  ‘ÿÿÿêöÎ&Ù&  ¦ÿÿÿðöÎ&Ï& “ »ÿÿÿêöÎ&Ù&  ÐÿÿÿçöÎ&ä& § åÿÿÿïöÎ&Ù&  úÿÿÿíöÎ&ä& § ÿÿÿëöÎ&ä& § $ÿÿÿíöÎ&ä& § 9ÿÿÿíöÎ&ä& § NÿÿÿìöÎ&ä& § cÿÿÿîöÎ&ä& § xÿÿÿíöÎ&ä& § ÿÿÿçöÎ&ä& § ¢ÿÿÿïöÎ&Ù&  ·ÿÿÿîöÎ&Ù&  ÌÿÿÿèöÎ&ä& § áÿÿÿèöÎ&Ù& ± öÿÿÿéöÎ&Ù&  ÿÿÿçöÎ&Ù& ± ÿÿÿçöÎ&Ù&  5ÿÿÿçöÎ&ä& § JÿÿÿëöÎ&Ù&  _ÿÿÿìöÎ&ä& § tÿÿÿíöÎ&Ù&  ‰ÿÿÿçöÎ&ä& § žÿÿÿëÐÎ&Æ »ÿÿÿëÐÎ&Û& Ï |ÿÿÿëÐÎ&Û& Ï ‘ÿÿÿêëÎ&Û& Ï ¦ÿÿÿðÕÎ&Ñ& Å »ÿÿÿêãÎ&Û& Ï ÐÿÿÿçßÎ&æ& Ù åÿÿÿïÕÎ&Û& Ï úÿÿÿíÕÎ&æ& Ù ÿÿÿëÐÎ&æ& Ù $ÿÿÿíÐÎ&æ& Ù 9ÿÿÿíÐÎ&æ& Ù NÿÿÿìéÎ&æ& Ù cÿÿÿîÔÎ&æ& Ù xÿÿÿíÕÎ&æ& Ù ÿÿÿçÛÎ&æ& Ù ¢ÿÿÿïÐÎ&Û& Ï ·ÿÿÿîÐÎ&Û& Ï ÌÿÿÿèéÎ&æ& Ù áÿÿÿèãÎ&Û& ã öÿÿÿééÎ&Û& Ï ÿÿÿçÔÎ&Û& ã ÿÿÿçâÎ&Û& Ï 5ÿÿÿçâÎ&æ& Ù JÿÿÿëÐÎ&Û& Ï _ÿÿÿìÕÎ&æ& Ù tÿÿÿíØÎ&Û& Ï ‰ÿÿÿçÜÎ&æ& Ù žÿÿÿëÐÎ&Ä ìÿÿÿëÐÎ&Ù&  |ÿÿÿëÐÎ&Ù&  ‘ÿÿÿêëÎ&Ù&  ¦ÿÿÿðÕÎ&Ï& ö »ÿÿÿêãÎ&Ù&  ÐÿÿÿçßÎ&ä&  åÿÿÿïÕÎ&Ù&  úÿÿÿíÕÎ&ä&  ÿÿÿëÐÎ&ä&  $ÿÿÿíÐÎ&ä&  9ÿÿÿíÐÎ&ä&  NÿÿÿìéÎ&ä&  cÿÿÿîÔÎ&ä&  xÿÿÿíÕÎ&ä&  ÿÿÿçÛÎ&ä&  ¢ÿÿÿïÐÎ&Ù&  ·ÿÿÿîÐÎ&Ù&  ÌÿÿÿèéÎ&ä&  áÿÿÿèãÎ&Ù&  öÿÿÿééÎ&Ù&  ÿÿÿçÔÎ&Ù&  ÿÿÿçâÎ&Ù&  5ÿÿÿçâÎ&ä&  JÿÿÿëÐÎ&Ù&  _ÿÿÿìÕÎ&ä&  tÿÿÿíØÎ&Ù&  ‰ÿÿÿçÜÎ&ä&  žÿÿ ë½& ÿÿÿëëÉ&×& 2 {ÿÿÿëëÉ&×& 2 ÿÿÿêëÉ&×& 2 ¥ÿÿÿðëÉ&Í& ( ºÿÿÿéëÉ&×& 2 ÏÿÿÿçëÉ&â& < äÿÿÿïëÉ&×& 2 ùÿÿÿíëÉ&â& < ÿÿÿëëÉ&â& < #ÿÿÿíëÉ&â& < 8ÿÿÿðëÉ&â& < MÿÿÿìëÉ&â& < bÿÿÿíëÉ&â& < wÿÿÿíëÉ&â& < ŒÿÿÿçëÉ&â& < ¡ÿÿÿïëÉ&×& 2 ¶ÿÿÿîëÉ&×& 2 ËÿÿÿèìÉ&â& < àÿÿÿèëÉ&×& F õÿÿÿéëÉ&×& 2 ÿÿÿçëÉ&×& F ÿÿÿçëÉ&×& 2 4ÿÿÿçëÉ&â& < IÿÿÿëëÉ&×& 2 ^ÿÿÿìëÉ&â& < sÿÿÿíëÉ&×& 2 ˆÿÿÿçëÉ&â& < ÿÿÿëëÉ&à HÿÿÿëëÉ&Ø& U {ÿÿÿëëÉ&Ø& U ÿÿÿêëÉ&Ø& U ¥ÿÿÿðëÉ&Î& P ºÿÿÿéëÉ&Ø& U ÏÿÿÿçëÉ&ã& j äÿÿÿïëÉ&Ø& U ùÿÿÿíëÉ&ã& j ÿÿÿëëÉ&ã& j #ÿÿÿíëÉ&ã& j 8ÿÿÿðëÉ&ã& j MÿÿÿìëÉ&ã& j bÿÿÿíëÉ&ã& j wÿÿÿíëÉ&ã& j ŒÿÿÿçëÉ&ã& j ¡ÿÿÿïëÉ&Ø& U ¶ÿÿÿîëÉ&Ø& U ËÿÿÿèìÉ&ã& j àÿÿÿèëÉ&Ø& c õÿÿÿéëÉ&Ø& U ÿÿÿçëÉ&Ø& U ÿÿÿçëÉ&Ø& U 4ÿÿÿçëÉ&ã& \ IÿÿÿëëÉ&Ø& U ^ÿÿÿìëÉ&ã& j sÿÿÿíëÉ&Ø& U ˆÿÿÿçëÉ&ã& \ ÿÿÿëÐÎ&Å qÿÿÿëÐÎ&Ú&  ~ÿÿÿëÐÎ&Ú&  “ÿÿÿêëÎ&Ú&  ¨ÿÿÿðÕÎ&Ð& x ½ÿÿÿéãÎ&Ú&  ÒÿÿÿçßÎ&å& ” çÿÿÿïÕÎ&Ú&  üÿÿÿíÕÎ&å& ” ÿÿÿëÐÎ&å& ” &ÿÿÿíÐÎ&å& ” ;ÿÿÿíÐÎ&å& ” PÿÿÿëéÎ&å& ” eÿÿÿîÔÎ&å& ” zÿÿÿíÖÎ&å& ” ÿÿÿçÛÎ&å& ” ¤ÿÿÿïÐÎ&Ú&  ¹ÿÿÿîÐÎ&Ú&  ÎÿÿÿêéÎ&å& ” ãÿÿÿèãÎ&Ú&  øÿÿÿçéÎ&Ú&  ÿÿÿçÔÎ&Ú&  "ÿÿÿçÞÎ&Ú&  7ÿÿÿíÞÎ&å& † LÿÿÿëÐÎ&Ú&  aÿÿÿìÕÎ&å& ” vÿÿÿíØÎ&Ú&  ‹ÿÿÿçÜÎ&å& †  ÿÿÿëÐÎ&Ç ›ÿÿÿëÐÎ&Ü& © ~ÿÿÿëÐÎ&Ü& © “ÿÿÿêëÎ&Ü& © ¨ÿÿÿðÕÎ&Ò& ¢ ½ÿÿÿéãÎ&Ü& © ÒÿÿÿçßÎ&ç& ¾ çÿÿÿïÕÎ&Ü& © üÿÿÿíÕÎ&ç& ¾ ÿÿÿëÐÎ&ç& ¾ &ÿÿÿíÐÎ&ç& ¾ ;ÿÿÿíÐÎ&ç& ¾ PÿÿÿëéÎ&ç& ¾ eÿÿÿîÔÎ&ç& ¾ zÿÿÿíÖÎ&ç& ¾ ÿÿÿçÛÎ&ç& ¾ ¤ÿÿÿïÐÎ&Ü& © ¹ÿÿÿîÐÎ&Ü& © ÎÿÿÿêéÎ&ç& ¾ ãÿÿÿèãÎ&Ü& · øÿÿÿçéÎ&Ü& © ÿÿÿçÔÎ&Ü& · "ÿÿÿçÞÎ&Ü& © 7ÿÿÿíÞÎ&ç& ° LÿÿÿëÐÎ&Ü& © aÿÿÿìÕÎ&ç& ¾ vÿÿÿíØÎ&Ü& © ‹ÿÿÿçÜÎ&ç& °  ÿÿÿëÐÎ& ÃÅÿÿÿëÐÎ&Ú& Ó }ÿÿÿëÐÎ&Ú& Ó ’ÿÿÿêëÎ&Ú& Ó §ÿÿÿðÕÎ&Ð& Ì ¼ÿÿÿéãÎ&Ú& Ó ÑÿÿÿçßÎ&å& è æÿÿÿïÕÎ&Ú& Ó ûÿÿÿíÕÎ&å& è ÿÿÿëÐÎ&å& è %ÿÿÿíÐÎ&å& è :ÿÿÿíÐÎ&å& è OÿÿÿëèÎ&å& è dÿÿÿîÔÎ&å& è yÿÿÿíÖÎ&å& è ŽÿÿÿçÛÎ&å& è £ÿÿÿïÐÎ&Ú& Ó ¸ÿÿÿîÐÎ&Ú& Ó ÍÿÿÿêéÎ&å& è âÿÿÿèãÎ&Ú& á ÷ÿÿÿçéÎ&Ú& Ó ÿÿÿçÔÎ&Ú& á !ÿÿÿçÞÎ&Ú& Ó 6ÿÿÿçÞÎ&å& Ú KÿÿÿëÐÎ&Ú& Ó `ÿÿÿìÕÎ&å& è uÿÿÿíØÎ&Ú& Ó ŠÿÿÿçÖÎ&å& Ú ŸÿÿÿíëÉ&à ïÿÿÿëëÉ&Ø& ý {ÿÿÿëëÉ&Ø& ý ÿÿÿêëÉ&Ø& ý ¥ÿÿÿðëÉ&Î& ö ºÿÿÿéëÉ&Ø& ý ÏÿÿÿçëÉ&ã&  äÿÿÿïëÉ&Ø& ý ùÿÿÿíëÉ&ã&  ÿÿÿëëÉ&ã&  #ÿÿÿíëÉ&ã&  8ÿÿÿðëÉ&ã&  MÿÿÿìëÉ&ã&  bÿÿÿíëÉ&ã&  wÿÿÿíëÉ&ã&  ŒÿÿÿçëÉ&ã&  ¡ÿÿÿïëÉ&Ø& ý ¶ÿÿÿîëÉ&Ø& ý ËÿÿÿèìÉ&ã&  àÿÿÿèëÉ&Ø&  õÿÿÿéëÉ&Ø& ý ÿÿÿçëÉ&Ø&  ÿÿÿçëÉ&Ø& ý 4ÿÿÿçëÉ&ã&  IÿÿÿëëÉ&Ø& ý ^ÿÿÿìëÉ&ã&  sÿÿÿíëÉ&Ø& ý ˆÿÿÿçëÉ&ã&  ÿÿ ë½&È ÿÿÿëëÉ&Ý& & {ÿÿÿëëÉ&Ý& & ÿÿÿêëÉ&Ý& & ¥ÿÿÿðëÉ& &&Ý ºÿÿÿéëÉ&Ý& & ÏÿÿÿçëÉ&è& ; äÿÿÿïëÉ&Ý& & ùÿÿÿíëÉ&è& ; ÿÿÿëëÉ&è& ; #ÿÿÿíëÉ&è& ; 8ÿÿÿðëÉ&è& ; MÿÿÿìëÉ&è& ; bÿÿÿíëÉ&è& ; wÿÿÿíëÉ&è& ; ŒÿÿÿçëÉ&è& ; ¡ÿÿÿïëÉ&Ý& & ¶ÿÿÿîëÉ&Ý& & ËÿÿÿèìÉ&è& ; àÿÿÿèëÉ&Ý& 4 õÿÿÿéëÉ&Ý& & ÿÿÿçëÉ&Ý& 4 ÿÿÿçëÉ&Ý& & 4ÿÿÿçëÉ&è& - IÿÿÿëëÉ&Ý& & ^ÿÿÿìëÉ&è& ; sÿÿÿíëÉ&Ý& & ˆÿÿÿçëÉ&è& - ÿÿÿëÐÎ&É BÿÿÿëÐÎ&Þ& O |ÿÿÿëÐÎ&Þ& O ‘ÿÿÿêëÎ&Þ& O ¦ÿÿÿðÕÎ&Ó& H »ÿÿÿêãÎ&Þ& O ÐÿÿÿçßÎ&é& d åÿÿÿïÕÎ&Þ& O úÿÿÿíÕÎ&é& d ÿÿÿëÐÎ&é& d $ÿÿÿíÐÎ&é& d 9ÿÿÿíÐÎ&é& d NÿÿÿìéÎ&é& d cÿÿÿîÔÎ&é& d xÿÿÿíÕÎ&é& d ÿÿÿçÛÎ&é& d ¢ÿÿÿïÐÎ&Þ& O ·ÿÿÿîÐÎ&Þ& O ÌÿÿÿèéÎ&é& d áÿÿÿèãÎ&Þ& ] öÿÿÿééÎ&Þ& O ÿÿÿçÔÎ&Þ& ] ÿÿÿçâÎ&Þ& O 5ÿÿÿçâÎ&é& V JÿÿÿëÐÎ&Þ& O _ÿÿÿìÕÎ&é& d tÿÿÿíØÎ&Þ& O ‰ÿÿÿçÜÎ&é& V žÿÿÿëÐÎ&¿ iÿÿÿëÐÎ&Ô& o yÿÿÿëÐÎ&Ô& o ŽÿÿÿèìÎ&Ô& o £ÿÿÿðÕÎ&Ê& l ¸ÿÿÿéãÎ&Ô& o ÍÿÿÿçßÎ&ß& u âÿÿÿïÕÎ&Ô& o ÷ÿÿÿíÕÎ&ß& u ÿÿÿëÐÎ&ß& u !ÿÿÿíÐÎ&ß& u 6ÿÿÿíÐÎ&ß& u KÿÿÿìéÎ&ß& u `ÿÿÿíÔÎ&ß& u uÿÿÿíÕÎ&ß& u ŠÿÿÿçÛÎ&ß& u ŸÿÿÿïÐÎ&Ô& o ´ÿÿÿîÐÎ&Ô& o ÉÿÿÿèìÎ&ß& u ÞÿÿÿèãÎ&Ô& r óÿÿÿééÎ&Ô& o ÿÿÿçÔÎ&Ô& r ÿÿÿçÞÎ&Ô& o 2ÿÿÿçÞÎ&ß& o GÿÿÿëÐÎ&Ô& o \ÿÿÿìÕÎ&ß& u qÿÿÿíØÎ&Ô& o †ÿÿÿçÖÎ&ß& o ›ÿÿÿëöÎ&UêÿÿÿëõÎ&ü&[ xÿÿÿëõÎ&ü&[ ÿÿÿèõÎ&ü&[ ¢ÿÿÿðöÎ&ó& ¸XÿÿÿêõÎ&ü&[ ÌÿÿÿçõÎ&&a áÿÿÿïõÎ&ü& ö[ÿÿÿíõÎ&[& ÿÿÿëõÎ&&a ÿÿÿíõÎ&&a 5ÿÿÿíõÎ&&a JÿÿÿìõÎ&&a _ÿÿÿíõÎ&&a tÿÿÿíõÎ&&a ‰ÿÿÿçõÎ&&a žÿÿÿïõÎ&ü&[ ³ÿÿÿîõÎ&ü&[ ÈÿÿÿèõÎ&&a ÝÿÿÿèöÎ&ü&^ òÿÿÿéõÎ&ü&[ ÿÿÿçöÎ&ü&^ ÿÿÿçõÎ&ü&[ 1ÿÿÿçõÎ&&[ FÿÿÿëõÎ&ü&[ [ÿÿÿìõÎ&&a pÿÿÿíõÎ&ü&[ …ÿÿÿçõÎ&&[ šÿÿÿëÐÎ&dìÿÿÿëÐÎ&þ&j zÿÿÿëÐÎ&þ&j ÿÿÿèìÎ&þ&j ¤ÿÿÿðÕÎ&õ&g ¹ÿÿÿéãÎ&þ&j ÎÿÿÿçßÎ&&p ãÿÿÿïÕÎ&þ&j øÿÿÿíÕÎ&&p ÿÿÿëÐÎ&&p "ÿÿÿíÐÎ&&p 7ÿÿÿíÐÎ&&p LÿÿÿìéÎ&&p aÿÿÿíÔÎ&&p vÿÿÿíÕÎ&&p ‹ÿÿÿçÛÎ&&p  ÿÿÿïÐÎ&þ&j µÿÿÿîÐÎ&þ&j ÊÿÿÿèìÎ&&p ßÿÿÿèàÎ&þ&m ôÿÿÿééÎ&þ&j ÿÿÿçÔÎ&þ&m ÿÿÿçÞÎ&þ&j 3ÿÿÿçÞÎ&&j HÿÿÿëÐÎ&þ&j ]ÿÿÿìÕÎ&&p rÿÿÿíØÎ&þ&j ‡ÿÿÿçÜÎ&&j œÿÿÿëöÎ&êsÿÿÿëöÎ&ü&y xÿÿÿëöÎ&ü&y ÿÿÿèöÎ&ü&y ¢ÿÿÿðöÎ&ó&v ·ÿÿÿêöÎ&ü&y ÌÿÿÿçöÎ&& áÿÿÿïöÎ&ü&y öÿÿÿíöÎ&& ÿÿÿëöÎ&& ÿÿÿíöÎ&& 5ÿÿÿíöÎ&& JÿÿÿìöÎ&& _ÿÿÿíöÎ&& tÿÿÿíöÎ&& ‰ÿÿÿçöÎ&& žÿÿÿïöÎ&ü&y ³ÿÿÿîöÎ&ü&y ÈÿÿÿèöÎ&& ÝÿÿÿèöÎ&ü&| òÿÿÿéöÎ&ü&y ÿÿÿçöÎ&ü&| ÿÿÿçöÎ&ü&y 1ÿÿÿçöÎ&&y FÿÿÿëöÎ&ü&y [ÿÿÿìöÎ&& pÿÿÿíöÎ&ü&y …ÿÿÿçöÎ&&y šÿÿÿëÐÎ&ì‚ÿÿÿëÐÎ&þ&ˆ zÿÿÿëÐÎ&þ&ˆ ÿÿÿèìÎ&þ&ˆ ¤ÿÿÿðÕÎ&õ&… ¹ÿÿÿéãÎ&þ&ˆ ÎÿÿÿçßÎ&&Ž ãÿÿÿïÕÎ&þ&ˆ øÿÿÿíÕÎ&&Ž ÿÿÿëÐÎ&&Ž "ÿÿÿíÐÎ&&Ž 7ÿÿÿíÐÎ&&Ž LÿÿÿìéÎ&&Ž aÿÿÿíÔÎ&&Ž vÿÿÿíÕÎ&&Ž ‹ÿÿÿçÛÎ&&Ž  ÿÿÿïÐÎ&þ&ˆ µÿÿÿîÐÎ&þ&ˆ ÊÿÿÿèìÎ&&Ž ßÿÿÿèàÎ&þ&‹ ôÿÿÿééÎ&þ&ˆ ÿÿÿçÔÎ&þ&‹ ÿÿÿçÞÎ&þ&ˆ 3ÿÿÿçÞÎ&&ˆ HÿÿÿëÐÎ&þ&ˆ ]ÿÿÿìÕÎ&&Ž rÿÿÿíØÎ&þ&ˆ ‡ÿÿÿçÜÎ&&ˆ œÿÿÿëÐÎ&ë‘ÿÿÿëÐÎ&¬&ý yÿÿÿëÐÎ&ý&¬ ŽÿÿÿèìÎ&ý&¬ £ÿÿÿðÕÎ&ô&¢ ¸ÿÿÿéãÎ&ý&¬ ÍÿÿÿçßÎ&&¶ âÿÿÿïÕÎ&ý&¬ ÷ÿÿÿíÕÎ&&¶ ÿÿÿëÐÎ&&¶ !ÿÿÿíÐÎ&&¶ 6ÿÿÿíÐÎ&&¶ KÿÿÿìéÎ&&¶ `ÿÿÿíÔÎ&&¶ uÿÿÿíÕÎ&&¶ ŠÿÿÿçÛÎ&&¶ ŸÿÿÿïÐÎ&ý&¬ ´ÿÿÿîÐÎ&ý&¬ ÉÿÿÿèìÎ&&¶ ÞÿÿÿèãÎ&ý&À óÿÿÿééÎ&ý&¬ ÿÿÿçÔÎ&ý&À ÿÿÿçÞÎ&ý&¬ 2ÿÿÿçÞÎ&&¶ GÿÿÿëÐÎ&ý&¬ \ÿÿÿìÕÎ&&¶ qÿÿÿíØÎ&ý&¬ †ÿÿÿçÖÎ&&¶ ›ÿÿÿëÐÎ&ìÉÿÿÿëÐÎ&þ&Ü zÿÿÿëÐÎ&þ&Ü ÿÿÿèìÎ&þ&Ü ¤ÿÿÿðÕÎ&õ&Ò ¹ÿÿÿéãÎ&þ&Ü ÎÿÿÿçßÎ&&æ ãÿÿÿïÕÎ&þ&Ü øÿÿÿíÕÎ&ã& ÿÿÿëÐÎ&&æ "ÿÿÿíÐÎ&&æ 7ÿÿÿíÐÎ&&æ LÿÿÿìéÎ&&æ aÿÿÿíÔÎ&&æ vÿÿÿíÕÎ&&æ ‹ÿÿÿçÛÎ&&æ  ÿÿÿïÐÎ&þ&Ü µÿÿÿîÐÎ&þ&Ü ÊÿÿÿèìÎ&&æ ßÿÿÿèàÎ&þ&ð ôÿÿÿééÎ&þ&Ü ÿÿÿçÔÎ&þ&ð ÿÿÿçÞÎ&þ&Ü 3ÿÿÿçÞÎ&&æ HÿÿÿëÐÎ&þ&Ü ]ÿÿÿìÕÎ&&æ rÿÿÿíØÎ&þ&Ü ‡ÿÿÿçÜÎ&&æ œÿÿÿëÐÎ&ëúÿÿÿëÐÎ&ý&  yÿÿÿëÐÎ&ý&  ŽÿÿÿèìÎ&ý&  £ÿÿÿðÕÎ&ô&  ¸ÿÿÿéãÎ&ý&  ÍÿÿÿçßÎ&&  âÿÿÿïÕÎ&ý&  ÷ÿÿÿíÕÎ&&  ÿÿÿëÐÎ&&  !ÿÿÿíÐÎ&&  6ÿÿÿíÐÎ&&  KÿÿÿìéÎ&&  `ÿÿÿíÔÎ&&  uÿÿÿíÕÎ&&  ŠÿÿÿçÛÎ&&  ŸÿÿÿïÐÎ&ý&  ´ÿÿÿîÐÎ&ý&  ÉÿÿÿèìÎ&&  ÞÿÿÿèãÎ&ý&  óÿÿÿééÎ&ý&  ÿÿÿçÔÎ&ý&  ÿÿÿçÞÎ&ý&  2ÿÿÿçÞÎ&&  GÿÿÿëÐÎ&ý&  \ÿÿÿìÕÎ&&  qÿÿÿíØÎ&ý&  †ÿÿÿçÖÎ&&  ›ÿÿÿëÐÎ&ì )ÿÿÿëÐÎ&þ& = zÿÿÿëÐÎ&þ& = ÿÿÿèìÎ&þ& = ¤ÿÿÿðÕÎ&õ& 3 ¹ÿÿÿéãÎ&þ& = ÎÿÿÿçßÎ&& G ãÿÿÿïÕÎ&þ& = øÿÿÿíÕÎ&& G ÿÿÿëÐÎ&& G "ÿÿÿíÐÎ&& G 7ÿÿÿíÐÎ&& G LÿÿÿìéÎ&& G aÿÿÿíÔÎ&& G vÿÿÿíÕÎ&& G ‹ÿÿÿçÛÎ&& G  ÿÿÿïÐÎ&þ& = µÿÿÿîÐÎ&þ& = ÊÿÿÿèìÎ&& G ßÿÿÿèàÎ&þ& Q ôÿÿÿééÎ&þ& = ÿÿÿçÔÎ&þ& Q ÿÿÿçÞÎ&þ& = 3ÿÿÿçÞÎ&& G HÿÿÿëÐÎ&þ& = ]ÿÿÿìÕÎ&& G rÿÿÿíØÎ&þ& = ‡ÿÿÿçÜÎ&& G œÿÿ ê¿&í WÿÿÿëêÉ&ÿ& m {ÿÿÿëêÉ&ÿ& m ÿÿÿêêÉ&ÿ& m ¥ÿÿÿðêÉ&ö& c ºÿÿÿéêÉ&ÿ& m ÏÿÿÿçêÌ&& w äÿÿÿïêÉ&ÿ& m ùÿÿÿíêÌ&& w ÿÿÿëêÌ&& w #ÿÿÿíêÌ&& w 8ÿÿÿðêÌ&& w MÿÿÿìêÌ&& w bÿÿÿíêÌ&& w wÿÿÿíêÌ&& w ŒÿÿÿçêÌ&& w ¡ÿÿÿïêÉ&ÿ& m ¶ÿÿÿîêÉ&ÿ& m ËÿÿÿèìÌ&& w àÿÿÿèêÉ&ÿ& € õÿÿÿéêÉ&ÿ& m ÿÿÿçêÉ& &ÿ €ÿÿÿçêÉ&ÿ& m 4ÿÿÿçêÌ&& w IÿÿÿëêÉ&ÿ& m ^ÿÿÿìêÌ&& w sÿÿÿíêÉ&ÿ& m ˆÿÿÿçêÌ&& w ÿÿÿëöÎ&ï ŠÿÿÿëöÎ&& ž ƒÿÿÿëöÎ&& ž ˜ÿÿÿêöÎ&& ž ­ÿÿÿíöÎ&ø& ” ÂÿÿÿéöÎ&& ž ×ÿÿÿçöÎ& & ¨ ìÿÿÿíöÎ&& ž ÿÿÿíöÎ& & ¨ ÿÿÿëöÎ& & ¨ +ÿÿÿíöÎ& & ¨ @ÿÿÿìöÎ& & ¨ UÿÿÿìöÎ& & ¨ jÿÿÿîöÎ& & ¨ ÿÿÿíöÎ& & ¨ ”ÿÿÿèöÎ& & ¨ ©ÿÿÿïöÎ&& ž ¾ÿÿÿîöÎ&& ž ÓÿÿÿêöÎ& & ¨ èÿÿÿêöÎ&& ² ýÿÿÿìöÎ&& ž ÿÿÿêöÎ&& ² 'ÿÿÿëöÎ&& ž <ÿÿÿëöÎ& & ¨ QÿÿÿëöÎ&& ž fÿÿÿíöÎ& & ¨ {ÿÿÿðöÎ&& ž ÿÿÿçöÎ& & ¨ ¥ÿÿÿëÐÎ&ñ ¼ÿÿÿëÐÎ&& Ð ƒÿÿÿëÐÎ&& Ð ˜ÿÿÿêëÎ&& Ð ­ÿÿÿíÕÎ&ú& Æ ÂÿÿÿéãÎ&& Ð ×ÿÿÿçßÎ& & Ú ìÿÿÿíÕÎ&& Ð ÿÿÿíÕÎ& & Ú ÿÿÿëÐÎ& & Ú +ÿÿÿíÐÎ& & Ú @ÿÿÿìÐÎ& & Ú UÿÿÿìéÎ& & Ú jÿÿÿîÔÎ& & Ú ÿÿÿíÕÎ& & Ú ”ÿÿÿèÛÎ& & Ú ©ÿÿÿïÐÎ&& Ð ¾ÿÿÿîÐÎ&& Ð ÓÿÿÿêéÎ& & Ú èÿÿÿêãÎ&& ä ýÿÿÿìéÎ&& Ð ÿÿÿêÔÎ&& ä 'ÿÿÿëâÎ&& Ð <ÿÿÿëáÎ& & Ú QÿÿÿëÐÎ&& Ð fÿÿÿíÕÎ& & Ú {ÿÿÿðØÎ&& Ð ÿÿÿçÜÎ& & Ú ¥ÿÿÿëÐÎ&ï íÿÿÿëÐÎ&&  ƒÿÿÿëÐÎ&&  ˜ÿÿÿêëÎ&&  ­ÿÿÿíÕÎ&ø& ÷ ÂÿÿÿéãÎ&&  ×ÿÿÿçßÎ& &  ìÿÿÿíÕÎ&&  ÿÿÿíÕÎ& &  ÿÿÿëÐÎ& &  +ÿÿÿíÐÎ& &  @ÿÿÿìÐÎ& &  UÿÿÿìéÎ& &  jÿÿÿîÔÎ& &  ÿÿÿíÕÎ& &  ”ÿÿÿèÛÎ& &  ©ÿÿÿïÐÎ&&  ¾ÿÿÿîÐÎ&&  ÓÿÿÿêéÎ& &  èÿÿÿêãÎ&&  ýÿÿÿìéÎ&&  ÿÿÿêÔÎ&&  'ÿÿÿëâÎ&&  <ÿÿÿëáÎ& &  QÿÿÿëÐÎ&&  fÿÿÿíÕÎ& &  {ÿÿÿðØÎ&&  ÿÿÿçÜÎ& &  ¥ÿÿ ë¿&í ÿÿÿëëÉ&ÿ& 3 {ÿÿÿëëÉ&ÿ& 3 ÿÿÿêëÉ&ÿ& 3 ¥ÿÿÿðëÉ&ö& ) ºÿÿÿéëÉ&ÿ& 3 ÏÿÿÿçëÌ&& = äÿÿÿïëÉ&ÿ& 3 ùÿÿÿíëÌ&& = ÿÿÿëëÌ&& = #ÿÿÿíëÌ&& = 8ÿÿÿðëÌ&& = MÿÿÿìëÌ&& = bÿÿÿíëÌ&& = wÿÿÿíëÌ&& = ŒÿÿÿçëÌ&& = ¡ÿÿÿïëÉ&ÿ& 3 ¶ÿÿÿîëÉ&ÿ& 3 ËÿÿÿèìÌ&& = àÿÿÿèëÉ&ÿ& G õÿÿÿéëÉ&ÿ& 3 ÿÿÿçëÉ&ÿ& G ÿÿÿçëÉ&ÿ& 3 4ÿÿÿçëÌ&& = IÿÿÿëëÉ&ÿ& 3 ^ÿÿÿìëÌ&& = sÿÿÿíëÉ&ÿ& 3 ˆÿÿÿçëÌ&& = ÿÿÿëëÉ&î MÿÿÿëëÌ&& Y {ÿÿÿëëÌ&& Y ÿÿÿêëÌ&& Y ¥ÿÿÿðëÌ&÷& R ºÿÿÿéëÌ&& Y ÏÿÿÿçëÌ& & n äÿÿÿïëÌ&& Y ùÿÿÿíëÌ& & n ÿÿÿëëÌ& & n #ÿÿÿíëÌ& & n 8ÿÿÿðëÌ& & n MÿÿÿìëÌ& & n bÿÿÿíëÌ& & n wÿÿÿíëÌ& & n ŒÿÿÿçëÌ& & n ¡ÿÿÿïëÌ&& Y ¶ÿÿÿîëÌ&& Y ËÿÿÿèìÌ& & n àÿÿÿèëÌ&& g õÿÿÿéëÌ&& Y ÿÿÿçëÌ&& Y ÿÿÿçëÌ&& Y 4ÿÿÿçëÌ& & ` IÿÿÿëëÌ&& Y ^ÿÿÿìëÌ& & n sÿÿÿíëÌ&& Y ˆÿÿÿçëÌ& & ` ÿÿÿëÐÎ&ð uÿÿÿëÐÎ&& ƒ …ÿÿÿëÐÎ&& ƒ šÿÿÿêëÎ&& ƒ ¯ÿÿÿíÕÎ&ù& | ÄÿÿÿéãÎ&& ƒ ÙÿÿÿçßÎ& & ˜ îÿÿÿìÕÎ&& ƒ ÿÿÿíÕÎ& & ˜ ÿÿÿëÐÎ& & ˜ -ÿÿÿíÐÎ& & ˜ BÿÿÿìÐÎ& & ˜ WÿÿÿìéÎ& & ˜ lÿÿÿîÔÎ& & ˜ ÿÿÿîÕÎ& & ˜ –ÿÿÿçÛÎ& & ˜ «ÿÿÿïÐÎ&& ƒ ÀÿÿÿîÐÎ&& ƒ ÕÿÿÿêéÎ& & ˜ êÿÿÿêäÎ&& ‘ ÿÿÿÿìéÎ&& ƒ ÿÿÿêÔÎ&& ‘ )ÿÿÿêÞÎ&& ƒ >ÿÿÿëÞÎ& & Š SÿÿÿëÐÎ&& ƒ hÿÿÿíÕÎ& & ˜ }ÿÿÿðØÎ&& ƒ ’ÿÿÿçÜÎ& & Š §ÿÿÿëÐÎ&ò ŸÿÿÿëÐÎ&& ­ …ÿÿÿëÐÎ&& ­ šÿÿÿêëÎ&& ­ ¯ÿÿÿíÕÎ&û& ¦ ÄÿÿÿéãÎ&& ­ ÙÿÿÿçßÎ& &  îÿÿÿìÕÎ&& ­ ÿÿÿíÕÎ& &  ÿÿÿëÐÎ& &  -ÿÿÿíÐÎ& &  BÿÿÿìÐÎ& &  WÿÿÿìéÎ& &  lÿÿÿîÔÎ& &  ÿÿÿîÕÎ& &  –ÿÿÿçÛÎ& &  «ÿÿÿïÐÎ&& ­ ÀÿÿÿîÐÎ&& ­ ÕÿÿÿêéÎ& &  êÿÿÿêäÎ&& » ÿÿÿÿìéÎ&& ­ ÿÿÿêÔÎ&& » )ÿÿÿêÞÎ&& ­ >ÿÿÿëÞÎ& & ´ SÿÿÿëÐÎ&& ­ hÿÿÿíÕÎ& &  }ÿÿÿðØÎ&& ­ ’ÿÿÿçÜÎ& & ´ §ÿÿÿëÑÎ&ð ÉÿÿÿëÐÎ&& × „ÿÿÿëÐÎ&& × ™ÿÿÿêëÎ&& × ®ÿÿÿíÕÎ&ù& Ð ÃÿÿÿéãÎ&& × ØÿÿÿçßÎ& & ì íÿÿÿìÕÎ&& × ÿÿÿíÕÎ& & ì ÿÿÿëÐÎ& & ì ,ÿÿÿíÐÎ& & ì AÿÿÿìÐÎ& & ì VÿÿÿìéÎ& & ì kÿÿÿîÔÎ& & ì €ÿÿÿîÕÎ& & ì •ÿÿÿèÛÎ& & ì ªÿÿÿïÐÎ&& × ¿ÿÿÿîÐÎ&& × ÔÿÿÿêéÎ& & ì éÿÿÿêãÎ&& å þÿÿÿìéÎ&& × ÿÿÿêÔÎ&& å (ÿÿÿêÞÎ&& × =ÿÿÿëÞÎ& & Þ RÿÿÿëÐÎ&& × gÿÿÿíÕÎ& & ì |ÿÿÿðØÎ&& × ‘ÿÿÿç×Î& & Þ ¦ÿÿÿíëÉ&î óÿÿÿëëÌ&&  {ÿÿÿëëÌ&&  ÿÿÿêëÌ&&  ¥ÿÿÿðëÌ&÷& ú ºÿÿÿéëÌ&&  ÏÿÿÿçëÌ& &  äÿÿÿïëÌ&&  ùÿÿÿíëÌ& &  ÿÿÿëëÌ& &  #ÿÿÿíëÌ& &  8ÿÿÿðëÌ& &  MÿÿÿìëÌ& &  bÿÿÿíëÌ& &  wÿÿÿíëÌ& &  ŒÿÿÿçëÌ& &  ¡ÿÿÿïëÌ&&  ¶ÿÿÿîëÌ&&  ËÿÿÿèìÌ& &  àÿÿÿèëÌ&&  õÿÿÿéëÌ&&  ÿÿÿçëÌ&&  ÿÿÿçëÌ&&  4ÿÿÿçëÌ& &  IÿÿÿëëÌ&&  ^ÿÿÿìëÌ& &  sÿÿÿíëÌ&&  ˆÿÿÿçëÌ& &  ÿÿ ë¿&í ÿÿÿëëÉ&ÿ& * {ÿÿÿëëÉ&ÿ& * ÿÿÿêëÉ&ÿ& * ¥ÿÿÿðëÉ& º& #öÿÿÿéëÉ&ÿ& * ÏÿÿÿçëÌ&& ? äÿÿÿïëÉ&ÿ& * ùÿÿÿíëÌ&& ? ÿÿÿëëÌ&& ? #ÿÿÿíëÌ&& ? 8ÿÿÿðëÌ&& ? MÿÿÿìëÌ&& ? bÿÿÿíëÌ&& ? wÿÿÿíëÌ&& ? ŒÿÿÿçëÌ&& ? ¡ÿÿÿïëÉ&ÿ& * ¶ÿÿÿîëÉ&ÿ& * ËÿÿÿèìÌ&& ? àÿÿÿèëÉ&ÿ& 8 õÿÿÿéëÉ&ÿ& * ÿÿÿçëÉ&ÿ& 8 ÿÿÿçëÉ&ÿ& * 4ÿÿÿçëÌ&& 1 IÿÿÿëëÉ&ÿ& * ^ÿÿÿìëÌ&& ? sÿÿÿíëÉ&ÿ& * ˆÿÿÿçëÌ&& 1 ÿÿÿëÐÎ&ï EÿÿÿëÐÎ&& S ƒÿÿÿëÐÎ&& S ˜ÿÿÿêëÎ&& S ­ÿÿÿíÕÎ&ø& L ÂÿÿÿéãÎ&& S ×ÿÿÿçßÎ& & h ìÿÿÿíÕÎ&& S ÿÿÿíÕÎ& & h ÿÿÿëÐÎ& & h +ÿÿÿíÐÎ& & h @ÿÿÿìÐÎ& & h UÿÿÿìéÎ& & h jÿÿÿîÔÎ& & h ÿÿÿíÕÎ& & h ”ÿÿÿèÛÎ& & h ©ÿÿÿïÐÎ&& S ¾ÿÿÿîÐÎ&& S ÓÿÿÿêéÎ& & h èÿÿÿêãÎ&& a ýÿÿÿìéÎ&& S ÿÿÿêÔÎ&& a 'ÿÿÿëâÎ&& S <ÿÿÿëáÎ& & Z QÿÿÿëÐÎ&& S fÿÿÿíÕÎ& & h {ÿÿÿðØÎ&& S ÿÿÿçÜÎ& & Z ¥ÿÿÿëÐÎ&ê iÿÿÿëÐÎ&ü& o yÿÿÿëÐÎ&ü& o ŽÿÿÿèìÎ&ü& o £ÿÿÿðÕÎ&ó& l ¸ÿÿÿéãÎ&ü& o ÍÿÿÿçßÎ&& u âÿÿÿïÕÎ&ü& o ÷ÿÿÿíÕÎ&& u ÿÿÿëÐÎ&& u !ÿÿÿíÐÎ&& u 6ÿÿÿíÐÎ&& u KÿÿÿìéÎ&& u `ÿÿÿíÔÎ&& u uÿÿÿíÕÎ&& u ŠÿÿÿçÛÎ&& u ŸÿÿÿïÐÎ&ü& o ´ÿÿÿîÐÎ&ü& o ÉÿÿÿèìÎ&& u ÞÿÿÿèãÎ&ü& r óÿÿÿééÎ&ü& o ÿÿÿçÔÎ&ü& r ÿÿÿçÞÎ&ü& o 2ÿÿÿçÞÎ&& o GÿÿÿëÐÎ&ü& o \ÿÿÿìÕÎ&& u qÿÿÿíØÎ&ü& o †ÿÿÿçÖÎ&& o ›ÿÿÿëöÎ&UÿÿÿëõÎ& &[ xÿÿÿëõÎ& &[ ÿÿÿèõÎ& &[ ¢ÿÿÿðöÎ&&X ·ÿÿÿêõÎ& &[ ÌÿÿÿçõÎ&)&a áÿÿÿïõÎ& &[ öÿÿÿíõÎ&)&a ÿÿÿëõÎ&)&a ÿÿÿíõÎ&)&a 5ÿÿÿíõÎ&)&a JÿÿÿìõÎ&)&a _ÿÿÿíõÎ&)&a tÿÿÿíõÎ&)&a ‰ÿÿÿçõÎ&)&a žÿÿÿïõÎ& &[ ³ÿÿÿîõÎ& &[ ÈÿÿÿèõÎ&)&a ÝÿÿÿèöÎ& &^ òÿÿÿéõÎ& &[ ÿÿÿçöÎ& &^ ÿÿÿçõÎ& &[ 1ÿÿÿçõÎ&)&[ FÿÿÿëõÎ& &[ [ÿÿÿìõÎ&)&a pÿÿÿíõÎ& &[ …ÿÿÿçõÎ&)&[ šÿÿ ÿëÐÎ&dÿÿ ÿëÐÎ&"&j zÿÿ ÿëÐÎ&"&j ÿÿ ÿèìÎ&"&j ¤ÿÿ ÿðÕÎ&&g ¹ÿÿ ÿéãÎ&"&j Îÿÿ ÿçßÎ&+&p ãÿÿ ÿïÕÎ&"&j øÿÿ ÿíÕÎ&+&p ÿÿ ÿëÐÎ&+&p "ÿÿ ÿíÐÎ&+&p 7ÿÿ ÿíÐÎ&+&p Lÿÿ ÿìéÎ&+&p aÿÿ ÿíÔÎ&+&p vÿÿ ÿíÕÎ&+&p ‹ÿÿ ÿçÛÎ&+&p  ÿÿ ÿïÐÎ&"&j µÿÿ ÿîÐÎ&"&j Êÿÿ ÿèìÎ&+&p ßÿÿ ÿèàÎ&"&m ôÿÿ ÿééÎ&"&j ÿÿ ÿçÔÎ&"&m ÿÿ ÿçÞÎ&"&j 3ÿÿ ÿçÞÎ&+&j Hÿÿ ÿëÐÎ&"&j ]ÿÿ ÿìÕÎ&+&p rÿÿ ÿíØÎ&"&j ‡ÿÿ ÿçÜÎ&+&j œÿÿÿëöÎ&sÿÿÿëöÎ& &y xÿÿÿëöÎ& &y ÿÿÿèöÎ& &y ¢ÿÿÿðöÎ&&v ·ÿÿÿêöÎ& &y ÌÿÿÿçöÎ&)& áÿÿÿïöÎ& &y öÿÿÿíöÎ&)& ÿÿÿëöÎ&)& ÿÿÿíöÎ&)& 5ÿÿÿíöÎ&)& JÿÿÿìöÎ&)& _ÿÿÿíöÎ&)& tÿÿÿíöÎ&)& ‰ÿÿÿçöÎ&)& žÿÿÿïöÎ& &y ³ÿÿÿîöÎ& &y ÈÿÿÿèöÎ&)& ÝÿÿÿèöÎ& &| òÿÿÿéöÎ& &y ÿÿÿçöÎ& &| ÿÿÿçöÎ& &y 1ÿÿÿçöÎ&)&y FÿÿÿëöÎ& &y [ÿÿÿìöÎ&)& pÿÿÿíöÎ& &y …ÿÿÿçöÎ&)&y šÿÿ ÿëÐÎ&‚ÿÿ ÿëÐÎ&"&ˆ zÿÿ ÿëÐÎ&"&ˆ ÿÿ ÿèìÎ&"&ˆ ¤ÿÿ ÿðÕÎ&&… ¹ÿÿ ÿéãÎ&"&ˆ Îÿÿ ÿçßÎ&+&Ž ãÿÿ ÿïÕÎ&"&ˆ øÿÿ ÿíÕÎ&+&Ž ÿÿ ÿëÐÎ&+&Ž "ÿÿ ÿíÐÎ&+&Ž 7ÿÿ ÿíÐÎ&+&Ž Lÿÿ ÿìéÎ&+&Ž aÿÿ ÿíÔÎ&+&Ž vÿÿ ÿíÕÎ&+&Ž ‹ÿÿ ÿçÛÎ&+&Ž  ÿÿ ÿïÐÎ&"&ˆ µÿÿ ÿîÐÎ&"&ˆ Êÿÿ ÿèìÎ&+&Ž ßÿÿ ÿèàÎ&"&‹ ôÿÿ ÿééÎ&"&ˆ ÿÿ ÿçÔÎ&"&‹ ÿÿ ÿçÞÎ&"&ˆ 3ÿÿ ÿçÞÎ&+&ˆ Hÿÿ ÿëÐÎ&"&ˆ ]ÿÿ ÿìÕÎ&+&Ž rÿÿ ÿíØÎ&"&ˆ ‡ÿÿ ÿçÜÎ&+&ˆ œÿÿ ÿëÐÎ&–ÿÿ ÿëÐÎ&!&© yÿÿ ÿëÐÎ&!&© Žÿÿ ÿèìÎ&!&© £ÿÿ ÿðÕÎ&&Ÿ ¸ÿÿ ÿéãÎ&!&© Íÿÿ ÿçßÎ&*&³ âÿÿ ÿïÕÎ&!&© ÷ÿÿ ÿíÕÎ&*&³ ÿÿ ÿëÐÎ&*&³ !ÿÿ ÿíÐÎ&*&³ 6ÿÿ ÿíÐÎ&*&³ Kÿÿ ÿìéÎ&*&³ `ÿÿ ÿíÔÎ&*&³ uÿÿ ÿíÕÎ&*&³ Šÿÿ ÿçÛÎ&*&³ Ÿÿÿ ÿïÐÎ&!&© ´ÿÿ ÿîÐÎ&!&© Éÿÿ ÿèìÎ&*&³ Þÿÿ ÿèãÎ&!&½ óÿÿ ÿééÎ&!&© ÿÿ ÿçÔÎ&!&½ ÿÿ ÿçÞÎ&!&© 2ÿÿ ÿçÞÎ&*&³ Gÿÿ ÿëÐÎ&!&© \ÿÿ ÿìÕÎ&*&³ qÿÿ ÿíØÎ&!&© †ÿÿ ÿçÖÎ&*&³ ›ÿÿ ÿëÐÎ&Æÿÿ ÿëÐÎ&"&Ù zÿÿ ÿëÐÎ&"&Ù ÿÿ ÿèìÎ&"&Ù ¤ÿÿ ÿðÕÎ&&Ï ¹ÿÿ ÿéãÎ&"&Ù Îÿÿ ÿçßÎ&+&ã ãÿÿ ÿïÕÎ&"&Ù øÿÿ ÿíÕÎ&+&ã ÿÿ ÿëÐÎ&+&ã "ÿÿ ÿíÐÎ&+&ã 7ÿÿ ÿíÐÎ&+&ã Lÿÿ ÿìéÎ&+&ã aÿÿ ÿíÔÎ&+&ã vÿÿ ÿíÕÎ&+&ã ‹ÿÿ ÿçÛÎ&+&ã  ÿÿ ÿïÐÎ&"&Ù µÿÿ ÿîÐÎ&"&Ù Êÿÿ ÿèìÎ&+&ã ßÿÿ ÿèàÎ&"&í ôÿÿ ÿééÎ&"&Ù ÿÿ ÿçÔÎ&"&í ÿÿ ÿçÞÎ&"&Ù 3ÿÿ ÿçÞÎ&+&ã Hÿÿ ÿëÐÎ&"&Ù ]ÿÿ ÿìÕÎ&+&ã rÿÿ ÿíØÎ&"&Ù ‡ÿÿ ÿçÜÎ&+&ã œÿÿ ÿëÐÎ&÷ÿÿ ÿëÐÎ&!&  yÿÿ ÿëÐÎ&!&  Žÿÿ ÿèìÎ&!&  £ÿÿ ÿðÕÎ&& ¸ ÿÿ ÿéãÎ&!&  Íÿÿ ÿçßÎ&*&  âÿÿ ÿïÕÎ&!&  ÷ÿÿ ÿíÕÎ&*&  ÿÿ ÿëÐÎ&*&  !ÿÿ ÿíÐÎ&*&  6ÿÿ ÿíÐÎ&*&  Kÿÿ ÿìéÎ&*&  `ÿÿ ÿíÔÎ&*&  uÿÿ ÿíÕÎ&*&  Šÿÿ ÿçÛÎ&*&  Ÿÿÿ ÿïÐÎ&!&  ´ÿÿ ÿîÐÎ&!&  Éÿÿ ÿèìÎ&*&  Þÿÿ ÿèãÎ&!&  óÿÿ ÿééÎ&!&  ÿÿ ÿçÔÎ& &! ÿÿ ÿçÞÎ&!&  2ÿÿ ÿçÞÎ&*&  Gÿÿ ÿëÐÎ&!&  \ÿÿ ÿìÕÎ&*&  qÿÿ ÿíØÎ&!&  †ÿÿ ÿçÖÎ&*&  ›ÿÿ ÿëÐÎ& &ÿÿ ÿëÐÎ&"& : zÿÿ ÿëÐÎ&"& : ÿÿ ÿèìÎ&"& : ¤ÿÿ ÿðÕÎ&& 0 ¹ÿÿ ÿéãÎ&"& : Îÿÿ ÿçßÎ&+& D ãÿÿ ÿïÕÎ&"& : øÿÿ ÿíÕÎ&+& D ÿÿ ÿëÐÎ&+& D "ÿÿ ÿíÐÎ&+& D 7ÿÿ ÿíÐÎ&+& D Lÿÿ ÿìéÎ&+& D aÿÿ ÿíÔÎ&+& D vÿÿ ÿíÕÎ&+& D ‹ÿÿ ÿçÛÎ&+& D  ÿÿ ÿïÐÎ&"& : µÿÿ ÿîÐÎ&"& : Êÿÿ ÿèìÎ&+& D ßÿÿ ÿèàÎ&"& N ôÿÿ ÿééÎ&"& : ÿÿ ÿçÔÎ&"& N ÿÿ ÿçÞÎ&"& : 3ÿÿ ÿçÞÎ&+& D Hÿÿ ÿëÐÎ&"& : ]ÿÿ ÿìÕÎ&+& D rÿÿ ÿíØÎ&"& : ‡ÿÿ ÿçÜÎ&+& D œÿÿ ê¾& WÿÿÿëêË&#& h {ÿÿÿëêË&#& h ÿÿÿêêË&#& h ¥ÿÿÿðêË&& ^ ºÿÿÿéêË&#& h ÏÿÿÿçêË&,& r äÿÿÿïêË&#& h ùÿÿÿíêË&,& r ÿÿÿëêË&,& r #ÿÿÿíêË&,& r 8ÿÿÿðêË&,& r MÿÿÿìêË&,& r bÿÿÿíêË&,& r wÿÿÿíêË&,& r ŒÿÿÿçêË&,& r ¡ÿÿÿïêË&#& h ¶ÿÿÿîêË&#& h ËÿÿÿèìË&,& r àÿÿÿèêË&#& { õÿÿÿéêË&#& h ÿÿÿçêË&#& { ÿÿÿçêË&#& h 4ÿÿÿçêË&,& r IÿÿÿëêË&#& h ^ÿÿÿìêË&,& r sÿÿÿíêË&#& h ˆÿÿÿçêË&,& r ÿÿÿëöÎ& …ÿÿÿëöÎ&%& ™ |ÿÿÿëöÎ&%& ™ ‘ÿÿÿêöÎ&%& ™ ¦ÿÿÿðöÎ&&  »ÿÿÿêöÎ&%& ™ ÐÿÿÿçöÎ&.& £ åÿÿÿïöÎ&%& ™ úÿÿÿíöÎ&.& £ ÿÿÿëöÎ&.& £ $ÿÿÿíöÎ&.& £ 9ÿÿÿíöÎ&.& £ NÿÿÿìöÎ&.& £ cÿÿÿîöÎ&.& £ xÿÿÿíöÎ&.& £ ÿÿÿçöÎ&.& £ ¢ÿÿÿïöÎ&%& ™ ·ÿÿÿîöÎ&%& ™ ÌÿÿÿèöÎ&.& £ áÿÿÿèöÎ&%& ­ öÿÿÿéöÎ&%& ™ ÿÿÿçöÎ&%& ­ ÿÿÿçöÎ&%& ™ 5ÿÿÿçöÎ&.& £ JÿÿÿëöÎ&%& ™ _ÿÿÿìöÎ&.& £ tÿÿÿíöÎ&%& ™ ‰ÿÿÿçöÎ&.& £ žÿÿÿëÐÎ& ·ÿÿÿëÐÎ&'& Ë |ÿÿÿëÐÎ&'& Ë ‘ÿÿÿêëÎ&'& Ë ¦ÿÿÿðÕÎ&& Á »ÿÿÿêãÎ&'& Ë ÐÿÿÿçßÎ&0& Õ åÿÿÿïÕÎ&'& Ë úÿÿÿíÕÎ&0& Õ ÿÿÿëÐÎ&0& Õ $ÿÿÿíÐÎ&0& Õ 9ÿÿÿíÐÎ&0& Õ NÿÿÿìéÎ&0& Õ cÿÿÿîÔÎ&0& Õ xÿÿÿíÕÎ&0& Õ ÿÿÿçÛÎ&0& Õ ¢ÿÿÿïÐÎ&'& Ë ·ÿÿÿîÐÎ&'& Ë ÌÿÿÿèéÎ&0& Õ áÿÿÿèãÎ&'& ß öÿÿÿééÎ&'& Ë ÿÿÿçÔÎ&'& ß ÿÿÿçâÎ&'& Ë 5ÿÿÿçâÎ&0& Õ JÿÿÿëÐÎ&'& Ë _ÿÿÿìÕÎ&0& Õ tÿÿÿíØÎ&'& Ë ‰ÿÿÿçÜÎ&0& Õ žÿÿÿëÐÎ& éÿÿÿëÐÎ&%& ü |ÿÿÿëÐÎ&%& ü ‘ÿÿÿêëÎ&%& ü ¦ÿÿÿðÕÎ&& ò »ÿÿÿêãÎ&%& ü ÐÿÿÿçßÎ&.&  åÿÿÿïÕÎ&%& ü úÿÿÿíÕÎ&.&  ÿÿÿëÐÎ&.&  $ÿÿÿíÐÎ&.&  9ÿÿÿíÐÎ&.&  NÿÿÿìéÎ&.&  cÿÿÿîÔÎ&.&  xÿÿÿíÕÎ&.&  ÿÿÿçÛÎ&.&  ¢ÿÿÿïÐÎ&%& ü ·ÿÿÿîÐÎ&%& ü ÌÿÿÿèéÎ&.&  áÿÿÿèãÎ&%&  öÿÿÿééÎ&%& ü ÿÿÿçÔÎ&%&  ÿÿÿçâÎ&%& ü 5ÿÿÿçâÎ&.&  JÿÿÿëÐÎ&%& ü _ÿÿÿìÕÎ&.&  tÿÿÿíØÎ&%& ü ‰ÿÿÿçÜÎ&.&  žÿÿ ë¾& ÿÿÿëëË&#& . {ÿÿÿëëË&#& . ÿÿÿêëË&#& . ¥ÿÿÿðëË&& $ ºÿÿÿéëË&#& . ÏÿÿÿçëË&,& 8 äÿÿÿïëË&#& . ùÿÿÿíëË&,& 8 ÿÿÿëëË&,& 8 #ÿÿÿíëË&,& 8 8ÿÿÿðëË&,& 8 MÿÿÿìëË&,& 8 bÿÿÿíëË&,& 8 wÿÿÿíëË&,& 8 ŒÿÿÿçëË&,& 8 ¡ÿÿÿïëË&#& . ¶ÿÿÿîëË&#& . ËÿÿÿèìË&,& 8 àÿÿÿèëË&#& B õÿÿÿéëË&#& . ÿÿÿçëË&#& B ÿÿÿçëË&#& . 4ÿÿÿçëË&,& 8 IÿÿÿëëË&#& . ^ÿÿÿìëË&,& 8 sÿÿÿíëË&#& . ˆÿÿÿçëË&,& 8 ÿÿÿëëË& KÿÿÿëëË&$& V {ÿÿÿëëË&$& V ÿÿÿêëË&$& V ¥ÿÿÿðëË&& Q ºÿÿÿéëË&$& V ÏÿÿÿçëË&-& k äÿÿÿïëË&$& V ùÿÿÿíëË&-& k ÿÿÿëëË&-& k #ÿÿÿíëË&-& k 8ÿÿÿðëË&-& k MÿÿÿìëË&-& k bÿÿÿíëË&-& k wÿÿÿíëË&-& k ŒÿÿÿçëË&-& k ¡ÿÿÿïëË&-& ¶ VÿÿÿîëË&$& V ËÿÿÿèìË&-& k àÿÿÿèëË&$& d õÿÿÿéëË&$& V ÿÿÿçëË&$& V ÿÿÿçëË&$& V 4ÿÿÿçëË&-& ] IÿÿÿëëË&$& V ^ÿÿÿìëË&-& k sÿÿÿíëË&$& V ˆÿÿÿçëË&-& ] ÿÿÿëÐÎ& rÿÿÿëÐÎ&&& € ~ÿÿÿëÐÎ&&& € “ÿÿÿêëÎ&&& € ¨ÿÿÿðÕÎ&& y ½ÿÿÿéãÎ&&& € ÒÿÿÿçßÎ&/& • çÿÿÿïÕÎ&&& € üÿÿÿíÕÎ&/& • ÿÿÿëÐÎ&/& • &ÿÿÿíÐÎ&/& • ;ÿÿÿíÐÎ&/& • PÿÿÿëéÎ&/& • eÿÿÿîÔÎ&/& • zÿÿÿíÖÎ&/& • ÿÿÿçÛÎ&/& • ¤ÿÿÿïÐÎ&&& € ¹ÿÿÿîÐÎ&&& € ÎÿÿÿêéÎ&/& • ãÿÿÿèãÎ&&& Ž øÿÿÿçéÎ&&& € ÿÿÿçÔÎ&&& Ž "ÿÿÿçÞÎ&&& € 7ÿÿÿíÞÎ&/& ‡ LÿÿÿëÐÎ&&& € aÿÿÿìÕÎ&/& • vÿÿÿíØÎ&&& € ‹ÿÿÿçÜÎ&/& ‡  ÿÿÿëÐÎ& œÿÿÿëÐÎ&(& ª ~ÿÿÿëÐÎ&(& ª “ÿÿÿêëÎ&(& ª ¨ÿÿÿðÕÎ&& £ ½ÿÿÿéãÎ&(& ª ÒÿÿÿçßÎ&1& ¿ çÿÿÿïÕÎ&(& ª üÿÿÿíÕÎ&1& ¿ ÿÿÿëÐÎ&1& ¿ &ÿÿÿíÐÎ&1& ¿ ;ÿÿÿíÐÎ&1& ¿ PÿÿÿëéÎ&1& ¿ eÿÿÿîÔÎ&1& ¿ zÿÿÿíÖÎ&1& ¿ ÿÿÿçÛÎ&1& ¿ ¤ÿÿÿïÐÎ&(& ª ¹ÿÿÿîÐÎ&(& ª ÎÿÿÿêéÎ&1& ¿ ãÿÿÿèãÎ&(& ¸ øÿÿÿçéÎ&(& ª ÿÿÿçÔÎ&(& ¸ "ÿÿÿçÞÎ&(& ª 7ÿÿÿíÞÎ&1& ± LÿÿÿëÐÎ&(& ª aÿÿÿìÕÎ&1& ¿ vÿÿÿíØÎ&(& ª ‹ÿÿÿçÜÎ&1& ±  ÿÿÿëÐÎ& ÆÿÿÿëÐÎ&&& Ô }ÿÿÿëÐÎ&&& Ô ’ÿÿÿêëÎ&&& Ô §ÿÿÿðÕÎ&& Í ¼ÿÿÿéãÎ&&& Ô ÑÿÿÿçßÎ&/& é æÿÿÿïÕÎ&&& Ô ûÿÿÿíÕÎ&/& é ÿÿÿëÐÎ&/& é %ÿÿÿíÐÎ&/& é :ÿÿÿíÐÎ&/& é OÿÿÿëèÎ&/& é dÿÿÿîÔÎ&/& é yÿÿÿíÖÎ&/& é ŽÿÿÿçÛÎ&/& é £ÿÿÿïÐÎ&&& Ô ¸ÿÿÿîÐÎ&&& Ô ÍÿÿÿêéÎ&/& é âÿÿÿèãÎ&&& â ÷ÿÿÿçéÎ&&& Ô ÿÿÿçÔÎ&&& â !ÿÿÿçÞÎ&&& Ô 6ÿÿÿçÞÎ&/& Û KÿÿÿëÐÎ&&& Ô `ÿÿÿìÕÎ&/& é uÿÿÿíØÎ&&& Ô ŠÿÿÿçÖÎ&/& Û ŸÿÿÿíëË& ðÿÿÿëëË&$& þ {ÿÿÿëëË&$& þ ÿÿÿêëË&$& þ ¥ÿÿÿðëË&& ÷ ºÿÿÿéëË&$& þ ÏÿÿÿçëË&-&  äÿÿÿïëË&$& þ ùÿÿÿíëË&-&  ÿÿÿëëË&-&  #ÿÿÿíëË&-&  8ÿÿÿðëË&-&  MÿÿÿìëË&-&  bÿÿÿíëË&-&  wÿÿÿíëË&-&  ŒÿÿÿçëË&-&  ¡ÿÿÿïëË&$& þ ¶ÿÿÿîëË&$& þ ËÿÿÿèìË&-&  àÿÿÿèëË&$&  õÿÿÿéëË&$& þ ÿÿÿçëË&$&  ÿÿÿçëË&$& þ 4ÿÿÿçëË&-&  IÿÿÿëëË&$& þ ^ÿÿÿìëË&-&  sÿÿÿíëË&$& þ ˆÿÿÿçëË&-&  ÿÿ ë¾& ÿÿÿëëË&#& ' {ÿÿÿëëË&#& ' ÿÿÿêëË&#& ' ¥ÿÿÿðëË&&  ºÿÿÿéëË&#& ' ÏÿÿÿçëË&,& < äÿÿÿïëË&#& ' ùÿÿÿíëË&,& < ÿÿÿëëË&,& < #ÿÿÿíëË&,& < 8ÿÿÿðëË&,& < MÿÿÿìëË&,& < bÿÿÿíëË&,& < wÿÿÿíëË&,& < ŒÿÿÿçëË&,& < ¡ÿÿÿïëË&#& ' ¶ÿÿÿîëË&#& ' ËÿÿÿèìË&,& < àÿÿÿèëË&#& 5 õÿÿÿéëË&#& ' ÿÿÿçëË&#& 5 ÿÿÿçëË&#& ' 4ÿÿÿçëË&,& . IÿÿÿëëË&#& ' ^ÿÿÿìëË&,& < sÿÿÿíëË&#& ' ˆÿÿÿçëË&,& . ÿÿÿëÐÎ& CÿÿÿëÐÎ&%& P |ÿÿÿëÐÎ&%& P ‘ÿÿÿêëÎ&%& P ¦ÿÿÿðÕÎ&& I »ÿÿÿêãÎ&%& P ÐÿÿÿçßÎ&.& e åÿÿÿïÕÎ&%& P úÿÿÿíÕÎ&.& e ÿÿÿëÐÎ&.& e $ÿÿÿíÐÎ&.& e 9ÿÿÿíÐÎ&.& e NÿÿÿìéÎ&.& e cÿÿÿîÔÎ&.& e xÿÿÿíÕÎ&.& e ÿÿÿçÛÎ&.& e ¢ÿÿÿïÐÎ&%& P ·ÿÿÿîÐÎ&%& P ÌÿÿÿèéÎ&.& e áÿÿÿèãÎ&%& ^ öÿÿÿééÎ&%& P ÿÿÿçÔÎ&%& ^ ÿÿÿçâÎ&%& P 5ÿÿÿçâÎ&.& W JÿÿÿëÐÎ&%& P _ÿÿÿìÕÎ&.& e tÿÿÿíØÎ&%& P ‰ÿÿÿçÜÎ&.& W žÿÿ ÿëÐÎ& iÿÿÿëÐÎ& & o yÿÿÿëÐÎ& & o ŽÿÿÿèìÎ& & o £ÿÿÿðÕÎ&& l ¸ÿÿÿéãÎ& & o ÍÿÿÿçßÎ&)& u âÿÿÿïÕÎ& & o ÷ÿÿÿíÕÎ&)&  uÿÿÿëÐÎ&)& u !ÿÿÿíÐÎ&)& u 6ÿÿÿíÐÎ&)& u KÿÿÿìéÎ&)& u `ÿÿÿíÔÎ&)& u uÿÿÿíÕÎ&)& u ŠÿÿÿçÛÎ&)& u ŸÿÿÿïÐÎ& & o ´ÿÿÿîÐÎ& & o ÉÿÿÿèìÎ&)& u ÞÿÿÿèãÎ& & r óÿÿÿééÎ& & o ÿÿÿçÔÎ& & r ÿÿÿçÞÎ& & o 2ÿÿÿçÞÎ&)& o GÿÿÿëÐÎ& & o \ÿÿÿìÕÎ&)& u qÿÿÿíØÎ& & o †ÿÿÿçÖÎ&)& o ›ÿÿÿëöÎ&U2ÿÿÿëõÎ&C&[ xÿÿÿëõÎ&C&[ ‘ÿÿÿêõÎ&C&[ ¦ÿÿÿðöÎ&;& »XÿÿÿêõÎ&C&[ ÐÿÿÿçõÎ&L&a åÿÿÿïõÎ&C&[ úÿÿÿíõÎ&a&L ÿÿÿëõÎ&L&a $ÿÿÿíõÎ&L&a 9ÿÿÿíõÎ&L&a NÿÿÿìõÎ&L&a cÿÿÿîõÎ&L&a xÿÿÿíõÎ&L&a ÿÿÿçõÎ&L&a ¢ÿÿÿïõÎ&\&C ·ÿÿÿîõÎ&C&\ ÈÿÿÿèõÎ&L&a áÿÿÿèöÎ&C&^ öÿÿÿéõÎ&C&[ ÿÿÿçöÎ&C&^ *ÿÿÿçõÎ&C&[ 5ÿÿÿçõÎ&L&[ JÿÿÿëõÎ&C&[ _ÿÿÿìõÎ&L&a tÿÿÿíõÎ&C&[ ‰ÿÿÿçõÎ&L&[ žÿÿÿëÐÎ&4dÿÿÿëÐÎ&j&E zÿÿÿëÐÎ&E&j “ÿÿÿêëÎ&E&j ¨ÿÿÿðÕÎ&g& ¹<ÿÿÿéãÎ&E&j ÒÿÿÿçßÎ&N&p çÿÿÿïÕÎ&E&j üÿÿÿíÕÎ&N&p ÿÿÿëÐÎ&N&p &ÿÿÿíÐÎ&N&p ;ÿÿÿíÐÎ&N&p PÿÿÿëéÎ&N&p eÿÿÿîÔÎ&N&p zÿÿÿíÖÎ&N&p ÿÿÿçÛÎ&N&p ¤ÿÿÿïÐÎ&E&j ¹ÿÿÿîÐÎ&E&j ÎÿÿÿêéÎ&N&p ãÿÿÿèãÎ&E&m øÿÿÿçéÎ&p&E ÿÿÿçÔÎ& "&EmÿÿÿçÞÎ&E&j 7ÿÿÿíÞÎ&N&j LÿÿÿëÐÎ&E&j aÿÿÿìÕÎ&N&p vÿÿÿíØÎ&E&j ‹ÿÿÿçÜÎ&N&j  ÿÿÿëöÎ&2sÿÿÿëöÎ&C&y |ÿÿÿëöÎ&C&y ‘ÿÿÿêöÎ&C&y ¦ÿÿÿðöÎ&;&v »ÿÿÿêöÎ&C&y ÐÿÿÿçöÎ&L& åÿÿÿïöÎ&C&y úÿÿÿíöÎ&L& ÿÿÿëöÎ&L& $ÿÿÿíöÎ&L& 9ÿÿÿíöÎ&L& NÿÿÿìöÎ&L& cÿÿÿîöÎ&L& xÿÿÿíöÎ&L& ÿÿÿçöÎ&L& ¢ÿÿÿïöÎ&C&y ·ÿÿÿîöÎ&C&y ÌÿÿÿèöÎ&L& áÿÿÿèöÎ&C&| öÿÿÿéöÎ&C&y ÿÿÿçöÎ&C& !|ÿÿÿçöÎ&C&y 5ÿÿÿçöÎ&L&y JÿÿÿëöÎ&C&y _ÿÿÿìöÎ&L& tÿÿÿíöÎ&C&y ‰ÿÿÿçöÎ&L&y žÿÿÿëÐÎ&4‚ÿÿÿëÐÎ&E&ˆ ~ÿÿÿëÐÎ&E&ˆ “ÿÿÿêëÎ&E&ˆ ¨ÿÿÿðÕÎ&<&… ½ÿÿÿéãÎ&E&ˆ ÒÿÿÿçßÎ&N&Ž çÿÿÿïÕÎ&E&ˆ üÿÿÿíÕÎ&N&Ž ÿÿÿëÐÎ&N&Ž &ÿÿÿíÐÎ&N&Ž ;ÿÿÿíÐÎ&N&Ž PÿÿÿëéÎ&N&Ž eÿÿÿîÔÎ&N&Ž zÿÿÿíÖÎ&N&Ž ÿÿÿçÛÎ&N&Ž ¤ÿÿÿïÐÎ&E&ˆ ¹ÿÿÿîÐÎ&E&ˆ ÎÿÿÿêéÎ&N&Ž ãÿÿÿèãÎ&E&‹ øÿÿÿçéÎ&E&ˆ ÿÿÿçÔÎ&E&‹ "ÿÿÿçÞÎ&E&ˆ 7ÿÿÿíÞÎ&N&ˆ LÿÿÿëÐÎ&E&ˆ aÿÿÿìÕÎ&N&Ž vÿÿÿíØÎ&E&ˆ ‹ÿÿÿçÜÎ&N&ˆ  ÿÿÿëÐÎ&3—ÿÿÿëÐÎ&D&ª }ÿÿÿëÐÎ&D&ª ’ÿÿÿêëÎ&D&ª §ÿÿÿðÕÎ&;&£ ¸ÿÿÿéãÎ&D&ª ÑÿÿÿçßÎ&M&´ æÿÿÿïÕÎ&D&ª ûÿÿÿíÕÎ&M&´ ÿÿÿëÐÎ&M&´ %ÿÿÿíÐÎ&M&´ :ÿÿÿíÐÎ&M&´ OÿÿÿëèÎ&M&´ dÿÿÿîÔÎ&M&´ yÿÿÿíÖÎ&M&´ ŽÿÿÿçÛÎ&M&´ £ÿÿÿïÐÎ&M&ª ´ÿÿÿîÐÎ&D&ª ÍÿÿÿêéÎ&M&´ âÿÿÿèãÎ& ö&¾DÿÿÿçéÎ&D&ª ÿÿÿçÔÎ&D&¾ !ÿÿÿçÞÎ&D&ª 6ÿÿÿçÞÎ&M&´ KÿÿÿëÐÎ&D&ª `ÿÿÿìÕÎ&M&´ uÿÿÿíØÎ&D&ª ŠÿÿÿçÖÎ&M&´ ŸÿÿÿëÐÎ&4ÇÿÿÿëÐÎ&E&Ú ~ÿÿÿëÐÎ&E&Ú “ÿÿÿêëÎ&E&Ú ¨ÿÿÿðÕÎ&<&Ð ½ÿÿÿéãÎ&E&Ú ÒÿÿÿçßÎ&N&ä çÿÿÿïÕÎ&E&Ú üÿÿÿíÕÎ&N&ä ÿÿÿëÐÎ&N&ä &ÿÿÿíÐÎ&N&ä ;ÿÿÿíÐÎ&N&ä PÿÿÿëéÎ&N&ä eÿÿÿîÔÎ&N&ä zÿÿÿíÖÎ&N&ä ÿÿÿçÛÎ&N&ä ¤ÿÿÿïÐÎ&E&Ú ¹ÿÿÿîÐÎ&E&Ú ÎÿÿÿêéÎ&N&ä ãÿÿÿèãÎ&E&î øÿÿÿçéÎ&E&Ú ÿÿÿçÔÎ&E&î "ÿÿÿçÞÎ&E&Ú 7ÿÿÿíÞÎ&N&ä LÿÿÿëÐÎ&E&Ú aÿÿÿìÕÎ&N&ä vÿÿÿíØÎ&E&Ú ‹ÿÿÿçÜÎ&N&ä  ÿÿÿëÐÎ&3øÿÿÿëÐÎ&D&  }ÿÿÿëÐÎ&D&  ’ÿÿÿêëÎ&D&  §ÿÿÿðÕÎ&;& » ÿÿÿéãÎ&D&  ÑÿÿÿçßÎ&M&  æÿÿÿïÕÎ&D&  ûÿÿÿíÕÎ&M&  ÿÿÿëÐÎ&M&  %ÿÿÿíÐÎ&M&  :ÿÿÿíÐÎ&M&  OÿÿÿëèÎ&M&  dÿÿÿîÔÎ&M&  yÿÿÿíÖÎ&M&  ŽÿÿÿçÛÎ&M&  £ÿÿÿïÐÎ&D&  ¸ÿÿÿîÐÎ& &D ÍÿÿÿêéÎ&M&  âÿÿÿèãÎ&D&  ÷ÿÿÿçéÎ&D&  ÿÿÿçÔÎ& &C ÿÿÿçÞÎ&D&  6ÿÿÿçÞÎ&M&  KÿÿÿëÐÎ&D&  `ÿÿÿìÕÎ&M&  uÿÿÿíØÎ&D&  ŠÿÿÿçÖÎ&M&  ŸÿÿÿëÐÎ&4 'ÿÿÿëÐÎ&E& ; ~ÿÿÿëÐÎ&E& ; “ÿÿÿêëÎ&E& ; ¨ÿÿÿðÕÎ&<& 1 ½ÿÿÿéãÎ&E& ; ÒÿÿÿçßÎ&N& E çÿÿÿïÕÎ&E& ; üÿÿÿíÕÎ&N& E ÿÿÿëÐÎ&N& E &ÿÿÿíÐÎ&N& E ;ÿÿÿíÐÎ&N& E PÿÿÿëéÎ&N& E eÿÿÿîÔÎ&N& E zÿÿÿíÖÎ&N& E ÿÿÿçÛÎ&N& E ¤ÿÿÿïÐÎ&E& ; ¹ÿÿÿîÐÎ&E& ; ÎÿÿÿêéÎ&N& E ãÿÿÿèãÎ&E& O øÿÿÿçéÎ&E& ; ÿÿÿçÔÎ&E& O "ÿÿÿçÞÎ&E& ; 7ÿÿÿíÞÎ&N& E LÿÿÿëÐÎ&E& ; aÿÿÿìÕÎ&N& E vÿÿÿíØÎ&E& ; ‹ÿÿÿçÜÎ&N& E  ÿÿ êÅ&5 XÿÿÿëêÏ&F& j ÿÿÿëêÏ&F& j ”ÿÿÿêêÏ&F& j ©ÿÿÿðêÏ&=& ` ¾ÿÿÿéêÏ&F& j ÓÿÿÿçêÏ&O& t èÿÿÿïêÏ&F& j ýÿÿÿíêÏ&O&  tÿÿÿëêÏ&O& t 'ÿÿÿîêÏ&O& t <ÿÿÿîêÏ&O& t QÿÿÿìêÏ&O& t fÿÿÿîêÏ&O& t {ÿÿÿìêÏ&O& t ÿÿÿçêÏ&O& t ¥ÿÿÿïêÏ&F& j ºÿÿÿîêÏ&F& j ÏÿÿÿêêÏ&O& t äÿÿÿèêÏ&F& } ùÿÿÿéêÏ&F& j ÿÿÿçêÏ&F& } #ÿÿÿçêÏ&F& j 8ÿÿÿçêÏ&O& t MÿÿÿëêÏ&F& j bÿÿÿíêÏ&O& t wÿÿÿíêÏ&F& j ŒÿÿÿçêÏ&O& t ¡ÿÿÿëöÎ& ‡7ÿÿÿëöÎ&H& › €ÿÿÿëöÎ&H& › •ÿÿÿêöÎ&H& › ªÿÿÿðöÎ&?& ¿ ‘ÿÿÿéöÎ&H& › ÔÿÿÿçöÎ&Q& ¥ éÿÿÿïöÎ&H& › þÿÿÿíöÎ& ›& QÿÿÿëöÎ&Q& ¥ (ÿÿÿíöÎ&Q& ¥ =ÿÿÿíöÎ&Q& ¥ RÿÿÿìöÎ&Q& ¥ gÿÿÿîöÎ&Q& ¥ |ÿÿÿîöÎ&Q& ¥ ‘ÿÿÿçöÎ&Q& ¥ ¦ÿÿÿïöÎ&H& › »ÿÿÿîöÎ&H& › ÐÿÿÿêöÎ&Q& ¥ åÿÿÿèöÎ&H& ¯ úÿÿÿéöÎ&H& › ÿÿÿçöÎ&H& ¯ $ÿÿÿçöÎ&H& › 9ÿÿÿçöÎ&Q& ¥ NÿÿÿëöÎ&H& › cÿÿÿíöÎ&Q& ¥ xÿÿÿíöÎ&H& › ÿÿÿçöÎ&Q& ¥ ¢ÿÿÿëÐÎ&9 ¹ÿÿÿëÐÎ&J& Í €ÿÿÿëÐÎ&J& Í •ÿÿÿêëÎ&J& Í ªÿÿÿðÕÎ&A& à ¿ÿÿÿéãÎ&J& Í ÔÿÿÿçßÎ&S& × éÿÿÿïÕÎ&J& Í þÿÿÿíÕÎ&S& × ÿÿÿëÐÎ&S& × (ÿÿÿíÐÎ&S& × =ÿÿÿíÐÎ&S& × RÿÿÿìéÎ&S& × gÿÿÿîÔÎ&S& × |ÿÿÿîÖÎ&S& × ‘ÿÿÿçÛÎ&S& × ¦ÿÿÿïÐÎ&J& Í »ÿÿÿîÐÎ&J& Í ÐÿÿÿêéÎ&S& × åÿÿÿèãÎ&J& á úÿÿÿééÎ&J& Í ÿÿÿçÔÎ&J& á $ÿÿÿçâÎ&J& Í 9ÿÿÿçáÎ&S& × NÿÿÿëÐÎ&J& Í cÿÿÿíÕÎ&S& × xÿÿÿíØÎ&J& Í ÿÿÿçÜÎ&S& × ¢ÿÿÿëÐÎ& ê7ÿÿÿëÐÎ&H& þ €ÿÿÿëÐÎ&H& þ •ÿÿÿêëÎ&H& þ ªÿÿÿðÕÎ&?& ô ¿ÿÿÿéãÎ&H& þ ÔÿÿÿçßÎ&Q&  éÿÿÿïÕÎ&H& þ þÿÿÿíÕÎ&Q&  ÿÿÿëÐÎ&Q&  (ÿÿÿíÐÎ&Q&  =ÿÿÿíÐÎ&Q&  RÿÿÿìéÎ&Q&  gÿÿÿîÔÎ&Q&  |ÿÿÿîÖÎ&Q&  ‘ÿÿÿçÛÎ&Q&  ¦ÿÿÿïÐÎ&H& þ »ÿÿÿîÐÎ&H& þ ÐÿÿÿêéÎ&Q&  åÿÿÿèãÎ&H&  úÿÿÿééÎ&H& þ ÿÿÿçÔÎ&H&  $ÿÿÿçâÎ&H& þ 9ÿÿÿçáÎ&Q&  NÿÿÿëÐÎ&H& þ cÿÿÿíÕÎ&Q&  xÿÿÿíØÎ&H& þ ÿÿÿçÜÎ&Q&  ¢ÿÿ ëÅ&5 ÿÿÿëëÏ&F& 0 ÿÿÿëëÏ&F& 0 ”ÿÿÿêëÏ&F& 0 ©ÿÿÿðëÏ&=& & ¾ÿÿÿéëÏ&F& 0 ÓÿÿÿçëÏ&O& : èÿÿÿïëÏ&F& 0 ýÿÿÿíëÏ&O& : ÿÿÿëëÏ&O& : 'ÿÿÿîëÏ&O& : <ÿÿÿîëÏ&O& : QÿÿÿìëÏ&O& : fÿÿÿîëÏ&O& : {ÿÿÿìëÏ&O& : ÿÿÿçëÏ&O& : ¥ÿÿÿïëÏ&F& 0 ºÿÿÿîëÏ&F& 0 ÏÿÿÿêëÏ&O& : äÿÿÿèëÏ&F& D ùÿÿÿéëÏ&F& 0 ÿÿÿçëÏ&F& D #ÿÿÿçëÏ&F& 0 8ÿÿÿçëÏ&O& : MÿÿÿëëÏ&F& 0 bÿÿÿíëÏ&O& : wÿÿÿíëÏ&F& 0 ŒÿÿÿçëÏ&O& : ¡ÿÿÿëëÏ&6 MÿÿÿëëÏ&G& W ÿÿÿëëÏ&G& W ”ÿÿÿêëÏ&G& W ©ÿÿÿðëÏ&>& R ºÿÿÿéëÏ&G& W ÓÿÿÿçëÏ&P& l èÿÿÿïëÏ&G& W ýÿÿÿíëÏ&P& l ÿÿÿëëÏ&P& l 'ÿÿÿîëÏ&P& l <ÿÿÿîëÏ&P& l QÿÿÿìëÏ&P& l fÿÿÿîëÏ&P& l {ÿÿÿìëÏ&P& l ÿÿÿçëÏ&P& l ¥ÿÿÿïëÏ&G& W ºÿÿÿîëÏ&G& W ÏÿÿÿêëÏ&P& l äÿÿÿèëÏ&G& e ùÿÿÿéëÏ&G& W ÿÿÿçëÏ&G& W #ÿÿÿçëÏ&G& W 8ÿÿÿçëÏ&P& ^ MÿÿÿëëÏ&G& W bÿÿÿíëÏ&P& l wÿÿÿíëÏ&G& W ŒÿÿÿçëÏ&P& ^ ¡ÿÿÿëÐÎ&8 sÿÿÿëÐÎ&I&  ‚ÿÿÿëÐÎ&I&  —ÿÿÿêëÎ&I&  ¬ÿÿÿðÕÎ&@& z ÁÿÿÿéãÎ&I&  ÖÿÿÿçßÎ&R& – ëÿÿÿïÕÎ&I&  ÿÿÿíÕÎ&R& – ÿÿÿëÐÎ&R& – *ÿÿÿíÐÎ&R& – ?ÿÿÿíÐÎ&R& – TÿÿÿìéÎ&R& – iÿÿÿîÔÎ&R& – ~ÿÿÿîÖÎ&R& – “ÿÿÿçÛÎ&R& – ¨ÿÿÿïÐÎ&I&  ½ÿÿÿîÐÎ&I&  ÒÿÿÿêéÎ&R& – çÿÿÿèãÎ&I&  üÿÿÿééÎ&I&  ÿÿÿçÔÎ&I&  &ÿÿÿçÞÎ&I&  ;ÿÿÿçÞÎ&R& ˆ PÿÿÿëÐÎ&I&  eÿÿÿíÕÎ&R& – zÿÿÿíØÎ&I&  ÿÿÿçÜÎ&R& ˆ ¤ÿÿÿëÐÎ&: ÿÿÿëÐÎ&K& « ‚ÿÿÿëÐÎ&K& « —ÿÿÿêëÎ&K& « ¬ÿÿÿðÕÎ&B& ¤ ÁÿÿÿéãÎ&K& « ÖÿÿÿçßÎ&T& À ëÿÿÿïÕÎ&K& « ÿÿÿíÕÎ&T& À ÿÿÿëÐÎ&T& À *ÿÿÿíÐÎ&T& À ?ÿÿÿíÐÎ&T& À TÿÿÿìéÎ&T& À iÿÿÿîÔÎ&T& À ~ÿÿÿîÖÎ&T& À “ÿÿÿçÛÎ&T& À ¨ÿÿÿïÐÎ&K& « ½ÿÿÿîÐÎ&K& « ÒÿÿÿêéÎ&T& À çÿÿÿèãÎ&K& ¹ üÿÿÿééÎ&K& « ÿÿÿçÔÎ&K& ¹ &ÿÿÿçÞÎ&K& « ;ÿÿÿçÞÎ&T& ² PÿÿÿëÐÎ&K& « eÿÿÿíÕÎ&T& À zÿÿÿíØÎ&K& « ÿÿÿçÜÎ&T& ² ¤ÿÿÿëÐÎ&8 ÇÿÿÿëÐÎ&I& Õ ÿÿÿëÐÎ&I& Õ –ÿÿÿêëÎ&I& Õ «ÿÿÿðÕÎ&@& Î ÀÿÿÿéãÎ&I& Õ ÕÿÿÿçßÎ&R& ê êÿÿÿïÕÎ&I& Õ ÿÿÿÿíÕÎ&R& ê ÿÿÿëÐÎ&R& ê )ÿÿÿíÐÎ&R& ê >ÿÿÿíÐÎ&R& ê SÿÿÿëéÎ&R& ê hÿÿÿîÔÎ&R& ê }ÿÿÿîÖÎ&R& ê ’ÿÿÿçÛÎ&R& ê §ÿÿÿïÐÎ&I& Õ ¼ÿÿÿîÐÎ&I& Õ ÑÿÿÿêéÎ&R& ê æÿÿÿèãÎ&I& ã ûÿÿÿééÎ&I& Õ ÿÿÿçÔÎ&I& ã %ÿÿÿçÞÎ&I& Õ :ÿÿÿçÞÎ&R& Ü OÿÿÿëÐÎ&I& Õ dÿÿÿíÕÎ&R& ê yÿÿÿíØÎ&I& Õ ŽÿÿÿçÖÎ&R& Ü £ÿÿÿíëÏ&6 ñÿÿÿëëÏ&G& ÿ ÿÿÿëëÏ&G& ÿ ”ÿÿÿêëÏ&G& ÿ ©ÿÿÿðëÏ&>& ø ¾ÿÿÿéëÏ&G& ÿ ÓÿÿÿçëÏ&P&  èÿÿÿïëÏ&G& ÿ ýÿÿÿíëÏ&P&  ÿÿÿëëÏ&P&  'ÿÿÿîëÏ&P&  <ÿÿÿîëÏ&P&  QÿÿÿìëÏ&P&  fÿÿÿîëÏ&P&  {ÿÿÿìëÏ&P&  ÿÿÿçëÏ&P&  ¥ÿÿÿïëÏ&G& ÿ ºÿÿÿîëÏ&G& ÿ ÏÿÿÿêëÏ&P&  äÿÿÿèëÏ&G&  ùÿÿÿéëÏ&G& ÿ ÿÿÿçëÏ&G&  #ÿÿÿçëÏ&G& ÿ 8ÿÿÿçëÏ&P&  MÿÿÿëëÏ&G& ÿ bÿÿÿíëÏ&P&  wÿÿÿíëÏ&G& ÿ ŒÿÿÿçëÏ&P&  ¡ÿÿ ëÅ&5 ÿÿÿëëÏ&F& ( ÿÿÿëëÏ&F& ( ”ÿÿÿêëÏ&F& ( ©ÿÿÿðëÏ&=& ! ¾ÿÿÿéëÏ&F& ( ÓÿÿÿçëÏ&O& = èÿÿÿïëÏ&F& ( ýÿÿÿíëÏ&O& = ÿÿÿëëÏ&O& = 'ÿÿÿîëÏ&O& = <ÿÿÿîëÏ&O& = QÿÿÿìëÏ&O& = fÿÿÿîëÏ&O& = {ÿÿÿìëÏ&O& = ÿÿÿçëÏ&O& = ¥ÿÿÿïëÏ&F& ( ºÿÿÿîëÏ&F& ( ÏÿÿÿêëÏ&O& = äÿÿÿèëÏ&F& 6 ùÿÿÿéëÏ&F& ( ÿÿÿçëÏ&F& 6 #ÿÿÿçëÏ&F& ( 8ÿÿÿçëÏ&O& / MÿÿÿëëÏ&F& ( bÿÿÿíëÏ&O& = wÿÿÿíëÏ&F& ( ŒÿÿÿçëÏ&O& / ¡ÿÿÿëÐÎ& E7ÿÿÿëÐÎ&H& Q €ÿÿÿëÐÎ&H& Q •ÿÿÿêëÎ&H& Q ªÿÿÿðÕÎ&?& J ¿ÿÿÿéãÎ&H& Q ÔÿÿÿçßÎ&Q& f éÿÿÿïÕÎ&H& Q þÿÿÿíÕÎ&Q& f ÿÿÿëÐÎ&Q& f (ÿÿÿíÐÎ&Q& f =ÿÿÿíÐÎ&Q& f RÿÿÿìéÎ&Q& f gÿÿÿîÔÎ&Q& f |ÿÿÿîÖÎ&Q& f ‘ÿÿÿçÛÎ&Q& f ¦ÿÿÿïÐÎ&H& Q »ÿÿÿîÐÎ&H& Q ÐÿÿÿêéÎ&Q& f åÿÿÿèãÎ&H& _ úÿÿÿééÎ&H& Q ÿÿÿçÔÎ&H& _ $ÿÿÿçâÎ&H& Q 9ÿÿÿçáÎ&Q& X NÿÿÿëÐÎ&H& Q cÿÿÿíÕÎ&Q& f xÿÿÿíØÎ&H& Q ÿÿÿçÜÎ&Q& X ¢ÿÿÿëÐÎ&3 iÿÿÿëÐÎ&C& o }ÿÿÿëÐÎ&C& o ’ÿÿÿêëÎ&C& o §ÿÿÿðÕÎ&;& l ¼ÿÿÿéãÎ&C& o ÑÿÿÿçßÎ&L& u æÿÿÿïÕÎ&C& o ûÿÿÿíÕÎ& u&M ÿÿÿëÐÎ&L& u %ÿÿÿíÐÎ&L& u :ÿÿÿíÐÎ&L& u OÿÿÿëèÎ&L& u dÿÿÿîÔÎ&L& u yÿÿÿíÖÎ&L& u ŽÿÿÿçÛÎ&L& u £ÿÿÿïÐÎ&M& ´ oÿÿÿîÐÎ&C& o ÍÿÿÿêéÎ&L& u âÿÿÿèãÎ&C& r ÷ÿÿÿçéÎ&C& o ÿÿÿçÔÎ&C& r !ÿÿÿçÞÎ&C& o 6ÿÿÿçÞÎ&L& o KÿÿÿëÐÎ&C& o `ÿÿÿìÕÎ&L& u uÿÿÿíØÎ&C& o ŠÿÿÿçÖÎ&L& o ŸÿÿÿîïÏ&eªÿÿÿèîÊ&*?Æÿÿ ÿéìÍ& ²?Çÿÿ ÿéóÏ& ?ÌÿÿÿèïÏ&*+& ± ÿÿ ÿéôÐ&¾?Îÿÿ ÿçõÏ&<& ª?Ïÿÿ ÿéïÊ&?ÑÿÿÿèñÏ&n&s?ÒÿÿÿêôÑ&L?Óÿÿ ÿèôÑ&Ø?Öÿÿ ÿéõÐ& ²aÿÿ ÿéõÐ&\% ÿÿ ÿéõÐ&\ÿÿ ÿçöÏ&Ñ&r?×ÿÿ ÿèôÐ&…?ØÿÿÿéôÐ&æ…ÿÿÿéõÒ&—?ÙÿÿÿéíÏ&-Á0²ÿÿ ÿéíÏ&-Á.ùÿÿÿèñÏ&n-Âÿÿ ÿèðÒ& ?Ûÿÿ ÿéöÏ&Œ?Üÿÿ ÿèóÏ&-Ã.ôÿÿ ÿîóÏ&n& ù?Ýÿÿ ÿèôÐ&-Ä?Þÿÿ ÿéóÏ&?ßÿÿ ÿè÷Ò&3-Åÿÿ ÿè÷Ò&-ÅÿÿÿéêÎ&°-Èÿÿ ÿè÷Ï& ²-Æÿÿ ÿèöÐ&o-ÇÿÿÿéðÏ&?áÿÿÿê÷Ñ&±?ãÿÿÿçîÐ&å?äÿÿ ÿéóÐ&.7?åÿÿÿéöÒ&)ø0²ÿÿ ÿêõÐ&Ë?æÿÿ ÿíòÏ&ž?èÿÿ ÿéõÐ&Š‹ÿÿ ÿéõÌ& À?êÿÿ ÿéóÑ&@?ëÿÿ ÿèòÑ&P?ìÿÿÿéóÏ&C?íÿÿÿëôÏ&Ñ?ðÿÿ ÿéøÏ& ?óÿÿ ÿìõÐ&$?ôÿÿ ÿçóÃ&M?õÿÿÿé÷Ñ&Ì?öÿÿÿêöÐ&-¤?÷ÿÿ ÿêîÇ&0œ?ùÿÿ ÿéõÐ&ÈÿÿÿèïË& ¼+#ÿÿ ÿìóÈ&„&$?úÿÿ ÿèñÊ&E?ûÿÿ ÿçôÐ& 1ÿÿ ÿçôÐ&.ô?üÿÿ ÿèðË&.ô?ýÿÿ ÿçõÏ&0›?ÿÿÿÿéòÆ&@ÿÿ ÿéîÏ& ï ðÿÿ ÿèíÐ&1+@ÿÿ ÿéöÑ&&ùÇÿÿ ÿèóÏ&-ÉÇÿÿ ÿèòÐ&-Ê-Rÿÿ ÿèõÏ&-Ë@ÿÿÿèôÏ&Ñ-ÌÿÿÿèòÏ&m-ÊÿÿÿèóÐ&Ë0…ÿÿ ÿèôÑ&Ø@ÿÿ ÿéñÏ&'Ü@ÿÿ ÿéòÑ&&ƒ@ÿÿ ÿîõÏ&[@ÿÿÿéñÏ&@ÿÿÿêòÏ&ügÿÿ ÿè÷Ï& í"äÿÿ ÿèôÐ&ö!„ÿÿ ÿéóÍ& ²& ÿÿ ÿèôÏ&-ÍæÿÿÿëêÐ&¯@ ÿÿÿïñÑ&@ ÿÿ ÿéòÏ&k@ ÿÿ ÿéôÏ& ²Áÿÿ ÿéôÑ& ¸ÿÿ ÿéñÐ&v@ÿÿ ÿéôÏ&-ÏÿÿÿéõÐ&ÿÿ ÿêòÎ&-ÎÇÿÿ ÿèôÐ&•&”@ÿÿ ÿéòÏ&,@ÿÿ ÿêóÐ&-Ð@ÿÿÿéïÏ& ó@ÿÿ ÿéòÐ& ²@ÿÿÿéòÈ&C->ÿÿÿèíÉ&@ÿÿ ÿéóÌ&*@ÿÿ ÿéòÏ& @ÿÿ ÿèôÇ&s@ ÿÿ ÿèôÊ&A@!ÿÿ ÿèõÐ& Ô@"ÿÿ ÿéóÏ&9-Üÿÿ ÿëõÒ&„@#ÿÿ ÿçôÐ&@$ÿÿ ÿäøË&Ý&.ô@%ÿÿ ÿéòÏ&ë@&ÿÿ ÿäøÌ& @'ÿÿÿéñÐ&·¸ÿÿ ÿéõÏ&l@+ÿÿ ÿéòÏ&¤@-ÿÿÿéæÏ&¢@.ÿÿÿéëÉ&*' ³ÿÿ ÿîõÐ&[@4ÿÿ ÿéõÑ&&è@5ÿÿ ÿè÷Ñ&&Å@6ÿÿ ÿéòÑ&i@7ÿÿ ÿè÷Ò&o-Åÿÿ ÿéôÐ&á@8ÿÿÿééÇ&@9ÿÿ ÿèóÏ&Œ&\@;ÿÿ ÿéôÏ&-Ñ@<ÿÿ ÿéôÏ&À-Òÿÿ ÿèôÏ&-Ò@>ÿÿ ÿéòÏ&-Ó@?ÿÿ ÿéòÏ&-Ó@@ÿÿ ÿéóÌ& À@Aÿÿ ÿîòÎ&@BÿÿÿéõÏ&!@Cÿÿ ÿéìÏ&¸&@Dÿÿ ÿêóÐ&-Ô@EÿÿÿêòÐ@Fÿÿ ÿé÷Ï&N1ÿÿ ÿîõÉ&§@Gÿÿ ÿéôÏ& ízÿÿ ÿèòÉ&:@Iÿÿ ÿéöÏ&-Õ@Jÿÿ ÿèôÑ&Ø@Kÿÿ ÿéôÏ&ë'ãÿÿ ÿèõÏ&l@Mÿÿ ÿë÷Ò&ƒ@Nÿÿ ÿéòË&ä&ú@PÿÿÿèöÇ&ÝÞÿÿ ÿéëÐ&›@Qÿÿ ÿéôÏ&-Ùºÿÿ ÿéïÏ& &[@Rÿÿ ÿçõÏ& ²-Öÿÿ ÿèìÐ&Ö@Sÿÿ ÿèõÏ&X-×ÿÿÿéåÑ&)ß@Tÿÿ ÿçõÎ&-Ø@ÿÿ ÿëóÎ&-Ú@Uÿÿ ÿéóÏ&„@Vÿÿ ÿèóÐ&<@XÿÿÿéòÏ&m@Yÿÿ ÿéøÏ& ì„ÿÿ ÿéôÏ&Œ ÿÿ ÿéøÏ&„ ²ÿÿ ÿéøÏ& Ô $ÿÿ ÿéôÐ&& ÿÿ ÿéóÏ&9@Zÿÿ ÿèôÇ&”@[ÿÿÿéóÏ&@\ÿÿÿéóÍ&m&Y@]ÿÿ ÿéæÐ&÷¢ÿÿ ÿèòÊ&E&F@^ÿÿ ÿæéÇ&I@_ÿÿ ÿéóÐ&~5ÿÿ ÿèôÎ&©&”@`ÿÿ ÿçñÍ& ²Éÿÿ ÿñóÄ&çÿÿÿéíÉ&Á@bÿÿ ÿèóÐ&ì@dÿÿÿðîÊ&ñóÿÿ ÿèíÍ& ²@gÿÿ ÿéóÏ&ë-Ûÿÿ ÿéóÎ&X-ÛÿÿÿéñÏ&n@iÿÿÿéôÎ&%'ÿÿ ÿéôÐ&†ÿÿ ÿéôÏ&*Û@jÿÿÿéõÏ&¸…ÿÿ ÿèöÏ&.ì.ôÿÿÿéòÏ&*Ü&@kÿÿ ÿóòÑ&Ô*Þÿÿ ÿéóÐ&*ß@lÿÿ ÿéöÏ&Kÿÿ ÿèóÑ& @mÿÿ ÿçóÏ& ëVÿÿ ÿéöÏ&m@oÿÿ ÿéëÏ&›@pÿÿ ÿéñÏ&ÃÿÿÿìíÐ&í@tÿÿ ÿéêÍ& ²©ÿÿ ÿéõÉ&ª@uÿÿ ÿéïÏ& Îÿÿ ÿèóÏ& Ã×ÿÿÿé÷Ò&m@vÿÿÿèñÒ& @{ÿÿ ÿéöË&Xµÿÿ ÿé÷Ë&¶@|ÿÿÿéóÏ&V*àÿÿÿéóÏ&0²@~ÿÿ ÿéöÒ&h@ÿÿ ÿèõÈ&Ñ&t&Ò@€ÿÿ ÿéñÐ&o@ÿÿ ÿîóË& ö@‚ÿÿ ÿêòÏ&3*áÿÿÿéïÐ&*âRÿÿÿéóÏ&*â¹ÿÿÿéîÇ&*â" ÿÿ ÿéóÐ&*ã@ƒÿÿ ÿèóÏ&*ä•ÿÿ ÿèñÏ&l@…ÿÿ ÿéöÏ&k@†ÿÿÿòóÏ& æÿÿ ÿëôÉ&u@‰ÿÿ ÿëôÏ&u@Šÿÿ ÿèñÏ&Š@‹ÿÿ ÿéôÏ&¨@Œÿÿ ÿéòÏ&¨@ÿÿÿèñÑ&Ý@Žÿÿ ÿéíÑ&ˆ@ÿÿÿéñÑ&@’ $ÿö,7 9 : ;< =FÿøGÿøHÿøJÿûRÿøTÿøWYZ\wÿëÿø€ÿøÿø‚ÿø†ÿø‡ÿø‰ÿø¢ÿø°ÿö $ÿö , 7 9 : ; < = Fÿø Gÿø Hÿø Jÿû Rÿø Tÿø W Y Z \ wÿë ÿø €ÿø ÿø ‚ÿø †ÿø ‡ÿø ‰ÿø ¢ÿø °ÿö -&ÿø*ÿø2ÿø4ÿø7ÿó8ÿû9ÿó:ÿö<ÿózÿø&ÿø*ÿø2ÿø4ÿø7ÿó8ÿû9ÿó:ÿö<ÿózÿø$ÿö$ ÿö$&ÿý$*ÿý$2ÿý$4ÿý$7ÿñ$8ÿý$9ÿø$:ÿû$<ÿó$zÿý$¡ÿû$#ÿö$%ÿö%7ÿý%9ÿý%;ÿý%<ÿý&& & &&ÿû&*ÿû&2ÿû&4ÿû&@&`&zÿû&#&%'ÿø'ÿø'$ÿý',ÿý'7ÿø'9ÿý':ÿý';ÿý'<ÿû'=ÿý'wÿø'°ÿý)) ) )ÿó)ÿó)")$ÿû)9):)<)@)`)wÿø)°ÿû)#)%,, ,&ÿý,*ÿý,2ÿý,4ÿý,zÿý,¡ÿý,#,%.. .&ÿû.*ÿû.2ÿû.4ÿû.zÿû.¡ÿû.#.%/ÿó/ ÿó/&ÿý/*ÿý/2ÿý/4ÿý/7ÿñ/8ÿý/9ÿö/:ÿø/<ÿó/zÿý/¡ÿý/#ÿó/%ÿó2ÿø2ÿø2$ÿý2,ÿý27ÿø29ÿû2:ÿý2;ÿû2<ÿû2=ÿý2wÿû2°ÿý3ÿæ3ÿæ3$ÿö3&ÿý3;ÿý3<ÿý3=ÿû3wÿî3°ÿö4ÿø4ÿø4$ÿý4,ÿý47ÿø49ÿû4:ÿý4;ÿû4<ÿû4=ÿý4wÿø4°ÿý57ÿý7 7 7ÿó7ÿó7"7$ÿñ7&ÿø7*ÿø72ÿø74ÿø76ÿý777Dÿñ7Fÿñ7Gÿñ7Hÿñ7Jÿó7Pÿö7Qÿö7Rÿñ7Sÿö7Tÿñ7Uÿö7Vÿñ7Xÿö7Yÿø7Zÿø7[ÿø7\ÿø7]ÿø7wÿî7zÿø7}ÿñ7~ÿñ7ÿñ7€ÿñ7ÿñ7‚ÿñ7†ÿñ7‡ÿñ7‰ÿñ7Šÿö7‹ÿö7Œÿö7¡ÿø7¢ÿñ7°ÿñ7# 7% 8ÿû8ÿû8$ÿý8wÿû8°ÿý9 9 9ÿó9ÿó9"9$ÿø9&ÿû9*ÿû92ÿû94ÿû9Dÿø9Fÿø9Gÿø9Hÿø9Jÿø9Pÿû9Qÿû9Rÿø9Sÿû9Tÿø9Uÿû9Vÿû9Xÿû9wÿñ9zÿû9}ÿø9~ÿø9ÿø9€ÿø9ÿø9‚ÿø9†ÿø9‡ÿø9‰ÿø9Šÿû9‹ÿû9Œÿû9¡ÿû9¢ÿø9°ÿø9# 9% : : :ÿö:ÿö:$ÿû:&ÿý:*ÿý:2ÿý:4ÿý:Dÿû:Fÿû:Gÿû:Hÿû:Jÿý:Pÿý:Qÿý:Rÿû:Sÿý:Tÿû:Uÿý:Vÿû:Xÿý:]ÿý:wÿö:zÿý:}ÿû:~ÿû:ÿû:€ÿû:ÿû:‚ÿû:†ÿû:‡ÿû:‰ÿû:Šÿý:‹ÿý:Œÿý:¡ÿý:¢ÿû:°ÿû:# :% ;; ;&ÿû;*ÿû;2ÿû;4ÿû;Fÿý;Gÿý;Hÿý;Rÿý;Tÿý;zÿû;ÿý;€ÿý;ÿý;‚ÿý;†ÿý;‡ÿý;‰ÿý;¡ÿû;¢ÿý;#;%< < <ÿó<ÿó<"<$ÿó<&ÿû<*ÿû<2ÿû<4ÿû<6ÿý<Dÿó<Fÿó<Gÿó<Hÿó<Jÿó<Pÿø<Qÿø<Rÿó<Sÿø<Tÿó<Uÿø<Vÿö<Xÿø<[ÿû<\ÿý<]ÿø<wÿî<zÿû<}ÿó<~ÿó<ÿó<€ÿó<ÿó<‚ÿó<†ÿó<‡ÿó<‰ÿó<Šÿø<‹ÿø<Œÿø<¡ÿû<¢ÿó<°ÿó<# <% == =&ÿý=*ÿý=2ÿý=4ÿý=zÿý=¡ÿû=#=%>-D ÿûE ÿûFF F#F%H ÿûI I IYIZI\I# I% JJ JJJ#J%K ÿøNN N#N%P ÿûQ ÿûR[ÿûR]ÿýU U UDÿýUJÿýU}ÿýU~ÿýU# U% VV V#V%W W WWW# W% YY YIY# Y% Z Z ZIZ# Z% [[ [Rÿû[ÿû[†ÿû[‡ÿû[‰ÿû[¢ÿû[#[%\\ \I\#\%]Rÿý]ÿý]†ÿý]‡ÿý]‰ÿý]¢ÿý^-x$ÿýx°ÿýzÿøzÿøz$ÿýz,ÿýz7ÿøz9ÿûz:ÿýz;ÿûz<ÿûz=ÿýzwÿûz°ÿý} ÿû~ ÿû[ÿû]ÿý€ÿó€ ÿûÿó ÿû‚ÿó‚ ÿû†ÿî† ÿî†Iÿû†[ÿû†]ÿý‡ÿî‡ ÿî‡Iÿû‡[ÿû‡]ÿý‰[ÿû‰]ÿýŠÿøŠ ÿø‹ÿø‹ ÿøŒÿøŒ ÿø›ÿó› ÿó›&ÿý›*ÿý›2ÿý›4ÿý›7ÿñ›8ÿý›9ÿö›:ÿø›<ÿó›zÿý›¡ÿý›#ÿó›%ÿó¢[ÿû¢]ÿý¯ÿó¯ ÿó¯&ÿý¯*ÿý¯2ÿý¯4ÿý¯7ÿñ¯8ÿý¯9ÿö¯:ÿø¯<ÿó¯zÿý¯¡ÿý¯#ÿó¯%ÿó°ÿö° ÿö°&ÿý°*ÿý°2ÿý°4ÿý°7ÿñ°8ÿý°9ÿø°:ÿû°<ÿó°zÿý°¡ÿû°#ÿö°%ÿö· · ·ÿó·ÿó·"·$ÿø·&ÿû·*ÿû·2ÿû·4ÿû·Dÿø·Fÿø·Gÿø·Hÿø·Jÿø·Pÿû·Qÿû·Rÿø·Sÿû·Tÿø·Uÿû·Vÿû·Xÿû·wÿñ·zÿû·}ÿø·~ÿø·ÿø·€ÿø·ÿø·‚ÿø·†ÿø·‡ÿø·‰ÿø·Šÿû·‹ÿû·Œÿû·¡ÿû·¢ÿø·°ÿø·# ·% ÇÇ ÇIÇ#Ç%ÉÉ É#É%Ë ÿûÍ Í ÍÍÍ# Í% ÎÎ Î#Î%ÏÏ ÏIÏ#Ï%ÑÑ ÑIÑ# Ñ% × × ×××# ×% Ù[ÿûÙ]ÿýÚÚ ÚIÚ#Ú%Û[ÿûÛ]ÿýÝÝ ÝÿûÝ&ÿýÝ-Ý2ÿýÝ4ÿýÝzÿýÝ#Ý% #% #% #% #% #% #% #%ÿó ÿû"$ÿö","7 "9 ": ";"< "="Fÿø"Gÿø"Hÿø"Jÿû"Rÿø"Tÿø"W"Y"Z"wÿë"ÿø"€ÿø"ÿø"‚ÿø"†ÿø"‡ÿø"‰ÿø"¢ÿø"°ÿö$$ÿö$,$7 $9 $: $;$< $=$Fÿø$Gÿø$Hÿø$Jÿû$Rÿø$Tÿø$W$Y$Z$wÿë$ÿø$€ÿø$ÿø$‚ÿø$†ÿø$‡ÿø$‰ÿø$¢ÿø$°ÿö ¢ d &d Š <˜ &d Ô "ì œ (ª Ò Ðî 8¾ \öDigitized data copyright Google Corporation © 2006Droid Sans FallbackRegularAscender - Droid Sans FallbackVersion 2.00DroidSansFallbackDroid is a trademark of Google and may be registered in certain jurisdictions.Ascender CorporationSteve MattesonDroid Sans is a humanist sans serif typeface designed for user interfaces and electronic communications.http://www.ascendercorp.com/http://www.ascendercorp.com/typedesigners.htmlÿì ÿÿrt-4.2.12/sbin/rt-attributes-viewer000754 000765 000024 00000006346 12562703633 017665 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT::Interface::CLI qw(Init); Init(); my $id = shift; Pod::Usage::pod2usage({ verbose => 2 }) unless $id; require RT::Attribute; my $attr = RT::Attribute->new( RT->SystemUser ); $attr->Load( $id ); unless ( $attr->id ) { print STDERR "Couldn't load attribute #$id\n"; exit 1; } my %res = (); $res{$_} = $attr->$_() foreach qw(ObjectType ObjectId Name Description Content ContentType); use Data::Dumper; print "Content of attribute #$id: ". Dumper( \%res ); __END__ =head1 NAME rt-attributes-viewer - show the content of an attribute =head1 SYNOPSIS # show the content of attribute 2 rt-attributes-viewer 2 =head1 DESCRIPTION This script deserializes and print content of an attribute defined by . May be useful for developers and for troubleshooting problems. rt-4.2.12/sbin/rt-attributes-viewer.in000644 000765 000024 00000006360 12555754775 020303 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT::Interface::CLI qw(Init); Init(); my $id = shift; Pod::Usage::pod2usage({ verbose => 2 }) unless $id; require RT::Attribute; my $attr = RT::Attribute->new( RT->SystemUser ); $attr->Load( $id ); unless ( $attr->id ) { print STDERR "Couldn't load attribute #$id\n"; exit 1; } my %res = (); $res{$_} = $attr->$_() foreach qw(ObjectType ObjectId Name Description Content ContentType); use Data::Dumper; print "Content of attribute #$id: ". Dumper( \%res ); __END__ =head1 NAME rt-attributes-viewer - show the content of an attribute =head1 SYNOPSIS # show the content of attribute 2 rt-attributes-viewer 2 =head1 DESCRIPTION This script deserializes and print content of an attribute defined by . May be useful for developers and for troubleshooting problems. rt-4.2.12/sbin/rt-clean-sessions000754 000765 000024 00000012172 12562703633 017120 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use Getopt::Long; my %opt; GetOptions( \%opt, "older=s", "debug", "help|h", "skip-user" ); if ( $opt{help} ) { require Pod::Usage; Pod::Usage::pod2usage({ verbose => 2 }); exit; } if( $opt{'older'} ) { unless( $opt{'older'} =~ /^\s*([0-9]+)\s*(H|D|M|Y)?$/i ) { print STDERR "wrong format of the 'older' argumnet\n"; exit(1); } my ($num,$unit) = ($1, uc($2 ||'D')); my %factor = ( H => 60*60 ); $factor{'D'} = $factor{'H'}*24; $factor{'M'} = $factor{'D'}*31; $factor{'Y'} = $factor{'D'}*365; $opt{'older'} = $num * $factor{ $unit }; } require RT; RT::LoadConfig(); if( $opt{'debug'} ) { RT->Config->Set( LogToSTDERR => 'debug' ); } else { RT->Config->Set( LogToSTDERR => undef ); } RT::ConnectToDatabase(); RT::InitLogging(); require RT::Interface::Web::Session; my $alogoff = int RT->Config->Get('AutoLogoff'); if ( $opt{'older'} or $alogoff ) { my $min; foreach ($alogoff*60, $opt{'older'}) { next unless $_; $min = $_ unless $min; $min = $_ if $_ < $min; } RT::Interface::Web::Session->ClearOld( $min ); } RT::Interface::Web::Session->ClearByUser unless $opt{'skip-user'}; exit(0); __END__ =head1 NAME rt-clean-sessions - clean old and duplicate RT sessions =head1 SYNOPSIS rt-clean-sessions [--debug] [--older [H|D|M|Y]] rt-clean-sessions rt-clean-sessions --debug rt-clean-sessions --older 10D rt-clean-sessions --debug --older 1M rt-clean-sessions --older 10D --skip-user =head1 DESCRIPTION Script cleans RT sessions from DB or dir with sessions data. Leaves in DB only one session per RT user and sessions that aren't older than specified(see options). Script is safe because data in the sessions is temporary and can be deleted. =head1 OPTIONS =over 4 =item older Date interval in the C<< [] >> format. Default unit is D(ays), H(our), M(onth) and Y(ear) are also supported. For example: C would delete all sessions that are older than 1 month. =item skip-user By default only one session per user left in the DB, so users that have sessions on multiple computers or in different browsers will be logged out. Use this option to avoid this. =item debug Turn on debug output. =back =head1 NOTES Functionality similar to this is implemented in html/Elements/SetupSessionCookie ; however, that does not guarantee that a session will be removed from disk and database soon after the timeout expires. This script, if run from a cron job, will ensure that the timed out sessions are actually removed from disk; the Mason component just ensures that the old sessions are not reusable before the cron job gets to them. =cut rt-4.2.12/sbin/rt-clean-sessions.in000644 000765 000024 00000012204 12555754775 017536 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use Getopt::Long; my %opt; GetOptions( \%opt, "older=s", "debug", "help|h", "skip-user" ); if ( $opt{help} ) { require Pod::Usage; Pod::Usage::pod2usage({ verbose => 2 }); exit; } if( $opt{'older'} ) { unless( $opt{'older'} =~ /^\s*([0-9]+)\s*(H|D|M|Y)?$/i ) { print STDERR "wrong format of the 'older' argumnet\n"; exit(1); } my ($num,$unit) = ($1, uc($2 ||'D')); my %factor = ( H => 60*60 ); $factor{'D'} = $factor{'H'}*24; $factor{'M'} = $factor{'D'}*31; $factor{'Y'} = $factor{'D'}*365; $opt{'older'} = $num * $factor{ $unit }; } require RT; RT::LoadConfig(); if( $opt{'debug'} ) { RT->Config->Set( LogToSTDERR => 'debug' ); } else { RT->Config->Set( LogToSTDERR => undef ); } RT::ConnectToDatabase(); RT::InitLogging(); require RT::Interface::Web::Session; my $alogoff = int RT->Config->Get('AutoLogoff'); if ( $opt{'older'} or $alogoff ) { my $min; foreach ($alogoff*60, $opt{'older'}) { next unless $_; $min = $_ unless $min; $min = $_ if $_ < $min; } RT::Interface::Web::Session->ClearOld( $min ); } RT::Interface::Web::Session->ClearByUser unless $opt{'skip-user'}; exit(0); __END__ =head1 NAME rt-clean-sessions - clean old and duplicate RT sessions =head1 SYNOPSIS rt-clean-sessions [--debug] [--older [H|D|M|Y]] rt-clean-sessions rt-clean-sessions --debug rt-clean-sessions --older 10D rt-clean-sessions --debug --older 1M rt-clean-sessions --older 10D --skip-user =head1 DESCRIPTION Script cleans RT sessions from DB or dir with sessions data. Leaves in DB only one session per RT user and sessions that aren't older than specified(see options). Script is safe because data in the sessions is temporary and can be deleted. =head1 OPTIONS =over 4 =item older Date interval in the C<< [] >> format. Default unit is D(ays), H(our), M(onth) and Y(ear) are also supported. For example: C would delete all sessions that are older than 1 month. =item skip-user By default only one session per user left in the DB, so users that have sessions on multiple computers or in different browsers will be logged out. Use this option to avoid this. =item debug Turn on debug output. =back =head1 NOTES Functionality similar to this is implemented in html/Elements/SetupSessionCookie ; however, that does not guarantee that a session will be removed from disk and database soon after the timeout expires. This script, if run from a cron job, will ensure that the timed out sessions are actually removed from disk; the Mason component just ensures that the old sessions are not reusable before the cron job gets to them. =cut rt-4.2.12/sbin/rt-dump-metadata000754 000765 000024 00000025617 12562703633 016725 0ustar00sartakstaff000000 000000 #!/usr/bin/perl -w # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # As we specify that XML is UTF-8 and we output it to STDOUT, we must be sure # it is UTF-8 so further XMLin will not break binmode( STDOUT, ":utf8" ); # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT::Interface::CLI qw(Init); my %opt; Init( \%opt, "limit-to-privileged|l", "skip-disabled|s", "all|a", ); require XML::Simple; my %RV; my %Ignore = ( All => [ qw( id Created Creator LastUpdated LastUpdatedBy ) ], ); my $SystemUserId = RT->SystemUser->Id; my @classes = qw( Users Groups Queues ScripActions ScripConditions Templates Scrips ACL CustomFields ); foreach my $class (@classes) { my $objects = "RT::$class"->new( RT->SystemUser ); $objects->{find_disabled_rows} = 1 unless $opt{'skip-disabled'}; $objects->UnLimit; $objects->LimitToPrivileged if $class eq 'Users' && $opt{'limit-to-privileged'}; $objects->Limit( FIELD => 'Domain', OPERATOR => '=', VALUE => 'UserDefined', CASESENSITIVE => 0, ) if $class eq 'Groups'; if ( $class eq 'CustomFields' ) { $objects->OrderByCols( { FIELD => 'LookupType' }, { FIELD => 'SortOrder' }, { FIELD => 'Id' }, ); } else { $objects->OrderBy( FIELD => 'Id' ); } unless ($opt{all}) { next if $class eq 'ACL'; # XXX - would go into infinite loop - XXX $objects->Limit( FIELD => 'LastUpdatedBy', OPERATOR => '!=', VALUE => $SystemUserId ) unless $class eq 'Groups'; $objects->Limit( FIELD => 'Id', OPERATOR => '!=', VALUE => $SystemUserId ) if $class eq 'Users'; } my %fields; OBJECT: while ( my $obj = $objects->Next ) { next if $obj->can('LastUpdatedBy') and $obj->LastUpdatedBy == $SystemUserId; if ( !%fields ) { %fields = map { $_ => 1 } keys %{ $obj->_ClassAccessible }; delete @fields{ @{ $Ignore{$class} ||= [] }, @{ $Ignore{All} ||= [] }, }; } my $rv; if ( $class ne 'ACL' ) { # next if $obj-> # skip default names foreach my $field ( sort keys %fields ) { my $value = $obj->__Value($field); $rv->{$field} = $value if ( defined($value) && length($value) ); } delete $rv->{Disabled} unless $rv->{Disabled}; foreach my $record ( map { /ACL/ ? 'ACE' : substr( $_, 0, -1 ) } @classes ) { foreach my $key ( map "$record$_", ( '', 'Id' ) ) { next unless exists $rv->{$key}; my $id = $rv->{$key} or next; next unless $id =~ /^\d+$/; my $obj = "RT::$record"->new( RT->SystemUser ); $obj->LoadByCols( Id => $id ) or next; $rv->{$key} = $obj->__Value('Name') || 0; } } if ( $class eq 'Users' and defined $obj->Privileged ) { $rv->{Privileged} = int( $obj->Privileged ); } elsif ( $class eq 'CustomFields' ) { my $values = $obj->Values; while ( my $value = $values->Next ) { push @{ $rv->{Values} }, { map { ( $_ => $value->__Value($_) ) } qw( Name Description SortOrder ), }; } if ( $obj->LookupType eq 'RT::Queue-RT::Ticket' ) { # XXX-TODO: unused CF's turn into global CF when importing # as the sub InsertData in RT::Handle creates a global CF # when no queue is specified. $rv->{Queue} = []; my $applies = $obj->AppliedTo; while ( my $queue = $applies->Next ) { push @{ $rv->{Queue} }, $queue->Name; } } } } else { # 1) pick the right $rv->{Right} = $obj->RightName; # 2) Pick a level: Granted on Queue, CF, CF+Queue, or Globally? for ( $obj->ObjectType ) { if ( /^RT::Queue$/ ) { next OBJECT if $opt{'skip-disabled'} && $obj->Object->Disabled; $rv->{Queue} = $obj->Object->Name; } elsif ( /^RT::CustomField$/ ) { next OBJECT if $opt{'skip-disabled'} && $obj->Object->Disabled; $rv->{CF} = $obj->Object->Name; } elsif ( /^RT::Group$/ ) { # No support for RT::Group ACLs in RT::Handle yet. next OBJECT; } elsif ( /^RT::System$/ ) { # skip setting anything on $rv; # "Specifying none of the above will get you a global right." } } # 3) Pick a Principal; User or Group or Role if ( $obj->PrincipalType eq 'Group' ) { next OBJECT if $opt{'skip-disabled'} && $obj->PrincipalObj->Disabled; my $group = $obj->PrincipalObj->Object; for ( $group->Domain ) { # An internal user group if ( /^SystemInternal$/ ) { $rv->{GroupDomain} = $group->Domain; $rv->{GroupType} = $group->Name; } # An individual user elsif ( /^ACLEquivalence$/ ) { my $member = $group->MembersObj->Next->MemberObj; next OBJECT if $opt{'skip-disabled'} && $member->Disabled; $rv->{UserId} = $member->Object->Name; } # A group you created elsif ( /^UserDefined$/ ) { $rv->{GroupDomain} = 'UserDefined'; $rv->{GroupId} = $group->Name; } } } else { $rv->{GroupType} = $obj->PrincipalType; # A system-level role if ( $obj->ObjectType eq 'RT::System' ) { $rv->{GroupDomain} = 'RT::System-Role'; } # A queue-level role elsif ( $obj->ObjectType eq 'RT::Queue' ) { $rv->{GroupDomain} = 'RT::Queue-Role'; } } } if ( RT::Attributes->require ) { my $attributes = $obj->Attributes; while ( my $attribute = $attributes->Next ) { my $content = $attribute->Content; if ( $class eq 'Users' and $attribute->Name eq 'Bookmarks' ) { next; } $rv->{Attributes}{ $attribute->Name } = $content if length($content); } } push @{ $RV{$class} }, $rv; } } print(<< "."); no strict; use XML::Simple; *_ = XMLin(do { local \$/; readline(DATA) }, ForceArray => [qw( @classes Values )], NoAttr => 1, SuppressEmpty => ''); *\$_ = (\$_{\$_} || []) for keys \%_; 1; # vim: ft=xml __DATA__ . print XML::Simple::XMLout( { map { ( $_ => ( $RV{$_} || [] ) ) } @classes }, RootName => 'InitialData', NoAttr => 1, SuppressEmpty => '', XMLDecl => '', ); __END__ =head1 NAME rt-dump-metadata - dump configuration metadata from an RT database =head1 SYNOPSIS rt-dump-metdata [--all] =head1 DESCRIPTION C is a tool that dumps configuration metadata from the Request Tracker database into XML format, suitable for feeding into C. To dump and load a full RT database, you should generally use the native database tools instead, as well as performing any necessary steps from UPGRADING. This is NOT a tool for backing up an RT database. See also L for more straightforward means of importing data. =head1 OPTIONS =over =item C<--all> or C<-a> When run with C<--all>, the dump will include all configuration metadata; otherwise, the metadata dump will only include 'local' configuration changes, i.e. those done manually in the web interface. =item C<--limit-to-privileged> or C<-l> Causes the dumper to only dump privileged users. =item C<--skip-disabled> or C<-s> Ignores disabled rows in the database. =back =cut rt-4.2.12/sbin/rt-dump-metadata.in000644 000765 000024 00000025631 12555754775 017343 0ustar00sartakstaff000000 000000 #!@PERL@ -w # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # As we specify that XML is UTF-8 and we output it to STDOUT, we must be sure # it is UTF-8 so further XMLin will not break binmode( STDOUT, ":utf8" ); # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT::Interface::CLI qw(Init); my %opt; Init( \%opt, "limit-to-privileged|l", "skip-disabled|s", "all|a", ); require XML::Simple; my %RV; my %Ignore = ( All => [ qw( id Created Creator LastUpdated LastUpdatedBy ) ], ); my $SystemUserId = RT->SystemUser->Id; my @classes = qw( Users Groups Queues ScripActions ScripConditions Templates Scrips ACL CustomFields ); foreach my $class (@classes) { my $objects = "RT::$class"->new( RT->SystemUser ); $objects->{find_disabled_rows} = 1 unless $opt{'skip-disabled'}; $objects->UnLimit; $objects->LimitToPrivileged if $class eq 'Users' && $opt{'limit-to-privileged'}; $objects->Limit( FIELD => 'Domain', OPERATOR => '=', VALUE => 'UserDefined', CASESENSITIVE => 0, ) if $class eq 'Groups'; if ( $class eq 'CustomFields' ) { $objects->OrderByCols( { FIELD => 'LookupType' }, { FIELD => 'SortOrder' }, { FIELD => 'Id' }, ); } else { $objects->OrderBy( FIELD => 'Id' ); } unless ($opt{all}) { next if $class eq 'ACL'; # XXX - would go into infinite loop - XXX $objects->Limit( FIELD => 'LastUpdatedBy', OPERATOR => '!=', VALUE => $SystemUserId ) unless $class eq 'Groups'; $objects->Limit( FIELD => 'Id', OPERATOR => '!=', VALUE => $SystemUserId ) if $class eq 'Users'; } my %fields; OBJECT: while ( my $obj = $objects->Next ) { next if $obj->can('LastUpdatedBy') and $obj->LastUpdatedBy == $SystemUserId; if ( !%fields ) { %fields = map { $_ => 1 } keys %{ $obj->_ClassAccessible }; delete @fields{ @{ $Ignore{$class} ||= [] }, @{ $Ignore{All} ||= [] }, }; } my $rv; if ( $class ne 'ACL' ) { # next if $obj-> # skip default names foreach my $field ( sort keys %fields ) { my $value = $obj->__Value($field); $rv->{$field} = $value if ( defined($value) && length($value) ); } delete $rv->{Disabled} unless $rv->{Disabled}; foreach my $record ( map { /ACL/ ? 'ACE' : substr( $_, 0, -1 ) } @classes ) { foreach my $key ( map "$record$_", ( '', 'Id' ) ) { next unless exists $rv->{$key}; my $id = $rv->{$key} or next; next unless $id =~ /^\d+$/; my $obj = "RT::$record"->new( RT->SystemUser ); $obj->LoadByCols( Id => $id ) or next; $rv->{$key} = $obj->__Value('Name') || 0; } } if ( $class eq 'Users' and defined $obj->Privileged ) { $rv->{Privileged} = int( $obj->Privileged ); } elsif ( $class eq 'CustomFields' ) { my $values = $obj->Values; while ( my $value = $values->Next ) { push @{ $rv->{Values} }, { map { ( $_ => $value->__Value($_) ) } qw( Name Description SortOrder ), }; } if ( $obj->LookupType eq 'RT::Queue-RT::Ticket' ) { # XXX-TODO: unused CF's turn into global CF when importing # as the sub InsertData in RT::Handle creates a global CF # when no queue is specified. $rv->{Queue} = []; my $applies = $obj->AppliedTo; while ( my $queue = $applies->Next ) { push @{ $rv->{Queue} }, $queue->Name; } } } } else { # 1) pick the right $rv->{Right} = $obj->RightName; # 2) Pick a level: Granted on Queue, CF, CF+Queue, or Globally? for ( $obj->ObjectType ) { if ( /^RT::Queue$/ ) { next OBJECT if $opt{'skip-disabled'} && $obj->Object->Disabled; $rv->{Queue} = $obj->Object->Name; } elsif ( /^RT::CustomField$/ ) { next OBJECT if $opt{'skip-disabled'} && $obj->Object->Disabled; $rv->{CF} = $obj->Object->Name; } elsif ( /^RT::Group$/ ) { # No support for RT::Group ACLs in RT::Handle yet. next OBJECT; } elsif ( /^RT::System$/ ) { # skip setting anything on $rv; # "Specifying none of the above will get you a global right." } } # 3) Pick a Principal; User or Group or Role if ( $obj->PrincipalType eq 'Group' ) { next OBJECT if $opt{'skip-disabled'} && $obj->PrincipalObj->Disabled; my $group = $obj->PrincipalObj->Object; for ( $group->Domain ) { # An internal user group if ( /^SystemInternal$/ ) { $rv->{GroupDomain} = $group->Domain; $rv->{GroupType} = $group->Name; } # An individual user elsif ( /^ACLEquivalence$/ ) { my $member = $group->MembersObj->Next->MemberObj; next OBJECT if $opt{'skip-disabled'} && $member->Disabled; $rv->{UserId} = $member->Object->Name; } # A group you created elsif ( /^UserDefined$/ ) { $rv->{GroupDomain} = 'UserDefined'; $rv->{GroupId} = $group->Name; } } } else { $rv->{GroupType} = $obj->PrincipalType; # A system-level role if ( $obj->ObjectType eq 'RT::System' ) { $rv->{GroupDomain} = 'RT::System-Role'; } # A queue-level role elsif ( $obj->ObjectType eq 'RT::Queue' ) { $rv->{GroupDomain} = 'RT::Queue-Role'; } } } if ( RT::Attributes->require ) { my $attributes = $obj->Attributes; while ( my $attribute = $attributes->Next ) { my $content = $attribute->Content; if ( $class eq 'Users' and $attribute->Name eq 'Bookmarks' ) { next; } $rv->{Attributes}{ $attribute->Name } = $content if length($content); } } push @{ $RV{$class} }, $rv; } } print(<< "."); no strict; use XML::Simple; *_ = XMLin(do { local \$/; readline(DATA) }, ForceArray => [qw( @classes Values )], NoAttr => 1, SuppressEmpty => ''); *\$_ = (\$_{\$_} || []) for keys \%_; 1; # vim: ft=xml __DATA__ . print XML::Simple::XMLout( { map { ( $_ => ( $RV{$_} || [] ) ) } @classes }, RootName => 'InitialData', NoAttr => 1, SuppressEmpty => '', XMLDecl => '', ); __END__ =head1 NAME rt-dump-metadata - dump configuration metadata from an RT database =head1 SYNOPSIS rt-dump-metdata [--all] =head1 DESCRIPTION C is a tool that dumps configuration metadata from the Request Tracker database into XML format, suitable for feeding into C. To dump and load a full RT database, you should generally use the native database tools instead, as well as performing any necessary steps from UPGRADING. This is NOT a tool for backing up an RT database. See also L for more straightforward means of importing data. =head1 OPTIONS =over =item C<--all> or C<-a> When run with C<--all>, the dump will include all configuration metadata; otherwise, the metadata dump will only include 'local' configuration changes, i.e. those done manually in the web interface. =item C<--limit-to-privileged> or C<-l> Causes the dumper to only dump privileged users. =item C<--skip-disabled> or C<-s> Ignores disabled rows in the database. =back =cut rt-4.2.12/sbin/rt-email-dashboards000754 000765 000024 00000010745 12562703633 017375 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } # Read in the options my %opts; use Getopt::Long; GetOptions( \%opts, "help|h", "dryrun", "time=i", "epoch=i", "all" ); if ($opts{'help'}) { require Pod::Usage; print Pod::Usage::pod2usage(-verbose => 2); exit; } require RT; require RT::Interface::CLI; RT::Interface::CLI->import(qw{ loc }); # Load the config file RT::LoadConfig(); # Connect to the database and get RT::SystemUser and RT::Nobody loaded RT::Init(); require RT::Dashboard::Mailer; RT::Dashboard::Mailer->MailDashboards( All => $opts{all}, DryRun => $opts{dryrun}, Time => ($opts{time} || $opts{epoch} || time), # epoch is the old-style Opts => \%opts, ); =head1 NAME rt-email-dashboards - Send email dashboards =head1 SYNOPSIS rt-email-dashboards [options] =head1 DESCRIPTION This tool will send users email based on how they have subscribed to dashboards. A dashboard is a set of saved searches, the subscription controls how often that dashboard is sent and how it's displayed. Each subscription has an hour, and possibly day of week or day of month. These are taken to be in the user's timezone if available, UTC otherwise. =head1 SETUP You'll need to have cron run this script every hour. Here's an example crontab entry to do this. 0 * * * * /opt/rt4/sbin/rt-email-dashboards This will run the script every hour on the hour. This may need some further tweaking to be run as the correct user. =head1 OPTIONS This tool supports a few options. Most are for debugging. =over 8 =item -h =item --help Display this documentation =item --dryrun Figure out which dashboards would be sent, but don't actually generate or email any of them =item --time SECONDS Instead of using the current time to figure out which dashboards should be sent, use SECONDS (usually since midnight Jan 1st, 1970, so C<1192216018> would be Oct 12 19:06:58 GMT 2007). =item --epoch SECONDS Back-compat for --time SECONDS. =item --all Ignore subscription frequency when considering each dashboard (should only be used with --dryrun for testing and debugging) =back =cut rt-4.2.12/sbin/rt-email-dashboards.in000644 000765 000024 00000010762 12555754775 020016 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } # Read in the options my %opts; use Getopt::Long; GetOptions( \%opts, "help|h", "dryrun", "time=i", "epoch=i", "all" ); if ($opts{'help'}) { require Pod::Usage; print Pod::Usage::pod2usage(-verbose => 2); exit; } require RT; require RT::Interface::CLI; RT::Interface::CLI->import(qw{ loc }); # Load the config file RT::LoadConfig(); # Connect to the database and get RT::SystemUser and RT::Nobody loaded RT::Init(); require RT::Dashboard::Mailer; RT::Dashboard::Mailer->MailDashboards( All => $opts{all}, DryRun => $opts{dryrun}, Time => ($opts{time} || $opts{epoch} || time), # epoch is the old-style Opts => \%opts, ); =head1 NAME rt-email-dashboards - Send email dashboards =head1 SYNOPSIS rt-email-dashboards [options] =head1 DESCRIPTION This tool will send users email based on how they have subscribed to dashboards. A dashboard is a set of saved searches, the subscription controls how often that dashboard is sent and how it's displayed. Each subscription has an hour, and possibly day of week or day of month. These are taken to be in the user's timezone if available, UTC otherwise. =head1 SETUP You'll need to have cron run this script every hour. Here's an example crontab entry to do this. 0 * * * * @RT_SBIN_PATH_R@/rt-email-dashboards This will run the script every hour on the hour. This may need some further tweaking to be run as the correct user. =head1 OPTIONS This tool supports a few options. Most are for debugging. =over 8 =item -h =item --help Display this documentation =item --dryrun Figure out which dashboards would be sent, but don't actually generate or email any of them =item --time SECONDS Instead of using the current time to figure out which dashboards should be sent, use SECONDS (usually since midnight Jan 1st, 1970, so C<1192216018> would be Oct 12 19:06:58 GMT 2007). =item --epoch SECONDS Back-compat for --time SECONDS. =item --all Ignore subscription frequency when considering each dashboard (should only be used with --dryrun for testing and debugging) =back =cut rt-4.2.12/sbin/rt-email-digest000754 000765 000024 00000027253 12562703633 016544 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use warnings; use strict; BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use Date::Format qw( strftime ); use Getopt::Long; use RT; use RT::Interface::CLI qw( loc ); use RT::Interface::Email; RT::LoadConfig(); RT::Init(); sub usage { my ($error) = @_; print loc("Usage:") . " $0 -m (daily|weekly) [--print] [--help]\n"; print loc( "[_1] is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest.", $0 ) . "\n"; print "\n\t-m, --mode\t" . loc("Specify whether this is a daily or weekly run.") . "\n"; print "\t-p, --print\t" . loc("Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent") . "\n"; print "\t-v, --verbose\t" . loc("Give output even on messages successfully sent") . "\n"; print "\t-h, --help\t" . loc("Print this message") . "\n"; if ( $error eq 'help' ) { exit 0; } else { print loc("Error") . ": " . loc($error) . "\n"; exit 1; } } my ( $frequency, $print, $verbose, $help ) = ( '', '', '', '' ); GetOptions( 'mode=s' => \$frequency, 'print' => \$print, 'verbose' => \$verbose, 'help' => \$help, ); usage('help') if $help; usage("Mode argument must be 'daily' or 'weekly'") unless $frequency =~ /^(daily|weekly)$/; run( $frequency, $print ); sub run { my $frequency = shift; my $print = shift; ## Find all the tickets that have been modified within the time frame ## described by $frequency. my ( $all_digest, $sent_transactions ) = find_transactions($frequency); ## Iterate through our huge hash constructing the digest message ## for each user and sending it. foreach my $user ( keys %$all_digest ) { my ( $contents_list, $contents_body ) = build_digest_for_user( $user, $all_digest->{$user} ); # Now we have a content head and a content body. We can send a message. if ( send_digest( $user, $contents_list, $contents_body ) ) { print "Sent message to $user\n" if $verbose; mark_transactions_sent( $frequency, $user, values %{$sent_transactions->{$user}} ) unless ($print); } else { print "Failed to send message to $user\n"; } } } exit 0; # Subroutines. sub send_digest { my ( $to, $index, $messages ) = @_; # Combine the index and the messages. my $body = "============== Tickets with activity in the last " . ( $frequency eq 'daily' ? "day" : "seven days" ) . "\n\n"; $body .= $index; $body .= "\n\n============== Messages recorded in the last " . ( $frequency eq 'daily' ? "day" : "seven days" ) . "\n\n"; $body .= $messages; # Load our template. If we cannot load the template, abort # immediately rather than failing through many loops. my $digest_template = RT::Template->new( RT->SystemUser ); my ( $ret, $msg ) = $digest_template->Load('Email Digest'); unless ($ret) { print loc("Failed to load template") . " 'Email Digest': " . $msg . ". Cannot continue.\n"; exit 1; } ( $ret, $msg ) = $digest_template->Parse( Argument => $body ); unless ($ret) { print loc("Failed to parse template") . " 'Email Digest'. Cannot continue.\n"; exit 1; } # Set our sender and recipient. $digest_template->MIMEObj->head->replace( 'From', Encode::encode( "UTF-8", RT::Config->Get('CorrespondAddress') ) ); $digest_template->MIMEObj->head->replace( 'To', Encode::encode( "UTF-8", $to ) ); if ($print) { $digest_template->MIMEObj->print; return 1; } else { return RT::Interface::Email::SendEmail( Entity => $digest_template->MIMEObj) } } # =item mark_transactions_sent( $frequency, $user, @txn_list ); # # Takes a frequency string (either 'daily' or 'weekly'), a user and one or more # transaction objects as its arguments. Marks the given deferred # notifications as sent. # # =cut sub mark_transactions_sent { my ( $freq, $user, @txns ) = @_; return unless $freq =~ /(daily|weekly)/; return unless @txns; foreach my $txn (@txns) { # Grab the attribute, mark the "sent" as true, and store the new # value. if ( my $attr = $txn->FirstAttribute('DeferredRecipients') ) { my $deferred = $attr->Content; $deferred->{$freq}->{$user}->{'_sent'} = 1; $txn->SetAttribute( Name => 'DeferredRecipients', Description => 'Deferred recipients for this message', Content => $deferred, ); } } } sub since_date { my $frequency = shift; # Specify a short time for digest overlap, in case we aren't starting # this process exactly on time. my $OVERLAP_HEDGE = -30; my $since_date = RT::Date->new( RT->SystemUser ); $since_date->Set( Format => 'unix', Value => time() ); if ( $frequency eq 'daily' ) { $since_date->AddDays(-1); } else { $since_date->AddDays(-7); } $since_date->AddSeconds($OVERLAP_HEDGE); return $since_date; } sub find_transactions { my $frequency = shift; my $since_date = since_date($frequency); my $txns = RT::Transactions->new( RT->SystemUser ); # First limit to recent transactions. $txns->Limit( FIELD => 'Created', OPERATOR => '>', VALUE => $since_date->ISO ); # Next limit to ticket transactions. $txns->Limit( FIELD => 'ObjectType', OPERATOR => '=', VALUE => 'RT::Ticket', ENTRYAGGREGATOR => 'AND' ); my $all_digest = {}; my $sent_transactions = {}; while ( my $txn = $txns->Next ) { my $ticket = $txn->Ticket; my $queue = $txn->TicketObj->QueueObj->Name; # Xxx todo - may clobber if two queues have the same name foreach my $user ( $txn->DeferredRecipients($frequency) ) { $all_digest->{$user}->{$queue}->{$ticket}->{ $txn->id } = $txn; $sent_transactions->{$user}->{ $txn->id } = $txn; } } return ( $all_digest, $sent_transactions ); } sub build_digest_for_user { my $user = shift; my $user_digest = shift; my $contents_list = ''; # Holds the digest index. my $contents_body = ''; # Holds the digest body. # Has the user been disabled since a message was deferred on his/her # behalf? my $user_obj = RT::User->new( RT->SystemUser ); $user_obj->LoadByEmail($user); if ( $user_obj->PrincipalObj->Disabled ) { print STDERR loc("Skipping disabled user") . " $user\n"; next; } print loc("Message for user") . " $user:\n\n" if $print; foreach my $queue ( keys %$user_digest ) { $contents_list .= "Queue $queue:\n"; $contents_body .= "Queue $queue:\n"; foreach my $ticket ( sort keys %{ $user_digest->{$queue} } ) { my $tkt_txns = $user_digest->{$queue}->{$ticket}; my $ticket_obj = RT::Ticket->new( RT->SystemUser ); $ticket_obj->Load($ticket); # Spit out the index entry for this ticket. my $ticket_title = sprintf( "#%d %s [%s]\t%s\n", $ticket, $ticket_obj->Status, $ticket_obj->OwnerObj->Name, $ticket_obj->Subject ); $contents_list .= $ticket_title; # Spit out the messages for the transactions on this ticket. $contents_body .= "\n== $ticket_title\n"; foreach my $txn ( sort keys %$tkt_txns ) { my $top = $tkt_txns->{$txn}->Attachments->First; # $top contains the top-most RT::Attachment with our # outgoing message. It may not be the MIME part with # the content. Print a few headers from it for # clarity's sake. $contents_body .= "From: " . $top->GetHeader('From') . "\n"; my $date = $top->GetHeader('Date '); unless ($date) { my $txn_obj = RT::Transaction->new( RT->SystemUser ); $txn_obj->Load($txn); my $date_obj = RT::Date->new( RT->SystemUser ); $date_obj->Set( Format => 'sql', Value => $txn_obj->Created ); $date = strftime( '%a, %d %b %Y %H:%M:%S %z', @{ [ localtime( $date_obj->Unix ) ] } ); } $contents_body .= "Date: $date\n\n"; $contents_body .= $tkt_txns->{$txn}->ContentObj->Content . "\n"; $contents_body .= "-------\n"; } # foreach transaction } # foreach ticket } # foreach queue return ( $contents_list, $contents_body ); } __END__ =head1 NAME rt-email-digest - dispatch deferred notifications as a per-user digest =head1 SYNOPSIS rt-email-digest -m (daily|weekly) [--print] [--help] =head1 DESCRIPTION This script is a tool to dispatch all deferred RT notifications as a per-user object. =head1 OPTIONS =over =item mode Specify whether this is a daily or weekly run. --mode is equal to -m =item print Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent --print is equal to -p =item help Print this message --help is equal to -h =back rt-4.2.12/sbin/rt-email-digest.in000644 000765 000024 00000027265 12555754775 017171 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use warnings; use strict; BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use Date::Format qw( strftime ); use Getopt::Long; use RT; use RT::Interface::CLI qw( loc ); use RT::Interface::Email; RT::LoadConfig(); RT::Init(); sub usage { my ($error) = @_; print loc("Usage:") . " $0 -m (daily|weekly) [--print] [--help]\n"; print loc( "[_1] is a utility, meant to be run from cron, that dispatches all deferred RT notifications as a per-user digest.", $0 ) . "\n"; print "\n\t-m, --mode\t" . loc("Specify whether this is a daily or weekly run.") . "\n"; print "\t-p, --print\t" . loc("Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent") . "\n"; print "\t-v, --verbose\t" . loc("Give output even on messages successfully sent") . "\n"; print "\t-h, --help\t" . loc("Print this message") . "\n"; if ( $error eq 'help' ) { exit 0; } else { print loc("Error") . ": " . loc($error) . "\n"; exit 1; } } my ( $frequency, $print, $verbose, $help ) = ( '', '', '', '' ); GetOptions( 'mode=s' => \$frequency, 'print' => \$print, 'verbose' => \$verbose, 'help' => \$help, ); usage('help') if $help; usage("Mode argument must be 'daily' or 'weekly'") unless $frequency =~ /^(daily|weekly)$/; run( $frequency, $print ); sub run { my $frequency = shift; my $print = shift; ## Find all the tickets that have been modified within the time frame ## described by $frequency. my ( $all_digest, $sent_transactions ) = find_transactions($frequency); ## Iterate through our huge hash constructing the digest message ## for each user and sending it. foreach my $user ( keys %$all_digest ) { my ( $contents_list, $contents_body ) = build_digest_for_user( $user, $all_digest->{$user} ); # Now we have a content head and a content body. We can send a message. if ( send_digest( $user, $contents_list, $contents_body ) ) { print "Sent message to $user\n" if $verbose; mark_transactions_sent( $frequency, $user, values %{$sent_transactions->{$user}} ) unless ($print); } else { print "Failed to send message to $user\n"; } } } exit 0; # Subroutines. sub send_digest { my ( $to, $index, $messages ) = @_; # Combine the index and the messages. my $body = "============== Tickets with activity in the last " . ( $frequency eq 'daily' ? "day" : "seven days" ) . "\n\n"; $body .= $index; $body .= "\n\n============== Messages recorded in the last " . ( $frequency eq 'daily' ? "day" : "seven days" ) . "\n\n"; $body .= $messages; # Load our template. If we cannot load the template, abort # immediately rather than failing through many loops. my $digest_template = RT::Template->new( RT->SystemUser ); my ( $ret, $msg ) = $digest_template->Load('Email Digest'); unless ($ret) { print loc("Failed to load template") . " 'Email Digest': " . $msg . ". Cannot continue.\n"; exit 1; } ( $ret, $msg ) = $digest_template->Parse( Argument => $body ); unless ($ret) { print loc("Failed to parse template") . " 'Email Digest'. Cannot continue.\n"; exit 1; } # Set our sender and recipient. $digest_template->MIMEObj->head->replace( 'From', Encode::encode( "UTF-8", RT::Config->Get('CorrespondAddress') ) ); $digest_template->MIMEObj->head->replace( 'To', Encode::encode( "UTF-8", $to ) ); if ($print) { $digest_template->MIMEObj->print; return 1; } else { return RT::Interface::Email::SendEmail( Entity => $digest_template->MIMEObj) } } # =item mark_transactions_sent( $frequency, $user, @txn_list ); # # Takes a frequency string (either 'daily' or 'weekly'), a user and one or more # transaction objects as its arguments. Marks the given deferred # notifications as sent. # # =cut sub mark_transactions_sent { my ( $freq, $user, @txns ) = @_; return unless $freq =~ /(daily|weekly)/; return unless @txns; foreach my $txn (@txns) { # Grab the attribute, mark the "sent" as true, and store the new # value. if ( my $attr = $txn->FirstAttribute('DeferredRecipients') ) { my $deferred = $attr->Content; $deferred->{$freq}->{$user}->{'_sent'} = 1; $txn->SetAttribute( Name => 'DeferredRecipients', Description => 'Deferred recipients for this message', Content => $deferred, ); } } } sub since_date { my $frequency = shift; # Specify a short time for digest overlap, in case we aren't starting # this process exactly on time. my $OVERLAP_HEDGE = -30; my $since_date = RT::Date->new( RT->SystemUser ); $since_date->Set( Format => 'unix', Value => time() ); if ( $frequency eq 'daily' ) { $since_date->AddDays(-1); } else { $since_date->AddDays(-7); } $since_date->AddSeconds($OVERLAP_HEDGE); return $since_date; } sub find_transactions { my $frequency = shift; my $since_date = since_date($frequency); my $txns = RT::Transactions->new( RT->SystemUser ); # First limit to recent transactions. $txns->Limit( FIELD => 'Created', OPERATOR => '>', VALUE => $since_date->ISO ); # Next limit to ticket transactions. $txns->Limit( FIELD => 'ObjectType', OPERATOR => '=', VALUE => 'RT::Ticket', ENTRYAGGREGATOR => 'AND' ); my $all_digest = {}; my $sent_transactions = {}; while ( my $txn = $txns->Next ) { my $ticket = $txn->Ticket; my $queue = $txn->TicketObj->QueueObj->Name; # Xxx todo - may clobber if two queues have the same name foreach my $user ( $txn->DeferredRecipients($frequency) ) { $all_digest->{$user}->{$queue}->{$ticket}->{ $txn->id } = $txn; $sent_transactions->{$user}->{ $txn->id } = $txn; } } return ( $all_digest, $sent_transactions ); } sub build_digest_for_user { my $user = shift; my $user_digest = shift; my $contents_list = ''; # Holds the digest index. my $contents_body = ''; # Holds the digest body. # Has the user been disabled since a message was deferred on his/her # behalf? my $user_obj = RT::User->new( RT->SystemUser ); $user_obj->LoadByEmail($user); if ( $user_obj->PrincipalObj->Disabled ) { print STDERR loc("Skipping disabled user") . " $user\n"; next; } print loc("Message for user") . " $user:\n\n" if $print; foreach my $queue ( keys %$user_digest ) { $contents_list .= "Queue $queue:\n"; $contents_body .= "Queue $queue:\n"; foreach my $ticket ( sort keys %{ $user_digest->{$queue} } ) { my $tkt_txns = $user_digest->{$queue}->{$ticket}; my $ticket_obj = RT::Ticket->new( RT->SystemUser ); $ticket_obj->Load($ticket); # Spit out the index entry for this ticket. my $ticket_title = sprintf( "#%d %s [%s]\t%s\n", $ticket, $ticket_obj->Status, $ticket_obj->OwnerObj->Name, $ticket_obj->Subject ); $contents_list .= $ticket_title; # Spit out the messages for the transactions on this ticket. $contents_body .= "\n== $ticket_title\n"; foreach my $txn ( sort keys %$tkt_txns ) { my $top = $tkt_txns->{$txn}->Attachments->First; # $top contains the top-most RT::Attachment with our # outgoing message. It may not be the MIME part with # the content. Print a few headers from it for # clarity's sake. $contents_body .= "From: " . $top->GetHeader('From') . "\n"; my $date = $top->GetHeader('Date '); unless ($date) { my $txn_obj = RT::Transaction->new( RT->SystemUser ); $txn_obj->Load($txn); my $date_obj = RT::Date->new( RT->SystemUser ); $date_obj->Set( Format => 'sql', Value => $txn_obj->Created ); $date = strftime( '%a, %d %b %Y %H:%M:%S %z', @{ [ localtime( $date_obj->Unix ) ] } ); } $contents_body .= "Date: $date\n\n"; $contents_body .= $tkt_txns->{$txn}->ContentObj->Content . "\n"; $contents_body .= "-------\n"; } # foreach transaction } # foreach ticket } # foreach queue return ( $contents_list, $contents_body ); } __END__ =head1 NAME rt-email-digest - dispatch deferred notifications as a per-user digest =head1 SYNOPSIS rt-email-digest -m (daily|weekly) [--print] [--help] =head1 DESCRIPTION This script is a tool to dispatch all deferred RT notifications as a per-user object. =head1 OPTIONS =over =item mode Specify whether this is a daily or weekly run. --mode is equal to -m =item print Print the resulting digest messages to STDOUT; don't mail them. Do not mark them as sent --print is equal to -p =item help Print this message --help is equal to -h =back rt-4.2.12/sbin/rt-email-group-admin000754 000765 000024 00000032276 12562703633 017510 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} =head1 NAME rt-email-group-admin - Command line tool for administrating NotifyGroup actions =head1 SYNOPSIS rt-email-group-admin --list rt-email-group-admin --create 'Notify foo team' --group Foo rt-email-group-admin --create 'Notify foo team as comment' --comment --group Foo rt-email-group-admin --create 'Notify group Foo and Bar' --group Foo --group Bar rt-email-group-admin --create 'Notify user foo@bar.com' --user foo@bar.com rt-email-group-admin --create 'Notify VIPs' --user vip1@bar.com rt-email-group-admin --add 'Notify VIPs' --user vip2@bar.com --group vip1 --user vip3@foo.com rt-email-group-admin --rename 'Notify VIPs' --newname 'Inform VIPs' rt-email-group-admin --switch 'Notify VIPs' rt-email-group-admin --delete 'Notify user foo@bar.com' =head1 DESCRIPTION This script list, create, modify or delete scrip actions in the RT DB. Once you've created an action you can use it in a scrip. For example you can create the following action using this script: rt-email-group-admin --create 'Notify developers' --group 'Development Team' Then you can add the followoing scrip to your Bugs queue: Condition: On Create Action: Notify developers Template: Transaction Stage: TransactionCreate Your development team will be notified on every new ticket in the queue. =cut use warnings; use strict; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use Getopt::Long qw(GetOptions); Getopt::Long::Configure( "pass_through" ); our $cmd = 'usage'; our $opts = {}; sub parse_args { my $tmp; if ( GetOptions( 'list' => \$tmp ) && $tmp ) { $cmd = 'list'; } elsif ( GetOptions( 'create=s' => \$tmp ) && $tmp ) { $cmd = 'create'; $opts->{'name'} = $tmp; $opts->{'groups'} = []; $opts->{'users'} = []; GetOptions( 'comment' => \$opts->{'comment'} ); GetOptions( 'group:s@' => $opts->{'groups'} ); GetOptions( 'user:s@' => $opts->{'users'} ); unless ( @{ $opts->{'users'} } + @{ $opts->{'groups'} } ) { usage(); exit(-1); } } elsif ( GetOptions( 'add=s' => \$tmp ) && $tmp ) { $cmd = 'add'; $opts->{'name'} = $tmp; $opts->{'groups'} = []; $opts->{'users'} = []; GetOptions( 'group:s@' => $opts->{'groups'} ); GetOptions( 'user:s@' => $opts->{'users'} ); unless ( @{ $opts->{'users'} } + @{ $opts->{'groups'} } ) { usage(); exit(-1); } } elsif ( GetOptions( 'switch=s' => \$tmp ) && $tmp ) { $cmd = 'switch'; $opts->{'name'} = $tmp; } elsif ( GetOptions( 'rename=s' => \$tmp ) && $tmp ) { $cmd = 'rename'; $opts->{'name'} = $tmp; GetOptions( 'newname=s' => \$opts->{'newname'} ); unless ( $opts->{'newname'} ) { usage(); exit(-1); } } elsif ( GetOptions( 'delete=s' => \$tmp ) && $tmp) { $cmd = 'delete'; $opts->{'name'} = $tmp; } else { $cmd = 'usage'; } return; } sub usage { require Pod::Usage; Pod::Usage::pod2usage({ verbose => 2 }); } my $help; if ( GetOptions( 'help|h' => \$help ) && $help ) { usage(); exit; } parse_args(); require RT; RT->LoadConfig; RT->Init; require RT::Principal; require RT::User; require RT::Group; require RT::ScripActions; { eval "main::$cmd()"; if ( $@ ) { print STDERR $@ ."\n"; } } exit(0); =head1 USAGE rt-email-group-admin --COMMAND ARGS =head1 COMMANDS =head2 list Lists actions and its descriptions. =cut sub list { my $actions = _get_our_actions(); while( my $a = $actions->Next ) { _list( $a ); } return; } sub _list { my $action = shift; print "Name: ". $action->Name() ."\n"; print "Module: ". $action->ExecModule() ."\n"; my @princ = argument_to_list( $action ); print "Members: \n"; foreach( @princ ) { my $obj = RT::Principal->new( RT->SystemUser ); $obj->Load( $_ ); next unless $obj->id; print "\t". $obj->PrincipalType; print "\t=> ". $obj->Object->Name; print "(Disabled!!!)" if $obj->Disabled; print "\n"; } print "\n"; return; } =head2 create NAME [--comment] [--group GNAME] [--user NAME-OR-EMAIL] Creates new action with NAME and adds users and/or groups to its recipient list. Would be notify as comment if --comment specified. The user, if specified, will be autocreated if necessary. =cut sub create { my $actions = RT::ScripActions->new( RT->SystemUser ); $actions->Limit( FIELD => 'Name', VALUE => $opts->{'name'}, ); if ( $actions->Count ) { print STDERR "ScripAction '". $opts->{'name'} ."' allready exists\n"; exit(-1); } my @groups = _check_groups( @{ $opts->{'groups'} } ); my @users = _check_users( @{ $opts->{'users'} } ); unless ( @users + @groups ) { print STDERR "List of groups and users is empty\n"; exit(-1); } my $action = __create_empty( $opts->{'name'}, $opts->{'comment'} ); __add( $action, $_ ) foreach( @users ); __add( $action, $_ ) foreach( @groups ); return; } sub __create_empty { my $name = shift; my $as_comment = shift || 0; require RT::ScripAction; my $action = RT::ScripAction->new( RT->SystemUser ); $action->Create( Name => $name, Description => "Created with rt-email-group-admin script", ExecModule => $as_comment? 'NotifyGroupAsComment': 'NotifyGroup', Argument => '', ); return $action; } sub _check_groups { return map {$_->[1]} grep { $_->[1] ? 1: do { print STDERR "Group '$_->[0]' skipped, doesn't exist\n"; 0; } } map { [$_, __check_group($_)] } @_; } sub __check_group { my $instance = shift; require RT::Group; my $obj = RT::Group->new( RT->SystemUser ); $obj->LoadUserDefinedGroup( $instance ); return $obj->id ? $obj : undef; } sub _check_users { return map {$_->[1]} grep { $_->[1] ? 1: do { print STDERR "User '$_->[0]' skipped, doesn't exist and couldn't autocreate\n"; 0; } } map { [$_, __check_user($_)] } @_; } sub __check_user { my $instance = shift; require RT::User; my $obj = RT::User->new( RT->SystemUser ); $obj->Load( $instance ); $obj->LoadByEmail( $instance ) if not $obj->id and $instance =~ /@/; unless ($obj->id) { my ($ok, $msg) = $obj->Create( Name => $instance, EmailAddress => $instance, Privileged => 0, Comments => 'Autocreated when added to notify action via rt-email-group-admin', ); print STDERR "Autocreate of user '$instance' failed: $msg\n" unless $ok; } return $obj->id ? $obj : undef; } =head2 add NAME [--group GNAME] [--user NAME-OR-EMAIL] Adds groups and/or users to recipients of the action NAME. The user, if specified, will be autocreated if necessary. =cut sub add { my $action = _get_action_by_name( $opts->{'name'} ); unless ( $action ) { print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n"; exit(-1); } my @groups = _check_groups( @{ $opts->{'groups'} } ); my @users = _check_users( @{ $opts->{'users'} } ); unless ( @users + @groups ) { print STDERR "List of groups and users is empty\n"; exit(-1); } __add( $action, $_ ) foreach @users; __add( $action, $_ ) foreach @groups; return; } sub __add { my $action = shift; my $obj = shift; my @cur = argument_to_list( $action ); my $id = $obj->id; return if grep $_ == $id, @cur; push @cur, $id; return $action->__Set( Field => 'Argument', Value => join(',', @cur) ); } =head2 delete NAME Deletes action NAME if scrips doesn't use it. =cut sub delete { my $action = _get_action_by_name( $opts->{'name'} ); unless ( $action ) { print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n"; exit(-1); } require RT::Scrips; my $scrips = RT::Scrips->new( RT->SystemUser ); $scrips->Limit( FIELD => 'ScripAction', VALUE => $action->id ); $scrips->FindAllRows; if ( $scrips->Count ) { my @sid; while( my $s = $scrips->Next ) { push @sid, $s->id; } print STDERR "ScripAction '". $opts->{'name'} ."'" . " is in use by Scrip(s) ". join( ", ", map "#$_", @sid ) . "\n"; exit(-1); } return __delete( $action ); } sub __delete { require DBIx::SearchBuilder::Record; return DBIx::SearchBuilder::Record::Delete( shift ); } sub _get_action_by_name { my $name = shift; my $actions = _get_our_actions(); $actions->Limit( FIELD => 'Name', VALUE => $name ); if ( $actions->Count > 1 ) { print STDERR "More then one ScripAction with name '$name'\n"; } return $actions->First; } =head2 switch NAME Switch action NAME from notify as correspondence to comment and back. =cut sub switch { my $action = _get_action_by_name( $opts->{'name'} ); unless ( $action ) { print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n"; exit(-1); } my %h = ( NotifyGroup => 'NotifyGroupAsComment', NotifyGroupAsComment => 'NotifyGroup' ); return $action->__Set( Field => 'ExecModule', Value => $h{ $action->ExecModule } ); } =head2 rename NAME --newname NEWNAME Renames action NAME to NEWNAME. =cut sub rename { my $action = _get_action_by_name( $opts->{'name'} ); unless ( $action ) { print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n"; exit(-1); } my $actions = RT::ScripActions->new( RT->SystemUser ); $actions->Limit( FIELD => 'Name', VALUE => $opts->{'newname'} ); if ( $actions->Count ) { print STDERR "ScripAction '". $opts->{'newname'} ."' allready exists\n"; exit(-1); } return $action->__Set( Field => 'Name', Value => $opts->{'newname'}, ); } =head2 NOTES If command has option --group or --user then you can use it more then once, if other is not specified. =cut ############### #### Utils #### ############### sub argument_to_list { my $action = shift; require RT::Action::NotifyGroup; return RT::Action::NotifyGroup->__SplitArg( $action->Argument ); } sub _get_our_actions { my $actions = RT::ScripActions->new( RT->SystemUser ); $actions->Limit( FIELD => 'ExecModule', VALUE => 'NotifyGroup', ENTRYAGGREGATOR => 'OR', ); $actions->Limit( FIELD => 'ExecModule', VALUE => 'NotifyGroupAsComment', ENTRYAGGREGATOR => 'OR', ); return $actions; } =head1 AUTHOR Ruslan U. Zakirov Eruz@bestpractical.comE =head1 SEE ALSO L, L =cut rt-4.2.12/sbin/rt-email-group-admin.in000644 000765 000024 00000032310 12555754775 020117 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} =head1 NAME rt-email-group-admin - Command line tool for administrating NotifyGroup actions =head1 SYNOPSIS rt-email-group-admin --list rt-email-group-admin --create 'Notify foo team' --group Foo rt-email-group-admin --create 'Notify foo team as comment' --comment --group Foo rt-email-group-admin --create 'Notify group Foo and Bar' --group Foo --group Bar rt-email-group-admin --create 'Notify user foo@bar.com' --user foo@bar.com rt-email-group-admin --create 'Notify VIPs' --user vip1@bar.com rt-email-group-admin --add 'Notify VIPs' --user vip2@bar.com --group vip1 --user vip3@foo.com rt-email-group-admin --rename 'Notify VIPs' --newname 'Inform VIPs' rt-email-group-admin --switch 'Notify VIPs' rt-email-group-admin --delete 'Notify user foo@bar.com' =head1 DESCRIPTION This script list, create, modify or delete scrip actions in the RT DB. Once you've created an action you can use it in a scrip. For example you can create the following action using this script: rt-email-group-admin --create 'Notify developers' --group 'Development Team' Then you can add the followoing scrip to your Bugs queue: Condition: On Create Action: Notify developers Template: Transaction Stage: TransactionCreate Your development team will be notified on every new ticket in the queue. =cut use warnings; use strict; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use Getopt::Long qw(GetOptions); Getopt::Long::Configure( "pass_through" ); our $cmd = 'usage'; our $opts = {}; sub parse_args { my $tmp; if ( GetOptions( 'list' => \$tmp ) && $tmp ) { $cmd = 'list'; } elsif ( GetOptions( 'create=s' => \$tmp ) && $tmp ) { $cmd = 'create'; $opts->{'name'} = $tmp; $opts->{'groups'} = []; $opts->{'users'} = []; GetOptions( 'comment' => \$opts->{'comment'} ); GetOptions( 'group:s@' => $opts->{'groups'} ); GetOptions( 'user:s@' => $opts->{'users'} ); unless ( @{ $opts->{'users'} } + @{ $opts->{'groups'} } ) { usage(); exit(-1); } } elsif ( GetOptions( 'add=s' => \$tmp ) && $tmp ) { $cmd = 'add'; $opts->{'name'} = $tmp; $opts->{'groups'} = []; $opts->{'users'} = []; GetOptions( 'group:s@' => $opts->{'groups'} ); GetOptions( 'user:s@' => $opts->{'users'} ); unless ( @{ $opts->{'users'} } + @{ $opts->{'groups'} } ) { usage(); exit(-1); } } elsif ( GetOptions( 'switch=s' => \$tmp ) && $tmp ) { $cmd = 'switch'; $opts->{'name'} = $tmp; } elsif ( GetOptions( 'rename=s' => \$tmp ) && $tmp ) { $cmd = 'rename'; $opts->{'name'} = $tmp; GetOptions( 'newname=s' => \$opts->{'newname'} ); unless ( $opts->{'newname'} ) { usage(); exit(-1); } } elsif ( GetOptions( 'delete=s' => \$tmp ) && $tmp) { $cmd = 'delete'; $opts->{'name'} = $tmp; } else { $cmd = 'usage'; } return; } sub usage { require Pod::Usage; Pod::Usage::pod2usage({ verbose => 2 }); } my $help; if ( GetOptions( 'help|h' => \$help ) && $help ) { usage(); exit; } parse_args(); require RT; RT->LoadConfig; RT->Init; require RT::Principal; require RT::User; require RT::Group; require RT::ScripActions; { eval "main::$cmd()"; if ( $@ ) { print STDERR $@ ."\n"; } } exit(0); =head1 USAGE rt-email-group-admin --COMMAND ARGS =head1 COMMANDS =head2 list Lists actions and its descriptions. =cut sub list { my $actions = _get_our_actions(); while( my $a = $actions->Next ) { _list( $a ); } return; } sub _list { my $action = shift; print "Name: ". $action->Name() ."\n"; print "Module: ". $action->ExecModule() ."\n"; my @princ = argument_to_list( $action ); print "Members: \n"; foreach( @princ ) { my $obj = RT::Principal->new( RT->SystemUser ); $obj->Load( $_ ); next unless $obj->id; print "\t". $obj->PrincipalType; print "\t=> ". $obj->Object->Name; print "(Disabled!!!)" if $obj->Disabled; print "\n"; } print "\n"; return; } =head2 create NAME [--comment] [--group GNAME] [--user NAME-OR-EMAIL] Creates new action with NAME and adds users and/or groups to its recipient list. Would be notify as comment if --comment specified. The user, if specified, will be autocreated if necessary. =cut sub create { my $actions = RT::ScripActions->new( RT->SystemUser ); $actions->Limit( FIELD => 'Name', VALUE => $opts->{'name'}, ); if ( $actions->Count ) { print STDERR "ScripAction '". $opts->{'name'} ."' allready exists\n"; exit(-1); } my @groups = _check_groups( @{ $opts->{'groups'} } ); my @users = _check_users( @{ $opts->{'users'} } ); unless ( @users + @groups ) { print STDERR "List of groups and users is empty\n"; exit(-1); } my $action = __create_empty( $opts->{'name'}, $opts->{'comment'} ); __add( $action, $_ ) foreach( @users ); __add( $action, $_ ) foreach( @groups ); return; } sub __create_empty { my $name = shift; my $as_comment = shift || 0; require RT::ScripAction; my $action = RT::ScripAction->new( RT->SystemUser ); $action->Create( Name => $name, Description => "Created with rt-email-group-admin script", ExecModule => $as_comment? 'NotifyGroupAsComment': 'NotifyGroup', Argument => '', ); return $action; } sub _check_groups { return map {$_->[1]} grep { $_->[1] ? 1: do { print STDERR "Group '$_->[0]' skipped, doesn't exist\n"; 0; } } map { [$_, __check_group($_)] } @_; } sub __check_group { my $instance = shift; require RT::Group; my $obj = RT::Group->new( RT->SystemUser ); $obj->LoadUserDefinedGroup( $instance ); return $obj->id ? $obj : undef; } sub _check_users { return map {$_->[1]} grep { $_->[1] ? 1: do { print STDERR "User '$_->[0]' skipped, doesn't exist and couldn't autocreate\n"; 0; } } map { [$_, __check_user($_)] } @_; } sub __check_user { my $instance = shift; require RT::User; my $obj = RT::User->new( RT->SystemUser ); $obj->Load( $instance ); $obj->LoadByEmail( $instance ) if not $obj->id and $instance =~ /@/; unless ($obj->id) { my ($ok, $msg) = $obj->Create( Name => $instance, EmailAddress => $instance, Privileged => 0, Comments => 'Autocreated when added to notify action via rt-email-group-admin', ); print STDERR "Autocreate of user '$instance' failed: $msg\n" unless $ok; } return $obj->id ? $obj : undef; } =head2 add NAME [--group GNAME] [--user NAME-OR-EMAIL] Adds groups and/or users to recipients of the action NAME. The user, if specified, will be autocreated if necessary. =cut sub add { my $action = _get_action_by_name( $opts->{'name'} ); unless ( $action ) { print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n"; exit(-1); } my @groups = _check_groups( @{ $opts->{'groups'} } ); my @users = _check_users( @{ $opts->{'users'} } ); unless ( @users + @groups ) { print STDERR "List of groups and users is empty\n"; exit(-1); } __add( $action, $_ ) foreach @users; __add( $action, $_ ) foreach @groups; return; } sub __add { my $action = shift; my $obj = shift; my @cur = argument_to_list( $action ); my $id = $obj->id; return if grep $_ == $id, @cur; push @cur, $id; return $action->__Set( Field => 'Argument', Value => join(',', @cur) ); } =head2 delete NAME Deletes action NAME if scrips doesn't use it. =cut sub delete { my $action = _get_action_by_name( $opts->{'name'} ); unless ( $action ) { print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n"; exit(-1); } require RT::Scrips; my $scrips = RT::Scrips->new( RT->SystemUser ); $scrips->Limit( FIELD => 'ScripAction', VALUE => $action->id ); $scrips->FindAllRows; if ( $scrips->Count ) { my @sid; while( my $s = $scrips->Next ) { push @sid, $s->id; } print STDERR "ScripAction '". $opts->{'name'} ."'" . " is in use by Scrip(s) ". join( ", ", map "#$_", @sid ) . "\n"; exit(-1); } return __delete( $action ); } sub __delete { require DBIx::SearchBuilder::Record; return DBIx::SearchBuilder::Record::Delete( shift ); } sub _get_action_by_name { my $name = shift; my $actions = _get_our_actions(); $actions->Limit( FIELD => 'Name', VALUE => $name ); if ( $actions->Count > 1 ) { print STDERR "More then one ScripAction with name '$name'\n"; } return $actions->First; } =head2 switch NAME Switch action NAME from notify as correspondence to comment and back. =cut sub switch { my $action = _get_action_by_name( $opts->{'name'} ); unless ( $action ) { print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n"; exit(-1); } my %h = ( NotifyGroup => 'NotifyGroupAsComment', NotifyGroupAsComment => 'NotifyGroup' ); return $action->__Set( Field => 'ExecModule', Value => $h{ $action->ExecModule } ); } =head2 rename NAME --newname NEWNAME Renames action NAME to NEWNAME. =cut sub rename { my $action = _get_action_by_name( $opts->{'name'} ); unless ( $action ) { print STDERR "ScripAction '". $opts->{'name'} ."' doesn't exist\n"; exit(-1); } my $actions = RT::ScripActions->new( RT->SystemUser ); $actions->Limit( FIELD => 'Name', VALUE => $opts->{'newname'} ); if ( $actions->Count ) { print STDERR "ScripAction '". $opts->{'newname'} ."' allready exists\n"; exit(-1); } return $action->__Set( Field => 'Name', Value => $opts->{'newname'}, ); } =head2 NOTES If command has option --group or --user then you can use it more then once, if other is not specified. =cut ############### #### Utils #### ############### sub argument_to_list { my $action = shift; require RT::Action::NotifyGroup; return RT::Action::NotifyGroup->__SplitArg( $action->Argument ); } sub _get_our_actions { my $actions = RT::ScripActions->new( RT->SystemUser ); $actions->Limit( FIELD => 'ExecModule', VALUE => 'NotifyGroup', ENTRYAGGREGATOR => 'OR', ); $actions->Limit( FIELD => 'ExecModule', VALUE => 'NotifyGroupAsComment', ENTRYAGGREGATOR => 'OR', ); return $actions; } =head1 AUTHOR Ruslan U. Zakirov Eruz@bestpractical.comE =head1 SEE ALSO L, L =cut rt-4.2.12/sbin/rt-fulltext-indexer000754 000765 000024 00000026653 12562703633 017506 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; use 5.010; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT -init; use RT::Interface::CLI (); use HTML::Entities; use Getopt::Long qw(GetOptions); my %OPT = ( memory => '2M', limit => 0 ); GetOptions( \%OPT, "help|h!", "debug!", "quiet!", "all!", "limit=i", "memory=s", ); $OPT{limit} ||= 200; RT::Interface::CLI->ShowHelp if $OPT{help}; use Fcntl ':flock'; if ( !flock main::DATA, LOCK_EX | LOCK_NB ) { if ( $OPT{quiet} ) { RT::Logger->info("$0 is already running; aborting silently, as requested"); exit; } else { print STDERR "$0 is already running\n"; exit 1; } } my $db_type = RT->Config->Get('DatabaseType'); my $fts_config = $ENV{RT_FTS_CONFIG} ? JSON::from_json($ENV{RT_FTS_CONFIG}) : RT->Config->Get('FullTextSearch') || {}; unless ( $fts_config->{'Enable'} ) { print STDERR <{'Indexed'} ) { print STDERR <{'IndexName'} || 'rt_fts_index'; $RT::Handle->dbh->do( "begin ctx_ddl.sync_index(?, ?); end;", undef, $index, $OPT{'memory'} ); exit; } elsif ( $fts_config->{Sphinx} ) { print STDERR <{'Table'}; $LAST //= 0; # Fetch in batches of size --limit { # Indexes all text/plain and text/html attachments my $attachments = RT::Attachments->new( RT->SystemUser ); $attachments->Limit( FIELD => 'ContentType', OPERATOR => 'IN', VALUE => ['text/plain', 'text/html'], ); $attachments->Limit( FIELD => 'id', OPERATOR => '>', VALUE => $LAST ); $attachments->OrderBy( FIELD => 'id', ORDER => 'asc' ); $attachments->RowsPerPage( $OPT{'limit'} ); # Call back to the DB-specific part $subref->($attachments); $LAST = $attachments->Last->id if $attachments->Count; redo if $OPT{'all'} and $attachments->Count == $OPT{'limit'}; } } sub process_bulk_insert { my $dbh = $RT::Handle->dbh; my ($statement, $error) = @_; # Doing large inserts is faster than individual statements, but # comes at a parsing cost; cache the statement handles (99% of which # will be the same size) for a notable (2x) speed gain. my %sthandles; $sthandles{1} = $dbh->prepare($statement->(1)); attachment_loop( sub { my ($attachments) = @_; my @insert; my $found = 0; while ( my $a = $attachments->Next ) { debug("Found attachment #". $a->id ); my $text = $a->Content // ""; HTML::Entities::decode_entities($text) if $a->ContentType eq "text/html"; push @insert, $text, $a->id; $found++; } return unless $found; # $found should be the limit size on all but the last go-around. $sthandles{$found} ||= $dbh->prepare($statement->($found)); return if eval { $sthandles{$found}->execute(@insert); }; # We can catch and recover from some errors; re-do row-by-row to # know which row had which errors while (@insert) { my ($content, $id) = splice(@insert,0,2); next if eval { $sthandles{1}->execute($content, $id); }; $error->($id, $content); # If this was a semi-expected error, insert an empty # tsvector, so we count this row as "indexed" for # purposes of knowing where to pick up eval { $sthandles{1}->execute( "", $id ) } or die "Failed to insert empty row for attachment $id: " . $dbh->errstr; } }); } sub process_mysql { my $dbh = $RT::Handle->dbh; my $table = $fts_config->{'Table'}; ($LAST) = $dbh->selectrow_array("SELECT MAX(id) FROM $table"); my $insert = $fts_config->{Engine} eq "MyISAM" ? "INSERT DELAYED" : "INSERT"; process_bulk_insert( sub { my ($n) = @_; return "$insert INTO $table(Content, id) VALUES " . join(", ", ("(?,?)") x $n); }, sub { my ($id) = @_; if ($dbh->err == 1366 and $dbh->state eq "HY000") { warn "Attachment $id cannot be indexed. Most probably it contains invalid UTF8 bytes. ". "Error: ". $dbh->errstr; } else { die "Attachment $id cannot be indexed: " . $dbh->errstr; } } ); } sub process_pg { if ( $fts_config->{'Table'} ne 'Attachments' ) { process_pg_insert(); } else { process_pg_update(); } } sub process_pg_insert { my $dbh = $RT::Handle->dbh; my $table = $fts_config->{'Table'}; my $column = $fts_config->{'Column'}; ($LAST) = $dbh->selectrow_array("SELECT MAX(id) FROM $table"); process_bulk_insert( sub { my ($n) = @_; return "INSERT INTO $table($column, id) VALUES " . join(", ", ("(TO_TSVECTOR(?),?)") x $n); }, sub { my ($id) = @_; if ( $dbh->err == 7 && $dbh->state eq '54000' ) { warn "Attachment $id cannot be indexed. Most probably it contains too many unique words. ". "Error: ". $dbh->errstr; } elsif ( $dbh->err == 7 && $dbh->state eq '22021' ) { warn "Attachment $id cannot be indexed. Most probably it contains invalid UTF8 bytes. ". "Error: ". $dbh->errstr; } else { die "Attachment $id cannot be indexed: " . $dbh->errstr; } } ); } sub process_pg_update { my $dbh = $RT::Handle->dbh; my $column = $fts_config->{'Column'}; ($LAST) = $dbh->selectrow_array("SELECT MAX(id) FROM Attachments WHERE $column IS NOT NULL"); my $sth = $dbh->prepare("UPDATE Attachments SET $column = TO_TSVECTOR(?) WHERE id = ?"); attachment_loop( sub { my ($attachments) = @_; my @insert; while ( my $a = $attachments->Next ) { debug("Found attachment #". $a->id ); my $text = $a->Content // ""; HTML::Entities::decode_entities($text) if $a->ContentType eq "text/html"; push @insert, [$text, $a->id]; } # Try in one database transaction; if it fails, we roll it back # and try one statement at a time. $dbh->begin_work; my $ok = 1; for (@insert) { $ok = eval { $sth->execute( $_->[0], $_->[1] ) }; last unless $ok; } if ($ok) { $dbh->commit; return; } $dbh->rollback; # Things didn't go well. Retry the UPDATE statements one row at # a time, outside of the transaction. for (@insert) { my ($content, $id) = ($_->[0], $_->[1]); next if eval { $sth->execute( $content, $id ) }; if ( $dbh->err == 7 && $dbh->state eq '54000' ) { warn "Attachment $id cannot be indexed. Most probably it contains too many unique words. ". "Error: ". $dbh->errstr; } elsif ( $dbh->err == 7 && $dbh->state eq '22021' ) { warn "Attachment $id cannot be indexed. Most probably it contains invalid UTF8 bytes. ". "Error: ". $dbh->errstr; } else { die "Attachment $id cannot be indexed: " . $dbh->errstr; } # If this was a semi-expected error, insert an empty # tsvector, so we count this row as "indexed" for # purposes of knowing where to pick up eval { $sth->execute( "", $id ) } or die "Failed to insert empty row for attachment $id: " . $dbh->errstr; } }); } # helper functions sub debug { print @_, "\n" if $OPT{debug}; 1 } sub error { $RT::Logger->error(_(@_)); 1 } sub warning { $RT::Logger->warn(_(@_)); 1 } =head1 NAME rt-fulltext-indexer - Indexer for full text search =head1 DESCRIPTION This is a helper script to keep full text indexes in sync with data. Read F for complete details on how and when to run it. =cut __DATA__ rt-4.2.12/sbin/rt-fulltext-indexer.in000644 000765 000024 00000026670 12555754775 020127 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; use 5.010; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT -init; use RT::Interface::CLI (); use HTML::Entities; use Getopt::Long qw(GetOptions); my %OPT = ( memory => '2M', limit => 0 ); GetOptions( \%OPT, "help|h!", "debug!", "quiet!", "all!", "limit=i", "memory=s", ); $OPT{limit} ||= 200; RT::Interface::CLI->ShowHelp if $OPT{help}; use Fcntl ':flock'; if ( !flock main::DATA, LOCK_EX | LOCK_NB ) { if ( $OPT{quiet} ) { RT::Logger->info("$0 is already running; aborting silently, as requested"); exit; } else { print STDERR "$0 is already running\n"; exit 1; } } my $db_type = RT->Config->Get('DatabaseType'); my $fts_config = $ENV{RT_FTS_CONFIG} ? JSON::from_json($ENV{RT_FTS_CONFIG}) : RT->Config->Get('FullTextSearch') || {}; unless ( $fts_config->{'Enable'} ) { print STDERR <{'Indexed'} ) { print STDERR <{'IndexName'} || 'rt_fts_index'; $RT::Handle->dbh->do( "begin ctx_ddl.sync_index(?, ?); end;", undef, $index, $OPT{'memory'} ); exit; } elsif ( $fts_config->{Sphinx} ) { print STDERR <{'Table'}; $LAST //= 0; # Fetch in batches of size --limit { # Indexes all text/plain and text/html attachments my $attachments = RT::Attachments->new( RT->SystemUser ); $attachments->Limit( FIELD => 'ContentType', OPERATOR => 'IN', VALUE => ['text/plain', 'text/html'], ); $attachments->Limit( FIELD => 'id', OPERATOR => '>', VALUE => $LAST ); $attachments->OrderBy( FIELD => 'id', ORDER => 'asc' ); $attachments->RowsPerPage( $OPT{'limit'} ); # Call back to the DB-specific part $subref->($attachments); $LAST = $attachments->Last->id if $attachments->Count; redo if $OPT{'all'} and $attachments->Count == $OPT{'limit'}; } } sub process_bulk_insert { my $dbh = $RT::Handle->dbh; my ($statement, $error) = @_; # Doing large inserts is faster than individual statements, but # comes at a parsing cost; cache the statement handles (99% of which # will be the same size) for a notable (2x) speed gain. my %sthandles; $sthandles{1} = $dbh->prepare($statement->(1)); attachment_loop( sub { my ($attachments) = @_; my @insert; my $found = 0; while ( my $a = $attachments->Next ) { debug("Found attachment #". $a->id ); my $text = $a->Content // ""; HTML::Entities::decode_entities($text) if $a->ContentType eq "text/html"; push @insert, $text, $a->id; $found++; } return unless $found; # $found should be the limit size on all but the last go-around. $sthandles{$found} ||= $dbh->prepare($statement->($found)); return if eval { $sthandles{$found}->execute(@insert); }; # We can catch and recover from some errors; re-do row-by-row to # know which row had which errors while (@insert) { my ($content, $id) = splice(@insert,0,2); next if eval { $sthandles{1}->execute($content, $id); }; $error->($id, $content); # If this was a semi-expected error, insert an empty # tsvector, so we count this row as "indexed" for # purposes of knowing where to pick up eval { $sthandles{1}->execute( "", $id ) } or die "Failed to insert empty row for attachment $id: " . $dbh->errstr; } }); } sub process_mysql { my $dbh = $RT::Handle->dbh; my $table = $fts_config->{'Table'}; ($LAST) = $dbh->selectrow_array("SELECT MAX(id) FROM $table"); my $insert = $fts_config->{Engine} eq "MyISAM" ? "INSERT DELAYED" : "INSERT"; process_bulk_insert( sub { my ($n) = @_; return "$insert INTO $table(Content, id) VALUES " . join(", ", ("(?,?)") x $n); }, sub { my ($id) = @_; if ($dbh->err == 1366 and $dbh->state eq "HY000") { warn "Attachment $id cannot be indexed. Most probably it contains invalid UTF8 bytes. ". "Error: ". $dbh->errstr; } else { die "Attachment $id cannot be indexed: " . $dbh->errstr; } } ); } sub process_pg { if ( $fts_config->{'Table'} ne 'Attachments' ) { process_pg_insert(); } else { process_pg_update(); } } sub process_pg_insert { my $dbh = $RT::Handle->dbh; my $table = $fts_config->{'Table'}; my $column = $fts_config->{'Column'}; ($LAST) = $dbh->selectrow_array("SELECT MAX(id) FROM $table"); process_bulk_insert( sub { my ($n) = @_; return "INSERT INTO $table($column, id) VALUES " . join(", ", ("(TO_TSVECTOR(?),?)") x $n); }, sub { my ($id) = @_; if ( $dbh->err == 7 && $dbh->state eq '54000' ) { warn "Attachment $id cannot be indexed. Most probably it contains too many unique words. ". "Error: ". $dbh->errstr; } elsif ( $dbh->err == 7 && $dbh->state eq '22021' ) { warn "Attachment $id cannot be indexed. Most probably it contains invalid UTF8 bytes. ". "Error: ". $dbh->errstr; } else { die "Attachment $id cannot be indexed: " . $dbh->errstr; } } ); } sub process_pg_update { my $dbh = $RT::Handle->dbh; my $column = $fts_config->{'Column'}; ($LAST) = $dbh->selectrow_array("SELECT MAX(id) FROM Attachments WHERE $column IS NOT NULL"); my $sth = $dbh->prepare("UPDATE Attachments SET $column = TO_TSVECTOR(?) WHERE id = ?"); attachment_loop( sub { my ($attachments) = @_; my @insert; while ( my $a = $attachments->Next ) { debug("Found attachment #". $a->id ); my $text = $a->Content // ""; HTML::Entities::decode_entities($text) if $a->ContentType eq "text/html"; push @insert, [$text, $a->id]; } # Try in one database transaction; if it fails, we roll it back # and try one statement at a time. $dbh->begin_work; my $ok = 1; for (@insert) { $ok = eval { $sth->execute( $_->[0], $_->[1] ) }; last unless $ok; } if ($ok) { $dbh->commit; return; } $dbh->rollback; # Things didn't go well. Retry the UPDATE statements one row at # a time, outside of the transaction. for (@insert) { my ($content, $id) = ($_->[0], $_->[1]); next if eval { $sth->execute( $content, $id ) }; if ( $dbh->err == 7 && $dbh->state eq '54000' ) { warn "Attachment $id cannot be indexed. Most probably it contains too many unique words. ". "Error: ". $dbh->errstr; } elsif ( $dbh->err == 7 && $dbh->state eq '22021' ) { warn "Attachment $id cannot be indexed. Most probably it contains invalid UTF8 bytes. ". "Error: ". $dbh->errstr; } else { die "Attachment $id cannot be indexed: " . $dbh->errstr; } # If this was a semi-expected error, insert an empty # tsvector, so we count this row as "indexed" for # purposes of knowing where to pick up eval { $sth->execute( "", $id ) } or die "Failed to insert empty row for attachment $id: " . $dbh->errstr; } }); } # helper functions sub debug { print @_, "\n" if $OPT{debug}; 1 } sub error { $RT::Logger->error(_(@_)); 1 } sub warning { $RT::Logger->warn(_(@_)); 1 } =head1 NAME rt-fulltext-indexer - Indexer for full text search =head1 DESCRIPTION This is a helper script to keep full text indexes in sync with data. Read F for complete details on how and when to run it. =cut __DATA__ rt-4.2.12/sbin/rt-importer000754 000765 000024 00000020420 12562703634 016027 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { require File::Spec; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { unless ($bin_path) { if ( File::Spec->file_name_is_absolute(__FILE__) ) { $bin_path = ( File::Spec->splitpath(__FILE__) )[1]; } else { require FindBin; no warnings "once"; $bin_path = $FindBin::Bin; } } $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT; RT::LoadConfig(); RT::Init(); @RT::Record::ISA = qw( DBIx::SearchBuilder::Record RT::Base ); use RT::Migrate; use RT::Migrate::Importer::File; use Getopt::Long; use Pod::Usage qw//; use Time::HiRes qw//; my %OPT = (resume => 1); GetOptions( \%OPT, "help|?", "quiet|q!", "list|l!", "resume!", "originalid|i=s", "ask", "ignore-errors", "dump=s@", ) or Pod::Usage::pod2usage(); Pod::Usage::pod2usage(-verbose => 1) if $OPT{help}; Pod::Usage::pod2usage() unless @ARGV == 1; my ($dir) = @ARGV; $dir =~ s|/$||; die "No such directory $dir\n" unless -d $dir; die "$dir doesn't appear to contain serialized data\n" unless -f "$dir/001.dat"; if ($OPT{dump}) { die "Dumping objects only works in conjunction with --list\n" unless $OPT{list}; $OPT{dump} = [ split /,/, join(',', @{$OPT{dump}}) ]; } my $error_handler; if ($OPT{ask}) { die "Interactive mode (--ask) doesn't work when STDERR and STDIN aren't terminals.\n" unless -t STDERR and -t STDIN; $error_handler = sub { my $importer = shift; local $| = 1; print STDERR "\n", @_, "\n"; print STDERR "Hit any key to abort import, or type 'ignore' to continue anyway.\n"; print STDERR "Continuing may leave you with a corrupt database. > "; chomp( my $resp = ); return lc($resp) eq 'ignore'; }; } elsif ($OPT{'ignore-errors'}) { $error_handler = sub { my $importer = shift; warn "Ignoring error: ", @_; return 1; }; } my $import = RT::Migrate::Importer::File->new( Directory => $dir, OriginalId => $OPT{originalid}, DumpObjects => $OPT{dump}, Resume => $OPT{resume}, HandleError => $error_handler, ); if ($import->Metadata and -t STDOUT and not $OPT{quiet}) { $import->Progress( RT::Migrate::progress( counts => sub { $import->ObjectCount }, max => $import->Metadata->{ObjectCount}, ) ); } my $log = RT::Migrate::setup_logging( $dir => 'importer.log' ); print "Logging warnings and errors to $log\n" if $log; my %counts; if ($OPT{list}) { %counts = $import->List; my $org = $import->Organization; print "=========== Dump of $org ===========\n\n"; } else { %counts = $import->Import; my $org = $import->Organization; print "========== Import of $org ==========\n\n"; } print "Total object counts:\n"; for (sort {$counts{$b} <=> $counts{$a}} keys %counts) { printf "%8d %s\n", $counts{$_}, $_; } my @missing = $import->Missing; if (@missing) { warn "The following UIDs were expected but never observed:\n"; warn " $_\n" for @missing; } my @invalid = $import->Invalid; if (@invalid) { warn "The following UIDs (serialized => imported) referred to objects missing from the original database:\n"; for my $info (@invalid) { my $uid = delete $info->{uid}; my $obj = $import->LookupObj($uid); warn sprintf " %s => %s (%s)\n", $uid, ($obj && $obj->Id ? $obj->UID : '(not imported)'), join(", ", map { "$_ => $info->{$_}" } grep { defined $info->{$_} } sort keys %$info); } } if ($log and -s $log) { print STDERR "\n! Some warnings or errors occurred during import." ."\n! Please see $log for details.\n\n"; } exit @missing; =head1 NAME rt-importer - Import a serialized RT database on top of the current one =head1 SYNOPSIS rt-importer path/to/export/directory This script is used to import the contents of a dump created by C. It will create all of the objects in the dump in the current database; this may include users, queues, and tickets. It is possible to stop the import process with ^C; it can be later resumed by re-running the importer. =head2 OPTIONS =over =item B<--list> Print a summary of the data contained in the dump. =item B<--originalid> I Places the original ticket organization and ID into a global custom field with the given name. If no global ticket custom field with that name is found in the current database, it will create one. =item B<--ask> Prompt for action when an error occurs inserting a record into the database. This can often happen when importing data from very old RTs where some attachments (usually spam) contain invalid UTF-8. The importer will pause and ask if you want to ignore the error and continue on or abort (potentially to restart later). Ignoring errors will result in missing records in the database, which may cause database integrity problems later. If you ignored any errors, you should run C after import. =item B<--ignore-errors> Ignore all record creation errors and continue on when importing. This is equivalent to running with C<--ask> and manually typing "ignore" at every prompt. You should always run C after importing with errors ignored. B =item B<--dump> I[,I] Prints L representations of the objects of type I in the serialized data. This is mostly useful for debugging. Works only in conjunction with C<--list>. =back =head1 CLONED DATA Some dumps may have been taken as complete clones of the RT system, which are only suitable for inserting into a schema with no data in it. You can setup the required database state for the receiving RT instance by running: /opt/rt4/sbin/rt-setup-database --action create,schema,acl --prompt-for-dba-password The normal C step will B work because it also inserts core system data. =cut rt-4.2.12/sbin/rt-importer.in000644 000765 000024 00000020435 12555754775 016456 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { require File::Spec; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { unless ($bin_path) { if ( File::Spec->file_name_is_absolute(__FILE__) ) { $bin_path = ( File::Spec->splitpath(__FILE__) )[1]; } else { require FindBin; no warnings "once"; $bin_path = $FindBin::Bin; } } $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT; RT::LoadConfig(); RT::Init(); @RT::Record::ISA = qw( DBIx::SearchBuilder::Record RT::Base ); use RT::Migrate; use RT::Migrate::Importer::File; use Getopt::Long; use Pod::Usage qw//; use Time::HiRes qw//; my %OPT = (resume => 1); GetOptions( \%OPT, "help|?", "quiet|q!", "list|l!", "resume!", "originalid|i=s", "ask", "ignore-errors", "dump=s@", ) or Pod::Usage::pod2usage(); Pod::Usage::pod2usage(-verbose => 1) if $OPT{help}; Pod::Usage::pod2usage() unless @ARGV == 1; my ($dir) = @ARGV; $dir =~ s|/$||; die "No such directory $dir\n" unless -d $dir; die "$dir doesn't appear to contain serialized data\n" unless -f "$dir/001.dat"; if ($OPT{dump}) { die "Dumping objects only works in conjunction with --list\n" unless $OPT{list}; $OPT{dump} = [ split /,/, join(',', @{$OPT{dump}}) ]; } my $error_handler; if ($OPT{ask}) { die "Interactive mode (--ask) doesn't work when STDERR and STDIN aren't terminals.\n" unless -t STDERR and -t STDIN; $error_handler = sub { my $importer = shift; local $| = 1; print STDERR "\n", @_, "\n"; print STDERR "Hit any key to abort import, or type 'ignore' to continue anyway.\n"; print STDERR "Continuing may leave you with a corrupt database. > "; chomp( my $resp = ); return lc($resp) eq 'ignore'; }; } elsif ($OPT{'ignore-errors'}) { $error_handler = sub { my $importer = shift; warn "Ignoring error: ", @_; return 1; }; } my $import = RT::Migrate::Importer::File->new( Directory => $dir, OriginalId => $OPT{originalid}, DumpObjects => $OPT{dump}, Resume => $OPT{resume}, HandleError => $error_handler, ); if ($import->Metadata and -t STDOUT and not $OPT{quiet}) { $import->Progress( RT::Migrate::progress( counts => sub { $import->ObjectCount }, max => $import->Metadata->{ObjectCount}, ) ); } my $log = RT::Migrate::setup_logging( $dir => 'importer.log' ); print "Logging warnings and errors to $log\n" if $log; my %counts; if ($OPT{list}) { %counts = $import->List; my $org = $import->Organization; print "=========== Dump of $org ===========\n\n"; } else { %counts = $import->Import; my $org = $import->Organization; print "========== Import of $org ==========\n\n"; } print "Total object counts:\n"; for (sort {$counts{$b} <=> $counts{$a}} keys %counts) { printf "%8d %s\n", $counts{$_}, $_; } my @missing = $import->Missing; if (@missing) { warn "The following UIDs were expected but never observed:\n"; warn " $_\n" for @missing; } my @invalid = $import->Invalid; if (@invalid) { warn "The following UIDs (serialized => imported) referred to objects missing from the original database:\n"; for my $info (@invalid) { my $uid = delete $info->{uid}; my $obj = $import->LookupObj($uid); warn sprintf " %s => %s (%s)\n", $uid, ($obj && $obj->Id ? $obj->UID : '(not imported)'), join(", ", map { "$_ => $info->{$_}" } grep { defined $info->{$_} } sort keys %$info); } } if ($log and -s $log) { print STDERR "\n! Some warnings or errors occurred during import." ."\n! Please see $log for details.\n\n"; } exit @missing; =head1 NAME rt-importer - Import a serialized RT database on top of the current one =head1 SYNOPSIS rt-importer path/to/export/directory This script is used to import the contents of a dump created by C. It will create all of the objects in the dump in the current database; this may include users, queues, and tickets. It is possible to stop the import process with ^C; it can be later resumed by re-running the importer. =head2 OPTIONS =over =item B<--list> Print a summary of the data contained in the dump. =item B<--originalid> I Places the original ticket organization and ID into a global custom field with the given name. If no global ticket custom field with that name is found in the current database, it will create one. =item B<--ask> Prompt for action when an error occurs inserting a record into the database. This can often happen when importing data from very old RTs where some attachments (usually spam) contain invalid UTF-8. The importer will pause and ask if you want to ignore the error and continue on or abort (potentially to restart later). Ignoring errors will result in missing records in the database, which may cause database integrity problems later. If you ignored any errors, you should run C after import. =item B<--ignore-errors> Ignore all record creation errors and continue on when importing. This is equivalent to running with C<--ask> and manually typing "ignore" at every prompt. You should always run C after importing with errors ignored. B =item B<--dump> I[,I] Prints L representations of the objects of type I in the serialized data. This is mostly useful for debugging. Works only in conjunction with C<--list>. =back =head1 CLONED DATA Some dumps may have been taken as complete clones of the RT system, which are only suitable for inserting into a schema with no data in it. You can setup the required database state for the receiving RT instance by running: @RT_SBIN_PATH_R@/rt-setup-database --action create,schema,acl --prompt-for-dba-password The normal C step will B work because it also inserts core system data. =cut rt-4.2.12/sbin/rt-preferences-viewer000754 000765 000024 00000010231 12562703633 017764 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT::Interface::CLI qw(Init); my %opt; Init( \%opt, 'user|u=s', 'option|o=s' ); require RT::Attributes; my $attrs = RT::Attributes->new( RT->SystemUser ); $attrs->Limit( FIELD => 'Name', VALUE => 'Pref-RT::System-1' ); $attrs->Limit( FIELD => 'ObjectType', VALUE => 'RT::User' ); if ($opt{user}) { my $user = RT::User->new( RT->SystemUser ); my ($val, $msg) = $user->Load($opt{user}); unless ($val) { RT->Logger->error("Unable to load $opt{user}: $msg"); exit(1); } $attrs->Limit( FIELD => 'ObjectId', VALUE => $user->Id ); } use Data::Dumper; $Data::Dumper::Terse = 1; while (my $attr = $attrs->Next ) { my $user = RT::User->new( RT->SystemUser ); my ($val, $msg) = $user->Load($attr->ObjectId); unless ($val) { RT->Logger->warn("Unable to load User ".$attr->ObjectId." $msg"); next; } next if $user->Disabled; my $content = $attr->Content; if ( my $config_name = $opt{option} ) { if ( exists $content->{$config_name} ) { my $setting = $content->{$config_name}; print $user->Name, "\t$config_name: $setting\n"; } } else { print $user->Name, " => ", Dumper($content); } } __END__ =head1 NAME rt-preferences-viewer - show user defined preferences =head1 SYNOPSIS rt-preferences-viewer rt-preferences-viewer --user=falcone show only the falcone user's preferences rt-preferences-viewer --option=EmailFrequency show users who have set the EmailFrequence config option =head1 DESCRIPTION This script shows user settings of preferences. If a user is using the system default, it will not be listed. You can limit to a user name or id or to users with a particular option set. rt-4.2.12/sbin/rt-preferences-viewer.in000644 000765 000024 00000010243 12555754775 020411 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT::Interface::CLI qw(Init); my %opt; Init( \%opt, 'user|u=s', 'option|o=s' ); require RT::Attributes; my $attrs = RT::Attributes->new( RT->SystemUser ); $attrs->Limit( FIELD => 'Name', VALUE => 'Pref-RT::System-1' ); $attrs->Limit( FIELD => 'ObjectType', VALUE => 'RT::User' ); if ($opt{user}) { my $user = RT::User->new( RT->SystemUser ); my ($val, $msg) = $user->Load($opt{user}); unless ($val) { RT->Logger->error("Unable to load $opt{user}: $msg"); exit(1); } $attrs->Limit( FIELD => 'ObjectId', VALUE => $user->Id ); } use Data::Dumper; $Data::Dumper::Terse = 1; while (my $attr = $attrs->Next ) { my $user = RT::User->new( RT->SystemUser ); my ($val, $msg) = $user->Load($attr->ObjectId); unless ($val) { RT->Logger->warn("Unable to load User ".$attr->ObjectId." $msg"); next; } next if $user->Disabled; my $content = $attr->Content; if ( my $config_name = $opt{option} ) { if ( exists $content->{$config_name} ) { my $setting = $content->{$config_name}; print $user->Name, "\t$config_name: $setting\n"; } } else { print $user->Name, " => ", Dumper($content); } } __END__ =head1 NAME rt-preferences-viewer - show user defined preferences =head1 SYNOPSIS rt-preferences-viewer rt-preferences-viewer --user=falcone show only the falcone user's preferences rt-preferences-viewer --option=EmailFrequency show users who have set the EmailFrequence config option =head1 DESCRIPTION This script shows user settings of preferences. If a user is using the system default, it will not be listed. You can limit to a user name or id or to users with a particular option set. rt-4.2.12/sbin/rt-serializer000754 000765 000024 00000030726 12562703634 016351 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { require File::Spec; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { unless ($bin_path) { if ( File::Spec->file_name_is_absolute(__FILE__) ) { $bin_path = ( File::Spec->splitpath(__FILE__) )[1]; } else { require FindBin; no warnings "once"; $bin_path = $FindBin::Bin; } } $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT; RT::LoadConfig(); RT::Init(); @RT::Record::ISA = qw( DBIx::SearchBuilder::Record RT::Base ); use RT::Migrate; use RT::Migrate::Serializer::File; use Getopt::Long; use Pod::Usage qw//; use Time::HiRes qw//; my %OPT; GetOptions( \%OPT, "help|?", "verbose|v!", "quiet|q!", "directory|d=s", "force|f!", "size|s=i", "users!", "groups!", "deleted!", "scrips!", "tickets!", "acls!", "clone", "incremental", "gc=i", "page=i", ) or Pod::Usage::pod2usage(); Pod::Usage::pod2usage(-verbose => 1) if $OPT{help}; my %args; $args{Directory} = $OPT{directory}; $args{Force} = $OPT{force}; $args{MaxFileSize} = $OPT{size} if $OPT{size}; $args{AllUsers} = $OPT{users} if defined $OPT{users}; $args{AllGroups} = $OPT{groups} if defined $OPT{groups}; $args{FollowDeleted} = $OPT{deleted} if defined $OPT{deleted}; $args{FollowScrips} = $OPT{scrips} if defined $OPT{scrips}; $args{FollowTickets} = $OPT{tickets} if defined $OPT{tickets}; $args{FollowACL} = $OPT{acls} if defined $OPT{acls}; $args{Clone} = $OPT{clone} if $OPT{clone}; $args{Incremental} = $OPT{incremental} if $OPT{incremental}; $args{GC} = defined $OPT{gc} ? $OPT{gc} : 5000; $args{Page} = defined $OPT{page} ? $OPT{page} : 100; if (($OPT{clone} or $OPT{incremental}) and grep { /^(users|groups|deleted|scrips|tickets|acls)$/ } keys %OPT) { die "You cannot specify object types when cloning.\n\nPlease see $0 --help.\n"; } my $walker; my $gnuplot = `which gnuplot`; my $msg = ""; if (-t STDOUT and not $OPT{verbose} and not $OPT{quiet}) { $args{Progress} = RT::Migrate::progress( top => \&gnuplot, bottom => sub { print "\n$msg"; $msg = ""; }, counts => sub { $walker->ObjectCount }, max => { estimate() }, ); $args{MessageHandler} = sub { print "\r", " "x60, "\r", $_[-1]; $msg = $_[-1]; }; $args{Verbose} = 0; } $args{Verbose} = 0 if $OPT{quiet}; $walker = RT::Migrate::Serializer::File->new( %args ); my $log = RT::Migrate::setup_logging( $walker->{Directory} => 'serializer.log' ); print "Logging warnings and errors to $log\n" if $log; print "Beginning database serialization..."; my %counts = $walker->Export; my @files = $walker->Files; print "Wrote @{[scalar @files]} files:\n"; print " $_\n" for @files; print "\n"; print "Total object counts:\n"; for (sort {$counts{$b} <=> $counts{$a}} keys %counts) { printf "%8d %s\n", $counts{$_}, $_; } if ($log and -s $log) { print STDERR "\n! Some warnings or errors occurred during serialization." ."\n! Please see $log for details.\n\n"; } else { unlink $log; } sub estimate { $| = 1; my %e; # Expected types we'll serialize my @types = map {"RT::$_"} qw/ Queue Ticket Transaction Attachment Link User Group GroupMember Attribute CustomField CustomFieldValue ObjectCustomField ObjectCustomFieldValue /; for my $class (@types) { print "Estimating $class count..."; my $collection = $class . "s"; if ($collection->require) { my $objs = $collection->new( RT->SystemUser ); $objs->FindAllRows; $objs->UnLimit; $objs->{allow_deleted_search} = 1 if $class eq "RT::Ticket"; $e{$class} = $objs->DBIx::SearchBuilder::Count; } print "\r", " "x60, "\r"; } return %e; } sub gnuplot { my ($elapsed, $rows, $cols) = @_; my $length = $walker->StackSize; my $file = $walker->Directory . "/progress.plot"; open(my $dat, ">>", $file); printf $dat "%10.3f\t%8d\n", $elapsed, $length; close $dat; if ($rows <= 24 or not $gnuplot) { print "\n\n"; } elsif ($elapsed) { my $gnuplot = qx| gnuplot -e ' set term dumb $cols @{[$rows - 12]}; set xlabel "Seconds"; unset key; set xrange [0:*]; set yrange [0:*]; set title "Queue length"; plot "$file" using 1:2 with lines ' |; if ($? == 0 and $gnuplot) { $gnuplot =~ s/^(\s*\n)//; print $gnuplot; unlink $file; } else { warn "Couldn't run gnuplot (\$? == $?): $!\n"; } } else { print "\n" for 1..($rows - 13); } } =head1 NAME rt-serializer - Serialize an RT database to disk =head1 SYNOPSIS rt-validator --check && rt-serializer This script is used to write out the entire RT database to disk, for later import into a different RT instance. It requires that the data in the database be self-consistent, in order to do so; please make sure that the database being exported passes validation by L before attempting to use C. While running, it will attempt to estimate the number of remaining objects to be serialized; these estimates are pessimistic, and will be incorrect if C<--no-users>, C<--no-groups>, or C<--no-tickets> are used. If the controlling terminal is large enough (more than 25 columns high) and the C program is installed, it will also show a textual graph of the queue size over time. =head2 OPTIONS =over =item B<--directory> I The name of the output directory to write data files to, which should not exist yet; it is a fatal error if it does. Defaults to C<< ./I<$Organization>:I/ >>, where I<$Organization> is as set in F, and I is today's date. =item B<--force> Remove the output directory before starting. =item B<--size> I By default, C chunks its output into data files which are around 32Mb in size; this option is used to set a different threshold size, in megabytes. Note that this is the threshold after which it rotates to writing a new file, and is as such the I on the size of each output file. =item B<--no-users> By default, all privileged users are serialized; passing C<--no-users> limits it to only those users which are referenced by serialized tickets and history, and are thus necessary for internal consistency. =item B<--no-groups> By default, all groups are serialized; passing C<--no-groups> limits it to only system-internal groups, which are needed for internal consistency. =item B<--no-deleted> By default, all tickets, including deleted tickets, are serialized; passing C<--no-deleted> skips deleted tickets during serialization. =item B<--scrips> No scrips or templates are serialized by default; this option forces all scrips and templates to be serialized. =item B<--acls> No ACLs are serialized by default; this option forces all ACLs to be serialized. =item B<--no-tickets> Skip serialization of all ticket data. =item B<--clone> Serializes your entire database, creating a clone. This option should be used if you want to migrate your RT database from one database type to another (e.g. MySQL to Postgres). It is an error to combine C<--clone> with any option that limits object types serialized. No dependency walking is performed when cloning. C will detect that your serialized data set was generated by a clone. =item B<--incremental> Will generate an incremenal serialized dataset using the data stored in your IncrementalRecords database table. This assumes that you have created that table and run RT using the Record_Local.pm shim as documented in C. =item B<--gc> I Adjust how often the garbage collection sweep is done; lower numbers are more frequent. See L. =item B<--page> I Adjust how many rows are pulled from the database in a single query. Disable paging by setting this to 0. Defaults to 100. Keep in mind that rows from RT's Attachments table are the limiting factor when determining page size. You should likely be aiming for 60-75% of your total memory on an otherwise unloaded box. =item B<--quiet> Do not show graphical progress UI. =item B<--verbose> Do not show graphical progress UI, but rather log was each row is written out. =back =head1 GARBAGE COLLECTION C maintains a priority queue of objects to serialize, or searches which may result in objects to serialize. When inserting into this queue, it does no checking if the object in question is already in the queue, or if the search will contain any results. These checks are done when the object reaches the front of the queue, or during periodic garbage collection. During periodic garbage collection, the entire queue is swept for objects which have already been serialized, occur more than once in the queue, and searches which contain no results in the database. This is done to reduce the memory footprint of the serialization process, and is triggered when enough new objects have been placed in the queue. This parameter is tunable via the C<--gc> parameter, which defaults to running garbage collection every 5,000 objects inserted into the queue; smaller numbers will result in more frequent garbage collection. The default of 5,000 is roughly tuned based on a database with several thousand tickets, but optimal values will vary wildly depending on database configuration and size. Values as low as 25 have provided speedups with smaller databases; if speed is a factor, experimenting with different C<--gc> values may be helpful. Note that there are significant boundary condition changes in serialization rate, as the queue empties and fills, causing the time estimates to be rather imprecise near the start and end of the process. Setting C<--gc> to 0 turns off all garbage collection. Be aware that this will bloat the memory usage of the serializer. Any negative value for C<--gc> turns off periodic garbage collection and instead objects already serialized or in the queue are checked for at the time they would be inserted. =cut rt-4.2.12/sbin/rt-serializer.in000644 000765 000024 00000030740 12555754775 016766 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { require File::Spec; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { unless ($bin_path) { if ( File::Spec->file_name_is_absolute(__FILE__) ) { $bin_path = ( File::Spec->splitpath(__FILE__) )[1]; } else { require FindBin; no warnings "once"; $bin_path = $FindBin::Bin; } } $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT; RT::LoadConfig(); RT::Init(); @RT::Record::ISA = qw( DBIx::SearchBuilder::Record RT::Base ); use RT::Migrate; use RT::Migrate::Serializer::File; use Getopt::Long; use Pod::Usage qw//; use Time::HiRes qw//; my %OPT; GetOptions( \%OPT, "help|?", "verbose|v!", "quiet|q!", "directory|d=s", "force|f!", "size|s=i", "users!", "groups!", "deleted!", "scrips!", "tickets!", "acls!", "clone", "incremental", "gc=i", "page=i", ) or Pod::Usage::pod2usage(); Pod::Usage::pod2usage(-verbose => 1) if $OPT{help}; my %args; $args{Directory} = $OPT{directory}; $args{Force} = $OPT{force}; $args{MaxFileSize} = $OPT{size} if $OPT{size}; $args{AllUsers} = $OPT{users} if defined $OPT{users}; $args{AllGroups} = $OPT{groups} if defined $OPT{groups}; $args{FollowDeleted} = $OPT{deleted} if defined $OPT{deleted}; $args{FollowScrips} = $OPT{scrips} if defined $OPT{scrips}; $args{FollowTickets} = $OPT{tickets} if defined $OPT{tickets}; $args{FollowACL} = $OPT{acls} if defined $OPT{acls}; $args{Clone} = $OPT{clone} if $OPT{clone}; $args{Incremental} = $OPT{incremental} if $OPT{incremental}; $args{GC} = defined $OPT{gc} ? $OPT{gc} : 5000; $args{Page} = defined $OPT{page} ? $OPT{page} : 100; if (($OPT{clone} or $OPT{incremental}) and grep { /^(users|groups|deleted|scrips|tickets|acls)$/ } keys %OPT) { die "You cannot specify object types when cloning.\n\nPlease see $0 --help.\n"; } my $walker; my $gnuplot = `which gnuplot`; my $msg = ""; if (-t STDOUT and not $OPT{verbose} and not $OPT{quiet}) { $args{Progress} = RT::Migrate::progress( top => \&gnuplot, bottom => sub { print "\n$msg"; $msg = ""; }, counts => sub { $walker->ObjectCount }, max => { estimate() }, ); $args{MessageHandler} = sub { print "\r", " "x60, "\r", $_[-1]; $msg = $_[-1]; }; $args{Verbose} = 0; } $args{Verbose} = 0 if $OPT{quiet}; $walker = RT::Migrate::Serializer::File->new( %args ); my $log = RT::Migrate::setup_logging( $walker->{Directory} => 'serializer.log' ); print "Logging warnings and errors to $log\n" if $log; print "Beginning database serialization..."; my %counts = $walker->Export; my @files = $walker->Files; print "Wrote @{[scalar @files]} files:\n"; print " $_\n" for @files; print "\n"; print "Total object counts:\n"; for (sort {$counts{$b} <=> $counts{$a}} keys %counts) { printf "%8d %s\n", $counts{$_}, $_; } if ($log and -s $log) { print STDERR "\n! Some warnings or errors occurred during serialization." ."\n! Please see $log for details.\n\n"; } else { unlink $log; } sub estimate { $| = 1; my %e; # Expected types we'll serialize my @types = map {"RT::$_"} qw/ Queue Ticket Transaction Attachment Link User Group GroupMember Attribute CustomField CustomFieldValue ObjectCustomField ObjectCustomFieldValue /; for my $class (@types) { print "Estimating $class count..."; my $collection = $class . "s"; if ($collection->require) { my $objs = $collection->new( RT->SystemUser ); $objs->FindAllRows; $objs->UnLimit; $objs->{allow_deleted_search} = 1 if $class eq "RT::Ticket"; $e{$class} = $objs->DBIx::SearchBuilder::Count; } print "\r", " "x60, "\r"; } return %e; } sub gnuplot { my ($elapsed, $rows, $cols) = @_; my $length = $walker->StackSize; my $file = $walker->Directory . "/progress.plot"; open(my $dat, ">>", $file); printf $dat "%10.3f\t%8d\n", $elapsed, $length; close $dat; if ($rows <= 24 or not $gnuplot) { print "\n\n"; } elsif ($elapsed) { my $gnuplot = qx| gnuplot -e ' set term dumb $cols @{[$rows - 12]}; set xlabel "Seconds"; unset key; set xrange [0:*]; set yrange [0:*]; set title "Queue length"; plot "$file" using 1:2 with lines ' |; if ($? == 0 and $gnuplot) { $gnuplot =~ s/^(\s*\n)//; print $gnuplot; unlink $file; } else { warn "Couldn't run gnuplot (\$? == $?): $!\n"; } } else { print "\n" for 1..($rows - 13); } } =head1 NAME rt-serializer - Serialize an RT database to disk =head1 SYNOPSIS rt-validator --check && rt-serializer This script is used to write out the entire RT database to disk, for later import into a different RT instance. It requires that the data in the database be self-consistent, in order to do so; please make sure that the database being exported passes validation by L before attempting to use C. While running, it will attempt to estimate the number of remaining objects to be serialized; these estimates are pessimistic, and will be incorrect if C<--no-users>, C<--no-groups>, or C<--no-tickets> are used. If the controlling terminal is large enough (more than 25 columns high) and the C program is installed, it will also show a textual graph of the queue size over time. =head2 OPTIONS =over =item B<--directory> I The name of the output directory to write data files to, which should not exist yet; it is a fatal error if it does. Defaults to C<< ./I<$Organization>:I/ >>, where I<$Organization> is as set in F, and I is today's date. =item B<--force> Remove the output directory before starting. =item B<--size> I By default, C chunks its output into data files which are around 32Mb in size; this option is used to set a different threshold size, in megabytes. Note that this is the threshold after which it rotates to writing a new file, and is as such the I on the size of each output file. =item B<--no-users> By default, all privileged users are serialized; passing C<--no-users> limits it to only those users which are referenced by serialized tickets and history, and are thus necessary for internal consistency. =item B<--no-groups> By default, all groups are serialized; passing C<--no-groups> limits it to only system-internal groups, which are needed for internal consistency. =item B<--no-deleted> By default, all tickets, including deleted tickets, are serialized; passing C<--no-deleted> skips deleted tickets during serialization. =item B<--scrips> No scrips or templates are serialized by default; this option forces all scrips and templates to be serialized. =item B<--acls> No ACLs are serialized by default; this option forces all ACLs to be serialized. =item B<--no-tickets> Skip serialization of all ticket data. =item B<--clone> Serializes your entire database, creating a clone. This option should be used if you want to migrate your RT database from one database type to another (e.g. MySQL to Postgres). It is an error to combine C<--clone> with any option that limits object types serialized. No dependency walking is performed when cloning. C will detect that your serialized data set was generated by a clone. =item B<--incremental> Will generate an incremenal serialized dataset using the data stored in your IncrementalRecords database table. This assumes that you have created that table and run RT using the Record_Local.pm shim as documented in C. =item B<--gc> I Adjust how often the garbage collection sweep is done; lower numbers are more frequent. See L. =item B<--page> I Adjust how many rows are pulled from the database in a single query. Disable paging by setting this to 0. Defaults to 100. Keep in mind that rows from RT's Attachments table are the limiting factor when determining page size. You should likely be aiming for 60-75% of your total memory on an otherwise unloaded box. =item B<--quiet> Do not show graphical progress UI. =item B<--verbose> Do not show graphical progress UI, but rather log was each row is written out. =back =head1 GARBAGE COLLECTION C maintains a priority queue of objects to serialize, or searches which may result in objects to serialize. When inserting into this queue, it does no checking if the object in question is already in the queue, or if the search will contain any results. These checks are done when the object reaches the front of the queue, or during periodic garbage collection. During periodic garbage collection, the entire queue is swept for objects which have already been serialized, occur more than once in the queue, and searches which contain no results in the database. This is done to reduce the memory footprint of the serialization process, and is triggered when enough new objects have been placed in the queue. This parameter is tunable via the C<--gc> parameter, which defaults to running garbage collection every 5,000 objects inserted into the queue; smaller numbers will result in more frequent garbage collection. The default of 5,000 is roughly tuned based on a database with several thousand tickets, but optimal values will vary wildly depending on database configuration and size. Values as low as 25 have provided speedups with smaller databases; if speed is a factor, experimenting with different C<--gc> values may be helpful. Note that there are significant boundary condition changes in serialization rate, as the queue empties and fills, causing the time estimates to be rather imprecise near the start and end of the process. Setting C<--gc> to 0 turns off all garbage collection. Be aware that this will bloat the memory usage of the serializer. Any negative value for C<--gc> turns off periodic garbage collection and instead objects already serialized or in the queue are checked for at the time they would be inserted. =cut rt-4.2.12/sbin/rt-server000754 000765 000024 00000012264 12562703633 015502 0ustar00sartakstaff000000 000000 #!/usr/bin/perl -w # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use warnings; use strict; BEGIN { die <file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use Getopt::Long; no warnings 'once'; if (grep { m/help/ } @ARGV) { require Pod::Usage; print Pod::Usage::pod2usage( { verbose => 2 } ); exit; } require RT; die "Wrong version of RT $RT::VERSION found; need 4.2.*" unless $RT::VERSION =~ /^4\.2\./; RT->LoadConfig(); RT->InitPluginPaths(); RT->InitLogging(); require RT::Handle; my ($integrity, $state, $msg) = RT::Handle->CheckIntegrity; unless ( $integrity ) { print STDERR <ConfigFile && !-w _) { die 'Since your configuration exists (' . RT::Installer->ConfigFile . ") but is not writable, I'm refusing to do anything.\n"; } RT->Config->Set( 'LexiconLanguages' => '*' ); RT::I18N->Init; RT->InstallMode(1); } else { RT->Init( Heavy => 1 ); my ($status, $msg) = RT::Handle->CheckCompatibility( $RT::Handle->dbh, 'post'); unless ( $status ) { print STDERR $msg, "\n\n"; exit -1; } } # we must disconnect DB before fork if ($RT::Handle) { $RT::Handle->dbh->disconnect if $RT::Handle->dbh; $RT::Handle->dbh(undef); undef $RT::Handle; } require RT::PlackRunner; # when used as a psgi file if (caller) { return RT::PlackRunner->app; } my $r = RT::PlackRunner->new( RT->InstallMode ? ( server => 'Standalone' ) : $0 =~ /standalone/ ? ( server => 'Standalone' ) : $0 =~ /fcgi$/ ? ( server => 'FCGI', env => "deployment" ) : ( server => 'Starlet', env => "deployment" ) ); $r->parse_options(@ARGV); # Try to clean up wrong-permissions var/ $SIG{INT} = sub { local $@; system("chown", "-R", "www:www", "/opt/rt4/var"); exit 0; } if $> == 0; $r->run; __END__ =head1 NAME rt-server - RT standalone server =head1 SYNOPSIS # runs prefork server listening on port 8080, requires Starlet rt-server --port 8080 # runs server listening on port 8080 rt-server --server Standalone --port 8080 # or standalone_httpd --port 8080 # runs other PSGI server on port 8080 rt-server --server Starman --port 8080 rt-4.2.12/sbin/rt-server.fcgi000754 000765 000024 00000012264 12562703633 016411 0ustar00sartakstaff000000 000000 #!/usr/bin/perl -w # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use warnings; use strict; BEGIN { die <file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use Getopt::Long; no warnings 'once'; if (grep { m/help/ } @ARGV) { require Pod::Usage; print Pod::Usage::pod2usage( { verbose => 2 } ); exit; } require RT; die "Wrong version of RT $RT::VERSION found; need 4.2.*" unless $RT::VERSION =~ /^4\.2\./; RT->LoadConfig(); RT->InitPluginPaths(); RT->InitLogging(); require RT::Handle; my ($integrity, $state, $msg) = RT::Handle->CheckIntegrity; unless ( $integrity ) { print STDERR <ConfigFile && !-w _) { die 'Since your configuration exists (' . RT::Installer->ConfigFile . ") but is not writable, I'm refusing to do anything.\n"; } RT->Config->Set( 'LexiconLanguages' => '*' ); RT::I18N->Init; RT->InstallMode(1); } else { RT->Init( Heavy => 1 ); my ($status, $msg) = RT::Handle->CheckCompatibility( $RT::Handle->dbh, 'post'); unless ( $status ) { print STDERR $msg, "\n\n"; exit -1; } } # we must disconnect DB before fork if ($RT::Handle) { $RT::Handle->dbh->disconnect if $RT::Handle->dbh; $RT::Handle->dbh(undef); undef $RT::Handle; } require RT::PlackRunner; # when used as a psgi file if (caller) { return RT::PlackRunner->app; } my $r = RT::PlackRunner->new( RT->InstallMode ? ( server => 'Standalone' ) : $0 =~ /standalone/ ? ( server => 'Standalone' ) : $0 =~ /fcgi$/ ? ( server => 'FCGI', env => "deployment" ) : ( server => 'Starlet', env => "deployment" ) ); $r->parse_options(@ARGV); # Try to clean up wrong-permissions var/ $SIG{INT} = sub { local $@; system("chown", "-R", "www:www", "/opt/rt4/var"); exit 0; } if $> == 0; $r->run; __END__ =head1 NAME rt-server - RT standalone server =head1 SYNOPSIS # runs prefork server listening on port 8080, requires Starlet rt-server --port 8080 # runs server listening on port 8080 rt-server --server Standalone --port 8080 # or standalone_httpd --port 8080 # runs other PSGI server on port 8080 rt-server --server Starman --port 8080 rt-4.2.12/sbin/rt-server.fcgi.in000755 000765 000024 00000000000 12555754775 021300 2rt-server.inustar00sartakstaff000000 000000 rt-4.2.12/sbin/rt-server.in000644 000765 000024 00000012424 12555754775 016122 0ustar00sartakstaff000000 000000 #!@PERL@ -w # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use warnings; use strict; BEGIN { die <file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use Getopt::Long; no warnings 'once'; if (grep { m/help/ } @ARGV) { require Pod::Usage; print Pod::Usage::pod2usage( { verbose => 2 } ); exit; } require RT; die "Wrong version of RT $RT::VERSION found; need @RT_VERSION_MAJOR@.@RT_VERSION_MINOR@.*" unless $RT::VERSION =~ /^@RT_VERSION_MAJOR@\.@RT_VERSION_MINOR@\./; RT->LoadConfig(); RT->InitPluginPaths(); RT->InitLogging(); require RT::Handle; my ($integrity, $state, $msg) = RT::Handle->CheckIntegrity; unless ( $integrity ) { print STDERR <ConfigFile && !-w _) { die 'Since your configuration exists (' . RT::Installer->ConfigFile . ") but is not writable, I'm refusing to do anything.\n"; } RT->Config->Set( 'LexiconLanguages' => '*' ); RT::I18N->Init; RT->InstallMode(1); } else { RT->Init( Heavy => 1 ); my ($status, $msg) = RT::Handle->CheckCompatibility( $RT::Handle->dbh, 'post'); unless ( $status ) { print STDERR $msg, "\n\n"; exit -1; } } # we must disconnect DB before fork if ($RT::Handle) { $RT::Handle->dbh->disconnect if $RT::Handle->dbh; $RT::Handle->dbh(undef); undef $RT::Handle; } require RT::PlackRunner; # when used as a psgi file if (caller) { return RT::PlackRunner->app; } my $r = RT::PlackRunner->new( RT->InstallMode ? ( server => 'Standalone' ) : $0 =~ /standalone/ ? ( server => 'Standalone' ) : $0 =~ /fcgi$/ ? ( server => 'FCGI', env => "deployment" ) : ( server => 'Starlet', env => "deployment" ) ); $r->parse_options(@ARGV); # Try to clean up wrong-permissions var/ $SIG{INT} = sub { local $@; system("chown", "-R", "@WEB_USER@:@WEB_GROUP@", "@RT_VAR_PATH_R@"); exit 0; } if $> == 0; $r->run; __END__ =head1 NAME rt-server - RT standalone server =head1 SYNOPSIS # runs prefork server listening on port 8080, requires Starlet rt-server --port 8080 # runs server listening on port 8080 rt-server --server Standalone --port 8080 # or standalone_httpd --port 8080 # runs other PSGI server on port 8080 rt-server --server Starman --port 8080 rt-4.2.12/sbin/rt-session-viewer000754 000765 000024 00000006340 12562703633 017154 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT::Interface::CLI qw(Init); Init(); my $session_id = shift; Pod::Usage::pod2usage({ verbose => 2 }) unless $session_id; require RT::Interface::Web::Session; my %session; tie %session, 'RT::Interface::Web::Session', $session_id; unless ( $session{'_session_id'} eq $session_id ) { print STDERR "Couldn't load session $session_id\n"; exit 1; } use Data::Dumper; print "Content of session $session_id: ". Dumper( \%session); __END__ =head1 NAME rt-session-viewer - show the content of a user's session =head1 SYNOPSIS # show the content of a session rt-session-viewer 2c21c8a2909c14eff12975dd2cc7b9a3 =head1 DESCRIPTION This script deserializes and print content of a session identified by . May be useful for developers and for troubleshooting problems. =cut rt-4.2.12/sbin/rt-session-viewer.in000644 000765 000024 00000006352 12555754775 017601 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT::Interface::CLI qw(Init); Init(); my $session_id = shift; Pod::Usage::pod2usage({ verbose => 2 }) unless $session_id; require RT::Interface::Web::Session; my %session; tie %session, 'RT::Interface::Web::Session', $session_id; unless ( $session{'_session_id'} eq $session_id ) { print STDERR "Couldn't load session $session_id\n"; exit 1; } use Data::Dumper; print "Content of session $session_id: ". Dumper( \%session); __END__ =head1 NAME rt-session-viewer - show the content of a user's session =head1 SYNOPSIS # show the content of a session rt-session-viewer 2c21c8a2909c14eff12975dd2cc7b9a3 =head1 DESCRIPTION This script deserializes and print content of a session identified by . May be useful for developers and for troubleshooting problems. =cut rt-4.2.12/sbin/rt-setup-database000754 000765 000024 00000057331 12562703633 017102 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; use 5.010; use vars qw($Nobody $SystemUser $item); # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use Term::ReadKey; use Getopt::Long; use Data::GUID; $| = 1; # unbuffer all output. my %args = ( package => 'RT', ); GetOptions( \%args, 'action=s', 'force', 'debug', 'dba=s', 'dba-password=s', 'prompt-for-dba-password', 'package=s', 'datafile=s', 'datadir=s', 'skip-create', 'root-password-file=s', 'package=s', 'ext-version=s', 'upgrade-from=s', 'upgrade-to=s', 'help|h', ); no warnings 'once'; if ( $args{help} || ! $args{'action'} ) { require Pod::Usage; Pod::Usage::pod2usage({ verbose => 2 }); exit; } require RT; RT->LoadConfig(); RT->InitClasses(); # Force warnings to be output to STDERR if we're not already logging # them at a higher level RT->Config->Set( LogToSTDERR => 'warning') unless ( RT->Config->Get( 'LogToSTDERR' ) && RT->Config->Get( 'LogToSTDERR' ) =~ /^(debug|info|notice)$/ ); RT::InitLogging(); # get customized root password my $root_password; if ( $args{'root-password-file'} ) { open( my $fh, '<', $args{'root-password-file'} ) or die "Couldn't open 'args{'root-password-file'}' for reading: $!"; $root_password = <$fh>; chomp $root_password; my $min_length = RT->Config->Get('MinimumPasswordLength'); if ($min_length) { die "password needs to be at least $min_length long, please check file '$args{'root-password-file'}'" if length $root_password < $min_length; } close $fh; } # check and setup @actions my @actions = grep $_, split /,/, $args{'action'}; if ( @actions > 1 && $args{'datafile'} ) { print STDERR "You can not use --datafile option with multiple actions.\n"; exit(-1); } foreach ( @actions ) { unless ( /^(?:init|create|drop|schema|acl|indexes|coredata|insert|upgrade)$/ ) { print STDERR "$0 called with an invalid --action parameter.\n"; exit(-1); } if ( /^(?:init|drop|upgrade)$/ && @actions > 1 ) { print STDERR "You can not mix init, drop or upgrade action with any action.\n"; exit(-1); } } # convert init to multiple actions my $init = 0; if ( $actions[0] eq 'init' ) { if ($args{'skip-create'}) { @actions = qw(schema coredata insert); } else { @actions = qw(create schema acl coredata insert); } $init = 1; } # set options from environment foreach my $key(qw(Type Host Name User Password)) { next unless exists $ENV{ 'RT_DB_'. uc $key }; print "Using Database$key from RT_DB_". uc($key) ." environment variable.\n"; RT->Config->Set( "Database$key", $ENV{ 'RT_DB_'. uc $key }); } my $db_type = RT->Config->Get('DatabaseType') || ''; my $db_host = RT->Config->Get('DatabaseHost') || ''; my $db_port = RT->Config->Get('DatabasePort') || ''; my $db_name = RT->Config->Get('DatabaseName') || ''; my $db_user = RT->Config->Get('DatabaseUser') || ''; my $db_pass = RT->Config->Get('DatabasePassword') || ''; # load it here to get error immidiatly if DB type is not supported require RT::Handle; if ( $db_type eq 'SQLite' && !File::Spec->file_name_is_absolute($db_name) ) { $db_name = File::Spec->catfile($RT::VarPath, $db_name); RT->Config->Set( DatabaseName => $db_name ); } my $dba_user = $args{'dba'} || $ENV{'RT_DBA_USER'} || RT->Config->Get('DatabaseAdmin') || ''; my $dba_pass = $args{'dba-password'} || $ENV{'RT_DBA_PASSWORD'}; if ($args{'skip-create'}) { $dba_user = $db_user; $dba_pass = $db_pass; } else { if ( !$args{force} && ( !defined $dba_pass || $args{'prompt-for-dba-password'} ) ) { $dba_pass = get_dba_password(); chomp $dba_pass if defined($dba_pass); } } my $version_word_regex = join '|', RT::Handle->version_words; my $version_dir = qr/^\d+\.\d+\.\d+(?:$version_word_regex)?\d*$/; print "Working with:\n" ."Type:\t$db_type\nHost:\t$db_host\nPort:\t$db_port\nName:\t$db_name\n" ."User:\t$db_user\nDBA:\t$dba_user" . ($args{'skip-create'} ? ' (No DBA)' : '') . "\n"; my $package = $args{'package'} || 'RT'; my $ext_version = $args{'ext-version'}; my $full_id = Data::GUID->new->as_string; my $log_actions = 0; if ($args{'package'} ne 'RT') { RT->ConnectToDatabase(); RT->InitSystemObjects(); $log_actions = 1; } foreach my $action ( @actions ) { no strict 'refs'; my ($status, $msg) = *{ 'action_'. $action }{'CODE'}->( %args ); error($action, $msg) unless $status; print $msg .".\n" if $msg; print "Done.\n"; } sub action_create { my %args = @_; my $dbh = get_system_dbh(); my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'create' ); return ($status, $msg) unless $status; print "Now creating a $db_type database $db_name for RT.\n"; return RT::Handle->CreateDatabase( $dbh ); } sub action_drop { my %args = @_; print "Dropping $db_type database $db_name.\n"; unless ( $args{'force'} ) { print <DropDatabase( $dbh ); } sub action_schema { my %args = @_; my $dbh = get_admin_dbh(); my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'schema' ); return ($status, $msg) unless $status; my $individual_id = Data::GUID->new->as_string(); my %upgrade_data = ( action => 'schema', filename => Cwd::abs_path($args{'datafile'} || $args{'datadir'} || ''), stage => 'before', full_id => $full_id, individual_id => $individual_id, ); $upgrade_data{'ext_version'} = $ext_version if $ext_version; RT->System->AddUpgradeHistory($package => \%upgrade_data) if $log_actions; print "Now populating database schema.\n"; my @ret = RT::Handle->InsertSchema( $dbh, $args{'datafile'} || $args{'datadir'} ); %upgrade_data = ( stage => 'after', individual_id => $individual_id, return_value => [ @ret ], ); RT->System->AddUpgradeHistory($package => \%upgrade_data) if $log_actions; return @ret; } sub action_acl { my %args = @_; my $dbh = get_admin_dbh(); my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'acl' ); return ($status, $msg) unless $status; my $individual_id = Data::GUID->new->as_string(); my %upgrade_data = ( action => 'acl', filename => Cwd::abs_path($args{'datafile'} || $args{'datadir'} || ''), stage => 'before', full_id => $full_id, individual_id => $individual_id, ); $upgrade_data{'ext_version'} = $ext_version if $ext_version; RT->System->AddUpgradeHistory($package => \%upgrade_data) if $log_actions; print "Now inserting database ACLs.\n"; my @ret = RT::Handle->InsertACL( $dbh, $args{'datafile'} || $args{'datadir'} ); %upgrade_data = ( stage => 'after', individual_id => $individual_id, return_value => [ @ret ], ); RT->System->AddUpgradeHistory($package => \%upgrade_data) if $log_actions; return @ret; } sub action_indexes { my %args = @_; RT->ConnectToDatabase; my $individual_id = Data::GUID->new->as_string(); my %upgrade_data = ( action => 'indexes', filename => Cwd::abs_path($args{'datafile'} || $args{'datadir'} || ''), stage => 'before', full_id => $full_id, individual_id => $individual_id, ); $upgrade_data{'ext_version'} = $ext_version if $ext_version; RT->System->AddUpgradeHistory($package => \%upgrade_data) if $log_actions; my $dbh = get_admin_dbh(); $RT::Handle = RT::Handle->new; $RT::Handle->dbh( $dbh ); RT::InitLogging(); print "Now inserting database indexes.\n"; my @ret = RT::Handle->InsertIndexes( $dbh, $args{'datafile'} || $args{'datadir'} ); $RT::Handle = RT::Handle->new; $RT::Handle->dbh( undef ); RT->ConnectToDatabase; %upgrade_data = ( stage => 'after', individual_id => $individual_id, return_value => [ @ret ], ); RT->System->AddUpgradeHistory($package => \%upgrade_data) if $log_actions; return @ret; } sub action_coredata { my %args = @_; $RT::Handle = RT::Handle->new; $RT::Handle->dbh( undef ); RT::ConnectToDatabase(); my ($status, $msg) = RT::Handle->CheckCompatibility( $RT::Handle->dbh, 'coredata' ); return ($status, $msg) unless $status; print "Now inserting RT core system objects.\n"; return $RT::Handle->InsertInitialData; } sub action_insert { state $RAN_INIT; my %args = @_; unless ($RAN_INIT) { $RT::Handle = RT::Handle->new; RT::Init(); $RAN_INIT++; } $log_actions = 1; my ($status, $msg) = RT::Handle->CheckCompatibility( $RT::Handle->dbh, 'insert' ); return ($status, $msg) unless $status; print "Now inserting data.\n"; my $file = $args{'datafile'}; $file = $RT::EtcPath . "/initialdata" if $init && !$file; $file ||= $args{'datadir'}."/content"; my $individual_id = Data::GUID->new->as_string(); my %upgrade_data = ( action => 'insert', filename => Cwd::abs_path($file), stage => 'before', full_id => $full_id, individual_id => $individual_id ); $upgrade_data{'ext_version'} = $ext_version if $ext_version; open my $handle, '<', $file or warn "Unable to open $file: $!"; $upgrade_data{content} = do {local $/; <$handle>} if $handle; RT->System->AddUpgradeHistory($package => \%upgrade_data); my @ret; my $upgrade = sub { @ret = $RT::Handle->InsertData( $file, $root_password ) }; for my $file (@{$args{backcompat} || []}) { my $lines = do {local $/; local @ARGV = ($file); <>}; my $sub = eval "sub {\n# line 1 $file\n$lines\n}"; unless ($sub) { warn "Failed to load backcompat $file: $@"; next; } my $current = $upgrade; $upgrade = sub { $sub->($current) }; } $upgrade->(); # XXX Reconnecting to insert the history entry # until we can sort out removing # the disconnect at the end of InsertData. RT->ConnectToDatabase(); %upgrade_data = ( stage => 'after', individual_id => $individual_id, return_value => [ @ret ], ); RT->System->AddUpgradeHistory($package => \%upgrade_data); my $db_type = RT->Config->Get('DatabaseType'); $RT::Handle->Disconnect() unless $db_type eq 'SQLite'; return @ret; } sub action_upgrade { my %args = @_; my $base_dir = $args{'datadir'} || "./etc/upgrade"; return (0, "Couldn't read dir '$base_dir' with upgrade data") unless -d $base_dir || -r _; my $upgrading_from = undef; do { if ( defined $upgrading_from ) { print "Doesn't match #.#.#: "; } else { print "Enter $args{package} version you're upgrading from: "; } $upgrading_from = $args{'upgrade-from'} || scalar ; chomp $upgrading_from; $upgrading_from =~ s/\s+//g; } while $upgrading_from !~ /$version_dir/; my $upgrading_to = $RT::VERSION; return (0, "The current version $upgrading_to is lower than $upgrading_from") if RT::Handle::cmp_version( $upgrading_from, $upgrading_to ) > 0; return (1, "The version $upgrading_to you're upgrading to is up to date") if RT::Handle::cmp_version( $upgrading_from, $upgrading_to ) == 0; my @versions = get_versions_from_to($base_dir, $upgrading_from, undef); return (1, "No DB changes since $upgrading_from") unless @versions; if (RT::Handle::cmp_version($versions[-1], $upgrading_to) > 0) { print "\n***** There are upgrades for $versions[-1], which is later than $upgrading_to,\n"; print "***** which you are nominally upgrading to. Upgrading to $versions[-1] instead.\n"; $upgrading_to = $versions[-1]; } print "\nGoing to apply following upgrades:\n"; print map "* $_\n", @versions; { my $custom_upgrading_to = undef; do { if ( defined $custom_upgrading_to ) { print "Doesn't match #.#.#: "; } else { print "\nEnter $args{package} version if you want to stop upgrade at some point,\n"; print " or leave it blank if you want apply above upgrades: "; } $custom_upgrading_to = $args{'upgrade-to'} || scalar ; chomp $custom_upgrading_to; $custom_upgrading_to =~ s/\s+//g; last unless $custom_upgrading_to; } while $custom_upgrading_to !~ /$version_dir/; if ( $custom_upgrading_to ) { return ( 0, "The version you entered ($custom_upgrading_to) is lower than\n" ."version you're upgrading from ($upgrading_from)" ) if RT::Handle::cmp_version( $upgrading_from, $custom_upgrading_to ) > 0; return (1, "The version you're upgrading to is up to date") if RT::Handle::cmp_version( $upgrading_from, $custom_upgrading_to ) == 0; if ( RT::Handle::cmp_version( $RT::VERSION, $custom_upgrading_to ) < 0 ) { print "Version you entered is greater than installed ($RT::VERSION).\n"; _yesno() or exit(-2); } # ok, checked everything no let's refresh list $upgrading_to = $custom_upgrading_to; @versions = get_versions_from_to($base_dir, $upgrading_from, $upgrading_to); return (1, "No DB changes between $upgrading_from and $upgrading_to") unless @versions; print "\nGoing to apply following upgrades:\n"; print map "* $_\n", @versions; } } unless ( $args{'force'} ) { print "\nIT'S VERY IMPORTANT TO BACK UP BEFORE THIS STEP\n\n"; _yesno() or exit(-2); } RT->ConnectToDatabase(); RT->InitSystemObjects(); $log_actions = 1; RT->System->AddUpgradeHistory($package => { type => 'full upgrade', action => 'upgrade', stage => 'before', from => $upgrading_from, to => $upgrading_to, versions => [@versions], full_id => $full_id, individual_id => $full_id }); # Ensure that the Attributes column is big enough to hold the # upgrade steps we're going to add; this step exists in 4.0.6 for # mysql, but that may be too late. Run it as soon as possible. if (RT->Config->Get('DatabaseType') eq 'mysql' and RT::Handle::cmp_version( $upgrading_from, '4.0.6') < 0) { my $dbh = get_admin_dbh(); # Before the binary switch in 3.7.87, we want to alter text -> # longtext, not blob -> longblob if (RT::Handle::cmp_version( $upgrading_from, '3.7.87') < 0) { $dbh->do("ALTER TABLE Attributes MODIFY Content LONGTEXT") } else { $dbh->do("ALTER TABLE Attributes MODIFY Content LONGBLOB") } } my $previous = $upgrading_from; my ( $ret, $msg ); foreach my $n ( 0..$#versions ) { my $v = $versions[$n]; my $individual_id = Data::GUID->new->as_string(); my @back = grep {-e $_} map {"$base_dir/$versions[$_]/backcompat"} $n+1..$#versions; print "Processing $v\n"; RT->System->AddUpgradeHistory($package => { action => 'upgrade', type => 'individual upgrade', stage => 'before', from => $previous, to => $v, full_id => $full_id, individual_id => $individual_id, }); my %tmp = (%args, datadir => "$base_dir/$v", datafile => undef, backcompat => \@back); if ( -e "$base_dir/$v/schema.$db_type" ) { ( $ret, $msg ) = action_schema( %tmp ); return ( $ret, $msg ) unless $ret; } if ( -e "$base_dir/$v/acl.$db_type" ) { ( $ret, $msg ) = action_acl( %tmp ); return ( $ret, $msg ) unless $ret; } if ( -e "$base_dir/$v/indexes" ) { ( $ret, $msg ) = action_indexes( %tmp ); return ( $ret, $msg ) unless $ret; } if ( -e "$base_dir/$v/content" ) { ( $ret, $msg ) = action_insert( %tmp ); return ( $ret, $msg ) unless $ret; } # XXX: Another connect since the insert called # previous to this step will disconnect. RT->ConnectToDatabase(); RT->System->AddUpgradeHistory($package => { stage => 'after', individual_id => $individual_id, }); $previous = $v; } RT->System->AddUpgradeHistory($package => { stage => 'after', individual_id => $full_id, }); return 1; } sub get_versions_from_to { my ($base_dir, $from, $to) = @_; opendir( my $dh, $base_dir ) or die "couldn't open dir: $!"; my @versions = grep -d "$base_dir/$_" && /$version_dir/, readdir $dh; closedir $dh; die "\nERROR: No upgrade data found in '$base_dir'! Perhaps you specified the wrong --datadir?\n" unless @versions; return grep defined $to ? RT::Handle::cmp_version($_, $to) <= 0 : 1, grep RT::Handle::cmp_version($_, $from) > 0, sort RT::Handle::cmp_version @versions; } sub error { my ($action, $msg) = @_; print STDERR "Couldn't finish '$action' step.\n\n"; print STDERR "ERROR: $msg\n\n"; exit(-1); } sub get_dba_password { print "In order to create or update your RT database," . " this script needs to connect to your " . " $db_type instance on $db_host (port '$db_port') as $dba_user\n"; print "Please specify that user's database password below. If the user has no database\n"; print "password, just press return.\n\n"; print "Password: "; ReadMode('noecho'); my $password = ReadLine(0); ReadMode('normal'); print "\n"; return ($password); } # get_system_dbh # Returns L database handle connected to B with DBA credentials. # See also L. sub get_system_dbh { return _get_dbh( RT::Handle->SystemDSN, $dba_user, $dba_pass ); } sub get_admin_dbh { return _get_dbh( RT::Handle->DSN, $dba_user, $dba_pass ); } # get_rt_dbh [USER, PASSWORD] # Returns L database handle connected to RT database, # you may specify credentials(USER and PASSWORD) to connect # with. By default connects with credentials from RT config. sub get_rt_dbh { return _get_dbh( RT::Handle->DSN, $db_user, $db_pass ); } sub _get_dbh { my ($dsn, $user, $pass) = @_; my $dbh = DBI->connect( $dsn, $user, $pass, { RaiseError => 0, PrintError => 0 }, ); unless ( $dbh ) { my $msg = "Failed to connect to $dsn as user '$user': ". $DBI::errstr; if ( $args{'debug'} ) { require Carp; Carp::confess( $msg ); } else { print STDERR $msg; exit -1; } } return $dbh; } sub _yesno { print "Proceed [y/N]:"; my $x = scalar(); $x =~ /^y/i; } 1; __END__ =head1 NAME rt-setup-database - Set up RT's database =head1 SYNOPSIS rt-setup-database --action ... =head1 OPTIONS =over =item action Several actions can be combined using comma separated list. =over =item init Initialize the database. This is combination of multiple actions listed below. Create DB, schema, setup acl, insert core data and initial data. =item upgrade Apply all needed schema/acl/content updates (will ask for version to upgrade from) =item create Create the database. =item drop Drop the database. This will B. =item schema Initialize only the database schema To use a local or supplementary datafile, specify it using the '--datadir' option below. =item acl Initialize only the database ACLs To use a local or supplementary datafile, specify it using the '--datadir' option below. =item coredata Insert data into RT's database. This data is required for normal functioning of any RT instance. =item insert Insert data into RT's database. By default, will use RT's installation data. To use a local or supplementary datafile, specify it using the '--datafile' option below. =back =item datafile file path of the data you want to action on e.g. C<--datafile /path/to/datafile> =item datadir Used to specify a path to find the local database schema and acls to be installed. e.g. C<--datadir /path/to/> =item dba dba's username =item dba-password dba's password =item prompt-for-dba-password Ask for the database administrator's password interactively =item skip-create for 'init': skip creating the database and the user account, so we don't need administrator privileges =item root-password-file for 'init' and 'insert': rather than using the default administrative password for RT's "root" user, use the password in this file. =item package the name of the entity performing a create or upgrade. Used for logging changes in the DB. Defaults to RT, otherwise it should be the fully qualified package name of the extension or plugin making changes to the DB. =item ext-version current version of extension making a change. Not needed for RT since RT has a more elaborate system to track upgrades across multiple versions. =item upgrade-from for 'upgrade': specifies the version to upgrade from, and do not prompt for it if it appears to be a valid version. =item upgrade-to for 'upgrade': specifies the version to upgrade to, and do not prompt for it if it appears to be a valid version. =back =cut rt-4.2.12/sbin/rt-setup-database.in000644 000765 000024 00000057343 12555754775 017527 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; use 5.010; use vars qw($Nobody $SystemUser $item); # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use Term::ReadKey; use Getopt::Long; use Data::GUID; $| = 1; # unbuffer all output. my %args = ( package => 'RT', ); GetOptions( \%args, 'action=s', 'force', 'debug', 'dba=s', 'dba-password=s', 'prompt-for-dba-password', 'package=s', 'datafile=s', 'datadir=s', 'skip-create', 'root-password-file=s', 'package=s', 'ext-version=s', 'upgrade-from=s', 'upgrade-to=s', 'help|h', ); no warnings 'once'; if ( $args{help} || ! $args{'action'} ) { require Pod::Usage; Pod::Usage::pod2usage({ verbose => 2 }); exit; } require RT; RT->LoadConfig(); RT->InitClasses(); # Force warnings to be output to STDERR if we're not already logging # them at a higher level RT->Config->Set( LogToSTDERR => 'warning') unless ( RT->Config->Get( 'LogToSTDERR' ) && RT->Config->Get( 'LogToSTDERR' ) =~ /^(debug|info|notice)$/ ); RT::InitLogging(); # get customized root password my $root_password; if ( $args{'root-password-file'} ) { open( my $fh, '<', $args{'root-password-file'} ) or die "Couldn't open 'args{'root-password-file'}' for reading: $!"; $root_password = <$fh>; chomp $root_password; my $min_length = RT->Config->Get('MinimumPasswordLength'); if ($min_length) { die "password needs to be at least $min_length long, please check file '$args{'root-password-file'}'" if length $root_password < $min_length; } close $fh; } # check and setup @actions my @actions = grep $_, split /,/, $args{'action'}; if ( @actions > 1 && $args{'datafile'} ) { print STDERR "You can not use --datafile option with multiple actions.\n"; exit(-1); } foreach ( @actions ) { unless ( /^(?:init|create|drop|schema|acl|indexes|coredata|insert|upgrade)$/ ) { print STDERR "$0 called with an invalid --action parameter.\n"; exit(-1); } if ( /^(?:init|drop|upgrade)$/ && @actions > 1 ) { print STDERR "You can not mix init, drop or upgrade action with any action.\n"; exit(-1); } } # convert init to multiple actions my $init = 0; if ( $actions[0] eq 'init' ) { if ($args{'skip-create'}) { @actions = qw(schema coredata insert); } else { @actions = qw(create schema acl coredata insert); } $init = 1; } # set options from environment foreach my $key(qw(Type Host Name User Password)) { next unless exists $ENV{ 'RT_DB_'. uc $key }; print "Using Database$key from RT_DB_". uc($key) ." environment variable.\n"; RT->Config->Set( "Database$key", $ENV{ 'RT_DB_'. uc $key }); } my $db_type = RT->Config->Get('DatabaseType') || ''; my $db_host = RT->Config->Get('DatabaseHost') || ''; my $db_port = RT->Config->Get('DatabasePort') || ''; my $db_name = RT->Config->Get('DatabaseName') || ''; my $db_user = RT->Config->Get('DatabaseUser') || ''; my $db_pass = RT->Config->Get('DatabasePassword') || ''; # load it here to get error immidiatly if DB type is not supported require RT::Handle; if ( $db_type eq 'SQLite' && !File::Spec->file_name_is_absolute($db_name) ) { $db_name = File::Spec->catfile($RT::VarPath, $db_name); RT->Config->Set( DatabaseName => $db_name ); } my $dba_user = $args{'dba'} || $ENV{'RT_DBA_USER'} || RT->Config->Get('DatabaseAdmin') || ''; my $dba_pass = $args{'dba-password'} || $ENV{'RT_DBA_PASSWORD'}; if ($args{'skip-create'}) { $dba_user = $db_user; $dba_pass = $db_pass; } else { if ( !$args{force} && ( !defined $dba_pass || $args{'prompt-for-dba-password'} ) ) { $dba_pass = get_dba_password(); chomp $dba_pass if defined($dba_pass); } } my $version_word_regex = join '|', RT::Handle->version_words; my $version_dir = qr/^\d+\.\d+\.\d+(?:$version_word_regex)?\d*$/; print "Working with:\n" ."Type:\t$db_type\nHost:\t$db_host\nPort:\t$db_port\nName:\t$db_name\n" ."User:\t$db_user\nDBA:\t$dba_user" . ($args{'skip-create'} ? ' (No DBA)' : '') . "\n"; my $package = $args{'package'} || 'RT'; my $ext_version = $args{'ext-version'}; my $full_id = Data::GUID->new->as_string; my $log_actions = 0; if ($args{'package'} ne 'RT') { RT->ConnectToDatabase(); RT->InitSystemObjects(); $log_actions = 1; } foreach my $action ( @actions ) { no strict 'refs'; my ($status, $msg) = *{ 'action_'. $action }{'CODE'}->( %args ); error($action, $msg) unless $status; print $msg .".\n" if $msg; print "Done.\n"; } sub action_create { my %args = @_; my $dbh = get_system_dbh(); my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'create' ); return ($status, $msg) unless $status; print "Now creating a $db_type database $db_name for RT.\n"; return RT::Handle->CreateDatabase( $dbh ); } sub action_drop { my %args = @_; print "Dropping $db_type database $db_name.\n"; unless ( $args{'force'} ) { print <DropDatabase( $dbh ); } sub action_schema { my %args = @_; my $dbh = get_admin_dbh(); my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'schema' ); return ($status, $msg) unless $status; my $individual_id = Data::GUID->new->as_string(); my %upgrade_data = ( action => 'schema', filename => Cwd::abs_path($args{'datafile'} || $args{'datadir'} || ''), stage => 'before', full_id => $full_id, individual_id => $individual_id, ); $upgrade_data{'ext_version'} = $ext_version if $ext_version; RT->System->AddUpgradeHistory($package => \%upgrade_data) if $log_actions; print "Now populating database schema.\n"; my @ret = RT::Handle->InsertSchema( $dbh, $args{'datafile'} || $args{'datadir'} ); %upgrade_data = ( stage => 'after', individual_id => $individual_id, return_value => [ @ret ], ); RT->System->AddUpgradeHistory($package => \%upgrade_data) if $log_actions; return @ret; } sub action_acl { my %args = @_; my $dbh = get_admin_dbh(); my ($status, $msg) = RT::Handle->CheckCompatibility( $dbh, 'acl' ); return ($status, $msg) unless $status; my $individual_id = Data::GUID->new->as_string(); my %upgrade_data = ( action => 'acl', filename => Cwd::abs_path($args{'datafile'} || $args{'datadir'} || ''), stage => 'before', full_id => $full_id, individual_id => $individual_id, ); $upgrade_data{'ext_version'} = $ext_version if $ext_version; RT->System->AddUpgradeHistory($package => \%upgrade_data) if $log_actions; print "Now inserting database ACLs.\n"; my @ret = RT::Handle->InsertACL( $dbh, $args{'datafile'} || $args{'datadir'} ); %upgrade_data = ( stage => 'after', individual_id => $individual_id, return_value => [ @ret ], ); RT->System->AddUpgradeHistory($package => \%upgrade_data) if $log_actions; return @ret; } sub action_indexes { my %args = @_; RT->ConnectToDatabase; my $individual_id = Data::GUID->new->as_string(); my %upgrade_data = ( action => 'indexes', filename => Cwd::abs_path($args{'datafile'} || $args{'datadir'} || ''), stage => 'before', full_id => $full_id, individual_id => $individual_id, ); $upgrade_data{'ext_version'} = $ext_version if $ext_version; RT->System->AddUpgradeHistory($package => \%upgrade_data) if $log_actions; my $dbh = get_admin_dbh(); $RT::Handle = RT::Handle->new; $RT::Handle->dbh( $dbh ); RT::InitLogging(); print "Now inserting database indexes.\n"; my @ret = RT::Handle->InsertIndexes( $dbh, $args{'datafile'} || $args{'datadir'} ); $RT::Handle = RT::Handle->new; $RT::Handle->dbh( undef ); RT->ConnectToDatabase; %upgrade_data = ( stage => 'after', individual_id => $individual_id, return_value => [ @ret ], ); RT->System->AddUpgradeHistory($package => \%upgrade_data) if $log_actions; return @ret; } sub action_coredata { my %args = @_; $RT::Handle = RT::Handle->new; $RT::Handle->dbh( undef ); RT::ConnectToDatabase(); my ($status, $msg) = RT::Handle->CheckCompatibility( $RT::Handle->dbh, 'coredata' ); return ($status, $msg) unless $status; print "Now inserting RT core system objects.\n"; return $RT::Handle->InsertInitialData; } sub action_insert { state $RAN_INIT; my %args = @_; unless ($RAN_INIT) { $RT::Handle = RT::Handle->new; RT::Init(); $RAN_INIT++; } $log_actions = 1; my ($status, $msg) = RT::Handle->CheckCompatibility( $RT::Handle->dbh, 'insert' ); return ($status, $msg) unless $status; print "Now inserting data.\n"; my $file = $args{'datafile'}; $file = $RT::EtcPath . "/initialdata" if $init && !$file; $file ||= $args{'datadir'}."/content"; my $individual_id = Data::GUID->new->as_string(); my %upgrade_data = ( action => 'insert', filename => Cwd::abs_path($file), stage => 'before', full_id => $full_id, individual_id => $individual_id ); $upgrade_data{'ext_version'} = $ext_version if $ext_version; open my $handle, '<', $file or warn "Unable to open $file: $!"; $upgrade_data{content} = do {local $/; <$handle>} if $handle; RT->System->AddUpgradeHistory($package => \%upgrade_data); my @ret; my $upgrade = sub { @ret = $RT::Handle->InsertData( $file, $root_password ) }; for my $file (@{$args{backcompat} || []}) { my $lines = do {local $/; local @ARGV = ($file); <>}; my $sub = eval "sub {\n# line 1 $file\n$lines\n}"; unless ($sub) { warn "Failed to load backcompat $file: $@"; next; } my $current = $upgrade; $upgrade = sub { $sub->($current) }; } $upgrade->(); # XXX Reconnecting to insert the history entry # until we can sort out removing # the disconnect at the end of InsertData. RT->ConnectToDatabase(); %upgrade_data = ( stage => 'after', individual_id => $individual_id, return_value => [ @ret ], ); RT->System->AddUpgradeHistory($package => \%upgrade_data); my $db_type = RT->Config->Get('DatabaseType'); $RT::Handle->Disconnect() unless $db_type eq 'SQLite'; return @ret; } sub action_upgrade { my %args = @_; my $base_dir = $args{'datadir'} || "./etc/upgrade"; return (0, "Couldn't read dir '$base_dir' with upgrade data") unless -d $base_dir || -r _; my $upgrading_from = undef; do { if ( defined $upgrading_from ) { print "Doesn't match #.#.#: "; } else { print "Enter $args{package} version you're upgrading from: "; } $upgrading_from = $args{'upgrade-from'} || scalar ; chomp $upgrading_from; $upgrading_from =~ s/\s+//g; } while $upgrading_from !~ /$version_dir/; my $upgrading_to = $RT::VERSION; return (0, "The current version $upgrading_to is lower than $upgrading_from") if RT::Handle::cmp_version( $upgrading_from, $upgrading_to ) > 0; return (1, "The version $upgrading_to you're upgrading to is up to date") if RT::Handle::cmp_version( $upgrading_from, $upgrading_to ) == 0; my @versions = get_versions_from_to($base_dir, $upgrading_from, undef); return (1, "No DB changes since $upgrading_from") unless @versions; if (RT::Handle::cmp_version($versions[-1], $upgrading_to) > 0) { print "\n***** There are upgrades for $versions[-1], which is later than $upgrading_to,\n"; print "***** which you are nominally upgrading to. Upgrading to $versions[-1] instead.\n"; $upgrading_to = $versions[-1]; } print "\nGoing to apply following upgrades:\n"; print map "* $_\n", @versions; { my $custom_upgrading_to = undef; do { if ( defined $custom_upgrading_to ) { print "Doesn't match #.#.#: "; } else { print "\nEnter $args{package} version if you want to stop upgrade at some point,\n"; print " or leave it blank if you want apply above upgrades: "; } $custom_upgrading_to = $args{'upgrade-to'} || scalar ; chomp $custom_upgrading_to; $custom_upgrading_to =~ s/\s+//g; last unless $custom_upgrading_to; } while $custom_upgrading_to !~ /$version_dir/; if ( $custom_upgrading_to ) { return ( 0, "The version you entered ($custom_upgrading_to) is lower than\n" ."version you're upgrading from ($upgrading_from)" ) if RT::Handle::cmp_version( $upgrading_from, $custom_upgrading_to ) > 0; return (1, "The version you're upgrading to is up to date") if RT::Handle::cmp_version( $upgrading_from, $custom_upgrading_to ) == 0; if ( RT::Handle::cmp_version( $RT::VERSION, $custom_upgrading_to ) < 0 ) { print "Version you entered is greater than installed ($RT::VERSION).\n"; _yesno() or exit(-2); } # ok, checked everything no let's refresh list $upgrading_to = $custom_upgrading_to; @versions = get_versions_from_to($base_dir, $upgrading_from, $upgrading_to); return (1, "No DB changes between $upgrading_from and $upgrading_to") unless @versions; print "\nGoing to apply following upgrades:\n"; print map "* $_\n", @versions; } } unless ( $args{'force'} ) { print "\nIT'S VERY IMPORTANT TO BACK UP BEFORE THIS STEP\n\n"; _yesno() or exit(-2); } RT->ConnectToDatabase(); RT->InitSystemObjects(); $log_actions = 1; RT->System->AddUpgradeHistory($package => { type => 'full upgrade', action => 'upgrade', stage => 'before', from => $upgrading_from, to => $upgrading_to, versions => [@versions], full_id => $full_id, individual_id => $full_id }); # Ensure that the Attributes column is big enough to hold the # upgrade steps we're going to add; this step exists in 4.0.6 for # mysql, but that may be too late. Run it as soon as possible. if (RT->Config->Get('DatabaseType') eq 'mysql' and RT::Handle::cmp_version( $upgrading_from, '4.0.6') < 0) { my $dbh = get_admin_dbh(); # Before the binary switch in 3.7.87, we want to alter text -> # longtext, not blob -> longblob if (RT::Handle::cmp_version( $upgrading_from, '3.7.87') < 0) { $dbh->do("ALTER TABLE Attributes MODIFY Content LONGTEXT") } else { $dbh->do("ALTER TABLE Attributes MODIFY Content LONGBLOB") } } my $previous = $upgrading_from; my ( $ret, $msg ); foreach my $n ( 0..$#versions ) { my $v = $versions[$n]; my $individual_id = Data::GUID->new->as_string(); my @back = grep {-e $_} map {"$base_dir/$versions[$_]/backcompat"} $n+1..$#versions; print "Processing $v\n"; RT->System->AddUpgradeHistory($package => { action => 'upgrade', type => 'individual upgrade', stage => 'before', from => $previous, to => $v, full_id => $full_id, individual_id => $individual_id, }); my %tmp = (%args, datadir => "$base_dir/$v", datafile => undef, backcompat => \@back); if ( -e "$base_dir/$v/schema.$db_type" ) { ( $ret, $msg ) = action_schema( %tmp ); return ( $ret, $msg ) unless $ret; } if ( -e "$base_dir/$v/acl.$db_type" ) { ( $ret, $msg ) = action_acl( %tmp ); return ( $ret, $msg ) unless $ret; } if ( -e "$base_dir/$v/indexes" ) { ( $ret, $msg ) = action_indexes( %tmp ); return ( $ret, $msg ) unless $ret; } if ( -e "$base_dir/$v/content" ) { ( $ret, $msg ) = action_insert( %tmp ); return ( $ret, $msg ) unless $ret; } # XXX: Another connect since the insert called # previous to this step will disconnect. RT->ConnectToDatabase(); RT->System->AddUpgradeHistory($package => { stage => 'after', individual_id => $individual_id, }); $previous = $v; } RT->System->AddUpgradeHistory($package => { stage => 'after', individual_id => $full_id, }); return 1; } sub get_versions_from_to { my ($base_dir, $from, $to) = @_; opendir( my $dh, $base_dir ) or die "couldn't open dir: $!"; my @versions = grep -d "$base_dir/$_" && /$version_dir/, readdir $dh; closedir $dh; die "\nERROR: No upgrade data found in '$base_dir'! Perhaps you specified the wrong --datadir?\n" unless @versions; return grep defined $to ? RT::Handle::cmp_version($_, $to) <= 0 : 1, grep RT::Handle::cmp_version($_, $from) > 0, sort RT::Handle::cmp_version @versions; } sub error { my ($action, $msg) = @_; print STDERR "Couldn't finish '$action' step.\n\n"; print STDERR "ERROR: $msg\n\n"; exit(-1); } sub get_dba_password { print "In order to create or update your RT database," . " this script needs to connect to your " . " $db_type instance on $db_host (port '$db_port') as $dba_user\n"; print "Please specify that user's database password below. If the user has no database\n"; print "password, just press return.\n\n"; print "Password: "; ReadMode('noecho'); my $password = ReadLine(0); ReadMode('normal'); print "\n"; return ($password); } # get_system_dbh # Returns L database handle connected to B with DBA credentials. # See also L. sub get_system_dbh { return _get_dbh( RT::Handle->SystemDSN, $dba_user, $dba_pass ); } sub get_admin_dbh { return _get_dbh( RT::Handle->DSN, $dba_user, $dba_pass ); } # get_rt_dbh [USER, PASSWORD] # Returns L database handle connected to RT database, # you may specify credentials(USER and PASSWORD) to connect # with. By default connects with credentials from RT config. sub get_rt_dbh { return _get_dbh( RT::Handle->DSN, $db_user, $db_pass ); } sub _get_dbh { my ($dsn, $user, $pass) = @_; my $dbh = DBI->connect( $dsn, $user, $pass, { RaiseError => 0, PrintError => 0 }, ); unless ( $dbh ) { my $msg = "Failed to connect to $dsn as user '$user': ". $DBI::errstr; if ( $args{'debug'} ) { require Carp; Carp::confess( $msg ); } else { print STDERR $msg; exit -1; } } return $dbh; } sub _yesno { print "Proceed [y/N]:"; my $x = scalar(); $x =~ /^y/i; } 1; __END__ =head1 NAME rt-setup-database - Set up RT's database =head1 SYNOPSIS rt-setup-database --action ... =head1 OPTIONS =over =item action Several actions can be combined using comma separated list. =over =item init Initialize the database. This is combination of multiple actions listed below. Create DB, schema, setup acl, insert core data and initial data. =item upgrade Apply all needed schema/acl/content updates (will ask for version to upgrade from) =item create Create the database. =item drop Drop the database. This will B. =item schema Initialize only the database schema To use a local or supplementary datafile, specify it using the '--datadir' option below. =item acl Initialize only the database ACLs To use a local or supplementary datafile, specify it using the '--datadir' option below. =item coredata Insert data into RT's database. This data is required for normal functioning of any RT instance. =item insert Insert data into RT's database. By default, will use RT's installation data. To use a local or supplementary datafile, specify it using the '--datafile' option below. =back =item datafile file path of the data you want to action on e.g. C<--datafile /path/to/datafile> =item datadir Used to specify a path to find the local database schema and acls to be installed. e.g. C<--datadir /path/to/> =item dba dba's username =item dba-password dba's password =item prompt-for-dba-password Ask for the database administrator's password interactively =item skip-create for 'init': skip creating the database and the user account, so we don't need administrator privileges =item root-password-file for 'init' and 'insert': rather than using the default administrative password for RT's "root" user, use the password in this file. =item package the name of the entity performing a create or upgrade. Used for logging changes in the DB. Defaults to RT, otherwise it should be the fully qualified package name of the extension or plugin making changes to the DB. =item ext-version current version of extension making a change. Not needed for RT since RT has a more elaborate system to track upgrades across multiple versions. =item upgrade-from for 'upgrade': specifies the version to upgrade from, and do not prompt for it if it appears to be a valid version. =item upgrade-to for 'upgrade': specifies the version to upgrade to, and do not prompt for it if it appears to be a valid version. =back =cut rt-4.2.12/sbin/rt-setup-fulltext-index000754 000765 000024 00000056244 12562703633 020314 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; no warnings 'once'; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } BEGIN { use RT; RT::LoadConfig(); RT::Init(); }; use RT::Interface::CLI (); my %DB = ( type => scalar RT->Config->Get('DatabaseType'), user => scalar RT->Config->Get('DatabaseUser'), admin => scalar RT->Config->Get('DatabaseAdmin'), admin_password => undef, ); my %OPT = ( help => 0, ask => 1, dryrun => 0, attachments => 1, ); my %DEFAULT; if ( $DB{'type'} eq 'Pg' ) { %DEFAULT = ( table => 'AttachmentsIndex', column => 'ContentIndex', ); } elsif ( $DB{'type'} eq 'mysql' ) { %DEFAULT = ( table => 'AttachmentsIndex', ); } elsif ( $DB{'type'} eq 'Oracle' ) { %DEFAULT = ( prefix => 'rt_fts_', ); } use Getopt::Long qw(GetOptions); GetOptions( 'h|help!' => \$OPT{'help'}, 'ask!' => \$OPT{'ask'}, 'dry-run!' => \$OPT{'dryrun'}, 'attachments!' => \$OPT{'attachments'}, 'table=s' => \$OPT{'table'}, 'column=s' => \$OPT{'column'}, 'url=s' => \$OPT{'url'}, 'maxmatches=i' => \$OPT{'maxmatches'}, 'index-type=s' => \$OPT{'index-type'}, 'dba=s' => \$DB{'admin'}, 'dba-password=s' => \$DB{'admin_password'}, 'limit=i' => \$DB{'batch-size'}, ) or show_help(); if ( $OPT{'help'} || (!$DB{'admin'} && $DB{'type'} eq 'Oracle' ) ) { show_help( !$OPT{'help'} ); } my $dbh = $RT::Handle->dbh; $dbh->{'RaiseError'} = 1; $dbh->{'PrintError'} = 1; # MySQL could either be native of sphinx; find out which if ($DB{'type'} eq "mysql") { my $index_type = lc($OPT{'index-type'} || ''); # Default to sphinx on < 5.6, and error if they provided mysql my $msg; if ($RT::Handle->dbh->{mysql_serverversion} < 50600) { $msg = "Complete support for full-text search requires MySQL 5.6 or higher. For prior\n" ."versions such as yours, full-text indexing can either be provided using MyISAM\n" ."tables, or the external Sphinx indexer. Using MyISAM tables requires that your\n" ."database be tuned to support them, as RT uses InnoDB tables for all other content.\n" ."Using Sphinx will require recompiling MySQL. Which indexing solution would you\n" ."prefer?" } else { $msg = "MySQL 5.6 and above support native full-text indexing; for compatibility\n" ."with earlier versions of RT, the external Sphinx indexer is still supported.\n" ."Which indexing solution would you prefer?" } while ( $index_type ne 'sphinx' and $index_type ne 'mysql' ) { $index_type = lc prompt( message => $msg, default => 'mysql', silent => !$OPT{'ask'}, ); }; $DB{'type'} = $index_type; } if ( $DB{'type'} eq 'mysql' ) { # MySQL 5.6 has FTS on InnoDB "text" columns -- which the # Attachments table doesn't have, but we can make it have. my $table = $OPT{'table'} || prompt( message => "Enter the name of a new MySQL table that will be used to store the\n" . "full-text content and indexes:", default => $DEFAULT{'table'}, silent => !$OPT{'ask'}, ); do_error_is_ok( dba_handle() => "DROP TABLE $table" ) unless $OPT{'dryrun'}; my $engine = $RT::Handle->dbh->{mysql_serverversion} < 50600 ? "MyISAM" : "InnoDB"; my $schema = "CREATE TABLE $table ( " ."id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY," ."Content LONGTEXT ) ENGINE=$engine CHARACTER SET utf8"; insert_schema( $schema ); insert_data( Table => $table, Engine => $engine ); insert_schema( "CREATE FULLTEXT INDEX $table ON $table(Content)" ); print_rt_config( Table => $table ); } elsif ($DB{'type'} eq 'sphinx') { check_sphinx(); my $table = $OPT{'table'} || prompt( message => "Enter name of a new MySQL table that will be used to connect to the\n" . "Sphinx server:", default => $DEFAULT{'table'}, silent => !$OPT{'ask'}, ); my $url = 'sphinx://localhost:3312/rt'; my $version = ($dbh->selectrow_array("show variables like 'version'"))[1]; $url = 'sphinx://127.0.0.1:3312/rt' if $version and $version =~ /^(\d+\.\d+)/ and $1 >= 5.5; $url = $OPT{'url'} || prompt( message => "Enter URL of the sphinx search server; this should be of the form\n" . "sphinx://:/", default => $url, silent => !$OPT{'ask'}, ); my $maxmatches = $OPT{'maxmatches'} || prompt( message => "Maximum number of matches to return; this is the maximum number of\n" . "attachment records returned by the search, not the maximum number\n" . "of tickets. Both your RT_SiteConfig.pm and your sphinx.conf must\n" . "agree on this value. Larger values cause your Sphinx server to\n" . "consume more memory and CPU time per query.", default => 10000, silent => !$OPT{'ask'}, ); my $schema = < "DROP TABLE $table" ) unless $OPT{'dryrun'}; insert_schema( $schema ); print_rt_config( Table => $table, MaxMatches => $maxmatches ); require URI; my $urlo = URI->new( $url ); my ($host, $port) = split /:/, $urlo->authority; my $index = $urlo->path; $index =~ s{^/+}{}; my $var_path = $RT::VarPath; my %sphinx_conf = (); $sphinx_conf{'host'} = RT->Config->Get('DatabaseHost'); $sphinx_conf{'db'} = RT->Config->Get('DatabaseName'); $sphinx_conf{'user'} = RT->Config->Get('DatabaseUser'); $sphinx_conf{'pass'} = RT->Config->Get('DatabasePassword'); print <= 1.10: binlog_path = $var_path/sphinx/ } END } elsif ( $DB{'type'} eq 'Pg' ) { check_tsvalue(); my $table = $OPT{'table'} || prompt( message => "Enter the name of a DB table that will be used to store the Pg tsvector.\n" . "You may either use the existing Attachments table, or create a new\n" . "table. Creating a new table makes initial indexing faster.", default => $DEFAULT{'table'}, silent => !$OPT{'ask'}, ); my $column = $OPT{'column'} || prompt( message => 'Enter the name of a column that will be used to store the Pg tsvector:', default => $DEFAULT{'column'}, silent => !$OPT{'ask'}, ); my @schema; my $drop; if ( lc($table) eq 'attachments' ) { $drop = "ALTER TABLE $table DROP COLUMN $column"; push @schema, "ALTER TABLE $table ADD COLUMN $column tsvector"; } else { $drop = "DROP TABLE $table"; push @schema, split /;\n+/, < "You may choose between GiST or GIN indexes; the GiST takes less space on\n" . "disk and is faster to update, but is an order of magnitude slower to query.", default => 'GIN', silent => !$OPT{'ask'}, ); } do_error_is_ok( dba_handle() => $drop ) unless $OPT{'dryrun'}; insert_schema( $_ ) for @schema; insert_data( Table => $table, Column => $column ); insert_schema( "CREATE INDEX ${column}_idx ON $table USING $index_type($column)" ); print_rt_config( Table => $table, Column => $column ); } elsif ( $DB{'type'} eq 'Oracle' ) { { my $dbah = dba_handle(); do_print_error( $dbah => 'GRANT CTXAPP TO '. $DB{'user'} ); do_print_error( $dbah => 'GRANT EXECUTE ON CTXSYS.CTX_DDL TO '. $DB{'user'} ); } my %PREFERENCES = ( datastore => { type => 'DIRECT_DATASTORE', }, filter => { type => 'AUTO_FILTER', # attributes => { # timeout => 120, # seconds # timeout_type => 'HEURISTIC', # or 'FIXED' # }, }, lexer => { type => 'WORLD_LEXER', }, word_list => { type => 'BASIC_WORDLIST', attributes => { stemmer => 'AUTO', fuzzy_match => 'AUTO', # fuzzy_score => undef, # fuzzy_numresults => undef, # substring_index => undef, # prefix_index => undef, # prefix_length_min => undef, # prefix_length_max => undef, # wlidcard_maxterms => undef, }, }, 'section_group' => { type => 'NULL_SECTION_GROUP', }, storage => { type => 'BASIC_STORAGE', attributes => { R_TABLE_CLAUSE => 'lob (data) store as (cache)', I_INDEX_CLAUSE => 'compress 2', }, }, ); my @params = (); push @params, ora_create_datastore( %{ $PREFERENCES{'datastore'} } ); push @params, ora_create_filter( %{ $PREFERENCES{'filter'} } ); push @params, ora_create_lexer( %{ $PREFERENCES{'lexer'} } ); push @params, ora_create_word_list( %{ $PREFERENCES{'word_list'} } ); push @params, ora_create_stop_list(); push @params, ora_create_section_group( %{ $PREFERENCES{'section_group'} } ); push @params, ora_create_storage( %{ $PREFERENCES{'storage'} } ); my $index_params = join "\n", @params; my $index_name = $DEFAULT{prefix} .'index'; do_error_is_ok( $dbh => "DROP INDEX $index_name" ) unless $OPT{'dryrun'}; $dbh->do( "CREATE INDEX $index_name ON Attachments(Content) indextype is ctxsys.context parameters(' $index_params ')", ) unless $OPT{'dryrun'}; print_rt_config( IndexName => $index_name ); } else { die "Full-text indexes on $DB{type} are not yet supported"; } sub check_tsvalue { my $dbh = $RT::Handle->dbh; my $fts = ($dbh->selectrow_array(<CheckSphinxSE; print STDERR < 'datastore', ); } sub ora_create_filter { my $res = ''; $res .= sprintf "format column %s\n", ora_create_format_column(); $res .= sprintf 'filter %s', ora_create_preference( @_, name => 'filter', ); return $res; } sub ora_create_lexer { return sprintf 'lexer %s', ora_create_preference( @_, name => 'lexer', ); } sub ora_create_word_list { return sprintf 'wordlist %s', ora_create_preference( @_, name => 'word_list', ); } sub ora_create_stop_list { my $file = shift || 'etc/stopwords/en.txt'; return '' unless -e $file; my $name = $DEFAULT{'prefix'} .'stop_list'; unless ($OPT{'dryrun'}) { do_error_is_ok( $dbh => 'begin ctx_ddl.drop_stoplist(?); end;', $name ); $dbh->do( 'begin ctx_ddl.create_stoplist(?, ?); end;', undef, $name, 'BASIC_STOPLIST' ); open( my $fh, '<:utf8', $file ) or die "couldn't open file '$file': $!"; while ( my $word = <$fh> ) { chomp $word; $dbh->do( 'begin ctx_ddl.add_stopword(?, ?); end;', undef, $name, $word ); } close $fh; } return sprintf 'stoplist %s', $name; } sub ora_create_section_group { my %args = @_; my $name = $DEFAULT{'prefix'} .'section_group'; unless ($OPT{'dryrun'}) { do_error_is_ok( $dbh => 'begin ctx_ddl.drop_section_group(?); end;', $name ); $dbh->do( 'begin ctx_ddl.create_section_group(?, ?); end;', undef, $name, $args{'type'} ); } return sprintf 'section group %s', $name; } sub ora_create_storage { return sprintf 'storage %s', ora_create_preference( @_, name => 'storage', ); } sub ora_create_format_column { my $column_name = 'ContentOracleFormat'; return $column_name if $OPT{'dryrun'}; unless ( $dbh->column_info( undef, undef, uc('Attachments'), uc( $column_name ) )->fetchrow_array ) { $dbh->do(qq{ ALTER TABLE Attachments ADD $column_name VARCHAR2(10) }); } my $detect_format = qq{ CREATE OR REPLACE FUNCTION $DEFAULT{prefix}detect_format_simple( parent IN NUMBER, type IN VARCHAR2, encoding IN VARCHAR2, fname IN VARCHAR2 ) RETURN VARCHAR2 AS format VARCHAR2(10); BEGIN format := CASE }; unless ( $OPT{'attachments'} ) { $detect_format .= qq{ WHEN fname IS NOT NULL THEN 'ignore' }; } $detect_format .= qq{ WHEN type = 'text' THEN 'text' WHEN type = 'text/rtf' THEN 'ignore' WHEN type LIKE 'text/%' THEN 'text' WHEN type LIKE 'message/%' THEN 'text' ELSE 'ignore' END; RETURN format; END; }; ora_create_procedure( $detect_format ); $dbh->do(qq{ UPDATE Attachments SET $column_name = $DEFAULT{prefix}detect_format_simple( Parent, ContentType, ContentEncoding, Filename ) WHERE $column_name IS NULL }); $dbh->do(qq{ CREATE OR REPLACE TRIGGER $DEFAULT{prefix}set_format BEFORE INSERT ON Attachments FOR EACH ROW BEGIN :new.$column_name := $DEFAULT{prefix}detect_format_simple( :new.Parent, :new.ContentType, :new.ContentEncoding, :new.Filename ); END; }); return $column_name; } sub ora_create_preference { my %info = @_; my $name = $DEFAULT{'prefix'} . $info{'name'}; return $name if $OPT{'dryrun'}; do_error_is_ok( $dbh => 'begin ctx_ddl.drop_preference(?); end;', $name ); $dbh->do( 'begin ctx_ddl.create_preference(?, ?); end;', undef, $name, $info{'type'} ); return $name unless $info{'attributes'}; while ( my ($attr, $value) = each %{ $info{'attributes'} } ) { $dbh->do( 'begin ctx_ddl.set_attribute(?, ?, ?); end;', undef, $name, $attr, $value ); } return $name; } sub ora_create_procedure { my $text = shift; return if $OPT{'dryrun'}; my $status = $dbh->do($text, { RaiseError => 0 }); # Statement succeeded return if $status; if ( 6550 != $dbh->err ) { # Utter failure die $dbh->errstr; } else { my $msg = $dbh->func( 'plsql_errstr' ); die $dbh->errstr if !defined $msg; die $msg if $msg; } } sub dba_handle { if ( $DB{'type'} eq 'Oracle' ) { $ENV{'NLS_LANG'} = "AMERICAN_AMERICA.AL32UTF8"; $ENV{'NLS_NCHAR'} = "AL32UTF8"; } my $dsn = do { my $h = new RT::Handle; $h->BuildDSN; $h->DSN }; my $dbh = DBI->connect( $dsn, $DB{admin}, $DB{admin_password}, { RaiseError => 1, PrintError => 1 }, ); unless ( $dbh ) { die "Failed to connect to $dsn as user '$DB{admin}': ". $DBI::errstr; } return $dbh; } sub do_error_is_ok { my $dbh = shift; local $dbh->{'RaiseError'} = 0; local $dbh->{'PrintError'} = 0; return $dbh->do(shift, undef, @_); } sub do_print_error { my $dbh = shift; local $dbh->{'RaiseError'} = 0; local $dbh->{'PrintError'} = 1; return $dbh->do(shift, undef, @_); } sub prompt { my %args = ( @_ ); return $args{'default'} if $args{'silent'}; local $| = 1; print $args{'message'}; if ( $args{'default'} ) { print "\n[". $args{'default'} .']: '; } else { print ":\n"; } my $res = ; chomp $res; print "\n"; return $args{'default'} if !$res && $args{'default'}; return $res; } sub verbose { print @_, "\n" if $OPT{verbose} || $OPT{verbose}; 1 } sub debug { print @_, "\n" if $OPT{debug}; 1 } sub error { $RT::Logger->error( @_ ); verbose(@_); 1 } sub warning { $RT::Logger->warning( @_ ); verbose(@_); 1 } sub show_help { my $error = shift; RT::Interface::CLI->ShowHelp( ExitValue => $error, Sections => 'NAME|DESCRIPTION', ); } sub print_rt_config { my %args = @_; my $config = < 1, Indexed => 1, END $config .= sprintf(" %-10s => '$args{$_}',\n",$_) foreach grep defined $args{$_}, keys %args; $config .= ");\n"; print $config; } sub insert_schema { my $dbh = dba_handle(); my $message = "Going to run the following in the DB:"; my $schema = shift; print "$message\n"; my $disp = $schema; $disp =~ s/^/ /mg; print "$disp\n\n"; return if $OPT{'dryrun'}; my $res = $dbh->do( $schema ); unless ( $res ) { die "Couldn't run DDL query: ". $dbh->errstr; } } sub insert_data { return if $OPT{dryrun}; print "Indexing existing data...\n"; $ENV{RT_FTS_CONFIG} = JSON::to_json( {Enable => 1, Indexed => 1, @_}); system( "$RT::SbinPath/rt-fulltext-indexer", "--all", ($DB{'batch-size'} ? ("--limit", $DB{'batch-size'}) : ())); } =head1 NAME rt-setup-fulltext-index - Create indexes for full text search =head1 DESCRIPTION This script creates the appropriate tables, columns, functions, and / or views necessary for full-text searching for your database type. It will drop any existing indexes in the process. Please read F for complete documentation on full-text indexing for your database type. If you have a non-standard database administrator user or password, you may use the C<--dba> and C<--dba-password> parameters to set them explicitly: rt-setup-fulltext-index --dba sysdba --dba-password 'secret' To test what will happen without running any DDL, pass the C<--dryrun> flag. The Oracle index determines which content-types it will index at creation time. By default, textual message bodies and textual uploaded attachments (attachments with filenames) are indexed; to ignore textual attachments, pass the C<--no-attachments> flag when the index is created. =head1 AUTHOR Ruslan Zakirov Eruz@bestpractical.comE, Alex Vandiver Ealexmv@bestpractical.comE =cut rt-4.2.12/sbin/rt-setup-fulltext-index.in000644 000765 000024 00000056256 12555754775 020741 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; no warnings 'once'; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } BEGIN { use RT; RT::LoadConfig(); RT::Init(); }; use RT::Interface::CLI (); my %DB = ( type => scalar RT->Config->Get('DatabaseType'), user => scalar RT->Config->Get('DatabaseUser'), admin => scalar RT->Config->Get('DatabaseAdmin'), admin_password => undef, ); my %OPT = ( help => 0, ask => 1, dryrun => 0, attachments => 1, ); my %DEFAULT; if ( $DB{'type'} eq 'Pg' ) { %DEFAULT = ( table => 'AttachmentsIndex', column => 'ContentIndex', ); } elsif ( $DB{'type'} eq 'mysql' ) { %DEFAULT = ( table => 'AttachmentsIndex', ); } elsif ( $DB{'type'} eq 'Oracle' ) { %DEFAULT = ( prefix => 'rt_fts_', ); } use Getopt::Long qw(GetOptions); GetOptions( 'h|help!' => \$OPT{'help'}, 'ask!' => \$OPT{'ask'}, 'dry-run!' => \$OPT{'dryrun'}, 'attachments!' => \$OPT{'attachments'}, 'table=s' => \$OPT{'table'}, 'column=s' => \$OPT{'column'}, 'url=s' => \$OPT{'url'}, 'maxmatches=i' => \$OPT{'maxmatches'}, 'index-type=s' => \$OPT{'index-type'}, 'dba=s' => \$DB{'admin'}, 'dba-password=s' => \$DB{'admin_password'}, 'limit=i' => \$DB{'batch-size'}, ) or show_help(); if ( $OPT{'help'} || (!$DB{'admin'} && $DB{'type'} eq 'Oracle' ) ) { show_help( !$OPT{'help'} ); } my $dbh = $RT::Handle->dbh; $dbh->{'RaiseError'} = 1; $dbh->{'PrintError'} = 1; # MySQL could either be native of sphinx; find out which if ($DB{'type'} eq "mysql") { my $index_type = lc($OPT{'index-type'} || ''); # Default to sphinx on < 5.6, and error if they provided mysql my $msg; if ($RT::Handle->dbh->{mysql_serverversion} < 50600) { $msg = "Complete support for full-text search requires MySQL 5.6 or higher. For prior\n" ."versions such as yours, full-text indexing can either be provided using MyISAM\n" ."tables, or the external Sphinx indexer. Using MyISAM tables requires that your\n" ."database be tuned to support them, as RT uses InnoDB tables for all other content.\n" ."Using Sphinx will require recompiling MySQL. Which indexing solution would you\n" ."prefer?" } else { $msg = "MySQL 5.6 and above support native full-text indexing; for compatibility\n" ."with earlier versions of RT, the external Sphinx indexer is still supported.\n" ."Which indexing solution would you prefer?" } while ( $index_type ne 'sphinx' and $index_type ne 'mysql' ) { $index_type = lc prompt( message => $msg, default => 'mysql', silent => !$OPT{'ask'}, ); }; $DB{'type'} = $index_type; } if ( $DB{'type'} eq 'mysql' ) { # MySQL 5.6 has FTS on InnoDB "text" columns -- which the # Attachments table doesn't have, but we can make it have. my $table = $OPT{'table'} || prompt( message => "Enter the name of a new MySQL table that will be used to store the\n" . "full-text content and indexes:", default => $DEFAULT{'table'}, silent => !$OPT{'ask'}, ); do_error_is_ok( dba_handle() => "DROP TABLE $table" ) unless $OPT{'dryrun'}; my $engine = $RT::Handle->dbh->{mysql_serverversion} < 50600 ? "MyISAM" : "InnoDB"; my $schema = "CREATE TABLE $table ( " ."id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY," ."Content LONGTEXT ) ENGINE=$engine CHARACTER SET utf8"; insert_schema( $schema ); insert_data( Table => $table, Engine => $engine ); insert_schema( "CREATE FULLTEXT INDEX $table ON $table(Content)" ); print_rt_config( Table => $table ); } elsif ($DB{'type'} eq 'sphinx') { check_sphinx(); my $table = $OPT{'table'} || prompt( message => "Enter name of a new MySQL table that will be used to connect to the\n" . "Sphinx server:", default => $DEFAULT{'table'}, silent => !$OPT{'ask'}, ); my $url = 'sphinx://localhost:3312/rt'; my $version = ($dbh->selectrow_array("show variables like 'version'"))[1]; $url = 'sphinx://127.0.0.1:3312/rt' if $version and $version =~ /^(\d+\.\d+)/ and $1 >= 5.5; $url = $OPT{'url'} || prompt( message => "Enter URL of the sphinx search server; this should be of the form\n" . "sphinx://:/", default => $url, silent => !$OPT{'ask'}, ); my $maxmatches = $OPT{'maxmatches'} || prompt( message => "Maximum number of matches to return; this is the maximum number of\n" . "attachment records returned by the search, not the maximum number\n" . "of tickets. Both your RT_SiteConfig.pm and your sphinx.conf must\n" . "agree on this value. Larger values cause your Sphinx server to\n" . "consume more memory and CPU time per query.", default => 10000, silent => !$OPT{'ask'}, ); my $schema = < "DROP TABLE $table" ) unless $OPT{'dryrun'}; insert_schema( $schema ); print_rt_config( Table => $table, MaxMatches => $maxmatches ); require URI; my $urlo = URI->new( $url ); my ($host, $port) = split /:/, $urlo->authority; my $index = $urlo->path; $index =~ s{^/+}{}; my $var_path = $RT::VarPath; my %sphinx_conf = (); $sphinx_conf{'host'} = RT->Config->Get('DatabaseHost'); $sphinx_conf{'db'} = RT->Config->Get('DatabaseName'); $sphinx_conf{'user'} = RT->Config->Get('DatabaseUser'); $sphinx_conf{'pass'} = RT->Config->Get('DatabasePassword'); print <= 1.10: binlog_path = $var_path/sphinx/ } END } elsif ( $DB{'type'} eq 'Pg' ) { check_tsvalue(); my $table = $OPT{'table'} || prompt( message => "Enter the name of a DB table that will be used to store the Pg tsvector.\n" . "You may either use the existing Attachments table, or create a new\n" . "table. Creating a new table makes initial indexing faster.", default => $DEFAULT{'table'}, silent => !$OPT{'ask'}, ); my $column = $OPT{'column'} || prompt( message => 'Enter the name of a column that will be used to store the Pg tsvector:', default => $DEFAULT{'column'}, silent => !$OPT{'ask'}, ); my @schema; my $drop; if ( lc($table) eq 'attachments' ) { $drop = "ALTER TABLE $table DROP COLUMN $column"; push @schema, "ALTER TABLE $table ADD COLUMN $column tsvector"; } else { $drop = "DROP TABLE $table"; push @schema, split /;\n+/, < "You may choose between GiST or GIN indexes; the GiST takes less space on\n" . "disk and is faster to update, but is an order of magnitude slower to query.", default => 'GIN', silent => !$OPT{'ask'}, ); } do_error_is_ok( dba_handle() => $drop ) unless $OPT{'dryrun'}; insert_schema( $_ ) for @schema; insert_data( Table => $table, Column => $column ); insert_schema( "CREATE INDEX ${column}_idx ON $table USING $index_type($column)" ); print_rt_config( Table => $table, Column => $column ); } elsif ( $DB{'type'} eq 'Oracle' ) { { my $dbah = dba_handle(); do_print_error( $dbah => 'GRANT CTXAPP TO '. $DB{'user'} ); do_print_error( $dbah => 'GRANT EXECUTE ON CTXSYS.CTX_DDL TO '. $DB{'user'} ); } my %PREFERENCES = ( datastore => { type => 'DIRECT_DATASTORE', }, filter => { type => 'AUTO_FILTER', # attributes => { # timeout => 120, # seconds # timeout_type => 'HEURISTIC', # or 'FIXED' # }, }, lexer => { type => 'WORLD_LEXER', }, word_list => { type => 'BASIC_WORDLIST', attributes => { stemmer => 'AUTO', fuzzy_match => 'AUTO', # fuzzy_score => undef, # fuzzy_numresults => undef, # substring_index => undef, # prefix_index => undef, # prefix_length_min => undef, # prefix_length_max => undef, # wlidcard_maxterms => undef, }, }, 'section_group' => { type => 'NULL_SECTION_GROUP', }, storage => { type => 'BASIC_STORAGE', attributes => { R_TABLE_CLAUSE => 'lob (data) store as (cache)', I_INDEX_CLAUSE => 'compress 2', }, }, ); my @params = (); push @params, ora_create_datastore( %{ $PREFERENCES{'datastore'} } ); push @params, ora_create_filter( %{ $PREFERENCES{'filter'} } ); push @params, ora_create_lexer( %{ $PREFERENCES{'lexer'} } ); push @params, ora_create_word_list( %{ $PREFERENCES{'word_list'} } ); push @params, ora_create_stop_list(); push @params, ora_create_section_group( %{ $PREFERENCES{'section_group'} } ); push @params, ora_create_storage( %{ $PREFERENCES{'storage'} } ); my $index_params = join "\n", @params; my $index_name = $DEFAULT{prefix} .'index'; do_error_is_ok( $dbh => "DROP INDEX $index_name" ) unless $OPT{'dryrun'}; $dbh->do( "CREATE INDEX $index_name ON Attachments(Content) indextype is ctxsys.context parameters(' $index_params ')", ) unless $OPT{'dryrun'}; print_rt_config( IndexName => $index_name ); } else { die "Full-text indexes on $DB{type} are not yet supported"; } sub check_tsvalue { my $dbh = $RT::Handle->dbh; my $fts = ($dbh->selectrow_array(<CheckSphinxSE; print STDERR < 'datastore', ); } sub ora_create_filter { my $res = ''; $res .= sprintf "format column %s\n", ora_create_format_column(); $res .= sprintf 'filter %s', ora_create_preference( @_, name => 'filter', ); return $res; } sub ora_create_lexer { return sprintf 'lexer %s', ora_create_preference( @_, name => 'lexer', ); } sub ora_create_word_list { return sprintf 'wordlist %s', ora_create_preference( @_, name => 'word_list', ); } sub ora_create_stop_list { my $file = shift || 'etc/stopwords/en.txt'; return '' unless -e $file; my $name = $DEFAULT{'prefix'} .'stop_list'; unless ($OPT{'dryrun'}) { do_error_is_ok( $dbh => 'begin ctx_ddl.drop_stoplist(?); end;', $name ); $dbh->do( 'begin ctx_ddl.create_stoplist(?, ?); end;', undef, $name, 'BASIC_STOPLIST' ); open( my $fh, '<:utf8', $file ) or die "couldn't open file '$file': $!"; while ( my $word = <$fh> ) { chomp $word; $dbh->do( 'begin ctx_ddl.add_stopword(?, ?); end;', undef, $name, $word ); } close $fh; } return sprintf 'stoplist %s', $name; } sub ora_create_section_group { my %args = @_; my $name = $DEFAULT{'prefix'} .'section_group'; unless ($OPT{'dryrun'}) { do_error_is_ok( $dbh => 'begin ctx_ddl.drop_section_group(?); end;', $name ); $dbh->do( 'begin ctx_ddl.create_section_group(?, ?); end;', undef, $name, $args{'type'} ); } return sprintf 'section group %s', $name; } sub ora_create_storage { return sprintf 'storage %s', ora_create_preference( @_, name => 'storage', ); } sub ora_create_format_column { my $column_name = 'ContentOracleFormat'; return $column_name if $OPT{'dryrun'}; unless ( $dbh->column_info( undef, undef, uc('Attachments'), uc( $column_name ) )->fetchrow_array ) { $dbh->do(qq{ ALTER TABLE Attachments ADD $column_name VARCHAR2(10) }); } my $detect_format = qq{ CREATE OR REPLACE FUNCTION $DEFAULT{prefix}detect_format_simple( parent IN NUMBER, type IN VARCHAR2, encoding IN VARCHAR2, fname IN VARCHAR2 ) RETURN VARCHAR2 AS format VARCHAR2(10); BEGIN format := CASE }; unless ( $OPT{'attachments'} ) { $detect_format .= qq{ WHEN fname IS NOT NULL THEN 'ignore' }; } $detect_format .= qq{ WHEN type = 'text' THEN 'text' WHEN type = 'text/rtf' THEN 'ignore' WHEN type LIKE 'text/%' THEN 'text' WHEN type LIKE 'message/%' THEN 'text' ELSE 'ignore' END; RETURN format; END; }; ora_create_procedure( $detect_format ); $dbh->do(qq{ UPDATE Attachments SET $column_name = $DEFAULT{prefix}detect_format_simple( Parent, ContentType, ContentEncoding, Filename ) WHERE $column_name IS NULL }); $dbh->do(qq{ CREATE OR REPLACE TRIGGER $DEFAULT{prefix}set_format BEFORE INSERT ON Attachments FOR EACH ROW BEGIN :new.$column_name := $DEFAULT{prefix}detect_format_simple( :new.Parent, :new.ContentType, :new.ContentEncoding, :new.Filename ); END; }); return $column_name; } sub ora_create_preference { my %info = @_; my $name = $DEFAULT{'prefix'} . $info{'name'}; return $name if $OPT{'dryrun'}; do_error_is_ok( $dbh => 'begin ctx_ddl.drop_preference(?); end;', $name ); $dbh->do( 'begin ctx_ddl.create_preference(?, ?); end;', undef, $name, $info{'type'} ); return $name unless $info{'attributes'}; while ( my ($attr, $value) = each %{ $info{'attributes'} } ) { $dbh->do( 'begin ctx_ddl.set_attribute(?, ?, ?); end;', undef, $name, $attr, $value ); } return $name; } sub ora_create_procedure { my $text = shift; return if $OPT{'dryrun'}; my $status = $dbh->do($text, { RaiseError => 0 }); # Statement succeeded return if $status; if ( 6550 != $dbh->err ) { # Utter failure die $dbh->errstr; } else { my $msg = $dbh->func( 'plsql_errstr' ); die $dbh->errstr if !defined $msg; die $msg if $msg; } } sub dba_handle { if ( $DB{'type'} eq 'Oracle' ) { $ENV{'NLS_LANG'} = "AMERICAN_AMERICA.AL32UTF8"; $ENV{'NLS_NCHAR'} = "AL32UTF8"; } my $dsn = do { my $h = new RT::Handle; $h->BuildDSN; $h->DSN }; my $dbh = DBI->connect( $dsn, $DB{admin}, $DB{admin_password}, { RaiseError => 1, PrintError => 1 }, ); unless ( $dbh ) { die "Failed to connect to $dsn as user '$DB{admin}': ". $DBI::errstr; } return $dbh; } sub do_error_is_ok { my $dbh = shift; local $dbh->{'RaiseError'} = 0; local $dbh->{'PrintError'} = 0; return $dbh->do(shift, undef, @_); } sub do_print_error { my $dbh = shift; local $dbh->{'RaiseError'} = 0; local $dbh->{'PrintError'} = 1; return $dbh->do(shift, undef, @_); } sub prompt { my %args = ( @_ ); return $args{'default'} if $args{'silent'}; local $| = 1; print $args{'message'}; if ( $args{'default'} ) { print "\n[". $args{'default'} .']: '; } else { print ":\n"; } my $res = ; chomp $res; print "\n"; return $args{'default'} if !$res && $args{'default'}; return $res; } sub verbose { print @_, "\n" if $OPT{verbose} || $OPT{verbose}; 1 } sub debug { print @_, "\n" if $OPT{debug}; 1 } sub error { $RT::Logger->error( @_ ); verbose(@_); 1 } sub warning { $RT::Logger->warning( @_ ); verbose(@_); 1 } sub show_help { my $error = shift; RT::Interface::CLI->ShowHelp( ExitValue => $error, Sections => 'NAME|DESCRIPTION', ); } sub print_rt_config { my %args = @_; my $config = < 1, Indexed => 1, END $config .= sprintf(" %-10s => '$args{$_}',\n",$_) foreach grep defined $args{$_}, keys %args; $config .= ");\n"; print $config; } sub insert_schema { my $dbh = dba_handle(); my $message = "Going to run the following in the DB:"; my $schema = shift; print "$message\n"; my $disp = $schema; $disp =~ s/^/ /mg; print "$disp\n\n"; return if $OPT{'dryrun'}; my $res = $dbh->do( $schema ); unless ( $res ) { die "Couldn't run DDL query: ". $dbh->errstr; } } sub insert_data { return if $OPT{dryrun}; print "Indexing existing data...\n"; $ENV{RT_FTS_CONFIG} = JSON::to_json( {Enable => 1, Indexed => 1, @_}); system( "$RT::SbinPath/rt-fulltext-indexer", "--all", ($DB{'batch-size'} ? ("--limit", $DB{'batch-size'}) : ())); } =head1 NAME rt-setup-fulltext-index - Create indexes for full text search =head1 DESCRIPTION This script creates the appropriate tables, columns, functions, and / or views necessary for full-text searching for your database type. It will drop any existing indexes in the process. Please read F for complete documentation on full-text indexing for your database type. If you have a non-standard database administrator user or password, you may use the C<--dba> and C<--dba-password> parameters to set them explicitly: rt-setup-fulltext-index --dba sysdba --dba-password 'secret' To test what will happen without running any DDL, pass the C<--dryrun> flag. The Oracle index determines which content-types it will index at creation time. By default, textual message bodies and textual uploaded attachments (attachments with filenames) are indexed; to ignore textual attachments, pass the C<--no-attachments> flag when the index is created. =head1 AUTHOR Ruslan Zakirov Eruz@bestpractical.comE, Alex Vandiver Ealexmv@bestpractical.comE =cut rt-4.2.12/sbin/rt-shredder000754 000765 000024 00000020503 12562703633 015767 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} =head1 NAME rt-shredder - Script which wipe out tickets from RT DB =head1 SYNOPSIS rt-shredder --plugin list rt-shredder --plugin help-Tickets rt-shredder --plugin 'Tickets=query,Queue="general" and Status="deleted"' rt-shredder --sqldump unshred.sql --plugin ... rt-shredder --force --plugin ... =head1 DESCRIPTION rt-shredder - is script that allow you to wipe out objects from RT DB. This script uses API that L module adds to RT. Script can be used as example of usage of the shredder API. =head1 USAGE You can use several options to control which objects script should wipeout. =head1 OPTIONS =head2 --sqldump Outputs INSERT queries into file. This dump can be used to restore data after wiping out. By default creates files named F<< -XXXX.sql >> in the current directory. =head2 --object (DEPRECATED) Option has been deprecated, use plugin C instead. =head2 --plugin '[=,[;,]...]' You can use plugins to select RT objects with various conditions. See also --plugin list and --plugin help options. =head2 --plugin list Output list of the available plugins. =head2 --plugin help- Outputs help for specified plugin. =head2 --force Script doesn't ask any questions. =head1 SEE ALSO L =cut use strict; use warnings FATAL => 'all'; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT -init; require RT::Shredder; use Getopt::Long qw(GetOptions); use File::Spec (); use RT::Shredder::Plugin (); # prefetch list of plugins our %plugins = RT::Shredder::Plugin->List; our %opt; parse_args(); my $shredder = RT::Shredder->new; { my $plugin = eval { $shredder->AddDumpPlugin( Arguments => { file_name => $opt{'sqldump'}, from_storage => 0, } ) }; if( $@ ) { print STDERR "ERROR: Couldn't open SQL dump file: $@\n"; exit 1 if $opt{'sqldump'}; print STDERR "WARNING: It's strongly recommended to use '--sqldump ' option\n"; unless( $opt{'force'} ) { exit 0 unless prompt_yN( "Do you want to proceed?" ); } } else { print "SQL dump file is '". $plugin->FileName ."'\n"; } } my @objs = process_plugins( $shredder ); prompt_delete_objs( \@objs ) unless $opt{'force'}; $shredder->PutObjects( Objects => $_ ) foreach @objs; eval { $shredder->WipeoutAll }; if( $@ ) { require RT::Shredder::Exceptions; if( my $e = RT::Shredder::Exception::Info->caught ) { print "\nERROR: $e\n\n"; exit 1; } die $@; } sub prompt_delete_objs { my( $objs ) = @_; unless( @$objs ) { print "Objects list is empty, try refine search options\n"; exit 0; } my $list = "Next ". scalar( @$objs ) ." objects would be deleted:\n"; foreach my $o( @$objs ) { $list .= "\t". $o->UID ." object\n"; } print $list; exit(0) unless prompt_yN( "Do you want to proceed?" ); } sub prompt_yN { my $text = shift; print "$text [y/N] "; unless( =~ /^(?:y|yes)$/i ) { return 0; } return 1; } sub usage { require RT::Shredder::POD; RT::Shredder::POD::shredder_cli( $0, \*STDOUT ); exit 1; } sub parse_args { my $tmp; Getopt::Long::Configure( "pass_through" ); my @objs = (); if( GetOptions( 'object=s' => \@objs ) && @objs ) { print STDERR "Option --object had been deprecated, use plugin 'Objects' instead\n"; exit(1); } my @plugins = (); if( GetOptions( 'plugin=s' => \@plugins ) && @plugins ) { $opt{'plugin'} = \@plugins; foreach my $str( @plugins ) { if( $str =~ /^\s*list\s*$/ ) { show_plugin_list(); } elsif( $str =~ /^\s*help-(\w+)\s*$/ ) { show_plugin_help( $1 ); } elsif( $str =~ /^(\w+)(=.*)?$/ && !$plugins{$1} ) { print "Couldn't find plugin '$1'\n"; show_plugin_list(); } } } # other options make no sense without previouse usage() unless keys %opt; if( GetOptions( 'force' => \$tmp ) && $tmp ) { $opt{'force'}++; } $tmp = undef; if( GetOptions( 'sqldump=s' => \$tmp ) && $tmp ) { $opt{'sqldump'} = $tmp; } return; } sub process_plugins { my $shredder = shift; my @res; foreach my $str( @{ $opt{'plugin'} } ) { my $plugin = RT::Shredder::Plugin->new; my( $status, $msg ) = $plugin->LoadByString( $str ); unless( $status ) { print STDERR "Couldn't load plugin\n"; print STDERR "Error: $msg\n"; exit(1); } if ( lc $plugin->Type eq 'search' ) { push @res, _process_search_plugin( $shredder, $plugin ); } elsif ( lc $plugin->Type eq 'dump' ) { _process_dump_plugin( $shredder, $plugin ); } } return RT::Shredder->CastObjectsToRecords( Objects => \@res ); } sub _process_search_plugin { my ($shredder, $plugin) = @_; my ($status, @objs) = $plugin->Run; unless( $status ) { print STDERR "Couldn't run plugin\n"; print STDERR "Error: $objs[1]\n"; exit(1); } my $msg; ($status, $msg) = $plugin->SetResolvers( Shredder => $shredder ); unless( $status ) { print STDERR "Couldn't set conflicts resolver\n"; print STDERR "Error: $msg\n"; exit(1); } return @objs; } sub _process_dump_plugin { my ($shredder, $plugin) = @_; $shredder->AddDumpPlugin( Object => $plugin, ); } sub show_plugin_list { print "Plugins list:\n"; print "\t$_\n" foreach( grep !/^Base$/, keys %plugins ); exit(1); } sub show_plugin_help { my( $name ) = @_; require RT::Shredder::POD; unless( $plugins{ $name } ) { print "Couldn't find plugin '$name'\n"; show_plugin_list(); } RT::Shredder::POD::plugin_cli( $plugins{'Base'}, \*STDOUT, 1 ); RT::Shredder::POD::plugin_cli( $plugins{ $name }, \*STDOUT ); exit(1); } exit(0); rt-4.2.12/sbin/rt-shredder.in000644 000765 000024 00000020515 12555754775 016414 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} =head1 NAME rt-shredder - Script which wipe out tickets from RT DB =head1 SYNOPSIS rt-shredder --plugin list rt-shredder --plugin help-Tickets rt-shredder --plugin 'Tickets=query,Queue="general" and Status="deleted"' rt-shredder --sqldump unshred.sql --plugin ... rt-shredder --force --plugin ... =head1 DESCRIPTION rt-shredder - is script that allow you to wipe out objects from RT DB. This script uses API that L module adds to RT. Script can be used as example of usage of the shredder API. =head1 USAGE You can use several options to control which objects script should wipeout. =head1 OPTIONS =head2 --sqldump Outputs INSERT queries into file. This dump can be used to restore data after wiping out. By default creates files named F<< -XXXX.sql >> in the current directory. =head2 --object (DEPRECATED) Option has been deprecated, use plugin C instead. =head2 --plugin '[=,[;,]...]' You can use plugins to select RT objects with various conditions. See also --plugin list and --plugin help options. =head2 --plugin list Output list of the available plugins. =head2 --plugin help- Outputs help for specified plugin. =head2 --force Script doesn't ask any questions. =head1 SEE ALSO L =cut use strict; use warnings FATAL => 'all'; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT -init; require RT::Shredder; use Getopt::Long qw(GetOptions); use File::Spec (); use RT::Shredder::Plugin (); # prefetch list of plugins our %plugins = RT::Shredder::Plugin->List; our %opt; parse_args(); my $shredder = RT::Shredder->new; { my $plugin = eval { $shredder->AddDumpPlugin( Arguments => { file_name => $opt{'sqldump'}, from_storage => 0, } ) }; if( $@ ) { print STDERR "ERROR: Couldn't open SQL dump file: $@\n"; exit 1 if $opt{'sqldump'}; print STDERR "WARNING: It's strongly recommended to use '--sqldump ' option\n"; unless( $opt{'force'} ) { exit 0 unless prompt_yN( "Do you want to proceed?" ); } } else { print "SQL dump file is '". $plugin->FileName ."'\n"; } } my @objs = process_plugins( $shredder ); prompt_delete_objs( \@objs ) unless $opt{'force'}; $shredder->PutObjects( Objects => $_ ) foreach @objs; eval { $shredder->WipeoutAll }; if( $@ ) { require RT::Shredder::Exceptions; if( my $e = RT::Shredder::Exception::Info->caught ) { print "\nERROR: $e\n\n"; exit 1; } die $@; } sub prompt_delete_objs { my( $objs ) = @_; unless( @$objs ) { print "Objects list is empty, try refine search options\n"; exit 0; } my $list = "Next ". scalar( @$objs ) ." objects would be deleted:\n"; foreach my $o( @$objs ) { $list .= "\t". $o->UID ." object\n"; } print $list; exit(0) unless prompt_yN( "Do you want to proceed?" ); } sub prompt_yN { my $text = shift; print "$text [y/N] "; unless( =~ /^(?:y|yes)$/i ) { return 0; } return 1; } sub usage { require RT::Shredder::POD; RT::Shredder::POD::shredder_cli( $0, \*STDOUT ); exit 1; } sub parse_args { my $tmp; Getopt::Long::Configure( "pass_through" ); my @objs = (); if( GetOptions( 'object=s' => \@objs ) && @objs ) { print STDERR "Option --object had been deprecated, use plugin 'Objects' instead\n"; exit(1); } my @plugins = (); if( GetOptions( 'plugin=s' => \@plugins ) && @plugins ) { $opt{'plugin'} = \@plugins; foreach my $str( @plugins ) { if( $str =~ /^\s*list\s*$/ ) { show_plugin_list(); } elsif( $str =~ /^\s*help-(\w+)\s*$/ ) { show_plugin_help( $1 ); } elsif( $str =~ /^(\w+)(=.*)?$/ && !$plugins{$1} ) { print "Couldn't find plugin '$1'\n"; show_plugin_list(); } } } # other options make no sense without previouse usage() unless keys %opt; if( GetOptions( 'force' => \$tmp ) && $tmp ) { $opt{'force'}++; } $tmp = undef; if( GetOptions( 'sqldump=s' => \$tmp ) && $tmp ) { $opt{'sqldump'} = $tmp; } return; } sub process_plugins { my $shredder = shift; my @res; foreach my $str( @{ $opt{'plugin'} } ) { my $plugin = RT::Shredder::Plugin->new; my( $status, $msg ) = $plugin->LoadByString( $str ); unless( $status ) { print STDERR "Couldn't load plugin\n"; print STDERR "Error: $msg\n"; exit(1); } if ( lc $plugin->Type eq 'search' ) { push @res, _process_search_plugin( $shredder, $plugin ); } elsif ( lc $plugin->Type eq 'dump' ) { _process_dump_plugin( $shredder, $plugin ); } } return RT::Shredder->CastObjectsToRecords( Objects => \@res ); } sub _process_search_plugin { my ($shredder, $plugin) = @_; my ($status, @objs) = $plugin->Run; unless( $status ) { print STDERR "Couldn't run plugin\n"; print STDERR "Error: $objs[1]\n"; exit(1); } my $msg; ($status, $msg) = $plugin->SetResolvers( Shredder => $shredder ); unless( $status ) { print STDERR "Couldn't set conflicts resolver\n"; print STDERR "Error: $msg\n"; exit(1); } return @objs; } sub _process_dump_plugin { my ($shredder, $plugin) = @_; $shredder->AddDumpPlugin( Object => $plugin, ); } sub show_plugin_list { print "Plugins list:\n"; print "\t$_\n" foreach( grep !/^Base$/, keys %plugins ); exit(1); } sub show_plugin_help { my( $name ) = @_; require RT::Shredder::POD; unless( $plugins{ $name } ) { print "Couldn't find plugin '$name'\n"; show_plugin_list(); } RT::Shredder::POD::plugin_cli( $plugins{'Base'}, \*STDOUT, 1 ); RT::Shredder::POD::plugin_cli( $plugins{ $name }, \*STDOUT ); exit(1); } exit(0); rt-4.2.12/sbin/rt-test-dependencies000754 000765 000024 00000040260 12562703633 017574 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} # # This is just a basic script that checks to make sure that all # the modules needed by RT before you can install it. # use strict; use warnings; no warnings qw(numeric redefine); use Getopt::Long; use Cwd qw(abs_path); my %args; my %deps; my @orig_argv = @ARGV; # Save our path because installers or tests can change cwd my $script_path = abs_path($0); GetOptions( \%args, 'v|verbose', 'install!', 'with-MYSQL', 'with-PG', 'with-SQLITE', 'with-ORACLE', 'with-FASTCGI', 'with-MODPERL1', 'with-MODPERL2', 'with-STANDALONE', 'with-DEVELOPER', 'with-GPG', 'with-ICAL', 'with-GRAPHVIZ', 'with-GD', 'with-DASHBOARDS', 'with-USERLOGO', 'with-HTML-DOC', 'list-deps', 'siteinstall!', 'help|h', ); if ( $args{help} ) { require Pod::Usage; Pod::Usage::pod2usage( { verbose => 2 } ); exit; } # Set up defaults my %default = ( 'with-CORE' => 1, 'with-CLI' => 1, 'with-MAILGATE' => 1, 'with-DEVELOPER' => 0, 'with-GPG' => 1, 'with-SMIME' => 1, 'with-ICAL' => 1, 'with-GRAPHVIZ' => 0, 'with-GD' => 0, 'with-DASHBOARDS' => 1, 'with-USERLOGO' => 1, 'with-HTML-DOC' => 0, ); $args{$_} = $default{$_} foreach grep !exists $args{$_}, keys %default; { my $section; my %always_show_sections = ( perl => 1, users => 1, ); sub section { my $s = shift; $section = $s; print "$s:\n" unless $args{'list-deps'}; } sub print_found { my $msg = shift; my $test = shift; my $extra = shift; unless ( $args{'list-deps'} ) { if ( $args{'v'} or not $test or $always_show_sections{$section} ) { print "\t$msg ..."; print $test ? "found" : "MISSING"; print "\n"; } print "\t\t$extra\n" if defined $extra; } } } sub conclude { my %missing_by_type = @_; unless ( $args{'list-deps'} ) { unless ( keys %missing_by_type ) { print "\nAll dependencies have been found.\n"; return; } print "\nSOME DEPENDENCIES WERE MISSING.\n"; for my $type ( keys %missing_by_type ) { my $missing = $missing_by_type{$type}; print "$type missing dependencies:\n"; for my $name ( keys %$missing ) { my $module = $missing->{$name}; my $version = $module->{version}; my $error = $module->{error}; print_found( $name . ( $version && !$error ? " >= $version" : "" ), 0, $module->{error} ); } } print "\nPerl library path for /usr/bin/perl:\n"; print " $_\n" for @INC; exit 1; } } sub text_to_hash { my %hash; for my $line ( split /\n/, $_[0] ) { my($key, $value) = $line =~ /(\S+)\s*(\S*)/; $value ||= ''; $hash{$key} = $value; } return %hash; } sub set_dep { my ($name, $module, $version) = @_; my %list = @{$deps{$name}}; $list{$module} = ($version || ''); $deps{$name} = [ %list ]; } $deps{'CORE'} = [ text_to_hash( << '.') ]; Apache::Session 1.53 CGI 3.38 CGI::Cookie 1.20 CGI::Emulate::PSGI CGI::PSGI 0.12 Class::Accessor::Fast Crypt::Eksblowfish CSS::Squish 0.06 Data::GUID Date::Extract 0.02 Date::Manip DateTime 0.44 DateTime::Format::Natural 0.67 DateTime::Locale 0.40 DBI 1.37 DBIx::SearchBuilder 1.65 Devel::GlobalDestruction Devel::StackTrace 1.19 Digest::base Digest::MD5 2.27 Digest::SHA Email::Address 1.897 Email::Address::List 0.02 Encode 2.64 Errno File::Glob File::ShareDir File::Spec 0.8 File::Temp 0.19 HTML::Entities HTML::FormatText::WithLinks 0.14 HTML::FormatText::WithLinks::AndTables HTML::Mason 1.43 HTML::Mason::PSGIHandler 0.52 HTML::Quoted HTML::RewriteAttributes 0.05 HTML::Scrubber 0.08 HTTP::Message 6.0 IPC::Run3 JSON LWP::Simple List::MoreUtils Locale::Maketext 1.06 Locale::Maketext::Fuzzy 0.11 Locale::Maketext::Lexicon 0.32 Log::Dispatch 2.30 Mail::Header 2.12 Mail::Mailer 1.57 MIME::Entity 5.504 Module::Refresh 0.03 Module::Versions::Report 1.05 Net::CIDR Plack 1.0002 Plack::Handler::Starlet Regexp::Common Regexp::Common::net::CIDR Regexp::IPv6 Role::Basic 0.12 Scalar::Util Storable 2.08 Symbol::Global::Name 0.04 Sys::Syslog 0.16 Text::Password::Pronounceable Text::Quoted 2.07 Text::Template 1.44 Text::WikiFormat 0.76 Text::Wrapper Time::HiRes Time::ParseDate Tree::Simple 1.04 UNIVERSAL::require XML::RSS 1.05 . set_dep( CORE => 'Symbol::Global::Name' => 0.05 ) if $] >= 5.019003; set_dep( CORE => CGI => 4.00 ) if $] > 5.019003; $deps{'MAILGATE'} = [ text_to_hash( << '.') ]; Crypt::SSLeay Getopt::Long LWP::Protocol::https LWP::UserAgent 6.0 Mozilla::CA Net::SSL Pod::Usage . $deps{'CLI'} = [ text_to_hash( << '.') ]; Getopt::Long 2.24 HTTP::Request::Common LWP Term::ReadKey Term::ReadLine Text::ParseWords . $deps{'DEVELOPER'} = [ text_to_hash( << '.') ]; Email::Abstract File::Find File::Which Locale::PO Log::Dispatch::Perl Mojo::DOM Plack::Middleware::Test::StashWarnings 0.08 Set::Tiny String::ShellQuote 0 # needed for gnupg-incoming.t Test::Builder 0.90 # needed for is_passing Test::Deep 0 # needed for shredder tests Test::Email Test::Expect 0.31 Test::LongString Test::MockTime Test::NoWarnings Test::Pod Test::Warn Test::WWW::Mechanize 1.30 Test::WWW::Mechanize::PSGI WWW::Mechanize 1.52 XML::Simple . $deps{'FASTCGI'} = [ text_to_hash( << '.') ]; FCGI 0.74 FCGI::ProcManager . $deps{'MODPERL1'} = [ text_to_hash( << '.') ]; Apache::DBI 0.92 Apache::Request . $deps{'MODPERL2'} = [ text_to_hash( << '.') ]; Apache::DBI . $deps{'MYSQL'} = [ text_to_hash( << '.') ]; DBD::mysql 2.1018 . $deps{'ORACLE'} = [ text_to_hash( << '.') ]; DBD::Oracle . $deps{'PG'} = [ text_to_hash( << '.') ]; DBIx::SearchBuilder 1.66 DBD::Pg 1.43 . $deps{'SQLITE'} = [ text_to_hash( << '.') ]; DBD::SQLite 1.00 . $deps{'GPG'} = [ text_to_hash( << '.') ]; File::Which GnuPG::Interface PerlIO::eol . $deps{'SMIME'} = [ text_to_hash( << '.') ]; Crypt::X509 File::Which String::ShellQuote . $deps{'ICAL'} = [ text_to_hash( << '.') ]; Data::ICal . $deps{'DASHBOARDS'} = [ text_to_hash( << '.') ]; MIME::Types URI 1.59 URI::QueryParam . $deps{'GRAPHVIZ'} = [ text_to_hash( << '.') ]; GraphViz IPC::Run 0.90 . $deps{'GD'} = [ text_to_hash( << '.') ]; GD GD::Graph 1.47 GD::Text . $deps{'USERLOGO'} = [ text_to_hash( << '.') ]; Convert::Color . $deps{'HTML-DOC'} = [ text_to_hash( <<'.') ]; HTML::Entities Pod::Simple 3.24 . my %AVOID = ( 'DBD::Oracle' => [qw(1.23)], 'Devel::StackTrace' => [qw(1.28 1.29)], ); if ($args{'download'}) { download_mods(); } check_perl_version(); check_users(); my %Missing_By_Type = (); foreach my $type (sort grep $args{$_}, keys %args) { next unless ($type =~ /^with-(.*?)$/) and $deps{$1}; $type = $1; section("$type dependencies"); my @missing; my @deps = @{ $deps{$type} }; my %missing = test_deps(@deps); if ( $args{'install'} ) { for my $module (keys %missing) { resolve_dep($module, $missing{$module}{version}); my $m = $module . '.pm'; $m =~ s!::!/!g; if ( delete $INC{$m} ) { my $symtab = $module . '::'; no strict 'refs'; for my $symbol ( keys %{$symtab} ) { next if substr( $symbol, -2, 2 ) eq '::'; delete $symtab->{$symbol}; } } delete $missing{$module} if test_dep($module, $missing{$module}{version}, $AVOID{$module}); } } $Missing_By_Type{$type} = \%missing if keys %missing; } if ( $args{'install'} && keys %Missing_By_Type ) { exec($script_path, @orig_argv, '--no-install'); } else { conclude(%Missing_By_Type); } sub test_deps { my @deps = @_; my %missing; while(@deps) { my $module = shift @deps; my $version = shift @deps; my($test, $error) = test_dep($module, $version, $AVOID{$module}); my $msg = $module . ($version && !$error ? " >= $version" : ''); print_found($msg, $test, $error); $missing{$module} = { version => $version, error => $error } unless $test; } return %missing; } sub test_dep { my $module = shift; my $version = shift; my $avoid = shift; if ( $args{'list-deps'} ) { print $module, ': ', $version || 0, "\n"; } else { no warnings 'deprecated'; eval "{ local \$ENV{__WARN__}; use $module $version () }"; if ( my $error = $@ ) { return 0 unless wantarray; $error =~ s/\n(.*)$//s; $error =~ s/at \(eval \d+\) line \d+\.$//; undef $error if $error =~ /this is only/; my $path = $module; $path =~ s{::}{/}g; undef $error if defined $error and $error =~ /^Can't locate $path\.pm in \@INC/; return ( 0, $error ); } if ( $avoid ) { my $version = $module->VERSION; if ( grep $version eq $_, @$avoid ) { return 0 unless wantarray; return (0, "It's known that there are problems with RT and version '$version' of '$module' module. If it's the latest available version of the module then you have to downgrade manually."); } } return 1; } } sub resolve_dep { my $module = shift; my $version = shift; unless (defined $args{siteinstall}) { require Config; my %uniq; my @order = grep {($_ eq $Config::Config{sitelibexp} or $_ eq $Config::Config{privlibexp}) and not $uniq{$_}++} @INC; if ($] < 5.011 and @order == 2 and $order[0] eq $Config::Config{sitelibexp} and $order[1] eq $Config::Config{privlibexp}) { print "\n"; print "Patched perl, with site_perl before core in \@INC, detected.\n"; print "Installing dual-life modules into site_perl so they are not\n"; print "later overridden by the distribution's package.\n"; $args{siteinstall} = 1; } else { $args{siteinstall} = 0; } } print "\nInstall module $module\n"; my $ext = $ENV{'RT_FIX_DEPS_CMD'} || $ENV{'PERL_PREFER_CPAN_CLIENT'}; unless( $ext ) { my $configured = 1; { local @INC = @INC; if ( $ENV{'HOME'} ) { unshift @INC, "$ENV{'HOME'}/.cpan"; } $configured = eval { require CPAN::MyConfig } || eval { require CPAN::Config }; } unless ( $configured ) { print <{makepl_arg} ||= ""; $installdirs =~ s/(\bINSTALLDIRS=\S+|$)/ INSTALLDIRS=site/ if $args{siteinstall}; local $CPAN::Config->{makepl_arg} = $installdirs; my $rv = eval { require CPAN; CPAN::Shell->install($module) }; return $rv unless $@; print <&2`; } sub check_perl_version { section("perl"); eval {require 5.010_001}; if ($@) { print_found("5.10.1", 0, sprintf("RT requires Perl v5.10.1 or newer. Your current Perl is v%vd", $^V)); exit(1); } else { print_found( sprintf(">=5.10.1(%vd)", $^V), 1 ); } } sub check_users { section("users"); print_found("rt group (www)", defined getgrnam("www")); print_found("bin owner (root)", defined getpwnam("root")); print_found("libs owner (root)", defined getpwnam("root")); print_found("libs group (bin)", defined getgrnam("bin")); print_found("web owner (www)", defined getpwnam("www")); print_found("web group (www)", defined getgrnam("www")); } 1; __END__ =head1 NAME rt-test-dependencies - test rt's dependencies =head1 SYNOPSIS rt-test-dependencies rt-test-dependencies --install rt-test-dependencies --with-mysql --with-fastcgi =head1 DESCRIPTION by default, C determines whether you have installed all the perl modules RT needs to run. the "RT_FIX_DEPS_CMD" environment variable, if set, will be used instead of the standard CPAN shell by --install to install any required modules. it will be called with the module name, or, if "RT_FIX_DEPS_CMD" contains a "%s", will replace the "%s" with the module name before calling the program. =head1 OPTIONS =over =item install install missing modules =item verbose list the status of all dependencies, rather than just the missing ones. -v is equal to --verbose =item specify dependencies =over =item --with-mysql database interface for mysql =item --with-pg database interface for postgresql =item --with-oracle database interface for oracle =item --with-sqlite database interface and driver for sqlite (unsupported) =item --with-fastcgi libraries needed to support the fastcgi handler =item --with-modperl1 libraries needed to support the modperl 1 handler =item --with-modperl2 libraries needed to support the modperl 2 handler =item --with-developer tools needed for RT development =back =back rt-4.2.12/sbin/rt-test-dependencies.in000644 000765 000024 00000040455 12555754775 020224 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} # # This is just a basic script that checks to make sure that all # the modules needed by RT before you can install it. # use strict; use warnings; no warnings qw(numeric redefine); use Getopt::Long; use Cwd qw(abs_path); my %args; my %deps; my @orig_argv = @ARGV; # Save our path because installers or tests can change cwd my $script_path = abs_path($0); GetOptions( \%args, 'v|verbose', 'install!', 'with-MYSQL', 'with-PG', 'with-SQLITE', 'with-ORACLE', 'with-FASTCGI', 'with-MODPERL1', 'with-MODPERL2', 'with-STANDALONE', 'with-DEVELOPER', 'with-GPG', 'with-ICAL', 'with-GRAPHVIZ', 'with-GD', 'with-DASHBOARDS', 'with-USERLOGO', 'with-HTML-DOC', 'list-deps', 'siteinstall!', 'help|h', ); if ( $args{help} ) { require Pod::Usage; Pod::Usage::pod2usage( { verbose => 2 } ); exit; } # Set up defaults my %default = ( 'with-CORE' => 1, 'with-CLI' => 1, 'with-MAILGATE' => 1, 'with-DEVELOPER' => @RT_DEVELOPER@, 'with-GPG' => @RT_GPG_DEPS@, 'with-SMIME' => @RT_SMIME_DEPS@, 'with-ICAL' => 1, 'with-GRAPHVIZ' => @RT_GRAPHVIZ@, 'with-GD' => @RT_GD@, 'with-DASHBOARDS' => 1, 'with-USERLOGO' => 1, 'with-HTML-DOC' => @RT_DEVELOPER@, ); $args{$_} = $default{$_} foreach grep !exists $args{$_}, keys %default; { my $section; my %always_show_sections = ( perl => 1, users => 1, ); sub section { my $s = shift; $section = $s; print "$s:\n" unless $args{'list-deps'}; } sub print_found { my $msg = shift; my $test = shift; my $extra = shift; unless ( $args{'list-deps'} ) { if ( $args{'v'} or not $test or $always_show_sections{$section} ) { print "\t$msg ..."; print $test ? "found" : "MISSING"; print "\n"; } print "\t\t$extra\n" if defined $extra; } } } sub conclude { my %missing_by_type = @_; unless ( $args{'list-deps'} ) { unless ( keys %missing_by_type ) { print "\nAll dependencies have been found.\n"; return; } print "\nSOME DEPENDENCIES WERE MISSING.\n"; for my $type ( keys %missing_by_type ) { my $missing = $missing_by_type{$type}; print "$type missing dependencies:\n"; for my $name ( keys %$missing ) { my $module = $missing->{$name}; my $version = $module->{version}; my $error = $module->{error}; print_found( $name . ( $version && !$error ? " >= $version" : "" ), 0, $module->{error} ); } } print "\nPerl library path for @PERL@:\n"; print " $_\n" for @INC; exit 1; } } sub text_to_hash { my %hash; for my $line ( split /\n/, $_[0] ) { my($key, $value) = $line =~ /(\S+)\s*(\S*)/; $value ||= ''; $hash{$key} = $value; } return %hash; } sub set_dep { my ($name, $module, $version) = @_; my %list = @{$deps{$name}}; $list{$module} = ($version || ''); $deps{$name} = [ %list ]; } $deps{'CORE'} = [ text_to_hash( << '.') ]; Apache::Session 1.53 CGI 3.38 CGI::Cookie 1.20 CGI::Emulate::PSGI CGI::PSGI 0.12 Class::Accessor::Fast Crypt::Eksblowfish CSS::Squish 0.06 Data::GUID Date::Extract 0.02 Date::Manip DateTime 0.44 DateTime::Format::Natural 0.67 DateTime::Locale 0.40 DBI 1.37 DBIx::SearchBuilder 1.65 Devel::GlobalDestruction Devel::StackTrace 1.19 Digest::base Digest::MD5 2.27 Digest::SHA Email::Address 1.897 Email::Address::List 0.02 Encode 2.64 Errno File::Glob File::ShareDir File::Spec 0.8 File::Temp 0.19 HTML::Entities HTML::FormatText::WithLinks 0.14 HTML::FormatText::WithLinks::AndTables HTML::Mason 1.43 HTML::Mason::PSGIHandler 0.52 HTML::Quoted HTML::RewriteAttributes 0.05 HTML::Scrubber 0.08 HTTP::Message 6.0 IPC::Run3 JSON LWP::Simple List::MoreUtils Locale::Maketext 1.06 Locale::Maketext::Fuzzy 0.11 Locale::Maketext::Lexicon 0.32 Log::Dispatch 2.30 Mail::Header 2.12 Mail::Mailer 1.57 MIME::Entity 5.504 Module::Refresh 0.03 Module::Versions::Report 1.05 Net::CIDR Plack 1.0002 Plack::Handler::Starlet Regexp::Common Regexp::Common::net::CIDR Regexp::IPv6 Role::Basic 0.12 Scalar::Util Storable 2.08 Symbol::Global::Name 0.04 Sys::Syslog 0.16 Text::Password::Pronounceable Text::Quoted 2.07 Text::Template 1.44 Text::WikiFormat 0.76 Text::Wrapper Time::HiRes Time::ParseDate Tree::Simple 1.04 UNIVERSAL::require XML::RSS 1.05 . set_dep( CORE => 'Symbol::Global::Name' => 0.05 ) if $] >= 5.019003; set_dep( CORE => CGI => 4.00 ) if $] > 5.019003; $deps{'MAILGATE'} = [ text_to_hash( << '.') ]; Crypt::SSLeay Getopt::Long LWP::Protocol::https LWP::UserAgent 6.0 Mozilla::CA Net::SSL Pod::Usage . $deps{'CLI'} = [ text_to_hash( << '.') ]; Getopt::Long 2.24 HTTP::Request::Common LWP Term::ReadKey Term::ReadLine Text::ParseWords . $deps{'DEVELOPER'} = [ text_to_hash( << '.') ]; Email::Abstract File::Find File::Which Locale::PO Log::Dispatch::Perl Mojo::DOM Plack::Middleware::Test::StashWarnings 0.08 Set::Tiny String::ShellQuote 0 # needed for gnupg-incoming.t Test::Builder 0.90 # needed for is_passing Test::Deep 0 # needed for shredder tests Test::Email Test::Expect 0.31 Test::LongString Test::MockTime Test::NoWarnings Test::Pod Test::Warn Test::WWW::Mechanize 1.30 Test::WWW::Mechanize::PSGI WWW::Mechanize 1.52 XML::Simple . $deps{'FASTCGI'} = [ text_to_hash( << '.') ]; FCGI 0.74 FCGI::ProcManager . $deps{'MODPERL1'} = [ text_to_hash( << '.') ]; Apache::DBI 0.92 Apache::Request . $deps{'MODPERL2'} = [ text_to_hash( << '.') ]; Apache::DBI . $deps{'MYSQL'} = [ text_to_hash( << '.') ]; DBD::mysql 2.1018 . $deps{'ORACLE'} = [ text_to_hash( << '.') ]; DBD::Oracle . $deps{'PG'} = [ text_to_hash( << '.') ]; DBIx::SearchBuilder 1.66 DBD::Pg 1.43 . $deps{'SQLITE'} = [ text_to_hash( << '.') ]; DBD::SQLite 1.00 . $deps{'GPG'} = [ text_to_hash( << '.') ]; File::Which GnuPG::Interface PerlIO::eol . $deps{'SMIME'} = [ text_to_hash( << '.') ]; Crypt::X509 File::Which String::ShellQuote . $deps{'ICAL'} = [ text_to_hash( << '.') ]; Data::ICal . $deps{'DASHBOARDS'} = [ text_to_hash( << '.') ]; MIME::Types URI 1.59 URI::QueryParam . $deps{'GRAPHVIZ'} = [ text_to_hash( << '.') ]; GraphViz IPC::Run 0.90 . $deps{'GD'} = [ text_to_hash( << '.') ]; GD GD::Graph 1.47 GD::Text . $deps{'USERLOGO'} = [ text_to_hash( << '.') ]; Convert::Color . $deps{'HTML-DOC'} = [ text_to_hash( <<'.') ]; HTML::Entities Pod::Simple 3.24 . my %AVOID = ( 'DBD::Oracle' => [qw(1.23)], 'Devel::StackTrace' => [qw(1.28 1.29)], ); if ($args{'download'}) { download_mods(); } check_perl_version(); check_users(); my %Missing_By_Type = (); foreach my $type (sort grep $args{$_}, keys %args) { next unless ($type =~ /^with-(.*?)$/) and $deps{$1}; $type = $1; section("$type dependencies"); my @missing; my @deps = @{ $deps{$type} }; my %missing = test_deps(@deps); if ( $args{'install'} ) { for my $module (keys %missing) { resolve_dep($module, $missing{$module}{version}); my $m = $module . '.pm'; $m =~ s!::!/!g; if ( delete $INC{$m} ) { my $symtab = $module . '::'; no strict 'refs'; for my $symbol ( keys %{$symtab} ) { next if substr( $symbol, -2, 2 ) eq '::'; delete $symtab->{$symbol}; } } delete $missing{$module} if test_dep($module, $missing{$module}{version}, $AVOID{$module}); } } $Missing_By_Type{$type} = \%missing if keys %missing; } if ( $args{'install'} && keys %Missing_By_Type ) { exec($script_path, @orig_argv, '--no-install'); } else { conclude(%Missing_By_Type); } sub test_deps { my @deps = @_; my %missing; while(@deps) { my $module = shift @deps; my $version = shift @deps; my($test, $error) = test_dep($module, $version, $AVOID{$module}); my $msg = $module . ($version && !$error ? " >= $version" : ''); print_found($msg, $test, $error); $missing{$module} = { version => $version, error => $error } unless $test; } return %missing; } sub test_dep { my $module = shift; my $version = shift; my $avoid = shift; if ( $args{'list-deps'} ) { print $module, ': ', $version || 0, "\n"; } else { no warnings 'deprecated'; eval "{ local \$ENV{__WARN__}; use $module $version () }"; if ( my $error = $@ ) { return 0 unless wantarray; $error =~ s/\n(.*)$//s; $error =~ s/at \(eval \d+\) line \d+\.$//; undef $error if $error =~ /this is only/; my $path = $module; $path =~ s{::}{/}g; undef $error if defined $error and $error =~ /^Can't locate $path\.pm in \@INC/; return ( 0, $error ); } if ( $avoid ) { my $version = $module->VERSION; if ( grep $version eq $_, @$avoid ) { return 0 unless wantarray; return (0, "It's known that there are problems with RT and version '$version' of '$module' module. If it's the latest available version of the module then you have to downgrade manually."); } } return 1; } } sub resolve_dep { my $module = shift; my $version = shift; unless (defined $args{siteinstall}) { require Config; my %uniq; my @order = grep {($_ eq $Config::Config{sitelibexp} or $_ eq $Config::Config{privlibexp}) and not $uniq{$_}++} @INC; if ($] < 5.011 and @order == 2 and $order[0] eq $Config::Config{sitelibexp} and $order[1] eq $Config::Config{privlibexp}) { print "\n"; print "Patched perl, with site_perl before core in \@INC, detected.\n"; print "Installing dual-life modules into site_perl so they are not\n"; print "later overridden by the distribution's package.\n"; $args{siteinstall} = 1; } else { $args{siteinstall} = 0; } } print "\nInstall module $module\n"; my $ext = $ENV{'RT_FIX_DEPS_CMD'} || $ENV{'PERL_PREFER_CPAN_CLIENT'}; unless( $ext ) { my $configured = 1; { local @INC = @INC; if ( $ENV{'HOME'} ) { unshift @INC, "$ENV{'HOME'}/.cpan"; } $configured = eval { require CPAN::MyConfig } || eval { require CPAN::Config }; } unless ( $configured ) { print <{makepl_arg} ||= ""; $installdirs =~ s/(\bINSTALLDIRS=\S+|$)/ INSTALLDIRS=site/ if $args{siteinstall}; local $CPAN::Config->{makepl_arg} = $installdirs; my $rv = eval { require CPAN; CPAN::Shell->install($module) }; return $rv unless $@; print <&2`; } sub check_perl_version { section("perl"); eval {require 5.010_001}; if ($@) { print_found("5.10.1", 0, sprintf("RT requires Perl v5.10.1 or newer. Your current Perl is v%vd", $^V)); exit(1); } else { print_found( sprintf(">=5.10.1(%vd)", $^V), 1 ); } } sub check_users { section("users"); print_found("rt group (@RTGROUP@)", defined getgrnam("@RTGROUP@")); print_found("bin owner (@BIN_OWNER@)", defined getpwnam("@BIN_OWNER@")); print_found("libs owner (@LIBS_OWNER@)", defined getpwnam("@LIBS_OWNER@")); print_found("libs group (@LIBS_GROUP@)", defined getgrnam("@LIBS_GROUP@")); print_found("web owner (@WEB_USER@)", defined getpwnam("@WEB_USER@")); print_found("web group (@WEB_GROUP@)", defined getgrnam("@WEB_GROUP@")); } 1; __END__ =head1 NAME rt-test-dependencies - test rt's dependencies =head1 SYNOPSIS rt-test-dependencies rt-test-dependencies --install rt-test-dependencies --with-mysql --with-fastcgi =head1 DESCRIPTION by default, C determines whether you have installed all the perl modules RT needs to run. the "RT_FIX_DEPS_CMD" environment variable, if set, will be used instead of the standard CPAN shell by --install to install any required modules. it will be called with the module name, or, if "RT_FIX_DEPS_CMD" contains a "%s", will replace the "%s" with the module name before calling the program. =head1 OPTIONS =over =item install install missing modules =item verbose list the status of all dependencies, rather than just the missing ones. -v is equal to --verbose =item specify dependencies =over =item --with-mysql database interface for mysql =item --with-pg database interface for postgresql =item --with-oracle database interface for oracle =item --with-sqlite database interface and driver for sqlite (unsupported) =item --with-fastcgi libraries needed to support the fastcgi handler =item --with-modperl1 libraries needed to support the modperl 1 handler =item --with-modperl2 libraries needed to support the modperl 2 handler =item --with-developer tools needed for RT development =back =back rt-4.2.12/sbin/rt-validate-aliases000754 000765 000024 00000026036 12562703633 017406 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; use Text::ParseWords qw//; use Getopt::Long; BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } require RT; RT::LoadConfig(); RT::Init(); my ($PREFIX, $URL, $HOST) = (""); GetOptions( "prefix|p=s" => \$PREFIX, "url|u=s" => \$URL, "host|h=s" => \$HOST, ); unless (@ARGV) { @ARGV = grep {-f} ("/etc/aliases", "/etc/mail/aliases", "/etc/postfix/aliases"); die "Can't determine aliases file to parse!" unless @ARGV; } my %aliases = parse_lines(); unless (%aliases) { warn "No mailgate aliases found in @ARGV"; exit; } my %seen; my $global_mailgate; for my $address (sort keys %aliases) { my ($mailgate, $opts, $extra) = @{$aliases{$address}}; my %opts = %{$opts}; next if $opts{url} and $URL and $opts{url} !~ /\Q$URL\E/; if ($mailgate !~ /^\|/) { warn "Missing the leading | on alias $address\n"; $mailgate = "|$mailgate"; } if (($global_mailgate ||= $mailgate) ne $mailgate) { warn "Unexpected mailgate for alias $address -- expected $global_mailgate, got $mailgate\n"; } if (not defined $opts{action}) { warn "Missing --action parameter for alias $address\n"; } elsif ($opts{action} !~ /^(correspond|comment)$/) { warn "Invalid --action parameter for alias $address: $opts{action}\n" } my $queue = RT::Queue->new( RT->SystemUser ); if (not defined $opts{queue}) { warn "Missing --queue parameter for alias $address\n"; } else { $queue->Load( $opts{queue} ); if (not $queue->id) { warn "Invalid --queue parameter for alias $address: $opts{queue}\n"; } elsif ($queue->Disabled) { warn "Disabled --queue given for alias $address: $opts{queue}\n"; } } if (not defined $opts{url}) { warn "Missing --url parameter for alias $address\n"; } #XXX: Test connectivity and/or https certs? if ($queue->id and $opts{action} =~ /^(correspond|comment)$/) { push @{$seen{lc $queue->Name}{$opts{action}}}, $address; } warn "Unknown extra arguments for alias $address: @{$extra}\n" if @{$extra}; } # Check the global settings my %global; for my $action (qw/correspond comment/) { my $setting = ucfirst($action) . "Address"; my $value = RT->Config->Get($setting); if (not defined $value) { warn "$setting is not set!\n"; next; } my ($local,$host) = lc($value) =~ /(.*?)\@(.*)/; next if $HOST and $host !~ /\Q$HOST\E/; $local = "$PREFIX$local" unless exists $aliases{$local}; $global{$setting} = $local; if (not exists $aliases{$local}) { warn "$setting $value does not exist in aliases!\n" } elsif ($aliases{$local}[1]{action} ne $action) { warn "$setting $value is a $aliases{$local}[1]{action} in aliases!" } } warn "CorrespondAddress and CommentAddress are the same!\n" if RT->Config->Get("CorrespondAddress") eq RT->Config->Get("CommentAddress"); # Go through the queues, one at a time my $queues = RT::Queues->new( RT->SystemUser ); $queues->UnLimit; while (my $q = $queues->Next) { my $qname = $q->Name; for my $action (qw/correspond comment/) { my $setting = ucfirst($action) . "Address"; my $value = $q->$setting; if (not $value) { my @other = grep {$_ ne $global{$setting}} @{$seen{lc $q->Name}{$action} || []}; warn "$setting not set on $qname, but in aliases as " .join(" and ", @other) . "\n" if @other; next; } if ($action eq "comment" and $q->CorrespondAddress and $q->CorrespondAddress eq $q->CommentAddress) { warn "CorrespondAddress and CommentAddress are set the same on $qname\n"; next; } my ($local, $host) = lc($value) =~ /(.*?)\@(.*)/; next if $HOST and $host !~ /\Q$HOST\E/; $local = "$PREFIX$local" unless exists $aliases{$local}; my @other = @{$seen{lc $q->Name}{$action} || []}; if (not exists $aliases{$local}) { if (@other) { warn "$setting $value on $qname does not exist in aliases -- typo'd as " .join(" or ", @other) . "?\n"; } else { warn "$setting $value on $qname does not exist in aliases!\n" } next; } my %opt = %{$aliases{$local}[1]}; if ($opt{action} ne $action) { warn "$setting address $value on $qname is a $opt{action} in aliases!\n" } if (lc $opt{queue} ne lc $q->Name and $action ne "comment") { warn "$setting address $value on $qname points to queue $opt{queue} in aliases!\n"; } @other = grep {$_ ne $local} @other; warn "Extra aliases for queue $qname: ".join(",",@other)."\n" if @other; } } sub parse_lines { local @ARGV = @ARGV; my %aliases; my $line = ""; for (<>) { next unless /\S/; next if /^#/; chomp; if (/^\s+/) { $line .= $_; } else { add_line($line, \%aliases); $line = $_; } } add_line($line, \%aliases); expand(\%aliases); filter_mailgate(\%aliases); return %aliases; } sub expand { my ($data) = @_; for (1..100) { my $expanded = 0; for my $address (sort keys %{$data}) { my @new; for my $part (@{$data->{$address}}) { if (m!^[|/]! or not $data->{$part}) { push @new, $part; } else { $expanded++; push @new, @{$data->{$part}}; } } $data->{$address} = \@new; } return unless $expanded; } warn "Recursion limit exceeded -- cycle in aliases?\n"; } sub filter_mailgate { my ($data) = @_; for my $address (sort keys %{$data}) { my @parts = @{delete $data->{$address}}; my @pipes = grep {m!^\|?.*?/rt-mailgate\b!} @parts; next unless @pipes; my $pipe = shift @pipes; warn "More than one rt-mailgate pipe for alias: $address\n" if @pipes; my @args = Text::ParseWords::shellwords($pipe); # We allow "|/random-other-command /opt/rt4/bin/rt-mailgate ...", # we just need to strip off enough my $index = 0; $index++ while $args[$index] !~ m!/rt-mailgate!; my $mailgate = join(' ', splice(@args,0,$index+1)); my %opts; local @ARGV = @args; Getopt::Long::Configure( "pass_through" ); # Allow unknown options my $ret = eval { GetOptions( \%opts, "queue=s", "action=s", "url=s", "jar=s", "debug", "extension=s", "timeout=i", "verify-ssl!", "ca-file=s", ); 1; }; warn "Failed to parse options for $address: $@" unless $ret; next unless %opts; $data->{lc $address} = [$mailgate, \%opts, [@ARGV]]; } } sub add_line { my ($line, $data) = @_; return unless $line =~ /\S/; my ($name, $parts) = parse_line($line); return unless defined $name; if (defined $data->{$name}) { warn "Duplicate definition for alias $name\n"; return; } $data->{lc $name} = $parts; } sub parse_line { my $re_name = qr/\S+/; # Intentionally accept pipe-like aliases with a missing | -- we deal with them later my $re_quoted_pipe = qr/"\|?[^\\"]*(?:\\[\\"][^\\"]*)*"/; my $re_nonquoted_pipe = qr/\|[^\s,]+/; my $re_pipe = qr/(?:$re_quoted_pipe|$re_nonquoted_pipe)/; my $re_path = qr!/[^,\s]+!; my $re_address = qr![^|/,\s][^,\s]*!; my $re_value = qr/(?:$re_pipe|$re_path|$re_address)/; my $re_values = qr/(?:$re_value(?:\s*,\s*$re_value)*)/; my ($line) = @_; if ($line =~ /^($re_name):\s*($re_values)/) { my ($name, $all_parts) = ($1, $2); my @parts; while ($all_parts =~ s/^(?:\s*,\s*)?($re_value)//) { my $part = $1; if ($part =~ /^"/) { $part =~ s/^"//; $part =~ s/"$//; $part =~ s/\\(.)/$1/g; } push @parts, $part; } return $name, [@parts]; } else { warn "Parse failure, line $. of $ARGV: $line\n"; return (); } } __END__ =head1 NAME rt-validate-aliases - Check an MTA alias file against RT queue configuration =head1 SYNOPSIS rt-validate-aliases [options] /etc/aliases =head1 OPTIONS =over =item C<--prefix> An expected address prefix used in the alias file =item C<--url> The root URL of your RT server (the same URL you expect to be passed to rt-mailgate) =item C<--host> The host part of your RT email addresses =back rt-4.2.12/sbin/rt-validate-aliases.in000644 000765 000024 00000026050 12555754775 020024 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; use Text::ParseWords qw//; use Getopt::Long; BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } require RT; RT::LoadConfig(); RT::Init(); my ($PREFIX, $URL, $HOST) = (""); GetOptions( "prefix|p=s" => \$PREFIX, "url|u=s" => \$URL, "host|h=s" => \$HOST, ); unless (@ARGV) { @ARGV = grep {-f} ("/etc/aliases", "/etc/mail/aliases", "/etc/postfix/aliases"); die "Can't determine aliases file to parse!" unless @ARGV; } my %aliases = parse_lines(); unless (%aliases) { warn "No mailgate aliases found in @ARGV"; exit; } my %seen; my $global_mailgate; for my $address (sort keys %aliases) { my ($mailgate, $opts, $extra) = @{$aliases{$address}}; my %opts = %{$opts}; next if $opts{url} and $URL and $opts{url} !~ /\Q$URL\E/; if ($mailgate !~ /^\|/) { warn "Missing the leading | on alias $address\n"; $mailgate = "|$mailgate"; } if (($global_mailgate ||= $mailgate) ne $mailgate) { warn "Unexpected mailgate for alias $address -- expected $global_mailgate, got $mailgate\n"; } if (not defined $opts{action}) { warn "Missing --action parameter for alias $address\n"; } elsif ($opts{action} !~ /^(correspond|comment)$/) { warn "Invalid --action parameter for alias $address: $opts{action}\n" } my $queue = RT::Queue->new( RT->SystemUser ); if (not defined $opts{queue}) { warn "Missing --queue parameter for alias $address\n"; } else { $queue->Load( $opts{queue} ); if (not $queue->id) { warn "Invalid --queue parameter for alias $address: $opts{queue}\n"; } elsif ($queue->Disabled) { warn "Disabled --queue given for alias $address: $opts{queue}\n"; } } if (not defined $opts{url}) { warn "Missing --url parameter for alias $address\n"; } #XXX: Test connectivity and/or https certs? if ($queue->id and $opts{action} =~ /^(correspond|comment)$/) { push @{$seen{lc $queue->Name}{$opts{action}}}, $address; } warn "Unknown extra arguments for alias $address: @{$extra}\n" if @{$extra}; } # Check the global settings my %global; for my $action (qw/correspond comment/) { my $setting = ucfirst($action) . "Address"; my $value = RT->Config->Get($setting); if (not defined $value) { warn "$setting is not set!\n"; next; } my ($local,$host) = lc($value) =~ /(.*?)\@(.*)/; next if $HOST and $host !~ /\Q$HOST\E/; $local = "$PREFIX$local" unless exists $aliases{$local}; $global{$setting} = $local; if (not exists $aliases{$local}) { warn "$setting $value does not exist in aliases!\n" } elsif ($aliases{$local}[1]{action} ne $action) { warn "$setting $value is a $aliases{$local}[1]{action} in aliases!" } } warn "CorrespondAddress and CommentAddress are the same!\n" if RT->Config->Get("CorrespondAddress") eq RT->Config->Get("CommentAddress"); # Go through the queues, one at a time my $queues = RT::Queues->new( RT->SystemUser ); $queues->UnLimit; while (my $q = $queues->Next) { my $qname = $q->Name; for my $action (qw/correspond comment/) { my $setting = ucfirst($action) . "Address"; my $value = $q->$setting; if (not $value) { my @other = grep {$_ ne $global{$setting}} @{$seen{lc $q->Name}{$action} || []}; warn "$setting not set on $qname, but in aliases as " .join(" and ", @other) . "\n" if @other; next; } if ($action eq "comment" and $q->CorrespondAddress and $q->CorrespondAddress eq $q->CommentAddress) { warn "CorrespondAddress and CommentAddress are set the same on $qname\n"; next; } my ($local, $host) = lc($value) =~ /(.*?)\@(.*)/; next if $HOST and $host !~ /\Q$HOST\E/; $local = "$PREFIX$local" unless exists $aliases{$local}; my @other = @{$seen{lc $q->Name}{$action} || []}; if (not exists $aliases{$local}) { if (@other) { warn "$setting $value on $qname does not exist in aliases -- typo'd as " .join(" or ", @other) . "?\n"; } else { warn "$setting $value on $qname does not exist in aliases!\n" } next; } my %opt = %{$aliases{$local}[1]}; if ($opt{action} ne $action) { warn "$setting address $value on $qname is a $opt{action} in aliases!\n" } if (lc $opt{queue} ne lc $q->Name and $action ne "comment") { warn "$setting address $value on $qname points to queue $opt{queue} in aliases!\n"; } @other = grep {$_ ne $local} @other; warn "Extra aliases for queue $qname: ".join(",",@other)."\n" if @other; } } sub parse_lines { local @ARGV = @ARGV; my %aliases; my $line = ""; for (<>) { next unless /\S/; next if /^#/; chomp; if (/^\s+/) { $line .= $_; } else { add_line($line, \%aliases); $line = $_; } } add_line($line, \%aliases); expand(\%aliases); filter_mailgate(\%aliases); return %aliases; } sub expand { my ($data) = @_; for (1..100) { my $expanded = 0; for my $address (sort keys %{$data}) { my @new; for my $part (@{$data->{$address}}) { if (m!^[|/]! or not $data->{$part}) { push @new, $part; } else { $expanded++; push @new, @{$data->{$part}}; } } $data->{$address} = \@new; } return unless $expanded; } warn "Recursion limit exceeded -- cycle in aliases?\n"; } sub filter_mailgate { my ($data) = @_; for my $address (sort keys %{$data}) { my @parts = @{delete $data->{$address}}; my @pipes = grep {m!^\|?.*?/rt-mailgate\b!} @parts; next unless @pipes; my $pipe = shift @pipes; warn "More than one rt-mailgate pipe for alias: $address\n" if @pipes; my @args = Text::ParseWords::shellwords($pipe); # We allow "|/random-other-command /opt/rt4/bin/rt-mailgate ...", # we just need to strip off enough my $index = 0; $index++ while $args[$index] !~ m!/rt-mailgate!; my $mailgate = join(' ', splice(@args,0,$index+1)); my %opts; local @ARGV = @args; Getopt::Long::Configure( "pass_through" ); # Allow unknown options my $ret = eval { GetOptions( \%opts, "queue=s", "action=s", "url=s", "jar=s", "debug", "extension=s", "timeout=i", "verify-ssl!", "ca-file=s", ); 1; }; warn "Failed to parse options for $address: $@" unless $ret; next unless %opts; $data->{lc $address} = [$mailgate, \%opts, [@ARGV]]; } } sub add_line { my ($line, $data) = @_; return unless $line =~ /\S/; my ($name, $parts) = parse_line($line); return unless defined $name; if (defined $data->{$name}) { warn "Duplicate definition for alias $name\n"; return; } $data->{lc $name} = $parts; } sub parse_line { my $re_name = qr/\S+/; # Intentionally accept pipe-like aliases with a missing | -- we deal with them later my $re_quoted_pipe = qr/"\|?[^\\"]*(?:\\[\\"][^\\"]*)*"/; my $re_nonquoted_pipe = qr/\|[^\s,]+/; my $re_pipe = qr/(?:$re_quoted_pipe|$re_nonquoted_pipe)/; my $re_path = qr!/[^,\s]+!; my $re_address = qr![^|/,\s][^,\s]*!; my $re_value = qr/(?:$re_pipe|$re_path|$re_address)/; my $re_values = qr/(?:$re_value(?:\s*,\s*$re_value)*)/; my ($line) = @_; if ($line =~ /^($re_name):\s*($re_values)/) { my ($name, $all_parts) = ($1, $2); my @parts; while ($all_parts =~ s/^(?:\s*,\s*)?($re_value)//) { my $part = $1; if ($part =~ /^"/) { $part =~ s/^"//; $part =~ s/"$//; $part =~ s/\\(.)/$1/g; } push @parts, $part; } return $name, [@parts]; } else { warn "Parse failure, line $. of $ARGV: $line\n"; return (); } } __END__ =head1 NAME rt-validate-aliases - Check an MTA alias file against RT queue configuration =head1 SYNOPSIS rt-validate-aliases [options] /etc/aliases =head1 OPTIONS =over =item C<--prefix> An expected address prefix used in the alias file =item C<--url> The root URL of your RT server (the same URL you expect to be passed to rt-mailgate) =item C<--host> The host part of your RT email addresses =back rt-4.2.12/sbin/rt-validator000754 000765 000024 00000140255 12562703633 016163 0ustar00sartakstaff000000 000000 #!/usr/bin/perl # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("lib", "local/lib"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT::Interface::CLI qw(Init); my %opt = (); Init( \%opt, 'check|c', 'resolve', 'force', 'verbose|v', 'links-only', ); Pod::Usage::pod2usage( { verbose => 2 } ) unless $opt{check}; usage_warning() if $opt{'resolve'} && !$opt{'force'}; sub usage_warning { print <; } my $dbh = $RT::Handle->dbh; my $db_type = RT->Config->Get('DatabaseType'); my %TYPE = ( 'Transactions.Field' => 'text', 'Transactions.OldValue' => 'text', 'Transactions.NewValue' => 'text', ); my @models = qw( ACE Article Attachment Attribute CachedGroupMember CustomField CustomFieldValue GroupMember Group Link ObjectCustomField ObjectCustomFieldValue Principal Queue ScripAction ScripCondition Scrip ObjectScrip Template Ticket Transaction User ); my %redo_on; $redo_on{'Delete'} = { ACL => [], Attributes => [], Links => [], CustomFields => [], CustomFieldValues => [], ObjectCustomFields => [], ObjectCustomFieldValues => [], Queues => [], Scrips => [], ObjectScrips => [], ScripActions => [], ScripConditions => [], Templates => [], Tickets => [ 'Tickets -> other', 'Tickets <-> Role Groups' ], Transactions => [ 'Attachments -> other' ], Principals => ['User <-> ACL equivalence group', 'GMs -> Groups, Members' ], Users => ['User <-> ACL equivalence group', 'GMs -> Groups, Members', 'Principals -> Users' ], Groups => ['User <-> ACL equivalence group', 'GMs -> Groups, Members', 'CGM vs. GM', 'Principals -> Groups' ], GroupMembers => [ 'CGM vs. GM' ], CachedGroupMembers => [ 'CGM vs. GM' ], }; $redo_on{'Create'} = { Principals => ['User <-> ACL equivalence group', 'GMs -> Groups, Members' ], Groups => ['User <-> ACL equivalence group', 'GMs -> Groups, Members', 'CGM vs. GM' ], GroupMembers => [ 'CGM vs. GM' ], CachedGroupMembers => [ 'CGM vs. GM' ], }; $redo_on{'Update'} = { Groups => ['User Defined Group Name uniqueness'], }; my %describe_cb; %describe_cb = ( Attachments => sub { my $row = shift; my $txn_id = $row->{transactionid}; my $res = 'Attachment #'. $row->{id} .' -> Txn #'. $txn_id; return $res .', '. describe( 'Transactions', $txn_id ); }, Transactions => sub { my $row = shift; return 'Transaction #'. $row->{id} .' -> object '. $row->{objecttype} .' #'. $row->{objectid}; }, ); { my %cache = (); sub m2t($) { my $model = shift; return $cache{$model} if $cache{$model}; my $class = "RT::$model"; my $object = $class->new( RT->SystemUser ); return $cache{$model} = $object->Table; } } my (@do_check, %redo_check); my @CHECKS; foreach my $table ( qw(Users Groups) ) { push @CHECKS, "$table -> Principals" => sub { my $msg = "A record in $table refers to a nonexistent record in Principals." ." The script can either create the missing record in Principals" ." or delete the record in $table."; my ($type) = ($table =~ /^(.*)s$/); return check_integrity( $table, 'id' => 'Principals', 'id', join_condition => 't.PrincipalType = ?', bind_values => [ $type ], action => sub { my $id = shift; return unless my $a = prompt_action( ['Create', 'delete'], $msg ); if ( $a eq 'd' ) { delete_record( $table, $id ); } elsif ( $a eq 'c' ) { my $principal_id = create_record( 'Principals', id => $id, PrincipalType => $type, ObjectId => $id, Disabled => 0 ); } else { die "Unknown action '$a'"; } }, ); }; push @CHECKS, "Principals -> $table" => sub { my $msg = "A record in Principals refers to a nonexistent record in $table." ." In some cases it's possible to manually resurrect such records," ." but this utility can only delete records."; return check_integrity( 'Principals', 'id' => $table, 'id', condition => 's.PrincipalType = ?', bind_values => [ $table =~ /^(.*)s$/ ], action => sub { my $id = shift; return unless prompt( 'Delete', $msg ); delete_record( 'Principals', $id ); }, ); }; } push @CHECKS, 'User <-> ACL equivalence group' => sub { my $res = 1; # from user to group $res *= check_integrity( 'Users', 'id' => 'Groups', 'Instance', join_condition => 't.Domain = ? AND t.Type = ?', bind_values => [ 'ACLEquivalence', 'UserEquiv' ], action => sub { my $id = shift; return unless prompt( 'Create', "Found a user that has no ACL equivalence group." ); my $gid = create_record( 'Groups', Domain => 'ACLEquivalence', Type => 'UserEquiv', Instance => $id, ); }, ); # from group to user $res *= check_integrity( 'Groups', 'Instance' => 'Users', 'id', condition => 's.Domain = ? AND s.Type = ?', bind_values => [ 'ACLEquivalence', 'UserEquiv' ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a user ACL equivalence group, but there is no user." ); delete_record( 'Groups', $id ); }, ); # one ACL equiv group for each user $res *= check_uniqueness( 'Groups', columns => ['Instance'], condition => '.Domain = ? AND .Type = ?', bind_values => [ 'ACLEquivalence', 'UserEquiv' ], ); return $res; }; # check integrity of Queue role groups push @CHECKS, 'Queues <-> Role Groups' => sub { # XXX: we check only that there is at least one group for a queue # from queue to group my $res = 1; $res *= check_integrity( 'Queues', 'id' => 'Groups', 'Instance', join_condition => 't.Domain = ?', bind_values => [ 'RT::Queue-Role' ], ); # from group to queue $res *= check_integrity( 'Groups', 'Instance' => 'Queues', 'id', condition => 's.Domain = ?', bind_values => [ 'RT::Queue-Role' ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a role group of a nonexistent queue." ); delete_record( 'Groups', $id ); }, ); return $res; }; # check integrity of Ticket role groups push @CHECKS, 'Tickets <-> Role Groups' => sub { # XXX: we check only that there is at least one group for a queue # from queue to group my $res = 1; $res *= check_integrity( 'Tickets', 'id' => 'Groups', 'Instance', join_condition => 't.Domain = ?', bind_values => [ 'RT::Ticket-Role' ], ); # from group to ticket $res *= check_integrity( 'Groups', 'Instance' => 'Tickets', 'id', condition => 's.Domain = ?', bind_values => [ 'RT::Ticket-Role' ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a role group of a nonexistent ticket." ); delete_record( 'Groups', $id ); }, ); return $res; }; # additional CHECKS on groups push @CHECKS, 'Role Groups (Instance, Type) uniqueness' => sub { # Check that Domain, Instance and Type are unique return check_uniqueness( 'Groups', columns => ['Domain', 'Instance', 'Type'], condition => '.Domain LIKE ?', bind_values => [ '%-Role' ], ); }; push @CHECKS, 'System internal group uniqueness' => sub { return check_uniqueness( 'Groups', columns => ['Instance', 'Type'], condition => '.Domain = ?', bind_values => [ 'SystemInternal' ], ); }; # CHECK that user defined group names are unique push @CHECKS, 'User Defined Group Name uniqueness' => sub { return check_uniqueness( 'Groups', columns => ['Name'], condition => '.Domain = ?', bind_values => [ 'UserDefined' ], extra_tables => ['Principals sp', 'Principals tp'], extra_condition => join(" and ", map { "$_.id = ${_}p.ObjectId and ${_}p.PrincipalType = ? and ${_}p.Disabled != 1" } qw(s t)), extra_values => ['Group', 'Group'], action => sub { return unless prompt( 'Rename', "Found a user defined group with a non-unique Name." ); my $id = shift; my %cols = @_; update_records('Groups', { id => $id }, { Name => join('-', $cols{'Name'}, $id) }); }, ); }; push @CHECKS, 'GMs -> Groups, Members' => sub { my $msg = "A record in GroupMembers references an object that doesn't exist." ." Maybe you deleted a group or principal directly from the database?" ." Usually it's OK to delete such records."; my $res = 1; $res *= check_integrity( 'GroupMembers', 'GroupId' => 'Groups', 'id', action => sub { my $id = shift; return unless prompt( 'Delete', $msg ); delete_record( 'GroupMembers', $id ); }, ); $res *= check_integrity( 'GroupMembers', 'MemberId' => 'Principals', 'id', action => sub { my $id = shift; return unless prompt( 'Delete', $msg ); delete_record( 'GroupMembers', $id ); }, ); return $res; }; # CGM and GM push @CHECKS, 'CGM vs. GM' => sub { my $res = 1; # all GM record should be duplicated in CGM $res *= check_integrity( GroupMembers => ['GroupId', 'MemberId'], CachedGroupMembers => ['GroupId', 'MemberId'], join_condition => 't.ImmediateParentId = t.GroupId AND t.Via = t.id', action => sub { my $id = shift; return unless prompt( 'Create', "Found a record in GroupMembers that has no direct duplicate in CachedGroupMembers table." ); my $gm = RT::GroupMember->new( RT->SystemUser ); $gm->Load( $id ); die "Couldn't load GM record #$id" unless $gm->id; my $cgm = create_record( 'CachedGroupMembers', GroupId => $gm->GroupId, MemberId => $gm->MemberId, ImmediateParentId => $gm->GroupId, Via => undef, Disabled => 0, # XXX: we should check integrity of Disabled field ); update_records( "CachedGroupMembers", { id => $cgm }, { Via => $cgm } ); }, ); # all first level CGM records should have a GM record $res *= check_integrity( CachedGroupMembers => ['GroupId', 'MemberId'], GroupMembers => ['GroupId', 'MemberId'], condition => 's.ImmediateParentId = s.GroupId AND s.Via = s.id AND s.GroupId != s.MemberId', action => sub { my $id = shift; return unless prompt( 'Delete', "Found a record in CachedGroupMembers for a (Group, Member) pair" ." that doesn't exist in the GroupMembers table." ); delete_record( 'CachedGroupMembers', $id ); }, ); # each group should have a CGM record where MemberId == GroupId $res *= check_integrity( Groups => ['id', 'id'], CachedGroupMembers => ['GroupId', 'MemberId'], join_condition => 't.ImmediateParentId = t.GroupId AND t.Via = t.id', action => sub { my $id = shift; return unless prompt( 'Create', "Found a record in Groups that has no direct" ." duplicate in CachedGroupMembers table." ); my $g = RT::Group->new( RT->SystemUser ); $g->Load( $id ); die "Couldn't load group #$id" unless $g->id; die "Loaded group by $id has id ". $g->id unless $g->id == $id; my $cgm = create_record( 'CachedGroupMembers', GroupId => $id, MemberId => $id, ImmediateParentId => $id, Via => undef, Disabled => $g->Disabled, ); update_records( "CachedGroupMembers", { id => $cgm }, { Via => $cgm } ); }, ); # and back, each record in CGM with MemberId == GroupId without exceptions # should reference a group $res *= check_integrity( CachedGroupMembers => ['GroupId', 'MemberId'], Groups => ['id', 'id'], condition => "s.GroupId = s.MemberId", action => sub { my $id = shift; return unless prompt( 'Delete', "Found a record in CachedGroupMembers for a group that doesn't exist." ); delete_record( 'CachedGroupMembers', $id ); }, ); # Via $res *= check_integrity( CachedGroupMembers => 'Via', CachedGroupMembers => 'id', action => sub { my $id = shift; return unless prompt( 'Delete', "Found a record in CachedGroupMembers with Via that references a nonexistent record." ); delete_record( 'CachedGroupMembers', $id ); }, ); # for every CGM where ImmediateParentId != GroupId there should be # matching parent record (first level) $res *= check_integrity( CachedGroupMembers => ['ImmediateParentId', 'MemberId'], CachedGroupMembers => ['GroupId', 'MemberId'], join_condition => 't.Via = t.id', condition => 's.ImmediateParentId != s.GroupId', action => sub { my $id = shift; return unless prompt( 'Delete', "Found a record in CachedGroupMembers that references a nonexistent record in CachedGroupMembers table." ); delete_record( 'CachedGroupMembers', $id ); }, ); # for every CGM where ImmediateParentId != GroupId there should be # matching "grand" parent record $res *= check_integrity( CachedGroupMembers => ['GroupId', 'ImmediateParentId', 'Via'], CachedGroupMembers => ['GroupId', 'MemberId', 'id'], condition => 's.ImmediateParentId != s.GroupId', action => sub { my $id = shift; return unless prompt( 'Delete', "Found a record in CachedGroupMembers that references a nonexistent record in CachedGroupMembers table." ); delete_record( 'CachedGroupMembers', $id ); }, ); # CHECK recursive records: # if we have CGM1 (G1,M1,V1,IP1) then for every GM2(G2, M2), where G2 == M1, # we should have CGM3 where G3 = G1, M3 = M2, V3 = ID1, IP3 = M1 { my $query = <fetchrow_array ) { $res = 0; print STDERR "Principal #$m is member of #$ip when #$ip is member of #$g,"; print STDERR " but there is no cached GM record that $m is member of #$g.\n"; $action->( GroupId => $g, MemberId => $m, Via => $via, ImmediateParentId => $ip, Disabled => $dis, ); } } return $res; }; # Tickets push @CHECKS, 'Tickets -> other' => sub { my $res = 1; $res *= check_integrity( 'Tickets', 'EffectiveId' => 'Tickets', 'id', action => sub { my $id = shift; return unless prompt( 'Delete', "Found a ticket that's been merged into a ticket that no longer exists." ); delete_record( 'Tickets', $id ); }, ); $res *= check_integrity( 'Tickets', 'Queue' => 'Queues', 'id', ); $res *= check_integrity( 'Tickets', 'Owner' => 'Users', 'id', action => sub { my ($id, %prop) = @_; return unless my $replace_with = prompt_integer( 'Replace', "Column Owner should point to a user, but there is record #$id in Tickets\n" ."where it's not true. It's ok to replace these wrong references with id of any user.\n" ."Note that id you enter is not checked. You can pick any user from your DB, but it's\n" ."may be better to create a special user for this, for example 'user_that_has_been_deleted'\n" ."or something like that.", "Tickets.Owner -> user #$prop{Owner}" ); update_records( 'Tickets', { id => $id, Owner => $prop{Owner} }, { Owner => $replace_with } ); }, ); # XXX: check that owner is only member of owner role group return $res; }; push @CHECKS, 'Transactions -> other' => sub { my $res = 1; foreach my $model ( @models ) { $res *= check_integrity( 'Transactions', 'ObjectId' => m2t($model), 'id', condition => 's.ObjectType = ?', bind_values => [ "RT::$model" ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a transaction without object." ); delete_record( 'Transactions', $id ); }, ); } # type = CustomField $res *= check_integrity( 'Transactions', 'Field' => 'CustomFields', 'id', condition => 's.Type = ?', bind_values => [ 'CustomField' ], ); # type = Take, Untake, Force, Steal or Give $res *= check_integrity( 'Transactions', 'OldValue' => 'Users', 'id', condition => 's.Type IN (?, ?, ?, ?, ?)', bind_values => [ qw(Take Untake Force Steal Give) ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a transaction regarding Owner changes," ." but the User with id stored in OldValue column doesn't exist anymore." ); delete_record( 'Transactions', $id ); }, ); $res *= check_integrity( 'Transactions', 'NewValue' => 'Users', 'id', condition => 's.Type IN (?, ?, ?, ?, ?)', bind_values => [ qw(Take Untake Force Steal Give) ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a transaction regarding Owner changes," ." but the User with id stored in NewValue column doesn't exist anymore." ); delete_record( 'Transactions', $id ); }, ); # type = DelWatcher $res *= check_integrity( 'Transactions', 'OldValue' => 'Principals', 'id', condition => 's.Type = ?', bind_values => [ 'DelWatcher' ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a transaction describing watcher changes," ." but the User with id stored in OldValue column doesn't exist anymore." ); delete_record( 'Transactions', $id ); }, ); # type = AddWatcher $res *= check_integrity( 'Transactions', 'NewValue' => 'Principals', 'id', condition => 's.Type = ?', bind_values => [ 'AddWatcher' ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a transaction describing watcher changes," ." but the User with id stored in NewValue column doesn't exist anymore." ); delete_record( 'Transactions', $id ); }, ); # type = DeleteLink or AddLink # handled in 'Links: *' checks as {New,Old}Value store URIs # type = Set, Field = Queue $res *= check_integrity( 'Transactions', 'NewValue' => 'Queues', 'id', condition => 's.Type = ? AND s.Field = ?', bind_values => [ 'Set', 'Queue' ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a transaction describing a queue change," ." but the Queue with id stored in the NewValue column doesn't exist anymore." ); delete_record( 'Transactions', $id ); }, ); $res *= check_integrity( 'Transactions', 'OldValue' => 'Queues', 'id', condition => 's.Type = ? AND s.Field = ?', bind_values => [ 'Set', 'Queue' ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a transaction describing a queue change," ." but the Queue with id stored in the OldValue column doesn't exist anymore." ); delete_record( 'Transactions', $id ); }, ); # Reminders $res *= check_integrity( 'Transactions', 'NewValue' => 'Tickets', 'id', join_condition => 't.Type = ?', condition => 's.Type IN (?, ?, ?)', bind_values => [ 'reminder', 'AddReminder', 'OpenReminder', 'ResolveReminder' ], ); return $res; }; # Attachments push @CHECKS, 'Attachments -> other' => sub { my $res = 1; $res *= check_integrity( Attachments => 'TransactionId', Transactions => 'id', action => sub { my $id = shift; return unless prompt( 'Delete', "Found an attachment without a transaction." ); delete_record( 'Attachments', $id ); }, ); $res *= check_integrity( Attachments => 'Parent', Attachments => 'id', action => sub { my $id = shift; return unless prompt( 'Delete', "Found an sub-attachment without its parent attachment." ); delete_record( 'Attachments', $id ); }, ); $res *= check_integrity( Attachments => 'Parent', Attachments => 'id', join_condition => 's.TransactionId = t.TransactionId', ); return $res; }; push @CHECKS, 'CustomFields and friends' => sub { my $res = 1; #XXX: ObjectCustomFields needs more love $res *= check_integrity( 'CustomFieldValues', 'CustomField' => 'CustomFields', 'id', ); $res *= check_integrity( 'ObjectCustomFieldValues', 'CustomField' => 'CustomFields', 'id', ); foreach my $model ( @models ) { $res *= check_integrity( 'ObjectCustomFieldValues', 'ObjectId' => m2t($model), 'id', condition => 's.ObjectType = ?', bind_values => [ "RT::$model" ], ); } return $res; }; push @CHECKS, Templates => sub { return check_integrity( 'Templates', 'Queue' => 'Queues', 'id', ); }; push @CHECKS, Scrips => sub { my $res = 1; $res *= check_integrity( 'Scrips', 'ScripCondition' => 'ScripConditions', 'id', ); $res *= check_integrity( 'Scrips', 'ScripAction' => 'ScripActions', 'id', ); $res *= check_integrity( 'Scrips', 'Template' => 'Templates', 'Name', ); $res *= check_integrity( 'ObjectScrips', 'Scrip' => 'Scrips', 'id', ); $res *= check_integrity( 'ObjectScrips', 'ObjectId' => 'Queues', 'id', ); return $res; }; push @CHECKS, Attributes => sub { my $res = 1; foreach my $model ( @models ) { $res *= check_integrity( 'Attributes', 'ObjectId' => m2t($model), 'id', condition => 's.ObjectType = ?', bind_values => [ "RT::$model" ], ); } return $res; }; # Fix situations when Creator or LastUpdatedBy references ACL equivalence # group of a user instead of user push @CHECKS, 'FIX: LastUpdatedBy and Creator' => sub { my $res = 1; my %fix = (); foreach my $model ( @models ) { my $class = "RT::$model"; my $object = $class->new( RT->SystemUser ); foreach my $column ( qw(LastUpdatedBy Creator) ) { next unless $object->_Accessible( $column, 'auto' ); my $table = m2t($model); my $query = <fetchrow_array ) { $res = 0; print STDERR "Record #$rid in $table refers to ACL equivalence group #$gid of user #$uid"; print STDERR " when must reference user.\n"; $action->( $gid, $uid ); if ( keys( %fix ) > 1000 ) { $sth->finish; last; } } } } if ( keys %fix ) { foreach my $table ( keys %fix ) { foreach my $column ( keys %{ $fix{ $table } } ) { my $query = "UPDATE $table SET $column = ? WHERE $column = ?"; while ( my ($gid, $uid) = each %{ $fix{ $table }{ $column } } ) { update_records( $table, { $column => $gid }, { $column => $uid } ); } } } $redo_check{'FIX: LastUpdatedBy and Creator'} = 1; } return $res; }; push @CHECKS, 'LastUpdatedBy and Creator' => sub { my $res = 1; foreach my $model ( @models ) { my $class = "RT::$model"; my $object = $class->new( RT->SystemUser ); my $table = $object->Table; foreach my $column ( qw(LastUpdatedBy Creator) ) { next unless $object->_Accessible( $column, 'auto' ); $res *= check_integrity( $table, $column => 'Users', 'id', action => sub { my ($id, %prop) = @_; return unless my $replace_with = prompt_integer( 'Replace', "Column $column should point to a user, but there is record #$id in table $table\n" ."where it's not true. It's ok to replace these wrong references with id of any user.\n" ."Note that id you enter is not checked. You can pick any user from your DB, but it's\n" ."may be better to create a special user for this, for example 'user_that_has_been_deleted'\n" ."or something like that.", "$table.$column -> user #$prop{$column}" ); update_records( $table, { id => $id, $column => $prop{$column} }, { $column => $replace_with } ); }, ); } } return $res; }; push @CHECKS, 'Links: wrong organization' => sub { my $res = 1; my @URI_USES = ( { model => 'Transaction', column => 'OldValue', Additional => { Type => 'DeleteLink' } }, { model => 'Transaction', column => 'NewValue', Additional => { Type => 'AddLink' } }, { model => 'Link', column => 'Target' }, { model => 'Link', column => 'Base' }, ); my $right_org = RT->Config->Get('Organization'); my @rt_uris = rt_uri_modules(); foreach my $package (@rt_uris) { my $rt_uri = $package->new( $RT::SystemUser ); my $scheme = $rt_uri->Scheme; my $prefix = $rt_uri->LocalURIPrefix; foreach my $use ( @URI_USES ) { my $table = m2t( $use->{'model'} ); my $column = $use->{'column'}; my $query = "SELECT id, $column FROM $table WHERE" . " $column LIKE ? AND $column NOT LIKE ?"; my @binds = (sql_escape_like($scheme) ."://%", sql_escape_like($prefix) ."%"); while ( my ($k, $v) = each %{ $use->{'Additional'} || {} } ) { $query .= " AND $k = ?"; push @binds, $v; } my $sth = execute_query( $query, @binds ); while ( my ($id, $value) = $sth->fetchrow_array ) { $res = 0; print STDERR "Record #$id in $table. Value of $column column most probably is an incorrect link\n"; my ($wrong_org) = ( $value =~ m{^\Q$scheme\E://(.+)/[^/]+/[0-9]*$} ); next unless my $replace_with = prompt( 'Replace', "Column $column in $table is a link. There is record #$id that has a" ." local scheme of '$scheme', but its organization is '$wrong_org'" ." instead of '$right_org'. Most probably the Organization was" ." changed from '$wrong_org' to '$right_org' at some point. It is" ." generally a good idea to replace these wrong links.\n", "Links: wrong organization $wrong_org" ); print "Updating record(s) in $table\n" if $opt{'verbose'}; my $wrong_prefix = $scheme . '://'. $wrong_org; my $query = "UPDATE $table SET $column = ". sql_concat('?', "SUBSTR($column, ?)") ." WHERE $column LIKE ?"; execute_query( $query, $prefix, length($wrong_prefix)+1, sql_escape_like($wrong_prefix) .'/%' ); $redo_check{'Links: wrong organization'} = 1; $redo_check{'Links: LocalX for non-ticket'} = 1; last; # plenty of chances we covered all cases with one update } } } # end foreach my $package (@rt_uris) return $res; }; push @CHECKS, 'Links: LocalX for non-ticket' => sub { my $res = 1; my $rt_uri = RT::URI::fsck_com_rt->new( $RT::SystemUser ); my $scheme = $rt_uri->Scheme; my $prefix = $rt_uri->LocalURIPrefix; my $table = m2t('Link'); foreach my $dir ( 'Target', 'Base' ) { # we look only at links with correct organization, previouse check deals # with incorrect orgs my $where = "Local$dir > 0 AND $dir LIKE ? AND $dir NOT LIKE ?"; my @binds = (sql_escape_like($prefix) ."/%", sql_escape_like($prefix) ."/ticket/%"); my $sth = execute_query( "SELECT id FROM $table WHERE $where", @binds ); while ( my ($id, $value) = $sth->fetchrow_array ) { $res = 0; print STDERR "Record #$id in $table. Value of Local$dir is not 0\n"; next unless my $replace_with = prompt( 'Replace', "Column Local$dir in $table should be 0 if $dir column is not link" ." to a ticket. It's ok to replace with 0.\n", ); print "Updating record(s) in $table\n" if $opt{'verbose'}; execute_query( "UPDATE $table SET Local$dir = 0 WHERE $where", @binds ); $redo_check{'Links: wrong organization'} = 1; last; # we covered all cases with one update } } return $res; }; push @CHECKS, 'Links: LocalX != X' => sub { my $res = 1; my $rt_uri = RT::URI::fsck_com_rt->new( $RT::SystemUser ); my $scheme = $rt_uri->Scheme; my $prefix = $rt_uri->LocalURIPrefix .'/ticket/'; my $table = m2t('Link'); foreach my $dir ( 'Target', 'Base' ) { # we limit to $dir = */ticket/* so it doesn't conflict with previouse check # previouse check is more important as there was a bug in RT when Local$dir # was set for not tickets # XXX: we have issue with MergedInto links - "LocalX !~ X" my $where = "Local$dir > 0 AND $dir LIKE ? AND $dir != ". sql_concat('?', "Local$dir") ." AND Type != ?"; my @binds = (sql_escape_like($prefix) ."%", $prefix, 'MergedInto'); my $sth = execute_query( "SELECT id FROM $table WHERE $where", @binds ); while ( my ($id, $value) = $sth->fetchrow_array ) { $res = 0; print STDERR "Record #$id in $table. Value of $dir doesn't match ticket id in Local$dir\n"; next unless my $replace_with = prompt( 'Replace', "For ticket links column $dir in $table table should end with" ." ticket id from Local$dir. It's probably ok to fix $dir column.\n", ); print "Updating record(s) in $table\n" if $opt{'verbose'}; execute_query( "UPDATE $table SET $dir = ". sql_concat('?', "Local$dir") ." WHERE $where", $prefix, @binds ); last; # we covered all cases with one update } } return $res; }; push @CHECKS, 'Links: missing object' => sub { my $res = 1; my @URI_USES = ( { model => 'Transaction', column => 'OldValue', Additional => { Type => 'DeleteLink' } }, { model => 'Transaction', column => 'NewValue', Additional => { Type => 'AddLink' } }, { model => 'Link', column => 'Target' }, { model => 'Link', column => 'Base' }, ); my @rt_uris = rt_uri_modules(); foreach my $package (@rt_uris) { my $rt_uri = $package->new( $RT::SystemUser ); my $scheme = $rt_uri->Scheme; my $prefix = $rt_uri->LocalURIPrefix; foreach my $use ( @URI_USES ) { my $stable = m2t( $use->{'model'} ); my $scolumn = $use->{'column'}; foreach my $tmodel ( @models ) { my $tclass = 'RT::'. $tmodel; my $ttable = m2t($tmodel); my $tprefix = $prefix .'/'. ($tclass eq 'RT::Ticket'? 'ticket' : $tclass) .'/'; $tprefix = $prefix . '/article/' if $tclass eq 'RT::Article'; my $query = "SELECT s.id FROM $stable s LEFT JOIN $ttable t " ." ON t.id = ". sql_str2int("SUBSTR(s.$scolumn, ?)") ." WHERE s.$scolumn LIKE ? AND t.id IS NULL"; my @binds = (length($tprefix) + 1, sql_escape_like($tprefix).'%'); while ( my ($k, $v) = each %{ $use->{'Additional'} || {} } ) { $query .= " AND s.$k = ?"; push @binds, $v; } my $sth = execute_query( $query, @binds ); while ( my ($sid) = $sth->fetchrow_array ) { $res = 0; print STDERR "Link in $scolumn column in record #$sid in $stable table points" ." to not existing object.\n"; next unless prompt( 'Delete', "Column $scolumn in $stable table is a link to an object that doesn't exist." ." You can delete such records, however make sure there is no other" ." errors with links.\n", 'Link to a missing object in $ttable' ); delete_record($stable, $sid); } } } } # end foreach my $package (@rt_uris) return $res; }; my %CHECKS = @CHECKS; @do_check = do { my $i = 1; grep $i++%2, @CHECKS }; if ($opt{'links-only'}) { @do_check = grep { /^Links:/ } @do_check; } my $status = 1; while ( my $check = shift @do_check ) { $status *= $CHECKS{ $check }->(); foreach my $redo ( keys %redo_check ) { die "check $redo doesn't exist" unless $CHECKS{ $redo }; delete $redo_check{ $redo }; next if grep $_ eq $redo, @do_check; # don't do twice push @do_check, $redo; } } exit 1 unless $status; exit 0; =head2 check_integrity Takes two (table name, column(s)) pairs. First pair is reference we check and second is destination that must exist. Array reference can be used for multiple columns. Returns 0 if a record is missing or 1 otherwise. =cut sub check_integrity { my ($stable, @scols) = (shift, shift); my ($ttable, @tcols) = (shift, shift); my %args = @_; @scols = @{ $scols[0] } if ref $scols[0]; @tcols = @{ $tcols[0] } if ref $tcols[0]; print "Checking integrity of $stable.{". join(', ', @scols) ."} => $ttable.{". join(', ', @tcols) ."}\n" if $opt{'verbose'}; my $query = "SELECT s.id, ". join(', ', map "s.$_", @scols) ." FROM $stable s LEFT JOIN $ttable t" ." ON (". join( ' AND ', map columns_eq_cond('s', $stable, $scols[$_] => 't', $ttable, $tcols[$_]), (0..(@scols-1)) ) .")" . ($args{'join_condition'}? " AND ( $args{'join_condition'} )": "") ." WHERE t.id IS NULL" ." AND ". join(' AND ', map "s.$_ IS NOT NULL", @scols); $query .= " AND ( $args{'condition'} )" if $args{'condition'}; my @binds = @{ $args{'bind_values'} || [] }; if ( $tcols[0] eq 'id' && @tcols == 1 ) { my $type = $TYPE{"$stable.$scols[0]"} || 'number'; if ( $type eq 'number' ) { $query .= " AND s.$scols[0] != ?" } elsif ( $type eq 'text' ) { $query .= " AND s.$scols[0] NOT LIKE ?" } push @binds, 0; } my $res = 1; my $sth = execute_query( $query, @binds ); while ( my ($sid, @set) = $sth->fetchrow_array ) { $res = 0; print STDERR "Record #$sid in $stable references a nonexistent record in $ttable\n"; for ( my $i = 0; $i < @scols; $i++ ) { print STDERR "\t$scols[$i] => '$set[$i]' => $tcols[$i]\n"; } print STDERR "\t". describe( $stable, $sid ) ."\n"; $args{'action'}->( $sid, map { $scols[$_] => $set[$_] } (0 .. (@scols-1)) ) if $args{'action'}; } return $res; } sub describe { my ($table, $id) = @_; return '' unless my $cb = $describe_cb{ $table }; my $row = load_record( $table, $id ); unless ( $row->{id} ) { $table =~ s/s$//; return "$table doesn't exist"; } return $cb->( $row ); } sub columns_eq_cond { my ($la, $lt, $lc, $ra, $rt, $rc) = @_; my $ltype = $TYPE{"$lt.$lc"} || 'number'; my $rtype = $TYPE{"$rt.$rc"} || 'number'; return "$la.$lc = $ra.$rc" if $db_type ne 'Pg' || $ltype eq $rtype; if ( $rtype eq 'text' ) { return "$ra.$rc LIKE CAST($la.$lc AS text)"; } elsif ( $ltype eq 'text' ) { return "$la.$lc LIKE CAST($ra.$rc AS text)"; } else { die "don't know how to cast" } } sub check_uniqueness { my $on = shift; my %args = @_; my @columns = @{ $args{'columns'} }; print "Checking uniqueness of ( ", join(', ', map "'$_'", @columns )," ) in table '$on'\n" if $opt{'verbose'}; my ($scond, $tcond); if ( $scond = $tcond = $args{'condition'} ) { $scond =~ s/(\s|^)\./$1s./g; $tcond =~ s/(\s|^)\./$1t./g; } my $query = "SELECT s.id, t.id, ". join(', ', map "s.$_", @columns) ." FROM $on s LEFT JOIN $on t " ." ON s.id != t.id AND ". join(' AND ', map "s.$_ = t.$_", @columns) . ($tcond? " AND ( $tcond )": "") . ($args{'extra_tables'} ? join(", ", "", @{$args{'extra_tables'}}) : "") ." WHERE t.id IS NOT NULL " ." AND ". join(' AND ', map "s.$_ IS NOT NULL", @columns); $query .= " AND ( $scond )" if $scond; $query .= " AND ( $args{'extra_condition'} )" if $args{'extra_condition'}; my $sth = execute_query( $query, $args{'bind_values'}? (@{ $args{'bind_values'} }, @{ $args{'bind_values'} }): (), $args{'extra_values'}? (@{ $args{'extra_values'} }): () ); my $res = 1; while ( my ($sid, $tid, @set) = $sth->fetchrow_array ) { $res = 0; print STDERR "Record #$tid in $on has the same set of values as $sid\n"; for ( my $i = 0; $i < @columns; $i++ ) { print STDERR "\t$columns[$i] => '$set[$i]'\n"; } $args{'action'}->( $tid, map { $columns[$_] => $set[$_] } (0 .. (@columns-1)) ) if $args{'action'}; } return $res; } sub load_record { my ($table, $id) = @_; my $sth = execute_query( "SELECT * FROM $table WHERE id = ?", $id ); return $sth->fetchrow_hashref('NAME_lc'); } sub delete_record { my ($table, $id) = (@_); print "Deleting record #$id in $table\n" if $opt{'verbose'}; my $query = "DELETE FROM $table WHERE id = ?"; $redo_check{ $_ } = 1 foreach @{ $redo_on{'Delete'}{ $table } || [] }; return execute_query( $query, $id ); } sub create_record { print "Creating a record in $_[0]\n" if $opt{'verbose'}; $redo_check{ $_ } = 1 foreach @{ $redo_on{'Create'}{ $_[0] } || [] }; return $RT::Handle->Insert( @_ ); } sub update_records { my $table = shift; my $where = shift; my $what = shift; my (@where_cols, @where_binds); while ( my ($k, $v) = each %$where ) { push @where_cols, $k; push @where_binds, $v; } my (@what_cols, @what_binds); while ( my ($k, $v) = each %$what ) { push @what_cols, $k; push @what_binds, $v; } print "Updating record(s) in $table\n" if $opt{'verbose'}; my $query = "UPDATE $table SET ". join(', ', map "$_ = ?", @what_cols) ." WHERE ". join(' AND ', map "$_ = ?", @where_cols); $redo_check{ $_ } = 1 foreach @{ $redo_on{'Update'}{ $table } || [] }; return execute_query( $query, @what_binds, @where_binds ); } sub execute_query { my ($query, @binds) = @_; print "Executing query: $query\n\n" if $opt{'verbose'}; my $sth = $dbh->prepare( $query ) or die "couldn't prepare $query\n\tError: ". $dbh->errstr; $sth->execute( @binds ) or die "couldn't execute $query\n\tError: ". $sth->errstr; return $sth; } sub sql_concat { return $_[0] if @_ <= 1; my $db_type = RT->Config->Get('DatabaseType'); if ( $db_type eq 'Pg' || $db_type eq 'SQLite' ) { return '('. join( ' || ', @_ ) .')'; } return sql_concat('CONCAT('. join( ', ', splice @_, 0, 2 ).')', @_); } sub sql_str2int { my $db_type = RT->Config->Get('DatabaseType'); if ( $db_type eq 'Pg' ) { return "($_[0])::integer"; } return $_[0]; } sub sql_escape_like { my ($string) = @_; $string =~ s/([%_\\])/\\$1/g; return $string; } { my %cached_answer; sub prompt { my $action = shift; my $msg = shift; my $token = shift || join ':', caller; return 0 unless $opt{'resolve'}; return 1 if $opt{'force'}; return $cached_answer{ $token } if exists $cached_answer{ $token }; print $msg, "\n"; print "$action ALL records with the same defect? [N]: "; my $a = ; return $cached_answer{ $token } = 1 if $a =~ /^(y|yes)$/i; return $cached_answer{ $token } = 0; } } { my %cached_answer; sub prompt_action { my $actions = shift; my $msg = shift; my $token = shift || join ':', caller; return '' unless $opt{'resolve'}; return lc substr $actions->[0], 0, 1 if $opt{'force'}; return $cached_answer{ $token } if exists $cached_answer{ $token }; print $msg, "\n"; print join( ' or ', @$actions ) ." ALL records with the same defect? [do nothing]: "; my $a = ; chomp $a; return $cached_answer{ $token } = '' unless $a; foreach ( grep rindex(lc $_, lc $a, 0) == 0, @$actions ) { return $cached_answer{ $token } = lc substr $a, 0, 1; } return $cached_answer{ $token } = ''; } } { my %cached_answer; sub prompt_integer { my $action = shift; my $msg = shift; my $token = shift || join ':', caller; return 0 unless $opt{'resolve'}; return 0 if $opt{'force'}; return $cached_answer{ $token } if exists $cached_answer{ $token }; print $msg, "\n"; print "$action ALL records with the same defect? [0]: "; my $a = ; chomp $a; $a = int($a); return $cached_answer{ $token } = $a; } } # Find all RT::URI modules RT has loaded sub rt_uri_modules { my @uris = grep /^RT\/URI\/.+\.pm$/, keys %INC; my @uri_modules; foreach my $uri_path (@uris){ next if $uri_path =~ /base\.pm$/; # Skip base RT::URI object $uri_path = substr $uri_path, 0, -3; # chop off .pm push @uri_modules, join '::', split '/', $uri_path; } return @uri_modules; } 1; __END__ =head1 NAME rt-validator - check and correct validity of records in RT's database =head1 SYNOPSIS rt-validator --check rt-validator --check --verbose rt-validator --check --verbose --resolve rt-validator --check --verbose --resolve --force =head1 DESCRIPTION This script checks integrity of records in RT's DB. May delete some invalid records or ressurect accidentally deleted. =head1 OPTIONS =over =item check mandatory. it's equal to -c =item verbose print additional info to STDOUT it's equal to -v =item resolve enable resolver that can delete or create some records =item force resolve without asking questions =item links-only only run the Link validation routines, useful if you changed your Organization =back rt-4.2.12/sbin/rt-validator.in000644 000765 000024 00000140267 12555754775 016610 0ustar00sartakstaff000000 000000 #!@PERL@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; # fix lib paths, some may be relative BEGIN { # BEGIN RT CMD BOILERPLATE require File::Spec; require Cwd; my @libs = ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); my $bin_path; for my $lib (@libs) { unless ( File::Spec->file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use RT::Interface::CLI qw(Init); my %opt = (); Init( \%opt, 'check|c', 'resolve', 'force', 'verbose|v', 'links-only', ); Pod::Usage::pod2usage( { verbose => 2 } ) unless $opt{check}; usage_warning() if $opt{'resolve'} && !$opt{'force'}; sub usage_warning { print <; } my $dbh = $RT::Handle->dbh; my $db_type = RT->Config->Get('DatabaseType'); my %TYPE = ( 'Transactions.Field' => 'text', 'Transactions.OldValue' => 'text', 'Transactions.NewValue' => 'text', ); my @models = qw( ACE Article Attachment Attribute CachedGroupMember CustomField CustomFieldValue GroupMember Group Link ObjectCustomField ObjectCustomFieldValue Principal Queue ScripAction ScripCondition Scrip ObjectScrip Template Ticket Transaction User ); my %redo_on; $redo_on{'Delete'} = { ACL => [], Attributes => [], Links => [], CustomFields => [], CustomFieldValues => [], ObjectCustomFields => [], ObjectCustomFieldValues => [], Queues => [], Scrips => [], ObjectScrips => [], ScripActions => [], ScripConditions => [], Templates => [], Tickets => [ 'Tickets -> other', 'Tickets <-> Role Groups' ], Transactions => [ 'Attachments -> other' ], Principals => ['User <-> ACL equivalence group', 'GMs -> Groups, Members' ], Users => ['User <-> ACL equivalence group', 'GMs -> Groups, Members', 'Principals -> Users' ], Groups => ['User <-> ACL equivalence group', 'GMs -> Groups, Members', 'CGM vs. GM', 'Principals -> Groups' ], GroupMembers => [ 'CGM vs. GM' ], CachedGroupMembers => [ 'CGM vs. GM' ], }; $redo_on{'Create'} = { Principals => ['User <-> ACL equivalence group', 'GMs -> Groups, Members' ], Groups => ['User <-> ACL equivalence group', 'GMs -> Groups, Members', 'CGM vs. GM' ], GroupMembers => [ 'CGM vs. GM' ], CachedGroupMembers => [ 'CGM vs. GM' ], }; $redo_on{'Update'} = { Groups => ['User Defined Group Name uniqueness'], }; my %describe_cb; %describe_cb = ( Attachments => sub { my $row = shift; my $txn_id = $row->{transactionid}; my $res = 'Attachment #'. $row->{id} .' -> Txn #'. $txn_id; return $res .', '. describe( 'Transactions', $txn_id ); }, Transactions => sub { my $row = shift; return 'Transaction #'. $row->{id} .' -> object '. $row->{objecttype} .' #'. $row->{objectid}; }, ); { my %cache = (); sub m2t($) { my $model = shift; return $cache{$model} if $cache{$model}; my $class = "RT::$model"; my $object = $class->new( RT->SystemUser ); return $cache{$model} = $object->Table; } } my (@do_check, %redo_check); my @CHECKS; foreach my $table ( qw(Users Groups) ) { push @CHECKS, "$table -> Principals" => sub { my $msg = "A record in $table refers to a nonexistent record in Principals." ." The script can either create the missing record in Principals" ." or delete the record in $table."; my ($type) = ($table =~ /^(.*)s$/); return check_integrity( $table, 'id' => 'Principals', 'id', join_condition => 't.PrincipalType = ?', bind_values => [ $type ], action => sub { my $id = shift; return unless my $a = prompt_action( ['Create', 'delete'], $msg ); if ( $a eq 'd' ) { delete_record( $table, $id ); } elsif ( $a eq 'c' ) { my $principal_id = create_record( 'Principals', id => $id, PrincipalType => $type, ObjectId => $id, Disabled => 0 ); } else { die "Unknown action '$a'"; } }, ); }; push @CHECKS, "Principals -> $table" => sub { my $msg = "A record in Principals refers to a nonexistent record in $table." ." In some cases it's possible to manually resurrect such records," ." but this utility can only delete records."; return check_integrity( 'Principals', 'id' => $table, 'id', condition => 's.PrincipalType = ?', bind_values => [ $table =~ /^(.*)s$/ ], action => sub { my $id = shift; return unless prompt( 'Delete', $msg ); delete_record( 'Principals', $id ); }, ); }; } push @CHECKS, 'User <-> ACL equivalence group' => sub { my $res = 1; # from user to group $res *= check_integrity( 'Users', 'id' => 'Groups', 'Instance', join_condition => 't.Domain = ? AND t.Type = ?', bind_values => [ 'ACLEquivalence', 'UserEquiv' ], action => sub { my $id = shift; return unless prompt( 'Create', "Found a user that has no ACL equivalence group." ); my $gid = create_record( 'Groups', Domain => 'ACLEquivalence', Type => 'UserEquiv', Instance => $id, ); }, ); # from group to user $res *= check_integrity( 'Groups', 'Instance' => 'Users', 'id', condition => 's.Domain = ? AND s.Type = ?', bind_values => [ 'ACLEquivalence', 'UserEquiv' ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a user ACL equivalence group, but there is no user." ); delete_record( 'Groups', $id ); }, ); # one ACL equiv group for each user $res *= check_uniqueness( 'Groups', columns => ['Instance'], condition => '.Domain = ? AND .Type = ?', bind_values => [ 'ACLEquivalence', 'UserEquiv' ], ); return $res; }; # check integrity of Queue role groups push @CHECKS, 'Queues <-> Role Groups' => sub { # XXX: we check only that there is at least one group for a queue # from queue to group my $res = 1; $res *= check_integrity( 'Queues', 'id' => 'Groups', 'Instance', join_condition => 't.Domain = ?', bind_values => [ 'RT::Queue-Role' ], ); # from group to queue $res *= check_integrity( 'Groups', 'Instance' => 'Queues', 'id', condition => 's.Domain = ?', bind_values => [ 'RT::Queue-Role' ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a role group of a nonexistent queue." ); delete_record( 'Groups', $id ); }, ); return $res; }; # check integrity of Ticket role groups push @CHECKS, 'Tickets <-> Role Groups' => sub { # XXX: we check only that there is at least one group for a queue # from queue to group my $res = 1; $res *= check_integrity( 'Tickets', 'id' => 'Groups', 'Instance', join_condition => 't.Domain = ?', bind_values => [ 'RT::Ticket-Role' ], ); # from group to ticket $res *= check_integrity( 'Groups', 'Instance' => 'Tickets', 'id', condition => 's.Domain = ?', bind_values => [ 'RT::Ticket-Role' ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a role group of a nonexistent ticket." ); delete_record( 'Groups', $id ); }, ); return $res; }; # additional CHECKS on groups push @CHECKS, 'Role Groups (Instance, Type) uniqueness' => sub { # Check that Domain, Instance and Type are unique return check_uniqueness( 'Groups', columns => ['Domain', 'Instance', 'Type'], condition => '.Domain LIKE ?', bind_values => [ '%-Role' ], ); }; push @CHECKS, 'System internal group uniqueness' => sub { return check_uniqueness( 'Groups', columns => ['Instance', 'Type'], condition => '.Domain = ?', bind_values => [ 'SystemInternal' ], ); }; # CHECK that user defined group names are unique push @CHECKS, 'User Defined Group Name uniqueness' => sub { return check_uniqueness( 'Groups', columns => ['Name'], condition => '.Domain = ?', bind_values => [ 'UserDefined' ], extra_tables => ['Principals sp', 'Principals tp'], extra_condition => join(" and ", map { "$_.id = ${_}p.ObjectId and ${_}p.PrincipalType = ? and ${_}p.Disabled != 1" } qw(s t)), extra_values => ['Group', 'Group'], action => sub { return unless prompt( 'Rename', "Found a user defined group with a non-unique Name." ); my $id = shift; my %cols = @_; update_records('Groups', { id => $id }, { Name => join('-', $cols{'Name'}, $id) }); }, ); }; push @CHECKS, 'GMs -> Groups, Members' => sub { my $msg = "A record in GroupMembers references an object that doesn't exist." ." Maybe you deleted a group or principal directly from the database?" ." Usually it's OK to delete such records."; my $res = 1; $res *= check_integrity( 'GroupMembers', 'GroupId' => 'Groups', 'id', action => sub { my $id = shift; return unless prompt( 'Delete', $msg ); delete_record( 'GroupMembers', $id ); }, ); $res *= check_integrity( 'GroupMembers', 'MemberId' => 'Principals', 'id', action => sub { my $id = shift; return unless prompt( 'Delete', $msg ); delete_record( 'GroupMembers', $id ); }, ); return $res; }; # CGM and GM push @CHECKS, 'CGM vs. GM' => sub { my $res = 1; # all GM record should be duplicated in CGM $res *= check_integrity( GroupMembers => ['GroupId', 'MemberId'], CachedGroupMembers => ['GroupId', 'MemberId'], join_condition => 't.ImmediateParentId = t.GroupId AND t.Via = t.id', action => sub { my $id = shift; return unless prompt( 'Create', "Found a record in GroupMembers that has no direct duplicate in CachedGroupMembers table." ); my $gm = RT::GroupMember->new( RT->SystemUser ); $gm->Load( $id ); die "Couldn't load GM record #$id" unless $gm->id; my $cgm = create_record( 'CachedGroupMembers', GroupId => $gm->GroupId, MemberId => $gm->MemberId, ImmediateParentId => $gm->GroupId, Via => undef, Disabled => 0, # XXX: we should check integrity of Disabled field ); update_records( "CachedGroupMembers", { id => $cgm }, { Via => $cgm } ); }, ); # all first level CGM records should have a GM record $res *= check_integrity( CachedGroupMembers => ['GroupId', 'MemberId'], GroupMembers => ['GroupId', 'MemberId'], condition => 's.ImmediateParentId = s.GroupId AND s.Via = s.id AND s.GroupId != s.MemberId', action => sub { my $id = shift; return unless prompt( 'Delete', "Found a record in CachedGroupMembers for a (Group, Member) pair" ." that doesn't exist in the GroupMembers table." ); delete_record( 'CachedGroupMembers', $id ); }, ); # each group should have a CGM record where MemberId == GroupId $res *= check_integrity( Groups => ['id', 'id'], CachedGroupMembers => ['GroupId', 'MemberId'], join_condition => 't.ImmediateParentId = t.GroupId AND t.Via = t.id', action => sub { my $id = shift; return unless prompt( 'Create', "Found a record in Groups that has no direct" ." duplicate in CachedGroupMembers table." ); my $g = RT::Group->new( RT->SystemUser ); $g->Load( $id ); die "Couldn't load group #$id" unless $g->id; die "Loaded group by $id has id ". $g->id unless $g->id == $id; my $cgm = create_record( 'CachedGroupMembers', GroupId => $id, MemberId => $id, ImmediateParentId => $id, Via => undef, Disabled => $g->Disabled, ); update_records( "CachedGroupMembers", { id => $cgm }, { Via => $cgm } ); }, ); # and back, each record in CGM with MemberId == GroupId without exceptions # should reference a group $res *= check_integrity( CachedGroupMembers => ['GroupId', 'MemberId'], Groups => ['id', 'id'], condition => "s.GroupId = s.MemberId", action => sub { my $id = shift; return unless prompt( 'Delete', "Found a record in CachedGroupMembers for a group that doesn't exist." ); delete_record( 'CachedGroupMembers', $id ); }, ); # Via $res *= check_integrity( CachedGroupMembers => 'Via', CachedGroupMembers => 'id', action => sub { my $id = shift; return unless prompt( 'Delete', "Found a record in CachedGroupMembers with Via that references a nonexistent record." ); delete_record( 'CachedGroupMembers', $id ); }, ); # for every CGM where ImmediateParentId != GroupId there should be # matching parent record (first level) $res *= check_integrity( CachedGroupMembers => ['ImmediateParentId', 'MemberId'], CachedGroupMembers => ['GroupId', 'MemberId'], join_condition => 't.Via = t.id', condition => 's.ImmediateParentId != s.GroupId', action => sub { my $id = shift; return unless prompt( 'Delete', "Found a record in CachedGroupMembers that references a nonexistent record in CachedGroupMembers table." ); delete_record( 'CachedGroupMembers', $id ); }, ); # for every CGM where ImmediateParentId != GroupId there should be # matching "grand" parent record $res *= check_integrity( CachedGroupMembers => ['GroupId', 'ImmediateParentId', 'Via'], CachedGroupMembers => ['GroupId', 'MemberId', 'id'], condition => 's.ImmediateParentId != s.GroupId', action => sub { my $id = shift; return unless prompt( 'Delete', "Found a record in CachedGroupMembers that references a nonexistent record in CachedGroupMembers table." ); delete_record( 'CachedGroupMembers', $id ); }, ); # CHECK recursive records: # if we have CGM1 (G1,M1,V1,IP1) then for every GM2(G2, M2), where G2 == M1, # we should have CGM3 where G3 = G1, M3 = M2, V3 = ID1, IP3 = M1 { my $query = <fetchrow_array ) { $res = 0; print STDERR "Principal #$m is member of #$ip when #$ip is member of #$g,"; print STDERR " but there is no cached GM record that $m is member of #$g.\n"; $action->( GroupId => $g, MemberId => $m, Via => $via, ImmediateParentId => $ip, Disabled => $dis, ); } } return $res; }; # Tickets push @CHECKS, 'Tickets -> other' => sub { my $res = 1; $res *= check_integrity( 'Tickets', 'EffectiveId' => 'Tickets', 'id', action => sub { my $id = shift; return unless prompt( 'Delete', "Found a ticket that's been merged into a ticket that no longer exists." ); delete_record( 'Tickets', $id ); }, ); $res *= check_integrity( 'Tickets', 'Queue' => 'Queues', 'id', ); $res *= check_integrity( 'Tickets', 'Owner' => 'Users', 'id', action => sub { my ($id, %prop) = @_; return unless my $replace_with = prompt_integer( 'Replace', "Column Owner should point to a user, but there is record #$id in Tickets\n" ."where it's not true. It's ok to replace these wrong references with id of any user.\n" ."Note that id you enter is not checked. You can pick any user from your DB, but it's\n" ."may be better to create a special user for this, for example 'user_that_has_been_deleted'\n" ."or something like that.", "Tickets.Owner -> user #$prop{Owner}" ); update_records( 'Tickets', { id => $id, Owner => $prop{Owner} }, { Owner => $replace_with } ); }, ); # XXX: check that owner is only member of owner role group return $res; }; push @CHECKS, 'Transactions -> other' => sub { my $res = 1; foreach my $model ( @models ) { $res *= check_integrity( 'Transactions', 'ObjectId' => m2t($model), 'id', condition => 's.ObjectType = ?', bind_values => [ "RT::$model" ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a transaction without object." ); delete_record( 'Transactions', $id ); }, ); } # type = CustomField $res *= check_integrity( 'Transactions', 'Field' => 'CustomFields', 'id', condition => 's.Type = ?', bind_values => [ 'CustomField' ], ); # type = Take, Untake, Force, Steal or Give $res *= check_integrity( 'Transactions', 'OldValue' => 'Users', 'id', condition => 's.Type IN (?, ?, ?, ?, ?)', bind_values => [ qw(Take Untake Force Steal Give) ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a transaction regarding Owner changes," ." but the User with id stored in OldValue column doesn't exist anymore." ); delete_record( 'Transactions', $id ); }, ); $res *= check_integrity( 'Transactions', 'NewValue' => 'Users', 'id', condition => 's.Type IN (?, ?, ?, ?, ?)', bind_values => [ qw(Take Untake Force Steal Give) ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a transaction regarding Owner changes," ." but the User with id stored in NewValue column doesn't exist anymore." ); delete_record( 'Transactions', $id ); }, ); # type = DelWatcher $res *= check_integrity( 'Transactions', 'OldValue' => 'Principals', 'id', condition => 's.Type = ?', bind_values => [ 'DelWatcher' ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a transaction describing watcher changes," ." but the User with id stored in OldValue column doesn't exist anymore." ); delete_record( 'Transactions', $id ); }, ); # type = AddWatcher $res *= check_integrity( 'Transactions', 'NewValue' => 'Principals', 'id', condition => 's.Type = ?', bind_values => [ 'AddWatcher' ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a transaction describing watcher changes," ." but the User with id stored in NewValue column doesn't exist anymore." ); delete_record( 'Transactions', $id ); }, ); # type = DeleteLink or AddLink # handled in 'Links: *' checks as {New,Old}Value store URIs # type = Set, Field = Queue $res *= check_integrity( 'Transactions', 'NewValue' => 'Queues', 'id', condition => 's.Type = ? AND s.Field = ?', bind_values => [ 'Set', 'Queue' ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a transaction describing a queue change," ." but the Queue with id stored in the NewValue column doesn't exist anymore." ); delete_record( 'Transactions', $id ); }, ); $res *= check_integrity( 'Transactions', 'OldValue' => 'Queues', 'id', condition => 's.Type = ? AND s.Field = ?', bind_values => [ 'Set', 'Queue' ], action => sub { my $id = shift; return unless prompt( 'Delete', "Found a transaction describing a queue change," ." but the Queue with id stored in the OldValue column doesn't exist anymore." ); delete_record( 'Transactions', $id ); }, ); # Reminders $res *= check_integrity( 'Transactions', 'NewValue' => 'Tickets', 'id', join_condition => 't.Type = ?', condition => 's.Type IN (?, ?, ?)', bind_values => [ 'reminder', 'AddReminder', 'OpenReminder', 'ResolveReminder' ], ); return $res; }; # Attachments push @CHECKS, 'Attachments -> other' => sub { my $res = 1; $res *= check_integrity( Attachments => 'TransactionId', Transactions => 'id', action => sub { my $id = shift; return unless prompt( 'Delete', "Found an attachment without a transaction." ); delete_record( 'Attachments', $id ); }, ); $res *= check_integrity( Attachments => 'Parent', Attachments => 'id', action => sub { my $id = shift; return unless prompt( 'Delete', "Found an sub-attachment without its parent attachment." ); delete_record( 'Attachments', $id ); }, ); $res *= check_integrity( Attachments => 'Parent', Attachments => 'id', join_condition => 's.TransactionId = t.TransactionId', ); return $res; }; push @CHECKS, 'CustomFields and friends' => sub { my $res = 1; #XXX: ObjectCustomFields needs more love $res *= check_integrity( 'CustomFieldValues', 'CustomField' => 'CustomFields', 'id', ); $res *= check_integrity( 'ObjectCustomFieldValues', 'CustomField' => 'CustomFields', 'id', ); foreach my $model ( @models ) { $res *= check_integrity( 'ObjectCustomFieldValues', 'ObjectId' => m2t($model), 'id', condition => 's.ObjectType = ?', bind_values => [ "RT::$model" ], ); } return $res; }; push @CHECKS, Templates => sub { return check_integrity( 'Templates', 'Queue' => 'Queues', 'id', ); }; push @CHECKS, Scrips => sub { my $res = 1; $res *= check_integrity( 'Scrips', 'ScripCondition' => 'ScripConditions', 'id', ); $res *= check_integrity( 'Scrips', 'ScripAction' => 'ScripActions', 'id', ); $res *= check_integrity( 'Scrips', 'Template' => 'Templates', 'Name', ); $res *= check_integrity( 'ObjectScrips', 'Scrip' => 'Scrips', 'id', ); $res *= check_integrity( 'ObjectScrips', 'ObjectId' => 'Queues', 'id', ); return $res; }; push @CHECKS, Attributes => sub { my $res = 1; foreach my $model ( @models ) { $res *= check_integrity( 'Attributes', 'ObjectId' => m2t($model), 'id', condition => 's.ObjectType = ?', bind_values => [ "RT::$model" ], ); } return $res; }; # Fix situations when Creator or LastUpdatedBy references ACL equivalence # group of a user instead of user push @CHECKS, 'FIX: LastUpdatedBy and Creator' => sub { my $res = 1; my %fix = (); foreach my $model ( @models ) { my $class = "RT::$model"; my $object = $class->new( RT->SystemUser ); foreach my $column ( qw(LastUpdatedBy Creator) ) { next unless $object->_Accessible( $column, 'auto' ); my $table = m2t($model); my $query = <fetchrow_array ) { $res = 0; print STDERR "Record #$rid in $table refers to ACL equivalence group #$gid of user #$uid"; print STDERR " when must reference user.\n"; $action->( $gid, $uid ); if ( keys( %fix ) > 1000 ) { $sth->finish; last; } } } } if ( keys %fix ) { foreach my $table ( keys %fix ) { foreach my $column ( keys %{ $fix{ $table } } ) { my $query = "UPDATE $table SET $column = ? WHERE $column = ?"; while ( my ($gid, $uid) = each %{ $fix{ $table }{ $column } } ) { update_records( $table, { $column => $gid }, { $column => $uid } ); } } } $redo_check{'FIX: LastUpdatedBy and Creator'} = 1; } return $res; }; push @CHECKS, 'LastUpdatedBy and Creator' => sub { my $res = 1; foreach my $model ( @models ) { my $class = "RT::$model"; my $object = $class->new( RT->SystemUser ); my $table = $object->Table; foreach my $column ( qw(LastUpdatedBy Creator) ) { next unless $object->_Accessible( $column, 'auto' ); $res *= check_integrity( $table, $column => 'Users', 'id', action => sub { my ($id, %prop) = @_; return unless my $replace_with = prompt_integer( 'Replace', "Column $column should point to a user, but there is record #$id in table $table\n" ."where it's not true. It's ok to replace these wrong references with id of any user.\n" ."Note that id you enter is not checked. You can pick any user from your DB, but it's\n" ."may be better to create a special user for this, for example 'user_that_has_been_deleted'\n" ."or something like that.", "$table.$column -> user #$prop{$column}" ); update_records( $table, { id => $id, $column => $prop{$column} }, { $column => $replace_with } ); }, ); } } return $res; }; push @CHECKS, 'Links: wrong organization' => sub { my $res = 1; my @URI_USES = ( { model => 'Transaction', column => 'OldValue', Additional => { Type => 'DeleteLink' } }, { model => 'Transaction', column => 'NewValue', Additional => { Type => 'AddLink' } }, { model => 'Link', column => 'Target' }, { model => 'Link', column => 'Base' }, ); my $right_org = RT->Config->Get('Organization'); my @rt_uris = rt_uri_modules(); foreach my $package (@rt_uris) { my $rt_uri = $package->new( $RT::SystemUser ); my $scheme = $rt_uri->Scheme; my $prefix = $rt_uri->LocalURIPrefix; foreach my $use ( @URI_USES ) { my $table = m2t( $use->{'model'} ); my $column = $use->{'column'}; my $query = "SELECT id, $column FROM $table WHERE" . " $column LIKE ? AND $column NOT LIKE ?"; my @binds = (sql_escape_like($scheme) ."://%", sql_escape_like($prefix) ."%"); while ( my ($k, $v) = each %{ $use->{'Additional'} || {} } ) { $query .= " AND $k = ?"; push @binds, $v; } my $sth = execute_query( $query, @binds ); while ( my ($id, $value) = $sth->fetchrow_array ) { $res = 0; print STDERR "Record #$id in $table. Value of $column column most probably is an incorrect link\n"; my ($wrong_org) = ( $value =~ m{^\Q$scheme\E://(.+)/[^/]+/[0-9]*$} ); next unless my $replace_with = prompt( 'Replace', "Column $column in $table is a link. There is record #$id that has a" ." local scheme of '$scheme', but its organization is '$wrong_org'" ." instead of '$right_org'. Most probably the Organization was" ." changed from '$wrong_org' to '$right_org' at some point. It is" ." generally a good idea to replace these wrong links.\n", "Links: wrong organization $wrong_org" ); print "Updating record(s) in $table\n" if $opt{'verbose'}; my $wrong_prefix = $scheme . '://'. $wrong_org; my $query = "UPDATE $table SET $column = ". sql_concat('?', "SUBSTR($column, ?)") ." WHERE $column LIKE ?"; execute_query( $query, $prefix, length($wrong_prefix)+1, sql_escape_like($wrong_prefix) .'/%' ); $redo_check{'Links: wrong organization'} = 1; $redo_check{'Links: LocalX for non-ticket'} = 1; last; # plenty of chances we covered all cases with one update } } } # end foreach my $package (@rt_uris) return $res; }; push @CHECKS, 'Links: LocalX for non-ticket' => sub { my $res = 1; my $rt_uri = RT::URI::fsck_com_rt->new( $RT::SystemUser ); my $scheme = $rt_uri->Scheme; my $prefix = $rt_uri->LocalURIPrefix; my $table = m2t('Link'); foreach my $dir ( 'Target', 'Base' ) { # we look only at links with correct organization, previouse check deals # with incorrect orgs my $where = "Local$dir > 0 AND $dir LIKE ? AND $dir NOT LIKE ?"; my @binds = (sql_escape_like($prefix) ."/%", sql_escape_like($prefix) ."/ticket/%"); my $sth = execute_query( "SELECT id FROM $table WHERE $where", @binds ); while ( my ($id, $value) = $sth->fetchrow_array ) { $res = 0; print STDERR "Record #$id in $table. Value of Local$dir is not 0\n"; next unless my $replace_with = prompt( 'Replace', "Column Local$dir in $table should be 0 if $dir column is not link" ." to a ticket. It's ok to replace with 0.\n", ); print "Updating record(s) in $table\n" if $opt{'verbose'}; execute_query( "UPDATE $table SET Local$dir = 0 WHERE $where", @binds ); $redo_check{'Links: wrong organization'} = 1; last; # we covered all cases with one update } } return $res; }; push @CHECKS, 'Links: LocalX != X' => sub { my $res = 1; my $rt_uri = RT::URI::fsck_com_rt->new( $RT::SystemUser ); my $scheme = $rt_uri->Scheme; my $prefix = $rt_uri->LocalURIPrefix .'/ticket/'; my $table = m2t('Link'); foreach my $dir ( 'Target', 'Base' ) { # we limit to $dir = */ticket/* so it doesn't conflict with previouse check # previouse check is more important as there was a bug in RT when Local$dir # was set for not tickets # XXX: we have issue with MergedInto links - "LocalX !~ X" my $where = "Local$dir > 0 AND $dir LIKE ? AND $dir != ". sql_concat('?', "Local$dir") ." AND Type != ?"; my @binds = (sql_escape_like($prefix) ."%", $prefix, 'MergedInto'); my $sth = execute_query( "SELECT id FROM $table WHERE $where", @binds ); while ( my ($id, $value) = $sth->fetchrow_array ) { $res = 0; print STDERR "Record #$id in $table. Value of $dir doesn't match ticket id in Local$dir\n"; next unless my $replace_with = prompt( 'Replace', "For ticket links column $dir in $table table should end with" ." ticket id from Local$dir. It's probably ok to fix $dir column.\n", ); print "Updating record(s) in $table\n" if $opt{'verbose'}; execute_query( "UPDATE $table SET $dir = ". sql_concat('?', "Local$dir") ." WHERE $where", $prefix, @binds ); last; # we covered all cases with one update } } return $res; }; push @CHECKS, 'Links: missing object' => sub { my $res = 1; my @URI_USES = ( { model => 'Transaction', column => 'OldValue', Additional => { Type => 'DeleteLink' } }, { model => 'Transaction', column => 'NewValue', Additional => { Type => 'AddLink' } }, { model => 'Link', column => 'Target' }, { model => 'Link', column => 'Base' }, ); my @rt_uris = rt_uri_modules(); foreach my $package (@rt_uris) { my $rt_uri = $package->new( $RT::SystemUser ); my $scheme = $rt_uri->Scheme; my $prefix = $rt_uri->LocalURIPrefix; foreach my $use ( @URI_USES ) { my $stable = m2t( $use->{'model'} ); my $scolumn = $use->{'column'}; foreach my $tmodel ( @models ) { my $tclass = 'RT::'. $tmodel; my $ttable = m2t($tmodel); my $tprefix = $prefix .'/'. ($tclass eq 'RT::Ticket'? 'ticket' : $tclass) .'/'; $tprefix = $prefix . '/article/' if $tclass eq 'RT::Article'; my $query = "SELECT s.id FROM $stable s LEFT JOIN $ttable t " ." ON t.id = ". sql_str2int("SUBSTR(s.$scolumn, ?)") ." WHERE s.$scolumn LIKE ? AND t.id IS NULL"; my @binds = (length($tprefix) + 1, sql_escape_like($tprefix).'%'); while ( my ($k, $v) = each %{ $use->{'Additional'} || {} } ) { $query .= " AND s.$k = ?"; push @binds, $v; } my $sth = execute_query( $query, @binds ); while ( my ($sid) = $sth->fetchrow_array ) { $res = 0; print STDERR "Link in $scolumn column in record #$sid in $stable table points" ." to not existing object.\n"; next unless prompt( 'Delete', "Column $scolumn in $stable table is a link to an object that doesn't exist." ." You can delete such records, however make sure there is no other" ." errors with links.\n", 'Link to a missing object in $ttable' ); delete_record($stable, $sid); } } } } # end foreach my $package (@rt_uris) return $res; }; my %CHECKS = @CHECKS; @do_check = do { my $i = 1; grep $i++%2, @CHECKS }; if ($opt{'links-only'}) { @do_check = grep { /^Links:/ } @do_check; } my $status = 1; while ( my $check = shift @do_check ) { $status *= $CHECKS{ $check }->(); foreach my $redo ( keys %redo_check ) { die "check $redo doesn't exist" unless $CHECKS{ $redo }; delete $redo_check{ $redo }; next if grep $_ eq $redo, @do_check; # don't do twice push @do_check, $redo; } } exit 1 unless $status; exit 0; =head2 check_integrity Takes two (table name, column(s)) pairs. First pair is reference we check and second is destination that must exist. Array reference can be used for multiple columns. Returns 0 if a record is missing or 1 otherwise. =cut sub check_integrity { my ($stable, @scols) = (shift, shift); my ($ttable, @tcols) = (shift, shift); my %args = @_; @scols = @{ $scols[0] } if ref $scols[0]; @tcols = @{ $tcols[0] } if ref $tcols[0]; print "Checking integrity of $stable.{". join(', ', @scols) ."} => $ttable.{". join(', ', @tcols) ."}\n" if $opt{'verbose'}; my $query = "SELECT s.id, ". join(', ', map "s.$_", @scols) ." FROM $stable s LEFT JOIN $ttable t" ." ON (". join( ' AND ', map columns_eq_cond('s', $stable, $scols[$_] => 't', $ttable, $tcols[$_]), (0..(@scols-1)) ) .")" . ($args{'join_condition'}? " AND ( $args{'join_condition'} )": "") ." WHERE t.id IS NULL" ." AND ". join(' AND ', map "s.$_ IS NOT NULL", @scols); $query .= " AND ( $args{'condition'} )" if $args{'condition'}; my @binds = @{ $args{'bind_values'} || [] }; if ( $tcols[0] eq 'id' && @tcols == 1 ) { my $type = $TYPE{"$stable.$scols[0]"} || 'number'; if ( $type eq 'number' ) { $query .= " AND s.$scols[0] != ?" } elsif ( $type eq 'text' ) { $query .= " AND s.$scols[0] NOT LIKE ?" } push @binds, 0; } my $res = 1; my $sth = execute_query( $query, @binds ); while ( my ($sid, @set) = $sth->fetchrow_array ) { $res = 0; print STDERR "Record #$sid in $stable references a nonexistent record in $ttable\n"; for ( my $i = 0; $i < @scols; $i++ ) { print STDERR "\t$scols[$i] => '$set[$i]' => $tcols[$i]\n"; } print STDERR "\t". describe( $stable, $sid ) ."\n"; $args{'action'}->( $sid, map { $scols[$_] => $set[$_] } (0 .. (@scols-1)) ) if $args{'action'}; } return $res; } sub describe { my ($table, $id) = @_; return '' unless my $cb = $describe_cb{ $table }; my $row = load_record( $table, $id ); unless ( $row->{id} ) { $table =~ s/s$//; return "$table doesn't exist"; } return $cb->( $row ); } sub columns_eq_cond { my ($la, $lt, $lc, $ra, $rt, $rc) = @_; my $ltype = $TYPE{"$lt.$lc"} || 'number'; my $rtype = $TYPE{"$rt.$rc"} || 'number'; return "$la.$lc = $ra.$rc" if $db_type ne 'Pg' || $ltype eq $rtype; if ( $rtype eq 'text' ) { return "$ra.$rc LIKE CAST($la.$lc AS text)"; } elsif ( $ltype eq 'text' ) { return "$la.$lc LIKE CAST($ra.$rc AS text)"; } else { die "don't know how to cast" } } sub check_uniqueness { my $on = shift; my %args = @_; my @columns = @{ $args{'columns'} }; print "Checking uniqueness of ( ", join(', ', map "'$_'", @columns )," ) in table '$on'\n" if $opt{'verbose'}; my ($scond, $tcond); if ( $scond = $tcond = $args{'condition'} ) { $scond =~ s/(\s|^)\./$1s./g; $tcond =~ s/(\s|^)\./$1t./g; } my $query = "SELECT s.id, t.id, ". join(', ', map "s.$_", @columns) ." FROM $on s LEFT JOIN $on t " ." ON s.id != t.id AND ". join(' AND ', map "s.$_ = t.$_", @columns) . ($tcond? " AND ( $tcond )": "") . ($args{'extra_tables'} ? join(", ", "", @{$args{'extra_tables'}}) : "") ." WHERE t.id IS NOT NULL " ." AND ". join(' AND ', map "s.$_ IS NOT NULL", @columns); $query .= " AND ( $scond )" if $scond; $query .= " AND ( $args{'extra_condition'} )" if $args{'extra_condition'}; my $sth = execute_query( $query, $args{'bind_values'}? (@{ $args{'bind_values'} }, @{ $args{'bind_values'} }): (), $args{'extra_values'}? (@{ $args{'extra_values'} }): () ); my $res = 1; while ( my ($sid, $tid, @set) = $sth->fetchrow_array ) { $res = 0; print STDERR "Record #$tid in $on has the same set of values as $sid\n"; for ( my $i = 0; $i < @columns; $i++ ) { print STDERR "\t$columns[$i] => '$set[$i]'\n"; } $args{'action'}->( $tid, map { $columns[$_] => $set[$_] } (0 .. (@columns-1)) ) if $args{'action'}; } return $res; } sub load_record { my ($table, $id) = @_; my $sth = execute_query( "SELECT * FROM $table WHERE id = ?", $id ); return $sth->fetchrow_hashref('NAME_lc'); } sub delete_record { my ($table, $id) = (@_); print "Deleting record #$id in $table\n" if $opt{'verbose'}; my $query = "DELETE FROM $table WHERE id = ?"; $redo_check{ $_ } = 1 foreach @{ $redo_on{'Delete'}{ $table } || [] }; return execute_query( $query, $id ); } sub create_record { print "Creating a record in $_[0]\n" if $opt{'verbose'}; $redo_check{ $_ } = 1 foreach @{ $redo_on{'Create'}{ $_[0] } || [] }; return $RT::Handle->Insert( @_ ); } sub update_records { my $table = shift; my $where = shift; my $what = shift; my (@where_cols, @where_binds); while ( my ($k, $v) = each %$where ) { push @where_cols, $k; push @where_binds, $v; } my (@what_cols, @what_binds); while ( my ($k, $v) = each %$what ) { push @what_cols, $k; push @what_binds, $v; } print "Updating record(s) in $table\n" if $opt{'verbose'}; my $query = "UPDATE $table SET ". join(', ', map "$_ = ?", @what_cols) ." WHERE ". join(' AND ', map "$_ = ?", @where_cols); $redo_check{ $_ } = 1 foreach @{ $redo_on{'Update'}{ $table } || [] }; return execute_query( $query, @what_binds, @where_binds ); } sub execute_query { my ($query, @binds) = @_; print "Executing query: $query\n\n" if $opt{'verbose'}; my $sth = $dbh->prepare( $query ) or die "couldn't prepare $query\n\tError: ". $dbh->errstr; $sth->execute( @binds ) or die "couldn't execute $query\n\tError: ". $sth->errstr; return $sth; } sub sql_concat { return $_[0] if @_ <= 1; my $db_type = RT->Config->Get('DatabaseType'); if ( $db_type eq 'Pg' || $db_type eq 'SQLite' ) { return '('. join( ' || ', @_ ) .')'; } return sql_concat('CONCAT('. join( ', ', splice @_, 0, 2 ).')', @_); } sub sql_str2int { my $db_type = RT->Config->Get('DatabaseType'); if ( $db_type eq 'Pg' ) { return "($_[0])::integer"; } return $_[0]; } sub sql_escape_like { my ($string) = @_; $string =~ s/([%_\\])/\\$1/g; return $string; } { my %cached_answer; sub prompt { my $action = shift; my $msg = shift; my $token = shift || join ':', caller; return 0 unless $opt{'resolve'}; return 1 if $opt{'force'}; return $cached_answer{ $token } if exists $cached_answer{ $token }; print $msg, "\n"; print "$action ALL records with the same defect? [N]: "; my $a = ; return $cached_answer{ $token } = 1 if $a =~ /^(y|yes)$/i; return $cached_answer{ $token } = 0; } } { my %cached_answer; sub prompt_action { my $actions = shift; my $msg = shift; my $token = shift || join ':', caller; return '' unless $opt{'resolve'}; return lc substr $actions->[0], 0, 1 if $opt{'force'}; return $cached_answer{ $token } if exists $cached_answer{ $token }; print $msg, "\n"; print join( ' or ', @$actions ) ." ALL records with the same defect? [do nothing]: "; my $a = ; chomp $a; return $cached_answer{ $token } = '' unless $a; foreach ( grep rindex(lc $_, lc $a, 0) == 0, @$actions ) { return $cached_answer{ $token } = lc substr $a, 0, 1; } return $cached_answer{ $token } = ''; } } { my %cached_answer; sub prompt_integer { my $action = shift; my $msg = shift; my $token = shift || join ':', caller; return 0 unless $opt{'resolve'}; return 0 if $opt{'force'}; return $cached_answer{ $token } if exists $cached_answer{ $token }; print $msg, "\n"; print "$action ALL records with the same defect? [0]: "; my $a = ; chomp $a; $a = int($a); return $cached_answer{ $token } = $a; } } # Find all RT::URI modules RT has loaded sub rt_uri_modules { my @uris = grep /^RT\/URI\/.+\.pm$/, keys %INC; my @uri_modules; foreach my $uri_path (@uris){ next if $uri_path =~ /base\.pm$/; # Skip base RT::URI object $uri_path = substr $uri_path, 0, -3; # chop off .pm push @uri_modules, join '::', split '/', $uri_path; } return @uri_modules; } 1; __END__ =head1 NAME rt-validator - check and correct validity of records in RT's database =head1 SYNOPSIS rt-validator --check rt-validator --check --verbose rt-validator --check --verbose --resolve rt-validator --check --verbose --resolve --force =head1 DESCRIPTION This script checks integrity of records in RT's DB. May delete some invalid records or ressurect accidentally deleted. =head1 OPTIONS =over =item check mandatory. it's equal to -c =item verbose print additional info to STDOUT it's equal to -v =item resolve enable resolver that can delete or create some records =item force resolve without asking questions =item links-only only run the Link validation routines, useful if you changed your Organization =back rt-4.2.12/sbin/standalone_httpd000754 000765 000024 00000012264 12562703633 017104 0ustar00sartakstaff000000 000000 #!/usr/bin/perl -w # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use warnings; use strict; BEGIN { die <file_name_is_absolute($lib) ) { $bin_path ||= ( File::Spec->splitpath(Cwd::abs_path(__FILE__)) )[1]; $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib ); } unshift @INC, $lib; } } use Getopt::Long; no warnings 'once'; if (grep { m/help/ } @ARGV) { require Pod::Usage; print Pod::Usage::pod2usage( { verbose => 2 } ); exit; } require RT; die "Wrong version of RT $RT::VERSION found; need 4.2.*" unless $RT::VERSION =~ /^4\.2\./; RT->LoadConfig(); RT->InitPluginPaths(); RT->InitLogging(); require RT::Handle; my ($integrity, $state, $msg) = RT::Handle->CheckIntegrity; unless ( $integrity ) { print STDERR <ConfigFile && !-w _) { die 'Since your configuration exists (' . RT::Installer->ConfigFile . ") but is not writable, I'm refusing to do anything.\n"; } RT->Config->Set( 'LexiconLanguages' => '*' ); RT::I18N->Init; RT->InstallMode(1); } else { RT->Init( Heavy => 1 ); my ($status, $msg) = RT::Handle->CheckCompatibility( $RT::Handle->dbh, 'post'); unless ( $status ) { print STDERR $msg, "\n\n"; exit -1; } } # we must disconnect DB before fork if ($RT::Handle) { $RT::Handle->dbh->disconnect if $RT::Handle->dbh; $RT::Handle->dbh(undef); undef $RT::Handle; } require RT::PlackRunner; # when used as a psgi file if (caller) { return RT::PlackRunner->app; } my $r = RT::PlackRunner->new( RT->InstallMode ? ( server => 'Standalone' ) : $0 =~ /standalone/ ? ( server => 'Standalone' ) : $0 =~ /fcgi$/ ? ( server => 'FCGI', env => "deployment" ) : ( server => 'Starlet', env => "deployment" ) ); $r->parse_options(@ARGV); # Try to clean up wrong-permissions var/ $SIG{INT} = sub { local $@; system("chown", "-R", "www:www", "/opt/rt4/var"); exit 0; } if $> == 0; $r->run; __END__ =head1 NAME rt-server - RT standalone server =head1 SYNOPSIS # runs prefork server listening on port 8080, requires Starlet rt-server --port 8080 # runs server listening on port 8080 rt-server --server Standalone --port 8080 # or standalone_httpd --port 8080 # runs other PSGI server on port 8080 rt-server --server Starman --port 8080 rt-4.2.12/sbin/standalone_httpd.in000755 000765 000024 00000000000 12555754775 021773 2rt-server.inustar00sartakstaff000000 000000 rt-4.2.12/lib/RT/000755 000765 000024 00000000000 12562703634 013760 5ustar00sartakstaff000000 000000 rt-4.2.12/lib/RT.pm000644 000765 000024 00000063720 12555754775 014344 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; use 5.010; package RT; use Encode (); use File::Spec (); use Cwd (); use Scalar::Util qw(blessed); use UNIVERSAL::require; use vars qw($Config $System $SystemUser $Nobody $Handle $Logger $_Privileged $_Unprivileged $_INSTALL_MODE); use vars qw($BasePath $EtcPath $BinPath $SbinPath $VarPath $FontPath $LexiconPath $StaticPath $PluginPath $LocalPath $LocalEtcPath $LocalLibPath $LocalLexiconPath $LocalStaticPath $LocalPluginPath $MasonComponentRoot $MasonLocalComponentRoot $MasonDataDir $MasonSessionDir); RT->LoadGeneratedData(); =head1 NAME RT - Request Tracker =head1 SYNOPSIS A fully featured request tracker package. This documentation describes the point-of-entry for RT's Perl API. To learn more about what RT is and what it can do for you, visit L. =head1 DESCRIPTION =head2 INITIALIZATION If you're using RT's Perl libraries, you need to initialize RT before using any of the modules. You have the option of handling the timing of config loading and the actual init sequence yourself with: use RT; BEGIN { RT->LoadConfig; RT->Init; } or you can let RT do it all: use RT -init; This second method is particular useful when writing one-liners to interact with RT: perl -MRT=-init -e '...' The first method is necessary if you need to delay or conditionalize initialization or if you want to fiddle with C<< RT->Config >> between loading the config files and initializing the RT environment. =cut { my $DID_IMPORT_INIT; sub import { my $class = shift; my $action = shift || ''; if ($action eq "-init" and not $DID_IMPORT_INIT) { $class->LoadConfig; $class->Init; $DID_IMPORT_INIT = 1; } } } =head2 LoadConfig Load RT's config file. First, the site configuration file (F) is loaded, in order to establish overall site settings like hostname and name of RT instance. Then, the core configuration file (F) is loaded to set fallback values for all settings; it bases some values on settings from the site configuration file. In order for the core configuration to not override the site's settings, the function C is used; it only sets values if they have not been set already. =cut sub LoadConfig { require RT::Config; $Config = RT::Config->new; $Config->LoadConfigs; require RT::I18N; # RT::Essentials mistakenly recommends that WebPath be set to '/'. # If the user does that, do what they mean. $RT::WebPath = '' if ($RT::WebPath eq '/'); # Fix relative LogDir; It cannot be fixed in a PostLoadCheck, as # they are run after logging is enabled. unless ( File::Spec->file_name_is_absolute( $Config->Get('LogDir') ) ) { $Config->Set( LogDir => File::Spec->catfile( $BasePath, $Config->Get('LogDir') ) ); } return $Config; } =head2 Init L, L, L, L, and L. =cut sub Init { shift if @_%2; # code is inconsistent about calling as method my %args = (@_); CheckPerlRequirements(); InitPluginPaths(); #Get a database connection ConnectToDatabase(); InitSystemObjects(); InitClasses(%args); InitLogging(); InitPlugins(); _BuildTableAttributes(); RT::I18N->Init; RT->Config->PostLoadCheck; RT::Lifecycle->FillCache; } =head2 ConnectToDatabase Get a database connection. See also L. =cut sub ConnectToDatabase { require RT::Handle; $Handle = RT::Handle->new unless $Handle; $Handle->Connect; return $Handle; } =head2 InitLogging Create the Logger object and set up signal handlers. =cut sub InitLogging { # We have to set the record separator ($, man perlvar) # or Log::Dispatch starts getting # really pissy, as some other module we use unsets it. $, = ''; use Log::Dispatch 1.6; my %level_to_num = ( map( { $_ => } 0..7 ), debug => 0, info => 1, notice => 2, warning => 3, error => 4, 'err' => 4, critical => 5, crit => 5, alert => 6, emergency => 7, emerg => 7, ); unless ( $RT::Logger ) { $RT::Logger = Log::Dispatch->new; my $stack_from_level; if ( $stack_from_level = RT->Config->Get('LogStackTraces') ) { # if option has old style '\d'(true) value $stack_from_level = 0 if $stack_from_level =~ /^\d+$/; $stack_from_level = $level_to_num{ $stack_from_level } || 0; } else { $stack_from_level = 99; # don't log } my $simple_cb = sub { # if this code throw any warning we can get segfault no warnings; my %p = @_; # skip Log::* stack frames my $frame = 0; $frame++ while caller($frame) && caller($frame) =~ /^Log::/; my ($package, $filename, $line) = caller($frame); # Encode to bytes, so we don't send wide characters $p{message} = Encode::encode("UTF-8", $p{message}); $p{'message'} =~ s/(?:\r*\n)+$//; return "[$$] [". gmtime(time) ."] [". $p{'level'} ."]: " . $p{'message'} ." ($filename:$line)\n"; }; my $syslog_cb = sub { # if this code throw any warning we can get segfault no warnings; my %p = @_; my $frame = 0; # stack frame index # skip Log::* stack frames $frame++ while caller($frame) && caller($frame) =~ /^Log::/; my ($package, $filename, $line) = caller($frame); # Encode to bytes, so we don't send wide characters $p{message} = Encode::encode("UTF-8", $p{message}); $p{message} =~ s/(?:\r*\n)+$//; if ($p{level} eq 'debug') { return "[$$] $p{message} ($filename:$line)\n"; } else { return "[$$] $p{message}\n"; } }; my $stack_cb = sub { no warnings; my %p = @_; return $p{'message'} unless $level_to_num{ $p{'level'} } >= $stack_from_level; require Devel::StackTrace; my $trace = Devel::StackTrace->new( ignore_class => [ 'Log::Dispatch', 'Log::Dispatch::Base' ] ); return $p{'message'} . $trace->as_string; # skip calling of the Log::* subroutins my $frame = 0; $frame++ while caller($frame) && caller($frame) =~ /^Log::/; $frame++ while caller($frame) && (caller($frame))[3] =~ /^Log::/; $p{'message'} .= "\nStack trace:\n"; while( my ($package, $filename, $line, $sub) = caller($frame++) ) { $p{'message'} .= "\t$sub(...) called at $filename:$line\n"; } return $p{'message'}; }; if ( $Config->Get('LogToFile') ) { my ($filename, $logdir) = ( $Config->Get('LogToFileNamed') || 'rt.log', $Config->Get('LogDir') || File::Spec->catdir( $VarPath, 'log' ), ); if ( $filename =~ m![/\\]! ) { # looks like an absolute path. ($logdir) = $filename =~ m{^(.*[/\\])}; } else { $filename = File::Spec->catfile( $logdir, $filename ); } unless ( -d $logdir && ( ( -f $filename && -w $filename ) || -w $logdir ) ) { # localizing here would be hard when we don't have a current user yet die "Log file '$filename' couldn't be written or created.\n RT can't run."; } require Log::Dispatch::File; $RT::Logger->add( Log::Dispatch::File->new ( name=>'file', min_level=> $Config->Get('LogToFile'), filename=> $filename, mode=>'append', callbacks => [ $simple_cb, $stack_cb ], )); } if ( $Config->Get('LogToSTDERR') ) { require Log::Dispatch::Screen; $RT::Logger->add( Log::Dispatch::Screen->new ( name => 'screen', min_level => $Config->Get('LogToSTDERR'), callbacks => [ $simple_cb, $stack_cb ], stderr => 1, )); } if ( $Config->Get('LogToSyslog') ) { require Log::Dispatch::Syslog; $RT::Logger->add(Log::Dispatch::Syslog->new ( name => 'syslog', ident => 'RT', min_level => $Config->Get('LogToSyslog'), callbacks => [ $syslog_cb, $stack_cb ], stderr => 1, $Config->Get('LogToSyslogConf'), )); } } InitSignalHandlers(); } sub InitSignalHandlers { # Signal handlers ## This is the default handling of warnings and die'ings in the code ## (including other used modules - maybe except for errors catched by ## Mason). It will log all problems through the standard logging ## mechanism (see above). $SIG{__WARN__} = sub { # use 'goto &foo' syntax to hide ANON sub from stack unshift @_, $RT::Logger, qw(level warning message); goto &Log::Dispatch::log; }; #When we call die, trap it and log->crit with the value of the die. $SIG{__DIE__} = sub { # if we are not in eval and perl is not parsing code # then rollback transactions and log RT error unless ($^S || !defined $^S ) { $RT::Handle->Rollback(1) if $RT::Handle; $RT::Logger->crit("$_[0]") if $RT::Logger; } die $_[0]; }; } sub CheckPerlRequirements { eval {require 5.010_001}; if ($@) { die sprintf "RT requires Perl v5.10.1 or newer. Your current Perl is v%vd\n", $^V; } # use $error here so the following "die" can still affect the global $@ my $error; { local $@; eval { my $x = ''; my $y = \$x; require Scalar::Util; Scalar::Util::weaken($y); }; $error = $@; } if ($error) { die <<"EOF"; RT requires the Scalar::Util module be built with support for the 'weaken' function. It is sometimes the case that operating system upgrades will replace a working Scalar::Util with a non-working one. If your system was working correctly up until now, this is likely the cause of the problem. Please reinstall Scalar::Util, being careful to let it build with your C compiler. Usually this is as simple as running the following command as root. perl -MCPAN -e'install Scalar::Util' EOF } } =head2 InitClasses Load all modules that define base classes. =cut sub InitClasses { shift if @_%2; # so we can call it as a function or method my %args = (@_); require RT::Tickets; require RT::Transactions; require RT::Attachments; require RT::Users; require RT::Principals; require RT::CurrentUser; require RT::Templates; require RT::Queues; require RT::ScripActions; require RT::ScripConditions; require RT::Scrips; require RT::Groups; require RT::GroupMembers; require RT::CustomFields; require RT::CustomFieldValues; require RT::ObjectCustomFields; require RT::ObjectCustomFieldValues; require RT::Attributes; require RT::Dashboard; require RT::Approval; require RT::Lifecycle; require RT::Link; require RT::Links; require RT::Article; require RT::Articles; require RT::Class; require RT::Classes; require RT::ObjectClass; require RT::ObjectClasses; require RT::ObjectTopic; require RT::ObjectTopics; require RT::Topic; require RT::Topics; require RT::Link; require RT::Links; _BuildTableAttributes(); if ( $args{'Heavy'} ) { # load scrips' modules my $scrips = RT::Scrips->new(RT->SystemUser); while ( my $scrip = $scrips->Next ) { local $@; eval { $scrip->LoadModules } or $RT::Logger->error("Invalid Scrip ".$scrip->Id.". Unable to load the Action or Condition. ". "You should delete or repair this Scrip in the admin UI.\n$@\n"); } foreach my $class ( grep $_, RT->Config->Get('CustomFieldValuesSources') ) { $class->require or $RT::Logger->error( "Class '$class' is listed in CustomFieldValuesSources option" ." in the config, but we failed to load it:\n$@\n" ); } } } sub _BuildTableAttributes { # on a cold server (just after restart) people could have an object # in the session, as we deserialize it so we never call constructor # of the class, so the list of accessible fields is empty and we die # with "Method xxx is not implemented in RT::SomeClass" # without this, we also can never call _ClassAccessible, because we # won't have filled RT::Record::_TABLE_ATTR $_->_BuildTableAttributes foreach qw( RT::Ticket RT::Transaction RT::Attachment RT::User RT::Principal RT::Template RT::Queue RT::ScripAction RT::ScripCondition RT::Scrip RT::ObjectScrip RT::Group RT::GroupMember RT::CustomField RT::CustomFieldValue RT::ObjectCustomField RT::ObjectCustomFieldValue RT::Attribute RT::ACE RT::Article RT::Class RT::Link RT::ObjectClass RT::ObjectTopic RT::Topic ); } =head2 InitSystemObjects Initializes system objects: C<$RT::System>, C<< RT->SystemUser >> and C<< RT->Nobody >>. =cut sub InitSystemObjects { #RT's system user is a genuine database user. its id lives here require RT::CurrentUser; $SystemUser = RT::CurrentUser->new; $SystemUser->LoadByName('RT_System'); #RT's "nobody user" is a genuine database user. its ID lives here. $Nobody = RT::CurrentUser->new; $Nobody->LoadByName('Nobody'); require RT::System; $System = RT::System->new( $SystemUser ); } =head1 CLASS METHODS =head2 Config Returns the current L, but note that you must L first otherwise this method returns undef. Method can be called as class method. =cut sub Config { return $Config || shift->LoadConfig(); } =head2 DatabaseHandle Returns the current L. See also L. =cut sub DatabaseHandle { return $Handle } =head2 Logger Returns the logger. See also L. =cut sub Logger { return $Logger } =head2 System Returns the current L. See also L. =cut sub System { return $System } =head2 SystemUser Returns the system user's object, it's object of L class that represents the system. See also L. =cut sub SystemUser { return $SystemUser } =head2 Nobody Returns object of Nobody. It's object of L class that represents a user who can own ticket and nothing else. See also L. =cut sub Nobody { return $Nobody } sub PrivilegedUsers { if (!$_Privileged) { $_Privileged = RT::Group->new(RT->SystemUser); $_Privileged->LoadSystemInternalGroup('Privileged'); } return $_Privileged; } sub UnprivilegedUsers { if (!$_Unprivileged) { $_Unprivileged = RT::Group->new(RT->SystemUser); $_Unprivileged->LoadSystemInternalGroup('Unprivileged'); } return $_Unprivileged; } =head2 Plugins Returns a listref of all Plugins currently configured for this RT instance. You can define plugins by adding them to the @Plugins list in your RT_SiteConfig =cut sub Plugins { state @PLUGINS; state $DID_INIT = 0; my $self = shift; unless ($DID_INIT) { $self->InitPluginPaths; @PLUGINS = $self->InitPlugins; $DID_INIT++; } return [@PLUGINS]; } =head2 PluginDirs Takes an optional subdir (e.g. po, lib, etc.) and returns a list of directories from plugins where that subdirectory exists. This code does not check plugin names, plugin validitity, or load plugins (see L) in any way, and requires that RT's configuration have been already loaded. =cut sub PluginDirs { my $self = shift; my $subdir = shift; require RT::Plugin; my @res; foreach my $plugin (grep $_, RT->Config->Get('Plugins')) { my $path = RT::Plugin->new( name => $plugin )->Path( $subdir ); next unless -d $path; push @res, $path; } return @res; } =head2 InitPluginPaths Push plugins' lib paths into @INC right after F. In case F isn't in @INC, append them to @INC =cut sub InitPluginPaths { my $self = shift || __PACKAGE__; my @lib_dirs = $self->PluginDirs('lib'); my @tmp_inc; my $added; for (@INC) { my $realpath = Cwd::realpath($_); next unless defined $realpath; if ( $realpath eq $RT::LocalLibPath) { push @tmp_inc, $_, @lib_dirs; $added = 1; } else { push @tmp_inc, $_; } } # append @lib_dirs in case $RT::LocalLibPath isn't in @INC push @tmp_inc, @lib_dirs unless $added; my %seen; @INC = grep !$seen{$_}++, @tmp_inc; } =head2 InitPlugins Initialize all Plugins found in the RT configuration file, setting up their lib and L component roots. =cut sub InitPlugins { my $self = shift; my @plugins; require RT::Plugin; foreach my $plugin (grep $_, RT->Config->Get('Plugins')) { $plugin->require; die $UNIVERSAL::require::ERROR if ($UNIVERSAL::require::ERROR); push @plugins, RT::Plugin->new(name =>$plugin); } return @plugins; } sub InstallMode { my $self = shift; if (@_) { my ($integrity, $state, $msg) = RT::Handle->CheckIntegrity; if ($_[0] and $integrity) { # Trying to turn install mode on but we have a good DB! require Carp; $RT::Logger->error( Carp::longmess("Something tried to turn on InstallMode but we have DB integrity!") ); } else { $_INSTALL_MODE = shift; if($_INSTALL_MODE) { require RT::CurrentUser; $SystemUser = RT::CurrentUser->new(); } } } return $_INSTALL_MODE; } sub LoadGeneratedData { my $class = shift; my $pm_path = ( File::Spec->splitpath( $INC{'RT.pm'} ) )[1]; require "$pm_path/RT/Generated.pm" || die "Couldn't load RT::Generated: $@"; $class->CanonicalizeGeneratedPaths(); } sub CanonicalizeGeneratedPaths { my $class = shift; unless ( File::Spec->file_name_is_absolute($EtcPath) ) { # if BasePath exists and is absolute, we won't infer it from $INC{'RT.pm'}. # otherwise RT.pm will make the source dir(where we configure RT) be the # BasePath instead of the one specified by --prefix unless ( -d $BasePath && File::Spec->file_name_is_absolute($BasePath) ) { my $pm_path = ( File::Spec->splitpath( $INC{'RT.pm'} ) )[1]; # need rel2abs here is to make sure path is absolute, since $INC{'RT.pm'} # is not always absolute $BasePath = File::Spec->rel2abs( File::Spec->catdir( $pm_path, File::Spec->updir ) ); } $BasePath = Cwd::realpath($BasePath); for my $path ( qw/EtcPath BinPath SbinPath VarPath LocalPath StaticPath LocalEtcPath LocalLibPath LexiconPath LocalLexiconPath PluginPath FontPath LocalPluginPath LocalStaticPath MasonComponentRoot MasonLocalComponentRoot MasonDataDir MasonSessionDir/ ) { no strict 'refs'; # just change relative ones $$path = File::Spec->catfile( $BasePath, $$path ) unless File::Spec->file_name_is_absolute($$path); } } } =head2 AddJavaScript Helper method to add JS files to the C<@JSFiles> config at runtime. To add files, you can add the following line to your extension's main C<.pm> file: RT->AddJavaScript( 'foo.js', 'bar.js' ); Files are expected to be in a static root in a F directory, such as F in your extension or F for local overlays. =cut sub AddJavaScript { my $self = shift; my @old = RT->Config->Get('JSFiles'); RT->Config->Set( 'JSFiles', @old, @_ ); return RT->Config->Get('JSFiles'); } =head2 AddStyleSheets Helper method to add CSS files to the C<@CSSFiles> config at runtime. To add files, you can add the following line to your extension's main C<.pm> file: RT->AddStyleSheets( 'foo.css', 'bar.css' ); Files are expected to be in a static root in a F directory, such as F in your extension or F for local overlays. =cut sub AddStyleSheets { my $self = shift; my @old = RT->Config->Get('CSSFiles'); RT->Config->Set( 'CSSFiles', @old, @_ ); return RT->Config->Get('CSSFiles'); } =head2 JavaScript helper method of RT->Config->Get('JSFiles') =cut sub JavaScript { return RT->Config->Get('JSFiles'); } =head2 StyleSheets helper method of RT->Config->Get('CSSFiles') =cut sub StyleSheets { return RT->Config->Get('CSSFiles'); } =head2 Deprecated Notes that a particular call path is deprecated, and will be removed in a particular release. Puts a warning in the logs indicating such, along with a stack trace. Optional arguments include: =over =item Remove The release which is slated to remove the method or component =item Instead A suggestion of what to use in place of the deprecated API =item Arguments Used if not the entire method is being removed, merely a manner of calling it; names the arguments which are deprecated. =item Message Overrides the auto-built phrasing of C with a custom message. =item Object An L object to print the class and numeric id of. Useful if the admin will need to hunt down a particular object to fix the deprecation warning. =back =cut sub Deprecated { my $class = shift; my %args = ( Arguments => undef, Remove => undef, Instead => undef, Message => undef, Stack => 1, LogLevel => "warn", @_, ); my ($function) = (caller(1))[3]; my $stack; if ($function eq "HTML::Mason::Commands::__ANON__") { eval { HTML::Mason::Exception->throw() }; my $error = $@; my $info = $error->analyze_error; $function = "Mason component ".$info->{frames}[0]->filename; $stack = join("\n", map { sprintf("\t[%s:%d]", $_->filename, $_->line) } @{$info->{frames}}); } else { $function = "function $function"; $stack = Carp::longmess(); } $stack =~ s/^.*?\n//; # Strip off call to ->Deprecated my $msg; if ($args{Message}) { $msg = $args{Message}; } elsif ($args{Arguments}) { $msg = "Calling $function with $args{Arguments} is deprecated"; } else { $msg = "The $function is deprecated"; } $msg .= ", and will be removed in RT $args{Remove}" if $args{Remove}; $msg .= "."; $msg .= " You should use $args{Instead} instead." if $args{Instead}; $msg .= sprintf " Object: %s #%d.", blessed($args{Object}), $args{Object}->id if $args{Object}; $msg .= " Call stack:\n$stack" if $args{Stack}; my $loglevel = $args{LogLevel}; RT->Logger->$loglevel($msg); } =head1 BUGS Please report them to rt-bugs@bestpractical.com, if you know what's broken and have at least some idea of what needs to be fixed. If you're not sure what's going on, report them rt-devel@lists.bestpractical.com. =head1 SEE ALSO L L =cut require RT::Base; RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/ACE.pm000644 000765 000024 00000052033 12555754775 014727 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} =head1 SYNOPSIS use RT::ACE; my $ace = RT::ACE->new($CurrentUser); =head1 DESCRIPTION =head1 METHODS =cut package RT::ACE; use base 'RT::Record'; sub Table {'ACL'} use strict; use warnings; require RT::Principals; require RT::Queues; require RT::Groups; our %RIGHTS; my (@_ACL_CACHE_HANDLERS); =head1 Rights # Queue rights are the sort of queue rights that can only be granted # to real people or groups =cut =head2 LoadByValues PARAMHASH Load an ACE by specifying a paramhash with the following fields: PrincipalId => undef, PrincipalType => undef, RightName => undef, And either: Object => undef, OR ObjectType => undef, ObjectId => undef =cut sub LoadByValues { my $self = shift; my %args = ( PrincipalId => undef, PrincipalType => undef, RightName => undef, Object => undef, ObjectId => undef, ObjectType => undef, @_ ); if ( $args{'RightName'} ) { my $canonic_name = $self->CanonicalizeRightName( $args{'RightName'} ); unless ( $canonic_name ) { return wantarray ? ( 0, $self->loc("Invalid right. Couldn't canonicalize right '[_1]'", $args{'RightName'}) ) : 0; } $args{'RightName'} = $canonic_name; } my $princ_obj; ( $princ_obj, $args{'PrincipalType'} ) = $self->_CanonicalizePrincipal( $args{'PrincipalId'}, $args{'PrincipalType'} ); unless ( $princ_obj->id ) { return wantarray ? ( 0, $self->loc( 'Principal [_1] not found.', $args{'PrincipalId'} ) ) : 0; } my ($object, $object_type, $object_id) = $self->_ParseObjectArg( %args ); unless( $object ) { return wantarray ? ( 0, $self->loc("System error. Right not granted.")) : 0; } $self->LoadByCols( PrincipalId => $princ_obj->Id, PrincipalType => $args{'PrincipalType'}, RightName => $args{'RightName'}, ObjectType => $object_type, ObjectId => $object_id); #If we couldn't load it. unless ( $self->Id ) { return wantarray ? ( 0, $self->loc("ACE not found") ) : 0; } # if we could return wantarray ? ( $self->Id, $self->loc("Right Loaded") ) : $self->Id; } =head2 Create PARAMS is a parameter hash with the following elements: PrincipalId => The id of an RT::Principal object PrincipalType => "User" "Group" or any Role type RightName => the name of a right. in any case Either: Object => An object to create rights for. ususally, an RT::Queue or RT::Group This should always be a DBIx::SearchBuilder::Record subclass OR ObjectType => the type of the object in question (ref ($object)) ObjectId => the id of the object in question $object->Id Returns a tuple of (STATUS, MESSAGE); If the call succeeded, STATUS is true. Otherwise it's false. =cut sub Create { my $self = shift; my %args = ( PrincipalId => undef, PrincipalType => undef, RightName => undef, Object => undef, @_ ); unless ( $args{'RightName'} ) { return ( 0, $self->loc('No right specified') ); } #if we haven't specified any sort of right, we're talking about a global right if (!defined $args{'Object'} && !defined $args{'ObjectId'} && !defined $args{'ObjectType'}) { $args{'Object'} = $RT::System; } ($args{'Object'}, $args{'ObjectType'}, $args{'ObjectId'}) = $self->_ParseObjectArg( %args ); unless( $args{'Object'} ) { return ( 0, $self->loc("System error. Right not granted.") ); } # Validate the principal my $princ_obj; ( $princ_obj, $args{'PrincipalType'} ) = $self->_CanonicalizePrincipal( $args{'PrincipalId'}, $args{'PrincipalType'} ); unless ( $princ_obj->id ) { return ( 0, $self->loc( 'Principal [_1] not found.', $args{'PrincipalId'} ) ); } # }}} # Check the ACL if (ref( $args{'Object'}) eq 'RT::Group' ) { unless ( $self->CurrentUser->HasRight( Object => $args{'Object'}, Right => 'AdminGroup' ) ) { return ( 0, $self->loc('Permission Denied') ); } } else { unless ( $self->CurrentUser->HasRight( Object => $args{'Object'}, Right => 'ModifyACL' )) { return ( 0, $self->loc('Permission Denied') ); } } # }}} # Canonicalize and check the right name my $canonic_name = $self->CanonicalizeRightName( $args{'RightName'} ); unless ( $canonic_name ) { return ( 0, $self->loc("Invalid right. Couldn't canonicalize right '[_1]'", $args{'RightName'}) ); } $args{'RightName'} = $canonic_name; #check if it's a valid RightName if ( $args{'Object'}->can('AvailableRights') ) { my $available = $args{'Object'}->AvailableRights($princ_obj); unless ( grep $_ eq $args{'RightName'}, map $self->CanonicalizeRightName( $_ ), keys %$available ) { $RT::Logger->warning( "Couldn't validate right name '$args{'RightName'}'" ." for object of ". ref( $args{'Object'} ) ." class" ); return ( 0, $self->loc('Invalid right') ); } } # }}} # Make sure the right doesn't already exist. $self->LoadByCols( PrincipalId => $princ_obj->id, PrincipalType => $args{'PrincipalType'}, RightName => $args{'RightName'}, ObjectType => $args{'ObjectType'}, ObjectId => $args{'ObjectId'}, ); if ( $self->Id ) { return ( 0, $self->loc('[_1] already has that right', $princ_obj->Object->Name) ); } my $id = $self->SUPER::Create( PrincipalId => $princ_obj->id, PrincipalType => $args{'PrincipalType'}, RightName => $args{'RightName'}, ObjectType => ref( $args{'Object'} ), ObjectId => $args{'Object'}->id, ); if ( $id ) { RT::ACE->InvalidateCaches( Action => "Grant", RightName => $self->RightName, ACE => $self, ); return ( $id, $self->loc('Right Granted') ); } else { return ( 0, $self->loc('System error. Right not granted.') ); } } =head2 Delete { InsideTransaction => undef} Delete this object. This method should ONLY ever be called from RT::User or RT::Group (or from itself) If this is being called from within a transaction, specify a true value for the parameter InsideTransaction. Really, DBIx::SearchBuilder should use and/or fake subtransactions This routine will also recurse and delete any delegations of this right =cut sub Delete { my $self = shift; unless ( $self->Id ) { return ( 0, $self->loc('Right not loaded.') ); } # A user can delete an ACE if the current user has the right to modify it and it's not a delegated ACE # or if it's a delegated ACE and it was delegated by the current user unless ($self->CurrentUser->HasRight(Right => 'ModifyACL', Object => $self->Object)) { return ( 0, $self->loc('Permission Denied') ); } $self->_Delete(@_); } # Helper for Delete with no ACL check sub _Delete { my $self = shift; my %args = ( InsideTransaction => undef, @_ ); my $InsideTransaction = $args{'InsideTransaction'}; $RT::Handle->BeginTransaction() unless $InsideTransaction; my $right = $self->RightName; my ( $val, $msg ) = $self->SUPER::Delete(@_); if ($val) { RT::ACE->InvalidateCaches( Action => "Revoke", RightName => $right ); $RT::Handle->Commit() unless $InsideTransaction; return ( $val, $self->loc('Right revoked') ); } $RT::Handle->Rollback() unless $InsideTransaction; return ( 0, $self->loc('Right could not be revoked') ); } =head2 _BootstrapCreate Grant a right with no error checking and no ACL. this is _only_ for installation. If you use this routine without the author's explicit written approval, he will hunt you down and make you spend eternity translating mozilla's code into FORTRAN or intercal. If you think you need this routine, you've mistaken. =cut sub _BootstrapCreate { my $self = shift; my %args = (@_); # When bootstrapping, make sure we get the _right_ users if ( $args{'UserId'} ) { my $user = RT::User->new( $self->CurrentUser ); $user->Load( $args{'UserId'} ); delete $args{'UserId'}; $args{'PrincipalId'} = $user->PrincipalId; $args{'PrincipalType'} = 'User'; } my $id = $self->SUPER::Create(%args); if ( $id > 0 ) { return ($id); } else { $RT::Logger->err('System error. right not granted.'); return (undef); } } =head2 InvalidateCaches Calls any registered ACL cache handlers (see L). Usually called from L and L. =cut sub InvalidateCaches { my $class = shift; for my $handler (@_ACL_CACHE_HANDLERS) { next unless ref($handler) eq "CODE"; $handler->(@_); } } =head2 RegisterCacheHandler Class method. Takes a coderef and adds it to the ACL cache handlers. These handlers are called by L, usually called itself from L and L. The handlers are passed a hash which may contain any (or none) of these optional keys: =over =item Action A string indicating the action that (may have) invalidated the cache. Expected values are currently: =over =item Grant =item Revoke =back However, other values may be passed in the future. =item RightName The (canonicalized) right being granted or revoked. =item ACE The L object just created. =back Your handler should be flexible enough to account for additional arguments being passed in the future. =cut sub RegisterCacheHandler { push @_ACL_CACHE_HANDLERS, $_[1]; } sub RightName { my $self = shift; my $val = $self->_Value('RightName'); return $val unless $val; my $available = $self->Object->AvailableRights; foreach my $right ( keys %$available ) { return $right if $val eq $self->CanonicalizeRightName($right); } $RT::Logger->error("Invalid right. Couldn't canonicalize right '$val'"); return $val; } =head2 CanonicalizeRightName Takes a queue or system right name in any case and returns it in the correct case. If it's not found, will return undef. =cut sub CanonicalizeRightName { my $self = shift; my $name = shift; for my $class (sort keys %RIGHTS) { return $RIGHTS{$class}{ lc $name }{Name} if $RIGHTS{$class}{ lc $name }; } return undef; } =head2 Object If the object this ACE applies to is a queue, returns the queue object. If the object this ACE applies to is a group, returns the group object. If it's the system object, returns undef. If the user has no rights, returns undef. =cut sub Object { my $self = shift; my $appliesto_obj; if ($self->__Value('ObjectType') && $self->__Value('ObjectType')->DOES('RT::Record::Role::Rights') ) { $appliesto_obj = $self->__Value('ObjectType')->new($self->CurrentUser); unless (ref( $appliesto_obj) eq $self->__Value('ObjectType')) { return undef; } $appliesto_obj->Load( $self->__Value('ObjectId') ); return ($appliesto_obj); } else { $RT::Logger->warning( "$self -> Object called for an object " . "of an unknown type:" . $self->__Value('ObjectType') ); return (undef); } } =head2 PrincipalObj Returns the RT::Principal object for this ACE. =cut sub PrincipalObj { my $self = shift; my $princ_obj = RT::Principal->new( $self->CurrentUser ); $princ_obj->Load( $self->__Value('PrincipalId') ); unless ( $princ_obj->Id ) { $RT::Logger->err( "ACE " . $self->Id . " couldn't load its principal object" ); } return ($princ_obj); } sub _Set { my $self = shift; return ( 0, $self->loc("ACEs can only be created and deleted.") ); } sub _Value { my $self = shift; if ( $self->PrincipalObj->IsGroup && $self->PrincipalObj->Object->HasMemberRecursively( $self->CurrentUser->PrincipalObj ) ) { return ( $self->__Value(@_) ); } elsif ( $self->CurrentUser->HasRight(Right => 'ShowACL', Object => $self->Object) ) { return ( $self->__Value(@_) ); } else { return undef; } } =head2 _CanonicalizePrincipal (PrincipalId, PrincipalType) Takes a principal id and a principal type. If the principal is a user, resolves it to the proper acl equivalence group. Returns a tuple of (RT::Principal, PrincipalType) for the principal we really want to work with =cut sub _CanonicalizePrincipal { my $self = shift; my $princ_id = shift; my $princ_type = shift || ''; my $princ_obj = RT::Principal->new(RT->SystemUser); $princ_obj->Load($princ_id); unless ( $princ_obj->Id ) { use Carp; $RT::Logger->crit(Carp::longmess); $RT::Logger->crit("Can't load a principal for id $princ_id"); return ( $princ_obj, undef ); } # Rights never get granted to users. they get granted to their # ACL equivalence groups if ( $princ_type eq 'User' ) { my $equiv_group = RT::Group->new( $self->CurrentUser ); $equiv_group->LoadACLEquivalenceGroup($princ_obj); unless ( $equiv_group->Id ) { $RT::Logger->crit( "No ACL equiv group for princ " . $princ_obj->id ); return ( RT::Principal->new(RT->SystemUser), undef ); } $princ_obj = $equiv_group->PrincipalObj(); $princ_type = 'Group'; } return ( $princ_obj, $princ_type ); } sub _ParseObjectArg { my $self = shift; my %args = ( Object => undef, ObjectId => undef, ObjectType => undef, @_ ); if( $args{'Object'} && ($args{'ObjectId'} || $args{'ObjectType'}) ) { $RT::Logger->crit( "Method called with an ObjectType or an ObjectId and Object args" ); return (); } elsif( $args{'Object'} && ref($args{'Object'}) && !$args{'Object'}->can('id') ) { $RT::Logger->crit( "Method called called Object that has no id method" ); return (); } elsif( $args{'Object'} ) { my $obj = $args{'Object'}; return ($obj, ref $obj, $obj->id); } elsif ( $args{'ObjectType'} ) { my $obj = $args{'ObjectType'}->new( $self->CurrentUser ); $obj->Load( $args{'ObjectId'} ); return ($obj, ref $obj, $obj->id); } else { $RT::Logger->crit( "Method called with wrong args" ); return (); } } # }}} =head2 id Returns the current value of id. (In the database, id is stored as int(11).) =cut =head2 PrincipalType Returns the current value of PrincipalType. (In the database, PrincipalType is stored as varchar(25).) =head2 SetPrincipalType VALUE Set PrincipalType to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, PrincipalType will be stored as a varchar(25).) =cut =head2 PrincipalId Returns the current value of PrincipalId. (In the database, PrincipalId is stored as int(11).) =head2 SetPrincipalId VALUE Set PrincipalId to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, PrincipalId will be stored as a int(11).) =cut =head2 RightName Returns the current value of RightName. (In the database, RightName is stored as varchar(25).) =head2 SetRightName VALUE Set RightName to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, RightName will be stored as a varchar(25).) =cut =head2 ObjectType Returns the current value of ObjectType. (In the database, ObjectType is stored as varchar(25).) =head2 SetObjectType VALUE Set ObjectType to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, ObjectType will be stored as a varchar(25).) =cut =head2 ObjectId Returns the current value of ObjectId. (In the database, ObjectId is stored as int(11).) =head2 SetObjectId VALUE Set ObjectId to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, ObjectId will be stored as a int(11).) =cut =head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) =cut =head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) =cut =head2 LastUpdatedBy Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) =cut =head2 LastUpdated Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) =cut sub _CoreAccessible { { id => {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, PrincipalType => {read => 1, write => 1, sql_type => 12, length => 25, is_blob => 0, is_numeric => 0, type => 'varchar(25)', default => ''}, PrincipalId => {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, RightName => {read => 1, write => 1, sql_type => 12, length => 25, is_blob => 0, is_numeric => 0, type => 'varchar(25)', default => ''}, ObjectType => {read => 1, write => 1, sql_type => 12, length => 25, is_blob => 0, is_numeric => 0, type => 'varchar(25)', default => ''}, ObjectId => {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Creator => {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, LastUpdatedBy => {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, LastUpdated => {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, } }; sub FindDependencies { my $self = shift; my ($walker, $deps) = @_; $self->SUPER::FindDependencies($walker, $deps); $deps->Add( out => $self->PrincipalObj->Object ); $deps->Add( out => $self->Object ); } RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/ACL.pm000644 000765 000024 00000014341 12555754775 014736 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} =head1 NAME RT::ACL - collection of RT ACE objects =head1 SYNOPSIS use RT::ACL; my $ACL = RT::ACL->new($CurrentUser); =head1 DESCRIPTION =head1 METHODS =cut package RT::ACL; use base 'RT::SearchBuilder'; use RT::ACE; sub Table { 'ACL'} use strict; use warnings; =head2 Next Hand out the next ACE that was found =cut =head2 LimitToObject $object Limit the ACL to rights for the object $object. It needs to be an RT::Record class. =cut sub LimitToObject { my $self = shift; my $obj = shift; my $obj_type = ref($obj)||$obj; my $obj_id = eval { $obj->id}; my $object_clause = 'possible_objects'; $self->_OpenParen($object_clause); $self->Limit( SUBCLAUSE => $object_clause, FIELD => 'ObjectType', OPERATOR => '=', VALUE => (ref($obj)||$obj), ENTRYAGGREGATOR => 'OR' # That "OR" applies to the separate objects we're searching on, not "Type Or ID" ); if ($obj_id) { $self->Limit( SUBCLAUSE => $object_clause, FIELD => 'ObjectId', OPERATOR => '=', VALUE => $obj_id, ENTRYAGGREGATOR => 'AND', QUOTEVALUE => 0 ); } $self->_CloseParen($object_clause); } =head2 LimitToPrincipal { Type => undef, Id => undef, IncludeGroupMembership => undef } Limit the ACL to the principal with PrincipalId Id and PrincipalType Type Id is not optional. Type is. if IncludeGroupMembership => 1 is specified, ACEs which apply to the principal due to group membership will be included in the resultset. =cut sub LimitToPrincipal { my $self = shift; my %args = ( Type => undef, Id => undef, IncludeGroupMembership => undef, @_ ); if ( $args{'IncludeGroupMembership'} ) { my $cgm = $self->NewAlias('CachedGroupMembers'); $self->Join( ALIAS1 => 'main', FIELD1 => 'PrincipalId', ALIAS2 => $cgm, FIELD2 => 'GroupId' ); $self->Limit( ALIAS => $cgm, FIELD => 'Disabled', VALUE => 0 ); $self->Limit( ALIAS => $cgm, FIELD => 'MemberId', OPERATOR => '=', VALUE => $args{'Id'}, ENTRYAGGREGATOR => 'OR' ); } else { if ( defined $args{'Type'} ) { $self->Limit( FIELD => 'PrincipalType', OPERATOR => '=', VALUE => $args{'Type'}, ENTRYAGGREGATOR => 'OR' ); } # if the principal id points to a user, we really want to point # to their ACL equivalence group. The machinations we're going through # lead me to start to suspect that we really want users and groups # to just be the same table. or _maybe_ that we want an object db. my $princ = RT::Principal->new( RT->SystemUser ); $princ->Load( $args{'Id'} ); if ( $princ->PrincipalType eq 'User' ) { my $group = RT::Group->new( RT->SystemUser ); $group->LoadACLEquivalenceGroup($princ); $args{'Id'} = $group->PrincipalId; } $self->Limit( FIELD => 'PrincipalId', OPERATOR => '=', VALUE => $args{'Id'}, ENTRYAGGREGATOR => 'OR' ); } } sub AddRecord { my $self = shift; my ($record) = @_; # Short-circuit having to load up the ->Object return $self->SUPER::AddRecord( $record ) if $record->CurrentUser->PrincipalObj->Id == RT->SystemUser->Id; my $obj = $record->Object; return unless $self->CurrentUser->HasRight( Right => 'ShowACL', Object => $obj ) or $self->CurrentUser->HasRight( Right => 'ModifyACL', Object => $obj ); return $self->SUPER::AddRecord( $record ); } # The singular of ACL is ACE. sub _SingularClass { "RT::ACE" } RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/Action/000755 000765 000024 00000000000 12555754775 015213 5ustar00sartakstaff000000 000000 rt-4.2.12/lib/RT/Action.pm000644 000765 000024 00000010326 12555754775 015553 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} =head1 NAME RT::Action - a generic baseclass for RT Actions =head1 SYNOPSIS use RT::Action; =head1 DESCRIPTION =head1 METHODS =cut package RT::Action; use strict; use warnings; use Scalar::Util; use base qw/RT::Base/; sub new { my $proto = shift; my $class = ref($proto) || $proto; my $self = {}; bless ($self, $class); $self->_Init(@_); return $self; } sub _Init { my $self = shift; my %args = ( Argument => undef, CurrentUser => undef, ScripActionObj => undef, ScripObj => undef, TemplateObj => undef, TicketObj => undef, TransactionObj => undef, Type => undef, @_ ); $self->{'Argument'} = $args{'Argument'}; $self->CurrentUser( $args{'CurrentUser'}); $self->{'ScripActionObj'} = $args{'ScripActionObj'}; $self->{'ScripObj'} = $args{'ScripObj'}; $self->{'TemplateObj'} = $args{'TemplateObj'}; $self->{'TicketObj'} = $args{'TicketObj'}; $self->{'TransactionObj'} = $args{'TransactionObj'}; $self->{'Type'} = $args{'Type'}; Scalar::Util::weaken($self->{'ScripActionObj'}); Scalar::Util::weaken($self->{'ScripObj'}); Scalar::Util::weaken($self->{'TemplateObj'}); Scalar::Util::weaken($self->{'TicketObj'}); Scalar::Util::weaken($self->{'TransactionObj'}); } # Access Scripwide data sub Argument { my $self = shift; return($self->{'Argument'}); } sub TicketObj { my $self = shift; return($self->{'TicketObj'}); } sub TransactionObj { my $self = shift; return($self->{'TransactionObj'}); } sub TemplateObj { my $self = shift; return($self->{'TemplateObj'}); } sub ScripObj { my $self = shift; return($self->{'ScripObj'}); } sub ScripActionObj { my $self = shift; return($self->{'ScripActionObj'}); } sub Type { my $self = shift; return($self->{'Type'}); } # Scrip methods #Do what we need to do and send it out. sub Commit { my $self = shift; return(0, $self->loc("Commit Stubbed")); } #What does this type of Action does sub Describe { my $self = shift; return $self->loc("No description for [_1]", ref $self); } #Parse the templates, get things ready to go. sub Prepare { my $self = shift; return (0, $self->loc("Prepare Stubbed")); } RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/Approval/000755 000765 000024 00000000000 12555754775 015562 5ustar00sartakstaff000000 000000 rt-4.2.12/lib/RT/Approval.pm000644 000765 000024 00000004412 12555754775 016121 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} package RT::Approval; use strict; use warnings; use RT::Ruleset; RT::Ruleset->Add( Name => 'Approval', Rules => [ 'RT::Approval::Rule::NewPending', 'RT::Approval::Rule::Rejected', 'RT::Approval::Rule::Passed', 'RT::Approval::Rule::Created', ]); RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/Article.pm000644 000765 000024 00000046664 12555754775 015737 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; package RT::Article; use base 'RT::Record'; use Role::Basic 'with'; with "RT::Record::Role::Links" => { -excludes => ["AddLink", "_AddLinksOnCreate"] }; use RT::Articles; use RT::ObjectTopics; use RT::Classes; use RT::Links; use RT::CustomFields; use RT::URI::fsck_com_article; use RT::Transactions; sub Table {'Articles'} # This object takes custom fields use RT::CustomField; RT::CustomField->RegisterLookupType( CustomFieldLookupType() => 'Articles' ); #loc # {{{ Create =head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: varchar(200) 'Name'. varchar(200) 'Summary'. int(11) 'Content'. Class ID 'Class' A paramhash called 'CustomFields', which contains arrays of values for each custom field you want to fill in. Arrays aRe ordered. =cut sub Create { my $self = shift; my %args = ( Name => '', Summary => '', Class => '0', CustomFields => {}, Links => {}, Topics => [], @_ ); my $class = RT::Class->new( $self->CurrentUser ); $class->Load( $args{'Class'} ); unless ( $class->Id ) { return ( 0, $self->loc('Invalid Class') ); } unless ( $class->CurrentUserHasRight('CreateArticle') ) { return ( 0, $self->loc("Permission Denied") ); } return ( undef, $self->loc('Name in use') ) unless $self->ValidateName( $args{'Name'} ); $RT::Handle->BeginTransaction(); my ( $id, $msg ) = $self->SUPER::Create( Name => $args{'Name'}, Class => $class->Id, Summary => $args{'Summary'}, ); unless ($id) { $RT::Handle->Rollback(); return ( undef, $msg ); } # {{{ Add custom fields foreach my $key ( keys %args ) { next unless ( $key =~ /CustomField-(.*)$/ ); my $cf = $1; my @vals = ref( $args{$key} ) eq 'ARRAY' ? @{ $args{$key} } : ( $args{$key} ); foreach my $value (@vals) { my ( $cfid, $cfmsg ) = $self->_AddCustomFieldValue( (UNIVERSAL::isa( $value => 'HASH' ) ? %$value : (Value => $value) ), Field => $cf, RecordTransaction => 0 ); unless ($cfid) { $RT::Handle->Rollback(); return ( undef, $cfmsg ); } } } # }}} # {{{ Add topics foreach my $topic ( @{ $args{Topics} } ) { my ( $cfid, $cfmsg ) = $self->AddTopic( Topic => $topic ); unless ($cfid) { $RT::Handle->Rollback(); return ( undef, $cfmsg ); } } # }}} # {{{ Add relationships foreach my $type ( keys %args ) { next unless ( $type =~ /^(RefersTo-new|new-RefersTo)$/ ); my @vals = ref( $args{$type} ) eq 'ARRAY' ? @{ $args{$type} } : ( $args{$type} ); foreach my $val (@vals) { my ( $base, $target ); if ( $type =~ /^new-(.*)$/ ) { $type = $1; $base = undef; $target = $val; } elsif ( $type =~ /^(.*)-new$/ ) { $type = $1; $base = $val; $target = undef; } my ( $linkid, $linkmsg ) = $self->AddLink( Type => $type, Target => $target, Base => $base, RecordTransaction => 0 ); unless ($linkid) { $RT::Handle->Rollback(); return ( undef, $linkmsg ); } } } # }}} # We override the URI lookup. the whole reason # we have a URI column is so that joins on the links table # aren't expensive and stupid $self->__Set( Field => 'URI', Value => $self->URI ); my ( $txn_id, $txn_msg, $txn ) = $self->_NewTransaction( Type => 'Create' ); unless ($txn_id) { $RT::Handle->Rollback(); return ( undef, $self->loc( 'Internal error: [_1]', $txn_msg ) ); } $RT::Handle->Commit(); return ( $id, $self->loc('Article [_1] created',$self->id )); } # }}} # {{{ ValidateName =head2 ValidateName NAME Takes a string name. Returns true if that name isn't in use by another article Empty names are permitted. =cut sub ValidateName { my $self = shift; my $name = shift; if ( !$name ) { return (1); } my $temp = RT::Article->new($RT::SystemUser); $temp->LoadByCols( Name => $name ); if ( $temp->id && (!$self->id || ($temp->id != $self->id ))) { return (undef); } return (1); } # }}} # {{{ Delete =head2 Delete Delete all its transactions Delete all its custom field values Delete all its relationships Delete this article. =cut sub Delete { my $self = shift; unless ( $self->CurrentUserHasRight('DeleteArticle') ) { return ( 0, $self->loc("Permission Denied") ); } $RT::Handle->BeginTransaction(); my $linksto = $self->_Links( 'Target' ); my $linksfrom = $self->_Links( 'Base' ); my $cfvalues = $self->CustomFieldValues; my $txns = $self->Transactions; my $topics = $self->Topics; while ( my $item = $linksto->Next ) { my ( $val, $msg ) = $item->Delete(); unless ($val) { $RT::Logger->crit( ref($item) . ": $msg" ); $RT::Handle->Rollback(); return ( 0, $self->loc('Internal Error') ); } } while ( my $item = $linksfrom->Next ) { my ( $val, $msg ) = $item->Delete(); unless ($val) { $RT::Logger->crit( ref($item) . ": $msg" ); $RT::Handle->Rollback(); return ( 0, $self->loc('Internal Error') ); } } while ( my $item = $txns->Next ) { my ( $val, $msg ) = $item->Delete(); unless ($val) { $RT::Logger->crit( ref($item) . ": $msg" ); $RT::Handle->Rollback(); return ( 0, $self->loc('Internal Error') ); } } while ( my $item = $cfvalues->Next ) { my ( $val, $msg ) = $item->Delete(); unless ($val) { $RT::Logger->crit( ref($item) . ": $msg" ); $RT::Handle->Rollback(); return ( 0, $self->loc('Internal Error') ); } } while ( my $item = $topics->Next ) { my ( $val, $msg ) = $item->Delete(); unless ($val) { $RT::Logger->crit( ref($item) . ": $msg" ); $RT::Handle->Rollback(); return ( 0, $self->loc('Internal Error') ); } } $self->SUPER::Delete(); $RT::Handle->Commit(); return ( 1, $self->loc('Article Deleted') ); } # }}} # {{{ Children =head2 Children Returns an RT::Articles object which contains all articles which have this article as their parent. This routine will not recurse and will not find grandchildren, great-grandchildren, uncles, aunts, nephews or any other such thing. =cut sub Children { my $self = shift; my $kids = RT::Articles->new( $self->CurrentUser ); unless ( $self->CurrentUserHasRight('ShowArticle') ) { $kids->LimitToParent( $self->Id ); } return ($kids); } # }}} # {{{ sub AddLink =head2 AddLink Takes a paramhash of Type and one of Base or Target. Adds that link to this article. Prevents the use of plain numbers to avoid confusing behaviour. =cut sub AddLink { my $self = shift; my %args = ( Target => '', Base => '', Type => '', Silent => undef, @_ ); unless ( $self->CurrentUserHasRight('ModifyArticle') ) { return ( 0, $self->loc("Permission Denied") ); } # Disallow parsing of plain numbers in article links. If they are # allowed, they default to being tickets instead of articles, which # is counterintuitive. if ( $args{'Target'} && $args{'Target'} =~ /^\d+$/ || $args{'Base'} && $args{'Base'} =~ /^\d+$/ ) { return ( 0, $self->loc("Cannot add link to plain number") ); } $self->_AddLink(%args); } sub URI { my $self = shift; unless ( $self->CurrentUserHasRight('ShowArticle') ) { return $self->loc("Permission Denied"); } my $uri = RT::URI::fsck_com_article->new( $self->CurrentUser ); return ( $uri->URIForObject($self) ); } # }}} # {{{ sub URIObj =head2 URIObj Returns this article's URI =cut sub URIObj { my $self = shift; my $uri = RT::URI->new( $self->CurrentUser ); if ( $self->CurrentUserHasRight('ShowArticle') ) { $uri->FromObject($self); } return ($uri); } # }}} # }}} # {{{ Topics # {{{ Topics sub Topics { my $self = shift; my $topics = RT::ObjectTopics->new( $self->CurrentUser ); if ( $self->CurrentUserHasRight('ShowArticle') ) { $topics->LimitToObject($self); } return $topics; } # }}} # {{{ AddTopic sub AddTopic { my $self = shift; my %args = (@_); unless ( $self->CurrentUserHasRight('ModifyArticleTopics') ) { return ( 0, $self->loc("Permission Denied") ); } my $t = RT::ObjectTopic->new( $self->CurrentUser ); my ($tid) = $t->Create( Topic => $args{'Topic'}, ObjectType => ref($self), ObjectId => $self->Id ); if ($tid) { return ( $tid, $self->loc("Topic membership added") ); } else { return ( 0, $self->loc("Unable to add topic membership") ); } } # }}} sub DeleteTopic { my $self = shift; my %args = (@_); unless ( $self->CurrentUserHasRight('ModifyArticleTopics') ) { return ( 0, $self->loc("Permission Denied") ); } my $t = RT::ObjectTopic->new( $self->CurrentUser ); $t->LoadByCols( Topic => $args{'Topic'}, ObjectId => $self->Id, ObjectType => ref($self) ); if ( $t->Id ) { my $del = $t->Delete; unless ($del) { return ( undef, $self->loc( "Unable to delete topic membership in [_1]", $t->TopicObj->Name ) ); } else { return ( 1, $self->loc("Topic membership removed") ); } } else { return ( undef, $self->loc( "Couldn't load topic membership while trying to delete it") ); } } =head2 CurrentUserCanSee Returns true if the current user can see the article, using ShowArticle =cut sub CurrentUserCanSee { my $self = shift; return $self->CurrentUserHasRight('ShowArticle'); } # }}} # {{{ _Set =head2 _Set { Field => undef, Value => undef Internal helper method to record a transaction as we update some core field of the article =cut sub _Set { my $self = shift; my %args = ( Field => undef, Value => undef, @_ ); unless ( $self->CurrentUserHasRight('ModifyArticle') ) { return ( 0, $self->loc("Permission Denied") ); } $self->_NewTransaction( Type => 'Set', Field => $args{'Field'}, NewValue => $args{'Value'}, OldValue => $self->__Value( $args{'Field'} ) ); return ( $self->SUPER::_Set(%args) ); } =head2 _Value PARAM Return "PARAM" for this object. if the current user doesn't have rights, returns undef =cut sub _Value { my $self = shift; my $arg = shift; unless ( ( $arg eq 'Class' ) || ( $self->CurrentUserHasRight('ShowArticle') ) ) { return (undef); } return $self->SUPER::_Value($arg); } # }}} sub CustomFieldLookupType { "RT::Class-RT::Article"; } sub ACLEquivalenceObjects { my $self = shift; return $self->ClassObj; } sub ModifyLinkRight { "ModifyArticle" } =head2 LoadByInclude Field Value Takes the name of a form field from "Include Article" and the value submitted by the browser and attempts to load an Article. This handles Articles included by searching, by the Name and via the hotlist. If you optionaly pass an id as the Queue argument, this will check that the Article's Class is applied to that Queue. =cut sub LoadByInclude { my $self = shift; my %args = @_; my $Field = $args{Field}; my $Value = $args{Value}; my $Queue = $args{Queue}; return unless $Field; my ($ok, $msg); if ( $Field eq 'Articles-Include-Article' && $Value ) { ($ok, $msg) = $self->Load( $Value ); } elsif ( $Field =~ /^Articles-Include-Article-(\d+)$/ ) { ($ok, $msg) = $self->Load( $1 ); } elsif ( $Field =~ /^Articles-Include-Article-Named/ && $Value ) { if ( $Value =~ /\D/ ) { ($ok, $msg) = $self->LoadByCols( Name => $Value ); } else { ($ok, $msg) = $self->LoadByCols( id => $Value ); } } unless ($ok) { # load failed, don't check Class return wantarray ? ($ok, $msg) : $ok; } unless ($Queue) { # we haven't requested extra sanity checking return wantarray ? ($ok, $msg) : $ok; } # ensure that this article is available for the Queue we're # operating under. my $class = $self->ClassObj; unless ($class->IsApplied(0) || $class->IsApplied($Queue)) { $self->LoadById(0); return wantarray ? (0, $self->loc("The Class of the Article identified by [_1] is not applied to the current Queue",$Value)) : 0; } return wantarray ? ($ok, $msg) : $ok; } =head2 id Returns the current value of id. (In the database, id is stored as int(11).) =cut =head2 Name Returns the current value of Name. (In the database, Name is stored as varchar(255).) =head2 SetName VALUE Set Name to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Name will be stored as a varchar(255).) =cut =head2 Summary Returns the current value of Summary. (In the database, Summary is stored as varchar(255).) =head2 SetSummary VALUE Set Summary to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Summary will be stored as a varchar(255).) =cut =head2 SortOrder Returns the current value of SortOrder. (In the database, SortOrder is stored as int(11).) =head2 SetSortOrder VALUE Set SortOrder to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, SortOrder will be stored as a int(11).) =cut =head2 Class Returns the current value of Class. (In the database, Class is stored as int(11).) =head2 SetClass VALUE Set Class to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Class will be stored as a int(11).) =cut =head2 ClassObj Returns the Class Object which has the id returned by Class =cut sub ClassObj { my $self = shift; my $Class = RT::Class->new($self->CurrentUser); $Class->Load($self->Class()); return($Class); } =head2 Parent Returns the current value of Parent. (In the database, Parent is stored as int(11).) =head2 SetParent VALUE Set Parent to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Parent will be stored as a int(11).) =cut =head2 URI Returns the current value of URI. (In the database, URI is stored as varchar(255).) =head2 SetURI VALUE Set URI to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, URI will be stored as a varchar(255).) =cut =head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) =cut =head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) =cut =head2 LastUpdatedBy Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) =cut =head2 LastUpdated Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) =cut sub _CoreAccessible { { id => {read => 1, type => 'int(11)', default => ''}, Name => {read => 1, write => 1, type => 'varchar(255)', default => ''}, Summary => {read => 1, write => 1, type => 'varchar(255)', default => ''}, SortOrder => {read => 1, write => 1, type => 'int(11)', default => '0'}, Class => {read => 1, write => 1, type => 'int(11)', default => '0'}, Parent => {read => 1, write => 1, type => 'int(11)', default => '0'}, URI => {read => 1, write => 1, type => 'varchar(255)', default => ''}, Creator => {read => 1, auto => 1, type => 'int(11)', default => '0'}, Created => {read => 1, auto => 1, type => 'datetime', default => ''}, LastUpdatedBy => {read => 1, auto => 1, type => 'int(11)', default => '0'}, LastUpdated => {read => 1, auto => 1, type => 'datetime', default => ''}, } }; sub FindDependencies { my $self = shift; my ($walker, $deps) = @_; $self->SUPER::FindDependencies($walker, $deps); # Links my $links = RT::Links->new( $self->CurrentUser ); $links->Limit( SUBCLAUSE => "either", FIELD => $_, VALUE => $self->URI, ENTRYAGGREGATOR => 'OR' ) for qw/Base Target/; $deps->Add( in => $links ); $deps->Add( out => $self->ClassObj ); $deps->Add( in => $self->Topics ); } sub PostInflate { my $self = shift; $self->__Set( Field => 'URI', Value => $self->URI ); } RT::Base->_ImportOverlays(); 1; 1; rt-4.2.12/lib/RT/Articles.pm000644 000765 000024 00000057772 12555754775 016124 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; package RT::Articles; use base 'RT::SearchBuilder'; sub Table {'Articles'} sub _Init { my $self = shift; $self->OrderByCols( { FIELD => 'SortOrder', ORDER => 'ASC' }, { FIELD => 'Name', ORDER => 'ASC' }, ); return $self->SUPER::_Init( @_ ); } =head2 AddRecord Overrides the collection to ensure that only Articles the user can see are returned. =cut sub AddRecord { my $self = shift; my ($record) = @_; return unless $record->CurrentUserHasRight('ShowArticle'); return $self->SUPER::AddRecord( $record ); } =head2 Limit { FIELD => undef, OPERATOR => '=', VALUE => 'undef'} Limit the result set. See DBIx::SearchBuilder docs In addition to the "normal" stuff, value can be an array. =cut sub Limit { my $self = shift; my %ARGS = ( OPERATOR => '=', @_ ); if ( ref( $ARGS{'VALUE'} ) ) { my @values = $ARGS{'VALUE'}; delete $ARGS{'VALUE'}; foreach my $v (@values) { $self->SUPER::Limit( %ARGS, VALUE => $v ); } } else { $self->SUPER::Limit(%ARGS); } } =head2 LimitName { OPERATOR => 'LIKE', VALUE => undef } Find all articles with Name fields which satisfy OPERATOR for VALUE =cut sub LimitName { my $self = shift; my %args = ( FIELD => 'Name', OPERATOR => 'LIKE', CASESENSITIVE => 0, VALUE => undef, @_ ); $self->Limit(%args); } =head2 LimitSummary { OPERATOR => 'LIKE', VALUE => undef } Find all articles with summary fields which satisfy OPERATOR for VALUE =cut sub LimitSummary { my $self = shift; my %args = ( FIELD => 'Summary', OPERATOR => 'LIKE', CASESENSITIVE => 0, VALUE => undef, @_ ); $self->Limit(%args); } sub LimitCreated { my $self = shift; my %args = ( FIELD => 'Created', OPERATOR => undef, VALUE => undef, @_ ); $self->Limit(%args); } sub LimitCreatedBy { my $self = shift; my %args = ( FIELD => 'CreatedBy', OPERATOR => '=', VALUE => undef, @_ ); $self->Limit(%args); } sub LimitUpdated { my $self = shift; my %args = ( FIELD => 'Updated', OPERATOR => undef, VALUE => undef, @_ ); $self->Limit(%args); } sub LimitUpdatedBy { my $self = shift; my %args = ( FIELD => 'UpdatedBy', OPERATOR => '=', VALUE => undef, @_ ); $self->Limit(%args); } # {{{ LimitToParent ID =head2 LimitToParent ID Limit the returned set of articles to articles which are children of article ID. This does not recurse. =cut sub LimitToParent { my $self = shift; my $parent = shift; $self->Limit( FIELD => 'Parent', OPERATOR => '=', VALUE => $parent ); } # }}} # {{{ LimitCustomField =head2 LimitCustomField HASH Limit the result set to articles which have or do not have the custom field value listed, using a left join to catch things where no rows match. HASH needs the following fields: FIELD (A custom field id) or undef for any custom field ENTRYAGGREGATOR => (AND, OR) OPERATOR ('=', 'LIKE', '!=', 'NOT LIKE') VALUE ( a single scalar value or a list of possible values to be concatenated with ENTRYAGGREGATOR) The subclause that the LIMIT statement(s) should be done in can also be passed in with a SUBCLAUSE parameter. =cut sub LimitCustomField { my $self = shift; my %args = ( FIELD => undef, ENTRYAGGREGATOR => 'OR', OPERATOR => '=', QUOTEVALUE => 1, VALUE => undef, SUBCLAUSE => undef, @_ ); my $value = $args{'VALUE'}; # XXX: this work in a different way than RT return unless $value; #strip out total blank wildcards my $ObjectValuesAlias = $self->Join( TYPE => 'left', ALIAS1 => 'main', FIELD1 => 'id', TABLE2 => 'ObjectCustomFieldValues', FIELD2 => 'ObjectId', EXPRESSION => 'main.id' ); $self->Limit( LEFTJOIN => $ObjectValuesAlias, FIELD => 'Disabled', VALUE => '0' ); if ( $args{'FIELD'} ) { my $field_id; if (UNIVERSAL::isa($args{'FIELD'} ,'RT::CustomField')) { $field_id = $args{'FIELD'}->id; } elsif($args{'FIELD'} =~ /^\d+$/) { $field_id = $args{'FIELD'}; } if ($field_id) { $self->Limit( LEFTJOIN => $ObjectValuesAlias, FIELD => 'CustomField', VALUE => $field_id, ENTRYAGGREGATOR => 'AND'); # Could convert the above to a non-left join and also enable the thing below # $self->SUPER::Limit( ALIAS => $ObjectValuesAlias, # FIELD => 'CustomField', # OPERATOR => 'IS', # VALUE => 'NULL', # QUOTEVALUE => 0, # ENTRYAGGREGATOR => 'OR',); } else { # Search for things by name if the cf was specced by name. my $fields = $self->NewAlias('CustomFields'); $self->Join( TYPE => 'left', ALIAS1 => $ObjectValuesAlias , FIELD1 => 'CustomField', ALIAS2 => $fields, FIELD2=> 'id'); $self->Limit( ALIAS => $fields, FIELD => 'Name', VALUE => $args{'FIELD'}, ENTRYAGGREGATOR => 'OR', CASESENSITIVE => 0); $self->Limit( ALIAS => $fields, FIELD => 'LookupType', VALUE => RT::Article->new($RT::SystemUser)->CustomFieldLookupType() ); } } # If we're trying to find articles where a custom field value # doesn't match something, be sure to find things where it's null # basically, we do a left join on the value being applicable to # the article and then we turn around and make sure that it's # actually null in practise # TODO this should deal with starts with and ends with my $fix_op = sub { my $op = shift; return $op unless RT->Config->Get('DatabaseType') eq 'Oracle'; return 'MATCHES' if $op eq '='; return 'NOT MATCHES' if $op eq '!='; return $op; }; my $clause = $args{'SUBCLAUSE'} || $ObjectValuesAlias; if ( $args{'OPERATOR'} eq '!=' || $args{'OPERATOR'} =~ /^not like$/i ) { my $op; if ( $args{'OPERATOR'} eq '!=' ) { $op = "="; } elsif ( $args{'OPERATOR'} =~ /^not like$/i ) { $op = 'LIKE'; } $self->SUPER::Limit( LEFTJOIN => $ObjectValuesAlias, FIELD => 'Content', OPERATOR => $op, VALUE => $value, QUOTEVALUE => $args{'QUOTEVALUE'}, ENTRYAGGREGATOR => 'AND', #$args{'ENTRYAGGREGATOR'}, SUBCLAUSE => $clause, CASESENSITIVE => 0, ); $self->SUPER::Limit( ALIAS => $ObjectValuesAlias, FIELD => 'Content', OPERATOR => 'IS', VALUE => 'NULL', QUOTEVALUE => 0, ENTRYAGGREGATOR => 'AND', SUBCLAUSE => $clause, ); } else { $self->SUPER::Limit( ALIAS => $ObjectValuesAlias, FIELD => 'LargeContent', OPERATOR => $fix_op->($args{'OPERATOR'}), VALUE => $value, QUOTEVALUE => $args{'QUOTEVALUE'}, ENTRYAGGREGATOR => $args{'ENTRYAGGREGATOR'}, SUBCLAUSE => $clause, CASESENSITIVE => 0, ); $self->SUPER::Limit( ALIAS => $ObjectValuesAlias, FIELD => 'Content', OPERATOR => $args{'OPERATOR'}, VALUE => $value, QUOTEVALUE => $args{'QUOTEVALUE'}, ENTRYAGGREGATOR => $args{'ENTRYAGGREGATOR'}, SUBCLAUSE => $clause, CASESENSITIVE => 0, ); } } # }}} # {{{ LimitTopics sub LimitTopics { my $self = shift; my @topics = @_; return unless @topics; my $topics = $self->NewAlias('ObjectTopics'); $self->Limit( ALIAS => $topics, FIELD => 'Topic', OPERATOR => 'IN', VALUE => [ @topics ], ); $self->Limit( ALIAS => $topics, FIELD => 'ObjectType', VALUE => 'RT::Article', ); $self->Join( ALIAS1 => 'main', FIELD1 => 'id', ALIAS2 => $topics, FIELD2 => 'ObjectId', ); } # }}} # {{{ LimitRefersTo URI =head2 LimitRefersTo URI Limit the result set to only articles which are referred to by the URI passed in. =cut sub LimitRefersTo { my $self = shift; my $uri = shift; my $uri_obj = RT::URI->new($self->CurrentUser); $uri_obj->FromURI($uri); my $links = $self->NewAlias('Links'); $self->Limit( ALIAS => $links, FIELD => 'Target', VALUE => $uri_obj->URI ); $self->Join( ALIAS1 => 'main', FIELD1 => 'URI', ALIAS2 => $links, FIELD2 => 'Base' ); } # }}} # {{{ LimitReferredToBy URI =head2 LimitReferredToBy URI Limit the result set to only articles which are referred to by the URI passed in. =cut sub LimitReferredToBy { my $self = shift; my $uri = shift; my $uri_obj = RT::URI->new($self->CurrentUser); $uri_obj->FromURI($uri); my $links = $self->NewAlias('Links'); $self->Limit( ALIAS => $links, FIELD => 'Base', VALUE => $uri_obj->URI ); $self->Join( ALIAS1 => 'main', FIELD1 => 'URI', ALIAS2 => $links, FIELD2 => 'Target' ); } # }}} =head2 LimitHostlistClasses Only fetch Articles from classes where Hotlist is true. =cut sub LimitHotlistClasses { my $self = shift; my $classes = $self->Join( ALIAS1 => 'main', FIELD1 => 'Class', TABLE2 => 'Classes', FIELD2 => 'id', ); $self->Limit( ALIAS => $classes, FIELD => 'HotList', VALUE => 1 ); } =head2 LimitAppliedClasses Queue => QueueObj Takes a Queue and limits articles returned to classes which are applied to that Queue Accepts either a Queue obj or a Queue id =cut sub LimitAppliedClasses { my $self = shift; my %args = @_; unless (ref $args{Queue} || $args{Queue} =~/^[0-9]+$/) { $RT::Logger->error("Not a valid Queue: $args{Queue}"); return; } my $queue = ( ref $args{Queue} ? $args{Queue}->Id : $args{Queue} ); my $oc_alias = $self->Join( ALIAS1 => 'main', FIELD1 => 'Class', TABLE2 => 'ObjectClasses', FIELD2 => 'Class' ); my $subclause = "possibleobjectclasses"; $self->_OpenParen($subclause); $self->Limit( ALIAS => $oc_alias, FIELD => 'ObjectId', VALUE => $queue, SUBCLAUSE => $subclause, ENTRYAGGREGATOR => 'OR' ); $self->Limit( ALIAS => $oc_alias, FIELD => 'ObjectType', VALUE => 'RT::Queue', SUBCLAUSE => $subclause, ENTRYAGGREGATOR => 'AND' ); $self->_CloseParen($subclause); $self->_OpenParen($subclause); $self->Limit( ALIAS => $oc_alias, FIELD => 'ObjectId', VALUE => 0, SUBCLAUSE => $subclause, ENTRYAGGREGATOR => 'OR' ); $self->Limit( ALIAS => $oc_alias, FIELD => 'ObjectType', VALUE => 'RT::System', SUBCLAUSE => $subclause, ENTRYAGGREGATOR => 'AND' ); $self->_CloseParen($subclause); return $self; } sub Search { my $self = shift; my %args = @_; my $customfields = $args{CustomFields} || RT::CustomFields->new( $self->CurrentUser ); my $dates = $args{Dates} || {}; my $order_by = $args{OrderBy}; my $order = $args{Order}; if ( $args{'q'} ) { $self->Limit( FIELD => 'Name', SUBCLAUSE => 'NameOrSummary', OPERATOR => 'LIKE', ENTRYAGGREGATOR => 'OR', CASESENSITIVE => 0, VALUE => $args{'q'} ); $self->Limit( FIELD => 'Summary', SUBCLAUSE => 'NameOrSummary', OPERATOR => 'LIKE', ENTRYAGGREGATOR => 'OR', CASESENSITIVE => 0, VALUE => $args{'q'} ); } foreach my $date (qw(Created< Created> LastUpdated< LastUpdated>)) { next unless ( $args{$date} ); my $date_obj = RT::Date->new( $self->CurrentUser ); $date_obj->Set( Format => 'unknown', Value => $args{$date} ); $dates->{$date} = $date_obj; if ( $date =~ /^(.*?)<$/i ) { $self->Limit( FIELD => $1, OPERATOR => "<=", ENTRYAGGREGATOR => "AND", VALUE => $date_obj->ISO ); } if ( $date =~ /^(.*?)>$/i ) { $self->Limit( FIELD => $1, OPERATOR => ">=", ENTRYAGGREGATOR => "AND", VALUE => $date_obj->ISO ); } } if ($args{'RefersTo'}) { foreach my $link ( split( /\s+/, $args{'RefersTo'} ) ) { next unless ($link); $self->LimitRefersTo($link); } } if ($args{'ReferredToBy'}) { foreach my $link ( split( /\s+/, $args{'ReferredToBy'} ) ) { next unless ($link); $self->LimitReferredToBy($link); } } if ( $args{'Topics'} ) { my @Topics = ( ref $args{'Topics'} eq 'ARRAY' ) ? @{ $args{'Topics'} } : ( $args{'Topics'} ); @Topics = map { split } @Topics; if ( $args{'ExpandTopics'} ) { my %topics; while (@Topics) { my $id = shift @Topics; next if $topics{$id}; my $Topics = RT::Topics->new( $self->CurrentUser ); $Topics->Limit( FIELD => 'Parent', VALUE => $id ); push @Topics, $_->Id while $_ = $Topics->Next; $topics{$id}++; } @Topics = keys %topics; $args{'Topics'} = \@Topics; } $self->LimitTopics(@Topics); } my %cfs; $customfields->LimitToLookupType( RT::Article->new( $self->CurrentUser ) ->CustomFieldLookupType ); if ( $args{'Class'} ) { my @Classes = ( ref $args{'Class'} eq 'ARRAY' ) ? @{ $args{'Class'} } : ( $args{'Class'} ); foreach my $class (@Classes) { $customfields->LimitToGlobalOrObjectId($class); } } else { $customfields->LimitToGlobalOrObjectId(); } while ( my $cf = $customfields->Next ) { $cfs{ $cf->Name } = $cf->Id; } # reset the iterator because we use this to build the UI $customfields->GotoFirstItem; foreach my $field ( keys %cfs ) { my @MatchLike = ( ref $args{ $field . "~" } eq 'ARRAY' ) ? @{ $args{ $field . "~" } } : ( $args{ $field . "~" } ); my @NoMatchLike = ( ref $args{ $field . "!~" } eq 'ARRAY' ) ? @{ $args{ $field . "!~" } } : ( $args{ $field . "!~" } ); my @Match = ( ref $args{$field} eq 'ARRAY' ) ? @{ $args{$field} } : ( $args{$field} ); my @NoMatch = ( ref $args{ $field . "!" } eq 'ARRAY' ) ? @{ $args{ $field . "!" } } : ( $args{ $field . "!" } ); foreach my $val (@MatchLike) { next unless $val; push @Match, "~" . $val; } foreach my $val (@NoMatchLike) { next unless $val; push @NoMatch, "~" . $val; } foreach my $value (@Match) { next unless $value; my $op; if ( $value =~ /^~(.*)$/ ) { $value = "%$1%"; $op = 'LIKE'; } else { $op = '='; } $self->LimitCustomField( FIELD => $cfs{$field}, VALUE => $value, CASESENSITIVE => 0, ENTRYAGGREGATOR => 'OR', OPERATOR => $op ); } foreach my $value (@NoMatch) { next unless $value; my $op; if ( $value =~ /^~(.*)$/ ) { $value = "%$1%"; $op = 'NOT LIKE'; } else { $op = '!='; } $self->LimitCustomField( FIELD => $cfs{$field}, VALUE => $value, CASESENSITIVE => 0, ENTRYAGGREGATOR => 'OR', OPERATOR => $op ); } } ### Searches for any field if ( $args{'Article~'} ) { $self->LimitCustomField( VALUE => $args{'Article~'}, ENTRYAGGREGATOR => 'OR', OPERATOR => 'LIKE', CASESENSITIVE => 0, SUBCLAUSE => 'SearchAll' ); $self->Limit( SUBCLAUSE => 'SearchAll', FIELD => "Name", VALUE => $args{'Article~'}, ENTRYAGGREGATOR => 'OR', CASESENSITIVE => 0, OPERATOR => 'LIKE' ); $self->Limit( SUBCLAUSE => 'SearchAll', FIELD => "Summary", VALUE => $args{'Article~'}, ENTRYAGGREGATOR => 'OR', CASESENSITIVE => 0, OPERATOR => 'LIKE' ); } if ( $args{'Article!~'} ) { $self->LimitCustomField( VALUE => $args{'Article!~'}, OPERATOR => 'NOT LIKE', CASESENSITIVE => 0, SUBCLAUSE => 'SearchAll' ); $self->Limit( SUBCLAUSE => 'SearchAll', FIELD => "Name", VALUE => $args{'Article!~'}, ENTRYAGGREGATOR => 'AND', CASESENSITIVE => 0, OPERATOR => 'NOT LIKE' ); $self->Limit( SUBCLAUSE => 'SearchAll', FIELD => "Summary", VALUE => $args{'Article!~'}, ENTRYAGGREGATOR => 'AND', CASESENSITIVE => 0, OPERATOR => 'NOT LIKE' ); } foreach my $field (qw(Name Summary Class)) { my @MatchLike = ( ref $args{ $field . "~" } eq 'ARRAY' ) ? @{ $args{ $field . "~" } } : ( $args{ $field . "~" } ); my @NoMatchLike = ( ref $args{ $field . "!~" } eq 'ARRAY' ) ? @{ $args{ $field . "!~" } } : ( $args{ $field . "!~" } ); my @Match = ( ref $args{$field} eq 'ARRAY' ) ? @{ $args{$field} } : ( $args{$field} ); my @NoMatch = ( ref $args{ $field . "!" } eq 'ARRAY' ) ? @{ $args{ $field . "!" } } : ( $args{ $field . "!" } ); foreach my $val (@MatchLike) { next unless $val; push @Match, "~" . $val; } foreach my $val (@NoMatchLike) { next unless $val; push @NoMatch, "~" . $val; } my $op; foreach my $value (@Match) { if ( $value && $value =~ /^~(.*)$/ ) { $value = "%$1%"; $op = 'LIKE'; } else { $op = '='; } # preprocess Classes, so we can search on class if ( $field eq 'Class' && $value ) { my $class = RT::Class->new($RT::SystemUser); $class->Load($value); $value = $class->Id; } # now that we've pruned the value, get out if it's different. next unless $value; $self->Limit( SUBCLAUSE => $field . 'Match', FIELD => $field, OPERATOR => $op, CASESENSITIVE => 0, VALUE => $value, ENTRYAGGREGATOR => 'OR' ); } foreach my $value (@NoMatch) { # preprocess Classes, so we can search on class if ( $value && $value =~ /^~(.*)/ ) { $value = "%$1%"; $op = 'NOT LIKE'; } else { $op = '!='; } if ( $field eq 'Class' ) { my $class = RT::Class->new($RT::SystemUser); $class->Load($value); $value = $class->Id; } # now that we've pruned the value, get out if it's different. next unless $value; $self->Limit( SUBCLAUSE => $field . 'NoMatch', OPERATOR => $op, VALUE => $value, CASESENSITIVE => 0, FIELD => $field, ENTRYAGGREGATOR => 'AND' ); } } if ($order_by && @$order_by) { if ( $order_by->[0] && $order_by->[0] =~ /\|/ ) { @$order_by = split '|', $order_by->[0]; @$order = split '|', $order->[0]; } my @tmp = map { { FIELD => $order_by->[$_], ORDER => $order->[$_] } } 0 .. $#{$order_by}; $self->OrderByCols(@tmp); } return 1; } RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/Attachment.pm000644 000765 000024 00000077734 12555754775 016446 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} =head1 SYNOPSIS use RT::Attachment; =head1 DESCRIPTION This module should never be instantiated directly by client code. it's an internal module which should only be instantiated through exported APIs in Ticket, Queue and other similar objects. =head1 METHODS =cut package RT::Attachment; use base 'RT::Record'; sub Table {'Attachments'} use strict; use warnings; use RT::Transaction; use MIME::Base64; use MIME::QuotedPrint; use MIME::Body; use RT::Util 'mime_recommended_filename'; use URI; sub _OverlayAccessible { { TransactionId => { 'read'=>1, 'public'=>1, 'write' => 0 }, MessageId => { 'read'=>1, 'write' => 0 }, Parent => { 'read'=>1, 'write' => 0 }, ContentType => { 'read'=>1, 'write' => 0 }, Subject => { 'read'=>1, 'write' => 0 }, Content => { 'read'=>1, 'write' => 0 }, ContentEncoding => { 'read'=>1, 'write' => 0 }, Headers => { 'read'=>1, 'write' => 0 }, Filename => { 'read'=>1, 'write' => 0 }, Creator => { 'read'=>1, 'auto'=>1, }, Created => { 'read'=>1, 'auto'=>1, }, }; } =head2 Create Create a new attachment. Takes a paramhash: 'Attachment' Should be a single MIME body with optional subparts 'Parent' is an optional id of the parent attachment 'TransactionId' is the mandatory id of the transaction this attachment is associated with.; =cut sub Create { my $self = shift; my %args = ( id => 0, TransactionId => 0, Parent => 0, Attachment => undef, @_ ); # For ease of reference my $Attachment = $args{'Attachment'}; # if we didn't specify a ticket, we need to bail unless ( $args{'TransactionId'} ) { $RT::Logger->crit( "RT::Attachment->Create couldn't, as you didn't specify a transaction" ); return (0); } # If we possibly can, collapse it to a singlepart $Attachment->make_singlepart; my $head = $Attachment->head; # Get the subject my $Subject = Encode::decode( 'UTF-8', $head->get( 'subject' ) ); $Subject = '' unless defined $Subject; chomp $Subject; #Get the Message-ID my $MessageId = Encode::decode( "UTF-8", $head->get( 'Message-ID' ) ); defined($MessageId) or $MessageId = ''; chomp ($MessageId); $MessageId =~ s/^<(.*?)>$/$1/o; #Get the filename my $Filename = mime_recommended_filename($Attachment); # remove path part. $Filename =~ s!.*/!! if $Filename; my $content; unless ( $head->get('Content-Length') ) { my $length = 0; $length = length $Attachment->bodyhandle->as_string if defined $Attachment->bodyhandle; $head->replace( 'Content-Length' => Encode::encode( "UTF-8", $length ) ); } $head = $head->as_string; # MIME::Head doesn't support perl strings well and can return # octets which later will be double encoded in low-level code $head = Encode::decode( 'UTF-8', $head ); # If a message has no bodyhandle, that means that it has subparts (or appears to) # and we should act accordingly. unless ( defined $Attachment->bodyhandle ) { my ($id) = $self->SUPER::Create( TransactionId => $args{'TransactionId'}, Parent => $args{'Parent'}, ContentType => $Attachment->mime_type, Headers => $head, MessageId => $MessageId, Subject => $Subject, ); unless ($id) { $RT::Logger->crit("Attachment insert failed - ". $RT::Handle->dbh->errstr); my $txn = RT::Transaction->new($self->CurrentUser); $txn->Load($args{'TransactionId'}); if ( $txn->id ) { $txn->Object->_NewTransaction( Type => 'AttachmentError', ActivateScrips => 0, Data => $Filename ); } return ($id); } foreach my $part ( $Attachment->parts ) { my $SubAttachment = RT::Attachment->new( $self->CurrentUser ); my ($id) = $SubAttachment->Create( TransactionId => $args{'TransactionId'}, Parent => $id, Attachment => $part, ); unless ($id) { $RT::Logger->crit("Attachment insert failed: ". $RT::Handle->dbh->errstr); return ($id); } } return ($id); } #If it's not multipart else { my ( $encoding, $type, $note_args ); ( $encoding, $content, $type, $Filename, $note_args ) = $self->_EncodeLOB( $Attachment->bodyhandle->as_string, $Attachment->mime_type, $Filename, ); my $id = $self->SUPER::Create( TransactionId => $args{'TransactionId'}, ContentType => $type, ContentEncoding => $encoding, Parent => $args{'Parent'}, Headers => $head, Subject => $Subject, Content => $content, Filename => $Filename, MessageId => $MessageId, ); if ($id) { if ($note_args) { $self->TransactionObj->Object->_NewTransaction( %$note_args ); } } else { $RT::Logger->crit("Attachment insert failed: ". $RT::Handle->dbh->errstr); my $txn = RT::Transaction->new($self->CurrentUser); $txn->Load($args{'TransactionId'}); if ( $txn->id ) { $txn->Object->_NewTransaction( Type => 'AttachmentError', ActivateScrips => 0, Data => $Filename ); } } return $id; } } =head2 TransactionObj Returns the transaction object asscoiated with this attachment. =cut sub TransactionObj { my $self = shift; unless ( $self->{_TransactionObj} ) { $self->{_TransactionObj} = RT::Transaction->new( $self->CurrentUser ); $self->{_TransactionObj}->Load( $self->TransactionId ); } unless ($self->{_TransactionObj}->Id) { $RT::Logger->crit( "Attachment ". $self->id ." can't find transaction ". $self->TransactionId ." which it is ostensibly part of. That's bad"); } return $self->{_TransactionObj}; } =head2 ParentObj Returns a parent's L object if this attachment has a parent, otherwise returns undef. =cut sub ParentObj { my $self = shift; return undef unless $self->Parent; my $parent = RT::Attachment->new( $self->CurrentUser ); $parent->LoadById( $self->Parent ); return $parent; } =head2 Closest Takes a MIME type as a string or regex. Returns an L object for the nearest containing part with a matching L. Strings must match exactly and all matches are done case insensitively. Strings ending in a C must only match the first part of the MIME type. For example: # Find the nearest multipart/* container my $container = $attachment->Closest("multipart/"); Returns undef if no such object is found. =cut sub Closest { my $self = shift; my $type = shift; my $part = $self->ParentObj or return undef; $type = qr/^\Q$type\E$/ unless ref $type eq "REGEX"; while (lc($part->ContentType) !~ $type) { $part = $part->ParentObj or last; } return ($part and $part->id) ? $part : undef; } =head2 Children Returns an L object which is preloaded with all attachments objects with this attachment's Id as their C. =cut sub Children { my $self = shift; my $kids = RT::Attachments->new( $self->CurrentUser ); $kids->ChildrenOf( $self->Id ); return($kids); } =head2 Siblings Returns an L object containing all the attachments sharing the same immediate parent as the current object, excluding the current attachment itself. If the current attachment is a top-level part (i.e. Parent == 0) then a guaranteed empty L object is returned. =cut sub Siblings { my $self = shift; my $siblings = RT::Attachments->new( $self->CurrentUser ); if ($self->Parent) { $siblings->ChildrenOf( $self->Parent ); $siblings->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => $self->Id ); } else { # Ensure emptiness $siblings->Limit( SUBCLAUSE => 'empty', FIELD => 'id', VALUE => 0 ); } return $siblings; } =head2 Content Returns the attachment's content. if it's base64 encoded, decode it before returning it. =cut sub Content { my $self = shift; return $self->_DecodeLOB( $self->GetHeader('Content-Type'), # Includes charset, unlike ->ContentType $self->ContentEncoding, $self->_Value('Content', decode_utf8 => 0), ); } =head2 OriginalContent Returns the attachment's content as octets before RT's mangling. Generally this just means restoring text content back to its original encoding. If the attachment has a C Content-Type, its children attachments are reconstructed and returned as a string. =cut sub OriginalContent { my $self = shift; # message/* content types represent raw messages. Since we break them # apart when they come in, we'll reconstruct their child attachments when # you ask for the OriginalContent of the message/ part. if ($self->IsMessageContentType) { # There shouldn't be more than one "subpart" to a message/* attachment my $child = $self->Children->First; return $self->Content unless $child and $child->id; return $child->ContentAsMIME(Children => 1)->as_string; } return $self->Content unless RT::I18N::IsTextualContentType($self->ContentType); my $content = $self->_DecodeLOB( "application/octet-stream", # Force _DecodeLOB to not decode to characters $self->ContentEncoding, $self->_Value('Content', decode_utf8 => 0), ); my $entity = MIME::Entity->new(); $entity->head->add("Content-Type", $self->GetHeader("Content-Type")); $entity->bodyhandle( MIME::Body::Scalar->new( $content ) ); my $from = RT::I18N::_FindOrGuessCharset($entity); $from = 'utf-8' if not $from or not Encode::find_encoding($from); my $to = RT::I18N::_CanonicalizeCharset( $self->OriginalEncoding || 'utf-8' ); local $@; eval { Encode::from_to($content, $from => $to) }; if ($@) { $RT::Logger->error("Could not convert attachment from $from to $to: ".$@); } return $content; } =head2 OriginalEncoding Returns the attachment's original encoding. =cut sub OriginalEncoding { my $self = shift; return $self->GetHeader('X-RT-Original-Encoding'); } =head2 ContentLength Returns length of L in bytes. =cut sub ContentLength { my $self = shift; return undef unless $self->TransactionObj->CurrentUserCanSee; my $len = $self->GetHeader('Content-Length'); unless ( defined $len ) { use bytes; no warnings 'uninitialized'; $len = length($self->Content) || 0; $self->SetHeader('Content-Length' => $len); } return $len; } =head2 FriendlyContentLength Returns L in bytes, kilobytes, or megabytes as most appropriate. The size is suffixed with C, C, or C and the returned string is localized. Returns the empty string if the L is 0 or undefined. =cut sub FriendlyContentLength { my $self = shift; my $size = $self->ContentLength; return '' unless $size; my $res = ''; if ( $size > 1024*1024 ) { $res = $self->loc( "[_1]MiB", int( $size / 1024 / 102.4 ) / 10 ); } elsif ( $size > 1024 ) { $res = $self->loc( "[_1]KiB", int( $size / 102.4 ) / 10 ); } else { $res = $self->loc( "[_1]B", $size ); } return $res; } =head2 ContentAsMIME [Children => 1] Returns MIME entity built from this attachment. If the optional parameter C is set to a true value, the children are recursively added to the entity. =cut sub _EncodeHeaderToMIME { my ( $self, $header_name, $header_val ) = @_; if ($header_name =~ /^Content-/i) { my $params = MIME::Field::ParamVal->parse_params($header_val); $header_val = delete $params->{'_'}; foreach my $key ( sort keys %$params ) { my $value = $params->{$key}; if ( $value =~ /[^\x00-\x7f]/ ) { # check for non-ASCII $value = q{UTF-8''} . URI->new( Encode::encode('UTF-8', $value) ); $value =~ s/(["\\])/\\$1/g; $header_val .= qq{; ${key}*="$value"}; } else { $header_val .= qq{; $key="$value"}; } } } elsif ( $header_name =~ /^(?:Resent-)?(?:To|From|B?Cc|Sender|Reply-To)$/i ) { my @addresses = RT::EmailParser->ParseEmailAddress( $header_val ); foreach my $address ( @addresses ) { foreach my $field (qw(phrase comment)) { my $v = $address->$field() or next; $v = RT::Interface::Email::EncodeToMIME( String => $v ); $address->$field($v); } } $header_val = join ', ', map $_->format, @addresses; } else { $header_val = RT::Interface::Email::EncodeToMIME( String => $header_val ); } return $header_val; } sub ContentAsMIME { my $self = shift; my %opts = ( Children => 0, @_ ); my $entity = MIME::Entity->new(); foreach my $header ($self->SplitHeaders) { my ($h_key, $h_val) = split /:/, $header, 2; $entity->head->add( $h_key, $self->_EncodeHeaderToMIME($h_key, $h_val) ); } if ($entity->is_multipart) { if ($opts{'Children'} and not $self->IsMessageContentType) { my $children = $self->Children; while (my $child = $children->Next) { $entity->add_part( $child->ContentAsMIME(%opts) ); } } } else { # since we want to return original content, let's use original encoding $entity->head->mime_attr( "Content-Type.charset" => $self->OriginalEncoding ) if $self->OriginalEncoding; $entity->bodyhandle( MIME::Body::Scalar->new( $self->OriginalContent ) ); } return $entity; } =head2 IsMessageContentType Returns a boolean indicating if the Content-Type of this attachment is a C subtype. =cut sub IsMessageContentType { my $self = shift; return $self->ContentType =~ m{^\s*message/}i ? 1 : 0; } =head2 Addresses Returns a hashref of all addresses related to this attachment. The keys of the hash are C, C, C, C, C and C. The values are references to lists of L objects. =cut our @ADDRESS_HEADERS = qw(From To Cc Bcc RT-Send-Cc RT-Send-Bcc); sub Addresses { my $self = shift; my %data = (); my $current_user_address = lc($self->CurrentUser->EmailAddress || ''); foreach my $hdr (@ADDRESS_HEADERS) { my @Addresses; my $line = $self->GetHeader($hdr); foreach my $AddrObj ( Email::Address->parse( $line )) { my $address = $AddrObj->address; $address = lc RT::User->CanonicalizeEmailAddress($address); next if $current_user_address eq $address; next if RT::EmailParser->IsRTAddress($address); push @Addresses, $AddrObj ; } $data{$hdr} = \@Addresses; } return \%data; } =head2 NiceHeaders Returns a multi-line string of the To, From, Cc, Date and Subject headers. =cut sub NiceHeaders { my $self = shift; my $hdrs = ""; my @hdrs = $self->_SplitHeaders; while (my $str = shift @hdrs) { next unless $str =~ /^(To|From|RT-Send-Cc|Cc|Bcc|Date|Subject):/i; $hdrs .= $str . "\n"; $hdrs .= shift( @hdrs ) . "\n" while ($hdrs[0] =~ /^[ \t]+/); } return $hdrs; } =head2 Headers Returns this object's headers as a string. This method specifically removes the RT-Send-Bcc: header, so as to never reveal to whom RT sent a Bcc. We need to record the RT-Send-Cc and RT-Send-Bcc values so that we can actually send out mail. The mailing rules are separated from the ticket update code by an abstraction barrier that makes it impossible to pass this data directly. =cut sub Headers { return join("\n", $_[0]->SplitHeaders); } =head2 EncodedHeaders Takes encoding as argument and returns the attachment's headers as octets in encoded using the encoding. This is not protection using quoted printable or base64 encoding. =cut sub EncodedHeaders { my $self = shift; my $encoding = shift || 'utf8'; return Encode::encode( $encoding, $self->Headers ); } =head2 GetHeader $TAG Returns the value of the header Tag as a string. This bypasses the weeding out done in Headers() above. =cut sub GetHeader { my $self = shift; my $tag = shift; foreach my $line ($self->_SplitHeaders) { next unless $line =~ /^\Q$tag\E:\s+(.*)$/si; #if we find the header, return its value return ($1); } # we found no header. return an empty string return undef; } =head2 DelHeader $TAG Delete a field from the attachment's headers. =cut sub DelHeader { my $self = shift; my $tag = shift; my $newheader = ''; foreach my $line ($self->_SplitHeaders) { next if $line =~ /^\Q$tag\E:\s+/i; $newheader .= "$line\n"; } return $self->__Set( Field => 'Headers', Value => $newheader); } =head2 AddHeader $TAG, $VALUE, ... Add one or many fields to the attachment's headers. =cut sub AddHeader { my $self = shift; my $newheader = $self->__Value( 'Headers' ); while ( my ($tag, $value) = splice @_, 0, 2 ) { $value = $self->_CanonicalizeHeaderValue($value); $newheader .= "$tag: $value\n"; } return $self->__Set( Field => 'Headers', Value => $newheader); } =head2 SetHeader ( 'Tag', 'Value' ) Replace or add a Header to the attachment's headers. =cut sub SetHeader { my $self = shift; my $tag = shift; my $value = $self->_CanonicalizeHeaderValue(shift); my $replaced = 0; my $newheader = ''; foreach my $line ( $self->_SplitHeaders ) { if ( $line =~ /^\Q$tag\E:\s+/i ) { # replace first instance, skip all the rest unless ($replaced) { $newheader .= "$tag: $value\n"; $replaced = 1; } } else { $newheader .= "$line\n"; } } $newheader .= "$tag: $value\n" unless $replaced; $self->__Set( Field => 'Headers', Value => $newheader); } sub _CanonicalizeHeaderValue { my $self = shift; my $value = shift; $value = '' unless defined $value; $value =~ s/\s+$//s; $value =~ s/\r*\n/\n /g; return $value; } =head2 SplitHeaders Returns an array of this attachment object's headers, with one header per array entry. Multiple lines are folded. B returns C field. =cut sub SplitHeaders { my $self = shift; return (grep !/^RT-Send-Bcc/i, $self->_SplitHeaders(@_) ); } =head2 _SplitHeaders Returns an array of this attachment object's headers, with one header per array entry. multiple lines are folded. =cut sub _SplitHeaders { my $self = shift; my $headers = (shift || $self->_Value('Headers')); my @headers; # XXX TODO: splitting on \n\w is _wrong_ as it treats \n[ as a valid # continuation, which it isn't. The correct split pattern, per RFC 2822, # is /\n(?=[^ \t]|\z)/. That is, only "\n " or "\n\t" is a valid # continuation. Older values of X-RT-GnuPG-Status contain invalid # continuations and rely on this bogus split pattern, however, so it is # left as-is for now. for (split(/\n(?=\w|\z)/,$headers)) { push @headers, $_; } return(@headers); } sub Encrypt { my $self = shift; my $txn = $self->TransactionObj; return (0, $self->loc('Permission Denied')) unless $txn->CurrentUserCanSee; return (0, $self->loc('Permission Denied')) unless $txn->TicketObj->CurrentUserHasRight('ModifyTicket'); return (0, $self->loc('Cryptography is disabled')) unless RT->Config->Get('Crypt')->{'Enable'}; return (0, $self->loc('Attachments encryption is disabled')) unless RT->Config->Get('Crypt')->{'AllowEncryptDataInDB'}; my $type = $self->ContentType; if ( $type =~ /^x-application-rt\/[^-]+-encrypted/i ) { return (1, $self->loc('Already encrypted')); } elsif ( $type =~ /^multipart\//i ) { return (1, $self->loc('No need to encrypt')); } my $queue = $txn->TicketObj->QueueObj; my $encrypt_for; foreach my $address ( grep $_, $queue->CorrespondAddress, $queue->CommentAddress, RT->Config->Get('CorrespondAddress'), RT->Config->Get('CommentAddress'), ) { my %res = RT::Crypt->GetKeysInfo( Key => $address, Type => 'private' ); next if $res{'exit_code'} || !$res{'info'}; %res = RT::Crypt->GetKeysForEncryption( $address ); next if $res{'exit_code'} || !$res{'info'}; $encrypt_for = $address; } unless ( $encrypt_for ) { return (0, $self->loc('No key suitable for encryption')); } my $content = $self->Content; my %res = RT::Crypt->SignEncryptContent( Content => \$content, Sign => 0, Encrypt => 1, Recipients => [ $encrypt_for ], ); if ( $res{'exit_code'} ) { return (0, $self->loc('Encryption error; contact the administrator')); } my ($status, $msg) = $self->__Set( Field => 'Content', Value => $content ); unless ( $status ) { return ($status, $self->loc("Couldn't replace content with encrypted data: [_1]", $msg)); } $type = qq{x-application-rt\/$res{'Protocol'}-encrypted; original-type="$type"}; $self->__Set( Field => 'ContentType', Value => $type ); $self->SetHeader( 'Content-Type' => $type ); return (1, $self->loc('Successfuly encrypted data')); } sub Decrypt { my $self = shift; my $txn = $self->TransactionObj; return (0, $self->loc('Permission Denied')) unless $txn->CurrentUserCanSee; return (0, $self->loc('Permission Denied')) unless $txn->TicketObj->CurrentUserHasRight('ModifyTicket'); return (0, $self->loc('Cryptography is disabled')) unless RT->Config->Get('Crypt')->{'Enable'}; my $type = $self->ContentType; my $protocol; if ( $type =~ /^x-application-rt\/([^-]+)-encrypted/i ) { $protocol = $1; $protocol =~ s/gpg/gnupg/; # backwards compatibility ($type) = ($type =~ /original-type="(.*)"/i); $type ||= 'application/octet-stream'; } else { return (1, $self->loc('Is not encrypted')); } my $queue = $txn->TicketObj->QueueObj; my @addresses = $queue->CorrespondAddress, $queue->CommentAddress, RT->Config->Get('CorrespondAddress'), RT->Config->Get('CommentAddress') ; my $content = $self->Content; my %res = RT::Crypt->DecryptContent( Protocol => $protocol, Content => \$content, Recipients => \@addresses, ); if ( $res{'exit_code'} ) { return (0, $self->loc('Decryption error; contact the administrator')); } my ($status, $msg) = $self->__Set( Field => 'Content', Value => $content ); unless ( $status ) { return ($status, $self->loc("Couldn't replace content with decrypted data: [_1]", $msg)); } $self->__Set( Field => 'ContentType', Value => $type ); $self->SetHeader( 'Content-Type' => $type ); return (1, $self->loc('Successfuly decrypted data')); } =head2 _Value Takes the name of a table column. Returns its value as a string, if the user passes an ACL check =cut sub _Value { my $self = shift; my $field = shift; #if the field is public, return it. if ( $self->_Accessible( $field, 'public' ) ) { return ( $self->__Value( $field, @_ ) ); } return undef unless $self->TransactionObj->CurrentUserCanSee; return $self->__Value( $field, @_ ); } # Attachments don't change; by adding this cache config directive, # we don't lose pathalogically on long tickets. sub _CacheConfig { { 'cache_for_sec' => 180, } } =head2 id Returns the current value of id. (In the database, id is stored as int(11).) =cut =head2 TransactionId Returns the current value of TransactionId. (In the database, TransactionId is stored as int(11).) =head2 SetTransactionId VALUE Set TransactionId to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, TransactionId will be stored as a int(11).) =cut =head2 Parent Returns the current value of Parent. (In the database, Parent is stored as int(11).) =head2 SetParent VALUE Set Parent to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Parent will be stored as a int(11).) =cut =head2 MessageId Returns the current value of MessageId. (In the database, MessageId is stored as varchar(160).) =head2 SetMessageId VALUE Set MessageId to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, MessageId will be stored as a varchar(160).) =cut =head2 Subject Returns the current value of Subject. (In the database, Subject is stored as varchar(255).) =head2 SetSubject VALUE Set Subject to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Subject will be stored as a varchar(255).) =cut =head2 Filename Returns the current value of Filename. (In the database, Filename is stored as varchar(255).) =head2 SetFilename VALUE Set Filename to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Filename will be stored as a varchar(255).) =cut =head2 ContentType Returns the current value of ContentType. (In the database, ContentType is stored as varchar(80).) =head2 SetContentType VALUE Set ContentType to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, ContentType will be stored as a varchar(80).) =cut =head2 ContentEncoding Returns the current value of ContentEncoding. (In the database, ContentEncoding is stored as varchar(80).) =head2 SetContentEncoding VALUE Set ContentEncoding to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, ContentEncoding will be stored as a varchar(80).) =cut =head2 Content Returns the current value of Content. (In the database, Content is stored as longblob.) =head2 SetContent VALUE Set Content to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Content will be stored as a longblob.) =cut =head2 Headers Returns the current value of Headers. (In the database, Headers is stored as longtext.) =head2 SetHeaders VALUE Set Headers to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Headers will be stored as a longtext.) =cut =head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) =cut =head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) =cut sub _CoreAccessible { { id => {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, TransactionId => {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Parent => {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, MessageId => {read => 1, write => 1, sql_type => 12, length => 160, is_blob => 0, is_numeric => 0, type => 'varchar(160)', default => ''}, Subject => {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, Filename => {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, ContentType => {read => 1, write => 1, sql_type => 12, length => 80, is_blob => 0, is_numeric => 0, type => 'varchar(80)', default => ''}, ContentEncoding => {read => 1, write => 1, sql_type => 12, length => 80, is_blob => 0, is_numeric => 0, type => 'varchar(80)', default => ''}, Content => {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'longblob', default => ''}, Headers => {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'longtext', default => ''}, Creator => {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, } }; sub FindDependencies { my $self = shift; my ($walker, $deps) = @_; $self->SUPER::FindDependencies($walker, $deps); $deps->Add( out => $self->TransactionObj ); } sub __DependsOn { my $self = shift; my %args = ( Shredder => undef, Dependencies => undef, @_, ); my $deps = $args{'Dependencies'}; my $list = []; # Nested attachments my $objs = RT::Attachments->new( $self->CurrentUser ); $objs->Limit( FIELD => 'Parent', OPERATOR => '=', VALUE => $self->Id ); $objs->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => $self->Id ); push( @$list, $objs ); $deps->_PushDependencies( BaseObject => $self, Flags => RT::Shredder::Constants::DEPENDS_ON, TargetObjects => $list, Shredder => $args{'Shredder'} ); return $self->SUPER::__DependsOn( %args ); } RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/Attachments.pm000644 000765 000024 00000012736 12555754775 016620 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} =head1 NAME RT::Attachments - a collection of RT::Attachment objects =head1 SYNOPSIS use RT::Attachments; =head1 DESCRIPTION This module should never be called directly by client code. it's an internal module which should only be accessed through exported APIs in Ticket, Queue and other similar objects. =head1 METHODS =cut package RT::Attachments; use strict; use warnings; use base 'RT::SearchBuilder'; use RT::Attachment; sub Table { 'Attachments'} use RT::Attachment; sub _Init { my $self = shift; $self->{'table'} = "Attachments"; $self->{'primary_key'} = "id"; $self->OrderBy( FIELD => 'id', ORDER => 'ASC', ); return $self->SUPER::_Init( @_ ); } sub CleanSlate { my $self = shift; delete $self->{_sql_transaction_alias}; return $self->SUPER::CleanSlate( @_ ); } =head2 TransactionAlias Returns alias for transactions table with applied join condition. Always return the same alias, so if you want to build some complex or recursive joining then you have to create new alias youself. =cut sub TransactionAlias { my $self = shift; return $self->{'_sql_transaction_alias'} if $self->{'_sql_transaction_alias'}; return $self->{'_sql_transaction_alias'} = $self->Join( ALIAS1 => 'main', FIELD1 => 'TransactionId', TABLE2 => 'Transactions', FIELD2 => 'id', ); } =head2 ContentType (VALUE => 'text/plain', ENTRYAGGREGATOR => 'OR', OPERATOR => '=' ) Limit result set to attachments of ContentType 'TYPE'... =cut sub ContentType { my $self = shift; my %args = ( VALUE => 'text/plain', OPERATOR => '=', ENTRYAGGREGATOR => 'OR', @_ ); return $self->Limit ( %args, FIELD => 'ContentType' ); } =head2 ChildrenOf ID Limit result set to children of Attachment ID =cut sub ChildrenOf { my $self = shift; my $attachment = shift; return $self->Limit( FIELD => 'Parent', VALUE => $attachment ); } =head2 LimitNotEmpty Limit result set to attachments with not empty content. =cut sub LimitNotEmpty { my $self = shift; $self->Limit( ENTRYAGGREGATOR => 'AND', FIELD => 'Content', OPERATOR => 'IS NOT', VALUE => 'NULL', QUOTEVALUE => 0, ); # http://rt3.fsck.com/Ticket/Display.html?id=12483 if ( RT->Config->Get('DatabaseType') ne 'Oracle' ) { $self->Limit( ENTRYAGGREGATOR => 'AND', FIELD => 'Content', OPERATOR => '!=', VALUE => '', ); } return; } =head2 LimitByTicket $ticket_id Limit result set to attachments of a ticket. =cut sub LimitByTicket { my $self = shift; my $tid = shift; my $transactions = $self->TransactionAlias; $self->Limit( ENTRYAGGREGATOR => 'AND', ALIAS => $transactions, FIELD => 'ObjectType', VALUE => 'RT::Ticket', ); my $tickets = $self->Join( ALIAS1 => $transactions, FIELD1 => 'ObjectId', TABLE2 => 'Tickets', FIELD2 => 'id', ); $self->Limit( ENTRYAGGREGATOR => 'AND', ALIAS => $tickets, FIELD => 'EffectiveId', VALUE => $tid, ); return; } sub AddRecord { my $self = shift; my ($record) = @_; return unless $record->TransactionObj->CurrentUserCanSee; return $self->SUPER::AddRecord( $record ); } RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/Attribute.pm000644 000765 000024 00000037554 12555754775 016315 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} package RT::Attribute; use strict; use warnings; use base 'RT::Record'; sub Table {'Attributes'} use Storable qw/nfreeze thaw/; use MIME::Base64; =head1 NAME RT::Attribute_Overlay =head1 Content =cut # the acl map is a map of "name of attribute" and "what right the user must have on the associated object to see/edit it our $ACL_MAP = { SavedSearch => { create => 'EditSavedSearches', update => 'EditSavedSearches', delete => 'EditSavedSearches', display => 'ShowSavedSearches' }, }; # There are a number of attributes that users should be able to modify for themselves, such as saved searches # we could do this with a different set of "update" rights, but that gets very hacky very fast. this is even faster and even # hackier. we're hardcoding that a different set of rights are needed for attributes on oneself our $PERSONAL_ACL_MAP = { SavedSearch => { create => 'ModifySelf', update => 'ModifySelf', delete => 'ModifySelf', display => 'allow' }, }; =head2 LookupObjectRight { ObjectType => undef, ObjectId => undef, Name => undef, Right => { create, update, delete, display } } Returns the right that the user needs to have on this attribute's object to perform the related attribute operation. Returns "allow" if the right is otherwise unspecified. =cut sub LookupObjectRight { my $self = shift; my %args = ( ObjectType => undef, ObjectId => undef, Right => undef, Name => undef, @_); # if it's an attribute on oneself, check the personal acl map if (($args{'ObjectType'} eq 'RT::User') && ($args{'ObjectId'} eq $self->CurrentUser->Id)) { return('allow') unless ($PERSONAL_ACL_MAP->{$args{'Name'}}); return('allow') unless ($PERSONAL_ACL_MAP->{$args{'Name'}}->{$args{'Right'}}); return($PERSONAL_ACL_MAP->{$args{'Name'}}->{$args{'Right'}}); } # otherwise check the main ACL map else { return('allow') unless ($ACL_MAP->{$args{'Name'}}); return('allow') unless ($ACL_MAP->{$args{'Name'}}->{$args{'Right'}}); return($ACL_MAP->{$args{'Name'}}->{$args{'Right'}}); } } =head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: varchar(200) 'Name'. varchar(255) 'Content'. varchar(16) 'ContentType', varchar(64) 'ObjectType'. int(11) 'ObjectId'. You may pass a C instead of C and C. =cut sub Create { my $self = shift; my %args = ( Name => '', Description => '', Content => '', ContentType => '', Object => undef, @_); if ($args{Object} and UNIVERSAL::can($args{Object}, 'Id')) { $args{ObjectType} = $args{Object}->isa("RT::CurrentUser") ? "RT::User" : ref($args{Object}); $args{ObjectId} = $args{Object}->Id; } else { return(0, $self->loc("Required parameter '[_1]' not specified", 'Object')); } # object_right is the right that the user has to have on the object for them to have $right on this attribute my $object_right = $self->LookupObjectRight( Right => 'create', ObjectId => $args{'ObjectId'}, ObjectType => $args{'ObjectType'}, Name => $args{'Name'} ); if ($object_right eq 'deny') { return (0, $self->loc('Permission Denied')); } elsif ($object_right eq 'allow') { # do nothing, we're ok } elsif (!$self->CurrentUser->HasRight( Object => $args{Object}, Right => $object_right)) { return (0, $self->loc('Permission Denied')); } if (ref ($args{'Content'}) ) { eval {$args{'Content'} = $self->_SerializeContent($args{'Content'}); }; if ($@) { return(0, $@); } $args{'ContentType'} = 'storable'; } $self->SUPER::Create( Name => $args{'Name'}, Content => $args{'Content'}, ContentType => $args{'ContentType'}, Description => $args{'Description'}, ObjectType => $args{'ObjectType'}, ObjectId => $args{'ObjectId'}, ); } =head2 LoadByNameAndObject (Object => OBJECT, Name => NAME) Loads the Attribute named NAME for Object OBJECT. =cut sub LoadByNameAndObject { my $self = shift; my %args = ( Object => undef, Name => undef, @_, ); return ( $self->LoadByCols( Name => $args{'Name'}, ObjectType => ref($args{'Object'}), ObjectId => $args{'Object'}->Id, ) ); } =head2 _DeserializeContent DeserializeContent returns this Attribute's "Content" as a hashref. =cut sub _DeserializeContent { my $self = shift; my $content = shift; my $hashref; eval {$hashref = thaw(decode_base64($content))} ; if ($@) { $RT::Logger->error("Deserialization of attribute ".$self->Id. " failed"); } return($hashref); } =head2 Content Returns this attribute's content. If it's a scalar, returns a scalar If it's data structure returns a ref to that data structure. =cut sub Content { my $self = shift; # Here we call _Value to get the ACL check. my $content = $self->_Value('Content'); if ( ($self->__Value('ContentType') || '') eq 'storable') { eval {$content = $self->_DeserializeContent($content); }; if ($@) { $RT::Logger->error("Deserialization of content for attribute ".$self->Id. " failed. Attribute was: ".$content); } } return($content); } sub _SerializeContent { my $self = shift; my $content = shift; return( encode_base64(nfreeze($content))); } sub SetContent { my $self = shift; my $content = shift; # Call __Value to avoid ACL check. if ( ($self->__Value('ContentType')||'') eq 'storable' ) { # We eval the serialization because it will lose on a coderef. $content = eval { $self->_SerializeContent($content) }; if ($@) { $RT::Logger->error("Content couldn't be frozen: $@"); return(0, "Content couldn't be frozen"); } } my ($ok, $msg) = $self->_Set( Field => 'Content', Value => $content ); return ($ok, $self->loc("Attribute updated")) if $ok; return ($ok, $msg); } =head2 SubValue KEY Returns the subvalue for $key. =cut sub SubValue { my $self = shift; my $key = shift; my $values = $self->Content(); return undef unless ref($values); return($values->{$key}); } =head2 DeleteSubValue NAME Deletes the subvalue with the key NAME =cut sub DeleteSubValue { my $self = shift; my $key = shift; my $values = $self->Content(); delete $values->{$key}; $self->SetContent($values); } =head2 DeleteAllSubValues Deletes all subvalues for this attribute =cut sub DeleteAllSubValues { my $self = shift; $self->SetContent({}); } =head2 SetSubValues { } Takes a hash of keys and values and stores them in the content of this attribute. Each key B the existing key with the same name Returns a tuple of (status, message) =cut sub SetSubValues { my $self = shift; my %args = (@_); my $values = ($self->Content() || {} ); foreach my $key (keys %args) { $values->{$key} = $args{$key}; } $self->SetContent($values); } sub Object { my $self = shift; my $object_type = $self->__Value('ObjectType'); my $object; eval { $object = $object_type->new($self->CurrentUser) }; unless(UNIVERSAL::isa($object, $object_type)) { $RT::Logger->error("Attribute ".$self->Id." has a bogus object type - $object_type (".$@.")"); return(undef); } $object->Load($self->__Value('ObjectId')); return($object); } sub Delete { my $self = shift; unless ($self->CurrentUserHasRight('delete')) { return (0,$self->loc('Permission Denied')); } return($self->SUPER::Delete(@_)); } sub _Value { my $self = shift; unless ($self->CurrentUserHasRight('display')) { return (0,$self->loc('Permission Denied')); } return($self->SUPER::_Value(@_)); } sub _Set { my $self = shift; unless ($self->CurrentUserHasRight('update')) { return (0,$self->loc('Permission Denied')); } return($self->SUPER::_Set(@_)); } =head2 CurrentUserHasRight One of "display" "update" "delete" or "create" and returns 1 if the user has that right for attributes of this name for this object.Returns undef otherwise. =cut sub CurrentUserHasRight { my $self = shift; my $right = shift; # object_right is the right that the user has to have on the object for them to have $right on this attribute my $object_right = $self->LookupObjectRight( Right => $right, ObjectId => $self->__Value('ObjectId'), ObjectType => $self->__Value('ObjectType'), Name => $self->__Value('Name') ); return (1) if ($object_right eq 'allow'); return (0) if ($object_right eq 'deny'); return(1) if ($self->CurrentUser->HasRight( Object => $self->Object, Right => $object_right)); return(0); } =head1 TODO We should be deserializing the content on load and then enver again, rather than at every access =cut =head2 id Returns the current value of id. (In the database, id is stored as int(11).) =cut =head2 Name Returns the current value of Name. (In the database, Name is stored as varchar(255).) =head2 SetName VALUE Set Name to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Name will be stored as a varchar(255).) =cut =head2 Description Returns the current value of Description. (In the database, Description is stored as varchar(255).) =head2 SetDescription VALUE Set Description to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Description will be stored as a varchar(255).) =cut =head2 Content Returns the current value of Content. (In the database, Content is stored as blob.) =head2 SetContent VALUE Set Content to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Content will be stored as a blob.) =cut =head2 ContentType Returns the current value of ContentType. (In the database, ContentType is stored as varchar(16).) =head2 SetContentType VALUE Set ContentType to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, ContentType will be stored as a varchar(16).) =cut =head2 ObjectType Returns the current value of ObjectType. (In the database, ObjectType is stored as varchar(64).) =head2 SetObjectType VALUE Set ObjectType to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, ObjectType will be stored as a varchar(64).) =cut =head2 ObjectId Returns the current value of ObjectId. (In the database, ObjectId is stored as int(11).) =head2 SetObjectId VALUE Set ObjectId to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, ObjectId will be stored as a int(11).) =cut =head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) =cut =head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) =cut =head2 LastUpdatedBy Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) =cut =head2 LastUpdated Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) =cut sub _CoreAccessible { { id => {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Name => {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, Description => {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, Content => {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'blob', default => ''}, ContentType => {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''}, ObjectType => {read => 1, write => 1, sql_type => 12, length => 64, is_blob => 0, is_numeric => 0, type => 'varchar(64)', default => ''}, ObjectId => {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Creator => {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, LastUpdatedBy => {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, LastUpdated => {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, } }; sub FindDependencies { my $self = shift; my ($walker, $deps) = @_; $self->SUPER::FindDependencies($walker, $deps); $deps->Add( out => $self->Object ); } sub PreInflate { my $class = shift; my ($importer, $uid, $data) = @_; if ($data->{Object} and ref $data->{Object}) { my $on_uid = ${ $data->{Object} }; return if $importer->ShouldSkipTransaction($on_uid); } return $class->SUPER::PreInflate( $importer, $uid, $data ); } RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/Attributes.pm000644 000765 000024 00000012402 12555754775 016461 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} =head1 NAME RT::Attributes - collection of RT::Attribute objects =head1 SYNOPSIS use RT::Attributes; my $Attributes = RT::Attributes->new($CurrentUser); =head1 DESCRIPTION =head1 METHODS =cut package RT::Attributes; use strict; use warnings; use base 'RT::SearchBuilder'; use RT::Attribute; sub Table { 'Attributes'} sub _DoSearch { my $self = shift; $self->SUPER::_DoSearch(); # if _DoSearch doesn't fully succeed, 'must_redo_search' will be true # and call _BuildAccessTable then will result in a deep recursion if ( $self->{'must_redo_search'} ) { $RT::Logger->crit( "_DoSearch is not so successful as it still needs redo search, won't call _BuildAccessTable" ); } else { $self->_BuildAccessTable(); } } sub _BuildAccessTable { my $self = shift; delete $self->{'attr'}; while (my $attr = $self->Next) { push @{$self->{'attr'}->{$attr->Name}}, $attr; } } sub _AttrHash { my $self = shift; $self->_DoSearch if ($self->{'must_redo_search'} && $self->{'is_limited'}); unless ($self->{'attr'}) { $self->{'attr'}->{'__none'} = RT::Attribute->new($self->CurrentUser); } return ($self->{'attr'}); } =head2 Names Returns a list of the Names of all attributes for this object. =cut sub Names { my $self = shift; my @keys = keys %{$self->_AttrHash}; return(@keys); } =head2 Named STRING Returns an array of all the RT::Attribute objects with the name STRING =cut sub Named { my $self = shift; my $name = shift; my @attributes; if ($self->_AttrHash) { @attributes = @{($self->_AttrHash->{$name}||[])}; } return (@attributes); } =head2 DeleteEntry { Name => Content => , id => } Deletes attributes with the matching name and the matching content or id If Content and id are both undefined, delete all attributes with the matching name. =cut sub DeleteEntry { my $self = shift; my %args = ( Name => undef, Content => undef, id => undef, @_ ); my $found = 0; foreach my $attr ( $self->Named( $args{'Name'} ) ) { if ( ( !defined $args{'id'} and !defined $args{'Content'} ) or ( defined $args{'id'} and $attr->id eq $args{'id'} ) or ( defined $args{'Content'} and $attr->Content eq $args{'Content'} ) ) { my ($id, $msg) = $attr->Delete; return ($id, $msg) unless $id; $found = 1; } } return (0, "No entry found") unless $found; $self->RedoSearch; # XXX: above string must work but because of bug in DBIx::SB it doesn't, # to reproduce delete string below and run t/api/attribute-tests.t $self->_DoSearch; return (1, $self->loc('Attribute Deleted')); } =head2 LimitToObject $object Limit the Attributes to rights for the object $object. It needs to be an RT::Record class. =cut sub LimitToObject { my $self = shift; my $obj = shift; unless (eval { $obj->id} ){ return undef; } my $type = $obj->isa("RT::CurrentUser") ? "RT::User" : ref($obj); $self->Limit(FIELD => 'ObjectType', OPERATOR=> '=', VALUE => $type, ENTRYAGGREGATOR => 'OR'); $self->Limit(FIELD => 'ObjectId', OPERATOR=> '=', VALUE => $obj->id, ENTRYAGGREGATOR => 'OR', QUOTEVALUE => 0); } RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/Base.pm000644 000765 000024 00000010777 12555754775 015222 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} package RT::Base; use Carp (); use Scalar::Util (); use strict; use warnings; use vars qw(@EXPORT); @EXPORT=qw(loc CurrentUser); =head1 NAME RT::Base =head1 SYNOPSIS =head1 DESCRIPTION =head1 FUNCTIONS =cut =head2 CurrentUser If called with an argument, sets the current user to that user object. This will affect ACL decisions, etc. The argument can be either L or L object. Returns the current user object of L class. =cut sub CurrentUser { my $self = shift; if (@_) { $self->{'original_user'} = $self->{'user'}; my $current_user = $_[0]; if ( ref $current_user eq 'RT::User' ) { $self->{'user'} = RT::CurrentUser->new; $self->{'user'}->Load( $current_user->id ); } else { $self->{'user'} = $current_user; } # We need to weaken the CurrentUser ($self->{'user'}) reference # if the object in question is the currentuser object. # This avoids memory leaks. Scalar::Util::weaken($self->{'user'}) if ref $self->{'user'} && $self->{'user'} == $self; } return ( $self->{'user'} ); } sub OriginalUser { my $self = shift; if (@_) { $self->{'original_user'} = shift; Scalar::Util::weaken($self->{'original_user'}) if (ref($self->{'original_user'}) && $self->{'original_user'} == $self ); } return ( $self->{'original_user'} || $self->{'user'} ); } =head2 loc LOC_STRING l is a method which takes a loc string to this object's CurrentUser->LanguageHandle for localization. you call it like this: $self->loc("I have [quant,_1,concrete mixer,concrete mixers].", 6); In english, this would return: I have 6 concrete mixers. =cut sub loc { my $self = shift; if (my $user = $self->OriginalUser) { return $user->loc(@_); } else { Carp::confess("No currentuser"); return ("Critical error:$self has no CurrentUser", $self); } } sub loc_fuzzy { my $self = shift; if (my $user = $self->OriginalUser) { return $user->loc_fuzzy(@_); } else { Carp::confess("No currentuser"); return ("Critical error:$self has no CurrentUser", $self); } } sub _ImportOverlays { my $class = shift; my ($package,undef,undef) = caller(); $package =~ s|::|/|g; for my $type (qw(Overlay Vendor Local)) { my $filename = $package."_".$type.".pm"; eval { require $filename }; die $@ if ($@ && $@ !~ m{^Can't locate $filename}); } } __PACKAGE__->_ImportOverlays(); 1; rt-4.2.12/lib/RT/CachedGroupMember.pm000644 000765 000024 00000032425 12555754775 017656 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} package RT::CachedGroupMember; use strict; use warnings; use base 'RT::Record'; sub Table {'CachedGroupMembers'} =head1 NAME RT::CachedGroupMember =head1 SYNOPSIS use RT::CachedGroupMember; =head1 DESCRIPTION =head1 METHODS =cut # {{ Create =head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: 'Group' is the "top level" group we're building the cache for. This is an RT::Principal object 'Member' is the RT::Principal of the user or group we're adding to the cache. 'ImmediateParent' is the RT::Principal of the group that this principal belongs to to get here int(11) 'Via' is an internal reference to CachedGroupMembers->Id of the "parent" record of this cached group member. It should be empty if this member is a "direct" member of this group. (In that case, it will be set to this cached group member's id after creation) This routine should _only_ be called by GroupMember->Create =cut sub Create { my $self = shift; my %args = ( Group => '', Member => '', ImmediateParent => '', Via => '0', Disabled => '0', @_ ); unless ( $args{'Member'} && UNIVERSAL::isa( $args{'Member'}, 'RT::Principal' ) && $args{'Member'}->Id ) { $RT::Logger->debug("$self->Create: bogus Member argument"); } unless ( $args{'Group'} && UNIVERSAL::isa( $args{'Group'}, 'RT::Principal' ) && $args{'Group'}->Id ) { $RT::Logger->debug("$self->Create: bogus Group argument"); } unless ( $args{'ImmediateParent'} && UNIVERSAL::isa( $args{'ImmediateParent'}, 'RT::Principal' ) && $args{'ImmediateParent'}->Id ) { $RT::Logger->debug("$self->Create: bogus ImmediateParent argument"); } # If the parent group for this group member is disabled, it's disabled too, along with all its children if ( $args{'ImmediateParent'}->Disabled ) { $args{'Disabled'} = $args{'ImmediateParent'}->Disabled; } my $id = $self->SUPER::Create( GroupId => $args{'Group'}->Id, MemberId => $args{'Member'}->Id, ImmediateParentId => $args{'ImmediateParent'}->Id, Disabled => $args{'Disabled'}, Via => $args{'Via'}, ); unless ($id) { $RT::Logger->warning( "Couldn't create " . $args{'Member'} . " as a cached member of " . $args{'Group'}->Id . " via " . $args{'Via'} ); return (undef); #this will percolate up and bail out of the transaction } if ( $self->__Value('Via') == 0 ) { my ( $vid, $vmsg ) = $self->__Set( Field => 'Via', Value => $id ); unless ($vid) { $RT::Logger->warning( "Due to a via error, couldn't create " . $args{'Member'} . " as a cached member of " . $args{'Group'}->Id . " via " . $args{'Via'} ); return (undef) ; #this will percolate up and bail out of the transaction } } return $id if $args{'Member'}->id == $args{'Group'}->id; if ( $args{'Member'}->IsGroup() ) { my $GroupMembers = $args{'Member'}->Object->MembersObj(); while ( my $member = $GroupMembers->Next() ) { my $cached_member = RT::CachedGroupMember->new( $self->CurrentUser ); my $c_id = $cached_member->Create( Group => $args{'Group'}, Member => $member->MemberObj, ImmediateParent => $args{'Member'}, Disabled => $args{'Disabled'}, Via => $id ); unless ($c_id) { return (undef); #percolate the error upwards. # the caller will log an error and abort the transaction } } } return ($id); } =head2 Delete Deletes the current CachedGroupMember from the group it's in and cascades the delete to all submembers. This routine could be completely excised if mysql supported foreign keys with cascading deletes. =cut sub Delete { my $self = shift; my $member = $self->MemberObj(); if ( $member->IsGroup ) { my $deletable = RT::CachedGroupMembers->new( $self->CurrentUser ); $deletable->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => $self->id ); $deletable->Limit( FIELD => 'Via', OPERATOR => '=', VALUE => $self->id ); while ( my $kid = $deletable->Next ) { my $kid_err = $kid->Delete(); unless ($kid_err) { $RT::Logger->error( "Couldn't delete CachedGroupMember " . $kid->Id ); return (undef); } } } my $ret = $self->SUPER::Delete(); unless ($ret) { $RT::Logger->error( "Couldn't delete CachedGroupMember " . $self->Id ); return (undef); } return $ret; } =head2 SetDisabled SetDisableds the current CachedGroupMember from the group it's in and cascades the SetDisabled to all submembers. This routine could be completely excised if mysql supported foreign keys with cascading SetDisableds. =cut sub SetDisabled { my $self = shift; my $val = shift; # if it's already disabled, we're good. return (1) if ( $self->__Value('Disabled') == $val); my $err = $self->_Set(Field => 'Disabled', Value => $val); my ($retval, $msg) = $err->as_array(); unless ($retval) { $RT::Logger->error( "Couldn't SetDisabled CachedGroupMember " . $self->Id .": $msg"); return ($err); } my $member = $self->MemberObj(); if ( $member->IsGroup ) { my $deletable = RT::CachedGroupMembers->new( $self->CurrentUser ); $deletable->Limit( FIELD => 'Via', OPERATOR => '=', VALUE => $self->id ); $deletable->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => $self->id ); while ( my $kid = $deletable->Next ) { my $kid_err = $kid->SetDisabled($val ); unless ($kid_err) { $RT::Logger->error( "Couldn't SetDisabled CachedGroupMember " . $kid->Id ); return ($kid_err); } } } return ($err); } =head2 GroupObj Returns the RT::Principal object for this group Group =cut sub GroupObj { my $self = shift; my $principal = RT::Principal->new( $self->CurrentUser ); $principal->Load( $self->GroupId ); return ($principal); } =head2 ImmediateParentObj Returns the RT::Principal object for this group ImmediateParent =cut sub ImmediateParentObj { my $self = shift; my $principal = RT::Principal->new( $self->CurrentUser ); $principal->Load( $self->ImmediateParentId ); return ($principal); } =head2 MemberObj Returns the RT::Principal object for this group member =cut sub MemberObj { my $self = shift; my $principal = RT::Principal->new( $self->CurrentUser ); $principal->Load( $self->MemberId ); return ($principal); } # }}} =head2 id Returns the current value of id. (In the database, id is stored as int(11).) =cut =head2 GroupId Returns the current value of GroupId. (In the database, GroupId is stored as int(11).) =head2 SetGroupId VALUE Set GroupId to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, GroupId will be stored as a int(11).) =cut =head2 MemberId Returns the current value of MemberId. (In the database, MemberId is stored as int(11).) =head2 SetMemberId VALUE Set MemberId to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, MemberId will be stored as a int(11).) =cut =head2 Via Returns the current value of Via. (In the database, Via is stored as int(11).) =head2 SetVia VALUE Set Via to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Via will be stored as a int(11).) =cut =head2 ImmediateParentId Returns the current value of ImmediateParentId. (In the database, ImmediateParentId is stored as int(11).) =head2 SetImmediateParentId VALUE Set ImmediateParentId to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, ImmediateParentId will be stored as a int(11).) =cut =head2 Disabled Returns the current value of Disabled. (In the database, Disabled is stored as smallint(6).) =head2 SetDisabled VALUE Set Disabled to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Disabled will be stored as a smallint(6).) =cut sub _CoreAccessible { { id => {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, GroupId => {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, MemberId => {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Via => {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, ImmediateParentId => {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Disabled => {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'}, } }; sub Serialize { die "CachedGroupMembers should never be serialized"; } sub __DependsOn { my $self = shift; my %args = ( Shredder => undef, Dependencies => undef, @_, ); my $deps = $args{'Dependencies'}; my $list = []; # deep memebership my $objs = RT::CachedGroupMembers->new( $self->CurrentUser ); $objs->Limit( FIELD => 'Via', VALUE => $self->Id ); $objs->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => $self->Id ); push( @$list, $objs ); # principal lost group membership and lost some rights which he could delegate to # some body # XXX: Here is problem cause HasMemberRecursively would return true allways # cause we didn't delete anything yet. :( # if pricipal is not member anymore(could be via other groups) then proceed if( $self->GroupObj->Object->HasMemberRecursively( $self->MemberObj ) ) { my $acl = RT::ACL->new( $self->CurrentUser ); $acl->LimitToPrincipal( Id => $self->GroupId ); } $deps->_PushDependencies( BaseObject => $self, Flags => RT::Shredder::Constants::DEPENDS_ON, TargetObjects => $list, Shredder => $args{'Shredder'} ); return $self->SUPER::__DependsOn( %args ); } RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/CachedGroupMembers.pm000644 000765 000024 00000011053 12555754775 020033 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} =head1 NAME RT::CachedGroupMembers - a collection of RT::GroupMember objects =head1 SYNOPSIS use RT::CachedGroupMembers; =head1 DESCRIPTION =head1 METHODS =cut package RT::CachedGroupMembers; use strict; use warnings; use base 'RT::SearchBuilder'; use RT::CachedGroupMember; sub Table { 'CachedGroupMembers'} # {{{ LimitToUsers =head2 LimitToUsers Limits this search object to users who are members of this group This is really useful when you want to have your UI separate out groups from users for display purposes =cut sub LimitToUsers { my $self = shift; my $principals = $self->Join( ALIAS1 => 'main', FIELD1 => 'MemberId', TABLE2 => 'Principals', FIELD2 =>'id' ); $self->Limit( ALIAS => $principals, FIELD => 'PrincipalType', VALUE => 'User', ENTRYAGGREGATOR => 'OR', ); } =head2 LimitToGroups Limits this search object to Groups who are members of this group This is really useful when you want to have your UI separate out groups from users for display purposes =cut sub LimitToGroups { my $self = shift; my $principals = $self->Join( ALIAS1 => 'main', FIELD1 => 'MemberId', TABLE2 => 'Principals', FIELD2 =>'id' ); $self->Limit( ALIAS => $principals, FIELD => 'PrincipalType', VALUE => 'Group', ENTRYAGGREGATOR => 'OR', ); } =head2 LimitToMembersOfGroup PRINCIPAL_ID Takes a Principal Id as its only argument. Limits the current search principals which are _directly_ members of the group which has PRINCIPAL_ID as its principal id. =cut sub LimitToMembersOfGroup { my $self = shift; my $group = shift; return ($self->Limit( VALUE => $group, FIELD => 'GroupId', ENTRYAGGREGATOR => 'OR', )); } =head2 LimitToGroupsWithMember PRINCIPAL_ID Takes a Principal Id as its only argument. Limits the current search to groups which contain PRINCIPAL_ID as a member or submember. This function gets used by GroupMember->Create to populate subgroups =cut sub LimitToGroupsWithMember { my $self = shift; my $member = shift; return ($self->Limit( VALUE => $member || '0', FIELD => 'MemberId', ENTRYAGGREGATOR => 'OR', QUOTEVALUE => 0 )); } # }}} RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/Class.pm000644 000765 000024 00000035757 12555754775 015422 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} package RT::Class; use strict; use warnings; use base 'RT::Record'; use RT::System; use RT::CustomFields; use RT::ACL; use RT::Articles; use RT::ObjectClass; use RT::ObjectClasses; use Role::Basic 'with'; with "RT::Record::Role::Rights"; sub Table {'Classes'} =head2 Load IDENTIFIER Loads a class, either by name or by id =cut sub Load { my $self = shift; my $id = shift ; return unless $id; if ( $id =~ /^\d+$/ ) { $self->SUPER::Load($id); } else { $self->LoadByCols( Name => $id ); } } __PACKAGE__->AddRight( Staff => SeeClass => 'See that this class exists'); # loc __PACKAGE__->AddRight( Staff => CreateArticle => 'Create articles in this class'); # loc __PACKAGE__->AddRight( General => ShowArticle => 'See articles in this class'); # loc __PACKAGE__->AddRight( Staff => ShowArticleHistory => 'See changes to articles in this class'); # loc __PACKAGE__->AddRight( General => SeeCustomField => 'View custom field values' ); # loc __PACKAGE__->AddRight( Staff => ModifyArticle => 'Modify or delete articles in this class'); # loc __PACKAGE__->AddRight( Staff => ModifyArticleTopics => 'Modify topics for articles in this class'); # loc __PACKAGE__->AddRight( Staff => ModifyCustomField => 'Modify custom field values' ); # loc __PACKAGE__->AddRight( Admin => AdminClass => 'Modify metadata and custom fields for this class'); # loc __PACKAGE__->AddRight( Admin => AdminTopics => 'Modify topic hierarchy associated with this class'); # loc __PACKAGE__->AddRight( Admin => ShowACL => 'Display Access Control List'); # loc __PACKAGE__->AddRight( Admin => ModifyACL => 'Create, modify and delete Access Control List entries'); # loc __PACKAGE__->AddRight( Staff => DeleteArticle => 'Delete articles in this class'); # loc # {{{ Create =head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: varchar(255) 'Name'. varchar(255) 'Description'. int(11) 'SortOrder'. =cut sub Create { my $self = shift; my %args = ( Name => '', Description => '', SortOrder => '0', HotList => 0, @_ ); unless ( $self->CurrentUser->HasRight( Right => 'AdminClass', Object => $RT::System ) ) { return ( 0, $self->loc('Permission Denied') ); } $self->SUPER::Create( Name => $args{'Name'}, Description => $args{'Description'}, SortOrder => $args{'SortOrder'}, HotList => $args{'HotList'}, ); } sub ValidateName { my $self = shift; my $newval = shift; return undef unless ($newval); my $obj = RT::Class->new($RT::SystemUser); $obj->Load($newval); return undef if $obj->id && ( !$self->id || $self->id != $obj->id ); return $self->SUPER::ValidateName($newval); } # }}} # }}} # {{{ ACCESS CONTROL # {{{ sub _Set sub _Set { my $self = shift; unless ( $self->CurrentUserHasRight('AdminClass') ) { return ( 0, $self->loc('Permission Denied') ); } return ( $self->SUPER::_Set(@_) ); } # }}} # {{{ sub _Value sub _Value { my $self = shift; unless ( $self->CurrentUserHasRight('SeeClass') ) { return (undef); } return ( $self->__Value(@_) ); } # }}} sub ArticleCustomFields { my $self = shift; my $cfs = RT::CustomFields->new( $self->CurrentUser ); if ( $self->CurrentUserHasRight('SeeClass') ) { $cfs->SetContextObject( $self ); $cfs->LimitToGlobalOrObjectId( $self->Id ); $cfs->LimitToLookupType( RT::Article->CustomFieldLookupType ); $cfs->ApplySortOrder; } return ($cfs); } =head1 AppliedTo Returns collection of Queues this Class is applied to. Doesn't takes into account if object is applied globally. =cut sub AppliedTo { my $self = shift; my ($res, $ocfs_alias) = $self->_AppliedTo; return $res unless $res; $res->Limit( ALIAS => $ocfs_alias, FIELD => 'id', OPERATOR => 'IS NOT', VALUE => 'NULL', ); return $res; } =head1 NotAppliedTo Returns collection of Queues this Class is not applied to. Doesn't takes into account if object is applied globally. =cut sub NotAppliedTo { my $self = shift; my ($res, $ocfs_alias) = $self->_AppliedTo; return $res unless $res; $res->Limit( ALIAS => $ocfs_alias, FIELD => 'id', OPERATOR => 'IS', VALUE => 'NULL', ); return $res; } sub _AppliedTo { my $self = shift; my $res = RT::Queues->new( $self->CurrentUser ); $res->OrderBy( FIELD => 'Name' ); my $ocfs_alias = $res->Join( TYPE => 'LEFT', ALIAS1 => 'main', FIELD1 => 'id', TABLE2 => 'ObjectClasses', FIELD2 => 'ObjectId', ); $res->Limit( LEFTJOIN => $ocfs_alias, ALIAS => $ocfs_alias, FIELD => 'Class', VALUE => $self->id, ); return ($res, $ocfs_alias); } =head2 IsApplied Takes object id and returns corresponding L record if this Class is applied to the object. Use 0 to check if Class is applied globally. =cut sub IsApplied { my $self = shift; my $id = shift; return unless defined $id; my $oc = RT::ObjectClass->new( $self->CurrentUser ); $oc->LoadByCols( Class=> $self->id, ObjectId => $id, ObjectType => ( $id ? 'RT::Queue' : 'RT::System' )); return undef unless $oc->id; return $oc; } =head2 AddToObject OBJECT Apply this Class to a single object, to start with we support Queues Takes an object =cut sub AddToObject { my $self = shift; my $object = shift; my $id = $object->Id || 0; unless ( $object->CurrentUserHasRight('AdminClass') ) { return ( 0, $self->loc('Permission Denied') ); } my $queue = RT::Queue->new( $self->CurrentUser ); if ( $id ) { my ($ok, $msg) = $queue->Load( $id ); unless ($ok) { return ( 0, $self->loc('Invalid Queue, unable to apply Class: [_1]',$msg ) ); } } if ( $self->IsApplied( $id ) ) { return ( 0, $self->loc("Class is already applied to [_1]",$queue->Name) ); } if ( $id ) { # applying locally return (0, $self->loc("Class is already applied Globally") ) if $self->IsApplied( 0 ); } else { my $applied = RT::ObjectClasses->new( $self->CurrentUser ); $applied->LimitToClass( $self->id ); while ( my $record = $applied->Next ) { $record->Delete; } } my $oc = RT::ObjectClass->new( $self->CurrentUser ); my ( $oid, $msg ) = $oc->Create( ObjectId => $id, Class => $self->id, ObjectType => ( $id ? 'RT::Queue' : 'RT::System' ), ); return ( $oid, $msg ); } =head2 RemoveFromObject OBJECT Remove this class from a single queue object =cut sub RemoveFromObject { my $self = shift; my $object = shift; my $id = $object->Id || 0; unless ( $object->CurrentUserHasRight('AdminClass') ) { return ( 0, $self->loc('Permission Denied') ); } my $ocf = $self->IsApplied( $id ); unless ( $ocf ) { return ( 0, $self->loc("This class does not apply to that object") ); } # XXX: Delete doesn't return anything my ( $oid, $msg ) = $ocf->Delete; return ( $oid, $msg ); } sub SubjectOverride { my $self = shift; my $override = $self->FirstAttribute('SubjectOverride'); return $override ? $override->Content : 0; } sub SetSubjectOverride { my $self = shift; my $override = shift; if ( $override == $self->SubjectOverride ) { return (0, "SubjectOverride is already set to that"); } my $cf = RT::CustomField->new($self->CurrentUser); $cf->Load($override); if ( $override ) { my ($ok, $msg) = $self->SetAttribute( Name => 'SubjectOverride', Content => $override ); return ($ok, $ok ? $self->loc('Added Subject Override: [_1]', $cf->Name) : $self->loc('Unable to add Subject Override: [_1] [_2]', $cf->Name, $msg)); } else { my ($ok, $msg) = $self->DeleteAttribute('SubjectOverride'); return ($ok, $ok ? $self->loc('Removed Subject Override') : $self->loc('Unable to add Subject Override: [_1] [_2]', $cf->Name, $msg)); } } =head2 id Returns the current value of id. (In the database, id is stored as int(11).) =cut =head2 Name Returns the current value of Name. (In the database, Name is stored as varchar(255).) =head2 SetName VALUE Set Name to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Name will be stored as a varchar(255).) =cut =head2 Description Returns the current value of Description. (In the database, Description is stored as varchar(255).) =head2 SetDescription VALUE Set Description to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Description will be stored as a varchar(255).) =cut =head2 SortOrder Returns the current value of SortOrder. (In the database, SortOrder is stored as int(11).) =head2 SetSortOrder VALUE Set SortOrder to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, SortOrder will be stored as a int(11).) =cut =head2 Disabled Returns the current value of Disabled. (In the database, Disabled is stored as int(2).) =head2 SetDisabled VALUE Set Disabled to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Disabled will be stored as a int(2).) =cut =head2 HotList Returns the current value of HotList. (In the database, HotList is stored as int(2).) =head2 SetHotList VALUE Set HotList to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, HotList will be stored as a int(2).) =cut =head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) =cut =head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) =cut =head2 LastUpdatedBy Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) =cut =head2 LastUpdated Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) =cut sub _CoreAccessible { { id => {read => 1, type => 'int(11)', default => ''}, Name => {read => 1, write => 1, type => 'varchar(255)', default => ''}, Description => {read => 1, write => 1, type => 'varchar(255)', default => ''}, SortOrder => {read => 1, write => 1, type => 'int(11)', default => '0'}, Disabled => {read => 1, write => 1, type => 'int(2)', default => '0'}, HotList => {read => 1, write => 1, type => 'int(2)', default => '0'}, Creator => {read => 1, auto => 1, type => 'int(11)', default => '0'}, Created => {read => 1, auto => 1, type => 'datetime', default => ''}, LastUpdatedBy => {read => 1, auto => 1, type => 'int(11)', default => '0'}, LastUpdated => {read => 1, auto => 1, type => 'datetime', default => ''}, } }; sub FindDependencies { my $self = shift; my ($walker, $deps) = @_; $self->SUPER::FindDependencies($walker, $deps); my $articles = RT::Articles->new( $self->CurrentUser ); $articles->Limit( FIELD => "Class", VALUE => $self->Id ); $deps->Add( in => $articles ); my $topics = RT::Topics->new( $self->CurrentUser ); $topics->LimitToObject( $self ); $deps->Add( in => $topics ); my $objectclasses = RT::ObjectClasses->new( $self->CurrentUser ); $objectclasses->LimitToClass( $self->Id ); $deps->Add( in => $objectclasses ); # Custom Fields on things _in_ this class (CFs on the class itself # have already been dealt with) my $ocfs = RT::ObjectCustomFields->new( $self->CurrentUser ); $ocfs->Limit( FIELD => 'ObjectId', OPERATOR => '=', VALUE => $self->id, ENTRYAGGREGATOR => 'OR' ); $ocfs->Limit( FIELD => 'ObjectId', OPERATOR => '=', VALUE => 0, ENTRYAGGREGATOR => 'OR' ); my $cfs = $ocfs->Join( ALIAS1 => 'main', FIELD1 => 'CustomField', TABLE2 => 'CustomFields', FIELD2 => 'id', ); $ocfs->Limit( ALIAS => $cfs, FIELD => 'LookupType', OPERATOR => 'STARTSWITH', VALUE => 'RT::Class-' ); $deps->Add( in => $ocfs ); } sub PreInflate { my $class = shift; my ($importer, $uid, $data) = @_; $class->SUPER::PreInflate( $importer, $uid, $data ); return if $importer->MergeBy( "Name", $class, $uid, $data ); return 1; } RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/Classes.pm000644 000765 000024 00000005022 12555754775 015730 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; package RT::Classes; use base 'RT::SearchBuilder'; sub Table {'Classes'} =head2 _Init =cut sub _Init { my $self = shift; $self->{'with_disabled_column'} = 1; return ($self->SUPER::_Init(@_)); } =head2 AddRecord Overrides the collection to ensure that only Classes the user can see are returned. =cut sub AddRecord { my $self = shift; my ($record) = @_; return unless $record->CurrentUserHasRight('SeeClass'); return $self->SUPER::AddRecord( $record ); } sub _SingularClass { "RT::Class" } RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/Condition/000755 000765 000024 00000000000 12555754775 015724 5ustar00sartakstaff000000 000000 rt-4.2.12/lib/RT/Condition.pm000644 000765 000024 00000011035 12555754775 016262 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} =head1 NAME RT::Condition - generic baseclass for scrip condition; =head1 SYNOPSIS use RT::Condition; my $foo = RT::Condition->new( TransactionObj => $tr, TicketObj => $ti, ScripObj => $scr, Argument => $arg, Type => $type); if ($foo->IsApplicable) { # do something } =head1 DESCRIPTION =head1 METHODS =cut package RT::Condition; use strict; use warnings; use base qw/RT::Base/; sub new { my $proto = shift; my $class = ref($proto) || $proto; my $self = {}; bless ($self, $class); $self->_Init(@_); return $self; } sub _Init { my $self = shift; my %args = ( TransactionObj => undef, TicketObj => undef, ScripObj => undef, TemplateObj => undef, Argument => undef, ApplicableTransTypes => undef, CurrentUser => undef, @_ ); $self->{'Argument'} = $args{'Argument'}; $self->{'ScripObj'} = $args{'ScripObj'}; $self->{'TicketObj'} = $args{'TicketObj'}; $self->{'TransactionObj'} = $args{'TransactionObj'}; $self->{'ApplicableTransTypes'} = $args{'ApplicableTransTypes'}; $self->CurrentUser($args{'CurrentUser'}); } # Access Scripwide data =head2 Argument Return the optional argument associated with this ScripCondition =cut sub Argument { my $self = shift; return($self->{'Argument'}); } =head2 TicketObj Return the ticket object we're talking about =cut sub TicketObj { my $self = shift; return($self->{'TicketObj'}); } =head2 ScripObj Return the Scrip object we're talking about =cut sub ScripObj { my $self = shift; return($self->{'ScripObj'}); } =head2 TransactionObj Return the transaction object we're talking about =cut sub TransactionObj { my $self = shift; return($self->{'TransactionObj'}); } =head2 Type =cut sub ApplicableTransTypes { my $self = shift; return($self->{'ApplicableTransTypes'}); } # Scrip methods #What does this type of Action does sub Describe { my $self = shift; return ($self->loc("No description for [_1]", ref $self)); } #Parse the templates, get things ready to go. #If this rule applies to this transaction, return true. sub IsApplicable { my $self = shift; return(undef); } sub DESTROY { my $self = shift; # We need to clean up all the references that might maybe get # oddly circular $self->{'TemplateObj'} =undef $self->{'TicketObj'} = undef; $self->{'TransactionObj'} = undef; $self->{'ScripObj'} = undef; } RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/Config.pm000644 000765 000024 00000156777 12555754775 015570 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} package RT::Config; use strict; use warnings; use 5.010; use File::Spec (); use Symbol::Global::Name; use List::MoreUtils 'uniq'; =head1 NAME RT::Config - RT's config =head1 SYNOPSYS # get config object use RT::Config; my $config = RT::Config->new; $config->LoadConfigs; # get or set option my $rt_web_path = $config->Get('WebPath'); $config->Set(EmailOutputEncoding => 'latin1'); # get config object from RT package use RT; RT->LoadConfig; my $config = RT->Config; =head1 DESCRIPTION C class provide access to RT's and RT extensions' config files. RT uses two files for site configuring: First file is F - core config file. This file is shipped with RT distribution and contains default values for all available options. B Second file is F - site config file. You can use it to customize your RT instance. In this file you can override any option listed in core config file. RT extensions could also provide thier config files. Extensions should use F<< _Config.pm >> and F<< _SiteConfig.pm >> names for config files, where is extension name. B: All options from RT's config and extensions' configs are saved in one place and thus extension could override RT's options, but it is not recommended. =cut =head2 %META Hash of Config options that may be user overridable or may require more logic than should live in RT_*Config.pm Keyed by config name, there are several properties that can be set for each config optin: Section - What header this option should be grouped under on the user Preferences page Overridable - Can users change this option SortOrder - Within a Section, how should the options be sorted for display to the user Widget - Mason component path to widget that should be used to display this config option WidgetArguments - An argument hash passed to the WIdget Description - Friendly description to show the user Values - Arrayref of options (for select Widget) ValuesLabel - Hashref, key is the Value from the Values list, value is a user friendly description of the value Callback - subref that receives no arguments. It returns a hashref of items that are added to the rest of the WidgetArguments PostSet - subref passed the RT::Config object and the current and previous setting of the config option. This is called well before much of RT's subsystems are initialized, so what you can do here is pretty limited. It's mostly useful for effecting the value of other config options early. PostLoadCheck - subref passed the RT::Config object and the current setting of the config option. Can make further checks (such as seeing if a library is installed) and then change the setting of this or other options in the Config using the RT::Config option. Obfuscate - subref passed the RT::Config object, current setting of the config option and a user object, can return obfuscated value. it's called in RT->Config->GetObfuscated() =cut our %META; %META = ( # General user overridable options DefaultQueue => { Section => 'General', Overridable => 1, SortOrder => 1, Widget => '/Widgets/Form/Select', WidgetArguments => { Description => 'Default queue', #loc Callback => sub { my $ret = { Values => [], ValuesLabel => {}}; my $q = RT::Queues->new($HTML::Mason::Commands::session{'CurrentUser'}); $q->UnLimit; while (my $queue = $q->Next) { next unless $queue->CurrentUserHasRight("CreateTicket"); push @{$ret->{Values}}, $queue->Id; $ret->{ValuesLabel}{$queue->Id} = $queue->Name; } return $ret; }, } }, RememberDefaultQueue => { Section => 'General', Overridable => 1, SortOrder => 2, Widget => '/Widgets/Form/Boolean', WidgetArguments => { Description => 'Remember default queue' # loc } }, UsernameFormat => { Section => 'General', Overridable => 1, SortOrder => 3, Widget => '/Widgets/Form/Select', WidgetArguments => { Description => 'Username format', # loc Values => [qw(role concise verbose)], ValuesLabel => { role => 'Privileged: usernames; Unprivileged: names and email addresses', # loc concise => 'Short usernames', # loc verbose => 'Name and email address', # loc }, }, }, AutocompleteOwners => { Section => 'General', Overridable => 1, SortOrder => 3.1, Widget => '/Widgets/Form/Boolean', WidgetArguments => { Description => 'Use autocomplete to find owners?', # loc Hints => 'Replaces the owner dropdowns with textboxes' #loc } }, WebDefaultStylesheet => { Section => 'General', #loc Overridable => 1, SortOrder => 4, Widget => '/Widgets/Form/Select', WidgetArguments => { Description => 'Theme', #loc Callback => sub { state @stylesheets; unless (@stylesheets) { for my $static_path ( RT::Interface::Web->StaticRoots ) { my $css_path = File::Spec->catdir( $static_path, 'css' ); next unless -d $css_path; if ( opendir my $dh, $css_path ) { push @stylesheets, grep { $_ ne 'base' && -e File::Spec->catfile( $css_path, $_, 'main.css' ) } readdir $dh; } else { RT->Logger->error("Can't read $css_path: $!"); } } @stylesheets = sort { lc $a cmp lc $b } uniq @stylesheets; } return { Values => \@stylesheets }; }, }, PostLoadCheck => sub { my $self = shift; my $value = $self->Get('WebDefaultStylesheet'); my @roots = RT::Interface::Web->StaticRoots; for my $root (@roots) { return if -d "$root/css/$value"; } $RT::Logger->warning( "The default stylesheet ($value) does not exist in this instance of RT. " . "Defaulting to rudder." ); $self->Set('WebDefaultStylesheet', 'rudder'); }, }, TimeInICal => { Section => 'General', Overridable => 1, SortOrder => 5, Widget => '/Widgets/Form/Boolean', WidgetArguments => { Description => 'Include time in iCal feed events?', # loc Hints => 'Formats iCal feed events with date and time' #loc } }, UseSideBySideLayout => { Section => 'Ticket composition', Overridable => 1, SortOrder => 5, Widget => '/Widgets/Form/Boolean', WidgetArguments => { Description => 'Use a two column layout for create and update forms?' # loc } }, MessageBoxRichText => { Section => 'Ticket composition', Overridable => 1, SortOrder => 5.1, Widget => '/Widgets/Form/Boolean', WidgetArguments => { Description => 'WYSIWYG message composer' # loc } }, MessageBoxRichTextHeight => { Section => 'Ticket composition', Overridable => 1, SortOrder => 6, Widget => '/Widgets/Form/Integer', WidgetArguments => { Description => 'WYSIWYG composer height', # loc } }, MessageBoxWidth => { Section => 'Ticket composition', Overridable => 1, SortOrder => 7, Widget => '/Widgets/Form/Integer', WidgetArguments => { Description => 'Message box width', #loc }, }, MessageBoxHeight => { Section => 'Ticket composition', Overridable => 1, SortOrder => 8, Widget => '/Widgets/Form/Integer', WidgetArguments => { Description => 'Message box height', #loc }, }, DefaultTimeUnitsToHours => { Section => 'Ticket composition', #loc Overridable => 1, SortOrder => 9, Widget => '/Widgets/Form/Boolean', WidgetArguments => { Description => 'Enter time in hours by default', #loc Hints => 'Only for entry, not display', #loc }, }, SearchResultsRefreshInterval => { Section => 'General', #loc Overridable => 1, SortOrder => 9, Widget => '/Widgets/Form/Select', WidgetArguments => { Description => 'Search results refresh interval', #loc Values => [qw(0 120 300 600 1200 3600 7200)], ValuesLabel => { 0 => "Don't refresh search results.", #loc 120 => "Refresh search results every 2 minutes.", #loc 300 => "Refresh search results every 5 minutes.", #loc 600 => "Refresh search results every 10 minutes.", #loc 1200 => "Refresh search results every 20 minutes.", #loc 3600 => "Refresh search results every 60 minutes.", #loc 7200 => "Refresh search results every 120 minutes.", #loc }, }, }, # User overridable options for RT at a glance HomePageRefreshInterval => { Section => 'RT at a glance', #loc Overridable => 1, SortOrder => 2, Widget => '/Widgets/Form/Select', WidgetArguments => { Description => 'Home page refresh interval', #loc Values => [qw(0 120 300 600 1200 3600 7200)], ValuesLabel => { 0 => "Don't refresh home page.", #loc 120 => "Refresh home page every 2 minutes.", #loc 300 => "Refresh home page every 5 minutes.", #loc 600 => "Refresh home page every 10 minutes.", #loc 1200 => "Refresh home page every 20 minutes.", #loc 3600 => "Refresh home page every 60 minutes.", #loc 7200 => "Refresh home page every 120 minutes.", #loc }, }, }, # User overridable options for Ticket displays PreferRichText => { Section => 'Ticket display', # loc Overridable => 1, SortOrder => 0.9, Widget => '/Widgets/Form/Boolean', WidgetArguments => { Description => 'Display messages in rich text if available', # loc Hints => 'Rich text (HTML) shows formatting such as colored text, bold, italics, and more', # loc }, }, MaxInlineBody => { Section => 'Ticket display', #loc Overridable => 1, SortOrder => 1, Widget => '/Widgets/Form/Integer', WidgetArguments => { Description => 'Maximum inline message length', #loc Hints => "Length in characters; Use '0' to show all messages inline, regardless of length" #loc }, }, OldestTransactionsFirst => { Section => 'Ticket display', Overridable => 1, SortOrder => 2, Widget => '/Widgets/Form/Boolean', WidgetArguments => { Description => 'Show oldest history first', #loc }, }, ShowHistory => { Section => 'Ticket display', Overridable => 1, SortOrder => 3, Widget => '/Widgets/Form/Select', WidgetArguments => { Description => 'Show history', #loc Values => [qw(delay click always)], ValuesLabel => { delay => "after the rest of the page loads", #loc click => "after clicking a link", #loc always => "immediately", #loc }, }, }, ShowUnreadMessageNotifications => { Section => 'Ticket display', Overridable => 1, SortOrder => 4, Widget => '/Widgets/Form/Boolean', WidgetArguments => { Description => 'Notify me of unread messages', #loc }, }, PlainTextPre => { PostSet => sub { my $self = shift; my $value = shift; $self->SetFromConfig( Option => \'PlainTextMono', Value => [$value], %{$self->Meta('PlainTextPre')->{'Source'}} ); }, PostLoadCheck => sub { my $self = shift; # XXX: deprecated, remove in 4.4 $RT::Logger->info("You set \$PlainTextPre in your config, which has been removed in favor of \$PlainTextMono. Please update your config.") if $self->Meta('PlainTextPre')->{'Source'}{'Package'}; }, }, PlainTextMono => { Section => 'Ticket display', Overridable => 1, SortOrder => 5, Widget => '/Widgets/Form/Boolean', WidgetArguments => { Description => 'Display plain-text attachments in fixed-width font', #loc Hints => 'Display all plain-text attachments in a monospace font with formatting preserved, but wrapping as needed.', #loc }, }, MoreAboutRequestorTicketList => { Section => 'Ticket display', #loc Overridable => 1, SortOrder => 6, Widget => '/Widgets/Form/Select', WidgetArguments => { Description => 'What tickets to display in the "More about requestor" box', #loc Values => [qw(Active Inactive All None)], ValuesLabel => { Active => "Show the Requestor's 10 highest priority active tickets", #loc Inactive => "Show the Requestor's 10 highest priority inactive tickets", #loc All => "Show the Requestor's 10 highest priority tickets", #loc None => "Show no tickets for the Requestor", #loc }, }, }, SimplifiedRecipients => { Section => 'Ticket display', #loc Overridable => 1, SortOrder => 7, Widget => '/Widgets/Form/Boolean', WidgetArguments => { Description => "Show simplified recipient list on ticket update", #loc }, }, DisplayTicketAfterQuickCreate => { Section => 'Ticket display', Overridable => 1, SortOrder => 8, Widget => '/Widgets/Form/Boolean', WidgetArguments => { Description => 'Display ticket after "Quick Create"', #loc }, }, QuoteFolding => { Section => 'Ticket display', Overridable => 1, SortOrder => 9, Widget => '/Widgets/Form/Boolean', WidgetArguments => { Description => 'Enable quote folding?' # loc } }, # User overridable locale options DateTimeFormat => { Section => 'Locale', #loc Overridable => 1, Widget => '/Widgets/Form/Select', WidgetArguments => { Description => 'Date format', #loc Callback => sub { my $ret = { Values => [], ValuesLabel => {}}; my $date = RT::Date->new($HTML::Mason::Commands::session{'CurrentUser'}); $date->SetToNow; foreach my $value ($date->Formatters) { push @{$ret->{Values}}, $value; $ret->{ValuesLabel}{$value} = $date->Get( Format => $value, Timezone => 'user', ); } return $ret; }, }, }, RTAddressRegexp => { Type => 'SCALAR', PostLoadCheck => sub { my $self = shift; my $value = $self->Get('RTAddressRegexp'); if (not $value) { $RT::Logger->debug( 'The RTAddressRegexp option is not set in the config.' .' Not setting this option results in additional SQL queries to' .' check whether each address belongs to RT or not.' .' It is especially important to set this option if RT receives' .' emails on addresses that are not in the database or config.' ); } elsif (ref $value and ref $value eq "Regexp") { # Ensure that the regex is case-insensitive; while the # local part of email addresses is _technically_ # case-sensitive, most MTAs don't treat it as such. $RT::Logger->warning( 'RTAddressRegexp is set to a case-sensitive regular expression.' .' This may lead to mail loops with MTAs which treat the' .' local part as case-insensitive -- which is most of them.' ) if "$value" =~ /^\(\?[a-z]*-([a-z]*):/ and "$1" =~ /i/; } }, }, # User overridable mail options EmailFrequency => { Section => 'Mail', #loc Overridable => 1, Default => 'Individual messages', Widget => '/Widgets/Form/Select', WidgetArguments => { Description => 'Email delivery', #loc Values => [ 'Individual messages', #loc 'Daily digest', #loc 'Weekly digest', #loc 'Suspended' #loc ] } }, NotifyActor => { Section => 'Mail', #loc Overridable => 1, SortOrder => 2, Widget => '/Widgets/Form/Boolean', WidgetArguments => { Description => 'Outgoing mail', #loc Hints => 'Should RT send you mail for ticket updates you make?', #loc } }, # this tends to break extensions that stash links in ticket update pages Organization => { Type => 'SCALAR', PostLoadCheck => sub { my ($self,$value) = @_; $RT::Logger->error("your \$Organization setting ($value) appears to contain whitespace. Please fix this.") if $value =~ /\s/;; }, }, # Internal config options DatabaseExtraDSN => { Type => 'HASH', }, FullTextSearch => { Type => 'HASH', PostLoadCheck => sub { my $self = shift; my $v = $self->Get('FullTextSearch'); return unless $v->{Enable} and $v->{Indexed}; my $dbtype = $self->Get('DatabaseType'); if ($dbtype eq 'Oracle') { if (not $v->{IndexName}) { $RT::Logger->error("No IndexName set for full-text index; disabling"); $v->{Enable} = $v->{Indexed} = 0; } } elsif ($dbtype eq 'Pg') { my $bad = 0; if (not $v->{'Column'}) { $RT::Logger->error("No Column set for full-text index; disabling"); $v->{Enable} = $v->{Indexed} = 0; } elsif ($v->{'Column'} eq "Content" and (not $v->{'Table'} or $v->{'Table'} eq "Attachments")) { $RT::Logger->error("Column for full-text index is set to Content, not tsvector column; disabling"); $v->{Enable} = $v->{Indexed} = 0; } } elsif ($dbtype eq 'mysql') { if (not $v->{'Table'}) { $RT::Logger->error("No Table set for full-text index; disabling"); $v->{Enable} = $v->{Indexed} = 0; } elsif ($v->{'Table'} eq "Attachments") { $RT::Logger->error("Table for full-text index is set to Attachments, not FTS table; disabling"); $v->{Enable} = $v->{Indexed} = 0; } else { my (undef, $create) = eval { $RT::Handle->dbh->selectrow_array("SHOW CREATE TABLE " . $v->{Table}); }; my ($engine) = ($create||'') =~ /engine=(\S+)/i; if (not $create) { $RT::Logger->error("External table ".$v->{Table}." does not exist"); $v->{Enable} = $v->{Indexed} = 0; } elsif (lc $engine eq "sphinx") { # External Sphinx indexer $v->{Sphinx} = 1; unless ($v->{'MaxMatches'}) { $RT::Logger->warn("No MaxMatches set for full-text index; defaulting to 10000"); $v->{MaxMatches} = 10_000; } } else { # Internal, one-column table $v->{Column} = 'Content'; $v->{Engine} = $engine; } } } else { $RT::Logger->error("Indexed full-text-search not supported for $dbtype"); $v->{Indexed} = 0; } }, }, DisableGraphViz => { Type => 'SCALAR', PostLoadCheck => sub { my $self = shift; my $value = shift; return if $value; return if GraphViz->require; $RT::Logger->debug("You've enabled GraphViz, but we couldn't load the module: $@"); $self->Set( DisableGraphViz => 1 ); }, }, DisableGD => { Type => 'SCALAR', PostLoadCheck => sub { my $self = shift; my $value = shift; return if $value; return if GD->require; $RT::Logger->debug("You've enabled GD, but we couldn't load the module: $@"); $self->Set( DisableGD => 1 ); }, }, MailCommand => { Type => 'SCALAR', PostLoadCheck => sub { my $self = shift; my $value = $self->Get('MailCommand'); return if ref($value) eq "CODE" or $value =~/^(sendmail|sendmailpipe|qmail|testfile|mbox)$/; $RT::Logger->error("Unknown value for \$MailCommand: $value; defaulting to sendmailpipe"); $self->Set( MailCommand => 'sendmailpipe' ); }, }, HTMLFormatter => { Type => 'SCALAR', PostLoadCheck => sub { RT::Interface::Email->_HTMLFormatter }, }, MailPlugins => { Type => 'ARRAY', PostLoadCheck => sub { my $self = shift; # Make sure Crypt is post-loaded first $META{Crypt}{'PostLoadCheck'}->( $self, $self->Get( 'Crypt' ) ); my @plugins = $self->Get('MailPlugins'); if ( grep $_ eq 'Auth::GnuPG' || $_ eq 'Auth::SMIME', @plugins ) { $RT::Logger->warning( 'Auth::GnuPG and Auth::SMIME (from an extension) have been' .' replaced with Auth::Crypt. @MailPlugins has been adjusted,' .' but should be updated to replace both with Auth::Crypt to' .' silence this warning.' ); my %seen; @plugins = grep !$seen{$_}++, grep { $_ eq 'Auth::GnuPG' || $_ eq 'Auth::SMIME' ? 'Auth::Crypt' : $_ } @plugins; $self->Set( MailPlugins => @plugins ); } if ( not @{$self->Get('Crypt')->{Incoming}} and grep $_ eq 'Auth::Crypt', @plugins ) { $RT::Logger->warning("Auth::Crypt enabled in MailPlugins, but no available incoming encryption formats"); } }, }, Crypt => { Type => 'HASH', PostLoadCheck => sub { my $self = shift; require RT::Crypt; for my $proto (RT::Crypt->EnabledProtocols) { my $opt = $self->Get($proto); if (not RT::Crypt->LoadImplementation($proto)) { $RT::Logger->error("You enabled $proto, but we couldn't load module RT::Crypt::$proto"); $opt->{'Enable'} = 0; } elsif (not RT::Crypt->LoadImplementation($proto)->Probe) { $opt->{'Enable'} = 0; } elsif ($META{$proto}{'PostLoadCheck'}) { $META{$proto}{'PostLoadCheck'}->( $self, $self->Get( $proto ) ); } } my $opt = $self->Get('Crypt'); my @enabled = RT::Crypt->EnabledProtocols; my %enabled; $enabled{$_} = 1 for @enabled; $opt->{'Enable'} = scalar @enabled; $opt->{'Incoming'} = [ $opt->{'Incoming'} ] if $opt->{'Incoming'} and not ref $opt->{'Incoming'}; if ( $opt->{'Incoming'} && @{ $opt->{'Incoming'} } ) { $RT::Logger->warning("$_ explicitly set as incoming Crypt plugin, but not marked Enabled; removing") for grep {not $enabled{$_}} @{$opt->{'Incoming'}}; $opt->{'Incoming'} = [ grep {$enabled{$_}} @{$opt->{'Incoming'}} ]; } else { $opt->{'Incoming'} = \@enabled; } if ( $opt->{'Outgoing'} ) { if (not $enabled{$opt->{'Outgoing'}}) { $RT::Logger->warning($opt->{'Outgoing'}. " explicitly set as outgoing Crypt plugin, but not marked Enabled; " . (@enabled ? "using $enabled[0]" : "removing")); } $opt->{'Outgoing'} = $enabled[0] unless $enabled{$opt->{'Outgoing'}}; } else { $opt->{'Outgoing'} = $enabled[0]; } }, }, SMIME => { Type => 'HASH', PostLoadCheck => sub { my $self = shift; my $opt = $self->Get('SMIME'); return unless $opt->{'Enable'}; if (exists $opt->{Keyring}) { unless ( File::Spec->file_name_is_absolute( $opt->{Keyring} ) ) { $opt->{Keyring} = File::Spec->catfile( $RT::BasePath, $opt->{Keyring} ); } unless (-d $opt->{Keyring} and -r _) { $RT::Logger->info( "RT's SMIME libraries couldn't successfully read your". " configured SMIME keyring directory (".$opt->{Keyring} .")."); delete $opt->{Keyring}; } } if (defined $opt->{CAPath}) { if (-d $opt->{CAPath} and -r _) { # directory, all set } elsif (-f $opt->{CAPath} and -r _) { # file, all set } else { $RT::Logger->warn( "RT's SMIME libraries could not read your configured CAPath (".$opt->{CAPath}.")" ); delete $opt->{CAPath}; } } }, }, GnuPG => { Type => 'HASH', PostLoadCheck => sub { my $self = shift; my $gpg = $self->Get('GnuPG'); return unless $gpg->{'Enable'}; my $gpgopts = $self->Get('GnuPGOptions'); unless ( File::Spec->file_name_is_absolute( $gpgopts->{homedir} ) ) { $gpgopts->{homedir} = File::Spec->catfile( $RT::BasePath, $gpgopts->{homedir} ); } unless (-d $gpgopts->{homedir} && -r _ ) { # no homedir, no gpg $RT::Logger->info( "RT's GnuPG libraries couldn't successfully read your". " configured GnuPG home directory (".$gpgopts->{homedir} ."). GnuPG support has been disabled"); $gpg->{'Enable'} = 0; return; } if ( grep exists $gpg->{$_}, qw(RejectOnMissingPrivateKey RejectOnBadData AllowEncryptDataInDB) ) { $RT::Logger->warning( "The RejectOnMissingPrivateKey, RejectOnBadData and AllowEncryptDataInDB" ." GnuPG options are now properties of the generic Crypt configuration. You" ." should set them there instead." ); delete $gpg->{$_} for qw(RejectOnMissingPrivateKey RejectOnBadData AllowEncryptDataInDB); } } }, GnuPGOptions => { Type => 'HASH' }, ReferrerWhitelist => { Type => 'ARRAY' }, WebPath => { PostLoadCheck => sub { my $self = shift; my $value = shift; # "In most cases, you should leave $WebPath set to '' (an empty value)." return unless $value; # try to catch someone who assumes that you shouldn't leave this empty if ($value eq '/') { $RT::Logger->error("For the WebPath config option, use the empty string instead of /"); return; } # $WebPath requires a leading / but no trailing /, or it can be blank. return if $value =~ m{^/.+[^/]$}; if ($value =~ m{/$}) { $RT::Logger->error("The WebPath config option requires no trailing slash"); } if ($value !~ m{^/}) { $RT::Logger->error("The WebPath config option requires a leading slash"); } }, }, WebDomain => { PostLoadCheck => sub { my $self = shift; my $value = shift; if (!$value) { $RT::Logger->error("You must set the WebDomain config option"); return; } if ($value =~ m{^(\w+://)}) { $RT::Logger->error("The WebDomain config option must not contain a scheme ($1)"); return; } if ($value =~ m{(/.*)}) { $RT::Logger->error("The WebDomain config option must not contain a path ($1)"); return; } if ($value =~ m{:(\d*)}) { $RT::Logger->error("The WebDomain config option must not contain a port ($1)"); return; } }, }, WebPort => { PostLoadCheck => sub { my $self = shift; my $value = shift; if (!$value) { $RT::Logger->error("You must set the WebPort config option"); return; } if ($value !~ m{^\d+$}) { $RT::Logger->error("The WebPort config option must be an integer"); } }, }, WebBaseURL => { PostLoadCheck => sub { my $self = shift; my $value = shift; if (!$value) { $RT::Logger->error("You must set the WebBaseURL config option"); return; } if ($value !~ m{^https?://}i) { $RT::Logger->error("The WebBaseURL config option must contain a scheme (http or https)"); } if ($value =~ m{/$}) { $RT::Logger->error("The WebBaseURL config option requires no trailing slash"); } if ($value =~ m{^https?://.+?(/[^/].*)}i) { $RT::Logger->error("The WebBaseURL config option must not contain a path ($1)"); } }, }, WebURL => { PostLoadCheck => sub { my $self = shift; my $value = shift; if (!$value) { $RT::Logger->error("You must set the WebURL config option"); return; } if ($value !~ m{^https?://}i) { $RT::Logger->error("The WebURL config option must contain a scheme (http or https)"); } if ($value !~ m{/$}) { $RT::Logger->error("The WebURL config option requires a trailing slash"); } }, }, EmailInputEncodings => { Type => 'ARRAY', PostLoadCheck => sub { my $self = shift; my $value = $self->Get('EmailInputEncodings'); return unless $value && @$value; my %seen; foreach my $encoding ( grep defined && length, splice @$value ) { next if $seen{ $encoding }; if ( $encoding eq '*' ) { unshift @$value, '*'; next; } my $canonic = Encode::resolve_alias( $encoding ); unless ( $canonic ) { warn "Unknown encoding '$encoding' in \@EmailInputEncodings option"; } elsif ( $seen{ $canonic }++ ) { next; } else { push @$value, $canonic; } } }, }, LogToScreen => { Deprecated => { Instead => 'LogToSTDERR', Remove => '4.4', }, }, UserAutocompleteFields => { Deprecated => { Instead => 'UserSearchFields', Remove => '4.4', }, }, CustomFieldGroupings => { Type => 'HASH', PostLoadCheck => sub { my $config = shift; # use scalar context intentionally to avoid not a hash error my $groups = $config->Get('CustomFieldGroupings') || {}; unless (ref($groups) eq 'HASH') { RT->Logger->error("Config option \%CustomFieldGroupings is a @{[ref $groups]} not a HASH; ignoring"); $groups = {}; } for my $class (keys %$groups) { my @h; if (ref($groups->{$class}) eq 'HASH') { push @h, $_, $groups->{$class}->{$_} for sort {lc($a) cmp lc($b)} keys %{ $groups->{$class} }; } elsif (ref($groups->{$class}) eq 'ARRAY') { @h = @{ $groups->{$class} }; } else { RT->Logger->error("Config option \%CustomFieldGroupings{$class} is not a HASH or ARRAY; ignoring"); delete $groups->{$class}; next; } $groups->{$class} = []; while (@h) { my $group = shift @h; my $ref = shift @h; if (ref($ref) eq 'ARRAY') { push @{$groups->{$class}}, $group => $ref; } else { RT->Logger->error("Config option \%CustomFieldGroupings{$class}{$group} is not an ARRAY; ignoring"); } } } $config->Set( CustomFieldGroupings => %$groups ); }, }, ChartColors => { Type => 'ARRAY', }, WebExternalAuth => { Deprecated => { Instead => 'WebRemoteUserAuth', Remove => '4.4' }}, WebExternalAuthContinuous => { Deprecated => { Instead => 'WebRemoteUserContinuous', Remove => '4.4' }}, WebFallbackToInternalAuth => { Deprecated => { Instead => 'WebFallbackToRTLogin', Remove => '4.4' }}, WebExternalGecos => { Deprecated => { Instead => 'WebRemoteUserGecos', Remove => '4.4' }}, WebExternalAuto => { Deprecated => { Instead => 'WebRemoteUserAutocreate', Remove => '4.4' }}, AutoCreate => { Deprecated => { Instead => 'UserAutocreateDefaultsOnLogin', Remove => '4.4' }}, LogoImageHeight => { Deprecated => { LogLevel => "info", Message => "The LogoImageHeight configuration option did not affect display, and has been removed; please remove it from your RT_SiteConfig.pm", }, }, LogoImageWidth => { Deprecated => { LogLevel => "info", Message => "The LogoImageWidth configuration option did not affect display, and has been removed; please remove it from your RT_SiteConfig.pm", }, }, DatabaseRequireSSL => { Deprecated => { Remove => '4.4', LogLevel => "info", Message => "The DatabaseRequireSSL configuration option did not enable SSL connections to the database, and has been removed; please remove it from your RT_SiteConfig.pm. Use DatabaseExtraDSN to accomplish the same purpose.", }, }, ); my %OPTIONS = (); my @LOADED_CONFIGS = (); =head1 METHODS =head2 new Object constructor returns new object. Takes no arguments. =cut sub new { my $proto = shift; my $class = ref($proto) ? ref($proto) : $proto; my $self = bless {}, $class; $self->_Init(@_); return $self; } sub _Init { return; } =head2 LoadConfigs Load all configs. First of all load RT's config then load extensions' config files in alphabetical order. Takes no arguments. =cut sub LoadConfigs { my $self = shift; $self->LoadConfig( File => 'RT_Config.pm' ); my @configs = $self->Configs; $self->LoadConfig( File => $_ ) foreach @configs; return; } =head1 LoadConfig Takes param hash with C field. First, the site configuration file is loaded, in order to establish overall site settings like hostname and name of RT instance. Then, the core configuration file is loaded to set fallback values for all settings; it bases some values on settings from the site configuration file. B that core config file don't change options if site config has set them so to add value to some option instead of overriding you have to copy original value from core config file. =cut sub LoadConfig { my $self = shift; my %args = ( File => '', @_ ); $args{'File'} =~ s/(?_LoadConfig( %args, File => $site_config ); # to allow load siteconfig again and again in case it's updated delete $INC{ $site_config }; } else { $self->_LoadConfig(%args); delete $INC{$args{'File'}}; } $args{'File'} =~ s/Site(?=Config\.pm$)//; $self->_LoadConfig(%args); return 1; } sub _LoadConfig { my $self = shift; my %args = ( File => '', @_ ); my ($is_ext, $is_site); if ( $args{'File'} eq ($ENV{RT_SITE_CONFIG}||'') ) { ($is_ext, $is_site) = ('', 1); } else { $is_ext = $args{'File'} =~ /^(?!RT_)(?:(.*)_)(?:Site)?Config/ ? $1 : ''; $is_site = $args{'File'} =~ /SiteConfig/ ? 1 : 0; } eval { package RT; local *Set = sub(\[$@%]@) { my ( $opt_ref, @args ) = @_; my ( $pack, $file, $line ) = caller; return $self->SetFromConfig( Option => $opt_ref, Value => [@args], Package => $pack, File => $file, Line => $line, SiteConfig => $is_site, Extension => $is_ext, ); }; local *Plugin = sub { my (@new_plugins) = @_; @new_plugins = map {s/-/::/g if not /:/; $_} @new_plugins; my ( $pack, $file, $line ) = caller; return $self->SetFromConfig( Option => \@RT::Plugins, Value => [@RT::Plugins, @new_plugins], Package => $pack, File => $file, Line => $line, SiteConfig => $is_site, Extension => $is_ext, ); }; my @etc_dirs = ($RT::LocalEtcPath); push @etc_dirs, RT->PluginDirs('etc') if $is_ext; push @etc_dirs, $RT::EtcPath, @INC; local @INC = @etc_dirs; require $args{'File'}; }; if ($@) { return 1 if $is_site && $@ =~ /^Can't locate \Q$args{File}/; if ( $is_site || $@ !~ /^Can't locate \Q$args{File}/ ) { die qq{Couldn't load RT config file $args{'File'}:\n\n$@}; } my $username = getpwuid($>); my $group = getgrgid($(); my ( $file_path, $fileuid, $filegid ); foreach ( $RT::LocalEtcPath, $RT::EtcPath, @INC ) { my $tmp = File::Spec->catfile( $_, $args{File} ); ( $fileuid, $filegid ) = ( stat($tmp) )[ 4, 5 ]; if ( defined $fileuid ) { $file_path = $tmp; last; } } unless ($file_path) { die qq{Couldn't load RT config file $args{'File'} as user $username / group $group.\n} . qq{The file couldn't be found in $RT::LocalEtcPath and $RT::EtcPath.\n$@}; } my $message = < $args{'File'}, filename => $INC{ $args{'File'} }, extension => $is_ext, site => $is_site, }; } return 1; } sub PostLoadCheck { my $self = shift; foreach my $o ( grep $META{$_}{'PostLoadCheck'}, $self->Options( Overridable => undef ) ) { $META{$o}->{'PostLoadCheck'}->( $self, $self->Get($o) ); } } =head2 Configs Returns list of config files found in local etc, plugins' etc and main etc directories. =cut sub Configs { my $self = shift; my @configs = (); foreach my $path ( $RT::LocalEtcPath, RT->PluginDirs('etc'), $RT::EtcPath ) { my $mask = File::Spec->catfile( $path, "*_Config.pm" ); my @files = glob $mask; @files = grep !/^RT_Config\.pm$/, grep $_ && /^\w+_Config\.pm$/, map { s/^.*[\\\/]//; $_ } @files; push @configs, sort @files; } my %seen; @configs = grep !$seen{$_}++, @configs; return @configs; } =head2 LoadedConfigs Returns a list of hashrefs, one for each config file loaded. The keys of the hashes are: =over 4 =item as Name this config file was loaded as (relative filename usually). =item filename The full path and filename. =item extension The "extension" part of the filename. For example, the file C will have an C value of C. =item site True if the file is considered a site-level override. For example, C will be false for C and true for C. =back =cut sub LoadedConfigs { # Copy to avoid the caller changing our internal data return map { \%$_ } @LOADED_CONFIGS } =head2 Get Takes name of the option as argument and returns its current value. In the case of a user-overridable option, first checks the user's preferences before looking for site-wide configuration. Returns values from RT_SiteConfig, RT_Config and then the %META hash of configuration variables's "Default" for this config variable, in that order. Returns different things in scalar and array contexts. For scalar options it's not that important, however for arrays and hash it's. In scalar context returns references to arrays and hashes. Use C perl's op to force context, especially when you use C<(..., Argument => RT->Config->Get('ArrayOpt'), ...)> as perl's '=>' op doesn't change context of the right hand argument to scalar. Instead use C<(..., Argument => scalar RT->Config->Get('ArrayOpt'), ...)>. It's also important for options that have no default value(no default in F). If you don't force scalar context then you'll get empty list and all your named args will be messed up. For example C<(arg1 => 1, arg2 => RT->Config->Get('OptionDoesNotExist'), arg3 => 3)> will result in C<(arg1 => 1, arg2 => 'arg3', 3)> what is most probably unexpected, or C<(arg1 => 1, arg2 => RT->Config->Get('ArrayOption'), arg3 => 3)> will result in C<(arg1 => 1, arg2 => 'element of option', 'another_one' => ..., 'arg3', 3)>. =cut sub Get { my ( $self, $name, $user ) = @_; my $res; if ( $user && $user->id && $META{$name}->{'Overridable'} ) { my $prefs = $user->Preferences($RT::System); $res = $prefs->{$name} if $prefs; } $res = $OPTIONS{$name} unless defined $res; $res = $META{$name}->{'Default'} unless defined $res; return $self->_ReturnValue( $res, $META{$name}->{'Type'} || 'SCALAR' ); } =head2 GetObfuscated the same as Get, except it returns Obfuscated value via Obfuscate sub =cut sub GetObfuscated { my $self = shift; my ( $name, $user ) = @_; my $obfuscate = $META{$name}->{Obfuscate}; # we use two Get here is to simplify the logic of the return value # configs need obfuscation are supposed to be less, so won't be too heavy return $self->Get(@_) unless $obfuscate; my $res = $self->Get(@_); $res = $obfuscate->( $self, $res, $user ); return $self->_ReturnValue( $res, $META{$name}->{'Type'} || 'SCALAR' ); } =head2 Set Set option's value to new value. Takes name of the option and new value. Returns old value. The new value should be scalar, array or hash depending on type of the option. If the option is not defined in meta or the default RT config then it is of scalar type. =cut sub Set { my ( $self, $name ) = ( shift, shift ); my $old = $OPTIONS{$name}; my $type = $META{$name}->{'Type'} || 'SCALAR'; if ( $type eq 'ARRAY' ) { $OPTIONS{$name} = [@_]; { no warnings 'once'; no strict 'refs'; @{"RT::$name"} = (@_); } } elsif ( $type eq 'HASH' ) { $OPTIONS{$name} = {@_}; { no warnings 'once'; no strict 'refs'; %{"RT::$name"} = (@_); } } else { $OPTIONS{$name} = shift; {no warnings 'once'; no strict 'refs'; ${"RT::$name"} = $OPTIONS{$name}; } } $META{$name}->{'Type'} = $type; $META{$name}->{'PostSet'}->($self, $OPTIONS{$name}, $old) if $META{$name}->{'PostSet'}; if ($META{$name}->{'Deprecated'}) { my %deprecated = %{$META{$name}->{'Deprecated'}}; my $new_var = $deprecated{Instead} || ''; $self->SetFromConfig( Option => \$new_var, Value => [$OPTIONS{$name}], %{$self->Meta($name)->{'Source'}} ) if $new_var; $META{$name}->{'PostLoadCheck'} ||= sub { RT->Deprecated( Message => "Configuration option $name is deprecated", Stack => 0, %deprecated, ); }; } return $self->_ReturnValue( $old, $type ); } sub _ReturnValue { my ( $self, $res, $type ) = @_; return $res unless wantarray; if ( $type eq 'ARRAY' ) { return @{ $res || [] }; } elsif ( $type eq 'HASH' ) { return %{ $res || {} }; } return $res; } sub SetFromConfig { my $self = shift; my %args = ( Option => undef, Value => [], Package => 'RT', File => '', Line => 0, SiteConfig => 1, Extension => 0, @_ ); unless ( $args{'File'} ) { ( $args{'Package'}, $args{'File'}, $args{'Line'} ) = caller(1); } my $opt = $args{'Option'}; my $type; my $name = Symbol::Global::Name->find($opt); if ($name) { $type = ref $opt; $name =~ s/.*:://; } else { $name = $$opt; $type = $META{$name}->{'Type'} || 'SCALAR'; } # if option is already set we have to check where # it comes from and may be ignore it if ( exists $OPTIONS{$name} ) { if ( $type eq 'HASH' ) { $args{'Value'} = [ @{ $args{'Value'} }, @{ $args{'Value'} }%2? (undef) : (), $self->Get( $name ), ]; } elsif ( $args{'SiteConfig'} && $args{'Extension'} ) { # if it's site config of an extension then it can only # override options that came from its main config if ( $args{'Extension'} ne $META{$name}->{'Source'}{'Extension'} ) { my %source = %{ $META{$name}->{'Source'} }; warn "Change of config option '$name' at $args{'File'} line $args{'Line'} has been ignored." ." This option earlier has been set in $source{'File'} line $source{'Line'}." ." To overide this option use ". ($source{'Extension'}||'RT') ." site config." ; return 1; } } elsif ( !$args{'SiteConfig'} && $META{$name}->{'Source'}{'SiteConfig'} ) { # if it's core config then we can override any option that came from another # core config, but not site config my %source = %{ $META{$name}->{'Source'} }; if ( $source{'Extension'} ne $args{'Extension'} ) { # as a site config is loaded earlier then its base config # then we warn only on different extensions, for example # RTIR's options is set in main site config warn "Change of config option '$name' at $args{'File'} line $args{'Line'} has been ignored." ." It may be ok, but we want you to be aware." ." This option has been set earlier in $source{'File'} line $source{'Line'}." ; } return 1; } } $META{$name}->{'Type'} = $type; foreach (qw(Package File Line SiteConfig Extension)) { $META{$name}->{'Source'}->{$_} = $args{$_}; } $self->Set( $name, @{ $args{'Value'} } ); return 1; } =head2 Metadata =head2 Meta =cut sub Meta { return $META{ $_[1] }; } sub Sections { my $self = shift; my %seen; my @sections = sort grep !$seen{$_}++, map $_->{'Section'} || 'General', values %META; return @sections; } sub Options { my $self = shift; my %args = ( Section => undef, Overridable => 1, Sorted => 1, @_ ); my @res = sort keys %META; @res = grep( ( $META{$_}->{'Section'} || 'General' ) eq $args{'Section'}, @res ) if defined $args{'Section'}; if ( defined $args{'Overridable'} ) { @res = grep( ( $META{$_}->{'Overridable'} || 0 ) == $args{'Overridable'}, @res ); } if ( $args{'Sorted'} ) { @res = sort { ($META{$a}->{SortOrder}||9999) <=> ($META{$b}->{SortOrder}||9999) || $a cmp $b } @res; } else { @res = sort { $a cmp $b } @res; } return @res; } =head2 AddOption( Name => '', Section => '', ... ) =cut sub AddOption { my $self = shift; my %args = ( Name => undef, Section => undef, Overridable => 0, SortOrder => undef, Widget => '/Widgets/Form/String', WidgetArguments => {}, @_ ); unless ( $args{Name} ) { $RT::Logger->error("Need Name to add a new config"); return; } unless ( $args{Section} ) { $RT::Logger->error("Need Section to add a new config option"); return; } $META{ delete $args{Name} } = \%args; } =head2 DeleteOption( Name => '' ) =cut sub DeleteOption { my $self = shift; my %args = ( Name => undef, @_ ); if ( $args{Name} ) { delete $META{$args{Name}}; } else { $RT::Logger->error("Need Name to remove a config option"); return; } } =head2 UpdateOption( Name => '' ), Section => '', ... ) =cut sub UpdateOption { my $self = shift; my %args = ( Name => undef, Section => undef, Overridable => undef, SortOrder => undef, Widget => undef, WidgetArguments => undef, @_ ); my $name = delete $args{Name}; unless ( $name ) { $RT::Logger->error("Need Name to update a new config"); return; } unless ( exists $META{$name} ) { $RT::Logger->error("Config $name doesn't exist"); return; } for my $type ( keys %args ) { next unless defined $args{$type}; $META{$name}{$type} = $args{$type}; } return 1; } RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/Crypt/000755 000765 000024 00000000000 12555754775 015077 5ustar00sartakstaff000000 000000 rt-4.2.12/lib/RT/Crypt.pm000644 000765 000024 00000061674 12555754775 015453 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} use strict; use warnings; package RT::Crypt; use 5.010; =head1 NAME RT::Crypt - encrypt/decrypt and sign/verify subsystem for RT =head1 DESCRIPTION This module provides support for encryption and signing of outgoing messages, as well as the decryption and verification of incoming emails using various encryption standards. Currently, L and L protocols are supported. =head1 CONFIGURATION You can control the configuration of this subsystem from RT's configuration file. Some options are available via the web interface, but to enable this functionality, you MUST start in the configuration file. For each protocol there is a hash with the same name in the configuration file. This hash controls RT-specific options regarding the protocol. It allows you to enable/disable each facility or change the format of messages; for example, GnuPG uses the following config: Set( %GnuPG, Enable => 1, ... other options ... ); C is the only key that is generic for all protocols. A protocol may have additional options to fine-tune behaviour. However, note that you B add the L email filter to enable the handling of incoming encrypted/signed messages. It should be added in addition to the standard L plugin. =head2 %Crypt This config option hash chooses which protocols are decrypted and verified in incoming messages, which protocol is used for outgoing emails, and RT's behaviour on errors during decrypting and verification. RT will provide sane defaults for all of these options. By default, all enabled encryption protocols are decrypted on incoming mail; if you wish to limit this to a subset, you may, via: Set( %Crypt, ... Incoming => ['SMIME'], ... ); RT can currently only use one protocol to encrypt and sign outgoing email; this defaults to the first enabled protocol. You many specify it explicitly via: Set( %Crypt, ... Outgoing => 'GnuPG', ... ); You can allow users to encrypt data in the database by setting the C key to a true value; by default, this is disabled. Be aware that users must have rights to see and modify tickets to use this feature. =head2 Per-queue options Using the web interface, it is possible to enable signing and/or encrypting by default. As an administrative user of RT, navigate to the 'Admin' and 'Queues' menus, and select a queue. If at least one encryption protocol is enabled, information concerning available keys will be displayed, as well as options to enable signing and encryption. =head2 Handling incoming messages To enable handling of encrypted and signed message in the RT you must enable the L mail plugin: Set(@MailPlugins, 'Auth::MailFrom', 'Auth::Crypt', ...other filter...); =head2 Error handling There are several global templates created in the database by default. RT uses these templates to send error messages to users or RT's owner. These templates have an 'Error:' or 'Error to RT owner:' prefix in the name. You can adjust the text of the messages using the web interface. Note that while C<$TicketObj>, C<$TransactionObj> and other variables usually available in RT's templates are not available in these templates, but each is passed alternate data structures can be used to build better messages; see the default templates and descriptions below. You can disable any particular notification by simply deleting the content of a template. Deleting the templates entirely is not suggested, as RT will log error messages when attempting to send mail usign them. =head3 Problems with public keys The 'Error: public key' template is used to inform the user that RT had problems with their public key, and thus will not be able to send encrypted content. There are several reasons why RT might fail to use a key; by default, the actual reason is not sent to the user, but sent to the RT owner using the 'Error to RT owner: public key' template. Possible reasons include "Not Found", "Ambiguous specification", "Wrong key usage", "Key revoked", "Key expired", "No CRL known", "CRL too old", "Policy mismatch", "Not a secret key", "Key not trusted" or "No specific reason given". In the 'Error: public key' template there are a few additional variables available: =over 4 =item $Message - user friendly error message =item $Reason - short reason as listed above =item $Recipient - recipient's identification =item $AddressObj - L object containing recipient's email address =back As a message may have several invalid recipients, to avoid sending many emails to the RT owner, the system sends one message to the owner, grouped by recipient. In the 'Error to RT owner: public key' template a C<@BadRecipients> array is available where each element is a hash reference that describes one recipient using the same fields as described above: @BadRecipients = ( { Message => '...', Reason => '...', Recipient => '...', ...}, { Message => '...', Reason => '...', Recipient => '...', ...}, ... ) =head3 Private key doesn't exist The 'Error: no private key' template is used to inform the user that they sent an encrypted email to RT, but RT does not have the private key to decrypt it. In this template L object C<$Message> is available, which is the originally received message. =head3 Invalid data The 'Error: bad encrypted data' template is used to inform the user that a message they sent had invalid data, and could not be handled. There are several possible reasons for this error, but most of them are data corruption or absence of expected information. In this template, the C<@Messages> array is available, and will contain a list of error messages. =head1 METHODS =head2 Protocols Returns the complete set of encryption protocols that RT implements; not all may be supported by this installation. =cut our @PROTOCOLS = ('GnuPG', 'SMIME'); our %PROTOCOLS = map { lc $_ => $_ } @PROTOCOLS; sub Protocols { return @PROTOCOLS; } =head2 EnabledProtocols Returns the set of enabled and available encryption protocols. =cut sub EnabledProtocols { my $self = shift; return grep RT->Config->Get($_)->{'Enable'}, $self->Protocols; } =head2 UseForOutgoing Returns the configured outgoing encryption protocol; see L. =cut sub UseForOutgoing { return RT->Config->Get('Crypt')->{'Outgoing'}; } =head2 EnabledOnIncoming Returns the list of encryption protocols that should be used for decryption and verification of incoming email; see L. This list is irrelevant unless L is enabled in L. =cut sub EnabledOnIncoming { return @{ scalar RT->Config->Get('Crypt')->{'Incoming'} }; } =head2 LoadImplementation CLASS Given the name of an encryption implementation (e.g. "GnuPG"), loads the L class associated with it; return the classname on success, and undef on failure. =cut sub LoadImplementation { state %cache; my $proto = $PROTOCOLS{ lc $_[1] } or die "Unknown protocol '$_[1]'"; my $class = 'RT::Crypt::'. $proto; return $cache{ $class } if exists $cache{ $class }; if ($class->require) { return $cache{ $class } = $class; } else { RT->Logger->warn( "Could not load $class: $@" ); return $cache{ $class } = undef; } } =head2 SimpleImplementationCall Protocol => NAME, [...] Examines the caller of this method, and dispatches to the method of the same name on the correct L class based on the provided C. =cut sub SimpleImplementationCall { my $self = shift; my %args = (@_); my $protocol = delete $args{'Protocol'} || $self->UseForOutgoing; my $method = (caller(1))[3]; $method =~ s/.*:://; my %res = $self->LoadImplementation( $protocol )->$method( %args ); $res{'Protocol'} = $protocol if keys %res; return %res; } =head2 FindProtectedParts Entity => MIME::Entity Looks for encrypted or signed parts of the given C, using all L encryption protocols. For each node in the MIME hierarchy, L for that L is called on each L protocol. Any multipart nodes not claimed by those protocols are recursed into. Finally, L is called on the top-most entity for each L protocol. Returns a list of hash references; each hash reference is guaranteed to contain a C key describing the protocol of the found part, and a C which is either C or C. The remaining keys are protocol-dependent; the hashref will be provided to L. =cut sub FindProtectedParts { my $self = shift; my %args = ( Entity => undef, Skip => {}, Scattered => 1, @_ ); my $entity = $args{'Entity'}; return () if $args{'Skip'}{ $entity }; $args{'TopEntity'} ||= $entity; my @protocols = $self->EnabledOnIncoming; foreach my $protocol ( @protocols ) { my $class = $self->LoadImplementation( $protocol ); my %info = $class->CheckIfProtected( TopEntity => $args{'TopEntity'}, Entity => $entity, ); next unless keys %info; $args{'Skip'}{ $entity } = 1; $info{'Protocol'} = $protocol; return \%info; } if ( $entity->effective_type =~ /^multipart\/(?:signed|encrypted)/ ) { # if no module claimed that it supports these types then # we don't dive in and check sub-parts $args{'Skip'}{ $entity } = 1; return (); } my @res; # not protected itself, look inside push @res, $self->FindProtectedParts( %args, Entity => $_, Scattered => 0, ) foreach grep !$args{'Skip'}{$_}, $entity->parts; if ( $args{'Scattered'} ) { my %parent; my $filter; $filter = sub { $parent{$_[0]} = $_[1]; unless ( $_[0]->is_multipart ) { return () if $args{'Skip'}{$_[0]}; return $_[0]; } return map $filter->($_, $_[0]), grep !$args{'Skip'}{$_}, $_[0]->parts; }; my @parts = $filter->($entity); return @res unless @parts; foreach my $protocol ( @protocols ) { my $class = $self->LoadImplementation( $protocol ); my @list = $class->FindScatteredParts( Entity => $args{'TopEntity'}, Parts => \@parts, Parents => \%parent, Skip => $args{'Skip'} ); next unless @list; $_->{'Protocol'} = $protocol foreach @list; push @res, @list; @parts = grep !$args{'Skip'}{$_}, @parts; } } return @res; } =head2 SignEncrypt Entity => ENTITY, [Sign => 1], [Encrypt => 1], [Recipients => ARRAYREF], [Signer => NAME], [Protocol => NAME], [Passphrase => VALUE] Takes a L object, and signs and/or encrypts it using the given C. If not set, C for encryption will be set by examining the C, C, and C headers of the MIME entity. If not set, C defaults to the C of the MIME entity. C, if not provided, will be retrieved using L. Returns a hash with at least the following keys: =over =item exit_code True if there was an error encrypting or signing. =item message An un-localized error message desribing the problem. =back =cut sub SignEncrypt { my $self = shift; my %args = (@_); my $entity = $args{'Entity'}; if ( $args{'Sign'} && !defined $args{'Signer'} ) { $args{'Signer'} = $self->UseKeyForSigning || do { my ($addr) = map {Email::Address->parse( Encode::decode( "UTF-8", $_ ) )} $entity->head->get( 'From' ); $addr ? $addr->address : undef }; } if ( $args{'Encrypt'} && !$args{'Recipients'} ) { my %seen; $args{'Recipients'} = [ grep $_ && !$seen{ $_ }++, map $_->address, map Email::Address->parse( Encode::decode("UTF-8", $_ ) ), map $entity->head->get( $_ ), qw(To Cc Bcc) ]; } return $self->SimpleImplementationCall( %args ); } =head2 SignEncryptContent Content => STRINGREF, [Sign => 1], [Encrypt => 1], [Recipients => ARRAYREF], [Signer => NAME], [Protocol => NAME], [Passphrase => VALUE] Signs and/or encrypts a string, which is passed by reference. C defaults to C, and C defaults to the global L. All other arguments and return values are identical to L. =cut sub SignEncryptContent { my $self = shift; my %args = (@_); if ( $args{'Sign'} && !defined $args{'Signer'} ) { $args{'Signer'} = $self->UseKeyForSigning; } if ( $args{'Encrypt'} && !$args{'Recipients'} ) { $args{'Recipients'} = [ RT->Config->Get('CorrespondAddress') ]; } return $self->SimpleImplementationCall( %args ); } =head2 DrySign Signer => KEY Signs a small message with the key, to make sure the key exists and we have a useable passphrase. The Signer argument MUST be a key identifier of the signer: either email address, key id or finger print. Returns a true value if all went well. =cut sub DrySign { my $self = shift; my $mime = MIME::Entity->build( Type => "text/plain", From => 'nobody@localhost', To => 'nobody@localhost', Subject => "dry sign", Data => ['t'], ); my %res = $self->SignEncrypt( @_, Sign => 1, Encrypt => 0, Entity => $mime, ); return $res{exit_code} == 0; } =head2 VerifyDecrypt Entity => ENTITY [, Passphrase => undef ] Locates all protected parts of the L object C, as found by L, and calls L from the appropriate L class on each. C, if not provided, will be retrieved using L. Returns a list of the hash references returned from L. =cut sub VerifyDecrypt { my $self = shift; my %args = ( Entity => undef, Recursive => 1, @_ ); my @res; my @protected = $self->FindProtectedParts( Entity => $args{'Entity'} ); foreach my $protected ( @protected ) { my %res = $self->SimpleImplementationCall( %args, Protocol => $protected->{'Protocol'}, Info => $protected ); # Let the header be modified so continuations are handled my $modify = $res{status_on}->head->modify; $res{status_on}->head->modify(1); $res{status_on}->head->add( "X-RT-" . $protected->{'Protocol'} . "-Status" => $res{'status'} ); $res{status_on}->head->modify($modify); push @res, \%res; } push @res, $self->VerifyDecrypt( %args ) if $args{Recursive} and @res and not grep {$_->{'exit_code'}} @res; return @res; } =head2 DecryptContent Protocol => NAME, Content => STRINGREF, [Passphrase => undef] Decrypts the content in the string reference in-place. All other arguments and return values are identical to L. =cut sub DecryptContent { return shift->SimpleImplementationCall( @_ ); } =head2 ParseStatus Protocol => NAME, Status => STRING Takes a C describing the status of verification/decryption, usually as stored in a MIME header. Parses it and returns array of hash references, one for each operation. Each hashref contains at least three keys: =over =item Operation The classification of the process whose status is being reported upon. Valid values include C, C, C, C, C, C and C. =item Status Whether the operation was successful; contains C on success. Other possible values include C, C, or C. =item Message An un-localized user friendly message. =back =cut sub ParseStatus { my $self = shift; my %args = ( Protocol => undef, Status => '', @_ ); return $self->LoadImplementation( $args{'Protocol'} )->ParseStatus( $args{'Status'} ); } =head2 UseKeyForSigning [KEY] Returns or sets the identifier of the key that should be used for signing. Returns the current value when called without arguments; sets the new value when called with one argument and unsets if it's undef. This cache is cleared at the end of every request. =cut sub UseKeyForSigning { my $self = shift; state $key; if ( @_ ) { $key = $_[0]; } return $key; } =head2 UseKeyForEncryption [KEY [, VALUE]] Gets or sets keys to use for encryption. When passed no arguments, clears the cache. When passed just a key, returns the encryption key previously stored for that key. When passed two (or more) keys, stores them associatively. This cache is reset at the end of every request. =cut sub UseKeyForEncryption { my $self = shift; state %key; unless ( @_ ) { %key = (); } elsif ( @_ > 1 ) { %key = (%key, @_); $key{ lc($_) } = delete $key{ $_ } foreach grep lc ne $_, keys %key; } else { return $key{ $_[0] }; } return (); } =head2 GetKeysForEncryption Recipient => EMAIL, Protocol => NAME Returns the list of keys which are suitable for encrypting mail to the given C. Generally this is equivalent to L with a C of , but encryption protocols may further limit which keys can be used for encryption, as opposed to signing. =cut sub CheckRecipients { my $self = shift; my @recipients = (@_); my ($status, @issues) = (1, ()); my $trust = sub { 1 }; if ( $self->UseForOutgoing eq 'SMIME' ) { $trust = sub { $_[0]->{'TrustLevel'} > 0 or RT->Config->Get('SMIME')->{AcceptUntrustedCAs} }; } elsif ( $self->UseForOutgoing eq 'GnuPG' ) { $trust = sub { $_[0]->{'TrustLevel'} > 0 }; } my %seen; foreach my $address ( grep !$seen{ lc $_ }++, map $_->address, @recipients ) { my %res = $self->GetKeysForEncryption( Recipient => $address ); if ( $res{'info'} && @{ $res{'info'} } == 1 and $trust->($res{'info'}[0]) ) { # One key, which is trusted, or we can sign with an # untrusted key (aka SMIME with AcceptUntrustedCAs) next; } my $user = RT::User->new( RT->SystemUser ); $user->LoadByEmail( $address ); # it's possible that we have no User record with the email $user = undef unless $user->id; if ( my $fpr = RT::Crypt->UseKeyForEncryption( $address ) ) { if ( $res{'info'} && @{ $res{'info'} } ) { next if grep lc $_->{'Fingerprint'} eq lc $fpr, grep $trust->($_), @{ $res{'info'} }; } $status = 0; my %issue = ( EmailAddress => $address, $user? (User => $user) : (), Keys => undef, ); $issue{'Message'} = "Selected key either is not trusted or doesn't exist anymore."; #loc push @issues, \%issue; next; } my $prefered_key; $prefered_key = $user->PreferredKey if $user; #XXX: prefered key is not yet implemented... # classify errors $status = 0; my %issue = ( EmailAddress => $address, $user? (User => $user) : (), Keys => undef, ); unless ( $res{'info'} && @{ $res{'info'} } ) { # no key $issue{'Message'} = "There is no key suitable for encryption."; #loc } elsif ( @{ $res{'info'} } == 1 && !$res{'info'}[0]{'TrustLevel'} ) { # trust is not set $issue{'Message'} = "There is one suitable key, but trust level is not set."; #loc } else { # multiple keys $issue{'Message'} = "There are several keys suitable for encryption."; #loc } push @issues, \%issue; } return ($status, @issues); } sub GetKeysForEncryption { my $self = shift; my %args = @_%2? (Recipient => @_) : (Protocol => undef, Recipient => undef, @_ ); return $self->SimpleImplementationCall( %args ); } =head2 GetKeysForSigning Signer => EMAIL, Protocol => NAME Returns the list of keys which are suitable for signing mail from the given C. Generally this is equivalent to L with a C of , but encryption protocols may further limit which keys can be used for signing, as opposed to encryption. =cut sub GetKeysForSigning { my $self = shift; my %args = @_%2? (Signer => @_) : (Protocol => undef, Signer => undef, @_); return $self->SimpleImplementationCall( %args ); } =head2 GetPublicKeyInfo Protocol => NAME, KEY => EMAIL As per L, but the C is forced to C. =cut sub GetPublicKeyInfo { return (shift)->GetKeyInfo( @_, Type => 'public' ); } =head2 GetPrivateKeyInfo Protocol => NAME, KEY => EMAIL As per L, but the C is forced to C. =cut sub GetPrivateKeyInfo { return (shift)->GetKeyInfo( @_, Type => 'private' ); } =head2 GetKeyInfo Protocol => NAME, Type => ('public'|'private'), KEY => EMAIL As per L, but only the first matching key is returned in the C value of the result. =cut sub GetKeyInfo { my $self = shift; my %res = $self->GetKeysInfo( @_ ); $res{'info'} = $res{'info'}->[0]; return %res; } =head2 GetKeysInfo Protocol => NAME, Type => ('public'|'private'), Key => EMAIL Looks up information about the public or private keys (as determined by C) for the email address C. As each protocol has its own key store, C is also required. If no C is provided and a true value for C is given, returns all keys. The return value is a hash containing C and C in the case of failure, or C, which is an array reference of key information. Each key is represented as a hash reference; the keys are protocol-dependent, but will at least contain: =over =item Protocol The name of the protocol of this key =item Created An L of the date the key was created; undef if unset. =item Expire An L of the date the key expires; undef if the key does not expire. =item Fingerprint A fingerprint unique to this key =item Formatted A formatted string representation of the key =item User An array reference of associated user data, each of which is a hashref containing at least a C value, which is a C<< Alice Example >> style email address. Each may also contain C and C keys, which are L objects. =back =cut sub GetKeysInfo { my $self = shift; my %args = @_%2 ? (Key => @_) : ( Protocol => undef, Key => undef, @_ ); return $self->SimpleImplementationCall( %args ); } 1; rt-4.2.12/lib/RT/CurrentUser.pm000644 000765 000024 00000015674 12555754775 016632 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} =head1 NAME RT::CurrentUser - an RT object representing the current user =head1 SYNOPSIS use RT::CurrentUser; # load my $current_user = RT::CurrentUser->new; $current_user->Load(...); # or my $current_user = RT::CurrentUser->new( $user_obj ); # or my $current_user = RT::CurrentUser->new( $address || $name || $id ); # manipulation $current_user->UserObj->SetName('new_name'); =head1 DESCRIPTION B subclass of L class. Used to define the current user. You should pass an instance of this class to constructors of many RT classes, then the instance used to check ACLs and localize strings. =head1 METHODS See also L for a list of methods this class has. =head2 new Returns new CurrentUser object. Unlike all other classes of RT it takes either subclass of C class object or scalar value that is passed to Load method. =cut package RT::CurrentUser; use strict; use warnings; use base qw/RT::User/; use RT::I18N; #The basic idea here is that $self->CurrentUser is always supposed # to be a CurrentUser object. but that's hard to do when we're trying to load # the CurrentUser object sub _Init { my $self = shift; my $User = shift; $self->{'table'} = "Users"; if ( defined $User ) { if ( UNIVERSAL::isa( $User, 'RT::User' ) ) { $self->LoadById( $User->id ); } elsif ( ref $User ) { $RT::Logger->crit( "RT::CurrentUser->new() called with a bogus argument: $User"); } else { $self->Load( $User ); } } $self->_BuildTableAttributes; } =head2 Create, Delete and Set* As stated above it's a subclass of L, but this class is read-only and calls to these methods are illegal. Return 'permission denied' message and log an error. =cut sub Create { my $self = shift; $RT::Logger->error('RT::CurrentUser is read-only, RT::User for manipulation'); return (0, $self->loc('Permission Denied')); } sub Delete { my $self = shift; $RT::Logger->error('RT::CurrentUser is read-only, RT::User for manipulation'); return (0, $self->loc('Permission Denied')); } sub _Set { my $self = shift; $RT::Logger->error('RT::CurrentUser is read-only, RT::User for manipulation'); return (0, $self->loc('Permission Denied')); } =head2 UserObj Returns the L object associated with this CurrentUser object. =cut sub UserObj { my $self = shift; my $user = RT::User->new( $self ); unless ( $user->LoadById( $self->Id ) ) { $RT::Logger->error("Couldn't load " . $self->Id . " from the users database."); } return $user; } sub _CoreAccessible { { Name => { 'read' => 1 }, Gecos => { 'read' => 1 }, RealName => { 'read' => 1 }, Lang => { 'read' => 1 }, Password => { 'read' => 0, 'write' => 0 }, EmailAddress => { 'read' => 1, 'write' => 0 } }; } =head2 LoadByGecos Loads a User into this CurrentUser object. Takes a unix username as its only argument. =cut sub LoadByGecos { my $self = shift; return $self->LoadByCol( "Gecos", shift ); } =head2 LoadByName Loads a User into this CurrentUser object. Takes a Name. =cut sub LoadByName { my $self = shift; return $self->LoadByCol( "Name", shift ); } =head2 LanguageHandle Returns this current user's langauge handle. Should take a language specification. but currently doesn't =cut sub LanguageHandle { my $self = shift; if ( !defined $self->{'LangHandle'} || !UNIVERSAL::can( $self->{'LangHandle'}, 'maketext' ) || @_ ) { if ( my $lang = $self->Lang ) { push @_, $lang; } elsif ( $self->id && ($self->id == (RT->SystemUser->id||0) || $self->id == (RT->Nobody->id||0)) ) { # don't use ENV magic for system users push @_, 'en'; } $self->{'LangHandle'} = RT::I18N->get_handle(@_); } # Fall back to english. unless ( $self->{'LangHandle'} ) { die "We couldn't get a dictionary. Ne mogu naidti slovar. No puedo encontrar dictionario."; } return $self->{'LangHandle'}; } sub loc { my $self = shift; return '' if !defined $_[0] || $_[0] eq ''; my $handle = $self->LanguageHandle; if (@_ == 1) { # If we have no [_1] replacements, and the key does not appear # in the lexicon, unescape (using ~) and return it verbatim, as # an optimization. my $unescaped = $_[0]; $unescaped =~ s!~(.)!$1!g; return $unescaped unless grep exists $_->{$_[0]}, @{ $handle->_lex_refs }; } return $handle->maketext(@_); } sub loc_fuzzy { my $self = shift; return '' if !defined $_[0] || $_[0] eq ''; return $self->LanguageHandle->maketext_fuzzy( @_ ); } =head2 CurrentUser Return the current currentuser object =cut sub CurrentUser { return shift; } sub CustomFieldLookupType { return "RT::User"; } RT::Base->_ImportOverlays(); 1; rt-4.2.12/lib/RT/CustomField.pm000644 000765 000024 00000174553 12555754775 016571 0ustar00sartakstaff000000 000000 # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) # # # LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: # # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) # # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that # you are the copyright holder for those contributions and you grant # Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} package RT::CustomField; use strict; use warnings; use 5.010; use Scalar::Util 'blessed'; use base 'RT::Record'; use Role::Basic 'with'; with "RT::Record::Role::Rights"; sub Table {'CustomFields'} use Scalar::Util qw(blessed); use RT::CustomFieldValues; use RT::ObjectCustomFields; use RT::ObjectCustomFieldValues; our %FieldTypes = ( Select => { sort_order => 10, selection_type => 1, labels => [ 'Select multiple values', # loc 'Select one value', # loc 'Select up to [quant,_1,value,values]', # loc ], render_types => { multiple => [ # Default is the first one 'Select box', # loc 'List', # loc ], single => [ 'Select box', # loc 'Dropdown', # loc 'List', # loc ] }, }, Freeform => { sort_order => 20, selection_type => 0, labels => [ 'Enter multiple values', # loc 'Enter one value', # loc 'Enter up to [quant,_1,value,values]', # loc ] }, Text => { sort_order => 30, selection_type => 0, labels => [ 'Fill in multiple text areas', # loc 'Fill in one text area', # loc 'Fill in up to [quant,_1,text area,text areas]', # loc ] }, Wikitext => { sort_order => 40, selection_type => 0, labels => [ 'Fill in multiple wikitext areas', # loc 'Fill in one wikitext area', # loc 'Fill in up to [quant,_1,wikitext area,wikitext areas]', # loc ] }, Image => { sort_order => 50, selection_type => 0, labels => [ 'Upload multiple images', # loc 'Upload one image', # loc 'Upload up to [quant,_1,image,images]', # loc ] }, Binary => { sort_order => 60, selection_type => 0, labels => [ 'Upload multiple files', # loc 'Upload one file', # loc 'Upload up to [quant,_1,file,files]', # loc ] }, Combobox => { sort_order => 70, selection_type => 1, labels => [ 'Combobox: Select or enter multiple values', # loc 'Combobox: Select or enter one value', # loc 'Combobox: Select or enter up to [quant,_1,value,values]', # loc ] }, Autocomplete => { sort_order => 80, selection_type => 1, labels => [ 'Enter multiple values with autocompletion', # loc 'Enter one value with autocompletion', # loc 'Enter up to [quant,_1,value,values] with autocompletion', # loc ] }, Date => { sort_order => 90, selection_type => 0, labels => [ 'Select multiple dates', # loc 'Select date', # loc 'Select up to [quant,_1,date,dates]', # loc ] }, DateTime => { sort_order => 100, selection_type => 0, labels => [ 'Select multiple datetimes', # loc 'Select datetime', # loc 'Select up to [quant,_1,datetime,datetimes]', # loc ] }, IPAddress => { sort_order => 110, selection_type => 0, labels => [ 'Enter multiple IP addresses', # loc 'Enter one IP address', # loc 'Enter up to [quant,_1,IP address,IP addresses]', # loc ] }, IPAddressRange => { sort_order => 120, selection_type => 0, labels => [ 'Enter multiple IP address ranges', # loc 'Enter one IP address range', # loc 'Enter up to [quant,_1,IP address range,IP address ranges]', # loc ] }, ); my %BUILTIN_GROUPINGS; my %FRIENDLY_LOOKUP_TYPES = (); __PACKAGE__->RegisterLookupType( 'RT::Queue-RT::Ticket' => "Tickets", ); #loc __PACKAGE__->RegisterLookupType( 'RT::Queue-RT::Ticket-RT::Transaction' => "Ticket Transactions", ); #loc __PACKAGE__->RegisterLookupType( 'RT::User' => "Users", ); #loc __PACKAGE__->RegisterLookupType( 'RT::Queue' => "Queues", ); #loc __PACKAGE__->RegisterLookupType( 'RT::Group' => "Groups", ); #loc __PACKAGE__->RegisterBuiltInGroupings( 'RT::Ticket' => [ qw(Basics Dates Links People) ], 'RT::User' => [ 'Identity', 'Access control', 'Location', 'Phones' ], ); __PACKAGE__->AddRight( General => SeeCustomField => 'View custom fields'); # loc __PACKAGE__->AddRight( Admin => AdminCustomField => 'Create, modify and delete custom fields'); # loc __PACKAGE__->AddRight( Admin => AdminCustomFieldValues => 'Create, modify and delete custom fields values'); # loc __PACKAGE__->AddRight( Staff => ModifyCustomField => 'Add, modify and delete custom field values for objects'); # loc =head1 NAME RT::CustomField_Overlay - overlay for RT::CustomField =head1 DESCRIPTION =head1 'CORE' METHODS =head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: varchar(200) 'Name'. varchar(200) 'Type'. int(11) 'MaxValues'. varchar(255) 'Pattern'. varchar(255) 'Description'. int(11) 'SortOrder'. varchar(255) 'LookupType'. smallint(6) 'Disabled'. C is generally the result of either CCustomFieldLookupType> or CCustomFieldLookupType>. =cut sub Create { my $self = shift; my %args = ( Name => '', Type => '', MaxValues => 0, Pattern => '', Description => '', Disabled => 0, LookupType => '', LinkValueTo => '', IncludeContentForValue => '', @_, ); unless ( $self->CurrentUser->HasRight(Object => $RT::System, Right => 'AdminCustomField') ) { return (0, $self->loc('Permission Denied')); } if ( $args{TypeComposite} ) { @args{'Type', 'MaxValues'} = split(/-/, $args{TypeComposite}, 2); } elsif ( $args{Type} =~ s/(?:(Single)|Multiple)$// ) { # old style Type string $args{'MaxValues'} = $1 ? 1 : 0; } $args{'MaxValues'} = int $args{'MaxValues'}; if ( !exists $args{'Queue'}) { # do nothing -- things below are strictly backward compat } elsif ( ! $args{'Queue'} ) { unless ( $self->CurrentUser->HasRight( Object => $RT::System, Right => 'AssignCustomFields') ) { return ( 0, $self->loc('Permission Denied') ); } $args{'LookupType'} = 'RT::Queue-RT::Ticket'; } else { my $queue = RT::Queue->new($self->CurrentUser); $queue->Load($args{'Queue'}); unless ($queue->Id) { return (0, $self->loc("Queue not found")); } unless ( $queue->CurrentUserHasRight('AssignCustomFields') ) { return ( 0, $self->loc('Permission Denied') ); } $args{'LookupType'} = 'RT::Queue-RT::Ticket'; $args{'Queue'} = $queue->Id; } my ($ok, $msg) = $self->_IsValidRegex( $args{'Pattern'} ); return (0, $self->loc("Invalid pattern: [_1]", $msg)) unless $ok; if ( $args{'MaxValues'} != 1 && $args{'Type'} =~ /(text|combobox)$/i ) { $RT::Logger->debug("Support for 'multiple' Texts or Comboboxes is not implemented"); $args{'MaxValues'} = 1; } if ( $args{'RenderType'} ||= undef ) { my $composite = join '-', @args{'Type', 'MaxValues'}; return (0, $self->loc("This custom field has no Render Types")) unless $self->HasRenderTypes( $composite ); if ( $args{'RenderType'} eq $self->DefaultRenderType( $composite ) ) { $args{'RenderType'} = undef; } else { return (0, $self->loc("Invalid Render Type") ) unless grep $_ eq $args{'RenderType'}, $self->RenderTypes( $composite ); } } $args{'ValuesClass'} = undef if ($args{'ValuesClass'} || '') eq 'RT::CustomFieldValues'; if ( $args{'ValuesClass'} ||= undef ) { return (0, $self->loc("This Custom Field can not have list of values")) unless $self->IsSelectionType( $args{'Type'} ); unless ( $self->ValidateValuesClass( $args{'ValuesClass'} ) ) { return (0, $self->loc("Invalid Custom Field values source")); } } $args{'Disabled'} ||= 0; (my $rv, $msg) = $self->SUPER::Create( Name => $args{'Name'}, Type => $args{'Type'}, RenderType => $args{'RenderType'}, MaxValues => $args{'MaxValues'}, Pattern => $args{'Pattern'}, BasedOn => $args{'BasedOn'}, ValuesClass => $args{'ValuesClass'}, Description => $args{'Description'}, Disabled => $args{'Disabled'}, LookupType => $args{'LookupType'}, ); if ($rv) { if ( exists $args{'LinkValueTo'}) { $self->SetLinkValueTo($args{'LinkValueTo'}); } if ( exists $args{'IncludeContentForValue'}) { $self->SetIncludeContentForValue($args{'IncludeContentForValue'}); } return ($rv, $msg) unless exists $args{'Queue'}; # Compat code -- create a new ObjectCustomField mapping my $OCF = RT::ObjectCustomField->new( $self->CurrentUser ); $OCF->Create( CustomField => $self->Id, ObjectId => $args{'Queue'}, ); } return ($rv, $msg); } =head2 Load ID/NAME Load a custom field. If the value handed in is an integer, load by custom field ID. Otherwise, Load by name. =cut sub Load { my $self = shift; my $id = shift || ''; if ( $id =~ /^\d+$/ ) { return $self->SUPER::Load( $id ); } else { return $self->LoadByName( Name => $id ); } } =head2 LoadByName Name => C, [...] Loads the Custom field named NAME. As other optional parameters, takes: =over =item LookupType => C The type of Custom Field to look for; while this parameter is not required, it is highly suggested, or you may not find the Custom Field you are expecting. It should be passed a C such as L or L. =item ObjectType => C The class of object that the custom field is applied to. This can be intuited from the provided C. =item ObjectId => C limits the custom field search to one applied to the relevant id. For example, if a C of C<< RT::Ticket->CustomFieldLookupType >> is used, this is which Queue the CF must be applied to. Pass 0 to only search custom fields that are applied globally. =item IncludeDisabled => C Whether it should return Disabled custom fields if they match; defaults to on, though non-Disabled custom fields are returned preferentially. =item IncludeGlobal => C Whether to also search global custom fields, even if a value is provided for C; defaults to off. Non-global custom fields are returned preferentially. =back For backwards compatibility, a value passed for C is equivalent to specifying a C of L, and a C of the value passed as C. If multiple custom fields match the above constraints, the first according to C will be returned; ties are broken by C, lowest-first. =head2 LoadNameAndQueue =head2 LoadByNameAndQueue Deprecated alternate names for L. =cut # Compatibility for API change after 3.0 beta 1 *LoadNameAndQueue = \&LoadByName; # Change after 3.4 beta. *LoadByNameAndQueue = \&LoadByName; sub LoadByName { my $self = shift; my %args = ( Name => undef, LookupType => undef, ObjectType => undef, ObjectId => undef, IncludeDisabled => 1, IncludeGlobal => 0, # Back-compat Queue => undef, @_, ); unless ( defined $args{'Name'} && length $args{'Name'} ) { $RT::Logger->error("Couldn't load Custom Field without Name"); return wantarray ? (0, $self->loc("No name provided")) : 0; } if ( defined $args{'Queue'} ) { # Set a LookupType for backcompat, otherwise we'll calculate # one of RT::Queue from your ContextObj. Older code was relying # on us defaulting to RT::Queue-RT::Ticket in old LimitToQueue call. $args{LookupType} ||= 'RT::Queue-RT::Ticket'; $args{ObjectId} //= delete $args{Queue}; } # Default the ObjectType to the top category of the LookupType; it's # what the CFs are assigned on. $args{ObjectType} ||= $1 if $args{LookupType} and $args{LookupType} =~ /^([^-]+)/; # Resolve the ObjectId/ObjectType; this is necessary to properly # limit ObjectId, and also possibly useful to set a ContextObj if we # are currently lacking one. It is not strictly necessary if we # have a context object and were passed a numeric ObjectId, but it # cannot hurt to verify its sanity. Skip if we have a false # ObjectId, which means "global", or if we lack an ObjectType if ($args{ObjectId} and $args{ObjectType}) { my ($obj, $ok, $msg); eval { $obj = $args{ObjectType}->new( $self->CurrentUser ); ($ok, $msg) = $obj->Load( $args{ObjectId} ); }; if ($ok) { $args{ObjectId} = $obj->id; $self->SetContextObject( $obj ) unless $self->ContextObject; } else { $RT::Logger->warning("Failed to load $args{ObjectType} '$args{ObjectId}'"); if ($args{IncludeGlobal}) { # Fall back to acting like we were only asked about the # global case $args{ObjectId} = 0; } else { # If they didn't also want global results, there's no # point in searching; abort return wantarray ? (0, $self->loc("Not found")) : 0; } } } elsif (not $args{ObjectType} and $args{ObjectId}) { # If we skipped out on the above due to lack of ObjectType, make # sure we clear out ObjectId of anything lingering $RT::Logger->warning("No LookupType or ObjectType passed; ignoring ObjectId"); delete $args{ObjectId}; } my $CFs = RT::CustomFields->new( $self->CurrentUser ); $CFs->SetContextObject( $self->ContextObject ); my $field = $args{'Name'} =~ /\D/? 'Name' : 'id'; $CFs->Limit( FIELD => $field, VALUE => $args{'Name'}, CASESENSITIVE => 0); # The context object may be a ticket, for example, as context for a # queue CF. The valid lookup types are thus the entire set of # ACLEquivalenceObjects for the context object. $args{LookupType} ||= [ map {$_->CustomFieldLookupType} ($self->ContextObject, $self->ContextObject->ACLEquivalenceObjects) ] if $self->ContextObject; # Apply LookupType limits $args{LookupType} = [ $args{LookupType} ] if $args{LookupType} and not ref($args{LookupType}); $CFs->Limit( FIELD => "LookupType", OPERATOR => "IN", VALUE => $args{LookupType} ) if $args{LookupType}; # Default to by SortOrder and id; this mirrors the standard ordering # of RT::CustomFields (minus the Name, which is guaranteed to be # fixed) my @order = ( { FIELD => 'SortOrder', ORDER => 'ASC' }, { FIELD => 'id', ORDER => 'ASC' }, ); if (defined $args{ObjectId}) { # The join to OCFs is distinct -- either we have a global # application or an objectid match, but never both. Even if # this were not the case, we care only for the first row. my $ocfs = $CFs->_OCFAlias( Distinct => 1); if ($args{IncludeGlobal}) { $CFs->Limit( ALIAS => $ocfs, FIELD => 'ObjectId', OPERATOR => 'IN', VALUE => [ $args{ObjectId}, 0 ], ); # Find the queue-specific first unshift @order, { ALIAS => $ocfs, FIELD => "ObjectId", ORDER => "DESC" }; } else { $CFs->Limit( ALIAS => $ocfs, FIELD => 'ObjectId', VALUE => $args{ObjectId}, ); } } if ($args{IncludeDisabled}) { # Load disabled fields, but return them only as a last resort. # This goes at the front of @order, as we prefer the # non-disabled global CF to the disabled Queue-specific CF. $CFs->FindAllRows; unshift @order, { FIELD => "Disabled", ORDER => 'ASC' }; } # Apply the above orderings $CFs->OrderByCols( @order ); # We only want one entry. $CFs->RowsPerPage(1); # version before 3.8 just returns 0, so we need to test if wantarray to be # backward compatible. return wantarray ? (0, $self->loc("Not found")) : 0 unless my $first = $CFs->First; return $self->LoadById( $first->id ); } =head2 Custom field values =head3 Values FIELD Return a object (collection) of all acceptable values for this Custom Field. Class of the object can vary and depends on the return value of the C method. =cut *ValuesObj = \&Values; sub Values { my $self = shift; my $class = $self->ValuesClass; if ( $class ne 'RT::CustomFieldValues') { $class->require or die "Can't load $class: $@"; } my $cf_values = $class->new( $self->CurrentUser ); $cf_values->SetCustomFieldObject( $self ); # if the user has no rights, return an empty object if ( $self->id && $self->CurrentUserHasRight( 'SeeCustomField') ) { $cf_values->LimitToCustomField( $self->Id ); } else { $cf_values->Limit( FIELD => 'id', VALUE => 0, SUBCLAUSE => 'acl' ); } return ($cf_values); } =head3 AddValue HASH Create a new value for this CustomField. Takes a paramhash containing the elements Name, Description and SortOrder =cut sub AddValue { my $self = shift; my %args = @_; unless ($self->CurrentUserHasRight('AdminCustomField') || $self->CurrentUserHasRight('AdminCustomFieldValues')) { return (0, $self->loc('Permission Denied')); } # allow zero value if ( !defined $args{'Name'} || $args{'Name'} eq '' ) { return (0, $self->loc("Can't add a custom field value without a name")); } my $newval = RT::CustomFieldValue->new( $self->CurrentUser ); return $newval->Create( %args, CustomField => $self->Id ); } =head3 DeleteValue ID Deletes a value from this custom field by id. Does not remove this value for any article which has had it selected =cut sub DeleteValue { my $self = shift; my $id = shift; unless ( $self->CurrentUserHasRight('AdminCustomField') || $self->CurrentUserHasRight('AdminCustomFieldValues') ) { return (0, $self->loc('Permission Denied')); } my $val_to_del = RT::CustomFieldValue->new( $self->CurrentUser ); $val_to_del->Load( $id ); unless ( $val_to_del->Id ) { return (0, $self->loc("Couldn't find that value")); } unless ( $val_to_del->CustomField == $self->Id ) { return (0, $self->loc("That is not a value for this custom field")); } my $retval = $val_to_del->Delete; unless ( $retval ) { return (0, $self->loc("Custom field value could not be deleted")); } return ($retval, $self->loc("Custom field value deleted")); } =head2 ValidateQueue Queue Make sure that the name specified is valid =cut sub ValidateName { my $self = shift; my $value = shift; return 0 unless length $value; return $self->SUPER::ValidateName($value); } =head2 ValidateQueue Queue Make sure that the queue specified is a valid queue name =cut sub ValidateQueue { my $self = shift; my $id = shift; return undef unless defined $id; # 0 means "Global" null would _not_ be ok. return 1 if $id eq '0'; my $q = RT::Queue->new( RT->SystemUser ); $q->Load( $id ); return undef unless $q->id; return 1; } =head2 Types Retuns an array of the types of CustomField that are supported =cut sub Types { return (sort {(($FieldTypes{$a}{sort_order}||999) <=> ($FieldTypes{$b}{sort_order}||999)) or ($a cmp $b)} keys %FieldTypes); } =head2 IsSelectionType Retuns a boolean value indicating whether the C method makes sense to this Custom Field. =cut sub IsSelectionType { my $self = shift; my $type = @_? shift : $self->Type; return undef unless $type; return $FieldTypes{$type}->{selection_type}; } =head2 IsExternalValues =cut sub IsExternalValues { my $self = shift; return 0 unless $self->IsSelectionType( @_ ); return $self->ValuesClass eq 'RT::CustomFieldValues'? 0 : 1; } sub ValuesClass { my $self = shift; return $self->_Value( ValuesClass => @_ ) || 'RT::CustomFieldValues'; } sub SetValuesClass { my $self = shift; my $class = shift || 'RT::CustomFieldValues'; if ( $class eq 'RT::CustomFieldValues' ) { return $self->_Set( Field => 'ValuesClass', Value => undef, @_ ); } return (0, $self->loc("This Custom Field can not have list of values")) unless $self->IsSelectionType; unless ( $self->ValidateValuesClass( $class ) ) { return (0, $self->loc("Invalid Custom Field values source")); } return $self->_Set( Field => 'ValuesClass', Value => $class, @_ ); } sub ValidateValuesClass { my $self = shift; my $class = shift; return 1 if !$class || $class eq 'RT::CustomFieldValues'; return 1 if grep $class eq $_, RT->Config->Get('CustomFieldValuesSources'); return undef; } =head2 FriendlyType [TYPE, MAX_VALUES] Returns a localized human-readable version of the custom field type. If a custom field type is specified as the parameter, the friendly type for that type will be returned =cut sub FriendlyType { my $self = shift; my $type = @_ ? shift : $self->Type; my $max = @_ ? shift : $self->MaxValues; $max = 0 unless $max; if (my $friendly_type = $FieldTypes{$type}->{labels}->[$max>2 ? 2 : $max]) { return ( $self->loc( $friendly_type, $max ) ); } else { return ( $self->loc( $type ) ); } } sub FriendlyTypeComposite { my $self = shift; my $composite = shift || $self->TypeComposite; return $self->FriendlyType(split(/-/, $composite, 2)); } =head2 ValidateType TYPE Takes a single string. returns true if that string is a value type of custom field =cut sub ValidateType { my $self = shift; my $type = shift; if ( $type =~ s/(?:Single|Multiple)$// ) { RT->Deprecated( Arguments => "suffix 'Single' or 'Multiple'", Instead => "MaxValues", Remove => "4.4", ); } if ( $FieldTypes{$type} ) { return 1; } else { return undef; } } sub SetType { my $self = shift; my $type = shift; if ($type =~ s/(?:(Single)|Multiple)$//) { RT->Deprecated( Arguments => "suffix 'Single' or 'Multiple'", Instead => "MaxValues", Remove => "4.4", ); $self->SetMaxValues($1 ? 1 : 0); } $self->_Set(Field => 'Type', Value =>$type); } =head2 SetPattern STRING Takes a single string representing a regular expression. Performs basic validation on that regex, and sets the C field for the CF if it is valid. =cut sub SetPattern { my $self = shift; my $regex = shift; my ($ok, $msg) = $self->_IsValidRegex($regex); if ($ok) { return $self->_Set(Field => 'Pattern', Value => $regex); } else { return (0, $self->loc("Invalid pattern: [_1]", $msg)); } } =head2 _IsValidRegex(Str $regex) returns (Bool $success, Str $msg) Tests if the string contains an invalid regex. =cut sub _IsValidRegex { my $self = shift; my $regex = shift or return (1, 'valid'); local $^W; local $@; local $SIG{__DIE__} = sub { 1 }; local $SIG{__WARN__} = sub { 1 }; if (eval { qr/$regex/; 1 }) { return (1, 'valid'); } my $err = $@; $err =~ s{[,;].*}{}; # strip debug info from error chomp $err; return (0, $err); } =head2 SingleValue Returns true if this CustomField only accepts a single value. Returns false if it accepts multiple values =cut sub SingleValue { my $self = shift; if (($self->MaxValues||0) == 1) { return 1; } else { return undef; } } sub UnlimitedValues { my $self = shift; if (($self->MaxValues||0) == 0) { return 1; } else { return undef; } } =head2 ACLEquivalenceObjects Returns list of objects via which users can get rights on this custom field. For custom fields these objects can be set using L. =cut sub ACLEquivalenceObjects { my $self = shift; my $ctx = $self->ContextObject or return; return ($ctx, $ctx->ACLEquivalenceObjects); } =head2 ContextObject and SetContextObject Set or get a context for this object. It can be ticket, queue or another object this CF added to. Used for ACL control, for example SeeCustomField can be granted on queue level to allow people to see all fields added to the queue. =cut sub SetContextObject { my $self = shift; return $self->{'context_object'} = shift; } sub ContextObject { my $self = shift; return $self->{'context_object'}; } sub ValidContextType { my $self = shift; my $class = shift; my %valid; $valid{$_}++ for split '-', $self->LookupType; delete $valid{'RT::Transaction'}; return $valid{$class}; } =head2 LoadContextObject Takes an Id for a Context Object and loads the right kind of RT::Object for this particular Custom Field (based on the LookupType) and returns it. This is a good way to ensure you don't try to use a Queue as a Context Object on a User Custom Field. =cut sub LoadContextObject { my $self = shift; my $type = shift; my $contextid = shift; unless ( $self->ValidContextType($type) ) { RT->Logger->debug("Invalid ContextType $type for Custom Field ".$self->Id); return; } my $context_object = $type->new( $self->CurrentUser ); my ($id, $msg) = $context_object->LoadById( $contextid ); unless ( $id ) { RT->Logger->debug("Invalid ContextObject id: $msg"); return; } return $context_object; } =head2 ValidateContextObject Ensure that a given ContextObject applies to this Custom Field. For custom fields that are assigned to Queues or to Classes, this checks that the Custom Field is actually added to that object. For Global Custom Fields, it returns true as long as the Object is of the right type, because you may be using your permissions on a given Queue of Class to see a Global CF. For CFs that are only added globally, you don't need a ContextObject. =cut sub ValidateContextObject { my $self = shift; my $object = shift; return 1 if $self->IsGlobal; # global only custom fields don't have objects # that should be used as context objects. return if $self->IsOnlyGlobal; # Otherwise, make sure we weren't passed a user object that we're # supposed to treat as a queue. return unless $self->ValidContextType(ref $object); # Check that it is added correctly my ($added_to) = grep {ref($_) eq $self->RecordClassFromLookupType} ($object, $object->ACLEquivalenceObjects); return unless $added_to; return $self->IsAdded($added_to->id); } sub _Set { my $self = shift; unless ( $self->CurrentUserHasRight('AdminCustomField') ) { return ( 0, $self->loc('Permission Denied') ); } return $self->SUPER::_Set( @_ ); } =head2 _Value Takes the name of a table column. Returns its value as a string, if the user passes an ACL check =cut sub _Value { my $self = shift; return undef unless $self->id; # we need to do the rights check unless ( $self->CurrentUserHasRight('SeeCustomField') ) { $RT::Logger->debug( "Permission denied. User #". $self->CurrentUser->id ." has no SeeCustomField right on CF #". $self->id ); return (undef); } return $self->__Value( @_ ); } =head2 SetDisabled Takes a boolean. 1 will cause this custom field to no longer be avaialble for objects. 0 will re-enable this field. =cut =head2 SetTypeComposite Set this custom field's type and maximum values as a composite value =cut sub SetTypeComposite { my $self = shift; my $composite = shift; my $old = $self->TypeComposite; my ($type, $max_values) = split(/-/, $composite, 2); if ( $type ne $self->Type ) { my ($status, $msg) = $self->SetType( $type ); return ($status, $msg) unless $status; } if ( ($max_values || 0) != ($self->MaxValues || 0) ) { my ($status, $msg) = $self->SetMaxValues( $max_values ); return ($status, $msg) unless $status; } my $render = $self->RenderType; if ( $render and not grep { $_ eq $render } $self->RenderTypes ) { # We switched types and our render type is no longer valid, so unset it # and use the default $self->SetRenderType( undef ); } return 1, $self->loc( "Type changed from '[_1]' to '[_2]'", $self->FriendlyTypeComposite( $old ), $self->FriendlyTypeComposite( $composite ), ); } =head2 TypeComposite Returns a composite value composed of this object's type and maximum values =cut sub TypeComposite { my $self = shift; return join '-', ($self->Type || ''), ($self->MaxValues || 0); } =head2 TypeComposites Returns an array of all possible composite values for custom fields. =cut sub TypeComposites { my $self = shift; return grep !/(?:[Tt]ext|Combobox|Date|DateTime)-0/, map { ("$_-1", "$_-0") } $self->Types; } =head2 RenderType Returns the type of form widget to render for this custom field. Currently this only affects fields which return true for L. =cut sub RenderType { my $self = shift; return '' unless $self->HasRenderTypes; return $self->_Value( 'RenderType', @_ ) || $self->DefaultRenderType; } =head2 SetRenderType TYPE Sets this custom field's render type. =cut sub SetRenderType { my $self = shift; my $type = shift; return (0, $self->loc("This custom field has no Render Types")) unless $self->HasRenderTypes; if ( !$type || $type eq $self->DefaultRenderType ) { return $self->_Set( Field => 'RenderType', Value => undef, @_ ); } if ( not grep { $_ eq $type } $self->RenderTypes ) { return (0, $self->loc("Invalid Render Type for custom field of type [_1]", $self->FriendlyType)); } return $self->_Set( Field => 'RenderType', Value => $type, @_ ); } =head2 DefaultRenderType [TYPE COMPOSITE] Returns the default render type for this custom field's type or the TYPE COMPOSITE specified as an argument. =cut sub DefaultRenderType { my $self = shift; my $composite = @_ ? shift : $self->TypeComposite; my ($type, $max) = split /-/, $composite, 2; return unless $type and $self->HasRenderTypes($composite); return $FieldTypes{$type}->{render_types}->{ $max == 1 ? 'single' : 'multiple' }[0]; } =head2 HasRenderTypes [TYPE_COMPOSITE] Returns a boolean value indicating whether the L and L methods make sense for this custom field. Currently true only for type C