From dpierce at redhat.com Fri May 1 18:14:58 2009 From: dpierce at redhat.com (Darryl L. Pierce) Date: Fri, 1 May 2009 14:14:58 -0400 Subject: [Ovirt-devel] Newly refactored autotest script... Message-ID: <1241201699-3306-1-git-send-email-dpierce@redhat.com> This patch is more robust, ensuring that VMs and bridges are removed once the tests complete. It also will exit immediately after a failed test. From dpierce at redhat.com Fri May 1 18:14:59 2009 From: dpierce at redhat.com (Darryl L. Pierce) Date: Fri, 1 May 2009 14:14:59 -0400 Subject: [Ovirt-devel] [PATCH node-image] Added new autotests and refactored the autotest script. In-Reply-To: <1241201699-3306-1-git-send-email-dpierce@redhat.com> References: <1241201699-3306-1-git-send-email-dpierce@redhat.com> Message-ID: <1241201699-3306-2-git-send-email-dpierce@redhat.com> Completely reworked the tests so that it would be easier to add or extend tests. Added commandline arguments to enable debugging of tests, open virt-viewer on a test vm while it's running. specify different ISOs to test, run just a single or small set of tests, and to make the script itself more robust. Signed-off-by: Darryl L. Pierce --- autotest.sh | 856 +++++++++++++++++++++++++++++++++++------------------------ 1 files changed, 509 insertions(+), 347 deletions(-) diff --git a/autotest.sh b/autotest.sh index 6cba9fa..f256a22 100755 --- a/autotest.sh +++ b/autotest.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # oVirt node image autotest script # @@ -36,71 +36,235 @@ # This will, for each module whose autobuild.sh is run, to have a matching # autotest.sh to run as well. # -# To run the test locally, all that's needed is for an ISO file named ovirt-node-image.iso -# be present in the local directory. This will then be put through its paces with test -# results being send to stdout. +# To run these tests locally, you will need to open port 69 TCP and UDP and have +# an ISO file. ME=$(basename "$0") warn() { printf '%s: %s\n' "$ME" "$*" >&2; } die() { warn "$*"; exit 1; } +debug() { if $debugging; then log "[DEBUG] %s" "$*"; fi } -# trap '__st=$?; stop_log; exit $__st' 0 -trap '__st=$?; log "Exiting normally."; cleanup; exit $__st' 0 -trap '__st=$?; log "Dying a horrible death."; cleanup; exit $__st' 1 2 13 15 +trap '__st=$?; cleanup_after_testing; exit $__st' 1 2 3 13 15 +trap 'cleanup_after_testing' 0 -test -n "$1" && RESULTS=$1 || RESULTS=autotest.log +# set -e +# set -u -echo "Running oVirt node image Autotest" +log () { + date=$(date) + printf "${date} $*\n" +} -# BZ#495954 needs to be fixed to uncomment this -# set -e -# set -v +usage () { + cat <> ${RESULTS}" + log "Executing test: $testname" + + eval $testname + + rc=$? + log "Completed test: $testname [result=$rc]" + + if [ $rc -ne 0 ]; then + log "Build fails smoke tests." + exit 1 + fi + + return $rc } -cleanup () { - log "CLEANING UP" +# setup a node for pxeboot +# $1 - the working directory +# $2 - kernel arguments; if present then they replace all default flags +setup_pxeboot () { + local workdir=$1 + local kernelargs=$2 + local pxedefault=$workdir/tftpboot/pxelinux.cfg/default + + debug "setup for pxeboot: isofile=${isofile} workdir=${workdir} kernelargs='${kernelargs}' pxedefault=${pxedefault}" + (cd $workdir && sudo livecd-iso-to-pxeboot $isofile) > /dev/null 2>&1 + sudo chmod -R 777 $workdir + + # set default kernel arguments if none were provided + # the defaults boot in standalone mode + if [ -z "$kernelargs" ]; then + kernelargs="ovirt_standalone" + fi + + local definition="DEFAULT pxeboot" + definition="${definition}\nTIMEOUT 20" + definition="${definition}\nPROMPT 0" + definition="${definition}\nLABEL pxeboot" + definition="${definition}\n KERNEL vmlinuz0" + definition="${definition}\n IPAPPEND 2" + definition="${definition}\n APPEND rootflags=loop initrd=initrd0.img root=/${isoname} rootfstype=auto console=tty0 check console=ttyS0,115200n8 $kernelargs" + + debug "pxeboot definition=\n${definition}" + sudo bash -c "printf \"${definition}\" > $pxedefault" +} + +# Starts a simple instance of dnsmasq. +# $1 - the iface on which dnsmasq works +# $2 - the root for tftp files +# $3 - the mac address for the node (ignored if blank) +# $4 - the nodename +start_dnsmasq () { + local iface=$1 + local tftproot=$2 + local macaddress=$3 + local nodename=$4 + local pidfile=$2/dnsmasq.pid + stop_dnsmasq - destroy_test_iface + debug "Starting dnsmasq" + dns_startup="sudo /usr/sbin/dnsmasq --read-ethers + --dhcp-range=${NETWORK}.100,${NETWORK}.254,255.255.255.0,24h + --interface=${iface} + --bind-interfaces + --except-interface=lo + --dhcp-boot=tftpboot/pxelinux.0 + --enable-tftp + --tftp-root=${tftproot} + --log-facility=/tmp/dnsmasq-${nodename}.log + --log-queries + --log-dhcp + --pid-file=${pidfile}" + if [ -n "$macaddress" ]; then + dns_startup="${dns_startup} --dhcp-host=${macaddress},${NODE_ADDRESS}" + fi + # start dnsmasq + eval $dns_startup + debug "pidfile=$pidfile" + DNSMASQ_PID=$(sudo cat $pidfile) + debug "DNSMASQ_PID=${DNSMASQ_PID}" } -# Creates a HD disk file. +# Kills the running instance of dnsmasq. +stop_dnsmasq () { + if [ -n "${DNSMASQ_PID-}" -a "${DNSMASQ_PID-}" != "0" ]; then + local check=$(ps -ef | awk "/${DNSMASQ_PID}/"' { if ($2 ~ '"${DNSMASQ_PID}"') print $2 }') + + if [[ "${check}" == "${DNSMASQ_PID}" ]]; then + sudo kill -9 $DNSMASQ_PID + return + fi + fi + DNSMASQ_PID="0" +} + +# Creates a virt network. +# $1 - the node name +# $2 - the network interface name +# $3 - use DHCP (any value) +# $4 - start dnsmsq (def. false) +start_networking () { + local nodename=$1 + local ifacename=$2 + local use_dhcp=${3-false} + local start_dnsmasq=${4-false} + local workdir=$5 + local definition="" + local network=$NETWORK + local xmlfile=$(mktemp) + + debug "start_networking ()" + for var in nodename ifacename use_dhcp start_dnsmasq workdir network xmlfile; do + eval debug "::$var: \$$var" + done + + definition="\n${ifacename}\n\n" + definition="${definition}\n" + if $use_dhcp; then + definition="${definition}\n\n\n" + fi + definition="${definition}\n\n" + + debug "Saving network definition file to: ${xmlfile}\n" + sudo printf "${definition}" > $xmlfile + sudo virsh net-define $xmlfile > /dev/null 2>&1 + debug "Starting network." + sudo virsh net-start $ifacename > /dev/null 2>&1 + + if [ "${use_dhcp}" == "false" ]; then + if $start_dnsmasq; then + start_dnsmasq $ifacename $workdir "" $nodename + fi + fi +} + +# Destroys the test network interface +# $1 - the network name +# $2 - stop dnsmasq (def. false) +stop_networking () { + local networkname=${1-} + local stop_dnsmasq=${2-true} + + # if no network was supplied, then check for the global network + if [ -z "$networkname" ]; then + networkname=${NETWORK_NAME-} + fi + + if [ -n "${networkname}" ]; then + debug "Destroying network interface: ${networkname}" + check=$(sudo virsh net-list --all) + if [[ "${check}" =~ "${networkname}" ]]; then + if [[ "{$check}" =~ active ]]; then + sudo virsh net-destroy $networkname > /dev/null 2>&1 + fi + sudo virsh net-undefine $networkname > /dev/null 2>&1 + fi + fi + + if $stop_dnsmasq; then + stop_dnsmasq + fi +} + +# creates a HD disk file # $1 - filename for disk file -# $2 - size +# $2 - size (##M or ##G) create_hard_disk () { local filename=$1 local size=$2 - sudo qemu-img create -f raw $filename $size - sudo chcon -t virt_image_t $filename + debug "Creating hard disk: filename=${filename} size=${size}" + sudo qemu-img create -f raw $filename "${size}M" > /dev/null 2>&1 + sudo chcon -t virt_image_t $filename > /dev/null 2>&1 } # Creates the XML for a virtual machine. # $1 - the file to write the xml # $2 - the node name -# $3 - memory size (in bytes) -# $4 - the local hard disk (if blank then no disk is used) -# $5 - the cdrom disk (if blank then no cdrom is used) -# $6 - the network bridge (if blank then 'default' is used) -# $7 - optional arguments +# $3 - memory size (in kb) +# $4 - boot device +# $5 - the local hard disk (if blank then no disk is used) +# $6 - the cdrom disk (if blank then no cdrom is used) +# $7 - the network bridge (if blank then 'default' is used) +# $8 - optional arguments define_node () { local filename=$1 local nodename=$2 local memory=$3 - local harddrive=$4 - local cddrive=$5 - local bridge=$6 - local options=$7 + local boot_device=$4 + local harddrive=$5 + local cddrive=$6 + local bridge=${7-default} + local options=${8-} local result="" # flexible options @@ -111,23 +275,28 @@ define_node () { local vncport="-1" local bootdev='hd' - # if a cdrom was defined, then assume it's the boot device - if [ -n "$cddrive" ]; then bootdev='cdrom'; fi + # first destroy the node + destroy_node $nodename if [ -n "$options" ]; then eval "$options"; fi + debug "define_node ()" + for var in filename nodename memory harddrive cddrive bridge options arch emulator serial vncport bootdev; do + eval debug "::$var: \$$var" + done + result="\n${nodename}\n${memory}\n 1" # begin the os section # inject the boot device result="${result}\n\nhvm" - result="${result}\n" + result="${result}\n" result="${result}\n" # virtual machine features result="${result}\n" result="${result}\n" - if [ -z "${noapic}" ]; then result="${result}\n"; fi + if [ -z "${noapic-}" ]; then result="${result}\n"; fi result="${result}\n" result="${result}\n" result="${result}\ndestroy" @@ -139,6 +308,7 @@ define_node () { result="${result}\n${emulator}" # inject the hard disk if defined if [ -n "$harddrive" ]; then + debug "Adding a hard drive to the node" result="${result}\n" result="${result}\n" result="${result}\n" @@ -146,6 +316,7 @@ define_node () { fi # inject the cdrom drive if defined if [ -n "$cddrive" ]; then + debug "Adding a CDROM drive to the node" result="${result}\n" result="${result}\n" result="${result}\n" @@ -169,398 +340,389 @@ define_node () { result="${result}\n" - log "Saving node definition to file: ${filename}" + debug "Node definition: ${filename}" sudo printf "$result" > $filename # now define the vm - sudo virsh define $filename + sudo virsh define $filename > /dev/null 2>&1 if [ $? != 0 ]; then die "Unable to define virtual machine: $nodename"; fi } -# Returns the mac address for the given node. -# $1 - the node name -# $2 - the variable name to set -get_mac_address () { - local nodename=$1 - local varname=$2 - - if [ -z "$nodename" ]; then die "Cannot get mac address for node with a name"; fi - - address=$(sudo virsh dumpxml $nodename|awk '/ /dev/null 2>&1 + fi + if $undefine; then + sudo virsh undefine $nodename > /dev/null 2>&1 fi - sudo virsh undefine $nodename fi fi } -# PXE boots a node. -# $1 - the ISO file -# $2 - the working directory -# $3 - kernel arguments; if present then they replace all default flags -setup_pxeboot () { - local isofile=$1 - local workdir=$2 - local kernelargs=$3 - local pxedefault=$workdir/tftpboot/pxelinux.cfg/default - - (cd $workdir && sudo livecd-iso-to-pxeboot $isofile) - sudo chmod -R 777 $workdir +# for each test created, add it to the follow array: +tests=''; testcount=0; - # set default kernel arguments if none were provided - # the defaults boot in standalone mode - if [ -z "$kernelargs" ]; then - kernelargs="ovirt_standalone" - fi +# $1 - test name +add_test () { + tests[$testcount]=$1 + testcount=$testcount+1 +} - local definition="DEFAULT pxeboot\nTIMEOUT 20\nPROMPT 0\nLABEL pxeboot\n KERNEL vmlinuz0\n IPAPPEND 2\n APPEND rootflags=loop BOOTIF=link|eth*| initrd=initrd0.img root=/ovirt-node-image.iso rootfstype=auto console=ttyS0,115200n8 $kernelargs\n" +# $1 - node name +start_virt_viewer () { + local nodename=$1 - sudo bash -c "printf \"${definition}\" > $pxedefault" + sudo virt-viewer $nodename > /dev/null 2>&1& } -# Launches the node as a virtual machine. -# $1 - the node name -# $2 - the ISO filename -# $3 - the hard disk file -# $4 - the memory size (in MB) -# $5 - the network bridge to use -# $6 - kernel arguments -# $7 - verification method -pxeboot_node_vm () { +# $1 - the node's name +# $2 - kernel arguments +# $3 - working directory +boot_with_pxe () { local nodename=$1 - local isofile=$2 - local diskfile=$3 - local memsize=$4 - local bridge=$5 - local kernel_args=$6 - local verify_method=$7 - local xmlfile=$(mktemp) - local tftproot=$(mktemp -d) - local node_mac_address="" - local return_code=0 + local kernel_args=$2 + local workdir=$3 - destroy_node $nodename + debug "boot_with_pxe ()" + debug "- workdir: ${workdir}" + debug "- nodename: ${nodename}" + debug "- kernel_args: ${kernel_args}" - log "Beginning pxeboot for $nodename" - # setup the dnsmasq instance with the iso setup - setup_pxeboot "$isofile" "$tftproot" "$kernel_args" - create_test_iface $bridge - define_node $xmlfile $nodename $memsize "$diskfile" "" $bridge "local bootdev='network'; local noapic='yes'" - get_mac_address $nodename "node_mac_address" - start_dnsmasq $bridge $tftproot $node_mac_address $nodename - start_node $nodename - if [ -n "$verify_method" ]; then - eval $verify_method - return_code=$? - fi - destroy_node $nodename - stop_dnsmasq - destroy_test_iface $bridge - log "Finished pxeboot for $nodename (RC=${return_code})" + setup_pxeboot $workdir "${kernel_args}" - if [ $return_code != 0 ]; then - log "Test ended in failure" + sudo virsh start $nodename > /dev/null 2>&1 + if $show_viewer; then + start_virt_viewer $nodename fi - - test $return_code == 0 && return 0 || return 1 } -# Launches the node as a virtual machine with a CDROM. -# $1 - the node name -# $2 - the ISO filename -# $3 - the disk file to use -# $4 - the memory size (in MB) -# $5 - the network bridge -cdrom_boot_node_vm () { +# $1 - the node's name +boot_from_hd () { local nodename=$1 - local isofile=$2 - local diskfile=$3 - local memsize=$4 - local bridge=$5 - local xmlfile=$(mktemp) - destroy_node $nodename + debug "boot_from_hd ()" + debug "::nodename: ${nodename}" - log "Beginning cdrom boot for $nodename" - create_test_iface $bridge "yes" - define_node $xmlfile $nodename $memsize "$diskfile" "$isofile" $bridge - start_node $nodename - # TODO make sure the node's booted - sleep 300 - # TODO verify the node's running - destroy_node $nodename - destroy_test_iface $bridge - log "Finished cdrom booting for $nodename" + sudo virsh start $nodename > /dev/null 2>&1 + if $show_viewer; then + start_virt_viewer $nodename + fi } -# Creates a virt network. -# $1 - the network interface name -# $2 - use DHCP (any value) -create_test_iface () { - local name=$1 - local dhcp=$2 - local definition=$(mktemp) - local network=$NETWORK - local definition="" - local xmlfile=$(mktemp) +# $1 - the node name +# $2 - the old boot device +# $3 - the new boot device +substitute_boot_device () { + local nodename=$1 + local old_device=$2 + local new_device=$3 + local new_node_file=$(mktemp) - destroy_test_iface $name - NETWORK_NAME=$name + if [ -n "${nodename}" ]; then + local xml=$(sudo virsh dumpxml $nodename | sed "s/boot dev='"${old_device}"'/boot dev='"${new_device}"'/") - log "Creating network definition file: $definition" - definition="\n${name}\n\n" - definition="${definition}\n" - if [ -n "$dhcp" ]; then - definition="${definition}\n\n\n" - fi - definition="${definition}\n\n" + sudo printf "${xml}" > $new_node_file - printf "Saving network definition file to: ${xmlfile}\n" - sudo printf "${definition}" > $xmlfile - sudo virsh net-define $xmlfile - log "Starting network" - sudo virsh net-start $name + sudo virsh define $new_node_file + fi } -# Destroys the test network interface -# $1 - the network name -destroy_test_iface () { - local networkname=$1 +add_test "test_stateless_pxe_with_nohd" +test_stateless_pxe_with_nohd () { + local nodename="${vm_prefix}-stateless-pxe-nohd" + local workdir=$(mktemp -d) - # if no network was supplied, then check for the global network - if [ -z "$networkname" ]; then - networkname=$NETWORK_NAME - fi + start_networking $nodename $IFACE_NAME false true $workdir - if [ -n "${networkname}" ]; then - log "Destroying network interface: ${networkname}" - check=$(sudo virsh net-list --all) - if [[ "${check}" =~ "${networkname}" ]]; then - log "- found existing instance" - if [[ "{$check}" =~ active ]]; then - log "- shutting down current instance" - sudo virsh net-destroy $networkname - fi - log "- undefining previous instance" - sudo virsh net-undefine $networkname - fi + configure_node "${nodename}" "network" "" "" "" "local noapic=true" + boot_with_pxe "${nodename}" "firstboot=no" "${workdir}" - # ensure the bridge interface was destroyed - check=$(sudo /sbin/ifconfig) - if [[ "${check}" =~ "${networkname}" ]]; then - sudo /sbin/ifconfig $networkname down - fi - fi -} + expect -c ' +set timeout 120 +log_file -noappend stateless-pxe-nohd.log -# Starts a simple instance of dnsmasq. -# $1 - the iface on which dnsmasq works -# $2 - the root for tftp files -# $3 - the mac address for the node (ignored if blank) -# $4 - the nodename -start_dnsmasq () { - local iface=$1 - local tftproot=$2 - local macaddress=$3 - local nodename=$4 - local pidfile=$2/dnsmasq.pid +spawn sudo virsh console '"${nodename}"' - stop_dnsmasq - log "Starting dnsmasq" - dns_startup="sudo /usr/sbin/dnsmasq --read-ethers - --dhcp-range=${NETWORK}.100,${NETWORK}.254,255.255.255.0,24h - --interface=${iface} - --bind-interfaces - --except-interface=lo - --dhcp-boot=tftpboot/pxelinux.0 - --enable-tftp - --tftp-root=${tftproot} - --log-facility=/tmp/dnsmasq-${nodename}.log - --log-queries - --log-dhcp - --pid-file=${pidfile}" - if [ -n "$macaddress" ]; then - dns_startup="${dns_startup} --dhcp-host=${macaddress},${NODE_ADDRESS}" - fi - # start dnsmasq - eval $dns_startup - DNSMASQ_PID=$(sudo cat $pidfile) - log "dnsmasq start: PID=${DNSMASQ_PID}" +expect { + -exact "Linux version" { send_log "\n\nMarker 1\n\n"; exp_continue } + -exact "Starting ovirt-early:" { send_log "\n\nMarker 2\n\n"; exp_continue } + -exact "Starting ovirt:" { send_log "\n\nMarker 3\n\n"; exp_continue } + -exact "Starting ovirt-post:" { send_log "\n\nMarker 4\n\n"; exp_continue } + -exact "login:" { send_log "\n\nMarker 5\n\n"; exit } + timeout { + send_log "\nMarker not found.\n\n" + exit 1 + } eof { + send_log "Unexpected end of file." + exit 2 + } + + send_log \"\n\nUnexpected end of interaction.\n\n\" + exit 3 } +' -# Kills the running instance of dnsmasq. -stop_dnsmasq () { - log "Killing dnsmasq: DNSMASQ_PID=${DNSMASQ_PID}" - if [ -n "$DNSMASQ_PID" -a "$DNSMASQ_PID" != "0" ]; then - local check=$(ps -ef | awk "/${DNSMASQ_PID}/"' { if ($2 ~ '"${DNSMASQ_PID}"') print $2 }') + result=$? - if [[ "${check}" == "${DNSMASQ_PID}" ]]; then - log "Killing dnsmasq" - sudo kill -9 $DNSMASQ_PID - return - fi - fi - log "No running instance of dnsmasq found." - DNSMASQ_PID="0" + destroy_node $nodename + stop_networking $IFACE_NAME true + + return $result } -# Boots a node via CDROM. -# $1 - the node name -# $2 - the network to use -# $3 - the working directory -# $4 - the ISO file to use as CDROM -cdrom_boot () { - local nodename=$1 - local network=$2 - local workdir=$3 - local isofile=$4 - local diskfile=$workdir/ovirt-harddisk.img +add_test "test_stateless_pxe" +test_stateless_pxe () { + local nodename="${vm_prefix}-stateless-pxe" + local workdir=$(mktemp -d) - create_hard_disk $diskfile "10G" - cdrom_boot_node_vm $nodename $isofile $diskfile "512" $network -} + start_networking $nodename $IFACE_NAME false true $workdir -# verify that a node has booted properly -# $1 - the node's name -# $2 - the logfile to use -verify_pxeboot_stateless_standalone () { - local nodename=$1 - local port=$(sudo virsh ttyconsole $nodename) - local logfile=$2 + configure_node "${nodename}" "network" "" "10000" "" "local noapic=true" + boot_with_pxe "${nodename}" "firstboot=no" "${workdir}" + + expect -c ' +set timeout 120 + +log_file -noappend stateless-pxe.log + +spawn sudo virsh console '"${nodename}"' - log "Verifying ${nodename} is booted correctly" - local script=' -log_file -noappend '"${logfile}"' -set timeout 60 -expect { - "Linux version" {send_log "\n\n***\nGot first boot marker\n\n"} - timeout {send_log "\n\n***\nDid not receive in time\n\n" - exit 1} -} expect { - -re "Kernel command line.*ovirt_standalone" {send_log "\n\n***\nGot kernel arguments marker\n\n"} + -exact "Linux version" { send_log "\n\nMarker 1\n\n"; exp_continue } + -exact "Starting ovirt-early:" { send_log "\n\nMarker 2\n\n"; exp_continue } + -exact "Starting ovirt:" { send_log "\n\nMarker 3\n\n"; exp_continue } + -exact "Starting ovirt-post:" { send_log "\n\nMarker 4\n\n"; exp_continue } + -re "localhost.*login:" { send_log "\n\nMarker 5\n\n"; exit } timeout { - send_log "\n\n***\nDid not receive in time\n\n" - exit 2 + send_log "\nMarker not found.\n\n" + exit 1 + } eof { + send_log "Unexpected end of file." + exit 2 } } -expect { - "Starting ovirt-early:" {send_log "\n\n***\nGot ovirt-early marker\n\n"} - timeout {send_log "\n\n***\nDid not receive in time\n\n" - exit 3} -} -expect { - "Starting ovirt:" {send_log "\n\n***\nGot ovirt marker\n\n"} - timeout {send_log "\n\n***\nDid not receive in time\n\n" - exit 4} + +send_log "\n\nUnexpected end of interaction.\n\n" +exit 3' + result=$? + + destroy_node $nodename + stop_networking $IFACE_NAME true + + return $result } + +add_test "test_stateful_pxe" +test_stateful_pxe () { + local nodename="${vm_prefix}-stateful-pxe" + local workdir=$(mktemp -d) + local ipaddress=${NODE_ADDRESS} + + for var in nodename workdir ipaddress; do + eval debug "::\$$var: $var" + done + + start_networking $nodename $IFACE_NAME false true $workdir + + configure_node "${nodename}" "network" "" "10000" "" "local noapic=true" + boot_with_pxe "${nodename}" "ovirt_standalone ovirt_init=/dev/vda ovirt_local_boot ip=${ipaddress}" ${workdir} + + # verify the booting and installation + expect -c ' +set timeout 120 +log_file -noappend stateful-pxe.log + +spawn sudo virsh console '"${nodename}"' + expect { - "Starting ovirt-post:" {send_log "\n\n***\nGot ovirt-post marker\n\n"} - timeout {send_log "\n\n***\nDid not receive in time\n\n" - exit 5} + -exact "Linux version" { send_log "\n\nMarker 1\n\n"; exp_continue } + -exact "Starting ovirt-early:" { send_log "\n\nMarker 2\n\n"; exp_continue } + -exact "Starting ovirt:" { send_log "\n\nMarker 3\n\n"; exp_continue } + -exact "Starting ovirt-post:" { send_log "\n\nMarker 4\n\n"; exp_continue } + -exact "Starting ovirt-firstpost:" { send_log "\n\nMarker 5\n\n"; exp_continue } + -exact "Starting partitioning of /dev/vda" { send_log "\n\nMarker 6\n\n"; exp_continue } + -exact "Restarting system" { send_log "\n\nMarker 7\n\n"; exit } + timeout { + send_log "\nMarker not found.\n\n" + exit 1 + } eof { + send_log "Unexpected end of file." + exit 2 + } } -expect { - "Starting ovirt-firstboot:" {send_log "\n\n***\nGot ovirt-firstboot marker\n\n"} - timeout {send_log "\n\n***\nDid not receive in time\n\n" - exit 6} -}' - sudo bash -c "/usr/bin/expect -c '${script}' < ${port}" +send_log "\n\nUnexpected end of interaction.\n\n" +exit 3' result=$? - printf "result=${result}\n" -} -# Verify that a stateful node has booted properly. -# $1 - the node's name -# $2 - the logfile for recording the transcript -verify_pxeboot_stateful_standalone () { - local nodename=$1 - local port=$(sudo virsh ttyconsole $nodename) - local logfile=$2 - - # leverage the existing stateless test - verify_pxeboot_stateless_standalone $nodename - log "Verifying ${nodename} is booted correctly" - local script=' -log_file -noappend '"${logfile}"' -set timeout 180 + # only continue if we're in a good state + if [ $result -eq 0 ]; then + destroy_node "${nodename}" false + substitute_boot_device "${nodename}" "network" "hd" + boot_from_hd "${nodename}" + + expect -c ' +set timeout 120 +log_file stateful-pxe.log + +send_log "Restarted node, booting from hard disk.\n" + +spawn sudo virsh console '"${nodename}"' + expect { - -re "login:$" {send_log "\n\n***\nGot login prompt!\n\n"} - timeout {send_log "\n\n***\nDid not receive in time\n\n" - exit 7} -}' - sudo bash -c "/usr/bin/expect -c '${script}' < ${port}" + -re "localhost.*login:" { send_log "\n\nLogin marker found\n\n"; exit } + + timeout { + send_log "\nMarker not found.\n\n" + exit 1 + } eof { + send_log "Unexpected end of file." + exit 2 + } } -# TEST: Performs a PXE boot of the node as a standalone, stateless instance. -test_pxeboot_stateless_standalone () { - local nodename="pxe_stateless_standalone-$$" - local hdfile=$(mktemp) +send_log "\n\nUnexpected end of interaction.\n\n" - log "TEST: Booting a stateless standalone node via PXE." - create_hard_disk $hdfile "10G" - pxeboot_node_vm $nodename $OVIRT_NODE_IMAGE_ISO "${hdfile}" "524288" \ - $IFACE_NAME "ovirt_standalone OVIRT_FIRSTBOOT=no" \ - "verify_pxeboot_stateless_standalone $nodename 'pxeboot_stateless_standalone.log'" -} +exit 3 +' + + expect -c ' +set timeout 3 +log_file stateful-pxe.log + +spawn ping -c 3 '"${ipaddress}"' -# TEST: Performs a PXE boot of the node as a standalone instance. The node then performs a full install -test_pxeboot_stateful_standalone () { - local nodename="pxe_stateful_standalone-$$" - local hdfile=$(mktemp) +expect { + -exact "64 bytes from '"${ipaddress}"'" { send_log "\n\nGot ping response!\n"; send_log "\n\nNetworking verified!\n"; exit } - log "TEST: Installing a stateful standalone node via PXE." - create_hard_disk $hdfile "10G" - pxeboot_node_vm $nodename $OVIRT_NODE_IMAGE_ISO "${hdfile}" "524288" \ - $IFACE_NAME "ovirt_standalone OVIRT_FIRSTBOOT=no ovirt_init=/dev/vda" \ - "verify_pxeboot_stateful_standalone $nodename 'pxeboot_stateful_standalone.log'" + timeout { + send_log "\nMarker not found.\n\n" + exit 1 + } eof { + send_log "Unexpected end of file." + exit 2 + } } -# TEST: Performs a CDROM boot of the node as a standalone, stateless instance -test_cdrom_stateless_standalone () { - local nodename="stateless_cdrom_standalone-$$" +send_log "\n\nUnexpected end of interaction.\n\n" + +exit 3' + + result=$? + fi + + destroy_node $nodename + stop_networking $IFACE_NAME true + + return $result - log "TEST: Booting a stateless node from CDROM." - cdrom_boot $nodename "$IFACE_NAME" "$TFTP_ROOT_DIR" "$OVIRT_NODE_IMAGE_ISO" } -# automated testing entry points -{ +# configures the environment for testing +setup_for_testing () { + debug "isofile=${isofile}" + debug "isoname=${isoname}" IFACE_NAME=testbr$$ + debug "IFACE_NAME=${IFACE_NAME}" NETWORK=192.168.$(echo "scale=0; print $$ % 255" | bc -l) + debug "NETWORK=${NETWORK}" NODE_ADDRESS=$NETWORK.100 + debug "NODE_ADDRESS=${NODE_ADDRESS}" DNSMASQ_PID=0 +} + +# cleans up any loose ends +cleanup_after_testing () { + stop_dnsmasq + stop_networking + # destroy any running vms + vm_list=$(sudo virsh list --all | awk '/'${vm_prefix}-'/ { print $2 }') + test -n "$vm_list" && for vm in $vm_list; do + destroy_node $vm + done +} + +# check commandline options +test='' +debugging=false +isofile="${PWD}/ovirt-node-image.iso" +show_viewer=false +vm_prefix="$$" + +while getopts di:n:vwh c; do + case $c in + d) debugging=true;; + i) isofile=($OPTARG);; + n) tests=($OPTARG);; + v) set -v;; + w) show_viewer=true;; + h) usage; exit 0;; + '?') die "invalid option \`-$OPTARG'";; + :) die "missing argument to \`-$OPTARG' option";; + *) die "internal error";; + esac +done + +isoname=$(basename $isofile) +isofile="$(cd `dirname $isofile`; pwd)/${isoname}" + +shift $(($OPTIND - 1)) + +set +u +if [ $# -gt 0 -a -n "$1" ]; then RESULTS=$1; else RESULTS=autotest.log; fi +set -u + +log "Logging results to file: ${RESULTS}" +{ + setup_for_testing + + log "Begin Testing: ${isoname}" - log "Starting tests" - log "Using network: ${NETWORK}.0" + for test in ${tests[@]}; do + execute_test $test + done - test_pxeboot_stateless_standalone - test_pxeboot_stateful_standalone + log "End Testing: RHEV-H" } | sudo tee --append $RESULTS -- 1.6.0.6 From kc at cobradevil.org Mon May 4 15:17:20 2009 From: kc at cobradevil.org (kc at cobradevil.org) Date: Mon, 4 May 2009 17:17:20 +0200 (CEST) Subject: [Ovirt-devel] local disk FC san CLVM + migration of virtual machines Message-ID: <49944.217.169.229.154.1241450240.squirrel@webmail.spothost.nl> Hello all We are looking into ovirt for several weeks now and i have to say that it looks very promising. Our current environment is based on a lot off shell scripts and xen. We would like to move to ovirt but there are some things we would like to have working before moving. 1. using FC, san and clvm for storage 2. The ability to migrate virtual machines when we have to do maintenance on a physical host. What work is done at the moment to support the above? With kind regards William van de Velde From sseago at redhat.com Mon May 4 18:01:07 2009 From: sseago at redhat.com (Scott Seago) Date: Mon, 04 May 2009 14:01:07 -0400 Subject: [Ovirt-devel] [PATCH server] controller service layer refactoring for pools. In-Reply-To: <1241032923.32293.67.camel@avon.watzmann.net> References: <1240956633-5650-1-git-send-email-sseago@redhat.com> <1241032923.32293.67.camel@avon.watzmann.net> Message-ID: <49FF2D63.7020204@redhat.com> David Lutterkort wrote: > On Tue, 2009-04-28 at 22:10 +0000, Scott Seago wrote: > >> This is the second round of controller/service layer refactoring >> changes -- in this case for the pool-related controllers (HW, VM, and >> Smart pools) >> > > This looks mostly good, modulo comments below. It would also be good to > include rdoc comments in the service modules to document required > permissions and instance variables that get set. > > Sending updated patch shortly with the fixes below: >> diff --git a/src/app/controllers/hardware_controller.rb b/src/app/controllers/hardware_controller.rb >> index 2158e08..8261cd7 100644 >> --- a/src/app/controllers/hardware_controller.rb >> +++ b/src/app/controllers/hardware_controller.rb >> > > >> @@ -17,8 +17,10 @@ >> # MA 02110-1301, USA. A copy of the GNU General Public License is >> # also available at http://www.gnu.org/copyleft/gpl.html. >> # >> +require 'services/hardware_pool_service' >> > > This breaks class reloading in the development environment, and is not > necessary at all. Should be removed > > Done >> @@ -113,8 +112,13 @@ class HardwareController < PoolController >> end >> >> def show_storage >> - @storage_tree = @pool.storage_tree(:filter_unavailable => false, :include_used => true).to_json >> - show >> + begin >> + svc_show(params[:id]) >> + @storage_tree = @pool.storage_tree(:filter_unavailable => false, :include_used => true).to_json >> + render_show >> + rescue PermissionError => perm_error >> + handle_auth_error(perm_error.message) >> + end >> end >> > > I know that it's just moving code around, but please avoid lines with > more than 80 chars. > > Done >> @@ -190,144 +194,49 @@ class HardwareController < PoolController >> > > >> def add_hosts >> - edit_items(Host, :move_hosts, @pool.id, :add) >> + edit_items(Host, @pool.id, :add) >> end >> >> def move_hosts >> - edit_items(Host, :move_hosts, params[:target_pool_id], :move) >> + edit_items(Host, params[:target_pool_id], :move) >> end >> >> def add_storage >> - edit_items(StoragePool, :move_storage, @pool.id, :add) >> + edit_items(StoragePool, @pool.id, :add) >> end >> >> def move_storage >> - edit_items(StoragePool, :move_storage, params[:target_pool_id], :move) >> + edit_items(StoragePool, params[:target_pool_id], :move) >> end >> >> - #FIXME: we need permissions checks. user must have permission on src pool >> - # in addition to the current pool (which is checked). We also need to fail >> - # for storage that aren't currently empty >> - def edit_items(item_class, item_method, target_pool_id, item_action) >> - resource_ids_str = params[:resource_ids] >> - resource_ids = resource_ids_str.split(",").collect {|x| x.to_i} >> - >> - # if user doesn't have modify permission on both source and destination >> - unless @pool.can_modify(@user) and Pool.find(target_pool_id).can_modify(@user) >> - render :json => { :success => false, >> - :alert => "Cannot #{item_action.to_s} #{item_class.table_name.humanize} without admin permissions on both pools" } >> - return >> - end >> - >> - # relay error message if movable check fails for any resource >> - success = true >> - failed_resources = "" >> - resource_ids.each {|x| >> - unless item_class.find(x).movable? >> - success = false >> - failed_resources += x.to_s + " " >> - end >> - } >> - resource_ids.delete_if { |x| ! item_class.find(x).movable? } >> - >> + def edit_items(item_class, target_pool_id, item_action) >> begin >> - @pool.transaction do >> - @pool.send(item_method, resource_ids, target_pool_id) >> + if item_class == Host >> + alert = svc_move_hosts(params[:id], params[:resource_ids].split(","), target_pool_id) >> + elsif item_class == StoragePool >> + alert = svc_move_storage(params[:id], params[:resource_ids].split(","), target_pool_id) >> + else >> + raise "invalid class #{item_class}" >> end >> - rescue >> - success = false >> - end >> - >> - if success >> - render :json => { :success => true, >> - :alert => "#{item_action.to_s} #{item_class.table_name.humanize} successful.", >> + render :json => { :success => true, :alert => alert, >> :storage => @pool.storage_tree({:filter_unavailable => false, :include_used => true, :state => item_action.to_s})} >> - else >> - render :json => { :success => false, >> - :alert => "#{item_action.to_s} #{item_class.table_name.humanize} failed" + >> - (failed_resources == "" ? "." : " for " + failed_resources) } >> + rescue PermissionError => perm_error >> + handle_auth_error(perm_error.message) >> + # If we need to give more details as to which hosts/storage succeeded, >> + # they're in the exception >> + rescue PartialSuccessError => error >> + render :json => { :success => false, :alert => error.message } >> + rescue Exception => ex >> + render :json => { :success => false, :alert => error.message } >> end >> end >> > > This is a good example of how our current error handling makes things > more complex: we have move_hosts/move_storage actions, call a generic > edit_items, and then dispatch in that method on the class of one of the > parameters. > > First off, it would be more rubyish if edit_items took a block that has > the proper calls to svc_move_hosts/svc_move_storage. Second, it seems > the main point of edit_items is to factor all the error handling > overhead intoa common method. > > For the time being, edit_items should take a block; in the future we > need to look into handling more errors with rescue_with, avoiding all > that error handling clutter altogether. > > OK so we'll revisit this when we add the rescue_with stuff, but for now I've actually changed this to take a symbol arg for the method name. Since the only thing that's different here is which method is calling, this avoids the if block with two method invocations (the args are the same in both cases) -- I started to do blocks but I realized that I'd have to repeat the method argument generation in each block, which is also rather un-rubyish. >> @@ -97,30 +108,111 @@ class PoolController < ApplicationController >> >> + end >> + >> + def update >> + begin >> + alert = svc_update(params[:id], params[:pool] ? params[:pool] : >> + params[:hardware_pool]) >> + respond_to do |format| >> + format.html { >> + reply = { :object => "pool", :success => true, :alert => alert } >> + render :json => reply >> + } >> > > Is that right ? format.html and render :json ? > fixed >> diff --git a/src/app/controllers/resources_controller.rb b/src/app/controllers/resources_controller.rb >> index c61ef46..63bc98c 100644 >> --- a/src/app/controllers/resources_controller.rb >> +++ b/src/app/controllers/resources_controller.rb >> @@ -16,15 +16,15 @@ >> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, >> # MA 02110-1301, USA. A copy of the GNU General Public License is >> # also available at http://www.gnu.org/copyleft/gpl.html. >> +require 'services/vm_resource_pool_service' >> > > Not needed > Fixed >> @@ -69,89 +69,62 @@ class ResourcesController < PoolController >> > > ... > > >> - def destroy >> - if @pool.destroy >> - alert="Virtual Machine Pool was successfully deleted." >> - success=true >> - else >> - alert="Failed to delete virtual machine pool." >> - success=false >> + success = failures.empty? >> + alert = "" >> + if !successes.empty? >> + alert == "Virtual Machine Pools #{successes.collect{|pool| pool.name}.join(', ')} were successfully deleted." >> + end >> + if !failures.empty? >> + alert == " Errors in deleting VM Pools #{failures.collect{|pool,err| "#{pool.name}: #{err}"}.join(', ')}." >> end >> > > s/==/=/ > > The logic also deserves a comment that clobbering alert on failure is > intentional. > > Fixed this -- and no alert clobbering on delete either. >> diff --git a/src/app/controllers/smart_pools_controller.rb b/src/app/controllers/smart_pools_controller.rb >> index fb6ccb5..bc20024 100644 >> --- a/src/app/controllers/smart_pools_controller.rb >> +++ b/src/app/controllers/smart_pools_controller.rb >> @@ -17,14 +17,12 @@ >> # MA 02110-1301, USA. A copy of the GNU General Public License is >> # also available at http://www.gnu.org/copyleft/gpl.html. >> # >> +require 'services/smart_pool_service' >> > Not needed. > Done >> diff --git a/src/app/controllers/storage_volume_controller.rb b/src/app/controllers/storage_volume_controller.rb >> index b6b0593..d4a2561 100644 >> --- a/src/app/controllers/storage_volume_controller.rb >> +++ b/src/app/controllers/storage_volume_controller.rb >> > > This seems tangential to the pool refactoring - could that go into a > separate patch ? > > OK I'll pull this out into a later patch. >> diff --git a/src/app/services/application_service.rb b/src/app/services/application_service.rb >> index 4dc5eba..251b37a 100644 >> --- a/src/app/services/application_service.rb >> +++ b/src/app/services/application_service.rb >> @@ -29,18 +29,34 @@ >> module ApplicationService >> class PermissionError < RuntimeError; end >> class ActionError < RuntimeError; end >> + class PartialSuccessError < RuntimeError >> + def initialize(msg, failures={}, successes=[]) >> + @failures = failures >> + @successes = successes >> + end >> + def failures >> + @failures >> + end >> + def successes >> + @successes >> + end >> + end >> > > attr_reader :failures, :successes ? > Fixed this >> # Including class must provide a GET_LOGIN_USER >> >> + def user >> + @user ||= get_login_user >> + end >> + >> > > I don't think this is the right place to cache the user - if we want > that, it should be done in get_login_user. In any event, this and the > changes to set_perm_obj should be in a separate patch. > > I guess I'll un-do this for now then and later re-create this later, as I don't trust git rebase -i to be useful for me to separate commits _within_ a file. >> diff --git a/src/app/services/pool_service.rb b/src/app/services/pool_service.rb >> new file mode 100644 >> index 0000000..8073067 >> --- /dev/null >> +++ b/src/app/services/pool_service.rb >> @@ -0,0 +1,60 @@ >> + def svc_update(pool_id, pool_hash) >> + # from before_filter >> + @pool = Pool.find(params[:id]) >> + @parent = @pool.parent >> + update_perms >> + authorized!(Privilege::Modify) >> > > Should be Privilege::MODIFY > > David > > > Fixed From sseago at redhat.com Mon May 4 18:47:54 2009 From: sseago at redhat.com (Scott Seago) Date: Mon, 4 May 2009 18:47:54 +0000 Subject: [Ovirt-devel] Revised pool controller service layer refactoring patches Message-ID: <1241462877-5802-1-git-send-email-sseago@redhat.com> This replaces the earlier patch sent for pool controller service layer changes. The storage volume controller patch fixes a prior bug in authentication for that controller, and the final patch caches the set_perms results for multi-object operations when the perm_obj remains constant. From sseago at redhat.com Mon May 4 18:47:56 2009 From: sseago at redhat.com (Scott Seago) Date: Mon, 4 May 2009 18:47:56 +0000 Subject: [Ovirt-devel] [PATCH server] fixed some problems with create/delete storage volume functionality. In-Reply-To: <1241462877-5802-2-git-send-email-sseago@redhat.com> References: <1241462877-5802-1-git-send-email-sseago@redhat.com> <1241462877-5802-2-git-send-email-sseago@redhat.com> Message-ID: <1241462877-5802-3-git-send-email-sseago@redhat.com> One of the recent refactoring rounds seems to have broken the 'new storage volume' functionality. It looks like the necessary before_filters weren't being executed. Signed-off-by: Scott Seago --- src/app/controllers/storage_volume_controller.rb | 39 ++++++++++++--------- 1 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/app/controllers/storage_volume_controller.rb b/src/app/controllers/storage_volume_controller.rb index b6b0593..d4a2561 100644 --- a/src/app/controllers/storage_volume_controller.rb +++ b/src/app/controllers/storage_volume_controller.rb @@ -22,19 +22,16 @@ class StorageVolumeController < ApplicationController def new @return_to_workflow = params[:return_to_workflow] || false if params[:storage_pool_id] - @storage_pool = StoragePool.find(params[:storage_pool_id]) unless @storage_pool.user_subdividable - #fixme: proper error page for popups - redirect_to :controller => 'dashboard' + html_error_page("User-created storage volumes are not supported on this pool") return end - new_volume_internal(@storage_pool, - { :storage_pool_id => params[:storage_pool_id]}) + @storage_volume = StorageVolume.factory(@storage_pool.get_type_label, + { :storage_pool_id => + params[:storage_pool_id]}) else - @source_volume = StorageVolume.find(params[:source_volume_id]) unless @source_volume.supports_lvm_subdivision - #fixme: proper error page for popups - redirect_to :controller => 'dashboard' + html_error_page("LVM is not supported for this storage volume") return end lvm_pool = @source_volume.lvm_storage_pool @@ -47,7 +44,8 @@ class StorageVolumeController < ApplicationController lvm_pool.source_volumes << @source_volume lvm_pool.save! end - new_volume_internal(lvm_pool, { :storage_pool_id => lvm_pool.id}) + @storage_volume = StorageVolume.factory(lvm_pool.get_type_label, + { :storage_pool_id => lvm_pool.id}) @storage_volume.lv_owner_perms='0744' @storage_volume.lv_group_perms='0744' @storage_volume.lv_mode_perms='0744' @@ -99,7 +97,7 @@ class StorageVolumeController < ApplicationController format.html { render :layout => 'selection' } format.json do attr_list = [] - attr_list << :id if (@storage_pool.user_subdividable and authorized?(Privilege::MODIFY) + attr_list << :id if (@storage_pool.user_subdividable and authorized?(Privilege::MODIFY)) attr_list += [:display_name, :size_in_gb, :get_type_label] json_list(@storage_pool.storage_volumes, attr_list) end @@ -109,8 +107,6 @@ class StorageVolumeController < ApplicationController end def destroy - @storage_volume = StorageVolume.find(params[:id]) - set_perms(@storage_volume.storage_pool.hardware_pool) unless authorized?(Privilege::MODIFY) and @storage_volume.storage_pool.user_subdividable handle_auth_error("You do not have permission to delete this storage volume.") else @@ -123,6 +119,16 @@ class StorageVolumeController < ApplicationController end end + def pre_new + if params[:storage_pool_id] + @storage_pool = StoragePool.find(params[:storage_pool_id]) + set_perms(@storage_pool.hardware_pool) + else + @source_volume = StorageVolume.find(params[:source_volume_id]) + set_perms(@source_volume.storage_pool.hardware_pool) + end + end + def pre_create volume = params[:storage_volume] unless type = params[:storage_type] @@ -132,14 +138,13 @@ class StorageVolumeController < ApplicationController set_perms(@storage_volume.storage_pool.hardware_pool) authorize_admin end - - private - def new_volume_internal(storage_pool, new_params) - @storage_volume = StorageVolume.factory(storage_pool.get_type_label, new_params) + # will go away w/ svc layer + def pre_edit + @storage_volume = StorageVolume.find(params[:id]) set_perms(@storage_volume.storage_pool.hardware_pool) - authorize_admin end + private def delete_volume_internal(volume) begin name = volume.display_name -- 1.6.0.6 From sseago at redhat.com Mon May 4 18:47:57 2009 From: sseago at redhat.com (Scott Seago) Date: Mon, 4 May 2009 18:47:57 +0000 Subject: [Ovirt-devel] [PATCH server] cache results of set_perms between calls to make multi-object operations more efficient when the permission object is the same. In-Reply-To: <1241462877-5802-3-git-send-email-sseago@redhat.com> References: <1241462877-5802-1-git-send-email-sseago@redhat.com> <1241462877-5802-2-git-send-email-sseago@redhat.com> <1241462877-5802-3-git-send-email-sseago@redhat.com> Message-ID: <1241462877-5802-4-git-send-email-sseago@redhat.com> Signed-off-by: Scott Seago --- src/app/services/application_service.rb | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/src/app/services/application_service.rb b/src/app/services/application_service.rb index bd0a308..7652996 100644 --- a/src/app/services/application_service.rb +++ b/src/app/services/application_service.rb @@ -40,6 +40,7 @@ module ApplicationService # Including class must provide a GET_LOGIN_USER def set_perms(perm_obj) + return if @user && @perm_obj && @perm_obj.id == perm_obj.id @perm_obj = perm_obj @current_pool_id ||= perm_obj.id @user = get_login_user -- 1.6.0.6 From sseago at redhat.com Mon May 4 18:47:55 2009 From: sseago at redhat.com (Scott Seago) Date: Mon, 4 May 2009 18:47:55 +0000 Subject: [Ovirt-devel] [PATCH server] controller service layer refactoring for pools. (revised) In-Reply-To: <1241462877-5802-1-git-send-email-sseago@redhat.com> References: <1241462877-5802-1-git-send-email-sseago@redhat.com> Message-ID: <1241462877-5802-2-git-send-email-sseago@redhat.com> This is the second round of controller/service layer refactoring changes -- in this case for the pool-related controllers (HW, VM, and Smart pools) Revised for feedback from David Lutterkort Signed-off-by: Scott Seago --- src/app/controllers/application.rb | 28 ++-- src/app/controllers/hardware_controller.rb | 213 +++++-------------------- src/app/controllers/pool_controller.rb | 130 +++++++++++++--- src/app/controllers/resources_controller.rb | 121 +++++---------- src/app/controllers/smart_pools_controller.rb | 119 ++++++-------- src/app/models/hardware_pool.rb | 48 ------ src/app/models/host.rb | 4 + src/app/models/pool.rb | 3 + src/app/models/smart_pool.rb | 19 --- src/app/models/storage_pool.rb | 4 + src/app/models/vm.rb | 6 + src/app/models/vm_resource_pool.rb | 4 + src/app/models/vm_task.rb | 8 +- src/app/services/application_service.rb | 7 + src/app/services/hardware_pool_service.rb | 127 +++++++++++++++ src/app/services/pool_service.rb | 60 +++++++ src/app/services/smart_pool_service.rb | 79 +++++++++ src/app/services/vm_resource_pool_service.rb | 76 +++++++++ src/app/views/resources/quick_summary.rhtml | 2 +- src/app/views/resources/vm_actions.rhtml | 6 +- src/app/views/smart_pools/_form.rhtml | 2 +- 21 files changed, 635 insertions(+), 431 deletions(-) create mode 100644 src/app/services/hardware_pool_service.rb create mode 100644 src/app/services/pool_service.rb create mode 100644 src/app/services/smart_pool_service.rb create mode 100644 src/app/services/vm_resource_pool_service.rb diff --git a/src/app/controllers/application.rb b/src/app/controllers/application.rb index e5f4d4b..bdd5b64 100644 --- a/src/app/controllers/application.rb +++ b/src/app/controllers/application.rb @@ -20,8 +20,6 @@ # Filters added to this controller apply to all controllers in the application. # Likewise, all the methods added will be available for all controllers. -# FIXME: once all controller classes include this, remove here -require 'services/application_service' class ApplicationController < ActionController::Base # FIXME: once all controller classes include this, remove here @@ -118,17 +116,7 @@ class ApplicationController < ActionController::Base def handle_auth_error(msg) respond_to do |format| format.html do - @title = "Access denied" - @errmsg = msg - @ajax = params[:ajax] - @nolayout = params[:nolayout] - if @ajax - render :template => 'layouts/popup-error', :layout => 'tabs-and-content' - elsif @nolayout - render :template => 'layouts/popup-error', :layout => 'help-and-content' - else - render :template => 'layouts/popup-error', :layout => 'popup' - end + html_error_page(msg) end format.json do @json_hash ||= {} @@ -139,7 +127,19 @@ class ApplicationController < ActionController::Base format.xml { head :forbidden } end end - + def html_error_page(msg) + @title = "Access denied" + @errmsg = msg + @ajax = params[:ajax] + @nolayout = params[:nolayout] + if @ajax + render :template => 'layouts/popup-error', :layout => 'tabs-and-content' + elsif @nolayout + render :template => 'layouts/popup-error', :layout => 'help-and-content' + else + render :template => 'layouts/popup-error', :layout => 'popup' + end + end # don't define find_opts for array inputs def json_hash(full_items, attributes, arg_list=[], find_opts={}, id_method=:id) page = params[:page].to_i diff --git a/src/app/controllers/hardware_controller.rb b/src/app/controllers/hardware_controller.rb index 2158e08..384b4aa 100644 --- a/src/app/controllers/hardware_controller.rb +++ b/src/app/controllers/hardware_controller.rb @@ -19,6 +19,7 @@ # class HardwareController < PoolController + include HardwarePoolService EQ_ATTRIBUTES = [ :name, :parent_id ] @@ -27,10 +28,7 @@ class HardwareController < PoolController verify :method => [:post, :delete], :only => :destroy, :redirect_to => { :action => :list } - before_filter :pre_modify, :only => [:add_hosts, :move_hosts, - :add_storage, :move_storage, - :create_storage, :delete_storage, - :move, :removestorage] + before_filter :pre_modify, :only => [:move, :removestorage] def index if params[:path] @@ -113,8 +111,14 @@ class HardwareController < PoolController end def show_storage - @storage_tree = @pool.storage_tree(:filter_unavailable => false, :include_used => true).to_json - show + begin + svc_show(params[:id]) + @storage_tree = @pool.storage_tree(:filter_unavailable => false, + :include_used => true).to_json + render_show + rescue PermissionError => perm_error + handle_auth_error(perm_error.message) + end end def show_tasks @@ -124,12 +128,12 @@ class HardwareController < PoolController def hosts_json if params[:exclude_host] - pre_show + pre_show_pool hosts = @pool.hosts find_opts = {:conditions => ["id != ?", params[:exclude_host]]} include_pool = false elsif params[:id] - pre_show + pre_show_pool hosts = @pool.hosts find_opts = {} include_pool = false @@ -154,7 +158,7 @@ class HardwareController < PoolController def storage_pools_json if params[:id] - pre_show + pre_show_pool storage_pools = @pool.storage_pools find_opts = {:conditions => "type != 'LvmStoragePool'"} include_pool = false @@ -190,144 +194,48 @@ class HardwareController < PoolController super end - def create - resource_type = params[:resource_type] - resource_ids_str = params[:resource_ids] - resource_ids = [] - resource_ids = resource_ids_str.split(",").collect {|x| x.to_i} if resource_ids_str - begin - @pool.create_with_resources(@parent, resource_type, resource_ids) - respond_to do |format| - format.html { - reply = { :object => "pool", :success => true, - :alert => "Hardware Pool was successfully created." } - reply[:resource_type] = resource_type if resource_type - render :json => reply - } - format.xml { - render :xml => @pool.to_xml(XML_OPTS), - :status => :created, - :location => hardware_pool_url(@pool) - } - end - rescue - respond_to do |format| - format.json { - render :json => { :object => "pool", :success => false, - :errors => @pool.errors.localize_error_messages.to_a } - } - format.xml { render :xml => @pool.errors, - :status => :unprocessable_entity } - end - end - end - - def update - if params[:hardware_pool] - # FIXME: For the REST API, we allow moving hosts/storage through - # update. It makes that operation convenient for clients, though makes - # the implementation here somewhat ugly. - [:hosts, :storage_pools].each do |k| - objs = params[:hardware_pool].delete(k) - ids = objs.reject{ |obj| obj[:hardware_pool_id] == @pool.id}. - collect{ |obj| obj[:id] } - if ids.size > 0 - # FIXME: use self.move_hosts/self.move_storage - if k == :hosts - @pool.move_hosts(ids, @pool.id) - else - @pool.move_storage(ids, @pool.id) - end - end - end - # FIXME: HTML views should use :hardware_pool - params[:pool] = params.delete(:hardware_pool) - end - - begin - @pool.update_attributes!(params[:pool]) - respond_to do |format| - format.json { - render :json => { :object => "pool", :success => true, - :alert => "Hardware Pool was successfully modified." } - } - format.xml { - render :xml => @pool.to_xml(XML_OPTS), - :status => :created, - :location => hardware_pool_url(@pool) - } - end - rescue - respond_to do |format| - format.json { - render :json => { :object => "pool", :success => false, - :errors => @pool.errors.localize_error_messages.to_a} - } - format.xml { - render :xml => @pool.errors, - :status => :unprocessable_entity - } - end - end + def additional_create_params + {:resource_type => params[:resource_type], + :resource_ids => params[:resource_ids], + :parent_id => (params[:hardware_pool] ? + params[:hardware_pool][:parent_id] : + params[:parent_id])} end def add_hosts - edit_items(Host, :move_hosts, @pool.id, :add) + edit_items(@pool.id, :svc_move_hosts, :add) end def move_hosts - edit_items(Host, :move_hosts, params[:target_pool_id], :move) + edit_items(params[:target_pool_id], :svc_move_hosts, :move) end def add_storage - edit_items(StoragePool, :move_storage, @pool.id, :add) + edit_items(@pool.id, :svc_move_storage, :add) end def move_storage - edit_items(StoragePool, :move_storage, params[:target_pool_id], :move) + edit_items(params[:target_pool_id], :svc_move_storage, :move) end - #FIXME: we need permissions checks. user must have permission on src pool - # in addition to the current pool (which is checked). We also need to fail - # for storage that aren't currently empty - def edit_items(item_class, item_method, target_pool_id, item_action) - resource_ids_str = params[:resource_ids] - resource_ids = resource_ids_str.split(",").collect {|x| x.to_i} - - # if user doesn't have modify permission on both source and destination - unless @pool.can_modify(@user) and Pool.find(target_pool_id).can_modify(@user) - render :json => { :success => false, - :alert => "Cannot #{item_action.to_s} #{item_class.table_name.humanize} without admin permissions on both pools" } - return - end - - # relay error message if movable check fails for any resource - success = true - failed_resources = "" - resource_ids.each {|x| - unless item_class.find(x).movable? - success = false - failed_resources += x.to_s + " " - end - } - resource_ids.delete_if { |x| ! item_class.find(x).movable? } - + def edit_items(svc_method, target_pool_id, item_action) begin - @pool.transaction do - @pool.send(item_method, resource_ids, target_pool_id) - end - rescue - success = false - end - - if success - render :json => { :success => true, - :alert => "#{item_action.to_s} #{item_class.table_name.humanize} successful.", - :storage => @pool.storage_tree({:filter_unavailable => false, :include_used => true, :state => item_action.to_s})} - else - render :json => { :success => false, - :alert => "#{item_action.to_s} #{item_class.table_name.humanize} failed" + - (failed_resources == "" ? "." : " for " + failed_resources) } + alert = send(svc_method, params[:id], params[:resource_ids].split(","), + target_pool_id) + render :json => { :success => true, :alert => alert, + :storage => @pool.storage_tree({:filter_unavailable => + false, + :include_used => true, + :state => + item_action.to_s})} + rescue PermissionError => perm_error + handle_auth_error(perm_error.message) + # If we need to give more details as to which hosts/storage succeeded, + # they're in the exception + rescue PartialSuccessError => error + render :json => { :success => false, :alert => error.message } + rescue Exception => ex + render :json => { :success => false, :alert => error.message } end end @@ -335,33 +243,6 @@ class HardwareController < PoolController render :layout => 'popup' end - def destroy - parent = @pool.parent - if not(parent) - alert="You can't delete the top level Hardware pool." - success=false - status=:method_not_allowed - elsif not(@pool.children.empty?) - alert = "You can't delete a Pool without first deleting its children." - success=false - status=:conflict - else - if @pool.move_contents_and_destroy - alert="Hardware Pool was successfully deleted." - success=true - status=:ok - else - alert="Failed to delete hardware pool." - success=false - status=:internal_server_error - end - end - respond_to do |format| - format.json { render :json => { :object => "pool", :success => success, - :alert => alert } } - format.xml { head status } - end - end protected #filter methods @@ -369,25 +250,11 @@ class HardwareController < PoolController @pool = HardwarePool.new super end - def pre_create - # FIXME: REST and browsers send params differently. Should be fixed - # in the views - if params[:pool] - @pool = HardwarePool.new(params[:pool]) - else - @pool = HardwarePool.new(params[:hardware_pool]) - end - super - end def pre_edit @pool = HardwarePool.find(params[:id]) @parent = @pool.parent set_perms(@pool) end - def pre_show - @pool = HardwarePool.find(params[:id]) - super - end def pre_modify pre_edit authorize_admin diff --git a/src/app/controllers/pool_controller.rb b/src/app/controllers/pool_controller.rb index 06f8768..911bc92 100644 --- a/src/app/controllers/pool_controller.rb +++ b/src/app/controllers/pool_controller.rb @@ -20,12 +20,9 @@ class PoolController < ApplicationController - before_filter :pre_show_pool, :only => [:show_vms, :show_users, - :show_hosts, :show_storage, - :users_json, :show_tasks, :tasks, + before_filter :pre_show_pool, :only => [:users_json, :show_tasks, :tasks, :vm_pools_json, - :pools_json, :show_pools, - :storage_volumes_json, :quick_summary] + :pools_json, :storage_volumes_json] XML_OPTS = { :include => [ :storage_pools, :hosts, :quota ] @@ -40,6 +37,15 @@ class PoolController < ApplicationController end def show + begin + svc_show(params[:id]) + render_show + rescue PermissionError => perm_error + handle_auth_error(perm_error.message) + end + end + + def render_show respond_to do |format| format.html { render :layout => 'tabs-and-content' if params[:ajax] @@ -49,10 +55,15 @@ class PoolController < ApplicationController render :xml => @pool.to_xml(XML_OPTS) } end - end + end def quick_summary - render :layout => 'selection' + begin + svc_show(params[:id]) + render :layout => 'selection' + rescue PermissionError => perm_error + handle_auth_error(perm_error.message) + end end # resource's users list page @@ -97,30 +108,111 @@ class PoolController < ApplicationController render :layout => 'popup' end + def create + # FIXME: REST and browsers send params differently. Should be fixed + # in the views + begin + alert = svc_create(params[:pool] ? params[:pool] : params[:hardware_pool], + additional_create_params) + respond_to do |format| + format.json { + reply = { :object => "pool", :success => true, + :alert => alert } + reply[:resource_type] = params[:resource_type] if params[:resource_type] + render :json => reply + } + format.xml { + render :xml => @pool.to_xml(XML_OPTS), + :status => :created, + :location => hardware_pool_url(@pool) + } + end + rescue PermissionError => perm_error + handle_auth_error(perm_error.message) + rescue Exception => ex + respond_to do |format| + format.json { json_error("pool", @pool, ex) } + format.xml { render :xml => @pool.errors, + :status => :unprocessable_entity } + end + end + end + + def update + begin + alert = svc_update(params[:id], params[:pool] ? params[:pool] : + params[:hardware_pool]) + respond_to do |format| + format.json { + reply = { :object => "pool", :success => true, :alert => alert } + render :json => reply + } + format.xml { + render :xml => @pool.to_xml(XML_OPTS), + :status => :created, + :location => hardware_pool_url(@pool) + } + end + rescue PermissionError => perm_error + handle_auth_error(perm_error.message) + rescue Exception => ex + respond_to do |format| + format.json { json_error("pool", @pool, ex) } + format.xml { render :xml => @pool.errors, + :status => :unprocessable_entity } + end + end + end + + def additional_create_params + {} + end + def edit render :layout => 'popup' end + def destroy + alert = nil + success = true + status = :ok + begin + alert = svc_destroy(params[:id]) + rescue ActionError => error + alert = error.message + success = false + status = :conflict + rescue PermissionError => error + alert = error.message + success = false + status = :forbidden + rescue Exception => error + alert = error.message + success = false + status = :method_not_allowed + end + respond_to do |format| + format.json { render :json => { :object => "pool", :success => success, + :alert => alert } } + format.xml { head status } + end + end + protected def pre_new @parent = Pool.find(params[:parent_id]) set_perms(@parent) end - def pre_create - #this is currently only true for the rest API for hardware pools - if params[:hardware_pool] - @parent = Pool.find(params[:hardware_pool][:parent_id]) - else - @parent = Pool.find(params[:parent_id]) - end - set_perms(@parent) - end def pre_show_pool - pre_show - end - def pre_show + @pool = Pool.find(params[:id]) set_perms(@pool) authorize_view end + # FIXME: remove these when service transition is complete. these are here + # to keep from running permissions checks and other setup steps twice + def tmp_pre_update + end + def tmp_authorize_admin + end end diff --git a/src/app/controllers/resources_controller.rb b/src/app/controllers/resources_controller.rb index c61ef46..7ad79ca 100644 --- a/src/app/controllers/resources_controller.rb +++ b/src/app/controllers/resources_controller.rb @@ -18,13 +18,12 @@ # also available at http://www.gnu.org/copyleft/gpl.html. class ResourcesController < PoolController + include VmResourcePoolService def index list render :action => 'list' end - before_filter :pre_vm_actions, :only => [:vm_actions] - # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html) verify :method => :post, :only => [ :destroy, :create, :update ], :redirect_to => { :action => :list } @@ -69,89 +68,62 @@ class ResourcesController < PoolController end def vms_json - pre_show + pre_show_pool super(:full_items => @pool.vms, :find_opts => {}, :include_pool => :true) end - def create - begin - @pool.create_with_parent(@parent) - render :json => { :object => "vm_resource_pool", :success => true, - :alert => "Virtual Machine Pool was successfully created." } - rescue - render :json => { :object => "vm_resource_pool", :success => false, - :errors => @pool.errors.localize_error_messages.to_a} - end - end - - def update - begin - @pool.update_attributes!(params[:pool]) - render :json => { :object => "vm_resource_pool", :success => true, - :alert => "Virtual Machine Pool was successfully modified." } - rescue - render :json => { :object => "vm_resource_pool", :success => false, - :errors => @pool.errors.localize_error_messages.to_a} - end + def additional_create_params + {:parent_id => (params[:hardware_pool] ? + params[:hardware_pool][:parent_id] : + params[:parent_id])} end - #FIXME: we need permissions checks. user must have permission. We also need to fail + #FIXME: we need permissions checks. user must have permission. We also need to fail # for pools that aren't currently empty def delete - vm_pool_ids_str = params[:vm_pool_ids] - vm_pool_ids = vm_pool_ids_str.split(",").collect {|x| x.to_i} - vm_pool_names = [] - begin - VmResourcePool.transaction do - pools = VmResourcePool.find(:all, :conditions => "id in (#{vm_pool_ids.join(', ')})") - pools.each do |pool| - vm_pool_names << pool.name - pool.destroy - end + vm_pool_ids = params[:vm_pool_ids].split(",") + successes = [] + failures = {} + vm_pool_ids.each do |pool_id| + begin + svc_destroy(pool_id) + successes << @pool + rescue PermissionError => perm_error + failures[@pool] = perm_error.message + rescue Exception => ex + failures[@pool] = ex.message end - render :json => { :object => "vm_resource_pool", :success => true, - :alert => "Virtual Machine Pools #{vm_pool_names.join(', ')} were successfully deleted." } - rescue - render :json => { :object => "vm_resource_pool", :success => false, - :alert => "Error in deleting Virtual Machine Pools."} end - end - - def destroy - if @pool.destroy - alert="Virtual Machine Pool was successfully deleted." - success=true - else - alert="Failed to delete virtual machine pool." - success=false + success = failures.empty? + alert = "" + if !successes.empty? + alert = "Virtual Machine Pools #{successes.collect{|pool| pool.name}.join(', ')} were successfully deleted." + end + if !failures.empty? + alert += " Errors in deleting VM Pools #{failures.collect{|pool,err| "#{pool.name}: #{err}"}.join(', ')}." end - render :json => { :object => "vm_resource_pool", :success => success, :alert => alert } + render :json => { :object => "vm_resource_pool", :success => success, + :alert => alert } end def vm_actions - @action = params[:vm_action] - @action_label = VmTask.action_label(@action) - vms_str = params[:vm_ids] - @vms = vms_str.split(",").collect {|x| Vm.find(x.to_i)} - @success_list = [] - @failure_list = [] begin - @pool.transaction do - @vms.each do |vm| - if vm.queue_action(@user, @action) - @success_list << vm - print vm.description, vm.id, "\n" - else - @failure_list << vm - end - end - end - rescue + alert = svc_vm_actions_hosts(params[:id], params[:vm_action], + params[:vm_ids].split(",")) + @success_list = @vms + @failures = {} + render :layout => 'confirmation' + rescue PermissionError => perm_error + handle_auth_error(perm_error.message) + rescue PartialSuccessError => error + @success_list = error.successes + @failures = error.failures + render :layout => 'confirmation' + rescue Exeption => ex flash[:errmsg] = 'Error queueing VM actions.' @success_list = [] @failure_list = [] end - render :layout => 'confirmation' end protected @@ -159,26 +131,11 @@ class ResourcesController < PoolController @pool = VmResourcePool.new super end - def pre_create - @pool = VmResourcePool.new(params[:pool]) - super - end def pre_edit @pool = VmResourcePool.find(params[:id]) @parent = @pool.parent @current_pool_id=@pool.id set_perms(@pool.parent) end - def pre_show - @pool = VmResourcePool.find(params[:id]) - super - @is_hwpool_admin = @pool.parent.can_modify(@user) - end - def pre_vm_actions - @pool = VmResourcePool.find(params[:id]) - @parent = @pool.parent - set_perms(@pool) - authorize_user - end end diff --git a/src/app/controllers/smart_pools_controller.rb b/src/app/controllers/smart_pools_controller.rb index fb6ccb5..993d285 100644 --- a/src/app/controllers/smart_pools_controller.rb +++ b/src/app/controllers/smart_pools_controller.rb @@ -19,12 +19,9 @@ # class SmartPoolsController < PoolController + include SmartPoolService - before_filter :pre_modify, :only => [:add_hosts, :remove_hosts, - :add_storage, :remove_storage, - :add_vms, :remove_vms, - :add_pools, :remove_pools, - :add_items, :add_pool_dialog] + before_filter :pre_modify, :only => [:add_pool_dialog] def show_vms show end @@ -38,30 +35,19 @@ class SmartPoolsController < PoolController end def show_storage - @storage_tree = @pool.storage_tree(:filter_unavailable => false, :include_used => true).to_json - show - end - - def create begin - @pool.create_with_parent(@parent) - render :json => { :object => "smart_pool", :success => true, - :alert => "Smart Pool was successfully created." } - rescue - render :json => { :object => "smart_pool", :success => false, - :errors => @pool.errors.localize_error_messages.to_a} + svc_show(params[:id]) + @storage_tree = @pool.storage_tree(:filter_unavailable => false, :include_used => true).to_json + render_show + rescue PermissionError => perm_error + handle_auth_error(perm_error.message) end end - def update - begin - @pool.update_attributes!(params[:smart_pool]) - render :json => { :object => "smart_pool", :success => true, - :alert => "Smart Pool was successfully modified." } - rescue - render :json => { :object => "smart_pool", :success => false, - :errors => @pool.errors.localize_error_messages.to_a} - end + def additional_create_params + {:parent_id => (params[:hardware_pool] ? + params[:hardware_pool][:parent_id] : + params[:parent_id])} end def add_pool_dialog @@ -98,7 +84,7 @@ class SmartPoolsController < PoolController def items_json_internal(item_class, item_assoc) if params[:id] - pre_show + pre_show_pool full_items = @pool.send(item_assoc) find_opts = {} include_pool = false @@ -120,80 +106,82 @@ class SmartPoolsController < PoolController end def add_hosts - edit_items(Host, :add_items, :add) + add_or_remove_items(Host, :add) end def remove_hosts - edit_items(Host, :remove_items, :remove) + add_or_remove_items(Host, :remove) end def add_storage - edit_items(StoragePool, :add_items, :add) + add_or_remove_items(StoragePool, :add) end def remove_storage - edit_items(StoragePool, :remove_items, :remove) + add_or_remove_items(StoragePool, :remove) end def add_vms - edit_items(Vm, :add_items, :add) + add_or_remove_items(Vm, :add) end def remove_vms - edit_items(Vm, :remove_items, :remove) + add_or_remove_items(Vm, :remove) end def add_pools - edit_items(Pool, :add_items, :add) + add_or_remove_items(Pool, :add) end def remove_pools - edit_items(Pool, :remove_items, :remove) + add_or_remove_items(Pool, :remove) end - def edit_items(item_class, item_method, item_action) - resource_ids_str = params[:resource_ids] - resource_ids = resource_ids_str.split(",").collect {|x| x.to_i} + def add_or_remove_items(item_class, item_action) begin - @pool.send(item_method,item_class, resource_ids) - render :json => { :success => true, - :alert => "#{item_action.to_s} #{item_class.table_name.humanize} successful." } + alert = svc_add_remove_items(params[:id], item_class, item_action, + params[:resource_ids].split(",")) + render :json => { :success => true, :alert => alert} rescue render :json => { :success => false, :alert => "#{item_action.to_s} #{item_class.table_name.humanize} failed." } + rescue PermissionError => perm_error + handle_auth_error(perm_error.message) + # If we need to give more details as to which hosts/storage succeeded, + # they're in the exception + rescue PartialSuccessError => error + render :json => { :success => false, :alert => error.message } + rescue Exception => ex + render :json => { :success => false, :alert => error.message } end end def add_items class_and_ids_str = params[:class_and_ids] - class_and_ids = class_and_ids_str.split(",").collect {|x| x.split("_")} + class_and_ids = class_and_ids_str.split(",").collect do |class_and_id_str| + class_and_id = class_and_id_str.split("_") + class_and_id[0] = class_and_id[0].constantize + class_and_id[1] = class_and_id[1].to_a + end begin - @pool.transaction do - class_and_ids.each do |class_and_id| - @pool.add_item(class_and_id[0].constantize.find(class_and_id[1].to_i)) - end - end - render :json => { :success => true, - :alert => "Add items to smart pool successful." } - rescue => ex + alert = svc_add_remove_items(params[:id], nil, :add, class_and_ids) + render :json => { :success => true, :alert => alert} + rescue render :json => { :success => false, - :alert => "Add items to smart pool failed: " + ex.message } + :alert => "#{item_action.to_s} failed." } + rescue PermissionError => perm_error + handle_auth_error(perm_error.message) + # If we need to give more details as to which hosts/storage succeeded, + # they're in the exception + rescue PartialSuccessError => error + render :json => { :success => false, :alert => error.message } + rescue Exception => ex + render :json => { :success => false, :alert => error.message } end end - def destroy - if @pool.destroy - alert="Smart Pool was successfully deleted." - success=true - else - alert="Failed to delete Smart pool." - success=false - end - render :json => { :object => "smart_pool", :success => success, :alert => alert } - end - protected #filter methods def pre_new @@ -201,20 +189,11 @@ class SmartPoolsController < PoolController @parent = DirectoryPool.get_or_create_user_root(get_login_user) set_perms(@parent) end - def pre_create - @pool = SmartPool.new(params[:smart_pool]) - @parent = DirectoryPool.get_or_create_user_root(get_login_user) - set_perms(@parent) - end def pre_edit @pool = SmartPool.find(params[:id]) @parent = @pool.parent set_perms(@pool) end - def pre_show - @pool = SmartPool.find(params[:id]) - super - end def pre_modify pre_edit authorize_admin diff --git a/src/app/models/hardware_pool.rb b/src/app/models/hardware_pool.rb index 7015854..0e7e745 100644 --- a/src/app/models/hardware_pool.rb +++ b/src/app/models/hardware_pool.rb @@ -40,54 +40,6 @@ class HardwarePool < Pool hw_root ? hw_root.named_child(DEFAULT_POOL_NAME) : nil end - def create_with_resources(parent, resource_type= nil, resource_ids=[]) - create_with_parent(parent) do - if resource_type == "hosts" - move_hosts(resource_ids, id) - elsif resource_type == "storage" - move_storage(resource_ids, id) - end - end - end - - def move_hosts(host_ids, target_pool_id) - hosts = Host.find(:all, :conditions => "id in (#{host_ids.join(', ')})") - transaction do - hosts.each do |host| - host.hardware_pool = HardwarePool.find(target_pool_id) - host.save! - end - end - end - - def move_storage(storage_pool_ids, target_pool_id) - storage_pools = StoragePool.find(:all, :conditions => "id in (#{storage_pool_ids.join(', ')})") - transaction do - storage_pools.each do |storage_pool| - storage_pool.hardware_pool_id = target_pool_id - storage_pool.save! - end - end - end - - - # todo: does this method still make sense? or should we just enforce "empty" pools? - def move_contents_and_destroy - transaction do - parent_id = parent.id - hosts.each do |host| - host.hardware_pool_id=parent_id - host.save - end - storage_pools.each do |vol| - vol.hardware_pool_id=parent_id - vol.save - end - # what about quotas -- for now they're deleted - destroy - end - end - def total_storage_volumes storage_pools.inject(0) { |sum, pool| sum += pool.storage_volumes.size} end diff --git a/src/app/models/host.rb b/src/app/models/host.rb index 06d7388..0665c3f 100644 --- a/src/app/models/host.rb +++ b/src/app/models/host.rb @@ -134,6 +134,10 @@ class Host < ActiveRecord::Base hardware_pool.search_users end + def permission_obj + hardware_pool + end + def movable? return vms.size == 0 end diff --git a/src/app/models/pool.rb b/src/app/models/pool.rb index 6f2a086..2979fcb 100644 --- a/src/app/models/pool.rb +++ b/src/app/models/pool.rb @@ -306,6 +306,9 @@ class Pool < ActiveRecord::Base def class_and_id self.class.name + "_" + self.id.to_s end + def permission_obj + self + end protected def traverse_parents if id diff --git a/src/app/models/smart_pool.rb b/src/app/models/smart_pool.rb index dba000d..1f718a8 100644 --- a/src/app/models/smart_pool.rb +++ b/src/app/models/smart_pool.rb @@ -53,25 +53,6 @@ class SmartPool < Pool :tagged_id=>item.id}).destroy end - def add_items(item_class, item_ids) - items = item_class.find(:all, :conditions => "id in (#{item_ids.join(', ')})") - transaction do - items.each { |item| add_item(item)} - end - end - - def remove_items(item_class, item_ids) - tags = smart_pool_tags.find(:all, - :conditions => "tagged_id in - (#{item_ids.join(', ')}) - and tagged_type='#{item_class.name}'") - transaction do - tags.each do |tag| - tag.destroy - end - end - end - def self.smart_pools_for_user(user) nested_pools = DirectoryPool.get_smart_root.full_set_nested( :privilege => Privilege::MODIFY, :user => user, diff --git a/src/app/models/storage_pool.rb b/src/app/models/storage_pool.rb index fbe5954..92548bd 100644 --- a/src/app/models/storage_pool.rb +++ b/src/app/models/storage_pool.rb @@ -155,6 +155,10 @@ class StoragePool < ActiveRecord::Base return_hash end + def permission_obj + hardware_pool + end + def movable? storage_volumes.each{ |x| return false unless x.movable? diff --git a/src/app/models/vm.rb b/src/app/models/vm.rb index c62595a..6880c22 100644 --- a/src/app/models/vm.rb +++ b/src/app/models/vm.rb @@ -177,11 +177,17 @@ class Vm < ActiveRecord::Base :in => EFFECTIVE_STATE.keys + def get_vm_pool + vm_resource_pool + end def get_hardware_pool pool = vm_resource_pool pool = pool.get_hardware_pool if pool pool end + def permission_obj + vm_resource_pool + end def storage_volume_ids storage_volumes.collect {|x| x.id } end diff --git a/src/app/models/vm_resource_pool.rb b/src/app/models/vm_resource_pool.rb index 1ab4ab1..e41dcab 100644 --- a/src/app/models/vm_resource_pool.rb +++ b/src/app/models/vm_resource_pool.rb @@ -32,6 +32,10 @@ class VmResourcePool < Pool traverse_parents { |pool| pool if pool[:type] == HardwarePool.name} end + def get_vm_pool + self + end + def allocated_resources(exclude_vm = nil) pending_cpus = 0 pending_memory = 0 diff --git a/src/app/models/vm_task.rb b/src/app/models/vm_task.rb index ed33564..d7afe54 100644 --- a/src/app/models/vm_task.rb +++ b/src/app/models/vm_task.rb @@ -36,7 +36,7 @@ class VmTask < Task # for migrate VM action, args provides the optional target host ACTION_MIGRATE_VM = "migrate_vm" - PRIV_OBJECT_VM_POOL = "vm_resource_pool" + PRIV_OBJECT_VM_POOL = "get_vm_pool" PRIV_OBJECT_HW_POOL = "get_hardware_pool" @@ -145,6 +145,12 @@ class VmTask < Task actions end + def self.action_privilege(action) + return ACTIONS[action][:privilege][0] + end + def self.action_privilege_object(action, obj) + return obj.send(ACTIONS[action][:privilege][1]) + end def self.action_label(action) return ACTIONS[action][:label] end diff --git a/src/app/services/application_service.rb b/src/app/services/application_service.rb index 4dc5eba..bd0a308 100644 --- a/src/app/services/application_service.rb +++ b/src/app/services/application_service.rb @@ -29,6 +29,13 @@ module ApplicationService class PermissionError < RuntimeError; end class ActionError < RuntimeError; end + class PartialSuccessError < RuntimeError + attr_reader :failures, :successes + def initialize(msg, failures={}, successes=[]) + @failures = failures + @successes = successes + end + end # Including class must provide a GET_LOGIN_USER diff --git a/src/app/services/hardware_pool_service.rb b/src/app/services/hardware_pool_service.rb new file mode 100644 index 0000000..c9aa70b --- /dev/null +++ b/src/app/services/hardware_pool_service.rb @@ -0,0 +1,127 @@ +# +# Copyright (C) 2009 Red Hat, Inc. +# Written by Scott Seago , +# David Lutterkort +# +# 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; version 2 of the License. +# +# 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. A copy of the GNU General Public License is +# also available at http://www.gnu.org/copyleft/gpl.html. +# Mid-level API: Business logic around HW pools +module HardwarePoolService + + include PoolService + + def svc_create(pool_hash, other_args) + # from before_filter + @pool = HardwarePool.new(pool_hash) + @parent = Pool.find(other_args[:parent_id]) + authorized!(Privilege::MODIFY, at parent) + + alert = "Hardware Pool was successfully created." + Pool.transaction do + @pool.create_with_parent(@parent) + begin + if other_args[:resource_type] == "hosts" + svc_move_hosts(@pool.id, other_args[:resource_ids].split(","), @pool.id) + elsif other_args[:resource_type] == "storage" + svc_move_storage(@pool.id, other_args[:resource_ids].split(","), @pool.id) + end + # wrapped in a transaction, so fail on partial success + rescue PartialSuccessError => ex + # Raising ActionError here since we're aborting the transaction. Errors + # on creation here result in no persistent changes to the database. + raise ActionError.new("Could not move all hosts or storage to this pool") + end + end + return alert + end + + def svc_move_hosts(pool_id, host_ids, target_pool_id) + svc_move_items_internal(pool_id, Host, host_ids, target_pool_id) + end + def svc_move_storage(pool_id, storage_pool_ids, target_pool_id) + svc_move_items_internal(pool_id, StoragePool, storage_pool_ids, target_pool_id) + end + def svc_move_items_internal(pool_id, item_class, resource_ids, target_pool_id) + # from before_filter + @pool = HardwarePool.find(pool_id) + target_pool = Pool.find(target_pool_id) + authorized!(Privilege::MODIFY,target_pool) + authorized!(Privilege::MODIFY, at pool) unless @pool == target_pool + + resources = item_class.find(resource_ids) + + # relay error message if movable check fails for any resource + success = true + failed_resources = {} + successful_resources = [] + resources.each do |resource| + begin + if !resource.movable? + failed_resources[resource] = "Not Movable" + elsif ! resource.hardware_pool.can_modify(@user) + failed_resources[resource] = "Failed permission check" + else + resource.hardware_pool = target_pool + resource.save! + successful_resources << resource + end + rescue Exception => ex + failed_resources[resource] = ex.message + end + end + unless failed_resources.empty? + raise PartialSuccessError.new("Move #{item_class.table_name.humanize} only partially successful", + failed_resources, successful_resources) + end + return "Move #{item_class.table_name.humanize} successful." + end + + def additional_update_actions(pool, pool_hash) + # FIXME: For the REST API, we allow moving hosts/storage through + # update. It makes that operation convenient for clients, though makes + # the implementation here somewhat ugly. + begin + [:hosts, :storage_pools].each do |k| + objs = pool_hash.delete(k) + ids = objs.reject{ |obj| obj[:hardware_pool_id] == @pool.id}. + collect{ |obj| obj[:id] } + if ids.size > 0 + if k == :hosts + svc_move_hosts(pool.id, ids, pool.id) + else + svc_move_storage(pool.id, ids, pool.id) + end + end + end + # wrapped in a transaction, so fail on partial success + rescue PartialSuccessError => ex + raise ActionError.new("Could not move all hosts or storage to this pool") + end + end + + def check_destroy_preconditions + msg = nil + if @pool == HardwarePool.get_default_pool + msg = "You can't delete the top level Hardware pool" + elsif not(@pool.children.empty?) + msg = "You can't delete a Pool without first deleting its children." + elsif not(@pool.hosts.empty?) + msg = "You can't delete a Pool without first moving its hosts." + elsif not(@pool.storage_pools.empty?) + msg = "You can't delete a Pool without first moving its storage." + end + raise ActionError.new(msg) if msg + end +end diff --git a/src/app/services/pool_service.rb b/src/app/services/pool_service.rb new file mode 100644 index 0000000..2377094 --- /dev/null +++ b/src/app/services/pool_service.rb @@ -0,0 +1,60 @@ +# +# Copyright (C) 2009 Red Hat, Inc. +# Written by Scott Seago , +# David Lutterkort +# +# 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; version 2 of the License. +# +# 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. A copy of the GNU General Public License is +# also available at http://www.gnu.org/copyleft/gpl.html. +# Mid-level API: Business logic around pools +module PoolService + + include ApplicationService + + def svc_show(pool_id) + # from before_filter + @pool = Pool.find(pool_id) + authorized!(Privilege::VIEW, at pool) + end + + def update_perms + set_perms(@pool) + end + def additional_update_actions(pool, pool_hash) + end + + def svc_update(pool_id, pool_hash) + # from before_filter + @pool = Pool.find(params[:id]) + @parent = @pool.parent + update_perms + authorized!(Privilege::MODIFY) + Pool.transaction do + additional_update_actions(@pool, pool_hash) + @pool.update_attributes!(pool_hash) + end + end + + def svc_destroy(pool_id) + # from before_filter + @pool = Pool.find(pool_id) + authorized!(Privilege::MODIFY, @pool) + check_destroy_preconditions + @pool.destroy + return "Pool was successfully deleted." + end + + def check_destroy_preconditions + end +end diff --git a/src/app/services/smart_pool_service.rb b/src/app/services/smart_pool_service.rb new file mode 100644 index 0000000..344b9e8 --- /dev/null +++ b/src/app/services/smart_pool_service.rb @@ -0,0 +1,79 @@ +# +# Copyright (C) 2009 Red Hat, Inc. +# Written by Scott Seago , +# David Lutterkort +# +# 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; version 2 of the License. +# +# 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. A copy of the GNU General Public License is +# also available at http://www.gnu.org/copyleft/gpl.html. +# Mid-level API: Business logic around smart pools +module SmartPoolService + + include PoolService + + def svc_create(pool_hash, other_args) + # from before_filter + @pool = SmartPool.new(pool_hash) + @parent = DirectoryPool.get_or_create_user_root(get_login_user) + authorized!(Privilege::MODIFY, at parent) + + alert = "Smart Pool was successfully created." + @pool.create_with_parent(@parent) + return alert + end + + # if item_class is nil, resource_ids is an array of [class, id] pairs + def svc_add_remove_items(pool_id, item_class, item_action, resource_ids) + # from before_filter + @pool = SmartPool.find(pool_id) + @parent = @pool.parent + authorized!(Privilege::MODIFY, at pool) + unless [:add, :remove].include?(item_action) + raise ActionError.new("Invalid action #{item_action}") + end + if item_class + resources = item_class.find(resource_ids) + else + resources = resource_ids.collect {|the_class,id| the_class.find(id)} + end + + # relay error message if movable check fails for any resource + success = true + failed_resources = {} + successful_resources = [] + resources.each do |resource| + begin + if item_action == :add + if ! resource.permission_obj.can_view(@user) + failed_resources[resource] = "Failed permission check" + else + @pool.add_item(resource) + successful_resources << resource + end + elsif item_action == :remove + @pool.remove_item(resource) + successful_resources << resource + end + rescue Exception => ex + failed_resources[resource] = ex.message + end + end + unless failed_resources.empty? + raise PartialSuccessError.new("#{item_action.to_s} #{item_class.table_name.humanize if item_class} only partially successful", + failed_resources, successful_resources) + end + return "#{item_action.to_s} #{item_class.table_name.humanize} successful." + end + +end diff --git a/src/app/services/vm_resource_pool_service.rb b/src/app/services/vm_resource_pool_service.rb new file mode 100644 index 0000000..30f7106 --- /dev/null +++ b/src/app/services/vm_resource_pool_service.rb @@ -0,0 +1,76 @@ +# +# Copyright (C) 2009 Red Hat, Inc. +# Written by Scott Seago , +# David Lutterkort +# +# 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; version 2 of the License. +# +# 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. A copy of the GNU General Public License is +# also available at http://www.gnu.org/copyleft/gpl.html. +# Mid-level API: Business logic around VM pools +module VmResourcePoolService + + include PoolService + + def svc_create(pool_hash, other_args) + # from before_filter + @pool = VmResourcePool.new(pool_hash) + @parent = Pool.find(other_args[:parent_id]) + authorized!(Privilege::MODIFY, at parent) + + alert = "VM Pool was successfully created." + @pool.create_with_parent(@parent) + return alert + end + + def update_perms + @current_pool_id=@pool.id + set_perms(@pool.parent) + end + + def svc_vm_actions(pool_id, vm_action, vm_ids) + # from before_filter + @pool = VmResourcePool.find(pool_id) + @parent = @pool.parent + @action = vm_action + @action_label = VmTask.action_label(@action) + authorized!(VmTask.action_privilege(@action), + VmTask.action_privilege_object(@action, at pool)) + + @vms = Vm.find(vm_ids) + + successful_vms = [] + failed_vms = {} + @vms.each do |vm| + begin + if vm.vm_resource_pool != @pool + failed_vms[vm] = "VM #{vm.description} does not belong to the current pool." + elsif vm.queue_action(@user, @action) + successful_vms << vm + else + failed_vms[vm] = "unavailable action" + end + rescue Exception => ex + failed_vms[vm] = ex.message + end + end + unless failed_vms.empty? + raise PartialSuccessError.new("#{@action} only partially successful", + failed_vms, successful_vms) + end + return "Action #{@action} successful." + end + + + +end diff --git a/src/app/views/resources/quick_summary.rhtml b/src/app/views/resources/quick_summary.rhtml index 31c4033..70b8df6 100644 --- a/src/app/views/resources/quick_summary.rhtml +++ b/src/app/views/resources/quick_summary.rhtml @@ -2,7 +2,7 @@ <%=h @pool.name %> quota <%- end -%> <%- content_for :action_links do -%> - <%if @is_hwpool_admin -%> + <%if @pool.parent.can_modify(@user) -%> <%= link_to image_tag("icon_edit.png") + " Edit", {:controller => 'resources', :action => 'edit', :id => @pool}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> diff --git a/src/app/views/resources/vm_actions.rhtml b/src/app/views/resources/vm_actions.rhtml index d556b94..b3fa1ad 100644 --- a/src/app/views/resources/vm_actions.rhtml +++ b/src/app/views/resources/vm_actions.rhtml @@ -25,10 +25,10 @@ Action succeeded for these VMs: <% end %> -Action invalid for these VMs: +Action failed for these VMs:
    - <% for vm in @failure_list %> -
  • <%= vm.description %>
  • + <% for vm, msg in @failures %> +
  • <%= vm.description %>: <%= msg %>
  • <% end %>
diff --git a/src/app/views/smart_pools/_form.rhtml b/src/app/views/smart_pools/_form.rhtml index 2f2156a..c1ec6bd 100644 --- a/src/app/views/smart_pools/_form.rhtml +++ b/src/app/views/smart_pools/_form.rhtml @@ -1,6 +1,6 @@ <%= error_messages_for 'vm_resource_pool' %> -<%= text_field_with_label "Name", 'smart_pool', 'name' %> +<%= text_field_with_label "Name", 'pool', 'name' %> -- 1.6.0.6 From lutter at redhat.com Mon May 4 23:06:50 2009 From: lutter at redhat.com (David Lutterkort) Date: Mon, 04 May 2009 16:06:50 -0700 Subject: [Ovirt-devel] [PATCH server 3/3] * app/controllers/host_controller.rb: factor biz logic out In-Reply-To: <49F9CDAE.2050603@redhat.com> References: <1240963575-15433-1-git-send-email-lutter@redhat.com> <1240963575-15433-4-git-send-email-lutter@redhat.com> <49F9CDAE.2050603@redhat.com> Message-ID: <1241478410.31859.19.camel@avon.watzmann.net> On Thu, 2009-04-30 at 12:11 -0400, Scott Seago wrote: > David Lutterkort wrote: > > (1) addhost should use PoolService somehow, need to look at Scott's > > latest patch > > > > > I'm not sure it should use the service -- this is one of these wui-only > form setup bits that I've been ignoring for now. I'm not sure how this > fits into the service model. I've been following the line of 'no permission checks in the controllers' - maybe to a fault. That's the main reason why I'd like to have addhost use the Service layer - just for the permission check. > > (2) the way we handle unsupported actions is strange: we define them and > > kick out a nice error - in reality, people can only get there either if > > we have a bug somewhere or if they did URL surgery; either way, they > > deserve a gory Rails error report. We should therefore remove the > > actions and associated nice error messages Any opinions on this ? > OK, I think I understand what you're doing here -- I may have > misunderstood svc_modify in my comments above -- is this meant as a > distinct action from svc_update -- which we're using elsewhere to > actually make changes? i.e. it's effectively svc_show with modify > permissions enforcing? Does this belong in the svc layer? This seems > more WUI-specific, as for the api/qmf case I'm not sure we'd be using > this action. Looking below this is used for multiple modify actions, so > perhaps it does belong here -- it just might not be exposed as a > QMF-level API call -- am I understading this correctly now? My main intent with that was that all permission checking is pushed into the service layer, and when you write a controller you can just mindlessly call the 'right' service method - e.g., if you want to display something for modification to the user, you'd use svc_modify (obviously not the best name) I doubt we'd use this in the QMF API; but the main motivation is to make sure we have permission checks localized as much as possible so that changes to the permission model don't require use to hunt through the whole code base. Do you still think it's unnecessary ? David From lutter at redhat.com Mon May 4 23:15:46 2009 From: lutter at redhat.com (David Lutterkort) Date: Mon, 4 May 2009 16:15:46 -0700 Subject: [Ovirt-devel] HostController -> Service (take 2) Message-ID: <1241478950-10991-1-git-send-email-lutter@redhat.com> This is a repost of the patch series from last Tuesday. The main change is that auth errors are now handled with Rails rescue_from mechanism. David From lutter at redhat.com Mon May 4 23:15:47 2009 From: lutter at redhat.com (David Lutterkort) Date: Mon, 4 May 2009 16:15:47 -0700 Subject: [Ovirt-devel] [PATCH server 1/4] * src/Rakefile: do not require gettext for all tasks, breaks rdoc In-Reply-To: <1241478950-10991-1-git-send-email-lutter@redhat.com> References: <1241478950-10991-1-git-send-email-lutter@redhat.com> Message-ID: <1241478950-10991-2-git-send-email-lutter@redhat.com> --- src/Rakefile | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-) diff --git a/src/Rakefile b/src/Rakefile index 74b9d18..eebf798 100644 --- a/src/Rakefile +++ b/src/Rakefile @@ -1,3 +1,4 @@ +# -*- ruby -*- # Add your own tasks in files placed in lib/tasks ending in .rake, # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. @@ -8,14 +9,18 @@ require 'rake/testtask' require 'rake/rdoctask' require 'tasks/rails' -require 'gettext/utils' +# Do not require 'gettext/utils' here, it breaks rdoc, +# require it in tasks that actually need it instead + desc "Create mo-files for L10n" task :makemo do + require 'gettext/utils' GetText.create_mofiles(true, "po", "locale") end desc "Update pot/po files to match new version." task :updatepo do + require 'gettext/utils' MY_APP_TEXT_DOMAIN = "ovirt" MY_APP_VERSION = "ovirt 0.0.1" GetText.update_pofiles(MY_APP_TEXT_DOMAIN, -- 1.6.0.6 From lutter at redhat.com Mon May 4 23:15:48 2009 From: lutter at redhat.com (David Lutterkort) Date: Mon, 4 May 2009 16:15:48 -0700 Subject: [Ovirt-devel] [PATCH server 2/4] * app/controllers/application.rb: handler for permission errors In-Reply-To: <1241478950-10991-1-git-send-email-lutter@redhat.com> References: <1241478950-10991-1-git-send-email-lutter@redhat.com> Message-ID: <1241478950-10991-3-git-send-email-lutter@redhat.com> Use Rails' rescue_from to catch permission errors and render an appropriate response. --- src/app/controllers/application.rb | 35 +++++++++++++++++++++++++++++++++++ 1 files changed, 35 insertions(+), 0 deletions(-) diff --git a/src/app/controllers/application.rb b/src/app/controllers/application.rb index e5f4d4b..3902e78 100644 --- a/src/app/controllers/application.rb +++ b/src/app/controllers/application.rb @@ -48,6 +48,8 @@ class ApplicationController < ActionController::Base before_filter :tmp_authorize_admin, :only => [:create, :update, :destroy] before_filter :is_logged_in, :get_help_section + # General error handlers + rescue_from PermissionError, :with => :handle_perm_error def choose_layout if(params[:component_layout]) @@ -140,6 +142,39 @@ class ApplicationController < ActionController::Base end end + def handle_perm_error(error) + handle_error(:error => error, :status => :forbidden, + :title => "Access denied") + end + + def handle_error(hash) + msg = hash[:message] || hash[:error].message + title = hash[:title] || "Internal Server Error" + status = hash[:status] || :internal_server_error + respond_to do |format| + format.html do + @title = title || "Something went very wrong" + @errmsg = msg + @ajax = params[:ajax] + @nolayout = params[:nolayout] + if @ajax + render :template => 'layouts/popup-error', :layout => 'tabs-and-content' + elsif @nolayout + render :template => 'layouts/popup-error', :layout => 'help-and-content' + else + render :template => 'layouts/popup-error', :layout => 'popup' + end + end + format.json do + @json_hash ||= {} + @json_hash[:success] = (status == :ok) + @json_hash[:alert] = msg + render :json => @json_hash + end + format.xml { head status } + end + end + # don't define find_opts for array inputs def json_hash(full_items, attributes, arg_list=[], find_opts={}, id_method=:id) page = params[:page].to_i -- 1.6.0.6 From lutter at redhat.com Mon May 4 23:15:49 2009 From: lutter at redhat.com (David Lutterkort) Date: Mon, 4 May 2009 16:15:49 -0700 Subject: [Ovirt-devel] [PATCH server 3/4] Remove handle_auth_error since we use rescue_with now In-Reply-To: <1241478950-10991-1-git-send-email-lutter@redhat.com> References: <1241478950-10991-1-git-send-email-lutter@redhat.com> Message-ID: <1241478950-10991-4-git-send-email-lutter@redhat.com> --- src/app/controllers/application.rb | 27 +-------------------- src/app/controllers/storage_volume_controller.rb | 5 +++- src/app/controllers/vm_controller.rb | 12 ++------- 3 files changed, 9 insertions(+), 35 deletions(-) diff --git a/src/app/controllers/application.rb b/src/app/controllers/application.rb index 3902e78..638f9c0 100644 --- a/src/app/controllers/application.rb +++ b/src/app/controllers/application.rb @@ -111,36 +111,13 @@ class ApplicationController < ActionController::Base def authorize_action(privilege, msg=nil) msg ||= 'You have insufficient privileges to perform action.' unless authorized?(privilege) - handle_auth_error(msg) + handle_error(:message => msg, + :title => "Access Denied", :status => :forbidden) false else true end end - def handle_auth_error(msg) - respond_to do |format| - format.html do - @title = "Access denied" - @errmsg = msg - @ajax = params[:ajax] - @nolayout = params[:nolayout] - if @ajax - render :template => 'layouts/popup-error', :layout => 'tabs-and-content' - elsif @nolayout - render :template => 'layouts/popup-error', :layout => 'help-and-content' - else - render :template => 'layouts/popup-error', :layout => 'popup' - end - end - format.json do - @json_hash ||= {} - @json_hash[:success] = false - @json_hash[:alert] = msg - render :json => @json_hash - end - format.xml { head :forbidden } - end - end def handle_perm_error(error) handle_error(:error => error, :status => :forbidden, diff --git a/src/app/controllers/storage_volume_controller.rb b/src/app/controllers/storage_volume_controller.rb index b6b0593..c6ce58d 100644 --- a/src/app/controllers/storage_volume_controller.rb +++ b/src/app/controllers/storage_volume_controller.rb @@ -112,7 +112,10 @@ class StorageVolumeController < ApplicationController @storage_volume = StorageVolume.find(params[:id]) set_perms(@storage_volume.storage_pool.hardware_pool) unless authorized?(Privilege::MODIFY) and @storage_volume.storage_pool.user_subdividable - handle_auth_error("You do not have permission to delete this storage volume.") + handle_error(:message => + "You do not have permission to delete this storage volume.", + :status => :forbidden, + :title => "Access Denied") else alert, success = delete_volume_internal(@storage_volume) respond_to do |format| diff --git a/src/app/controllers/vm_controller.rb b/src/app/controllers/vm_controller.rb index ee6d79e..c276f0b 100644 --- a/src/app/controllers/vm_controller.rb +++ b/src/app/controllers/vm_controller.rb @@ -41,13 +41,9 @@ class VmController < ApplicationController end def show - begin - svc_show(params[:id]) - @actions = @vm.get_action_hash(@user) - render :layout => 'selection' - rescue PermissionError => perm_error - handle_auth_error(perm_error.message) - end + svc_show(params[:id]) + @actions = @vm.get_action_hash(@user) + render :layout => 'selection' end def add_to_smart_pool @@ -65,8 +61,6 @@ class VmController < ApplicationController begin alert = svc_create(params[:vm], params[:start_now]) render :json => { :object => "vm", :success => true, :alert => alert } - rescue PermissionError => perm_error - handle_auth_error(perm_error.message) rescue Exception => error json_error("vm", @vm, error) end -- 1.6.0.6 From lutter at redhat.com Mon May 4 23:15:50 2009 From: lutter at redhat.com (David Lutterkort) Date: Mon, 4 May 2009 16:15:50 -0700 Subject: [Ovirt-devel] [PATCH server 4/4] * app/controllers/host_controller.rb: factor biz logic out In-Reply-To: <1241478950-10991-1-git-send-email-lutter@redhat.com> References: <1241478950-10991-1-git-send-email-lutter@redhat.com> Message-ID: <1241478950-10991-5-git-send-email-lutter@redhat.com> The business logic is now in HostService. The main functional difference is that svc_list filters the host list by permission. --- src/app/controllers/host_controller.rb | 125 +++++++++++++------------------- src/app/services/host_service.rb | 119 ++++++++++++++++++++++++++++++ 2 files changed, 168 insertions(+), 76 deletions(-) create mode 100644 src/app/services/host_service.rb diff --git a/src/app/controllers/host_controller.rb b/src/app/controllers/host_controller.rb index 994b5e2..9b683fa 100644 --- a/src/app/controllers/host_controller.rb +++ b/src/app/controllers/host_controller.rb @@ -19,8 +19,13 @@ class HostController < ApplicationController - EQ_ATTRIBUTES = [ :state, :arch, :hostname, :uuid, - :hardware_pool_id ] + include HostService + + # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html) + verify :method => [:post, :put], :only => [ :create, :update ], + :redirect_to => { :action => :list } + verify :method => [:post, :delete], :only => :destroy, + :redirect_to => { :action => :list } def index list @@ -30,42 +35,21 @@ class HostController < ApplicationController end end - before_filter :pre_action, :only => [:host_action, :enable, :disable, :clear_vms, :edit_network] - before_filter :pre_addhost, :only => [:addhost] - - # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html) - verify :method => [:post, :put], :only => [ :create, :update ], - :redirect_to => { :action => :list } - verify :method => [:post, :delete], :only => :destroy, - :redirect_to => { :action => :list } - - def list - conditions = [] - EQ_ATTRIBUTES.each do |attr| - if params[attr] - conditions << "#{attr} = :#{attr}" - end - end - @hosts = Host.find(:all, - :conditions => [conditions.join(" and "), params], - :order => "id") - end - + def list + svc_list(params) + end def show - if authorize_view - respond_to do |format| - format.html { render :layout => 'selection' } - format.xml { render :xml => @host.to_xml(:include => [ :cpus ] ) } - end + svc_show(params[:id]) + respond_to do |format| + format.html { render :layout => 'selection' } + format.xml { render :xml => @host.to_xml(:include => [ :cpus ] ) } end end def quick_summary - pre_show - if authorize_view - render :layout => false - end + svc_show(id) + render :layout => false end # retrieves data used by snapshot graphs @@ -73,15 +57,17 @@ class HostController < ApplicationController end def addhost - @hardware_pool = Pool.find(params[:hardware_pool_id]) - render :layout => 'popup' - end + # FIXME: This probably should go into PoolService.svc_modify, + # so that we have permission checks in only one place - def pre_addhost + # Old pre_addhost @pool = Pool.find(params[:hardware_pool_id]) @parent = @pool.parent set_perms(@pool) authorize_admin + # Old addhost + @hardware_pool = Pool.find(params[:hardware_pool_id]) + render :layout => 'popup' end def add_to_smart_pool @@ -89,6 +75,11 @@ class HostController < ApplicationController render :layout => 'popup' end + # FIXME: We implement the standard controller actions, but catch + # them in filters and kick out friendly warnings that you can't + # perform them on hosts. Tat's overkill - the only way for a user + # to get to these actions is with URL surgery or from a bug in the + # application, both of which deserve a noisy error def new end @@ -116,52 +107,40 @@ class HostController < ApplicationController end def disable - set_disabled(1) + svc_enable(params[:id], "disabled") + render :json => { + :object => :host, + :alert => "Host was successfully disabled", + :success => true + } end + def enable - set_disabled(0) - end - - def set_disabled(value) - operation = value == 1 ? "disabled" : "enabled" - begin - @host.is_disabled = value - @host.save! - @json_hash[:alert]="Host was successfully #{operation}" - @json_hash[:success]=true - rescue - @json_hash[:alert]="Error setting host to #{operation}" - @json_hash[:success]=false - end - render :json => @json_hash + svc_enable(params[:id], "enabled") + render :json => { + :object => :host, + :alert => "Host was successfully enabled", + :success => true + } end def clear_vms - begin - Host.transaction do - task = HostTask.new({ :user => get_login_user, - :task_target => @host, - :action => HostTask::ACTION_CLEAR_VMS, - :state => Task::STATE_QUEUED}) - task.save! - @host.is_disabled = true - @host.save! - end - @json_hash[:alert]="Clear VMs action was successfully queued." - @json_hash[:success]=true - rescue - @json_hash[:alert]="Error in queueing Clear VMs action." - @json_hash[:success]=false - end - render :json => @json_hash + svc_clear_vms(params[:id]) + render :json => { + :object => :host, + :alert => "Clear VMs action was successfully queued.", + :success => true + } end def edit_network + svc_modify(params[:id]) render :layout => 'popup' end def bondings_json - bondings = Host.find(params[:id]).bondings + svc_show(params[:id]) + bondings = @host.bondings render :json => bondings.collect{ |x| {:id => x.id, :name => x.name} } end @@ -180,12 +159,6 @@ class HostController < ApplicationController flash[:notice] = 'Hosts may not be edited via the web UI' redirect_to :action=> 'show', :id => @host end - def pre_action - @host = Host.find(params[:id]) - set_perms(@host.hardware_pool) - @json_hash = { :object => :host } - authorize_admin - end def pre_show @host = Host.find(params[:id]) set_perms(@host.hardware_pool) diff --git a/src/app/services/host_service.rb b/src/app/services/host_service.rb new file mode 100644 index 0000000..074d830 --- /dev/null +++ b/src/app/services/host_service.rb @@ -0,0 +1,119 @@ +#-- +# Copyright (C) 2009 Red Hat, Inc. +# Written by David Lutterkort +# +# 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; version 2 of the License. +# +# 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. A copy of the GNU General Public License is +# also available at http://www.gnu.org/copyleft/gpl.html. +#++ +# Business logic around hosts aka nodes +module HostService + + include ApplicationService + + # Host attributes on which we filter with '=' + EQ_ATTRIBUTES = [ :state, :arch, :hostname, :uuid, + :hardware_pool_id ] + + # List hosts matching criteria described by +params+; only the entries + # for keys in +EQ_ATTRIBUTES+ are used + # + # === Instance variables + # [@hosts] stores list of hosts matching criteria + # === Required permissions + # [Privilege::VIEW] no exception raised, @hosts + # is filtered by privilege + def svc_list(params) + conditions = [] + EQ_ATTRIBUTES.each do |attr| + if params[attr] + conditions << "hosts.#{attr} = :#{attr}" + end + end + # Add permission check + params = params.dup + params[:user] = get_login_user + params[:priv] = Privilege::VIEW + conditions << "privileges.name=:priv" + conditions << "permissions.uid=:user" + incl = [{ :hardware_pool => { :permissions => { :role => :privileges}}}] + @hosts = Host.find(:all, + :include => incl, + :conditions => [conditions.join(" and "), params], + :order => "hosts.id") + end + + # Load the Host with +id+ for viewing + # + # === Instance variables + # [@host] stores the Host with +id+ + # === Required permissions + # [Privilege::VIEW] on host's HardwarePool + def svc_show(id) + lookup(id, Privilege::VIEW) + end + + # Load the Host with +id+ for editing + # + # === Instance variables + # [@host] stores the Host with +id+ + # === Required permissions + # [Privilege::MODIFY] on host's HardwarePool + def svc_modify(id) + lookup(id, Privilege::MODIFY) + end + + # Set the disabled state of the Host with +id+ to :enabled + # or :disabled + # + # === Instance variables + # [@host] stores the Host with +id+ + # === Required permissions + # [Privilege::MODIFY] on host's HardwarePool + def svc_enable(id, state) + ind = ["enabled", "disabled"].index(state.to_s) + if ind.nil? + raise ArgumentError, "STATE must be 'enabled' or 'disabled'" + end + svc_modify(id) + @host.is_disabled = ind + @host.save! + end + + # Queue task to migrate all VM's off the Host with +id+, and mark the + # host as disabled + # + # === Instance variables + # [@host] stores the Host with +id+ + # === Required permissions + # [Privilege::MODIFY] on host's HardwarePool + def svc_clear_vms(id) + svc_modify(id) + Host.transaction do + task = HostTask.new({ :user => get_login_user, + :task_target => @host, + :action => HostTask::ACTION_CLEAR_VMS, + :state => Task::STATE_QUEUED}) + task.save! + @host.is_disabled = true + @host.save! + end + end + + private + def lookup(id, priv) + @host = Host.find(id) + authorized!(priv, @host.hardware_pool) + end +end -- 1.6.0.6 From lutter at redhat.com Mon May 4 23:20:06 2009 From: lutter at redhat.com (David Lutterkort) Date: Mon, 04 May 2009 16:20:06 -0700 Subject: [Ovirt-devel] [PATCH server] cache results of set_perms between calls to make multi-object operations more efficient when the permission object is the same. In-Reply-To: <1241462877-5802-4-git-send-email-sseago@redhat.com> References: <1241462877-5802-1-git-send-email-sseago@redhat.com> <1241462877-5802-2-git-send-email-sseago@redhat.com> <1241462877-5802-3-git-send-email-sseago@redhat.com> <1241462877-5802-4-git-send-email-sseago@redhat.com> Message-ID: <1241479206.31859.20.camel@avon.watzmann.net> On Mon, 2009-05-04 at 18:47 +0000, Scott Seago wrote: > Signed-off-by: Scott Seago ACK From sseago at redhat.com Tue May 5 00:05:19 2009 From: sseago at redhat.com (Scott Seago) Date: Mon, 04 May 2009 20:05:19 -0400 Subject: [Ovirt-devel] [PATCH server 3/3] * app/controllers/host_controller.rb: factor biz logic out In-Reply-To: <1241478410.31859.19.camel@avon.watzmann.net> References: <1240963575-15433-1-git-send-email-lutter@redhat.com> <1240963575-15433-4-git-send-email-lutter@redhat.com> <49F9CDAE.2050603@redhat.com> <1241478410.31859.19.camel@avon.watzmann.net> Message-ID: <49FF82BF.80408@redhat.com> David Lutterkort wrote: > On Thu, 2009-04-30 at 12:11 -0400, Scott Seago wrote: > >> David Lutterkort wrote: >> >>> (1) addhost should use PoolService somehow, need to look at Scott's >>> latest patch >>> >>> >>> >> I'm not sure it should use the service -- this is one of these wui-only >> form setup bits that I've been ignoring for now. I'm not sure how this >> fits into the service model. >> > > I've been following the line of 'no permission checks in the > controllers' - maybe to a fault. That's the main reason why I'd like to > have addhost use the Service layer - just for the permission check. > > Yes, see below -- it should be fine. >>> (2) the way we handle unsupported actions is strange: we define them and >>> kick out a nice error - in reality, people can only get there either if >>> we have a bug somewhere or if they did URL surgery; either way, they >>> deserve a gory Rails error report. We should therefore remove the >>> actions and associated nice error messages >>> > > Any opinions on this ? > > I guess I"m not really sure. one line of thought is we should have a well-defined error message for all edge cases -- the other is "ugly errors for URL surgery". I'm not sure it's important enough to spend too much time making it consistent, but perhaps we should for future issues not bother with nice errors for them. >> OK, I think I understand what you're doing here -- I may have >> misunderstood svc_modify in my comments above -- is this meant as a >> distinct action from svc_update -- which we're using elsewhere to >> actually make changes? i.e. it's effectively svc_show with modify >> permissions enforcing? Does this belong in the svc layer? This seems >> more WUI-specific, as for the api/qmf case I'm not sure we'd be using >> this action. Looking below this is used for multiple modify actions, so >> perhaps it does belong here -- it just might not be exposed as a >> QMF-level API call -- am I understading this correctly now? >> > > My main intent with that was that all permission checking is pushed into > the service layer, and when you write a controller you can just > mindlessly call the 'right' service method - e.g., if you want to > display something for modification to the user, you'd use svc_modify > (obviously not the best name) > > I doubt we'd use this in the QMF API; but the main motivation is to make > sure we have permission checks localized as much as possible so that > changes to the permission model don't require use to hunt through the > whole code base. > > Do you still think it's unnecessary ? > > David > > > Sorry -- my reply was somewhat difficult to parse as I started to understand what you were doing there as I read down the patch. I do think we should be consistent with permission checks, and I hadn't yet figured out how I'd handle those wui-only actions, as the current state of the pool stuff is a bit confusing with some checks in before_filters and some in the service layer. I think the way you're doing it is fine here, and I'm thinking of doing the same to the pool and VM controllers in a follow-on patch when I add the rdoc stuff. But what about controllers that have no QMF alternative? Do we go ahead and create a service layer for GraphController, DashboardController, etc.? Scot From sseago at redhat.com Tue May 5 00:26:18 2009 From: sseago at redhat.com (Scott Seago) Date: Mon, 04 May 2009 20:26:18 -0400 Subject: [Ovirt-devel] [PATCH server 3/4] Remove handle_auth_error since we use rescue_with now In-Reply-To: <1241478950-10991-4-git-send-email-lutter@redhat.com> References: <1241478950-10991-1-git-send-email-lutter@redhat.com> <1241478950-10991-4-git-send-email-lutter@redhat.com> Message-ID: <49FF87AA.7000709@redhat.com> David Lutterkort wrote: > --- > src/app/controllers/application.rb | 27 +-------------------- > src/app/controllers/storage_volume_controller.rb | 5 +++- > src/app/controllers/vm_controller.rb | 12 ++------- > 3 files changed, 9 insertions(+), 35 deletions(-) > > diff --git a/src/app/controllers/vm_controller.rb b/src/app/controllers/vm_controller.rb > index ee6d79e..c276f0b 100644 > --- a/src/app/controllers/vm_controller.rb > +++ b/src/app/controllers/vm_controller.rb > @@ -65,8 +61,6 @@ class VmController < ApplicationController > begin > alert = svc_create(params[:vm], params[:start_now]) > render :json => { :object => "vm", :success => true, :alert => alert } > - rescue PermissionError => perm_error > - handle_auth_error(perm_error.message) > rescue Exception => error > json_error("vm", @vm, error) > end > If I'm understanding the way rescue_from works (that the whole action method call in the controller is wrapped by a generated begin/rescue block based on the rescue_from construct) then the above won't work. The catch-all "rescue Exception" will also catch PermissionError since there's no longer a more specific rescue in this scope. I think we'd need a rescue_from for the catch-all level as well. Can rescue_from handle specific and more general errors at once? i.e. can we register a handler for Exception -- that will call an empty handle_general_error handler in application.rb -- which can be overridden where needed (such as here) to handle the case as above. Also, in the rescue_from handler is there any way to get at which action was called? This would allow us to have error-handling behavior that might be slightly different for specific actions. Scott From sseago at redhat.com Tue May 5 15:46:24 2009 From: sseago at redhat.com (Scott Seago) Date: Tue, 05 May 2009 11:46:24 -0400 Subject: [Ovirt-devel] [PATCH server 4/4] * app/controllers/host_controller.rb: factor biz logic out In-Reply-To: <1241478950-10991-5-git-send-email-lutter@redhat.com> References: <1241478950-10991-1-git-send-email-lutter@redhat.com> <1241478950-10991-5-git-send-email-lutter@redhat.com> Message-ID: <4A005F50.3000102@redhat.com> David Lutterkort wrote: > The business logic is now in HostService. > > The main functional difference is that svc_list filters the host list by > permission. > --- > src/app/controllers/host_controller.rb | 125 +++++++++++++------------------- > src/app/services/host_service.rb | 119 ++++++++++++++++++++++++++++++ > 2 files changed, 168 insertions(+), 76 deletions(-) > create mode 100644 src/app/services/host_service.rb > Did some preliminary testing of this, and it looks good in general. ACK From sseago at redhat.com Tue May 5 15:52:10 2009 From: sseago at redhat.com (Scott Seago) Date: Tue, 05 May 2009 11:52:10 -0400 Subject: [Ovirt-devel] [PATCH server 1/4] * src/Rakefile: do not require gettext for all tasks, breaks rdoc In-Reply-To: <1241478950-10991-2-git-send-email-lutter@redhat.com> References: <1241478950-10991-1-git-send-email-lutter@redhat.com> <1241478950-10991-2-git-send-email-lutter@redhat.com> Message-ID: <4A0060AA.7090006@redhat.com> David Lutterkort wrote: > --- > src/Rakefile | 7 ++++++- > 1 files changed, 6 insertions(+), 1 deletions(-) > > diff --git a/src/Rakefile b/src/Rakefile > index 74b9d18..eebf798 100644 > --- a/src/Rakefile > +++ b/src/Rakefile > @@ -1,3 +1,4 @@ > +# -*- ruby -*- > # Add your own tasks in files placed in lib/tasks ending in .rake, > # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. > > @@ -8,14 +9,18 @@ require 'rake/testtask' > require 'rake/rdoctask' > > require 'tasks/rails' > -require 'gettext/utils' > +# Do not require 'gettext/utils' here, it breaks rdoc, > +# require it in tasks that actually need it instead > + > desc "Create mo-files for L10n" > task :makemo do > + require 'gettext/utils' > GetText.create_mofiles(true, "po", "locale") > end > > desc "Update pot/po files to match new version." > task :updatepo do > + require 'gettext/utils' > MY_APP_TEXT_DOMAIN = "ovirt" > MY_APP_VERSION = "ovirt 0.0.1" > GetText.update_pofiles(MY_APP_TEXT_DOMAIN, > Looks fine, but I'm not sure how to run rdoc in our current setup. 'rake rdoc' didn't find a matching task. So preliminary ACK once you let me know how to test it :-) Scott From sseago at redhat.com Tue May 5 15:58:53 2009 From: sseago at redhat.com (Scott Seago) Date: Tue, 05 May 2009 11:58:53 -0400 Subject: [Ovirt-devel] [PATCH server 1/4] * src/Rakefile: do not require gettext for all tasks, breaks rdoc In-Reply-To: <4A0060AA.7090006@redhat.com> References: <1241478950-10991-1-git-send-email-lutter@redhat.com> <1241478950-10991-2-git-send-email-lutter@redhat.com> <4A0060AA.7090006@redhat.com> Message-ID: <4A00623D.5060005@redhat.com> Scott Seago wrote: > David Lutterkort wrote: >> --- >> src/Rakefile | 7 ++++++- >> 1 files changed, 6 insertions(+), 1 deletions(-) >> >> diff --git a/src/Rakefile b/src/Rakefile >> index 74b9d18..eebf798 100644 >> --- a/src/Rakefile >> +++ b/src/Rakefile >> @@ -1,3 +1,4 @@ >> +# -*- ruby -*- >> # Add your own tasks in files placed in lib/tasks ending in .rake, >> # for example lib/tasks/capistrano.rake, and they will automatically >> be available to Rake. >> >> @@ -8,14 +9,18 @@ require 'rake/testtask' >> require 'rake/rdoctask' >> >> require 'tasks/rails' >> -require 'gettext/utils' >> +# Do not require 'gettext/utils' here, it breaks rdoc, >> +# require it in tasks that actually need it instead >> + >> desc "Create mo-files for L10n" task :makemo do >> + require 'gettext/utils' >> GetText.create_mofiles(true, "po", "locale") >> end >> >> desc "Update pot/po files to match new version." task :updatepo do >> + require 'gettext/utils' >> MY_APP_TEXT_DOMAIN = "ovirt" MY_APP_VERSION = "ovirt 0.0.1" >> GetText.update_pofiles(MY_APP_TEXT_DOMAIN, >> > Looks fine, but I'm not sure how to run rdoc in our current setup. > 'rake rdoc' didn't find a matching task. > > So preliminary ACK once you let me know how to test it :-) > > Scott OK 'rake doc:app' tested this, so ACK. Scott From sseago at redhat.com Tue May 5 16:21:37 2009 From: sseago at redhat.com (Scott Seago) Date: Tue, 05 May 2009 12:21:37 -0400 Subject: [Ovirt-devel] [PATCH server 2/4] * app/controllers/application.rb: handler for permission errors In-Reply-To: <1241478950-10991-3-git-send-email-lutter@redhat.com> References: <1241478950-10991-1-git-send-email-lutter@redhat.com> <1241478950-10991-3-git-send-email-lutter@redhat.com> Message-ID: <4A006791.4040405@redhat.com> David Lutterkort wrote: > Use Rails' rescue_from to catch permission errors and render an appropriate > response. > --- > src/app/controllers/application.rb | 35 +++++++++++++++++++++++++++++++++++ > 1 files changed, 35 insertions(+), 0 deletions(-) > > diff --git a/src/app/controllers/application.rb b/src/app/controllers/application.rb > index e5f4d4b..3902e78 100644 > --- a/src/app/controllers/application.rb > +++ b/src/app/controllers/application.rb > @@ -48,6 +48,8 @@ class ApplicationController < ActionController::Base > before_filter :tmp_authorize_admin, :only => [:create, :update, :destroy] > before_filter :is_logged_in, :get_help_section > > + # General error handlers > + rescue_from PermissionError, :with => :handle_perm_error > > def choose_layout > if(params[:component_layout]) > @@ -140,6 +142,39 @@ class ApplicationController < ActionController::Base > end > end > > + def handle_perm_error(error) > + handle_error(:error => error, :status => :forbidden, > + :title => "Access denied") > + end > + > + def handle_error(hash) > + msg = hash[:message] || hash[:error].message > + title = hash[:title] || "Internal Server Error" > + status = hash[:status] || :internal_server_error > + respond_to do |format| > + format.html do > + @title = title || "Something went very wrong" > + @errmsg = msg > + @ajax = params[:ajax] > + @nolayout = params[:nolayout] > + if @ajax > + render :template => 'layouts/popup-error', :layout => 'tabs-and-content' > + elsif @nolayout > + render :template => 'layouts/popup-error', :layout => 'help-and-content' > + else > + render :template => 'layouts/popup-error', :layout => 'popup' > + end > + end > + format.json do > + @json_hash ||= {} > + @json_hash[:success] = (status == :ok) > + @json_hash[:alert] = msg > + render :json => @json_hash > + end > + format.xml { head status } > + end > + end > + > # don't define find_opts for array inputs > def json_hash(full_items, attributes, arg_list=[], find_opts={}, id_method=:id) > page = params[:page].to_i > This looks good. ACK. We just need to figure out how we're handling the more general error types so we can properly handle actions that currently catch PermissionError _and_ others. Scott From lutter at redhat.com Tue May 5 17:04:43 2009 From: lutter at redhat.com (David Lutterkort) Date: Tue, 05 May 2009 17:04:43 +0000 Subject: [Ovirt-devel] [PATCH server 3/3] * app/controllers/host_controller.rb: factor biz logic out In-Reply-To: <49FF82BF.80408@redhat.com> References: <1240963575-15433-1-git-send-email-lutter@redhat.com> <1240963575-15433-4-git-send-email-lutter@redhat.com> <49F9CDAE.2050603@redhat.com> <1241478410.31859.19.camel@avon.watzmann.net> <49FF82BF.80408@redhat.com> Message-ID: <1241543083.31859.28.camel@avon.watzmann.net> On Mon, 2009-05-04 at 20:05 -0400, Scott Seago wrote: > But what about controllers that have no QMF alternative? Do we go ahead > and create a service layer for GraphController, DashboardController, etc.? It would be nice to do that for consistency, but I don't see it as urgent for now. David From lutter at redhat.com Tue May 5 19:03:44 2009 From: lutter at redhat.com (David Lutterkort) Date: Tue, 5 May 2009 12:03:44 -0700 Subject: [Ovirt-devel] HostController -> Service (take 3) Message-ID: <1241550226-12899-1-git-send-email-lutter@redhat.com> This iteration of the host controller refactoring changes error handling once again, since the previous patch had some serious errors in that area. We now have a catch-all error handler, responding to Exception, that pulls validation errors out of the instance variables of the controller. In the future, we might want to refine that to handle validation errors separately from Exception (handling Exception really points to a bug in the app) David From lutter at redhat.com Tue May 5 19:03:45 2009 From: lutter at redhat.com (David Lutterkort) Date: Tue, 5 May 2009 12:03:45 -0700 Subject: [Ovirt-devel] [PATCH server 1/2] Generic error handling In-Reply-To: <1241550226-12899-1-git-send-email-lutter@redhat.com> References: <1241550226-12899-1-git-send-email-lutter@redhat.com> Message-ID: <1241550226-12899-2-git-send-email-lutter@redhat.com> Instead of explicit rescue blocks in actions, we now register error handlers for each exception (with a catch-all handler for Exception) The handlers generate an appropriate response for each exception and output method. Remove handle_auth_error and json_error, since their functionality is now covered by handle_perm_error and handle_general_error --- src/app/controllers/application.rb | 81 +++++++++++++++----- src/app/controllers/hardware_controller.rb | 37 +++------- src/app/controllers/pool_controller.rb | 88 ++++++++-------------- src/app/controllers/resources_controller.rb | 4 +- src/app/controllers/smart_pools_controller.rb | 47 ++---------- src/app/controllers/storage_volume_controller.rb | 5 +- src/app/controllers/vm_controller.rb | 61 ++++----------- 7 files changed, 131 insertions(+), 192 deletions(-) diff --git a/src/app/controllers/application.rb b/src/app/controllers/application.rb index bdd5b64..6932a1f 100644 --- a/src/app/controllers/application.rb +++ b/src/app/controllers/application.rb @@ -46,6 +46,10 @@ class ApplicationController < ActionController::Base before_filter :tmp_authorize_admin, :only => [:create, :update, :destroy] before_filter :is_logged_in, :get_help_section + # General error handlers, must be in order from least specific + # to most specific + rescue_from Exception, :with => :handle_general_error + rescue_from PermissionError, :with => :handle_perm_error def choose_layout if(params[:component_layout]) @@ -107,28 +111,38 @@ class ApplicationController < ActionController::Base def authorize_action(privilege, msg=nil) msg ||= 'You have insufficient privileges to perform action.' unless authorized?(privilege) - handle_auth_error(msg) + handle_error(:message => msg, + :title => "Access Denied", :status => :forbidden) false else true end end - def handle_auth_error(msg) + + def handle_perm_error(error) + handle_error(:error => error, :status => :forbidden, + :title => "Access denied") + end + + def handle_general_error(error) + handle_error(:error => error, :status => :internal_server_error, + :title => "Internal Server Error") + end + + def handle_error(hash) + log_error(hash[:error]) + msg = hash[:message] || hash[:error].message + title = hash[:title] || "Internal Server Error" + status = hash[:status] || :internal_server_error respond_to do |format| - format.html do - html_error_page(msg) - end - format.json do - @json_hash ||= {} - @json_hash[:success] = false - @json_hash[:alert] = msg - render :json => @json_hash - end - format.xml { head :forbidden } + format.html { html_error_page(title, msg) } + format.json { render :json => json_error_hash(msg, status) } + format.xml { render :xml => xml_errors(msg), :status => status } end end - def html_error_page(msg) - @title = "Access denied" + + def html_error_page(title, msg) + @title = title @errmsg = msg @ajax = params[:ajax] @nolayout = params[:nolayout] @@ -140,6 +154,7 @@ class ApplicationController < ActionController::Base render :template => 'layouts/popup-error', :layout => 'popup' end end + # don't define find_opts for array inputs def json_hash(full_items, attributes, arg_list=[], find_opts={}, id_method=:id) page = params[:page].to_i @@ -175,11 +190,37 @@ class ApplicationController < ActionController::Base render :json => json_hash(full_items, attributes, arg_list, find_opts, id_method).to_json end - def json_error(obj_type, obj, exception) - json_hash = { :object => obj_type, :success => false} - json_hash[:errors] = obj.errors.localize_error_messages.to_a if obj - json_hash[:alert] = exception.message if obj.errors.size == 0 - render :json => json_hash + private + def json_error_hash(msg, status) + json = {} + json[:success] = (status == :ok) + json.merge!(instance_errors) + # There's a potential issue here: if we add :errors for an object + # that the view won't generate inline error messages for, the user + # won't get any indication what the error is. But if we set :alert + # unconditionally, the user will get validation errors twice: once + # inline in the form, and once in the flash + json[:alert] = msg unless json[:errors] + return json + end + + def xml_errors(msg) + xml = {} + xml[:message] = msg + xml.merge!(instance_errors) + return xml + end + + def instance_errors + hash = {} + instance_variables.each do |ivar| + val = instance_variable_get(ivar) + if val && val.respond_to?(:errors) && val.errors.size > 0 + hash[:object] = ivar[1, ivar.size] + hash[:errors] ||= [] + hash[:errors] += val.errors.localize_error_messages.to_a + end + end + return hash end - end diff --git a/src/app/controllers/hardware_controller.rb b/src/app/controllers/hardware_controller.rb index 56a2c47..0b6cf9b 100644 --- a/src/app/controllers/hardware_controller.rb +++ b/src/app/controllers/hardware_controller.rb @@ -111,14 +111,10 @@ class HardwareController < PoolController end def show_storage - begin - svc_show(params[:id]) - @storage_tree = @pool.storage_tree(:filter_unavailable => false, - :include_used => true).to_json - render_show - rescue PermissionError => perm_error - handle_auth_error(perm_error.message) - end + svc_show(params[:id]) + @storage_tree = @pool.storage_tree(:filter_unavailable => false, + :include_used => true).to_json + render_show end def show_tasks @@ -219,24 +215,13 @@ class HardwareController < PoolController end def edit_items(svc_method, target_pool_id, item_action) - begin - alert = send(svc_method, params[:id], params[:resource_ids].split(","), - target_pool_id) - render :json => { :success => true, :alert => alert, - :storage => @pool.storage_tree({:filter_unavailable => - false, - :include_used => true, - :state => - item_action.to_s})} - rescue PermissionError => perm_error - handle_auth_error(perm_error.message) - # If we need to give more details as to which hosts/storage succeeded, - # they're in the exception - rescue PartialSuccessError => error - render :json => { :success => false, :alert => error.message } - rescue Exception => ex - render :json => { :success => false, :alert => error.message } - end + alert = send(svc_method, params[:id], params[:resource_ids].split(","), + target_pool_id) + render :json => { :success => true, :alert => alert, + :storage => @pool.storage_tree({:filter_unavailable => false, + :include_used => true, + :state => + item_action.to_s})} end def removestorage diff --git a/src/app/controllers/pool_controller.rb b/src/app/controllers/pool_controller.rb index 911bc92..6e41ac6 100644 --- a/src/app/controllers/pool_controller.rb +++ b/src/app/controllers/pool_controller.rb @@ -37,12 +37,8 @@ class PoolController < ApplicationController end def show - begin - svc_show(params[:id]) - render_show - rescue PermissionError => perm_error - handle_auth_error(perm_error.message) - end + svc_show(params[:id]) + render_show end def render_show @@ -58,12 +54,8 @@ class PoolController < ApplicationController end def quick_summary - begin - svc_show(params[:id]) - render :layout => 'selection' - rescue PermissionError => perm_error - handle_auth_error(perm_error.message) - end + svc_show(params[:id]) + render :layout => 'selection' end # resource's users list page @@ -111,56 +103,36 @@ class PoolController < ApplicationController def create # FIXME: REST and browsers send params differently. Should be fixed # in the views - begin - alert = svc_create(params[:pool] ? params[:pool] : params[:hardware_pool], - additional_create_params) - respond_to do |format| - format.json { - reply = { :object => "pool", :success => true, - :alert => alert } - reply[:resource_type] = params[:resource_type] if params[:resource_type] - render :json => reply - } - format.xml { - render :xml => @pool.to_xml(XML_OPTS), - :status => :created, - :location => hardware_pool_url(@pool) - } - end - rescue PermissionError => perm_error - handle_auth_error(perm_error.message) - rescue Exception => ex - respond_to do |format| - format.json { json_error("pool", @pool, ex) } - format.xml { render :xml => @pool.errors, - :status => :unprocessable_entity } - end + alert = svc_create(params[:pool] ? params[:pool] : params[:hardware_pool], + additional_create_params) + respond_to do |format| + format.json { + reply = { :object => "pool", :success => true, + :alert => alert } + reply[:resource_type] = params[:resource_type] if params[:resource_type] + render :json => reply + } + format.xml { + render :xml => @pool.to_xml(XML_OPTS), + :status => :created, + :location => hardware_pool_url(@pool) + } end end def update - begin - alert = svc_update(params[:id], params[:pool] ? params[:pool] : - params[:hardware_pool]) - respond_to do |format| - format.json { - reply = { :object => "pool", :success => true, :alert => alert } - render :json => reply - } - format.xml { - render :xml => @pool.to_xml(XML_OPTS), - :status => :created, - :location => hardware_pool_url(@pool) - } - end - rescue PermissionError => perm_error - handle_auth_error(perm_error.message) - rescue Exception => ex - respond_to do |format| - format.json { json_error("pool", @pool, ex) } - format.xml { render :xml => @pool.errors, - :status => :unprocessable_entity } - end + alert = svc_update(params[:id], params[:pool] ? params[:pool] : + params[:hardware_pool]) + respond_to do |format| + format.json { + reply = { :object => "pool", :success => true, :alert => alert } + render :json => reply + } + format.xml { + render :xml => @pool.to_xml(XML_OPTS), + :status => :created, + :location => hardware_pool_url(@pool) + } end end diff --git a/src/app/controllers/resources_controller.rb b/src/app/controllers/resources_controller.rb index 7ad79ca..edee59d 100644 --- a/src/app/controllers/resources_controller.rb +++ b/src/app/controllers/resources_controller.rb @@ -113,8 +113,8 @@ class ResourcesController < PoolController @success_list = @vms @failures = {} render :layout => 'confirmation' - rescue PermissionError => perm_error - handle_auth_error(perm_error.message) + rescue PermissionError + raise rescue PartialSuccessError => error @success_list = error.successes @failures = error.failures diff --git a/src/app/controllers/smart_pools_controller.rb b/src/app/controllers/smart_pools_controller.rb index 993d285..0198d47 100644 --- a/src/app/controllers/smart_pools_controller.rb +++ b/src/app/controllers/smart_pools_controller.rb @@ -35,13 +35,9 @@ class SmartPoolsController < PoolController end def show_storage - begin - svc_show(params[:id]) - @storage_tree = @pool.storage_tree(:filter_unavailable => false, :include_used => true).to_json - render_show - rescue PermissionError => perm_error - handle_auth_error(perm_error.message) - end + svc_show(params[:id]) + @storage_tree = @pool.storage_tree(:filter_unavailable => false, :include_used => true).to_json + render_show end def additional_create_params @@ -138,22 +134,9 @@ class SmartPoolsController < PoolController end def add_or_remove_items(item_class, item_action) - begin - alert = svc_add_remove_items(params[:id], item_class, item_action, - params[:resource_ids].split(",")) - render :json => { :success => true, :alert => alert} - rescue - render :json => { :success => false, - :alert => "#{item_action.to_s} #{item_class.table_name.humanize} failed." } - rescue PermissionError => perm_error - handle_auth_error(perm_error.message) - # If we need to give more details as to which hosts/storage succeeded, - # they're in the exception - rescue PartialSuccessError => error - render :json => { :success => false, :alert => error.message } - rescue Exception => ex - render :json => { :success => false, :alert => error.message } - end + alert = svc_add_remove_items(params[:id], item_class, item_action, + params[:resource_ids].split(",")) + render :json => { :success => true, :alert => alert} end def add_items @@ -164,22 +147,8 @@ class SmartPoolsController < PoolController class_and_id[1] = class_and_id[1].to_a end - begin - alert = svc_add_remove_items(params[:id], nil, :add, class_and_ids) - render :json => { :success => true, :alert => alert} - rescue - render :json => { :success => false, - :alert => "#{item_action.to_s} failed." } - rescue PermissionError => perm_error - handle_auth_error(perm_error.message) - # If we need to give more details as to which hosts/storage succeeded, - # they're in the exception - rescue PartialSuccessError => error - render :json => { :success => false, :alert => error.message } - rescue Exception => ex - render :json => { :success => false, :alert => error.message } - end - + alert = svc_add_remove_items(params[:id], nil, :add, class_and_ids) + render :json => { :success => true, :alert => alert} end protected diff --git a/src/app/controllers/storage_volume_controller.rb b/src/app/controllers/storage_volume_controller.rb index d4a2561..6bdbbdc 100644 --- a/src/app/controllers/storage_volume_controller.rb +++ b/src/app/controllers/storage_volume_controller.rb @@ -108,7 +108,10 @@ class StorageVolumeController < ApplicationController def destroy unless authorized?(Privilege::MODIFY) and @storage_volume.storage_pool.user_subdividable - handle_auth_error("You do not have permission to delete this storage volume.") + handle_error(:message => + "You do not have permission to delete this storage volume.", + :status => :forbidden, + :title => "Access Denied") else alert, success = delete_volume_internal(@storage_volume) respond_to do |format| diff --git a/src/app/controllers/vm_controller.rb b/src/app/controllers/vm_controller.rb index ee6d79e..29c0f16 100644 --- a/src/app/controllers/vm_controller.rb +++ b/src/app/controllers/vm_controller.rb @@ -41,13 +41,9 @@ class VmController < ApplicationController end def show - begin - svc_show(params[:id]) - @actions = @vm.get_action_hash(@user) - render :layout => 'selection' - rescue PermissionError => perm_error - handle_auth_error(perm_error.message) - end + svc_show(params[:id]) + @actions = @vm.get_action_hash(@user) + render :layout => 'selection' end def add_to_smart_pool @@ -62,14 +58,8 @@ class VmController < ApplicationController def create params[:vm][:forward_vnc] = params[:forward_vnc] - begin - alert = svc_create(params[:vm], params[:start_now]) - render :json => { :object => "vm", :success => true, :alert => alert } - rescue PermissionError => perm_error - handle_auth_error(perm_error.message) - rescue Exception => error - json_error("vm", @vm, error) - end + alert = svc_create(params[:vm], params[:start_now]) + render :json => { :object => "vm", :success => true, :alert => alert } end def edit @@ -79,14 +69,9 @@ class VmController < ApplicationController def update params[:vm][:forward_vnc] = params[:forward_vnc] - begin - alert = svc_update(params[:id], params[:vm], params[:start_now], - params[:restart_now]) - render :json => { :object => "vm", :success => true, :alert => alert } - rescue Exception => error - # FIXME: need to distinguish vm vs. task save errors (but should mostly be vm) - json_error("vm", @vm, error) - end + alert = svc_update(params[:id], params[:vm], params[:start_now], + params[:restart_now]) + render :json => { :object => "vm", :success => true, :alert => alert } end #FIXME: we need permissions checks. user must have permission. Also state checks @@ -123,14 +108,8 @@ class VmController < ApplicationController end def destroy - begin - alert = svc_destroy(params[:id]) - render :json => { :object => "vm", :success => true, :alert => alert } - rescue ActionError => error - json_error("vm", @vm, error) - rescue Exception => error - json_error("vm", @vm, error) - end + alert = svc_destroy(params[:id]) + render :json => { :object => "vm", :success => true, :alert => alert } end def storage_volumes_for_vm_json @@ -144,24 +123,14 @@ class VmController < ApplicationController end def vm_action - begin - alert = svc_vm_action(params[:id], params[:vm_action], - params[:vm_action_data]) - render :json => { :object => "vm", :success => true, :alert => alert } - rescue ActionError => error - json_error("vm", @vm, error) - rescue Exception => error - json_error("vm", @vm, error) - end + alert = svc_vm_action(params[:id], params[:vm_action], + params[:vm_action_data]) + render :json => { :object => "vm", :success => true, :alert => alert } end def cancel_queued_tasks - begin - alert = svc_cancel_queued_tasks(params[:id]) - render :json => { :object => "vm", :success => true, :alert => alert } - rescue Exception => error - json_error("vm", @vm, error) - end + alert = svc_cancel_queued_tasks(params[:id]) + render :json => { :object => "vm", :success => true, :alert => alert } end def migrate -- 1.6.0.6 From lutter at redhat.com Tue May 5 19:03:46 2009 From: lutter at redhat.com (David Lutterkort) Date: Tue, 5 May 2009 12:03:46 -0700 Subject: [Ovirt-devel] [PATCH server 2/2] * app/controllers/host_controller.rb: factor biz logic out In-Reply-To: <1241550226-12899-1-git-send-email-lutter@redhat.com> References: <1241550226-12899-1-git-send-email-lutter@redhat.com> Message-ID: <1241550226-12899-3-git-send-email-lutter@redhat.com> The business logic is now in HostService. The main functional difference is that svc_list filters the host list by permission. --- src/app/controllers/host_controller.rb | 125 +++++++++++++------------------- src/app/services/host_service.rb | 119 ++++++++++++++++++++++++++++++ 2 files changed, 168 insertions(+), 76 deletions(-) create mode 100644 src/app/services/host_service.rb diff --git a/src/app/controllers/host_controller.rb b/src/app/controllers/host_controller.rb index 994b5e2..9b683fa 100644 --- a/src/app/controllers/host_controller.rb +++ b/src/app/controllers/host_controller.rb @@ -19,8 +19,13 @@ class HostController < ApplicationController - EQ_ATTRIBUTES = [ :state, :arch, :hostname, :uuid, - :hardware_pool_id ] + include HostService + + # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html) + verify :method => [:post, :put], :only => [ :create, :update ], + :redirect_to => { :action => :list } + verify :method => [:post, :delete], :only => :destroy, + :redirect_to => { :action => :list } def index list @@ -30,42 +35,21 @@ class HostController < ApplicationController end end - before_filter :pre_action, :only => [:host_action, :enable, :disable, :clear_vms, :edit_network] - before_filter :pre_addhost, :only => [:addhost] - - # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html) - verify :method => [:post, :put], :only => [ :create, :update ], - :redirect_to => { :action => :list } - verify :method => [:post, :delete], :only => :destroy, - :redirect_to => { :action => :list } - - def list - conditions = [] - EQ_ATTRIBUTES.each do |attr| - if params[attr] - conditions << "#{attr} = :#{attr}" - end - end - @hosts = Host.find(:all, - :conditions => [conditions.join(" and "), params], - :order => "id") - end - + def list + svc_list(params) + end def show - if authorize_view - respond_to do |format| - format.html { render :layout => 'selection' } - format.xml { render :xml => @host.to_xml(:include => [ :cpus ] ) } - end + svc_show(params[:id]) + respond_to do |format| + format.html { render :layout => 'selection' } + format.xml { render :xml => @host.to_xml(:include => [ :cpus ] ) } end end def quick_summary - pre_show - if authorize_view - render :layout => false - end + svc_show(id) + render :layout => false end # retrieves data used by snapshot graphs @@ -73,15 +57,17 @@ class HostController < ApplicationController end def addhost - @hardware_pool = Pool.find(params[:hardware_pool_id]) - render :layout => 'popup' - end + # FIXME: This probably should go into PoolService.svc_modify, + # so that we have permission checks in only one place - def pre_addhost + # Old pre_addhost @pool = Pool.find(params[:hardware_pool_id]) @parent = @pool.parent set_perms(@pool) authorize_admin + # Old addhost + @hardware_pool = Pool.find(params[:hardware_pool_id]) + render :layout => 'popup' end def add_to_smart_pool @@ -89,6 +75,11 @@ class HostController < ApplicationController render :layout => 'popup' end + # FIXME: We implement the standard controller actions, but catch + # them in filters and kick out friendly warnings that you can't + # perform them on hosts. Tat's overkill - the only way for a user + # to get to these actions is with URL surgery or from a bug in the + # application, both of which deserve a noisy error def new end @@ -116,52 +107,40 @@ class HostController < ApplicationController end def disable - set_disabled(1) + svc_enable(params[:id], "disabled") + render :json => { + :object => :host, + :alert => "Host was successfully disabled", + :success => true + } end + def enable - set_disabled(0) - end - - def set_disabled(value) - operation = value == 1 ? "disabled" : "enabled" - begin - @host.is_disabled = value - @host.save! - @json_hash[:alert]="Host was successfully #{operation}" - @json_hash[:success]=true - rescue - @json_hash[:alert]="Error setting host to #{operation}" - @json_hash[:success]=false - end - render :json => @json_hash + svc_enable(params[:id], "enabled") + render :json => { + :object => :host, + :alert => "Host was successfully enabled", + :success => true + } end def clear_vms - begin - Host.transaction do - task = HostTask.new({ :user => get_login_user, - :task_target => @host, - :action => HostTask::ACTION_CLEAR_VMS, - :state => Task::STATE_QUEUED}) - task.save! - @host.is_disabled = true - @host.save! - end - @json_hash[:alert]="Clear VMs action was successfully queued." - @json_hash[:success]=true - rescue - @json_hash[:alert]="Error in queueing Clear VMs action." - @json_hash[:success]=false - end - render :json => @json_hash + svc_clear_vms(params[:id]) + render :json => { + :object => :host, + :alert => "Clear VMs action was successfully queued.", + :success => true + } end def edit_network + svc_modify(params[:id]) render :layout => 'popup' end def bondings_json - bondings = Host.find(params[:id]).bondings + svc_show(params[:id]) + bondings = @host.bondings render :json => bondings.collect{ |x| {:id => x.id, :name => x.name} } end @@ -180,12 +159,6 @@ class HostController < ApplicationController flash[:notice] = 'Hosts may not be edited via the web UI' redirect_to :action=> 'show', :id => @host end - def pre_action - @host = Host.find(params[:id]) - set_perms(@host.hardware_pool) - @json_hash = { :object => :host } - authorize_admin - end def pre_show @host = Host.find(params[:id]) set_perms(@host.hardware_pool) diff --git a/src/app/services/host_service.rb b/src/app/services/host_service.rb new file mode 100644 index 0000000..074d830 --- /dev/null +++ b/src/app/services/host_service.rb @@ -0,0 +1,119 @@ +#-- +# Copyright (C) 2009 Red Hat, Inc. +# Written by David Lutterkort +# +# 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; version 2 of the License. +# +# 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. A copy of the GNU General Public License is +# also available at http://www.gnu.org/copyleft/gpl.html. +#++ +# Business logic around hosts aka nodes +module HostService + + include ApplicationService + + # Host attributes on which we filter with '=' + EQ_ATTRIBUTES = [ :state, :arch, :hostname, :uuid, + :hardware_pool_id ] + + # List hosts matching criteria described by +params+; only the entries + # for keys in +EQ_ATTRIBUTES+ are used + # + # === Instance variables + # [@hosts] stores list of hosts matching criteria + # === Required permissions + # [Privilege::VIEW] no exception raised, @hosts + # is filtered by privilege + def svc_list(params) + conditions = [] + EQ_ATTRIBUTES.each do |attr| + if params[attr] + conditions << "hosts.#{attr} = :#{attr}" + end + end + # Add permission check + params = params.dup + params[:user] = get_login_user + params[:priv] = Privilege::VIEW + conditions << "privileges.name=:priv" + conditions << "permissions.uid=:user" + incl = [{ :hardware_pool => { :permissions => { :role => :privileges}}}] + @hosts = Host.find(:all, + :include => incl, + :conditions => [conditions.join(" and "), params], + :order => "hosts.id") + end + + # Load the Host with +id+ for viewing + # + # === Instance variables + # [@host] stores the Host with +id+ + # === Required permissions + # [Privilege::VIEW] on host's HardwarePool + def svc_show(id) + lookup(id, Privilege::VIEW) + end + + # Load the Host with +id+ for editing + # + # === Instance variables + # [@host] stores the Host with +id+ + # === Required permissions + # [Privilege::MODIFY] on host's HardwarePool + def svc_modify(id) + lookup(id, Privilege::MODIFY) + end + + # Set the disabled state of the Host with +id+ to :enabled + # or :disabled + # + # === Instance variables + # [@host] stores the Host with +id+ + # === Required permissions + # [Privilege::MODIFY] on host's HardwarePool + def svc_enable(id, state) + ind = ["enabled", "disabled"].index(state.to_s) + if ind.nil? + raise ArgumentError, "STATE must be 'enabled' or 'disabled'" + end + svc_modify(id) + @host.is_disabled = ind + @host.save! + end + + # Queue task to migrate all VM's off the Host with +id+, and mark the + # host as disabled + # + # === Instance variables + # [@host] stores the Host with +id+ + # === Required permissions + # [Privilege::MODIFY] on host's HardwarePool + def svc_clear_vms(id) + svc_modify(id) + Host.transaction do + task = HostTask.new({ :user => get_login_user, + :task_target => @host, + :action => HostTask::ACTION_CLEAR_VMS, + :state => Task::STATE_QUEUED}) + task.save! + @host.is_disabled = true + @host.save! + end + end + + private + def lookup(id, priv) + @host = Host.find(id) + authorized!(priv, @host.hardware_pool) + end +end -- 1.6.0.6 From sseago at redhat.com Tue May 5 19:32:46 2009 From: sseago at redhat.com (Scott Seago) Date: Tue, 05 May 2009 15:32:46 -0400 Subject: [Ovirt-devel] [PATCH server 1/2] Generic error handling In-Reply-To: <1241550226-12899-2-git-send-email-lutter@redhat.com> References: <1241550226-12899-1-git-send-email-lutter@redhat.com> <1241550226-12899-2-git-send-email-lutter@redhat.com> Message-ID: <4A00945E.1030809@redhat.com> David Lutterkort wrote: > Instead of explicit rescue blocks in actions, we now register error > handlers for each exception (with a catch-all handler for Exception) The > handlers generate an appropriate response for each exception and output > method. > > Remove handle_auth_error and json_error, since their functionality is now > covered by handle_perm_error and handle_general_error > --- > src/app/controllers/application.rb | 81 +++++++++++++++----- > src/app/controllers/hardware_controller.rb | 37 +++------- > src/app/controllers/pool_controller.rb | 88 ++++++++-------------- > src/app/controllers/resources_controller.rb | 4 +- > src/app/controllers/smart_pools_controller.rb | 47 ++---------- > src/app/controllers/storage_volume_controller.rb | 5 +- > src/app/controllers/vm_controller.rb | 61 ++++----------- > 7 files changed, 131 insertions(+), 192 deletions(-) > > diff --git a/src/app/controllers/application.rb b/src/app/controllers/application.rb > index bdd5b64..6932a1f 100644 > --- a/src/app/controllers/application.rb > +++ b/src/app/controllers/application.rb > @@ -46,6 +46,10 @@ class ApplicationController < ActionController::Base > before_filter :tmp_authorize_admin, :only => [:create, :update, :destroy] > before_filter :is_logged_in, :get_help_section > > + # General error handlers, must be in order from least specific > + # to most specific > + rescue_from Exception, :with => :handle_general_error > + rescue_from PermissionError, :with => :handle_perm_error > We might want to include a PartialSuccessError handler too, although that could be a separate patch. > diff --git a/src/app/controllers/hardware_controller.rb b/src/app/controllers/hardware_controller.rb > index 56a2c47..0b6cf9b 100644 > --- a/src/app/controllers/hardware_controller.rb > +++ b/src/app/controllers/hardware_controller.rb > @@ -219,24 +215,13 @@ class HardwareController < PoolController > end > > def edit_items(svc_method, target_pool_id, item_action) > - begin > - alert = send(svc_method, params[:id], params[:resource_ids].split(","), > - target_pool_id) > - render :json => { :success => true, :alert => alert, > - :storage => @pool.storage_tree({:filter_unavailable => > - false, > - :include_used => true, > - :state => > - item_action.to_s})} > - rescue PermissionError => perm_error > - handle_auth_error(perm_error.message) > - # If we need to give more details as to which hosts/storage succeeded, > - # they're in the exception > - rescue PartialSuccessError => error > - render :json => { :success => false, :alert => error.message } > Right now it's functionally equivalent to remove the PartialSuccessError handling and use the generic error handler -- although if we're trying to phase out rescuing of Exception we should probably handle these specific cases explicitly when we expect them. I guess the question is should PartialSuccessError be handled inline -- since it might have action-specific behavior (i.e. which layout to use for html, etc.) -- or since most of these are ajax/json responses, should we handle it globally by default -- since actions are always free to rescue directly if they have custom behavior. > diff --git a/src/app/controllers/resources_controller.rb b/src/app/controllers/resources_controller.rb > index 7ad79ca..edee59d 100644 > --- a/src/app/controllers/resources_controller.rb > +++ b/src/app/controllers/resources_controller.rb > @@ -113,8 +113,8 @@ class ResourcesController < PoolController > @success_list = @vms > @failures = {} > render :layout => 'confirmation' > - rescue PermissionError => perm_error > - handle_auth_error(perm_error.message) > + rescue PermissionError > + raise > rescue PartialSuccessError => error > @success_list = error.successes > @failures = error.failures > So here's an example of custom PartialSuccessError handling -- We might be able to make this work generically - if we always include @successes and @failures in the respond.html block -- except I'm not sure how to handle the layout bit, unless we set a @layout variable at the beginning of the action -- to use for the format.html in the error handler. Again something for another patch though. > @@ -144,24 +123,14 @@ class VmController < ApplicationController > end > > def vm_action > - begin > - alert = svc_vm_action(params[:id], params[:vm_action], > - params[:vm_action_data]) > - render :json => { :object => "vm", :success => true, :alert => alert } > - rescue ActionError => error > - json_error("vm", @vm, error) > Another one that could use an explicit rescue_from handler. > - rescue Exception => error > - json_error("vm", @vm, error) > - end > + alert = svc_vm_action(params[:id], params[:vm_action], > + params[:vm_action_data]) > + render :json => { :object => "vm", :success => true, :alert => alert } > end > > def cancel_queued_tasks > - begin > - alert = svc_cancel_queued_tasks(params[:id]) > - render :json => { :object => "vm", :success => true, :alert => alert } > - rescue Exception => error > - json_error("vm", @vm, error) > - end > + alert = svc_cancel_queued_tasks(params[:id]) > + render :json => { :object => "vm", :success => true, :alert => alert } > end > > def migrate > I think all of the above comments could be addressed separately, so I'd say ACK even with the comments. Basically we need to 1) explicitly add a rescue_from handler for each explicit exception type we care about (among other things we might eventually add different icons to the error message depending on the exception type, etc) 2) we should try to come up with a way to handle PartialSuccess, etc. with the rescue_from handler even when we have an explicit layout, we need to render -- with setting a @layout method, etc. Scott From sseago at redhat.com Tue May 5 19:36:39 2009 From: sseago at redhat.com (Scott Seago) Date: Tue, 05 May 2009 15:36:39 -0400 Subject: [Ovirt-devel] [PATCH server 2/2] * app/controllers/host_controller.rb: factor biz logic out In-Reply-To: <1241550226-12899-3-git-send-email-lutter@redhat.com> References: <1241550226-12899-1-git-send-email-lutter@redhat.com> <1241550226-12899-3-git-send-email-lutter@redhat.com> Message-ID: <4A009547.6090809@redhat.com> David Lutterkort wrote: > The business logic is now in HostService. > > The main functional difference is that svc_list filters the host list by > permission. > --- > src/app/controllers/host_controller.rb | 125 +++++++++++++------------------- > src/app/services/host_service.rb | 119 ++++++++++++++++++++++++++++++ > 2 files changed, 168 insertions(+), 76 deletions(-) > create mode 100644 src/app/services/host_service.rb > > > Looks like the content is unchanged after merge, so ACK here too. Scott From apevec at gmail.com Tue May 5 20:35:55 2009 From: apevec at gmail.com (Alan Pevec) Date: Tue, 5 May 2009 22:35:55 +0200 Subject: [Ovirt-devel] [PATCH node-image] Added new autotests and refactored the autotest script. In-Reply-To: <1241201699-3306-2-git-send-email-dpierce@redhat.com> References: <1241201699-3306-1-git-send-email-dpierce@redhat.com> <1241201699-3306-2-git-send-email-dpierce@redhat.com> Message-ID: <2be7262f0905051335r5bec7a94l10734bb7826e142e@mail.gmail.com> On Fri, May 1, 2009 at 8:14 PM, Darryl L. Pierce wrote: > + ? ?debug "Starting dnsmasq" > + ? ?dns_startup="sudo /usr/sbin/dnsmasq --read-ethers > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--dhcp-range=${NETWORK}.100,${NETWORK}.254,255.255.255.0,24h > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--interface=${iface} > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--bind-interfaces > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--except-interface=lo also add: + --conf-file= like libvirt does for virtual networks, to avoid including dnsmasq config from /etc ACK with that, worked in my setup: Tue May 5 22:24:48 CEST 2009 Completed test: test_stateful_pxe [result=0] VM, libvirt network and dnsmasq instance were all properly cleaned up From jeremy.perry at redhat.com Tue May 5 21:15:59 2009 From: jeremy.perry at redhat.com (Jeremy Perry) Date: Tue, 5 May 2009 17:15:59 -0400 Subject: [Ovirt-devel] [PATCH server] New images integrated, almost all images in the UI are updated or replaced. Also includes several minor style tweaks and in a few cases some verbage and capitalization changes for consistency. Message-ID: <1241558159-7746-1-git-send-email-jeremy.perry@redhat.com> From: Jeremy Perry Signed-off-by: Jeremy Perry --- src/app/models/vm_task.rb | 18 +++++----- src/app/views/hardware/quick_summary.rhtml | 8 ++-- src/app/views/hardware/show.html.erb | 3 +- src/app/views/hardware/show_hosts.rhtml | 8 ++-- src/app/views/hardware/show_storage.rhtml | 8 ++-- src/app/views/hardware/show_vms.rhtml | 10 +++--- src/app/views/host/show.rhtml | 8 ++-- src/app/views/layouts/_header_redux.rhtml | 4 +- src/app/views/layouts/_side_toolbar.rhtml | 8 ++-- .../views/layouts/components/standard_tree.rhtml | 2 +- src/app/views/layouts/redux.rhtml | 6 +--- src/app/views/network/list.html.erb | 2 +- src/app/views/network/show.rhtml | 4 +- src/app/views/resources/quick_summary.rhtml | 8 ++-- src/app/views/resources/show.rhtml | 3 +- src/app/views/resources/show_vms.rhtml | 10 +++--- src/app/views/search/results.rhtml | 2 +- src/app/views/smart_pools/show.rhtml | 9 +++-- src/app/views/smart_pools/show_hosts.rhtml | 6 ++-- src/app/views/smart_pools/show_pools.rhtml | 7 ++-- src/app/views/smart_pools/show_storage.rhtml | 6 ++-- src/app/views/smart_pools/show_vms.rhtml | 10 +++--- src/app/views/storage/show.rhtml | 8 ++-- src/app/views/storage_volume/show.rhtml | 4 +- src/app/views/task/_show.rhtml | 6 ++-- src/app/views/user/_change_role_menu.rhtml | 2 +- src/app/views/user/_show.rhtml | 2 +- src/app/views/vm/_form.rhtml | 2 +- src/app/views/vm/show.rhtml | 8 ++-- src/public/images/Untitled-4.gif | Bin 13123 -> 0 bytes src/public/images/add2.png | Bin 48768 -> 0 bytes src/public/images/addhost.png | Bin 789 -> 0 bytes src/public/images/addhost2.png | Bin 47684 -> 0 bytes src/public/images/addstoragepool.png | Bin 1069 -> 0 bytes src/public/images/bg-image.png | Bin 345 -> 0 bytes src/public/images/bg_header.jpg | Bin 13178 -> 0 bytes src/public/images/bg_menu_big.jpg | Bin 13136 -> 0 bytes src/public/images/bg_toolbarheader.jpg | Bin 13253 -> 0 bytes src/public/images/close.png | Bin 1219 -> 0 bytes src/public/images/delete.png | Bin 50803 -> 0 bytes src/public/images/delete_white.gif | Bin 13236 -> 0 bytes src/public/images/fade.png | Bin 649 -> 0 bytes src/public/images/folderClosed.gif | Bin 13657 -> 0 bytes src/public/images/host.png | Bin 208 -> 0 bytes src/public/images/icon-queued-11px.png | Bin 406 -> 429 bytes src/public/images/icon_add_hardwarePool.png | Bin 1223 -> 0 bytes src/public/images/icon_add_hardwarepool.png | Bin 1133 -> 0 bytes src/public/images/icon_add_pools.png | Bin 803 -> 810 bytes src/public/images/icon_add_smartpool.png | Bin 948 -> 0 bytes src/public/images/icon_add_user.png | Bin 1084 -> 1127 bytes src/public/images/icon_add_vm.png | Bin 1166 -> 1075 bytes src/public/images/icon_add_vmpool.png | Bin 1072 -> 1109 bytes src/public/images/icon_addhost.gif | Bin 13484 -> 0 bytes src/public/images/icon_addhost.png | Bin 789 -> 0 bytes src/public/images/icon_addstorage.gif | Bin 14161 -> 0 bytes src/public/images/icon_addstorage.png | Bin 946 -> 0 bytes src/public/images/icon_addto_smartpool.png | Bin 1061 -> 1109 bytes src/public/images/icon_adduser.png | Bin 976 -> 0 bytes src/public/images/icon_addvm.png | Bin 1242 -> 0 bytes src/public/images/icon_change_role.png | Bin 1098 -> 1156 bytes src/public/images/icon_clear.png | Bin 533 -> 0 bytes src/public/images/icon_conf_message.png | Bin 49126 -> 0 bytes src/public/images/icon_delete.gif | Bin 13735 -> 0 bytes src/public/images/icon_delete.png | Bin 910 -> 968 bytes src/public/images/icon_delete_11px.png | Bin 343 -> 409 bytes src/public/images/icon_delete_white.gif | Bin 13236 -> 0 bytes src/public/images/icon_delete_white.png | Bin 501 -> 0 bytes src/public/images/icon_edit.png | Bin 375 -> 0 bytes src/public/images/icon_edit_11px.png | Bin 269 -> 336 bytes src/public/images/icon_host.png | Bin 47738 -> 0 bytes src/public/images/icon_migrate.png | Bin 354 -> 0 bytes src/public/images/icon_move.png | Bin 568 -> 569 bytes src/public/images/icon_newgroup.gif | Bin 13501 -> 0 bytes src/public/images/icon_note.png | Bin 954 -> 0 bytes src/public/images/icon_poweroff_11px.png | Bin 518 -> 480 bytes src/public/images/icon_refresh.png | Bin 381 -> 0 bytes src/public/images/icon_refresh_11px.png | Bin 300 -> 303 bytes src/public/images/icon_remove.png | Bin 1056 -> 1200 bytes src/public/images/icon_restore.png | Bin 350 -> 0 bytes src/public/images/icon_restore_11px.png | Bin 246 -> 263 bytes src/public/images/icon_save.png | Bin 414 -> 0 bytes src/public/images/icon_selection_add.gif | Bin 13127 -> 0 bytes src/public/images/icon_selection_remove.gif | Bin 13117 -> 0 bytes src/public/images/icon_selection_showdetail.gif | Bin 13124 -> 0 bytes src/public/images/icon_separator.png | Bin 216 -> 165 bytes src/public/images/icon_smartpool.png | Bin 725 -> 754 bytes src/public/images/icon_smartpools_dir.png | Bin 4228 -> 901 bytes src/public/images/icon_start.png | Bin 587 -> 0 bytes src/public/images/icon_start_11px.png | Bin 500 -> 418 bytes src/public/images/icon_stop.png | Bin 396 -> 0 bytes src/public/images/icon_stop_11px.png | Bin 375 -> 321 bytes src/public/images/icon_suspend.png | Bin 521 -> 0 bytes src/public/images/icon_suspend_11px.png | Bin 404 -> 373 bytes src/public/images/icon_terminal_11px.png | Bin 333 -> 306 bytes src/public/images/icon_unassignedhost.gif | Bin 13337 -> 0 bytes src/public/images/icon_view.png | Bin 1259 -> 1393 bytes src/public/images/icon_vmpool.png | Bin 899 -> 967 bytes src/public/images/icon_x.png | Bin 340 -> 0 bytes src/public/images/image_ovirt.png | Bin 773 -> 0 bytes src/public/images/logo-small.png | Bin 6264 -> 0 bytes src/public/images/logo.png | Bin 20874 -> 0 bytes src/public/images/map.png | Bin 368 -> 0 bytes src/public/images/minus.gif | Bin 905 -> 0 bytes src/public/images/move.png | Bin 351 -> 0 bytes src/public/images/network_error.png | Bin 989 -> 0 bytes src/public/images/network_trend_check.png | Bin 749 -> 0 bytes src/public/images/network_trend_down.png | Bin 865 -> 0 bytes src/public/images/network_trend_up.png | Bin 837 -> 0 bytes src/public/images/ovirt_logo_redux.png | Bin 773 -> 0 bytes src/public/images/plus.gif | Bin 907 -> 0 bytes src/public/images/slider-bg-1.png | Bin 204 -> 0 bytes src/public/images/slider-bg-2.png | Bin 326 -> 0 bytes src/public/images/slider-handle.gif | Bin 176 -> 0 bytes src/public/images/slider-handle_select.gif | Bin 13245 -> 0 bytes src/public/images/toolbar_add_smartpool.png | Bin 967 -> 995 bytes src/public/images/toolbar_add_vmpool.png | Bin 1134 -> 1222 bytes src/public/images/toolbar_delete.png | Bin 991 -> 1045 bytes src/public/images/view.png | Bin 985 -> 0 bytes .../javascripts/jquery-treeview/demo/index.html | 4 +- src/public/stylesheets/components.css | 10 ++++-- src/public/stylesheets/default.css | 2 +- src/public/stylesheets/jquery.jgrowl.css | 2 +- src/public/stylesheets/layout.css | 32 +++++++++++++------ src/public/stylesheets/ovirt-tree/tree.css | 9 +++-- 124 files changed, 128 insertions(+), 113 deletions(-) delete mode 100644 src/public/images/Untitled-4.gif delete mode 100644 src/public/images/add2.png delete mode 100644 src/public/images/addhost.png delete mode 100644 src/public/images/addhost2.png delete mode 100644 src/public/images/addstoragepool.png delete mode 100644 src/public/images/bg-image.png delete mode 100644 src/public/images/bg_header.jpg delete mode 100644 src/public/images/bg_menu_big.jpg delete mode 100644 src/public/images/bg_toolbarheader.jpg delete mode 100644 src/public/images/close.png delete mode 100644 src/public/images/delete.png delete mode 100644 src/public/images/delete_white.gif delete mode 100644 src/public/images/fade.png delete mode 100644 src/public/images/folderClosed.gif delete mode 100644 src/public/images/host.png delete mode 100644 src/public/images/icon_add_hardwarePool.png delete mode 100644 src/public/images/icon_add_hardwarepool.png delete mode 100644 src/public/images/icon_add_smartpool.png delete mode 100644 src/public/images/icon_addhost.gif delete mode 100644 src/public/images/icon_addhost.png delete mode 100644 src/public/images/icon_addstorage.gif delete mode 100644 src/public/images/icon_addstorage.png delete mode 100644 src/public/images/icon_adduser.png delete mode 100644 src/public/images/icon_addvm.png delete mode 100644 src/public/images/icon_clear.png delete mode 100644 src/public/images/icon_conf_message.png delete mode 100644 src/public/images/icon_delete.gif delete mode 100644 src/public/images/icon_delete_white.gif delete mode 100644 src/public/images/icon_delete_white.png delete mode 100644 src/public/images/icon_edit.png delete mode 100644 src/public/images/icon_host.png delete mode 100644 src/public/images/icon_migrate.png delete mode 100644 src/public/images/icon_newgroup.gif delete mode 100644 src/public/images/icon_note.png delete mode 100644 src/public/images/icon_refresh.png delete mode 100644 src/public/images/icon_restore.png delete mode 100644 src/public/images/icon_save.png delete mode 100644 src/public/images/icon_selection_add.gif delete mode 100644 src/public/images/icon_selection_remove.gif delete mode 100644 src/public/images/icon_selection_showdetail.gif delete mode 100644 src/public/images/icon_start.png delete mode 100644 src/public/images/icon_stop.png delete mode 100644 src/public/images/icon_suspend.png delete mode 100644 src/public/images/icon_unassignedhost.gif delete mode 100644 src/public/images/icon_x.png delete mode 100644 src/public/images/image_ovirt.png delete mode 100644 src/public/images/logo-small.png delete mode 100644 src/public/images/logo.png delete mode 100644 src/public/images/map.png delete mode 100644 src/public/images/minus.gif delete mode 100644 src/public/images/move.png delete mode 100644 src/public/images/network_error.png delete mode 100644 src/public/images/network_trend_check.png delete mode 100644 src/public/images/network_trend_down.png delete mode 100644 src/public/images/network_trend_up.png delete mode 100644 src/public/images/ovirt_logo_redux.png delete mode 100644 src/public/images/plus.gif delete mode 100755 src/public/images/slider-bg-1.png delete mode 100755 src/public/images/slider-bg-2.png delete mode 100755 src/public/images/slider-handle.gif delete mode 100644 src/public/images/slider-handle_select.gif delete mode 100644 src/public/images/view.png diff --git a/src/app/models/vm_task.rb b/src/app/models/vm_task.rb index ed33564..315113a 100644 --- a/src/app/models/vm_task.rb +++ b/src/app/models/vm_task.rb @@ -42,7 +42,7 @@ class VmTask < Task # a hash of task actions which point to a hash which define valid state transitions ACTIONS = { ACTION_CREATE_VM => { :label => "Create", - :icon => "icon_start.png", + :icon => "icon_start_11px.png", :start => Vm::STATE_PENDING, :running => Vm::STATE_CREATING, :success => Vm::STATE_STOPPED, @@ -50,7 +50,7 @@ class VmTask < Task :privilege => [Privilege::MODIFY, PRIV_OBJECT_VM_POOL]}, ACTION_START_VM => { :label => "Start", - :icon => "icon_start.png", + :icon => "icon_start_11px.png", :start => Vm::STATE_STOPPED, :running => Vm::STATE_STARTING, :success => Vm::STATE_RUNNING, @@ -58,7 +58,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_SHUTDOWN_VM => { :label => "Shutdown", - :icon => "icon_x.png", + :icon => "icon_stop_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_STOPPING, :success => Vm::STATE_STOPPED, @@ -66,7 +66,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_POWEROFF_VM => { :label => "Poweroff", - :icon => "icon_x.png", + :icon => "icon_poweroff_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_POWERING_OFF, :success => Vm::STATE_STOPPED, @@ -74,7 +74,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_SUSPEND_VM => { :label => "Suspend", - :icon => "icon_suspend.png", + :icon => "icon_suspend_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_SUSPENDING, :success => Vm::STATE_SUSPENDED, @@ -82,7 +82,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_RESUME_VM => { :label => "Resume", - :icon => "icon_start.png", + :icon => "icon_start_11px.png", :start => Vm::STATE_SUSPENDED, :running => Vm::STATE_RESUMING, :success => Vm::STATE_RUNNING, @@ -90,7 +90,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_SAVE_VM => { :label => "Save", - :icon => "icon_save.png", + :icon => "icon_save_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_SAVING, :success => Vm::STATE_SAVED, @@ -98,7 +98,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_RESTORE_VM => { :label => "Restore", - :icon => "icon_restore.png", + :icon => "icon_restore_11px.png", :start => Vm::STATE_SAVED, :running => Vm::STATE_RESTORING, :success => Vm::STATE_RUNNING, @@ -106,7 +106,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_MIGRATE_VM => { :label => "Migrate", - :icon => "icon_restore.png", + :icon => "icon_migrate_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_MIGRATING, :success => Vm::STATE_RUNNING, diff --git a/src/app/views/hardware/quick_summary.rhtml b/src/app/views/hardware/quick_summary.rhtml index a2aad00..111037c 100644 --- a/src/app/views/hardware/quick_summary.rhtml +++ b/src/app/views/hardware/quick_summary.rhtml @@ -3,18 +3,18 @@ <%- end -%> <%- content_for :action_links do -%> <%if @can_modify -%> - <%= link_to image_tag("icon_edit.png") + " Edit", + <%= link_to image_tag("icon_edit_11px.png") + " Edit", {:controller => 'hardware', :action => 'edit', :id => @pool}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <%if @pool.quota -%> - <%= link_to image_tag("icon_edit.png") + " Edit Default Quota", + <%= link_to image_tag("icon_edit_11px.png") + " Edit Default Quota", {:controller => 'quota', :action => 'edit', :id => @pool.quota}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> - <%= image_tag "icon_x.png" %> Remove Default Quota + <%= image_tag "icon_x_11px.png" %> Remove Default Quota <% else -%> - <%= link_to image_tag("icon_edit.png") + " Edit Default Quota", + <%= link_to image_tag("icon_edit_11px.png") + " Edit Default Quota", {:controller => 'quota', :action => 'new', :pool_id => @pool }, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <% end -%> diff --git a/src/app/views/hardware/show.html.erb b/src/app/views/hardware/show.html.erb index e029e4b..214257d 100644 --- a/src/app/views/hardware/show.html.erb +++ b/src/app/views/hardware/show.html.erb @@ -11,7 +11,8 @@

<%= image_tag "icon_smry_his.png", :style=>"vertical-align:middle;" %> History

<%= render_component :controller=> 'graph', :action => 'history_graphs', :id => @pool.id, :params => { :poolType => 'hardware' }%> - + +

<%= image_tag "icon_smry_perf.png", :style=>"vertical-align:middle;" %> Performance

<%= render_component :controller=> 'graph', :action => 'snapshot_graph', :id => @pool.id, :params => { :poolType => 'hardware' }%> diff --git a/src/app/views/hardware/show_hosts.rhtml b/src/app/views/hardware/show_hosts.rhtml index 64e5d91..09a6188 100644 --- a/src/app/views/hardware/show_hosts.rhtml +++ b/src/app/views/hardware/show_hosts.rhtml @@ -1,14 +1,14 @@
-
Select a host above.
+
Select a host.
<% else %> @@ -114,7 +114,7 @@
No hosts found in this pool.

<%if @can_modify -%> - <%= image_tag "icon_addhost.png", :style=>"vertical-align:middle;" %>   + <%= image_tag "icon_add_host.png", :style=>"vertical-align:middle;" %>   Add first host to this hardware pool <% end -%>
diff --git a/src/app/views/hardware/show_storage.rhtml b/src/app/views/hardware/show_storage.rhtml index 8d09577..c9f46ad 100644 --- a/src/app/views/hardware/show_storage.rhtml +++ b/src/app/views/hardware/show_storage.rhtml @@ -1,14 +1,14 @@
@@ -86,7 +86,7 @@
-
Select a VM pool above.
+
Select a virtual machine pool.
<% else %> @@ -95,10 +95,10 @@ <%= image_tag 'no-grid-items.png', :style => 'float: left;' %>
- No VM Resource Pools found in this hardware pool.

+ No virtual machine pools found in this hardware pool.

<%if @can_modify -%> <%= image_tag "icon_add_vmpool.png", :style => "vertical-align:middle;" %>   - Add first vm resource pool to this hardware pool + Add first virtual machine pool to this hardware pool <% end -%>
diff --git a/src/app/views/host/show.rhtml b/src/app/views/host/show.rhtml index 1e0787e..f706761 100644 --- a/src/app/views/host/show.rhtml +++ b/src/app/views/host/show.rhtml @@ -5,19 +5,19 @@ <%if @can_modify -%> <%if @host.disabled? -%> - <%= image_tag "icon_start.png" %> Enable Host + <%= image_tag "icon_start_11px.png" %> Enable Host <% else -%> - <%= image_tag "icon_suspend.png" %> Disable Host + <%= image_tag "icon_suspend_11px.png" %> Disable Host <% end -%> <%if @host.is_clear_task_valid? -%> - <%= image_tag "icon_x.png" %> Clear VMs + <%= image_tag "icon_x_11px.png" %> Clear VMs <% end -%> - <%= link_to image_tag("icon_edit.png") +"Edit Network", + <%= link_to image_tag("icon_edit_11px.png") +"Edit Network", {:controller => 'host', :action => 'edit_network', :id => @host.id}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> diff --git a/src/app/views/layouts/_header_redux.rhtml b/src/app/views/layouts/_header_redux.rhtml index 146220c..c1a1df1 100644 --- a/src/app/views/layouts/_header_redux.rhtml +++ b/src/app/views/layouts/_header_redux.rhtml @@ -1,10 +1,10 @@ - +
Hi, <%= @user %>
'results' %>"> - " title="Search" type="image">  | + " title="Search" type="image"> | 
<%= link_to 'Log out', { :controller => "login", :action => "logout"}%>
diff --git a/src/app/views/layouts/_side_toolbar.rhtml b/src/app/views/layouts/_side_toolbar.rhtml index bc52ea3..b4fbe86 100644 --- a/src/app/views/layouts/_side_toolbar.rhtml +++ b/src/app/views/layouts/_side_toolbar.rhtml @@ -13,25 +13,25 @@ <%if pool[:type]=="HardwarePool" and @can_modify -%> <% end -%> <% end -%> <%if pool and @can_modify -%>
-
- <%= link_to image_tag("icon_help.png"), - {:controller => 'help', :action => @help_section, :anchor => @anchor}, - :id=>"help-link", :popup => true, :title => "Help" %> -
+ <%= yield %> <%# the rest of the center and right hand side %>
diff --git a/src/app/views/network/list.html.erb b/src/app/views/network/list.html.erb index 9a304cf..0451a9c 100644 --- a/src/app/views/network/list.html.erb +++ b/src/app/views/network/list.html.erb @@ -1,6 +1,6 @@
diff --git a/src/app/views/resources/show_vms.rhtml b/src/app/views/resources/show_vms.rhtml index 1e75d35..996d3fb 100644 --- a/src/app/views/resources/show_vms.rhtml +++ b/src/app/views/resources/show_vms.rhtml @@ -1,11 +1,11 @@
@@ -125,7 +125,7 @@
No vms found in this pool.

<%if @can_modify -%> - <%= image_tag "icon_addhost.png", :style => "vertical-align:middle;" %>   + <%= image_tag "icon_add_host.png", :style => "vertical-align:middle;" %>   Add first virtual machine to resource pool <% end -%>
diff --git a/src/app/views/search/results.rhtml b/src/app/views/search/results.rhtml index 1989054..1537b60 100644 --- a/src/app/views/search/results.rhtml +++ b/src/app/views/search/results.rhtml @@ -8,7 +8,7 @@ Search
  • - <%= image_tag "icon_smartpool.png", :style => "vertical-align:middle;" %>  Add to Smart Pool    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %> + <%= image_tag "icon_addto_smartpool.png", :style => "vertical-align:middle;" %>  Add to Smart Pool    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %>
      <% smart_pools = SmartPool.smart_pools_for_user(@user) %> <% smart_pools.each_index { |index| %> diff --git a/src/app/views/smart_pools/show.rhtml b/src/app/views/smart_pools/show.rhtml index 45b1753..00766c4 100644 --- a/src/app/views/smart_pools/show.rhtml +++ b/src/app/views/smart_pools/show.rhtml @@ -4,14 +4,15 @@
      <%= image_tag "icon_smry_res.png", :style=>"vertical-align:middle;" %> Resources

      - What do we show here for Smart Pools? + What do we show here for smart pools?


      <%= image_tag "icon_smry_his.png", :style=>"vertical-align:middle;" %> History

      - What do we show here for Smart Pools? - + What do we show here for smart pools? + +


      <%= image_tag "icon_smry_perf.png", :style=>"vertical-align:middle;" %> Performance

      - What do we show here for Smart Pools? + What do we show here for smart pools? diff --git a/src/app/views/smart_pools/show_hosts.rhtml b/src/app/views/smart_pools/show_hosts.rhtml index a4b6be7..8b13c2b 100644 --- a/src/app/views/smart_pools/show_hosts.rhtml +++ b/src/app/views/smart_pools/show_hosts.rhtml @@ -1,6 +1,6 @@ @@ -60,7 +60,7 @@
      -
      Select a host above.
      +
      Select a host.
      <% else %> @@ -70,7 +70,7 @@
      No hosts found in this pool.

      - <%= image_tag "icon_addhost.png", :style=>"vertical-align:middle;" %>   + <%= image_tag "icon_add_host.png", :style=>"vertical-align:middle;" %>   Add first host to this smart pool
      diff --git a/src/app/views/smart_pools/show_pools.rhtml b/src/app/views/smart_pools/show_pools.rhtml index ed1ad54..de8741b 100644 --- a/src/app/views/smart_pools/show_pools.rhtml +++ b/src/app/views/smart_pools/show_pools.rhtml @@ -1,6 +1,6 @@ @@ -56,7 +56,7 @@
      -
      Select a pool above.
      +
      Select a pool.
      <% else %> @@ -66,7 +66,8 @@
      No pools found in this pool.

      - Add first Pool to this smart pool + <%= image_tag "icon_add_pools.png", :style=>"vertical-align:middle;" %>   + Add first pool to this smart pool
      diff --git a/src/app/views/smart_pools/show_storage.rhtml b/src/app/views/smart_pools/show_storage.rhtml index 3090f0e..da553a1 100644 --- a/src/app/views/smart_pools/show_storage.rhtml +++ b/src/app/views/smart_pools/show_storage.rhtml @@ -1,6 +1,6 @@ @@ -94,8 +94,8 @@ ${htmlList(pools, id)} <%= image_tag 'no-grid-items.png', :style => 'float: left;' %>
      - No storage Pools found in this pool.

      - <%= image_tag "icon_addstorage.png", :style=>"vertical-align:middle;" %>   + No storage pools found in this pool.

      + <%= image_tag "icon_add_storage.png", :style=>"vertical-align:middle;" %>   Add first storage volume to this smart pool
      diff --git a/src/app/views/smart_pools/show_vms.rhtml b/src/app/views/smart_pools/show_vms.rhtml index e56600b..48ae800 100644 --- a/src/app/views/smart_pools/show_vms.rhtml +++ b/src/app/views/smart_pools/show_vms.rhtml @@ -1,6 +1,6 @@ @@ -59,7 +59,7 @@
      -
      Select a vm above.
      +
      Select a virtual machine.
      <% else %> @@ -68,9 +68,9 @@ <%= image_tag 'no-grid-items.png', :style => 'float: left;' %>
      - No vms found in this pool.

      - <%= image_tag "icon_addvm.png", :style=>"vertical-align:middle;" %>   - Add first VM to this smart pool + No virtual machines found in this pool.

      + <%= image_tag "icon_add_vm.png", :style=>"vertical-align:middle;" %>   + Add first virtual machine to this smart pool
      diff --git a/src/app/views/storage/show.rhtml b/src/app/views/storage/show.rhtml index dd52d79..b0b1d4e 100644 --- a/src/app/views/storage/show.rhtml +++ b/src/app/views/storage/show.rhtml @@ -4,19 +4,19 @@ <%- content_for :action_links do -%> <%if @can_modify -%> - <%= link_to image_tag("icon_edit.png") + " Edit", + <%= link_to image_tag("icon_edit_11px.png") + " Edit", {:controller => 'storage', :action => 'edit', :id => @storage_pool}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> - <%= image_tag "icon_refresh.png" %> Refresh + <%= image_tag "icon_refresh_11px.png" %> Refresh <%if @storage_pool.user_subdividable -%> - <%= link_to image_tag("icon_addstorage.png") + " Add new Volume", + <%= link_to image_tag("icon_add_11px.png") + " Add New Volume", {:controller => 'storage_volume', :action => 'new', :storage_pool_id => @storage_pool.id}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <% end %> - <%= image_tag "icon_x.png" %> Delete + <%= image_tag "icon_delete_11px.png" %> Delete <%- end -%> <%- end -%> diff --git a/src/app/views/storage_volume/show.rhtml b/src/app/views/storage_volume/show.rhtml index 3963a3c..cefc51a 100644 --- a/src/app/views/storage_volume/show.rhtml +++ b/src/app/views/storage_volume/show.rhtml @@ -5,13 +5,13 @@ <%- content_for :action_links do -%> <%if @can_modify -%> <%if @storage_volume.supports_lvm_subdivision and @storage_volume.vms.empty? -%> - <%= link_to image_tag("icon_addstorage.png") + " Add new Volume", + <%= link_to image_tag("icon_add_11px.png") + " Add New Volume", {:controller => 'storage_volume', :action => 'new', :source_volume_id => @storage_volume.id}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <% end %> <%if @storage_volume.deletable -%> - <%= image_tag "icon_x.png" %> Delete + <%= image_tag "icon_delete_11px.png" %> Delete <%- end -%> <%- end -%> diff --git a/src/app/views/task/_show.rhtml b/src/app/views/task/_show.rhtml index 9421dc9..521ab8e 100644 --- a/src/app/views/task/_show.rhtml +++ b/src/app/views/task/_show.rhtml @@ -2,7 +2,7 @@
        <%if task_types %>
      • - <%= image_tag "view.png", :style => "vertical-align:middle;" %>  <%= task_types.select {|type| type[1]==task_type}[0][0] %> + <%= image_tag "icon_view.png", :style => "vertical-align:middle;" %>  <%= task_types.select {|type| type[1]==task_type}[0][0] %>    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %>
          <% task_types.each_index { |index| %> @@ -21,7 +21,7 @@ <% end %>
        • - <%= image_tag "view.png", :style => "vertical-align:middle;" %>  <%= task_states.select {|state| state[1]==task_state}[0][0] %> + <%= image_tag "icon_view.png", :style => "vertical-align:middle;" %>  <%= task_states.select {|state| state[1]==task_state}[0][0] %>    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %>
            <% task_states.each_index { |index| %> @@ -66,7 +66,7 @@ <% else %> diff --git a/src/app/views/user/_change_role_menu.rhtml b/src/app/views/user/_change_role_menu.rhtml index 4044b88..b8b5a3c 100644 --- a/src/app/views/user/_change_role_menu.rhtml +++ b/src/app/views/user/_change_role_menu.rhtml @@ -1,4 +1,4 @@ -<%= image_tag "icon_move.png", :style => "vertical-align:middle;" %>  Change Role    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %> +<%= image_tag "icon_change_role.png", :style => "vertical-align:middle;" %>  Change Role    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %>
              <% @roles.each_index { |index| %>
              • <%if @can_modify -%> -
              • <%= image_tag "icon_addhost.png", :style => "vertical-align:middle;" %>  Add User
              • +
              • <%= image_tag "icon_add_user.png", :style => "vertical-align:middle;" %>  Add User
              • <%= render :partial => 'user/change_role_menu' %>
              • <%= image_tag "icon_remove.png", :style => "vertical-align:middle;" %>  Remove
              • <% end -%> diff --git a/src/app/views/vm/_form.rhtml b/src/app/views/vm/_form.rhtml index 610f2bc..034c3df 100644 --- a/src/app/views/vm/_form.rhtml +++ b/src/app/views/vm/_form.rhtml @@ -72,7 +72,7 @@ {if !item.available}disabled="disabled" style="display:none"{/if} {if item.selected}checked="checked"{/if}/> ${item.name} {if item.size}(${item.size} GB){/if} {if item.create_volume} - <%=image_tag("icon_addstorage.png")%> + <%=image_tag("icon_add_storage.png")%> {if item.is_pool} diff --git a/src/app/views/vm/show.rhtml b/src/app/views/vm/show.rhtml index add29b4..0da81d0 100644 --- a/src/app/views/vm/show.rhtml +++ b/src/app/views/vm/show.rhtml @@ -4,7 +4,7 @@ <%- content_for :action_links do -%> <%if @can_control_vms and @vm.has_console -%> - <%= link_to image_tag("icon_x.png") + " Open Console", + <%= link_to image_tag("icon_x_11px.png") + " Open Console", {:controller => 'vm', :action => 'console', :id => @vm}, :id=>"vnc_console_link" %> <% end -%> <%if @can_modify -%> - <%= link_to image_tag("icon_edit.png") + " Edit", + <%= link_to image_tag("icon_edit_11px.png") + " Edit", {:controller => 'vm', :action => 'edit', :id => @vm}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <% for name, action in @actions %> @@ -30,10 +30,10 @@ <% end -%> <% end %> - <%= image_tag "icon_x.png" %> Cancel queued tasks + <%= image_tag "icon_cancel_11px.png" %> Cancel queued tasks - <%= image_tag "icon_x.png" %> Delete + <%= image_tag "icon_delete_11px.png" %> Delete <% end -%> <% end -%> diff --git a/src/public/images/Untitled-4.gif b/src/public/images/Untitled-4.gif deleted file mode 100644 index 564b352f71e15fd954f7eae56058b5625f55d333..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13123 zcmeI3XM7W79LKMKQj3V9;MVIQxSG4%C25;8NyU^hB#1Ox1RU49C+V5w?z~)0S{&d) z8H(U$xN+|R3JUJM_uhNp*1E!TO`8-xe(>{u!Mp$SB6;%U`+vsw`MrI{j&G_DDwRwn zGmBw-K3}0ws4fhe8k@{EDvm%Y&YVh!rW;057u2X zYTAVL^P)%f`uwcFmY3?JU|nqu+pIY31jS&bI#%*}>4zkXqU;yhp2kJ0XfI at I33*Cm zQ_q_8SD0&a97`62TrS7we7tEV1u+;53SLQ&Bo8G#*$%@|@*X2QqBu$KJdGr)+PdZF zrop=NDy?R_6XrN~p;GHPoMM$0GO~R4L3!282zkX4MBXcuW~PN9Iw(hNqBy1E^aCOOkiW!Y%6FXUEk1eI4U*Ase0Btm`Ed%OXU=#NWONv$kN)B4mGp-swTrlu!4 z{<}QTTiyriDGv#*h(2Pvt-EL1Wc>exX==%r)o!P|uSHV at k|r5qI9cjU+}N3>$_dlX zC{9GrC`lqD^+ZT04{mmU#a+`_&{ztkT=s6gbd_7AQ}(_^rY}y4i-6>!F4P4w0D>`H zs0(BO1Y^2T7svnz#&n at BkO2^k=|Wu~10WdFg}OinKrp5Yb%6|kU`!Y40vQ0om at d=> zG5~@xU8oCW00d*YP#4Gm2*z}wE|38bjOjvMAOj#6(}lV~20$>T3w41EfM84)>H--6 z!I&=81u_7FF$Xx=i+Mc>T3kUwQeZ7hib(xo4kw z`l%J+PA9?tpb!#7dV9o0L?_0I<-h1x8>&`oFzwOprZocWp8?L`@#kJR5ebtp$ zT)uqS(j}K&ddbBXU3kIbMdvR(@7x9R=gmFm>^WzhdB*9d&7O7YDJP#av$G?gJF(r# z+9z11kx8eH*V~c_qN%OQamOBW^o;4#j+)wXuLjjpCoz(-cxhn0sHT_ at 2HXcjNq!-z4zL4kKK3Mb(fuo58G+Sp*w6p zWV^xJ4yxLwa^Tim4d~ymf?=w=1~3De0#n1#=01~Q`VF36v10bju7ykEfm{pE9JB!z CAxTgG diff --git a/src/public/images/add2.png b/src/public/images/add2.png deleted file mode 100644 index cd925e396e97fed605d5f1ef595709797ebbd879..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48768 zcmeFZbyQqU*XW6akl^kT9D=)huwcO*g1fszNN{&=+`Vy^;L^CeyF=qWJnwhE`^}xT z=B_(;&HOcQtv*$C&Z*kHtEy{PpZfLgupbIi$Or at oP*70FGSc6a-&3rAj!z%ow|=*sq%jVW zuXtON&m{LG?>hWPxa?xksi>T5W-R_&-7t at 3%+O#*^LJ2PIWF%2OXoJGI-N=FTYac% z2jZgka5^Ka3?_ZIJ0gyb at 65;FKap!-bVD3~HdBQT~4gjE*$XE>y7t;Hmt)<@pn^B?}J z)c;>8NeUyB4+*c&)nB1rvDRerifM&v{xRtK=S_gC_x}Kg`5=zQ) zGDtE at bq4Jsu{90((j+qK)EN=zC*DUEN$lalhw)=@I$VC!3a~>@`XMUl1b)R#lDDT_o&r(p=#eZ4s z>O4=Hnb~tbPompX><`p$^5(a_+XPMAUwW02?ptR++i>{%Sg|2QvPIPtb2zf{!_ayuE}Tk#WomSA#1?TjVP|+zXN8Aa%?qINsAu(NQ8p0gw;JYwPU at 9cw9k) zrkBk~*&l<7dp0e{K6Zc|Ql at NJHcc<^emLtcc6aT~YyE&H+8}b2CneeQ z8xb?TDB(|02CTfyOxi&BqP5eK%@Fr^_=$8$wWnHdS)4J at dRBV|Bq=tHc=>a=v`@l#opqx$8;qdW7kcEwu0tC_-P} zMFGX1&Qh;hHO0EZVi}(i=_>{6Y_X>RoGZyWw_Le5VJ;L^qH%((Sim1_7j&@rh*C#? zFbcVrmOtqlHgc_LWR78PaeT1j3-UOz?jP3XQ2-_KIN~rzPc6S{C-?Irk%f@$u7;)D z=ejiLoPny@*x0sN+xmVw;mI)t4V$u*Qe0EY5kkwQY_8g=<8hb;Z)WRF1CNjhvPARQ zEnGfEP2@}&Pue(HGzJ=0b+IvLn2EcGhzR26C69v=R-TM8H1W3x`w^@Bz{kj-7FYy#1-jH2(bg at H?sqLxb_PO{Ag8)7BMU&<4F<~^ zGYZt-63`g+^C2A+54u*kX=wQ4{YLeR4!*p2g1dMfa60Wuc`CS%f}AJjcV?HfctZQj zSGg|;RJGdfY^?@?T@#ljcxH`#EbNjP7UcA0?6d6*FgI%g+7i*^zjUJbWd*!>yE_Im zu2+*xBgJ9pty83RyAt&D&CHW|LxYp}M}Ho=InKDad?b@#3(W;2-RmHQDxGG3SoF=q zTZc7S{kGl`3Q=8Qpi-X6y&2n{gj=6s#dirl+Pen~P&Vzc`F}Q$>wl!hO6X;s={?7Q7a)r-Rk?yOWW1 z+E*KEq!og`#(^4B^+*HB&fkm!Jg=`GlqLopr76<0?{(0r#^FplyCtJ2kEk(rEw+l} zzkf%d4LFr*NIJ5||3(V;imLH!t1w^JvuVS|L)RS9UAm#hY#U5XAzf&+O-m1BWd?P8 z`4_<@QPZw!*fqgednaf9l;aL*fDbOUv)p7FMgCiNU@{rCZ=s8RO7DnbJtP(ncXO_a zt&KUGE#arxt-hFsYHu!c$+NO-WRH|6QU~w0?0P#ZU4S`9U?g5qep+6YM8$>!wWqQ! zeK3%UO?UYGr_kwr3sW{cADuDHKJ$;C@~fqTky(FsJ{vEn4Jh~t*}D(ueRX at x^}@Pg zz>OeQoJc#L!DWvr3DAb)q60;G4)yS<%PCn;eZiFsy9sVtt%JQd6glWIkvSLhFhD26 zu&2)a6PK?MqGMSS5oF4h+D7GHBmWk_gHqg`<6l!-K+D4&3 at d`F$Esk^Jke)FUi}5* zE||Z?Ixllu-#UOxj2?t7^NGO= znE+Chx>g at b+7;C15hi^SP9nv+c%AHWIpz<gr|P} zVV?KEUl@?Y9vkGNoO+W3rSEe at D%GAdu_&G{%}=^RPF4=e|0GNz at nDDIbMwL29r<8x zG5sr}DXVoN;jhyW0Zp=L5?>NaJ*zI7?Hd2U1n1##(?LUpCC3Gr!gBD|DgQ`OlJBC#G3(B at R|tT&L{H;~_^BjC|rWgz~a~ia54Qf>l7IRA at 1j zbB-n;5IG!KX_ at J3xGJHQnM=|5xoewW!ZzV-Qk-(Z$#1(VFV58Jd3gYp`t7hhr zq4BNn&z5N|4*_VslC8Ybl%msHm}_vl1CF_mJpND%NTokH zh%$OKBUB1?0_d#2t1KiHDe#W7&E)+Sk754J+9FjvofluK8`YNbvPxT|xsAVzvFiP3CuuP$UYDugHioy_`kZkwfuekRunyK62sQ_O1E_=9Q6~Na?OFW_>o$Q#S8EJkkaMu9CnanqE!*{c0_mU;1O=dP^$*I zP;#5rO~EAxIb0;RkSM6>HxiCeX^M`hIIjfSvlluAON2 at 9STK2hGqb?Tm*I&UG at owt z`g*spVa_{&1Rq2wb(Mh+XiCXuQ5 at YY56r)2cF<^QZUv8pU*n=u**M0znYBgC#!&MG zOf9VBRGG##5lsebUV~p|+c`}l0>*{`w+UaYCt?KpZQ$rkw9$T&r{MBj|7sDqE3v2c z3e!UPzG25ncx97aU9WN{62`I7r$V3gH99`!XNac&iL``s@$LiqU29+JkMBWau>S0! zm%>v8yhJM*lx9k!u?r(8a`=xSTtT`CYV<-~lDp#jm2MljTCJ}p$xPMjZcuEQw7MMd zdSdp@@3xpZvZS)S at mc0AkdF6BL%TCn>{*mL&3)E9%kJ52IjpMt?(-rv)$RnjY@!d$ zZ72!eCBLX|d~1mKilO`oOXV?(_~~gpiR+UsU%`g?^Szd1cz*@v*=Q}o6v2K!_Iu-5xFM^KWPaZw6v;*xxXH3uRURN|kFCWSecM~&yK_0pSRe3=0#{l7F zLtNp23vWRm7}*d(BZ>DfqC-sLr`sTd9^VTGfFJk-kBXVhZL3Sch3^-r*d$BI4vg4f zkgNm9Pf;yA%yx1Drmj|ex0Betj~uN;9rBpe9?SMgEC4ga#vP|75Dg|Kl#Egyt79;d zPYniA8O5VH!%Y2LjG;v9?@WmF-J>*TA6`n at 9a$t#=teGFsQREE&sY}2JM1`?wK&J} zH4X>e5>Kb))}`8EzX=3?`u9E|@oew!9*ZMyQvHZ at xs+%Du2#hP4O8u+UwmChX8p08 z_T6`F(}Fp&Zv)UIVqdrZRiR++=d_jT^jGrAVqNVvpQvN=?IsI{>%>th*T2K76eGiR z!zN1=CR*Q;W11OsI3oRtkRsF$U!6KI8$P;`+vJ~hOF0b@%BRq-D|w?<1`S1@$#W_|A0q$M=(C?%j>}z4b%XgQND(3$1<`7T3oWVljCYxGLpel#?nu8Sn>L#B*J?Ic>)Vs+#3Ff zuVwsjnXq0Qo0V7&Uu|nFIYsL%xhygsWPm+!>~)fo;mGrc2It*S+B+u_f+PD`uu?%~#UcljM5!er^S9pyF# zc)N5IVoZ}?b4{mnQPv2)cW<6()zjXEcB!#PVP(aX1KQNHF1>~%>y;0qyZ)`a`r8UH zTRI)El%rtL$>u#-%rbw|3 at h@y=x zjn-dlc^*0L4Bfr3EB57IJNq`kNmGCT&%ubFz`*$6EgO at GMKR6C=Y;eiW z-htot;&dCZ at U5&ZU6GzoNdhH+eUYGz{Vh5Eeu9wa*t<$-GnnE)C at jlc8g-Lra``0_ zQZC=XcUEcn(Z^+c)-U*i#HPo-*;dXz- at 3bz?{w;DXEM(9!MdB|g)?H!mBOZ&YxeEi z-M;$^s(cLbBahRrPI{_uzVG&+UkGP7 at hgW@eQLK$za|GyaTV`0Z<~XfgV60Il=ce> zRn&Fy>=9ju{RKq}^Hp#zBHslcPhWUetqiJFTkt1=Gml4Et at qtxoYwB9dp6y zH`L7w=kc(nLwv>@NKmojB*sA44fm#x;B_sBL9Y|wNnlCil7jRRLGcjbKwzV=%zxMB zXbiftA5Vo|)m+kw$*^e@(15I+=UM_uZf{z>FOWo%PJuwlMAkzL)h9r{P!0Vr!>+&3 zwJ942>j2P}>+)s3omhy&4{;i$1oVIw^h~;y2A^FBETv!2le;tm=7^BKqa{(F;Do6A zl5 at Hrd{#SUMAt7{B{TlOotVWkJiing^!c^$OQtCo=-{_F_FJeb#$<=Ool^1A+6AC$ zrk>+{9q&p7PuuosIMCVQo?>E&xUsw1=pZ~RWnzL&L-ka**13N|i#JC4n;xr6|D>$B zMVd8za1~yw(P70yi=y>HS)@z<#HhJ>@jsR5-6nb_VjBLY=9;M!={ep`^DbBMv~C}U z=Oga&JOvP}quN#(9fs$oj88U%=l&yy at 2ABdYJVX6MPzvH1+=&Z`^DGbw{muuk}P+_ zL#utg{v~h_usqEj+gu|vD+Jh8`JUz9fOo4hTUYx>xwy>1Cia_mq0ilub7O7)2xY<$ z_9uLo+ zR1t{0)Sui;=4F#UF~_bQzblQ1=AfSEEe2>bYE at PRfAfp-PO?{6u!;w0XI60{oDfJ- z>}yomf|?s8UZaVk-n#FQ%_{>p9!5c-HIz{@F%o-PY6kX{Uz?2A;w(5xx2+?;ArCi} zOLJraxW$Fwf}?YM;e*fnh$lWxb#aN0)|&NCVvB1a>Fpulj7}sJjAcQOxQeqZ0G-#or>a}@fU!(t(RdVamjQK(tUX7ZpbT+mg3%Q zLY3nV-Z7`|cG6$T=X_wcutq%JQbES!_X+UULl^%7c!BP+|MirM`@FHKfLd~<^T6#k z2cJ&Qy6!%C&$IEG6Xkq=P13z?6a7V&K9?%S*jl{5bMDDGVO?hd>NUU(cI8#>=@$Xz zEkaY2G;jbK$UzHpDFZuI4npu=Pp6D|)K?-=89Py&esJKmF|F?Io%K?YgylBY&^Az? z*{aP`R3aaUcYRoN at bP41NS|}TTCW?iqJC!mY8!U4PCe_0gg$_4wW9vPyT}zaznon5 zp_kPn6joVkz)IO4w!sW(`3qQ-Akamr{0Cs*Qh4Ccc+x|!hiuC3BZ46WwfRJCl6{k? z{8eTDXxcFxj+Ua8qE6AQOTK$OREzDLv`@_?+|-3hDlu1_P3MnII2k&ah at wA@^zb+( z;6-BdAl{covDGUZIA2IlI2nSKeb-tq`GtF>W`oA}=c*mlujpRw at doYkvJS`dPHGuF zCCCYE475=9Ma(j-+V+*RkYh&};EvmfgO{8j!E9}}eP(9p>hYou`WZcFW2 at T7m%{vn zrgSN;Vm`!t&))YbYg!xNi`#NHbuy>}Auqfm<-B@&tQT at 5fVoa9dlFR1VY!F~B}wnL ztR&zO3_lOy6LXSNM0Mn=>ha?b)&yVOsNQ*(iBLS-ff6;xx at LCpFs=n7y?Z8 at 8+^Tl zPld at a`YOh7jd^R5liAU@>Zmoa*d^bxye`pYX!Y0UlqOIZR`2_S#A0YcwV;j4Y)A%x4Z733!<==ZCJo1f{@|4K963 zJc74yV$d45MgWcE($vTGjMJ$}uDkDKTQ073sRp_`~ zeuo0(5#<|h;ZAoa^<9h-h7j3By9Tph3b})%8;+psi7MN4GF#DC6 zR_{z;zp_)D7?A&&5E at 2@a*4h_b2QJ*eBHQBrNNyT=Rs^G$jdhuX&FB%mbn)pzr#`R zFiHokfN-NjTG_WjryWB=Jm+JGZt!b~Ls%?AUx^{{t+X=CUCEAo$ICs8|4Z#h31m)@ z0!bwR=m25SBv9z8O7!J;l7T;SBl5NLBk@)htq{oW@!AtiRcoDk5`A4IkWocfd%mFp zk_VV_$GCGhfC+@|F2HaWq6yW8;w=lmGV5ecBTiN%3*bs_5QoHIM}BZT`@Q~PetkN zbJtMUu{y8DQcZ9-{xHwqFTleMDu56RDVEEqYbtu^u$J5FJrp;2`Nn&o+_mT2(b$00 zS;QL|5C at EZJd+IO+$?wcFujD~F<11!kNno3Ifh95Rnc0|V6CEHJr`!1=o;2;qule3 zwx~dnO8WC^pRllk08X55`fM4k!0sZIXnrGI%y8XG64Q27ElwZ*cg*>=0rPrs5m!Iz zwYY)roK%nR7doQ#SZSYH71(=wsLH!8V1S8 at k+Zy!uqOKrmo# z#r!t>?K(X~pd1T-?Z8ACcF4wdc%NED;e(LrT6B6uzw^)g z&%n{}kc*+dYhG|*h-pW;X0y>&7YQP_6Y%n at x^hwNrMSprX5JI)VsWZ{l&z6Q8#$wx zrA>b{LsPP?SUIuvr!`|l4qhb){FhIk(rbr83fKo7>M*}TvaX=RzXmM5 zIJvc-H|#p*Tp*e=%hLaHL`n;OB=ZrHh&{T*Op8vK6 at 0zFvOsXhZ=9%EJo~}QBao4P zY3;$qX_n=efpP?1>hx95G-4&pZnP^t9YF1V{Ssil499VBcXn%w8f|$9^wmd!zu5Ac zEZTyuH}aSi%9wwxJ;Q|Qo0%|T;#d(pTT|c<5x418Xo``jmSsG$#T;6rsPIB{-;(eW zeno)UZ}$1eKE39cL?Gh{{|B@;iF<;&QDassRjE9Bw^&XTdV~ z;cv1sCAOU&pfQ6-b0oUmyni2}tJ~R6_S>%Ye8#a=cY&u2%<3V_Zfs-k9w6!<+^jwi z at H<0Ay&``WmxQq;XHs1jE-9ch0M4MOUERhW3!l#HZOSnytgN_PP0;CzWDpZCH>o^0 zb5)L)TxuECh@~LV at _PuB#IWbXggSsN;77OIQtTGIWw{5#dnfuRc(yJ}3vG{+M9bYe3{v+kL8YNw^jb`>bZA+&Av?$;PmlzB9V-Znjkaa-&Yqu;Zuq_^PBBV+vF(X z!Sj-X)}5X${hF=YX7Lj>O>~0}v3=9UvGyFw8>_#S zp*1e)cfCJ5 at eB2rT@ZKW8$oqd5F}n`4od?iA)Aq0JarvhYtGfL>9zE4s9pC{hs*Yt zl7q11Jv%*Ir7qPSuuW${!yM-JPa%;A?&J~>jW5xyI at R7q?D4FE7SAe}NY_85P5s?B z6;Jjngn4=*n(p0da2`+(KcufBg!u*q;|c{Z*3{fGTq7i+qw`SHdeyvcEWTo4tuIp( zSlf#KsgyCEw<7&Xr4tfj(OxOOcsijSq{n9=g0n2f6p|+)X4&u`9Irc5v|Mp@=@^Zt z62&uc9({!e>ey=DjB#H`Tioq#D`0ImRxbt{enoSXq5}KytQPv~$3J23-K(SOf<$@Z zHfZwaPd@`L8>Cb$xTsP8$K*Y`ypv#lA{-Nf7Ma-qF)MrWpC!y_eCI}hr6`W7v3d?UgPI; zPnJ!CYv_k~SiGulKS4SXB=~TcOmY_K3OMO at C>&Jsqhc!49PYLAGH5XU)MP}r+BTqo zBqeG8&Dh2v60$ES)Sp>IB)&V!o*;s`7p#&r2|7D8+Zx*A-A-^CRyZQLcqN}_)$nhk z2m9+z8v{sb1EM;KY_e%;TJql*7FDW9bH{)GNt!2FY79RFrQ6E>@XDBc{ML%TkTaBx z7p_H{22Ko&{F8qx7N(qG6IJ-DQ}SQTt^jNHpc;q9dW%O;W&5vIJCCF_*jfwcfaNz) zaI7~~QKBAog5P$SdK!rZJp@$B*M at Gs8 z#}1>_;fryJ51A1QVOduUhK%Q&BiPXX%01-Xsp;wByw@!B3^$_-`${OCKb*@UrIlrl zKO(kvF#R)q+~=pz&d>8n3oP&SL}~7qG+DY6<6zT1;~xq*-yXei_A;oD=WTWaYiLD& z%|CI>2CL9Av5~R8FEbXkTTf0bUPG+Cs;^NPS*=4CrCP$}+(E?ym#hoXsCyc;VRNks zQ?Cdw{lTI6sY at t*V|X$-VHG74KW^$ijk(`gVDpB5vg15wxH{c~0+ZN}IBO)cqI|BX z&}+0PKt8)>;|Gq3a#XBpeH3qs$SBHZ|3nuriu77hzhNX2X#}S1j%GZ(v}iV%;K#iJ zSY;G`v*L5f)*@={_U5AwnqcWzeVa+$ZPeXo-ikQF4N#z6RbXk)AbygqQPROOq1jRg zhwqr(Z~#Y-CJ0tq4C(Eg7~@>_N3uzWrLMkdqGN^K?B8R4vKB+%smY|Br(SiCIdb#7 z_sgZdhZb;V3uLaOJldP-B*_RA at V``=7TTETaqrZF;o4$rzK%m@)(8LC`$+yE0qDv5 zc|~P5e_L4nV>AkCo1Or_3n^I|=Om-Q&1_bJHm!CdsA6ezJ(Z7&x3)nJyOA^4Hp)=P zc#(~MfSJOe7sojB&F>fO!46LWy1e3ZWoZ0944c8ve93qh%+F5s4l~qLRB%`#_xZ~s zw at pZSF~8nI%3rx?te1W|aN%cStx9apUX-P9i6@{JD6={yCXE}&!q0AnVIR`guIeV7 zP!HA*h*mCH9^*&4BCz;s3>OfmhX%khipxEHKWcYyh1J3I`EzNdk+z1bm?p!*?!}x- z|8;8;chPl5nl6?Wee27Z-^I}54X zvo3BQjo;{E*drpACZ_u_tFif(NAIF*Qf&eNw36kR60YZ0LeeiV+HW+N;9T^4+doF} zHAg*AeuUka#Hl74TV-}}#e(H~CimE0GO>pgJRd5xtP^hUbNHt?5B4pFNTLqD)$ihZ zL=3>5RmR64+iUp0jy!N5UxT8kBzjs{i7w~-aO<_n;3LA?e at V|0p6^zLc}3?_Y~d|% z&-Oyg$I7|4a0-oy_X*aX z?w85v$8E?1GUo|LJCQ->ifE$h<=!Z^(5}~+<_REU_^P_sk`yid*k_`f&6HwF{ll=> zQ~zxnqi>eqm4#6aKB35^NdAcd-ni2eX&TK6&1RpliW#aPv=qjbI=o8-L6aAjcZlW> zFDk-jf6ANVU&P}`!Gf^*8&)Qax+j6~%N?cP7yI4ZiY#sm4*F4*rPIndK*<)eA-|y@ zZ1S_IgSh#^dv9_SW6)c^Ih_glVIr|RV@~#1mW0s~46l)c??^km-Noe at abwmmP1aWX z*%tkI{4j)KNy9!NiaDQDq3Jw!m%6EXRg3Qw(N;WnFG?_1(#phA_b&{}Xw%;<$Q at aD zOOWNh~y__Y+mK=T94+Zr1-(N_U9ggis>s#_$PS8v97g z^efR)ypz2RgWY-VNyGOCqq~#X#V(O<6v-b2R;&BKHX^O$9f$fvMxL1E7 zuJIFXSUaSECDo7C_!AuWP#_W=6hZSGNgXf8OX4B}tmB at M73 z%H1Ls`~)2YPnR=IJvdjy2`skxNtSVbThq5HMC5P=t{MTu#~g at xbmyS4OD#w|N!6E- at hut8R?s`MajR|l#l zosBvmw2s5N06MtGA3c*KgeR~t!kpHWya-ADW;_BX7XPM?RuMm)05eIJeI5qin`qfH z`u{69R}23**%z>@HOsc!PzS3b`IbBWWx- at F98`_|80%TS29`*+6HY4}EpH+|%cMrY z9T!cRT+#g|bAw1>by9Zb7w`Y`d-PjUGIQRfU#!eN at ts!jN at v!3+aSAZo-eODS?4CM zGn{f#p0|QBII%o_xa>o}{*U~WAEeA4Q2nXyZg%7#m1Yzp(U_RunKv{$?Z_k=Q%l~k z-8=cgm)r1{zSSX$KaXmpDlP{tB;4?gaQ)v9&b>pPZ`%w8X+1yJB0^mAX3%|vs7 at lC z+6+ow>sHC%jqWbanu>xQPC|y-aAoLfwqwiPqsrzYf5`T>zGWm at rcZbPB#XtOek-l1)ae4;?D zxCXM<8`;`s{kLSodBzEi3UCt-f7o9VAQ9PTa z&SOKoM}}?2Ot`8{)CbBt<`#i9rvFbk+ok8GEk-}hNMJ)P}d(-y0jnGX|^ zHBI|znE6FELw`wQ+8r at 2?^F%-w$YwCWyQldv?X_pyg9`2Hav+Cii^rJN_F(x?Vjj? zWcLL5W@~u;;N`#~0?d^rs!c0syYs&@Q4bTX34Vs+RdEc9)zwcY$_QKKu&BgdXP%wf zJku50dslOhRY0bIZ0CSf_fIww9#Nh`Po`!6(x7Gr#$toj=ZL8clt z2H>Qulzmc>QQq~(Z!QaF0$PyZQXPROiEFVw{mT*uVZHoI!P4dsz7_>V|Hpn=pII)R z>`kf9V&a2}3J5I=a|S5{?TLJDaZGChO|M at o{z`M}l at g-ew+#rLMqk*Bn47hp!);is zO`$Wvv=khLaWAv_KlKeh)|+s-E?5>#%IM)QZ*1|MxLL-*Pxf^3{{1V*GF~?|U;-x9 zcB`b8nnfQSz&!CwHw6+FlYNHlQ5JdYy;I5Fgl=KqefIoI^tCRK#vc<8dr5cd93*<1 zR(z$rRn|!Z&ODJKJ}=jUbNcdU^7yW{tot*LYl4+x%6ZgfXnEP_4m-h5O4J1~7e|h2 z7ovtjRS$m}T$gq7Q)ad!EUru!9xyD~Jq#H;qpF}+j&FOlUwB+hveu=Ratzpy8oIWu z_kadJAv{h6FRhMm+DnV{J3H0oU7ImDt3u_?YP-*?4vm{jxve-TJVHx(q?i`Y)k zE%3=m_r&X4k&^u1 at Ue*YLwtkaF%FvbJoEa1H`Ht)QCU2iiH(4pyP?5ppUJNe^h3m+>z2Rw5ssgmvktyS-6fH_3XGy z_;g|?;o*+sJ at w%8Z|wDN?DcQ#^>6I;Z|wDN?DcQ#^>6I;|4Zz(et+q zvrLp{wd$7r60Vb57<`C`76^4Kf$kSk2w=!Dv*7%wDMm`Ad9=ngxZf@$yk~1^_P0SF zu$1-WcEv at y3v_=5+{TJnx~zBQH|6$&iiXeSpJ6f!30i2HX%gfq$_3qf@)EU&oQP%w z!%v29i9XwCg9jTGZAr7;aGZ0O&Mhz8mU)ScFx^^x8NBqYWb6r1LP(`F??}#jBW{CV zxW5>VHG1o*Bh^f;tnlAjx5 at WIF|h|yta$X2=&J%=r=Ra^j(_t06pqoF>bn8+!E3&- zbsOu_x-Wsq^v_d7BLdFuKTT0otgh!oth5GUGAvgdqDaH=2Z;;Vx|;_?@p^H08>~UU zE|ZdMOWcQyy{vrGDyj1SA(PNyR!m&BeMC0rzgRrllct&3*mSg=rP3V0#m`r7UwnCB zqn)9&1?>I#hY9D9L?iOlwu(WV>kWKUpDC4!v7S8RuLlXT<2N zV2%_%Mjeq{_>d2V7dfK{0=Hecur;t)wxWm`m;MnJJ-;g%g&u5Y3i54fPj(%M9!>*} zbP^BEKQBd_!PtdBxr2!V*4O;t)xln<_RiDh4>y+Sj8TFlxW)3o--jOaXUg6vX$2_m zB^IQy9PhXb(B?7qFWiOL#LKga$dyUrZZZ6cej8C*8ibs2#G6=f5Y?Q{ZH at 92y2Uk1 z0_os|BHE~F1DTb|dwv+(g(_UT1d`rogobdmg`k zI$JqfzoHXsaDRyohkmKE`q61jWjspo8pOW5*>=C|0_?cAmMnh|ep!~Xw(ja7Bt{K= zjfP(-7=@7LuZJb#dYAaTd*5}w`{lj+(CI0RqWoe(J00J+#Dog!RvIZcEdOZr!QR5A zS1p0s3<$9s?F({F8y=f5Gsz-gAP~w^BzA}*xntLpC}RBtR{dN!6$4{+t)9Pg&$b*? zU(eVPkOLp&aEM&w>e+Nv2rcE1Xm3LJ(dH-Vy$N%psnD<+0`DRQNH1YwVn~z#tL_DV ztu&Qu{I=HpvJEBqg8y?Yj>huNO6puy=$6UdO!QAQQS zV#P};hYE8&7z@})FV&hnq{Ab*#BSG)ijy~N&=)2uf2aE=dR+j6!EYxg*5ChZ1l5tG z$US2m8K|fM*6g_VZf=|*Pft(Iext6%Bx>`FYMuU`p1h03C%4s=w~*)OXXfv&6<)&m z5X)!KCL~QrNXTy)${E@=zluK6t;hAxT-*cpM2A+o>lhEP{t4)+fIlrIOd(7_*HP}u!mrc^pTd2)W8<)@`xi+>Lxna;L z0;pzc5lXkIcD}zIN at K<&SIn_L)9#kFq0cL+yU8ktN-6$b8hg4mDCncSK zv_bhoV!HcEb0HW${~-KlJk|c_;L$GNtk&@UV!?UefIVSbDmMYc0YfxoGS9z$AXv(3{YN^kL!0*2_C;x|7)bORZ^A@#$7H9cUnJzXAK(eJsX58cxTgxZN|N#rXjwz6kRt`8!xifWEB~=H`cVHyvI^6 zJFIP8iR*`6$qNjXN?p|FHshA+`(5uFPpi)q2J-^fnfJZyEfd+clwf^cbL13nUg{cm zAa(l+-)P!Nm}|_P*?js_tMVT(-+YH0y{*RJEq<(qem+U at UoR@KOiIUjAsZn7JjKR7 z{|%%~*k~r)Y0Yu3(Y`v!ct}xkQ~6m~o%uAySRc|v1|~!E#&;cS7^zn)TDl=vYJy;j zW=_4vL8MHDquHQ6#|3I?w9ImOPcc5DZXe?#1JNh=C%U=|pq31^bga zJH=e5LLU9eZ)oqH*C0SPK)LZ7sD+sS)-T?b@$QPwH>fLgRG?Aqfwj#XuW|R4 at 4#@t zVcY1Sp3^()fgMa6lN97{eMM$VV>^<)Gz7_K1KcnT`RUBl`ATg}v>L at sX-cfhRUa(8 zEQa)g+|H`z%o;09R>%MKC2&fBj4 zHX;8tEA{00(f?l$as0caAt}*T+(mlS?~dat|7C>K!v05d^1pZXFDG=%pr2U5O7M>8 z at Q!G>j%fd6YTE-5n~KOF;hzrz#WNJ2PvmVTRN^UR{x2`mDMzA%&I`o at -q8kka967$ z*j{hJnP|{Cy=V}0iucL at p6zhO8Lbo0A7nxD?+kIds54IT1sb|ljz0 at F_|I{7y+xfH zG at f{?^PT|qys~_s2bQ{8^=Dp3ojWfKAPWbce#^oOrx0J$6|eJ!iS9=J%Ru6+y7q+4pTP&O~B%4$Vojic(joP{=eWbIo?6!cy(N?(lV zx2TA8>P9prKF2A%%3CSrX)K)?a%{9zgg|IVkvFu);)4m}T`4^m^#qwt?#JDAUhsOt zY9 at HUk3A;#9yS)kdocoA2ST2iXP_P*_(dc6fZqm;q|U*>#n#{hOD~n8&0a+u;5KU z^A&*`GTSlZ4-GDck{;lvSsP{3gCh$34%JFk#wqMa_QJpg)~#|?(TU&ZI?ifg7i at tV z&OFqL^Pr%ySroXA262Uo_CaPf;V$ZwZSMkCm$q3X-mlFHwqN&;@irLO!q`eLHgdgf zt0%lUvhQxb^gRh9NPe|jzJ6RApT^%{G!JQ#KHG?%6>?I4%5kB(mt7e1dnMM*n(;8X zb$#^Orzkz9k5;{1PLFsxNR1b7I{hXQ!zdqQFSC2aRZ2L&T-M4t%_!L9)=AN+!i0K} zRoT3is=FkF%7$4L`M77YL2Vh6BK=wdB(LEk(W>ksgjAQ$co#kml8;NgI?MU*H6_ok zp~^T5P$I{`PP5>|4zM;UPHDCl9;`Lr7`^rGqF6pUYxtX1C!O7VVVA}3 at U!$%rQ8bB zC~#a&9tgwU3B>hnShqlwtlU5x`?1*~e)CP7xb z;tN})Hi)yahBScQDW(1sT0#X7$W*B&U0=v>DUlw at bh$8_SH<_VlXwai+g#NDyCW- at 4e zADUaz#|awOAUN$lv9Pg+q_g{(w|7MgjgB7DIfnl?oZ!XKgr(oE5GXG?vK1b7{sQeolKtvhJKv1WAnN(8OW8oF3RD9JEMrE5xzV*~eP(NJ+KPvNE$au5mxZcUGuvgZy`SvAB z5l{=3)>bLr9VCbz>8>)|p~9L~YwTnHMvvgt#j0_E^C#!761b)QRhIteD!=vZi>&0IzV1bWk~wz4vBvqZ!AG#Qkg zlG5{&1rOo%Lu~no~Qnun<7Yx_bTh+b6ozjzAQc=Rf*~Vj* zp6YeQ?gu at B4*kN>D)X~;Zy^V(gL1EvQ_?-_4cC@>dvB6-R8P3Fw`xz*yXa?tu>Tv_ z`;c+^_2Fs<+~E=2TEdL at jjw~`i2d7JHuZIAdkd~@06Obxk3k2x8X)PzZwAp4*U=vR6K33~o%O6@^_y>gYNPN)Tk- z at YMTC2o*@-4wW9Mo7uH#;_}1{MF6oAxHjM?SW%&$Mz*E z>h7mRUh2M6Oxr=slR_nafdcAIZml9hBV at v0Y_+V{$5_zl20rA16}P$n?NH!};_iI6 z at Ga@pmw3CoaZ&J1Qs>Ki6a9iKZk3iJ#BOpG(wHurnCQ>qTJ%l*O=b@|UgYfQb#(g~ z?~948+b(vIP3|@PLoUXjXnogSV~)Ab9oJqdJ1Ky|UXxtOM`AOjQp@`=P`EE$uzy%qNFEi}j zK!{1}q!ZiYu)(1CQwZduuH=O;rS$fwmH0nDCVV{Llr{hHYx^F-=HK)@j5i#<{VUnM z#(RGYH9;nhf!;=HZ^uj6fO*H%nBLNfs>9}O+Y7StfyQ$4uM=h0q-wfeO)ol+^-`jH z^MaWA#q>_DS1;ZTCvxh0b1!e757Y{U=^*MtmD33~!4q^(Bya~Fv44CrVYQAbrUM7C z+ssKU{cm?Nb^ARnSM`ne)t+Xq?YCyW3ZmyDb_08F$Zkg7{+_AgBmrl%3Sk?Boy at My z-ykC->6p(NnJLcmBOU5QOLmX5cV7YOOQh$Tj}&`Yf{-!Eq19LaGFVV~ynhP4PA)K|>=8x!rO%we1xb>%FlF)lNz`&A6!j|WDY?%qiLaNDF6UGDSLYfpD+&-miqDAc4N4GNmH$1_E7Qk!w>k*T&Y1ak! z(V^SsAT=Tx at UF&zV`9)HPv!aC!huY_5PTMWO8%9|-f1GLL)tBoQa at npW=P8TO*^IR zCF@#upls~;DZ2eHq1pgu#py;?(+9n==||=VzB9<-2#DR}fPc80&s>amNI5HN==Q=# zO2aQH<$S>%znrc7g#X&iOF(omCT=6#{Pfh|$p63w{qd=I6xVa|H5xSimfgP%ycVp^ z0{&J at o4X_SWEaf-LI_FHx#coAdu~~Vu|B$_I z1qp~|6bjw~xcD4B(5F~(zLl at qK?1V3$|nHkt=i*SJ_2{F3ZDHHJ`&t-)=&S at 5^#<1 zUDZ6qi`hD3bwOxXARPn|jGBn^RRE0dwc!O${CUiV#(xpobKTSMtTd?@si>-+Ht{0* z&&l)ka8*}WgQr_6KYnz9loT4Y4WrfeOfojd_v>{U^bOm*{NA|JTp$8*?4FIjt~ua* zY3>z5bE46JUCY&x?P#|M at Xm&JI&?iCcW)M$R<*vJU`ivo)y;7#Nb0oPBUIdczL*nI zJB>-j^fL~jP!-ODb@^=r{Z2TdK+gz-g5H;TN6no_Y(m+>05o#3JLS{H&Q6AEo9v{^t;QQ^d%QvG z-9MG(kd at ZyX1clu<34$$^IY-dQGJ3URdUfV_S6-qzenC^gGws+ at g z)vE$dFC at KHgEox(!H}Wz9pR at zMfIb0!N+FpC4-xZ0SNJPK1G+C>5K5zp;zOzEEn8Z|c<9A-U*WSnU4nX6mn~i)F3P12vx*Qv&NI0DYou4$UaThWO!Xn*LH#Ey40m5OXDyMuUGzT>7gF!83R-)32_ z(2Bag*Q`M-df!G-5B7*YNi08tiQBi at 7;*V~cS?llh!_RrgU{~*N&Fw}y=7EeUEA-A z6(}x6TC`BCxI4iLv^ccIp%iy_cPQ=!ibJ8rp}0#49-u&Qhu{vul5Flr?&p2?IOjdP zANCmMLo+hSV&y-tx#n;FGuOPbG86G}TyKV%uob5p78#S%X&vPHS3f5Xi<~lkR1SG* z$ivw4S>14$@fG#)?<~vJei1SiFTOOK&9Ch=tU9PVb($BqBNF%WRXjhtcK=ysb|1B% z5Buyq at F|-Qxjq+2BOaG^>Z7&Sbi2eod3T4FEh at g$xOL`9IloWrcqi&0DRG;XGVpm9 z{jL5~9E_D(rY0F({N-`RV43gdPWh8JRH{ufLtCg?1~+LWo^jk9bs5L?dHBLcuX4w0 zzOCc7!`{Q3fNQ%`;i?evDqqx4Je5wHb?YT;tThkZT7 z;i8>#QIpCPoN6?jb36tP8G>K)Y)w&#TD at h=^?125=5ZU*n2{`kK84;=0t8xsD;knD z;i~x?7%n3R%hvHrdo9Ndy0LoxM#EL6yEB!IMW?l_*7`KEDR{GhxX4Pe+R^(B6674W+(NM*Kw2 at zvir_GUd1vmVwrDEyTw%$p(E>g=zwQXhO)kpY~o`N+q2aSamGMqnUZExz7sU$AH?_4l~ zJZ_xN^?$7oQ@;ZH*VqKyqkDY=(Hk`)tQ|1?Wxd{Q;dfOUe!tE6z>g@*ag1rf*do2N zX+DZ at s0WA?QBDt6!Uko4c=gRk9&>{j0hRZ;!}}6|UyAOaEfJ{(__^OJk;Z{BqcVF+ zR-XyD8=_bIpz6GHZ_zogE(_{3n%pr`XCNVg7&e{oBWG>Dz6WhR^HpjKyIfzrnFTgpRNll{h=f&wTTUB3W#@d*0z=t&hgCNKW$lT`2I(D-^o8%# zg08_w{-b);g*K`P%sZ_cs{?rx690ad4NR&&cCj2hkFRYUuy|gl5x-RYjhp}`_wQ~e z9xvY4B$eAgOP+9FJ7cbOu5IZ-G*$A)9rJu^kJJ>^YKk60*u)rt6emC_=M_TIoES^p z*_JmuuRzmzH0eyy!h0To07cPBPmwcEij$T{Vrd7yk`4F^CUt$F_DYh7lAHIpt6uB< zBp9tG4}+NGLRy?Awa2KCGzMkrnNwx&5yIfEkW4&&mj~m*HeULdnZSELvnyzGWKKod znFfrxadx+Ncy0Odd-#gk(3S36%KZIMzNI^wW8(nRf(kPpjO8R4tNp3Y6=*x)TKY1* zB_1XBty5^F=6wJdf!YekTS?g!%j!M84ye#$1c~1Vm?Pr!e8Uk?{7a}ywfB)4gypIH z&eqOc_jf-ZU2xbKZ&_W2z2Hx4IGN*})_LcchxwN4)p66SP7lz{iXN~XEE)n0t3iCQ z1^j!|{P#)juYBSJx<=?TF?V;7*zHe at D8Fj215U135q@w`y7CH at aC7+9yJDs96m_6@ z?(2uZJVu(tzZ1+E)O2?f9+ih4o_;&1>NM%;pud{im1txGSv#CmoO$?MPKV!86GY5V zEY(IR-J#uxm)U9U?41qpxEU2)#g-$4W~}F+ at 4SCHvkhJ?kic$}bCfKC8nf z%Fq8c=BQ at cw_Z6Z{Fq7Tsmxn4cx8UM18b?CR?cnk$W=`Hb@;oC&2PuY>KT_XXQnG? z`;k5*pn?gKQzGH>LkT6JUwzDe0mY+s1KT7{jsDy at Fe6v%b@ zAcHs at v8FVK{oqZbAKqQ8en$uhYE*Pa06&&G9(IisZV#PH9WFxuytNO1ix1m z?ciaO>^Rtv^mmn~7`qo~DZBp;@!48(3mSs&2_oBZN0aPis2i-PX=T&Ahfwg`X;#K< zc^iO=y>lmBXtH66g9~8Z at t+3n5Yoh>?~6;G9+Np2OCs~>67yc49(q0h6hHEXbpgQj z-3<~FR{eic+$#V7A#?pde(Iko?t&1GoaTSKGNWLhkmYfHgsm{BQ$@Al$(u917g2;s zRDhIld*ebLZv6M%^L0l60={qzjHf|RwKBbn^GRQuyE$3wb?E#nU;GZ8 at 34Sr34h1w zy$fmstzVs_!JAtf;-(##0xIRTaD62F?`LPG- at uO$wgI;nyWkavl at 8eb+17BtZNU{; zebpJuOU|(^a!8^IOuup-R5R~zlkA?YXQgX2U1JP-GnNhK6uAk2-`{`*E>#ii%_%qu z!aN at Vkhk!GCmCS4E!l<57z3b at cphbo;_6`2i0ACOYG)I~y(t|~kCW(9PXg811oE#+ zbclpYAPt#_b05qNBFf>aHy+10J6 at ZH0cGs8;Q0nN*ogMviZ{~EU22Y7 at 3@Qd4LvyN zox#3 at f)Vs{m)EsU641Tn`9joX%$AW|pA`;5!)+bz@`J`;RQrn^O^K1k9gB|6G7J8# z-L?VPi!Hsj+-{!MJDhuPFY{k4JztRnSCZwc!6k at u2hL-iv!z>V{XLr&fy+wI(BYj! zYYfn~g+lg8+Eqtu8uUE-9yEIz?;Gxw19j`@<7iL4M}))AN%i3ub;h9HuW`zZFpu4Z zUb0P_UHWWL!tD#dn86LIGQ^=MMn4`l(80FAdAKrPoPO3wv#!1%Ike(0K;r^n at rxQ` zYo?{J?KpsZxxk*a(59t7aDN0*hy1`#zOrbfn#X}k=VXwc9UaVN7!IwtU6gJFRU%N` zEZbK*>;Q3oJ_a%49R34-KQZ|M zlP$&2)J|@{$hH!g5J5C at hhbgK0qEm%NY4jMN&ftED0iKnk|fv&Jce=@L7;u+-D-mt_ksNq<5 z`x?K+OEzae{Ty`Ac+S5Qxr=~k4+az?wA at cFic3_fC|C~Z?rKc9#wdr~bykySe`4bx zAi8JAzW%GtMhu*wM{Hvk0gn2C!-LIUW7QAOaE=e|igJ2}lg+G+xm?~G?V>jd0}xbY zY9otP{7bF+hkETBUcSq7DCE76%f48l>?zRFb*=@{=3VFTP>qt$Cg2}jxNsokMyocw z9bJ%ci62QD*C at FZ3yb|^*WR1Y$_B4dj6$;Sfn?YB`kL?!Y+tcT7Q{#2p!lCd5W$YF zf1BE#qdwJjKb+DyfCymQ2Q`%0NL?Xxx2Y(fZKtnXeSl$hmvF>__`xg2YY4_zplE3B zu{kL>wY at P3=w at uRR%FfkvgHs!XLfcg#<4M!^C7Ey&ybndd*lpswd01B+x^vcfmNXO zcE$b2QI=RnIGCWfDgw8|M$iDkY5U8BLhl1ib^hvR+}^Jp3^~gTEjz|elpk8zkE=n? z1owHnCJ;6my02{Vumk`^we0$xFZr|YsT?*W@#FtcWF4*0kGR#^7^FS4nhbQ4t%sYAd8Zu1iN{gavV&F)iq3ozo)hjlU at wJ|9G zOl^DTA%+YS_mf|0KbV*6FHJDKWudvu4r(~?eof`LDc_lTk6pE)cz{$s^JUCu)MsvR z#cbdh`z}*HH6W3jXBW6oQ3Z0UD#@^Nvoj}4PnPK9=$wWx`IT3W?w at _B^v^Lq_;-(0 zXX?5A=*(h05xmxPcPj5aKG>eAxbhkcgJ4m$1D1mm1LFP28}hflJk!2`cpUz0NSt>c z0jz9QuY5a!%AO#C;%{^pl26#3IMV2-Ls82Ys*W;9|tlMgUxSh5F-9GxnGBW%@rCV+vZu}|Fnnj zKNGI1`$m?d1qAsw>We;E0Jy{L~9)pTn70JIXjw(SR7ojd!i66aCKnUrH#--EWLq;!4mw(TsSs}=25-AOdt~MLipwy zR2L7ANqnWL5f!HQIcLyoPRR8f#%FlH)oE5bZpX*(C0 at iDoSBlRdEpc!54;o2Zgi_*S zm?YMdv?bTm+VIBI%kR`-&psBe&O2SiWuJL?MqwX(gt8=e?jJQ74JrDj#wWUukaeY%tAo&DeQ>S;x2hH at U*;=Trbi!?;&1MgCF3XP_GO9nOU$xB6QnF6?L(F&J=$350xyHkO!YY!>zrMs{& z?HVc~EcE@?Av}Ir0*8K6b)AiC$1Kg%i}nVpt#{7LRE88I&^qe~|8Tm-BOe;a?dJ6x z9$}9_ffUMV&T$UPTyJ*wLyGM9CcQ$7g>ukH8Ph7?dRg3eS}zipMSmT69EXe$EfD3z&kY1AgX97EQ at -Rz9{y(0n{=WzxCa`|2O$W>~S4j$NL{WWoi3%@B zpFTX&Cu+YSdKwiQ6B855mJy(S_vI)jXZL0bF%_xnvMce<2mH92ZJ8O5Sj2?jN}=w~l1gFYKd z+j6tq%MhNYPU7RUPT4FlAIW*C&=1PD6U_BO& zLVlBwC;_&a+oqpg-NANvIaFwFs(IJPrNWN-*S}z5oD}$+fVTU_CY3%BqMT&qo~%cX zEDa>IBv*Z3*eR!}c^tc#@FUz5oj#y+{1`QAT%F(UqM7Dw%D5A_=c5wyM+(FKK`kh# zxknKMTvJ(^mR1L^%^aTZmz1WsDX&6(;^Xf42N*b{zp4y=!X~#7A%AR>rP9 at A7bHB3 ze-A-hJ-?x!zLY4{w2=)^H$P*xdLlY!itF*u0 at g#BIP6@!A7374`3YQIG5H4CS! zm1VN|=gaBG6HVIT5<^3jr9{K8hJT)Iu#lupiQ%*D3S7DH{aot`nBmXzUj29iC at OeE zbFzA+Pa*bHl~S2Om7ZB}Q(#r3gjD=-_V+#5uV at S%sX}N^hyrdy8D at e~o{K=%7^-rJ z_TIpaw25{$Bk=Q^c4AjFvsR9wE28^S&|_W>a%(f at 6cAua43N#vz5Bv3TNPOx2^Qe_ zIp^OQb-#9I|^Z0l~GP3L1eoa;NF?dM9CzJlt6_L4p7_%1ud+IILK7 zd*xN&*Ck at Rkw-%|5`fE{L8W=?WBfW2 at xUegc?ORV-AF5MxwoF^K?E0}F9?IGY}BrV zvR*YN*qvQJww6-OIGqCDE(ez7P)hj2lft(aS7*Z$ThMoUQEABSVl6rl*ct0+^X z#FOcD|6%=cA72T3XA2_JhH at O}RrM$z8$ul`T4YCNjjhHp^@uk8dgEBu=9Hvo&jX(S z4)Lm|Cy at 7Iv9voSF*QlZbN^je*qfpIW*4IPLZYY~{m?p0yq&?^I95?~KMXXN3UWDu z4JvhJYQ@(TN6 at d@OIe})rC80}*u%GQR>k<+(j8On7#ai7H+_Y1$0nGOo-eXXWGBFl z%lHI21;pAPtiaT?2c`QH1d_HR at psPl)pjp}O8X7L!egPw-qP}*oIG`Ll74%0f=!!H z*}bcBGf^zDQrI=A at vnOcw)*vgoGk19W19#r>0CWW=F9aLom5CI5x~5}g{u)q7$1)P z at Y7+Z4=LLH$v2O0-9hzNJLGd5o|g*tF?X>J&be}>4!(i_4G09hk5PAsFx5{IA+y}z^%X0SokFD&qS`nxGDlv*6Yj7jbQYa9Py zvlJ8g)=p>AVc-qT_=fB(2L+M%#jxU!#iM=9pOQ;jOTZdsBGfyst-u7-jl090%{Hzv zef0S=&wzyUN_UXcii&Olwgf#|KW<29%&PRO^v4;+EUCdQj9#-+ey&>p>AO8_odY}O z98v}jReheuE84?lmIT{Hp~e|kTk=Pg-IBT-((QqT$K+_K zW)DlgV?#7FS1yA3L+m6>Kfeyzh1f5Mvk8qEh zGC}piGM}1wvk}@a+oXhk3$6Id*@z{T)F;#QX-4)L5%R}Hj;M~hu*5;w7|y9{Q1TQTJ}s+MxwQs;tdRaT|?$NNn)Lb zNg=b1AB+UDOIHSbEvcGD_8;-i=1T;I^3Xn2YazIGLVyJ^NI-FQ*sy85do~r94(nFA z3~}lDPxl|NOAmwUQe{fcuF$OF-X*ahYwRY(ODg?bL7%J)jYdRKp)>+Z>^_R|5X&hf zYdBTcQua2>wNr0xTtl at fTdZO?<7zKe?aJk)U`qsz7n6P>4KJT{3=_NI^qD`J6`_(G zD$`KN;6Oc_JN{HH&~w^W(<=~Xov?*mVzMo->Zr<&OK at 8uK&3!73A>n!Rw0dmX1Lq<00>;j-zkGujtcEH=V=k&!Bg}SpjiSIe`p4JsdUOYpL zP0hqJ1tuQHWP~yMVXrzou00en*eNer5GawewDqV7Z2)vIRxHEeyp!IgQ=Wv^T8egoPfu^jAZX(?`3{}?EEXClcC@`O z%K1ClXj5K=c-}JuzKakySaiMHuMZ=WYvaqw*z2Nwyt7J*d0xNL-1~|zCJ6m`TAdSs zz;^R9M#803*ndLDM)w(NQ^YTuitR7s1EGpi2SCBQgNSzDz zpNy#`@jG2~1v&(e#hG4*!^WsWgiacF$bDKf>>??YIQ>JL+3<$ zxK({noyiS0TA4gI+^IyDDNp1d)rGP30wpzYZ#}*HEW2fPKyR9xI zE1XLez zhRy=2yGE`S6GeCgmXDlSwH^2IGIER$Hp-Gm2L`GVVp=qTO0bmiMIr?5d22F%-8;^e ziyah~W50A2b$-Z5csuX*QOo zYRQoJ`lA_MxATo+;BDVV8;tM&PJMH;N1#4(UPd z1l$hYui}<~qP%h2_2L8fM;=tWB_1*M)H`=oi0j+Y-PU>z?LOS5Qymg|P(|Q%qE<4q(-O zx#ViLgu6!!KV%q5qSWFo$Ct|Q8H$OopjkuTBc1O{kh(T|__7tqaj71 at zItv7UGX3` zaL}{mP>S+GWQYfMp3tm|<6Aj0cqx}lMa&|5e>3DdgDLXs(9x(s;cf&&cdz^i_smSA zo!?Qup>?JG;bi+SO&AxBj5l&L at K8xRoEP?G;9ba7sIsWxqjk6;iNCf9K<<9{Ae*QT-#4TMw&oNV4)Q$L2iYtRR4%K z&CZAKxq&cZt+fKY_=eAZ_sJ|V|C?Vfp&r4DhB)74bD@@{_`$IkG2U0ftqp}MFd;lwHjP(}W5I{*nAs%;IA7khplt4EO2 zq~bAm(O}%Sc->H-8yMH+8Ktk`>Yj-_X{h_=aLHJo8F`3$KsQ6}Ra*Q$;)s^}Q|5Bv zqkPM_RcQ8s7djVI6DdLI`G6PRs5+_|{zwkNA-#s=uNp?aD&t&X0u&~mLFAmi=+%bT zB;~JwLfV7Zubrp+u=q-e(_VVzz&_G|0-}f8em&!)kHYn=UYb}G?dQ>W;Q2io`Evc~ z%$lko=&-=@IC=W>ySQ^h%n}>43*6Ss;*ApK&5k^_;>cVc@`!sd3rGe7D#ARMAev68 z&MVOl=UZdBWr)0)`Y3QjCM|>v)6aWCQ-|bOf0;RWP-Z5!*K(-2+f0xUJbN(D`peqo zq|Y%Xvri4-}% z{UlO5Jr|`*cV0r&?K+#K$i at Mcg;krY at hKKYu?k%X74E-wMS|v?1e$H%kW4HO~&+bb~mts~j80u0gF5lc=*@|^e5OqUoq_wK6pL^Mx9XmXlo!EJ*$ zm+1XPd)3Dy%j!PjHkN`JU1Z8zRb3w1>Nk$}`tHZ0$z!UVhz5?ISM#UMSQoJ>yp5v@ ziW(<_wx1N!=(3!s at Xu1HqYSkc(dsON+PFPjZ>Tr&uq`DqP)f=tcu&lTXawLYzG+Eh z4c*_OUyFJj#h(LcP=#Fe&_ncgpC at A97T3REqZzAIs%SJzqlVn>p3UM2 z8KK6e?Q>qYTcOqYATQ#TeE_jhj at HlJc9sySk1~^&yO*jr&z-$HLyZfH_%&-r?Pt;p z>mmv1d!C5F_;|hI7X|3PljKcm!1g9CRzhTgg4NNsIvFLJ^y1s-v80g{MuF`sKJNKu ztB=4os=eU1gSJl0@$VE+Pe$u4_dSr-|a6 zeL1W|7yHE2$P0(&I3U-CjqeCsek2Vx at ljTStsBJQU_(R)lNAm36-?9PAfc?6osl^t zllqcNxJe&n1>D}XMch|KfpYU-&ym(`o|h5w z6??wg4NC9Qw_I2;XZ*(!ir2XBIPbNhPZo{ ze5o*iCL~R2W4Q+ at d($09uUo|a;r4xyLrI46uraN$GdUsI3nb#B>6Ry`y6kP1=QfsS zG*~nMndBFZkM9iAPF?%rp`F5}%!xvzYD-}T^9`AWU=KZ_0%Q+c@?DTOv1}*S^ae-a+1KSzX4%`Su&ReP+26k&p;bQKxHn=(x(RB-dwTNhOA`6f2|tSf zkpkz{<%rHGcSI9yjk?Bmj13K&{qW44wnBRa`cTvfUSi15FyM&?L zP#TvICTn-#@l8MOc`gAu at Q>#+@#new!h5E+B1~yGciake-C_zV4JeET*nRwJp*N5DqbP0ph*GD>@QXsG*d%D+UfSs>p08J*2DJ5x}E^GE?T6MhdBRxo}rfKXC>n*xPR6adD{Cw-6<7#A({*axj8?$klsSzrDyTOk7ZSc z9^3dRBvguNC6r!a9xh6gs;|VVLOSu4-=h)Ug!w31UgjE#jmQO%L}}qtiEY*^b%g_A zA|5Y%s~vO#zp$$th!GE!jm|$`d%l&^e0L%TqIQxb at Z&Yl*SKb&YW*DRK+^XREUs`I z-MLEk^6V6j&pNE)d!RF_bDt3>0JEk at cShx&;3l!*yS}wz(jI(zZyusAvS?Ph+yhK3s{7ufw{c31<|H6H?DNb~L*Lo*swqTt)KJ3Ol%bRi5`se|)Kk#y+v& z_NmB?RCs$4L)z3+P$A-dM#s!7<5wg6(yHv|GG~Rh$mAAEc(e#EzNngjMlVe$O0l0W z+-a_E*=GFY0D10q`7?Z(*D6f!dX09R8_Amv5)wbF-}{ve@}%l%zb3zxU+0DNTuKQB=g)5O0g0SJ`kltRy z7B`o2P^Ob~v(U@#*d5D2dCwS{Y907P>+JYZLX`aveKct-x`gd_5;e5bsAT-~Zpxy` zaxF1b$6RHy(z)ricy};fX5NX2wlf-$N60@}SP1^X_(j1tYH576dxt+*DKQEm#y1#p ze5U{L(bu~NQsIQ at vH$~fWuNx~FM~BV#Uiri7R)kYx!Cfam(Aiz{TQC at XoFmZZRTIa zC^li{+7*4V%kJ)9iS2cc&TfBLnkSQ7QIvV##uJ5wNdpa-S)&i>b!2++LoQ*sQ}X$w z4_6M^`%uEKI$GamdmPLv*uH&Y`W~&o)Y1w40C9$KkFC$|kc7}@jz0KPLo at B!5&^MJ zOZ-YelCCt>xMiPjnrCgJ!nq`_z=Dpql@^U{sE0anHx41?nqRP&6F!;CYQ;g_^ABZp zH2z-n1?;NiOW4zi->(|;Ul(YnLKEy}h6$epw81e>OGmswr$G~!xxUBuFS#5f3xX&N z7Lub3nLnuE6An2Ymi2_VH&mFJHzMzX+>e+tRi(tG1MjF~LY9IZH;-kK-_T>Vl at j30 zUS`D<`BCVG#^S_1cjJl-=NhOyvGeG8ehmvnSEj)l}3ERFc^mb*8IVBg}A z18?iYmwR;*cSg-$8fzU-8bvTNVZE{8vM-J*sFH2++=;&nz)sQUR7hSN8I;9Yb3+|- z!q-jHpO2Ae-Ab+3#tt~pEq*KE%|s}8qaG3DM3@!Y9M{o27;}h1ueh$kamFc=+=}sj zX3+wu4jw2k-P+war_sk=Cph at f)Ce$LTp;82s!Q2&Q(h40uNTtQHW2E)HgpX8?xDU< z`lco|j9kb=b?X)+M=+cw(O6s_$mR6Kbq3a?Sy_6QN8kwnDn z*yY0{2bvn`12HN6xR^|Rfq2uC9hltLRVSKNQ2t<;dX(OJJ-3)m>Cuu(uf#GUU6a9g zKX`0B_1FdZty{mXS@&hq$4n_dsiytyL(-hlA8_ss7zJ0Cln>3I;!X0<4YumzN at C#2-CJg=V7D~por z*~WC3fna-BF{0QQrpUZ!c9nFz*W&pFt;IX{v7Gb_Qb?EAu&+fMjfycNM3eb=>-lIZ zsygWVu7G at Z-8U#zVtK53*o-NUp#I2gndukJM2bOi{Z=`Y67!dBT)T->s0)Qii+HMP zs0p_~erD%T-IWYtPxV9sT~Z0mVt at HODKlyn_REbMgtgAaqG0-DhrQ^nJ>XX}omyj+ z=cFHLL}ThRQUWT at Rh7*va-?M~k)=FOfqiwgaI$xcS<0g(3^`|O>jFaZ0;({f$SiCxsiFQ&vX?bl1dj>x>xiQQzfBUnPM9S83`I*8 z=4>u;3;xJ*8KhfhOD?jHB_2x2D!XIJvBj`&|!ua{;*J24a*@t*N z4Y-kWMH_|%nqbdNz33f`+8GzTzzTU;vZgiCt_|jJB-W^Ox>tqGbqe+~;ZjCfYx;84 z*t$3Eb59v2M<}9``X&L(2)+;XXyxS|*lN^wUboWOKjI z#SMc9$WOIb)>U=`^X?+Y>I2kNk)3GAlgrL39aVZBBNy4;t1qu=KJimxMw9lpwSV$Sr!_^fx?R!iyh zVaqsAP`j^fY1N+q(G4%^(5NgP=iDCju}rcII~}3>YH{8Bj8NPI^YcSSlXo|r9{DL0 zaQkZ)G18FeMx;Vz>9c4-hJStwaCQ2g6KQwIwpHL(pa<3IIiGiMMWE-iUIadQUS?@N z58>c3I9O^1L@=g)@sL{6i2TtZ*W1^z-_Sw$&a5K141)odZ3-H;MWLv(x(mh5Xnnn*18p`ixO2rO;Ghgx7c at 7&M-+Z;TM}CTFPu7Tc zanDud|8teIObT!5EC?%2amx-Gj9fz?VTf4L(kXBXr>jRMA}(GRBgdQwm-|#Zw*S%u zqq$w=ndgE>sBh6|jz>j01I)})!=id?_7-`2aoe<081mzOB=!4nuX_$}mpiVkMMkV8 zL_z|9IOE-ovdqsW&f12Nn6k)<2*c2GWX5Ms`L3w-iIexmluvo#zz8zH*h1vSy?CX0D#uaEM129SY>2Y0%Mh^S&-*6>Q2 zchH3NOlp7_`^^^4F3+h*j)8WM()8 at +zQ|yNM(pvMlQG}pD9>!p%&AzRcE;&wk9&@n z5*KeziXg$uTOj>3_VX=ngB5U>5~s^vJ^X;mm^8Y-(spCuG?2( z>}G4BlEp9F4;mH{?_5JXumfd(J*`*9h+HGR);2d15 at YbCMj{q6I>?A}BvL!)4iDQn z3e|#l+1jmyd`|vk4&cjywY7 at 0pN$0JCmR(`rMT1H#Z%oWuZr5_h&YbU1k}>tty9Jt z&D^ZHSkJ~ec^JHqizxJ?L==#;KK#}T7<|X}k(_CIr&=Xq3@$$9(0ny>F~!A(by*5T zw6w1Kr}ZmGQ-}23Vd;%TNhw`9-rbT>F*X{U2Wo;Ei-kyda1_oQ->Mmi2%pN z=e2{q>j8p9T>V4iu;{6zz>w(Y)Sx(LtXAxiAB&Nh=AuO at vA{3isq|3M^={ zxK^)-aZtX#O at Ful?D{OUy%jAw+oOVxldo=hCjKE+?KqO at Q2(I!$Vas<8Lh=+z`n{L z6}5pi)n~z{0 at AiTJ%+79_&kU=HAt*-8TkG%_`u6^m+iR>)^^6nT8_LuOk49A at K*OV z6JF?Kw>~X6cMNp6v2WqVMljaa*p%tP&PjT)!n;s>({g&KQhm6t&75U|8xr?x-QiN1 zQ1&FzW$0;vaU=abJ(rIOZudaf2}8Y`td@*4GI6nPpw#ZDu0Si>Y&_)76Nb&K%Mejh zKMU~)oakEnr0@~l^6f{S8 at SjDX#Y!-uC{GVdmCt7iV+l?ka|)!4(+7(k!6)85X*SJ z4!qaoY_mY1_Qrp>7EY<)FvKv(jqlCP=$APhVU@@@;5`muO??F8 at 835lLU+oJ2<>zH zYR!b at TqRuJCMP>k&f+hEv#~?mlAA6pZ?|}m?8%c-NP!5^AG*p*S*vDO|=nHNG{g(eMSgc&O( zPQ;9BWE6GM2d2Qahyv7)i};bQ|I$&?eGgcOZ_egw6a z8Zi+>@6e^e+BA^B=4-e3c!kwR0z18QdCa4w;XDVxL_ at jet_wrDE|PXd1>d3Y^hxYCDLS7T-04pZkK*&244?i*H$0aR;eLG}e$&s*hfw?oBcl>gZ#gox93GZJdB&uIs at ingwg-G5jg3fl zY#489eJm{e2HpKx_6+dJCbnIk13a#GpxRkcLEAf at spZq1(8DhcYrClbw zg>Z||)N0wx0Dh8XiTTXK4W6if8uh+D(%3?)d{r&3uGT5G9a07wNCIJ_j*_~h&;SB@ z8d4>vC5 at fEv^m1afD+o|jkinJ1sXBYi}S*QJ& zpVC&G)6;hEJkBFEZ3{|eUuSSYi}iGsRdeB28=KE`4pJ58c*^>Fr2M;9RxvT$*%8d5 z$}R_5>fH5Z$j(%RnTq3$p(+AS+BSC+r|ORFq|rcINbI42EXRAd6tp7l0E-vB|KM+v zqya+pkXZp8)~2}ieBF3zlW+a%GqLYoloRM%+|(1aV8!=rAnaAp%ZC>#+|y=l(N8_W zv- at 51E;0HSPUVIBWz at c&wIK0q?4s#vM_9+uwm9Td0w(pCq35kM>2N%hY%uo1cpx54>bmqTDgB*f9sMsWUgE&g6M1WB$H*@5a=M^L`AG8FdW`E-a6_m& zs%${VeF&cS7;Ej^h%{bbi+*En`F&gOba at zbZeL({!6rjM3EnjHbzWn|$QfpzZR`6^ z3RFcPMu=6=JnZ|m_IYrVXbVxdP=*orqQ$Pua_mjNOl}0CbCVWZV(-0ll>atcLv!WR zyy4GA2uAaa&1q}LQ%xUtmGA%mH%S5!7)zN?Gdx(nLXnVoh^^jgyJ{;diI_Op zaTuFAd^F?mv~&E&$3MjYo{q*QHfFB0AI&VR?8WJhTRZ7!txUz~wD^^|lpSTvEUgs0 zoy|18Ro>1h8UakUYr zllrSdT5V-DS{VmtGg>|lZgvwcUOrkr0S+EP9$`TNHd;+%SK2qm_Ov{Lv^-o~4}W+> zxVc66xM}}&qm#gT*b;L#H5bv4mHStn5C4hNS-QG9ig0pzczAGl at NzgfTX1p<3k!2{ z at o@6+usVLKAf7}261WGg~t| zGkaH;2WH&=otdeLh`EEaow2Kgm7TGL8KA_$~1tcm2Wj zTLgYf{Ks8?aQzm6-xB|E*B at NJMc}u at f86y4*KZN{E%6_B{lWEH1b$2W$6bGL{T6}W z68~}6A6&mh;J3to-1P_7ZxQ${@gH~n!S!1NeoOqvU4L->7J=Uq|8dtJT)#!&x5R(k z^#|8)5%?|fA9wx1^;-mfOZ>-Oe{lU4f!`AUan~PQzeV7;#DCoN2iI>A_$~4O=q{}P ztn at Ime^}n(@vx3VhM;B>2?_PvYgwtcLa}zK%9i@?o&W z>E|Qr$_k}q=e0YJGW^UyNWj?8S;fU0RU`k8tCoO;Q*^!4z3xY}%%X2wbg4_gH0xuX z*lg_V%Ft{s2uChQ8ESQHUh*Loyf3lPz&0Ej`3s3V at MR>|q7&8=dk6TZJlbl)C3*z` z;j2x}(C(|g-cGOsD%n;&=Y2lk<~%XI-y^HXm`UsxNR6PJ1(elnBWLAsQIIGPYLl^` zAfnBy*K_x2;kP(Q3vZZG7Qr6r$1d_$IG2kdY;xSODRQJ63_QX+M}vSumJRgj8rxQR zrALHzPbSz13R?qva^xm$wO_v<^k|UDjC=a->8L3c5v~VvjKHUTrL4d-IZc9AUg;Fl z!L3^67?EH+Z=L4~){&UKH=18)Zce#6&j$z3I&L71hN~)8X_;uIzGNT936WoX<0WQ@ z?2+lli{`@PZm=(rm6q+|PW#Cm6QNv|_szM)H9Nh-j(OtR7tm(d>3K?FHN at JrN_$-) zF(ZODjWx4ZU_zOV-&nX-?(o`Hx?vP at 9XWY1R>>F>^W&)CknhRQdTPCCqJHCL^7Oep zBJelCxAx!X$e~dm at k{NxxH(eakZkOg*WmF^kD79nztG;FGHRHA>q+yl0&fVH%(EdZ zk5b(bf4iKX7v*FdyzEnPxV>>?g70=%3N z;VNJGh4($)EZS^Fgy(!~c!FNO3n8%{NP~;&`tq-(Td!ZK$W}^!2>xGhQ?%&- diff --git a/src/public/images/addhost.png b/src/public/images/addhost.png deleted file mode 100644 index efa3c570c72182d6e5897bc53f6300114fe4d10f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 789 zcmV+w1M2*VP)LmCZ|3Q5eR5HyjyKGQ!blMl)?y+AauMG=fBl6iAykMzjiw7J(7{0YMbxDhMKK z6NI#wCQBPq7ZLVFlI~NHC}+^n`+3eix5a#T=IWT*ySnGT_x_&eJm=hVjUWivY#D}8 zHtsrkA_?39egXF~BjaOb&uNV1r z__6>GN1?+*Jp*83;seVo%d{Wvpridr$#E+65-BB82&53J&aXZDw8o)+Z{YmV(siu9 zfoOCmlapVWn*Pq|Q{626S;Vnzgb+w65JHQ^{znvgS+>di{49+Pd#Q?4GdDX&Q*#rx zZ6lE*sh?*Vvv>G->-_agHnoUv^wux=3N)I;&fH`qudA#Abp7n z6wmj(z;oSIxML%wKnjT^RsgPS>1+YW4++BjZySux)%RKV?-`%~t at 4b8O z*?a3uTTNGWb=7pw%=z>;^t+rm;%B_iU|?W~k`f|{A4`;v2^|*tW1eajIq|XhSvZ=w z**RJ{eGyh-O_>*i{Mhfo-ceP}J>zV4$|isb<%huogd9>F0hAk>>$TJT6$@duVY2Oa z!|$QZU6OMke<-^SWE4FC;Kmjz(MdCdG=HgLbbdn3Mxsw*ob>q9pWU&HgQt2SxQ~ke zl^&6Md9Fqa at 1K30R{Y6BNz*)mgo8yjGrMu}k*_S#zC6cWX75*rrBOt0Ht&s|CC{V4 z+3}SgHFn at b<#Kv&+C!>ek%3Az&-><-e07^9ev6kK;6hKCt-*~I_`cY`zbaAA>*I(0 zRurwDLf7;PiqE>uVL=2ueQ7NAeLqgzaGj*U?09W}WS!vqwqX^fpN;(SSc%gbgPe+(@K90gR3fm_%**q;#-xT zvdew(O#+>^vHa;@*7p# zci*U5+3{xH0!R|dkMtMd?b7$1H#0N3&hLq|N%H(=d at J3YR?d5XnP*#b<@aqI(-3Fn z^Yh+kQoJ)ikGiHvto;yH81-KO)*Z9`%SrPAZ6CeGb4U<j?7i;nZ2FrncKYP~{gGPBKv=T!DZv%|sq4{$zQlm*%55oc_I8NP?X$f# zlMV9HI7!R%q!A~#@q$rb7svcHtW~}|?*O!Fp_BEt3C{o)rp}_dkU>p%x1lCjx*6*t zLS6K-*&@e0?%EUq3vNXV0~lVY~wf|Os(TrG)sC+ZMqBoT;{$vYe!p at 0jg$to7j zEw=Jwg5t|mPzMma{DGkKf?Jh2$m3AI4gHeMItcj;7#?j^csZr?sBVh)`-*TNWe9}@ zSBOJ+&=ht_sS<>LqB0S{*agc$P;2VG&TK;+utgTNg_3u&@x=~k0OI4Wl}XIrgS4pQ zO4z5S1~=Jcp|*IL?qt*I>+~M(S_Sv#4W3B7N7}rumtXcelSeuf6QUOAe288i&}Kpe zSR$4(o#8i^6E%2_SGhO`kzaw6;ywq8R~%vWPdmy6<(ouE8zl>5ryD_M;xp}1!n07{ z^0`>3lD8Pfs6ZV8ndBxei!cNmdcau3;;aJ+NHYyEb`g~^!k=nHf2DN7Enzs2{?>%} zUR#5SI9meg4CW=yCdla6hhV)QIJ{(-cX;2 zTM2YAyZZ*m$wmkS4=pL+i}N7`Sqa{>V#NK{5p)U?a?0UXKp6~K;fgViry~;oHGw`4 z8;8#--HR=fv_!EzlFinOJToqe>n>?F>Ov)vA-%)9l?0a+0oI5Y4($&1CoLYXM at ALz zDMf`jW-ia1rwQ6o|6|x=Jx)^)c!CU=Pa`A^EF(TmASg}Rh)n*5eu{Utz}%oaON$Nv z&U~+6{3V^CQE`xlCM3zEWYUtU4iBLm8h}rHMA&BKTrOOwNfLLrktnv*&CAQ6i zp at ksIGKEHc>?S&8O3i|*)P4AfAkGRSE`DI}11lP`jw??45>NXY&lM}hS{g!ziDv|E z4 at Hb8B=6oURY6V>442vB#q2(h%-HYk}JU~8q35#zc%?M(On&{+zQgo=nikcDoH6van zQK5!|Grm);s;}le{YPpNmyIVt%xv-y0k7=~n|vZ^ubI(sxP02l-P}a`ZftB1iX)ED zcqX+MuyrAwd;P>G(_oX at zn?ON06M-${~A{Y5HO^+{I287Y0+#FqMeIUAkEa#P$&Fu zlcR&h+&7$p6vRryvXo7m`8q8uXTxRhG;i{~Y4p*|3316k*8B9Hrt>xnCT$&EE5BN} zG`2hG5M06Tm_|71NtQLJ%#kUM4l6R`MY^woOW9E5o;0KeN;awkssuGu;Y4OR%;)xV zS6=>*#&ktAnWTBKBKc5eLg$Ua at MwqnX@*x@#jGZPAloE?XD;qhnG zJT17_`9CPHiXjX_0&eT$An4W#i^ z9*FVa5o3P0QQh4TvJ4Bp7t$L>-LzlM#dur(`iyBm%(rDPFuoN$g?|bhdk3V{JHb1)FsDb}a3)D3#Z2$*2n?1K zPD-DO3`w?m1}SLl7^{xYA$nlgFy^yM8#V<|#_w)jxo7+Dt1^s+Y&y!*6b47)e at 0SQD|Np0m*x zi?F1zMpG?QtCF-MM4?-1nJtT;O>g61r?au>BxclrO+uhzIf*5uJh+5Gmfh3P&t;%S zo|aYXA@#G!c?^~hFxl`2`GTW_|4Da41S=MuRVEp1z0SkNkZl;kjr++6v)cV$2Q+v=!#Vu%kMYMcde2q=|ryH9qv=Th;6FZf^Ms~lic1p ziC(cGXipCBiP59H3*|Z$s6fI~qcmP0)6TN)QqfL{pfUt&35qtdEM`K~uJ4)No~p-^ zKQ?Dq&kI>aV-{bJTEk#AV-Ovv{T9)7;)*F-*kJM79hAU@(P{GxSpfvfvO55OlVHahcZm>Wm7xNJI1^ zk;!^Y4Ud#xg{2Ui%{vgm(Dog-?{hLk0BdSOk|L~@t!E9bvL)i(>+gh3{34p~Cdk7E z8SZJ}TFgUS9O!E1`ZETWO$u_FK#{B)aYvJN$V=}~k at isr1`-B&`Icb{M;sW*FSbdk z{zGw^rW@|Ha+`dgfRre&oKOx8)QSpt!k-b6)KBrY%qQIPX(y1gE42mT6i`UbzoJdk z3sm+{~+kS-4U z+z=-_{gYlp3BxjdFHRAwsLx0Q3%OiaQoFl_s(9nM)k(2S=D569IW;|tM%c at 5`OL-E zwq=M4 at z*Rp5!CKDnq(e{%K++_g?Dxo&(La5OYR8R5sU313qf-WdEeT%U?g0G#daUn z3`6EK$~G=llJ`ZJ+r_-E6b~83=f$cN at hWg(ZAD^?*?@0s#LWBC?wKjqO<{kyHo1w5 zo*~ZMHc^?qrq;ZmI*HG!!ihT{+5iCm{1Kw+oS6;_!(6rPuS(b06)xNdIzO*xT@*W+CV5wl5;STX`iWmHm z&k`=9lKw^|cSRGPvz1;{Hef~UMgOKRl@*7HuTYfdWtq$mDX zHGT|Gy3^{)#7>HvDZJIC2D3Vv1=2<V3z*Y>K;9go*brnP)n zNCSGE@`Q-iP*&tw8q`k8DNo8x*R)hTOQl01$oNDmd;gVBpM003^`M%%?%C~Sl`NpN zkA9^!&E?VkBJR>Vv`SWTXA*vAQhGkZ;`0>qV3JO$RGC9F&*YiYW5Ra4TR!(pqyL66 z`=(p~`a$`mmieUCVa-gXZrN&hA!F3M-u<6ewy_(uu@`%l zhSjb`A2gBT`?1y_#lOfo-m9E6#oTG9lq~K at L{KhEoP1YnEwtcb-eBkzTlZrz^Q)J_ z6`OMy1Dp%-*(OE%SFoACPj2ngbz2qH#m_uI at uewT83eMu_ zc~C|w zw|X*ar|e?o1N zReb~1^l!TVB&L9^hywn^aI7rtU|@D9;dX^fw#{08r>N+a;Pe?n40)??fNh!K)w)h? zD)H*#)NFM5rQu0TBMs8z-IsrJ=L9B=CY|$^Bk)*!m3`sWHe35je^utV$Qhinh%$<| z#MN(nM;v`BCfrbjPKGaU9i%~)zQzSF`B?dddF|w*vrvdcpO4TdBDxn&yi*uI*Y3Ba zu5v?~XdBE-RHK;;2!i@#AySJE=f>BtRUbq@`MI at Zrmw8o8tOU;<=6{Kj^P+v^ladJ z=0q?lP?AG*OwGLbLi&4fuAO;tHfCn(yxzn~xTwKfY;lAQg4;t&{{-wrgU(J{f9AID zZ9`geIh^OtHU-}nRYR8dOgwcgm(S<5A&&isu1H;;xa9vq|A^QadE~*!U~Sb+lnFp0 zT>8}kecGirGpob7?P at 7}CXZp~I{=!zosCToCDWUE&a*n>7r4hSQ#d}P3e6RTn4vJ5 zI?O28mpC}>R{8cc*#l|bM3=xe0#qoZx)n)x%WLmVpJg~~Ej>h_b?GxEoQbN10(TVA2`zEEf;zcwy;jo1JaVWW+o zkPky+?**(AZk&h(ZJ2!>*?VAZj_a-P1c)TpUG^WnNmPrj$rxEFQ~^$8JW50h*Rdev zm`B3njeOmd at 3&WR5B>lA4W zU6TU#LHC=>hH#j?Sp-s%{DLj}r)jmxV at sxEOYCL~89F~|i5GOb+4!#&99j?;cy1?ln#k7#SLI*(1V3m+^^Kx($AisxCm>H>Iq{}$4&bpm%? zpEcb_V6WXjOv_CkpK=|WVi#W^&>`(-2AjR~<=VFls=)PJLRc%pZ8kkj`%M<4Dsior z?qN2I;De0QJlCbS?#-o^P;Q}{+flqS8_OQ#+ESkMGc#R0>w@|%41 zq;Gn|jEgdv{EQPk9&}!5Hlqv;y@*3bwZ;{xGjSSGbztCT6g5=47PJ(!CMNQ|3x8Cf zj*ZJnj*9z+(zG<^C-Im&^ew!G^XZG-jID0H80=E&p*?pPfv5(OXz at 1T!x}1j6%=0^ zjnP6Ys-G@$ z{PugOK2>05 at erMLU!bJeA`Hl@{n%@5pt8Euo1EuZCCkHOa&?D)XeJL51Uy0d>WSY8 z)8BVYWfFZ~X}q*MEaE9PMRksnBkDR6!nuq)BjxG1q_%tJSMT>(>S_FEaKx2M|t0PCR|?jc+f&xoARl zigPbU!YV3ud$iH{F8ar-Xx at RTPoZG5XKd{}1ug!j at aHj46%Epubel!uI6fv at POxv{ z%$j5MQK~9lGpjzL{4SF33tG02t$`aCbqc1 at g%chVdz3!&8zEE1;pQ at NE;^TT@@NCt z9V5`E;s}6Fy{Bifu6cQuTr!XH=!viE&!@a5^#Blq<4OF2eB--^*vW>)_T7yJzyS;5 zI<@4PUnQIAB5EQ*0;6dq7Xz>MA(o8CQbY{TOT4(*l_kmnaps`-_(8;9?0qfkYjuiW z;TQ(mHGhOx*EnOHkEg(?Kqp#H(WsdrcPp}GO5fpyLte+2S7AqZoxob*#nB at v9=7<| zDSLRvQwAyV9(}-oeLpuLz9>F9w}SZLyczx}3J>ROf1kt(c^t>dx at 3Auo5d07n&hJ2 z?D$}ROWOGz_+;Dr<^FwLV*ul!cTbo_>zFe^17?SeSw-m8ps4PR!{`Zo+c{ZR9DLhx zbKVQ;DM&`)qC8L5-Rxu`q)hK+U86(8rh*@{YKUy? z?_n2n$ylp8%U5N-H~*9tLOj}4gAo28Pc_~7r!@@&|V>@Tcw`Agcr zB741gm%DcA>I$A;!L>1g8Jv>0j>%A1tR?2#F^-DPhj6`w^|lf>xmN at Ma%ng( zMr~>8YuhRje>84^H||C5L0edjC=FY~KzrzHA^DV97|KWjAm0d>RJv(ZJV&hX4R4=g zNYV`YjaEmP?h{9vlA#Y8sDkA)!XkFuc{Q1r@}us<5K*L76H)|FQ4Dq;HhZCs;(ndv zbJQO#HZ`;O(R62 at 1dsH6ae`^W5Qh6G$QR9BVk7xqzr3r^R&TW0^V%h}?_f#_|8!LG zGbAb`*n$17t9W9*IraN?WOYDebB8$mNFccwg0h&C)uz0wokZxi&rjr5a$jNe39xXV ztqY|2=_Tt4t*Zn$Ab#m!eGaoNbMWGiFGNHgRhCG?0H;6U-&NkoM zvS>%T?fF3DmOY?dgNOG+BA~22=HT-p8-(z-PQc^bZ#v#lJF$+5e6m-}rGqDWJ-|i# z7uQImHOckF+9OT0lXw1`)l<3_kJcCU7ulY|cOUg17TwBTWtoaa7)IySdeR)Ygt$-8UV=1<(S5sJ%I3OWzjwgw+c5Y^<|bme?^ zF&B*+S{*|E-_6*Z~z!I%P>Ues?c2|d&S2Y|~eIyZLs1-jP-BZEdJ_)0?x6D)W?7;0d= zia^j6&2 at RT?5Slkx#%LkRxw#=xk>t@FkjvVmpTs}~ zB|s3MA at 9J}8s*_V)d{NsaTucJa*fc7KM$8WUAzr~DA1Oo zMrg^>mvGmxt at NqmW#obJ`i9C^XqjaE~yQ@`q<<=7Ys?+3eVQ9z(J0NDEx=e84S-O_%4otQ$N+;_XMB2^u{=Exv zl*8Q-fH8R8&YqvJoj{N_2qv?3#gwZ-SV-S}S!Xn`pr!CFedT-$CB13}Uw`UCLHc>+ zlj8+!>H2_EM z{Y?s{51(J9*N?tRBBCAPrV(GHE5{B`8;FJlDv{_aM=xFE#=BN at I-asak6B3Gb&{-x zmK_75sCD*8;WQxH^SNWH_9RIB4uH5O(j8*4U-CV-T zaq%5bt`)qsk>wn;@5i6iK#6$TOQ75%dzN(ygYcoBkx*RVH4m?={2&i=geik$r2_fy zArWI3yiYnCkqFyl!8IU*r~uTZ2ZRu-F#OOD_?_*IZ_v;iBmArOEMI62uN-dhO4xFk z&mnogB(xE+A5Z4)Ah{i~WI`UtWfCDx>$L8UORu)C^mxe at Rw8AORW5#;IU0R)_7%8A zU8?n9HcJ;Z8Yt#H4m@|a|ATGA#eY8SiK#j%g{f7h`+EzsYRW|2+PUed3v=-qC&l`Y z>>2fHTrjiYY7qOD5r;GcYk3t7l95!4!Kc1%!9FRs+Zrt_Jq3 z0_;z1fWu#nVn)q=OuuT_2~Rz at Y-Tc$TG3nGz3jxl^HssIHD&JJpT&eD8YnB|6AFJ=UXT&8ScMt83IFR0 at YV zatPmw&dbp7e(p)f6%MeKm5iL?fb&|L`Ey}79Wa$hy#}!Ma zQFvH|zxCQtT3J<93RdU-5&{P#vn`u8q@(z+2u5NO5`I!mCzvBl*rtDpnInIIM%z&1|K!IfQP`DhlE zSyC}to%feWtl((^D2i+ZZD&7G;mf0V at hGttt zsQy#7sR=D!kqXS=j~r31|2N>FdZz!c{Vsg(7Ze6FUvi!W)n}(yjgWJ0-5^|Q)Ogqq z+yrczmaZ>1+@|x33}w8f$WniPA3Y*SD6{Xyp4MuZWK7Tn8k=KJX8fMaFqg;p#IntS zM7~5GK7hJ)^NaoGZvQCS6;!N=Yv>~jHR4rIos$Bz?li8`8XVfe^rPG#lb=*%o#p*G z;6z{*`^Mc&@rhypQxybbcA7M~3V(u>y#aS)B3{aXCxEROe(2 zofjMvjpUoL=?dH?SWF{gQRtc at N7}%QxS!@41)s~Ig-g38EvtTy!lHCU2w70)M&X_& zcU~D7mp?9FI2n>N2v_%gCr79E&+%2mun8hXXQqgVny_bcvUheSf;PY65)3CBf~xGI zs5CJ1A8H`){FGap at g3J(pFrEps~+6hEp@# zB~hc!MtaVO*|PmT6cyJj#SA`;zz<%T3 at vv)wGQ*;5c8*`bbM`|4zYOLq+-5A950Rk zK~F-eU-csQ!%uXLI7{s=rpQhqf_QzOfi9kYnt;PCyKerDUAVoQGTIJHM+i^W8~qyc z1;sx?q_biW{5$G+P~EtH66xrWl8#t5g84FS92X at X@euc)7S$EG92kNa(Qth8oTuoe zJopRq-ZipD#M$iOh5t{;4&#PbBV;BWaiO?b=+luZLdVL at B28dQtV!Zo$!Cb1rSgE^9>fuoLQZJKs^`mr0kpFR7p|=?y_# zXhwOdm{0S$B2Cuz_^#acQ1)UteG;&OP5`CXq9~FZ=Lo~sm9oK(z*!9Bv%vNQvd*nK zahm6Pm0Q})1dr}5-;5qYZt59HY`V|v`ae7&<;Gq)A#8q0NnsJm0V`8eG1avBmx9kg zSpvxkSyYt-KI1oUQj1^~-&{(ekxXNsWX+|>A^Auyt2|?V`?~}O=R_Y at q&2A<_#%pz&98evhMC5qFETa|uTMw+4^n70jQqU5W zT?Lk~o<7Cz z$5xWcrjd1_>7Iu7wKKgeXWGBub=*P)W!b+$|0L6x%*81nWvr5(Kv((l-{v}t`!DjI zOi~r at JSsLoG`zqk at 6bi9P&&Fx-xA_ankz|+_+yorlro}FjEGHVWib!nAMv;1-T=eb+|hT?l)cxhEh;U)<>~F zMpGD_{1v-!&@plGXai3jjJsORkeRZBzYG>XuvkZyI3bB$X><;%Rpaf&Lj;m=O`NP? z7u>v;9q}PIW5D3uU_dvJb^VyPj1s#LEMl_6u5pN5PjQ}9LdC}ZLg zO>DYU1>O~;3`p+d1KfU0<0t0#IV}&Le+*C|ZuKE=zUUGIJEu*e)u)a&*s4cRS{`rI z>^JaN3pd_)#QLN|bRH|yW&V7AN(*BRJM%5LA9+i1?@FDu8{(gP9y5G1oqJO)*vPu} z#lH;htX4zH_qwo{6)!Q8`%IuzF77j*>${d~;_1wa7s`eGqd{i65)S?5li`Nsc)KOP zS#4JBNmeNfR^LwT(ntyS|21+OS;s-yBJreH_l^5_K+vwKtZ}uuarkx~eO;^NHI)Sz zvJuxmguX6NLMFFQq)^VNRmQ00qL*|u65PtT!j|fZDO(*hg-*zjt3YK}J}(b`QkZ>S z$nsW)%I(Ibx(H$Mm)i!BJX#Aifsq=($P++m&YZ5*slsB7YIq~i*t&9F3w>TIzPYi4 zYvs*7i?-&9lk9}4>4Mx$uRaT2VG&UFM-CS&>j?kfzj8HI1^OQcMm%`P?*e8>?uUoY9?7p8R~U5E73F ziL0>qU5ZfQD00%gS3p7a7vHR(#>!9;HS0-$D}%iCsZJ#%3q>d-|A^HW4y7F%RTLI# z@)p3V?^g*?(TZBzig&!%5? z-nlMX;wkwLu{F1q^+xZr(QY>uL)J&_GsD^O1=DpMJudU*(`XZ4gMFMrLJ_;lVk3=Y zR6$pRwrs}XJj^v$y{0MbHA|7TF~2~c(Pr8z-kU#dDdYhGSEJP4ZR5dDIZRgT=|h>U z-}^B+-Uw(FToG>dR>@;h!*tJ9eGFXmL at wPLSDKn+Tl?<*UbR at J*EN2-$nSHT+?J-kdYdx6te(hErim|<6hF>d$5z)UJ?cut%(af}zu zpnIl`@ha+U(_3OYud6tVJtGc8A6bMyChe5%?D6)>TPk-%zuC>=v#4HaC?KK_Xeo|x zW^){1m}QP01^$C%G#^OD^b~>cKafly-Zb#s2<}2;5&}i>KapyoMq7%hA0fz?X0`U>lf!WVpF4e3Gdob{x#%9()7#e>n|$#9$G|>(hoO5?&*&p->cKzvFN=LN zmjQj}k%#5tqcHNn3V-NZD$c+{yoVa=t&jd+==uw6;Y`k%AM|zqwt4!OzCOrrM14+A z{y$eAh1(1%{`-~cnblK*+UW4Hsn1SHygaGgXR|TMw8so#!3n#2{z;K;B%4vgExow* zU{8Z8+C;uKa;Y!r4~d6$(kQ!=Cd)`H)|bsPk^5hKHu=W+Wv8LIs1+*hJQ`LKQ^5Z} z`oduaYr9IGU~M1|9cmCY0p5?)i|o0Ut)P|HMs$cs&&Kq-+Ju_k-0Y;t`~OBa-|+tp zV;{^abXz$#SyQg at uR&a>{@KTJ8=oRy at 4z4~Abq!uRUh6Kbji2XXj7p27V1-KVi~_K zu at 5oezX9PGQD)sO9-V^MxW&APN5abB;3WYdzP_ttE94+IO`ULa46;@z7>v8!8~oh{ z!L2+ZiwWnQ(LDXUt%B4DAv6s#r(oMM>baWBud;3(R=CtBtW2x_t}?ACdY?5VAy9~# z(42M;?`ukK-;NPkhjnWV<~QY;5i at 5IpZ_HfHdl#Sn1q?&#ElP+8`;F}A86bC&(PNI z^%vUag{_W}AAJbtkOy`_Vs4&-HXGd?#if8rZ^@{3|AxZ+LoXX`rv5vy`+Y5m-gX)q z4}>^AX!sr0H3M2^p}z264WU~C-R-))mui^15KCP_ZzLWB(ADAKK9&>iWDLphKy}zB zGXzj>;G$-zwsAf8*cY`bVw|AUmPT##wtqmXfISOvz~A^hWA=u)d^&o#$9%MP^3%;T zj;sAqheKar`x5+pc!BeCgKylC&t5$MQ0jhCdyz2r{Ms^DF0U)F_I!X_?pGMPpk=nS zssTG_R&xBH?BCtW3s53e*tLyTG#_0TzsH#iiD0`&5^*^*CfLC%m{6L#2!)7zZQ)lj zWCqEl(~$3a;fze9<*Pqa{W&qg5Z>fyxkp|)uPmFP*EcZUKwa`0C9(!r6&q&heG93U z^CWI+5uJ)+K62%bt0OpP2o~{lj>0f&&o9kQ&=v8WIi-frE5+uv(y6IQb=TR%5(jzr zW%Z{RcT;-NeqmfFEHaY5X8Yd%s%#vW!^bwjtr5ysJSC;2qY+Dy*ztmLd>xu2q+TmP zww at aK*_NDCk6L<%tv2!a266ExpO>&=8xB^A2%Y{KFV^>Z&aorowMqAvqRgqqw*SOk zmFEA2yHJb&a#xuLw&$9-P&EB*$%$bd_A;P;k9f1kVDyGn5^fzv!-IJm5S6#q>Nc&L z_hupKGx6fvo+Om+a-SwT?k$();$icQGtO0LL}sTNhwk#~r8E7Y<2WZq(XmLbV{X6n zl$v8_RQ~%iT(r)Z-`Alz{{j3ZGS5%fBd?GQ-4r9${#?gcXl|Y7tAaSiaghjNqPmar zHaHV*g;s`$_iM(>k|E*_R&&Tqoy*T+6gRQwiZ^>)zzG+L>+6y zanZx~WMPIjeRdokpf&DjS|V~OJd812EFdJrpXZV8?)$wkOK`)x%~SD1%(6i?Y&U~d z(SB-OD?fZlu3`wsQeY=u0811Ov-*;G15$n7+i7K|sxCf?jo7VBd zaX-lT$Te`{=?&5Gf3ZCWU`h(|UDV6lZS!j$5L5^X at V+&v-Wq`Gi8_Fx9(|j+D z`FX0!s0WeN!+g4K;syGPU;Ln$14$i4xhK)Od*-%!?@E}wv8nVRg3)H*i$$R^y8}+z(GP-I+5WM{0qk~|S8fVR`e?k=rRO{@9V0XxET@%**lg}ncb=HT_DwO(3L`yj;B z(qUaX0%SAosdbe#e9b{J)U|3iTLmt<ISA1fgbe>G{)aJ^J*bd3?F) zt64oyIk6AVG5xAIfl67UuX5H?YO-U{S&120$BgUYJMedq+7yDZqZVcb+)%t>E0H~K zY2x6h3GNEd?VTrU!w2RAYWaS8hP;g3^Y1^w_E+U42H>-`gGRY&^A0Ua1wrlEn4b}n zrKdfLFdNPnPmF4c(~XVlix%*ArRx>j0Hk&;iN`Ll0(nMiJ8sw(AUy>v`@SJ6p+FBy z(ifRs?|VtJO#;XnA|SQiTf{zbgJR0~@POmZi+0%fW8HBN$w-?hK-0SIv6uQ!bJ4da zcAg`&%u0f*p$9G5c5_^e_`9d1JQfM_xTTPx570xCuWUk{h~>@E%%QJ3ejQP%M3Ap+ z*L-!_-F1l&oe#pF#=V&j%H`Cyt=~QUoayQFC*`hUA=oeSq(`k9aJ>>y|HqO6Oa5$` zY7{Wf=Pgc at G|`02M>nD~*3AwNx>H}IAMGx6=Mf4E{Qrh8)DQSl_<*nF(?Lrlv$Fm8 zQT~AOt3y?wYw#H>ookD-d$3s}#0FLs*})`*M4e38ycZY?m0& z0((aIVsGs11VFHJJmaH_)V8td$>YuaLlps;$E}5kbBsylK+;q0Y}~g`dC> z-PIG4?wQ|G(hnagm{?r>4shNbejEJC`Ncq{@r7U2eev+ at jPSXB?RR&;h|K07QdU(k z_FQ4dJ;=lLME|H7I8b)D^W?P#N#}cai98fsx5E zFgbv=n(NGZrmv;Y9^A&$*?eQQ8(6#2pAZ&<2~F!<{G%p(AmEWp>FbYQZqcq)1hx-{ zu5Sy at PG!`me0)FAk)nB=8!h}ULVoi2j8U=wfg<<)pXe+3P58uBFwj-7ZL>}~{ct|d zUOQfU7kFfVe_G8%$O7A7(cB6@;Hod!jJNFyYyYqgcGz~t$#krHzGWi^jo_DsvN*rE zu41SK*sqZ_^KH0XJ39~?Fge%CLDJaE9E>wG|AyK&ZKgM{>ugIGAAqsi3!S at WxL z_?|HN0XVu-kD=jtK|WvA9rNV0J^t5dkS-xuMCIaG;ml|f->3XjNZjgR1Dp~LoF|(U zKgNI!E65NB2$3et4OSO{TohB*hkwVfklFPs{I7hEChXbXJyK#xh|e%)&Yco#CzE6M z|AAjHTK~eYYu*q1N&pEs at P!BZ3FUizMC7%91nYeS*6GNNApK-QIUU=$LT+FGCZ-k7n$1Tf_KnR^j!LMMJ< zeDE6{M$IekT5$@;*lpwG>e5n{cp`dFfU*}p^SuPzi$bV%uLKoOn8j2;R95MFU$p(4 z0S=W&Di2N`lwLEDUV(7+s^~|gp~uIWC_j&XgdO^E_5HVE4gX7_k8s1ZP at 5Ab6et}D zJV_E7^2odxj5smH5CM)yBR*@1rE25HG#CWunC7WDG+ z!YJiZ<|&X1vUr);1f>E10N-UWCvcnG3fc(QE|bU!q01{o`;*4e3vyv$M0ys1P6bf`>tvO;8%2a> zpo&W=V&eHHYosqkCcAG`7yM!Kj{<>XDRxH(PqshKstxW>PSbDOyg6|qF`ocwZvq1` zw<<{#BfO;-Xwf<4uhEQGHuv>ea(;}5JCafLOAn?u3iAQ4o?e4jd^5(QM;u4SskTqN zhn362p!^zzcE}`~7cZ{|_A~Og&X-RXQw8q(7$7sge)4P5G2M0w{^Qrme?}@xDS7!| z%=yBE at o7Hctm8&}<5k*p at Z_=ddxy~za#9eX7zb at xV>B54 zOgoB`&4VAYlVkLC3h2p?^oIKGWerrz0xUIppJ*cFz4eWAp})JL at d@Y%8R2VCd1P)e z!)e%k<2f+sx8F8AsAKoad}Mu~j!q2lv$`U&p|TmyS{el9vH))w27R^WX?(;t#+wbJ zr_ at DPWhxIA-j-gv((JpFjuQ=L1Df()I1jF;IB_N(4#Yg}n3e at M!e#K$1#Yqun;z<= z%`Msl`P*+h{>KIR&sC`-%ZvJdJ;n0w5(g(oS#lQWP=bMhEB(h!NG0^Y+)w^nn;$o! z`7Mh8eT*Ol7zb1s2NY}vl)o$0t^V+h1tg#_xC4LTborMPS?h77IC9DV@*FZa9`Rh%ZDZePU3W?$;E60_v*Iv_Zv-Yf3) z?i8L~6AR)O&NiMhb(F8mc0cLhwdv-MRG6K$dI9V$4 at x~xPKo!dHe8zO?7WE5kUgME z-YY#!?xJ3R0)FogUWfG4Z;w|y4{h#2%|(pxB0OzGN30_6S(Miytxeb_rMeQ>3wIvJ z*%oAs^5TTIp0AM;C7^+gO1+ME-}BErFHW*1Q`cm&2@|XuKr;RZmX{U;g{&3W^ns1Z z)Pm592rX?Veo?&48?HJZQ9zzJ_F(am^7&&n{Bq4O;es-8i5Wfc%4gyIc@(qk)lb!Q z9(3fF+3G*~er#8yr0RA`;Hl~}#jqW~I0-27_2*M{bZr&{43h{vV5(%kJ;h9nY~X?} zn6dx#y&v*Dlii)~=D#Pt`4Db*HZ1bLi)nrNI7Q!}vRj4aaG{&ua;XfLjSRGBu}!)r ze#Wy0ZLczRv|8GI^!J5?RxKC1h{pG7e!&-G&(uC^Z_&pb=MHOc96 z#bXxOgBSM$0 at pIHd$?nq6(l>Xr}BCVK9fLjm%EE&JKPO|G@{fat!MtMd}L><{K4>- zN7+tLZ2tubl at BB2U4O7~^Q0ro(~#bP at N+QeqNeDTC%O3csG0EJJ|;X|56NqOW7l?F z{C|GYa?#(g`Sh)1bsO#V=BrN_JNSDUs=OaBVFKqJQlh(y$14v1Y};Irl=e52ntdHF zxh7W8_H2CBda4uuwl~j at u3Jd!=yLVyRevI*x;OXw4tJoEFF*rQ1(Z+6-vo`*JQG13 zxW@!~XFzHkl}-EiW44$PS at _-VWN7z!Sgh(A?W;V`T-$BUeC0>Yh3~BGz9G38e(ya~ z#!9T6(a49a7jQJaHhTvR6Q!ZQsAVKO%@4P!5-iz1&E9Vo;;Boos;M at pvaie$5Wc1(XH}B?Tp z5|jq%4jFm?fuS3QZWvb{@2S9<0##OHZA zZ~1}PxwXHzG$=87^|Q_4q3IqF>PUQhS2{xBH-Sh1Pa*SuZ`7YlROi-5=w!`Y(fIL6 z%w%tYsM)6F74 zo}2Sren1|!`>q$1!KYb#>b=9|IA<2^rO`L{;`C1EZ7TJ(`;!?-ox{X0q`?-^jPC(O zXKYmmd4AU?0qvT%z3hqXCb at 13G+cVW@4bavIcI;^kgh}cf{q58H!##SZh?o1c)`xE zH*IyWR}}dPN})F_ruUH^&Vjl??`@cTO&$#URCa|UL}VlAmaL|4va*@ry!^6(ZSym( zc+W73ku8X8Q^!YGW?akG6g+&gH5u5($M=%ZDZ|}JNJk{jX at 8X^;P+&%Yi?Gjx7E@% zhR?*F;eExOZ}kCzV%bT<=v`OBsxfM{7GNWG#SV2|o$A0`aPbjtHLj|kf}|s>!K>y# z7;5l%6L1Go|FG9CaocP#Z+bC4fTFoCV(jv^f&;^PX~Srq=acdMYb|UCc0+d;PBfcS znmP?PX-_&KbKOt8t$^xA&m2sI(Pq;U%P_sg(GLvF{adT+7O{=c6V{)-P(O4nNvM8o zPTuMKDwzBs>|(q{Kdt(9W~`O4L81C6uYPkEH5#E at Bex>a at FmYRo3EcMjyRF{`cfj zv0K)!s$oAZMFd9yn-?Anp|TO-y={fYA7bW`r8g#X1$A8})rZw*ZVM7lBocms$`|K1 z-oMMO;4zCvh%fGgpL6-q8}dPP5(znH0lNFmcgs9e_xF!-#Uz%Sw$FX37Y;~W at 5NlC zB=2(42EXiKy*HXpK(Nuu)}~@fygA7lDi8e9rFi;|M!i{fcpFpK_%?&gH-U$M-qD6rP4(Iux5gL%Wv{IK$<@K5Z>v3u at EE8yY2 zm31wOEOA%xDK~bRqkl at ihxCeRU3)oY%`xGWuTbsmVN=nYW1XP*<4Ucn*B8&(I-0v= zt4J&0U5lpBCru0a!EcQan%9uvS_dE;%kKx6(XNb2j(`G+BsTpEGdZ^v78K|Wb3$rgSTGxy2ypOsN7(3sH`X->fBN^Q| zv-7c$$h}7B4dgg@%&?}&K^=v2uX}5EsAxeJJixk%L(|V8o=4#Gy`2-0$mcd1luo#r z2W0mC>2>P!>O*Zxh4YKlN$>S at mOA&k)?QR|l|aG??~jg8+G4uRvBM~bI8(6lBslG& zQdouyd$}jq_I6huJoAk%lQ~vo-vUN1RrMXCjPHvmBog;{u`eAHW&T(Reh9L< zhP8akt1Lg)La;Q=?e&eUuRQsHT(ug$Hh526a1g=2d{1{`2DB`!wBp5HNkOnVpXpzN zcYrrCSDCGe82RtrBC53EKnM!64N0(?wkMv`cX9))G-Luxz=77N1jE266pZi+=27E+ ztN~?xuDH9sJKys&D8K*`InGyJpXDs{+a5{bdarxYHSS}*?RkCDEZ^k=zFjp0bwI?z zVUe|{kB)$U&6 at vOGd#Gcy(6WgYNRnNI~5v(xH4im(j6IHF at AWq zb{Gj)7whC at mg+p*lnVA#q#B2dwwA+xLIbv!y+VhP`$FhWJh5cES(?VH8oIf3AD~pc z_u5qn+y2Jj694=u54v1L^3WoLZ{oMHH3Lp#6CSF! zjF1!^;{!=0Q`nbozZ?A&kaz3L#h9zOZBwUyJ3N$@*9Ow#7oG8#-d88OQd66IR(<^y zR>C`{9b>?Kqo;ynnjPlEad3E-4cBI2mQOFB&Bjjbh8MyCzf+`cj zXK%5OV#{HVF&CV4_X;p>e2b|Hbt#TBN<<8HvM+KStuB;go;T5LXf8?(uLcX!c>q|0 zV#e89=&2k#520T#ap!FG=ot^aA44^vzX(&WZJKBn at L)1|S>)%(hx1t`!>eAGWt*W@ zC`>QgjN0Bc?)uXtXL!Mi7(KQC0 z)vI>K;&zY$``~>xHa36u;cK%`b_qZc(53E64jGe!3kOph!07q6Y6Za8qWW at rRQfW+ zn>#RYE at 6Ud4k!UCRqE0hI9{}YdK at -wa)E5==916e;)6U9OTiS7faG)NowG at 4P-x?c z!Ojg~tDjunLFNVcu<1fz_tPEP)NiW~o}7v)1Y7^dO5a1g}}+(;X_i5nE6^ z{#U1V=4?p!Jcyz;1Cjt7`(Y-so9U~>-VT)&a~+ITYY$*p-6tKhqJHs-^O-=f7pWRs zdL2$HEFEtxfIUo2_R4HIU$ z-K~26I?fT#ih>aJRY&7 at ItUq~xE%jjP#Jzis4raKPB;g3K%nQ at 5#=Yi$%@0P2MM)U z*^qvJ&m`hz6Yte6UREGLOxJ0^{YoGgPUEs=aZOjBk9_NY2)OI~l9;T14Dk(kweKCu at q#RLL&Rt{LQVP({_)!THy!;5 at U#f3;Xm zwxQRrt{k>gp&M;)w~D@#!=2g6YrpYG=u?^wz)Dy$FfoX-v0(e_3%y&Y&(ZJ3W@>H+$kzF at z!85^_0VnD+91ve5 z6N-hi1dLPFu2$!0PaTym-?d3q_cm;=Ugaxqoruuw9>Zt9bqzJA0woDW^PPM6_Q;@5 zO$|||Z-56*o;4Ouhkde=TW-ZDZRD?bmDC#|5RP~q07 at e6T$ngn?feqeD=7hkE{mVH z3xa at Rx0|5yOAk0~7rFHBkqQP|e-$(w;7nz_tezPO|?F!H3hc<=%@YFSoG&Y`Ud?+y-|$XkWe65^O8 zH&XPZHZs}?#x*PMH4!h&i`Ew0E)#OkeSBkZ56xk$sa*%h&8EZ3f$53K-s2SXD@#1k zgc;R#K_Uknt9&aCUQo`-oxp9rNah6%K-nZgzO^_wM&uk^t9eperC$Y6Xc5jh01^|b z0k(t1L?zydXPzvsA`3VUJ<-lu`&0bXq*tgwdp2!IS!BW!qxE|=#D?Cm at _wcVEAyU- zGRnp%cmv8Clp}Z)G+p1-w0^?cLc8Q_tloC-zCvR{H43Y at j}DGvXgUs{bKPm#xaAe` z2 at y=Ap5dC{q|W!}@IDf~XG4HcMHh9d0V}$hw1~v}cls^W2C&NE{f5GiubblVkEV(p zMG_<1NucRRd5u}rGu2>5b+C><+is5z3LtijAiecSfG$~P2h)0=t*JHTM9bwuh2C)L zL(8eyyhZ=`S&3cV2#*AP58gv92Szs4vGpadM5-Z0fJJM|-9hOAG6Q*xo>l9c#4RwQ}NiDHWg-6QQd_~#knZqmYi{& z;F5iXb#B(VjmnpUNB+57)ogPeh5-p#t2C|dr^~XJs#W?Bx9`F0yM}Gl0f~OG?L}4R zV}385SUeu|m+mTExoo>kUJ?6q>~j)PUK;`u$*dstAM)_m?Mk~>s``3yc<~|H%$E;^ z_ATs=z7kT at i-v{~`5yzeAOC-5qWVfrJYcI2xl+SaMSPH|Qz8REB zO~8t`)X0+GDyHAsRf+dL4FR!mF|^0FvbFvMpSfJWi5z7qB=QDFVP9{Dt&Y&@X|n{P z93AJ{&3-tya|Uo#1T%zD>(5B?Zo9ws4{!k)i0PeNoU7jfA;_7760&linic4FHSFPD zynuJj at k8>i@;XaBU-BRy at B^^~Kjc~@B#@i{0JTssI!Pv%m3HHLM0fYcw0DR*sQNzO zp-CFR>@H?4K|iVi$15EaO#vsn53Io2a!MK-G4nDblX>Y`$%7TcliB;O{Gl>7iL+x5F=gDN&D8|9v at X z#4Zj at _SX0jc!X-WKNI%9QKA-g)j+}DBFfVZrtKdhBib`DF_l_adrMxecKMhd+S$bz zi+T57 at 9g;8LC1%eR|g0CST4!T9S`lq%YlS-$TpwjxTD2v3kPlOW)!$&8ql@~7UUK; zinnhdFDg>kLRA`O7yhW#yoWE`9CdZ1)8J*6U#+4Pe*ibXV;!Lg0f!&W-Hq;1;B$hE zU)cYB&-g!-t`P>JKmOAx`BH- at 6%FkT#eX{F^yvc&`u~CLf1Lf$A%obO4_RifQc0a z4m3zG4{f17nPUK=@G-im55v{?_hSdN)yUw!3v-&a(5FP`jZdj2@?Q1$ET_)bM)aJG z1$w~GWL?nGbC#vqX59E1I~~=@o~`-jO0Bc(ai5yCRI>qKPe{Hky=N~rjmNAO3T^f< z%3WLme=(79dd-GrPLt2yMn47tAZvPpj%=~ zRd8^aAuDH*fJJzWAp7iH^Y8ASFeidMnnzyh-)>IIL|lz-{vgD;s0g_L?eL~%wSG~O zyj0cRoX4)Ljb!v>*Zp5PsAp(-UAvhHqrH^fK4NtK8Z&KLTiEHQo8fBCx)+4=(})M7 zMdJRV6%x|krwRqFt1ZvSXhPO!k1h^M%hJ45*I)sO3HJhnuQ_GDs||g|rF0ObeBzL! z*4^$DDl$h1hhn at b^$OMb9mrc2HUC;{@`N}vr<|tQSYh1^lEMnc{i!AYT1nS}Th#`0 zK(g(ImCMu4Hr4ve)y$L0X1yrM;bH1Bk`eil-{+gGWEs=qgzS5Q*B<=8*SmqU0y+L` z=BI$-!gqA1Yu83p;?LEoRbQ(!vIuPnu8EeCOFYT_xsUi0i>)tR1nUh~!f!0cNmBXd zA(%6csT!`gKX at x+p_j`9`tq)W)bo*58|Uyf3A_yagpZTb-ijp+444)NiV} zN0&fD0DYgmAc at 08Eg+uI8H>O3>@8^eV3U*mG4L(B_*Qdz(3-*pfu_Cjgv)C~4YNrE z`X at mIr5=fX*O>S^#ZLfHnZAoHT8Kg(1)N(@Xg#!&PVk+=S*D`lY2;%cZ`N$E5P+R} zOUftVX*`y*>Kf?#GO5$(<6#F$z}4=M%7Xm~VLh2d$TH!=YoBm~Pj>za?|rdCi7q2v z5rmMmsZa at n}*!2gp}t|O9mrTqPCaT=Ax2YvG!y{?ix0pMB&aB zV+iY1mMc>e$o6^vvNt~KV_%4^qdeV~9Q-pmFbh;zo4Z~YJND_-kV)Be4>Tw8mhw>BH#IS;} zA9++#DiCebXtK~MzpXrmeb-ygi5Mt*+QNf7a))G7PP{AIwbYBFGZuT-UzBiSf%D1t zRc@)=B&2DDkSMQ^RPUo5gqHrW>|l~e%5gOD-rc#z=~ZaifC)roJmSP(MiHF%O;dtw zz}cE;%OOH;|GL6T?5TJe;)dMp4_uPHVWTiF$9~|%A(~qz-_VuiYU5QG4O(k7=v(sQ z^{6X?AJ2K@`H0)cG`)e;+b4J4;D+m6%6U%TD<$W+`*;`k{CAxpV1bIWo;8%x8nxGt zn6v$Z=*&c1>$OsHydwz2?2s}&D#p-&;<>1#I7n6MU6IHI1_GmE0vtv>*wk zNOC-fM-xcCfnmzl&Fb5|x>nCF%~T0s7&`kCp#cz9!)hDia3AV{-!GZ8S;%+Oc(Sr2 zX!w27CcP{ZPfI0!F8*iPEpa7)qKO4Bp2=sKQ%IIESSA1`%((i`Q^-c9&a^H at 9iC9u z6c5neAvnw`%|fxQ%bk1#bW1m}DL2PSMIv!IqWo*=_yFg()Uxg}s8*E(^PYPI)4R%{qGbqHBWPCJ$A0836CL^EuB&&oqJ*<_~Z5Od-#M^XDf3(7yvl_lxlx2URB45kv_^5Wqa#p}@ zJNVUObPqb})hC#y0urQkNBYzt87)Q*2L?Aq4UP#b5+noEy0QnScm4J34-RlDAFa^- z#MbDb at U*H(*7H#C=jWfcMx*Fy0}at*^1 zxIE1AZJOVbQOM))ZnOJiPVp>Ic!pAmrZ}h!{DF at 5U=@rVQ4eO}5N;R6DzffSPX~|) z4ZEC<{C2i1yD8pnI$ci>kaEA$_##O(;Lz(6=K$&GEWl-KCUnrFu=YzPnUx2 at vInJq zjLGzh^m?fh)hw>?Ye=-1KKkRBk~CnWn^-j$y{wl0Y=$wz)Hy3!@ub)l(-oK9Ad;2@ zrQ?+&IG76S`|v&IPfhbSx4d$)(3`*}1f_9xKrUQJK*4Bly0PufUvrM^oBzx8Fc9_= zFEXVN$z#;TcQ4oMx`pej_wz+R_NPP4no%W4^fp$&d(M`sW(0M0ai|h!8dzIH4XFF+%`n zSM%t!Z&S#UkZJe~|ASQDuxE52~_H2 zF3wA;pp>fRR#Qja*P_rtyS;e>)1z*+i{DD9yHaV?;D z{di84MrycRODT&J^L+l~bB$o{S$l1tV1j+pHhQVWj-tA&ItM<{U8Nw662%naZfO{( zoICVxXHlnn{E%F<^&Kd at GxsxM$XndTKVdU&_t6>s848C-;fM3TO@=j9XEzz)FJseoZh~`YKe6 zaHAbSi_olar;Hb at ch$fY`q*xk71g|FA`yWdff&+)HkwjIU1im?Iu%8LB)jGK7- at Tp z at Y+q8@u6>#y);9WUW8+ at vOU8bTJg?AR-4rk^>yG2IuDQZ?qe13sQ6$d7iq&9l@@ED zil- at 0+unJPxYt#X{8PC>f5+alSI?CG5EHPSsNv9t3JqFFAfQrI#k|b~6;}6Fre&ej9}trwJE6ZQ7*_Xv=c?M5V$N9MO{aJiPZMG7)r- z;@p%usal(x9F>+R%e#TL*Xn1D;05|Wx;z!Nj-g`gtpK{%w(#oNhu(nN-v;u`&e`#i zO0xvsmUS`VBC1)Ml{Vr>(SbjViQHZbY;PUQ9wP5s#^Fb;M*a3Q`>D{S^*;AqiOZ zp at p%kIk1s)T=qZ>YrGFvv)`^A!jhSD)LJjiN7J|pUdgMaxBPsngeeWNTe;W7l?e0V zpyPVKqbV&Xl3G+YWixZAdvvYv93|4DPA zN>$q#D_N$}ny0nZa*$UiLbi z>!OE*s>J0OK(6GzJW^9m?9`xcbW at nq6f{qJJ?5muQraJy;Be?No{n2AVM=E+ze2A}uI^ow5s$wROH;^V|!Fm=o z9SI at mX6P?=y)hM)9(ysYL-Bb&UpS~ilo9X40PLUUq3+=l$4d!OdO?D+GDNz9i*0C0 z3ab=lM#p>^P67NcjYUxFZIzIvcl^$K&*n%4-u>~2 at CjQo!TTwf53?;J42!>v^S=&j zYb;tt2&2;1s5K7Kj5GanDNZk1c^avFOE!Wj(BKX4gc&V5Ux$J_NvoPH6ap+SGO3nV zF=<*mTxejQq9wA0y|NU1?o$iqk~2yeFNNB z%)06pC&SDN0FOfwCXkw`ug^)N6c z#a~{;8xrL;tNF}dHk$P>-82>&gd}wP#ymts^Ug+}GBJ2}v}|U?f<8<;Xpp5LpOJWg zI;Q9OoV`-?xWG1H4VHW8hs6!kMoUt8Ip{|)rirORIGRUv#Hc0prQ~om2j5mIH2y;3xFm|N<&kHWb7<}KF<;f+n0bZ>K zJb%WbUu`^}T~`+Z9~Ii3q|SWNNw_esiQkr8vRTTq)%lIRxctPAxAIhIQ^uTnUB$JuplYsb(70l?BIgQ%BZ_OIHsNLTxFrv;d_}DVA$=U=gm`G zAtDe%Y+CW6f?Iiy@~VgOGjZcgme7J^9@=}?0)gn*=J{X6jxYF1wBZbMx%(=|9iQ}) z_9LOW<%a75PS*uD1bD4onrIRXUP0H%1FqmNZ+zp;uV-Rfk2fTjjm3|=NZ zK{kP_g6-F)^wX9r$S9Kweoeii1qggj|K^0{x$pJKm_GV-f>Z)*IZ~8>-&S}ry!lH( zo2SV>?a{ooCfF zgwX#nGZFr=0>=+n+hpQBpyp1`1mhf6S`@&8Q;01#H)_kJOqusVhWQE`5ALn*OhWe@ z{76CjJgj{P?+R<6c)#XkbVV~j!ogN3tD8b~ySm#)PxIClZsdJ3mO8G^g=*ydeZ6qj z^7JxZjjw4;Nm=W3$nmps21AY;4dHnjZH$TT(xZCY&~_dl&s*BfZ at 9Kn*chc1lYFOE zBy at sEwZM!NipHKFv2VrvjuS5cbeO`PhFIZ-doPo5?@Ah8vD1xLsZ=&uWiTW at _W!>9 z`t3 at T^uEK=C-}BtGz4r+n4VCT at hx5 z#RA&3W6ragMfIPE8GE0JBl!9J5|;!Sev*Bg(n9P{Uap4AhK6ZA+U{bKY&J}6XM8Gy zrZfiXSPk$luv&WzaZvArydQFOV at cFe!aN;ouuUYyYg`H|y4*U9*;Xj6WCS=h&v at Q#Va(@~ zv4%Ly^l9fzNYtgvxN`Y!yyY#P(u?ma5iD|d)sfW?b#jKk9i>-2*@T<2pxuVH6FfhC z at im3=_*8&ZkVJ{=`f5~vj3>I8zE)FfC(eP6-Fam8UQel`5^Ff-lpr~Lcm(iF5=EJ9 zX`T8A9m*tF4}`-zOyq%N?=qZXNuK at O^IRDWD3Q%<$mtlBt-!GO*l|41JsjyxD?roN z>npw$eqkh{kI}S at vRJ=|Ol$@5EN}}lKz_ZPO}xlI5ZSkM6lKo9yXR42=n+>^Ys6qO z#_bmXUndGSihy2{zdhm+V at MjJy*bwRl?FqUIWqmOfKGw7K)P%^OKSW=2IEsO1hsh3 zf}_*IY35LFV{Y!l%U==y9q}c++n%F^UX$SGXfK+&Wd_IWquCx&wa?F^e z at huUdJFSX1aR^XKsuI^tD!axxT9P5xT#Z+Ub`h$6ctm^~8K7)?m2VeO?9Dxafy`<>n24M#AjWgb at Q60?Mu81 zS^tBugrW&7_iDMT^D`tN+lX4=q5haYJS#yEVNaFmj>$90L*~GLb7#k_H}o8C9d0DL zWL34&4x?WRZqX3Q-k#z)T8&Sve|k+9#Uzv$!@&&6KkB0EdiGM2tVO3@#(I%nq|qQnuFRp-8xJuh-Zr?gQapht1@$J7Fw z{Ip>hB|(8mxB2=Nhl$fe^!d9{^C}Nfbn8}Tt_gTpHv!FNd%e_4r19&P at Fjmnh(!Op zVh_+qzD%Gly_LUsyvAF_b3)nFu&R6RGO1nuBhY;pF6PV%?Y%%VhJZ~&x-ZHi;plyr z;^or4&htygYOQH1S=j-Ar=>55`ZDT9kS2SLXrF=!@c>@#$xNJn#)>298Az**NpIM&ex0hlk9CSp0xM5u7_TJ)4C za%3gEug|2_%cBCE?IzPA{H7;<*EU4aH;%4GANf!_CjpFb)!?H5Z91E75$D}xEximH z*&xH)@>q&|TWs}lPuZMI9!6chUF=SI6$n#F zjzNj at 4~3tc8<{`;e*b_}6mg~;z}Q+f;Dg|sFzqez=$!dQtE_l#_HQrC=kTR}jm&kn zL$4#Z3a;ann{o1;ioZJL_6)4X_qoUBc09aTC7W7VoDFa1jd_Yg2LsNoGluuMGQawz zkTlXI^>QkJJCEW+1o3x$-5+zkE>@N7KRz at 6j8$T8?Sg%Tx+8eTHx_ou!Wpy29{Q)2 zcE*ckB2xX<#8qI5feg)rZGT{fZ(Wnpg%rNvqQ1YKE}dh9k0xmk9x?TLP?(<^A%(|U zv zj8EIki123f@)Ao?Zs|J$wfI_-ea957AqSy8ADE6JS at EWSgwH!mxw at RhL+gx}M+5jO zycFVgVUD{I8e|wP#3{0Er#I-~0uK#J-b?y36ARsHMu)l)=R~w5bhZq|9bqskZ)kCz zbIGQ*VSkuivH at vA1}n<8_ckx+jBq!I4nHfbVu2<;N0Vs%EF3c>lY^XPh--ccTtK#_*ZZ_KeH zT9jlo8TB at Pzf3 z>e-*xc2E0B>~qkBCArF53HQ7w#Ds+!S~eH=pbJwK^JcC3qCNcIc?U#}fbxx`v^>_A zHM550F$%pqI4-kLTpv3o3E#XZ7cHH*|&GnvSMToR`wSn->*6|EY_)#feAUjK4QD08aQS?tak z at TY}Aqp8|=Du_I~Dg6aG5e?Ux+SWBC+KR5|@@J-BnUKz?c~M^my#30O$#5dEsD3Tz zv!jHx77D!3DvPb0$jPj$+Os7x1ROyj at 93o1TWTheh)ZFMb57n{CZlM&;}uyC(RVgD zEU#41_n^Pj*=t}R^H-%}8W9~?R&;Jg2YVfHUdidjya*o>&~tu9o!wJ#jgcd^64W?d z{#s8R&=Jhbbh|u9ecX(#;BIeUNK9Es6Dj;D2iH$}cwmd-O|34`6XJq;(wLARQ$%l* zrij159;J$KwUl~=nX_Jn8q_;diXPy3thW=i&@IfQtOr3zrJ@`~^E!F=CQB3=TTCW{d{IlilJjho zv}w+|kwOiw!EML<^Vd_ORIw at jQ-Bo||Hp<$6%{_Y5L(lKd7%PoYLXTrhRbE{a{VK$ zvnr`n>!2?sjYBBtZw-0-YNx>kZ_yLYL0XzmU5`$tR@~J(s||fdFLV9Z-dxvy7NEw7 zwEz^_)8(VKDbp&_taF7L8ZrUOrjsu;awnPD={*csT;AgcChzy98gabd-%U%ow~a_S z^b7B~`F$~L^u$7$i{i;hslMWL+d>jDDxPH0pUHv&?+u8BeRUGJglh6TlFxTz$@atk zVtCbFNA31;+w7Z=UVr=YS}+l+2U*;yRaG*7*zFk zH=(f$NH=7rss|HPFiS7Thn$0HoR(bws56p}rKB=TQ6#w{zycCFI$HsHSPyoV#fl0m z_o%&BPVYjTLm4v1anO&<8)#ZsA9aX_LpsNn&Z4bMPk9>2Xy9L6cXwgXAXqsM&*icL zWAduLUU;Z0S+U!*7si=O9tjWj9lK%g>o-i)1z5FG;WTpX))#$KEz;5RS=JtDcpW3` zW#KE5T}VECF!gjg1&$b0l+jjRr2>*`h_0n>89PjDqPUkW9Y6BJdNo-8C1PY^OMZKw z@(jnBqKV)V&Rre+dyT7Hnqc`n^l66jwi7H2y_QJQ1huTIU+5Oa(11=tTCyQdi8C3c z at VRdM;Ee@#ONZzS-$kE at z~ZqypUTYF2rFAHo0{#pJM^8U9m_5e=r8za`p=O*?>xS4 zZ+tnMtaw|fq$B`!&bJq1o3AhDkYppf$$~lDLev}nb2>f#5~4kX-V{|a{WWkGpO{y( z2QI?@gXOFPpsx5VU6YSL65sm3!lJ%W!^IWzeTcqUc!n-Zkt7`mB~|IUsmK567^4}r*lc&dWd?5&^A+egrtb0~_5BeC*i zCuYz1Z|ub7V9t-~P6`-reBqfB_4rEu0?B4)bw7^UQR*UCX7c^uiAg9L}hEDTeWw9fo_XVseSm1c7vs<(CYIc}i z3Ho{yz7u7nB|9?`rTkC*`jsfvlf}34xC65jp+IUkxr z5{(OZfb{iYejW5M+Cqm=+`z>=kWaW8s-AJAJoyrNQ}I zp9SHIdf4*$TL;9y0U$)eJ)o?BChw=S=rq02OoAZc{wnwqKK9vky{Piodi4U%7=do<3=10TF0qXUs zk6JATovV%0F&o*^0~P}+q3tU(8Irrur9^` zIW`$0 at vN5{Ah1m?*JIcDghi3?_3{^|#|BPd7>^`L#V4`lbDgLlvXr>H5Qxc`58y zWYIWIoV8l&Mj8>g#E7#Zz;Meuk&GMd*x`Y+{d>bStsFz2ezY;xx3QTbHv+yT2}`>6hy{Gcw3p6mZ2lT4{R?TN8&7(aiEK9N zdRE at c$FXDgqW9c_4gmEf0edD|z%sez5{X}rv`V~8{QIgbs#8kqN3lzo1M zH>6W-G=EwR1MBShMMuksS>rP3C)r8N%9Y|u3~x|}_3$SjeP$|1NLhgdcFH1Br}*0X zVc9mubHQ+Aj;@V8maX<%JspD7WCk8-0R>v1J3khLBmlm?bRfNzx#wt~@6-JLbbLKy z*;7!Q=7dYF=No;z(S7mNMY&dqC+MEwi&-GvfL+<>m}Ja*&TL(mhj;UQ&R}R`m*hvXe;U z5c`EwulGcN+EIeb*Kz+M!6!Xq8%E4cbrh1kef~B<-5b|UtC7Bl)JF+jf$x4fbXCFy zkthcL80?Uu1;+G|T?HT2rFr#!-+b;+U@!lLH1Iyg4g4cv`q`r}5L)|W9RfB*CQMqUzjRw5L2H>vFQc!(2Yy(2_pcF~6l)!z3< zTG8k-TelY+8#=cka=S?Y=GCUH&)k+a+D+9r`nu{T0V+FHw1;($?t!jm3VT(LrCw~r zc}|BlMtEb&0XyO01peb}b at QV#1pTc>P5Bk at _P&{lNZ9;=;K-swmY at ob2bq}Q z9rnhSs^{NEzL=tzth2Ue>|M{ebmynzhkeY at Zq@1Avul*_Nce^p?~$G8Z$Ew+JolQr zC2PBC=Gh-B9=dPB83e;nz->0u+hN_#^YrS#|M!z*At>zS?B`iNtlwd1XuPC$@AW+O zR8>SRT%0(~EM3g4IDMU5|M5VmIKbD{%)-ISliu9Q#?D!S;iRpLf!@wifmS$=}^d+h6Vd!(L|=B9;sQ$*1DJq7MR`tUS%=eVrVgJw$ya82%ww^dbFMHWvf^ zKS(?sBp9UsQb at 0-szER7;%-IH&&k7K!Oh1{&o9WyE5s`zB*;#$ZRSb;&diyfSBRdM zoBQE|SCofGl%I$G?}I_|=|f7~-O^fAOHSc$oe#ex7;HT~T}8RLe0+R3efT(C+-MPi} zTlu)SJ9yB`YV(Qz#reMw{YUG6_^ss3Jgp=j at DS$U7U19(e9t2+$|ESs&1>*q`2R`t zzp<;jSlU_p{r|BGi}LaP&Hi7A{$>~F`U{Bv0?a>9|Eo^_TmJtIFiVSn{Di`)rI4|NVIF{q(od*6xj+J-G1i4#AOX-A>q0J&0BDSLAs0vhG{(A+3nTy}W at B9yWke}PYA*Y~ z`08w~d_jqpK*Aap*tjbX)p2I5^7tWUemT{TGxO3#-8=(fYsA!j)A&OcRaYd6WGv4o7{ zgfQ-w1&L_Uw8V(JshG61ex at xXOCr^vWEy_^KFnSZ$X#A8B0uk}Yr2$CNe$*y8A*BS zyf$M&{qMwa-GTCMmu+9`Q)y!A^l1tCk&%FvkZ@$a&sZruYmuonxXWOw~BuAim&qjlxr zL~DB|Yvf)k;Uc3((ZtQu%kLLW*fIHR at v~;WOYvq?Y!WTJSdbVG7wVRUJ4ZXi@?ZDjy8FEKJNFgViXWaIz<1BOXN zK~y-6m6T0PTvZgufA_ulf?*gKgixlXg;XiEFc{NV8G~9Xi6)I}H%(|4#)WZFjnTxF zNsZBkUHZ|Gn3yh2(A0%7rm;g}Td?J$v=j!U!>gTn2=n=7-n{p&ivcnMP0C4LZr-^$ z_xC^N+nR_&16$U=xMF>ep-kDfXb zx)zDPhFTLqT4fx|MB3%bCnZ*Xo$KSbh_4oDu5-`MCktQCB at 4g*I{WV=fNQ&g&#qKN zee}k$t&BE+mydKG#S?77u}n}LgrXuH8-xPV#^rAy($UQQ)G{Ye^mV_q{?AtrQfW?h zg+5)-jSD+q#j?F?8Er=%2y{Nbk+K4cf>2b1qJm?=hN#-s!|1tryp8+thQb`}aA>|0 z`($y|=vQQwZNfHzRetGF6>KAm5TXJR0)$do6<0+7P z5S5-8k11WXm2F9=_Y^C?T|)Kxar=X)z5tG8Qd~{2uEn{X$P(EfplnMr at d@(TG|8+< zYrTh}&-2oeY_m%(sSH1IVPT3p^c16i7++=O$ zDq8$5sazSKTOr)wWpE%$Ub{zsX9JBrgXETO5uduwjivOD!1*U0S7)Q)bML&`@m<&1 zi at 0j)u}uS6E at 2rN%#2%W7?P70fzhAUIt!&u`~GLjFv}ANqfl0 n%)|WWz%L_X+ST3S4L!ksH^aopM6UnZ00000NkvXXu0mjfxwh=} diff --git a/src/public/images/bg-image.png b/src/public/images/bg-image.png deleted file mode 100644 index 782060e0d0f47b405d7dc1bd01e6817d8a09847f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 345 zcmeAS at N?(olHy`uVBq!ia0vp^tPBi{4>;I>tlWvq6Mz&;v6E*A2N2Y7q;vrJoCO|{ z#X$AfL734=V|E2lP_o1|q9iy!t)x7$D3zhSyj(9cFS|H7u^?41zbJk7I~ysWqHCTm zjv*P1Z)Z3PH7M{fcOU*<+q3_pc~yJWglX42Y|^GonHw=<+FuL(%z0}?U0ha)xQ3Yg zEnb{qvMT5oYnsH&?JI9Me?HUNBNU~4-r&TOmwT2SGyXaKVo%zK7?mwMC!91sExU`; zCf4u7&(O!FO}g(#pmzXy#n_&OyK at P{<=p={=icA^x3~MX`;)}?$}h@<<2dq+eMtA0 zdjG`p98Hp}R$4dhBbqksrqt0LNlD8R$!~WY-KbMfIHJ{>RS^Gt{3HrBvmn0NsK^zk zL{DnZ&s}g>{%;np0l zW?O<^S3j~(y at DwEjfP`zINcdGx|ZUwGE2-ev|7ofx at WtGw%sW9k6*62v~9cfmQXs# zyUkBJ89 zdC3Pc2Bt^dKhsqFU%*Ub$jdo(8@<1tI_vqq`6nhyX~8?m}E30w6KE3vq!6fW+u7#04S% z5~I5i7l;5zjP62QAOaxqjqZw#u6j_5-S23#iyYk_q(s8OU@#O6heF|Kn0 at DF!{OOE zJ{Fsc#rQbi8*%>5LVV#4pG+<;CX;KctE+3Hjrm2mNF*}P&o9U0%PUKXrIpd at f6ls> zBr!|Mk=ymtIdS$$WrZ$`88V{sNet^hp2! diff --git a/src/public/images/bg_menu_big.jpg b/src/public/images/bg_menu_big.jpg deleted file mode 100644 index 10597aa856e49a05b075f9f07ca247ca5144ca84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13136 zcmeI3&2AD=6vyurN^zhq6IyNBnoOo!VLteh3D6iCv`sL^HnDN#bmo>KFf$pZLi-3l zk}mARM{rR!Ci(c3JxU at slJrt+MngS6Aw8 zm7X-8oqKfu{P}@--ZG1pv|Zs#eZAjtJJdJCey44B^?q3z7T4K62+NWo0d|KMmAsx)U(e)^L^smwj at 3LqyDhz-=W^rp8PPbs zBnKd7zznGece)Y(8!*e9 at N!SR_VBe>rcB$kLv6pyoTtjym|3QN?06l+uQWSGgUWAR z+9=7>=$!`~9h>=r`BI)3^XlxAcllp7Q}F+#{HQ240l`IFhzmpjBt~~3E)W5b7~O at q zKmiP2q%3q$}UMt31D5CM=F-G#V71VCbR7vcgD0Ey9Ehzmpj zBt~~3E)W5b7~O at qKmhpPGP$|2v9UQlSWtvpSXfw$FRmpLYwN4R>iYEQKkfz> zM2M0t!iPA4%n4jb;0B+`{oy1FnO)&1i$6%P2^VfQOp=_y9<1DmGD#2>u4{wnHxdtV ftW!uJ+vLl;xr_G~hl$JB+y?h%_ebc%^5E+q1xDSnF3HS=P-xW>lbv?K~`iMx>(pYpm2rxu?Tik3r#bW%weaw;vPXOn71 z&1Pnw6jpRsIHuPGH6y69%pR(yC|X((x*-kxE+5 zx};>YSxHtURZTEOqP|^o^=6`0Kh!C5zs@|Z8&1V`D^^YL>guc388#?n9NMs)jk-`=N##8LL!y4yemtEFZ%Rqdt^h`Q-H$pbL}rcK>D(*yJW z2h22jyzDd1X8W_4hD0}MmDb!kbDkm%F*6Nq&2p-`Tc}j^bt=7R)AgLxpMB^CJKJWy zV7`=k#=O7x-nV=tgFg62Qod6Zn}FaVF2n^Q01~6S5EqC5NQ~}6Tp$71tI_vqq`6nhyX~8?m}E30w6KE z3vq!6fW+u7#04S%5~I5i7l;5zjP62QAOavUx(jiE2!O=sF2n^Q01~6S5EqC5NQ~}6 zTp$7<@k8Ae?*HmRYwZ7y2K$ktb&C{9C=dt)1EF9r6b`XFvNsgk8;OpLL`FuUe6$^W zbTr1tMx*ig{{8Xz)a2ykl-LWe2)8E`ibkRbVzC1gfIZvMOYaO? zR|vm{lu6jn at x;e-ex7SxB@=`res&Fn&mZ7|kFmAGF~a!*!QkN9KF&W at 4)XEw<>Tkh zzx at kS9pqRAb`J#S4+eZ*ah}clhKlpt*uMC3>n4f#*%I&P$sGCn at y`xzrM at k_VgB{a z<<-ns?#A at Bk diff --git a/src/public/images/close.png b/src/public/images/close.png deleted file mode 100644 index d7173ba6ba7622549815a6d217cd697b0d5386ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1219 zcmV;!1U&nRP)%cI~!2I~W?>BrSyl2dRGC%1Dem)F>xzLz%p$Q!fD3N_pYELP>qqVw! z at 7}#X|9e;7-CVo&g}i?KYAFoEg=8{0l}si{CWnc~6KJh*U6*RLN~K(;SS$Hwq4_G2NEFhUG_h!mrrV_1bZNC(fFT;~Cy|IVJUoo+y1aPtf^xaE zC8BQJy?eI^paH&IT9Tuq`pVeYSix}|yjF{HrGo3a_M_2%_i^ZjQJYL9TGSq4{+MRYcbop0BKm-9qgj%Ia%WHA! zgHw2|R-srd{sDZe7Z(>N1K2Q~!cwUejYb1FhA2U#yQb4=noXA=@Bza} za)jbRF>`);`X?2JVLm=IG!>0TX}8)4!if`UmY0_)6bdL2L at 7iB5yh3l6|P^uPAYW* zQHnQjjy~~QQKAqf7=%PT&cVTfwg4v*iO}*|hzJTW2;<{fZr)r6;Nr!L0LQR3vf1o$ z3A!^30{Z%*V2on{7!0BWWfVq2OsFv!ve|KL+wMuWZJTWNWKX_`phTgR5QYJw6qeR{ z-|zTmlu{TIf>EFh0$jel$l0 at JdGh250JF2RM59rDxN`>)>DF8Xtu0*FMQOEfiO8Pk zwayF-#0ZUs&>&)1SXk)6Zr%F67uD?SET1hdvc0|CJrhO5j!&NN~MbHx{Qx!0eJfWUcP!stUt!cND>et5gR|~u>aTobIYRQ^`~J%9+qWMm0O#byir4bCYKMni zb4t*vYfz3Yc8yBUtYuk5A`wcZ63s?q%W<5QUblJp at FCOF)4#Rbtwg)snXxR3h;8 at a za12u2sH}*E=Xq2r6&m&W7Q&6y)$i&(Ai%R{&l>rB{z0``t=H at Ibi32ZU<@chYmJED z`#zrMaacQ~R;xY_{BXsYaF$nBSL^TX*l)+xt5+ujKgb)*oH60KFf`6_JKI-E?TN6X hwRL}EW8;5cz(1RC%yMzy<&*#b002ovPDHLkV1hWsJum_)@-4E~X_Bma3 zZ`Hs4UETfR-ahr~aCuoVIB0BW5D*YJ3GrWwe{1-^JK_(Bza at EsEZ5)ayQ7eV@{hlp z*AL^czu%$k#5Ej2Kwyyn?VxiTKJR}UQJqB8orE1s44f=%Z3vYutW7}J7=AJ^a#WHW z{mY2^uV2a5)XCMr!30Fm*w)a5P}IV~#MRaT;7BN}#FDZk3iday$j(7k%`M|%u{So5 z5f)rtE04ruSDKr(9{hYpitC3x`kc_fL>K#dH|g5$)61PXKr4E0`N?~&$wcGO-R5tC zzuWcIeb|I92H$>3PC>|~$JGtH{{-cTubJM3+{?#1Izv>%8 zJo&dt+!`Px`noyx`Sj|jc04Za2zkK9|y1QzIOI_Q`t{)^i`Ga&E3fy_h0tVp`|R)9X;vYJev_!lP@$b zZuSe|RdlXCZmdE1{8v{9d1pzyR|r!K+YWCa4q?Z(o7{Y#4jY%f{GRRoa=@YJq2&}z z+sGy+W*h)rg93kZdkt-croH#~B?ZpXC^r$PT;CC)Z z$GfYU&2l;CEF3*2vmLz4#pw__6+)hN;@zvm=hrNFkFxF%Z#u6V1aqAmKR-?%Pwd8I z;XUlGj5qP?B7~FP?0WDW`fiOv^L1zssFKDqT&HMhWsfF?thmhJ@!IU>LINk@;qec# zmwBf2=h^wNvv<}PQn2Ptkm|a8f`aa0L6S#WG(|lsMk?v}m*S4q&l0o2xunLTBNfn~ z+6*G`?IK-3v!w*`;J$ny8aC}KeD>Ap7- at wd$20wgU9tF_I#IKGWOj^-uIfxlglt3Pmz#roOSoeI^#*Qx7$D8hAEECr zpz=D$88({%usjkpuoU?651rwy+ at r)`3dqJ4 at y?}-zjOm;d56dAC?p3+`)p;(A`;G6 zMnrL0%uX%Ord~6V at y$I+AV|y7PQ at R?-m5_-pAustwc#eQpeDl~gUDl;n(YZk$u)SR zeryS-lZe|)&?4y}YM3U6F?@_6ZpmgM|M)RsTpEb}~CLE!bvBX9$XWd77{uP8vbRbp~25O&AYSMH at 3 z>aaK1t(3<++u0+osC6;+>CR?wK1Qjd>Vk`UJWgcjXax4 zM3U-LhQNw2&mvQ%jprRRqo#&Y8QhD)inW7?P464{#SDWAMUi6gWJ_gT9r}+>k at kGg zuTPVQ&n*rV$Ns9Ai)buRoc2(SAagcVUf4^#BcQ at O?f*97qd3pFp+ujBcRFzu_BFRt zHh^{^TOCQf9$=TK!lIoRJ%>Uji3ffDr}sO<mg{LqFTrPp0pXY7k?tTSsaV2JP zw0^9%H6x?;fYHuC{=q}XQ*kQz5 zOrcH11aI-pvt;C}ho&e-y95Cv6lwgxQ6t7bn9?K=^Wqk7uCp5jJ4r+ie}q!#d*4 at o z%04%z+Ls#rR$;=UwJl;<)~C*VAJdVw=CE`8sV@&c at oZ)U_u?OGcn(k1a~}nnwuz)w zSSwr}+n009%N!4g(o!ID6CCfUtzG%Q9)JdPb^`t=e(KDBVBCqx4{k!<{=W+*cgR6o=oW77q2R`3;tE|=R4P)x+eAxERPgAI^;Nf%9U`|6g{UE zsaMxD4*^Crsx0l`wZ%8#NX#AMXwa2X5}QP{v#?m^o+3~x(K_f5Q*siBvPr?rWkoOR zF{5A7_Q`H3gl(`(etX!A`V^pGE`9!)-|M=g^j>$R$^z at 9ZZMGaPaj(4R<9xuj|g$9 zl-PoQ%vpc;F)IV_M$LBQ*w6k$Tkh`f~;{zM8~HLMF}OS9N6H~MlzHY!L(dvOs!Ik at e8*s$D&-majGibeEu z;Z%Arh$6Z>!Sr}vD;w?BwEP|Vm>0_`=GT7`rF4H*cC6Mzbr&@J!4b{vU?(ltrms-K z2j(<$v at qdIGNW2hV7#+)4>E>uO-ECebOT$Z3$kBmBynPYyE=PByj2|l7lXc#W3x>d zG2vSl1In}>T(5ThhUFzJjK|wQCm6M8*reHR5u5_W)(t87$@|XGW^*f>$SrImRTa)z zhOb_tuYX#ONtaWSP5foz45OLlX3`Vo5d-b)jVQ;{A`sk}b<&UG&C)q%#WMQ3f6s0x z5QP~dI3#~mWaiMM0X;+NhrsE_Fp`&glPeJ?XdxiX;6XCE7V%-(2?7t#q?$0ad`J{; zQEDJT7I%~KVwm&C5N%iLi#E4OrbvdAXmMEGc4h=#*KXt`h^l# z857Crio16=cBD$iZJ1WH!m3B4C^q3~OZqs3-vY5^Iij(y`y9+~$hCc}xB!N?^}bK@ zcj6nevK$1_p!hm at opQzoo@9gLVkTS_zZtc$+_ at 41;cn*&Y@%R`zJ^xJx!GKjvrfLN zuGbtWf1^Os!OP$Irwwzg5{)iQ50!x3HCk1pX0I8ZN0kCWM^g2^2ygpk3{yQw78||2 zl;mEcAZ#6(Npw at Uh01V3`*+k)V9RyU7dT_oNDeK!Ty at ojl3+e#HUpApIU@|r zyKte~?h8HtmdTM3rG!>(T*3Lhew z)u7nE4^Dn-I#OV!@1Q^$&1ptA!YT0JkNRN7+!L(f6B>AonTb8Wrpa|??xc-PVZB=b z`dvXGi1 at zG)FmejoPZfm2fWx5CZh*|hmhr{*>E5MTGaL=)^CD3xiws|SDgh7OA{yf zT+phwBVS?;(DfBri`Q<&F>Qsz3dgi787 zVay<7kP)NVFwWkJyh^?|X?USdPezkqDCaiV9f5(6FlN=h%D4N$qou!;mv-OY%afK`9NW zD03EZ2$_g_1J_c~IPvNtKMB)o=nrE1>r|gl!B1kD8=j6f z_NJ20Y#fUH!_rIyKwBdQNaw=R_7a9zeR4y%raSx6^T$C>m~D=kaogTV2RD2|ZBCw6 z8iifl!b9EJPX=qh-B=UM7{&ii=y1sLEYyv)QYGcU9U$|7K1dzdLsFvuqZUq-Eysi* z_nd*C?2WRQ-9ut{pXYgv>&L%gluFS16o`M>GiRbzk#f&2r(HKd*7XIg>lqB3IJm2| zG$o?n(PQV_q22{h(^EFRrJgc0Yh~vrqZRHadR!dVxHzV{l+W2jyR|=nra~>C?~&UU zE_tFh$DU?6{_#9*JPvC-F0q)Urt at I94Cg@iYm%O;4oBYmzPsw)+vq`eRF~wKo>V at M zp#h^E`{77+9rv2|`fp^Cq1w1*T7zUfy;V8VWVQw^YouG4UIza(r(Sg{&yu$8yr#2e zxtQoaX>GLfKt9gyyZh9ON9Cen<)Wo#xh%jLD%K)0)I4$U8 zWCLiHN7Zj=MLG`t{OnxjlGf#BXi=>`AYO7%DAPwUWJ<#_$`_Woi3-^naBD}zd3kjo zeeeiwa4W!w#-s5!Z#F9S;Vjj&IRzp*W=+Y44qqU z1lKvUYSN}jIhUt+a%|b at Wdofvj7wOAx7$VBAetIA!t4~#C4=%cP1iKGssR+Xf!-8@ z!eb(rY|9I-Vs073w@#CdNy;#e{wc$a+j#52YObOudxk+~jYitIk8FW7S4saV12xd8 z>^lxE1RuPg9J(f#rd$v|E#vsmysbuOVh3;De#a2kTY4Utiy}0B_#g-zlG7!?^)xcG zI=C0i{=9wNb_yXN`{5r>AOqdHIM_|aXQKU(>xY|`tdxs+R0m_Itfu6=Pq>$jW+B-lbtr&rV4zK3 zcY27Ay!=aK`q6tOPxjtQdinRQ$4^f?{J86Ea;A;b-K_+|_2`HBYA;jNF5RPK2ZfQe zCzo48h%piW3kCl~N^Xcl*_iLlYP02;?bQ|M4~Vu{9%6as^JjU6o0hTYP6nB3-2N>= z5PfOY+l{W>t9Q4c)QtYX8ZvZ6x%nRcWsp+JeMNTZC3qHJ73uoEc~$ePw4H$b5*;Ol z9xGzVLNkP-a3xe*@MY!@v_Ts^igheosVKA|e^N_PZ&${WfO4alBRF32#?M9j{X4qb z=Ep4xdOMrTGrBBE8X2+OD at tQXd&x%mLg at tUKAY_BZJ2_AYg at BU-e%hEMUr7Bz4UI8!zpo*Nm~>=_$&F8wRm8Q#f`F3FWlHp{IBM~(IM z6KHVU?C0w>jtUbb1`6!38;tj>Sel2cA-OmqHkfTAK9}>WjpW1|HFvKoD}aB4LNeKw zU$SDcSXj?P@^PYcxy9Py#Mp5+?3{uz#R%m4j|{Q_m~95f&MXaEj86SCaKgi|l`;Fa zE{Bc9SO+fVMz79t%&nZT;&ph{w9v zxUlRz{23cay_He%5|^c!SplAC0#}LjMw8Sero9^HA=V`7yMG%}za(J$zGL=_BW_ at S zE$_CXtQv@%cxFGJWX?jc3uyR7S8B_iWX{LWuYOI%==AM^46_YEu7&W|*D@^KS{j`2 zznkNPLZeP6%&&c2%0#z+JY1@}UgS{=MC_6qgoRk(!f>KXHH75Hnxa42U~)4g*M%&}{t+RvMt}%tAqJ zcX!qFp;hLp5=MY8XS2s;T3lB?AV_x+btexlsn9>`iRe1?PeP| zJG%4Q<@vs!P;qP_6P5uhi31y`)1jXdF$7x zOW+(-NTwF#8i4(gS&N&j7UP)AWY?B79^;Bj2PZjU^ zIgz&bnlE$hm_JVzJ~Lnf2p;_mK!)h2Yw*nKWrHpbGf#Z(2))Bp9wz+OF&+Y1H}Ari zO$^%BIc;0XwyXY!Y1D^J+0`H^t!`DTkGAHi*U556BT#m9yMM*?MZMn at -BgdtP{G-npD#tS zERjBve}mV_`RmLg{C3qgPo*n*I6*y~)(3b3j;5hWQpNB=n zAqLWUX>IQuPRX%*IisE_#cZqeNqI;AC)%xm8&Ss!51}e}pTJ1!SJ1mLNec$hOU62O z>-nc`~qWnsJNQ%^eMpQpt^HGuMsLryx-qyZb zY4M5NV;f};Wb7f8*c^jZsOz_G%KgyfGLEZ_4ow1(Pa~u|rZKC7o9ZP`%qz-l{vFG* zLAXi&bGVymbI=6^33#Bj9*7PzVtEaUlwHvkHjQRi3Mo3!j($@vR)22i!}974y1}#> zbphnop(7g;hhH<44Fka~Zb? zH><<;}`|3OT6~ zyu}7obNh{6v?^(M>QM>6te|!lV^jKTy4+clKkB%O{TkOkSr_n8ApMd`aPR=0j(^q- zsBsQGY27h2%Tp3UDg?~eKFCzFNl!26eoXzkO at qu_3`t7JvuY$-Ra;b5HCF3jrGXz@ z)~MgT*3!0b32#K*I;vPxaI9U1Jd9y{TfV-I-FRI?OOS!qv9y2Q{s6os^Mw~-TvwdytKx~ZXqU^Aj#?>Of*Lu z{~_&~(kUecZA|qpoe+b)J?$%$-|LN-|4Z`0%xK8aG(nwVh2*h=7~RLLMrTQW*oWvu zE-yJT=wa0avo$@|G<>A5 at A))R at dp)lEb5M=WyAQgrF#0f_762XR$~?bU3pFl?exU(apJ%HmTUK7K0%~oOm_Wtf_h+cmLz|FK{8Tik=i0=T4QujA at 3BkURW3xm ztJ8?u=_Kg5H;d0FAXJu+<2Fb#~ zQ6%=>`4k-iK!^r=yo<#1Ncqh13<~W=xXwbteOj3&GJSdyO!woxM9M2xZwc&W%Hqb) z*vsvQ9|p7Z at 9c#lU)#dbH<8tYy9VC)`QX9JF~;{3k@&+SVL)HlIu%gq-6iW#?~bET zf7QsX2ukvFoS!QmZY0O}Gx77+}7`>3hZoYqnXI+3nGW4o|3`IN!MOblvalMI8Jg3e{dJS7fs(7PDKukc zMWcU76vP1IMK4q4m0+^{jzdRA7#(>X&*QzlIp^KHAmmia-6LS6;3JJo!}EzPe3`f~ zQO5GFppEK-qpD(YK~qJB;rJUlrqJl_FX@ zsQhr&Dg|`YO~W|(bP?f|$Ph#YIou!n)NN%-cWZ;H=teZjv5DK%4E-vQAG#ANklwf7NAAbCtB0+3 zfdOkx9L>3&FaB2UOoi75x46~@jc&Eq?k9K;%hRUkkfDJsL2|iXRxx7IWT~?PgNFV~ z#VrFUBpWtHc18xsD; zNc$IJN3?=#y4OR>a1oRX<9myzsjWrT{yQOk z>f|g(TPbfn=^{8OXI(&^-lcMro)kI}qOE(6)Bg+#+6D9NmD>mA+K!pjN>g{HOuspu z3e1b^mKDx*JPzel^D at cUUszFReq*A5wsymr at P{Qa;u1Jvh1Qoo-eNOAb*og%yV&O8 z!dZE%Qp3C2=ApA~(G{rR-EI1yP_yty;y_=c_;66Y zP0HYeF1WB6H|f$reW}!)Dd|&Dy(y`$t`Rrs^FLblYO5BE(3sj2j4)?fxn_GMSJ2!l z>dMo`c4?rI(LE|EnWGmKJu0fkj2cfpE3k%@fJT#UT&wtirMsC2_4=+$=*Y*&qtXb0 zp%tJg;h8&tIL6sU4Mbq*Y2iEJ-ucNA|Cy(SD*xGeRn9BcmQwvImYH1htHzd8{i}wV zEBNB{b5`2o^mh-Z^6WqD=Km4cW47qZ6;U+2 at Ss7H@+g_z7%*LauW`1}wVbv1#FglF z$~`MW!svWcv3*~*U7_ at 3$olXhiF-Or6ub;*f0H( z)e8ku%URzP$(9dxE~!#>s782J#tR%YcuZ(Hy9kZ{-0*v;NNP5Mls$f)u<$m$QjfA| zCvw!?z+- at w>AoeEuz~Z~6vwP`NqsvQp=!iq&s})uC at p-OkseEwNuV`i4iGh<83o5fEK%IetB5W((p>mS4&}}5&y+gU$660L?#%W}eV_q4V=r-4( zI+6~!!0Y!W@#+sko8r?*za|h|v~lL^R&J*&VuYT%GWo6fw(kz{82!u-y^d>3 at 1oFt zS^~f>g<(DeG%d>&T^1Krsf+ouRvlm#lQLDc at M8kcLJh}w?oAo4701R`>^qZCRIxzz zOpoivXyOG$4onzIJD5+ at 3OgziDH%SregV at N)_)y9DvfTw?ee80okh)S}_}nXKkMxJXXUrmUsuaobH^-2X9>$ z#T3K-7?(}BTU4g{dPvK=!X7N$4!>w*Ez}Nd7-XqOT!$OA+Y$LDaXbcHsDI=qQZV3NQsS`>p=%kE;08#> z>RKjwq#grvDecq>L5+0=d?nj0vv7*9zj~J0xo)b`MjdZ;e{X>$7eAp|%})hcRU36B z*WIwY1I-3KaeWHdr?#U)Y$f!z=%G5b1mt(jL|ZD0vy z9ekV|LVo;R9|3DJngLy7ItFo0+UvhT<7OToFXk7Y1*PIYp5b$b%*;;xHvF{%B)YU& zc8`kY!im{%`ng<41>QM@&(p-;(gJ at p{WcMHdPN5R;hWKCa2ojyHkr&?(eZOPY~>+T z%u25GlkfigKX4Ay-6Qc3=hcp``^A2ff>B-PYS2e8Q}`A(OVm?wcfnJMos|5t_l3@? zU|lDSh>Phqs#Da=oke!W_G8Qi3J34E%nmtrICGYPpKIJ at 8+@jr*(WuwV=VgU#_e*Z zzuKj)8`=lNFO*yyK$1dOQkzpJSMclBL%|+nP?89^aW4$1o4yJ2zDbV3r*Qy`M>mpkEqNT6`A@~&k{BtA z1lVBaL*nM^^c=-)#<)qWzTyp^ibXAc>nC=qS%-4-O5PC$O5H%Mqw<+T6RcO0h0i#R z@|m&(S%t)mBRXISU3$%UPHH;)WdV(0DW=rfAOcyq6u|r6aD^KnKjCg4Q=N=!GdPSK zYjyww-g2e>Z{5xIC`wWkTVh%`RdpY`%nom`E*UG9B^2ciEAmFchdoY`?KF)xVGZE;D>DcFThNsJ~Ou zs#K>`%aws7X8d-Mc6wL;&+aCo)7w$V=iO5x?Qs|Gz!#Y38I^1zmk=fqw3VieK?O96 z`NLs4wXnF9`M^!aGxI14E3VA87<+Cn=SyCzg%uZDp36y+%Q>4h^PTzdCp_s2Y56eH z4$cq2_t8J8WVaOVk{eLSM`O=ZEhYisNZT`dY(3sRi&>MH zrgd|aLlsf}733moG^{ZcE)RV8>BCu*IYyYL24<5DrA+8N+>(OLXu_@%w#Ltx-P3Jp zwn;9NBO)bOZ!;$&EkjqEwcTT|uH_v;pyOKNg9`($C zS0$-EdwD-b*+=(7O at pmp<%N=0A#WkK2OmfD72Cd!J!n2AB--c0(%wNeYF;&RUd+S# z=_-fmOCs_G|@ht z$V%utoB818nKholHl_a%c?u6i{IEVYQ;H~TQS98~RbIP9Kb`PCb}*w(z)PbHgY%H> z^KTY7rHbDt`tB^5y%0(#`)ZdCmi_+e^`L>&`a}FUfDwd9R3q1s(9f-5B at pBD8Owqi zG7o`;G}Eyd6Cb6a7!?=MIFXI8XY4s^IY4wTbSZ3Al`mRk}nEqoFl<5nn7rjEn1__J5GJ0CqhRfhWSo%!z}1Qrgr zKRdObd1ctgZ?&27;stONBaP8uC#6MUmD2;cY73uN6NbZ5cIj^z1)Z=eK!@4%d;WsD z^B^#8C}Ur|?)$-HWk|E+T?XQwg)_%&)T5yK|2N`hoP5_i2N(!g<~Nkrl5VOIWr6c@ zJ|~bfjAX4R-l|)Kc-elnVY36bQ$-yX{~^$xLFJ=39P{D?%lm1)xUWaYHYn^lE1pKu zv*R>O_3Es0PqUri-nZwIF^tE_QAD9rL#dn%%605$dDx9)PNS$;cWvj33Wg2ap`Wbn^s8?-F3C4j=NhTioKOX@ zS0b|H9%9f$sRLy;OC8KctVh|H#1_F|&|sy#(elAjAC&gHD{KVEQL15=6%Z72s}Od> zA+1uEG>Z`A?kDdh>nBOi;^()*KsgNsAh3ip)3ZibOsNFoLHPDTy0*_SmS;${@?-F4 zW+FDl?;Z`iH5vQ at g(J}lnVQ^3j5RIQ6~m2rOuI16^VNf&=lG>ctm7?EB*Y(>mT*|> zz!Ed+KxUwk(2Yc+FrOaoK~>)pqAVxEJY00Qsv(Tfig|XIj1rpg^J5{xxGoRtKnWYe zR;jiu)Ke=MXXrYp;H+tpR-oCQ^18%!V~t*3tHo!I z|3*ER!--70GuXv(4pUzph}B$uBPFNLfmo%dXGaR-acn?+2<|c)tU$!&qBPYQ(?z}M zoZCeXs}hg2 at JTSdpkTlSwE!5{+X-DbK{kqeN}hIlu%HqrLEDN5(F(SA%KtyP_L}- zCgzD~l+qLiOyX1+N;!<;(m)E6$!V7A+2KDW3^rV=W_d959|G|lYwpEBjr0a@%H^O@ zL-bRDu9VV8{S_zL5F7LAM_t7#1S+9e3nW3~5%`l7a*-^N2}=!#e3{}E72%0}6trnR zJnAuQ`cB-}SQ*`UerhYX^D0jIa{M4P2AD}Sa7?@^%*AR8-odbs%d(8DyKSae6B7ka z2|}0yB2!qdK~Jm%mIX}~(#(~x5go9;rRS-DHoy)70z7 at Tw7T_l3I zb^XdyH&tUNsuGuj93ykUgp?q(QN!{djn_2Yf~}L)#|nr>{_&X}z_Er}S`tYF4naff z^2gq3T<2tU5A2u*KuH8GB(3=y>V$PPR5pyk at VRjKk35BH~*y92J;;k9V5=w?vxeR|}0aT3cYCG7d3?+j%9nxl=^1utH*9DasB0h6 z56Nql)3f8h6>lXwT^!ZhIc3^aESkkSHeS7qC?eB45;dm zb?hP1k_D0S^Bb7hStb-SO6ngY}|=(|eIxlU1?0XbxRPJ>@OOD*I{0 zbIGe|i!|kS35=%2u)}FubZk+c0fwpUql{{xHa>v9+M<%Ha*>3 at A#PcWdUqDi{*&j( zt8>Y+cFB^hQl+ at DEog*wNVs9_zjO*(%@TClQrVm)f;-^ij at QJ8%ts2F0>S;Qd04d?TeVtk(7>yF3^)W#F>6}?*Id$Sm(u>uWq9S1Zm87|=S$ZLkGwh) zL%SU4fCOlzRH=ci#hi?+oy{$B6YIA#?9d7ONB?9(V2J$=VHui6*WGDm ze>-M^46_Jrss2%^P()G(o0((#`7^Y`u)HGEnRmZv+dE+f$tbUYM)R0Du>5?s=;Zrt zyUWGEn*D{{!r0ktj*2&DrCvgVO3Xr>RDpeiX#aLNB z_Q}Pq0KLY9Ue270scvzI;yQ#7*&lT2Ku8 at Nes^!X^FNujiSv+yQeF$*c3l0@$U!{= z(d5DF|9}c6Pa$S39VL>tNQEK0Do|>*!jZ>S3h)s|NdLq}Z-D at unnQo2;!j?wNVw7 at rr zQFNV$6YJP#(-E_4?{8-3&v0=qK$tGAI&d}VS2rg!n9sk=CD}c2e%;x#=kWao0*b5D)t|`u23R at CdW6=1-P}K5=B2c_7D4>Q(g+sp z>CFXg16m8uS`>SzvebiMtJXIt>Rawl<8tcf3(Gre?0?Kd!g@~R7OS$zXnEy{Q0${xFq!q?->7RuYtIo{d_$N(lINF3F^W|uW zuwmK^jvngkfi;f*;X}gg??KtT at E=?Mp%qR3T?zZU#pNL>&gG( zL*Zx at Nx1~{&kHH&4)=S?G&V||%YYwS6z@%*r7FIE$w=yI5qlhXkNtMDA1(>a+BK6= z(U7AX!jkBSw7@!k>~yFXZ}miJ*8uH-7sYhUqRDR_3B73CHk=sY#`T5R9>~%R8+zRX zdm2LGk7!jP7(V)SJw531p>iH at gr7HM6~Se3NnCYLDITw$r-G&Hk$CUMq&3>VheUtS zar*ntdSt{dp2QUr7W~Lpq7+7A!Uec?;BX?C*g`)|v-=rqY{Zj2Gn4>uvXB&@F!wtB z&2*5 at a@ihm-n)K}hkD=o?on*yw%P7=mug>Ol1M~#1-2Cz9{+uj18c7hOf7sD0p?U}x2S;yT-M1iUWrFB`e#pf$vRSzVZPBLPj0K&nN& zoksl>gJD_^)81d?oFvTN=3<0hakXtB_Wq)b?=O5-66xAz znmHa35f&>aUd4V3uA|^nCC;zNL;ldggfto*2KJY9N$bYto zPEb$aKhcGTdcj(1YxqT$^hv|>z#K(nm%j0wZuJCQI)SfYth-7%=QTwL at k>msgT3K0 zw2IplyM(7&Wg^?47mHi!-&l+hf10W#KEN5nE4&vzXE*U&`8B3Pu_!Y-);VzYt(o)n ziv8R|T7q1=u9NDbH2u)2&ZeZ>o0Y!g$|sHB z9%LqP^LqSYe2>>lWRJ!rg<)zXYj|om*_~W2QoNFR8WLu*ea`C&hPUajQTaWag&nG# z-0hDL$}~MqO7 at Ive6T3~#+u~vwj|O1m(9ezMm2l4CJCjpr5DSNQS57|0gDg_2R+-^ zA5F`QVH5*AaB8+BUym9+J-C<+ zhGU_wmPE*vAFT6`Wt8*6C0P~1C&kDvLE?AX1~n#z7%H`OXAex8y9HaYe+q$J-Qp5 zOTJuYGqY6{k+rTt^YT+qlooy__#Ex*(fanB+0ly@|(oPB*-;ESQJ3{QTP65-;b^b3uvq`%hUSuJq;?CZ|cZ`&li;%b53EBT^5|lcwWW zuQ_`Qa~u_0o2qVSKM7nwr;_?e9=MCYjn5Q8lyo`NbC^GzrjN;=(2zKGY#nr)pnm0J zt`TOjzyw=M at D+&j%a_5I`1W`mW^5qY6eeYbsBo2SC64^tvdc%}*>M8%`MrU3NNO3t=7;S$bZb`HQU(^ev#%2g>c+Q;nIL^+)koLK~fL@^pM#0p|h1Ze#RG{i2q) z&?;^xR0hnr7fcg9(V13*jq=sF^F|Q7YW^pow+q!7FmJ^TNd#LRm8(E^d2Ct7 at bc(? z6)Q&yz`tUJeRtE)w&1 at PD+;y$Ay$%{|7WqHeUu<-X}>P at KZun;$8LpwS;{ffxXOpf zs>qi}SV&8=*ukkKikzy<*dft$E0z!b>LrU0j=c8G9>)P4kIIL5<^waI1hZuu57t{q zqv)(JEXijoe1GYz at _sfXcg08`#rhO93X9`Pq&3RwtErh)F`&)Iv=!k1aeBOocj^u) zaz~s7vbn_fOE-o(@7SVbwoA?;_*?%$oD;rf at CBKcx8zUf2&;-1%?%1YYU#$;l#UC= z#nWfsUr#neSAYEpfdabS;AnLa^xeY1ISbQKy%-nRFlNf*bK+sS-pq5q3-o-2SB0yO zp1^D>QswLQhy%i?n3g&Ni6N at C&i?#6cDz&gs9IFy$kW<{*DN(9`S=~L!~topL>*E* z!FKrHRSl5alL4zto~OzST37sly- zcMbTwRz4l*@SOw_I~e&U)+mT zWP0$Qe#|P-uJ>+ZPU9g=-OLz-?twP;Y;J##zqo>{VJ at zQcs_Fz=!OraNEzL+!{pXr zL9W<37N7rl#L%uhkW8WcX^>qPnBeBNvQjwF&OiiaN9iHHRN84xc#)41 zP~++}0q=J91^UzlHr5XF+Y2MCSO#=M$L{^!%@xjxX z`EVWgU^#C3z@;|m#Wys&>IG^~qEJ;@DW?DZH9i at pqMHmgRZ0_?4l3~c at m-P-G63;< zJ4Pf2NT4q|{e)D8H~x5-=@?fG&T3YiAVJ)!Le!~~u*o22OEsq^Zi7x*t?W6HKvGaXfHx>e}nXAARkVr%y%-c3wv4QVT#N4vFb4vz(+ at ssZ+ z7UZbLkW_Rsb>pP0Fa)K-8uk|vZ?wH}YX at wK<qrNw&e?+XQp7W=9|wOCP&NJhf|2Y>JT%S2jhDz{9`J7xhGNo|1gyYeRs{D8$H@%D3!5~KckMmS5Z(d8=RkAJ=68{kH*wkxC at pCY}gdRUZ0H2v#!%g z$(8_Gwc^0xC7fkkS>o#kT!8+BCE)_<7=AT2AAx^mN|nYxqmtRS*!)+fG at Jf2Do>}X zTRLJ7A8CuWi+|k(wkA(F at t`RdRi at AfYgF@>K($PBW`G~-xI#>)WVk6>;3v) z_>(-lA~wN-(x1NBeTLFcvZ5Rd@|f*+g|9Fwce7W$&Duun{smmYXxlAV+#H$nHpBeu zmn3kTVT$pe1H)uHW%%B63IRvcwYuRNXa0m*UQM%|x~5?T6Ybr)HvW{^ABeiQZ2HzI zlAF8lLaNLms#k~=Oq+n{q6Da1nCzaDEo)>IygFWaZo!(AT-kF96S;~NtT4U;Y=$_S02p>AtHY&^zWpmBS)nm(S1^ym2LIn6l1zNQD z1qEa}`33i9I#~V#kJ8or?RWi$%95+ww56z2i;Cbsu$FAhBs*g^ql)%_=LbRMin|9~ zW?5Not%+Ez$hg?}&w|YvWW(5PDis?0^X00U&=!_O#}-0Ije2BR(|ckbvkO#0OTOfP z8!T3n*=340CCblpJMCr54r4}x`~o^epW=rz9<@sD1aaH7EIJg;?FiptU+z$c+Ny+_=btbqKBbGyL2yeoiOx32RU8 z(Ce~cYVPADw!tS!i8^AY^bVKLD+{&ht=kt{@1{0|Ke;|*O~E+pfM!?XljYk!*gtry?=K!Svp`en{!dmIUOefnD=ti8F at PbXi&Mij`b(} zx{QG22lSA9%RMUsmyOGt%vV(3YM~XnpmzRVt+ilmYWe*OA<%h5=#{0vg1ht5ty>_Jc`nr-ZW#y0Dz~0dIdaX}J-qu?OX2+ezZ9fDQf70$o3-ep*y&a~~ zO``DdaScv~K}g}e4? zbv-D%f~D;1^}EQ1moQVVqk#XwQcQKXyLYTtExf{5%QmQQu>~)DezEjzL+bm3PJcbu z&-^y(F}1EzyZw|;IzcSb$S+g-qEcty)-e}==z0gEAGV2aUMwjol|h*wotc(5B+X%L zq91MrDFMT;1)s<+nYk-L4)mQ)@ViYUC--K8L+bRcom1oz4h@``5C%CxtGKVQOYg8A ze_pxQ@^{(4Ci{lUbiL7dyL*YG;FFuEye)_P88r?Weckg9dd1!43cW&mgHTA3In`W02_WD1${sY&rBN_;Wu*Ds;Y zh_4h;o;$b7{DPWKN=Y?5Gd&zwZ at 9kZL^+5wIVuhL-;|xd1F_D4jt at S&f43fYZ{_=E zsWD{p@$$j~NF$4(FX~kYs~Ad?3TqJW`bU#T?$i6psAN#(YJZC7tQ`x_^ISQWlIyl@ z9JXbub<1j3V|OusSA4rSIvbwhl at N48sF57x)IffjWB`IOhYZce{Ogv8jU9G at 4IM4!=mara&)kF zc5RJ}3s>Bwx6jUeh!_mUCw#=OoWpod$hZp_6eK%uzmKe~MiQ}DtcaFhRWP8K_#O*c zBjze8DTObR_>j64*9au~_xeT8rd=?Ocbez?3#F*S3JQ+wCpGeOI;!dG9+ zSvA{VbzS}4?WX)o;^E=padKQ(U>O>$!yWc4pQ~eP;|ody2QpzFk?zPzvq6U`WxSsP zwbcv3*)Dbnh423o59Gr at I$9S$56ljqfL{&2L`&dbt#a2QVHNC7#F}F*PR_YY*V|ki zj$3#hgyN^UD?J$d?6C{KbdNZ!vqSA4zt5;5NnDyE9jJ zg0rE5)dt;9j$FsyoBZwmgs)%5a@)=+oPI(5mS`OZxjjPL$U5E136XvBGoax~$CBJg z?tZ*q%K6*5JWQKmG+J)1Q%Atf6pXx=YHCx=QT`|RG5SSL=TWJ6VewIpt4A>bV!_(< z7SQGL6lL163>Mnqt~#rx0+@&# zpMs#2;n13Sie1R=|5V6-X{EKU zJpKRgSDO45XKYTgvvisD6A}_qqyIKS#_|8VG5NoZUm2mf_4iS)@5UHVc+pdM(J_0` z{S&F{h@@^VdqDg|1&>tC*T?Sbx{e#AKYH>13Y?Q(Z166GK3sOBF#z4&rjPcphWfC9 zee%k{kOLOHAbO_Lk7=Y{!3Hc!1MG_RMbz78g*DjuSC3&88-cUZ-Grng+ot^x6WRU3 z?cjni?7%{Io6R(S#HR~kON7FM!WRM117eutQt%NJvDAdejH2P)`0iQ^2NYe2R<4;1 zz4h=`LNKd!c6MriPj`oMA_|m~)B9SKh2}=o zzaMJ=9Ois~8xAQ1hHl8Af5105E zM;BkI7wd=Fp|3c9I0+S=gh2_IQN}79(B$nLaTi$75jjfO^QbT~2{>R2HVK;)-iQ*J zP^t)zR50=OZ&OwpegHr-8W-R%Qz0X;dqjj7b4x#AM*+iqeza9e$ij!QZ}c?HD-zT# zxvrWR9#e%hSWHkkE7HpqK5iBkI81A`aRfTdz&mj|9s-tD{X(d6c9(X<)-4B=DKHi> zhT#oc!Kds=9eJ(bA9Zmz0D>o^vUgRczmL6V9z>wPfKwgZ_PsIbng^Q_2l}=KVH1U< ze&>iik9#n-JdWI5ON=6 at l-Ad!bT9#Xq1!`D8$dkZ2@@edABc5moA4ID9I^$gVq%Gi z`U;#}&UfT)8~eY9iJS~NX9YNR>d~v%@=-uW=T+z<~c2bwCK_{V>oavEC&H{&cXe`!41o>OG7DHrheJHdrC?(3Lr z&*BJFaN|+{AJIgqdMe{AW}FYhaUC9*8XfwD+M{9hFw z*Pn_lPJBm;lmx9bb|>Ehp14!z4+?5Bl$3&iK7HhKusn* z%}K*4H(3#(MX0g)FWtQPrz`IA%LhL$m(Rw6KeQQqme>h!j`=jn2zL(izcqsB8}K(~ z0Ul>U^-2rn?Rxsze*n1K+2GGpN3%#mi14n--Csm3yMMdpEa~rDG$zHP-GXjF& zJ9^()fc_M6l!F|7Rwe=3MZN%@$;5!)HJk>V4m*ra`9T9l29YgM#%wRpTc&WY%&23T z>Z4gG{6(=6MS(z0 at rm;GK_;zdE|Sflzi|C*P{W>Jk at EvraB4O1V{{Lb-0_Ficz~hm z09Md^&3bg|QshGJkhn7pk#K;^4^_%JsmKl*79 z*_{{xTCW^0bZWC0GY?fb7t;&suL at O@Cb(e!qb2B{fb*I;Vz7uy{xVc)OCb+JR7 at IA z3)3qc+iqux9FM*Pk>0~8ZToGT230#$4Oi9FPB{d#{abnXcb2UHrZPPm#pxr^t9^Zt z4Knj~EXU}q+z0#=LCR-_aQj&9SAgOZftr0#5DF2} zVQ~3dFh$U&z)PK7#H=6dFViMG_uYwM9V!uaIM}j5rvLI1c#uL9?*4f5oiW9##?#y7 z at C#mBY_yMisA%S{eM7j(Xd z%HI*FZ*|wjMuucAGo^yuUx9Sr;!SW{ZT%936>0MN-TV3no~6mP*WWO8xjzbLIu5Jq zx()W&3C at yWIhp)?%T0TedZ%*J-*{l0U~SX>{+C`G?do=mDf=^2JNGYiVDf%u4}s$8*szuS-5v`;%F7(nhuZ$-@$_++Q`rL53Q5 zp&|i48eUp$D_ZQks+ZIBJf+M0HuFXG-8QucwI^PSif(rlgF>~>PA~lXD;;t1OIG;L z-h-bCo{}~ef;knF^G`xd_gXM3VpCY`wE}s?mFDf!K(@tw22ZTKhq4kTKXdT&?u}Pg zGs$=X4%NDh8;bmh+ at Z?Q&)piwTI~8Qs>9plrq-9)jDg8w!VS5I#;>%pwrYhFb>BB` zb>dC%USI<0IdFKB&wq*+Ua|RgI4ulv&~2%)eeL9uJ)q)C;SsovjC~2Y86vb1<$>&E zTQ*{MfM(f_fDq%*sA0l|`1TCD{QFl=3Iq6I;{ll1=G+Xq8#6cB%E4eKXmwMD5kbFb zlfq~8VAVNgWv>nK*doa?+;*haVRx>kx#Xl?py12g39 at xGz2^sXE znahJI<&oZz7%Ti&oT418^yQJsCL<}xudrC*7nn=oNhPj(PeQvgh(Yyx3yTQz<h(W8~M1h!BvPLUqQfYuvUu(#A);hI<`j7Lov!wA}6GEYP zy?Cel!m6tWaXx9j92{Eb*5r}jM8>n>_2!`Z at Y{64$dPx!Ye(S0p5xm(B4f&q)J;)} z3fJKDLZ4@=w)GvAEI*HErvjzx<_?;R`Hzgll8&kkYaXB76XLh%?}LdwIs0^hGo%if`B~!Km3jZ9+}jo zSGnKMnDk#i<*oOwZ~IMbsgX=Zh=1>lGmCn1?<)iNp~6f3<2?=E-L zAhTaNb9fSD_W}SwZTYD{xzj+_*ocp0{~^ zw{K*9mCA$wa~wulykaZb|M+wT%Zac9I((~k6sK5C#|yZhn4=(nffp+0Ic+Iqg|ECm z))?V{P$GFd;WjLDS0TR-aRIEhd;(F#0pAjnEkk37XxekM&(GkamvFv&8avxN3%x(W zLM))s;}Vq(x$e^a&ID#ptm#?zc);6jUlgK6tvdj639|%uLgk~-(RIYvu7H1A&3{jF z|M(Nf=ym##$ptJjtv8&3ScU3r08hc*)4%r6K?QwO^7HuK2YYYj6 at Q?878*vRM379; zVx>VtM*e=XV;bnglkW$$-S)q`xKRtcO3i{0XOH9R(}0lk*%%B5UF;m|N`0&j_S&Ul zrJL!_-szyYpKS>$sfs8wUz@$XTj=Zo0<VH?4Ci1+|7h_SISYVkA}Q^;(s9IO@#y7XM2k zn|ow;`RA1rFe^q)+&$DhtR+~Z^D^M^_;ag=ho&Q=tJd3RRl@|FzI>NBk8;<+rt;MW zUDk1&Tw5jX2RvkZ#V>N0uqRFGCYHdslWSlNdudw0X#!^z#~RfnZwFgLN`nihd^ij6 zX+uj;iHUw|e>hXx(U0Yoz8IPo|+$Uc0{c?WM0d at 6et0j-HR=uyz`AD6?5ss5 at YvY zA at D^PkVsfUfKxb$?Cm_p$ssxG3zx_1eIDKa_=`W#i(O85Q`sLheb~qj$Oh^-o6y?c zlsxOf1FX?7y%nMqj+>vG)gl}bU4a%!wsw?}}OZz$%*+EYG$k at 0O7c$yyG zs%8;Vx9D-1;a_0+-okda&JLnAUO*6$y95$&mr$v5eWFlnCQYiW_!|KH6=CphE|lQP zjC2`)3}|LpB->_19c{pucT><{@fFEVV(~5 zZ+oy5f1bE)>-Oh84bjkVgW&Uv(|XM8iyLRTtrM2d++Q(xt_$Q2wT zHnf-bpRx>8V*$f5G=4(MiDw=n2=mhw42RX8OPkbrP2k6ookM2|$X_STg5zvdS9>=4 ztN;g at KS>FV2?C-0y8Z}vX5ol2gfk{900*qT< zlIy}fN)oM7 at Pl1~OCpD`#nPP9X3h2a&3lTe#nZ=$QmNK- at DGWE;m4OScrAvgmCy^ z*o40=ny4ke9|-ptb<#rZBh9VTR~z<$%1yiE!UvUnx$7QYK-FwqcLpE~rlbtUnickp z!#|bJrV^()>Amf*)+WOmA{0Re at -H`n){V&70 zNJGLG=w%2R;1pd_t zUM=I`Fedbg()<%%+FKsv;}n#-ovaj55%=u7Ih(>x8g#o7s5=>feYid+C#UH>+}a$~ z&Ta5V_;L?YNX2IV%*ECTFnap6RvqxAxS^7Zn6(1+7Yz-aPo7|%2P%TgHM?I994$G) zeGZy8MZoVk=hIGJ+yeXJm&2K%A!(;@jJr*FSY#8z;_n4*ThMdRe$E->p!rO4CvKMr zHyZ+$5>5S&k)`GO?5uo;53zOjqT_5M{^n~L^ZnE`M7YH%A~bxh)%LLnaLd^x&YE4k8cb!geS85Fv at K*rJs zKmU^?Q!oQrxhQlZ*}`^@4A<#|Yytiy7f~8Gi|v|=L{|?yM(J1j<^@?H>(cT7^F{F1 z{mP*WGTW#E9GLk6XJtg#qz+Z6;Um5YjZEnuhD&$#{CiNl3pZx@?#Hm%0q+1@|DbJD zH?v^${w~#3^PSu^YgfW>#HJqc5r0W2NZ3FrmROrwf4dx4Ik;Zh1ACt|J8KK%f7$i` zK6E_ACibu at XU@rZEiLPp-R>2mKT5n at Zne;}6>s=K})dP2C2( z&m{|R>>gY8D9(mL!i(So0H*76N}B!=IyexW7}EM=9{d0s?bsSDO!$s##~0wHnP>VR zPS#$z4nX9s))g__-MO=^-V+TcDDf~vU at C>YIUNY)aK#2Fkm41?G*&tf7S#tTQf)AN zoaY6RO$Wg**gdy2y0dW9wVT=pBvo@?#zV$J7KUJsg9vJDo<vmar05RWr7K`lTiuWOwlI9{ZVR>G!KUU*K5!!pPsNst=GVu*x!`4=sya8ZU2OQKSn=4CPt=QS}bK83weoT z17Hm&irsq(^dqC;O^Nxj+<4f+-)iE*-*%;@=>>HcV&c+6FTzFePg3vdZi5{UD%pWQ z-erOpaYxnV?qlYbR~yUAJ^sp(@&T1;TZCRi%Z28p6L7pC4=sRmfW4 zNMf#4KXCQa3U<$vJrLdm5QQdmFmn?nL9n%p;J at I>l-wx$ZtJp!`l7(wHkduv*wc=$ zS+o;iUIysf%Q~W5IA>wm$n-+74XNwb_q6@)aLN0!wGH2yL8f3xc(axK-6eoO!96+W zupI?YmvS8SE`?3vyU&c at 7=`;^mJ^C?TG7Td`qKKmyP@&|mqw6X4J7VqC}95WA?GjR z1iFbI0QOGKL7Rp{#33I2dW7tS!r?1xU__85Lc<-B?JD7);ipG)vCBg+x4W7NQm6yB z9y6jPaYc&|jZY09_YvN_vq&EFWs;cc7WH(YNq_ke!5FH-L9BMbflkpEBJhg^iqC}J zH8k^aT56F#>JF1tTqa}x0bbsk5}nn z-r8ow&y7Cfz>PXySm`OeEm>>-pqZ&nCNnvaM`4hKF3t7YC=Yk{sF-fR5!`f+pOt;4AjSJ{;4jyv$ILr_yL+iWd_TOVQ^EU?pS zOa#au;TbM{lHtn^dEp%XCu at 4m`LWLn;L`lU=I}~Z0e`vaAV+!Rh0I7;S@UOD3G^*k>In2k2%);CK zv=lw|Xf*KM#|jCv?K(Wf;`%e4s#7`It>@PDQp?U&Zwqoyope6$Ukfe}sTG*-vmtCiIaLh7Lq5T#-I-X;nlEPuXC|?Bff7WLuOBd6)zISKBqaRI|Gj{nIlfw=lK#(@ zssG=(t`@Li0xbu;bEtGp!8`GP9;RtNV!C(rF at 2=>vU2ClX z08Mr0>+&nX65Ay5TIt9ZAFG0;Rmf)>6<0AnoGSfU))XzRz>Lch?~!_t-b0!5Y=@Vs zqqee4gHuZSH$dEq8NINEnl4LDlTU{3Mw|9O#=yGE*D at FU8LigxlYl|XGy zeY9pq7!9VVrq{8knH}hr(pnQ9{=t$@xLDFYDqc!(4%5=#)BC~gHi-S2pZ?biM1`!U z)x|VkL4=i71kizNZqfTAcL$WA`#b--CtnjI7bEJ=7a_J;4sp*O9@pNJ>vM-^`{fmxe!6Sukd$Ps zv+*~BS7?{(-4L4~cB ztgtopv)cyF))O9&EnnJA;z{GA at GNF`%)7 at F)|r0*=qk)T-jPJ8gP3umQqt>@)tpjV z>L)oGmdDZ81N`~&AkqLqwk_p=DLpqDj2-*fl#fTN! z#m50r7IE)`)n5hPh@?Y)d_*5v>+%vMldsmC>UMfT<@`)P_hbf&S&gU!u_=WU(qp!l z*XCo=+HUNs$YL5dsA8z+O2}l4t1GqHZmahB|8jn_Ppd<{vkh16AVWk1)m|^6hI1sz zm$)%IQ@<3Rxz3eyv59!@a>Dp~FMv>FOjP^*J3<1vT+y4EmX$6OxNqDOtu>5m^|_N$ zd?y}c^|68S_RdgYvVi=JFp6tF)hz0Co9qU>9NI6ckI-diEBPM>DsHxlQIB8<0@^8< ziX8{DL{4jYtv|)d2z$!7z()n;&nKbHtF&~WZwzLy-$OaL4l4F1>6BeZQ?TCdKiwWh zRt(rcWye1vf>ksipsxmsj05g(>9$-xKHo!CIm+KusK8$^*-hh=1RFQLf%2UP5H7Kz zDutGwyyqK_y4gwEV!>b2mQbUf_@^}PBlkwUUT2yOWL#2V{2`5~9hL>*z;jLaL~N3W zccE5S1Vpmxq<4*|xyI)AJ^o~GKQZv9b8-TWqT(S%rCma;6Hbjqs8p)u4+nos&saY=ORLG1Fe7z1y2<1boRkvH5&nnDve#azy*r^3gtJ zzw(Od3b;=94mnnIJ0g{Q6MML`)gd}=bz|`~5SV&a;}7wI=~;ZER^q-ka4YI#;+l$D z4pnX`U)G1VCqeVi!hE*@D%d at 0^8+{D-=;4-*CU7OP9sjJTS7aJQD?z$%8^LM{)zG+qi#INl*V zgukusrTo4Ac<#FpBtwEjdT(NDbWmnSS2p)vB;?b*PlBvfJ6pE=?(&)+dNBiPOezC) zG3;~puHE4m<41MyTO$RQQOP1cc7;wYFBqBCD8;u0gUP4F7MXn`S>@7QbOxs3svkI3DSDcc{21*=asr&k9lYK7aXHiEhBGw6m*- zn!AP8#f9qrDi^MMK9~_ zEO)l8dv2 at -qQsNjlUmRsn&S at 9*e_pdFazCZQkFmcvt?UUO*>7RKeQRoVqF_jfRmO~ zx7wX)YR3c{%rkxsez5)lOhM(xs2QPjL_90=^USMXM4i7{C~o(Vc*z%c at yl|}W>#u* zZt-mMHJ4DH!;?Gf{EAJF|MU#MHBVRQwn>kgZ+>knRZsyN41LGmGP-|VV!lWz;-fg% zy_aot7%w7Jnt~CM+(3<=y^Ryp^XYPKSI<>cY5atHO8R_IN_I}&CM~!B ztD*0yFLa9zQ!T}=$vlO}EDr;<3x>4*E*bZXA27+aX at R4<3O?b7{1u#nlQ$E0uAOk5 z5Glpf`Mun7h2%4Cy*N#}OCo&>K)%Ycp?|<@?tN>)!4Z5DGNgWEnEBRrF4YufvXq$Z z-9N9HO~*OXYj*$!FBR>SDzOaEkq8!LwbV)w6Ih=gSWqUks+|lE)R0bjc^x0jOM9|L z0$QR56IZpXZlt37AKxA*i0j}7&Z zGfp3$tezts$f&|#wFpDw8ml2+sE)6#So`j2uY%usnA*+fgTb!9PafUXoTk4mfY764 zw`CMR==PzoCta!)I`!5}GZFrJuc0&!d7n5wGnc{>k%majjphxbUh|-;Ka{iHsVZNR zDp!B!8c-M0p`17sJP;z)_R=;NKttMeOKqQZYK3LuUBfpNthG3*&;Q$B?MfOEtjg{~ z-6=x-JNX{y$q9xTer=+z$fJ9o&&iO?jjQibm1MUdSEgE2AdVOCLyn=zsmFM~F`8Mu z<0&Y2uZN3jXN`&StP$4Qr}i{4^2USg1}^}e>(*zA)bnRG=eOeunar=g1o+6g8FKvK z)u15$w15RIYIuDV2oR;`(+kF;;Ol;I=18IbCt2kwJ3SA-nbT1z^1O(_kF!U~95?T< zgtX_n#j)y$gnw*Jxfk{O0U-s9B?@nfW8yk at cw`%{O&8IfQ-^XobM!l>diSwf4*!O!P z&HM2>+oiF*3RzLQD_5}kejqgYMnmMc1l at e}$SJj8=*zb>Cg*csQ7#|Sc=GkykZ(pa zMT#D&>1DP4xT#704ElZ*Ye22|!B2=&iFX;b0tUF+bP=2Ng0d zcS-t^cG|RCei#Cy&zLgg}h_;zi$tXd!iEGRS=e6 at Pa4gdVf#*RL$;qq=if zb+*p!%L%89CQH<&wqs!`nbYNEej$t`KNMJ3L^D#aGAKnUewO?v_LzwCWZU; zZRRlMtK%o=4fQsNUwLxEUl>35?Q&{L8WE|Jm~R0+fByNJo_1Dm>2>sIk at 4mYn&K~z zKWO}l{I5Kx(K`s8a64Y>?b_7`D$f2pypwNF!RMUC-K|Kg<};P;>tX57{4~*qMI~S9 zZ;X?X%sTC(KOf!K_zL(NAcW8$2AgM7v4(9r~k^SHSWT$$uLa2XRLM?7QUw ziS8Ub*jnNRCMD-uNr{A~Hep=%TS-%CR7GXTnJ|ejbeFWR3pd&H69rqOI=;{;?xh9!9!6hhiJzT-W4r zDFX_fKl~%k8&^)!v-SIFfhNl>b{X%jg_#@L2T2h_fo+G+*pPC=;w1P#-xgOV;}eSX^e`^%{9A)9TnL)*SH@}bxs at MMQK!nNfW?_ zI%Y8v_%DOTQK*l)@;28u2sVu2X7)cjlOss&Nbm3XlWS;R_j|Ywza{qR%ta5Xjeqq4 zAQ-m*_l{CLT278J3zJe+p)-|QY9~omhcQ=J9Z6)ng*<&=ElXT)uZAvbJ$2u`JI^4g zHSO~;;KQ;F&5!4W=yw&gACi!X!Ke at IO~o+03^8ks?d5)^bxv>r^YK}mSQBet=|(s+ z39eB~hTFdDaU`URp{ChhJ;dQGhjj%;&feDP!H$ko4(Jz+H}H8`yV-gt&z5mCa-0i5 zDG{V1{wFmgw2OFMvZ1^sHf%&GFvN at 3uDgC|@`GIw;Ce*z1i>KV at oD*}Yi||mDe^-J zF{@i)dlzXwr+`lPQhgYf9#`u3O7ZD5y?G)@m7Yu z{&}QRHWpfkD|S}Aq{AG87P&9gvQzenM_gi`@>Ywl7rjefLl+zb-4I0^k)-N87!0~S zWn|3-8%KH=kB8Wb+4s z at NYOFz=V;G>H8ww at wWnhu1qe=4~QFH$@517>G{UJxpjSM$lY3K#>rfk3s(cQcfrL^g;psXb=5gHR%p0jAW)&Gy zyw%scoDC$Njpuno2bGQrdu at kCyRCGoALb7h1*V;Sj{kTjer%zHJyv*f&o at K@kXTGv z6{>fG&r_QIP3{aC at Mv=vFk at Hpe(O0yqp2$;FrA6CsPj0^ET at pH$6`@Q-tVG-uf)ZJ zoR8adeQ?Yu&%MUpurm;u8DiPvW9BbbQY9-HPj6dwze-elm*u>dlb8wxi9QP44%)0u7hS?G_JGsR+%GnsDc}Df7&gDn^#HqF+;wH~^BLvc9_A z at ZIx^v*wC at oUELTUWt~w{q&v8QdG<5qIO at u17?XHdCbl6H2o5>XCmGS-PgKuuis=H zpobXpOZHq%X(I>km!CLuUo+~!X)-tP%7eTt}x&Gw?@8Ir_cHc at Qjq1kS=W>c0;^?`5-&Mdrl?X~%mU{Su z@#~Z!es2;9i&BmJU~p}_`-xJEWl9J4O%)Q&F>og=#J|XK?K;#&zYqFq$kmHC#aNU4 zc&zbV3N20hN~R25o1n7q&qmZ>-|PpSr4UcbU-z6CKgY?bqQw^ygNz$%NQ8dcV5wr!=5(AV6kGU~;j_TSm^8+PCkHW%Hc zI>G$bWQ(>wZ#LNqjYKCl4GNqGV68+X0o`}7lajrRdO-6;u<=q~+Lb#=4wp2V_sdp4 z@;=AZM%P}o$sPA%luH+}iL>P;xs2?%eed}Gmvok+V at W=#JDMV>^HK9LvDg-_Is?PM zi7uRi?jv(pGtJKG8^iI(x6`7AM*w$~h%9*yZ!@lu!kKhox4AF zeOCuVN>y_j^E*dXtH|tMcOET>4oCZQNV50+4pi8RIfNV zmCNAvkI~;G`VQGbbJym2<@7$?rE<_H&lxGzT_BX6Y+s;@UQn4_Xec(AUH~7EdQ0u* z2TW>8oYk?kGhwGZAD*y7mlBw1NL!0O6mvUC at duX5avs-wM7V@#rq(E!rdFUR50_P# z3}8w6 at NQaNlWX*s(IMLJ&I at f6M%96g at us)f6}B36dSbwMxqwHZKRwJNz6cpuD=-XK zjx9b|f3OW|#U86eIJ}hU!X(}n8D2bQZ~vU+!T9H at u;k*28{W0g&reSXv;re~p$Fz; z=D6HsDZDdljyJj3q!^>i(+kXd9r#fHU}A@$x6dQ30?~gt1c7A2c!#_(Kj_d za-?tDctj>}A9`-HZ+0{&KOk5?ZjD+F=7uW%(JJu)zm~`WnsPY?Day9n(?6q zD_Wtv^Yjpm?WQK5UFE<^wvb6WHD(18?UN5*b!#A(vBvk1+_i=?tg5O50AGhdFdH)F zLg#hjK%`9h`Tnkhlh3OS0IjZ6m>>!igK6`l at 7Ax^E{Trb03Nh*du=Q+Uo zt!{{k6#oaKErrL zClqvE?PF2Rs4mIFb%@8`q~t^c=hnHS`aF3a{ZdaI=~jL)6(R~^Hu*?jW^Vd@{2oAv|M zT=e3bSr$6gZEl4AF0g|@aZ)iF1UZSEJTDAI;P^#7l)pu?S}$e9+wi`ANlQQMby)d3 z%D<`F at oh8dF2w(cCr|&GqDlmoBQa{_gXb1PHA9R0W=91b%^V1nQcm>B`YTy?%W$&q zh`B9dKQh4N$ze1f&CK_x1$Sjn4 at 45Y-g;#;M54;SNsbzGn+1$%j9Kk7Pum%L%Wr3j zn6iz1!gEv0Mby1C{#)(ymcX49ERg!@JVVWl<J7Ss*DcKehvg+^v7m;`Z9m;5sewir3o~n(z6%@A=pO+F`%G$G at LNwP5s9(YVoYzn z84UBtd$r$VPv8 at e=rl^0#u=uMXI8!xq%46+C$d;L5^Im&N$^DW)cn54Y|gj=4(VXK zOInx5!67d{7q0#lrF|qJJ>imfH+$4ifzlJz=rEkTy%Q&(S^>P5S3;RflVrF~n}*g6 zZXHO0cT2PKxsyyqP=5b=4K>5%sz!cWgPk>K%(XLC?#^f$@kP?=VY&xroyvj2Gpppp zJS(XbhvOZ*dfA#6=NhDFDB2+2a-&g9!KLD8MXyh3m6&7nICTHR_(T at MhxC=-fU9Hg zdHS2YXJOA;_WvF-fyRCj#5VD)qCL+-IES<^GloC2-komi at O7S~I0a8QFzLKd^afGU z(|&tt=yZk!pV{iXX)$al-o4ci+NW~`RBohZg7_Z%oU^QqSO5K&(qj%z9q|4MnTt)P zstK>JvM0_|d>UPU`z++$RA8iLj)tLo{k5_9L`V8-s&6oX*Jt8?M*i59(&%mYj%H7* zN-~I^a}bxd8lA6n_+pgCI;3dTu1;3|mcK)EH;tWqshDK>w*E`>*ZZRdESDkB zAdSv~Nr|#FT;uCAM-Dxq^UX`5vpI5EI%lfOT^{2Om~MUevbi>JDvT+%IqN@TbXGhYwWl3qbGCE>rR## z at i;uQnyZ_}?{YiE6l&&ol&4I;D^xUW|N2EYK+WAP4l1kF&3(9##=DIV8H06MpNzH=>N9#OKDV+HJSLBz-)QPjtFBDQ;3J!1oZn_n>P_k+B%?KKp zXPK}=Q9tK%JEB_SIdjW8Q_m)E42eK|&O^20)&@=YxtM3R`Ri8dKdCJ)I~VRfo*HFM zNdGehSS3Dv-FU64Dxd($VH>g_UBt$ArB#$7Mj|H#Ct6QOIdwm&JLXY=$GSji|KBgZ8MfG0vpZ%})&NHZ~ZSCVA z2oVGk1T2UlD1wv_I-yAs^eCtl0cnO1LQMh*BoygV1*8`d5CIEPq>6-&ptQ&lLAoFi ziX57pfRx;Lj at NVUojdoPe7H03hwKlTwb%Tg=UMx=|Czn_?5vee>jUu1V8H`jk1Y-Q z>xS>`g~#&t`HI0o2hVkgOHK3zj#6uUmM-LYh-dn+r(10h%Y{5{&A at V%E!v19i-B-0cr(kwtyQ>qtc#Tdv z`Hdn453PUG!g)N)j&xs=n#uFZv!YnGtPi7cRJMnbUxSW_6gfE#lV#*=zKqpsMTn(j z;k74?BP$#9TiY5Is~ZlRA&Nta*w5 at fa3FQL?K at H7ycrxbyyvl(W{4FdD`i;R#|ub{ z^$H7EE;Zbd7cVHzFi=f+?gt+X?jCsFLAxHzj;TG$E1nnf9$)zugbD_w^#Yie?5j at J zO0d?ehYmLMjIKr?>{cMv{3my^FmrPh@@+~H1oCxEUo>ID(jqh%!=LYQ zkF5oBq+XtJr-U%S;L)_Dj+tBLd4z+in0fgMrqquD`oi_2%X=5k!P#r;p~nd$_%Q$c zo@{(^+L>L1lQFVv=HoZ!+0j{tMpbgjsnXk*- zgst$8-N35Crn5S2jW5>n<%go1 zgq^f^6e99AUcHqYL73~?nF`=Cv1k&9 zQwA@$dcLk|d)@1LKK0Uyzoso=1^ZHK*ZRZCEh)VdbJH8$iOf&$meJnZm$J`4FlP~r zAK7_p`-pFDlZ at vK(tCfb%8)&BQee}<(N0DEjK44wpNid=j3^B6wRK4NozK68neR2Z zxle?qCq+AIDP->w>!9^(-NA>F>>l+edjn}}hHM*tQgh9QVtNJw%TIAn3B}qCY)xWa zKE`?AZBFY)Ji0AJ&Ev20DdHL&+?KLGdiKLynNdXVo<={q_V#LztHm(dC%UurHU%T>!W_4h+sTZ=U52 z`?c8`IGEE*TKc?*^pfJ~CDy#m#7lz(zD~%G6l}d(T{0?Lnz9hT59bPvdq0KVFg&cc zl7Q_zmItd5-4T`bgL5^%X<9i`<)vq?tHaD!a5G4IzUQV=oz%y8 at -|_YQ~c(ch!<5K z$@rkYrpf4w_H0h3_HtW$>Zd8~=ip7mSpdqFQju&&8N8RWQuL0}DC(ytsl%h5Au`pm zV*(~3sVuGWw>DLii)C!tZF1sUb28d>m%1f2Grq_#hf1dG-&Jg1w8>}lcn}fRhADJ8 z%i&q7T1C{?d-Gf(0DAEA9N(*)G*tul(Jx5^xx|7kX)P>Uswd0<0 at 7ETZB?#=+&aoB~{8pR9LDh;CZDap}Ixw;%JB&cY)>kGu1fUZ=W~z%zMVLf7 z%CFg8l+bKIS1rCtkSS>+0uuVGH7@$p9aF9}sgyR{SI;p?yJUV<@p%NV?me6_ at z{ee z%zsoAFs=yNl6#lH8R1stE}FJ$7S-3uUH4 at dvD2I1dn3H}jlH1Zy(6LdJ?Z-?F52C2 zWwwT!r#PlqmtFQz{}RRwFF+8__(5*y+BNlo5&h<)>&C$(}ch4mwKUz z0P?@ ziaSu5^X?vJN}A^)l3&p7Zr&TS33_R<%cRCbOXpxZi^PFf-Q9;Sh#ClmBG39*6zR=S zy&_D^UrlFpMC(c1O_zfV_EjB=x=|GgLz+MTbSq4)Lekxtt3;GwpQL=aQTm|yMDXAYtj z{6|Gd;kZw?pGu+Hea!VQdjsNI!Yq<`6;ea})wg4HBw2IkN?KGRoi*a6)hYoM76%lC z+%&)hw}tgMd`jvJ}bx(jev=w*No72O%8u*A0f00>VetRr1ka55!R5)H>60MpGfCuU(`K<>*VO|>-PxF zX0`KtY*}E#k)3gtwwB3YjR&0hAIdPh4V|+Z=;~t+OV4G&-KF7`RXxy5~DKKIF9+{&xQO)LmSENOhPu zi(X*EPAIo;uVnd9w+?sPE9;t^=R3sK56|yVh8C5&MqD$LuI#<+EF3nTu=CtSJ#h0k z(m4b>*hpI8>fMsnhQ5{q5@{6s%uM* z<#wgpQN9^&{jr^R7}M5OAThJ-;z3^dw5S3k3zO0BLD*s1u;H1nvkN3`lTyLt&u=4bUHXp|tk*ZZHV=hXm)U0n+|n5NKg| z4XBIuL;w|JAkuJIc?Ft6wm~Q1O5U-0p*l|a>3V0#$$je{3L4 z4q8jy)4>sHtf&8 at CT&jxm=pnFhPiG9y8I1yd&kM6hd*L)dpzno#Za)qVhWS|th5Z4Lh7wGGVZaa> zS at 6%yv_N%QCsfxH0mGp^P0?sK%|8!c-`Nv^M|-+rfx0I0>fa;(Mf6wIzv2;kFdRaY z#zRF~R#943$rPgUor<&XBz!(%# z9sF14e;wbSqo&z{W=rr-U;cCGKTqZVr12N`|4I5klQN3X1($(~fr~Bzbcq at 6V&I~S z09|5+yBN6WB0!gz;VuR)x(LuEX1I%ii!K6mi5c!<;G&BFU1Em27`W&nK$n=|E(R{T z2+$>FxQl^{E&_Ck8SY}>qKg1sVurgIxacB4mzd!$1}?e?&?RQLi-C(S0(6NP?qcAg zivV3>hPxQJ=psOunBgu4F1iTNC1$vbfr~Bzbcq at 6V&I~S09|5+yBN6WB0!h;zq*U# zubCbQ6m5D3o;HsI(&y$tTQD4XNl)8UJRvqo%XJ^*XnWv|W*f}4my^}4Pha;HoE+U{ zmEOIgTw9ei(R88ACaVrw2gr-8{mk2QX8u>9Rkw%1Y081)WS?<$5iS=v^ns?ph1G}2 zIudu1c_n5{G7EEZicIA?R2^rQfEtXv7 rGHaQM_X at XXPdyq#HTF1G45GbAU8kNz+H-xMcysB3kzR?;t&o2JV!jmc diff --git a/src/public/images/delete_white.gif b/src/public/images/delete_white.gif deleted file mode 100644 index f761c9ca967c6fd899b23c3cf2fb1bdba6ea3eef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13236 zcmeI3X?PPw9EUfO0v6C#yhYt^#fv1n*@Pxpk`zo0v>L=V2-b`3?j&84?5>-wNee3C ztyn863MwEf3KfdfyI at 5`3vH=*fLc*JL961e^{Tr~niPB zpcV9um>HOcm#`|UeY=a3GRsAPidTWKAbN;>Ev*DD at E&5u_y84)+RoL8m<$h3h)oeY`t_XNFA5Jr6H&f1_wTQ7f89P-us6GW9P#%zYAyoUHawkL4 z4CPFh4}#L=Zc-O9NKC(V{Y(dp|DQ0P%lMLOlxY98 at Ei%EAO=J=t~s;r?~Lb|kfg*| z)hoo-~^SpPCdc0woveLb{*~K*1W&+>4Gu<1*3E!T~G#~V3aPT3(5c#jM9a4K^cI8QM!;WC<9P1N*B at vWdI6B z=|Z}o3_!ssT}T&{0Vo)y3+aL~00pCTAze at gpkS0PqzlRb6pYe^bU_(_f>FAVE+_*~ zFiIEF1!VvVM(IMjpbS94C|yVwlmRFhr3>kTG5`f1G+nvbmmWaWo_8d)cN~VkfBydK z&p |Lxabe*WplAHLuB-M8QLeErqlJzswD`DdSgviswYc753W!Tay+-0|)^Z@;zu z&8}^o9qn7Uw7v2A=GQj8y786Pmp80$dFjO$o`3GyXPVbNy|!u1>Zcl4t$gx{6^}pm z=<-LFEnV{PLk})q^uYZK at 4NS&1$Q^xRe$IFJ8r-2)?04A>Bbx8T|f7_Yph=(6sp4^z;jjXtSc_R?9xjrFP=H$qUphk@(ZV3Fg0-gd1a+jCi~AV z at treiVzJlb#u%5=Q8eCeqpcKaF`LGneb$+0oIdunLZSda^^}vxoOI#|#~*j>F-MO+ zDnIYYBSwuJk$d>?VMB9_Lk=@wSV6DRFbo at sne^8&`hyzG7;M;5+PJ~l(>Xh5Sx!Aa z+*rM8D40Oc&FflcG7MR>r#FDL;(78oY<^o|eh9NK-8ObNwYq$z!#J^hSJ`N6t)6|@8fLY0m+x%%HFfvoV-x-bU at v>A diff --git a/src/public/images/fade.png b/src/public/images/fade.png deleted file mode 100644 index 77059e64ebc90e419e8a4979d165bce436220640..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 649 zcmV;40(Sk0P)W?nb0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!D at jB_RCwClRoiYQF$lvb|NpPm?z@|C z3(Op;>TA=UXoewy7~?2kL&XO7Uk*1Bg81Yn#`_*%dP%Lr*~@*9`vGgeoG0!tfITet za4!plh-gcWaZk$pYQOWQHseG(*7ILU?9KP`V^{I#<0a-T&CBNPsIX{ao^eLjVL&t_ z%*?Q*>0&dGU_n at 5T~zrt$)7WEo^wfqf at P`^KzlXVycD<_!PpR9D85pbdpUEwkjf%- zP(Xs1IJ`X^aNZYH{26hj$kg>E5v}Bj=ir#d{_}My6gaCofbP;-!fB8D9(D#x?~8nV>9va zg$(4Q9Al)KGz9sfVO(Guq^G(&2}pz5 at nSo;C8G)I&2`;)hz{4wNJeE;#{M7jLIFK! zzJ at r8G_h)leCi?2s?nJv^GMpN+7@;)jfLf_4-wiJ>VtxZ032YQX^r^2opymZ+vBRX z7u~_h%L5+KW=4~O9uX$I?5OhUDuYb5Po$w2DDT|#Vn;_Kab74^93O8!r%PJ<`E*sr-_wZ5*jQj_0Z0ollt!i&5D z>9V_mk8$vp=;!kDzQ6zlXZvPMOZ|!Py$LbG>6>*R(5x`+0k973lqy%H$unuBnA-Y2m)XMKoLL*zzk?w2u;#sHh>4N6#zH^L}Jq9Dz&D8JA+t$ujFKRFpAL?_oT4r=1g7(qp$d zT#Uy+u@*j!W2Ae3H%*bvh?r%dqWv#O|C}aX;7E;JDKjh78d4J>S7}u`ZA3Vk%!=e# z)Z4qbm`;aM=GKD6^Z$-hVm6L9&Z-H(rPv9-q^z0kuBc$5qawVfwGa7Ac`Atx3 zxt{imxJgX2b^n at f>;Erd7IT{~=XAl=ye$?p&Dl6R=MY_zGv%$$EM_L17woKPwA$GW zj?S>A>*@B+JAPlwS4**wVoA5<^2VpPZRK6LY4?6thHn`ZPl6;D>%zK_3?RWcU04^A z0VEiw3+qBMfCS at oVO>ZDkYJoHtP9Bi5{%P at bs-r*f^oXAE+hj;FiscNg=7E;#_7Vk zkPINfI9*s5k^v+brwi*sGJpi*bYWdc29RK!F02d501}MTg>@krK!S0)ur4G6NH9(p z)`esM3C8Kdx{wSY!8l!57m@)a7^e&CLNb5^-!WZ*?I%4rhjhHdEuG`&0N0zYH8x!R z=gQxgef59+d8zJ?i?uZuey=`%?rc@%Z@>O>=JctP6+fRi{?m`gj+Xy$Tbti}W7EdhUwd`K z`gLp9tX{Qp#qwoKmn>dXQvAxo1 at q?>6&B2$lb<(xR_ at C)UwZL{oNSMK#&ppoJn!Tk zc3ajoYi33|XECR-Q=gkMIrZ5|&rF=~^iwIxNlzw at AD8gN<74B;jE)->Yl?{;8D%u+ z2}UDYlFg0BX2=tRU3;r{bG{sT%xr!Bd0v-9%j%q=J^nm2#J>`}!fixw|g zx@`H1m8({-S-WoihUKQg8#iqV+Z-m3jERYgHH8H4*tsiM9lbTi=p8`rDJ`Xj8_LQU zZ=XKB4<70ru05>Pm212`gN~o*B~zR_eTw#Wt*q)BdOmd6g_=R$fV#SV1M7X42ln at N zZ0ORx$8{j!Y|vD4*516%L3;w7Q*-wfbPMT9rsWszpWjzK#a6a`|6H_V+Po~-c6%~29IEGZ*N-8Pau>a(N0}GBd$lhUkq#-t;$@VwDfld8C z8E4nj$eFh$tM^w&Brpm8`W+x5A|lq9DJdDrE>_~0)3Cr(qwB-WBS#!q90Eml=uJ>e zE7!;~Z#?j8!Pk&Ye9{bT&lo3^ZjX_X{ov}&>CnK)(6>%eB3M=@1ZX>hr>mdKI;Vst E0IBCi?*IS* diff --git a/src/public/images/icon-queued-11px.png b/src/public/images/icon-queued-11px.png index 159e763892533ceb20e34c6a5d95f22a0827467f..bd99c71acb11fb0308d26760110e66d470317cc8 100644 GIT binary patch delta 365 zcmV-z0h0cf1FZv)Nqp)lP%0$v-kzsTE4^^u$vf|Gb3c at bkcshl+y=RT16V)| ztbkb!&&!=gC^-i-qDI<2f-4V)t zK)KDV?z7kdkL&gNMP(c8*qt`IIBigrC5mE2vcmIhyWJi)_$|Ny31G at EBP7mw00000 LNkvXXu0mjfBrUJa delta 342 zcmV-c0jd721C|4jNq;y=L_t(|+G70w|33o=XvWn_GcdE3F#P^rzyJfRoD&%S{_eTH zsQD>~%Lr1enNV-W at aNY_b~#;!P=6l=qZelx&Pfd{+iG$=p>X<-QgG{V*Q-5W+bo?OL_Ah6SgJ}@I z?9E;VLrZ%GkUA!i8$nhJaWFABI6A_e`~B`M2C>Pl41)G94B94E3?Ow(APF527KT+T zS27 at j`=wb7vX#vYCm%fp%Yy)zyz=G`Lv?sKTp@?D8iQz9ECa8pC4&Qy-+J;BSeywI zJRo1c`|*$Az)$}DU_qtsX<&sQK1duS4^qbj3P(`zH0`?0pa=2 at 5Wt)S;)BG&!3R`_ oHJm|i1UU^ooEb at pL4W`Q0HnjIr!FTu)c^nh07*qoM6N<$f-`5CrT_o{ diff --git a/src/public/images/icon_add_hardwarePool.png b/src/public/images/icon_add_hardwarePool.png deleted file mode 100644 index 3e7431c9602cc829b712d12cccec89e87b90a09f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1223 zcmV;&1UUPNP)dbVG7wVRUJ4ZXi@?ZDjy7FEKbT zFgP18k2C-P0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q!|*>Mgsr<1RzO7 zK~zYI?U!9l990;GpJ{g&SSYk*7qI-4Qe$cbO)C9KynrT1T7oudnix&frtzwYjTgpN z(<|eJsjZ1znbcIHHzp01xMC}IV at pzPx6nqkjfvJ!SP*cR!ou#%?wm7cya2b$vLLK6 zTumO?6p(_6-x;!- at DwlMVLjnlxy<|6SM at GdY0yyyR>`|4u%o~Im` zGjO8)HUOs%Y at 4&_U|R=DDU=P9qeBc|_w|;!t@lY}#CtT-SRuFsF#iU01KB-Y28&MvB!7#cEB% z0>p!%j9`HJ9XqMtv6J4LfmUB_}j+=a-y82N7^jM6TVax+}bzR1?WOi`hvBqTnQcEL3TEvAU zq9?d=wuga%`*=NG0K6U#0HJW0s)}+hesu|HNi4ZUcxw08?0S}CC*LL*j*yq*B*(ED zP1Bf&8U(`;00M#QOh>1weWH%K+9#8WeZDV|QX+*w3Xz at i!aNsS%01j0eZbEHBa9FH zN+KFzwJQfV;PsS{o9m{p?>2Yt{>0urElfrxh#Lk%2&5DUk)`cpkr>q_Yk9in5o)VS z5ZfP5vHb?R5o36GkkXPe98MR(!621Yl^BMBkS4+uh%A-sE{DV2d++x-wok_542C8F z*t)fjipq`j{cwv|EJk_xhM5cX7*foDg)p;%Uz18Tr`vAErdZ{4;Reijf`a at 48XKFK zn4CbGGay6PXTjMkKY!)>p5_B9VtwN6bLhmXWk$1 zp99u?I5u>8!`5wVEG?$coy(LS=l*CI03ig*R_q&TrL*E|lv3p8x at MHi8P&6|+TGo zf$si*|Bck~rsf8Fd^|*Pu at _qiY^9RliFn+=k`@VN0PN1RxBt^K+-_fId*{cWd_Xw- z2bQ#w&1EJMi-IBZe*SP$(-xddji%;?M&LD|_4(EV)NHQi{kAjnz)LwyEE}Goh*IEq ly5eQQ|Lyqi{xqy8{7-{$Rd%;2W=8-3002ovPDHLkV1lsAK2`t# diff --git a/src/public/images/icon_add_hardwarepool.png b/src/public/images/icon_add_hardwarepool.png deleted file mode 100644 index 6eae0d566f10503c7a6a7f980a9d2b6d0e6353d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1133 zcmV-z1d{uSP)=jNwIZ{&3Ukwe59?r-twaZ9FchhXPlCe-aaHytKFHhz`y@=J=!-Ds#8@}$ifduI z#dO2Y4M8U^O==T!yX3aHH_82z_&cXpCS+aIH9V;!>DETni0v#}|NQ$g0gK?a;E2X0$cRfrBO at hcPZ^|Mu2fKLuvzN8a8WQTyPkNGS2Ds&MtGT{CE=(0 z_T>A0XMW)AXD>g6!d;;VA4K{1WRM0?&fxOt0D{50a5|j)z0={~ZA=h2_`)|AX=`fGwN=86 zk>9%KX&gQN4nl&6s!9tg%@zDx$CD{O#){v66|>1%bUf0D&W=a(9{YS>LnElBs=Suv zd2N*yI~pCh6S;?9gHxCe{*FviM1{2ycJ8eUHk%#e<2P{Y_AfYipa%&tjx>D&m4P*t z+A?L2iV{4oO?bTZ0d%yupzeOyAp14QDG8Gl3vO2f%oZy`6CpIWG$X~}ngUf(xe?{S zWvkh2AG`C{BH0sC8WXVupU~dkiKgal82|Y?BnrC5#;tP;Wr at qJ@~V^tze4ADccJWx zG=mM~C6irAXHZjJgRZXqh$rIElsQmJmgm9cdw%xvkAdzZ2lg&2yF#++IXdGh;ndaE z!D6xS^dJ*lBac<~&6P5~Ii<-n)NKAJ8a}zTeJ8fL>rrdBVMb2lZbaa7m{(bXADZ%F zu<2W#Y-~2`oafq{*YjKL_L>83K2Hatzl|RZc^>K)BO$&Wt2aBrb~W3_41RXYc_^98 zzwmU5N4iET$!e1Q)T?WT&l|vQDx=iCX&m3*y*J0wXMMdBIr1<^;DvJ{O>mtKq)e8d zdi$2k?f>Ntw~rFW;3uDc2toLp!xn;zsZa`BET0#>Qms at -0d@wzPSyLY_b^)9JosSX z)DrM&E)#2p7cs(3^;n_DYl7eZ)9}BA|0BQvgiBR+n^usz00000NkvXXu0mjf{^cvr diff --git a/src/public/images/icon_add_pools.png b/src/public/images/icon_add_pools.png index 8ed5b10ef6be8558e4a6a76241ae028118185d8a..14b6d568c9f74b8fd02af967934429618f5d4a84 100644 GIT binary patch delta 784 zcmV+r1MmE!2C4=jiBL{Q4GJ0x0000DNk~Le0000P0000M2nGNE05!iiwvizyf6Pfl zK~#9!yjIO?6G0Szvmg0tQmxVGrGga;QuH7myjW84Dv0R8i$_63Q0zg_rZ%P8gEudt z|A8RtMNqI*>BZtfNUb1J(1KL4me at Ag?Ci|=X7(eKM5K+a4<0*{eLKJ3`@J_aAwme) zY_q}vK^rYx%Ex1N!7z-x9>f at bf9O(rZ>V^85~u5DB{K=KvByTPy!t%*LU6j!;H5WD z#CY-YMDfPOW0FtXnV`imnf~s52Z7h-8iM)`9g&ZL=P#!Q?%Wz&3-OQWUu!Nc%ItLz zi!&ZXHS(395-0#$i}gw$85uM1dE7$w5y;td7l2qh!RW{V_sYPk at 4+;Ue+XzjX2g3S zW?KDHp$573^z_21$3N8M(a9{VIu%GIlTc6ZPlhCk2wszVtl&UBrpW6cwq8-0q3bx1 zikp#oE#0nvAj0qbI3YZsOo0%Ky7aYWTSt{77+I@&(Z}0&pHQ90+(n?jrhVz;3TmZb zmUL0fA_zr2*ox4$Um4z6|lYW*U9tUu;NmbF5cc|luTEbX~awr z2_{-(aH|za*mac at 84-*%^+f1G%cNW`zn#9i_i!k0-^~wdf!X2xN-9~?<)wKL%mLw< z5fQ&YBmx5h!KNnuSeL7-tLqFtJJGY8^9jfCqLX0i*(k(q6VjO^f8?^Az!6Aitk++N z=0>1lcc~r!9eoMi148ung50(QWYP&NoC&sxZNX}OcQ$oZG#B-D#`6d~k4GStAY{u- zsRWG+HQJhoQmKQ2RLpnT`bP$fkiK zBhuUjYV@~rQpPcPW_q`PxV9C8ttk^XkuQ-;T at 3WvYFpR%1|AbFAPk5B*KR-EpsVU# zy}aSgh{s48AG^@g8+a+MpfBhkGOI*WcK>QpYe&BsH_gcZ_#^RKfB^tLZdj;lIfa}6 O0000;;Ef5k~e zK~#9!v{k>06G0Syvp>&xNm#_7g``js5z#^r3*mYT1%Ay`W(52O*oEv%BMaGn4G(E|I8r1G8^-XXpFA_syGKCWL^EY))^$ z80$Zqzh2_QUM`)VcQHhN#XuPte_0T?7}aRb6g5s`J#frGDnC9m2k`my at VATi;L(i} zV*&TFHPuYW>nLzNCk2er&OKoK=5ufz!+Zb8^c8>|`=w<`>m5M#8rU`)Tv<8uXXLmE zP=D1IZD!zYMeyml at ABqhX%Dm_3o@>a{?TTEilE2J*z_4B0L at PTt(Acye=-SNQ!8c0 z1%f-?u+lK!M5jZ5 at C^WOt}RpE<O>F3(lukp}N9s$=2!ND!$m zEaZq&0#ewhbFB;k84-y!e{S%^N$qMcDW&cv47k?99^0x5av(j6POVmZv2bDMp`QQy zF29voESC35dl(Xg_4fd_s}_o{SZ^7v7&EaDG_lp3jXfg5bZea;2u at +lVc(J@$&+?F z>YwnJ3p3zh73Fe16!Hzq7r}hxb)r>E^?1*?dd6%;ZhVWX*ndege;G5&2)1nxAUnyx zov4BDc_7nCv<)UWMVW~n$9#aGS6lfn%dg?X)dTXT5iUbE+l72U72%~D!f+FD!{r`W z7+I`Hi6D+tG%YepmOs9K5e}a`C>Q5)AruN3Iv#^HPXI(hQE2ZIy$_boj738Uy7@^T zip9-1{0Xj`0pB0-U*RMx$!jV}nNggQFikWpgUYx1?4 at Jn@_PJesv*qM*)>1cK2;L- zV3jZb(zq_1A0~mNfr-faPXelpjwD+3M_c#CHu|UkTYv!okIFbH>pEC#00000NkvXX Hu0mjf3BYL- diff --git a/src/public/images/icon_add_smartpool.png b/src/public/images/icon_add_smartpool.png deleted file mode 100644 index 6bb07d7cca9839042a779bf8a7203b16bc6cb830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmV;l155mgP)5ZRZ4q=+JlAbLOqnqQ(16_vfd^?<$v5d{?y6e`t+R4^!t6ePsR2Nn&T zuld~m+y0N+`EO0;YHQibFCIADd(S=G-}#+;&i!wUbB@^(9cEGHz-J$vF*c&H>V9}=Hxg1O#lhO{gM*Wh`1Wgz|;0n zo1R>>W-FGI?9=AeGX>X2FL+GTM*~Oi5nGpi#Wt8S7HdmqO29R#eDnc{Y&Z6Dnf!s$wGc!5OEWT8X{Bxe79IDniZ>9Q^T9IMVgUMcSNhVdmWrC7*;kl;4No1u7n(xt6 zgYUALiCj=5Ku%dVVA7|DXM(^LV>pnYA2wr%`KnZd7ubv{fyht^*fpZyQ(pjG1Hs<{;tifV2s{B zE(Id&D^tb%c$QH?|0M9qBS4hdGXh;r+O2KU=%k16Qs;r9C-|4IKj^bqe{?wPv{bQK}|DW<*fB^u) WmiNB)iZKuX0000004R=004l4008;_ z004mL004C`008P>0026e000+nl3&F}000B+Nkl-{D*(BK+UWz15*os!{LW z-m72Uzjc4DR(Z_#YXeqotG#;g`do{WyFzY5aF9rWxq&?Y;V?CpN!}B(HaM zbyF&K5Jn-BH-9FWoSGnt?ctA(pL_GC-^P;Vf;z|FfAU$e!N=PM9>Ud{#2D)J1^k71 z=H}-Z9sQjkR?ok9`1?-)>num2>TG$iYjroSc4=zLG zQlwkQ#+(8~M8quC8t`VSm96c?4wA$Wh5^RJB-SF5Ab-|UD74`Fb6WxL=0P>NuDj#$ z<7EK89_-u!Gyyt}W5Ot)USGh`4mL>$!;mP7h)s+!hR7IF68{4A)PME#08u(Wd~N*d z9 at lko98F>^aTF4Ub)qO_x>7;#h8udtQGCkv+#LWGA*>rn(M4odM5s)SUHbgUJ~}%( zag;`^C4Ww0!Z0KZ0V4 at 2{X3;Ly>giuz*?+htBY5xI=MV*F-|9m|Py*-wniy-l zXWN01yY8pBv6ZfZ0}3X6%eg=2Y0I5|0k1G#y)bkLz-e!9-{&Z`St->oA_RdUtQ$lG z$8jDk_U?Il*TJI{)@?wP%Xrn`8;c(atikYklkbe^sj9SNAlbA(z>ZV|jhFTtCf>FR(3YsjH zBD-t+@`>=;g@>KawczD5=cNqOPaI&U$1r~R1YmC$eL0}Bd)FJUdTnc-(QA4;Xepwa zS{7M`KKNCVi9afFZQ|4M?+zUSrf&!80L?(h%KihpbEWk=b-wLB<>og4hzTwyK}+pS zG<)Ub)UU^efC^AwR!FC5)e5u#`7Gj6-2=b}=F_>@Wj!aUaym^lH*K_-L15CIWNQC2 Y09G{U6=A;BzW at LL07*qoM6N<$f+?gI+W-In delta 1063 zcmV+?1larM2)qc8B!3xnMObuGZ)S9NVRB^vL1b at YWgtmyVP|DhWnpA_ami&o000Bt zNkl%@PUzP zr>3XotFP*-?zObm at PA+YelIM`y6btUl;o4+rFU%Gn&7rIN^7CiXQkAqPfjg?*BEEubCIu9O zvCh5a_i)a~Ui;>D^zij7g)v&AK;&cvK>!}Jk(~k=Dt`k^rjWhFWWq8eAYQ&>{Zps} zxgAfQuPoKTM{#^#fR70RybD2WL#Q`hs4cf=)<;SN;tY2>76}ctb6> zvhZxW0&3=5w8o0N;OEsr_)AD>^?l~**1{UoMx*iTFYk`*?)G#0hcgk|3r8QL@{ujT z#cP#HZu|4EH?}3?mZd3ovkqaQ at c^7;HE&ebjy<{1L< zyfEr3`HZnW{ag1R+JE at CmD>CWCgV_Pgy5p$ZlKY}3UMttI0U_!!drtcy|)*l6-0o+>a^#Ud!(ZESUdU)HG=EdgA_{}tdcDguC zY=6a-k9X|u`grr5^uSX*_aM$9CP8tUNbY<`u1`qRb4+4oa=>`cb2NtW;TO4FZW8ZV z^V~v9F()|&i4=rFnaR)w$XXYXgtagxiUsJ8gZi;nfEkaRR`S+r<@x|CY{D{oyF+5Y z%#ZLu)fRwaX;y8xdw7Ha_YElSD0Nx4>whigwudc-sD#6i3+{RCwLq^_A-wwA%IfvA zU$*C`KlN*~m;dcNB at Rin0$MS@n(Xv=6Wt!?Dww+uKpM;nhFM9Q>Dn7fL0`bPdv;2_Qb h-Rs9>yW{^YzyPfG;6H4dM9BaE002ovPDHLkV1mQp2-*Mu diff --git a/src/public/images/icon_add_vm.png b/src/public/images/icon_add_vm.png index 4e9859b5236e85adfb5ac554f17f80ff96a3e3be..0a399d7e8b1fa19950e0da7678a31adde31ab284 100644 GIT binary patch delta 1052 zcmV+%1mpXT39|?xiBL{Q4GJ0x0000DNk~Le0000P0000M2nGNE05!iiwvizxe*@J? zL_t(|+O$<&XdG1({$}S+cFm at 1cVopCl8REL1Q$zv at WE;x`_j^`6yMrXp&)_}MubvH z4Xq+V8!Lj+rSw5x`bSFz at u!Gd!6=rBLZVauKIu%`0#y#=VNs?gSlH}dRCA$SFQ(FxsX!9e<3JW>TPU; zZLv*Z+~zC_g#yy)etdc96iUC(;@qXr$anzHSM+f}nVD55?&@Yx`-v4p_3t)o~!v=%2n zxPYqNfGZ_j*P(w8j^lO>e at ZW8lIY1vY{Crd^#&UCCTg~gO4Y`Exz>H3A9)z#FF%KM zYwty^UPq(ZLW@{Pr8Iaba!%@kkgohnSYk^U{s2x(brto_o8v4){Cxd4ygpf^Q~5o~ zm5~uCLzc`oUUsckD-0Jq7(H=AYgJ1#axhvfk&H>QwED&V2PoEyf3$j=_(zwo;N4TF z(If_*&(ikqs4~rjPugtAP}p1t20IIS1y7^hc3>m~?D`*=eD8gocxJ{7{%TN^v>1eK z+uwgT_TXcke2lz0quER!+NeXtMft-|(^{fD+4sUYDm7cnIl%HQNs_u0NnK>K*>$tN~s==AAEhdNHFc`xRVx9{$%Q#Z;?zUH*iRpfw5ex{hQ&s?k`j;pT;dD30cBwZZT0& z7<=~Y9UUAT9HGK{wp1$J(b&+?5G>0&*=RIw6pJT5jD*kH<{ncsIyWOkNvy<)8Rf}ZdI at 9sTUSObyw2jE0t^6> W+zGw>Sx2#yIMiBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;De*`c| zL_t(|+O$<&XdG1({_f1|ZZ}Cc+5AwArh-06wDzI+18Jx}vQgi=AGkXjLNQ}!hn6UTQrf5&{rs6>cwZVxu^RcwwZQde}++r<&{6M zR^Gsq`yWNa^TB%&8588oG%V6E;rR-#TZ7}eXt)wmN%*wq`4VS;Jcs4gGUD2r7Gd9V zuzUBO+-<|d`0S(OSh}`?Pd+`v#nEtW%H_~o=)um1?#JBx0_{oEDG=LsPfqz})N z^puoGm_RJj8Dxitht2(`f7bNJ$$eWWlXVz`sR}|$eKUpzi`aVmt=KX&fVrO+VBc_X zeR&OQl?r9#K}to?g$T%a5U6$*F<$9#z(}1*!ZsZOArzBL*VOY?nJd(MY&?@GoNt&e(oH;`0_h!5KL0} znoTV-lb%c<;*VNY#uvySN7i<``LL at F6@D3|-$NR4dKV2li-)xX_tw9;;=WI+YtO(98-*M5>WFcRuH()L$%G zC8>}|2$7}{o_PE*ADnta&zhvz3EVo_sD0=$L3r5Rux-?9^(Ed)J7~~4J^RD#-fS*= z3twar;@^#Jf4ZOXJg-!#R8Div)7m*MG)W(KbsUs9aNwzj2L=X4rIb&XN~JbqBO at co zWHKK(j&o&t`n}I}uQnGKfSYDrBoyO6oY-)dr!x<~$;m at 6b#-?=-(T!UHk)B%T1+Z7 zj|E8sjvUhjUO}x^J9g~o(J9gkVn>o4r6J-?FBY8j5 zK~#9!v{hYb990zlX6DZB>}J*`MjL&oR)a>Vii(IJmPCB$OF*=F&+}02vQSG zN+cGAg0xh9 at S$&_R47y`HpI4AY}FEyR4UTO{)S}Z&SoarnLB@;dv|s^kq8^XyBuck z%$@uFoOA9daUA3S9<1?4p|NM^f6eZEP9IWLwL7~g45Kf(?;ji-`DB8o>t`jDBx>~0 z;T=ExdH%aN^5<5?)KA~UViOt{fo6#RPI2Ai{)kYY1z}MbC978R6`%qr0c&R5FJgFjRHf^4jM%3je=oiAIuzCc zwPhospo*|I15Hy?p!Ezje=l+x+bSK(+`ls-i7y^5%gNWzx5Hle9>qdI&d*KVz>jCI zA_ysm^i$%Sf*X~f)GH`;BaS23jx(6GOV1(-h1_*f%xiL!6Q?g>$IgLu7uJVkd*5L` z_fIgLJtHll?Yvr$=Hs at ze|lx*g?tf?a}q%iVEe1Png;mli;qdUUt|KH`?JeZtdyPr zbbo$@ERn`w;WJ^T<9=`n+gWC0H0mc>2jl(bai3jvSl7f8@*sILkExD9h)9 z821CPYPI_FnO&VvH1e_K{okaT^Y1+jvpbaO&tD3~1PS>qPh9o}ElD76^4f4$u#1-{%QpahCU9vFKY zg}eccF;YmOX;8@;Q3PQi)YR>ENyUu5X$B(j){bmbF)D zd>P4elP-5qf0#`)v+ at v)&71Gp-P*dL%W;-rnk}%b>V?_aOQX{?k`AK=gp~ym)*1iE z(^^A&qrd-1M at PqF#bVJgO%sM;$ntg^2aavK3+3{;1N-;)CLlZu((I9x6O~9&q9`P! z8i%n+U`-S!MO6Tx3D#>3(G1JU25T{E*pxQS-vSH(6e=Vr)uxseD*ylh07*qoM6N<$ Ef(U>J9RL6T delta 1048 zcmV+z1n2wJ2(SntiBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;Ef6_ at r zK~#9!v{gZ99Yq-aW_R}O%j-+tdxjKyusNuQD8?QFQmL3j!ILz#3W5js8&Smp?DBHD5-epMI;p!4T(|(qqGfeo++4^^zGZt+uhmOUH_SVFK%p7BG?~h zcV=hi`~Ls?|CwcJn&NgE?{pYre{0{)of?TYT0C;(oJBABpBPjGxhNEPx|ylDyi;2- z)&ZvowCDRqCxC0uZ at jwyEIxl{|CWF|(dG%tMBwflsor`gk!;0A_b|NsEi9hX-roJh z>%d(PXvq@)cVO`ZOp~qOS%2Zy$Z-pBf9i~i`Q1B`G`)Uc;x9e;Y@`?df0ctMb(s_% zF!Ng#-~7 at G8JpSxi>Ht>+paWFJ&Pw0u|c{sByk8ol*jT3v+`^zvM42RUeM#oA1ioi zY%EtDf)*9ld!Gb=QCu6oIsVo$9*O8{Zt+L-Joys(GINKla__(N)Sed?tgmreQ{%~Fgsc_Ra`0$y!DlwvDm^^q7f*>S7fh0-s z^!~?S83{>1Es79^p`MSU7M2=5F3;5=A^~z9TzR? zh`@6%A(8 at q5K!1LoTi6Z`e=HYMvp!`gg=*-QD3OzhSStaglaAA;k8=rDH``s>m}x| zf$E1O{8-uBtggbZC&|PM*e~OL`BY;(*>E9)ISLmM;`iCt2lEtqFZ1kQqU%4Ov;3 zyNJu<59-0HH;3+Sfl5tnDiB|oRU+kJ_R>{!*+3xFJ=Q5Y2E#C at F}>!d+mtLi|ItxA zbYPb{jwFkR?b}Q0c<4z<2~&xCfBYyclfx=7aNb1{S};t5fAo&2wJ5Q)o7Og6m+};^ zBM_CcjsE^^)LnsPm0;WdOmmY?DV3yX2(6 at H#3Y-UMZi?f7+ot7;)Hh!9#JG)`NP}u z_So>t^WRS%-{^`7tM?(iV;2&G>(Vt+NqtLKS<2E(ri2QFzNyng>{7`1)%h z^!4=(l}e>zxm-rEnB6_9ggwurGvfx!D=X9Qoj$!+<@MixwEx}M?f&WiEx-V^8x_mc SF($770000%3n(%SqNvQy-jv;GcflY86f#)SEUVesS=eBAw%O5LA;n8t zctgbmFNjp234~cHUP>($GfWXIN)$3wOj1%bBnoE%L4A7cIUoFX&WGKzXW#$1yyy4z zOo|LwC at C*w0CE;V+S}XP+S*!LTAG`io0^&$8yg!M8tUuo>+0%iYinz2YO1TNtE#Fh zDk{p$%MIo2R9WkiU6nHq-OAa%XWov}v8C5$7oId1oQN#B$mEq}W at ZNGSI^vZBtGk~ ze8b7;H3vm&%hJ-)0#+U#z2cBx`T_4nyFJr(4w<{d!(Qmd_3R1M!g!FHa=P$Z3$%(jS(pv6PFUB zrBjkdcMKC4+JW#%YHXt857e<{D9bUZ zTqMD1u}qH2Cy1m$Qf1JDKs1ix(J0D{N`p|TSS)-F{ ztQmF8OX=8Iyc)wC3w5`y!%>#*h0In_$3aCjYa;BFg^-BEMEA@>p-LDeLpg at xSx(Ec z$(qjNhZ{M@#&StkG&D}8a#TJ9^{m=c&j?q zIFmf=Oiz;rmNQYj#%Q7v7$U)FP!TH+l^qrH! zMS$c&T~HU00U#Kr3+e(g00hHyL0v!wfMA#|s0+vd5De1=bpaUwf?>L#E+7LyFiaQJ z1!MpShUtR3fD8b^FkMg=kO3eVrVHuFQF(JYO$Bi8mFnW~#NI%RM^%>zke3+N#&>@2d zJvY!}z_ZWvcX#XO`m{^mKE0iv>g9wWzIUCS`XVAE(D9DO at xTY^b08#Z>d>)X8OQ5a zWhaukrxOydy7tyq7tLPgK4tNI at s`^G8&5T?tGm`K45M8VV at fK0i=BprLmCZ|3Q5eR5HyjyKGQ!blMl)?y+AauMG=fBl6iAykMzjiw7J(7{0YMbxDhMKK z6NI#wCQBPq7ZLVFlI~NHC}+^n`+3eix5a#T=IWT*ySnGT_x_&eJm=hVjUWivY#D}8 zHtsrkA_?39egXF~BjaOb&uNV1r z__6>GN1?+*Jp*83;seVo%d{Wvpridr$#E+65-BB82&53J&aXZDw8o)+Z{YmV(siu9 zfoOCmlapVWn*Pq|Q{626S;Vnzgb+w65JHQ^{znvgS+>di{49+Pd#Q?4GdDX&Q*#rx zZ6lE*sh?*Vvv>G->-_agHnoUv^wux=3N)I;&fH`qudA#Abp7n z6wmj(z;oSIxML%wKnjT^RsgPS>1+YW#?ed8L?^{ZFt&y~xUFI~J;RaI4a{`|Sqr%zT?SSl(`09h=@fh?9|$BrMPRoD&}W%cUhq~uk} z$%%#VOf0qQt6t~xVYG5aj~(nriG^Y3m46wzaYjKLq!=4QARQ{ zilibVs7O6YX$=Nl1gX`N8hwOXtx?TYE5p at c;c8{5QbvU0GR3SpvYE4H&j^_{eP+nC zzzP0=6UIpcB>_@#fYdKwyx2d$Pb~2sD<0$PHyWH51L^-G;M~}8nluRW#VH(odyJ0O zV1eXm1G`COqv%MET0!HcULe+dpdYT3!^o9 z4ME{pv_`Ep2%|+zT%nT at LU2z{bC_6 at g$frjz34wMdQTr6NnoyQ9!t(0?uxmNWb at tl z?rtMput_+D`QuuQ?}qWYTyWtFc|4&j4{H(A(*fLhkcv>@L|?y_J;5&#GmN72LJr4h zG_sAu**a3m;kmoJbGUpCpU(mgmLWz<;n6IuVPNwjZ`Sc8402MXr&KyEMz4#@bdi*Z z$)q=GRm;oa`qquK26oenvgJArCmPptcx*1Gb!AZK0Vah$B!N>pGFYcmdp5tmpNb at m zIx^gV`Aiz_L07(GYTLD~o&ZNgcmf^*7T1-<6$JAHLcW{ORWReN`exI6+fx3PsioY5LxXq=OcQnbo!*=OFJKCJD=&Q{sct$Jg`7jE2 at Rp841gK$U1kco zFjPlsaLQAq!IcC at sS5Srv`v2S`I?^^!~(>U)0)dSkKTHeALXWv`$t*6c~P_p6kLQ0 z;esLnWk%^jxS$9?nNhkBE+_&}W|S_33yJ`g8Kn#1f+7HAM(IMhpa?*jQMwQ=C<0Js zlrDq|iU5=ur3>MLA^>GZ=|Z at m2tb)px)3fX0#Ig at E`$q;0F)V}3*mwy0A)t$Lb#v^ zK$%gx5H2VJP-c`agbRuQlo_Q9;esLnWk%^jxS$9?nNhkBE+_&}<`1UJp{>({(1P|3 zBk1F>YW(}JKmTZ`uY3LK_m?kz`}KJ(XnlJ8%cF-sKe&JIryuXu+_`=0X7!C9u3x)) z1vETWRepcr{JFDdPMt=Ff|XHbzBK1~Njg z(`wY=b5&u=P(mS>;d5rs3Yq!!jOo*+PMI7$Y2sHw69T2<1N_HH#C~IaeZ0NKjP?|H zFof;`w~- at Uhx2({4x8mNZ0L|LzxaIcpn*(hY(W2hef#w8)w4(U&$@MW>eBhsPL7{+ zbg;MUVB6lNowXH%;aqQH)q#=1aH0Ea=ms%{T_eNUzON)`jx8&;+mNB=!9L~j)@yBK z1?>}@I6B+GizO))Tl=vTHFdZ}vR>qBYdy_=4%T*622{zWG z+iw#OJ-aTZ!Oq*xu?JhP-(edxd%fyn%E+UO{riZ>-UcgH?&GpEHg-LOa*JOmldQXr z6{H?MzIKGEa*%f?`=q6|h1K^G3~~0oQctN?IeT%j7wso at Ch3j R89Sq{uW(RidYOqa>K~7S%X0t# diff --git a/src/public/images/icon_addstorage.png b/src/public/images/icon_addstorage.png deleted file mode 100644 index 5536ecf70e71f46b4cd0dcb9752e43dbee98cb35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946 zcmV;j15NyiP)5l+SAvR~*1U?>X7sS;;0 at Q!y!+olViUOG080#8Q(+-O`gi3B7n|+GFXZ;-4VJ zUV1Ifr5C}ISWpPt!-74uCa81`7PGV2pGmfHn^|#Znw_`PLnd{zt0nou7v8)FAHLtu zeEAB`^Vm-aApp3LoSp_g86JB3+Vk2b00aF|);HF^1 at 5I5(rEy35b%ZM^f$+kkK8au z;tU-droVpxr4*Z+e^FVlP%P%Dtd*~(7SiAC8+`HOnYqb{sUOdMI729;qm+x=R4C=5 zl%myY(P+Hn_r>3M`seZ&QV79r0$zLWw(rN~L}H9cqz@@2LQ3Qzfe_M9K{$Mv(fB(6 zmt|*V*Y9SyemB$QRtS-d$43!DAcaKwKq>bW#?Y~0gb>Ltu+vmHP1U8MM+ at +eHY&5NhL(*?wN at PpY5-p?@G+sIs3aejK*=dwgjE|4=ODaW3*9nIY6AFfKmCN(mCgn<*d_G5P#NhECk9NTJYg+FN z*KN|<8{yKWPkEBbu=H?=N~Mf#H_&yRw+4?g`_V;S)GdS%JK!I#ocRxMW&T$HewzDW z4_LJn)#?VZ5rZ>l&oVW2nx?yrZ97<&MXgq&SSYakbQ#a{&_vrzd7kIBJKlZsReQRw zv$XU8T at Mos29ZLtW&KSdU%<>|$*r0gvG~qE>1^3)w%(|tw>QGclkZ`gD?C}wu#$a7 z-LeP-0vw4Ba(*_+i at NoC@SU$__I$SwO|`m#5i^*aJVhcgMss@`+v!#Tpmj`}coP(8 z1cSlw;^He6LQ1TyE%Nz1W-iO>s!7}!1!#0t{6BGDxhmPEqFyJ^6CfIma(*^Rxm*Ic ze-QAkJ3rq}&VBwR6BDOMyg%kog^gv^snu$fibc#^7U0&t!KsDxJTOqMlx|E;Okud0Rke)x#K89C|{=|uQua$}gJkR6E;2@<^anGXv7oI|F UHgb%7 diff --git a/src/public/images/icon_addto_smartpool.png b/src/public/images/icon_addto_smartpool.png index 08c7763fb82580fa7b87b5600672fc0274cf01f0..1594358a175624a0243c5eba427c51decf1a9949 100644 GIT binary patch delta 1086 zcmV-E1i|~I2-OH7iBL{Q4GJ0x0000DNk~Le0000P0000M2nGNE05!iiwvizyfA>j5 zK~#9!v{q|uR7Dj2?qj!U7q?J(v`Dj!2B;-%M8Fg^rClHdiD_07{}`K46QeOSf*50X zB(3eLk@!b{n3#xZ(gZOO60#;GT5EU+1_;XrA6+a`r7jInE!*AR$IRu-+`DC4N?MwD zlCx)K at 7ejzcjlY9t2mB>|J(H3e?TF7fA6;X0>5vss;c$*NsRG>re%G;r|r{Tnm%|{ zf{Dk**U`HD$E&{_bGVh7;E6LwoDbXH>S^2kW?0lSYbIoVB2!nsv=a!Md*<*)f9DnZIn at bD31opll-ne~4l}BXwz-ws0iN5RFF5|GhatUlDEFgrm6Ck-(Ao=?AKQ zKb54ywoLiMb3I29Ki*AU;RwI971e9Qk}fA2iX0FV%iUwK`{+7-3oR`zpBRSds|DL0 zgQG2`1t~HUl`EgZ+RYJhVCAB+I~2uSe7~HYb7oL+hRl~^XA;Q%f0H*52n5!wsCj}C zOqkhG_~ulipd<{_7=@~Etg2s6)z(dDgP5ezMo zn)1w+SD_SC(Af`(?ZScc76OZ3qzzQSNKFHMmt at N-Dyw7^b7qpt*cdpm77Vx;6BryT zr!MH}bUN`|_1x9_f4WmRe0~@&*FKDmRV&eTU=Xp3|6wFsir3dg at aNgjsC^cmZ)!$p zc_ps?{u at qwdlWYY2Qa^^%u^Wcg(pk5?QUx|UDuQEY~Aw8&~00d|CPmsfea3v8%FZF zArnshk%nK_vGLjUSXTWQii1Mt9Kn)#sHv?*QJ{!cWK#Ncf0d3$y|5HVVy6+mnD|I- zZ*RZU+uQqI#|w`*J2#b1DZ#&oO(`|56vHy9 at 7$D?it{w?JU^NehKFljFg3qT-dp1ng?={4-E|we>y`X62ZsK&3L at 55Y0~qv17;ENG6lCxDRx$q;#jZ3wJNYyf~M933&C=?Ye$wy`Z0C{}? zWB21-NIu6)N_%nEe+KRcqItIgcXc`SYkQ`4M}PqU6r$HPLp8j=?*IS*07*qoM6N<$ Eg1EK~kpKVy delta 1037 zcmV+o1oHdU2&D)iiBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;Ef5%Bg zK~#9!v{hYb6jv1f=FaTwCMz*f%#R`q#)qoJpH^)UHE}@$rX^9Nh*Cmq8+?#$g!&*p z32~_)r7b at 6sX`zvX;IT+Kv7Brqt>4$F&5&QV029rV>Iq&**H79cRY7yXS2~=Sqok` zduHdJIp6)hd(OR*VHkLyL$Mzue at RNc>-fH2&lFtW+~FV>eq*qAxma|(a_up_6$Hrw>oxXj;d$&+*D0&*C>-zELWZa9=T_Jhf9 z|1$XH+vgKeV5%pzXeOi~nFdn;GBIQHD3h`DXUoS8hMQL&AkLXJFWW{7f762L$<0Nx zXf*mW0W6?DY6?Jc%y at -f%WBGxj)ZaP&t8oF7ovBH6=!Ia_%`q|_-2`^s#-%V)L9Iq z%e+0z~i{LcEG!X!Jg5HZ1U- at n)}ZU7F#dad{R zuHD1M_G at OZ#C59;Ze1Qge{Xj`<>J`-$s(-!a4vz+97%{oBK0j3KW*2a!{_sT$3 at AK z6r5Oa=VowbNwlJJIW~T}9ui~V0^HESd5i!VHg5A^#kx|8a}s-JQclNgfK%NQaJ${> zO3OFU0u<<6hUDA=xSOeM6)1TwRMxJ?nyL>dnwp#v3tO{kF)Fu}f75(EC8a7?T^5Mq zngQUPYb6B=j+_~h3fKC;9bX|XeJnNuzuq(;=O3cVDMBLl6vG1#!H7k9MHy8y!*JjQ zu at wpPNLrW0!uIwaL?V&??G=SUylKF2ejW&D4HgNdZ3cE`_ at w&ytL>G%w?P`vCq9;y7z* zY5BLStLyNwor{cbYDzPf=i|wk>29zqx&}F(cLR>%A#?y_Tj8C9>Gy^+>RCAO(rxdAuG}} zt(}@ssjI6yW7yf*84yg#gjTs+fnt{@$)4G#srV==&PuWgvcj>ku}dD0$1m8Ch2J5$ z7(A(ro{cS)2IeHM$4Juuugg0dfSfD126oEP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG- z6f_mZ>wo_M00U4-L_t(I%Z-%HZ0jW)Z7&!Ct-;QxUQYniPj7IJ at c_VnvyQij+j zMBRj=Q4pqtotvjH>K=?q~ z7ayKy$W?$#pWi at L2|G0=54=GVJG}Q;t61w$m!LR`r98pf8iFMl${n7c{%{k3Pu at 9+ z_r6~f=p`{JF{misdSaVkZ9{Xtf{`smmi;{l+Te(2RN%Z=djkY8zns2+9s-;?)&W( zKKkwtR25N=N`M#7;*H-?6#zave~M*JkW_DTxKgH2%z_sh?QI at 4TC8Rlu$5N^ITWQE z+h;f?`*J8E{M9?h?P!iS3+wphB>>E!d4B87V0nQ#mm*AoIIn7CXsGbsSHB{_*YBU% zYnCD`EdEID#pAs7Qjw`#-};AL&o6g7?A)s|6Vy01oguh%QFbF(%Ic=77>ePg%NahP-tmnhyi7(~}2q!d&XQ7~bS?QSv(_$*Tq8RSyQnh at tK z;sxZXC3Y}IA_68&6zk~d4M9W=iU&1}WuSY%N^o!*!ZD!V5Qh?|fKiBgXtPe3X7qE| zV<>*`=$Su};Ysr$YxnB- at +`h^fK)mU0zT?Mr$x}b%iNI+6G!sP000yS1^@s6cz2e)00004b3#c}2nYxW zddbVG7wVRUJ4ZXi@?ZDjy8FEKVRFgRU@^RoZ|1T#rQ zK~y-6ot0f|6jc<*fA`LGyUXrUYHb!sO-ZqqE?rP8D#%BRD+Fj2VhmOSLW(?ShzXdG z8smcrsf`dZDjJM0YEq%8loo-;3WjJRD2Qyk^n)4-Wh+~Xv35KAIpagibj!Acc#=uZ zoOA#A-E+>|JHjvw?lvLBxcB+)B7vcotzG{@BS1sl;V1oF9p_SnlbCuxi{gp+p1F_B zsjA#o$<^*IfU~PYL$oxXd_EeDHg){jox0QHP2a1Mg1p(v{3kqdfJ3!M%zXdAZG699 z;D^&^(Cz~^X(jIbf)|S(FFd?y<97D%-v_|^pVgwIJJ`9koE2U#ZqGdYzDwBbj-!7C zd$3q66T&8htSc)&XmKd7R#m;rlqq&I-Zz}i2R;|ych<4v85e83%b4yOgJsyWj{XxG zNP(%zLpDZxcciHifX*x3gu`JopPnXgJ(z`G$zs>(KEC^-o-NCBSy)`mbeES$=D6u> z_ou*8Dycr+3P9DGBAiYKPN&1n2}NMH3LL5dj)(Zsn8~H)UdnupJXbu6LeD&Ma%Pe} zBZn)OeGCl^9=&|AV_ga)97~w~$rC5=6cvp at q{M2qU{&Hs1r*f+83i1RNBOO#la;;( zmMs7juVl#9En5I+X=x!EjUc7KZd0%-Aca6G5>TA zHf<+=p)#!Dd2|5)+E9FC at Nd-qnlk+4*oPGh(T0Z+LSVJ2*n~hxkpz;cN&>}|Lnz{+ zKX}vB4u*mw5G`rp%|zFxa;hx00%ceWd=5X at iPEl zRz95qa at rISI%!rbsu4qsRw74%LXijwx~>z8#Y~+PNp@!@cjj`vH^BAY0A8<`bLY?T z%F1F^D?V&m5G*#-bjwJqREercgd8~ziG)rh5 at DeK-?2)PEgaKLKN5|Y{>L93;AZe| zR+lVi<1{Dxn$OZ>&qrotBT0ZUrqlHVnx>6!SF$zkC^7w5G&U|*cc_+Ar;bta(k6DT zT1rpfExu|C&_6Aoblb>z5`eB7Xxi{ty9~qN&NI43Y^YdIQ`2#VwJ^h4cpT{FjsBmm zbX}!-Pc=kCyzR|pTUHNxz)wsU7%~k**T-olyt`V at UoQHZ&szarf9*{(KF}Aey6E at 4 z7a9zCSFSBa&Mlz3r-RP6u7*TR-}%2F0G>I8)9en% z_S{){<%Swr0ua1$`^2Kfi$1NcscEX(y}P`+rltwtKMn%KTfqhS!vFvP07*qoM6N<$ Eg00CqEC2ui diff --git a/src/public/images/icon_change_role.png b/src/public/images/icon_change_role.png index 5740cabfb7eea8594274766ecf5cccd64a0c00c7..999f2d3dc25fe7cee7249672f63584dbfc39f036 100644 GIT binary patch delta 1135 zcmV-#1d#j62!sicB!3BTNLh0L01FcU01FcV0GgZ_0000WV at Og>004R=004l4008;_ z004mL004C`008P>0026e000+nl3&F}000CENklJAfbzv7uQH&IeS`-99Hx(3xcI8qxihoiR1aTp5q#FDJ5uw;t z3|8CPsBJ!)OlBt2zL|ONez|a_j?v=A3zz%gaev%%{{M51 at ZR%(uJCF-Eb0QB>dRyeE^&d>g9lN3Xws;@z)LoVQo*t>R>iF`tBCcn{F(z at FZF%PV+$ zaA;_R{z8#BiGNwVIM3qJJc)LP-~8~@i{E at dYXO38Sdt`DQp)ipNv41d5InW_wtdc- zgJWakY~D0Ve_?=pZ=T`db!^%+3f>%?yzhp69ahi{Q%Y?IP)coYLwi?hY4^eb!3{Y2qsZ{C#A;gwdqHM|Ka*tYVh?5r0W`jmEqSO{9~EYJW{y$NK!o>xeNifys{LMBwU`_jM0A;|WQ*zDo zlQ+NA-y1wJw0151`2yBjmMUfD7Z<74%^R{ zncklrDd9!P+=?MGjwtcWt!NM-*^v at LruVPkb$BZvx`AqS849U(=Srg`pUPsLW3Hx| zDSvCuEo)|14AwbNS$ayNB_Y*rK!$+ST7MCS;f`*a_rCnY*@fEPw`Q=$frq+=>4yDF zN)HH+=H)(x!HYTxaC=1443Js9oK)}gIM8;dp$tsUApjCP1r z4k6V|fDGD-#)U%Rk!rPi9H3gQ9v>JOcz at hGecH=3+E|RSSmUtPVU5LFi?J4M9abp3 zY5fEQ-IYSISbV5jt-e<*79R#K`#AbIo;$ZA7+eP`gYSgdF|Yu13%5LriONR-*KKSG z^mQ3K2Kq;KzVMvN5AT!1qeXfOh;+}N>5C(XR;$lT|LUIms{H(1$aY-kT; zf#Nl{KQ at u--*A`A@pG<1Mf4Ow*?J1xFG{t|6hyX|fy+BX9>2~a; z+g&|s*L at 5)akU}UHB&_U)nR*gyz2nd-kpf}V*m)6@|f-F`+5KX002ovPDHLkV1gY& B6#W1I delta 1077 zcmV-51j_q_3CakNB!3xnMObuGZ)S9NVRB^vL1b at YWgtmyVP|DhWnpA_ami&o000B* zNklj0vY`*W%Tu#OSMz; zwSKU+cL*yJ1i^XE`Rh1#*T7yLJHDkdab&|IV^Atu;Cmia>rGf#s>7d)^%G~NYo8{d zX~2x{`xi7#dw)R)@q at 1Guc1wRG&OPfxu-UM{?hiRLFXJi;e+Q2 at DQ}!ap3CQUobmg z|KPK;^IzclP#FfJ32B<+Ft4e~TjZI>RS3fnw@}U_ptr7ZC>IMrYm)R4pqd6t9-2Fj z^Np&oZKYx!gdcz}0uVs}K_Ed&iP$0Ja|Qw{+i1%gAb*B8g at u?LD$Jy5nujA6F+31l z4 at 31m@cjgoBt)+z9waDrY62)xIw-B70v$+E%YT|eZNvxoWc+Hn_NA^XkIPWLLj}l>8W745J?jp at uFNf;{(iP+b+k8IhX7Z3L$RftCdm*Vwc6Ufgq;09CB)GNhFe*1jl4U zP2ZSqfTCr|AuA!ahm<+kYPGHq80m7k{2?B{;?@?R-?72%`_S);yVCOqbJs;%rvts} zEr>!%43UZRM3qsLGJ>5h7K;a{=vL*`9eb{kkUvjaVHAg-^WJMIM3G>Vl5!*QPtt`p4)oH6E?wKzPtk!U41NR$2Nstu?b5}? zK|g>A6VN8a>uMqmbZQeqpbFggeH|8b{$|oCFZ%c=`HecUE?lsEQMR%2GVhN at ZTWO?~-30yr<^J^@L`UFz#_l2oE9 zz~{NMwVss6*F#p<*7nlhj;G=Y at Buh|zOl6np!H-f(tTzCeKV{@#n(UDANBQJeG&Jv zxfztAB7hkUN{`A)r~>@`(>sca-S;nJ{a%0Hb%g2MED{uQSqmKiCG=Ml>;g5Q^l!xe zC}amfz{@wU=DsZe!JC|KE%oSTS3zh%gkmZ|!#lfrnE6$+-4O7irx{CCz)K})EXsTf XaMp^uM|p6u00000NkvXXu0mjfP0Zkf diff --git a/src/public/images/icon_conf_message.png b/src/public/images/icon_conf_message.png deleted file mode 100644 index 1153a76fedee496949647a72b4fc345231dd884e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49126 zcmdSA1#DbD+vc4#ZNtpmG~6&VGcz+YGbar*Gc^r2%*;#^W at er+!)*G0cK2D3UhVhl zlU8fZvF~%nZ zzj5^iQ!%ZK`K2#UoDU`79p1d`Qmys99j$mY+=6Pj;U|_QOX==6PwZt!0?LOPzcwg=n z*H2+=ll!L5gbz})U}!Rv=PUW->qLYdeDTH$y{5o2)8;7Mg;JU)w+XV2_oAH7BcKVG zVb_S- at Am$i^pEbDEkI4HBg*wLUBj03XWqrKdiw zvg>(Su*1jB2WoZE^ZB>O)88%|WL3Ek8v}gH513{zuVFVrJK+EB@<+54OK3E~z4rro zTkPXZ+{Q{!^m$|S{UiSTKh^tBoKO}p<$-~*LD*O+D}BtO&$`=cV=bMW+w5HU%{*}a z#$LC5fyZsV*!4zAFE+(w+16Mqd9VLi3PU73S`MFl)phOO{n)RI3Bv!gK-_l=A9nb% z!8j(TkO;um}>Q)!d=C>}-7BXBQxfB^6_m9pRZCSM23>r*}JF>SH zvN{Y#P6K7_Pt)q&0+9;?*A47ftIYzpN3e~X9)1P+zh~Zgb!4u(626~V$5z@#!y8#Y z4r=AwNk_vzx|(K9BE%pN9U|{(^T(LHLbaF;=GqTFSx<2g7{#xODPOZHFQv1ZoddvC zYkige!@B++;}qC*&>WGG zHTJ6gEsie;Y7;}8dX0yKcD*MzcYxX at 05SDzIhrPew2;>$l z!dA=`c+x3EH`JdmlH|FRfzV%2GhAt4W#}L?B8p7%O3gExmNq1i7EW=XLf=@&uxph= zZnY3BGM{(Tx1IQN9r#1ROu<^4P2jdx$=O-cSFIY&d4 at aGRl8{PAz}25XdyGrpsj%=e6Wp4r()(z(|wXwu`5jxN0S*ZDZg$J@@`_B zi7N#ZW#I;>lg_+G`4 at T>JS#;?g?wz_is-d6fmE{h5%xIXY}o-_cP%@6)Of|knpy0T zm_z30t~6ys^H_o`A at b+4?e&PIW@}h}J}Eiz=nuaLZO~u<0e)pXQEYlf$M^%Wy=gM0<=u+N at hbHG`twOK>=q-2vaRA{=g@ z=1%40YvruBQlkq}N@@e at HSr|9vRK?z^Qf71t6MKw*zm>cOdh6DcMNo`zNYZy7=Y|rLNaFe2s%|nzBHOK$F&iHq!}X zqy+LntgjjdT?76UMi1=$K>Vjm-fz34I{=Zh;?7CMZ!Gwno3scz<~&xcfq>e#wfotO z17ORzZZ9Sm1z5IxGyYGwWZKm`HU0cX^I_SZifzoHiG2gp*x76*2d6&O&do-VsdOqY zUlPJW2m=v$54iGp28& zHzO%5XusWXuzHe6u*H8Hg1uNNC at Ap%G#pS~A?-Kz?U^3W&wcR1>353ESF^|-2|)Je zVh^&bc+2H2UkgEE>`VF0EDl_qBIUyT>MWtr!i!aw8%7Sh at _f$LcUxf^{{TG|Z at j4$@#D8Wpc!owKDfdyy`vnLG=e5zhOY;`9%DTv5c at 8XYPaVW+T2m<;$w&{!kfpZtLS)rIa*SB*1p` zd(3LMc#oL^g zfSHBcNAxSS2rHFNd*6ToSq&+`b1ZX%MSjwuoRWR;4!*%&9F}BO#x`5-X39CXPqBac z3Ogo=GYKUoXx0A`1pu>cHaT?R5Jo6l>*-BKv5MfnLZnN;k|kaDQ>(KWo-PQYeSBCt zVm1L)!0}7sY3 z8F=G_ifv?JIx8sdfT6=9$6n`R?>kLT$T#DkVSMUL8-TW;)o&_VL)`;8c6M_G5#VmNH8k6@`Q!y zpaB6C`RqXV{nBwOa|pYwjH_yBVZnm(M#IDwDxdJgI2g(cuDSTG$36G5?;TzgK+KeS z9y&h?Xv2_~GX;?7HS$McN$0Wx1BTjO-Ba<&$yLXJTJV*r at S?waOX63nC&gI^ixA;G zf at N7VVi06Z1{DyC(>JBQ5lH;mUCJgDfzi?YB13}kwRl2@@wN9g=pg9@`Z4%SVcj_9 zlK}^kPi{0;gu!!&Gjm()kc~oRTss)cBnAS)iF(_XghPA154TNP97cMi92AjtL1v#Y z5(z#pgLbzK9;T at ODWv^m9D-=s0VCF_!=GCidJ~=1c^MnE;xyBA6NTPiLu|cEYrmCF zIPsD6J}>z2R`!$CHrFsu6+B**ub!^0x$fgP zgO3=BgSRkQL at M$#vj2ws+D?9)Rd8UR?u`9S$Mm>W8n>frp3+x{l%~l9C23O~ z59*;G{cNv><@}`ySxyNVN|lnVWhf+G2GP3wKChSHXs7__#hDwl%3h*`Ni)H?W}jU* zd9ADF2;c at 4*t>Zsx-Zz~!}H_k6k4zT2noH;WEmV9k$Yp;Y z3S2M2MYLvJZq8T579vJhF?lb`(a|YwElbi?WbZy{%m!@uaY{2P=e0=u!h(W$or9bM zKuN9;D=}9_qAC14wl^nCK#)268jB(BQ`q+l65^_?J#8|MrUdQu&S4UJ8Qr78ZmHwQ zXD3<5EGKf;hH}XQ5n-GsRRW%MD$OVSOK2{KSCV~q4u|=)X3OOIQSmZ4*#f$A5yZzO zZ9F~+4qaJIc(Mvn(hA0z6O`|XNQgwqM~@PtSB^85j20|Z7U=N{sI(P2onm*ySD9y7 z+}qdF*$#{kQI56N3>u9;G%(`#g=oiEWp?#~6JG?Hsm>VBTu!DP9k0`~UL|Ek_Ue%l zfYnvihwP;g*A!y-abg_%#;gX6naYe*M)SI}f_)afe?*4l6k}2o7m_5bG$qQ$_1g$1 zW`cO%^QX9yZe$s+M8gmgd4=&0p>D_L~tl^J~=v5i{-frG at _)lCWGdVn1LNa-{w0*?jy8&}S zJjY1FaE$3YVz8f{VJ6x?yZ at EK;{F49E6sX`<$OWqB?CiY);Z%369$oGhU=JB0TGO^ zFwcDatj@}C^PHkpk`xipwcw?{+IX%@0F)A at XNsUh_CG8!Vkuj;95 zuwwexTB||N5VQ5J*dwqH`88yS?3S#R49|)`Mj{s{d)dDWV{fZUyELA&S4pF;|?lEr|cQgp|7o1;D{_d_t#Fq0Ldy zVSs8G43sQAfN^bm?_t+)E)k8DKnns-z`_Ofd2)2!gU?|MiK#)0nkUXx zmV)3UZYq^t4q#2e z1kTqGcaKu+WK65jS$_Sl$5(CKDOhe&JKDdGKApXW)!kIhJ@^KDy_znei>cvtILEkB z#Z9BfSzSs2|y)QtKm^0 zQ~hWIx{w;24udm>5F!{$JK=pxL>^U$F00TYRmeYeKEcrp6#b1okKxXh|JEFs`m*4< z6-W{h$rmaxpGyu?JWX?C(>Xt}6|XUb?5|N8A4DpzWQ~1N;pyAcWLD z8u%*-O307nZ`g?l_qVOT{rGOh)ftuShR(GK=~}6}p>n2OKw!kBNhxF0Xr=p;^YY~R+mh>tT>Z5$m7H_>>nq8Q62xXC$+iz<%wV#W`pzbg z?v^s1j)U{SG%5Rv;{~?+EyY&}wfK{7zAn0df<2C{K zyuU-AR`Vk16-4a_;pGcwIpIn*2>#;Mf2A|n&!~`>o;&!W^JnAGGEmDX!71qh%&`vp zr>7M(jR)E)?vHC#s|g!VHWk!ch!uG42jXK`%eW~jZdS61jG*xuk{80buiq!fVOG~$ zzsEkYDy$zTEM^oqoH#a*>Ifjtp2}duuSF%-cb1q&dqsdhg&j$-ZteCy?Kf1LE7uj( zB&#ShSrEIdpe%OCl{d*QXS1>XR867o93o!o+-mVXEO z=|~!1fTHxZi8QTPl0md_Bg`_I(05yo!3?TR#bZLSr^qP)shDi1qGwLoLLn6{{ZF)% zyFc}!-`LvX2;+F^ZJWS)GK!j3tj;T1?+066B1l{$@~fKGAl+fR{FnwyQDXIOVoqgV z|M(&0ml8||F`sfCX6J|>9(Ij=-6Q^bv0bIvnOt`_JGUgRdYWH$-NgGQYf&-T8M)%w z^6Gw?TU`InCe*&mZ6ll&;_q2l=_|)VG2XVzM1$f1yk`#)z2>##7K=r*ecWB43N+u=!aP$!Ei2{gi-HU$cY>Q%&6e&*`z214hr8+a+xX@)jcBeAP7Y6UU? z7ESH=MA#yxCeWxS0hY!^XXOp+nonWeOX?o_;_OW`@8NWV>w>LfA{kQKqx+xiVG_a@ z4L?A8FyxRbMq6$e)`1e`WVSq9j0#^rb^jwnwoMHH$viV)?3- z5WB_orihDBTP0pndmBVBG0j}eYKIAcRb}3jcBva;mRkHUTFK(C9yBm7W5=pI`Fy^y@~6jLiQQoA#>in$g9qzd z*_DeX%}H={Py>3|^FpwnXW1foxS9MU?21pXV`DFRt%(LbFtGJu2{L=}e&1>Pq2FBr zenXMuHo_G|*PA=~LvN^=CD_4lxcQya>M#N2g5!4!XO;@an_p)6hH8?M=4Md=2U*1w zzEai%dA8&5$@AL9U>D0uEQxAPenob|z+la#<+Gn=+3x*xe%(f|Prt at f!ClAws2sP- z17^8rB`B}Q6 at PFsB=T?&A335#r!1zT%Cp$OyYPM|SGoY`F7W8muN1?>w2;K#>H>aO`f3-jR)T3?(i!_-dX~hsb%1ShOd5?kKfpy_)qf_v4SG^|0l=CWe4Q z<>X>Pa_3&hReJvNHj*&=sa>qC?J8GC-Ksx`?X*_!j?&k3-IwCnj`IGA)st5Q>lg|p zJ|=N4OW at Gm+X~Q{e~(SprXv{=YSzU1ij%#rSqJSxCbsIrYAYU%>Moi1=_tH$+<8so6&jg5^wy;Xe45czR5z}eOp zFZB|Rmln|2vJLz!(Tm4;0y@{B?n)HOx8C)9d}*;& zo>mv|}PXR4R` zmNCEP)b85>i?W5Z&l-d)KZO^M<=l20fNL$!kQ0(5A)CN;Mu*z*kd$Eae7nQ6P7QME zK<%txnc9IbaT9SU>}1h$E?4_sXKtKhfke_39f!*)y( zoG0Z)sF%j#byM8;5O7`wvneOEs at aV2Z6B=z!{>j#a1cnzjguMoK3k1L! z389nUHY85sDSLFBi0swMc&(UTrU`0h#DrWE zg;WWo5E^Sz#MG(e*NkA5;ZSfRkMX#YoN0_tWfx7u14pPa89}8&Aq$PVaf|oF6^=al zXQf8jevc4dJ3NTDWLU^%BVKOd-J8r_8VZ9T(4C_<*1SgNIw8r?g_kH5L zL6f?oTgSS~wH$-q*sgpbL^z)%Nako_4vO24Ryc-{+(G*isKuU z4VkC9#ks=_-J at uT5y7o9QLp#yX0g8g-c0Qjr!DKSYpTb zEK#(;=f~y$2+BP at k*6o!~7(1*@0 z|5=E^cF-e`5B^@e&?Dl&Jp2c)c-cT+{g6hW8TzPT-{Fk at N`<#R at 4h~8${EcoD+!A2 zHCc)h7d6CW)=XX&Q~1dgV}F&Dt9*SN!a%|Qa|OJ4CH$hiwy~gb14iVu;riXa{w at 3v zl+oRyrZdj>&SJB-@@Y6-oW3DlE?zXfyl<*6ve`h)Ejm^)YNLY%EYk&ba2a6{nUIWJ z5&eKvv9e)#@#guKn*Op>h_xzrC4x4`atUF5lNXcBqLper-{BZ)CnOqjx1=7%^&Oo$ zQ%0zfL;<+K^6E`P{-hc&Ji{SZ=SSwvs=@5YB{`qmLVin5=T05G)+x^g>#x}+FD>WA zEEDTa=^a6IuJT}o at jW`P37p~#m$4^bNO%=PqjMxF|t}9l0oRLk?Vb6IHN*4wqI7tNJ_#`_~Q+)jNUfE{YLD&3N?G>CAVBQwr|AB+FO&b z&v2WUO3fRAQY=ej9~;G}E`-qB4M4}Ds9DmEJS7{d2MAQOS)5=4Twv%S_>U})3!X!!;Px- at O3X|Epl>A`J1c}%x<}rcAP8N2H z5;6|C&zV_iu0i~w$#RyPs1m(z83Va;&z_#p^+g*qU(B~`Df|w0PaV}QqXqz2yAn2I zbIHy=^WNBwYEnMC7P_N1)u6 at T%FSY0Gov-dR{(E-c`0aRJitX*s4)%4 at xq7q48JLA zX|F}SFy}w)*`qiRRM*=kLa`%@3Qjgs4i&Tb6B%g2mfk|@RV{Px&yJAV{maLmfs~G& zEkvku{o-dM)t>(UyCjZpY9Xy+{)l-H(($N%LZYV$y)fr84jcDsQo-sQBF!AHUgNRT z&%4Y&bh0bdok!@|KFGTcNwCmRUwTE4aI*b+MXoZ=QTGjyo;216MAKZAaN9`KoCsR< z(Q3EAW|0G=oRuz^yPcgOq%~*K8;|PnqMlM1D3nU_>eB66JHg_5i(%%|Dc)s?^v_}T z=yT8pxQ7EU^}Y at zpfh88QNUUp8fo{Nz&B$e_jiPKj|JEfn4MJu+X=L^iVMfhl3R$P zd`lA1zn?K|ay+O at T0+MfG){40#a=--b^WXZg8d8KD>m4fxy1r6_RvPYc|jXV#C7PtqET zt}aTe^OQvzrW#4~M_1AGtW8HB_?9ub%;_c}7k9uhl9p#r6=HrVnj`O1>38BX>EL|d zvPh`Y&?4=VRQiGjo-}g2k%6^R$e6O_>=}Bb`UReFZoGp-XVFDF#kb zRb=Mta#LzBbsZ^ReNL8qfH(0gbNAF3<xh~fd`??nwgPZ<6%!{tx+y^AaQ zR)0?07Bs&ZA^LJo)@Ya_$IV}hv7rrX-pG`vrKni<{RCTut2pMmpM&$f4rw)1_)?+E z3T3^YD+)E_BHQt(-H7EizWQ-zOSJ!G1o?{lNH>V}E(>EHJ^JCu?CZsbngvZP+U3>l zAGQg?&#E*Ps!u_w+)(+f62&7Q7?3k!wGqa at YZu_I+d6ZAV>sWFX=eB)xOF{*kSHueg0zcjw-1uHWBCu`fk%YBL^M#IPelQ()Q=WNf=Vdp~myltyM> z6Thcwp>h5=vzpl{|HOqQNZEV?$x}#39+01bhbE&y)Rm`UBJ6bJ%cgbkuy1$Jmgp|=-o#*2$S?I>=JEBh~Krp-cD zsre5yOGG`E@|uR=WySm##ZnEFC{vIqi>hxu%LXSR5d1NHm6)`@^O`ukX at c8X2LU>6MeL!iCdlF8EPT>k#v z9uvn?a#qB!1u@>5fu6yngCgXfLJa4(SjW*3>t18lQe)M at KOL+~ebp*u82JC5>Dz8wyP~eJ41O1u znYHzZW)|*=Eh*-7Y?Z>rPSyO-Pubs5`7um84#Tj7Potl_`_ErI{>0tBfk|;NZO=&Q zdti&tw59F*Uj=H(8%8f5ce%B8KZx4UMiT)bQl<|ZeXHzasv8AbTs)a*I)gDbgQD!P z8vB~&cQTJM?8^o0$_C`30oL7mu#T6D(jJF)x3W)XO^bX90Od^4! zjiB0$mpQJeOp7U|%gpddoXBBm!V{b8wr>}DdS)abl2BBGw;-2R-AzCOLu=rJt zVZ+z=tE4!huS#Of9+$jG*?A1I5iw1KHyu&h^#FaZzS=?AXBIVQA>?e zk;Dlbf`*iPIf}`2-U`c-sY2`7tOYBkbSUSwdu&tr%y8 at bk5I75E-D&%N|A+T_WAfx zjCTFh=@2*f at TVS+e)K at uB&@L9QR687r+ZE3jPtwOcn(mCk z9hyi0*#jGlyt&zg4zBOX&l^==I~NxJVOoVw^;&=V2)fwe*3kvK7-F9F)gH7f at 0SSp z`{(k%OiP#5Y!%&1ElbD26#=jz?&vx&g)T&wou^V+ at s|%p{i{s91C3tQ{SAD^&h4sWoBOdx8?_Qs&0fJ41yN_i;-?-mNoVx{&KGOgk_EV5xu=p zt}??zuWrC!LX`~yp5a*>>MT7;X?v(S-1=-CS?=rnBXs+pX!#+quIvL$eMrj=t?O$4 z2!%EwL;f;Z+-OtY2mL%jnylY^7gW&C*EqO z4_0P)7?Dlv3hdS>0VQzvk<&7|#^}~xvAQl;F0VlNT4B?AlgaBk5m{$f4E#ax9DSY7 zUz)#J&=@gAU~%uU at 7t)%_2y)rxYc zkyXh8dy3;pd~a56BiGV6;wpA0+{Gfyyhsf94y at 5m9+~k`xLccCL{(W;@c5lfuIcf6 zZ10d9ITzOIdzoYKzKF%vPE2+Hk at +nRoxq#gAv9Lf-7$iy`OkXu1PIEh*L?T~Sq6G(GfQsyK1OB?d>O`2A=vu&jrzX+#nw^|7$^yCAB zbhm35EEY(NQ^=M<{>(@orm9Q81$2+`rtlNl)b<6EXr1;${D!k4sZ$v)!a{KvV_49BN|6MC z4eJHD(sDRnC(qnyH_+-V`y&@rm#Y=Bd}>(^e)Yc%aA^AiwZPmluWMyD- at pb~S0gEv z!tv?Y=k3;de9L5zO?H3HaMQNiQF{x-lDP{bE6`ZvxVRPOb at dX8mHnqRRP1Ie71`oqs`J*<~o zvJ1Ze@(_k}xqe4?!g~71n$5&1-_-|z at 1cdCcG1PrD>nwFmrds9b+!&7sNsACwH~F4qmXHFWGkLjFBu;f7YNoV(e@ zB20(g!-hwfg-s>*)+oe3S*IVtW&RP=9wRHap2MD}pl+B{ynL>y47cX-l;Zcrqj~q5 zc_ijKX)3B>s%un&pgH80vD|k|b zoN0!nA~1oiM-@=rfNetUz)z(p9rt-BMwRW?)3kX^4~bONwR#olLX$f>4{i9n69FRn zYK+3*pP zXPqKU^*GG9a|aiA&XbDD45u~*7pYl1^fQ>ycW(>=Z&Ikg+rYT z!qWJ2erE+vmSL;uM=Vlgr0aJ{`$^lU1Y at G)XZ(4kHN8iI)D?$HNXyHV?|EwVFMi1H%BoMCgB6rfFG7QNiyB<1N$!)# z6Z6~UwMU>;Ydo9tBx=@}V6|D$ ztR{X_EJ5}i29OvqN?vi%pys<%+S;W*@AQTU-*`&j$*RrG1`LxIKG$@y_L=8`-=%86 z1Q~yKnH0+D2uX1qXzvI)(nDX>h+n%>JZD35GMo49qjQjZ{Bf`7on31uHaW1vLH`o8 z92yaNG2C~;@(>WJ(ov?~Y`EP;2+QVFclpCrv8d*f&HtLi;|}#G*KjezyL|kJ>sJ_K zr1K;9^-_ZBr&|0qvg!j*H~S&2*4LVQqms~OJxAss9^t4w{Cx==-2P%e6Yb#hAm&hS zy*L1)Hf=a*b(77y!U<{wBik at zqxgwS#=Oly0dJ8;sH*hIBi%12H6~D8 at tdER4!`fa zcu6&fQ4OQyS?U?8mo6%77t at l`!qngf5+`Gk#G87hUPyc!rACTBH+58%>@iH976Ahc zut2mc>O7=@162PF(o9ITZm||B!qKObtm2mRB6<>U;(7H0rQge5oUv|!CR)$bd?Io+ zng~Z9wIVz_qjRK at 2iboLN9~fZn0?rJHZ$sgB|ae|wy6o*+shU3U7}`93*}r#QyO}A1VO;@<}`c+y^Xa_U>}E!Q{&|9^rafbWDp(XRK&Ev;aMZH z^qT()FXuUJ(XVBo1?ZsBi at lfZ?DlKgt=C+_J8KpKUrhCh&v>ukGx0laT(#-y8-Y~F z($V=j{&T~6o-x#b^!7M{ZgpsIMqTbpSJwIhJ$`NO5cToyo!2^qv at gL92SGvG*&$Tq zi^md~zL$^SEfiG~+u3%_#^vWk1SwCUgl at nk65Z-LwxLnX2HcgJop{&1Sg88&dzcFd zK>_2>DPhu#Vb!ul>K}Jc at jF8J682`4#906<`UX$%r>N!WJTE6$KY;BiljNrqb!vv> z&oi_+h$l*!3ZKxLz3Kyx&D+G9PP>XSjYNoUE}>}Ixlg9nP2W0*84Y~;@&(2)8TBL!;t=$`f;WHIVq~t*YwF6={BSk(*W!P_8gRZRqPvu6$IOmf1<;25)~}4TVb@!pzN#VXFGH2UX?^L(>l-xSPOJY9~lRj8fW8BZFxCIEE%;gP}vKY;a(j2 zMIqd}U!0sX!eTlwCZ}v;Al81~0E=8WofE6zi(V^%UXf7En#hMg(Bq>g%Flogv!EaQ zz<puAKCR)towARub;yoU{=UNSk6h_x?et9Oc%Kypn=S| z2T88KPv~}%@|?U@{WDWJN~tS{6V4YVbWaOOr{7Ym4SaAXI<1}`=JXowJsSARIp#7( ztS3C9XFxtS#9cRHo3Bzj?|hgRY3T z+O-#Ay#?;;tovT37C?>-$%8J38GNc22U)dS9a;M-=UDn_xJ&Gv=|aYHt77m2=R$`x zm5tiaEq0umZazVAzbEN~L}~}HkTEwOm}+g8|30aS+i1$yX~lf6*1k4Gb3|NzQvuDV zN_UoOqzh^ydLTmb!gd*N7_C<+TE4+qZUUhSWKF-tgTzdD#eClR20++;_wRA8J6Rpr zF^^235p`5w%Z}%)RIg8up323y0!?zdlh>ow)4Zq;b$m|Q97{8FYBN>#@sTa_sJG~ zu3O&(7n-{(N}s^4urcmNl}Cm)GpxqFH_k(YLHixU!+I94>_?^tirC~pKdUPu8*-b` zoaJFqK4b0;?Xa)b0;P}GCZN?Yc3NFzO}grE at oo8~C&Rus%T6 at e^#ZA3>WhM?JM6rWJLDK^aC_)#m3y$$S#-i1a>^(gnmogLqkfp{aKRX> z<<=ddhx6+Ub-t)IO7^KUaIKhl;c4)jXX|>82I at 7QdZ}`p=I(oD`@9S;ceU!yzKuC` zUg&`q4?TQW_!iGVJ|?T4z{QKz#<%D3hr_P7uBvB(#fP#7{>pi`mn at O_T>M3=|1RzM z;jcyi|13T7^T9loH}fc$e)#th7XLlGx$ggG4gANoK880tIv$S_E*L)y)!`dLe>gi5 zC)Vlr%6q*#g=g2~qQu4X&8KV~55}6-g%t-vLL3D6T`pte2t#`0~*?_((8Kn1;TK?ILVkyUlYqD zO)_cZ67xJTzO=z9zU;9!D>K^;0!n03G{fw+D>BpV*Zssk)uvd8+zM)9wV)P4Sla25_r7 zy0-H3juP=bpsQrRJ;hCqZDNBi7%-a$-jBGSiSK}Wh40C4KKMJ`jY~Z5qFUcRy678H zeygw&DR`47n@)S#L`!uZ-=b^cXFPY<@hWXcrKLSUb6<>a)poH5Z+x%j7kV-AOyRTs z7JI at 9bXb2Q=_Ib>^PFN$IToBPov^?hzPKOayOw_4$DUxTB-&*l<5Y=4_*+F`_Mt$4Tc)GPB}6 at jpz*tJ%@rWYD-=@ zQ%i4;Tk-$f&xDixA$8qv;@Yl zZMQx9g9kYuw!5zPhUjMWz5iSpBe`x?qY$Ej&(ZYS>>V^pkb(N5mX+$XFxsJtw`}_~ zclRS#b(s*T{zSZw#seA`9bS9$`vWmqmf)94rIm+Mwk3M&JK*s}yi8j<)%PF40J)ja z{3vt8Tb7*lhOQXwoO at -+;`=W26T2;(B)2MWB~#4Gm$jbR+$2A$+=XMxx+VY at HfH_V zxG4BOMqND at r#t-1>C(v1!ww}~n4A&-)}!`RK=yqTC; zdJNBnUk{Z5F2RG zk^K7*|G~;2 zB~g^){eO-G{ugjvJ&z9HbIeoyZZiB z)|I1`)ipEL0d)Vpc;4)@C) zo?!e&fUB-0^mK6!iDp02Z=|dh=`3(}SttxFc)V=k4Q2Lik(&AFcs0qJ!*FHt!{hPV zsmm^{=EehTPDbxI`5Q%uRSe5VK=Cu~WncFPiU74QGVDQ05tc`d6 zw;jbML@@YdxMd4VQ|k_RoJ<(v!n$p*hr6aCL|g{F9D#$=`EL0+T|PD|yI8(c2gVPT_kJ};#46>m#_{{^q;*sDdM&_C@|qj! zvOd#^z2xdE)@E8=KLg1`)qvM6fpGNj={DdVr1|NfL;9}8Xwm#~atKZTP|VWpV}k%} z?)$V(YMAQ}q4VpLDF0k{d#o9L2t8VIl}sYN`&&54UvF0@?)J$nQ>8IPCdb(Pv3-k% zX0tAw{zW0B;D6h~4qy*-e+j1DlGfa1yv+dXf-Lml``7?AO`bcNiDArVB$s3RNMRls zSq8M#)GgzhU?y!of2n!wR+?1v)RL;p<#h}Qf zMHIj~AGPj&$Ejd-K4*y8s5CfzQsSP|P(A9eqk`lq;_ at csAW<_Rd9bh4`bWlIy7IzWrk~ zH5h!{ZLG5U3bj3oRcnrGmFz!1_IeZs+!VuQJO{DxSr$3YYxe)hix!cqeSBn^RXK1 zgZb*_lJh#Q{O|MUSFPi|ri*CN|C;36_8&(yrr;GvhQ*V23EnAPTsCDNOe at G?lk?#) zOjkLxWa!^hNof_GqI$r0j02zJnp&!PNhvthm4A3MlPgv7YmHNWT4+P8w8VO;*6F8h zO3VW9!eXfg5R(*J1)}>u8pvtGX7>TKy&sHUhybT6Aj at tcuHQ at BS4~rZf>j^Iidg}ZfrgET^zv$ zRwD|>j${D;)O^6Z5^_zb%U~sm=HW^63Ku%Az-g2>x?lRZ=Cb>6#p6eP9^8E*y=%PQ zR7M6pW<4ED!_|3<0PnsG`p^+|y|r=u_6FU~k3jv0i+UR6glzt56WV-LeV1e>5mgOo zJ8$}$U+`HU0_PSS)7%DBbf#jOW_LX`5r5DMyM>&FOc?(ycGN`UJ?P(kIaaZv3>o6w z#-ktLkt!he{nf#XOcrz>56&dnE&#Io{P8~Xef_C6tIcA`)s!)1cc1Pz{I`ZEaoepPK}>czD at m8ZcS1}amoD?dy}JJt zZTe75EuDNIfP3YXEdS3&vaQbQR?;u->n;iIw6t~@Tgk!XD7gaqvn4bx&Po3XYft3!0E+ at tJK~Q3UuX7 zXFX_U{R`P=*AF-Tkuu({zx&s}n7GFst6c^Kqw!!EGb9h91tYpX-r^G~@RRf3$2Hwn zeO)X!iw82z++YXSv#JZFgBIX1Lo>j90N_IqHdX>Q}b)^ON9)e0|YQg>u8cXKE znl-03kh_e%)XwGPn+ at cd*N2Vox*~<{pB2z2;|_GT$OgeIma&7CzmFtfj-LR1aH4ur zgEEEZrbFY9*Cxy-`eWm3rn{GwqbP)?WS0QDY}fI&Y>1Z%?Ic2?tpf1}8o0aa9X5(O z6vcGrkEh(v(KcPz($8o71f>;t(5+6|4KM|l1{BVCGUg*wN0uRiQ-h{HP^#3^KP#(# zzB2_^s}f7uGE4qnA7{PjoFw+O!%u*h-W>+Uv&R2Pace^U_vH2etoA=C?y?x6vhM$~ zjj8IAlIMGQN}xJoSVO<;Cs;6d7*m2r{u3kR{?3yo+Two{zjs|gG-??JN at hgUx3lXd z1!iw9-kojsyLSHvU;G1K>as)Xi~k|)e+cUUZ{3__p<3IUlIC35fz>MdM1e9Ph=uvN z_o!2}6Y&1(0J847-i1V5?2ZBNf8J0x)?9GD;hWs0fu?F8O{$l`wM(vd=|1_!UyRJ> zYAwL;C-YH!5_dop;tnEmt%>Go%^*w>7qA3CKca at 8=Rijy$lDFx9h>5^lHy65f#Ml8BbU7`2k-KVBR`SE4lUd|`z9{yS#C3LYlN zQWH0F++buq0Av3lv%tH5%2WN01(K#`dL*N24*%BUe`}Zq@@adu9Cw|tYwkSog%GXd zy at m2@U^JaD`0mVDW^VVuX=u2{NpkPJXA1G>&aSI;USbM}<{vrC{V!SiDbaw|(^dXL z%Fvgtd@#d{)q4h$L&r9e>uSHqvHcSVT=1TqYW`W)O;>vs{4yT_UN}zW=SG(^ASpP|G+~N2WH at -r#~hA+FL~q#bse{R ze{*zYXqvWGe*~0mI>6>VuHeksbae+RWFflK0m17svY-cp!k)?XZx`%52#lS7BWR9J z{Zs(>=02~kwj=&(aG4r03M|8&B<=#tn>6-Dl%9~W!P$0Ei$v4KRC9d%zO9TZ|_6E+AjtMJyic&!v82* zR>sG92q~FvI}_=f&=*$Sj7`Dk_3B;m1f7(?enh{Wo!!4f#Kt`SJ~1c~y3%vSBX4$e z>1b{T7{B;YqYU_7TwlS2&Rm7~ybTIkNSdNu07`?(RJ*l?PM7VVp2yAGd?0(qh1BzR zL?AEZN(eP1F!cg@?_yRK9M%Lg+Pfub^H(f5%Dx02H(v_x#~z at e1|z^yw7$>TRcV3NMXKfq}g2cYRIw8mFzgjd^5PK-OZ{e#vPv1t0C*8_=S`Lp2F+d?~x zormtR(b^AzJAnUNE^i5;H0B$Qf?Yk(Xqkqz?OUuu+U1oY>f3;wmlY$oSmqJ=2oUux z!bBIfO%Nni&55=Q3QHawg^G6d{I^oO at HS?89Yxbw0LcMP18_5i?aXyDAIGZ7g-(|0 zjYnbFJfxg*q8kLI1kE70%d}0ceU4|9)=qa;z+Sdy2Q{v|@4K!*W}Az9Dcm2WCe^MRb_PjD5(}F7cvmwl|t5H=Ci&dzzGCM>N^j4TnpzT=v{ZLZW!we zQSSnd0ry?sl2bKL;Q at Z|guqs|1<>-$#|U~)^r^3j^1rY zr8^TrP_wOej8QrNeKK$&aB*baW*A2BkgJjjOyw6i04-P5fZc1#a=v&w+frwz%XIU0 z&!JX>E2}4tF1}ZX6j&Vp_l*6`HTG`k&f_{0z18(`uk42%@6A`;_)kVbpV4;$*1}VP z$-y*DMZ4c$8r(sBPX?P(mwd(n>$`u~f1kk>&(LAXcSg(UXFTqFS%CHWbLs9wDYCKg zkfwyZ7#8IE;$9Vcaj#vb>EEKVBRXN3*&THo at E6mgs#|;C6<>U4z~dM9ZR}}PnahNs zu_WC|nd_beCMQsqq=n}*q>N`lG#7wN0FRu#{#rR7_bbTkxR;=HQ4NV7(r-yYcv5u$ zD7lo&&*bSEmsjXM8EH6lRqCQc1O$}4+Xhu!c_QHZsFnX=t^zmw#u9Q&27zl|S04`D z=>4EgfVYtN4r&&(aKZYPi@;x+ZZsSET$;E-k$$>+-eACyZ{_DTB(0+r<3(#^}}es3>Gg z$fPIlHu(~^|MzKhigSd}Vw2{|35+sGo&jBDjVQQ)-||6k7jeI#dM$-f%Ol;x{;1Vk znBMlhjOWEBw%;IrR<^Qb#Gx9Eu;q1B5zny~#(CR7n!kqJ8ZGF+t{tU- zO2RkUe9%B{8H}nOW_xn7ADF43?MyzFwRzn6&F*@_6LtOdNbN_ zc)deRNHlZvX&|H9UhCGKfVgj{NCw>;-xM!hVE~WMiNpgJ5`-?ktWytM)6Zr=CO^D4 zY^^bZSB)Mv{`}0^oIrFkQ{p6^9MwS%%{(b+%AuR90kdd=^#Zu|d-c!&$x|f7oo5ns z#X2{H!RLHKqd6}|F&`@WhSv~ULCfVM at z38z^6FM>EcjQ*0eUqks=1D z#m}{WU`H3%U4E#%kRaJnG_4a^aj3M-&$+Ps at a^bHKt5j$*FvXpU{cOHeVfPGs=}3e zwIRg)SIFkRaXVdLvVVL>arMQ7|4V$Ur^5kq-DPW6?N_O5lK)P9VUZQJp&;?>N{WCH z&j9`Ij0e@~@0Z7ypJFWh1ko5j!ta@?AjN$c7*GEn=kWDz|7R}h|Gw3u0}C;B()Fgp zJ-ccA@^9~|gou>M&=l*XE56_v+e=2KS8QEmEMzpaOs6_8SBB<^ma5w`)n2E*NX5 at 1 zcuCX#mePO?V%jz)ezM>IA!d;x%?u5<(mp>zH at wB&?3KyqzAM;C_nbr{zosDV#C4KQMkO1cxVgK;A)`(W_t>0}a*%298 zm_td0cUHLj*-PiLHx+yTBrQzdvs^E2u5IU1S)JLL-FsQs6>@bNBT(P2xib%S+Y@=0 zn3w!+!G9^LjjLumr46SjHS;VgyLY*phEkphfkphrb!-1N at b+~F18Y8?@K?JqT`3Ah zdT~89SO`Zy;(>l>73pDh>Q4K<%byr`cCP$I0GTD>E;4CWV&c3I^F`6Lo_+2D2CS8G zsr6^H!fcv1EJi?AX5(x}Sk0}OuUE!~@+LA{KA|W`YlqJx#8P at +l`*hk{pEVJCm>2| zrg0 at 5!u(>uef6Oz!P;5+6{kOl^|q!Xp~p?+P2UCD1Eq{72t>bH0rj343D+3TI~=T% z*bL>bJM>RhE0yb;hxrZ@*9^}~zAkHKtg!=G-zsM at d$dy|XU`W!hy^+Gyl>BrHyQ^P zd>KQ}eEkYDE&pU%PM4)EZb|KEVSVZo(EZ6Y`uF;SZM~~*@&=L^TYj1n&&=%i+)O*; z=m)8qK^*jkz->lUxz6!I1$Ph1QM~+RV;Scc?`bEKZc(v3Wae+z+S=8OT#5wiO{-m= zs;o7nmhG?0ysGl}ScKk-z>oOrt5 at 5o!tS3B%25l=WkU|dya+M&hXFoqCl~X`H*;AM zr at HyKLQS?3-BEC~lwg%K`e>+bGkIY%{(VbOJ!|Hnw(gpo(G4a6Z&A2TP-s}AQ zyFXFp*B60 z*ML;yLKUVHj2}Fib0lji{yvbZg|zbM!qv?SR;*GSR}6v+PI;X5(WXJ$WlRg_*G65!SPt#lcqFVj9s|Hh(l& z)SFo_wL*7i-C*I1{J~SMAhL54YKWYI4ml)($eS4+P^94$^UFFijezVqI>?5)GEpg? z?PTR6J-;SAghTLJm$_NU3YqbEPu2NT16*!ViQrH4AUyw;-CorpM^a1BLS-&Cawh&$ zX?g##yKi2?HH7E)%jEx1^>5u->*;k;b`z&tF1p6r*_^yntL2zu{w7V8 zn>=oSIaT#F)r-e3ORB+Z@)vQ52?+^_+&Mt)hwrBa1qXMt=-F5!&jT5~KnVU{URXQt z$31AUNCC!DeJaloMEP?}aX*%u>EKgGjP0;OniX^0mXV#<{hRt7$i_0y~rv#4I>N7tDtW&Ro=9Kq;Y}?{^%&Ns_I+4Rky<) zl4-x?jGHX_fg!@3`##3l;vj;dYoENZR zc?Kx?`JVA?V+nqI;$oNhv<&ThC~^aG=Bb{L*&1BTtm5HcwdAnQBwt8%7-7G zB6*Y8>JbKq!*}vl2Kj8DZ|^%Pyq?&!^N!w-Bg(<}g1j^iHXIpXz^oJ?pNIe8wOhU> zrZff;==c03c>)1?35m~WD)rv0uc-NxU0&|zpm*F-J1v>P8_Ji&+76~uuB^sd7Sl+~ zSP>+R0l8uKgw!VW9{_2&p{qScsB!@{;;o42W>^)Y$b04UY!&0PsHeU at oVj3805{!^ ztZ&k at L>w3O4bZPu3g_{sqmD9w>-~`rOAauSdP?cgRgxuE-w31FF9FIQ{cyrauOeTQ zh1ED}-H7EWHK#aV+~PYtCYw8-h1{=&Rus_5grL%*cULwRqEp*&4&=q}8 at KSI3Fb?% z#Pq5v)aZy6`h6N4ERRS&5bWs}`3c7EQCw=t_vQQ61__L&lJ5tKlVDbOv3{@f z%M_;}&1)p21wSbaK7WBQFddg4O_RzxjVC{Nxcqf~9acVM1`(f(gayc}fD3+TOH&TH z*pluzMk*fORN6>BlPX8vQd#^%$Z$7q{Vd3H7=k&*yp=CBcH_9-dfiQr(G~;xk-B^{ z?uHa1bQyaw=KeXuU?}|#|K11Oc(YHl$m at 5l>XPt~=;~4UzAF?gTzTHRfmYq1^Zp%o zes~mc*kdToAsms1E7Qe(oVpVRv{^xE=iCKgZEUg+v zMdRYbzqg zzozXn%d-h}J|r$A{wcpBs{&9ra}Xx7`L6PcDzJpe2jYdB*8F=0*~-?N)yJwM6wR68 z2Rb;0gxh3TskC={P>q4^7^k)s7kFvOrLV at +8dgq^@CId9^;bc)>g3oDZ+Ameu(uyh z_IEnoPMY8>UHAc0E~|aO?&}&xKM7=5o(vI1L?&#=D`n&7lyYW&Ir{Y9xow7x)Lw+16SM?%3S at KbBR5P0ns1m+);Lp~R>Yd;y_{&C()G$3 at yd6G z7Q<+sWZIlZ#V1DS=&oOd4MjN1SbuvLc7Sq1U0twi5LrZ95ByXSY-LT1?qI3l1nhT! zUq8k4WTaci$2J$1rl>nHqyx$8u<$rCyQ^sNOxcj5n4z{+y?A|_tnf$*s!oXi&eC4LC+}|;O<07dV-g`f!L?u5|8%;lN<VyfbB}H|kX&@s z^=xd=#k%~qWWV`rGc!=u<67&R4C#<#pKpRAq_eAtfTe}R(SX|4Kb3r52?Wm_mis*+ z-zVPZtxo!Pc}+-5y4C#2Kc}>mAv^u#>V=q9jm+nBELr9*k2#TGC2rVm1l&eZ4CH7% z?>v#=ba?-#UwQxjw(P!DQcD$m6V!~PF|7&AM~Dh5n;gtGwciJ5FHrsnc(oZ0!o~Nd zR1K9mMPL5%cFV0>y1D+iSlsR^sKpt3+hDw5HYc(@zjV3%nTaRYnvHz(jdT<1K+mYH zVVYF8Sz5$G^JjCB{POkTAba|j at uR1L3q>-akpfIFwAx7T-O&(HTuN|KJppo#7{RUK z+2zo#oFgsY_!aS)p!_7PK2xFW;^xVhB)v3FOr3+2WZ4gc>o_yjk at 4s_daPzpnX{#o z0EMz at x{mwbI=cQ=U1Jp9gafuu z7bNIqM=Nwxb9k{Y7GYoiiu9d#)b@)cIi&1jmRaqoXu4_g5Ru+jiO{Q3&miwtMuBSi zBk%W?^?D|csU+IogCe@}zamF`r0fEcwiEWBoHL!H@%WYBxI5?YNTw6LyGVSFAxZ?m zUSrtOJmxU;AX>Dx0X+kcDC3M$6Yb{U&)iR!q8}ql7F4rH8OM4pjzOU1qWw}CnjumQ z?xM_=8bNeCt>Uo}UVN+4`RGtJ=8U`h+3|v?8*Lb%C1N;XO|23q1wP11JY4oVOp;`) z1HgdPuJoWu6sdR9!WRA9VUZKva$qJMi5rO=(SbIZQ%7It)N?u)M}lN}6a`rr`icoV z%-M;c?@)d8BURoc6Y&bYqdYo^E~GZwHIemo;7dkN&&;0F58!dB;VM3g#tm8>&Y%xo z=KSpk7rj#6*TG896o&(x`p#cJSN%su%mvfHqc^7%IPUhuwZdGk;kocoP5s3C<3)XG z?A1&3wAt#C>m|(*dzwSiBbicA}S)@$a-pRK%x~PV--G-Cv-%9G&R((ya(;eK4Sh0ITjbh(#A&C4 z<;>Lox>C5Cn<+yn!Vkd#_#;8lWY?p2)EGsr+#ytubJ)X#zrR6+ciFh!+OH&(5Qg(A ztKJa_C>H|1Kc`kFYlkjn6JJJwUeS%={dhYBwGuhF{yl8SpIm+xCLPK|(v8|bEY ztl<^UAX{cx at _rBVPeW3CY4&%~$VvJLv9soVn!xrP=UCbgd?Aso$uA=MUZIjf4`|+P zd06$v!t}VDba}xow4>HAXN)i?;K|jQgl!xxOJ60>)xK50z#;4w)bTEee}3VMAcY)9 z&|R4isV)B?HbvqjsPCeV^146FSX`+tP`pl|tWN^4 zwzk6JiE0MmhBMnCUt)JMBDAV8V%

                cf7< ztLMSTE(o}Tv}_4KUC;lxaSTso&(mnTvK-IgD|)S at k=gp^nJTs%)yZ^!e{wZ)WlBdHIC^ zw}|n|c^{|JDko`z2-0K*%8?es<9(2SA>~S!uopHm>embz0mNA;A}pYQ3-N~@rcPVi z6)#i%q1zE89q-{mD3pkOcYIiec+O{sB*|6k at gPU_glI+6{Bn_BH~vv=VrNVlSX2>{ zX7{pq+i)4%N2gGqoi;k=S)j7bUuS;U8fHQu0oJN-7cTY(^qgc0y=Xbx>r^Pp at 7`+Z zwtwnvAwgJDfy?Sm+~o-y+5M9DpscW`!v1rGxmxG%=Zs>iG!ff2w&$?cAuqzTNhz)O zM(C at gzp@d at u#~&u74$xRQ9G4TzFJUqGRtRT>R at V%LPs(kjV<&K_Uw>%dawE%FZ3}( z!#*VB89}ZUzdg}V%j_+E3Lh`h+r}X*{th01BUdFGa_z>+VIM*)I81kI)?Udw`0R5` z+g^aK8H>AHuS}XR<#(S3r^$J%!gY#DevsizVqwhL9l^hyzEo#CB`B8?jUm*GZ-+$61nBn6Z98l{I3r at r(DWxfe64Eql?=-d0`>?b89f^KT4N%fy4O{Ed# z6 at iz$7+wU`%thFjE?&7W0TdfYiPm4v|5}bKh}2(7{~cAruYd7_p^9OSIEp*8ly@{PuwKMXq`IWp(=C)4Wr%^*-_E2^ zObg7H`##tzs!zR{H=#uQUoRasAZo~u;Q;Q~MW{!F^yx}cv_Y_lf;_3d$Z|VIit;*j zxyh+umUE!cD^qdwW_uN6<-L&0!Se+Q;rIVMBYneH%n1J|7Q*ezNx~Da5&~|*+nb8l zkz(k~4LYr(4Abm at eCo5yHvT4BztXJ`Y79ixzt<+kakQD{<+Uz~}KmrpL{jG58qYI!kCq{)xxjP)39jn}y&#}zhGhixai2d$(j;S0x0 zT>l(A&j#EQB3tm*S*6%scm)aq5{mIEgEVkB-9*VOb7rxCr`rdBS&Nb{JBk#I`c8Pj zG%C!Z&a+s9>_V&_qa_(h at 7sLN5=U2TP8R*m;R)Sbmuf4WPQR;+K;s at y10Vj9N^#*h zGV{upm2cG!Xs&x{zLGV~<%llH6kvRGD-w>0Z&_?8ae66Os*7M=$UppW+8Jw*au@~8 zuQ1*ecD^aPB_?d^*2a)#_71*D9dZMId*hdAc{3N+cDkLt&GJQ^tNu>5-RM;cKB^g9 z9pbPtW03>gF at +Fl#saadGY z at 5!#qum?OVc#abZ`9NA(Q(w7^MST?0^t)5UC}p}wEa)@skjN at C)^36UCjYv5C`rIm zc2c5KWuD*g_UYsYz~6fVGpq{&ISBwi-cMY~g>id6HJXA?^6b~Rga{u^7jniI;3vwu z7vUWvgx5GjC5L}u<7?W1(vJ3`IX%?syEQ$&2HJOS2ooRJMEayAAG(Qm at Mh_}_1RUT zhG6rAs+!K(h|^cKEap6SdXkF_hB!0*l_&M~VIBOwUUv-JKM3q)ak0uOrv=Y!$QeaY z8bMiU)J?s=7b+?O`K=4PC%{!rCylf|6;G~m}R>$|mR zxkJa5acVN19j8}<-uGe~OJV*L>qh_z^8)?BgHFx}IZK6^>w{~}yH_3o-H{eQON4c6 zCtT*Ui|b>_So)qzA%z6}lUGET|4{yz(Lo+gU#&+dgoSHA+3jYNX)#XjV0k8wp*jKT zTo3dqve|eFan$UGd>nCd=SbF5#Xg&8v`;1>Y+ua~BW>fB_4?a*Gu%HH{$V-L4X@!v zCW0}JZ{f|@2j;}**5>|%j4)uKBe&2gfy#Ima at tZ+hPxNc>*`3(j8v424ie2W=B1=- zRGe2hp_cnzNVdZg_XV_f;Dkoh#DNQo-pyA|QC;9|U9K at IcDr|)a;?$WDB)*bWSLj+ z at chV$_(ibv*XlQ2Uj05a)aSGp6;vO_))UPopPUqU5V;k{w z*k3x at Uobvn1Sq7xZpMEw%R2WONQQTdTXUp}QE9D4nJzWu7DIfE$$w({I?)_}B^wj0 zGiP10A<!e_Zk$OSwv907z_<(RAbxT7 at _QQ1 z>6tL62)QcX&Goq91b<8mQ?0hnUVE&rx$|`K?P!z_gD`!6pP$rD z#HES2Ay)G$+G_IwGPM)Tzw}mw8Pf1-KKZinNc_;+NrF9#@PS{IxmQY6qX~=6lwd#@ ze3LBFBo2B-_3ngUk~w9B;r7(fPYw)G>_6Jyxo|h$=nb zy at eOO!~b-vB3-Y43w(v?A##xCJFO~sSxeJS^)Tbcd`=Hpj;AKXY%K~eX0a1_<5w!q zcvc+=a|~2Xsg}}DDZjxxS&^sGUQg77c9W=odO~&=6{u!^U1%mXt_-A%(r+G+gI z6AeO2_`VMM>uMPKok!bLiej{4V(Hc9tKEXuhcjg`gS#wgu%K;`&Mhl_`?o|_%7Mqu zl8UErJZcoLFV0aUTw at wR$A%Mzh at 2!5qyufX2R8pSKc%D4?fn;agOL{q+Xxeh6`Sg{ z4mi_FNUN53?(Pi#$$DaP{j(d!Xg1L#G3_D?H=AqFIV^hrCRUh9+|~1!`jUS({K5b1&UC7z(q zg4sZQCYu1MM6Gu!7bFVl;nfds%Vqb4PCyUc1lV(H3=hIBSi*LVnSN-iq?3=`DpxBH zdM~b6YIJ646%>X5Ue;(E*tbcHAjo1DMbkg!w z6HPomc;VI7ZV`R^P9Vp!M@^OFgdD!%IVGs=Q=B=yj z&oElk<@7i+j?Y>oWTWmU6 at 3vtO;t9w&6o#ZpHuc+O*v`#&Hbsdw$P(6-%o5OQJjRczati1WZhh0iO at RJ)$u^VN}nbP zf_q{b(0ya{TEAiH{)Fut3w_v(c?=u-v-gf~T}tDA)+o04?I%9~2{KIhRMS_+M-&M+ zy|E|VNsO{gmJ(FBb~76d2!O{%r5|Mi*vUliv}3~D$?_swle$_*5>BvK)V6eZFZdMF z+i^e5uh at aKA;XpBy9e8sj3xwIq{p9IngP};%hde-^%=X~>dPWSjbcUyregiKW^Pe` ze6^3Ll)9iqY)JhWpYx&CRU-R^`CI+jFBK8 zPes2=Tsui~WvrDymXb3`O2{=4Nwz-QM=Jl?aA({A7mY+|#~E)m@=H0EpRQ{3%dDZZ zby+o`z#=QVdSyO#@C+$&yPe$@nOULf=0d#5p!LmiCzW9J>u;7T)2~e?>l2O3<>hHX9 zMVxZq9-iwwl)(2384txVL8nzt4ZH5p&1u>P)_N;@KL(yokEX8We&?LjI%_Hr at C z3bCdZcFH|Sn8PE|Xg!C*Pdk;=h)M>pG(_cxoDG8p&-L~l+QIN at MKpV+%SH0u1 at Nzx zS*y9mZzh;3raAK^6)8R6hQ`hf4aS2w6CWb}Xz^!Z6r zMk_U8ShdwoUet8Xb?x~IB@%(8R&sJy=_|94P9~tX$Gf2FE0-}8>DhZwpT9amH- z8+tNb=^ZpOQwFHhvW-cMt*W at RV1m6*c&`-=;vQeE6*h2rPM6zTbc2;Axfa|sTfu6e z3Fr(FV7psgpgV2BRrYXj_(?|dlRio;HjltxZggme`c17qDLz?IJw;sT?-|l}DKli> z;7`)U`C7}o!!0?l!;I>kXe5pZJvTduTbab_ at PvDM-e2d+grL7PgnbW7nY#S;PAbJQ z|Ae@&i70llWZUegF2pa_IDQ|uZr+nPv`R&hx at D89XPYA$gDWnZS*f_SUe#qjTFyLg z(?t0%fze&(;tST9aoYH_ff>LWTIh4*lgdipd|9UXZqDf89p+X}-Iobzhg zblc!>rA;Gf=%AL8LyhzBl8*#TdzgVfw)+WeX3ayRtH#)O{3<_SNj_qEzV4k?W89&G@>b zj?Vq_uEh^ggMp6KjSy0FFRG+Vr at C~CZ*L^fKFvPre4P20-EIF%GHGADZ;y=T$HQE9 z?AJ)Z{l5eBcvGr3xdy#`;EEkJ$>lx3%l%J5tn&%??oaQZ#&E;F%OzJYG)@uMRp|3q z7527EP+kGk53BMD6Ps-5l^iQw1R|<&sTyT?ZMuvWbx0c13I6z zv-?n&Fy`z at Jj@fzM*3FHC!JCekgkc9^B5cRGyWz at dc=3P{e3tz7+%58f3>R2lDcka z5E14^S>pcurD^txXVRm8$8Frl`i70J2&Yyyf?l!1_OgGbRW4>R$JR50uyc&NJYr3z z8zpE6rkl;A#*>6fu-GeosD$JjW9n#H$B&YksT}0WC64{JT at NvQg&dpOQQAGEImdIM zZYI7$ysZft+~BK_BVN4-dzPiP>kJRatRx0OFSY^3 at XTTEhWG9XwX88*dO23yn;f;$4*0*^;4mugq?GquPiFaKq zC~Mor7|}PQ17;htS-!Zwq^E>|oS$YHJ1>4$z>SPK6t<=2KoF|W at 60c1e8KKcGBlX- zn<}R$-J6px6ME)9ph}~eDz#JaHYhh43Z$bDyeb_h#Tz$9-^k-j0Im5`nT-}TUvsJX z!M}{BNy9w9?Y?h8h0fajiXA3=8nXVySSNrznx-QccSwb at fThMKH9L4orWBwb;>K9x z3H|{nKs(m2$-yCN{T_pj1A~)}vRUuWf at IA6&OBQHNRzp<&)kZ%`#aa;X_&tg{yv`D z*We!H>tjB|0z0!${K2i)S- at m>!bpAJjJ_9SbDfCgy>4jKo`X ziRSZno1P8}N$$R;ua#qpgXz#eDck)kh#-&$Zc7^Wx&6NyF_S3iS=ZK^`K#Ht+|RDd zLFl&jt&prC^>~Jefrn>?nK}(|r9xXGT(6Qdf at MRzV;ufkdF3n2-fvuM at eUetApOvg zq~sr+kbp*jDEZqVeFNo{;x1QO>;&4*=9+lH0OI(tuc2 at 8fPbl~Nqeot%5{nlRce3Q zG3LG9xS=4#`t>ne at 95?2MPz6DllXk!DrP>R`nCDwN2=QO_*9VgXXB at Vn)T^V+N_3M zYD_b+o47IqmjkPy9cy!w1R7+o!UQwJq^j3IpH9M${rwKOUnxA>%dxEE{c(urWIGSp z?Y(6uj-2T=VS*G+f={-O?7X>2Cp(&3a(#LDsIJxpmrL*3&QCP{o@^O#mfR zy;dhvJWKT)eeu(xnFYb}HqeTwcev+_wb5HqUqK#|qSPo5_Fk!cBzdwxvh zfZHzz_Gcb7;*A~3io=zhArge!`xI at 3+2ShBE63@60%@gpJOEFeEDsA6W`7^O`Y<;O zNga~MXLF&C=Y9hb->I3#PXECaa5F8IqQZ{pt!qVIrQB4WvS<)XnApp`bTltHnD->XJyw^i4>_E9N; z8 at CU$_YQOfs4opXFw+5+E3TGGH$2fP^)?IWuePd5E2|&JEoD&oxxKp6GOnH`9!E0z68IY%ivwcx3`cOsC$_&b|mo4Tke%aBONxRh& zyB-eKJMfQ*k(ab3U^YzoB0aBIMj$=9MHk*HlzQ@&ttcsN4HDF)fJ~neY#)H<+LM1FaUXee^<5w1QT-A!!8IL*9ecxp(B at _g zXKvj0b%Azv!6QB)oQI|))YE&OuK>Qc`*4H2xUjwbZwxBg%706pUWq0}>wTXOQgGR% zvW3-0N$|=#yR%mJ?#E=*K6*F*ba1G>0l2(b$r3gD7V<|O^KIkfBuXqQbP;y!{st9_ zyJ+tiUH!J59MD%q&V+9Q{E+F!7jd5&V=e6TD>t-~>g(JSJE0Ze;WRJ-_5_t at 1|tC2 z*OV!{Ysbv_=j0Fcx2MVc$BV72z%|Un3R^)tc$_QNGzv^_M(QhJcGSU)k+~Y!O7q8> zrJj=J6*$^!BltJ>K&P)@HqUu<@OVacqaR0yBJNIxX(>{(%Qj6pi(YB`1dWAVV zjA at 22&L-;+B{jwvr(tG{sTm?m=c06Etcod<$~h~9a#$gU4p at h{F+w1z9C2N6s7%ZN71;MMWys!Ck*u_P1tT at eg&5M}Ph-$~l2o zvAuXuSvmzl>YD9YUS0V-hHy#tT5B%rQ+fRW;nj(RRo^x3;eE7FeRz6Ot*6t0ckBAo zt)sgV#+&T;`#nK z!I9g|n{yQKiZX)Yhmpekjj=^rN|Y+Fd@|~p|6o{8{B(`wm7}72FCns~zq?x;KQN$Q zSe&h%`Y?$s()Q!OYz<zWuoD!z4Yi6!|nVol1?fBmI>9u#? z7omP{yjC}JXH{+Uq$s*yk33!PQ9gblC-VP)xb{cU%I;)!K6kTlQbGc)9O$-#vxDS_ zqcTI_6knzf4bBT$cwrxJ#$!>abQ%ZZL-P-05TGM>??EAfz67X;Aqh!hS<(UmZ6nw; z*NAOy)CfAF2Dud_Y#0^4d914UN63ht0 at d(h*eR1OP{4 at dz`HXPr1gQD^f{-1g zA0U=YHVt9`N5QB_i~+>J2#z*Jn;0AELtH5wh&_b?K^sHRNTm1!jYFYu1}Mnl1vQls zkML|?Kb#BEdT~whHv%+(!(rhN2rick=VIVYwm$-8Vq$_oq7i5`OiaMS!WkS255@@7 zT4?fTA0jP`$_`|40+|fRd|!$Wb1#Pgh0ZUubS>T-g|)O0BWzKiSS5l-VIfd(Bx0$v zxDYR%#96Xw6b_T^#$*PYF5JF#Ae+Wzvgu(EOIHkjzVa{7msP*i(})xf%~b3I3qu;i zkS1SxCkJ*pe|4sAOnD4FkPT7Kn4K8V7fqEfD8bF z!E}MT02u%TgXscw0Wtsx2Ga%V0%QOX45kaz1;_v(7)%$a3y=XoFqke-7a#+GU@%>v zEH=f{5DcaZ)CI@@AQ(&+s0)w* zKromtP!}KrfM76Ppe{fL0Ks6oKwW?g0D}K9T{2%zde9i+;~iY_ISzA)aeWC1DYhNa z+|Bm*+cr{w*LIcrW1`~8MjJovbNsqZ{A=IX9lhutyRTnOLnd~`jm}J&Co+eFRs{`0 zb=}iW!c{W!3Un at dJ3LnHJp6ru>XtcqgHj5O z1*^^p*139G+Z1+RF6j$@ZaAun?ZeF|tVXT7E~(`J}m!PUHi(bLVYHpHmNNw4(m+GU$~y|xo`?53n(s}vEo zYx%^5-q8TFsG&U&4Th$zV~1sK>$nYn%$# zNFLF{^d>kqmSK6i>=H&hc3U*H{a%H#0{X%xix7vTxps#DQ96sK_^6JHe08wEyc^i2C7d^jVC%v8nX^$$MA&8Z_^|9t;u& zpOun~U#C^Jx5~%ydY7!Nx?TjxiZa%w1{3A%W3IGL?QX<(kI55a;sa=T>GVUx8p&{N6NB<|O~VHE zn~7UDAGEwtlHK)l%Am`QxO^#R`QF`Tb|p#GF5g`qYXTO9gh=9nUbHHm3e-v z-(R7mIdOaQIRAz1OoX8vcWl?QsG47ozv`t6Ry!HNp+phnk6J~5%LO^CC0 z7i$r2)^U`PidPeQBG}x95wdK3Bl*%s|1)pr5`tMXhQrc_yRIszT*xQodF#+ZWH!$T z@>BZq-Um%J@;(f&jOicy=n+#?_PWJdvy~ov-RNURprXHv3boVas%CI~&!^WD~4K#J!RyhDhQ39}w7CZ6jt|c*p($EuLSu diff --git a/src/public/images/icon_delete.gif b/src/public/images/icon_delete.gif deleted file mode 100644 index c31ff069900e2cb80cca8b70e4b9dacd9ca860dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13735 zcmeI3XH=6{9EXDoMXg9xR8(FArD`FInUn+&iV#SUB^!B3-arT$Ol3LMcl|TkT#{ON(80(Q56mcF_b7)YD_nJ*R%V_d{}X^Zf64?(ge8U at X*lE;NalEz(9Y0e_vl; zZ*Ol;PfvGucUMxB#MfP5(% z at 6S1mIH5SI{Al zkIpCBv2<*e45e5m#&8r-ilZe8hLTA{`OgXRxJv!k!aR5y0w)l;*H`68VPi(IFr(P`P%RlWD~35W z at UHp==)Q7}lrI#-{ad*;gF;&@zYAI{wyxjsKT0K5xmF?3g at y{#y7v zG8T=AF$u0vJEPv~jL%~Tq;fHevxH(a0wYHV1-9hn!3XYdVb|(dsAEZ9%H^G{FJ0wB z=`4GHDAO-Y3Ks#A3w1$VKn8$dm at cRb$N&%w(*<<_832M|x}Yu~13)lL7t{r000 at TZ zg1UeV0KqU_P#2H^AQ+|#>H;zV1jBSeT|fqaV3;nb3&;Qv4ATX50T}>-VY;9$AOk=! zOc&GzWB>?;>4Lg|3;@9}T~HU00U#Kr3+e(g00hHyL0v!wfMA#|s0+vd5De1=bpaUw zf*+VJo#mGvm_+@&BUb&6Lu>BuzyAE=_uIeS`t_Hef4ceOjq5*rKl|Oc-+cYmwJ*Q; z{IgH5&V2Im^hZ}Ne>nBQ`|rK`&f9Oj`Nr$7UAp+{D=$w at jE`Ly9T^@Pd}-jt{=OG_ zd!FxpuIt(JogM9Mtu4*xn$9*h)YsLXsj052JY7*<$2hH z%W-#OySf~5e#*)5po6^~i)l+>&~2=(EG^7wR0^47X8Oc|{res_dCb^|xEC?pvwN4p z&K=wJw{6|>sNQDXO^kpKgk;Hb_Bax1 zQfP3duEFE%xg$l+hVJ{kX#Vy`IT)(iy4q+HbqCAD)zX)((qCh&OEa+F?`GrAQEk^Y z*=)Y+-~lcpz*Dtz?LIxL-A<;S%-|;XE49c(y1}08zVe$5ZY8d}wzSt47>yU|`=lyI zX)P<$wry2r*%KQs>QaJC;v%nJIJilVEeNI(n=TpaZVU^%;hE~1XX-MUTw#16Wy3}X suFYuI>U9-$MS9Ij2cC8TkzMO^xxT(=>U`K(_HMV{_R9__1j3X50KHs7CIA2c diff --git a/src/public/images/icon_delete.png b/src/public/images/icon_delete.png index a4ca764863c98fbf912122ad452d892012246cdc..7ffe772e7e8230503ca1a8cb0725dc66f385b749 100644 GIT binary patch delta 944 zcmV;h15f;p2gnB at iBL{Q4GJ0x0000DNk~Le0000J0000M2nGNE03w~Ie~}?5e`-lY zK~#9!tW at 1=990zm-8(b8vmdix$)+Kxl~USDuob(t1|ujmj|vrhs1JoIh<)vUkVggo zfTBp>Gzh*b)Nd(9lqA+xo6wd@(PC}ckL>5{%-r>yJF}DBCIugQhr_w|oH at UH&!<>g zTEgR6=H}hrnBbES-W4o=<@7rXe_5w+K?repM7^PudQ(dI)5!m^Qa%L4XZzLD=iYX5 z#c#Xq=2tgL5Fc_TK?PX$N at l>k3XZ9Jxv?``)y(SIgV18i%%b$KV>HqC>9)~Q#MjWww**Wk$`2H at H`)Gf4`4j&qcS} zLx-qZZ^Cu^*toj3y!_#NZGV9!@7G$I zZ*^Q$w>sFowqDT*Aj%k~x$pM%E4UQ|`lnv6t+@(R$WHF~SiN0Gf8}@uFE5;co1DOdAcvP;d>+poe-_f2#>%Y*4$U3G2|BO; z-N&y#euGaxdOu4z9>1(Xho!-V=35l#C&~_dKfvsy10e;bi&E$XFnedw3K9NfO0lgJv=?J_MS4z%(&B)*5Iey* zQ<8uzLujJ`LLA2C^Y*3N#zF81FfHVpO*wo9401`}p_dsVDwlyS_FyHTMg+sws zQH+w7px7Da!{{HJPEBEU!VDD5Od8+Ut73L6Ze+XD>cF`cPJNN3?SX+VD zcRwEm<5AGM^2-k&Q()!w-+rE#Lgx3(?mP6TId<>volVM0)%U$ifBkvmLLAR1ZrmFM zo*>*I(EyOU;HbzGegKb_I#D;0$7LiV5Hs3KjMe^jsYQk=>PK$~#Opr+1_0dpT~_6} SO7j2!002ov22Mn-LSTZ9V9E#p delta 885 zcmV-*1B(2}2aX3JiBL{Q4GJ0x0000DNk~Le0000G0000M2nGNE0LiKxe32n2e=tcz zK~#9!tW at 1g(@_|Heqa00mFUcUn4;z~F|aaAGGaspNkx}l^d|%fdC^7PR}gd&{RLeF z(M8xI6iOmZ+jOR_Xl=U9ujZW1x#jP3zs^~kjnPF=FT8L*-sgGG`<~| zquqyU7}jtB9P1`qM|3dzeg)}ae?XsxmK)V`@^hbeW}}>d={|n+ELiSp&xziP?FTyG za=Boub3&3u%+H4r3J3A^YY2h4nIYt~2i{5F2*K%09(=6pl+FqFZrr%p)pza;);3aj z?iqr?Ai%b#4z+u15Cj8KsTBPFDLi at dc#6 at K>)!WMZ#Y80I~w-h8WFwCWc>iTm0$q;B#?xS(ZaE97Z~m1UDb39D0;+ab!E7>v#!?L3q6Bo7qbmnHI#9ja zLUf|R;c&uiu7J@`D~ga}bhcdE9QS*v-d4Lat{~+oq at m@;;vcP) zKujc(e~S~#3G|$*e at xSXcY5}Zh?V7~opB*nFC|bFN%VMLJcGruYbS7OW^QM^i`)RU zXe+N^C_4O7-o z6LAYYae6tA}|+k00000 LNkvXXu0mjfGOnLF diff --git a/src/public/images/icon_delete_11px.png b/src/public/images/icon_delete_11px.png index df23d647b71064c8b8a413915aca2b65260f4bf9..93dc3e569a884499034b217dbe08195217bd4164 100644 GIT binary patch delta 346 zcmV-g0j2)e0+|DlNPhu4NklY~Cr2#2pAeI8+XFz=R+<|qoVDgNH z_JQ_1{K5qi@|pp^etcv2_wNr}^S{4;8Mt at _8D2cRzTwNqw-Z=^VmT3!(E-w80t}L( z{0!fJ{$}{_=^I$_r>{R4p1u0Oa92n);LL&be?W at w&zUiaL4QP25oqdPhQEJ)15Nw` zrvLu^4dwp@>AlYgaHpOD2nH27F@{r@?=xttNHH8dbBn=9Q;y;I#d{1VjvZ#$ zxwM;+3Fbaw0d59SK^_J{J}w3k0UicE9!>@kAfJ_m8SV$TVr&2 at pa?5Q2VljopWeNN zZVEC0$%AMXC{zF5rCU$bp1uCSAR)rfu;b`e1|fcKhK>6!Fnsy`lYx_){|&O at o<(z~ sfoLTlRzouM7D(auuOI6`9Do1=0Gri(Bn^i4F8}}l07*qoM6N<$f?~~}7ytkO delta 280 zcmV+z0q6di1J?qONPhtNNkl<| z$Q(8{7OZTniunZuv9i$>@4Ip5K7*!`6oaS`KUe_728n^>&?BX6!{$9zKspG`uysJ( e2IBw(7yvkgLlK}?VXs600000L=V2-b`3?j&84?5>-wNee3C ztyn863MwEf3KfdfyI at 5`3vH=*fLc*JL961e^{Tr~niPB zpcV9um>HOcm#`|UeY=a3GRsAPidTWKAbN;>Ev*DD at E&5u_y84)+RoL8m<$h3h)oeY`t_XNFA5Jr6H&f1_wTQ7f89P-us6GW9P#%zYAyoUHawkL4 z4CPFh4}#L=Zc-O9NKC(V{Y(dp|DQ0P%lMLOlxY98 at Ei%EAO=J=t~s;r?~Lb|kfg*| z)hoo-~^SpPCdc0woveLb{*~K*1W&+>4Gu<1*3E!T~G#~V3aPT3(5c#jM9a4K^cI8QM!;WC<9P1N*B at vWdI6B z=|Z}o3_!ssT}T&{0Vo)y3+aL~00pCTAze at gpkS0PqzlRb6pYe^bU_(_f>FAVE+_*~ zFiIEF1!VvVM(IMjpbS94C|yVwlmRFhr3>kTG5`f1G+nvbmmWaWo_8d)cN~VkfBydK z&p |Lxabe*WplAHLuB-M8QLeErqlJzswD`DdSgviswYc753W!Tay+-0|)^Z@;zu z&8}^o9qn7Uw7v2A=GQj8y786Pmp80$dFjO$o`3GyXPVbNy|!u1>Zcl4t$gx{6^}pm z=<-LFEnV{PLk})q^uYZK at 4NS&1$Q^xRe$IFJ8r-2)?04A>Bbx8T|f7_Yph=(6sp4^z;jjXtSc_R?9xjrFP=H$qUphk@(ZV3Fg0-gd1a+jCi~AV z at treiVzJlb#u%5=Q8eCeqpcKaF`LGneb$+0oIdunLZSda^^}vxoOI#|#~*j>F-MO+ zDnIYYBSwuJk$d>?VMB9_Lk=@wSV6DRFbo at sne^8&`hyzG7;M;5+PJ~l(>Xh5Sx!Aa z+*rM8D40Oc&FflcG7MR>r#FDL;(78oY<^o|eh9NK-8ObNwYq$z!#J^hSJ`N6t)6|@8fLY0m+x%%HFfvoV-x-bU at v>A diff --git a/src/public/images/icon_delete_white.png b/src/public/images/icon_delete_white.png deleted file mode 100644 index 6be345ca1fb0b1ba2eca1ad210902aedad115a90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 501 zcmeAS at N?(olHy`uVBq!ia0vp^d_XL~!3HGNrubO_DVAa<&kznEsNqQI0P;BtJR*x3 z7`TN%nDNrxx<5ccnG)BClHmNblJdl&R0hYC{G?O`x6Go{^8BLgVg=`5;~Cf7n1Sj< zK%#*!07Mk;uxYav2?Oy*C7LmR(tP*tzwRv zCBa9w&YsE4VQl_^O>b}8^#b)`?r>xC8B?VfO5ZJ2jM$=R>YHY)nYpUbebW4zN`3n! z?dE2)&$dtbw0o7-nk7 at _@4owv{eT3sL;mi&`$9v%{;p>zFFO$C>-AHPY4y*VK7po9 zI?JJj3QZkU0JHP=(Dh4KBCE zf=(Pw3JLq~pLc3Fn&dc1#YT?*lF8G${l;_sG`pHie0Sc>Q}J|)oaPe9;=r(A>oJMu zYr6ttug|@?im}&__eFd{Pi8_gkJrj=kG0L?qh9O1*cJ72qII9c>#(IFrLp$4zb~)2 zc9h9$rQe^h;+PA)8L7fs9Cm-4`?o`X_bc;5vAgXL_x>uik>fl(LFe>~@4x5xsk1dR oR?ZW46}>caw#4a`57^}0UE8*~ZY0tP*Ur>mdKI;Vst09|gwwEzGB diff --git a/src/public/images/icon_edit.png b/src/public/images/icon_edit.png deleted file mode 100644 index aaf2459f2e31ee73a7fff3e324d2825e4fca1e65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375 zcmeAS at N?(olHy`uVBq!ia0vp^0zk~e!3HF=pW8M9DVAa<&kznEsNqQI0P;BtJR*x3 z7`Q%wFr(8NlNmrk(Gu5)66d1S#FEVXJcW?V+*AfreIrYK0}CgYnWjJmG9U%P`DrEP ziAAXljw$&`sS0kHMXBZaMcKs)&cVhruDLM-)m`v(aSYLzICYY3-XRA8H~D>xw%a|D zgO at M)ThkJw;OaGpc})@jHk0%lYl~U}mM&c6;r at B4LxjXn_AsfnCf4sW)3$J@^(_&* z!7$(O*s-$rduKHMEwsulJMjA92G&`>X9YH at Oiw*|x`^|@?T;Nx-a0pF$ApTSI-IMS zfBuNX_h8xb5BL3(mrqr-Y)SBB<4M>pzPNy^WRkXxrbJWl0``6`xmI at 8Nm14}{roh2 z4mme9omN+Te&*@F)W3WOlFA-COe|iuZvU<$#s$}}`fk~Lv|RZQ^UZCi<#~2Lx&rhY NgQu&X%Q~loCII`8jh_Gj diff --git a/src/public/images/icon_edit_11px.png b/src/public/images/icon_edit_11px.png index 398eae61c82434ac65d8c90ffd3e4934b3d2ad25..b695d1b779f278150796138bae0e2ad0d876dd49 100644 GIT binary patch delta 272 zcmV+r0q_2e0?-1GNq_Q5L_t(|+G70w|33pRAS)}|45Z9~_~hfqk84@*DBShf($W>g zo^|h at E0E8?h|Oe>!novA*Px?^8H@!585oWqX9zU6U|_Fp^3 at 1*UV7Ld=aOTVzMz~^Rg?|qpy={=a*->;I0)`v0$QbpF4%PU*j~vGIS9t;iVUL8JHY zzc9Ri|CK at 2s{w4{gsp<8CPD#7G2g0Hm%yBtFYn=02m*{iXZ%7I0LBy>u80B%FaVu% Wj5au(tf~M200{s|MNUMnLSTZ9NrmPB delta 204 zcmV;-05kv40*wNYNq?_NL_t(|+G1wF142VXH*0HaF9Tx6YuBzFV8)~HfBF0OYWbX; z4DavVbJ+6yIU_SJg%%bT48d>Tg89ZbZZKSPcXwdIrO?vSk|7KvaQryK*pC`J1pgpVET#jOwsKpymg z_~SSOgnq(cRSae_VkibF3JdFp3*b at +1OJimW_&RU5MTg}O?4#GmVYfgzz?bA{d6eZ6n%BsyjeIAzl9cLW`8KrTneoD5mBpYHy_HXl7&mMaj&{2#TGN zgOQ1=ob2%9+kS$-`xR}B9bNS7ji7`LZS;-4h at 06Px!BlSID8RRWKCHRhk=5EhO at O- zQFYBYTey(#WkLzw7E+GWc%Q(QB3u(M=t9WY3zgw=4CfnXp(bn#7T|ukJ}aX3$(XE+ z)^s_m*sQ2;P_>wkR>X7HQA{XXG05K}~3WyVTF}=|(%zp65IO*(uxh=6jSyFk> ztBTz6N>ui>V}&4&@!0Y!kqtA*C(co(0|s{g(EA8p9ki*x(V63e4d{$i90J?SDPBX% zfY^dh1(yMkoMcOG(MZkD at 3XB8_I{Mt#(=3;#(xj*Z3#&srpsp6UeRJGeA|+= zvJeq}+!%qpt;7CLNByT(Y4TZfprAM at tt^xj-+I|g(_wX>hQV2dK;oKTJ at KVVN6G1~ z81$L(m(->FXE7;63Olp}`osSB{=dr!)$igAjf_g~H|1O=Q5brm5ro=?n8&_}?(l$q zOfDuLLx1$K+Fa|vb2Vu!KQ8UwUM^=o`{<0`zXgymX-t|njq>zyUs*-8xjn{LX%jg5 z-5A8ZE{GGi)BZk=}#nQucE1j_4OzzR#?8rHjMrc`qRIY=i?vBZBCyhBK=_XjnhZEOum9GXrWh zJyryMugGQljzj9s&Sr$QlTWtKW-FbeF*_Bi9r_rnRtq)*NC;Q0W-HHq!^j$@fxXq; zb^M0B!KWvp(d&CLTG5#Bt7 at ZUWr+f31oV;)~#{`;6j(T~Bfx}41;bzd5S>w8_ zQv&7yy;Zez)7 at 55L(c~U#N#WdMFx8xCb1hid&e2RQ+^vR$)PxB_)P3<4FIJrZ);2B~Jh2V4jYC`E at 1 z5tdO%(n$>E+95V&s{E)Ouw+ZNV`$&4rpc(xdFSNlDBMky;R6>nL1D>#mq|x}oeT z&|HCf>}i;=3TC!X4;O!Lo&wbJN0=cTsTxfC5XT_-7|x&abO)nYX!`G{3>EuAf14u; zjgP3X{Ve at B1$|054b?t`$(mQM#;sYVpcR$jHOTD#p=C=WR8|q4dH86kcJy-Yv%ta1 z)zzcb07Tm(=!RI#wVf(m04fxEkKAm9q&+m@)r6$w&=uD>`aY>R{$cwZ_sNkG7>^Fb#zYrRu<+LDD}VN5CXPM54Mhu_)w;H?0m5#;*hliq_uk|-o;x<`67y& zaOV*8NW#a?c{8$xAxjxC1J&u1*iz)>qp>D@@^wv7kiWo7{pfX^^t?Kq()E^mPX4G$ zarc?%W`w$jA3+rtvsZbUnqM_{E~je)LFV#V&r8RSMfLaWr-3WnCMun;vI{+SD2axUZHKB)m*<(dz>5Q#L?CvmW}T zY|f_a3QOqxUrv7T8x65^nhnG#e-w}F&qcHIDPF=1{vI);4J+S}J$%(D#7 at d=o++hS z9j#50Qpd(Ey>e?uj!3T at M&2Bc?kXUY`hXpt>A=VpOHn+4i86~o*T;;w;6hMlkioL` z$x8g3dqoAuI^9I;K{*~{Dm at iGo}xLa2NOMq1N{hhaEAKRL|3_?o?Vqp@`J$Mv1NR( zc+a9K)8yblTu-P2vuAAACo=Jr)9u*I6Nged9f|u9C{1Wd=D0*wc8q%zrT7566a`PK zF at tY1c9U03!j8CQ41 at DVU2qIA99vy*6{nTE$$s~7cw3gLH)60Uk1*%)AK^&*j>m(5 zN?IiTj%)d5;GUm$I+wsC_rtJ-bIr!i>Il_+VFo*9EEGtONLQ}GWjhZ at f(Wm zkhMSh1cya#kb0nVJnUIh^2gPb_K`IAI|5mcgj^j>vCen0sZ<2#gWPMe0W6u0-MK$u z;QnxK&5ikxO^N@>H{9O7fgVA==b)_!x??@%hZ#DYpeQ&Trj-DIJUh`jgfxDxm-q#! z8$uKVQ9`ykEZc)N1$#N!=B8OQc!#Ui#;`0n=|8dN9JmM#1A1Tek0_&+npyW64AWA) zAG$;kVQQPgXkb4_D(-cvulpxaonNV`qbTH5fOGo-Se2GWrHDU2a(%|!ClZp24c!=F#|p$Rhd>1ZNj$3-b; zGYcsaCB+>MuD;>-f9*@|wiB at e%A`w*Xb|k`$BP%1#wlV!X?*F?pBO?1b;#QJ&I=S2 zq_O74X0qRncB>80pf=y)6qXN8F+%C1xqvF5zto4MeT7X`&ARc=9p>N`Rk+;u)m$R3 zM at 84kMQWK6kr@$jD({)HwG7fDi_Fn^*At}hF;VCh5V at YIQp4!C1kOD at RB*=L at 6nG*tkL4qs+TgB)UHk7viX)ADav zSogu-ulmlkI@(7YB!0#{ZV`wy#&&t$H9XFU!jkO1x-SS23B^AY1FG+Cgi-ty#h`VO(5KkH at Lu4X{ z-3*lfA8HY_{vPAP(vbHTtb|%{MdLVBmoVU=u?I3@<^q43h8syC;L&@hz9 zM3FnL8r==WIJO`{O4ed9i)Cbq!$-~2N4FsK7$+EK0#2zZTG+{P%CX24mgk6JGFKO?zK}i4x zeJI|3m at 4$3@`vxD`9kyQWSW%9el5mCGH8Iwwz+>f!3*i2Frr;Dc6>s7rEw6YtR! zNdWX}<7Aj3UEz8 at _Tbk(;wN9Cbftp5toSkh`4YpLufo;X^GEOJs6r0N27cjHVkioz zqG7}H9l|Kn(- at r!-u2QK&8+=Mm7@=dx08@#7(y1z z*4MHp?M3p$#ZlZewleiZx9ZW4PSHun)8nS(JHMb-Sfn~BWyUZSTnYYgyw$GP&lzz8yLX5Th9ekAN`mgf+nhks4#@AU* zIaiyrYm*UAQg3NIDmmBJKT%w%9^dLaEUP;#=e^Vm8HukuEN2Z*l-c_6#N`~DBE&P> z>NN!4mjV1+03$cE;(Ke`YI?}|M!|d=WW0M|3G#$Fs1Pi0{$9zPz^;&IEdZ2pO| zk+Q6j(#b~IuHos5Pt|bOMtnifep70q!<-+xCJR{+(}N&%`WwC(;Yk>n?E}@pYT(k) zlia~+rHWL5gnRWV4&t{~Le|^S?=Llqok6bi$BxnOmX!N$+(cvqd*xxi&-;ij!_i5R zVW~*dkkD%pr%EAC>+n>k>`Uni?T|@b*I3s;F;~J~!olN!v+sobLP_eC>&@8Dg0_n^ zEyRA{MXq;AT{z~oM|Nf4d at vHF+;;sOVFIlqhq*9MD6-)~lNWTbLd|a&ZI85F_U({O z$%)m8R&w!&k6DX;C9^quq`Z42p;QTTwW#L13bgG5xp(W57nVHB*c^L!!-P-!%05~m zB#ut`IR at qYa;nH;X{x29EiFq<3-6~`KYp71IIV`JVUQJ-Vsr%S1>}JM)U6WhYs=Eh zkT;4D37JX1w-g3eur!UJl>?K~lQQ-~7MyDLIcvq)Oy`3e83=QD~e0WS|ha1FrrWUq!dj6araaIc#!Ja{hkPbbSHM_}D9-?#1FPMeufa-BW`_v*n_W(9{jvyQzc%U2Oy8a zLX=645X*B&OC!syMOJ;kFN%tqy*fU&2hvqlC`G?c6Y^OFCk20z;KgmYOYJz5gC-pec at dZE;#h2eV zW&xSnV`WL}R}XT;(tMW~2TVD*S4XXXg}D#@Wj{mj{v8N>-P*<=K-^6Qac+6?Usc!r z?6C)UWK&ADly)PYq3zUOKzR_Vi0I)wxphX-C~Tngt! z3z}J0KL|_9v~aFi=4L#It@>jTRDtV$j6&~VH9o~Ix`>i#B8X~wra>56vF!G6dOG)3 z$zgor{gRtvdMfMOSX!P%ls1pVD!arYftG_~D9#|%&)%o)lv3Ol<0B(h$2{Ysv>c0| zC>#xvVI8Z3OnKHDe%&J;P=)bPCy(ghj2m`P1?z?RL)-08<%}*(>PQ at DjZc96GJ#{Qf1AM2GofSfRx}Ov%lljO z78(P_?!Eil$$~miQU0DEMT^yOY>JQzX^ty at 14$LUT=8@(^=1kFJRD= z)%vMnB3WM@&Wol~m(}U6jSsk2eQMUg+`5F$Ngh2O*K8~+ZOlFM4mKlkC at ZF@JfSQh zksnQGS7X04zCI|w2#dY73D6-R2{5OS^OauK_ z6J at XFq(5s>PMWz+0)5G*p?EV(74*}V-rfWt8YahgXS_@|Q0KPdA&`1pjRy9=H|DKR zc~q*@g1pf|#T*m+M<&JEYq`$Vi=VQJ^x=qZCveZCv#!tuSu^+nE)rXz$5oAD&)g&% z^=4%V8)C0x!Ey+{X!)G at RsuIknAUNk02NT9ZdP&&TbF*A#F_jsBYRr}@B_4>hPe;_cxIf!Az7uhR^c z<=?OiHCxEXRgsRTS4E6o0IQCn16{;X^J1d zgm at kO1eE96jF7}G5Rmn!+8mz{LqCK|PL4my`Z?Z`nv_ecaC8NKPP;9s`Syi#wMvlO zO?S;2%0EiKF3p0lyyUL1`6>$!f`Gng6%F!!RgG9U>C1&QgQww^j+k0 zE5EWn^Q&w+4f&o24%k0a$MosOd&$R_B1k at Uvd`X?c#bK2dUIFOCmk&7gKg&1BDXnv zCC0`OwX$r1#SP*X6ByBii{6fK;Nb}4khIT at nkt{{u3D<+aN`5wa^~Vq3kg` zBi0gM_4+3>HqwQC9SD={@v=RBW at ZDgGxZRJIqRB!%wdRu?O-=$5!-!T z!k+@$ecnk5Ot$ozn!BMXm3}#~P>H7AdDmX+UAyv2v#b97KQqr)x~*|n7+T(<7xK^z^ORWMbr8FVo!uL&BC#f;qUiakt)|6s4R!I${;G#90q_X1D?g5 z3AuD_GXj3-gL7TLpqbf^+XtAYuL9gQaYy?M>KK;VNk%40(|siS`A1V2A-v}6F$WU6 z+;Ev}%y)zC?A0y(r8suAM}mh}Kd(@F>8(jDdlLn>QG^1sn2J$l at VEuslAsef#&xNz zNP`bt!uCJW7f~HFdSkX7>VuCW2^Z1b(#4#StmCyT0>y!}wu6{^xAPWKUL6 at TGu+dY>E4Jwb zRY}gyN6+Ke*F5S?C=oL)kio(7tN+a6gyPBxe!>-ZTooEgl^DNA at lZ1z@A;Sq-?`G6 z)*yms#hGxsfFkT!gz*qIGgACU6Or5QLOU?Mq=%;209SJ4_Z5=YjtaTQhWN*TLke^^Zi_RkH>Ke7XPfs5$a{< zwHlHSwVyBCu@*x9h5TZIocN>Fq_U*2b7?Xo^yD^<^F at sYIPiKb7Y|G_Nzsy at aUE`Y zX5en|pp6>RJ3ZJ-Cvk99?SxoMq~lO-$=K+GIaVtEV&@Lbv?LlEXFc`_J~XR0{mfxf zS3Y#2i49pU*Vd8a3vkz-dcCXwc-);;>5 z-6?I{Dn|e%Bc2o|9v0m!lJi|B(Z=Vu%W805SMzThcK8$btwiGT6obw~b}XTX6T~z) zx12d4PNrgULwpiiyd;s49hc?7b(a3UM znZuxPDhxujFlw#RsPanpay=eJk1ILKxJACt>Q<(bCS#gbA$Q8niI}yt+9#O7`sZcZ zcK7TRT)+A?!faR<&i*v3 at xdDdn4Z)?mxOL=0*3;ZRdg=w$cuE(iw1g)Ovsh`6h>Ic zKJe6lcxAz$E1K)_>K~`($>d^7_?pFJrR7HHQ|5zkuDsB8v=fj04`d7vk~oRhX2VYF z_db$?6_f&6`7fj3QQ~f`{ug6 at DuN$9n+^Gg)|Q{ZkW>e(h7Tj}YA)9aJ^1r+snaFe z-w_2`Q`Cqon|l-P>9?0YbUuxO8LvT9=7Q<0SgG>*?S_CQP at 39(`#@Gr5YJsuzF_D^ z89Ch|L+{Y~Z#HR3EUW=lD#xH0Qb0a}szRRDfJ$%LuLF%LcoR{T+JzdFu;E8f=`sxR zGEM;pHvXGznSZ}xV-r-`kYJF|%t<}Wv{xE4BY34GOBMJx8U<1G`Qj-ZTI!o7d-i6Qh{?x^K z_AU(s96tjJ5bU1JdTD=b-`sMa3fqRR(|4WXZnX+B;3bC*Dq8RVW!mDg(%F1Q^s(BT zm%qfZQ-c2324kq5tih^_VTPDU&*F(+s3*l5>```EHNCpZdt=cm8VH}9+7(OK)}%J5q32Em0h6{6xun_nJ)L*`SjUi z_O9dHmjX{)cYpFcWdzcaA5qdj>Z=_xXntBrfowZ zg{j@$19l~|Zw71d&O+24{N{5x5`%>2Q${@Sa}>P%1o^G5!`q z*S0z8g{*rWZKj%=*Lel{OV0>9b9w at FRA5Fp%M4K#vVCmD;p;}UgI8)69};8nA*h{q zcCe1x+vQRG`uPSn>3gM{%YLgLg}gOqRRcr^qwRIWHukY&NHfPS)RT9(mTYI4zm=#vD+1$O>{4p^IH)Uk%rcx>eUKbd9*slNQf4W57n=qSMR8Pb&k4!kHgyt z|IPS}0ebEny|+GkNgTDQ52?^<;P8y3^>NC8liP67pud}A;Tpl>eXfV4t`pB7rFNl% zrTjE|3@)!$JSG;_?7Jnt^lsxW6HF!_A5Yca5sbtnB>bfA_VCBdBCR#gI4<7?)heF* zj at IP84I@S*r_z|+$Cy{(JeO)W8ON&`4%<@|%C}#Xq4X()D9Po9(eO@#ZGeWnQ*&^tWa5jhqM_>mhm+I0cvOFP+ z$|R{6z0UJXBv$YY!F!5qlwWWZRyueo#-%tZa@;Ard%896cT6jG(ftL-cSPxB9sGQm*jqi=Ht zT$37c;us1Hj^V8aI+@%GBXY740-!@n3i;x^I7Y)k;RP`$ZzB at x=QND7P=6uuwE;i! zbi*qyQqQa^@tCy~b<&P6HDe5DI&cLf-YL!uBVE!w1{J)*JHPNY5gTPL4Pl$+)!4dV zy5=)vaExnah6c;R{K_cBW{25hU}~RnqQ?vd4X2nj>ZR$1YGEyWO?cjMsv&oFX&tX z5oMSDkn1nGx!Y at KL^YqI4k$`af0|Ls=o{Rn4W2JZMJNb4*6zQqI7XF=$ZU zRdJMWmzd3J>IfG(kv)ye<}PfS^;Ilnav%X4z_ti11$YgUkp+|NG5yZqmA?}J&`pB1 zFMud85{PUZ-Fr+a1aR?_y4Sce9W!?q3Ouy3{~hYEH9LYfZAsgFX;cOrnKGnehvBr2 z_mYY1&3paQYZ(GYj0ObLErvcu>=`sp&Zg`R7LP3D%uDJ?-}wIFyiFh(eJ;cmRpG{w z!U`AfdnwRYCHTrrx*Ks}DIC9R<7fU&e~u@$BBisI5U zg$2Zj#e1l2ODe4pNsCj6rWRs=UUtEyHppf4i9g~;(_u1Sw?~%KzUmKIAsb^NnWQ}p zBvr}ZE0WnJ1k!mzTriDsf&JYqS_e-tMYTUZ;v?$hb at LJ9OCwQD^k0g->y1w6XcnXS zbC_T#IO^~a0%xuFUotxV4hm#D_u6e9Wz~=`>)*E;2LiW}MI6x{n?V)0)#&M~UL3td zDC9j^Z;B(5mh<`NeFaT&O&mx*RL2|GN$5wg z)sk+yCwxu*VBO0AUja3NkcWc^Z8~8RMm*1Km=z at -;ggQ}&=`}plhZzxY!AzoaYrrI z*%0RaK7&P$Yc1NLi45L|=h$B?2M*<@O;>U1t9W+gPpRRa-eV9uUF}X-DehC%%O>bB zZU(fMm^bOxp at WG3h5nEAd{;Le%WJVnP*#AOFfE^VA(ehstO=J(oI!O8{erc|7h{p} zLAiA!QBJq~kxY_CirK!KQFyHHI4S+gG9=li8Kke{Cs=iScF}_)`Y}jO?bsAVQ#}d$ z`Ka*y<2MS+#&Ng9$CD;Pk0_EZ13wQ7O;}dx-kYL#Q4w at 4TFz4f(qsg8PMBf zukT1ZThyT7i*TgB8yJFOh8>H{q$uL1Gu-&5#jBC7jBGQ0uJX)M#>HR_HZA4H9+&JT zy!XWlsY+q3>1(T0B+#vwGb=ubFf}xZe6eRrvKtY#<_|IhGT$Kks`ah6SwKnB=N2Lf zA0$$>XPegin27o8$-RYjCvg_gmwYOW(A4#jFoP8{D9C^n1>X$i1^p98g8d&h^QAc( z%u;bly)>pD3_(g7N;T7~TfL23rXpKQLqMromLEMo!#V)t|^R)O(9!yWcSa#N_+2}j~}v-{_{RJPE;m^`gIsn zuBhZpQ6!HEz=-BS8yol at lB2+9=aFo4QFDftkYAquOPw?IH6ORTZ*_=ofT>v~ z(y`SzDbO^miA`mtPYMPhHy1(dGje)r1u0hBq at yEl28Tfgx{dy%m`t&57(G9F3@*rs z;pbNzgIrQkgMt|TD7qBzso%SspYOPDwS&s#ohG`e1(0zbzN+MTDr7Uk9=drw^*C+- z*fS4>!K5?Ihjk};r)&Z4L6_&b5)XT!Zg4tgKajU+(L)p2s}=5li?N1KA{&25$%RSb zpE+skx}Ft7(JgX?Qt7E;*D(vZQ5w$Bp1QaSvyXq_iAhk3*Gpu%jZw5;fk3iMQmKqG6p7zd#jx_#FEy6 at 1fDQQC~gYG8+G z=jOhm%n;klCHc;-b__)(X^!P-Al>QRA;~?P-&QA0NUd0G*bI(>ZdITDB7%fR2d$Qy zHV!SfW*NP#W%MzYe_QsnB$#|WyzP-|!(PgZe>dXYzQef9 zGrP3ALiS&QxwCc;4F%5Q{9zgDJLF5$J1=e?e1z`KTSQ=D;<&?m3bunIsxK^wF)YNCOb54u}K_l;+NBTbxeM)u at Cw0t_uH7c?;z zG~-(uOSo2FT(f9vt~kknOwAYMCOY+5$m)}U#bNwWeF(&p>p2y!a{Js8~-+pFx?I8imf&xk?gkC!X~@C}&J&udGkAleTld3b&g-8=$3ULIUR% zzDr6kN*F7M+$77=8M~q5#N129wUwpQ360T0w{=5r zl{Jmd=zx?!f3TT|L_|njg;`E1N`?J5V9S0X1r>L$)4Juucp2IUjd~Km>JV>zszV9M z;-60>>%fyr=`S3LyH+ZnSg6Tc1=hU3N{We9)LK_S at SaO}aWjbc&!5FvxDpMjjOw#Z zY6r5dcBm{+qB3IHSy%?LT_dC2QKG2s<^8u#?r9`Rz%7qJ^Z at KQgJj#|gW|JfI|}iZ zV`*!lQxoemU6POnI}p0$Hf(9pOeAXhdRRs$4xV%DJey>mCbD) zpo&?jNn&pYcVAzS?!wRjGiB+kt05;|jaVkmva3Gp7~b;ffVyOl&->70ZB-vF|4Zr_ zIe at G2=ML?|UQhWH_KWeo30&%3q;&77L~35RM`=z(!@^uuUKbs;b!@cf^)qK{YYdx2 zFOl^}72fRpgSpkoJhy78I)TB(3f1THCCW3aDG&Xt%&PkhGfzM*ZaXg);C82{f%0ud z at FU^!?@qYWZXLzr4{cZY8=y^!&QvZ1ZxE+Xuf at sP*)iv!&gGz#7R3hAYQl!aE9 at tn z*>L8oZsRI)X;o|N6p-##+mdgZ7&E!PkP$B*wZ1A@!X^3%cac#sU?>{LTd|H`8A at r z3RV70$jtrfu}L(Yd4?~pUF)?PKC=pj>wz_{z at zo6ppPkYphhGqU5XA((wKT8{k zmWXr7q`_tEJ5lo9Gb-#GF|qz;GP0{7V9#xn=AEFsRt|e8t9bF8H93Kwk?E6H4aQ&F z)%xpHjF~y*f1T-#NT5V*CRpl>7v4DPW`=vEg1hD5C at oLAj|;92J+~p-!dY8 at mzSOQ zuYNiFKXDa9*OZ`b(B0O`4vF at u>vyx6C0YWDi3)CyWP8z_PN=ap-? zWmP7VpK+4Mjm{&@YK)BB5joJ$*#s_vOt%%k{AeO0pXNx0 at J+NtcuZ=<_Uzbl`qeFTrm7 zqjk#u`w+3yinabk?o^XrG5toI1)J;RGggd&p%I3Fd*58shv at DFgjBoGRnhB*n98C8 z?s^jDQO}NeR>N=>v7~%PiH~QPLpd7OC6ZgabBPPsmG(`TpW+}Av^j{x_)(P%fkwN^ zQU35i*ZH!*lDMR=HQ)&GNAAe%x%s-}`_$O32L-knjj4F(XEC6ih)U6qB>x!F2-zHz zz&_iu%`4MAzJzvW0zob4IM7N~S+|d{=BjOUjCmK%1^pT at P7SrZSa1vMq$EfX|BAnU z3|;Sq{90J?C^{yvCu6m~;#-??b?3L|>r{ zdPR70N9)y5jzKnr$G;2Sv%~3QfV(N?-;Heg#o(z=vIk&(j>girps^)$Of| zQ**Il|KkSByK`1Nb;0#91H5)32e{=lt!2$i9?TD}MBX at -+PU9xS@wMi>4m?i)!C$8 zdXy>zCoVqTm+h2Kb||UcoR7h;s7k5gb{m;Bsg)uP~dUVp#3Hrx> zAx<8}Z}oIV(6F_$Mz+y6FxE at L@PgT+>b)8+&FCjE*#OV6*WNjn81F#->b~TReN!s| z`tdZkLdHW99EJ+D+F8XJbDhx?)91`Jb!tu2!HpDZBE^>BErDT#* z7y0`1gVe3Qnl5^^uhWH^(EJ8lQM{Ar?pdC*xB=L_Wf5Ko{MehmI=k_)Blqe9ZQ&Ki ztlg5zGfQSOrFcG;+xTGhf!2`|F(QA%RB1){w6^KfT#}D3YB2NUBsqmEvEhEd!8|P_83aX{o@=cyGx)np%wBjY^{^Sp-2qyp1`q+IbMpbbsdsx;>F{3Rm at mG)|9^ z^$I|=-rK<31@?(Lvl)=`T|5~k_m%&GAHd(?B=C}S${Meu4R3IZo>r-MA#4&{yvx=G z4A=7JEf1IfF%GZpza7GAJlA3zv+=6==tJd|$){m at CS3#cOxu4UFj{$rqIZ}2mHuK@ zRZg0&*irMLfGs5Ib(DGF;H+^V!{9Rd2iIuT= zO>rwWqVO8iGK(*84%+x<;vg6?+bTFDV>esV53&`i)s7{)VZ-1|N<1ivgP{oY}WupJp=Rq~z7> zo>fWSzkyT-EMKs}Qv2u~1bIJI%mYF)8UMdHmt=Y#r(bi`Sfefw-PkMqK;yP!Z9(}+ zm;EGqR`bH}1ur2ITOr?1EJu?KDV^0hdFbWW{|;Sw6>rdG)7LS$G4ww}SFZj)(3Rx$ zAEB#h0&RS5r!Dz^fv$k&%|CiDVKv8w7B4a$;(TPi{tLK<)wQ>Xe=Ml-tEVY7$L}Z2 zoiqd=9p^NgqPa at cY+nBGfmj*$QC5{F#l4Hprd|X^KUC)84(&C3{e=-n)$hu`<*Y&* zn>xzU;B*AMHMT6$Z1FU9gT4I(PCxS)1EEFeNzuY{ntHybI;coa&#L%Ayo6~#<1i%W zgMQLlu2(M(8Y*%Q517kWat~7MaVp`fr-L^AE|T+PGQTUiJ5f zL&HFv at Ujn_`K$-!A0%v=*35^OF?ntuZJB{um8h?Hi@}xpUVDwW7IyQ$=(1Mo?8PYuis&G!m&=M#=i7Uk zXLn>-kgVJ+o89{5*m;5pwehzXL*X)ar|EyWED7}LH%bS(xH?<(RQ at X!iN|qBx9je# zcIR{W at nxNt!>IK$RGNRJz$`;y at J1zPW95@=M5!Fujr+zs04Piw1pnq-!iT2~xKU>@ zZGPKkF3i|z=UI0))~&%x;LHuEaPMgE+s19%d%NGt7qbjal0HK|Fz5r0t(yjc!I2vq z8#y|wgkSlZ#$cmPw-7yC<-H#NF|H5z-=kmnjKzp2H-SXDSK;u3TmlKLr-z>y!QqRP zx*lF4Hwd(ihqtzxlf2!zyvc4k-?qrL at z7EL_1=4!DA%nG3dg= zPjAXqpZ@=%TvK)bJ8~gj{GX8Pz0+fwoVhKs!HNRj8C&Lr`pi8nptybFI zj2Yfqwrz$eYVbp<|9isw?3}6qshldGbgT*X97|KHuCq^D=k3r_9;-IGb1yByjoi3Q z&&|`b0gunc)e at 3W3;gE8B*460!nlM9=-XadREYxyZR#M7OM3Vuj2IU?s$Y>F9Un*D86t zcPuLbb#?UZzS-~rwnrZdo!lC)3ZNxy6Ko9e;VgBD?+h6mj0A?Ak+_%8C$-`iCx(Ra zKG!_st{10pjNdd~t}QQTNhD(Q1}J&pGv7%fKFNn#_DNFlgqckTL}it3^hevy>)}v+ zOXb1If3MR*q*Ewby(adSLg at C^5~at9w|qh$uKxd265)TS^p;1M7HS1#`t)8)5>JYR zhCDJq=5w65LWm&8y#b%4XuCT&52!grd#vzJ9M7z_adExreC z2GkHG%RHeU>nJJ%)~z}BK_G|M$Hzwp?@^~BBIN~o@q6E%e4?ZC`0BYoc^V4W+&rL;yFu&aFnwx zIaV9&B at k~mlhsl~e at JkD1Ob>Gyq at xUWyyTMuR2vbqa0Kk`3YuyQQ9D at yxIIiX!2Td z`JI?};lc9b7b2s*7pe>Xu!VcU!0{BD>XpZuxUGwynqFe zcb;r%lLwj9z;7 at X?66?FQ*B!tq(34n1C=8RsxY1=8)&~al7LA*dEh#Y)sNIE7cPVF zmK$F&gfpgJVqYbU1SGs5g8i?!K6j89=bemp+^Boj*I_jbZ}axYjAV~@_wGtXH^Pl_ z+LPBKRnr0(;95b4OtRJ0%H#j=Y2F3{%pr5 z2P?1-v4ef|b;|354=ITH_G$gKmIY910GVtioEXP`+nwHNk1v zd*M0M8?fEcKdfW-$h>C-Q%5HT_*h(#SW#JxWGxT9=CJ at k3`5?U3p8F5n-eYi(bH;T zYciFGi!aMh-D$QxNhgVVa{)0{Yy;6rh at Tc#DE&2Slf3_(yG8h1?HV^FjxnYj?sLt>M!iWJ2-j2zI=vF-Y{P)pIT%f8wwA zndj_;M4sz306kQ=fq;GYOs}Vb<<1uE*_Tm=jtiaF#X~pm6~V>RS1+Sg_w&Vz)rObH zG4NsMOK0UH(IU7MEL1V?@{}Pq4VeC!M5`UJo8jbKRo_(Wi_)kI2YauT9eX>M-P zYW4{oVJaXiIk{Vx2?qr(;NKTpg3ph)!2QEXfRE=654hxT$DyDM%IF^4{VIR_5C&oO ze1*L1&lbu3vzx{9;d*~_lA*)v>5liJiqi=8=1D?)?x`*-F-z{Y^Bu=Dq~cEJR{qgB zu`qt|Z1W*gOX<374^|7WUAthk!sM*YL%`Pju+$xRO1y8e>C{|j<3W^$>h`__Qt4)N z8}$Sb^nrjqj_7Az?yq*i?XE#Be;AR!@w5{ivwnkQQC^3%HDeoU2W9&yjeZ9DW#0Uz7bvm}FH4knw|Ao?21lvsMw(2RElu3qvm= zG=Dkpi{WL0xaz#b1o9=Yhl-Dt&hN94S87HG7nO)hOy~huUW<^&G0d`O9~I+;*JGc| zHoq~*iOnBH6_-;2cNMQ`hMfS$DS&0qcWcSVF2trvSA4DVEZf-lA&slC=;qE9%^?bct&JIHDU-KRK`jzwmR$IY;Z zF75^euVtS1amP6;NOoCI<#gn|rU1}Rw-+ZixSIrNM5)J`kNjB$sE!r|L*Y;NKe}FH z2QEmcycl6_2Z9Y-rtDcBhIIx-AA?^nYW_U)Bp2Ttw-EmO&xD5yoV at Ncer?mu-}IZ7 ziyp-0)xVn6W3b;>pf+h}=jWlX3^`fG1T5I4ME4X=R2((!SY42m4m6aSe4Qw{CRYCC z-uSHfP$wb0zrc^7T|{f|boJ~}50p{apMQoR9x4|I(!8n&l+VP2f+lDliQXT&#sqq1 zz^EUW&G-#qwwe%``P}Sg{OWfzThlf;P=1`fw%MNj%8!{bI*evJPcJa8?{|pHI$ahh*B at _FpKw_#~u4;5msw#=7I5^=j`=pWRlhJkaxJ0$3%pC zNFg(F=;p#xLe)Dl`Fzm at x0Iz6$a`(<&L=z=9lIH3a(b$B>~m;|_V8FVitRS_5;Zvk z$?D&!z2>jXto^N=I)6*(#>$`d1^+cs^M*s`?5TO>l~qgmMQ8N<^n&1~$UR0 zN9%R5=3nRDFn{%pq8A9-1~_^i-_s_Wu|rDNtY3Yzwo4}fCM_D{>YjYJ%(8C%Wu9W3 z5R1ouwFF!xcw4dX>dt79zP2c^$Cozw${#rq>m>^q-*3h7n+SZ!g8pypy>~bq-~aco zBuI3kBx*>4=)GGlNOU4P(R=T8brHP>L9~$QMDKOASOlwgR`0B`<>&pW-|v0>?$7dU;xk- z>Xa`?8ivr(p at Y{jbX#s|N2WwV5EEcoGON-{vvw=7Xxx!Y9 at d)1pu^cI1d3 at -yN;|{ zpe at J6aVFO<2itYq1IpmlC^qrd?tGLZgZA9ui)&$OyW=L6>dNiWl!VrP{3p^tvq;9b zfPxd&ioG14%Ok&5_3Li7cs8SK7daYEoxWR7p=OThZ&swM5Z-`;fyOlqRkds2emq{F zIrSypDDK zBd%E25Q>pCfOB2TOGtWD!`c`;bhI(<-@?oLl+Yo~)j&{7IL2Xjnc1&zJli=tqutYD zVH3k^Y)AjL?8dutk3hcUsBYw at BW~FcwOkFb61`x9IxbJNVa_>u2{jv5)J{NBk(JgAaJUY*0ja**X%)Y2)SERv8|_EY+!io)cv`>#tJ|JUqbkPQ{iy8PII`~-9j;5d zN|{z8z3x at t z_(7pd#*d029}Rf~dmgI?9y6h$0pYE6nc6R6rlN(HMl*Re9Y&S=l_xH9;tnL at KK_bl zr&peRr55n0c>}~J*MX1OeCTz#AUg55tP?-&-Nu_m?upymd)cDmiw&En-qdq at q|UdZ zPLdKgSt$dbcCg+WOvWKtX=SRDvBX~XYrh1hL)^<8A=QQ?|10SZ{9n(rtvEIoO=jr z#-N!$U-x5Q3w1hgqh8RYF^8lY59b_>LPCd-S3H}OG@>?dU*vkdTpsnhiEPM77Qvdt zYAyzWtRUs}$(l&jymf51k^Lpx_{H7kqvv|D`hmv7mF7Fs6%BSRBRfnSD@)~)yfX`?< zp8J*6s9O=Xm56i2VT3i at hj?ckJ>i zmimy&d~2lSq`2lwE1-4-vDk>$AzyO(kH#4#7!Ip9sf=ZFyTr*i;lvhsN%S=NZKkf` ziphPyI6I3S?RtmIb*9vvR!{FY6udmt3Wz-{*Qj`Y_L#M; zu|uYUv<%)cZw!6VFqa$n+5n+`2??yW1H!RTAPHO6-M80a^CZ! z3UZudnz1*@Z|#~6Bc191B8Ajb!xe}@84y8T)1lYwAU3c9o;$oJ0r;ip3EmWusz;s$ zyb@^`7&R_+q-OOSM|z-o#P=)DI(8Raztm>ITz)3EkJK7UNT7zz#{(!?+pgf?%_sg! zt>G7ID;Hdss1|NG@~+M(IsV{WtOwq!-UI3t?=!Cb(sW;Ve^L??jeSgV%!g;gWUT|9l zS!D6`yPFlCwSF?}7PGsPnB;s~oF=W;Pa$b+>eN%0ik?H1;cWqhc>E3z_PKq$^e+p6 zcL5fcu%-_=<)x<@2Fou1*NZ?(@lM!hUI-7k+CUv+qaub1^f zZ4l8=Sa>z+y*=QcXU%_JNl|5Y1E)X}%QnRCos=$p!X!ML zzV$5I7`R03E1vlWpm2`RCJ1i at a|Sg%J%oSC!wycq?N at e~b+}KI z{4S;PceB9(6MU5l4GXm9VH4)Ayw7hcAep at e2C(>8ZgcEF`! z*_*57 z%$p3zLZ8cOw~Go0yoouip7O6#PKr2U5_&B2mI7IkSLVc8qOYBE6Eboc({>f1m9g>d z=tw=|0^!PZ32QqvfC9^zph at nZ-|9Akz0N<5_;Sde6^WNDX#4*f40I7U&TB{W`QEPF zvTy>Ookjl%f~8e%fa2|t=Wxhsh7z#UDtouO{Htfrk! z_YO+MbE{bqx9MvLF7nNtaHGpcBo59)c*pt-J)z`@hu;?#y}c%K&KE`I(k146KHly1 zyc5C?&usGn?poJ(ndj>M-Nmg8{Lh`&|Jl;NcX8*1 at Z>cA+t-*1jtN;_XNR~7gSwS8 z^WMBUQ at fFcI3)RK2{+enlo2NXdV9Za2cnSkN1%8*6io}0R-9k@>g at ILYL8RLU;V}J zu(@_CgtqW^yq??OR`A;8aT>Czr9N)Ti3wOCuZ`~~5eT1|o_d2kMA-vx&UYZoPRs2G z`03^_ at FxF~qOS6k#9xi_SNb$E$x zb!0Hz4G{l|M7v0Y1lo|9IQRbSAgTHUflw45wo1t~_IIdLB8o-W?d8tmFN z3tUuqhYfEZ*kXgXtQ4}3(=OXv(qL!VaPZ7YynlpG4$Pyym!mBej*38 at ksBb-YfZpC zU*nWtAiQ?wdnh*Sb{Mn42{+FGqlVX*%221m7=w7kKs(z!=fUz^QTk~E-J1HmzI`A1`5bq~N{60t-}63H9r}YX`O>O^W)2S~os&U+dbmHEVKlVt zabB_>T!F&$ux?vvcL2l%_!-8GaRd$ojCmTvP;W%{yrE7bR&Or%&UFowmTLEalJz^7 z9Q&m#8LLh%K$$dnM=~H_Swa$YtCQO~y8P*si5-r%@oNyp+ at _rf0AJo@)l|1epZCpE zKyQ|Iu+F3AA2jzhQ+gu%Q#!zV8>*j&GR`%SpCQ*hNY8zJMS#9kKoNi);dObiSvTo0 zK9z_F5R)G;+f)oo?cfgh&|2)VdE&jLr|wgQZteyNlLd at iUh zrAMVMLOi+r{b%CFsAhoTpkjp%wf at 6-E2!Ik!#XF(nr@AL(sf5jOkC=Io`Pf%hBE__sgoprAT~z#^2k=ka+_u__G}%K^h}wHena^{}Vz zO7ct}E*=W1cY5R>xYA_&oD+PXZS)-IY!Ea&*yJ->b+?3bY;Z at E(>sDM z-w;%=z4M=@cI2o_b>EAiHUW|V?0aEGGV7_!#GZELWixGz6)SfzEN&AHSx`TC#dwV% z*z;8NP2G0KW#;zRX27l&4YrD`S)VtZfD9I=H)0&?LpkrWx^|72d3{Gt!I#?}4|BV| z+Rw8JwA?Iv{y5AM%ZPvw^;AaUx7!ICqB!k;nNjJ#N2tzSUXM8jv_YV!nPH_zxQX&Z z%X at LvSecMsU-ty!MkCMV4IUOCKvdhI-}Qn&8&2c2VRlJZn~QwyyAQZ&{}i97dIjqz z{%$M<5JGEz>m`Pc5D$=FY}=oc>n}+#x?!Qa$PTXG_kB&{ydmF_3dgNnSKLP{oBllN z_tS57aM at zu2=_KqJ{6eA&9eiVFRuiFH9|bF{xTU4H2^8V-F((*{@yNd(3RP}b*detx2J4fQ(c zt52Ns904qERxN)!hRGhIg73!e&nF+VyKtrfmTOPMJ9fp0herbIW3nO{5zDh%<*3=M z7K!>_vvPK*n0W>l03`_< z+22Eo*=Gc!;mm%cRMpFsS(+0E#fvvBl9kLXlj@ zF5Vq7=tENh&krRk5 at WAMRiMv z!=Q^|r>z1Ypy>5FsPx7|pyX#Ej4Xp=oL84nJ7*YH= z%PUvDTcGjyj8L-_e9dENv at H@o(cr>$R73CBRpq!7#NYLrMIUGCT6U$X^9==NW1 z2>TqN{7-}{Yrj$CXoJ9k4F;l*<^i5a$GG%^mP=@ofW?Sw(egN=<4ns`Gtl$87+GM{ z1k=J(6;x&3 at fT&i)&%d!pTqh50W+2dbU#pIu=mnknZxw?JdR3m z2<4ltS6w(bBJ-D~MU|Vwb53DboY1RT>`%xpQ-0+9V8?(Da`Ea&>tBcbKhBANKQnT* za`dW^rw0<=qeH%&9_5ylH(1N<*jP{;I$k1Lc2(3teX4Wg0j^auFBhFco8#W>?KhA& z3#G)xFiET>=}4}nwGxb~m))u(o|qP_%(s;aVGa7)RQQWKM!oVouQ*gEVQFVoG1w^h% zC~Xf&OsE3b3=|a+eqG)7b-uv**5zzBwhLq9s_ zt){hW9$~K_ffVW~&M^+^Twiw21Cd)+1PE1dR-^2?*#N<&tp zY&KNzC5JAwl#10;m zRk`yC;(eH~K2`1(uQS+TR~e&OM)&R at 3(h$OZSi;`?zD?1kLWlSi=JvxVnP+voGF!^ ziV$wd8rBFb*p^vlXPjCoecHR{o6T9tI at 6}_7niY2)9iY at D08k{p$l>O8o0Wx-$Lyd z?-SixP;vUx=g9-J`vbmG9mPxME$4|#qQ4Hkj>1Z-gFwRRWu(4?Zob+bDYpt0pU?Ks z-bI>t^PIMNU=Vikz%xEC31CWm}Wndq#X~zIm$o$Sh4E?pSw<5nY zn8NZC at F~N?W!?E7fj>2RbYwgYuXZG^Q!nC_nhc_l$l$6_t at X&uN+Ztls?dd7v)kqU z6(E2Wl^3w}s~CI(Rka21iXtGFp`nE5;M_?RA~Jq3OV9~8k3=H6m{SjTasl5^`wRZI zxw=c;uD27}elB~{2b9|#-+;(MWM7WyXOV!H5ks4)H0B4jhltoi?c0jJ)M4$vf_1!Y zrV7xm?2D=x{Sn$n!I at O%=TzW#qQTwFX)p- at YM}N6D?lfsW_Lr(vpl)@-l`y?(|z+> zT0}=bOOP5eHUAX@=xfPgd%@%r5C`lc at P#%fVjpqUQf%N9p1Qux<8teYjD_}jkN z+M<{sc$r#>=5*I(Yr6=g*Q(nDX z7}3RA#lobffw$A;)jpbb_VzXppn#^78!Ic(S*(c2QuXp_Q}Yd*-3}KS#UFfvcDcrO z9oYvJ`|leK9Q;w at Du^ryzfFe-ye9M{iu*u2caw(AhVVZ-=6|ykUckAfvqMSc_1zN< z?Ip#(eL8uU@*55Pe^cszJp0b40j!Pt%+r at i3Tz}%y$p#8&&VI&eKIEMJR^A=6&n*1 z6U&wXRKNXvn3J<}J&Bt9py#$Dq2&j8P{nc7!tr(s8X%B^HdmX--Vc#`A6d|Y;cVD< z-wtg#Jh11?lx8LPArX50L#nZyXI);4$+OjAT_->N-QXuOPH3rFi&CspF1+>a_Nru$ zR=l$%SDAOXj!l{>Spl#IBwrTZvK1P~Vpa+UH at X>Q&o6;L8A;o7v%qDD&r&A{30WuY z=9v%Wd{h{OF4D}^WJZjI$pp}tD_QOXM?L>2r*77LQX&{yrEI0SA--dS-CswzB5Zb89mu$?`L-EDOw)q zPA0-g4 at H;v80|lP8aJ%WZFSO3aW-b$3c&ej!~)U6aevSX3Tp0B1%p;q7N?}uA*<5| zXM4pZDIUrzFu(Y?TmFIP9MWG^20!9b+KEs;u**{EY;_10o*{%oF2714Z29S8>cM!UPK3nJ z5OoR3 at T=jz({&cIv`H~SwjF^>H@?2rPT(|umhXz`F`zL24c+m|r2&=LV^wP9=cq-^Cxq~JGl)ktLWQ}4fhwAJOTuYnjWWNA?decVg ze$S$XW9X6uUIKo=%Ry;t!JGmHOo{=r*|~R~IcKY)i=!cc-jAM;#NeXl5D(}K#ooAg z=QX^u%F2B2|C&u~qcJsLMedA1-PUl->AAj|$v6W2g8+h3heWsIr`RgRcK}g|u9G!d zkX#N0oJ&A(HMpEk;Emi#y1f2z_;z at 09{5Yj3yRiq}6>GAwwYr03MguA^7 zm1)H|3i7GEpN9*jjTJ3)ps>YN>h2EWJzps4N=Zyj z67t^D>I{D~1aER9i7z0D$}tG5#Ua=p%#C9e#R|Z_=T=TBN3>3(&P=QLy8ICKRcA3P ztiR-86F2Vg4U$zc{-$KxTqlOkQ1nf2LEMoU&Ij*j*~PNskcK5fqMUqEo%c2nTKfHx zy>TK*`;qutSH~)cyChltMiAlAup?h-d2r4bb#bzOM at ym&yD-_^%Q6emhhim&D{_-x za0#}$wfvkc+x{cFNG|DIeP`y2wPzhPXw8wJFNyP)BhCmuJjdb3!!GYrbo!I8AKZ9? z>n^t`XF0qt6dYr2W1U=c-?RsT`O8kaR!|Bn)E?iWPImVq)8lb1SBlB;4j>Sdeah5` zD1AMO$08D9AZ5un1;S?-2#m6|XTMww$l-<$?@#&jUjpahbWuZE3bEIn%z6p zlf{7{=xh%J`$1TB%PolgU8oy=uSCLnKJQii(b9r|{?~D<)RJ^O4W-zb*zYCR#N_~r z24=k27ha1Tf-;PO(tbE0hLyh_Le|o?CbcnY at B}j^xPi8Ifgu(tX7Vi^uH?g at Yr3&@ z*%=Nh67ln4#UBfYdpLcPi`t8zYGo44TdvKZ1kCl at gYAu0u2BQ5xl?ao!dZnU*kxHo zFCSNe at m@cEXjsgO^sDp-8AU9qA2lt0M zNSJ?m9lV3IN1mTDsooWdUrrf}h<-ccY_Tet>DrFHTx>pi2#s z)?j3}V{nmIV;{31K{7xs%e!#8SD#ORV+SYm(hBa5ZHx>EO)3j#JPrnbeEgA(s%(41 z_@$$$LP*z5|0{Co{^|&tX*2tdz^l>2YAF72wti?Fr<+NxRpVcY7!kRn0H)sfjlk-}_~s zl+bUb9bYjMxu}x*Xo at k-*fAqg{;1Fy(;1gdFPxSHrR9+&Fpv!EdG|HzS5 at OC*DJ+D z!I%CG2uj0BzihZ5znsC&WPQtxulfwx7vHC=At3Ar9%KqZ5{Ia>uO7~sHFK92Z)Xcy zoOsn(K3x6KUon~zSf8FdTYpc_o at xGqWc8(Z{qx?=AxqsPu at 0l8(3yt!#sb+T%LD$_ zG>s#B_jzaXB!a?t=pU;!6WzF=AcELr;J8{`#1sLXO~tLj0Y1p<3*@6*S;BrG$Oj;E|Yx_Xg+VdNP at DT2#qZ-wXu>H6-_0(uZI)e^y*}& zzXE;2#pQT^M$nlm7|<9x5VNFMhLr&8drmM={47|MaIF6frHmD*bymX^eBWx4 z5z)9~Bp!wxh8Wa<)*DkqTx8U;I243|Bsyhz8ELx<@LG+T at S(4f-86&c9)v%mWx9sg zHDVo!EY>T-YHPq}bZ%~`org-`5wU at CPSUy+Dh(EYC3j=)mYvfsF^`LYR}WZ*|Vj^oSY+M*BVPf(+i)A39}iAOOR;miTJ zD^3q;4nz#M%Zld(ish{By{aQxC1WOh`~3u()r>O$c? z7r9F<)~U5u7fvD9%9oR|+e!amdxae5tZuof=M`T}FxJzwS{DG3{l+KkgbS&P3xW^1 zDQ9s at PSH+Gcc?v{&8scQ)E2o7R9kHeN?eBGd?0EUXpVKZLQYL z7{>GWy?1^rVi`rn*j)y6vTowhu?@ZgwZ8V}o}RJcC6!|Kzb^J9vgGc=BrTf8S5XZ5 zkg3%9v-HUvNABLQJ-~$PtYMFfwB{EhMkn%9B!_*_^LxG+Yiq&L_?5jd-HG);n-3c) zp=uRqA6$rN_dH$*GKbx#zSa_z#>h*ur}vfH^M=G>)duHBD`&xmPjT7&)hzMeT}*$u zvfb at k_oG+eeHwe zmFK#8M->J^xpO9yMTP793999`t|f%S<0s#)JQ#%6r=@3nokK^;rakS8%I(E*Ly6*P z$p#yB_qRblxnv9N{O*{D at UIiZxDba|p~1d6tnlwNN6J*y?a>k?N*#6}@n~09Jib`W z>;2tg_#;j$1Yzc at PFE6SXP{aHHCsu6o9}a&d#>avT>gqs|Uq z5Z}ys^hxr&$!tH8nW}d9d_pIrKpDDjVR>@Y)bEa$G%BX{Mh|r!S0x!5f0S at Nuz=d8 z$!j6!%U1NSh-Z9HKoLM;l50n-p|Xbh!jvBPTI*@I-KjQuP_R-=mLB9n_R~ET#ni5% z`>>Hbt#vHCg3sVy7-CWMN2b*X$&pf^3A5p5<BP469Il z?vH17DiB4)+YkWThgqm=sQBSRT!c=5fQ&Sew!nM~T7uj%MTx;7Z<>Q2-%~?j)M`sP zWZ?~;#Ay%fWA-)xHG zvu5skD(|ATKngT?-5ViBv-an~;C9lA1~WN7^RslS#br#I<~Ao9*au0kKCUQrH?_+3 zCX!5JvXS6XdH at cuk2Ftjf}ejo>OOyMabsk_u!Ogt3$sZ_&HQ+XNgm*SP}~?&J^A@* z at rZp_*(Kk3NFg}H+d=y^BqB)upz^EC_LGV8eQuInk|dmY5<7_cG$MxA=8ZMg0viYw zbhCaF^+d5bQ{w}yulG2gthamMazGXR{mlS0e5j at +B3|t2S*$)$PNRy~?0LOO at 4{7m zzFtsVr+1WrhP!7b`h=0*n}bCY17`Fg+5x=`wO48Jd#FQt?vI&E1^4r;<5pnV`#xA) zFio at srKbZv1V7a=)d)v&hz=MvB!5-E;Hxyr6(+)9;u%EG>5X2ge@#~Q3M8a6c=g(K zs`nvZ32E9(pB#iK9T*rr-1_SYCu0=8ch%zff at nXF#vRY^(dZXzkEd5v1;GdT)QUuwf$1vk9W<)atwvZAiXVmYe4v zt|v_e4k at IC&=Ce-9?{jJIoDle4(^v)i0w8XXznx-C4|iE&$0fpbvy2LjtOhTS$;0| z;<39QFCeA>r_5gki^W-x*fe7j19-T;1DG@^wAqj)t<$#00Va{7=d~Sw&`Hn5=+v8& z5cRmqW+}9D!en98ULE+Undw+zrqSkop5mw9>89h!U05c}A4P0j_N0tUafkAvi}E9J z{ZxkFoJ0=VTjxCf$mqt|ABFZ$c#AaQ3^UogN{4M9bP{&Mq1mPStNad^c~=B@%^m7! z;tU=Emx=w(;7>2TV@)roqM8ra)7Keolv!)9C0q2KCOkkkfGYxRS0;2*7R$&e6Z3vd zJfj8he at y-2faSjH@xhQj at _C$O9BeUMgn-XlXg;*@Q(lX^$36vbr|8YY(L~ikZYfUJ z=#G2s8TTJj^%H|NUh;R|UDAg4Z5CeGGTzgrIqria69Qf|H_xh%ot`!MGbRv1Ky zsI0QKY#xJRFS7nyn}A-zc&Cv6d#ZkcMFxz`7#(!(W#b at 1-}_8N_=j at r-(W4{@wb4g z8yzEzQ(P$#05?uPw&=`=HK!tF&O2$Q3v4{Nr>Y|f-DB`QInC3M)$$hMx+G8pnh79~ILW zvRr5gPg7{4jIgB6F{o?rzKI;cYTX~E$VX^ ze+Hn#6mr+c3f13vnuvQ-RQHUHZnQ$Fyul)kA^yJa*Ujgzmm;Kg?G{ETh&49spYnR# z2(8Qo`;ad00Z5H=wEK42SVE;tWhO3mE>y3dy83p6ndBGpYgYesoK7#O{Xopv{YVVK z$LkZnAi(gQ?8}4(Vt4#}IaDS%ME%}o#|w!@{rFbKhtg;YKS6EFex7+2EB7IGsy&dm zgLkRO&SJhn(^h|{)&HFjy{CJ!Sr;Fm8c{!}a5c|m7 z*awg92$*Zf#&?J-Kaz$RHjHB)*^w|HWJM$V1=I97$f)aNr)3T(q(0{oZ!kvL zfVOt*QSizraBkk~>9R5MQ=GN4B|6y-mo`JzB}$7|4^mIlj7!cH;@oLev2;7u z{2EW;$=9VYX4#v{@XEVwa)iGgp;tayhZ{4aT?e-kJU)K%If?S{n4d*}M1k}2Vnp{R zcVr`dwYtVuj2#`DMjp>R)HewvjQ34 zhJ-=dt3zFHDKJElJ>BO5=-_V+q|3xJr^e4`FgylBQ1g3DI9g2{CU&J(rlwvzd}Xm; z5uZXkZP}aX)d{|jbfc-7r?F4po9+@(`S|F8xqNZ at aFOyXvgl;<3YPc!!MiJY at mlRG z;8S#0ft at U`aRuJ9YRVS!+X-ie6B@{TGzA`dQ(i~`HkzRL*lWx#w zc6CEB(xK9yb5B>FZss)I9?OAgT_lMDcrEiZuAbAhe2R4<>%9vWS1^X)Hug~)dq?b9MO6bEd^BMgMFIXum)Y7SyRqYa z^x2yc(+W2cbjxNY&M|n%T?V%G)>_G at NWIntyy-w~dJA8%yPS6N zr-U-eAr-e=C6e2G2cX*yT+FE at +FSlc41TM+RBx17+`-!p`SXQat;gq#l^T;&GBW)D zcXMwL^?AgV()*bHV4>oRy&ZEax3_BmLS=yfHaraD?960(x-^3jyV8-Cs<%Suj7(dxf|_G(^=g0cHMcYzLzqR@;? z*rw==k at lv{lbzg=fRm2BP^^P90x)kfP1s_LkzoG(rN}W+`0!F_PmfWvhg%sq(?z;T z=w(;zwsnxacMM&XF7j^c9QZLpl>-m_H0kbA!#i##YUrfV$OPzLmqt_MT4Sq at y31sx zb2Do5Zezd9ycH2`dtpo&DgS7GKIF%X&kFugi(@NY+x#I)iBTvqzQNF=Qv=icUvKY7 zMG&XU0t_vc{oV<@4AI;Wi_Dsxx5$X)V*B#6bOvAQ$M8&hEA%paBkwXsu at NWNq42Xq zc31y$Y>#VncH7-}E1Bf-!c2H8Pt-#kIv8+zl`*u(nd#XNxrE^k$)^*3Tsai)!ic}> zYJZ#QcCsjE`}UFPd$a;ma|i4_)D^)!x;D2>7Rs3U^Uj|dnrTlKiAZ&uc*NAJ0Ucy-VT4 z54jwac87Y_ms?mipznY^51BGmrNpI!ZfRpe7ekykj%1SGFg|Q8A;O!^$%!vUxukCK zSL17p_Z(6*2kixWy?b#G&Vo1jEp*mV(%I=K7FuJtIO4}!=2d{Ty z{%QHrMEhvMIPwM4!#8$Zjzv-Vm9mZA+wr$R+!O;&h2({iL0P<256n>)LcKJDxfprY z&D1&_T;RT5(OU^$CSt*B^~his;;gWyxb~*Om;($(#Wf9%Q%;%W7VLM^3sxX?$Us at i z=Fa*VodNC|(cL|!27vj(JO#H;ZOW#H^1MKQosgc6p-|72k#qQWFZDh0SM5;z7dS^T zk>%Xvmae24nV4OQHn%6xv1df`h2*28zm6vtKWE3!gV4uPDQROWkF9x`f;%g^uTmP4 zu|R&U)Q`}sGihl>MW+MhzFaCE@(PaGWj;z9 at esptzN|AJird`&z$#M$e4JT`lYtkj zu}YW-Q}%7 at kB4>$Qn5IqO$6b5+q!o-NpJrOlR%z^%IBwjTcildNFwTW?9xG!6J53R zzL=CjTui2cK)m_!HbU;}iVNKeIBzgqJxYJAj$6#G`XI z*W#`@4~Pl#)ikWmZb4_pN~Vn(wFNu)eK~tX_JGp0gp?eXr&ZJXrBQO-TR2YBP+TvY z7Z`R%DKhVv-6fsj+C0BtH3VmV))U^r3hDA1jy3mwM#WeV-;*)D at xDJ9RTcbwM?k)- z_8W{Qu`E_SeA=8x&|qYy)cmt%BGsU{L5mzlvE|EFuAM|0%=rSe1p-wy%!C^dKeKC? z-f{-1w|XLx9=QZgQK0-6DGOQ^_KWpvl&$Xhf?)bYyQAohBj8sPgIYtS_e21BWJBr` zav~be6_t%kO0*?yk;RWMexyU%BW6Xs8Sr+?i^fBVL?e1NppOpXQkp36f-B56vcktR zE~-x!$PjP@#VdOU`R-y9 at pxPcYn)T^?hp0mp@`PSlgoL4F;_N7R{Jd6yVjqDukwlcmpfQ~_;)JTI;nXQ&Sw zvE^KCZS#pK^J&6`K4jtgNDcLGP`s?xCVD`eS4$cd^lgIZb;1PkC)mAYVa}#vj}TLq zi(tK4drFZ#Jh#L~ zt&1yxM5r!gVY@~}(HQ5}pr3V;b@<5$!&j at To+rfOUO1obdNf~dr_w)s3m&{+E|SWyt3-2mKOzUO>!IAGh%_sG|W>2{yZIk}^-@>tJ<9z89!ww!}<@EGnd zHUT1Eq<;32TGjaQqg}42w|%d^omk7FJfsx+IU?H}JZz6aRcmt<96g70L8dFay?_d2 z=wx}3v%eUnCD%P at 59ehrD$kG?PAu~?g9MLEmx1oC2V0Ax1^MMW)SgSnH$jfU4C$jd z=m(~CG)*k`+QdR3?LQYzA}x%Mx$DVj;Gdnhw_(r#SSdI6`Jx1!qBSu}obd>`k2RxvFU_!<+C-js z&wGXW7yiugDo=lou&~y!s at j~nLEl=~GVc(E{(z69ejo1f%;D|y#Fw?oh_!}FNB~f$ zygO0Wxw^7;305-e%$P$>MBSm^CsSk3A)15e4H0FNpZ&M-iFwq!;KF?0m`~aOs`8Ig z)p_~C at h$hv%xde^oSZS=2I-oFrfD-5NYH^$lI8B}I(#4AA1ld!oy~Dh#fcsaTQ at mc z&+MzRr!^?l7Y;GIV+AHst2+&NV=vpVtOuLIB=B1+n#;0jO1}YxX;TbBTigQuTD{0wI7ur3c z0e;bMF at Jh-MniT4a=4$S?=bsW20JWrm*0|t8IGqsy)iwjVuRTcr>isOJyt?mv^6DO z%=gfzSAkMBQEVfJ%Re(73Zy3GJuey|!Wq#=T}nR?0h)6sGU&~!K4ZOmw4u#NlK7F^ zr_DEw$e>B9uO9~R?guX0=xg{gMNqb8V)x6FNfZIJ1D)wA-N0V}IVii@ zB`Fw0vB$NquD5U0PBQKFvA=|o_pw_e0AVn7{GLsgYJ1~iBnkanOx4|e`%3JcY;8=6 z_<8uCQ32`p71RqiNcPv`I%Vt+tK?TYmc~M2&;4o9NQI2|GoqYH)Xumg!q*SOw2__m z4$GmRl0RAk_;L`fEh25FBf*5p#s!lpp7gizG`GqtqINkV&OfJtHFN}P)Un3X*Q;)} zGjT3nhR at _83j(N7`D86VrT7rYEt at GN)6{mAO5`X~eA21ua{7Fdi|ye>2?*8PvKE-u zuN+Mq+I#y at H&x?DR1x2r0PEBElmN*seF% z=Kac{txHp*xGKa?gLzYf#VVFS?+!xteY|(rp2|Gj$}p|r__B**Z#fOw?7Cti2%G3K zpoip+f)CdBtUTC=Mq3*iGrib3$o={QE26lyVLuY{T66p4^OnnS&8liHv>Tqfpk=`w0I2J;OpQm+Z)}Ugxj2Ob=Zv zh3i`7WCzMv0!8rFw at I6G(}m?77WR|9d6J5**#T}?X|5*n3_hM(wZYCNq8fyR7^Tp= z`+mKlpDE}^q;d^jP~0>nKSTjy8GEt!9UsgeaLrj*#J2rNHV<@4a at njeuY8L36jY;T zq`)H4?o_uokjPQd+lrGoSud{O)ACsGhvpA++N?}3ANG2^Zb91?F^A8X^3+j<)mJU4cP at o=?Ln6!k=0sF*V5ZpF>Kh~=v~*K zJwR=d-;R+6utavTNc_h=jUo>t-<}Gy%B14j5$vKDvIMR7qL^$1`K~m{hTpVNFQ>#G zyih3G()vavztTdjPkbA)YUYa5^Yd%)N3olv=sa3TM<6XSiZ5U;oHFOYI=^aEv=V-5 z?<}Qv{Ns6&&ZHi>sC$JvAdIvc2BRU!IrGUlvg2m$uk{eEcT~`1m3(E@=tk-!6klp5Sfig=Jb9&IH1dS=v^% zSk{`ab+ibQ6B)Rr_~mGUu6$S!5RsIj6D#eq6}7n98kg8MXeoFg35<*RliV$Z4gl<~PnF!X zVqp1x at E!Wi&0zZN>Dsy968dhbC9f4M$_Zl}38pb3@)9xHYh^%7UG!_B{BF)zOGfz= z9O1qa at Qux}-$z?c(Gw at WJ4`2qgfA`BU+gwkn)Tk7?TT)p4>scQ?4mz#YIPp)Q`?Jk zdfV at w#d)QsZNg|AYYq45A3k1T)tvv;%H}tfgI38oma_H^E$_C4RZI+jW(23OqSJ|< zHg|0ax;+_bq2hdPq>4h4x6WS2se0nNXw=geka{Vg%kkbW1}}>{A>u{h?*r|UG{Bf% zGRxqDniP-juj`NP@@!vyBK5zGashvfn|yRHMDZOP7f28(Co7EV<;Bie_y#GxM(aA-%3yl%5eJnV%iF@*M|MCLQ~BM>hmud$V%#S~>cc!SWr6MR zPy*jk)|%N7X at cHngNEEPcx%sH?o-(8p1|swRx-KuA{6ZV&>$)VPfuN zYQf>{;QY5Ago**YolVT_EZpf$Ev#%D#TkxTIvD6}%*7eB`IWhponq z-rhai%uLvv0U+^E%vZP!;)>i&|23PFf&On2cRO(gslO_u z*HKoZmvM5npy%V at W;f&F<)h~l;NTJD5f&6+qt`TXr+;JONY5ik&%?!a_lHM>n_GmB zoBkg!28oAvQ(~^>mLeLma{s9F?muw`Yj<~N5l&7oFE0)+UJfT$D^6}su!$dx^hqzMPG#g_o17og2N3 zCa>6ECI6e~-?jd`yoIcZyM at FZ4d$`*FZMT at 4aa!10I9NEk zyWKJ4{_o7p%|tAnTpdi at C2Sl_tSmU49j(MT|2^|RuHWC+`py=2w&eVmFaNpf|Js%R zS0?_={r^h%zX$zO$#22^gX<5j-y-l^;y>>CgX^~l{FeBSyZ+$%EdswK{^PDcxPFVk zZ;Ai7>kqEqBJf+{KkoX2>$eE}miUjm{^0s80>35xa5(;QB2Bza{?Tu0Obbi@h1#kGuZh z`Yi&#CH~{CKe&F2z;B8Fxa$wD-y-l^;y>>CgX^~l{FeBSyZ+$%EdswK{*Uf@`0tS( z7LIqrJG}13am;q*e80$t>Me6(Y_h82TXo9F+zh_2ay+|n(!3cqKe&o36GF~G zMaJ}cSO*yT=l@>-=>Zo04T9D!qg4>%VwwtVNC%>r{tsnPpg0aLN{2D at o^#KA&%M)P z^v-A&y>M3V^PKnm4!kk;)Y!!fBfuTt2XMDATbyt2$M%8eu3f!Ot+qxkKLwC)7i0Uu zrw0e3OWwUH?Gj`Eg4=6HjQLA0l_R4p6JD5r$za;C2Sj(-_a}z at vrP;(Qz! z&E==^_aEG2ef=ka4WfX)F_=(CFu;MO#me&1V&&n$V1M!3_pi>!^4qhSbRWs&AzqbU o?t)>@#zC|jH-TPYa_@@%2D-C3|D#cqjQ{`u07*qoM6N<$f+;DDivR!s diff --git a/src/public/images/icon_migrate.png b/src/public/images/icon_migrate.png deleted file mode 100644 index 05681556a7d0050cfc8585289796ac7a24380f16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 354 zcmeAS at N?(olHy`uVBq!ia0vp^{6Ngj!3HE3xL=O}QY^(zo*^7SP{WbZ0pxQQctjR6 zFmQbUVMeDlCNqG7G9|7NCBgY=CFO}lsSJ)O`AMk?Zka`?<@rU~#R|^B#xt(DF$2|! zfYdn`r6!hS=I1GdWag$anCYA88(3&>pSl1jzsJ+XF+^ix??pqtCIgAKhufQ?^c$Jk z6+X&sdU3+H;L2=+S51 at U4jo~(c=0N&bHT+wd=4gUi{dXWefxQ7Js0oCB=cl;b_<575o$U(${TusNATmJ40nBW6SZM$#*+mchA at Sq_^Ng^X{z&SWm3C z-Q=^s{PlJX12^NjB0Aw}y5;)}8g{<;zopr05?^MJ^%m! diff --git a/src/public/images/icon_move.png b/src/public/images/icon_move.png index 20d429da54ed429bf5b5763a7ff473e5f601ae27..00827c5a405c94d88f93bb8e7febeb35a2a6e2e3 100644 GIT binary patch delta 541 zcmV+&0^_L6IRSf7?k! zK~#9!%#^=N!$1_rb4_ePDy at wLaS#y&!NE}wDmW;Jh_tTaU*O{4A`UM86%OJg6l?`S zR|OXl7sbI at DAcx5hYFfY&iC$e*XwVQ4!-b``;|}L_r1Fi#+cCy3mH8!tJ5SQ#B^Qv z+%(NpC=?n@=Sozc&!vZO&95Sge^{2ayna at R`o8~`&m^tCO6$X$?=d5NT5f`6^5vQ| zz0*pa0QtPRmVHH-12PkhGOg at t`~t&oi3uv|K}2|=t(+7GJkKjY-bQp7f%3DZ*yh0SIS&F|WtZ`-DrBV><6f>J;K{aadlMS5 zHoM${9Nf{Msz`d+o2-JIb2^BWRsw%-$c(h8*dC0Fd)lA+1jwv}z(=S&w7k6S94w9- zc4GIDQA(@Op9Z&sNR7IGSr<^uah$7m5FJFioc at 0BBzQQej><{P)7`;L+-yPnyB$Ox f+W+;>{t;jRmp2R?_PFvI00000NkvXXu0mjf4)*&F delta 540 zcmV+%0^|L;1h at ntiBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;Ef7(ez zK~#9!V*LOAKLafRBR)x>jQh41I1ZMwSWmnaBzbd|Nj1G`1b1` zL(a~342;~u89+-W;PVMK!1U?Uf2Vo>QNceTegu;I^XDHJfBEs3A#>Xspd~_Cq*}rV zGSOqnbD|V;u`)8u@)c$H_vLMmxVU&F$PENj5y%3U`A>=VvLGiD!!%zp2G-x7=L-r7 zrUHfj612d6<|C4l7!xp-_NU4H1LhGPAon{y3&3Id=l5TdEr0 at 0s``#ke=XR8- at pD5 zZMXm at GsBV?8HNiNF6<;Gqe3kp&Iepm7r|6?{`~nJ1_lQ1 z*d%qEZ=e{yF;kJ@)`jES?d|PzfkLl=_$$Fk24Z<2<^y78WS;>woz|?s2Ig=A4d0fd z%y8=>rs2etMVvs)4+>r+ax4QXhg7OA|JSX*`v2L7U;hssI$eI3Wud at kBnzCnC_K_yvgHA_ogK>I0A^98eekg5tlls&L4!(P&;L e)7k=n00RIclt-#p*McGd00003S9EaB%@h)nuf^3#cAju{n5V9sv3t|*vRj^u%)+JdWCCSFkY64mhltU_@ z))uu`kE*Ds#RI&mfY6Fs6%{SkquQcUtrfMGM_o67fIfZfGavjm^C6i`-v1o${JzeJ zkrBa4(j9R}&LIf*Ae(E*;_hT}x6-)VY23}!dv(XTx;b3kZ0_1D?&?hLN-}rZ&Rv|r z)mpg=EO&kych1sK%W!8++!<4Sm9BPYRL%Cd^y0HMg~MkTRnI6qVcvM`$TFN-d!%xS zuwt=)d9Lr|{K~TIA%_-uAI$PPu+U?CUitn^Y+r_8Z#ud!U9cz3y=1}Q;`wgcrKP)5 zT~!%-74wT_b9M=57Wvq>W9(Kp%jN;b0++-MJ at xB2jziis0oQG!b_^O$vLyel3bk8E zT at uBjaa4lAtj6vhD8*2NUX4u%)Jn9LFe=fYNnxnyl+iJ|lq8)}kA;RftL%i`WHC`J ziP}v at vz4%`F;Y**Q3T(24C5Huh_Fd&Y?$K@)Ujq5%}}UZEEVY_0diCxB$g>;N=1+m zjV4)i6lq3f3REVM at EL#E+7LyFiaQJ1!MpShUtR3fD8b^FkMg=kO3eVrVHu< zG5`d_bU|G}27q9gE~pF001yn*1$6-#0D at tdkuGgzw_JeTff%dym7tmm!Gd){prf(OBa8MvL2 zf3b4K^1RPKTlVSFC5v-&vKM`lwJH=R%#>uiZN_xg%1pD+W|J}L zBST_BJf+vgkyAgMGCB5xN$*db at ZR{C=y7AmygOPO6*+38W<K`50FVExL73g_wya%eQuk zr;Z)kw?h!Y!;bB`AVU$Mhbt;8lsK-8 z^zP>6e5(3%HBm!E4(Z|D{oXM;OMR-Szr=G1#bGVdE;0lB{HK{<$Kk$VdP)|rb za887Rl#re{B at s$oXbq;qF2)Ej{^~BU-rc-28(Tn at NXSQNXlsI{hq+K;BbHwv)+1FRPC)gea+SAe-M z0jUQ|E5Vt{iElog3~M8|dXP>=5RU~=tzDpa&_aHG%Cajv1IBN!3fB~v25b{h z=P(E~b=nviO5nx1KHgzm0}4aw!MJRwrJ{Kk`E~KOJ z5=f}l+dR(`7>oLLi{++UeAcN(`F!4WW;eMrJ}2E>w^1xNc%C;A&BU c at J@gM08VUk9{_Eko&W#<07*qoM6N<$f^r_c>;M1& diff --git a/src/public/images/icon_poweroff_11px.png b/src/public/images/icon_poweroff_11px.png index b0e0d7af80bd1205a2809be0bd3438968bd42b6e..34943709070f17f429ae1be8218feaeadb35eaaf 100644 GIT binary patch delta 417 zcmV;S0bc%w1mFXZNq>S#L_t(|+ANVjOPf&?#-DpHNh%~564AVkP_(@L1f3E)C}^TX zaIlNu;?Uq~+}fc-Gj!;8PzOJNQ>>KGX7d{uiQtq(s<;U0d+$A`=Y8XahvzxJbKw3{ zgS8I;7z!$6a7&5?paKO9C7(;<2QzMzVrXMDj4?HBbYHwF3V*WIsx)*UYHA&GUDMh? zllP(b)FDq02l55Xe{Cl|WgbMnBOYq!sO6oY2(4oMahp$*^sR zQ2ca&N&gy?@hBOdjE6}bb7#HCHMF%Z5FuS&#OU-GF0!~gI*gkbpPnS#*+{qxw6k_7 zLUcdIY<&xn?0 at pN`wLcBuD+RY8#zQWXZDK)xuAcad0j?+bqz?R at H`k`Zs#NB8ryj4 z_3-%TH$2ms>VSQ={{jpEELPLI-~y2#00000 LNkvXXu0mjfn;pc> delta 455 zcmV;&0XY8P1BL{UNq?wGL_t(|+ANUGYZE~j#(y)r*%&u1AxWc>7W|}Qi`IipFM1Lc z5l;?SDnbaobZfNAOE!wAKhA z*d6o;Hh-YhxN&Tu(GhF2wYux(wq|DMaH=&#(P!e}6T+vDAPh;mT{bs9V>(VtDdbA| z;34ExjmhRJ9H^n=5md at dJYL1E*Qr=;eA2X7F6_&bzkHQ6iby_mkbaTm(>f~X;$69h z<<=+d;3|pn7Jtq$eESNu)1%+KkNVwZ_~td<-06&4xtV$NCo{Px=TY$x)qeLMo|-_MG0xDr^WX(Rkr`KD1~VIopSl1jf8Eo?F+^ix>%_CYhYSQ-_jd~F*e;0K z#-Q>m!i90+q?kh07B(kYg>4LcuhkS*%ksDP3fec?oMb=!@7YgV=hb^k;wxYF$j!W2 zn##%Y%I-tpqyvj2HpZEEBs4IH?MaJ0=h at 6M&)<34>Hm!kp;tZTe`Y9{?YnsM%a*$j zf0QhIn<%#@PyYO-2d1+&dL(?%N_!UaeqPM>kM9y2B$9b`*12}9DArr{tvl(8mwt%O&g2H=46#xHHTVQw>}ydnR2`)W&=+6;b!QIlVAJH~)uC&kFmw+% z(WQ+Es^7q at 9mKjgu)Okx*n2y&O2}P^lRjU-#(qP4{z&Dc+C*Ok`c1?a+SP at pmk>iR o1!G+qKK~b8L$Um3YX1o^018T+8u#h!jQ{`u07*qoM6N<$f^`*Y`v3p{ delta 235 zcmV#X*=6tN;oaeP+7?sa*^R zFbjyU0P))YTT-9F6=P9|43+?K9}`fK6cEn@>f8+!a6?kC6N;Y$aSRZ9GXaTUAT|cc zB5MG$J%Cg$5O0ENmIWy`11ScY?uMkH0?NJ(q}D+dbAc3pgJg1ofErYx><*|OKpH^) zI19w5K#Ctj75D-1WT2uQQ2s8M2B_k-jKDB81Tu=Cp1=m&piYB?Gblu$9 at PQjG;9jN l09#CfVh|LQ=;8nY1^^`sfS#{)l%W6s002ovPDHLkV1hQFT+aXi diff --git a/src/public/images/icon_remove.png b/src/public/images/icon_remove.png index cf3cdf4211bbc410986c4f007c0fa7ee920d49ca..3727f26d9c1bd32c07c37b6cbd0b24f88ed4d674 100644 GIT binary patch literal 1200 zcmV;h1W)^kP)6m&&cbVG7wVRUJ4ZXi@?ZDjy8FEuYPImnTCb^rhb3Q0sk zR5*>bl+SA%Wf;dl?>p1k?9A?%?51?L38X1lga!$e6l!igsZi|NUQ+OoOA at 0!s1U0c z*MQZN5L!_G1?$1mf-P8cF;pTRTI)q5X%lM6#%aSiq`r^W6XDtwzscbxOidr-+lX)ebcJVSEuImC&uh*&7YJ~MVySuxWRieH)|H;SK0Mh|jkHO@*xp!Z) zZTo!x-o4|6Vv%e%i{m&5ArL~~I1ZlYkrJp;{4p6-F*4r;T zj`LA2pF7mQHxEXjwL%+%)(WKz#%Q$C0Ho6{N~?Uc(Kvi`Y;5J`4>x}UkN~Ap$(NR# z_IsZ>WZ5>u!v`t7S|W;L;wU1DVv;x_iXx&oqEsp|JbVD#w()y=4 at pZ-mr5nS1C)dN z2Tppfcf#4 at pp9m9bQIThnVg&?mFgi*65=?fC)LB`F&9Izx{BRC>0 zt0mByVzJ2lhx6Udr%s*b)aldRe13kOVxiFXS0gP81V;e71%x3fCE94THfW`BdQz0j zWr85U^E^DyBM1UMD3 at _ksTNFWw9!Z at 0fst2sg!ENG{zW=G3>Ey3i}HGc=W|WfjySp z)oIo0yi$sehcu&TJ&vNT2mx6?%gpOD_`XjN1O!2V at B7Tm%(UMj7+U%`j%Y^FdZ){} z5r(%LVFRO0OJ)pHQ&ZhrEi5dsu&~h0r>3Vc+O!rBHX1a- at HU_&kOV<>saCI}jYetB z?Ck6l4RF(G+ at 3V^^M5sJ_Kn%L-->#zP7qX=fW!hstzO&6=kp`!bo!v_F^ zZf=fTUmuojBcwnG$)!tQGCn at e)hkzd^k|FSYL)vBe!sE2y!>ep1ltxs5ClnK- at ZgE z^}OeLeU;4$*RNe?U~mv=NiYTs2r2NhK9|3~%=Y#+Q53PZzP7qqsa(8u>();|(`x_J zdUbVmy-+MBjb`K7Y{u{H at 6Q7QA=*6C@=R-um+`3A>fF6|@9x&t*5}{exN!-n0;)3{ z44_t4R({RpavNbI%qXRXlO(|ygOCEH6=6MOXJ?1aKQ>ugUt6qHDxWPbE`9~<05Lo{ z4<+CLelC|Qj*N`Fl+9+3rc$ZHwrvjpBuR3=*=+t&tyY)s+`043!-o$a009sI`tQI_ zZUbq+1Kjo at cKdtM-dqQ2K-jLC#{o|ZNo!Wx?IqiF-3BCp>fGvojXwb at 3-zTWq*L(# O0000#D6d34UL6iTSc#sh~t_ug~A^E>B0DBHH-v_9%oVJD6E zU%vAGP$Kb3TbO at 4z_Nm->r&yk at Ni@O!QFf|{j=j^zZNET#m)>TZ`?lD+dInhJV#L! zpn8wT18%n)N~LmnCzDyc|I5OsM+f`QPl8dM at tzCA$?J=6^!1%@?=BqDYdU_iCem{XT3`6=~fB889 z>bg$G&%|OWTu&6CIeKq-y}mf6;q`h+(Ji4Z*pXPQ~P?_7XEE)l*3hNUL27zT+n4O)4a#aO}_LFvQZjO`y4Pj{H=zv8d zhtzCuFJCZCtAUdUL@?H6VqyZg01Jv*BklP3I2p%)s1D6A%trp{UZGVpt5THLD at vuv zFf4JzdW?;Y!C-$MJbtnb-+p%+{`e~m1Lu1ol}ZuS7#LwnwOo{?qjlsU%q+=;hq+w# zk!@RK_X2@{Q==#W%+Jq*D2lMOv;>=58R!%RGLHc at O^3|R?ju}}9IAN>SdJG)N3P$z zmrN#UP1F88d``OU?d at bCp0iS^^ztU?dL5RRmuoA_OCOhIY0+_4TZh)xwc63KBztLw zxjHZ~K;b5YLLrh0))8CmV~Ti$R##W8-`3XdNJod?JL?rp^Cb*BwQ6NEpU>Nhq7I5; zl*aTBfXYw}s>^0`u(+^LTKje7?(yON9cNw9vBs+x9qY&7g$RVWt3o9D(Zx%b60vxk z54Q=Pic&NVo*&BFTU(D`96bA>S}8wpd?m+fDCGa1AO!jy3py5JgWP$y$J6gPagOw| zX&7l$DQBFyN;5UR1v=?*q?!+auL<_Gj*w&ZCIDOW)d!M#%_~ebK~$@*&Gz)(`jftY a1Q-C{5SJRa&|F*q0000pSl1jzr)kTF+^kH(n-5{4><_1rmKEu>|pE2 zY_RLdVfRo-aeBkX!C~O*;KRGcfmv*$;(-UM4^)2tac=VUi#l6vez0rRr`H?}?{{8p z%MgF>+_0|bqiy(h>GM(N#0q)ed}R+5U`ece9y7V+^v{IGhcz+WzgIt&+HjcR at Wmq) z903_!mAB8xHrROcu6pXRbdlurNq?A0L_t(|+G1cp1xi3{j3&nL|Nnn5Mg|5zd=7~72q|_0;zuBH zAf67yGl19$n__<;{svWujDG at gFA%dKEA|B9Cs-82a4xztjDYw$RB{~pSl1j|HIS8F+^ix?<7ON!wv$j^L4pYq|S(L zTd=6)`Lt8+A0!J>3t7Cow|z35ppmiDp{lEc`@$|yw}{s_mnv*aQdRtU_FcyP`9GC& z5BZ(j$#LPk?e9~Ya`u_~PCg>>+=_L>wPTAk42~%%g at n3>hIViqlVAuD&Cb1(KWAI6 zbgyBHKtQMq%X`~<)h;YR1%}5Ktm+O4U**NoD50##;==O$4v&xT^3UYnNkvQn*Gp{*WCE|3cFTX`KKTDt9_x#m{lG9_ at O1TaS?83{1OTY3 Bp<)04 diff --git a/src/public/images/icon_selection_add.gif b/src/public/images/icon_selection_add.gif deleted file mode 100644 index fc41da2c0ce2fc85d3a8c7282edf0f33bdaa093a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13127 zcmeI3X?PPw7{?a`!4?k$4^VNt^|r}oH%Z$pNh+q4f(C(B!Fq0YC+V7Gcir8Zv|d#} z1;zWs`@;LaMaA2SH>h}m_lcr{2YAHUCM1Q&2cP!?-`@F36sxXUa;7IBYvfYI=lQwQv!~YHEa=9*q0qW{h-b z&D|Dh>7LxGbf=V%$~8nQ!Z|6IF*C%G*<2>A+fpvV$*R##B-(d}d5-NvoK%Dx=l;RE zYsL(VumP{&QGEUY8>sb)bz-QlwuWty9d?qevtk`9`h4_5lmtNv2yC%&(F)oNTWUg@ z*4R{Blm3cu9gbs4JfF>Gy;;B4u#&tG3Wa!|$cv(f5+1utcjTN$x2p at 2te>Zm*ovi@ zj%MhrJFnbsbUG1^a~CSL;^Abow2*Fl`wr?=j0~TXO~B2`i=iDFy7`U133dE8L7 zMAv_m2L&k at D3;FjXn}GCQqw-?gX;PtqhqbjPO7gbkgk zij**{jO;|UjGQEVQcHyS^57=-SJ*X;1&t+N%H{g4m#%WNbjsd0%k+gwaS at PQ)P=f0 z20$>T3w41EfM84)>H--6!I&=81u_7FF$Xx= z7}JHiKn6fCrVDj}41i!v7wQ5T0Ku3p)CDpCf-zmF3uFKUW4cfm$N&h&bfGSg0T7Jo zLR}yOAQ;nyxV^;chh@%d+;ezIcu#~*$8!Tawmd-t8Umo9nh%{N|u z?bTNnzuf!Mi!VI?+_TR-z38bYpIG?#V~;-a at IwziaQ}Vx-gEa|ciwUPZMWXC;O3id zyy5!muD#~!tFD}X#pRb>ddbBXU3kIy=bbz6oU`Z7IqS?bX3v^=`e{9nnym^@R%(B?jqVFnJLHDWm#azZpvX`V zaPNiU24%<;6$iNY-g__HiYq+VgrxBC1E2p3-u<5!$&)AF|1-YN at 9i^eL_=*r?!%NZ zoeY!9<-A^RWv=)5Xd_!M+cNzQ)@4muNf4WDA#qI)aU0jJ<5*1%apU|^Pt=T%R&98P zMVdNBH7gwnC7^P3;fi2Z%BIW|v1K-!O6qAT8{%ZuXdx2qJHtH3b|H2m#0_=+V4XE1 zhDBJPTW~2JuaEUryTuwYP*YvSHpwT1%uljqo_dm2EX}kv zLuZ|N+<+rg0ESmN_>*vKe1bV9@?fnYN%SQ z{eQ~+UP%xO<=vn{d60KRbQ9BM-8s`X<2w?jDn(yro0aUk7FFR%lB9 at kr>QexYiFt= z#SAMY+hHvw#|a7}JHiKn6fCrVDj}41i!v7wQ5T0Ku3p)CDpCf-zmF3uFKUW4cfm$N&h& zbfGSg0T7JoLR}yOAQ;nyx`Hs0(BO1Y^2T z7svnz#&n at BkO2^k=|Wu~10WdFg}OinK=5|cRZ)8BL3H}OBSYVD^vM19?>~S4wdv14 ze*f*)Uw;1S$BjRH|J}FWeErpzUwr=Ar=NWM(T5+r|K7Xry#3ajZ at m86tFOHL(u*%V z|J<|BJpI&@Pi$EK_+yVgvhLxB9$fptn$@dTu2_EmvZYHF-*@k#h4GDnKW_2_;F*$G&hYtx$&e?(GyP?Ib!&*hU4oa z#|=HUE*uInQlPe`+VAs=1+7>1`<1cM^tzE1~to6M4=ZN?-OQ_G at 3q}3u~bvkpCj!9<5$<(Ap6a`Tc z5y5?5>%Q-z;=ZA{EAIQgpaKFa#yd?&3Y>%I`@z3&PEK-j=lSmP-1qMtHKw^CqEWUt+6voRLY~mn zT$+>qi*TKeW63<9%jJAIzt6Ojyci0FctPSN$x8`uw%c%&yw}K%C=RlAoFG5~@xU8oCW00d*YP#4Gm2*z}wE|38bjOjvMAOj#6 z(}lV~20$>T3w41EfM84)>H--6!I&=81u_7FF$Xx=7}JHiKn6fCrVDj}41i!v7wQ5T0Kpqgm#1>mgBbLBM~>d(s4D!s=AXa+TD at xJ zpDUIx`{VcDmj3$7&p-Y6!}s5P`_0#1efh=bpMCnt#~*$8!IJmid-t8U-+J?n*B8I` z>Y`U(e(A**o`3GyXP$m);ge51zTmM(A9?tp2OqfqzI*Sv`>s3hxc#?gx%#RruekiOOE0OQOL0ytM}&u>XGh?z8t^Be)uN&pmeEZP#6P-f71jw%=~s z;oA(`dgxYL4)JU;c+lnpt2Y}^#V|FitC>MefvIKa<6e_t1`Mqp-n(e#lF75?E?&_- IdmwYre}d~ueE)jg=CK)Uj~LMRR)HJ zW(J0z|AF*N28L1t28LG&3=CE?7#PI!C&eFi1M1QCba4!+xRvzd|9^XC!-{8TX8upi vQDZYYuwq%_n$C~^|NmFXW&*1F|DT!Rii+k=mbK at X0=W#Hu6{1-oD!M<8}2ZN delta 202 zcmZ3=c!SZfGr-TCmrII^fq{Y7)59eQNDBcm4+k5N%olpQ2S~9LJ9&n106`5$O2F>uI|c^7RHMxTvSDVDK-~BG0DevFPf8BdQTZDhGwu$Vum&+dtXk=-FFU&r{JGraH+|7#_ z2JyFz6XZ!D#Bf*dAu#^ZhUCE`gB(Wk&u2#N-oCzNGele at U-bi-W47EpVYG4CjrjO5 zKENH)j2&RlW+yy~qug95t;5uBh;L at Im3i$wkldCSW<~e}P|6S`b_Hnaf3BT}d+Ar; zZQ-$vQ67J-r9Y6$f=wjqY5*s-1c6Q+(NGC#@pb7V6el0R?yhdw+uI)#+L0Dv9Umw| zC4|=uRliz+FY|Bgnj`O3l?YU}%`0kJ`&aYL4h`hjou3_aa&N)>X|G z8%^>kjx{hr6;>ACTWPve{WkJm2Q)RDmonjG;SD*>IbsaV=3%z0KYhQ at _R%_qToaA&x1A<;{Zyu#rPwGG5Sv^=i z2vQLQYXvQh)I$x5Eg=TlsrSAf;*IEwaQ zr5R{w3moraTz at FsyOT($trVrR^NIY`o$Y=ZSe>bUwb#1Bp$sJXa7biyZnbA5-oE+* zPfKfeszL!(@=?%$v+cktQPZl8=51TLSXjaHCs`D~{-iZ!_n8U-P6HeHf5vXu1}x&U ztZZx|_n}C3f!u5Xsh&Mr5?sgIbrKSg)~o@?9q-OD*- zCua#mvdDpOY-_O- z?%^u92pvR#^{0GkY~<99oB!j1U;KqJ#$=|L%Kaprd`9 at f}*VG*VI6y|B&1)w=zShb!YCKx!v#1?7D7I+Fj1v``vH$eCIoJXBYr> zviv|nYD#jsVHgF78 at BCSwm7dne-Ws;t3rwY7|Ew9j@;{eaZ@@xGzLBG*JNeja9iMb zSrLhtD6vl=g)x at z&sqV;>>ZO_zH%*1g*R?LD6Bet^q*u>$~Ow1Op6DoTO#*4w&P{T z>Z4**z$-GIv4l`jamrA0F_AN2+ivO)jVE^VuVJJvL`sq`pB$kI5W-O{e-Q+v6NT-; zjky^{=glj6j^*X=_o at rH&|-bQs2iZ9&B3JS4jXkzs>ML>OSE0CLxz7oGP9P&8SORA z-212?cb#Cycv>|_!g$yHRIh2KI67LdG+|%qR_xumRj(6I3pl4rsy$&rGFOdMzn;f; zl-hbF!GPeF{zF$=E4uIBe^A{!n7SYbh84!S%ClPbh4a;DX{_=1l>aWd^4sBX921UE zuuWx=h3wol$lJ6{wahe`c0tV)(|$)sCrWqj(fi?{AWGKdqUBO;0=W>HTyjM!2oY5v z0)shNRj>g$dHG}7rFd0Aam at 3d-}*G(1_vjr7j^U?>Eeb8OkQ8}pWC zqwn=AJhCq@%#=@@oq z#4DHBf2?tWAJlApjYRlgKe?j0xj9SCQzyX8(pJwa>TgHYL!Xl3OLrM*W?q3w(JsdO z at l%+hFpa)`2|0R|zbgze{NG?6DIqB#XL|*#UjhsO-=fbL@}u7G00000NkvXXu0mjf DRj#aY literal 4228 zcmeAS at N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5n9Wp~AN+NuHtdjF{^%6m9^eS=-fVvqNZ0suv5|gu2OB9k) z(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ^va*VFffGH?<^D zp&~aYuh^=>Rtapb6_5=Q)>l#hD=EpgRf0Gw!Z$#{Ilm}X!9>qU&qz1fz|2^|)L75h z)X2=pL`T8Mz`#P^z+B(hK-bX1%D~jh#83eWlHCStb$zJpw*7iAWdWaj57 zfXqxx$}cUkRZ;@VD?klTNrszUP+F7&HaR6(KQ$*cH#M)MSl>|3P#;-6FeHL9(=$qn z;o96Z~cnI0-zQH{UWd$6rBYb`6cI at QE<80UxFoRz>}hBK!5w7f zSXz>iUsN2BUz`aFN}xO_gcWR3lC2>A1al!l?wC^o;X$}LnV at jC%1O*iw^gdpO-W5l zEX^rV(ueBM2gM3Zi;X_2fgtmfi&7Iy@{5ox2u>|TwE)E|m at L>VWX&MMN-|4wQjv^; zSqx1rB)b)1o(&=-LyLj=F(kDpx0qTs;WXO at Io_?DAwlJw56lP2C7yX{`QT)ZswUGh zrO36SBr&B3mJKlFoij at +amxk)OAc at vz+rkoa()UhnL-jU7Q;)5a2XzwniHO11S~_a z>UGUc%)}=jS_G2?CkPvG(n2Z#fUyA)0~Rd6GEE;|s6kT`wEUqJ1r9A*84fdd)Dl=o z5Jis$7g50kQ#2Y}u#g~%9t|#{f(fQ*G`L_PK@>e2Tto#EOcB1|;zD$bQuBcA<8ol9 zr{$vbQw9d6Tb?eCAr-f_O!fB=36wd$KR<1bN%_^QF at _smx9bQpYie^@vAPOKmaJ$F z36NFNS{Pi?+0=J+VY2J;CZ?_4f+ZSWygq at 6{L9vAzPoj5o!;(q>t4T^U1z-c^1D~> zma)r!e*V4g{oeEMzt`=*KRa>OvP5I4+a?=Szu3Gxk-6}382 at b!gVTYsv(`T~j^J2x z-zUD}SDN{U-$CzYt`mPzTa*?XP+LCj_ at s|#*nN8?+pb^C+mkp;G)`Ejqc!|YjGoQB zkcJZ*6y20B^7J27vb9*Id$wZ9lb$bGl0TPe8$4B?dH7`vThit1oTUf} zldp-p`o^XHV5GJvgSeJf_e`G|6F>SKEd8)*X4CoPg1qUOeCHYUCK=0~D!aqgt}*-X zh47Zz;uS0GlSj_r&_z)wQF~q6;)8wp=dCW*{1DMPZSmtzKvnWb z#i*ADn(TS}@7os4tMOVW5nJu>L&9ZOWCn(>b6~bm^#-t98Z40d2x at YnCEge zi?qKRLqi#@Y&pbiwpxXRKH6~AgXKv?fX{rHXv>^QT&D9Hbe8^2soNi4U9s)ke)$=9 z^Q3P at pL(!P$Uykn49;2V>-Tv%)$VLKsc?MSH0=zVs at ZE_^C#7YtZ0b~o&KSCB8#)l z$-021Z_B?lA6>NVyk7Qxk(+zopr0BEclmjD0& diff --git a/src/public/images/icon_start.png b/src/public/images/icon_start.png deleted file mode 100644 index 6d0fa99563e59ed316dda79097b90525331c2343..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)ckWXt9Q4~kdd-G;GZ7f7Ot*HqX#D%L8#hPLT#eRUg=vwHa3tdPT`4~Y4T=Y|9 z(}i>suuvDt#<&n&xKYSN(@B-4Lo$Ef#6?ZjBnK{B?&Wa#UBMr=s+)O3rsX(Md!w1D z5?80P^04^61yH`(_66UT=ILw{VIf z((;5HYqeKc`i^(9h}T&ricP%EHD0ZM1mNYnRSHXOV*U3QBNRZ}ci4Z_1mOAGBKwao z`WHt>QS` zRmdPT8AKNCu7i}?osiR^sPqQ21brLJNO<<<0hZE4u_BHXLEom=pJg}{l?nM^yVepS zE&1nJegzp!k&wiaBv$+k=JC(72$7bYxwF>P%m>@GhJZq-P4^_oGOAFUu7H9wch;De Z`8W0bsG*n0qL=^x002ovPDHLkV1nH7|55+| diff --git a/src/public/images/icon_start_11px.png b/src/public/images/icon_start_11px.png index 2a16cb27080e3154905d1b546a6a6ae6e62b8f5e..40130afd576267d699d4208bb0b6593b6f9ced5b 100644 GIT binary patch delta 354 zcmV-o0iFKz1EK?vNqL at rl zx at 5H-oJ1EPYd0}dL0sY at xQQS%1rfwirw)R}+?~(m`f>2f-Mt^r-93?`+W at l>k%Yvg zO-fRboIJXMdF25~Nr>g>&e$eBGEl}KGDcEs5ps>Km17tyuz!Schl{72qkx~pQc)na z-2VDiUG(sN4OoAKg)omqX(O at G0!`J*_~hZnC6cu>#(dn*5(kxbk6|B=h1kV~_d2JT z{{13m#-^WdzFN4ZRLDjBr_9J^b!F`!=HE-svp^8Sh z+x#&Wn at qGU?^`#Se&cSG(G3N+r%SGM%$oDY>Q3{MniFn1bfNY3^<2BLEX3Fv>Cws| zt)l|$fYyERtb``V?lBZ7nJD<~T-+bz;$MIP0G11#6t}1-wg3PC07*qoM6N<$g52t| A5C8xG delta 437 zcmV;m0ZRU&1M~xsNq?3}L_t(|+B}fYNy!^=U3wnDv2!Hv3-z!nv-48&xEIpsT zDUi%wDq))Lqd0bSP|RU@*I&==Z*q1B{_hX%1ay@!pNLs(yvcqtL+y5^|%)@~aREp-I_ z`y0l3XR*0-fPa3Zls(qbeqaUa2d-fM at cHu*R`wV0P`?E6&5mX$FFB_g&f02}?=ieJ zp0ShP!0FRI!Vv?u6@*i>Kov(8cT)*Q{l|E$isola*)d^Q0$q`S>gB_g6lJFyQj#R? zi}0c+NxJ;e4X`M}YGt9IrEF2~PYYUCU|Mq>&nhWMNiLJTVdu)V9=tj+l&UfCrk&Gz fUzis(_btEx5j?B(D`{iY00000NkvXXu0mjfJ$BGG diff --git a/src/public/images/icon_stop.png b/src/public/images/icon_stop.png deleted file mode 100644 index a8b443f86d83453a860c3b8bed7234627b9e3e19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmeAS at N?(olHy`uVBq!ia0vp^{6Ngj!3HE3xL=O}QY^(zo*^7SP{WbZ0pxQQctjR6 zFmQbUVMeDlCNqG7G9|7NCBgY=CFO}lsSJ)O`AMk?Zka`?<@rU~#R|^B#xt(DF$2|! zfYdn`r6!hS=I1GdWag$anCYA88(3&>pSl1j|IE|HF+^ix>qJ|>!wv#&_oXf=R4ws1 zv9m#QgYztt%#583#~(AzX=v)J(Ddm|adDMb-FAGpcVg1dbXmJh)73L8H{Z$^kxliS z!BnWebaC!H1I4S1cOT^$XPvko*RgGPo at G8BCMVpH|?`A5cr3*Q&DuIxVaUG?8;(}K#3wBHXt z6$o7`jXc6I|NH5aZVvpyYj1Dv_U=F5yXx<`*Jb(V58mWidcg8lMz7C1ON+R?OZut3 j8NuAwIO+ra8yWT|DCg|F at 9HfK^f7~{tDnm{r-UW|mVlho diff --git a/src/public/images/icon_stop_11px.png b/src/public/images/icon_stop_11px.png index f794281ac2c12c13a7d52602b108d4caa88418cf..656639d2e28d7f6b124b97ecae964ca3ab58d433 100644 GIT binary patch delta 257 zcmV+c0sj8?0>J{1NPht1NklzM8Bnb2tgD<+^=4y=kNe~jefO% zg5V)6f`7e3Gq2fcyQRol1A)Am$-E@?{rmtRV6Y+(l^!KvxdFZETEtrfIx}g0ULJ+v zRoP%aPRceLQ<9 at KHv9jM1ruv%ZB8q}Q!(oyh00000NkvXX Hu0mjfT3vrI delta 312 zcmV-80muHq0`~%tNPhttNklWEXC1s&&qtPfV3|37+no@>wZmk=ea5j at O=exN#hkagMg7k2E)8*XoWI63)E<-f@ zs*=|Srx!7KM)2cZaBdhPaJKibylO)!1;!Y at zdn$>K0(UT-G4uE2P`~Z?+Vd~%oPix zVS at j%YzKKZg5KB at oN>?I+``+-GtTZ8;qb`8#?CI@WR)0;^A1iMTx*_bF}o3 zE*ZM)8I%k&^>PIKoo}IcRUuA0VQ2960|gwL2`xI0<{-_MM1$bQn&%H=~B|L0PNCKwlVW# z-y&R;fbLh$(Q`hX5!@3+k?*?hRw=dl_txojVq?tLVzI~omdhnSBLLRx^`|lBkMH|T zCX>hTbUKk`8LsQj=JWaC1xHcjH%*gHr&B!7<2gl9a6BGy9A~)O?XsUUM at qRJd<<|L zhcFBYf`Ie+Ob`TwVTcfd!QcZa<@R~8qqW|Q$0LfO0Ki&{)*5RY0LrptG#aC|-n?Ld zYki|E%Lg{bU>ozmx4M2g=Yi|`N>x?An~epasw%Gk!&1sPO;eOo-`L!n?^r2Cnx;r8 z<7X^ZtCiojZ7QWi2myeU5^KM4+qPJ15kd_2`~C0VPLd=OLd>kSxKh&Z_wYQAey{gf zB7~T|y}xD8%??14BnM!4Q!38$3wfTCUoI%6VqnA900000 LNkvXXu0mjfwA9 at F diff --git a/src/public/images/icon_suspend_11px.png b/src/public/images/icon_suspend_11px.png index cbf04c54f9ab1028ca86f446264d31c4fc4104f8..1767d92ead03791806f735f6762dacd35f9309b1 100644 GIT binary patch delta 309 zcmV-50m}ZA1N8!sNq-kfL_t(|+GJ5Xa)U4see2;cP;miQbe at SD>a=NN8Y*gz;52Dn z`v_Fr0ZN|(t=K#*IPpw0^R!y&>FrOh*DvhrNYq3{6vRXf#GM!uAzRlKFnfof10;vh z72isTm11%tuP1JqYCQ6?6JR6abqUhF!8#ru2h~vXL$0d0G=CSI&u`GEZky&4d`DEx zHN=|ATFEBjE5-;7O1rurD3YESvC2XS#eXu at R&_r`G_#aYk(4KXD__YWku`40%R(X7 zo-$p+V1jbzIw^(zCI6){NZYpTuY4nQW6#FJQq4QVGo6{;{5Y`Ek*V~odXB98sj6<3 zHqI=#XNSftJuXn^CSnhYaDu`KS}J;CdIN`Z=Nx>3KLQK at Vt~IJRW;=d00000NkvXX Hu0mjfbxw?p delta 340 zcmV-a0jvJ?0+a)gNq;s;L_t(|+FVevZi6roJsXq>5v5xoQnF^rgqn&8 at eN)101yL1 zKBGgnEd8NYnX=G5_zwUR0;YE^L`qM>e(&A$!#)OMB}w9%rg>=FHk-8BYoY}yWI{f%YTCZRhA`OE*IdOuef0t z2WROJfhdZ=_kFltuX-oW7z4*y0{Qs;e$O_WwN9Yw`yNokU1?rb6|C1A(lSnhY;Ibd z%y at t3RrfI8nnq)7ZW;-7T|Xyxz2>CL$&7b77DWL#vOjY-CXZ&)sZTx@$FVyMLxDs; zhKex#feL#XV at +?xPp6YWuqVMp(|m605zcM-83+ad00611cP5b`D1X#RL_t(|+LTer34}lptdUheJ_N-8Gz2p+ z7?ber$0SU{ml+s{2ci#8kY2ml3-+S}HQfV6RdtUdB3wP{#AWt_uOvyZZ5!5g70mOD zWmzyylT?0JRRxX7<2WKsQ}lh0uItdYEt;kg)OC$v7{1C(%CZc3o+FAPQDij+J8Ef~ z_9e4gQ52$7mL-B9_(a( zh9Uhg9LEu|tj_a1u{(}K at +qbMDo4DvXLaWXp8^a3R;iT_r9xrx00000NkvXXu0mjf Dwufz( delta 281 zcmV+!0p|X)0?h)D83+OZ001V=;Bk>5D1YxsL_t(|+H8<9a)U4sMOkUJ2rfYx_jcTJ z01AdPaDw;*6vV?F7)oY11vAbm;wBbnpmd6SS+-Lot5LK6N&oLs-}lS1ME?~<(aUDT zklVI>v`8BkV?-p5V{2_)*D7e^I964qv|_E9ftgT5bSLI{o~EfROAW#U0g+!~7=MP- z$Ej%=Xb%})1`-FN>$?5x9)E1NyI2HXUl$i#ZUoWw`VHAF&RrZD>$>K7E>8m9$KyNl zr)gRg1*TxeL^yJH(aPsT08(`RJYz_kB#E{1Oo|t5Fr>Ndg8epx{WVBRoMqYJ at aD6S fzke$F5nuopj5O3ROnn6a0000f-CU$4W*}+{v3or;R zEz`&{4bX_psJuGd)XXk}>>x{{Q#vWP>>xW_XIWg(PapGn;k)N~vHR?^-~V%bpWoYO zYF=)pi5iQHL-rs at T3T99PfurOryvMj)aQ0_9 at 1yQCoyN z&n!BeZ#FJhC(5WM>YVbn>E`lB}$oDrN9e)@jCv22Z=c at UG=p$g#vDxjeD;$W at +|&XD)B zGJSYbxCoG3s0-=>G5`d_bU|G}27q9gE~pF001yn*1$6-#0D at tH;zV1jBSeT|fqaV3;nb3&;QveA;v+ z4!!hXIQe;pSANG46+HIuKY#yq^w0i3e*f*)BftC{IQ-L(eLsBv-M8O--FxV(FTeQw zvrl_IIe6gXkM at 7q{lWY1y}R$7uFkjjzV+rCufMkE)!nb`+PULp|Mr(&eBt?RTeoc9 z^xU)0bUeNBsSQuIKhgI1`gN@>&5x~J^XTeF9$xiO(}OElJh1%!`<5-e_nsw-8}DwY zziUxlZOxr`EL>1sRq6B2uaG?AJb~xjuJYU2vQj7Gpi8LRZoTE^n~LY&IA`_^*B2Ge zDwug)zJ12E)AOcH&AleacJ-9(EUU$gkfuzdL9f$l2sN%!W?VHX{mLsYpO`iQQ=pfP zzx0xeFB*5 at 1?P_)bKdB4M~zHPNlr>kh>weni9TmU6oM#@Mk8 at Z5XlHVp9wv{L1Gp+ zE0#IfwPhPRHXiT`8T;&g`?EU&3poEM#2sJbAG3SWk(x5BX>V-yycv_$k!yrGS+ol=~iHC*Z1SL_jNqCwqyu at _=msb zo1UI?`#Hb!{r&DK!WhH<9q7Q3f3KdIJbm&QA|KSD502PEqOP%~rt%|mzNtgmURel7 zquy{NcG(vUTr|`C#J67`pC;2!vQsr~*!n!6x at -44>r$%xcei%7f7w!3S!rXnu*#%{ zRfP;xTTO;lrKZNhJX4?B7cD9(tDT-6w=X^yngwor<&Bnx=C-46_P%tmf8JKCdFUL2 zDTfo^x_b|K7X09H&to0p!BU__tE(&O76S1mLt&ZSJ$c)ghIaS#0i)By_a{D119$Fy zeT_PQ#i4z>I^VXKj4(XVk7Z2`G;Q1r>o)I(hOQ1&QeF?fNF2O#v!GK+Xmv&T3a8s^ z-MVGVqZ at zp&r!?$CDO$uf6eNbyW4t8SQFg4GXiW`6>QkOAJOJ=6p3+YZq^4$K|~d; zn^0-{E(k_q*r?)QM at QqHDYw5~sRfnf1yH19O=O_7`bOJI>xxKtiG0=Is^$$42*p84 zMj=-NP-IY(SqUP(1)%dvkY8=Vk!S*!7Ulv)tGg5qB}oz}Qg$F>e*kE!(P)IQe+jf^ z3vjXqQ6NB$P7Ow#2DA(fjD`Y+Mj*z6kXurT1WFAys|gT7Wr~IAtRvMj3@ zhNP5=gDQtbNr_C$a(YoDJ)Lc9o47qs_ z1cXz9L?$sx5R23ze+80^AtlPdOBiIbLn0Q%Rc4m(Fv at ahEK5)IsVt_rL^KE%g8_mG zKX8c{$c!2wDT0zZGT$}|J4 zo+gFi~p&?wzf5_`(i zwM{MNZ988(S=;<#(VtTfArwnOPj?Hd7I-{1AHmb!I5IE{l$(noU#G%0D~otZK;Qjx z32xpP{&9Thf47SYG+Q8b+xpHm?|<^S|LTYXD={{`hz}n>g-`u_9?#6U at v|Y~@%v8v z;b-6Awd;G%5JoLgPPY1VQ%ifr+P2PtSNrxCY;UV3tpnhENbUz(4X4jt4gGrQD%ZQC zv&3R42BTgNUY{2xrra@e>_F&J2urfwRTi+dut^r zGKO>4Zo=Sz9bB`ni2cgxPuXHiu8JwB5->998G|-K`UoV>p;zPSiSf}f0$L!7WsgpG zZ|l9%*0nti6y$$^1B1ihcDchhe?NO577n}vaEG) zXB~JWe>_~X--W?JJ3N?q5FYKna3JJ+G)kTcW_+hJZ=C{FT1Lo7S`JJ@=N~Uk-kS^6 z%y>M|e|;Dp%({XEc+kHvcblv$_andTja%N+c-i==PuGvsowZSH{kw+Em7k0NR%Vl!huktYj$ fUKal){uW>Wi0@`npk8xC00000NkvXXu0mjfn;wA4 delta 1238 zcmV;{1S$LR3hN0WiBL{Q4GJ0x0000DNk~Le0000K0000M2nGNE0Kh at K29Y5re*}$5 zL_t(|+N_mZY!qb_$Ir}sv)!GUy|lZ_-q^NF3vJn2wFQYZMQUOK5(JDTw1x0sQWN71 zA!^iDqlgbgeSrr|NYJ1tHfqvTO}5sqg at Rm)hSD~r^u~6(+r3R^XLn{kzkx-iMH7jW z{F5(}^Z(5`XU>_SFvjqIUR2AAe+U0HAeET2 at fO=wyUp^LmFJpy-sqW`ja^A5)1gRg zt~)+?J#@MEv~nk&39ftMo}e#2dYvi{u3K4Ny8M$34b}UDW%hcXjV`tqDQvah?(;e= zjRMbaODrgEBrNNTO%BQb2-IPl_r6gXDD!{XTpwtX;}g_eGy;-JOA5Ww#>u2ofy9%NrXi*2JfVf#U5_b$xR}0b0NmT?`no zwKORH7Vb9qN*K1Gw&K~jXtak|Kd0}NU0HDL>QyWJTX8lC8dIeC>mE%i8s*^;Wwse8 z;22CAEFN at 5aX$jEGb6&euU?T|(n%S+;G!15f2QzO1 zikuCK0yz!9xS#@K_0T0&3~sk`Iq at Qt7Sl^cDVa>ve%7oyqE6l*vd-UP?L{pB$T*7Hhl$pNLN*qtym!StI3=QV|0=Qu4f* zClDDbmKlNNc!Be>^-ECSDa;iRiEOgfwKg)figcRkt2T4hlin$A!oG7UD~ z02^w&;Bgdz%Pzp=bOcVE>beoTIsO^(DoFj?DxWxVh~D1z+)II~>O*TAo0xFlfc9ng z8LfTW<8)n>0~QnvCX)&57M_%?!moo@;p1Z`W9QEHzY`n3e>6xCe+{+{d#bf#U(G{n zKG at T~lQf@#cq~C5{_yB*U;l-PT{||_Rj({%Swur3EkXalV5+;P?*iGFW3!{@y9pwr zw+r2Y?P%-RSNTB0!52DqlOAC>-uV;sh6g~Fq|mub-G|4=M>b+W0iNSHaY3BdWbtBb z@@juhN=5Z=e+W at dZ`ZB4+uqvo>TB;E%}*sId^53t-#^}k*SGA)uDUH>8!gTtiCISE zAu1y(C-N8Wne}1T$K}ty?b!4DD+k^^lAnmnI6{CrtZC-~?0#^|X=D_tNQgzBhJw*p zP*LF?wfK!9ug|}4 at 9s8~m9ud2$FtD+?GG?EeC?a~e at OT(C7YQcG2+VgEh^6$K~>be zK(-|#-JacSHV4DuQ+KafHm}V{B;dQyIryrxs{s4u&73$trNb&3+tmN^#b#LEkvM;4 zbXBP5j5;$l-ZeMW`?f5`byz0Q*sfBy>e9f#lJ(P9&A>uVxxEaEqC$M)_q+F&$U$T) z^hB>^EMCt{pZfdyrxcoPD4g|2=kFJ$Uw;TN01dYAKO4LcTmS$707*qoM6N<$f;i+- A2LJ#7 diff --git a/src/public/images/icon_vmpool.png b/src/public/images/icon_vmpool.png index 7cf11748f6eac0e1aa3fbf55534d166663a9f585..657ab42e568d9b2df0430eda79edaa523eac72f7 100644 GIT binary patch delta 943 zcmV;g15o^f2ge5?iBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;Ee`!fX zK~#9!v{hY5R6!IzvwL+{+t4U5g6K!epor=rfaNDVs6VRm+A&v(xGzL{ZC zO8B1^g8yuc{A~N7rbuN)dngoYe=1(|JpUROqW?^y_aRRIxzvizc-x~- at 9s%oOqTfT z=Qm|{;_!pS>DFC3nFX7HUdb41T)A#D_|C_Y#f{r`(9nGM{?q1*UB~7OhJ1cN|LSm& z2&yIk!}ol>qcl$fBoGZWA6rizk9QKcyU_&!FxT at 6jFeepp)1hYJco2x^fF(&Zp^YEtKy%{o}23;Pcqopi3!2bIJ zgE;xdvOEC(*>)61Q)Ws5dA<)jw{L-l`c-i2?n4-T`yQ;BSqz?3>o)G^m{@QQR7M0K zg%c=Rw~FB!hgsVOQrgetw5o=(CR?_23GCg|3@={2QNgoW8!9Rce{g8O%ZmVr1D`ms z6}vf=+3!aRgox!4Fe4Fa2P_^4kFxh zsfrw_HfEpBWYlj306fX5eXvb)z;QD zSk?^0VvE2uQ}4&e$2#AjY4(U=6Ftdv715xYzgW1Xwe?nAUES8|>gs4L7K3Ossw8Y# z7Fd~#{WF;y>AQS+uLdA3^M$-pbp6(#FGjD at 2?cs1hN zsMw&Pq at MMWJ00OlP941?2Hm3nf7w8Q^3{e|6F&dSSTa4 at GYot`wX)Z?Aw0R;xh}xP z=md+boLLRDvL-iP$2k8;3Gcmzp;tpxwY9$}o?d%BE(7-H;#;<+n?@0c(i7rvd6Ca= zKNaxmeKVq1gD6cy=ZK;t=e(k&p)&-r3Wc|0>k%JU5BR_)^e!m+Ldyn!(Npx&p!VDQ7FB_0pmrs%?44cN%k z2&ZZ$3?l*xz!=Ag&Vw*i2G=JGL- at WA&+`$7WlWnc#=aI2gaN`JOm&`~Nx=1#X&C|z z5zxn+GngeCb0rI=?chw;e{rgW8x>~t&;rO7rs%D2F_H$pePktxMb{+vtUyqV8&dSRs#HR z_!*wRe1nN!Me>PBe?yWGQlx55|v>FQhHU5NoOr# zEK)&Ts%ar&rW5z1e`A9nbOkUQE1K7P_FcNR(hd#p&Ie#-vu49ZdDGUWuDp3HblIcbn0-y((K=p)N0HBzEcf1L-sJz^C;|OzMMLFjKMaJ`=x8}>(`$uGp z8XrGn|I%djq%`9%H=TD3OfGo?pz!WG%B)MUH59ot$9r at x&yy8d=`6!XzJq at RxT6Vu7Q(DVye7oJIK at c3gk1v&AqJEy at I=#fX%DiT> zgwt;Cji=uOR&wuvFX-87Ln(ttE%*Wa0e<4-Gm65zl8lJNxP^Jdccbj)PjEM;MFG`U z{s`wFyC}>r+FF)n1N3~TgNy2LkO2GzV20*VI}DPHP);BG+NOD0ttbT1!%Oh?_g|` z*e*%!#BtIjb-!-uo+j;=q-~m}X*Rn}<1}gGX0x$tJBzKeTu at 0S4T(3BT`q-=}--x#ymD at 44rmd)^%}lv4bv!{u at rN=r+hwApPg zv&ob#2!b^x%V8-hO@%_i*Peg=g-`#ob^LV%b0>|jY5Vp?6=hX#X6F at H=82SIc(DK2 zv(G&J=pF0mU0~>U9 at 0xTD5LDHsX{8qpKz49C-=qM{V9^Il`|lEvTIzGHiys;Ud}=!E?0#~uGi zafgkMLM0S@(tPT7U~jLgs3u^_ at Seaq9<>*8cE}cI4!OqT3PcpyD<>DF| z>bLSdk7VOJd9o!i;rEA%ii at 1XL&FjP-|gymr%+QF9&!y|Nb)UyS^;a|3ncM^Bh_+qi}4_^Gix3?Jtk&UNM_&f)@ zySq~ZuA9W>&6~x7#mfqc%c>XvAQT{k0-OP07-PCN7K^3IVYizUC9&J#kzs8r5O at Uu z+-`T at t?Kk%faAEuD=I2-^YU^5AkJe`hU2(jxww?yb^k-_%~sn(@kCuC;o&RY|KN7J zBk3A#-Fa`7&6)pEFkk^dmZBGa{?fDGJ at oPmt@l0r=)dp=acMk%!0-KbeEGhIKlBK1 z5bEM-niPD-?;Q^pl~;VzYIo*K;h at xiv2$NrTib*stMCbyNwF56&v)?b*|V1y(sl3Ny&nM37*CUB`Ny&> z`?H*mZ&)mrLMbZ6Mn*>WwY9ZP?ApESlLp?fGM--}+J(c14u5x{K6dTe`KZAl)XtTo zQuIg6V^93)wcYzaQ5?@0i-z&)3;%xd+5hvlev#qm58S;CM1$rTbJ=*csp^td` zdk(Kyx#IHr_3H`*K}g}JltNJy5JK?!>uxt$a5(bln{U23l5UV28yoX-a&!J|$&$qzi;IhGHk%DRpSZ#3x{gpN zgkUhJU%YT}WO#UFjWgT%^^F at he8}N&und!WHd7P at lv12M+ZAYQZL8_(>gor8+S*!M zK|%hrW#wfXii(OeY_?3qw+{wG at QjX1Z};?^85|gVe^*ymLVUYp$BuieSKss8vSrH> z=ELni?d3RDsI9Hd;y4bfs^XQOz4Ak^ckHRH+qRxqvShI#p5N#5DXpz-Up##1 at ZTis zzH8UcKdh^-`^QC#7R^t{v17*vc~w)#IKh-)d>MiXCCjT;x?HYYx7(edZ2poJf7G<| z;T&Gfn5Rumj7{r0xytf}k1Q%(De{6jp>un7f#qUfmjM7_IR2iZ(p8pZo{jf?r~m*c z0F6+vyb%n;8aV^Is;I0=&?%s&IheA%5iEek6>H3=PriN+fD=xq)5F2LM>DmM?AFzO81iexY`im6g_tii%CYcYi9<8aV z$uk&c=7v(5R-V~xhS_Xp6;)ky<;vCNq97DntyVVK>&<~-7%&Wjf`WWI&+~Zz`giTx z^~myy at -H?tG%OLtnf0FB-efXj>9VD!;*yf)j`sGhJ$rV4<y7K*Oxb2ly0ral74Rr2bej|Qd z_U_&LNM+ at UCu&?Zd0=o;vQ$k4(X<(zb$U}eYlHv*Hf`EeR#aT{WK(m~5|(3c*bWRu zT|- at dSy|cVw{6?DIc`3nY1&QcNjrXLh&&|y(bGcll@#C^#!-l4k#UIovTtyr9eRP=`=YhsY`t^X{ z^Mjce0aXbFo8+NLyzzlTBQq(P8-Y?vRVCK-_Sx2l7q3`rpz=Yn!U7igbFXjNR;F4Tge0 at QwMJ91cfu{MpQG9Aw$Bw7 z7AA~KPtWDvBS((B#Jk<@(1Ra-;*v)61mgpMMN2Eon$~SxdFtfxO8`(%y6Q9KYd6^9 zQz;iZjt)k!Wx#X3fgAYKn5{(96&M z)7D-4#>a;HzgoX at zcYbfQ}N=zexZdIjjw2$a{i5jFTVl+>({T}{rWH7_~zEFo41Qb zF`!O%%n;ufF=~Z->Jn-`bkBe_B*jm|!u1z%)*tX!)VRz+cofa at 65)>@HtkR!xY8 zSw}cKegrKot>?TR?*}wZ(+Bzoe$>?5SetBst5#L6j7Fn>2jDZ5QmScc+OI#lu48Cu zBoc{4Vit?Vsw(Pb0GJL;f4{G{@3U*xt}ae)V>X-S7p2SPa;~bXT%&347 at icBXdn=H z5tvQ2O#40G^9=TG%qc2M7~#d0_15f;BYy$laR9J5ayIay1=_6FqPmVr at 9=rI+dY%~ zq?Breg1cUlnF2(o^D^Rb?7#l4um4>8!wjPiNs?4jUS5740H_jtP9x;Y$!!Rs5KI}J zhhF;0m*VLsPMo;7eaH3_imGmBlZ-~w2nmHkPrBW1?;LGnV)BzGPn_I6Jso=P%$YNR zc>enO`hW0x$9CrC<|YK#Mw2OX?b@~30LHDEmI{{Tpr|ScA9+lMk0|b9LFu5n-90!E$_K^&v`{ri<7-{et!OvrlzLmQ>RX~IJ2E!Sh8eEUcBtL zdwPbZCa1m(%o<<7H+-Py^ohT96f8~HuPMX9nw3`z0FCQ5u5G;kW2LhCj>j79I~xo5 zN1mE1>pG=GPxWega?F<|5#8V279P2J{*$Lp9qXDUO(x4oZbOI;T~Gh@+ImpvYj9t_Q7e>jc<$8k^<6(lat!~o7< zXc`9IkZ_XrkNYpTw6yfhm0Ma`Cim at o;F78;3C1 at go6P}cb|qC)psI-{a_`t!blf-o zho?@R>YOD_#n*>|p?~&xz1wrLoe6F=%b8`)$T0tj%jIg#FUZ?6Jsp5XG-#RzP1WG_ zj=eRP!s7wJ?RKj>-v8l_L0`BO3=5sk#3=wE7Tit==Vm}=J*X_p^Yc+vRVCyXQf_a{Yfj1x+ zoE}b=AxYARlK!;qShHqLp~GRPs-_{CCmM+=;c)okLb^$kbolC(D}Aw8v{KUuWCJBpLxIuD&Z_HvvHq%0xk&Pjk$ra#U4?q9}o6{zxP`*w at z!p6BONOf1Vn zR%E*%2&+|9C4T=n38>H78S+CrgFW%AZ*wOW=cvhtUrQA`L` zqLJvCj*gDrx$?YQICcEZW8;19lq@*IFfiJ(8*-O7l*iM3y&V%F-{9Ah`QIyOx=tm9 zASx3?WDVh%hLA)+NP6QVgy`XL2%%62kw^s5XcV!Sl#&N)Zf^QLhr|Am!N8|xux}0{ zgpd at 2W;qrBvQyb_4?NF at bV_6C>KKMGB-1FRR$#`9s;UZEmLW+JB9Vxy>$+dp35`Ue z31cM7GBoYFwg&)E6y at uYaAZ1}ZZeyM{6%@o;%PA{7E=`E>3CYgo+Jgv+KHBW>Z#cJ zc!|BRBH|@|M=MWnUSH?;vNDmbj$zo8_uzQWkuG&3%d#&Pi`~}zwYPVik4B}mp%TyY z37rOmq4TP$y&O+VFut(=+SkT=I}!rRbWozxkOE^zZ$aNX3WjCDFl@?de>dPbE+t(+ zh>oeLz%xgV9IJ^&rBCVUPARi!Z*TW13mAjZDAd;0)|T9kegMEQEEtBF5A1cFq`d;h za%?HXFbQ+Yvdq$SyhJ0u?(XjJ?dql~>RajJ-FRpkfg&phlS8xwMcZ3jdZvahE*SLB z!E^D%aM(ZeeWRC!H|U3-K*TY?0J^s zvqBS|&$Jvl)ONFS2_ZgB(}DmJlGi4aQOvYipWLuqyz|4Ut7K^pI-R=}Gn__&S zvHow4U21u}xMugFbiyK&qePk>d+GMoes|Dfk+j}r)$S+m0dNlhoPPd`zXjl?jjy}A zTiLvMlNUf~a$R_ zX3P8p0Ho7J*L4Jg;Wtj5I(1~BcYC)`74 at K|X&GbR2Kz>kRpljFR??mxZw3s*@&KTz zg5iO5bh=fcL+pXmwX961uBI^EP;uu+1+!20&oA=iHGaM`8e=$kLgiGp}9~t5SpQE at kFT=TrS7Q-GCq1!=fiAxyhY!rFqU)!pCIi=ao=@l} z5{dQzNa#l}2>1HD<6knG#0N7n%!Ps|h^ngTF)8K=hr=CmOnF>W)lZ9I=|NM5vCwD~ zGl)j0EGtuz6zeQn$xATvr}zsY~14YjQyv at Vrep(#B77Xz-pQXMNy;SP{f1T-*TKd zaUulZgN==i?-xVDpYuGQD;mWdqtR#urI2Mg7>mi{nx>7biuQC%OUw6Drc6gyU at CCU zU`QS(sgL8hv=?TR;c~e|i!~!9Obbqjx>Z$uaiMk#{%G9gav1<*B$1{0O9TsG_3G6b zESs4AID7W&bo at 8W+S*z(Aw)>x2_|38TnN?G)eg~YU7KOcY0^}AOb+?au`GL~t*tG= zPxt*H?2qw?R|23mnI_wzjs;pX3;ZVe9JZYIvU8sq3^y zmgRHh<>glo95}F`n_9DGO`*YHSj8LodY$THN=!M+aa at 0AXXkYn8UWPS*XOe=>tYzV zbe&$+b^U at UihZ+2mx9{bS_6O;1_QrI*D29;{VhsqPiJT6b?-~1n~(DH^3e6(D;~}3 zn!k}>ko)`b3!M-G&&b%{w6wH*ZlQK}^gkBd#jhXg>gp;TS at u`$4qL*3YI0(#Z)!47 z<955#E)-yanC~v`;$|Tl#cw4W9;Fm9Db{v9!vpRb-(B1WnwlCv<#amglIh`4cwCm{ zwCR<2+%>+txMhf<_;JxFrukOWDP;3@&s zLRk{!9h${)JkF$?#Hq?mswPvJ${#={nab37swR_VVk(ZuGxkI?=&>c+vN*CR5u`}T zTtIL`lf=^48;#!Idf&bGobSsY4}d_By^s_w%h9ju^?R at 1z2|&q`_8wW?~;h%$Az)6 zF*Q1R&?Nar#t#cw?OfK+!cSu{N)g#KB>*s}u;?j9Pi&``}86P}&(EV5%@gYG(^z_qD>m;cL%`h#J z^Lj`yKqS43b2A%GzW)6$+c;XUwaNrR;P>|Qm}04D78Vxm($bPmlQeb0vC`h<(S4u# zKXZlh+roU&&DZ9E+2|*&KYoh89xy+yiVq(KRqhxtX>&G@)aw_`8&1FR%7I3G=`JEt zc<=5?5J?6{Ha|7EVe4^-hjhtLfZdh|Eb^1H8y`7xL^YcQKgydz0M*Bou4B;9%isO_ ze`UbCAKZ6eST2{}bKmC8n>_#?fDiy?XJ-0d`irOj-h-bz_&@VEsI{iQJzA|kvG_aegk{rf$)Pv`SybBL^xw8uFbZZ+#$k3aKg|LC5( z?i?B!86f~*w>m%Q>FI&BX&)F_$2Q}6&QvND`jE}~i3Jh8uY}zlrXQmo|Nk at m*qF)C zP=ORDCQUgMjeMiN^uU3i`9*C!Z^ip=zx#pA#dD{3?-(3>n-UdN at _BXT(4mi;TpAk# zjgF4fL|-30 at x;qi8K0mh^FCb-FA)F?L?iOV%QYS!pX7rF4>FdqTa1kz)pvhpi=RlN zsIByoqW)Koe&fG?=z)F1m1-4s4NTH5e^-~=s2ja z?$4qx^0)Y9pN;^_5toQ`gZ&T~GkfDYadG z+E2r9OZ=6u97})WH}+cG!cYjH|83uhcGM1y^Gd9#=lHWv{*A4hHx86ar8P+-w?YH} z5h)^yRrJ at Ekq{9b7NI9zKBoP~ey#ufb)DoRy at ayrTS~NT$Eq2&bWsmb#)^$EfB2Mr&f{lqgXG2(y5A5p6i~by8|zX zE2WGRFXI{Z4SdfsJW`RdWQ^xL4FHZP4RUBDI$NvcrE&D=QF-*yN8Qa6_%J|a-8PhP zmW?STow%p5IQPl>_ugTwvmc&V5h117+EqI5Clo|PM~;Z)hm*AeA3Sp8 zUB=M;N1>K{_C%RbIWD~O%J)9CdGp55eF%x(e+MN^M$IL>aA(pC%pY8CdtVU3c8~?~K!(d>Nh33~jj~UUzrb6AFXkX>ce| zVQucp{iECN)2lHP=Nw*m;iXoZ+K$mGQ|+nxy}iBO(&8fLO4Z{;x(O$dg|>ZteK*+g z&4%K!v9Whaafc3d4b~sGk&*yR^V;lqd5WX!rg5Muz1 zj*rv3%N<8w-#+h3{Yoh;-- at OVsY`9syq@>Yi33Pn*f|cZnmEnw?xvKoHQf( zZF!TyFp=4O?EByThY;*3_Y9a~wb#oR%akir5atW$da=6_!ngkYZ`VKhGr#nksgu*G zbrZRty#JD|l=+H{??=@pP zXmQIiRSCOuBsUunMy?MCkk9vVvzbU=-zd+{j^ChnEg=dkuZ^2=ea;?4U*FLieR(xB z1e`;zzn}YNX84(B4)Ec_V>o;mSj!rin3#~mhYraHkkW2AAgu$RV`F1#|Ni|d8X3`Z zlWkMVHB_T+s9Nm-Fpt!hMdl(MWy3Hu$&giY+l$}%(|@}EOTW6oc>ap5I&ND)1OUxOjq-((0Kme+JPJiCm0&pq|O?*G!SW>@R+ at BGpK(|Y(*Klcxq z-K6+92S1pfooPi^I%n;u>_R>tWSU{U-;ml&q&GkJr~l at +?!W)O;%enioOr9Ve%F1! zTj^hSQ7N^^K$D$xjFF~evjENW%{Z!6$~rooB+}c+sa_XpE at XAPVGTm7gVZSNX$1g2 zizJ at Uq*I5e8_3J z5CIb!BSjr>%V5h%|gie1XadO4k9w&u2M@$KZ~YTmr%*T&83 zt~+1Lg84b1rx%Y=YD%n_+QK7BMH8Xega8B%Gf!R4gv2<<>xIoy6%C!EA7Y z)-Qkg%PSeCX?z at NI{&2E?D}<-57l)Z0d&`t9~Kxv&EZnX8H^wwq9?T6$RHCM7e!=z zBEUx{u7ks at z_Ba%oTljS}e_IXh_5~SxlVJ`1wQk(NL zq0=sk5F-oaI^4;DeQs(+p4K4S(>MJ6AAI`{2dV=j%Njy#n#$DVMD)Oc$4`I}E8XUf z&t}Wjj$Y99jF<5;uG8^St&~zJ89zWLuES$b3Yk!p^EeJ;WJ4lD?4_cE)WC!CwC}9b ziRyGjMY$l5h+PR{sy4M{r46~Y**1j~@~l*^b`oiqsw#Pn%E5)#l|JRbkPw%(r+IyC5_;n`o#1k*; zN+mJ*NO{fkaiGJ6fb*q*v#iYgO{Z^U at g4kvNlSv>M5)**LGfK=2gFgvtv6gZw at kz&yT*s6%oyjEV zluA3|@rj8PCr-F8A3VtN9)@+$T#g!2ADljhFQBFYli*Kbd*FG8R;B8{B%l0 z?pB5}Ha4b)9)Da{`odr^8Vp_0%YZvUAropBb-jjuCKQh&Ymn_kMMTD=odI^LD#|Ma z3ch71BCk7#oCl>L8qTt)j#f!ssbHbwFD$kC`dVXSV{)^EGB!4*s{8hNTo}o6+%9uK zRkCRbgpjmvtOIE{kWtPT6D#G%OrpT7ckH?MrP{(wt=Xvc6X+U4x!ykNdMq-2{K?P% z@<}G$BRCM61$Gd)(gq>RdtIF0LVfQPP+mV}gZUdD(xRt#lGI1s}gShNta zIB9F*W|SgP+RKx315lI~+;B;+2oZpZ3QF7%h>S~7kUTA#&SD*@wl3opgfT1%{R?wb z>%(lgs=Wl=x?=)72xpm84hk&-QB2kB%yiQ`X z#uaiIaYc|6M5j4|3P~tXL>`+kBVo*j$|$?!@yA_P{p%VSpMF}@tUZ>AV^m1XFocFKoP6`{W_ at uT zfk+5M5D*B)&(^l>zWbOHw6#WtMVYwW4q8i#MGzE$&?SRFBmhW26co$7nM^)U9VHq% z^#kh%?9zTEvi{6l#~+B}P6?2A+p4D at kPW! z+}vFce(JZg*}@{T3+HDpZ at W5mZVNjm+>IVP8S z%FoBq(x%B%C+=UGpBX8J{+gIcC+e7YUVm{H37CaD1M9ZFTJG;7FJ%asAVtUX$))l07?de8RhbF1L%Y=|ymR~q_b`ita9r*kd}rOp9j{tWbsQ`4`f{yOwMT1?^T_&T zai~H|1)##h)TQBbXD04%EX>>m;S9QcXVBdyW at DaP@PX5)wS3~ zRdhDLP2;%Gm7z!= z*VeIs2qZ*^x7=~>55jEr5+tJ|&79BQ?QRwfj*O41QfY_Z4839sH3;G1*{fG>o4#=B zc61{$sJq4#2uL^Xy7L7c7SGVX{-dY<%U54`_MdLO^TB+VLB2m0XQz^-nM-FL{Pg4h z6ARAzfn1!Lw~JSf?d=>o1n!D(j|HxrsrWvvQ$(9ze)ik{z|R)%>|eJfxV5}yZQjmY zJbme*&wS~h2}r&3`b&>S?e-T3H||*0XyTleGp{}0zIXrU59Nd0o08F2UE(sv*CWsW z$3On9!Of#1VXm;O1-I2$v{%o)Jw-}Mp=WS#=RJ=GUXZ!*`^?4Dm^$;?b9X&>;9KY3 zeslZG)u}J9zim%Y>={I^SY2`Q0zhqk8twYRjqg#jX0M!k>(axY`}uz?j$;;Ae&*}{ z`hOlC9x524sZ=V#tYUBmfLg5vYrAnMA|jVBU+L_=|Fi!~-_XzmiHV>o+o&xLUU=vA z`{$=GJS=Q`OQm9_TCI3N5WpA%qW2ChGb4^;G#gEsx-#7?RtKKD^TE&lvDRi*X+13# zS3O at A+Ev{;INCjpd|gyWB?^5GitJHU5%)n+PrJU@(O0-;EX=<^wwCLvM7dqDR(xx4I{{4pScfHDt1t^;F$jvE5OS7jJqFio2dws8F z9rPfH+j{JoZ~T4b;!hS!#brCkTI;5#XBvfa&*@IPKDuS|#%vgdH`Slw?RQRJ`Q*?3 z>TeMA(HbceY+Qb>gm(t-I=gUh2>5*7p5K2#}}u?^m088Z1&Qb6T5cb^Wdp=YO?{U zY^T$yk~V!Cckf$mWtyZD4GeF&-7oZX4R|+4+~%tTNGCdj02QxJU3_@=Baa7RzJyz^ zTMqf^0P at v=chxt2;Zz?)%8GP);mnC$)oLZ|?d`eI*K3hX^7;JDUr8$+UOMx}{=R{A zGpxy8Jo)931&ikUdyXt<+CkMh6#m$P#4;6d$qNft(zt?+=SF%YM2;Mh}N|GR0YwR>Q& zKeu6c*Si+rTH|O6g**y{ya&J&k?h38iC^A&`@V|`qSz(;L_xqzue!~TiiXm(_E*2rMi?NRI628tyXi+ zx!lDIZ~x}mw_lyT?XHJ^XWja(6ILY9Y_wXRUG$spBoW7fk1$J0725U1J-c`BT#d_W zKyoZ{*QWKi8Q|T0sgwdUX9z0K1QNE@!NGymg0Co(33}c+{{4dweCijbtj9|pw;TKR zMakIM7>|w~qQSn6o(Gi^wml5jcjf%apTF~t-MQt;Yqz4z;_THCGqiE at rDNZJHer5v z)$L>Cw!8ed{^H3mj%>gEHEX$;!e2UvbDbmOFG-ZYTN~XD$fJUDwtViLH$S(2``&<; zQ4gF=!Olj2D5aGMghU9-UH?PUH8G2Fmi at rX_{3?TEIiN}?gen$-cJPp-uGH&fe;Zu z9v~V}YbtX^a+Lyv0*KWj at BxtfC;>7+SN#*oh at v9F@#LE?|LV?N+p|h_-P9kp{BotN zOXX7O{J9H1|N38iM{d7=|JPD6ajWjf7dys&;uGs!e#1f#M?qP8Y7mTdSI$n}F>(Bv z|9aircJ%?0?r-n)`$8cijJsWv4=;k$Cl{=7ML8^_i3hf~=)I z)t;&ctT3h`U@(z at 0BWZ;EnJ at m%ORW3qILel?W|N$krbnpvw6L)y?_6HH`_m<>`atV zIw%sm%IVi%yuVT|dV>dU$OP=O|kjNE`(z#}%zNgr~epxTb)Y%Ew(>wTm5hMgC2-vYe-V>JdZgdTy z0wGdtQw?Ip*R1So^tdbw*Y&&$M3h|n{!z<>biE!7(gY}GhO-}WQ8)$zAVnT^59SzQ z`N)gyIz~p;WzL*A`*SlF&b~dcVOuks)%8H7vE8L at 6omzkbe~Jyx(lb?ckkR=2FI~a&45y+3CzXT91##*G(JG|+I`MHHJR;!g& zL&NjAYh=`)1%F*D5yaHt{$U_xsv(av;Aj zb^he$V()OiyAI!fF1*U=shsU4$)}z_b zZ13yu at qX0wZ`im#Ja_i|&zybh`1$qQc3b16E at l%chEdm<YY5x4+RE*|qPz8F_9&|EAl`iD$<@vmN?-WKqc4U at 4IX z!^?)^1$h!zIDhuk7dGGZnP53}Gl`l2yQ^N1sj-tt8H5lKW?;3WdvcvYY2A&j2SD77 zgkPg7y?oi%?`L61*Wd6_%j_1cECE(Xn1w&o>EL%2=NKYdn1l&J0+Eke=B?0LfxvxH zyHyPe`I$6|TD}KzPWL8>9enlqZ~eEMH?J>3RytW+Jk)YH=+8|{{?u&=}@$VYDvfa`A86p+ZvgpRbC zN#eM$nql8F21%#AAx&+;(kvAw1ju0hS=Yg3FsqDW~d1*mH~*GE)ySRevnNSw_TF3wGz z**LKI&JTSu*(MQ^sAZwhP)up5XYj(=iI>w#rEFI7My!OTTHW at J>^MVE5x_nK at 0$n3 zIfu9tBS{h$$4O$XbDn2Rxl+ok#lsS00&nK>*-e{oyYrIsOwp!dOrUy>|KO>g at 98O5 zK=gt0uZReeBmn>zW1#g461fOOQ3p=MIZopwS^4@^(5TfVU#d<7o{CEr5LR+%@k9fiNck zHHjn{-n{d>3zyHVul80}9pFMCAD%h!(mgx(JTwE+1z}=iyet9bPN&|J#O=+-TRz9m z-0Xa^Vf*cWB1CnisAkfHo4(P_kqukEb>;N&9h>fYG<@GXZ$jUuJ94MqeC3fn`}R*+ z#YF`R5gt%BJRb#_um*Hp!=-B9>zjAq^PC7< zMU)p2x_S4AIvrV&(3SuI zAOJ~3K~&b_;>D?!7i1dO8cAWkG`;8EPk#T*#IbFKLM|`NYqGOmx^$&g>>c{S<~#0q zD~UUqOQ%lUPqq4vzP_IK^;F&r&uBOsZ(5wcI#TH$w&I*4g2pXl_F*7h8=r%cwlEri z_BQRj`_&8Yy#CAO%JMGf>nId*-j#DFKfC?T2fnX?GDJvq*J63%<>wwNmy7w8Xl%CH z^#^zDebut7DUpWJgq8?5MsC}Aa`KyBYdMxx7fpHHZR+ilFFovto+Qy_0x1~DL8vf& z`O;@M-~Y4Ta#BKjX%?AG=CszT#llU326Y3M)+Cw83Tnp(kxUk^O!CZ`<82!?W99jN zrqE-WbC-GNp1pqprfEO$Y40PS`>IXa)fa#8y}!SfvTf3_2R{Exzhl{Tj8Y5Y+#-`d zPdcp`OV*Mt?!4!bZ|>gv$m^%yI=*N2!o-)?vO9TR(0KG0{?1pJrO6 at -gmh6vH=#ta zaF6!|~ zw76 at nskShCn;v&CXliSk5AmITGc znW+bc*A1xUXlyo`u4iDw_nb%rifR&3+fYVFh^e8NTiJa6&HC)6{rR4CtH|IAUba+R zn!U2Fr+>ID5FetmF6opRdQf}evM$xDXO6cwZn^DSBGMq1mKgCt!q<}{z4wsyEsYn! z`#HWuWX*2er7LIL%sW3gea{02zM3soYV0h}&rTJyqocFAa&=1BHm#7K0dcBSM&$in z$?u_|`!|AMmX%yqO3!jTuEp7~g%qMSx5#yj_A at yVwz5WhgFu8JO@T}+MVFOi=UH)V z+4;WF={=8p;a{A6`}n8*AjH1U?0Z`o6BCe&{(q3Bd16@*aKng+6G=onrO0UG#08Z~ zPf)7#p5i_C|G6Skj>RgXx)Z5;qO2I{I2Ioe7Iv%l8#@MsL at Q}H#=IzsNszBE&X*J+ zyB4X$S_@@@OSj#5-wUujLk3GoMJq+s2R{2t|L&0~gw`XYmv;x`LE0>De^O}|F&{?p%su=Y|NvMs^ZQ8!)TW2R; z+*z%bR}~C$`E2&|n=e1I=fO`m0nUj~=G2=n-J1#h!b&@mT_W#0n$Z<`JS8upR z$Jlln2cg##ry84Y8-423=~wR!E5rF^OSy*LO?$GF at 4Wh{N>BeHDaw&>aQeh64_4Oi z$}hW%i=eeI)f#^A;Yqfxp at B9Oh`XN7wb at LTVJ6q_Uk!0{5trY5cJ338{lf2u2~BTT)(+QR7}5CWPYnFpCGiqcu8VpFTDNv5-jY)|B* zljen}E-Z;-UhD28BvdECtWs{e(XK7#szKsXFMvxWU+K|zKKQA&02Kmdh)6NB0*OaL zniRuY=hqkKdYbj6-l$p6Gs{|ab|SI9>srP$X&P5+wHh2dIOpJ8*Pwj;J3GGdITPgS zpZNUW__xOB8DV$X3e6IzDOOVDv?#3zI at O5bK?NRZ_{uq-6)8_?Yehw9#$n ztJbo;e0d7S)6m+$Xbo*Nj5a at f*ZP{;OHPDp#Im52vdm&GPflzO0&h*Wl18%?Z`^** zw}{jNE19xZ7L3u#If31hL%jnd)3~OXuZ0E?V0LD{ zzW2Zvzf$dAcNV}Bvu*eEtxFi(0dYNXx)!@M2`Ek3^Be28j-Gt``1396+^WnZ2z)&| zb^bvCjuFTTL|;68;%CaG+_I8elBCGwiYEh;Srns}EU1-+QDVXlQs=8Sgd4pB>o31~ z{Dp>NmnT{!@TGTzE}wYj4kGpRHUEO1otb%f(}SPT%h at jKSIK(kqaI=oQX=NJ= zUZf+fOD^7+NanmxS9P9xOY at 35T1y&faT)ERNRi*+FkejjIL<&RewpbRI0Mt?9gp`r1m(Sg)VRa{p;CbGPVfk?}{(;gPk!lI=} z`8s2msJ!Fuhn{}ewyU*9+3#WNFk_70BB15mO?Z%(t>jz_kR{%NIeRSRnc}6z1VHj0atT1|M+8tYy79+ at 0CT{zw)>+Mz7bUs*=}YTgeg4n? z7TcsJ41;_jACR-%Nzr8x2|6~tF)6OUR!UnEhDCug$~o(`8%q`E(p8O)0HBqUfsxIx z3v-KvmOOU#1>N7uMK7h- at _hiK-3(^uZ^|@ZC>LmQG9-)B2z8qmsw3KOB*qV&BT`*| z+nOOltT}Z~M3jPdx)Zg_iwjq8Tw#oXF$SLJ!Sg&Azo(a zC{?1U4UKlO+`Hf$r)wEQQi>W&^XpmQscXx7E%!0AD^&Wfc2zz*=bP-+sMTnu>{(rF zakRVSE~3Fhg#uM9bPCh-L>k-fxbHi!J^$o=gfMTNgL4+nI at p`vU3YE>OZMdJFWz_W zCqMuC#7oaTFgHJwTkaSE5g}8~%~l46FN39)K$>&S`Q)`@&#(bTT`hVc$>f5TA+NFR z_Pd__{&UamPjVYp_7MY6eY>(}PQJXaZ+OFtrzhUnuKRZ7t$V+*76 at A)ZPrTV-m4I4 zKqYO<&M7F7YpLhjF at w~~iItPcqWC`3IZhp)pKU=Yf}*az|E|wOPzrF&B0$REh^=n5 zHQF$>==9#b4r61G{rlB!KzmN)+KF?>8iUuaPjs!d_#)!>^sIOj^BQ9`uGOuz7LcMk zD>Gz5kD$uVp`RiBFFf_Nzdbj7d7tB?;GDx!tvgvhaz;M^K}0DciQ3JAW4F3h4}dX# zRH*dMLQ_PEjaXB>3FqvATXNuBPaoM$-gTfG1tI`w6e5t5UpYqEQD5wbiT5D_w1^U= zL at TWzTAX`V0LFEO+Uay|xs}jAxM7KeQ_)_Wx>gFWY&#q)-$%lbSP4=PlC_SZO_IDK z>Yfe2+9VSe28md9(s4#wg}{EErEV0Io>u9vLcP8?WNor)_(9x>f)}6ule=22`f>;Q002QI*VsII&udUv z5^Eb)x8oBy??gn*p+krGE60x6zINQPlx-?2&B4LpXRpki9`Of8S9N<)d1LtYtKVNI znd*wh9y|L^bH`_X<_99uV2hTHDNV_e_I%;hQqup3p%jD#;`<`$ts2?;z&e&%J6+3l zAE+U<+L9zmyy|t;YPK8R&rW$N(4OyyOtwlu|I5!j`HQnxFYSqw&YIMZ4+AD9#e^hI zf;BTtBFSWPu~H&di+pU)5m*x`t{dj436Qlt(tt=I$YdKL5Un#Dx=8XPBhs9mm7u94 z(IlRRkkTnLujwRnPtPDoKnxORnP+cOx0XXT%nPpN3^F3iQZFJhJ`PulUP$~fY&x4Z zcka3W`OD`|eX7w&R at E}1PBS|{eQE1TjK}kQH#oB8dk|?T)-{)?cHTwl_?Hhd1YO5S zWpa{rD@}A7x1gl4W6wP=^4zKBsx1ZJ_3iM_oH+iV?jK#2qjA!LujOhGWR{eox_G7? zWlXA#|Ch@})_{qF2c?r##dWPE^1*cUj~Aj8u}geyZ9$Q#EX~bsxN>pwz{kl*06=wx zE(vpm`dTA*olDKk>i{-f>6E3V}%$OOCR&B+36o&cQ?e`xzN{(w_G}o+~6wQ3O11s`Sc%_PfXNi(_5HVm3*iYuwj>aP)alNnwSX at K^xPNZm{0RvWXr#bch#y-$oL5 z6rsru&5_MJkNRG)2KjqsD5X&>^_=wm>;gP*$?C2<_~1=Xy1G82Bsn?n0`fba=!PRS zM>cML%FezWt)(JU*|?$}>K4zoHto9Wbt}4I6SQ(F^XSCr zkLIa^S_2SPo+eKV<*al0Mtxx$ui at mW(pn0I@={;_$mGUtyI&r?`=M_Y3gyMM)GGv0 znj8QZgt?~CW_5iJfOFO?&Ry9Ak}Q!b6udAS1dG8FUpZ#R05vu?rqF#Xh8hFZ_&D^@ zqcBItC%h-0JncXE_v)(89>Q zs|LQT1lO8JHXEKcS~Xdu5opyerX%TMUI4cyP3k8GL<9(HMdGm|KdqDhh1O9wK7Igw zeV{dQ=4HT4V5O8JpDmUmVlqskFPuJc-AjXv1EalulserzTa5i(%iv#b&Pa*{fJ5pc` zVZTvd>P>92>Y`Spv2OGBS2D#?#7ve62}C~V2{R>N$>z&#-_NX>C$?I($_wB9#?M+t zzhkVE#0(oU1FjYHRMW+3Q4dtmldUE-)fcC&fgsDnI81EJ681q}OfS{+jXpHHrP5xSfCJwHNOuLfNHpZ^lE9@`4^{ z+e3+$ z$h1FffkBXswvO)oGef54gzMxw(UmB)hYufq*I3+`+yY1#UUIB$OvFtQ)!4di$5VFZ z#77Vx1k$|P8s56?3`829RxMK)NG2yI|4OSkQId!@j^W5D&riT>i*iswLD%PJ2T7}5 zCA`iTj40n53O!W4mdd7$1&^KmPz;5c=~`lFVj|UQELPScVk<>LLINR0;Aq!#BCu(a2dKzS^$O`863(sP zHhMXe$*zeZCP^o_aQeijNb3rDde~XF!Gph^S%#gpmHOh`_O&KB^8BDvuJ+ABIR2QK z39ek(>w4RgL at sG7QuU2H_e^AhZ0p08m&s&nn|JSd-8rs#?5??kPrT<@JMWqm&ph)C zn}SO`ooPX&F|cXtS!vERKdgFZ7cWY=QaLV6EfHyG_M<3Vv=b8(e`TeTLx&DYE9wy_ zij&wK59t&bpmO3_9pxlL=?l3KS8s$JGj`$p>zWkXR)2 at Awp3#AkX zK^Q5eSDne$S(?6h=8hz48&X<>MIZg+-~VzHHP^JGI_EqsI%JjtL^9j%yzk{qCb#BY zuF+g7zWv$@zxziNw?SJvzKm5Hh at h}twx~QEo##63Ps?K?y-&wupF6|1OR~r2!G6d+JOg86- z*?eua<03$pA+?&dffv8?Ctp%bLj>9EL^i?kz|-IOgTLF38l_bW0icb?<(~c%!iY$z zwgTPofP5S{d>G=~Wh>4^Fw)RO%|f~7q*5Q;LGO9K9a_KjIfyirQnf(mThq}scknHE zm*MpA;lux5d*2qE*KwrRJu~N=|NQqKH-aEYkPt5tBvFnn}WXsF13J*YG=Ja&W>FLwm)6GXlMvPi95&O^(EQ4aH z_-;_WxJ4EFZ}}xKi!=4zj~zS)%nfuo00-ik#YGw&9pzVEId#hm`+orhfIrH16GRnD zj-vs{AaGk|u}F7%zxw4{UpaN^WURH$5~E7F>g-cr`NqFw8EXcoiq^_adneoo1R$A# z&=OlPoxT0%T*qxCNp!>ZqRb4{+H&{L{?~u`he|muV~iJuje^!mTgh9-B>wd4Kl+lj z*eltd6 at RI zwa-2I^ie==SY{F^??`gtI+%ecCw&{_(vfX6o5&{E^Wec(%S-bQHe2@TcfOKQeeGg6kV)~sYRI$G;Eqr+{ zs{wVhRxEX2Vx|TgYy~ozX&aZsy_y6R<$A^FVzhC>| zcUrB+O<%@!kTn=IYnS&B0`{*pYTSGf1KK3c8U at a3rm>r3iXAILw&%wRnzcf+)hKLq zJbv`cUp)Ss-~QhJ$Yk=>C=Al=IAU9^MkWk{eJjiJyNOwlHQ25ql~Qq`qkATuEiDpJ zT?#1)Aa{p?IhQdtHAM%${&j7I*8~>z-hq40xL&GxE6PL&358Eip0hYOU{Egp`u4=keS;!06~zlI`v$Wk6ey5io}NeBq?2oN4Pj z7nKVeuOXmHNn?x;Xg$NEglId*=?btApe$K7ln7KUU}{OJK23nAz2`Eol^U>Mbm9UE z)7!uMd`DOBM~-rDPkgX`Y4m1dV`e~5EPxp;k&dL0Eu~c0u5ovD1Y_-ndVKKkb1&s` z#ai3+GK1EMv_`kBNDu|&bEU;czx>S~0EiVtRUxKW+_1#g=5Wa6SX*w#O)xe##-Z<< z1a)LI2TZovxux%IC7rh4m9=p2%ZOOBR at 8-+*Mx&N;u>W#Ha5m#=$jaHWPk%i8T9mQ zdBd#C-jX)4%O at NA_8)vhGB*syO{p=Not?d=bG^8AOJEWS&~u;VN8g(V at U}Hj)^%joLG}InYpoR-$O5_ z{p at W!)@~KVgh(6`P~!{F{_gklh0b{?)tx z1K_H?Xwc};3amM8Y=c{81s_Ip;X;9g9vNFk4`2SjNEI1Ov6b`yV@= z&g7SFZ$@Si&>)2Jp8Zd}v2EAh$xJ%`nI=3TBIL5g+MWjv{-AT)u3uS}3t(u4NQZ3E zu2%19Tl@&jC~rf?Gvni2SgIMrCSn1tLTAsi>-qI|p6z+*aQ6d`u7-mx)dL%a^Wp3@ z;oyz9u1kAnW}MxCwCBVvW^SZ2xw1mL#JWArXcj++w(l5tjhPz`b3;-TCAk#~R~_xf zS~ijhS6isH&s_un6jlOSr34AF+S$C_;k?@2$x3ag)R|nv90uUt;29$`UWi)Mz>1Xz z4?gvZU79IV*jD1`hNrC+qC{au6qDnnEQ zr(CXB##>CZ6;g6OSE|XI6;s^+Vg_wv%V4Wy=u$dYoc-GKFO2u}?s(hxv&~OaasPVY z)oKJ*A|}F9QN%U?q%we5*|-1k|C!0;Z^x=&W(b(YGJu$W^w6_M_CECZf6rx$)z5-{ zAp{f(oy!M at pZhm^9(v*!B3>lTi)<*+pkm>HVP?j51-4qyhb<9Fg=Y9L%x0Y&-vJGFh;u8SZgoCeG`zAzCWzaQo z;6+4K2c~-8w(ZCC(#e}U{Mdpm&$b31IQTaJP}NL9gqir&t8z;!m5 at PrRx)Z3oB)8u zHf|52jg62pk^&^u$e|3al^Kh<5p1G#hpWsytQxt6aTG{?on3vW(tb9$9r^_d$YqPwEn9a^f9dPr`4?LTcE2qd&YPGQv~E;QO|`%@6DCNQ zscj1v5m_jwDN)8YO3aya7usIy_&8vYTM=%RO>h4_ueTEp z-iS>@Td&T}(r*>^#VKnV7FBuA{Re)2{>Mk2i<6+Zq1N5Tg{>BRsn5p)gZKOyGAs!R zWl7Yu{hprq>Xn3)N(U&Rw+xUIy5Q8eZrky*b07RKC at fh1`a%Bmym#rWgbB?^UCjlcXmCxOZ5bMGKwjToBXLGqxRTP<&Tt%$fcc*lSp zY-z`o(G at CJ>gK1v at tyJMH(vei6k0sZ?gop?uAH0RfbB^uRs$zlb#7ryA(Hb7tf)(fNW{QM{1m_K*=P#m|?#%gc9$u%N^5CR_ z3mG`dHt&7(sm8qro_zD;6Yo59dgkrlO5&)bb?n7)m|d^caXqY7(G#GgG>+?qQaV~n z6{Y;_rTZRv@`!T8B|}(SW*OQg6A>=kVzDSCSaILyp8Q$g&V473zxEg33xaBYl0+G@ zR&0#Wtgc;xlqzvuFY4;u{&Ry|K>;fiwi+H~Bnxcz_U~$LdHx at rJ@di44}SRG at oyz@ zSc>B)qjl_E at BY);yzF_Yz;#lQpUt0p_{lFHDRyl=FF-7l6idLg0yeI%h(^>49h?%L zvKCuXK)ux6JDtQ)p4f^Fd+!tZBLIRRKb>3X8yNf$1UHQJ;_WhJUsx|Fbps#({>QD; z62s6Fs*q-YELcjNnEvZ;hEel|HA~jQ!N=MO2Ve2b&4mnj@Xn$5THP2LPWt#L{#e9GMCO4E|TE|#kAlWtk!BLqmipBY>khD7#e!hgKkxD z!0Bbc{#s>eFbaY$Koo$?*BB}Yx at X(YQ%X4ViO>s4gPSrZJRejK8MAG1;oM##>#Y`Z z|K!w10YC(t$>z%WQqLKXat at j1lS|7LfTi$i+BWiF?AWCIeA3|=SLH(1of5elr0A?y z%G(ysp59xlRdzRnV8B|=0P+Y2kUBj_ zbunXSqh9GvVVDz^}IN-1m|4QdKFS1t_d#>j7Z4 zyl}Dq1I&tCu>v80FLW6GWpW^j_$2zI(oLA>+0Kil8NRLcIH#HRCNU}+MHK% z{48XxwFO{VBuNFdlw+dIg|jDjEu5Wwpix~JuqMe`B8Q3OYPBL^rBabpD)9YGwbZli zRQI-lvzR7zJSf{B%LQNfFnC4$ZlZWdGXBb zp7N!+U6qyj-C at w!N at QIjWbCEV*(3`amUteACff}wRA2KR)Yc*z at qCj z*&+g$tTiPeL|*GCfA-{w`{vGm^hg}FI<3)ZVp0f5LP{f*6J+xpXLsx#db at AO?lX+o zWTLuIP$A%obYv|KMRPD0#z&7HwWFh>aP;VODom at AC*)Qud0XYu#XU(F768Snn|Z^2 zWnyp~x7FF#e;OI*Bdh1~nZlAE?rsea-#mkMVq!u at g?*_m7fKQ0c3?aBi^(5-_uTBv z(@7F56nZBqoxekwqx1twjt~&r8)8P6W~SUN~U*Dnbwej~$zovvtSMWwUuD zumr$GiP9%vb;UQO1pp;15+r0z(<-irSk$mdNm#VXvu<7pC;?&)C3;uW#taNd7TF0& za@|3!gke~NiXV=Q4Cxy&2?20ya#9`$axP>c%_5siASwzJc{VmHK%^MK5o>q)iI at a{ zK>-O1Y%x<^SX;I>U0EtNLw`nLYA2-?ijvS+5>jQDjLTQm1Yib63EFBKB8r-HymG8< zy&D#z!-o%BW`@bhNqIi$@KV;MWlrT3$pWIyYp_{iL<*%)%p?$*2tW%E5g|0uK)@1P z(h{*mml(2$m_vpPAh-alwTy_EP=ZE+gbrVh#nTEu)9P3K1{+#u%(&%dtRcGCLI^ zxg2=STDe?~dxIV9`;iJe{gkUILjYMsn`6c-5T}vRLn#!IQ3!}a2qwV+g!Au3AFa^wV<9-(`nMf0( zj6rdO04i3>YPRY&k00NyM at Mh!55PZu~PESXL6{Hnc#~wIU zL~=A4DH4I}cT*j7nRLh>5Yl9ZI62laH2ki{dj&LiK00BCjb@!b{jHWu;iB4PpRt zh*PMnVxt4Lu`IVDh)eOz%+RJW^UHJsFdjZ^j~qD?XXV3I=WQ&S*mN>-MLSLkNqdCs zpj}l4OiYH2 at xVzK+*o4}0m!f>7oz#2Q)Xyrlwsjb3e#DW%BzMW!A&Be1c)p6$u4mc z5cvudO>R_6;wU_$laUvOFFU~wA0DvDtNJOrWL3Z3vhwfl(7_6Fltnspr)9t3Y$qSEQ at kn ze&!iHx|+O%6B83Qy#M|rx?n}AQmi?Svbqoj!8>MjboUJv2_oXL zW5?v~jt(!>ab8*KA{L#0Gxg)&Z#L^UR3z)+;8J(rMQgE!c>UYKn~uL(ng$}`7&C62 zo|bN-A-i%p5jK3`)hh^{YyY$Y5a&xAC5BVACIJ*IzzMq+3clI*9ZpPufcs}8)M~QO z$cUP&@Otz6xsa9{4N7u3JAdGS9Yf@?u`xV!XjFvZDQRs at hFM=U>J{v|YHT4fT+4OP zLiK$r`@V&#DH z6IwyWmtbP)C60)tK!7GF*CQvk+E( zz4h%dYTob)g70Tq4}bpY|1fah=l%+;I^D31`H#zI8)MHuuiMGzx`k{$z_GD$gwatL znwYq*yL)D2gkgMqz2f+-#>H`bd>lvDi#p$6{;{#qD}=RX(!%&S;Ly! z?a%*Yv{o-~UJ7vyrBe68v)}#4|C|ke3}DX8EmfB%VJSSaiBIvG=YQ%}2!F?ctCGGl z4AZ9Y?<6+T)ho6WH5LHX?XwXO^{&i`p{=w8i}%YR>+{QtL{uY&l~pT6hk zQ=$VAcM$R5)XU%hCzs~WJZx at K`oeKsv-`eB{``?AzdC_}Pdk{oa4Pty{s+%KleEjf zJ67 at O?+VuJ at AXq@wMW_Cf(^Eju6Aj4^0w^8jx+2gO#{9xOq5uBkn4bySR&A z10Vv%+ZRP5*s+8ev{ZQi_~bumwHi0fDFIl!9bD at Ez;V+Rw6I^!w78&Gf8Mh~3&<=an at H9oJUlp`ZEt_I4Gne!dp=lgc;eHR$#9VzBi lGri*b7g}qHk+-BA{x2U$r4mGCJ6-?)002ovPDHLkV1gF$4w3)> diff --git a/src/public/images/map.png b/src/public/images/map.png deleted file mode 100644 index 3d8c9fee4bcb027d0b4d7490bb80f061b9ef3879..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmV-$0gwKPP){&gl3px zWbpOt7lvQIelxf at I&4M~eg?#6fv%l}(`G(iJ_b%ME(QZb4G`A{S?=b|8z2LXvD$q8 z+&PB6o^A&8u=x1#Bg4xVFBnwS)EH*Xn4ZSMKmvI8?j6I^r%xE}- at A|MXAlTn7s$ZP z%fe7BTnXmK#Y96q`SdCN00V*bLF?hp27yIOmST1G%a<=f&Ss#Vv(W(|XEWkUp149A z?rfj}b!-}e at wo5Uv15*kii)_Ly`S;_|Njg)G)n=gB{G| diff --git a/src/public/images/minus.gif b/src/public/images/minus.gif deleted file mode 100644 index 9a8d727d70ff5161ec18c0cd0156ae8d50a23b75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU at w$``4~=2xoOmJxRJ?YUCe?7 p4c<*mc6tvw4?K5dl1^^H;N?iZ| diff --git a/src/public/images/move.png b/src/public/images/move.png deleted file mode 100644 index fb181d554c0aca1341c6998f31f9b62f99efe089..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmeAS at N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhEX7WqAsj$Z!;#Vf4nJ zaD4z_MyE9Xom?)`MRBiH{g{wrmwv$}mYj%p~bP0l+XkKqtboh diff --git a/src/public/images/network_error.png b/src/public/images/network_error.png deleted file mode 100644 index 979532ca24998ab0306a99d75101c10277a6dbd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 989 zcmV<310wv1P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG_ z5;Y#$0+jRs00Uh~L_t(I%bk*KXw_vH#;^N-&hcz#XYV_w9o at +Hz-AC-RtDN4A=rwF z5~&Y~Rv)UFWg{s@(1$FfWYpFtsleW#2pq9SOq)1yJ7!E{Zf&bJ33{7zZ|>#%pI;x& zY?5w{t`E<1^YHL{uKT(lF^}BL(%jfc#pcbNNw(pf<66?SE({Hxr?e=BGH{vjDfO%x0=*HFuX~lO4`v;Me{u z4J;H|QGO4SIP!i8Oo;D4DZ!JmZR?iV%opU;0r(tgYQiKQ-IR|zQ_9!x#u+}5pz6UG zl4xr^I(Pe53*0$aSGJZ6iR9<2xNm(fQjpb&Oxg~v;JRFojkn&u at JyXcQUCTkNFFuY zVw`Kf9#2`Agh at 2K7w5y8VkGhD2M7Ms;T+JZ at rxu1W5gms23r$MpNewBl59*OClukQ zhJ4)F7&k7?ptvB;#j$a~pU0_#*I(I#nNeSzfW8oZcaW!Na@?>c2frf%y-}KKm*L5H zwYvI>AE3*>MQ>L(nc)m>UYf&nM-iM7bcx3LI8u&auOL^gu1ZGC#p|AcOmM2Mo zc0T)@GCWUj?hZ at -h=j>xazW|OKO&m;r!??eNER{)PiCInn5UPXiK;LX(DofqX>xp2 zA`RrrgCAoO)m!4w7lt-LGJv041iew7-loQP}vrgHrQJp2JSZTf){00000 LNkvXXu0mjf9%#$R diff --git a/src/public/images/network_trend_check.png b/src/public/images/network_trend_check.png deleted file mode 100644 index 7639ea8acf6d303c5955b2d714e1d2a299c80e75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 749 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG_ z5;hw4LIW-U00M1EL_t(I%bk?ZOI1M}#XsNsR6_c(3HkvkQAA>ekVp|N!l3>XH6bW# z5en9$^krD0AyyP((!wl4Oo@~bq99w;CJdBF%1DBTLMnRaw79zQ6+j0meT;5 at r^TDR?0%AX|SkxHbQo871wuOzP4$$vG#vV06yODS&gSuk}&V z>S at w{se`SSHqXkZziNvwMR-#+QpJ2Z9k^*4U+mY=e3gdgt5n<)kUL4{oKsYrm8)dx z?GPS@}H+chnj8s;)Bdy%Cec_nG7yEm57-ZM%^MLkcyTnXm^1_$8hRYgp7 z*fOc4NGb$dFU2T7=`exs1nW zJ~A*d{7NJfj?C-_GH6+*pjB4&!j|(fjvcq~>Ynp(1|uVm+2*D2%4y+F)lQk`q>Q&m zK>k_d=n)SyA&EC{VXno`a6dFGayrTXd*|hyG0Mt3-oF!bZ7!26OUtecCto?0u{9p3 f?8y37{4f3hq9;DQ6 at jn|00000NkvXXu0mjf9??+H diff --git a/src/public/images/network_trend_down.png b/src/public/images/network_trend_down.png deleted file mode 100644 index d429172c00d5bccd09a0aef62be050891a726b05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmV-n1D^beP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG_ z5;r5TT)Jlf00QAjL_t(I%axSdZ%k1b#eaLxOk0;ur`1%Xgb|%lC8E*72nf7XP>>kwbr-x zQDQ_;00z($O2B(xT#L9U72;nNE*$h#`rTVb9^EJT>Lu3TAhzRDv12E(U3*x0^ay3O zE9V7OMnnpPL>Rn!fvLBzDOnF~{I3{OfYzuNZ#5hRKLTro4{(gQgsiEP)L&DM6EKrRH$yjSEk(wIp z#bwUSFm{WJH6Mg6g>}sDuX+fA>022dprrs6gS1QBoFPKSDxtT zvZeIhyUWzj0DsOU44NNLo?w3)CH1BqJ7?h-my&P^(GBZaxN#HK at Bp~BkBJ9dT~$T= z_ARzvx|-kdJPwNpskWyWE6bW|Hz?n>oltoch2rbIJ7k`>QCeGzJv8VgONwgCN*6HF z at hl)5Kr5v{D^_2>NoB(U!qE!PLuIILJWMw638l2phGLagEGFI6?PFPx50(4s2$e?* zv1;GE4&w at rxI{uBsv_ayo$&i79<$cUMHmFzwmF@#e39~1+orW_Y;NJl)3#ZWQm%!u zT- at 9=#<9V2z;SRKhpvwwIGvgPOLBp_o&-H-&k)_Y+ZQR1<;+zPr2<3mO~g5s&H_3J z>Ze at ao1pvhd18C_d2tqllHf>m{<$;$iIbDlh5teT)ZbYt#s1#U^t3b+ZKy8{OXag` z&=>{XA3kz&A`=*t{@YXoz==LO&z~h$-+-Gki}Y+Z^SJgKj&r55T at 49i00000NkvXXu0mjffEkVp diff --git a/src/public/images/network_trend_up.png b/src/public/images/network_trend_up.png deleted file mode 100644 index d2476f8d4dbe10bcc509e2ffa919690d1c0eabf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 837 zcmV-L1G at Z)P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG_ z5;qf;g^J4n00PBHL_t(I%Z-%HOBG=h#(!t-wfxAdnHG{|V%J;wMXQR4+DI)TlOV%g z^an&OgaSX%br3;+KnSf|R0w5XDpm?s8_kUsXdhNc>P5 at BbLTxRX1a~nymdBnhM9BT zbDrmUA5m2W16cfbC?M;9wpKm<5#L8gxLa1j+{p8c=b;(G1ao6_fO||cM=~MMAaZ7 zsDOxIVXzcx_wJ#mD1TKeYYm2e3|2>}z1qRTvths>VxfT_3}F2C`dAe`h1saO>uYJK zCQ40LH}TOIsi^@(LF9L?t2V2S#<&&90SsY)?|t_uI(aJ9zyc=Q+DNKPRwzVy^Ep=D zPWcmh|o}X#jhl zoR;}zg16F>lu_PazR3K*6O!>oZ(X&R>+d5cT9qOxJ?zCLB6YQE=n0Dmn~xr2{{92r zwO+!p6C{nxhVTX=dt&77t0D1mI)!VHtQGqwrN>XOnm!9rb=6&7=F|0SsB16 at 8?_xU z4#swH6E>FPU|a{a6R7K85=ltdOpTAzF#3wT9p!0;q86dNd~$YGlC`B60yo$AnhdH~ z)LS$@`<06G7rcg=?oxhDNlOdPw{K(>Zy{V5 at c}0wDM{rEA3w0PbsN>KSJnzVPzMrX zXJ*BgVd;c=TD3OfGo?pz!WG%B)MUH59ot$9r at x&yy8d=`6!XzJq at RxT6Vu7Q(DVye7oJIK at c3gk1v&AqJEy at I=#fX%DiT> zgwt;Cji=uOR&wuvFX-87Ln(ttE%*Wa0e<4-Gm65zl8lJNxP^Jdccbj)PjEM;MFG`U z{s`wFyC}>r+FF)n1N3~TgNy2LkO2GzV20*VI}uiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU at w$y4*XmR1y>vzmpih{E$}o|KC(Juvl9;ogEauy5=OfK diff --git a/src/public/images/slider-bg-1.png b/src/public/images/slider-bg-1.png deleted file mode 100755 index b7d806ed630bb92ef4f8ff94108ee9e3bb07171d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmeAS at N?(olHy`uVBq!ia0vp^CxDopgAGXfK4bb1q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c73F!lIEGZ*dUO3C=K%$t)`v4Z_w4lB-8uJ2;H|vH+w+oy z1*$IOeW({WVfn#BsOtTtsM{_}B3v0iM969`)xHvCE2D1AsJ6TBEMr30l+9c}L`&~P zGl=c)U{^6_PtaUl`)a$X^lX+NX6@;RHh<(YV91^-+OzI^=L?|C44$rjF6*2UngCuv BOOpTq diff --git a/src/public/images/slider-bg-2.png b/src/public/images/slider-bg-2.png deleted file mode 100755 index 8b24cf0910fc24c075e44d324ab05ef2fb739ddc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmV-M0lEH(P)2N3a1T2XOG^5J3rxRD->U5tO2~nPZ0nB diff --git a/src/public/images/slider-handle_select.gif b/src/public/images/slider-handle_select.gif deleted file mode 100644 index 338d2445a78753c15cc5c4e72c734eb074d1e599..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13245 zcmeI3eOwcD9LEnu(MdiOrj^xk_C&GW-5wabwjphSm@|_VhH2hzw{h*^uG`TDk)aWq zW|^63p*>KPX=rJWV3tx*SdkQ!lulT~XBOQaYKFa_e@*$9 z1uK&zfx_`{IIIclG`#4=Nt4Nh6IxuWRm+4rR1uWuh&mXW7 at H(MkDU!MA}2^3A4HXT zX%}BESujjlDAD>4M+=FCf+0=cK{X5?z$3JPlNtg~%q$n0H;zV1jBSeT|fqaV3;nb3&;Qv4ATX50T}>- zVY;9$AOk=!Oc&GzWB>?;>4Lg|3;@9}T~HU00U#Kr3+e(g00hHyL0v!wfMA#|s0+vd z5De1=bpaUwf?>L#E+7LyFiaQJ1!MpShUtR3fD8b^FkMg=kO3h0wCPeMUwW`X`FTfJ ze#em#{qNs at djCHD*PnkJ`~A0HdyXFY<>#Lc|MpIE!5?(xS~uX=RlBP$+W{?M`qA6R<-lEwEeT3CB;%{>d|SKmGF zuBtmLD zRu8i03mwLqmPzxrXN_ENY=~Nw);3{b+nT{!=GP*lyQRhzJ%zK5R<+VS!!~SPNgW(o qI(Bix)b-1ESGk&Yh1whT1iI#6bxWD?oh3Eb&L_t(|+U!Y<>A z3c5i>Jp?^eP!V0E8&V?GV-E$r7eqG*G_oiOk|IsA5((5utF1(Bb7$t9)Bm5DwcXX# zZLxyzu;2V={(on_^WV-KMF;`^YB=B at jw$jf^1nK?XoZ4<^ncZdc2%aPdXK59V_CSJ zb8!_wTs%~L;ZY)l5v@%(;lSZUWSu^~_eocKgWyJA1lpe76m>NR8tQ8HS0qXvf;NWT zg_y2sT6ym5dBB73B8(-A%1ErNzu&a-+?j*%kab`@-wVM{MMq1EkqQrI+W-3^L10~{$n5NrTMusvb{zg5-l0#HGzil^Es z>=^}xMX>IMAJ*Ue0*aajf}03t!;~_0KGTR zWgXw6qcr4w at 4MH~cO at BqW^`KtwbUByG&|s3-{VmN03KxX(U2^iZ^uGPX zTp4l&-=qinU~%Pg2n_ba^9S`K&z6=~pniocE`j9MhNZ}#n80&%7Y2Mj-*%Llh&((+iqY1((X;b8jy&!+c6eiC=zWiTcNXdzEtQ#J&>BB+6govGb;nO?A>Q^m^$PZ7W}%W77KYE zl7AF-lTG|pvs3W>=+VP)`p9N*>79_B;RR2U%W@{V`s7R*Z+DlzF~;K}r~dhxnF)Wlb;n0AnTU&=;xp_}H8_0s)+8MpTE^5W(dTyTS1*d02=62wT80pP zB*Xc}BBy91#fVCxgK{=Zaw76SdTtBn(;>z^V@(~M|3~tl0t^5s=HNXcp at pOX0000< KMNUMnLSTYP>dCJF delta 908 zcmV;719SZ22ge7HNq=ccL_t(|+U!?NNK{c2{_cBkeE!gsl}{{m3 at IpyGRlMsD#%Sm zTJ2g?5VcFG))j4YQEh^V+}pybMG!=^sEEQGC at Lmm{K1SIOC9`~d4HYr-gA15GdlL? z#si1 at Jomo)ednC--gye!wy{tqVF7Isd=dP=nvxk1Lipzj!++PB64_pCY7L9|g3UPA z9PqmjcqIYbxs2z22i)%>lMQ9gz{_a!p+ha5K<~-yJB8YD?|O4ypwm^##8R at XE#$17 zr(D3^oI@@TJ9}5yH=aRc?YXbdY$|8o(0m1`+UT-PMj?i-&fK;C)a8mU|AL(R%6qar9^;;+XQZ!XgTv1EVx{1=TZlG zay+5aOU}U{a30wU^&J*}uEA-n$e4BNao#{(4M~kK at Hd>aCC*R&~27(a^YtGA8l{0m|ft z?uv5`a9V{iP1BCkxPrWz%6VsM%1GZ#ZzAUqTv7$HUFX)Mm zz>-yp(UwAYNl-PM^3MTI62({Y at 8rCio9dT4LVwj|2q-4h;!(s05|o^Uqpf>Uvr)sR z$N(O9bR#}wK&vRCY#Ee~BoQ$6IR)pBRgrJ+iN5ZrT3hGd6-FNvshu{Pz%K$IfjP=% z=l+_en<-~){v2Blhi4U>-yqJ$ zE`MLad6pvorY$c*C{%(#U<9g~TQp94xVLoMIYgXFcm#w;Vjkd}dE#T=NZZBzmoEH` zj|S3hOU|BW{G_U$;!C~r|0kw_z>%v3Eu}X-lnb^X%HrNvoz6-BwHZTaosn!i^}uDede(JhuLwH at DOS^c(Vd z(evEbtJzZKaDPRE>$u`;@O8yhC~<79f8E8(~< z+ZjrE_O(TSuYT=kZvE)1w{prU zuvmVa=!1e`V8A)>cWR2WK-N-Q+|mq>Y54S%~68e=MM-pDOCa5G#3nXC>50viJS#K{rZwRay(rL#OPNI@*o zT-mv3H&G@~rci92ZsqBR&uvRIP=YdqWQT*3B at Py%bVe^(zH84u_~zhIq}RbYr}R0k zGk*&RZr28J$w*41^Y2^ZwHZ{G&JFKvVnI|n!3ph1Hg;{K=2Z44X=puxT#Xb7tyD+(wivJ3&F zn1au-$$DQ=1FgU3pNG4B at 3Rk8nn<==9n18jv zi4AoQR>~WdWc9hOuFqOqTh~M)k+7y|psFfQLtWQF&t{F(zxRdet`xo$f z%XLU(MvTsXp=|MBqW~$OWKpIC=&Wm$0$1NCHgaO)S{i$TZl~@GNziO>tKvx~WD{BXm*4E)`S~aUp_>7OY^kCQ>lc)M_)SU?-iar|5Tf;2V)DJA zTDupA4o-?21zS_rJkhExz_$@_*h%==e*te*vDzB)oPo2ndGU#tCxFY(x8Es$5?{VQ z+!g2&ORKT8Hfs~?wH$QMb)fIw$XfdXL~(5G zu7wxYNA(*(ZGWo!gd>TOZZin@$%zFy at x{j7*xY9pVYddj++P+O_rY$dNkH$HH0FJs1H2Z zlDRt&_byp at bj{hJ%_lY9%=lZI^}ntR3=H)5_2rLdvzh*SJ#sFcPN7_`%*@Zvk4{fd zouR2~oYZTu+JGxf(D+8jtbP0Uf0fJS29wETBArenk%)RZmtnnLXEjTu(vKgEk1g+! u`Pl{d|8{2E at Gx;R|2}P<+c!o25nupBEGyh0U05gp0000@k+ at umlW}0Y}(EK`{_1 zAm_j$vq&)qBsj20IdOuc4;)a=5h92aLO>3YI1$MqViAOF7_l2+1VRxC+sxRrb8)b}b{qfLuzfX4fWp?QlGNi5<+__DQB~O=&`BQgpjI2C%aNq2)o0nG@ zdiiHc>BYfqyEpra+>5er<$#)=*8Z6!E4{L;tfP{&!c&H$v2Q!)_i+CIAwmvs+P>$o zZQH}hKcVOnI)8Nyovcg+T)uGXL~!GlUAq_bEE!OP0Z1k^2!~V%A**T-f`I at iiVW4N z2}Y#?x^6(ZtV0PolgsxTMx}rB+Q at MP-Za(7732h^Qcrhx7o=igh=qetGOCbHL?EmN zkd at k(OL|qTPqGEEPLvGDOqAgE^~=4Dq+LReNU}Wr-hZttaM!YgP}hrMWfpT*=E%`W zXO)~1Qq>6VCBXBYjl62yx``=Udj7XRAkxtVSDz^`v%3!l)^C7M7cB!Ty#SVfy%sip zGYIoP{|d(R6g16Q3}5!Ig2!?j at N-A@?~OJRxq&>6ta*Z#bTb6;j at z0v_%~C4$Jrui zn0o$PHGi4VcXp&88C79cYXZie+nI9YCeJco6)dbz(i)hi1?|lm5K5pm8HH#l01 at O= zECkJQhr>YyQd-C<8a(IP@!#P>0SRn|w_)4BYz8v69P#W at fZsRj_@^xuL2%W7dnLp% zDpT_O5Ft*#bIBHZUVu!9Exr=sADmY*MPNlD0)NDI`z-f`Ki4&w+TOC>61XtJBa^8Y zCPkcqQS`5UG|Z zt)=p18Ra at pU&S|rxsAyexMiB+4x8fPS}WxsU9(zhK%Cl|V`9x>TjesIu|}twxJrJ7 zrGH}nQn6g=T{yedO(_En`#fh(`I6H|=FLdML_rt(3WASko}Tdo&O)cT+Bzo)WpGzpA z at oDYT=T3Iu(ZdI~u?jP$Ssni8{+$DU!BcaFUV^_b41bUNAKYn2CmBSRdxnp`9CFzY zICBk{t}*H|nXEp%Y3Mq^{D6B77_Xa7 at 8Z|%$3G2kjs6p00F(Z4zsKNb4FCWD07*qo IM6N<$f^zEL0ssI2 delta 932 zcmV;V16%x+2;T>gNq>P!L_t(|+U!={Pg7?Y|DB%G?^Xf at YC#amkj=V*I+wUQX66T> zi3!&x{sG<*z2ah5#$uY)=Rs3VN3-s22vU~nMB7o19!GE>s{2AuwIhYq)QvL^F|V?Lk% zqYu4kX=#DGwhrQ^fOvccPiLZt#h&8v*v7Oc(0+G+<~rgvrTAc=l`&e3nOh+Y$KvXFrp{oY$LhMhb3V zO&!ONcOacv!ESdgL{Ua6mBa_lEoj`+n15r2Vd1K(#DD4rh>Bemuv)C3Yc*e8;B*&7yW*hNi^^RND1WjHkEae+s|_O~!w>}lP2 at CUu_#jH z1d4pi+uK?8txLVTdh6b1w<9M>|HG+9_!XCzGuvIhQ7&-GovcW?3HmTRHt~;(78mA= zJmd%E0;fcZ!uqSbf&O3Na5%RNqmf5j_fC at ORFbI#!Ipm3J8Vs zCVwt`LHaz+cE<3wgZAGFAR2vwxzz0C at sY^4+X3IsJU3|l-9 at yjsd?|`cBj*K=+mR; zl8M=Tt-HurjYp at y%ZWnp$y79;ajul(W1ffrQEa2}XrS|9E)g5u?yIqgG7GMAvk9?AsiP{4I0000#5u&OIDnf!*3dE%w*dSK0KnPT}AhAHKSo0T9sTD$k6^npc2|?LJpj23)h_-2+ zHj~Cp+{Ae}6Wj54#*gv!+ at 3qNQ50Dbk1Ks+&-i>lpL@=ktKjgZOifOnWsJSan37B+ z5)+nX3(K~bgzL_7&ad4_rEXH3_}g#@j3r;0{8&}hkKX&>;@DL3JYw+#ITS4D%lLI> z1~Wfj&A6 at Bm$Sd8E>XODSZ0he`{Y70Sy^0K7WJkpTCNaHx=3XUj+k5A65n2(5i&-` zN{=+E-L`q|<(FRd`+Z+r`s(X=Xy7Cw0fq(_upJjg+eOB3kS#R9U526I6aLJ?tRO|J$uJOHzp$Gz`9N9_3vc>Kq;^+Kt1Ww%h!y8+pYBh~T#Uh$!R zXCA_BK?(E`q~9Br^3FQ8(zD3TO(ROMwbXRYG%Mev??3pSyyn4IPkH-%_>D-2T|W^Y zgzv};xTEia2NP)6WoisV&)^V3M~->h+_-%`S2oQb=I^C1lXp}0az9Xc=e5Y|;h^%% z#B(EX5X44q6(yTN&nKosJ)sGo<{S3v%A0Gn{kz4z(r+uP*;#tDO|sq3!YG)wu50;$6P?HP21G{?O(&>dLqC862I3E#!IpG00000NkvXX Hu0mjfwm{v~ diff --git a/src/public/javascripts/jquery-treeview/demo/index.html b/src/public/javascripts/jquery-treeview/demo/index.html index 7087163..aff15fa 100644 --- a/src/public/javascripts/jquery-treeview/demo/index.html +++ b/src/public/javascripts/jquery-treeview/demo/index.html @@ -255,8 +255,8 @@

                Sample 3 - two trees with one tree control, black and gray theme, cookie-based persistance

                  diff --git a/src/public/stylesheets/components.css b/src/public/stylesheets/components.css index 708eb0e..540c413 100644 --- a/src/public/stylesheets/components.css +++ b/src/public/stylesheets/components.css @@ -18,6 +18,8 @@ } .header_titlebar { + color: #4e4e4e; + text-transform: uppercase; background: #979797; float: left; height: 25px; @@ -29,7 +31,7 @@ .header_menu { padding: 5px 0 0 10px; margin: 1px; - background: #CCCCCC url(../images/bg_menu_big.jpg) repeat-x top; + background: #CCCCCC url(../images/bg_navtoolbar.png) repeat-x top; font-size: 110%; line-height:1.5; height: 26px; @@ -80,10 +82,11 @@ height: 28px; border-right: 1px solid #5A7A8E; border-left: 1px solid #93B2C4; - background: #000000 url(../images/bg_toolbarheader.jpg) repeat-x top; + background: #000000 url(../images/bg_toolbarheader.png) repeat-x top; } #toolbar_nav li:hover { background: #4B95B8; + color: #FFFFFF; } #toolbar_nav li.current { background: #4B95B8; @@ -127,9 +130,8 @@ .no-grid-items{ padding: 45px; margin: 50px; - width: 750px; height: 150px; - border: 1px solid #E8E8E8; + border: 1px solid #c9e7f7; vertical-align: middle; } .no-grid-items-text { diff --git a/src/public/stylesheets/default.css b/src/public/stylesheets/default.css index c257ada..911d795 100644 --- a/src/public/stylesheets/default.css +++ b/src/public/stylesheets/default.css @@ -21,7 +21,7 @@ hr { height: 1px; border: none; border-top: 1px solid #bbbbbb; margin: 14px 0px; /* ========= TABLE ========== */ #main { width: 976px; } -#main td { vertical-align: top;} +#main td { vertical-align: top; } /* ========= TREE ========== */ diff --git a/src/public/stylesheets/jquery.jgrowl.css b/src/public/stylesheets/jquery.jgrowl.css index 7f558f1..95dbf48 100644 --- a/src/public/stylesheets/jquery.jgrowl.css +++ b/src/public/stylesheets/jquery.jgrowl.css @@ -76,7 +76,7 @@ div.center div.jGrowl-notification, div.center div.jGrowl-closer { div.jGrowl div.jGrowl-notification, div.jGrowl div.jGrowl-closer { background-color: #FFFFCC; - background-image: url(../images/icon_conf_message.png); + background-image: url(../images/icon_conf_success.png); background-repeat: no-repeat; color: #333333; opacity: .95; diff --git a/src/public/stylesheets/layout.css b/src/public/stylesheets/layout.css index 981ff22..a739cbc 100644 --- a/src/public/stylesheets/layout.css +++ b/src/public/stylesheets/layout.css @@ -7,6 +7,8 @@ html { /*overflow: hidden;*/ font-size: small; + min-width: 900px; + min-height: 400px; } body { @@ -45,7 +47,7 @@ a { color:#000000; text-decoration: none;} width: 100%; height: 90px; overflow: hidden; - background:#535353 url(../images/bg_header.jpg) repeat-x top; + background:#535353 url(../images/bg_header.png) repeat-x top; } .header_image { @@ -98,7 +100,7 @@ a { color:#000000; text-decoration: none;} .toolbar { margin: 1px 0 1px 0; - background: #CCCCCC url(../images/bg_menu_big.jpg) repeat-x top; + background: #CCCCCC url(../images/bg_navtoolbar.png) repeat-x top; height: 31px; border-left: #FFFFFF solid 1px; border-top: #FFFFFF solid 1px; @@ -128,7 +130,7 @@ a { color:#000000; text-decoration: none;} /* ----- Right side of Header -------- */ .header_info { - padding: 10px 30px 0px 10px; + padding: 10px 31px 0px 10px; margin: 0; float: right; text-align: right; @@ -143,9 +145,14 @@ a { color:#000000; text-decoration: none;} #help-div { position: fixed; top: 10px; - right: -1px; + right: 10px; } +.headeritem { + margin-left:5px; +} + + #textfield_effect { border-width: 1px; border-style: solid; @@ -158,7 +165,7 @@ a { color:#000000; text-decoration: none;} height: 16px; } #searchbox-button{ - vertical-align: bottom; + vertical-align: middle; } @@ -169,7 +176,7 @@ a { color:#000000; text-decoration: none;} color: #FFFFFF; font-size: 110%; border-left: 1px solid #93B2C4; - background: #000000 url(../images/bg_toolbarheader.jpg) repeat-x top; + background: #000000 url(../images/bg_toolbarheader.png) repeat-x top; } @@ -199,8 +206,9 @@ a { color:#000000; text-decoration: none;} background: none; } -.ui-tabs-nav a:hover {color:#FFFFFF; border-bottom: 5px solid #5599B8;} -.ui-tabs-selected a {color:#FFFFFF; font-weight: bold; height: 24px; line-height:1.6; border-bottom: 5px solid #5599B8;} +.ui-tabs-nav a:hover {color:#FFFFFF; border-bottom: 5px solid #537585;} +.ui-tabs-nav a:focus, .ui-tabs-nav a:active {outline-style: none;} +.ui-tabs-selected a {color:#FFFFFF; outline-style: none; height: 24px; line-height:1.6; border-bottom: 5px solid #5599B8;} .ui-tabs-hide {/*display:none;*/} @@ -276,8 +284,8 @@ a { color:#000000; text-decoration: none;} float:left; line-height:1.7; list-style-type:none; - margin:0pt; - padding:0pt 8px; + margin:0; + padding:0; text-align:center; text-decoration:none; } @@ -298,6 +306,10 @@ a { color:#000000; text-decoration: none;} text-decoration:none; } .selection_tools a:hover { + -moz-border-radius-bottomleft:2px; + -moz-border-radius-bottomright:2px; + -moz-border-radius-topleft:2px; + -moz-border-radius-topright:2px; background:#B0CBDE none repeat scroll 0%; } .selection_key { diff --git a/src/public/stylesheets/ovirt-tree/tree.css b/src/public/stylesheets/ovirt-tree/tree.css index 441ae83..ef1f1f7 100644 --- a/src/public/stylesheets/ovirt-tree/tree.css +++ b/src/public/stylesheets/ovirt-tree/tree.css @@ -11,7 +11,7 @@ .ovirt-tree, .ovirt-tree ul { list-style: none; margin:0; - padding:5px 0 5px 16px; + padding:1px 0 1px 22px; margin-right: 8px; } @@ -19,6 +19,7 @@ background-repeat: no-repeat; background-position: left; padding: 4px 0 4px 4px; + width: 100%; cursor: pointer; /* maybe move this into a clickable class? */ } @@ -59,16 +60,16 @@ } .expandable { - background: url('../../images/plus.gif') no-repeat left; + background: url('../../images/dir_closed.png') no-repeat left; } .expanded { - background: url('../../images/minus.gif') no-repeat left; + background: url('../../images/dir_open.png') no-repeat left; } .ovirt-tree .current { background-color: #698FA6; - color:#000000; + color:#FFFFFF; width: 100%; } -- 1.6.0.6 From dpierce at redhat.com Tue May 5 21:30:46 2009 From: dpierce at redhat.com (Darryl L. Pierce) Date: Tue, 5 May 2009 17:30:46 -0400 Subject: [Ovirt-devel] [PATCH node-image] Added new autotests and refactored the autotest script. In-Reply-To: <2be7262f0905051335r5bec7a94l10734bb7826e142e@mail.gmail.com> References: <1241201699-3306-1-git-send-email-dpierce@redhat.com> <1241201699-3306-2-git-send-email-dpierce@redhat.com> <2be7262f0905051335r5bec7a94l10734bb7826e142e@mail.gmail.com> Message-ID: <20090505213046.GG9941@mcpierce-laptop.rdu.redhat.com> On Tue, May 05, 2009 at 10:35:55PM +0200, Alan Pevec wrote: > On Fri, May 1, 2009 at 8:14 PM, Darryl L. Pierce wrote: > > + ? ?debug "Starting dnsmasq" > > + ? ?dns_startup="sudo /usr/sbin/dnsmasq --read-ethers > > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--dhcp-range=${NETWORK}.100,${NETWORK}.254,255.255.255.0,24h > > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--interface=${iface} > > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--bind-interfaces > > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--except-interface=lo > > also add: > + --conf-file= > > like libvirt does for virtual networks, to avoid including dnsmasq > config from /etc > > ACK with that, worked in my setup: > Tue May 5 22:24:48 CEST 2009 Completed test: test_stateful_pxe [result=0] > > VM, libvirt network and dnsmasq instance were all properly cleaned up Pushed. -- Darryl L. Pierce, Sr. Software Engineer @ Red Hat, Inc. Virtual Machine Management - http://www.ovirt.org/ Is fearr Gaeilge bhriste n? B?arla cliste. -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 197 bytes Desc: not available URL: From jeremy.perry at redhat.com Wed May 6 16:53:18 2009 From: jeremy.perry at redhat.com (Jeremy Perry) Date: Wed, 6 May 2009 12:53:18 -0400 Subject: [Ovirt-devel] [PATCH server] UI updates/tweaks. [rebased] In-Reply-To: <1241558159-7746-1-git-send-email-jeremy.perry@redhat.com> References: <1241558159-7746-1-git-send-email-jeremy.perry@redhat.com> Message-ID: <1241628798-10789-1-git-send-email-jeremy.perry@redhat.com> From: Jeremy Perry New images integrated, almost all images in the UI are updated or replaced. Also includes several minor style tweaks and in a few cases some verbage and capitalization changes for consistency. Signed-off-by: Jeremy Perry --- src/app/models/vm_task.rb | 18 +++++----- src/app/views/hardware/quick_summary.rhtml | 8 ++-- src/app/views/hardware/show.html.erb | 3 +- src/app/views/hardware/show_hosts.rhtml | 8 ++-- src/app/views/hardware/show_storage.rhtml | 8 ++-- src/app/views/hardware/show_vms.rhtml | 10 +++--- src/app/views/host/show.rhtml | 8 ++-- src/app/views/layouts/_header_redux.rhtml | 4 +- src/app/views/layouts/_side_toolbar.rhtml | 8 ++-- .../views/layouts/components/standard_tree.rhtml | 2 +- src/app/views/layouts/redux.rhtml | 6 +--- src/app/views/network/list.html.erb | 2 +- src/app/views/network/show.rhtml | 4 +- src/app/views/resources/quick_summary.rhtml | 10 +++--- src/app/views/resources/show.rhtml | 3 +- src/app/views/resources/show_vms.rhtml | 10 +++--- src/app/views/search/results.rhtml | 2 +- src/app/views/smart_pools/show.rhtml | 7 ++-- src/app/views/smart_pools/show_hosts.rhtml | 6 ++-- src/app/views/smart_pools/show_pools.rhtml | 7 ++-- src/app/views/smart_pools/show_storage.rhtml | 6 ++-- src/app/views/smart_pools/show_vms.rhtml | 10 +++--- src/app/views/storage/show.rhtml | 8 ++-- src/app/views/storage_volume/show.rhtml | 4 +- src/app/views/task/_show.rhtml | 6 ++-- src/app/views/user/_change_role_menu.rhtml | 2 +- src/app/views/user/_show.rhtml | 2 +- src/app/views/vm/_form.rhtml | 2 +- src/app/views/vm/show.rhtml | 8 ++-- src/public/images/Untitled-4.gif | Bin 13123 -> 0 bytes src/public/images/add2.png | Bin 48768 -> 0 bytes src/public/images/addhost.png | Bin 789 -> 0 bytes src/public/images/addhost2.png | Bin 47684 -> 0 bytes src/public/images/addstoragepool.png | Bin 1069 -> 0 bytes src/public/images/bg-image.png | Bin 345 -> 0 bytes src/public/images/bg_header.jpg | Bin 13178 -> 0 bytes src/public/images/bg_menu_big.jpg | Bin 13136 -> 0 bytes src/public/images/bg_toolbarheader.jpg | Bin 13253 -> 0 bytes src/public/images/close.png | Bin 1219 -> 0 bytes src/public/images/delete.png | Bin 50803 -> 0 bytes src/public/images/delete_white.gif | Bin 13236 -> 0 bytes src/public/images/fade.png | Bin 649 -> 0 bytes src/public/images/folderClosed.gif | Bin 13657 -> 0 bytes src/public/images/host.png | Bin 208 -> 0 bytes src/public/images/icon-queued-11px.png | Bin 406 -> 429 bytes src/public/images/icon_add_hardwarePool.png | Bin 1223 -> 0 bytes src/public/images/icon_add_hardwarepool.png | Bin 1133 -> 0 bytes src/public/images/icon_add_pools.png | Bin 803 -> 810 bytes src/public/images/icon_add_smartpool.png | Bin 948 -> 0 bytes src/public/images/icon_add_user.png | Bin 1084 -> 1127 bytes src/public/images/icon_add_vm.png | Bin 1166 -> 1075 bytes src/public/images/icon_add_vmpool.png | Bin 1072 -> 1109 bytes src/public/images/icon_addhost.gif | Bin 13484 -> 0 bytes src/public/images/icon_addhost.png | Bin 789 -> 0 bytes src/public/images/icon_addstorage.gif | Bin 14161 -> 0 bytes src/public/images/icon_addstorage.png | Bin 946 -> 0 bytes src/public/images/icon_addto_smartpool.png | Bin 1061 -> 1109 bytes src/public/images/icon_adduser.png | Bin 976 -> 0 bytes src/public/images/icon_addvm.png | Bin 1242 -> 0 bytes src/public/images/icon_change_role.png | Bin 1098 -> 1156 bytes src/public/images/icon_clear.png | Bin 533 -> 0 bytes src/public/images/icon_conf_message.png | Bin 49126 -> 0 bytes src/public/images/icon_delete.gif | Bin 13735 -> 0 bytes src/public/images/icon_delete.png | Bin 910 -> 968 bytes src/public/images/icon_delete_11px.png | Bin 343 -> 409 bytes src/public/images/icon_delete_white.gif | Bin 13236 -> 0 bytes src/public/images/icon_delete_white.png | Bin 501 -> 0 bytes src/public/images/icon_edit.png | Bin 375 -> 0 bytes src/public/images/icon_edit_11px.png | Bin 269 -> 336 bytes src/public/images/icon_host.png | Bin 47738 -> 0 bytes src/public/images/icon_migrate.png | Bin 354 -> 0 bytes src/public/images/icon_move.png | Bin 568 -> 569 bytes src/public/images/icon_newgroup.gif | Bin 13501 -> 0 bytes src/public/images/icon_note.png | Bin 954 -> 0 bytes src/public/images/icon_poweroff_11px.png | Bin 518 -> 480 bytes src/public/images/icon_refresh.png | Bin 381 -> 0 bytes src/public/images/icon_refresh_11px.png | Bin 300 -> 303 bytes src/public/images/icon_remove.png | Bin 1056 -> 1200 bytes src/public/images/icon_restore.png | Bin 350 -> 0 bytes src/public/images/icon_restore_11px.png | Bin 246 -> 263 bytes src/public/images/icon_save.png | Bin 414 -> 0 bytes src/public/images/icon_selection_add.gif | Bin 13127 -> 0 bytes src/public/images/icon_selection_remove.gif | Bin 13117 -> 0 bytes src/public/images/icon_selection_showdetail.gif | Bin 13124 -> 0 bytes src/public/images/icon_separator.png | Bin 216 -> 165 bytes src/public/images/icon_smartpool.png | Bin 725 -> 754 bytes src/public/images/icon_smartpools_dir.png | Bin 4228 -> 901 bytes src/public/images/icon_start.png | Bin 587 -> 0 bytes src/public/images/icon_start_11px.png | Bin 500 -> 418 bytes src/public/images/icon_stop.png | Bin 396 -> 0 bytes src/public/images/icon_stop_11px.png | Bin 375 -> 321 bytes src/public/images/icon_suspend.png | Bin 521 -> 0 bytes src/public/images/icon_suspend_11px.png | Bin 404 -> 373 bytes src/public/images/icon_terminal_11px.png | Bin 333 -> 306 bytes src/public/images/icon_unassignedhost.gif | Bin 13337 -> 0 bytes src/public/images/icon_view.png | Bin 1259 -> 1393 bytes src/public/images/icon_vmpool.png | Bin 899 -> 967 bytes src/public/images/icon_x.png | Bin 340 -> 0 bytes src/public/images/image_ovirt.png | Bin 773 -> 0 bytes src/public/images/logo-small.png | Bin 6264 -> 0 bytes src/public/images/logo.png | Bin 20874 -> 0 bytes src/public/images/map.png | Bin 368 -> 0 bytes src/public/images/minus.gif | Bin 905 -> 0 bytes src/public/images/move.png | Bin 351 -> 0 bytes src/public/images/network_error.png | Bin 989 -> 0 bytes src/public/images/network_trend_check.png | Bin 749 -> 0 bytes src/public/images/network_trend_down.png | Bin 865 -> 0 bytes src/public/images/network_trend_up.png | Bin 837 -> 0 bytes src/public/images/ovirt_logo_redux.png | Bin 773 -> 0 bytes src/public/images/plus.gif | Bin 907 -> 0 bytes src/public/images/slider-bg-1.png | Bin 204 -> 0 bytes src/public/images/slider-bg-2.png | Bin 326 -> 0 bytes src/public/images/slider-handle.gif | Bin 176 -> 0 bytes src/public/images/slider-handle_select.gif | Bin 13245 -> 0 bytes src/public/images/toolbar_add_smartpool.png | Bin 967 -> 995 bytes src/public/images/toolbar_add_vmpool.png | Bin 1134 -> 1222 bytes src/public/images/toolbar_delete.png | Bin 991 -> 1045 bytes src/public/images/view.png | Bin 985 -> 0 bytes .../javascripts/jquery-treeview/demo/index.html | 4 +- src/public/stylesheets/components.css | 10 ++++-- src/public/stylesheets/default.css | 2 +- src/public/stylesheets/jquery.jgrowl.css | 2 +- src/public/stylesheets/layout.css | 32 +++++++++++++------ src/public/stylesheets/ovirt-tree/tree.css | 9 +++-- 124 files changed, 128 insertions(+), 113 deletions(-) delete mode 100644 src/public/images/Untitled-4.gif delete mode 100644 src/public/images/add2.png delete mode 100644 src/public/images/addhost.png delete mode 100644 src/public/images/addhost2.png delete mode 100644 src/public/images/addstoragepool.png delete mode 100644 src/public/images/bg-image.png delete mode 100644 src/public/images/bg_header.jpg delete mode 100644 src/public/images/bg_menu_big.jpg delete mode 100644 src/public/images/bg_toolbarheader.jpg delete mode 100644 src/public/images/close.png delete mode 100644 src/public/images/delete.png delete mode 100644 src/public/images/delete_white.gif delete mode 100644 src/public/images/fade.png delete mode 100644 src/public/images/folderClosed.gif delete mode 100644 src/public/images/host.png delete mode 100644 src/public/images/icon_add_hardwarePool.png delete mode 100644 src/public/images/icon_add_hardwarepool.png delete mode 100644 src/public/images/icon_add_smartpool.png delete mode 100644 src/public/images/icon_addhost.gif delete mode 100644 src/public/images/icon_addhost.png delete mode 100644 src/public/images/icon_addstorage.gif delete mode 100644 src/public/images/icon_addstorage.png delete mode 100644 src/public/images/icon_adduser.png delete mode 100644 src/public/images/icon_addvm.png delete mode 100644 src/public/images/icon_clear.png delete mode 100644 src/public/images/icon_conf_message.png delete mode 100644 src/public/images/icon_delete.gif delete mode 100644 src/public/images/icon_delete_white.gif delete mode 100644 src/public/images/icon_delete_white.png delete mode 100644 src/public/images/icon_edit.png delete mode 100644 src/public/images/icon_host.png delete mode 100644 src/public/images/icon_migrate.png delete mode 100644 src/public/images/icon_newgroup.gif delete mode 100644 src/public/images/icon_note.png delete mode 100644 src/public/images/icon_refresh.png delete mode 100644 src/public/images/icon_restore.png delete mode 100644 src/public/images/icon_save.png delete mode 100644 src/public/images/icon_selection_add.gif delete mode 100644 src/public/images/icon_selection_remove.gif delete mode 100644 src/public/images/icon_selection_showdetail.gif delete mode 100644 src/public/images/icon_start.png delete mode 100644 src/public/images/icon_stop.png delete mode 100644 src/public/images/icon_suspend.png delete mode 100644 src/public/images/icon_unassignedhost.gif delete mode 100644 src/public/images/icon_x.png delete mode 100644 src/public/images/image_ovirt.png delete mode 100644 src/public/images/logo-small.png delete mode 100644 src/public/images/logo.png delete mode 100644 src/public/images/map.png delete mode 100644 src/public/images/minus.gif delete mode 100644 src/public/images/move.png delete mode 100644 src/public/images/network_error.png delete mode 100644 src/public/images/network_trend_check.png delete mode 100644 src/public/images/network_trend_down.png delete mode 100644 src/public/images/network_trend_up.png delete mode 100644 src/public/images/ovirt_logo_redux.png delete mode 100644 src/public/images/plus.gif delete mode 100755 src/public/images/slider-bg-1.png delete mode 100755 src/public/images/slider-bg-2.png delete mode 100755 src/public/images/slider-handle.gif delete mode 100644 src/public/images/slider-handle_select.gif delete mode 100644 src/public/images/view.png diff --git a/src/app/models/vm_task.rb b/src/app/models/vm_task.rb index d7afe54..984e807 100644 --- a/src/app/models/vm_task.rb +++ b/src/app/models/vm_task.rb @@ -42,7 +42,7 @@ class VmTask < Task # a hash of task actions which point to a hash which define valid state transitions ACTIONS = { ACTION_CREATE_VM => { :label => "Create", - :icon => "icon_start.png", + :icon => "icon_start_11px.png", :start => Vm::STATE_PENDING, :running => Vm::STATE_CREATING, :success => Vm::STATE_STOPPED, @@ -50,7 +50,7 @@ class VmTask < Task :privilege => [Privilege::MODIFY, PRIV_OBJECT_VM_POOL]}, ACTION_START_VM => { :label => "Start", - :icon => "icon_start.png", + :icon => "icon_start_11px.png", :start => Vm::STATE_STOPPED, :running => Vm::STATE_STARTING, :success => Vm::STATE_RUNNING, @@ -58,7 +58,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_SHUTDOWN_VM => { :label => "Shutdown", - :icon => "icon_x.png", + :icon => "icon_stop_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_STOPPING, :success => Vm::STATE_STOPPED, @@ -66,7 +66,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_POWEROFF_VM => { :label => "Poweroff", - :icon => "icon_x.png", + :icon => "icon_poweroff_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_POWERING_OFF, :success => Vm::STATE_STOPPED, @@ -74,7 +74,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_SUSPEND_VM => { :label => "Suspend", - :icon => "icon_suspend.png", + :icon => "icon_suspend_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_SUSPENDING, :success => Vm::STATE_SUSPENDED, @@ -82,7 +82,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_RESUME_VM => { :label => "Resume", - :icon => "icon_start.png", + :icon => "icon_start_11px.png", :start => Vm::STATE_SUSPENDED, :running => Vm::STATE_RESUMING, :success => Vm::STATE_RUNNING, @@ -90,7 +90,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_SAVE_VM => { :label => "Save", - :icon => "icon_save.png", + :icon => "icon_save_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_SAVING, :success => Vm::STATE_SAVED, @@ -98,7 +98,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_RESTORE_VM => { :label => "Restore", - :icon => "icon_restore.png", + :icon => "icon_restore_11px.png", :start => Vm::STATE_SAVED, :running => Vm::STATE_RESTORING, :success => Vm::STATE_RUNNING, @@ -106,7 +106,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_MIGRATE_VM => { :label => "Migrate", - :icon => "icon_restore.png", + :icon => "icon_migrate_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_MIGRATING, :success => Vm::STATE_RUNNING, diff --git a/src/app/views/hardware/quick_summary.rhtml b/src/app/views/hardware/quick_summary.rhtml index a2aad00..111037c 100644 --- a/src/app/views/hardware/quick_summary.rhtml +++ b/src/app/views/hardware/quick_summary.rhtml @@ -3,18 +3,18 @@ <%- end -%> <%- content_for :action_links do -%> <%if @can_modify -%> - <%= link_to image_tag("icon_edit.png") + " Edit", + <%= link_to image_tag("icon_edit_11px.png") + " Edit", {:controller => 'hardware', :action => 'edit', :id => @pool}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <%if @pool.quota -%> - <%= link_to image_tag("icon_edit.png") + " Edit Default Quota", + <%= link_to image_tag("icon_edit_11px.png") + " Edit Default Quota", {:controller => 'quota', :action => 'edit', :id => @pool.quota}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> - <%= image_tag "icon_x.png" %> Remove Default Quota + <%= image_tag "icon_x_11px.png" %> Remove Default Quota <% else -%> - <%= link_to image_tag("icon_edit.png") + " Edit Default Quota", + <%= link_to image_tag("icon_edit_11px.png") + " Edit Default Quota", {:controller => 'quota', :action => 'new', :pool_id => @pool }, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <% end -%> diff --git a/src/app/views/hardware/show.html.erb b/src/app/views/hardware/show.html.erb index e029e4b..dd5aeb5 100644 --- a/src/app/views/hardware/show.html.erb +++ b/src/app/views/hardware/show.html.erb @@ -11,7 +11,8 @@

                  <%= image_tag "icon_smry_his.png", :style=>"vertical-align:middle;" %> History

                  <%= render_component :controller=> 'graph', :action => 'history_graphs', :id => @pool.id, :params => { :poolType => 'hardware' }%> - + +

                  <%= image_tag "icon_smry_perf.png", :style=>"vertical-align:middle;" %> Performance

                  <%= render_component :controller=> 'graph', :action => 'snapshot_graph', :id => @pool.id, :params => { :poolType => 'hardware' }%> diff --git a/src/app/views/hardware/show_hosts.rhtml b/src/app/views/hardware/show_hosts.rhtml index 64e5d91..09a6188 100644 --- a/src/app/views/hardware/show_hosts.rhtml +++ b/src/app/views/hardware/show_hosts.rhtml @@ -1,14 +1,14 @@
                  -
                  Select a host above.
                  +
                  Select a host.
                  <% else %> @@ -114,7 +114,7 @@
                  No hosts found in this pool.

                  <%if @can_modify -%> - <%= image_tag "icon_addhost.png", :style=>"vertical-align:middle;" %>   + <%= image_tag "icon_add_host.png", :style=>"vertical-align:middle;" %>   Add first host to this hardware pool <% end -%>
                  diff --git a/src/app/views/hardware/show_storage.rhtml b/src/app/views/hardware/show_storage.rhtml index 8d09577..c9f46ad 100644 --- a/src/app/views/hardware/show_storage.rhtml +++ b/src/app/views/hardware/show_storage.rhtml @@ -1,14 +1,14 @@
                  @@ -86,7 +86,7 @@
                  -
                  Select a VM pool above.
                  +
                  Select a virtual machine pool.
                  <% else %> @@ -95,10 +95,10 @@ <%= image_tag 'no-grid-items.png', :style => 'float: left;' %>
                  - No VM Resource Pools found in this hardware pool.

                  + No virtual machine pools found in this hardware pool.

                  <%if @can_modify -%> <%= image_tag "icon_add_vmpool.png", :style => "vertical-align:middle;" %>   - Add first vm resource pool to this hardware pool + Add first virtual machine pool to this hardware pool <% end -%>
                  diff --git a/src/app/views/host/show.rhtml b/src/app/views/host/show.rhtml index 1e0787e..f706761 100644 --- a/src/app/views/host/show.rhtml +++ b/src/app/views/host/show.rhtml @@ -5,19 +5,19 @@ <%if @can_modify -%> <%if @host.disabled? -%> - <%= image_tag "icon_start.png" %> Enable Host + <%= image_tag "icon_start_11px.png" %> Enable Host <% else -%> - <%= image_tag "icon_suspend.png" %> Disable Host + <%= image_tag "icon_suspend_11px.png" %> Disable Host <% end -%> <%if @host.is_clear_task_valid? -%> - <%= image_tag "icon_x.png" %> Clear VMs + <%= image_tag "icon_x_11px.png" %> Clear VMs <% end -%> - <%= link_to image_tag("icon_edit.png") +"Edit Network", + <%= link_to image_tag("icon_edit_11px.png") +"Edit Network", {:controller => 'host', :action => 'edit_network', :id => @host.id}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> diff --git a/src/app/views/layouts/_header_redux.rhtml b/src/app/views/layouts/_header_redux.rhtml index 146220c..c1a1df1 100644 --- a/src/app/views/layouts/_header_redux.rhtml +++ b/src/app/views/layouts/_header_redux.rhtml @@ -1,10 +1,10 @@ - +
                  Hi, <%= @user %>
                  'results' %>"> - " title="Search" type="image">  | + " title="Search" type="image"> | 
                  <%= link_to 'Log out', { :controller => "login", :action => "logout"}%>
                  diff --git a/src/app/views/layouts/_side_toolbar.rhtml b/src/app/views/layouts/_side_toolbar.rhtml index bc52ea3..b4fbe86 100644 --- a/src/app/views/layouts/_side_toolbar.rhtml +++ b/src/app/views/layouts/_side_toolbar.rhtml @@ -13,25 +13,25 @@ <%if pool[:type]=="HardwarePool" and @can_modify -%> <% end -%> <% end -%> <%if pool and @can_modify -%>
                  -
                  - <%= link_to image_tag("icon_help.png"), - {:controller => 'help', :action => @help_section, :anchor => @anchor}, - :id=>"help-link", :popup => true, :title => "Help" %> -
                  + <%= yield %> <%# the rest of the center and right hand side %>
                  diff --git a/src/app/views/network/list.html.erb b/src/app/views/network/list.html.erb index 9a304cf..0451a9c 100644 --- a/src/app/views/network/list.html.erb +++ b/src/app/views/network/list.html.erb @@ -1,6 +1,6 @@
                  <%- content_for :right do -%> <%= render_component :controller=> 'graph', :action => 'snapshot_graph', :id => @pool.id, :target => 'resource' %> -<% end -%> \ No newline at end of file +<% end -%> diff --git a/src/app/views/resources/show.rhtml b/src/app/views/resources/show.rhtml index 789465b..11c2129 100644 --- a/src/app/views/resources/show.rhtml +++ b/src/app/views/resources/show.rhtml @@ -10,7 +10,8 @@

                  <%= image_tag "icon_smry_his.png", :style=>"vertical-align:middle;" %> History

                  <%= render_component :controller=> 'graph', :action => 'history_graphs', :id => @pool.id, :params => { :poolType => 'vm' } %> - + +

                  <%= image_tag "icon_smry_perf.png", :style=>"vertical-align:middle;" %> Performance

                  <%= render_component :controller=> 'graph', :action => 'snapshot_graph', :id => @pool.id, :params => { :poolType => 'vm' } %> diff --git a/src/app/views/resources/show_vms.rhtml b/src/app/views/resources/show_vms.rhtml index 1e75d35..996d3fb 100644 --- a/src/app/views/resources/show_vms.rhtml +++ b/src/app/views/resources/show_vms.rhtml @@ -1,11 +1,11 @@
                  @@ -125,7 +125,7 @@
                  No vms found in this pool.

                  <%if @can_modify -%> - <%= image_tag "icon_addhost.png", :style => "vertical-align:middle;" %>   + <%= image_tag "icon_add_host.png", :style => "vertical-align:middle;" %>   Add first virtual machine to resource pool <% end -%>
                  diff --git a/src/app/views/search/results.rhtml b/src/app/views/search/results.rhtml index 1989054..1537b60 100644 --- a/src/app/views/search/results.rhtml +++ b/src/app/views/search/results.rhtml @@ -8,7 +8,7 @@ Search
                • - <%= image_tag "icon_smartpool.png", :style => "vertical-align:middle;" %>  Add to Smart Pool    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %> + <%= image_tag "icon_addto_smartpool.png", :style => "vertical-align:middle;" %>  Add to Smart Pool    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %>
                    <% smart_pools = SmartPool.smart_pools_for_user(@user) %> <% smart_pools.each_index { |index| %> diff --git a/src/app/views/smart_pools/show.rhtml b/src/app/views/smart_pools/show.rhtml index 45b1753..6e53de9 100644 --- a/src/app/views/smart_pools/show.rhtml +++ b/src/app/views/smart_pools/show.rhtml @@ -4,14 +4,15 @@
                    <%= image_tag "icon_smry_res.png", :style=>"vertical-align:middle;" %> Resources

                    - What do we show here for Smart Pools? + What do we show here for smart pools?


                    <%= image_tag "icon_smry_his.png", :style=>"vertical-align:middle;" %> History

                    - What do we show here for Smart Pools? + What do we show here for smart pools? +


                    <%= image_tag "icon_smry_perf.png", :style=>"vertical-align:middle;" %> Performance

                    - What do we show here for Smart Pools? + What do we show here for smart pools? diff --git a/src/app/views/smart_pools/show_hosts.rhtml b/src/app/views/smart_pools/show_hosts.rhtml index a4b6be7..8b13c2b 100644 --- a/src/app/views/smart_pools/show_hosts.rhtml +++ b/src/app/views/smart_pools/show_hosts.rhtml @@ -1,6 +1,6 @@ @@ -60,7 +60,7 @@
                    -
                    Select a host above.
                    +
                    Select a host.
                    <% else %> @@ -70,7 +70,7 @@
                    No hosts found in this pool.

                    - <%= image_tag "icon_addhost.png", :style=>"vertical-align:middle;" %>   + <%= image_tag "icon_add_host.png", :style=>"vertical-align:middle;" %>   Add first host to this smart pool
                    diff --git a/src/app/views/smart_pools/show_pools.rhtml b/src/app/views/smart_pools/show_pools.rhtml index ed1ad54..de8741b 100644 --- a/src/app/views/smart_pools/show_pools.rhtml +++ b/src/app/views/smart_pools/show_pools.rhtml @@ -1,6 +1,6 @@ @@ -56,7 +56,7 @@
                    -
                    Select a pool above.
                    +
                    Select a pool.
                    <% else %> @@ -66,7 +66,8 @@
                    No pools found in this pool.

                    - Add first Pool to this smart pool + <%= image_tag "icon_add_pools.png", :style=>"vertical-align:middle;" %>   + Add first pool to this smart pool
                    diff --git a/src/app/views/smart_pools/show_storage.rhtml b/src/app/views/smart_pools/show_storage.rhtml index 3090f0e..da553a1 100644 --- a/src/app/views/smart_pools/show_storage.rhtml +++ b/src/app/views/smart_pools/show_storage.rhtml @@ -1,6 +1,6 @@ @@ -94,8 +94,8 @@ ${htmlList(pools, id)} <%= image_tag 'no-grid-items.png', :style => 'float: left;' %>
                    - No storage Pools found in this pool.

                    - <%= image_tag "icon_addstorage.png", :style=>"vertical-align:middle;" %>   + No storage pools found in this pool.

                    + <%= image_tag "icon_add_storage.png", :style=>"vertical-align:middle;" %>   Add first storage volume to this smart pool
                    diff --git a/src/app/views/smart_pools/show_vms.rhtml b/src/app/views/smart_pools/show_vms.rhtml index e56600b..48ae800 100644 --- a/src/app/views/smart_pools/show_vms.rhtml +++ b/src/app/views/smart_pools/show_vms.rhtml @@ -1,6 +1,6 @@ @@ -59,7 +59,7 @@
                    -
                    Select a vm above.
                    +
                    Select a virtual machine.
                    <% else %> @@ -68,9 +68,9 @@ <%= image_tag 'no-grid-items.png', :style => 'float: left;' %>
                    - No vms found in this pool.

                    - <%= image_tag "icon_addvm.png", :style=>"vertical-align:middle;" %>   - Add first VM to this smart pool + No virtual machines found in this pool.

                    + <%= image_tag "icon_add_vm.png", :style=>"vertical-align:middle;" %>   + Add first virtual machine to this smart pool
                    diff --git a/src/app/views/storage/show.rhtml b/src/app/views/storage/show.rhtml index dd52d79..b0b1d4e 100644 --- a/src/app/views/storage/show.rhtml +++ b/src/app/views/storage/show.rhtml @@ -4,19 +4,19 @@ <%- content_for :action_links do -%> <%if @can_modify -%> - <%= link_to image_tag("icon_edit.png") + " Edit", + <%= link_to image_tag("icon_edit_11px.png") + " Edit", {:controller => 'storage', :action => 'edit', :id => @storage_pool}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> - <%= image_tag "icon_refresh.png" %> Refresh + <%= image_tag "icon_refresh_11px.png" %> Refresh <%if @storage_pool.user_subdividable -%> - <%= link_to image_tag("icon_addstorage.png") + " Add new Volume", + <%= link_to image_tag("icon_add_11px.png") + " Add New Volume", {:controller => 'storage_volume', :action => 'new', :storage_pool_id => @storage_pool.id}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <% end %> - <%= image_tag "icon_x.png" %> Delete + <%= image_tag "icon_delete_11px.png" %> Delete <%- end -%> <%- end -%> diff --git a/src/app/views/storage_volume/show.rhtml b/src/app/views/storage_volume/show.rhtml index 3963a3c..cefc51a 100644 --- a/src/app/views/storage_volume/show.rhtml +++ b/src/app/views/storage_volume/show.rhtml @@ -5,13 +5,13 @@ <%- content_for :action_links do -%> <%if @can_modify -%> <%if @storage_volume.supports_lvm_subdivision and @storage_volume.vms.empty? -%> - <%= link_to image_tag("icon_addstorage.png") + " Add new Volume", + <%= link_to image_tag("icon_add_11px.png") + " Add New Volume", {:controller => 'storage_volume', :action => 'new', :source_volume_id => @storage_volume.id}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <% end %> <%if @storage_volume.deletable -%> - <%= image_tag "icon_x.png" %> Delete + <%= image_tag "icon_delete_11px.png" %> Delete <%- end -%> <%- end -%> diff --git a/src/app/views/task/_show.rhtml b/src/app/views/task/_show.rhtml index 9421dc9..521ab8e 100644 --- a/src/app/views/task/_show.rhtml +++ b/src/app/views/task/_show.rhtml @@ -2,7 +2,7 @@
                      <%if task_types %>
                    • - <%= image_tag "view.png", :style => "vertical-align:middle;" %>  <%= task_types.select {|type| type[1]==task_type}[0][0] %> + <%= image_tag "icon_view.png", :style => "vertical-align:middle;" %>  <%= task_types.select {|type| type[1]==task_type}[0][0] %>    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %>
                        <% task_types.each_index { |index| %> @@ -21,7 +21,7 @@ <% end %>
                      • - <%= image_tag "view.png", :style => "vertical-align:middle;" %>  <%= task_states.select {|state| state[1]==task_state}[0][0] %> + <%= image_tag "icon_view.png", :style => "vertical-align:middle;" %>  <%= task_states.select {|state| state[1]==task_state}[0][0] %>    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %>
                          <% task_states.each_index { |index| %> @@ -66,7 +66,7 @@ <% else %> diff --git a/src/app/views/user/_change_role_menu.rhtml b/src/app/views/user/_change_role_menu.rhtml index 4044b88..b8b5a3c 100644 --- a/src/app/views/user/_change_role_menu.rhtml +++ b/src/app/views/user/_change_role_menu.rhtml @@ -1,4 +1,4 @@ -<%= image_tag "icon_move.png", :style => "vertical-align:middle;" %>  Change Role    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %> +<%= image_tag "icon_change_role.png", :style => "vertical-align:middle;" %>  Change Role    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %>
                            <% @roles.each_index { |index| %>
                            • <%if @can_modify -%> -
                            • <%= image_tag "icon_addhost.png", :style => "vertical-align:middle;" %>  Add User
                            • +
                            • <%= image_tag "icon_add_user.png", :style => "vertical-align:middle;" %>  Add User
                            • <%= render :partial => 'user/change_role_menu' %>
                            • <%= image_tag "icon_remove.png", :style => "vertical-align:middle;" %>  Remove
                            • <% end -%> diff --git a/src/app/views/vm/_form.rhtml b/src/app/views/vm/_form.rhtml index 610f2bc..034c3df 100644 --- a/src/app/views/vm/_form.rhtml +++ b/src/app/views/vm/_form.rhtml @@ -72,7 +72,7 @@ {if !item.available}disabled="disabled" style="display:none"{/if} {if item.selected}checked="checked"{/if}/> ${item.name} {if item.size}(${item.size} GB){/if} {if item.create_volume} - <%=image_tag("icon_addstorage.png")%> + <%=image_tag("icon_add_storage.png")%> {if item.is_pool} diff --git a/src/app/views/vm/show.rhtml b/src/app/views/vm/show.rhtml index add29b4..0da81d0 100644 --- a/src/app/views/vm/show.rhtml +++ b/src/app/views/vm/show.rhtml @@ -4,7 +4,7 @@ <%- content_for :action_links do -%> <%if @can_control_vms and @vm.has_console -%> - <%= link_to image_tag("icon_x.png") + " Open Console", + <%= link_to image_tag("icon_x_11px.png") + " Open Console", {:controller => 'vm', :action => 'console', :id => @vm}, :id=>"vnc_console_link" %> <% end -%> <%if @can_modify -%> - <%= link_to image_tag("icon_edit.png") + " Edit", + <%= link_to image_tag("icon_edit_11px.png") + " Edit", {:controller => 'vm', :action => 'edit', :id => @vm}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <% for name, action in @actions %> @@ -30,10 +30,10 @@ <% end -%> <% end %> - <%= image_tag "icon_x.png" %> Cancel queued tasks + <%= image_tag "icon_cancel_11px.png" %> Cancel queued tasks - <%= image_tag "icon_x.png" %> Delete + <%= image_tag "icon_delete_11px.png" %> Delete <% end -%> <% end -%> diff --git a/src/public/images/Untitled-4.gif b/src/public/images/Untitled-4.gif deleted file mode 100644 index 564b352f71e15fd954f7eae56058b5625f55d333..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13123 zcmeI3XM7W79LKMKQj3V9;MVIQxSG4%C25;8NyU^hB#1Ox1RU49C+V5w?z~)0S{&d) z8H(U$xN+|R3JUJM_uhNp*1E!TO`8-xe(>{u!Mp$SB6;%U`+vsw`MrI{j&G_DDwRwn zGmBw-K3}0ws4fhe8k@{EDvm%Y&YVh!rW;057u2X zYTAVL^P)%f`uwcFmY3?JU|nqu+pIY31jS&bI#%*}>4zkXqU;yhp2kJ0XfI at I33*Cm zQ_q_8SD0&a97`62TrS7we7tEV1u+;53SLQ&Bo8G#*$%@|@*X2QqBu$KJdGr)+PdZF zrop=NDy?R_6XrN~p;GHPoMM$0GO~R4L3!282zkX4MBXcuW~PN9Iw(hNqBy1E^aCOOkiW!Y%6FXUEk1eI4U*Ase0Btm`Ed%OXU=#NWONv$kN)B4mGp-swTrlu!4 z{<}QTTiyriDGv#*h(2Pvt-EL1Wc>exX==%r)o!P|uSHV at k|r5qI9cjU+}N3>$_dlX zC{9GrC`lqD^+ZT04{mmU#a+`_&{ztkT=s6gbd_7AQ}(_^rY}y4i-6>!F4P4w0D>`H zs0(BO1Y^2T7svnz#&n at BkO2^k=|Wu~10WdFg}OinKrp5Yb%6|kU`!Y40vQ0om at d=> zG5~@xU8oCW00d*YP#4Gm2*z}wE|38bjOjvMAOj#6(}lV~20$>T3w41EfM84)>H--6 z!I&=81u_7FF$Xx=i+Mc>T3kUwQeZ7hib(xo4kw z`l%J+PA9?tpb!#7dV9o0L?_0I<-h1x8>&`oFzwOprZocWp8?L`@#kJR5ebtp$ zT)uqS(j}K&ddbBXU3kIbMdvR(@7x9R=gmFm>^WzhdB*9d&7O7YDJP#av$G?gJF(r# z+9z11kx8eH*V~c_qN%OQamOBW^o;4#j+)wXuLjjpCoz(-cxhn0sHT_ at 2HXcjNq!-z4zL4kKK3Mb(fuo58G+Sp*w6p zWV^xJ4yxLwa^Tim4d~ymf?=w=1~3De0#n1#=01~Q`VF36v10bju7ykEfm{pE9JB!z CAxTgG diff --git a/src/public/images/add2.png b/src/public/images/add2.png deleted file mode 100644 index cd925e396e97fed605d5f1ef595709797ebbd879..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48768 zcmeFZbyQqU*XW6akl^kT9D=)huwcO*g1fszNN{&=+`Vy^;L^CeyF=qWJnwhE`^}xT z=B_(;&HOcQtv*$C&Z*kHtEy{PpZfLgupbIi$Or at oP*70FGSc6a-&3rAj!z%ow|=*sq%jVW zuXtON&m{LG?>hWPxa?xksi>T5W-R_&-7t at 3%+O#*^LJ2PIWF%2OXoJGI-N=FTYac% z2jZgka5^Ka3?_ZIJ0gyb at 65;FKap!-bVD3~HdBQT~4gjE*$XE>y7t;Hmt)<@pn^B?}J z)c;>8NeUyB4+*c&)nB1rvDRerifM&v{xRtK=S_gC_x}Kg`5=zQ) zGDtE at bq4Jsu{90((j+qK)EN=zC*DUEN$lalhw)=@I$VC!3a~>@`XMUl1b)R#lDDT_o&r(p=#eZ4s z>O4=Hnb~tbPompX><`p$^5(a_+XPMAUwW02?ptR++i>{%Sg|2QvPIPtb2zf{!_ayuE}Tk#WomSA#1?TjVP|+zXN8Aa%?qINsAu(NQ8p0gw;JYwPU at 9cw9k) zrkBk~*&l<7dp0e{K6Zc|Ql at NJHcc<^emLtcc6aT~YyE&H+8}b2CneeQ z8xb?TDB(|02CTfyOxi&BqP5eK%@Fr^_=$8$wWnHdS)4J at dRBV|Bq=tHc=>a=v`@l#opqx$8;qdW7kcEwu0tC_-P} zMFGX1&Qh;hHO0EZVi}(i=_>{6Y_X>RoGZyWw_Le5VJ;L^qH%((Sim1_7j&@rh*C#? zFbcVrmOtqlHgc_LWR78PaeT1j3-UOz?jP3XQ2-_KIN~rzPc6S{C-?Irk%f@$u7;)D z=ejiLoPny@*x0sN+xmVw;mI)t4V$u*Qe0EY5kkwQY_8g=<8hb;Z)WRF1CNjhvPARQ zEnGfEP2@}&Pue(HGzJ=0b+IvLn2EcGhzR26C69v=R-TM8H1W3x`w^@Bz{kj-7FYy#1-jH2(bg at H?sqLxb_PO{Ag8)7BMU&<4F<~^ zGYZt-63`g+^C2A+54u*kX=wQ4{YLeR4!*p2g1dMfa60Wuc`CS%f}AJjcV?HfctZQj zSGg|;RJGdfY^?@?T@#ljcxH`#EbNjP7UcA0?6d6*FgI%g+7i*^zjUJbWd*!>yE_Im zu2+*xBgJ9pty83RyAt&D&CHW|LxYp}M}Ho=InKDad?b@#3(W;2-RmHQDxGG3SoF=q zTZc7S{kGl`3Q=8Qpi-X6y&2n{gj=6s#dirl+Pen~P&Vzc`F}Q$>wl!hO6X;s={?7Q7a)r-Rk?yOWW1 z+E*KEq!og`#(^4B^+*HB&fkm!Jg=`GlqLopr76<0?{(0r#^FplyCtJ2kEk(rEw+l} zzkf%d4LFr*NIJ5||3(V;imLH!t1w^JvuVS|L)RS9UAm#hY#U5XAzf&+O-m1BWd?P8 z`4_<@QPZw!*fqgednaf9l;aL*fDbOUv)p7FMgCiNU@{rCZ=s8RO7DnbJtP(ncXO_a zt&KUGE#arxt-hFsYHu!c$+NO-WRH|6QU~w0?0P#ZU4S`9U?g5qep+6YM8$>!wWqQ! zeK3%UO?UYGr_kwr3sW{cADuDHKJ$;C@~fqTky(FsJ{vEn4Jh~t*}D(ueRX at x^}@Pg zz>OeQoJc#L!DWvr3DAb)q60;G4)yS<%PCn;eZiFsy9sVtt%JQd6glWIkvSLhFhD26 zu&2)a6PK?MqGMSS5oF4h+D7GHBmWk_gHqg`<6l!-K+D4&3 at d`F$Esk^Jke)FUi}5* zE||Z?Ixllu-#UOxj2?t7^NGO= znE+Chx>g at b+7;C15hi^SP9nv+c%AHWIpz<gr|P} zVV?KEUl@?Y9vkGNoO+W3rSEe at D%GAdu_&G{%}=^RPF4=e|0GNz at nDDIbMwL29r<8x zG5sr}DXVoN;jhyW0Zp=L5?>NaJ*zI7?Hd2U1n1##(?LUpCC3Gr!gBD|DgQ`OlJBC#G3(B at R|tT&L{H;~_^BjC|rWgz~a~ia54Qf>l7IRA at 1j zbB-n;5IG!KX_ at J3xGJHQnM=|5xoewW!ZzV-Qk-(Z$#1(VFV58Jd3gYp`t7hhr zq4BNn&z5N|4*_VslC8Ybl%msHm}_vl1CF_mJpND%NTokH zh%$OKBUB1?0_d#2t1KiHDe#W7&E)+Sk754J+9FjvofluK8`YNbvPxT|xsAVzvFiP3CuuP$UYDugHioy_`kZkwfuekRunyK62sQ_O1E_=9Q6~Na?OFW_>o$Q#S8EJkkaMu9CnanqE!*{c0_mU;1O=dP^$*I zP;#5rO~EAxIb0;RkSM6>HxiCeX^M`hIIjfSvlluAON2 at 9STK2hGqb?Tm*I&UG at owt z`g*spVa_{&1Rq2wb(Mh+XiCXuQ5 at YY56r)2cF<^QZUv8pU*n=u**M0znYBgC#!&MG zOf9VBRGG##5lsebUV~p|+c`}l0>*{`w+UaYCt?KpZQ$rkw9$T&r{MBj|7sDqE3v2c z3e!UPzG25ncx97aU9WN{62`I7r$V3gH99`!XNac&iL``s@$LiqU29+JkMBWau>S0! zm%>v8yhJM*lx9k!u?r(8a`=xSTtT`CYV<-~lDp#jm2MljTCJ}p$xPMjZcuEQw7MMd zdSdp@@3xpZvZS)S at mc0AkdF6BL%TCn>{*mL&3)E9%kJ52IjpMt?(-rv)$RnjY@!d$ zZ72!eCBLX|d~1mKilO`oOXV?(_~~gpiR+UsU%`g?^Szd1cz*@v*=Q}o6v2K!_Iu-5xFM^KWPaZw6v;*xxXH3uRURN|kFCWSecM~&yK_0pSRe3=0#{l7F zLtNp23vWRm7}*d(BZ>DfqC-sLr`sTd9^VTGfFJk-kBXVhZL3Sch3^-r*d$BI4vg4f zkgNm9Pf;yA%yx1Drmj|ex0Betj~uN;9rBpe9?SMgEC4ga#vP|75Dg|Kl#Egyt79;d zPYniA8O5VH!%Y2LjG;v9?@WmF-J>*TA6`n at 9a$t#=teGFsQREE&sY}2JM1`?wK&J} zH4X>e5>Kb))}`8EzX=3?`u9E|@oew!9*ZMyQvHZ at xs+%Du2#hP4O8u+UwmChX8p08 z_T6`F(}Fp&Zv)UIVqdrZRiR++=d_jT^jGrAVqNVvpQvN=?IsI{>%>th*T2K76eGiR z!zN1=CR*Q;W11OsI3oRtkRsF$U!6KI8$P;`+vJ~hOF0b@%BRq-D|w?<1`S1@$#W_|A0q$M=(C?%j>}z4b%XgQND(3$1<`7T3oWVljCYxGLpel#?nu8Sn>L#B*J?Ic>)Vs+#3Ff zuVwsjnXq0Qo0V7&Uu|nFIYsL%xhygsWPm+!>~)fo;mGrc2It*S+B+u_f+PD`uu?%~#UcljM5!er^S9pyF# zc)N5IVoZ}?b4{mnQPv2)cW<6()zjXEcB!#PVP(aX1KQNHF1>~%>y;0qyZ)`a`r8UH zTRI)El%rtL$>u#-%rbw|3 at h@y=x zjn-dlc^*0L4Bfr3EB57IJNq`kNmGCT&%ubFz`*$6EgO at GMKR6C=Y;eiW z-htot;&dCZ at U5&ZU6GzoNdhH+eUYGz{Vh5Eeu9wa*t<$-GnnE)C at jlc8g-Lra``0_ zQZC=XcUEcn(Z^+c)-U*i#HPo-*;dXz- at 3bz?{w;DXEM(9!MdB|g)?H!mBOZ&YxeEi z-M;$^s(cLbBahRrPI{_uzVG&+UkGP7 at hgW@eQLK$za|GyaTV`0Z<~XfgV60Il=ce> zRn&Fy>=9ju{RKq}^Hp#zBHslcPhWUetqiJFTkt1=Gml4Et at qtxoYwB9dp6y zH`L7w=kc(nLwv>@NKmojB*sA44fm#x;B_sBL9Y|wNnlCil7jRRLGcjbKwzV=%zxMB zXbiftA5Vo|)m+kw$*^e@(15I+=UM_uZf{z>FOWo%PJuwlMAkzL)h9r{P!0Vr!>+&3 zwJ942>j2P}>+)s3omhy&4{;i$1oVIw^h~;y2A^FBETv!2le;tm=7^BKqa{(F;Do6A zl5 at Hrd{#SUMAt7{B{TlOotVWkJiing^!c^$OQtCo=-{_F_FJeb#$<=Ool^1A+6AC$ zrk>+{9q&p7PuuosIMCVQo?>E&xUsw1=pZ~RWnzL&L-ka**13N|i#JC4n;xr6|D>$B zMVd8za1~yw(P70yi=y>HS)@z<#HhJ>@jsR5-6nb_VjBLY=9;M!={ep`^DbBMv~C}U z=Oga&JOvP}quN#(9fs$oj88U%=l&yy at 2ABdYJVX6MPzvH1+=&Z`^DGbw{muuk}P+_ zL#utg{v~h_usqEj+gu|vD+Jh8`JUz9fOo4hTUYx>xwy>1Cia_mq0ilub7O7)2xY<$ z_9uLo+ zR1t{0)Sui;=4F#UF~_bQzblQ1=AfSEEe2>bYE at PRfAfp-PO?{6u!;w0XI60{oDfJ- z>}yomf|?s8UZaVk-n#FQ%_{>p9!5c-HIz{@F%o-PY6kX{Uz?2A;w(5xx2+?;ArCi} zOLJraxW$Fwf}?YM;e*fnh$lWxb#aN0)|&NCVvB1a>Fpulj7}sJjAcQOxQeqZ0G-#or>a}@fU!(t(RdVamjQK(tUX7ZpbT+mg3%Q zLY3nV-Z7`|cG6$T=X_wcutq%JQbES!_X+UULl^%7c!BP+|MirM`@FHKfLd~<^T6#k z2cJ&Qy6!%C&$IEG6Xkq=P13z?6a7V&K9?%S*jl{5bMDDGVO?hd>NUU(cI8#>=@$Xz zEkaY2G;jbK$UzHpDFZuI4npu=Pp6D|)K?-=89Py&esJKmF|F?Io%K?YgylBY&^Az? z*{aP`R3aaUcYRoN at bP41NS|}TTCW?iqJC!mY8!U4PCe_0gg$_4wW9vPyT}zaznon5 zp_kPn6joVkz)IO4w!sW(`3qQ-Akamr{0Cs*Qh4Ccc+x|!hiuC3BZ46WwfRJCl6{k? z{8eTDXxcFxj+Ua8qE6AQOTK$OREzDLv`@_?+|-3hDlu1_P3MnII2k&ah at wA@^zb+( z;6-BdAl{covDGUZIA2IlI2nSKeb-tq`GtF>W`oA}=c*mlujpRw at doYkvJS`dPHGuF zCCCYE475=9Ma(j-+V+*RkYh&};EvmfgO{8j!E9}}eP(9p>hYou`WZcFW2 at T7m%{vn zrgSN;Vm`!t&))YbYg!xNi`#NHbuy>}Auqfm<-B@&tQT at 5fVoa9dlFR1VY!F~B}wnL ztR&zO3_lOy6LXSNM0Mn=>ha?b)&yVOsNQ*(iBLS-ff6;xx at LCpFs=n7y?Z8 at 8+^Tl zPld at a`YOh7jd^R5liAU@>Zmoa*d^bxye`pYX!Y0UlqOIZR`2_S#A0YcwV;j4Y)A%x4Z733!<==ZCJo1f{@|4K963 zJc74yV$d45MgWcE($vTGjMJ$}uDkDKTQ073sRp_`~ zeuo0(5#<|h;ZAoa^<9h-h7j3By9Tph3b})%8;+psi7MN4GF#DC6 zR_{z;zp_)D7?A&&5E at 2@a*4h_b2QJ*eBHQBrNNyT=Rs^G$jdhuX&FB%mbn)pzr#`R zFiHokfN-NjTG_WjryWB=Jm+JGZt!b~Ls%?AUx^{{t+X=CUCEAo$ICs8|4Z#h31m)@ z0!bwR=m25SBv9z8O7!J;l7T;SBl5NLBk@)htq{oW@!AtiRcoDk5`A4IkWocfd%mFp zk_VV_$GCGhfC+@|F2HaWq6yW8;w=lmGV5ecBTiN%3*bs_5QoHIM}BZT`@Q~PetkN zbJtMUu{y8DQcZ9-{xHwqFTleMDu56RDVEEqYbtu^u$J5FJrp;2`Nn&o+_mT2(b$00 zS;QL|5C at EZJd+IO+$?wcFujD~F<11!kNno3Ifh95Rnc0|V6CEHJr`!1=o;2;qule3 zwx~dnO8WC^pRllk08X55`fM4k!0sZIXnrGI%y8XG64Q27ElwZ*cg*>=0rPrs5m!Iz zwYY)roK%nR7doQ#SZSYH71(=wsLH!8V1S8 at k+Zy!uqOKrmo# z#r!t>?K(X~pd1T-?Z8ACcF4wdc%NED;e(LrT6B6uzw^)g z&%n{}kc*+dYhG|*h-pW;X0y>&7YQP_6Y%n at x^hwNrMSprX5JI)VsWZ{l&z6Q8#$wx zrA>b{LsPP?SUIuvr!`|l4qhb){FhIk(rbr83fKo7>M*}TvaX=RzXmM5 zIJvc-H|#p*Tp*e=%hLaHL`n;OB=ZrHh&{T*Op8vK6 at 0zFvOsXhZ=9%EJo~}QBao4P zY3;$qX_n=efpP?1>hx95G-4&pZnP^t9YF1V{Ssil499VBcXn%w8f|$9^wmd!zu5Ac zEZTyuH}aSi%9wwxJ;Q|Qo0%|T;#d(pTT|c<5x418Xo``jmSsG$#T;6rsPIB{-;(eW zeno)UZ}$1eKE39cL?Gh{{|B@;iF<;&QDassRjE9Bw^&XTdV~ z;cv1sCAOU&pfQ6-b0oUmyni2}tJ~R6_S>%Ye8#a=cY&u2%<3V_Zfs-k9w6!<+^jwi z at H<0Ay&``WmxQq;XHs1jE-9ch0M4MOUERhW3!l#HZOSnytgN_PP0;CzWDpZCH>o^0 zb5)L)TxuECh@~LV at _PuB#IWbXggSsN;77OIQtTGIWw{5#dnfuRc(yJ}3vG{+M9bYe3{v+kL8YNw^jb`>bZA+&Av?$;PmlzB9V-Znjkaa-&Yqu;Zuq_^PBBV+vF(X z!Sj-X)}5X${hF=YX7Lj>O>~0}v3=9UvGyFw8>_#S zp*1e)cfCJ5 at eB2rT@ZKW8$oqd5F}n`4od?iA)Aq0JarvhYtGfL>9zE4s9pC{hs*Yt zl7q11Jv%*Ir7qPSuuW${!yM-JPa%;A?&J~>jW5xyI at R7q?D4FE7SAe}NY_85P5s?B z6;Jjngn4=*n(p0da2`+(KcufBg!u*q;|c{Z*3{fGTq7i+qw`SHdeyvcEWTo4tuIp( zSlf#KsgyCEw<7&Xr4tfj(OxOOcsijSq{n9=g0n2f6p|+)X4&u`9Irc5v|Mp@=@^Zt z62&uc9({!e>ey=DjB#H`Tioq#D`0ImRxbt{enoSXq5}KytQPv~$3J23-K(SOf<$@Z zHfZwaPd@`L8>Cb$xTsP8$K*Y`ypv#lA{-Nf7Ma-qF)MrWpC!y_eCI}hr6`W7v3d?UgPI; zPnJ!CYv_k~SiGulKS4SXB=~TcOmY_K3OMO at C>&Jsqhc!49PYLAGH5XU)MP}r+BTqo zBqeG8&Dh2v60$ES)Sp>IB)&V!o*;s`7p#&r2|7D8+Zx*A-A-^CRyZQLcqN}_)$nhk z2m9+z8v{sb1EM;KY_e%;TJql*7FDW9bH{)GNt!2FY79RFrQ6E>@XDBc{ML%TkTaBx z7p_H{22Ko&{F8qx7N(qG6IJ-DQ}SQTt^jNHpc;q9dW%O;W&5vIJCCF_*jfwcfaNz) zaI7~~QKBAog5P$SdK!rZJp@$B*M at Gs8 z#}1>_;fryJ51A1QVOduUhK%Q&BiPXX%01-Xsp;wByw@!B3^$_-`${OCKb*@UrIlrl zKO(kvF#R)q+~=pz&d>8n3oP&SL}~7qG+DY6<6zT1;~xq*-yXei_A;oD=WTWaYiLD& z%|CI>2CL9Av5~R8FEbXkTTf0bUPG+Cs;^NPS*=4CrCP$}+(E?ym#hoXsCyc;VRNks zQ?Cdw{lTI6sY at t*V|X$-VHG74KW^$ijk(`gVDpB5vg15wxH{c~0+ZN}IBO)cqI|BX z&}+0PKt8)>;|Gq3a#XBpeH3qs$SBHZ|3nuriu77hzhNX2X#}S1j%GZ(v}iV%;K#iJ zSY;G`v*L5f)*@={_U5AwnqcWzeVa+$ZPeXo-ikQF4N#z6RbXk)AbygqQPROOq1jRg zhwqr(Z~#Y-CJ0tq4C(Eg7~@>_N3uzWrLMkdqGN^K?B8R4vKB+%smY|Br(SiCIdb#7 z_sgZdhZb;V3uLaOJldP-B*_RA at V``=7TTETaqrZF;o4$rzK%m@)(8LC`$+yE0qDv5 zc|~P5e_L4nV>AkCo1Or_3n^I|=Om-Q&1_bJHm!CdsA6ezJ(Z7&x3)nJyOA^4Hp)=P zc#(~MfSJOe7sojB&F>fO!46LWy1e3ZWoZ0944c8ve93qh%+F5s4l~qLRB%`#_xZ~s zw at pZSF~8nI%3rx?te1W|aN%cStx9apUX-P9i6@{JD6={yCXE}&!q0AnVIR`guIeV7 zP!HA*h*mCH9^*&4BCz;s3>OfmhX%khipxEHKWcYyh1J3I`EzNdk+z1bm?p!*?!}x- z|8;8;chPl5nl6?Wee27Z-^I}54X zvo3BQjo;{E*drpACZ_u_tFif(NAIF*Qf&eNw36kR60YZ0LeeiV+HW+N;9T^4+doF} zHAg*AeuUka#Hl74TV-}}#e(H~CimE0GO>pgJRd5xtP^hUbNHt?5B4pFNTLqD)$ihZ zL=3>5RmR64+iUp0jy!N5UxT8kBzjs{i7w~-aO<_n;3LA?e at V|0p6^zLc}3?_Y~d|% z&-Oyg$I7|4a0-oy_X*aX z?w85v$8E?1GUo|LJCQ->ifE$h<=!Z^(5}~+<_REU_^P_sk`yid*k_`f&6HwF{ll=> zQ~zxnqi>eqm4#6aKB35^NdAcd-ni2eX&TK6&1RpliW#aPv=qjbI=o8-L6aAjcZlW> zFDk-jf6ANVU&P}`!Gf^*8&)Qax+j6~%N?cP7yI4ZiY#sm4*F4*rPIndK*<)eA-|y@ zZ1S_IgSh#^dv9_SW6)c^Ih_glVIr|RV@~#1mW0s~46l)c??^km-Noe at abwmmP1aWX z*%tkI{4j)KNy9!NiaDQDq3Jw!m%6EXRg3Qw(N;WnFG?_1(#phA_b&{}Xw%;<$Q at aD zOOWNh~y__Y+mK=T94+Zr1-(N_U9ggis>s#_$PS8v97g z^efR)ypz2RgWY-VNyGOCqq~#X#V(O<6v-b2R;&BKHX^O$9f$fvMxL1E7 zuJIFXSUaSECDo7C_!AuWP#_W=6hZSGNgXf8OX4B}tmB at M73 z%H1Ls`~)2YPnR=IJvdjy2`skxNtSVbThq5HMC5P=t{MTu#~g at xbmyS4OD#w|N!6E- at hut8R?s`MajR|l#l zosBvmw2s5N06MtGA3c*KgeR~t!kpHWya-ADW;_BX7XPM?RuMm)05eIJeI5qin`qfH z`u{69R}23**%z>@HOsc!PzS3b`IbBWWx- at F98`_|80%TS29`*+6HY4}EpH+|%cMrY z9T!cRT+#g|bAw1>by9Zb7w`Y`d-PjUGIQRfU#!eN at ts!jN at v!3+aSAZo-eODS?4CM zGn{f#p0|QBII%o_xa>o}{*U~WAEeA4Q2nXyZg%7#m1Yzp(U_RunKv{$?Z_k=Q%l~k z-8=cgm)r1{zSSX$KaXmpDlP{tB;4?gaQ)v9&b>pPZ`%w8X+1yJB0^mAX3%|vs7 at lC z+6+ow>sHC%jqWbanu>xQPC|y-aAoLfwqwiPqsrzYf5`T>zGWm at rcZbPB#XtOek-l1)ae4;?D zxCXM<8`;`s{kLSodBzEi3UCt-f7o9VAQ9PTa z&SOKoM}}?2Ot`8{)CbBt<`#i9rvFbk+ok8GEk-}hNMJ)P}d(-y0jnGX|^ zHBI|znE6FELw`wQ+8r at 2?^F%-w$YwCWyQldv?X_pyg9`2Hav+Cii^rJN_F(x?Vjj? zWcLL5W@~u;;N`#~0?d^rs!c0syYs&@Q4bTX34Vs+RdEc9)zwcY$_QKKu&BgdXP%wf zJku50dslOhRY0bIZ0CSf_fIww9#Nh`Po`!6(x7Gr#$toj=ZL8clt z2H>Qulzmc>QQq~(Z!QaF0$PyZQXPROiEFVw{mT*uVZHoI!P4dsz7_>V|Hpn=pII)R z>`kf9V&a2}3J5I=a|S5{?TLJDaZGChO|M at o{z`M}l at g-ew+#rLMqk*Bn47hp!);is zO`$Wvv=khLaWAv_KlKeh)|+s-E?5>#%IM)QZ*1|MxLL-*Pxf^3{{1V*GF~?|U;-x9 zcB`b8nnfQSz&!CwHw6+FlYNHlQ5JdYy;I5Fgl=KqefIoI^tCRK#vc<8dr5cd93*<1 zR(z$rRn|!Z&ODJKJ}=jUbNcdU^7yW{tot*LYl4+x%6ZgfXnEP_4m-h5O4J1~7e|h2 z7ovtjRS$m}T$gq7Q)ad!EUru!9xyD~Jq#H;qpF}+j&FOlUwB+hveu=Ratzpy8oIWu z_kadJAv{h6FRhMm+DnV{J3H0oU7ImDt3u_?YP-*?4vm{jxve-TJVHx(q?i`Y)k zE%3=m_r&X4k&^u1 at Ue*YLwtkaF%FvbJoEa1H`Ht)QCU2iiH(4pyP?5ppUJNe^h3m+>z2Rw5ssgmvktyS-6fH_3XGy z_;g|?;o*+sJ at w%8Z|wDN?DcQ#^>6I;Z|wDN?DcQ#^>6I;|4Zz(et+q zvrLp{wd$7r60Vb57<`C`76^4Kf$kSk2w=!Dv*7%wDMm`Ad9=ngxZf@$yk~1^_P0SF zu$1-WcEv at y3v_=5+{TJnx~zBQH|6$&iiXeSpJ6f!30i2HX%gfq$_3qf@)EU&oQP%w z!%v29i9XwCg9jTGZAr7;aGZ0O&Mhz8mU)ScFx^^x8NBqYWb6r1LP(`F??}#jBW{CV zxW5>VHG1o*Bh^f;tnlAjx5 at WIF|h|yta$X2=&J%=r=Ra^j(_t06pqoF>bn8+!E3&- zbsOu_x-Wsq^v_d7BLdFuKTT0otgh!oth5GUGAvgdqDaH=2Z;;Vx|;_?@p^H08>~UU zE|ZdMOWcQyy{vrGDyj1SA(PNyR!m&BeMC0rzgRrllct&3*mSg=rP3V0#m`r7UwnCB zqn)9&1?>I#hY9D9L?iOlwu(WV>kWKUpDC4!v7S8RuLlXT<2N zV2%_%Mjeq{_>d2V7dfK{0=Hecur;t)wxWm`m;MnJJ-;g%g&u5Y3i54fPj(%M9!>*} zbP^BEKQBd_!PtdBxr2!V*4O;t)xln<_RiDh4>y+Sj8TFlxW)3o--jOaXUg6vX$2_m zB^IQy9PhXb(B?7qFWiOL#LKga$dyUrZZZ6cej8C*8ibs2#G6=f5Y?Q{ZH at 92y2Uk1 z0_os|BHE~F1DTb|dwv+(g(_UT1d`rogobdmg`k zI$JqfzoHXsaDRyohkmKE`q61jWjspo8pOW5*>=C|0_?cAmMnh|ep!~Xw(ja7Bt{K= zjfP(-7=@7LuZJb#dYAaTd*5}w`{lj+(CI0RqWoe(J00J+#Dog!RvIZcEdOZr!QR5A zS1p0s3<$9s?F({F8y=f5Gsz-gAP~w^BzA}*xntLpC}RBtR{dN!6$4{+t)9Pg&$b*? zU(eVPkOLp&aEM&w>e+Nv2rcE1Xm3LJ(dH-Vy$N%psnD<+0`DRQNH1YwVn~z#tL_DV ztu&Qu{I=HpvJEBqg8y?Yj>huNO6puy=$6UdO!QAQQS zV#P};hYE8&7z@})FV&hnq{Ab*#BSG)ijy~N&=)2uf2aE=dR+j6!EYxg*5ChZ1l5tG z$US2m8K|fM*6g_VZf=|*Pft(Iext6%Bx>`FYMuU`p1h03C%4s=w~*)OXXfv&6<)&m z5X)!KCL~QrNXTy)${E@=zluK6t;hAxT-*cpM2A+o>lhEP{t4)+fIlrIOd(7_*HP}u!mrc^pTd2)W8<)@`xi+>Lxna;L z0;pzc5lXkIcD}zIN at K<&SIn_L)9#kFq0cL+yU8ktN-6$b8hg4mDCncSK zv_bhoV!HcEb0HW${~-KlJk|c_;L$GNtk&@UV!?UefIVSbDmMYc0YfxoGS9z$AXv(3{YN^kL!0*2_C;x|7)bORZ^A@#$7H9cUnJzXAK(eJsX58cxTgxZN|N#rXjwz6kRt`8!xifWEB~=H`cVHyvI^6 zJFIP8iR*`6$qNjXN?p|FHshA+`(5uFPpi)q2J-^fnfJZyEfd+clwf^cbL13nUg{cm zAa(l+-)P!Nm}|_P*?js_tMVT(-+YH0y{*RJEq<(qem+U at UoR@KOiIUjAsZn7JjKR7 z{|%%~*k~r)Y0Yu3(Y`v!ct}xkQ~6m~o%uAySRc|v1|~!E#&;cS7^zn)TDl=vYJy;j zW=_4vL8MHDquHQ6#|3I?w9ImOPcc5DZXe?#1JNh=C%U=|pq31^bga zJH=e5LLU9eZ)oqH*C0SPK)LZ7sD+sS)-T?b@$QPwH>fLgRG?Aqfwj#XuW|R4 at 4#@t zVcY1Sp3^()fgMa6lN97{eMM$VV>^<)Gz7_K1KcnT`RUBl`ATg}v>L at sX-cfhRUa(8 zEQa)g+|H`z%o;09R>%MKC2&fBj4 zHX;8tEA{00(f?l$as0caAt}*T+(mlS?~dat|7C>K!v05d^1pZXFDG=%pr2U5O7M>8 z at Q!G>j%fd6YTE-5n~KOF;hzrz#WNJ2PvmVTRN^UR{x2`mDMzA%&I`o at -q8kka967$ z*j{hJnP|{Cy=V}0iucL at p6zhO8Lbo0A7nxD?+kIds54IT1sb|ljz0 at F_|I{7y+xfH zG at f{?^PT|qys~_s2bQ{8^=Dp3ojWfKAPWbce#^oOrx0J$6|eJ!iS9=J%Ru6+y7q+4pTP&O~B%4$Vojic(joP{=eWbIo?6!cy(N?(lV zx2TA8>P9prKF2A%%3CSrX)K)?a%{9zgg|IVkvFu);)4m}T`4^m^#qwt?#JDAUhsOt zY9 at HUk3A;#9yS)kdocoA2ST2iXP_P*_(dc6fZqm;q|U*>#n#{hOD~n8&0a+u;5KU z^A&*`GTSlZ4-GDck{;lvSsP{3gCh$34%JFk#wqMa_QJpg)~#|?(TU&ZI?ifg7i at tV z&OFqL^Pr%ySroXA262Uo_CaPf;V$ZwZSMkCm$q3X-mlFHwqN&;@irLO!q`eLHgdgf zt0%lUvhQxb^gRh9NPe|jzJ6RApT^%{G!JQ#KHG?%6>?I4%5kB(mt7e1dnMM*n(;8X zb$#^Orzkz9k5;{1PLFsxNR1b7I{hXQ!zdqQFSC2aRZ2L&T-M4t%_!L9)=AN+!i0K} zRoT3is=FkF%7$4L`M77YL2Vh6BK=wdB(LEk(W>ksgjAQ$co#kml8;NgI?MU*H6_ok zp~^T5P$I{`PP5>|4zM;UPHDCl9;`Lr7`^rGqF6pUYxtX1C!O7VVVA}3 at U!$%rQ8bB zC~#a&9tgwU3B>hnShqlwtlU5x`?1*~e)CP7xb z;tN})Hi)yahBScQDW(1sT0#X7$W*B&U0=v>DUlw at bh$8_SH<_VlXwai+g#NDyCW- at 4e zADUaz#|awOAUN$lv9Pg+q_g{(w|7MgjgB7DIfnl?oZ!XKgr(oE5GXG?vK1b7{sQeolKtvhJKv1WAnN(8OW8oF3RD9JEMrE5xzV*~eP(NJ+KPvNE$au5mxZcUGuvgZy`SvAB z5l{=3)>bLr9VCbz>8>)|p~9L~YwTnHMvvgt#j0_E^C#!761b)QRhIteD!=vZi>&0IzV1bWk~wz4vBvqZ!AG#Qkg zlG5{&1rOo%Lu~no~Qnun<7Yx_bTh+b6ozjzAQc=Rf*~Vj* zp6YeQ?gu at B4*kN>D)X~;Zy^V(gL1EvQ_?-_4cC@>dvB6-R8P3Fw`xz*yXa?tu>Tv_ z`;c+^_2Fs<+~E=2TEdL at jjw~`i2d7JHuZIAdkd~@06Obxk3k2x8X)PzZwAp4*U=vR6K33~o%O6@^_y>gYNPN)Tk- z at YMTC2o*@-4wW9Mo7uH#;_}1{MF6oAxHjM?SW%&$Mz*E z>h7mRUh2M6Oxr=slR_nafdcAIZml9hBV at v0Y_+V{$5_zl20rA16}P$n?NH!};_iI6 z at Ga@pmw3CoaZ&J1Qs>Ki6a9iKZk3iJ#BOpG(wHurnCQ>qTJ%l*O=b@|UgYfQb#(g~ z?~948+b(vIP3|@PLoUXjXnogSV~)Ab9oJqdJ1Ky|UXxtOM`AOjQp@`=P`EE$uzy%qNFEi}j zK!{1}q!ZiYu)(1CQwZduuH=O;rS$fwmH0nDCVV{Llr{hHYx^F-=HK)@j5i#<{VUnM z#(RGYH9;nhf!;=HZ^uj6fO*H%nBLNfs>9}O+Y7StfyQ$4uM=h0q-wfeO)ol+^-`jH z^MaWA#q>_DS1;ZTCvxh0b1!e757Y{U=^*MtmD33~!4q^(Bya~Fv44CrVYQAbrUM7C z+ssKU{cm?Nb^ARnSM`ne)t+Xq?YCyW3ZmyDb_08F$Zkg7{+_AgBmrl%3Sk?Boy at My z-ykC->6p(NnJLcmBOU5QOLmX5cV7YOOQh$Tj}&`Yf{-!Eq19LaGFVV~ynhP4PA)K|>=8x!rO%we1xb>%FlF)lNz`&A6!j|WDY?%qiLaNDF6UGDSLYfpD+&-miqDAc4N4GNmH$1_E7Qk!w>k*T&Y1ak! z(V^SsAT=Tx at UF&zV`9)HPv!aC!huY_5PTMWO8%9|-f1GLL)tBoQa at npW=P8TO*^IR zCF@#upls~;DZ2eHq1pgu#py;?(+9n==||=VzB9<-2#DR}fPc80&s>amNI5HN==Q=# zO2aQH<$S>%znrc7g#X&iOF(omCT=6#{Pfh|$p63w{qd=I6xVa|H5xSimfgP%ycVp^ z0{&J at o4X_SWEaf-LI_FHx#coAdu~~Vu|B$_I z1qp~|6bjw~xcD4B(5F~(zLl at qK?1V3$|nHkt=i*SJ_2{F3ZDHHJ`&t-)=&S at 5^#<1 zUDZ6qi`hD3bwOxXARPn|jGBn^RRE0dwc!O${CUiV#(xpobKTSMtTd?@si>-+Ht{0* z&&l)ka8*}WgQr_6KYnz9loT4Y4WrfeOfojd_v>{U^bOm*{NA|JTp$8*?4FIjt~ua* zY3>z5bE46JUCY&x?P#|M at Xm&JI&?iCcW)M$R<*vJU`ivo)y;7#Nb0oPBUIdczL*nI zJB>-j^fL~jP!-ODb@^=r{Z2TdK+gz-g5H;TN6no_Y(m+>05o#3JLS{H&Q6AEo9v{^t;QQ^d%QvG z-9MG(kd at ZyX1clu<34$$^IY-dQGJ3URdUfV_S6-qzenC^gGws+ at g z)vE$dFC at KHgEox(!H}Wz9pR at zMfIb0!N+FpC4-xZ0SNJPK1G+C>5K5zp;zOzEEn8Z|c<9A-U*WSnU4nX6mn~i)F3P12vx*Qv&NI0DYou4$UaThWO!Xn*LH#Ey40m5OXDyMuUGzT>7gF!83R-)32_ z(2Bag*Q`M-df!G-5B7*YNi08tiQBi at 7;*V~cS?llh!_RrgU{~*N&Fw}y=7EeUEA-A z6(}x6TC`BCxI4iLv^ccIp%iy_cPQ=!ibJ8rp}0#49-u&Qhu{vul5Flr?&p2?IOjdP zANCmMLo+hSV&y-tx#n;FGuOPbG86G}TyKV%uob5p78#S%X&vPHS3f5Xi<~lkR1SG* z$ivw4S>14$@fG#)?<~vJei1SiFTOOK&9Ch=tU9PVb($BqBNF%WRXjhtcK=ysb|1B% z5Buyq at F|-Qxjq+2BOaG^>Z7&Sbi2eod3T4FEh at g$xOL`9IloWrcqi&0DRG;XGVpm9 z{jL5~9E_D(rY0F({N-`RV43gdPWh8JRH{ufLtCg?1~+LWo^jk9bs5L?dHBLcuX4w0 zzOCc7!`{Q3fNQ%`;i?evDqqx4Je5wHb?YT;tThkZT7 z;i8>#QIpCPoN6?jb36tP8G>K)Y)w&#TD at h=^?125=5ZU*n2{`kK84;=0t8xsD;knD z;i~x?7%n3R%hvHrdo9Ndy0LoxM#EL6yEB!IMW?l_*7`KEDR{GhxX4Pe+R^(B6674W+(NM*Kw2 at zvir_GUd1vmVwrDEyTw%$p(E>g=zwQXhO)kpY~o`N+q2aSamGMqnUZExz7sU$AH?_4l~ zJZ_xN^?$7oQ@;ZH*VqKyqkDY=(Hk`)tQ|1?Wxd{Q;dfOUe!tE6z>g@*ag1rf*do2N zX+DZ at s0WA?QBDt6!Uko4c=gRk9&>{j0hRZ;!}}6|UyAOaEfJ{(__^OJk;Z{BqcVF+ zR-XyD8=_bIpz6GHZ_zogE(_{3n%pr`XCNVg7&e{oBWG>Dz6WhR^HpjKyIfzrnFTgpRNll{h=f&wTTUB3W#@d*0z=t&hgCNKW$lT`2I(D-^o8%# zg08_w{-b);g*K`P%sZ_cs{?rx690ad4NR&&cCj2hkFRYUuy|gl5x-RYjhp}`_wQ~e z9xvY4B$eAgOP+9FJ7cbOu5IZ-G*$A)9rJu^kJJ>^YKk60*u)rt6emC_=M_TIoES^p z*_JmuuRzmzH0eyy!h0To07cPBPmwcEij$T{Vrd7yk`4F^CUt$F_DYh7lAHIpt6uB< zBp9tG4}+NGLRy?Awa2KCGzMkrnNwx&5yIfEkW4&&mj~m*HeULdnZSELvnyzGWKKod znFfrxadx+Ncy0Odd-#gk(3S36%KZIMzNI^wW8(nRf(kPpjO8R4tNp3Y6=*x)TKY1* zB_1XBty5^F=6wJdf!YekTS?g!%j!M84ye#$1c~1Vm?Pr!e8Uk?{7a}ywfB)4gypIH z&eqOc_jf-ZU2xbKZ&_W2z2Hx4IGN*})_LcchxwN4)p66SP7lz{iXN~XEE)n0t3iCQ z1^j!|{P#)juYBSJx<=?TF?V;7*zHe at D8Fj215U135q@w`y7CH at aC7+9yJDs96m_6@ z?(2uZJVu(tzZ1+E)O2?f9+ih4o_;&1>NM%;pud{im1txGSv#CmoO$?MPKV!86GY5V zEY(IR-J#uxm)U9U?41qpxEU2)#g-$4W~}F+ at 4SCHvkhJ?kic$}bCfKC8nf z%Fq8c=BQ at cw_Z6Z{Fq7Tsmxn4cx8UM18b?CR?cnk$W=`Hb@;oC&2PuY>KT_XXQnG? z`;k5*pn?gKQzGH>LkT6JUwzDe0mY+s1KT7{jsDy at Fe6v%b@ zAcHs at v8FVK{oqZbAKqQ8en$uhYE*Pa06&&G9(IisZV#PH9WFxuytNO1ix1m z?ciaO>^Rtv^mmn~7`qo~DZBp;@!48(3mSs&2_oBZN0aPis2i-PX=T&Ahfwg`X;#K< zc^iO=y>lmBXtH66g9~8Z at t+3n5Yoh>?~6;G9+Np2OCs~>67yc49(q0h6hHEXbpgQj z-3<~FR{eic+$#V7A#?pde(Iko?t&1GoaTSKGNWLhkmYfHgsm{BQ$@Al$(u917g2;s zRDhIld*ebLZv6M%^L0l60={qzjHf|RwKBbn^GRQuyE$3wb?E#nU;GZ8 at 34Sr34h1w zy$fmstzVs_!JAtf;-(##0xIRTaD62F?`LPG- at uO$wgI;nyWkavl at 8eb+17BtZNU{; zebpJuOU|(^a!8^IOuup-R5R~zlkA?YXQgX2U1JP-GnNhK6uAk2-`{`*E>#ii%_%qu z!aN at Vkhk!GCmCS4E!l<57z3b at cphbo;_6`2i0ACOYG)I~y(t|~kCW(9PXg811oE#+ zbclpYAPt#_b05qNBFf>aHy+10J6 at ZH0cGs8;Q0nN*ogMviZ{~EU22Y7 at 3@Qd4LvyN zox#3 at f)Vs{m)EsU641Tn`9joX%$AW|pA`;5!)+bz@`J`;RQrn^O^K1k9gB|6G7J8# z-L?VPi!Hsj+-{!MJDhuPFY{k4JztRnSCZwc!6k at u2hL-iv!z>V{XLr&fy+wI(BYj! zYYfn~g+lg8+Eqtu8uUE-9yEIz?;Gxw19j`@<7iL4M}))AN%i3ub;h9HuW`zZFpu4Z zUb0P_UHWWL!tD#dn86LIGQ^=MMn4`l(80FAdAKrPoPO3wv#!1%Ike(0K;r^n at rxQ` zYo?{J?KpsZxxk*a(59t7aDN0*hy1`#zOrbfn#X}k=VXwc9UaVN7!IwtU6gJFRU%N` zEZbK*>;Q3oJ_a%49R34-KQZ|M zlP$&2)J|@{$hH!g5J5C at hhbgK0qEm%NY4jMN&ftED0iKnk|fv&Jce=@L7;u+-D-mt_ksNq<5 z`x?K+OEzae{Ty`Ac+S5Qxr=~k4+az?wA at cFic3_fC|C~Z?rKc9#wdr~bykySe`4bx zAi8JAzW%GtMhu*wM{Hvk0gn2C!-LIUW7QAOaE=e|igJ2}lg+G+xm?~G?V>jd0}xbY zY9otP{7bF+hkETBUcSq7DCE76%f48l>?zRFb*=@{=3VFTP>qt$Cg2}jxNsokMyocw z9bJ%ci62QD*C at FZ3yb|^*WR1Y$_B4dj6$;Sfn?YB`kL?!Y+tcT7Q{#2p!lCd5W$YF zf1BE#qdwJjKb+DyfCymQ2Q`%0NL?Xxx2Y(fZKtnXeSl$hmvF>__`xg2YY4_zplE3B zu{kL>wY at P3=w at uRR%FfkvgHs!XLfcg#<4M!^C7Ey&ybndd*lpswd01B+x^vcfmNXO zcE$b2QI=RnIGCWfDgw8|M$iDkY5U8BLhl1ib^hvR+}^Jp3^~gTEjz|elpk8zkE=n? z1owHnCJ;6my02{Vumk`^we0$xFZr|YsT?*W@#FtcWF4*0kGR#^7^FS4nhbQ4t%sYAd8Zu1iN{gavV&F)iq3ozo)hjlU at wJ|9G zOl^DTA%+YS_mf|0KbV*6FHJDKWudvu4r(~?eof`LDc_lTk6pE)cz{$s^JUCu)MsvR z#cbdh`z}*HH6W3jXBW6oQ3Z0UD#@^Nvoj}4PnPK9=$wWx`IT3W?w at _B^v^Lq_;-(0 zXX?5A=*(h05xmxPcPj5aKG>eAxbhkcgJ4m$1D1mm1LFP28}hflJk!2`cpUz0NSt>c z0jz9QuY5a!%AO#C;%{^pl26#3IMV2-Ls82Ys*W;9|tlMgUxSh5F-9GxnGBW%@rCV+vZu}|Fnnj zKNGI1`$m?d1qAsw>We;E0Jy{L~9)pTn70JIXjw(SR7ojd!i66aCKnUrH#--EWLq;!4mw(TsSs}=25-AOdt~MLipwy zR2L7ANqnWL5f!HQIcLyoPRR8f#%FlH)oE5bZpX*(C0 at iDoSBlRdEpc!54;o2Zgi_*S zm?YMdv?bTm+VIBI%kR`-&psBe&O2SiWuJL?MqwX(gt8=e?jJQ74JrDj#wWUukaeY%tAo&DeQ>S;x2hH at U*;=Trbi!?;&1MgCF3XP_GO9nOU$xB6QnF6?L(F&J=$350xyHkO!YY!>zrMs{& z?HVc~EcE@?Av}Ir0*8K6b)AiC$1Kg%i}nVpt#{7LRE88I&^qe~|8Tm-BOe;a?dJ6x z9$}9_ffUMV&T$UPTyJ*wLyGM9CcQ$7g>ukH8Ph7?dRg3eS}zipMSmT69EXe$EfD3z&kY1AgX97EQ at -Rz9{y(0n{=WzxCa`|2O$W>~S4j$NL{WWoi3%@B zpFTX&Cu+YSdKwiQ6B855mJy(S_vI)jXZL0bF%_xnvMce<2mH92ZJ8O5Sj2?jN}=w~l1gFYKd z+j6tq%MhNYPU7RUPT4FlAIW*C&=1PD6U_BO& zLVlBwC;_&a+oqpg-NANvIaFwFs(IJPrNWN-*S}z5oD}$+fVTU_CY3%BqMT&qo~%cX zEDa>IBv*Z3*eR!}c^tc#@FUz5oj#y+{1`QAT%F(UqM7Dw%D5A_=c5wyM+(FKK`kh# zxknKMTvJ(^mR1L^%^aTZmz1WsDX&6(;^Xf42N*b{zp4y=!X~#7A%AR>rP9 at A7bHB3 ze-A-hJ-?x!zLY4{w2=)^H$P*xdLlY!itF*u0 at g#BIP6@!A7374`3YQIG5H4CS! zm1VN|=gaBG6HVIT5<^3jr9{K8hJT)Iu#lupiQ%*D3S7DH{aot`nBmXzUj29iC at OeE zbFzA+Pa*bHl~S2Om7ZB}Q(#r3gjD=-_V+#5uV at S%sX}N^hyrdy8D at e~o{K=%7^-rJ z_TIpaw25{$Bk=Q^c4AjFvsR9wE28^S&|_W>a%(f at 6cAua43N#vz5Bv3TNPOx2^Qe_ zIp^OQb-#9I|^Z0l~GP3L1eoa;NF?dM9CzJlt6_L4p7_%1ud+IILK7 zd*xN&*Ck at Rkw-%|5`fE{L8W=?WBfW2 at xUegc?ORV-AF5MxwoF^K?E0}F9?IGY}BrV zvR*YN*qvQJww6-OIGqCDE(ez7P)hj2lft(aS7*Z$ThMoUQEABSVl6rl*ct0+^X z#FOcD|6%=cA72T3XA2_JhH at O}RrM$z8$ul`T4YCNjjhHp^@uk8dgEBu=9Hvo&jX(S z4)Lm|Cy at 7Iv9voSF*QlZbN^je*qfpIW*4IPLZYY~{m?p0yq&?^I95?~KMXXN3UWDu z4JvhJYQ@(TN6 at d@OIe})rC80}*u%GQR>k<+(j8On7#ai7H+_Y1$0nGOo-eXXWGBFl z%lHI21;pAPtiaT?2c`QH1d_HR at psPl)pjp}O8X7L!egPw-qP}*oIG`Ll74%0f=!!H z*}bcBGf^zDQrI=A at vnOcw)*vgoGk19W19#r>0CWW=F9aLom5CI5x~5}g{u)q7$1)P z at Y7+Z4=LLH$v2O0-9hzNJLGd5o|g*tF?X>J&be}>4!(i_4G09hk5PAsFx5{IA+y}z^%X0SokFD&qS`nxGDlv*6Yj7jbQYa9Py zvlJ8g)=p>AVc-qT_=fB(2L+M%#jxU!#iM=9pOQ;jOTZdsBGfyst-u7-jl090%{Hzv zef0S=&wzyUN_UXcii&Olwgf#|KW<29%&PRO^v4;+EUCdQj9#-+ey&>p>AO8_odY}O z98v}jReheuE84?lmIT{Hp~e|kTk=Pg-IBT-((QqT$K+_K zW)DlgV?#7FS1yA3L+m6>Kfeyzh1f5Mvk8qEh zGC}piGM}1wvk}@a+oXhk3$6Id*@z{T)F;#QX-4)L5%R}Hj;M~hu*5;w7|y9{Q1TQTJ}s+MxwQs;tdRaT|?$NNn)Lb zNg=b1AB+UDOIHSbEvcGD_8;-i=1T;I^3Xn2YazIGLVyJ^NI-FQ*sy85do~r94(nFA z3~}lDPxl|NOAmwUQe{fcuF$OF-X*ahYwRY(ODg?bL7%J)jYdRKp)>+Z>^_R|5X&hf zYdBTcQua2>wNr0xTtl at fTdZO?<7zKe?aJk)U`qsz7n6P>4KJT{3=_NI^qD`J6`_(G zD$`KN;6Oc_JN{HH&~w^W(<=~Xov?*mVzMo->Zr<&OK at 8uK&3!73A>n!Rw0dmX1Lq<00>;j-zkGujtcEH=V=k&!Bg}SpjiSIe`p4JsdUOYpL zP0hqJ1tuQHWP~yMVXrzou00en*eNer5GawewDqV7Z2)vIRxHEeyp!IgQ=Wv^T8egoPfu^jAZX(?`3{}?EEXClcC@`O z%K1ClXj5K=c-}JuzKakySaiMHuMZ=WYvaqw*z2Nwyt7J*d0xNL-1~|zCJ6m`TAdSs zz;^R9M#803*ndLDM)w(NQ^YTuitR7s1EGpi2SCBQgNSzDz zpNy#`@jG2~1v&(e#hG4*!^WsWgiacF$bDKf>>??YIQ>JL+3<$ zxK({noyiS0TA4gI+^IyDDNp1d)rGP30wpzYZ#}*HEW2fPKyR9xI zE1XLez zhRy=2yGE`S6GeCgmXDlSwH^2IGIER$Hp-Gm2L`GVVp=qTO0bmiMIr?5d22F%-8;^e ziyah~W50A2b$-Z5csuX*QOo zYRQoJ`lA_MxATo+;BDVV8;tM&PJMH;N1#4(UPd z1l$hYui}<~qP%h2_2L8fM;=tWB_1*M)H`=oi0j+Y-PU>z?LOS5Qymg|P(|Q%qE<4q(-O zx#ViLgu6!!KV%q5qSWFo$Ct|Q8H$OopjkuTBc1O{kh(T|__7tqaj71 at zItv7UGX3` zaL}{mP>S+GWQYfMp3tm|<6Aj0cqx}lMa&|5e>3DdgDLXs(9x(s;cf&&cdz^i_smSA zo!?Qup>?JG;bi+SO&AxBj5l&L at K8xRoEP?G;9ba7sIsWxqjk6;iNCf9K<<9{Ae*QT-#4TMw&oNV4)Q$L2iYtRR4%K z&CZAKxq&cZt+fKY_=eAZ_sJ|V|C?Vfp&r4DhB)74bD@@{_`$IkG2U0ftqp}MFd;lwHjP(}W5I{*nAs%;IA7khplt4EO2 zq~bAm(O}%Sc->H-8yMH+8Ktk`>Yj-_X{h_=aLHJo8F`3$KsQ6}Ra*Q$;)s^}Q|5Bv zqkPM_RcQ8s7djVI6DdLI`G6PRs5+_|{zwkNA-#s=uNp?aD&t&X0u&~mLFAmi=+%bT zB;~JwLfV7Zubrp+u=q-e(_VVzz&_G|0-}f8em&!)kHYn=UYb}G?dQ>W;Q2io`Evc~ z%$lko=&-=@IC=W>ySQ^h%n}>43*6Ss;*ApK&5k^_;>cVc@`!sd3rGe7D#ARMAev68 z&MVOl=UZdBWr)0)`Y3QjCM|>v)6aWCQ-|bOf0;RWP-Z5!*K(-2+f0xUJbN(D`peqo zq|Y%Xvri4-}% z{UlO5Jr|`*cV0r&?K+#K$i at Mcg;krY at hKKYu?k%X74E-wMS|v?1e$H%kW4HO~&+bb~mts~j80u0gF5lc=*@|^e5OqUoq_wK6pL^Mx9XmXlo!EJ*$ zm+1XPd)3Dy%j!PjHkN`JU1Z8zRb3w1>Nk$}`tHZ0$z!UVhz5?ISM#UMSQoJ>yp5v@ ziW(<_wx1N!=(3!s at Xu1HqYSkc(dsON+PFPjZ>Tr&uq`DqP)f=tcu&lTXawLYzG+Eh z4c*_OUyFJj#h(LcP=#Fe&_ncgpC at A97T3REqZzAIs%SJzqlVn>p3UM2 z8KK6e?Q>qYTcOqYATQ#TeE_jhj at HlJc9sySk1~^&yO*jr&z-$HLyZfH_%&-r?Pt;p z>mmv1d!C5F_;|hI7X|3PljKcm!1g9CRzhTgg4NNsIvFLJ^y1s-v80g{MuF`sKJNKu ztB=4os=eU1gSJl0@$VE+Pe$u4_dSr-|a6 zeL1W|7yHE2$P0(&I3U-CjqeCsek2Vx at ljTStsBJQU_(R)lNAm36-?9PAfc?6osl^t zllqcNxJe&n1>D}XMch|KfpYU-&ym(`o|h5w z6??wg4NC9Qw_I2;XZ*(!ir2XBIPbNhPZo{ ze5o*iCL~R2W4Q+ at d($09uUo|a;r4xyLrI46uraN$GdUsI3nb#B>6Ry`y6kP1=QfsS zG*~nMndBFZkM9iAPF?%rp`F5}%!xvzYD-}T^9`AWU=KZ_0%Q+c@?DTOv1}*S^ae-a+1KSzX4%`Su&ReP+26k&p;bQKxHn=(x(RB-dwTNhOA`6f2|tSf zkpkz{<%rHGcSI9yjk?Bmj13K&{qW44wnBRa`cTvfUSi15FyM&?L zP#TvICTn-#@l8MOc`gAu at Q>#+@#new!h5E+B1~yGciake-C_zV4JeET*nRwJp*N5DqbP0ph*GD>@QXsG*d%D+UfSs>p08J*2DJ5x}E^GE?T6MhdBRxo}rfKXC>n*xPR6adD{Cw-6<7#A({*axj8?$klsSzrDyTOk7ZSc z9^3dRBvguNC6r!a9xh6gs;|VVLOSu4-=h)Ug!w31UgjE#jmQO%L}}qtiEY*^b%g_A zA|5Y%s~vO#zp$$th!GE!jm|$`d%l&^e0L%TqIQxb at Z&Yl*SKb&YW*DRK+^XREUs`I z-MLEk^6V6j&pNE)d!RF_bDt3>0JEk at cShx&;3l!*yS}wz(jI(zZyusAvS?Ph+yhK3s{7ufw{c31<|H6H?DNb~L*Lo*swqTt)KJ3Ol%bRi5`se|)Kk#y+v& z_NmB?RCs$4L)z3+P$A-dM#s!7<5wg6(yHv|GG~Rh$mAAEc(e#EzNngjMlVe$O0l0W z+-a_E*=GFY0D10q`7?Z(*D6f!dX09R8_Amv5)wbF-}{ve@}%l%zb3zxU+0DNTuKQB=g)5O0g0SJ`kltRy z7B`o2P^Ob~v(U@#*d5D2dCwS{Y907P>+JYZLX`aveKct-x`gd_5;e5bsAT-~Zpxy` zaxF1b$6RHy(z)ricy};fX5NX2wlf-$N60@}SP1^X_(j1tYH576dxt+*DKQEm#y1#p ze5U{L(bu~NQsIQ at vH$~fWuNx~FM~BV#Uiri7R)kYx!Cfam(Aiz{TQC at XoFmZZRTIa zC^li{+7*4V%kJ)9iS2cc&TfBLnkSQ7QIvV##uJ5wNdpa-S)&i>b!2++LoQ*sQ}X$w z4_6M^`%uEKI$GamdmPLv*uH&Y`W~&o)Y1w40C9$KkFC$|kc7}@jz0KPLo at B!5&^MJ zOZ-YelCCt>xMiPjnrCgJ!nq`_z=Dpql@^U{sE0anHx41?nqRP&6F!;CYQ;g_^ABZp zH2z-n1?;NiOW4zi->(|;Ul(YnLKEy}h6$epw81e>OGmswr$G~!xxUBuFS#5f3xX&N z7Lub3nLnuE6An2Ymi2_VH&mFJHzMzX+>e+tRi(tG1MjF~LY9IZH;-kK-_T>Vl at j30 zUS`D<`BCVG#^S_1cjJl-=NhOyvGeG8ehmvnSEj)l}3ERFc^mb*8IVBg}A z18?iYmwR;*cSg-$8fzU-8bvTNVZE{8vM-J*sFH2++=;&nz)sQUR7hSN8I;9Yb3+|- z!q-jHpO2Ae-Ab+3#tt~pEq*KE%|s}8qaG3DM3@!Y9M{o27;}h1ueh$kamFc=+=}sj zX3+wu4jw2k-P+war_sk=Cph at f)Ce$LTp;82s!Q2&Q(h40uNTtQHW2E)HgpX8?xDU< z`lco|j9kb=b?X)+M=+cw(O6s_$mR6Kbq3a?Sy_6QN8kwnDn z*yY0{2bvn`12HN6xR^|Rfq2uC9hltLRVSKNQ2t<;dX(OJJ-3)m>Cuu(uf#GUU6a9g zKX`0B_1FdZty{mXS@&hq$4n_dsiytyL(-hlA8_ss7zJ0Cln>3I;!X0<4YumzN at C#2-CJg=V7D~por z*~WC3fna-BF{0QQrpUZ!c9nFz*W&pFt;IX{v7Gb_Qb?EAu&+fMjfycNM3eb=>-lIZ zsygWVu7G at Z-8U#zVtK53*o-NUp#I2gndukJM2bOi{Z=`Y67!dBT)T->s0)Qii+HMP zs0p_~erD%T-IWYtPxV9sT~Z0mVt at HODKlyn_REbMgtgAaqG0-DhrQ^nJ>XX}omyj+ z=cFHLL}ThRQUWT at Rh7*va-?M~k)=FOfqiwgaI$xcS<0g(3^`|O>jFaZ0;({f$SiCxsiFQ&vX?bl1dj>x>xiQQzfBUnPM9S83`I*8 z=4>u;3;xJ*8KhfhOD?jHB_2x2D!XIJvBj`&|!ua{;*J24a*@t*N z4Y-kWMH_|%nqbdNz33f`+8GzTzzTU;vZgiCt_|jJB-W^Ox>tqGbqe+~;ZjCfYx;84 z*t$3Eb59v2M<}9``X&L(2)+;XXyxS|*lN^wUboWOKjI z#SMc9$WOIb)>U=`^X?+Y>I2kNk)3GAlgrL39aVZBBNy4;t1qu=KJimxMw9lpwSV$Sr!_^fx?R!iyh zVaqsAP`j^fY1N+q(G4%^(5NgP=iDCju}rcII~}3>YH{8Bj8NPI^YcSSlXo|r9{DL0 zaQkZ)G18FeMx;Vz>9c4-hJStwaCQ2g6KQwIwpHL(pa<3IIiGiMMWE-iUIadQUS?@N z58>c3I9O^1L@=g)@sL{6i2TtZ*W1^z-_Sw$&a5K141)odZ3-H;MWLv(x(mh5Xnnn*18p`ixO2rO;Ghgx7c at 7&M-+Z;TM}CTFPu7Tc zanDud|8teIObT!5EC?%2amx-Gj9fz?VTf4L(kXBXr>jRMA}(GRBgdQwm-|#Zw*S%u zqq$w=ndgE>sBh6|jz>j01I)})!=id?_7-`2aoe<081mzOB=!4nuX_$}mpiVkMMkV8 zL_z|9IOE-ovdqsW&f12Nn6k)<2*c2GWX5Ms`L3w-iIexmluvo#zz8zH*h1vSy?CX0D#uaEM129SY>2Y0%Mh^S&-*6>Q2 zchH3NOlp7_`^^^4F3+h*j)8WM()8 at +zQ|yNM(pvMlQG}pD9>!p%&AzRcE;&wk9&@n z5*KeziXg$uTOj>3_VX=ngB5U>5~s^vJ^X;mm^8Y-(spCuG?2( z>}G4BlEp9F4;mH{?_5JXumfd(J*`*9h+HGR);2d15 at YbCMj{q6I>?A}BvL!)4iDQn z3e|#l+1jmyd`|vk4&cjywY7 at 0pN$0JCmR(`rMT1H#Z%oWuZr5_h&YbU1k}>tty9Jt z&D^ZHSkJ~ec^JHqizxJ?L==#;KK#}T7<|X}k(_CIr&=Xq3@$$9(0ny>F~!A(by*5T zw6w1Kr}ZmGQ-}23Vd;%TNhw`9-rbT>F*X{U2Wo;Ei-kyda1_oQ->Mmi2%pN z=e2{q>j8p9T>V4iu;{6zz>w(Y)Sx(LtXAxiAB&Nh=AuO at vA{3isq|3M^={ zxK^)-aZtX#O at Ful?D{OUy%jAw+oOVxldo=hCjKE+?KqO at Q2(I!$Vas<8Lh=+z`n{L z6}5pi)n~z{0 at AiTJ%+79_&kU=HAt*-8TkG%_`u6^m+iR>)^^6nT8_LuOk49A at K*OV z6JF?Kw>~X6cMNp6v2WqVMljaa*p%tP&PjT)!n;s>({g&KQhm6t&75U|8xr?x-QiN1 zQ1&FzW$0;vaU=abJ(rIOZudaf2}8Y`td@*4GI6nPpw#ZDu0Si>Y&_)76Nb&K%Mejh zKMU~)oakEnr0@~l^6f{S8 at SjDX#Y!-uC{GVdmCt7iV+l?ka|)!4(+7(k!6)85X*SJ z4!qaoY_mY1_Qrp>7EY<)FvKv(jqlCP=$APhVU@@@;5`muO??F8 at 835lLU+oJ2<>zH zYR!b at TqRuJCMP>k&f+hEv#~?mlAA6pZ?|}m?8%c-NP!5^AG*p*S*vDO|=nHNG{g(eMSgc&O( zPQ;9BWE6GM2d2Qahyv7)i};bQ|I$&?eGgcOZ_egw6a z8Zi+>@6e^e+BA^B=4-e3c!kwR0z18QdCa4w;XDVxL_ at jet_wrDE|PXd1>d3Y^hxYCDLS7T-04pZkK*&244?i*H$0aR;eLG}e$&s*hfw?oBcl>gZ#gox93GZJdB&uIs at ingwg-G5jg3fl zY#489eJm{e2HpKx_6+dJCbnIk13a#GpxRkcLEAf at spZq1(8DhcYrClbw zg>Z||)N0wx0Dh8XiTTXK4W6if8uh+D(%3?)d{r&3uGT5G9a07wNCIJ_j*_~h&;SB@ z8d4>vC5 at fEv^m1afD+o|jkinJ1sXBYi}S*QJ& zpVC&G)6;hEJkBFEZ3{|eUuSSYi}iGsRdeB28=KE`4pJ58c*^>Fr2M;9RxvT$*%8d5 z$}R_5>fH5Z$j(%RnTq3$p(+AS+BSC+r|ORFq|rcINbI42EXRAd6tp7l0E-vB|KM+v zqya+pkXZp8)~2}ieBF3zlW+a%GqLYoloRM%+|(1aV8!=rAnaAp%ZC>#+|y=l(N8_W zv- at 51E;0HSPUVIBWz at c&wIK0q?4s#vM_9+uwm9Td0w(pCq35kM>2N%hY%uo1cpx54>bmqTDgB*f9sMsWUgE&g6M1WB$H*@5a=M^L`AG8FdW`E-a6_m& zs%${VeF&cS7;Ej^h%{bbi+*En`F&gOba at zbZeL({!6rjM3EnjHbzWn|$QfpzZR`6^ z3RFcPMu=6=JnZ|m_IYrVXbVxdP=*orqQ$Pua_mjNOl}0CbCVWZV(-0ll>atcLv!WR zyy4GA2uAaa&1q}LQ%xUtmGA%mH%S5!7)zN?Gdx(nLXnVoh^^jgyJ{;diI_Op zaTuFAd^F?mv~&E&$3MjYo{q*QHfFB0AI&VR?8WJhTRZ7!txUz~wD^^|lpSTvEUgs0 zoy|18Ro>1h8UakUYr zllrSdT5V-DS{VmtGg>|lZgvwcUOrkr0S+EP9$`TNHd;+%SK2qm_Ov{Lv^-o~4}W+> zxVc66xM}}&qm#gT*b;L#H5bv4mHStn5C4hNS-QG9ig0pzczAGl at NzgfTX1p<3k!2{ z at o@6+usVLKAf7}261WGg~t| zGkaH;2WH&=otdeLh`EEaow2Kgm7TGL8KA_$~1tcm2Wj zTLgYf{Ks8?aQzm6-xB|E*B at NJMc}u at f86y4*KZN{E%6_B{lWEH1b$2W$6bGL{T6}W z68~}6A6&mh;J3to-1P_7ZxQ${@gH~n!S!1NeoOqvU4L->7J=Uq|8dtJT)#!&x5R(k z^#|8)5%?|fA9wx1^;-mfOZ>-Oe{lU4f!`AUan~PQzeV7;#DCoN2iI>A_$~4O=q{}P ztn at Ime^}n(@vx3VhM;B>2?_PvYgwtcLa}zK%9i@?o&W z>E|Qr$_k}q=e0YJGW^UyNWj?8S;fU0RU`k8tCoO;Q*^!4z3xY}%%X2wbg4_gH0xuX z*lg_V%Ft{s2uChQ8ESQHUh*Loyf3lPz&0Ej`3s3V at MR>|q7&8=dk6TZJlbl)C3*z` z;j2x}(C(|g-cGOsD%n;&=Y2lk<~%XI-y^HXm`UsxNR6PJ1(elnBWLAsQIIGPYLl^` zAfnBy*K_x2;kP(Q3vZZG7Qr6r$1d_$IG2kdY;xSODRQJ63_QX+M}vSumJRgj8rxQR zrALHzPbSz13R?qva^xm$wO_v<^k|UDjC=a->8L3c5v~VvjKHUTrL4d-IZc9AUg;Fl z!L3^67?EH+Z=L4~){&UKH=18)Zce#6&j$z3I&L71hN~)8X_;uIzGNT936WoX<0WQ@ z?2+lli{`@PZm=(rm6q+|PW#Cm6QNv|_szM)H9Nh-j(OtR7tm(d>3K?FHN at JrN_$-) zF(ZODjWx4ZU_zOV-&nX-?(o`Hx?vP at 9XWY1R>>F>^W&)CknhRQdTPCCqJHCL^7Oep zBJelCxAx!X$e~dm at k{NxxH(eakZkOg*WmF^kD79nztG;FGHRHA>q+yl0&fVH%(EdZ zk5b(bf4iKX7v*FdyzEnPxV>>?g70=%3N z;VNJGh4($)EZS^Fgy(!~c!FNO3n8%{NP~;&`tq-(Td!ZK$W}^!2>xGhQ?%&- diff --git a/src/public/images/addhost.png b/src/public/images/addhost.png deleted file mode 100644 index efa3c570c72182d6e5897bc53f6300114fe4d10f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 789 zcmV+w1M2*VP)LmCZ|3Q5eR5HyjyKGQ!blMl)?y+AauMG=fBl6iAykMzjiw7J(7{0YMbxDhMKK z6NI#wCQBPq7ZLVFlI~NHC}+^n`+3eix5a#T=IWT*ySnGT_x_&eJm=hVjUWivY#D}8 zHtsrkA_?39egXF~BjaOb&uNV1r z__6>GN1?+*Jp*83;seVo%d{Wvpridr$#E+65-BB82&53J&aXZDw8o)+Z{YmV(siu9 zfoOCmlapVWn*Pq|Q{626S;Vnzgb+w65JHQ^{znvgS+>di{49+Pd#Q?4GdDX&Q*#rx zZ6lE*sh?*Vvv>G->-_agHnoUv^wux=3N)I;&fH`qudA#Abp7n z6wmj(z;oSIxML%wKnjT^RsgPS>1+YW4++BjZySux)%RKV?-`%~t at 4b8O z*?a3uTTNGWb=7pw%=z>;^t+rm;%B_iU|?W~k`f|{A4`;v2^|*tW1eajIq|XhSvZ=w z**RJ{eGyh-O_>*i{Mhfo-ceP}J>zV4$|isb<%huogd9>F0hAk>>$TJT6$@duVY2Oa z!|$QZU6OMke<-^SWE4FC;Kmjz(MdCdG=HgLbbdn3Mxsw*ob>q9pWU&HgQt2SxQ~ke zl^&6Md9Fqa at 1K30R{Y6BNz*)mgo8yjGrMu}k*_S#zC6cWX75*rrBOt0Ht&s|CC{V4 z+3}SgHFn at b<#Kv&+C!>ek%3Az&-><-e07^9ev6kK;6hKCt-*~I_`cY`zbaAA>*I(0 zRurwDLf7;PiqE>uVL=2ueQ7NAeLqgzaGj*U?09W}WS!vqwqX^fpN;(SSc%gbgPe+(@K90gR3fm_%**q;#-xT zvdew(O#+>^vHa;@*7p# zci*U5+3{xH0!R|dkMtMd?b7$1H#0N3&hLq|N%H(=d at J3YR?d5XnP*#b<@aqI(-3Fn z^Yh+kQoJ)ikGiHvto;yH81-KO)*Z9`%SrPAZ6CeGb4U<j?7i;nZ2FrncKYP~{gGPBKv=T!DZv%|sq4{$zQlm*%55oc_I8NP?X$f# zlMV9HI7!R%q!A~#@q$rb7svcHtW~}|?*O!Fp_BEt3C{o)rp}_dkU>p%x1lCjx*6*t zLS6K-*&@e0?%EUq3vNXV0~lVY~wf|Os(TrG)sC+ZMqBoT;{$vYe!p at 0jg$to7j zEw=Jwg5t|mPzMma{DGkKf?Jh2$m3AI4gHeMItcj;7#?j^csZr?sBVh)`-*TNWe9}@ zSBOJ+&=ht_sS<>LqB0S{*agc$P;2VG&TK;+utgTNg_3u&@x=~k0OI4Wl}XIrgS4pQ zO4z5S1~=Jcp|*IL?qt*I>+~M(S_Sv#4W3B7N7}rumtXcelSeuf6QUOAe288i&}Kpe zSR$4(o#8i^6E%2_SGhO`kzaw6;ywq8R~%vWPdmy6<(ouE8zl>5ryD_M;xp}1!n07{ z^0`>3lD8Pfs6ZV8ndBxei!cNmdcau3;;aJ+NHYyEb`g~^!k=nHf2DN7Enzs2{?>%} zUR#5SI9meg4CW=yCdla6hhV)QIJ{(-cX;2 zTM2YAyZZ*m$wmkS4=pL+i}N7`Sqa{>V#NK{5p)U?a?0UXKp6~K;fgViry~;oHGw`4 z8;8#--HR=fv_!EzlFinOJToqe>n>?F>Ov)vA-%)9l?0a+0oI5Y4($&1CoLYXM at ALz zDMf`jW-ia1rwQ6o|6|x=Jx)^)c!CU=Pa`A^EF(TmASg}Rh)n*5eu{Utz}%oaON$Nv z&U~+6{3V^CQE`xlCM3zEWYUtU4iBLm8h}rHMA&BKTrOOwNfLLrktnv*&CAQ6i zp at ksIGKEHc>?S&8O3i|*)P4AfAkGRSE`DI}11lP`jw??45>NXY&lM}hS{g!ziDv|E z4 at Hb8B=6oURY6V>442vB#q2(h%-HYk}JU~8q35#zc%?M(On&{+zQgo=nikcDoH6van zQK5!|Grm);s;}le{YPpNmyIVt%xv-y0k7=~n|vZ^ubI(sxP02l-P}a`ZftB1iX)ED zcqX+MuyrAwd;P>G(_oX at zn?ON06M-${~A{Y5HO^+{I287Y0+#FqMeIUAkEa#P$&Fu zlcR&h+&7$p6vRryvXo7m`8q8uXTxRhG;i{~Y4p*|3316k*8B9Hrt>xnCT$&EE5BN} zG`2hG5M06Tm_|71NtQLJ%#kUM4l6R`MY^woOW9E5o;0KeN;awkssuGu;Y4OR%;)xV zS6=>*#&ktAnWTBKBKc5eLg$Ua at MwqnX@*x@#jGZPAloE?XD;qhnG zJT17_`9CPHiXjX_0&eT$An4W#i^ z9*FVa5o3P0QQh4TvJ4Bp7t$L>-LzlM#dur(`iyBm%(rDPFuoN$g?|bhdk3V{JHb1)FsDb}a3)D3#Z2$*2n?1K zPD-DO3`w?m1}SLl7^{xYA$nlgFy^yM8#V<|#_w)jxo7+Dt1^s+Y&y!*6b47)e at 0SQD|Np0m*x zi?F1zMpG?QtCF-MM4?-1nJtT;O>g61r?au>BxclrO+uhzIf*5uJh+5Gmfh3P&t;%S zo|aYXA@#G!c?^~hFxl`2`GTW_|4Da41S=MuRVEp1z0SkNkZl;kjr++6v)cV$2Q+v=!#Vu%kMYMcde2q=|ryH9qv=Th;6FZf^Ms~lic1p ziC(cGXipCBiP59H3*|Z$s6fI~qcmP0)6TN)QqfL{pfUt&35qtdEM`K~uJ4)No~p-^ zKQ?Dq&kI>aV-{bJTEk#AV-Ovv{T9)7;)*F-*kJM79hAU@(P{GxSpfvfvO55OlVHahcZm>Wm7xNJI1^ zk;!^Y4Ud#xg{2Ui%{vgm(Dog-?{hLk0BdSOk|L~@t!E9bvL)i(>+gh3{34p~Cdk7E z8SZJ}TFgUS9O!E1`ZETWO$u_FK#{B)aYvJN$V=}~k at isr1`-B&`Icb{M;sW*FSbdk z{zGw^rW@|Ha+`dgfRre&oKOx8)QSpt!k-b6)KBrY%qQIPX(y1gE42mT6i`UbzoJdk z3sm+{~+kS-4U z+z=-_{gYlp3BxjdFHRAwsLx0Q3%OiaQoFl_s(9nM)k(2S=D569IW;|tM%c at 5`OL-E zwq=M4 at z*Rp5!CKDnq(e{%K++_g?Dxo&(La5OYR8R5sU313qf-WdEeT%U?g0G#daUn z3`6EK$~G=llJ`ZJ+r_-E6b~83=f$cN at hWg(ZAD^?*?@0s#LWBC?wKjqO<{kyHo1w5 zo*~ZMHc^?qrq;ZmI*HG!!ihT{+5iCm{1Kw+oS6;_!(6rPuS(b06)xNdIzO*xT@*W+CV5wl5;STX`iWmHm z&k`=9lKw^|cSRGPvz1;{Hef~UMgOKRl@*7HuTYfdWtq$mDX zHGT|Gy3^{)#7>HvDZJIC2D3Vv1=2<V3z*Y>K;9go*brnP)n zNCSGE@`Q-iP*&tw8q`k8DNo8x*R)hTOQl01$oNDmd;gVBpM003^`M%%?%C~Sl`NpN zkA9^!&E?VkBJR>Vv`SWTXA*vAQhGkZ;`0>qV3JO$RGC9F&*YiYW5Ra4TR!(pqyL66 z`=(p~`a$`mmieUCVa-gXZrN&hA!F3M-u<6ewy_(uu@`%l zhSjb`A2gBT`?1y_#lOfo-m9E6#oTG9lq~K at L{KhEoP1YnEwtcb-eBkzTlZrz^Q)J_ z6`OMy1Dp%-*(OE%SFoACPj2ngbz2qH#m_uI at uewT83eMu_ zc~C|w zw|X*ar|e?o1N zReb~1^l!TVB&L9^hywn^aI7rtU|@D9;dX^fw#{08r>N+a;Pe?n40)??fNh!K)w)h? zD)H*#)NFM5rQu0TBMs8z-IsrJ=L9B=CY|$^Bk)*!m3`sWHe35je^utV$Qhinh%$<| z#MN(nM;v`BCfrbjPKGaU9i%~)zQzSF`B?dddF|w*vrvdcpO4TdBDxn&yi*uI*Y3Ba zu5v?~XdBE-RHK;;2!i@#AySJE=f>BtRUbq@`MI at Zrmw8o8tOU;<=6{Kj^P+v^ladJ z=0q?lP?AG*OwGLbLi&4fuAO;tHfCn(yxzn~xTwKfY;lAQg4;t&{{-wrgU(J{f9AID zZ9`geIh^OtHU-}nRYR8dOgwcgm(S<5A&&isu1H;;xa9vq|A^QadE~*!U~Sb+lnFp0 zT>8}kecGirGpob7?P at 7}CXZp~I{=!zosCToCDWUE&a*n>7r4hSQ#d}P3e6RTn4vJ5 zI?O28mpC}>R{8cc*#l|bM3=xe0#qoZx)n)x%WLmVpJg~~Ej>h_b?GxEoQbN10(TVA2`zEEf;zcwy;jo1JaVWW+o zkPky+?**(AZk&h(ZJ2!>*?VAZj_a-P1c)TpUG^WnNmPrj$rxEFQ~^$8JW50h*Rdev zm`B3njeOmd at 3&WR5B>lA4W zU6TU#LHC=>hH#j?Sp-s%{DLj}r)jmxV at sxEOYCL~89F~|i5GOb+4!#&99j?;cy1?ln#k7#SLI*(1V3m+^^Kx($AisxCm>H>Iq{}$4&bpm%? zpEcb_V6WXjOv_CkpK=|WVi#W^&>`(-2AjR~<=VFls=)PJLRc%pZ8kkj`%M<4Dsior z?qN2I;De0QJlCbS?#-o^P;Q}{+flqS8_OQ#+ESkMGc#R0>w@|%41 zq;Gn|jEgdv{EQPk9&}!5Hlqv;y@*3bwZ;{xGjSSGbztCT6g5=47PJ(!CMNQ|3x8Cf zj*ZJnj*9z+(zG<^C-Im&^ew!G^XZG-jID0H80=E&p*?pPfv5(OXz at 1T!x}1j6%=0^ zjnP6Ys-G@$ z{PugOK2>05 at erMLU!bJeA`Hl@{n%@5pt8Euo1EuZCCkHOa&?D)XeJL51Uy0d>WSY8 z)8BVYWfFZ~X}q*MEaE9PMRksnBkDR6!nuq)BjxG1q_%tJSMT>(>S_FEaKx2M|t0PCR|?jc+f&xoARl zigPbU!YV3ud$iH{F8ar-Xx at RTPoZG5XKd{}1ug!j at aHj46%Epubel!uI6fv at POxv{ z%$j5MQK~9lGpjzL{4SF33tG02t$`aCbqc1 at g%chVdz3!&8zEE1;pQ at NE;^TT@@NCt z9V5`E;s}6Fy{Bifu6cQuTr!XH=!viE&!@a5^#Blq<4OF2eB--^*vW>)_T7yJzyS;5 zI<@4PUnQIAB5EQ*0;6dq7Xz>MA(o8CQbY{TOT4(*l_kmnaps`-_(8;9?0qfkYjuiW z;TQ(mHGhOx*EnOHkEg(?Kqp#H(WsdrcPp}GO5fpyLte+2S7AqZoxob*#nB at v9=7<| zDSLRvQwAyV9(}-oeLpuLz9>F9w}SZLyczx}3J>ROf1kt(c^t>dx at 3Auo5d07n&hJ2 z?D$}ROWOGz_+;Dr<^FwLV*ul!cTbo_>zFe^17?SeSw-m8ps4PR!{`Zo+c{ZR9DLhx zbKVQ;DM&`)qC8L5-Rxu`q)hK+U86(8rh*@{YKUy? z?_n2n$ylp8%U5N-H~*9tLOj}4gAo28Pc_~7r!@@&|V>@Tcw`Agcr zB741gm%DcA>I$A;!L>1g8Jv>0j>%A1tR?2#F^-DPhj6`w^|lf>xmN at Ma%ng( zMr~>8YuhRje>84^H||C5L0edjC=FY~KzrzHA^DV97|KWjAm0d>RJv(ZJV&hX4R4=g zNYV`YjaEmP?h{9vlA#Y8sDkA)!XkFuc{Q1r@}us<5K*L76H)|FQ4Dq;HhZCs;(ndv zbJQO#HZ`;O(R62 at 1dsH6ae`^W5Qh6G$QR9BVk7xqzr3r^R&TW0^V%h}?_f#_|8!LG zGbAb`*n$17t9W9*IraN?WOYDebB8$mNFccwg0h&C)uz0wokZxi&rjr5a$jNe39xXV ztqY|2=_Tt4t*Zn$Ab#m!eGaoNbMWGiFGNHgRhCG?0H;6U-&NkoM zvS>%T?fF3DmOY?dgNOG+BA~22=HT-p8-(z-PQc^bZ#v#lJF$+5e6m-}rGqDWJ-|i# z7uQImHOckF+9OT0lXw1`)l<3_kJcCU7ulY|cOUg17TwBTWtoaa7)IySdeR)Ygt$-8UV=1<(S5sJ%I3OWzjwgw+c5Y^<|bme?^ zF&B*+S{*|E-_6*Z~z!I%P>Ues?c2|d&S2Y|~eIyZLs1-jP-BZEdJ_)0?x6D)W?7;0d= zia^j6&2 at RT?5Slkx#%LkRxw#=xk>t@FkjvVmpTs}~ zB|s3MA at 9J}8s*_V)d{NsaTucJa*fc7KM$8WUAzr~DA1Oo zMrg^>mvGmxt at NqmW#obJ`i9C^XqjaE~yQ@`q<<=7Ys?+3eVQ9z(J0NDEx=e84S-O_%4otQ$N+;_XMB2^u{=Exv zl*8Q-fH8R8&YqvJoj{N_2qv?3#gwZ-SV-S}S!Xn`pr!CFedT-$CB13}Uw`UCLHc>+ zlj8+!>H2_EM z{Y?s{51(J9*N?tRBBCAPrV(GHE5{B`8;FJlDv{_aM=xFE#=BN at I-asak6B3Gb&{-x zmK_75sCD*8;WQxH^SNWH_9RIB4uH5O(j8*4U-CV-T zaq%5bt`)qsk>wn;@5i6iK#6$TOQ75%dzN(ygYcoBkx*RVH4m?={2&i=geik$r2_fy zArWI3yiYnCkqFyl!8IU*r~uTZ2ZRu-F#OOD_?_*IZ_v;iBmArOEMI62uN-dhO4xFk z&mnogB(xE+A5Z4)Ah{i~WI`UtWfCDx>$L8UORu)C^mxe at Rw8AORW5#;IU0R)_7%8A zU8?n9HcJ;Z8Yt#H4m@|a|ATGA#eY8SiK#j%g{f7h`+EzsYRW|2+PUed3v=-qC&l`Y z>>2fHTrjiYY7qOD5r;GcYk3t7l95!4!Kc1%!9FRs+Zrt_Jq3 z0_;z1fWu#nVn)q=OuuT_2~Rz at Y-Tc$TG3nGz3jxl^HssIHD&JJpT&eD8YnB|6AFJ=UXT&8ScMt83IFR0 at YV zatPmw&dbp7e(p)f6%MeKm5iL?fb&|L`Ey}79Wa$hy#}!Ma zQFvH|zxCQtT3J<93RdU-5&{P#vn`u8q@(z+2u5NO5`I!mCzvBl*rtDpnInIIM%z&1|K!IfQP`DhlE zSyC}to%feWtl((^D2i+ZZD&7G;mf0V at hGttt zsQy#7sR=D!kqXS=j~r31|2N>FdZz!c{Vsg(7Ze6FUvi!W)n}(yjgWJ0-5^|Q)Ogqq z+yrczmaZ>1+@|x33}w8f$WniPA3Y*SD6{Xyp4MuZWK7Tn8k=KJX8fMaFqg;p#IntS zM7~5GK7hJ)^NaoGZvQCS6;!N=Yv>~jHR4rIos$Bz?li8`8XVfe^rPG#lb=*%o#p*G z;6z{*`^Mc&@rhypQxybbcA7M~3V(u>y#aS)B3{aXCxEROe(2 zofjMvjpUoL=?dH?SWF{gQRtc at N7}%QxS!@41)s~Ig-g38EvtTy!lHCU2w70)M&X_& zcU~D7mp?9FI2n>N2v_%gCr79E&+%2mun8hXXQqgVny_bcvUheSf;PY65)3CBf~xGI zs5CJ1A8H`){FGap at g3J(pFrEps~+6hEp@# zB~hc!MtaVO*|PmT6cyJj#SA`;zz<%T3 at vv)wGQ*;5c8*`bbM`|4zYOLq+-5A950Rk zK~F-eU-csQ!%uXLI7{s=rpQhqf_QzOfi9kYnt;PCyKerDUAVoQGTIJHM+i^W8~qyc z1;sx?q_biW{5$G+P~EtH66xrWl8#t5g84FS92X at X@euc)7S$EG92kNa(Qth8oTuoe zJopRq-ZipD#M$iOh5t{;4&#PbBV;BWaiO?b=+luZLdVL at B28dQtV!Zo$!Cb1rSgE^9>fuoLQZJKs^`mr0kpFR7p|=?y_# zXhwOdm{0S$B2Cuz_^#acQ1)UteG;&OP5`CXq9~FZ=Lo~sm9oK(z*!9Bv%vNQvd*nK zahm6Pm0Q})1dr}5-;5qYZt59HY`V|v`ae7&<;Gq)A#8q0NnsJm0V`8eG1avBmx9kg zSpvxkSyYt-KI1oUQj1^~-&{(ekxXNsWX+|>A^Auyt2|?V`?~}O=R_Y at q&2A<_#%pz&98evhMC5qFETa|uTMw+4^n70jQqU5W zT?Lk~o<7Cz z$5xWcrjd1_>7Iu7wKKgeXWGBub=*P)W!b+$|0L6x%*81nWvr5(Kv((l-{v}t`!DjI zOi~r at JSsLoG`zqk at 6bi9P&&Fx-xA_ankz|+_+yorlro}FjEGHVWib!nAMv;1-T=eb+|hT?l)cxhEh;U)<>~F zMpGD_{1v-!&@plGXai3jjJsORkeRZBzYG>XuvkZyI3bB$X><;%Rpaf&Lj;m=O`NP? z7u>v;9q}PIW5D3uU_dvJb^VyPj1s#LEMl_6u5pN5PjQ}9LdC}ZLg zO>DYU1>O~;3`p+d1KfU0<0t0#IV}&Le+*C|ZuKE=zUUGIJEu*e)u)a&*s4cRS{`rI z>^JaN3pd_)#QLN|bRH|yW&V7AN(*BRJM%5LA9+i1?@FDu8{(gP9y5G1oqJO)*vPu} z#lH;htX4zH_qwo{6)!Q8`%IuzF77j*>${d~;_1wa7s`eGqd{i65)S?5li`Nsc)KOP zS#4JBNmeNfR^LwT(ntyS|21+OS;s-yBJreH_l^5_K+vwKtZ}uuarkx~eO;^NHI)Sz zvJuxmguX6NLMFFQq)^VNRmQ00qL*|u65PtT!j|fZDO(*hg-*zjt3YK}J}(b`QkZ>S z$nsW)%I(Ibx(H$Mm)i!BJX#Aifsq=($P++m&YZ5*slsB7YIq~i*t&9F3w>TIzPYi4 zYvs*7i?-&9lk9}4>4Mx$uRaT2VG&UFM-CS&>j?kfzj8HI1^OQcMm%`P?*e8>?uUoY9?7p8R~U5E73F ziL0>qU5ZfQD00%gS3p7a7vHR(#>!9;HS0-$D}%iCsZJ#%3q>d-|A^HW4y7F%RTLI# z@)p3V?^g*?(TZBzig&!%5? z-nlMX;wkwLu{F1q^+xZr(QY>uL)J&_GsD^O1=DpMJudU*(`XZ4gMFMrLJ_;lVk3=Y zR6$pRwrs}XJj^v$y{0MbHA|7TF~2~c(Pr8z-kU#dDdYhGSEJP4ZR5dDIZRgT=|h>U z-}^B+-Uw(FToG>dR>@;h!*tJ9eGFXmL at wPLSDKn+Tl?<*UbR at J*EN2-$nSHT+?J-kdYdx6te(hErim|<6hF>d$5z)UJ?cut%(af}zu zpnIl`@ha+U(_3OYud6tVJtGc8A6bMyChe5%?D6)>TPk-%zuC>=v#4HaC?KK_Xeo|x zW^){1m}QP01^$C%G#^OD^b~>cKafly-Zb#s2<}2;5&}i>KapyoMq7%hA0fz?X0`U>lf!WVpF4e3Gdob{x#%9()7#e>n|$#9$G|>(hoO5?&*&p->cKzvFN=LN zmjQj}k%#5tqcHNn3V-NZD$c+{yoVa=t&jd+==uw6;Y`k%AM|zqwt4!OzCOrrM14+A z{y$eAh1(1%{`-~cnblK*+UW4Hsn1SHygaGgXR|TMw8so#!3n#2{z;K;B%4vgExow* zU{8Z8+C;uKa;Y!r4~d6$(kQ!=Cd)`H)|bsPk^5hKHu=W+Wv8LIs1+*hJQ`LKQ^5Z} z`oduaYr9IGU~M1|9cmCY0p5?)i|o0Ut)P|HMs$cs&&Kq-+Ju_k-0Y;t`~OBa-|+tp zV;{^abXz$#SyQg at uR&a>{@KTJ8=oRy at 4z4~Abq!uRUh6Kbji2XXj7p27V1-KVi~_K zu at 5oezX9PGQD)sO9-V^MxW&APN5abB;3WYdzP_ttE94+IO`ULa46;@z7>v8!8~oh{ z!L2+ZiwWnQ(LDXUt%B4DAv6s#r(oMM>baWBud;3(R=CtBtW2x_t}?ACdY?5VAy9~# z(42M;?`ukK-;NPkhjnWV<~QY;5i at 5IpZ_HfHdl#Sn1q?&#ElP+8`;F}A86bC&(PNI z^%vUag{_W}AAJbtkOy`_Vs4&-HXGd?#if8rZ^@{3|AxZ+LoXX`rv5vy`+Y5m-gX)q z4}>^AX!sr0H3M2^p}z264WU~C-R-))mui^15KCP_ZzLWB(ADAKK9&>iWDLphKy}zB zGXzj>;G$-zwsAf8*cY`bVw|AUmPT##wtqmXfISOvz~A^hWA=u)d^&o#$9%MP^3%;T zj;sAqheKar`x5+pc!BeCgKylC&t5$MQ0jhCdyz2r{Ms^DF0U)F_I!X_?pGMPpk=nS zssTG_R&xBH?BCtW3s53e*tLyTG#_0TzsH#iiD0`&5^*^*CfLC%m{6L#2!)7zZQ)lj zWCqEl(~$3a;fze9<*Pqa{W&qg5Z>fyxkp|)uPmFP*EcZUKwa`0C9(!r6&q&heG93U z^CWI+5uJ)+K62%bt0OpP2o~{lj>0f&&o9kQ&=v8WIi-frE5+uv(y6IQb=TR%5(jzr zW%Z{RcT;-NeqmfFEHaY5X8Yd%s%#vW!^bwjtr5ysJSC;2qY+Dy*ztmLd>xu2q+TmP zww at aK*_NDCk6L<%tv2!a266ExpO>&=8xB^A2%Y{KFV^>Z&aorowMqAvqRgqqw*SOk zmFEA2yHJb&a#xuLw&$9-P&EB*$%$bd_A;P;k9f1kVDyGn5^fzv!-IJm5S6#q>Nc&L z_hupKGx6fvo+Om+a-SwT?k$();$icQGtO0LL}sTNhwk#~r8E7Y<2WZq(XmLbV{X6n zl$v8_RQ~%iT(r)Z-`Alz{{j3ZGS5%fBd?GQ-4r9${#?gcXl|Y7tAaSiaghjNqPmar zHaHV*g;s`$_iM(>k|E*_R&&Tqoy*T+6gRQwiZ^>)zzG+L>+6y zanZx~WMPIjeRdokpf&DjS|V~OJd812EFdJrpXZV8?)$wkOK`)x%~SD1%(6i?Y&U~d z(SB-OD?fZlu3`wsQeY=u0811Ov-*;G15$n7+i7K|sxCf?jo7VBd zaX-lT$Te`{=?&5Gf3ZCWU`h(|UDV6lZS!j$5L5^X at V+&v-Wq`Gi8_Fx9(|j+D z`FX0!s0WeN!+g4K;syGPU;Ln$14$i4xhK)Od*-%!?@E}wv8nVRg3)H*i$$R^y8}+z(GP-I+5WM{0qk~|S8fVR`e?k=rRO{@9V0XxET@%**lg}ncb=HT_DwO(3L`yj;B z(qUaX0%SAosdbe#e9b{J)U|3iTLmt<ISA1fgbe>G{)aJ^J*bd3?F) zt64oyIk6AVG5xAIfl67UuX5H?YO-U{S&120$BgUYJMedq+7yDZqZVcb+)%t>E0H~K zY2x6h3GNEd?VTrU!w2RAYWaS8hP;g3^Y1^w_E+U42H>-`gGRY&^A0Ua1wrlEn4b}n zrKdfLFdNPnPmF4c(~XVlix%*ArRx>j0Hk&;iN`Ll0(nMiJ8sw(AUy>v`@SJ6p+FBy z(ifRs?|VtJO#;XnA|SQiTf{zbgJR0~@POmZi+0%fW8HBN$w-?hK-0SIv6uQ!bJ4da zcAg`&%u0f*p$9G5c5_^e_`9d1JQfM_xTTPx570xCuWUk{h~>@E%%QJ3ejQP%M3Ap+ z*L-!_-F1l&oe#pF#=V&j%H`Cyt=~QUoayQFC*`hUA=oeSq(`k9aJ>>y|HqO6Oa5$` zY7{Wf=Pgc at G|`02M>nD~*3AwNx>H}IAMGx6=Mf4E{Qrh8)DQSl_<*nF(?Lrlv$Fm8 zQT~AOt3y?wYw#H>ookD-d$3s}#0FLs*})`*M4e38ycZY?m0& z0((aIVsGs11VFHJJmaH_)V8td$>YuaLlps;$E}5kbBsylK+;q0Y}~g`dC> z-PIG4?wQ|G(hnagm{?r>4shNbejEJC`Ncq{@r7U2eev+ at jPSXB?RR&;h|K07QdU(k z_FQ4dJ;=lLME|H7I8b)D^W?P#N#}cai98fsx5E zFgbv=n(NGZrmv;Y9^A&$*?eQQ8(6#2pAZ&<2~F!<{G%p(AmEWp>FbYQZqcq)1hx-{ zu5Sy at PG!`me0)FAk)nB=8!h}ULVoi2j8U=wfg<<)pXe+3P58uBFwj-7ZL>}~{ct|d zUOQfU7kFfVe_G8%$O7A7(cB6@;Hod!jJNFyYyYqgcGz~t$#krHzGWi^jo_DsvN*rE zu41SK*sqZ_^KH0XJ39~?Fge%CLDJaE9E>wG|AyK&ZKgM{>ugIGAAqsi3!S at WxL z_?|HN0XVu-kD=jtK|WvA9rNV0J^t5dkS-xuMCIaG;ml|f->3XjNZjgR1Dp~LoF|(U zKgNI!E65NB2$3et4OSO{TohB*hkwVfklFPs{I7hEChXbXJyK#xh|e%)&Yco#CzE6M z|AAjHTK~eYYu*q1N&pEs at P!BZ3FUizMC7%91nYeS*6GNNApK-QIUU=$LT+FGCZ-k7n$1Tf_KnR^j!LMMJ< zeDE6{M$IekT5$@;*lpwG>e5n{cp`dFfU*}p^SuPzi$bV%uLKoOn8j2;R95MFU$p(4 z0S=W&Di2N`lwLEDUV(7+s^~|gp~uIWC_j&XgdO^E_5HVE4gX7_k8s1ZP at 5Ab6et}D zJV_E7^2odxj5smH5CM)yBR*@1rE25HG#CWunC7WDG+ z!YJiZ<|&X1vUr);1f>E10N-UWCvcnG3fc(QE|bU!q01{o`;*4e3vyv$M0ys1P6bf`>tvO;8%2a> zpo&W=V&eHHYosqkCcAG`7yM!Kj{<>XDRxH(PqshKstxW>PSbDOyg6|qF`ocwZvq1` zw<<{#BfO;-Xwf<4uhEQGHuv>ea(;}5JCafLOAn?u3iAQ4o?e4jd^5(QM;u4SskTqN zhn362p!^zzcE}`~7cZ{|_A~Og&X-RXQw8q(7$7sge)4P5G2M0w{^Qrme?}@xDS7!| z%=yBE at o7Hctm8&}<5k*p at Z_=ddxy~za#9eX7zb at xV>B54 zOgoB`&4VAYlVkLC3h2p?^oIKGWerrz0xUIppJ*cFz4eWAp})JL at d@Y%8R2VCd1P)e z!)e%k<2f+sx8F8AsAKoad}Mu~j!q2lv$`U&p|TmyS{el9vH))w27R^WX?(;t#+wbJ zr_ at DPWhxIA-j-gv((JpFjuQ=L1Df()I1jF;IB_N(4#Yg}n3e at M!e#K$1#Yqun;z<= z%`Msl`P*+h{>KIR&sC`-%ZvJdJ;n0w5(g(oS#lQWP=bMhEB(h!NG0^Y+)w^nn;$o! z`7Mh8eT*Ol7zb1s2NY}vl)o$0t^V+h1tg#_xC4LTborMPS?h77IC9DV@*FZa9`Rh%ZDZePU3W?$;E60_v*Iv_Zv-Yf3) z?i8L~6AR)O&NiMhb(F8mc0cLhwdv-MRG6K$dI9V$4 at x~xPKo!dHe8zO?7WE5kUgME z-YY#!?xJ3R0)FogUWfG4Z;w|y4{h#2%|(pxB0OzGN30_6S(Miytxeb_rMeQ>3wIvJ z*%oAs^5TTIp0AM;C7^+gO1+ME-}BErFHW*1Q`cm&2@|XuKr;RZmX{U;g{&3W^ns1Z z)Pm592rX?Veo?&48?HJZQ9zzJ_F(am^7&&n{Bq4O;es-8i5Wfc%4gyIc@(qk)lb!Q z9(3fF+3G*~er#8yr0RA`;Hl~}#jqW~I0-27_2*M{bZr&{43h{vV5(%kJ;h9nY~X?} zn6dx#y&v*Dlii)~=D#Pt`4Db*HZ1bLi)nrNI7Q!}vRj4aaG{&ua;XfLjSRGBu}!)r ze#Wy0ZLczRv|8GI^!J5?RxKC1h{pG7e!&-G&(uC^Z_&pb=MHOc96 z#bXxOgBSM$0 at pIHd$?nq6(l>Xr}BCVK9fLjm%EE&JKPO|G@{fat!MtMd}L><{K4>- zN7+tLZ2tubl at BB2U4O7~^Q0ro(~#bP at N+QeqNeDTC%O3csG0EJJ|;X|56NqOW7l?F z{C|GYa?#(g`Sh)1bsO#V=BrN_JNSDUs=OaBVFKqJQlh(y$14v1Y};Irl=e52ntdHF zxh7W8_H2CBda4uuwl~j at u3Jd!=yLVyRevI*x;OXw4tJoEFF*rQ1(Z+6-vo`*JQG13 zxW@!~XFzHkl}-EiW44$PS at _-VWN7z!Sgh(A?W;V`T-$BUeC0>Yh3~BGz9G38e(ya~ z#!9T6(a49a7jQJaHhTvR6Q!ZQsAVKO%@4P!5-iz1&E9Vo;;Boos;M at pvaie$5Wc1(XH}B?Tp z5|jq%4jFm?fuS3QZWvb{@2S9<0##OHZA zZ~1}PxwXHzG$=87^|Q_4q3IqF>PUQhS2{xBH-Sh1Pa*SuZ`7YlROi-5=w!`Y(fIL6 z%w%tYsM)6F74 zo}2Sren1|!`>q$1!KYb#>b=9|IA<2^rO`L{;`C1EZ7TJ(`;!?-ox{X0q`?-^jPC(O zXKYmmd4AU?0qvT%z3hqXCb at 13G+cVW@4bavIcI;^kgh}cf{q58H!##SZh?o1c)`xE zH*IyWR}}dPN})F_ruUH^&Vjl??`@cTO&$#URCa|UL}VlAmaL|4va*@ry!^6(ZSym( zc+W73ku8X8Q^!YGW?akG6g+&gH5u5($M=%ZDZ|}JNJk{jX at 8X^;P+&%Yi?Gjx7E@% zhR?*F;eExOZ}kCzV%bT<=v`OBsxfM{7GNWG#SV2|o$A0`aPbjtHLj|kf}|s>!K>y# z7;5l%6L1Go|FG9CaocP#Z+bC4fTFoCV(jv^f&;^PX~Srq=acdMYb|UCc0+d;PBfcS znmP?PX-_&KbKOt8t$^xA&m2sI(Pq;U%P_sg(GLvF{adT+7O{=c6V{)-P(O4nNvM8o zPTuMKDwzBs>|(q{Kdt(9W~`O4L81C6uYPkEH5#E at Bex>a at FmYRo3EcMjyRF{`cfj zv0K)!s$oAZMFd9yn-?Anp|TO-y={fYA7bW`r8g#X1$A8})rZw*ZVM7lBocms$`|K1 z-oMMO;4zCvh%fGgpL6-q8}dPP5(znH0lNFmcgs9e_xF!-#Uz%Sw$FX37Y;~W at 5NlC zB=2(42EXiKy*HXpK(Nuu)}~@fygA7lDi8e9rFi;|M!i{fcpFpK_%?&gH-U$M-qD6rP4(Iux5gL%Wv{IK$<@K5Z>v3u at EE8yY2 zm31wOEOA%xDK~bRqkl at ihxCeRU3)oY%`xGWuTbsmVN=nYW1XP*<4Ucn*B8&(I-0v= zt4J&0U5lpBCru0a!EcQan%9uvS_dE;%kKx6(XNb2j(`G+BsTpEGdZ^v78K|Wb3$rgSTGxy2ypOsN7(3sH`X->fBN^Q| zv-7c$$h}7B4dgg@%&?}&K^=v2uX}5EsAxeJJixk%L(|V8o=4#Gy`2-0$mcd1luo#r z2W0mC>2>P!>O*Zxh4YKlN$>S at mOA&k)?QR|l|aG??~jg8+G4uRvBM~bI8(6lBslG& zQdouyd$}jq_I6huJoAk%lQ~vo-vUN1RrMXCjPHvmBog;{u`eAHW&T(Reh9L< zhP8akt1Lg)La;Q=?e&eUuRQsHT(ug$Hh526a1g=2d{1{`2DB`!wBp5HNkOnVpXpzN zcYrrCSDCGe82RtrBC53EKnM!64N0(?wkMv`cX9))G-Luxz=77N1jE266pZi+=27E+ ztN~?xuDH9sJKys&D8K*`InGyJpXDs{+a5{bdarxYHSS}*?RkCDEZ^k=zFjp0bwI?z zVUe|{kB)$U&6 at vOGd#Gcy(6WgYNRnNI~5v(xH4im(j6IHF at AWq zb{Gj)7whC at mg+p*lnVA#q#B2dwwA+xLIbv!y+VhP`$FhWJh5cES(?VH8oIf3AD~pc z_u5qn+y2Jj694=u54v1L^3WoLZ{oMHH3Lp#6CSF! zjF1!^;{!=0Q`nbozZ?A&kaz3L#h9zOZBwUyJ3N$@*9Ow#7oG8#-d88OQd66IR(<^y zR>C`{9b>?Kqo;ynnjPlEad3E-4cBI2mQOFB&Bjjbh8MyCzf+`cj zXK%5OV#{HVF&CV4_X;p>e2b|Hbt#TBN<<8HvM+KStuB;go;T5LXf8?(uLcX!c>q|0 zV#e89=&2k#520T#ap!FG=ot^aA44^vzX(&WZJKBn at L)1|S>)%(hx1t`!>eAGWt*W@ zC`>QgjN0Bc?)uXtXL!Mi7(KQC0 z)vI>K;&zY$``~>xHa36u;cK%`b_qZc(53E64jGe!3kOph!07q6Y6Za8qWW at rRQfW+ zn>#RYE at 6Ud4k!UCRqE0hI9{}YdK at -wa)E5==916e;)6U9OTiS7faG)NowG at 4P-x?c z!Ojg~tDjunLFNVcu<1fz_tPEP)NiW~o}7v)1Y7^dO5a1g}}+(;X_i5nE6^ z{#U1V=4?p!Jcyz;1Cjt7`(Y-so9U~>-VT)&a~+ITYY$*p-6tKhqJHs-^O-=f7pWRs zdL2$HEFEtxfIUo2_R4HIU$ z-K~26I?fT#ih>aJRY&7 at ItUq~xE%jjP#Jzis4raKPB;g3K%nQ at 5#=Yi$%@0P2MM)U z*^qvJ&m`hz6Yte6UREGLOxJ0^{YoGgPUEs=aZOjBk9_NY2)OI~l9;T14Dk(kweKCu at q#RLL&Rt{LQVP({_)!THy!;5 at U#f3;Xm zwxQRrt{k>gp&M;)w~D@#!=2g6YrpYG=u?^wz)Dy$FfoX-v0(e_3%y&Y&(ZJ3W@>H+$kzF at z!85^_0VnD+91ve5 z6N-hi1dLPFu2$!0PaTym-?d3q_cm;=Ugaxqoruuw9>Zt9bqzJA0woDW^PPM6_Q;@5 zO$|||Z-56*o;4Ouhkde=TW-ZDZRD?bmDC#|5RP~q07 at e6T$ngn?feqeD=7hkE{mVH z3xa at Rx0|5yOAk0~7rFHBkqQP|e-$(w;7nz_tezPO|?F!H3hc<=%@YFSoG&Y`Ud?+y-|$XkWe65^O8 zH&XPZHZs}?#x*PMH4!h&i`Ew0E)#OkeSBkZ56xk$sa*%h&8EZ3f$53K-s2SXD@#1k zgc;R#K_Uknt9&aCUQo`-oxp9rNah6%K-nZgzO^_wM&uk^t9eperC$Y6Xc5jh01^|b z0k(t1L?zydXPzvsA`3VUJ<-lu`&0bXq*tgwdp2!IS!BW!qxE|=#D?Cm at _wcVEAyU- zGRnp%cmv8Clp}Z)G+p1-w0^?cLc8Q_tloC-zCvR{H43Y at j}DGvXgUs{bKPm#xaAe` z2 at y=Ap5dC{q|W!}@IDf~XG4HcMHh9d0V}$hw1~v}cls^W2C&NE{f5GiubblVkEV(p zMG_<1NucRRd5u}rGu2>5b+C><+is5z3LtijAiecSfG$~P2h)0=t*JHTM9bwuh2C)L zL(8eyyhZ=`S&3cV2#*AP58gv92Szs4vGpadM5-Z0fJJM|-9hOAG6Q*xo>l9c#4RwQ}NiDHWg-6QQd_~#knZqmYi{& z;F5iXb#B(VjmnpUNB+57)ogPeh5-p#t2C|dr^~XJs#W?Bx9`F0yM}Gl0f~OG?L}4R zV}385SUeu|m+mTExoo>kUJ?6q>~j)PUK;`u$*dstAM)_m?Mk~>s``3yc<~|H%$E;^ z_ATs=z7kT at i-v{~`5yzeAOC-5qWVfrJYcI2xl+SaMSPH|Qz8REB zO~8t`)X0+GDyHAsRf+dL4FR!mF|^0FvbFvMpSfJWi5z7qB=QDFVP9{Dt&Y&@X|n{P z93AJ{&3-tya|Uo#1T%zD>(5B?Zo9ws4{!k)i0PeNoU7jfA;_7760&linic4FHSFPD zynuJj at k8>i@;XaBU-BRy at B^^~Kjc~@B#@i{0JTssI!Pv%m3HHLM0fYcw0DR*sQNzO zp-CFR>@H?4K|iVi$15EaO#vsn53Io2a!MK-G4nDblX>Y`$%7TcliB;O{Gl>7iL+x5F=gDN&D8|9v at X z#4Zj at _SX0jc!X-WKNI%9QKA-g)j+}DBFfVZrtKdhBib`DF_l_adrMxecKMhd+S$bz zi+T57 at 9g;8LC1%eR|g0CST4!T9S`lq%YlS-$TpwjxTD2v3kPlOW)!$&8ql@~7UUK; zinnhdFDg>kLRA`O7yhW#yoWE`9CdZ1)8J*6U#+4Pe*ibXV;!Lg0f!&W-Hq;1;B$hE zU)cYB&-g!-t`P>JKmOAx`BH- at 6%FkT#eX{F^yvc&`u~CLf1Lf$A%obO4_RifQc0a z4m3zG4{f17nPUK=@G-im55v{?_hSdN)yUw!3v-&a(5FP`jZdj2@?Q1$ET_)bM)aJG z1$w~GWL?nGbC#vqX59E1I~~=@o~`-jO0Bc(ai5yCRI>qKPe{Hky=N~rjmNAO3T^f< z%3WLme=(79dd-GrPLt2yMn47tAZvPpj%=~ zRd8^aAuDH*fJJzWAp7iH^Y8ASFeidMnnzyh-)>IIL|lz-{vgD;s0g_L?eL~%wSG~O zyj0cRoX4)Ljb!v>*Zp5PsAp(-UAvhHqrH^fK4NtK8Z&KLTiEHQo8fBCx)+4=(})M7 zMdJRV6%x|krwRqFt1ZvSXhPO!k1h^M%hJ45*I)sO3HJhnuQ_GDs||g|rF0ObeBzL! z*4^$DDl$h1hhn at b^$OMb9mrc2HUC;{@`N}vr<|tQSYh1^lEMnc{i!AYT1nS}Th#`0 zK(g(ImCMu4Hr4ve)y$L0X1yrM;bH1Bk`eil-{+gGWEs=qgzS5Q*B<=8*SmqU0y+L` z=BI$-!gqA1Yu83p;?LEoRbQ(!vIuPnu8EeCOFYT_xsUi0i>)tR1nUh~!f!0cNmBXd zA(%6csT!`gKX at x+p_j`9`tq)W)bo*58|Uyf3A_yagpZTb-ijp+444)NiV} zN0&fD0DYgmAc at 08Eg+uI8H>O3>@8^eV3U*mG4L(B_*Qdz(3-*pfu_Cjgv)C~4YNrE z`X at mIr5=fX*O>S^#ZLfHnZAoHT8Kg(1)N(@Xg#!&PVk+=S*D`lY2;%cZ`N$E5P+R} zOUftVX*`y*>Kf?#GO5$(<6#F$z}4=M%7Xm~VLh2d$TH!=YoBm~Pj>za?|rdCi7q2v z5rmMmsZa at n}*!2gp}t|O9mrTqPCaT=Ax2YvG!y{?ix0pMB&aB zV+iY1mMc>e$o6^vvNt~KV_%4^qdeV~9Q-pmFbh;zo4Z~YJND_-kV)Be4>Tw8mhw>BH#IS;} zA9++#DiCebXtK~MzpXrmeb-ygi5Mt*+QNf7a))G7PP{AIwbYBFGZuT-UzBiSf%D1t zRc@)=B&2DDkSMQ^RPUo5gqHrW>|l~e%5gOD-rc#z=~ZaifC)roJmSP(MiHF%O;dtw zz}cE;%OOH;|GL6T?5TJe;)dMp4_uPHVWTiF$9~|%A(~qz-_VuiYU5QG4O(k7=v(sQ z^{6X?AJ2K@`H0)cG`)e;+b4J4;D+m6%6U%TD<$W+`*;`k{CAxpV1bIWo;8%x8nxGt zn6v$Z=*&c1>$OsHydwz2?2s}&D#p-&;<>1#I7n6MU6IHI1_GmE0vtv>*wk zNOC-fM-xcCfnmzl&Fb5|x>nCF%~T0s7&`kCp#cz9!)hDia3AV{-!GZ8S;%+Oc(Sr2 zX!w27CcP{ZPfI0!F8*iPEpa7)qKO4Bp2=sKQ%IIESSA1`%((i`Q^-c9&a^H at 9iC9u z6c5neAvnw`%|fxQ%bk1#bW1m}DL2PSMIv!IqWo*=_yFg()Uxg}s8*E(^PYPI)4R%{qGbqHBWPCJ$A0836CL^EuB&&oqJ*<_~Z5Od-#M^XDf3(7yvl_lxlx2URB45kv_^5Wqa#p}@ zJNVUObPqb})hC#y0urQkNBYzt87)Q*2L?Aq4UP#b5+noEy0QnScm4J34-RlDAFa^- z#MbDb at U*H(*7H#C=jWfcMx*Fy0}at*^1 zxIE1AZJOVbQOM))ZnOJiPVp>Ic!pAmrZ}h!{DF at 5U=@rVQ4eO}5N;R6DzffSPX~|) z4ZEC<{C2i1yD8pnI$ci>kaEA$_##O(;Lz(6=K$&GEWl-KCUnrFu=YzPnUx2 at vInJq zjLGzh^m?fh)hw>?Ye=-1KKkRBk~CnWn^-j$y{wl0Y=$wz)Hy3!@ub)l(-oK9Ad;2@ zrQ?+&IG76S`|v&IPfhbSx4d$)(3`*}1f_9xKrUQJK*4Bly0PufUvrM^oBzx8Fc9_= zFEXVN$z#;TcQ4oMx`pej_wz+R_NPP4no%W4^fp$&d(M`sW(0M0ai|h!8dzIH4XFF+%`n zSM%t!Z&S#UkZJe~|ASQDuxE52~_H2 zF3wA;pp>fRR#Qja*P_rtyS;e>)1z*+i{DD9yHaV?;D z{di84MrycRODT&J^L+l~bB$o{S$l1tV1j+pHhQVWj-tA&ItM<{U8Nw662%naZfO{( zoICVxXHlnn{E%F<^&Kd at GxsxM$XndTKVdU&_t6>s848C-;fM3TO@=j9XEzz)FJseoZh~`YKe6 zaHAbSi_olar;Hb at ch$fY`q*xk71g|FA`yWdff&+)HkwjIU1im?Iu%8LB)jGK7- at Tp z at Y+q8@u6>#y);9WUW8+ at vOU8bTJg?AR-4rk^>yG2IuDQZ?qe13sQ6$d7iq&9l@@ED zil- at 0+unJPxYt#X{8PC>f5+alSI?CG5EHPSsNv9t3JqFFAfQrI#k|b~6;}6Fre&ej9}trwJE6ZQ7*_Xv=c?M5V$N9MO{aJiPZMG7)r- z;@p%usal(x9F>+R%e#TL*Xn1D;05|Wx;z!Nj-g`gtpK{%w(#oNhu(nN-v;u`&e`#i zO0xvsmUS`VBC1)Ml{Vr>(SbjViQHZbY;PUQ9wP5s#^Fb;M*a3Q`>D{S^*;AqiOZ zp at p%kIk1s)T=qZ>YrGFvv)`^A!jhSD)LJjiN7J|pUdgMaxBPsngeeWNTe;W7l?e0V zpyPVKqbV&Xl3G+YWixZAdvvYv93|4DPA zN>$q#D_N$}ny0nZa*$UiLbi z>!OE*s>J0OK(6GzJW^9m?9`xcbW at nq6f{qJJ?5muQraJy;Be?No{n2AVM=E+ze2A}uI^ow5s$wROH;^V|!Fm=o z9SI at mX6P?=y)hM)9(ysYL-Bb&UpS~ilo9X40PLUUq3+=l$4d!OdO?D+GDNz9i*0C0 z3ab=lM#p>^P67NcjYUxFZIzIvcl^$K&*n%4-u>~2 at CjQo!TTwf53?;J42!>v^S=&j zYb;tt2&2;1s5K7Kj5GanDNZk1c^avFOE!Wj(BKX4gc&V5Ux$J_NvoPH6ap+SGO3nV zF=<*mTxejQq9wA0y|NU1?o$iqk~2yeFNNB z%)06pC&SDN0FOfwCXkw`ug^)N6c z#a~{;8xrL;tNF}dHk$P>-82>&gd}wP#ymts^Ug+}GBJ2}v}|U?f<8<;Xpp5LpOJWg zI;Q9OoV`-?xWG1H4VHW8hs6!kMoUt8Ip{|)rirORIGRUv#Hc0prQ~om2j5mIH2y;3xFm|N<&kHWb7<}KF<;f+n0bZ>K zJb%WbUu`^}T~`+Z9~Ii3q|SWNNw_esiQkr8vRTTq)%lIRxctPAxAIhIQ^uTnUB$JuplYsb(70l?BIgQ%BZ_OIHsNLTxFrv;d_}DVA$=U=gm`G zAtDe%Y+CW6f?Iiy@~VgOGjZcgme7J^9@=}?0)gn*=J{X6jxYF1wBZbMx%(=|9iQ}) z_9LOW<%a75PS*uD1bD4onrIRXUP0H%1FqmNZ+zp;uV-Rfk2fTjjm3|=NZ zK{kP_g6-F)^wX9r$S9Kweoeii1qggj|K^0{x$pJKm_GV-f>Z)*IZ~8>-&S}ry!lH( zo2SV>?a{ooCfF zgwX#nGZFr=0>=+n+hpQBpyp1`1mhf6S`@&8Q;01#H)_kJOqusVhWQE`5ALn*OhWe@ z{76CjJgj{P?+R<6c)#XkbVV~j!ogN3tD8b~ySm#)PxIClZsdJ3mO8G^g=*ydeZ6qj z^7JxZjjw4;Nm=W3$nmps21AY;4dHnjZH$TT(xZCY&~_dl&s*BfZ at 9Kn*chc1lYFOE zBy at sEwZM!NipHKFv2VrvjuS5cbeO`PhFIZ-doPo5?@Ah8vD1xLsZ=&uWiTW at _W!>9 z`t3 at T^uEK=C-}BtGz4r+n4VCT at hx5 z#RA&3W6ragMfIPE8GE0JBl!9J5|;!Sev*Bg(n9P{Uap4AhK6ZA+U{bKY&J}6XM8Gy zrZfiXSPk$luv&WzaZvArydQFOV at cFe!aN;ouuUYyYg`H|y4*U9*;Xj6WCS=h&v at Q#Va(@~ zv4%Ly^l9fzNYtgvxN`Y!yyY#P(u?ma5iD|d)sfW?b#jKk9i>-2*@T<2pxuVH6FfhC z at im3=_*8&ZkVJ{=`f5~vj3>I8zE)FfC(eP6-Fam8UQel`5^Ff-lpr~Lcm(iF5=EJ9 zX`T8A9m*tF4}`-zOyq%N?=qZXNuK at O^IRDWD3Q%<$mtlBt-!GO*l|41JsjyxD?roN z>npw$eqkh{kI}S at vRJ=|Ol$@5EN}}lKz_ZPO}xlI5ZSkM6lKo9yXR42=n+>^Ys6qO z#_bmXUndGSihy2{zdhm+V at MjJy*bwRl?FqUIWqmOfKGw7K)P%^OKSW=2IEsO1hsh3 zf}_*IY35LFV{Y!l%U==y9q}c++n%F^UX$SGXfK+&Wd_IWquCx&wa?F^e z at huUdJFSX1aR^XKsuI^tD!axxT9P5xT#Z+Ub`h$6ctm^~8K7)?m2VeO?9Dxafy`<>n24M#AjWgb at Q60?Mu81 zS^tBugrW&7_iDMT^D`tN+lX4=q5haYJS#yEVNaFmj>$90L*~GLb7#k_H}o8C9d0DL zWL34&4x?WRZqX3Q-k#z)T8&Sve|k+9#Uzv$!@&&6KkB0EdiGM2tVO3@#(I%nq|qQnuFRp-8xJuh-Zr?gQapht1@$J7Fw z{Ip>hB|(8mxB2=Nhl$fe^!d9{^C}Nfbn8}Tt_gTpHv!FNd%e_4r19&P at Fjmnh(!Op zVh_+qzD%Gly_LUsyvAF_b3)nFu&R6RGO1nuBhY;pF6PV%?Y%%VhJZ~&x-ZHi;plyr z;^or4&htygYOQH1S=j-Ar=>55`ZDT9kS2SLXrF=!@c>@#$xNJn#)>298Az**NpIM&ex0hlk9CSp0xM5u7_TJ)4C za%3gEug|2_%cBCE?IzPA{H7;<*EU4aH;%4GANf!_CjpFb)!?H5Z91E75$D}xEximH z*&xH)@>q&|TWs}lPuZMI9!6chUF=SI6$n#F zjzNj at 4~3tc8<{`;e*b_}6mg~;z}Q+f;Dg|sFzqez=$!dQtE_l#_HQrC=kTR}jm&kn zL$4#Z3a;ann{o1;ioZJL_6)4X_qoUBc09aTC7W7VoDFa1jd_Yg2LsNoGluuMGQawz zkTlXI^>QkJJCEW+1o3x$-5+zkE>@N7KRz at 6j8$T8?Sg%Tx+8eTHx_ou!Wpy29{Q)2 zcE*ckB2xX<#8qI5feg)rZGT{fZ(Wnpg%rNvqQ1YKE}dh9k0xmk9x?TLP?(<^A%(|U zv zj8EIki123f@)Ao?Zs|J$wfI_-ea957AqSy8ADE6JS at EWSgwH!mxw at RhL+gx}M+5jO zycFVgVUD{I8e|wP#3{0Er#I-~0uK#J-b?y36ARsHMu)l)=R~w5bhZq|9bqskZ)kCz zbIGQ*VSkuivH at vA1}n<8_ckx+jBq!I4nHfbVu2<;N0Vs%EF3c>lY^XPh--ccTtK#_*ZZ_KeH zT9jlo8TB at Pzf3 z>e-*xc2E0B>~qkBCArF53HQ7w#Ds+!S~eH=pbJwK^JcC3qCNcIc?U#}fbxx`v^>_A zHM550F$%pqI4-kLTpv3o3E#XZ7cHH*|&GnvSMToR`wSn->*6|EY_)#feAUjK4QD08aQS?tak z at TY}Aqp8|=Du_I~Dg6aG5e?Ux+SWBC+KR5|@@J-BnUKz?c~M^my#30O$#5dEsD3Tz zv!jHx77D!3DvPb0$jPj$+Os7x1ROyj at 93o1TWTheh)ZFMb57n{CZlM&;}uyC(RVgD zEU#41_n^Pj*=t}R^H-%}8W9~?R&;Jg2YVfHUdidjya*o>&~tu9o!wJ#jgcd^64W?d z{#s8R&=Jhbbh|u9ecX(#;BIeUNK9Es6Dj;D2iH$}cwmd-O|34`6XJq;(wLARQ$%l* zrij159;J$KwUl~=nX_Jn8q_;diXPy3thW=i&@IfQtOr3zrJ@`~^E!F=CQB3=TTCW{d{IlilJjho zv}w+|kwOiw!EML<^Vd_ORIw at jQ-Bo||Hp<$6%{_Y5L(lKd7%PoYLXTrhRbE{a{VK$ zvnr`n>!2?sjYBBtZw-0-YNx>kZ_yLYL0XzmU5`$tR@~J(s||fdFLV9Z-dxvy7NEw7 zwEz^_)8(VKDbp&_taF7L8ZrUOrjsu;awnPD={*csT;AgcChzy98gabd-%U%ow~a_S z^b7B~`F$~L^u$7$i{i;hslMWL+d>jDDxPH0pUHv&?+u8BeRUGJglh6TlFxTz$@atk zVtCbFNA31;+w7Z=UVr=YS}+l+2U*;yRaG*7*zFk zH=(f$NH=7rss|HPFiS7Thn$0HoR(bws56p}rKB=TQ6#w{zycCFI$HsHSPyoV#fl0m z_o%&BPVYjTLm4v1anO&<8)#ZsA9aX_LpsNn&Z4bMPk9>2Xy9L6cXwgXAXqsM&*icL zWAduLUU;Z0S+U!*7si=O9tjWj9lK%g>o-i)1z5FG;WTpX))#$KEz;5RS=JtDcpW3` zW#KE5T}VECF!gjg1&$b0l+jjRr2>*`h_0n>89PjDqPUkW9Y6BJdNo-8C1PY^OMZKw z@(jnBqKV)V&Rre+dyT7Hnqc`n^l66jwi7H2y_QJQ1huTIU+5Oa(11=tTCyQdi8C3c z at VRdM;Ee@#ONZzS-$kE at z~ZqypUTYF2rFAHo0{#pJM^8U9m_5e=r8za`p=O*?>xS4 zZ+tnMtaw|fq$B`!&bJq1o3AhDkYppf$$~lDLev}nb2>f#5~4kX-V{|a{WWkGpO{y( z2QI?@gXOFPpsx5VU6YSL65sm3!lJ%W!^IWzeTcqUc!n-Zkt7`mB~|IUsmK567^4}r*lc&dWd?5&^A+egrtb0~_5BeC*i zCuYz1Z|ub7V9t-~P6`-reBqfB_4rEu0?B4)bw7^UQR*UCX7c^uiAg9L}hEDTeWw9fo_XVseSm1c7vs<(CYIc}i z3Ho{yz7u7nB|9?`rTkC*`jsfvlf}34xC65jp+IUkxr z5{(OZfb{iYejW5M+Cqm=+`z>=kWaW8s-AJAJoyrNQ}I zp9SHIdf4*$TL;9y0U$)eJ)o?BChw=S=rq02OoAZc{wnwqKK9vky{Piodi4U%7=do<3=10TF0qXUs zk6JATovV%0F&o*^0~P}+q3tU(8Irrur9^` zIW`$0 at vN5{Ah1m?*JIcDghi3?_3{^|#|BPd7>^`L#V4`lbDgLlvXr>H5Qxc`58y zWYIWIoV8l&Mj8>g#E7#Zz;Meuk&GMd*x`Y+{d>bStsFz2ezY;xx3QTbHv+yT2}`>6hy{Gcw3p6mZ2lT4{R?TN8&7(aiEK9N zdRE at c$FXDgqW9c_4gmEf0edD|z%sez5{X}rv`V~8{QIgbs#8kqN3lzo1M zH>6W-G=EwR1MBShMMuksS>rP3C)r8N%9Y|u3~x|}_3$SjeP$|1NLhgdcFH1Br}*0X zVc9mubHQ+Aj;@V8maX<%JspD7WCk8-0R>v1J3khLBmlm?bRfNzx#wt~@6-JLbbLKy z*;7!Q=7dYF=No;z(S7mNMY&dqC+MEwi&-GvfL+<>m}Ja*&TL(mhj;UQ&R}R`m*hvXe;U z5c`EwulGcN+EIeb*Kz+M!6!Xq8%E4cbrh1kef~B<-5b|UtC7Bl)JF+jf$x4fbXCFy zkthcL80?Uu1;+G|T?HT2rFr#!-+b;+U@!lLH1Iyg4g4cv`q`r}5L)|W9RfB*CQMqUzjRw5L2H>vFQc!(2Yy(2_pcF~6l)!z3< zTG8k-TelY+8#=cka=S?Y=GCUH&)k+a+D+9r`nu{T0V+FHw1;($?t!jm3VT(LrCw~r zc}|BlMtEb&0XyO01peb}b at QV#1pTc>P5Bk at _P&{lNZ9;=;K-swmY at ob2bq}Q z9rnhSs^{NEzL=tzth2Ue>|M{ebmynzhkeY at Zq@1Avul*_Nce^p?~$G8Z$Ew+JolQr zC2PBC=Gh-B9=dPB83e;nz->0u+hN_#^YrS#|M!z*At>zS?B`iNtlwd1XuPC$@AW+O zR8>SRT%0(~EM3g4IDMU5|M5VmIKbD{%)-ISliu9Q#?D!S;iRpLf!@wifmS$=}^d+h6Vd!(L|=B9;sQ$*1DJq7MR`tUS%=eVrVgJw$ya82%ww^dbFMHWvf^ zKS(?sBp9UsQb at 0-szER7;%-IH&&k7K!Oh1{&o9WyE5s`zB*;#$ZRSb;&diyfSBRdM zoBQE|SCofGl%I$G?}I_|=|f7~-O^fAOHSc$oe#ex7;HT~T}8RLe0+R3efT(C+-MPi} zTlu)SJ9yB`YV(Qz#reMw{YUG6_^ss3Jgp=j at DS$U7U19(e9t2+$|ESs&1>*q`2R`t zzp<;jSlU_p{r|BGi}LaP&Hi7A{$>~F`U{Bv0?a>9|Eo^_TmJtIFiVSn{Di`)rI4|NVIF{q(od*6xj+J-G1i4#AOX-A>q0J&0BDSLAs0vhG{(A+3nTy}W at B9yWke}PYA*Y~ z`08w~d_jqpK*Aap*tjbX)p2I5^7tWUemT{TGxO3#-8=(fYsA!j)A&OcRaYd6WGv4o7{ zgfQ-w1&L_Uw8V(JshG61ex at xXOCr^vWEy_^KFnSZ$X#A8B0uk}Yr2$CNe$*y8A*BS zyf$M&{qMwa-GTCMmu+9`Q)y!A^l1tCk&%FvkZ@$a&sZruYmuonxXWOw~BuAim&qjlxr zL~DB|Yvf)k;Uc3((ZtQu%kLLW*fIHR at v~;WOYvq?Y!WTJSdbVG7wVRUJ4ZXi@?ZDjy8FEKJNFgViXWaIz<1BOXN zK~y-6m6T0PTvZgufA_ulf?*gKgixlXg;XiEFc{NV8G~9Xi6)I}H%(|4#)WZFjnTxF zNsZBkUHZ|Gn3yh2(A0%7rm;g}Td?J$v=j!U!>gTn2=n=7-n{p&ivcnMP0C4LZr-^$ z_xC^N+nR_&16$U=xMF>ep-kDfXb zx)zDPhFTLqT4fx|MB3%bCnZ*Xo$KSbh_4oDu5-`MCktQCB at 4g*I{WV=fNQ&g&#qKN zee}k$t&BE+mydKG#S?77u}n}LgrXuH8-xPV#^rAy($UQQ)G{Ye^mV_q{?AtrQfW?h zg+5)-jSD+q#j?F?8Er=%2y{Nbk+K4cf>2b1qJm?=hN#-s!|1tryp8+thQb`}aA>|0 z`($y|=vQQwZNfHzRetGF6>KAm5TXJR0)$do6<0+7P z5S5-8k11WXm2F9=_Y^C?T|)Kxar=X)z5tG8Qd~{2uEn{X$P(EfplnMr at d@(TG|8+< zYrTh}&-2oeY_m%(sSH1IVPT3p^c16i7++=O$ zDq8$5sazSKTOr)wWpE%$Ub{zsX9JBrgXETO5uduwjivOD!1*U0S7)Q)bML&`@m<&1 zi at 0j)u}uS6E at 2rN%#2%W7?P70fzhAUIt!&u`~GLjFv}ANqfl0 n%)|WWz%L_X+ST3S4L!ksH^aopM6UnZ00000NkvXXu0mjfxwh=} diff --git a/src/public/images/bg-image.png b/src/public/images/bg-image.png deleted file mode 100644 index 782060e0d0f47b405d7dc1bd01e6817d8a09847f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 345 zcmeAS at N?(olHy`uVBq!ia0vp^tPBi{4>;I>tlWvq6Mz&;v6E*A2N2Y7q;vrJoCO|{ z#X$AfL734=V|E2lP_o1|q9iy!t)x7$D3zhSyj(9cFS|H7u^?41zbJk7I~ysWqHCTm zjv*P1Z)Z3PH7M{fcOU*<+q3_pc~yJWglX42Y|^GonHw=<+FuL(%z0}?U0ha)xQ3Yg zEnb{qvMT5oYnsH&?JI9Me?HUNBNU~4-r&TOmwT2SGyXaKVo%zK7?mwMC!91sExU`; zCf4u7&(O!FO}g(#pmzXy#n_&OyK at P{<=p={=icA^x3~MX`;)}?$}h@<<2dq+eMtA0 zdjG`p98Hp}R$4dhBbqksrqt0LNlD8R$!~WY-KbMfIHJ{>RS^Gt{3HrBvmn0NsK^zk zL{DnZ&s}g>{%;np0l zW?O<^S3j~(y at DwEjfP`zINcdGx|ZUwGE2-ev|7ofx at WtGw%sW9k6*62v~9cfmQXs# zyUkBJ89 zdC3Pc2Bt^dKhsqFU%*Ub$jdo(8@<1tI_vqq`6nhyX~8?m}E30w6KE3vq!6fW+u7#04S% z5~I5i7l;5zjP62QAOaxqjqZw#u6j_5-S23#iyYk_q(s8OU@#O6heF|Kn0 at DF!{OOE zJ{Fsc#rQbi8*%>5LVV#4pG+<;CX;KctE+3Hjrm2mNF*}P&o9U0%PUKXrIpd at f6ls> zBr!|Mk=ymtIdS$$WrZ$`88V{sNet^hp2! diff --git a/src/public/images/bg_menu_big.jpg b/src/public/images/bg_menu_big.jpg deleted file mode 100644 index 10597aa856e49a05b075f9f07ca247ca5144ca84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13136 zcmeI3&2AD=6vyurN^zhq6IyNBnoOo!VLteh3D6iCv`sL^HnDN#bmo>KFf$pZLi-3l zk}mARM{rR!Ci(c3JxU at slJrt+MngS6Aw8 zm7X-8oqKfu{P}@--ZG1pv|Zs#eZAjtJJdJCey44B^?q3z7T4K62+NWo0d|KMmAsx)U(e)^L^smwj at 3LqyDhz-=W^rp8PPbs zBnKd7zznGece)Y(8!*e9 at N!SR_VBe>rcB$kLv6pyoTtjym|3QN?06l+uQWSGgUWAR z+9=7>=$!`~9h>=r`BI)3^XlxAcllp7Q}F+#{HQ240l`IFhzmpjBt~~3E)W5b7~O at q zKmiP2q%3q$}UMt31D5CM=F-G#V71VCbR7vcgD0Ey9Ehzmpj zBt~~3E)W5b7~O at qKmhpPGP$|2v9UQlSWtvpSXfw$FRmpLYwN4R>iYEQKkfz> zM2M0t!iPA4%n4jb;0B+`{oy1FnO)&1i$6%P2^VfQOp=_y9<1DmGD#2>u4{wnHxdtV ftW!uJ+vLl;xr_G~hl$JB+y?h%_ebc%^5E+q1xDSnF3HS=P-xW>lbv?K~`iMx>(pYpm2rxu?Tik3r#bW%weaw;vPXOn71 z&1Pnw6jpRsIHuPGH6y69%pR(yC|X((x*-kxE+5 zx};>YSxHtURZTEOqP|^o^=6`0Kh!C5zs@|Z8&1V`D^^YL>guc388#?n9NMs)jk-`=N##8LL!y4yemtEFZ%Rqdt^h`Q-H$pbL}rcK>D(*yJW z2h22jyzDd1X8W_4hD0}MmDb!kbDkm%F*6Nq&2p-`Tc}j^bt=7R)AgLxpMB^CJKJWy zV7`=k#=O7x-nV=tgFg62Qod6Zn}FaVF2n^Q01~6S5EqC5NQ~}6Tp$71tI_vqq`6nhyX~8?m}E30w6KE z3vq!6fW+u7#04S%5~I5i7l;5zjP62QAOavUx(jiE2!O=sF2n^Q01~6S5EqC5NQ~}6 zTp$7<@k8Ae?*HmRYwZ7y2K$ktb&C{9C=dt)1EF9r6b`XFvNsgk8;OpLL`FuUe6$^W zbTr1tMx*ig{{8Xz)a2ykl-LWe2)8E`ibkRbVzC1gfIZvMOYaO? zR|vm{lu6jn at x;e-ex7SxB@=`res&Fn&mZ7|kFmAGF~a!*!QkN9KF&W at 4)XEw<>Tkh zzx at kS9pqRAb`J#S4+eZ*ah}clhKlpt*uMC3>n4f#*%I&P$sGCn at y`xzrM at k_VgB{a z<<-ns?#A at Bk diff --git a/src/public/images/close.png b/src/public/images/close.png deleted file mode 100644 index d7173ba6ba7622549815a6d217cd697b0d5386ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1219 zcmV;!1U&nRP)%cI~!2I~W?>BrSyl2dRGC%1Dem)F>xzLz%p$Q!fD3N_pYELP>qqVw! z at 7}#X|9e;7-CVo&g}i?KYAFoEg=8{0l}si{CWnc~6KJh*U6*RLN~K(;SS$Hwq4_G2NEFhUG_h!mrrV_1bZNC(fFT;~Cy|IVJUoo+y1aPtf^xaE zC8BQJy?eI^paH&IT9Tuq`pVeYSix}|yjF{HrGo3a_M_2%_i^ZjQJYL9TGSq4{+MRYcbop0BKm-9qgj%Ia%WHA! zgHw2|R-srd{sDZe7Z(>N1K2Q~!cwUejYb1FhA2U#yQb4=noXA=@Bza} za)jbRF>`);`X?2JVLm=IG!>0TX}8)4!if`UmY0_)6bdL2L at 7iB5yh3l6|P^uPAYW* zQHnQjjy~~QQKAqf7=%PT&cVTfwg4v*iO}*|hzJTW2;<{fZr)r6;Nr!L0LQR3vf1o$ z3A!^30{Z%*V2on{7!0BWWfVq2OsFv!ve|KL+wMuWZJTWNWKX_`phTgR5QYJw6qeR{ z-|zTmlu{TIf>EFh0$jel$l0 at JdGh250JF2RM59rDxN`>)>DF8Xtu0*FMQOEfiO8Pk zwayF-#0ZUs&>&)1SXk)6Zr%F67uD?SET1hdvc0|CJrhO5j!&NN~MbHx{Qx!0eJfWUcP!stUt!cND>et5gR|~u>aTobIYRQ^`~J%9+qWMm0O#byir4bCYKMni zb4t*vYfz3Yc8yBUtYuk5A`wcZ63s?q%W<5QUblJp at FCOF)4#Rbtwg)snXxR3h;8 at a za12u2sH}*E=Xq2r6&m&W7Q&6y)$i&(Ai%R{&l>rB{z0``t=H at Ibi32ZU<@chYmJED z`#zrMaacQ~R;xY_{BXsYaF$nBSL^TX*l)+xt5+ujKgb)*oH60KFf`6_JKI-E?TN6X hwRL}EW8;5cz(1RC%yMzy<&*#b002ovPDHLkV1hWsJum_)@-4E~X_Bma3 zZ`Hs4UETfR-ahr~aCuoVIB0BW5D*YJ3GrWwe{1-^JK_(Bza at EsEZ5)ayQ7eV@{hlp z*AL^czu%$k#5Ej2Kwyyn?VxiTKJR}UQJqB8orE1s44f=%Z3vYutW7}J7=AJ^a#WHW z{mY2^uV2a5)XCMr!30Fm*w)a5P}IV~#MRaT;7BN}#FDZk3iday$j(7k%`M|%u{So5 z5f)rtE04ruSDKr(9{hYpitC3x`kc_fL>K#dH|g5$)61PXKr4E0`N?~&$wcGO-R5tC zzuWcIeb|I92H$>3PC>|~$JGtH{{-cTubJM3+{?#1Izv>%8 zJo&dt+!`Px`noyx`Sj|jc04Za2zkK9|y1QzIOI_Q`t{)^i`Ga&E3fy_h0tVp`|R)9X;vYJev_!lP@$b zZuSe|RdlXCZmdE1{8v{9d1pzyR|r!K+YWCa4q?Z(o7{Y#4jY%f{GRRoa=@YJq2&}z z+sGy+W*h)rg93kZdkt-croH#~B?ZpXC^r$PT;CC)Z z$GfYU&2l;CEF3*2vmLz4#pw__6+)hN;@zvm=hrNFkFxF%Z#u6V1aqAmKR-?%Pwd8I z;XUlGj5qP?B7~FP?0WDW`fiOv^L1zssFKDqT&HMhWsfF?thmhJ@!IU>LINk@;qec# zmwBf2=h^wNvv<}PQn2Ptkm|a8f`aa0L6S#WG(|lsMk?v}m*S4q&l0o2xunLTBNfn~ z+6*G`?IK-3v!w*`;J$ny8aC}KeD>Ap7- at wd$20wgU9tF_I#IKGWOj^-uIfxlglt3Pmz#roOSoeI^#*Qx7$D8hAEECr zpz=D$88({%usjkpuoU?651rwy+ at r)`3dqJ4 at y?}-zjOm;d56dAC?p3+`)p;(A`;G6 zMnrL0%uX%Ord~6V at y$I+AV|y7PQ at R?-m5_-pAustwc#eQpeDl~gUDl;n(YZk$u)SR zeryS-lZe|)&?4y}YM3U6F?@_6ZpmgM|M)RsTpEb}~CLE!bvBX9$XWd77{uP8vbRbp~25O&AYSMH at 3 z>aaK1t(3<++u0+osC6;+>CR?wK1Qjd>Vk`UJWgcjXax4 zM3U-LhQNw2&mvQ%jprRRqo#&Y8QhD)inW7?P464{#SDWAMUi6gWJ_gT9r}+>k at kGg zuTPVQ&n*rV$Ns9Ai)buRoc2(SAagcVUf4^#BcQ at O?f*97qd3pFp+ujBcRFzu_BFRt zHh^{^TOCQf9$=TK!lIoRJ%>Uji3ffDr}sO<mg{LqFTrPp0pXY7k?tTSsaV2JP zw0^9%H6x?;fYHuC{=q}XQ*kQz5 zOrcH11aI-pvt;C}ho&e-y95Cv6lwgxQ6t7bn9?K=^Wqk7uCp5jJ4r+ie}q!#d*4 at o z%04%z+Ls#rR$;=UwJl;<)~C*VAJdVw=CE`8sV@&c at oZ)U_u?OGcn(k1a~}nnwuz)w zSSwr}+n009%N!4g(o!ID6CCfUtzG%Q9)JdPb^`t=e(KDBVBCqx4{k!<{=W+*cgR6o=oW77q2R`3;tE|=R4P)x+eAxERPgAI^;Nf%9U`|6g{UE zsaMxD4*^Crsx0l`wZ%8#NX#AMXwa2X5}QP{v#?m^o+3~x(K_f5Q*siBvPr?rWkoOR zF{5A7_Q`H3gl(`(etX!A`V^pGE`9!)-|M=g^j>$R$^z at 9ZZMGaPaj(4R<9xuj|g$9 zl-PoQ%vpc;F)IV_M$LBQ*w6k$Tkh`f~;{zM8~HLMF}OS9N6H~MlzHY!L(dvOs!Ik at e8*s$D&-majGibeEu z;Z%Arh$6Z>!Sr}vD;w?BwEP|Vm>0_`=GT7`rF4H*cC6Mzbr&@J!4b{vU?(ltrms-K z2j(<$v at qdIGNW2hV7#+)4>E>uO-ECebOT$Z3$kBmBynPYyE=PByj2|l7lXc#W3x>d zG2vSl1In}>T(5ThhUFzJjK|wQCm6M8*reHR5u5_W)(t87$@|XGW^*f>$SrImRTa)z zhOb_tuYX#ONtaWSP5foz45OLlX3`Vo5d-b)jVQ;{A`sk}b<&UG&C)q%#WMQ3f6s0x z5QP~dI3#~mWaiMM0X;+NhrsE_Fp`&glPeJ?XdxiX;6XCE7V%-(2?7t#q?$0ad`J{; zQEDJT7I%~KVwm&C5N%iLi#E4OrbvdAXmMEGc4h=#*KXt`h^l# z857Crio16=cBD$iZJ1WH!m3B4C^q3~OZqs3-vY5^Iij(y`y9+~$hCc}xB!N?^}bK@ zcj6nevK$1_p!hm at opQzoo@9gLVkTS_zZtc$+_ at 41;cn*&Y@%R`zJ^xJx!GKjvrfLN zuGbtWf1^Os!OP$Irwwzg5{)iQ50!x3HCk1pX0I8ZN0kCWM^g2^2ygpk3{yQw78||2 zl;mEcAZ#6(Npw at Uh01V3`*+k)V9RyU7dT_oNDeK!Ty at ojl3+e#HUpApIU@|r zyKte~?h8HtmdTM3rG!>(T*3Lhew z)u7nE4^Dn-I#OV!@1Q^$&1ptA!YT0JkNRN7+!L(f6B>AonTb8Wrpa|??xc-PVZB=b z`dvXGi1 at zG)FmejoPZfm2fWx5CZh*|hmhr{*>E5MTGaL=)^CD3xiws|SDgh7OA{yf zT+phwBVS?;(DfBri`Q<&F>Qsz3dgi787 zVay<7kP)NVFwWkJyh^?|X?USdPezkqDCaiV9f5(6FlN=h%D4N$qou!;mv-OY%afK`9NW zD03EZ2$_g_1J_c~IPvNtKMB)o=nrE1>r|gl!B1kD8=j6f z_NJ20Y#fUH!_rIyKwBdQNaw=R_7a9zeR4y%raSx6^T$C>m~D=kaogTV2RD2|ZBCw6 z8iifl!b9EJPX=qh-B=UM7{&ii=y1sLEYyv)QYGcU9U$|7K1dzdLsFvuqZUq-Eysi* z_nd*C?2WRQ-9ut{pXYgv>&L%gluFS16o`M>GiRbzk#f&2r(HKd*7XIg>lqB3IJm2| zG$o?n(PQV_q22{h(^EFRrJgc0Yh~vrqZRHadR!dVxHzV{l+W2jyR|=nra~>C?~&UU zE_tFh$DU?6{_#9*JPvC-F0q)Urt at I94Cg@iYm%O;4oBYmzPsw)+vq`eRF~wKo>V at M zp#h^E`{77+9rv2|`fp^Cq1w1*T7zUfy;V8VWVQw^YouG4UIza(r(Sg{&yu$8yr#2e zxtQoaX>GLfKt9gyyZh9ON9Cen<)Wo#xh%jLD%K)0)I4$U8 zWCLiHN7Zj=MLG`t{OnxjlGf#BXi=>`AYO7%DAPwUWJ<#_$`_Woi3-^naBD}zd3kjo zeeeiwa4W!w#-s5!Z#F9S;Vjj&IRzp*W=+Y44qqU z1lKvUYSN}jIhUt+a%|b at Wdofvj7wOAx7$VBAetIA!t4~#C4=%cP1iKGssR+Xf!-8@ z!eb(rY|9I-Vs073w@#CdNy;#e{wc$a+j#52YObOudxk+~jYitIk8FW7S4saV12xd8 z>^lxE1RuPg9J(f#rd$v|E#vsmysbuOVh3;De#a2kTY4Utiy}0B_#g-zlG7!?^)xcG zI=C0i{=9wNb_yXN`{5r>AOqdHIM_|aXQKU(>xY|`tdxs+R0m_Itfu6=Pq>$jW+B-lbtr&rV4zK3 zcY27Ay!=aK`q6tOPxjtQdinRQ$4^f?{J86Ea;A;b-K_+|_2`HBYA;jNF5RPK2ZfQe zCzo48h%piW3kCl~N^Xcl*_iLlYP02;?bQ|M4~Vu{9%6as^JjU6o0hTYP6nB3-2N>= z5PfOY+l{W>t9Q4c)QtYX8ZvZ6x%nRcWsp+JeMNTZC3qHJ73uoEc~$ePw4H$b5*;Ol z9xGzVLNkP-a3xe*@MY!@v_Ts^igheosVKA|e^N_PZ&${WfO4alBRF32#?M9j{X4qb z=Ep4xdOMrTGrBBE8X2+OD at tQXd&x%mLg at tUKAY_BZJ2_AYg at BU-e%hEMUr7Bz4UI8!zpo*Nm~>=_$&F8wRm8Q#f`F3FWlHp{IBM~(IM z6KHVU?C0w>jtUbb1`6!38;tj>Sel2cA-OmqHkfTAK9}>WjpW1|HFvKoD}aB4LNeKw zU$SDcSXj?P@^PYcxy9Py#Mp5+?3{uz#R%m4j|{Q_m~95f&MXaEj86SCaKgi|l`;Fa zE{Bc9SO+fVMz79t%&nZT;&ph{w9v zxUlRz{23cay_He%5|^c!SplAC0#}LjMw8Sero9^HA=V`7yMG%}za(J$zGL=_BW_ at S zE$_CXtQv@%cxFGJWX?jc3uyR7S8B_iWX{LWuYOI%==AM^46_YEu7&W|*D@^KS{j`2 zznkNPLZeP6%&&c2%0#z+JY1@}UgS{=MC_6qgoRk(!f>KXHH75Hnxa42U~)4g*M%&}{t+RvMt}%tAqJ zcX!qFp;hLp5=MY8XS2s;T3lB?AV_x+btexlsn9>`iRe1?PeP| zJG%4Q<@vs!P;qP_6P5uhi31y`)1jXdF$7x zOW+(-NTwF#8i4(gS&N&j7UP)AWY?B79^;Bj2PZjU^ zIgz&bnlE$hm_JVzJ~Lnf2p;_mK!)h2Yw*nKWrHpbGf#Z(2))Bp9wz+OF&+Y1H}Ari zO$^%BIc;0XwyXY!Y1D^J+0`H^t!`DTkGAHi*U556BT#m9yMM*?MZMn at -BgdtP{G-npD#tS zERjBve}mV_`RmLg{C3qgPo*n*I6*y~)(3b3j;5hWQpNB=n zAqLWUX>IQuPRX%*IisE_#cZqeNqI;AC)%xm8&Ss!51}e}pTJ1!SJ1mLNec$hOU62O z>-nc`~qWnsJNQ%^eMpQpt^HGuMsLryx-qyZb zY4M5NV;f};Wb7f8*c^jZsOz_G%KgyfGLEZ_4ow1(Pa~u|rZKC7o9ZP`%qz-l{vFG* zLAXi&bGVymbI=6^33#Bj9*7PzVtEaUlwHvkHjQRi3Mo3!j($@vR)22i!}974y1}#> zbphnop(7g;hhH<44Fka~Zb? zH><<;}`|3OT6~ zyu}7obNh{6v?^(M>QM>6te|!lV^jKTy4+clKkB%O{TkOkSr_n8ApMd`aPR=0j(^q- zsBsQGY27h2%Tp3UDg?~eKFCzFNl!26eoXzkO at qu_3`t7JvuY$-Ra;b5HCF3jrGXz@ z)~MgT*3!0b32#K*I;vPxaI9U1Jd9y{TfV-I-FRI?OOS!qv9y2Q{s6os^Mw~-TvwdytKx~ZXqU^Aj#?>Of*Lu z{~_&~(kUecZA|qpoe+b)J?$%$-|LN-|4Z`0%xK8aG(nwVh2*h=7~RLLMrTQW*oWvu zE-yJT=wa0avo$@|G<>A5 at A))R at dp)lEb5M=WyAQgrF#0f_762XR$~?bU3pFl?exU(apJ%HmTUK7K0%~oOm_Wtf_h+cmLz|FK{8Tik=i0=T4QujA at 3BkURW3xm ztJ8?u=_Kg5H;d0FAXJu+<2Fb#~ zQ6%=>`4k-iK!^r=yo<#1Ncqh13<~W=xXwbteOj3&GJSdyO!woxM9M2xZwc&W%Hqb) z*vsvQ9|p7Z at 9c#lU)#dbH<8tYy9VC)`QX9JF~;{3k@&+SVL)HlIu%gq-6iW#?~bET zf7QsX2ukvFoS!QmZY0O}Gx77+}7`>3hZoYqnXI+3nGW4o|3`IN!MOblvalMI8Jg3e{dJS7fs(7PDKukc zMWcU76vP1IMK4q4m0+^{jzdRA7#(>X&*QzlIp^KHAmmia-6LS6;3JJo!}EzPe3`f~ zQO5GFppEK-qpD(YK~qJB;rJUlrqJl_FX@ zsQhr&Dg|`YO~W|(bP?f|$Ph#YIou!n)NN%-cWZ;H=teZjv5DK%4E-vQAG#ANklwf7NAAbCtB0+3 zfdOkx9L>3&FaB2UOoi75x46~@jc&Eq?k9K;%hRUkkfDJsL2|iXRxx7IWT~?PgNFV~ z#VrFUBpWtHc18xsD; zNc$IJN3?=#y4OR>a1oRX<9myzsjWrT{yQOk z>f|g(TPbfn=^{8OXI(&^-lcMro)kI}qOE(6)Bg+#+6D9NmD>mA+K!pjN>g{HOuspu z3e1b^mKDx*JPzel^D at cUUszFReq*A5wsymr at P{Qa;u1Jvh1Qoo-eNOAb*og%yV&O8 z!dZE%Qp3C2=ApA~(G{rR-EI1yP_yty;y_=c_;66Y zP0HYeF1WB6H|f$reW}!)Dd|&Dy(y`$t`Rrs^FLblYO5BE(3sj2j4)?fxn_GMSJ2!l z>dMo`c4?rI(LE|EnWGmKJu0fkj2cfpE3k%@fJT#UT&wtirMsC2_4=+$=*Y*&qtXb0 zp%tJg;h8&tIL6sU4Mbq*Y2iEJ-ucNA|Cy(SD*xGeRn9BcmQwvImYH1htHzd8{i}wV zEBNB{b5`2o^mh-Z^6WqD=Km4cW47qZ6;U+2 at Ss7H@+g_z7%*LauW`1}wVbv1#FglF z$~`MW!svWcv3*~*U7_ at 3$olXhiF-Or6ub;*f0H( z)e8ku%URzP$(9dxE~!#>s782J#tR%YcuZ(Hy9kZ{-0*v;NNP5Mls$f)u<$m$QjfA| zCvw!?z+- at w>AoeEuz~Z~6vwP`NqsvQp=!iq&s})uC at p-OkseEwNuV`i4iGh<83o5fEK%IetB5W((p>mS4&}}5&y+gU$660L?#%W}eV_q4V=r-4( zI+6~!!0Y!W@#+sko8r?*za|h|v~lL^R&J*&VuYT%GWo6fw(kz{82!u-y^d>3 at 1oFt zS^~f>g<(DeG%d>&T^1Krsf+ouRvlm#lQLDc at M8kcLJh}w?oAo4701R`>^qZCRIxzz zOpoivXyOG$4onzIJD5+ at 3OgziDH%SregV at N)_)y9DvfTw?ee80okh)S}_}nXKkMxJXXUrmUsuaobH^-2X9>$ z#T3K-7?(}BTU4g{dPvK=!X7N$4!>w*Ez}Nd7-XqOT!$OA+Y$LDaXbcHsDI=qQZV3NQsS`>p=%kE;08#> z>RKjwq#grvDecq>L5+0=d?nj0vv7*9zj~J0xo)b`MjdZ;e{X>$7eAp|%})hcRU36B z*WIwY1I-3KaeWHdr?#U)Y$f!z=%G5b1mt(jL|ZD0vy z9ekV|LVo;R9|3DJngLy7ItFo0+UvhT<7OToFXk7Y1*PIYp5b$b%*;;xHvF{%B)YU& zc8`kY!im{%`ng<41>QM@&(p-;(gJ at p{WcMHdPN5R;hWKCa2ojyHkr&?(eZOPY~>+T z%u25GlkfigKX4Ay-6Qc3=hcp``^A2ff>B-PYS2e8Q}`A(OVm?wcfnJMos|5t_l3@? zU|lDSh>Phqs#Da=oke!W_G8Qi3J34E%nmtrICGYPpKIJ at 8+@jr*(WuwV=VgU#_e*Z zzuKj)8`=lNFO*yyK$1dOQkzpJSMclBL%|+nP?89^aW4$1o4yJ2zDbV3r*Qy`M>mpkEqNT6`A@~&k{BtA z1lVBaL*nM^^c=-)#<)qWzTyp^ibXAc>nC=qS%-4-O5PC$O5H%Mqw<+T6RcO0h0i#R z@|m&(S%t)mBRXISU3$%UPHH;)WdV(0DW=rfAOcyq6u|r6aD^KnKjCg4Q=N=!GdPSK zYjyww-g2e>Z{5xIC`wWkTVh%`RdpY`%nom`E*UG9B^2ciEAmFchdoY`?KF)xVGZE;D>DcFThNsJ~Ou zs#K>`%aws7X8d-Mc6wL;&+aCo)7w$V=iO5x?Qs|Gz!#Y38I^1zmk=fqw3VieK?O96 z`NLs4wXnF9`M^!aGxI14E3VA87<+Cn=SyCzg%uZDp36y+%Q>4h^PTzdCp_s2Y56eH z4$cq2_t8J8WVaOVk{eLSM`O=ZEhYisNZT`dY(3sRi&>MH zrgd|aLlsf}733moG^{ZcE)RV8>BCu*IYyYL24<5DrA+8N+>(OLXu_@%w#Ltx-P3Jp zwn;9NBO)bOZ!;$&EkjqEwcTT|uH_v;pyOKNg9`($C zS0$-EdwD-b*+=(7O at pmp<%N=0A#WkK2OmfD72Cd!J!n2AB--c0(%wNeYF;&RUd+S# z=_-fmOCs_G|@ht z$V%utoB818nKholHl_a%c?u6i{IEVYQ;H~TQS98~RbIP9Kb`PCb}*w(z)PbHgY%H> z^KTY7rHbDt`tB^5y%0(#`)ZdCmi_+e^`L>&`a}FUfDwd9R3q1s(9f-5B at pBD8Owqi zG7o`;G}Eyd6Cb6a7!?=MIFXI8XY4s^IY4wTbSZ3Al`mRk}nEqoFl<5nn7rjEn1__J5GJ0CqhRfhWSo%!z}1Qrgr zKRdObd1ctgZ?&27;stONBaP8uC#6MUmD2;cY73uN6NbZ5cIj^z1)Z=eK!@4%d;WsD z^B^#8C}Ur|?)$-HWk|E+T?XQwg)_%&)T5yK|2N`hoP5_i2N(!g<~Nkrl5VOIWr6c@ zJ|~bfjAX4R-l|)Kc-elnVY36bQ$-yX{~^$xLFJ=39P{D?%lm1)xUWaYHYn^lE1pKu zv*R>O_3Es0PqUri-nZwIF^tE_QAD9rL#dn%%605$dDx9)PNS$;cWvj33Wg2ap`Wbn^s8?-F3C4j=NhTioKOX@ zS0b|H9%9f$sRLy;OC8KctVh|H#1_F|&|sy#(elAjAC&gHD{KVEQL15=6%Z72s}Od> zA+1uEG>Z`A?kDdh>nBOi;^()*KsgNsAh3ip)3ZibOsNFoLHPDTy0*_SmS;${@?-F4 zW+FDl?;Z`iH5vQ at g(J}lnVQ^3j5RIQ6~m2rOuI16^VNf&=lG>ctm7?EB*Y(>mT*|> zz!Ed+KxUwk(2Yc+FrOaoK~>)pqAVxEJY00Qsv(Tfig|XIj1rpg^J5{xxGoRtKnWYe zR;jiu)Ke=MXXrYp;H+tpR-oCQ^18%!V~t*3tHo!I z|3*ER!--70GuXv(4pUzph}B$uBPFNLfmo%dXGaR-acn?+2<|c)tU$!&qBPYQ(?z}M zoZCeXs}hg2 at JTSdpkTlSwE!5{+X-DbK{kqeN}hIlu%HqrLEDN5(F(SA%KtyP_L}- zCgzD~l+qLiOyX1+N;!<;(m)E6$!V7A+2KDW3^rV=W_d959|G|lYwpEBjr0a@%H^O@ zL-bRDu9VV8{S_zL5F7LAM_t7#1S+9e3nW3~5%`l7a*-^N2}=!#e3{}E72%0}6trnR zJnAuQ`cB-}SQ*`UerhYX^D0jIa{M4P2AD}Sa7?@^%*AR8-odbs%d(8DyKSae6B7ka z2|}0yB2!qdK~Jm%mIX}~(#(~x5go9;rRS-DHoy)70z7 at Tw7T_l3I zb^XdyH&tUNsuGuj93ykUgp?q(QN!{djn_2Yf~}L)#|nr>{_&X}z_Er}S`tYF4naff z^2gq3T<2tU5A2u*KuH8GB(3=y>V$PPR5pyk at VRjKk35BH~*y92J;;k9V5=w?vxeR|}0aT3cYCG7d3?+j%9nxl=^1utH*9DasB0h6 z56Nql)3f8h6>lXwT^!ZhIc3^aESkkSHeS7qC?eB45;dm zb?hP1k_D0S^Bb7hStb-SO6ngY}|=(|eIxlU1?0XbxRPJ>@OOD*I{0 zbIGe|i!|kS35=%2u)}FubZk+c0fwpUql{{xHa>v9+M<%Ha*>3 at A#PcWdUqDi{*&j( zt8>Y+cFB^hQl+ at DEog*wNVs9_zjO*(%@TClQrVm)f;-^ij at QJ8%ts2F0>S;Qd04d?TeVtk(7>yF3^)W#F>6}?*Id$Sm(u>uWq9S1Zm87|=S$ZLkGwh) zL%SU4fCOlzRH=ci#hi?+oy{$B6YIA#?9d7ONB?9(V2J$=VHui6*WGDm ze>-M^46_Jrss2%^P()G(o0((#`7^Y`u)HGEnRmZv+dE+f$tbUYM)R0Du>5?s=;Zrt zyUWGEn*D{{!r0ktj*2&DrCvgVO3Xr>RDpeiX#aLNB z_Q}Pq0KLY9Ue270scvzI;yQ#7*&lT2Ku8 at Nes^!X^FNujiSv+yQeF$*c3l0@$U!{= z(d5DF|9}c6Pa$S39VL>tNQEK0Do|>*!jZ>S3h)s|NdLq}Z-D at unnQo2;!j?wNVw7 at rr zQFNV$6YJP#(-E_4?{8-3&v0=qK$tGAI&d}VS2rg!n9sk=CD}c2e%;x#=kWao0*b5D)t|`u23R at CdW6=1-P}K5=B2c_7D4>Q(g+sp z>CFXg16m8uS`>SzvebiMtJXIt>Rawl<8tcf3(Gre?0?Kd!g@~R7OS$zXnEy{Q0${xFq!q?->7RuYtIo{d_$N(lINF3F^W|uW zuwmK^jvngkfi;f*;X}gg??KtT at E=?Mp%qR3T?zZU#pNL>&gG( zL*Zx at Nx1~{&kHH&4)=S?G&V||%YYwS6z@%*r7FIE$w=yI5qlhXkNtMDA1(>a+BK6= z(U7AX!jkBSw7@!k>~yFXZ}miJ*8uH-7sYhUqRDR_3B73CHk=sY#`T5R9>~%R8+zRX zdm2LGk7!jP7(V)SJw531p>iH at gr7HM6~Se3NnCYLDITw$r-G&Hk$CUMq&3>VheUtS zar*ntdSt{dp2QUr7W~Lpq7+7A!Uec?;BX?C*g`)|v-=rqY{Zj2Gn4>uvXB&@F!wtB z&2*5 at a@ihm-n)K}hkD=o?on*yw%P7=mug>Ol1M~#1-2Cz9{+uj18c7hOf7sD0p?U}x2S;yT-M1iUWrFB`e#pf$vRSzVZPBLPj0K&nN& zoksl>gJD_^)81d?oFvTN=3<0hakXtB_Wq)b?=O5-66xAz znmHa35f&>aUd4V3uA|^nCC;zNL;ldggfto*2KJY9N$bYto zPEb$aKhcGTdcj(1YxqT$^hv|>z#K(nm%j0wZuJCQI)SfYth-7%=QTwL at k>msgT3K0 zw2IplyM(7&Wg^?47mHi!-&l+hf10W#KEN5nE4&vzXE*U&`8B3Pu_!Y-);VzYt(o)n ziv8R|T7q1=u9NDbH2u)2&ZeZ>o0Y!g$|sHB z9%LqP^LqSYe2>>lWRJ!rg<)zXYj|om*_~W2QoNFR8WLu*ea`C&hPUajQTaWag&nG# z-0hDL$}~MqO7 at Ive6T3~#+u~vwj|O1m(9ezMm2l4CJCjpr5DSNQS57|0gDg_2R+-^ zA5F`QVH5*AaB8+BUym9+J-C<+ zhGU_wmPE*vAFT6`Wt8*6C0P~1C&kDvLE?AX1~n#z7%H`OXAex8y9HaYe+q$J-Qp5 zOTJuYGqY6{k+rTt^YT+qlooy__#Ex*(fanB+0ly@|(oPB*-;ESQJ3{QTP65-;b^b3uvq`%hUSuJq;?CZ|cZ`&li;%b53EBT^5|lcwWW zuQ_`Qa~u_0o2qVSKM7nwr;_?e9=MCYjn5Q8lyo`NbC^GzrjN;=(2zKGY#nr)pnm0J zt`TOjzyw=M at D+&j%a_5I`1W`mW^5qY6eeYbsBo2SC64^tvdc%}*>M8%`MrU3NNO3t=7;S$bZb`HQU(^ev#%2g>c+Q;nIL^+)koLK~fL@^pM#0p|h1Ze#RG{i2q) z&?;^xR0hnr7fcg9(V13*jq=sF^F|Q7YW^pow+q!7FmJ^TNd#LRm8(E^d2Ct7 at bc(? z6)Q&yz`tUJeRtE)w&1 at PD+;y$Ay$%{|7WqHeUu<-X}>P at KZun;$8LpwS;{ffxXOpf zs>qi}SV&8=*ukkKikzy<*dft$E0z!b>LrU0j=c8G9>)P4kIIL5<^waI1hZuu57t{q zqv)(JEXijoe1GYz at _sfXcg08`#rhO93X9`Pq&3RwtErh)F`&)Iv=!k1aeBOocj^u) zaz~s7vbn_fOE-o(@7SVbwoA?;_*?%$oD;rf at CBKcx8zUf2&;-1%?%1YYU#$;l#UC= z#nWfsUr#neSAYEpfdabS;AnLa^xeY1ISbQKy%-nRFlNf*bK+sS-pq5q3-o-2SB0yO zp1^D>QswLQhy%i?n3g&Ni6N at C&i?#6cDz&gs9IFy$kW<{*DN(9`S=~L!~topL>*E* z!FKrHRSl5alL4zto~OzST37sly- zcMbTwRz4l*@SOw_I~e&U)+mT zWP0$Qe#|P-uJ>+ZPU9g=-OLz-?twP;Y;J##zqo>{VJ at zQcs_Fz=!OraNEzL+!{pXr zL9W<37N7rl#L%uhkW8WcX^>qPnBeBNvQjwF&OiiaN9iHHRN84xc#)41 zP~++}0q=J91^UzlHr5XF+Y2MCSO#=M$L{^!%@xjxX z`EVWgU^#C3z@;|m#Wys&>IG^~qEJ;@DW?DZH9i at pqMHmgRZ0_?4l3~c at m-P-G63;< zJ4Pf2NT4q|{e)D8H~x5-=@?fG&T3YiAVJ)!Le!~~u*o22OEsq^Zi7x*t?W6HKvGaXfHx>e}nXAARkVr%y%-c3wv4QVT#N4vFb4vz(+ at ssZ+ z7UZbLkW_Rsb>pP0Fa)K-8uk|vZ?wH}YX at wK<qrNw&e?+XQp7W=9|wOCP&NJhf|2Y>JT%S2jhDz{9`J7xhGNo|1gyYeRs{D8$H@%D3!5~KckMmS5Z(d8=RkAJ=68{kH*wkxC at pCY}gdRUZ0H2v#!%g z$(8_Gwc^0xC7fkkS>o#kT!8+BCE)_<7=AT2AAx^mN|nYxqmtRS*!)+fG at Jf2Do>}X zTRLJ7A8CuWi+|k(wkA(F at t`RdRi at AfYgF@>K($PBW`G~-xI#>)WVk6>;3v) z_>(-lA~wN-(x1NBeTLFcvZ5Rd@|f*+g|9Fwce7W$&Duun{smmYXxlAV+#H$nHpBeu zmn3kTVT$pe1H)uHW%%B63IRvcwYuRNXa0m*UQM%|x~5?T6Ybr)HvW{^ABeiQZ2HzI zlAF8lLaNLms#k~=Oq+n{q6Da1nCzaDEo)>IygFWaZo!(AT-kF96S;~NtT4U;Y=$_S02p>AtHY&^zWpmBS)nm(S1^ym2LIn6l1zNQD z1qEa}`33i9I#~V#kJ8or?RWi$%95+ww56z2i;Cbsu$FAhBs*g^ql)%_=LbRMin|9~ zW?5Not%+Ez$hg?}&w|YvWW(5PDis?0^X00U&=!_O#}-0Ije2BR(|ckbvkO#0OTOfP z8!T3n*=340CCblpJMCr54r4}x`~o^epW=rz9<@sD1aaH7EIJg;?FiptU+z$c+Ny+_=btbqKBbGyL2yeoiOx32RU8 z(Ce~cYVPADw!tS!i8^AY^bVKLD+{&ht=kt{@1{0|Ke;|*O~E+pfM!?XljYk!*gtry?=K!Svp`en{!dmIUOefnD=ti8F at PbXi&Mij`b(} zx{QG22lSA9%RMUsmyOGt%vV(3YM~XnpmzRVt+ilmYWe*OA<%h5=#{0vg1ht5ty>_Jc`nr-ZW#y0Dz~0dIdaX}J-qu?OX2+ezZ9fDQf70$o3-ep*y&a~~ zO``DdaScv~K}g}e4? zbv-D%f~D;1^}EQ1moQVVqk#XwQcQKXyLYTtExf{5%QmQQu>~)DezEjzL+bm3PJcbu z&-^y(F}1EzyZw|;IzcSb$S+g-qEcty)-e}==z0gEAGV2aUMwjol|h*wotc(5B+X%L zq91MrDFMT;1)s<+nYk-L4)mQ)@ViYUC--K8L+bRcom1oz4h@``5C%CxtGKVQOYg8A ze_pxQ@^{(4Ci{lUbiL7dyL*YG;FFuEye)_P88r?Weckg9dd1!43cW&mgHTA3In`W02_WD1${sY&rBN_;Wu*Ds;Y zh_4h;o;$b7{DPWKN=Y?5Gd&zwZ at 9kZL^+5wIVuhL-;|xd1F_D4jt at S&f43fYZ{_=E zsWD{p@$$j~NF$4(FX~kYs~Ad?3TqJW`bU#T?$i6psAN#(YJZC7tQ`x_^ISQWlIyl@ z9JXbub<1j3V|OusSA4rSIvbwhl at N48sF57x)IffjWB`IOhYZce{Ogv8jU9G at 4IM4!=mara&)kF zc5RJ}3s>Bwx6jUeh!_mUCw#=OoWpod$hZp_6eK%uzmKe~MiQ}DtcaFhRWP8K_#O*c zBjze8DTObR_>j64*9au~_xeT8rd=?Ocbez?3#F*S3JQ+wCpGeOI;!dG9+ zSvA{VbzS}4?WX)o;^E=padKQ(U>O>$!yWc4pQ~eP;|ody2QpzFk?zPzvq6U`WxSsP zwbcv3*)Dbnh423o59Gr at I$9S$56ljqfL{&2L`&dbt#a2QVHNC7#F}F*PR_YY*V|ki zj$3#hgyN^UD?J$d?6C{KbdNZ!vqSA4zt5;5NnDyE9jJ zg0rE5)dt;9j$FsyoBZwmgs)%5a@)=+oPI(5mS`OZxjjPL$U5E136XvBGoax~$CBJg z?tZ*q%K6*5JWQKmG+J)1Q%Atf6pXx=YHCx=QT`|RG5SSL=TWJ6VewIpt4A>bV!_(< z7SQGL6lL163>Mnqt~#rx0+@&# zpMs#2;n13Sie1R=|5V6-X{EKU zJpKRgSDO45XKYTgvvisD6A}_qqyIKS#_|8VG5NoZUm2mf_4iS)@5UHVc+pdM(J_0` z{S&F{h@@^VdqDg|1&>tC*T?Sbx{e#AKYH>13Y?Q(Z166GK3sOBF#z4&rjPcphWfC9 zee%k{kOLOHAbO_Lk7=Y{!3Hc!1MG_RMbz78g*DjuSC3&88-cUZ-Grng+ot^x6WRU3 z?cjni?7%{Io6R(S#HR~kON7FM!WRM117eutQt%NJvDAdejH2P)`0iQ^2NYe2R<4;1 zz4h=`LNKd!c6MriPj`oMA_|m~)B9SKh2}=o zzaMJ=9Ois~8xAQ1hHl8Af5105E zM;BkI7wd=Fp|3c9I0+S=gh2_IQN}79(B$nLaTi$75jjfO^QbT~2{>R2HVK;)-iQ*J zP^t)zR50=OZ&OwpegHr-8W-R%Qz0X;dqjj7b4x#AM*+iqeza9e$ij!QZ}c?HD-zT# zxvrWR9#e%hSWHkkE7HpqK5iBkI81A`aRfTdz&mj|9s-tD{X(d6c9(X<)-4B=DKHi> zhT#oc!Kds=9eJ(bA9Zmz0D>o^vUgRczmL6V9z>wPfKwgZ_PsIbng^Q_2l}=KVH1U< ze&>iik9#n-JdWI5ON=6 at l-Ad!bT9#Xq1!`D8$dkZ2@@edABc5moA4ID9I^$gVq%Gi z`U;#}&UfT)8~eY9iJS~NX9YNR>d~v%@=-uW=T+z<~c2bwCK_{V>oavEC&H{&cXe`!41o>OG7DHrheJHdrC?(3Lr z&*BJFaN|+{AJIgqdMe{AW}FYhaUC9*8XfwD+M{9hFw z*Pn_lPJBm;lmx9bb|>Ehp14!z4+?5Bl$3&iK7HhKusn* z%}K*4H(3#(MX0g)FWtQPrz`IA%LhL$m(Rw6KeQQqme>h!j`=jn2zL(izcqsB8}K(~ z0Ul>U^-2rn?Rxsze*n1K+2GGpN3%#mi14n--Csm3yMMdpEa~rDG$zHP-GXjF& zJ9^()fc_M6l!F|7Rwe=3MZN%@$;5!)HJk>V4m*ra`9T9l29YgM#%wRpTc&WY%&23T z>Z4gG{6(=6MS(z0 at rm;GK_;zdE|Sflzi|C*P{W>Jk at EvraB4O1V{{Lb-0_Ficz~hm z09Md^&3bg|QshGJkhn7pk#K;^4^_%JsmKl*79 z*_{{xTCW^0bZWC0GY?fb7t;&suL at O@Cb(e!qb2B{fb*I;Vz7uy{xVc)OCb+JR7 at IA z3)3qc+iqux9FM*Pk>0~8ZToGT230#$4Oi9FPB{d#{abnXcb2UHrZPPm#pxr^t9^Zt z4Knj~EXU}q+z0#=LCR-_aQj&9SAgOZftr0#5DF2} zVQ~3dFh$U&z)PK7#H=6dFViMG_uYwM9V!uaIM}j5rvLI1c#uL9?*4f5oiW9##?#y7 z at C#mBY_yMisA%S{eM7j(Xd z%HI*FZ*|wjMuucAGo^yuUx9Sr;!SW{ZT%936>0MN-TV3no~6mP*WWO8xjzbLIu5Jq zx()W&3C at yWIhp)?%T0TedZ%*J-*{l0U~SX>{+C`G?do=mDf=^2JNGYiVDf%u4}s$8*szuS-5v`;%F7(nhuZ$-@$_++Q`rL53Q5 zp&|i48eUp$D_ZQks+ZIBJf+M0HuFXG-8QucwI^PSif(rlgF>~>PA~lXD;;t1OIG;L z-h-bCo{}~ef;knF^G`xd_gXM3VpCY`wE}s?mFDf!K(@tw22ZTKhq4kTKXdT&?u}Pg zGs$=X4%NDh8;bmh+ at Z?Q&)piwTI~8Qs>9plrq-9)jDg8w!VS5I#;>%pwrYhFb>BB` zb>dC%USI<0IdFKB&wq*+Ua|RgI4ulv&~2%)eeL9uJ)q)C;SsovjC~2Y86vb1<$>&E zTQ*{MfM(f_fDq%*sA0l|`1TCD{QFl=3Iq6I;{ll1=G+Xq8#6cB%E4eKXmwMD5kbFb zlfq~8VAVNgWv>nK*doa?+;*haVRx>kx#Xl?py12g39 at xGz2^sXE znahJI<&oZz7%Ti&oT418^yQJsCL<}xudrC*7nn=oNhPj(PeQvgh(Yyx3yTQz<h(W8~M1h!BvPLUqQfYuvUu(#A);hI<`j7Lov!wA}6GEYP zy?Cel!m6tWaXx9j92{Eb*5r}jM8>n>_2!`Z at Y{64$dPx!Ye(S0p5xm(B4f&q)J;)} z3fJKDLZ4@=w)GvAEI*HErvjzx<_?;R`Hzgll8&kkYaXB76XLh%?}LdwIs0^hGo%if`B~!Km3jZ9+}jo zSGnKMnDk#i<*oOwZ~IMbsgX=Zh=1>lGmCn1?<)iNp~6f3<2?=E-L zAhTaNb9fSD_W}SwZTYD{xzj+_*ocp0{~^ zw{K*9mCA$wa~wulykaZb|M+wT%Zac9I((~k6sK5C#|yZhn4=(nffp+0Ic+Iqg|ECm z))?V{P$GFd;WjLDS0TR-aRIEhd;(F#0pAjnEkk37XxekM&(GkamvFv&8avxN3%x(W zLM))s;}Vq(x$e^a&ID#ptm#?zc);6jUlgK6tvdj639|%uLgk~-(RIYvu7H1A&3{jF z|M(Nf=ym##$ptJjtv8&3ScU3r08hc*)4%r6K?QwO^7HuK2YYYj6 at Q?878*vRM379; zVx>VtM*e=XV;bnglkW$$-S)q`xKRtcO3i{0XOH9R(}0lk*%%B5UF;m|N`0&j_S&Ul zrJL!_-szyYpKS>$sfs8wUz@$XTj=Zo0<VH?4Ci1+|7h_SISYVkA}Q^;(s9IO@#y7XM2k zn|ow;`RA1rFe^q)+&$DhtR+~Z^D^M^_;ag=ho&Q=tJd3RRl@|FzI>NBk8;<+rt;MW zUDk1&Tw5jX2RvkZ#V>N0uqRFGCYHdslWSlNdudw0X#!^z#~RfnZwFgLN`nihd^ij6 zX+uj;iHUw|e>hXx(U0Yoz8IPo|+$Uc0{c?WM0d at 6et0j-HR=uyz`AD6?5ss5 at YvY zA at D^PkVsfUfKxb$?Cm_p$ssxG3zx_1eIDKa_=`W#i(O85Q`sLheb~qj$Oh^-o6y?c zlsxOf1FX?7y%nMqj+>vG)gl}bU4a%!wsw?}}OZz$%*+EYG$k at 0O7c$yyG zs%8;Vx9D-1;a_0+-okda&JLnAUO*6$y95$&mr$v5eWFlnCQYiW_!|KH6=CphE|lQP zjC2`)3}|LpB->_19c{pucT><{@fFEVV(~5 zZ+oy5f1bE)>-Oh84bjkVgW&Uv(|XM8iyLRTtrM2d++Q(xt_$Q2wT zHnf-bpRx>8V*$f5G=4(MiDw=n2=mhw42RX8OPkbrP2k6ookM2|$X_STg5zvdS9>=4 ztN;g at KS>FV2?C-0y8Z}vX5ol2gfk{900*qT< zlIy}fN)oM7 at Pl1~OCpD`#nPP9X3h2a&3lTe#nZ=$QmNK- at DGWE;m4OScrAvgmCy^ z*o40=ny4ke9|-ptb<#rZBh9VTR~z<$%1yiE!UvUnx$7QYK-FwqcLpE~rlbtUnickp z!#|bJrV^()>Amf*)+WOmA{0Re at -H`n){V&70 zNJGLG=w%2R;1pd_t zUM=I`Fedbg()<%%+FKsv;}n#-ovaj55%=u7Ih(>x8g#o7s5=>feYid+C#UH>+}a$~ z&Ta5V_;L?YNX2IV%*ECTFnap6RvqxAxS^7Zn6(1+7Yz-aPo7|%2P%TgHM?I994$G) zeGZy8MZoVk=hIGJ+yeXJm&2K%A!(;@jJr*FSY#8z;_n4*ThMdRe$E->p!rO4CvKMr zHyZ+$5>5S&k)`GO?5uo;53zOjqT_5M{^n~L^ZnE`M7YH%A~bxh)%LLnaLd^x&YE4k8cb!geS85Fv at K*rJs zKmU^?Q!oQrxhQlZ*}`^@4A<#|Yytiy7f~8Gi|v|=L{|?yM(J1j<^@?H>(cT7^F{F1 z{mP*WGTW#E9GLk6XJtg#qz+Z6;Um5YjZEnuhD&$#{CiNl3pZx@?#Hm%0q+1@|DbJD zH?v^${w~#3^PSu^YgfW>#HJqc5r0W2NZ3FrmROrwf4dx4Ik;Zh1ACt|J8KK%f7$i` zK6E_ACibu at XU@rZEiLPp-R>2mKT5n at Zne;}6>s=K})dP2C2( z&m{|R>>gY8D9(mL!i(So0H*76N}B!=IyexW7}EM=9{d0s?bsSDO!$s##~0wHnP>VR zPS#$z4nX9s))g__-MO=^-V+TcDDf~vU at C>YIUNY)aK#2Fkm41?G*&tf7S#tTQf)AN zoaY6RO$Wg**gdy2y0dW9wVT=pBvo@?#zV$J7KUJsg9vJDo<vmar05RWr7K`lTiuWOwlI9{ZVR>G!KUU*K5!!pPsNst=GVu*x!`4=sya8ZU2OQKSn=4CPt=QS}bK83weoT z17Hm&irsq(^dqC;O^Nxj+<4f+-)iE*-*%;@=>>HcV&c+6FTzFePg3vdZi5{UD%pWQ z-erOpaYxnV?qlYbR~yUAJ^sp(@&T1;TZCRi%Z28p6L7pC4=sRmfW4 zNMf#4KXCQa3U<$vJrLdm5QQdmFmn?nL9n%p;J at I>l-wx$ZtJp!`l7(wHkduv*wc=$ zS+o;iUIysf%Q~W5IA>wm$n-+74XNwb_q6@)aLN0!wGH2yL8f3xc(axK-6eoO!96+W zupI?YmvS8SE`?3vyU&c at 7=`;^mJ^C?TG7Td`qKKmyP@&|mqw6X4J7VqC}95WA?GjR z1iFbI0QOGKL7Rp{#33I2dW7tS!r?1xU__85Lc<-B?JD7);ipG)vCBg+x4W7NQm6yB z9y6jPaYc&|jZY09_YvN_vq&EFWs;cc7WH(YNq_ke!5FH-L9BMbflkpEBJhg^iqC}J zH8k^aT56F#>JF1tTqa}x0bbsk5}nn z-r8ow&y7Cfz>PXySm`OeEm>>-pqZ&nCNnvaM`4hKF3t7YC=Yk{sF-fR5!`f+pOt;4AjSJ{;4jyv$ILr_yL+iWd_TOVQ^EU?pS zOa#au;TbM{lHtn^dEp%XCu at 4m`LWLn;L`lU=I}~Z0e`vaAV+!Rh0I7;S@UOD3G^*k>In2k2%);CK zv=lw|Xf*KM#|jCv?K(Wf;`%e4s#7`It>@PDQp?U&Zwqoyope6$Ukfe}sTG*-vmtCiIaLh7Lq5T#-I-X;nlEPuXC|?Bff7WLuOBd6)zISKBqaRI|Gj{nIlfw=lK#(@ zssG=(t`@Li0xbu;bEtGp!8`GP9;RtNV!C(rF at 2=>vU2ClX z08Mr0>+&nX65Ay5TIt9ZAFG0;Rmf)>6<0AnoGSfU))XzRz>Lch?~!_t-b0!5Y=@Vs zqqee4gHuZSH$dEq8NINEnl4LDlTU{3Mw|9O#=yGE*D at FU8LigxlYl|XGy zeY9pq7!9VVrq{8knH}hr(pnQ9{=t$@xLDFYDqc!(4%5=#)BC~gHi-S2pZ?biM1`!U z)x|VkL4=i71kizNZqfTAcL$WA`#b--CtnjI7bEJ=7a_J;4sp*O9@pNJ>vM-^`{fmxe!6Sukd$Ps zv+*~BS7?{(-4L4~cB ztgtopv)cyF))O9&EnnJA;z{GA at GNF`%)7 at F)|r0*=qk)T-jPJ8gP3umQqt>@)tpjV z>L)oGmdDZ81N`~&AkqLqwk_p=DLpqDj2-*fl#fTN! z#m50r7IE)`)n5hPh@?Y)d_*5v>+%vMldsmC>UMfT<@`)P_hbf&S&gU!u_=WU(qp!l z*XCo=+HUNs$YL5dsA8z+O2}l4t1GqHZmahB|8jn_Ppd<{vkh16AVWk1)m|^6hI1sz zm$)%IQ@<3Rxz3eyv59!@a>Dp~FMv>FOjP^*J3<1vT+y4EmX$6OxNqDOtu>5m^|_N$ zd?y}c^|68S_RdgYvVi=JFp6tF)hz0Co9qU>9NI6ckI-diEBPM>DsHxlQIB8<0@^8< ziX8{DL{4jYtv|)d2z$!7z()n;&nKbHtF&~WZwzLy-$OaL4l4F1>6BeZQ?TCdKiwWh zRt(rcWye1vf>ksipsxmsj05g(>9$-xKHo!CIm+KusK8$^*-hh=1RFQLf%2UP5H7Kz zDutGwyyqK_y4gwEV!>b2mQbUf_@^}PBlkwUUT2yOWL#2V{2`5~9hL>*z;jLaL~N3W zccE5S1Vpmxq<4*|xyI)AJ^o~GKQZv9b8-TWqT(S%rCma;6Hbjqs8p)u4+nos&saY=ORLG1Fe7z1y2<1boRkvH5&nnDve#azy*r^3gtJ zzw(Od3b;=94mnnIJ0g{Q6MML`)gd}=bz|`~5SV&a;}7wI=~;ZER^q-ka4YI#;+l$D z4pnX`U)G1VCqeVi!hE*@D%d at 0^8+{D-=;4-*CU7OP9sjJTS7aJQD?z$%8^LM{)zG+qi#INl*V zgukusrTo4Ac<#FpBtwEjdT(NDbWmnSS2p)vB;?b*PlBvfJ6pE=?(&)+dNBiPOezC) zG3;~puHE4m<41MyTO$RQQOP1cc7;wYFBqBCD8;u0gUP4F7MXn`S>@7QbOxs3svkI3DSDcc{21*=asr&k9lYK7aXHiEhBGw6m*- zn!AP8#f9qrDi^MMK9~_ zEO)l8dv2 at -qQsNjlUmRsn&S at 9*e_pdFazCZQkFmcvt?UUO*>7RKeQRoVqF_jfRmO~ zx7wX)YR3c{%rkxsez5)lOhM(xs2QPjL_90=^USMXM4i7{C~o(Vc*z%c at yl|}W>#u* zZt-mMHJ4DH!;?Gf{EAJF|MU#MHBVRQwn>kgZ+>knRZsyN41LGmGP-|VV!lWz;-fg% zy_aot7%w7Jnt~CM+(3<=y^Ryp^XYPKSI<>cY5atHO8R_IN_I}&CM~!B ztD*0yFLa9zQ!T}=$vlO}EDr;<3x>4*E*bZXA27+aX at R4<3O?b7{1u#nlQ$E0uAOk5 z5Glpf`Mun7h2%4Cy*N#}OCo&>K)%Ycp?|<@?tN>)!4Z5DGNgWEnEBRrF4YufvXq$Z z-9N9HO~*OXYj*$!FBR>SDzOaEkq8!LwbV)w6Ih=gSWqUks+|lE)R0bjc^x0jOM9|L z0$QR56IZpXZlt37AKxA*i0j}7&Z zGfp3$tezts$f&|#wFpDw8ml2+sE)6#So`j2uY%usnA*+fgTb!9PafUXoTk4mfY764 zw`CMR==PzoCta!)I`!5}GZFrJuc0&!d7n5wGnc{>k%majjphxbUh|-;Ka{iHsVZNR zDp!B!8c-M0p`17sJP;z)_R=;NKttMeOKqQZYK3LuUBfpNthG3*&;Q$B?MfOEtjg{~ z-6=x-JNX{y$q9xTer=+z$fJ9o&&iO?jjQibm1MUdSEgE2AdVOCLyn=zsmFM~F`8Mu z<0&Y2uZN3jXN`&StP$4Qr}i{4^2USg1}^}e>(*zA)bnRG=eOeunar=g1o+6g8FKvK z)u15$w15RIYIuDV2oR;`(+kF;;Ol;I=18IbCt2kwJ3SA-nbT1z^1O(_kF!U~95?T< zgtX_n#j)y$gnw*Jxfk{O0U-s9B?@nfW8yk at cw`%{O&8IfQ-^XobM!l>diSwf4*!O!P z&HM2>+oiF*3RzLQD_5}kejqgYMnmMc1l at e}$SJj8=*zb>Cg*csQ7#|Sc=GkykZ(pa zMT#D&>1DP4xT#704ElZ*Ye22|!B2=&iFX;b0tUF+bP=2Ng0d zcS-t^cG|RCei#Cy&zLgg}h_;zi$tXd!iEGRS=e6 at Pa4gdVf#*RL$;qq=if zb+*p!%L%89CQH<&wqs!`nbYNEej$t`KNMJ3L^D#aGAKnUewO?v_LzwCWZU; zZRRlMtK%o=4fQsNUwLxEUl>35?Q&{L8WE|Jm~R0+fByNJo_1Dm>2>sIk at 4mYn&K~z zKWO}l{I5Kx(K`s8a64Y>?b_7`D$f2pypwNF!RMUC-K|Kg<};P;>tX57{4~*qMI~S9 zZ;X?X%sTC(KOf!K_zL(NAcW8$2AgM7v4(9r~k^SHSWT$$uLa2XRLM?7QUw ziS8Ub*jnNRCMD-uNr{A~Hep=%TS-%CR7GXTnJ|ejbeFWR3pd&H69rqOI=;{;?xh9!9!6hhiJzT-W4r zDFX_fKl~%k8&^)!v-SIFfhNl>b{X%jg_#@L2T2h_fo+G+*pPC=;w1P#-xgOV;}eSX^e`^%{9A)9TnL)*SH@}bxs at MMQK!nNfW?_ zI%Y8v_%DOTQK*l)@;28u2sVu2X7)cjlOss&Nbm3XlWS;R_j|Ywza{qR%ta5Xjeqq4 zAQ-m*_l{CLT278J3zJe+p)-|QY9~omhcQ=J9Z6)ng*<&=ElXT)uZAvbJ$2u`JI^4g zHSO~;;KQ;F&5!4W=yw&gACi!X!Ke at IO~o+03^8ks?d5)^bxv>r^YK}mSQBet=|(s+ z39eB~hTFdDaU`URp{ChhJ;dQGhjj%;&feDP!H$ko4(Jz+H}H8`yV-gt&z5mCa-0i5 zDG{V1{wFmgw2OFMvZ1^sHf%&GFvN at 3uDgC|@`GIw;Ce*z1i>KV at oD*}Yi||mDe^-J zF{@i)dlzXwr+`lPQhgYf9#`u3O7ZD5y?G)@m7Yu z{&}QRHWpfkD|S}Aq{AG87P&9gvQzenM_gi`@>Ywl7rjefLl+zb-4I0^k)-N87!0~S zWn|3-8%KH=kB8Wb+4s z at NYOFz=V;G>H8ww at wWnhu1qe=4~QFH$@517>G{UJxpjSM$lY3K#>rfk3s(cQcfrL^g;psXb=5gHR%p0jAW)&Gy zyw%scoDC$Njpuno2bGQrdu at kCyRCGoALb7h1*V;Sj{kTjer%zHJyv*f&o at K@kXTGv z6{>fG&r_QIP3{aC at Mv=vFk at Hpe(O0yqp2$;FrA6CsPj0^ET at pH$6`@Q-tVG-uf)ZJ zoR8adeQ?Yu&%MUpurm;u8DiPvW9BbbQY9-HPj6dwze-elm*u>dlb8wxi9QP44%)0u7hS?G_JGsR+%GnsDc}Df7&gDn^#HqF+;wH~^BLvc9_A z at ZIx^v*wC at oUELTUWt~w{q&v8QdG<5qIO at u17?XHdCbl6H2o5>XCmGS-PgKuuis=H zpobXpOZHq%X(I>km!CLuUo+~!X)-tP%7eTt}x&Gw?@8Ir_cHc at Qjq1kS=W>c0;^?`5-&Mdrl?X~%mU{Su z@#~Z!es2;9i&BmJU~p}_`-xJEWl9J4O%)Q&F>og=#J|XK?K;#&zYqFq$kmHC#aNU4 zc&zbV3N20hN~R25o1n7q&qmZ>-|PpSr4UcbU-z6CKgY?bqQw^ygNz$%NQ8dcV5wr!=5(AV6kGU~;j_TSm^8+PCkHW%Hc zI>G$bWQ(>wZ#LNqjYKCl4GNqGV68+X0o`}7lajrRdO-6;u<=q~+Lb#=4wp2V_sdp4 z@;=AZM%P}o$sPA%luH+}iL>P;xs2?%eed}Gmvok+V at W=#JDMV>^HK9LvDg-_Is?PM zi7uRi?jv(pGtJKG8^iI(x6`7AM*w$~h%9*yZ!@lu!kKhox4AF zeOCuVN>y_j^E*dXtH|tMcOET>4oCZQNV50+4pi8RIfNV zmCNAvkI~;G`VQGbbJym2<@7$?rE<_H&lxGzT_BX6Y+s;@UQn4_Xec(AUH~7EdQ0u* z2TW>8oYk?kGhwGZAD*y7mlBw1NL!0O6mvUC at duX5avs-wM7V@#rq(E!rdFUR50_P# z3}8w6 at NQaNlWX*s(IMLJ&I at f6M%96g at us)f6}B36dSbwMxqwHZKRwJNz6cpuD=-XK zjx9b|f3OW|#U86eIJ}hU!X(}n8D2bQZ~vU+!T9H at u;k*28{W0g&reSXv;re~p$Fz; z=D6HsDZDdljyJj3q!^>i(+kXd9r#fHU}A@$x6dQ30?~gt1c7A2c!#_(Kj_d za-?tDctj>}A9`-HZ+0{&KOk5?ZjD+F=7uW%(JJu)zm~`WnsPY?Day9n(?6q zD_Wtv^Yjpm?WQK5UFE<^wvb6WHD(18?UN5*b!#A(vBvk1+_i=?tg5O50AGhdFdH)F zLg#hjK%`9h`Tnkhlh3OS0IjZ6m>>!igK6`l at 7Ax^E{Trb03Nh*du=Q+Uo zt!{{k6#oaKErrL zClqvE?PF2Rs4mIFb%@8`q~t^c=hnHS`aF3a{ZdaI=~jL)6(R~^Hu*?jW^Vd@{2oAv|M zT=e3bSr$6gZEl4AF0g|@aZ)iF1UZSEJTDAI;P^#7l)pu?S}$e9+wi`ANlQQMby)d3 z%D<`F at oh8dF2w(cCr|&GqDlmoBQa{_gXb1PHA9R0W=91b%^V1nQcm>B`YTy?%W$&q zh`B9dKQh4N$ze1f&CK_x1$Sjn4 at 45Y-g;#;M54;SNsbzGn+1$%j9Kk7Pum%L%Wr3j zn6iz1!gEv0Mby1C{#)(ymcX49ERg!@JVVWl<J7Ss*DcKehvg+^v7m;`Z9m;5sewir3o~n(z6%@A=pO+F`%G$G at LNwP5s9(YVoYzn z84UBtd$r$VPv8 at e=rl^0#u=uMXI8!xq%46+C$d;L5^Im&N$^DW)cn54Y|gj=4(VXK zOInx5!67d{7q0#lrF|qJJ>imfH+$4ifzlJz=rEkTy%Q&(S^>P5S3;RflVrF~n}*g6 zZXHO0cT2PKxsyyqP=5b=4K>5%sz!cWgPk>K%(XLC?#^f$@kP?=VY&xroyvj2Gpppp zJS(XbhvOZ*dfA#6=NhDFDB2+2a-&g9!KLD8MXyh3m6&7nICTHR_(T at MhxC=-fU9Hg zdHS2YXJOA;_WvF-fyRCj#5VD)qCL+-IES<^GloC2-komi at O7S~I0a8QFzLKd^afGU z(|&tt=yZk!pV{iXX)$al-o4ci+NW~`RBohZg7_Z%oU^QqSO5K&(qj%z9q|4MnTt)P zstK>JvM0_|d>UPU`z++$RA8iLj)tLo{k5_9L`V8-s&6oX*Jt8?M*i59(&%mYj%H7* zN-~I^a}bxd8lA6n_+pgCI;3dTu1;3|mcK)EH;tWqshDK>w*E`>*ZZRdESDkB zAdSv~Nr|#FT;uCAM-Dxq^UX`5vpI5EI%lfOT^{2Om~MUevbi>JDvT+%IqN@TbXGhYwWl3qbGCE>rR## z at i;uQnyZ_}?{YiE6l&&ol&4I;D^xUW|N2EYK+WAP4l1kF&3(9##=DIV8H06MpNzH=>N9#OKDV+HJSLBz-)QPjtFBDQ;3J!1oZn_n>P_k+B%?KKp zXPK}=Q9tK%JEB_SIdjW8Q_m)E42eK|&O^20)&@=YxtM3R`Ri8dKdCJ)I~VRfo*HFM zNdGehSS3Dv-FU64Dxd($VH>g_UBt$ArB#$7Mj|H#Ct6QOIdwm&JLXY=$GSji|KBgZ8MfG0vpZ%})&NHZ~ZSCVA z2oVGk1T2UlD1wv_I-yAs^eCtl0cnO1LQMh*BoygV1*8`d5CIEPq>6-&ptQ&lLAoFi ziX57pfRx;Lj at NVUojdoPe7H03hwKlTwb%Tg=UMx=|Czn_?5vee>jUu1V8H`jk1Y-Q z>xS>`g~#&t`HI0o2hVkgOHK3zj#6uUmM-LYh-dn+r(10h%Y{5{&A at V%E!v19i-B-0cr(kwtyQ>qtc#Tdv z`Hdn453PUG!g)N)j&xs=n#uFZv!YnGtPi7cRJMnbUxSW_6gfE#lV#*=zKqpsMTn(j z;k74?BP$#9TiY5Is~ZlRA&Nta*w5 at fa3FQL?K at H7ycrxbyyvl(W{4FdD`i;R#|ub{ z^$H7EE;Zbd7cVHzFi=f+?gt+X?jCsFLAxHzj;TG$E1nnf9$)zugbD_w^#Yie?5j at J zO0d?ehYmLMjIKr?>{cMv{3my^FmrPh@@+~H1oCxEUo>ID(jqh%!=LYQ zkF5oBq+XtJr-U%S;L)_Dj+tBLd4z+in0fgMrqquD`oi_2%X=5k!P#r;p~nd$_%Q$c zo@{(^+L>L1lQFVv=HoZ!+0j{tMpbgjsnXk*- zgst$8-N35Crn5S2jW5>n<%go1 zgq^f^6e99AUcHqYL73~?nF`=Cv1k&9 zQwA@$dcLk|d)@1LKK0Uyzoso=1^ZHK*ZRZCEh)VdbJH8$iOf&$meJnZm$J`4FlP~r zAK7_p`-pFDlZ at vK(tCfb%8)&BQee}<(N0DEjK44wpNid=j3^B6wRK4NozK68neR2Z zxle?qCq+AIDP->w>!9^(-NA>F>>l+edjn}}hHM*tQgh9QVtNJw%TIAn3B}qCY)xWa zKE`?AZBFY)Ji0AJ&Ev20DdHL&+?KLGdiKLynNdXVo<={q_V#LztHm(dC%UurHU%T>!W_4h+sTZ=U52 z`?c8`IGEE*TKc?*^pfJ~CDy#m#7lz(zD~%G6l}d(T{0?Lnz9hT59bPvdq0KVFg&cc zl7Q_zmItd5-4T`bgL5^%X<9i`<)vq?tHaD!a5G4IzUQV=oz%y8 at -|_YQ~c(ch!<5K z$@rkYrpf4w_H0h3_HtW$>Zd8~=ip7mSpdqFQju&&8N8RWQuL0}DC(ytsl%h5Au`pm zV*(~3sVuGWw>DLii)C!tZF1sUb28d>m%1f2Grq_#hf1dG-&Jg1w8>}lcn}fRhADJ8 z%i&q7T1C{?d-Gf(0DAEA9N(*)G*tul(Jx5^xx|7kX)P>Uswd0<0 at 7ETZB?#=+&aoB~{8pR9LDh;CZDap}Ixw;%JB&cY)>kGu1fUZ=W~z%zMVLf7 z%CFg8l+bKIS1rCtkSS>+0uuVGH7@$p9aF9}sgyR{SI;p?yJUV<@p%NV?me6_ at z{ee z%zsoAFs=yNl6#lH8R1stE}FJ$7S-3uUH4 at dvD2I1dn3H}jlH1Zy(6LdJ?Z-?F52C2 zWwwT!r#PlqmtFQz{}RRwFF+8__(5*y+BNlo5&h<)>&C$(}ch4mwKUz z0P?@ ziaSu5^X?vJN}A^)l3&p7Zr&TS33_R<%cRCbOXpxZi^PFf-Q9;Sh#ClmBG39*6zR=S zy&_D^UrlFpMC(c1O_zfV_EjB=x=|GgLz+MTbSq4)Lekxtt3;GwpQL=aQTm|yMDXAYtj z{6|Gd;kZw?pGu+Hea!VQdjsNI!Yq<`6;ea})wg4HBw2IkN?KGRoi*a6)hYoM76%lC z+%&)hw}tgMd`jvJ}bx(jev=w*No72O%8u*A0f00>VetRr1ka55!R5)H>60MpGfCuU(`K<>*VO|>-PxF zX0`KtY*}E#k)3gtwwB3YjR&0hAIdPh4V|+Z=;~t+OV4G&-KF7`RXxy5~DKKIF9+{&xQO)LmSENOhPu zi(X*EPAIo;uVnd9w+?sPE9;t^=R3sK56|yVh8C5&MqD$LuI#<+EF3nTu=CtSJ#h0k z(m4b>*hpI8>fMsnhQ5{q5@{6s%uM* z<#wgpQN9^&{jr^R7}M5OAThJ-;z3^dw5S3k3zO0BLD*s1u;H1nvkN3`lTyLt&u=4bUHXp|tk*ZZHV=hXm)U0n+|n5NKg| z4XBIuL;w|JAkuJIc?Ft6wm~Q1O5U-0p*l|a>3V0#$$je{3L4 z4q8jy)4>sHtf&8 at CT&jxm=pnFhPiG9y8I1yd&kM6hd*L)dpzno#Za)qVhWS|th5Z4Lh7wGGVZaa> zS at 6%yv_N%QCsfxH0mGp^P0?sK%|8!c-`Nv^M|-+rfx0I0>fa;(Mf6wIzv2;kFdRaY z#zRF~R#943$rPgUor<&XBz!(%# z9sF14e;wbSqo&z{W=rr-U;cCGKTqZVr12N`|4I5klQN3X1($(~fr~Bzbcq at 6V&I~S z09|5+yBN6WB0!gz;VuR)x(LuEX1I%ii!K6mi5c!<;G&BFU1Em27`W&nK$n=|E(R{T z2+$>FxQl^{E&_Ck8SY}>qKg1sVurgIxacB4mzd!$1}?e?&?RQLi-C(S0(6NP?qcAg zivV3>hPxQJ=psOunBgu4F1iTNC1$vbfr~Bzbcq at 6V&I~S09|5+yBN6WB0!h;zq*U# zubCbQ6m5D3o;HsI(&y$tTQD4XNl)8UJRvqo%XJ^*XnWv|W*f}4my^}4Pha;HoE+U{ zmEOIgTw9ei(R88ACaVrw2gr-8{mk2QX8u>9Rkw%1Y081)WS?<$5iS=v^ns?ph1G}2 zIudu1c_n5{G7EEZicIA?R2^rQfEtXv7 rGHaQM_X at XXPdyq#HTF1G45GbAU8kNz+H-xMcysB3kzR?;t&o2JV!jmc diff --git a/src/public/images/delete_white.gif b/src/public/images/delete_white.gif deleted file mode 100644 index f761c9ca967c6fd899b23c3cf2fb1bdba6ea3eef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13236 zcmeI3X?PPw9EUfO0v6C#yhYt^#fv1n*@Pxpk`zo0v>L=V2-b`3?j&84?5>-wNee3C ztyn863MwEf3KfdfyI at 5`3vH=*fLc*JL961e^{Tr~niPB zpcV9um>HOcm#`|UeY=a3GRsAPidTWKAbN;>Ev*DD at E&5u_y84)+RoL8m<$h3h)oeY`t_XNFA5Jr6H&f1_wTQ7f89P-us6GW9P#%zYAyoUHawkL4 z4CPFh4}#L=Zc-O9NKC(V{Y(dp|DQ0P%lMLOlxY98 at Ei%EAO=J=t~s;r?~Lb|kfg*| z)hoo-~^SpPCdc0woveLb{*~K*1W&+>4Gu<1*3E!T~G#~V3aPT3(5c#jM9a4K^cI8QM!;WC<9P1N*B at vWdI6B z=|Z}o3_!ssT}T&{0Vo)y3+aL~00pCTAze at gpkS0PqzlRb6pYe^bU_(_f>FAVE+_*~ zFiIEF1!VvVM(IMjpbS94C|yVwlmRFhr3>kTG5`f1G+nvbmmWaWo_8d)cN~VkfBydK z&p |Lxabe*WplAHLuB-M8QLeErqlJzswD`DdSgviswYc753W!Tay+-0|)^Z@;zu z&8}^o9qn7Uw7v2A=GQj8y786Pmp80$dFjO$o`3GyXPVbNy|!u1>Zcl4t$gx{6^}pm z=<-LFEnV{PLk})q^uYZK at 4NS&1$Q^xRe$IFJ8r-2)?04A>Bbx8T|f7_Yph=(6sp4^z;jjXtSc_R?9xjrFP=H$qUphk@(ZV3Fg0-gd1a+jCi~AV z at treiVzJlb#u%5=Q8eCeqpcKaF`LGneb$+0oIdunLZSda^^}vxoOI#|#~*j>F-MO+ zDnIYYBSwuJk$d>?VMB9_Lk=@wSV6DRFbo at sne^8&`hyzG7;M;5+PJ~l(>Xh5Sx!Aa z+*rM8D40Oc&FflcG7MR>r#FDL;(78oY<^o|eh9NK-8ObNwYq$z!#J^hSJ`N6t)6|@8fLY0m+x%%HFfvoV-x-bU at v>A diff --git a/src/public/images/fade.png b/src/public/images/fade.png deleted file mode 100644 index 77059e64ebc90e419e8a4979d165bce436220640..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 649 zcmV;40(Sk0P)W?nb0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!D at jB_RCwClRoiYQF$lvb|NpPm?z@|C z3(Op;>TA=UXoewy7~?2kL&XO7Uk*1Bg81Yn#`_*%dP%Lr*~@*9`vGgeoG0!tfITet za4!plh-gcWaZk$pYQOWQHseG(*7ILU?9KP`V^{I#<0a-T&CBNPsIX{ao^eLjVL&t_ z%*?Q*>0&dGU_n at 5T~zrt$)7WEo^wfqf at P`^KzlXVycD<_!PpR9D85pbdpUEwkjf%- zP(Xs1IJ`X^aNZYH{26hj$kg>E5v}Bj=ir#d{_}My6gaCofbP;-!fB8D9(D#x?~8nV>9va zg$(4Q9Al)KGz9sfVO(Guq^G(&2}pz5 at nSo;C8G)I&2`;)hz{4wNJeE;#{M7jLIFK! zzJ at r8G_h)leCi?2s?nJv^GMpN+7@;)jfLf_4-wiJ>VtxZ032YQX^r^2opymZ+vBRX z7u~_h%L5+KW=4~O9uX$I?5OhUDuYb5Po$w2DDT|#Vn;_Kab74^93O8!r%PJ<`E*sr-_wZ5*jQj_0Z0ollt!i&5D z>9V_mk8$vp=;!kDzQ6zlXZvPMOZ|!Py$LbG>6>*R(5x`+0k973lqy%H$unuBnA-Y2m)XMKoLL*zzk?w2u;#sHh>4N6#zH^L}Jq9Dz&D8JA+t$ujFKRFpAL?_oT4r=1g7(qp$d zT#Uy+u@*j!W2Ae3H%*bvh?r%dqWv#O|C}aX;7E;JDKjh78d4J>S7}u`ZA3Vk%!=e# z)Z4qbm`;aM=GKD6^Z$-hVm6L9&Z-H(rPv9-q^z0kuBc$5qawVfwGa7Ac`Atx3 zxt{imxJgX2b^n at f>;Erd7IT{~=XAl=ye$?p&Dl6R=MY_zGv%$$EM_L17woKPwA$GW zj?S>A>*@B+JAPlwS4**wVoA5<^2VpPZRK6LY4?6thHn`ZPl6;D>%zK_3?RWcU04^A z0VEiw3+qBMfCS at oVO>ZDkYJoHtP9Bi5{%P at bs-r*f^oXAE+hj;FiscNg=7E;#_7Vk zkPINfI9*s5k^v+brwi*sGJpi*bYWdc29RK!F02d501}MTg>@krK!S0)ur4G6NH9(p z)`esM3C8Kdx{wSY!8l!57m@)a7^e&CLNb5^-!WZ*?I%4rhjhHdEuG`&0N0zYH8x!R z=gQxgef59+d8zJ?i?uZuey=`%?rc@%Z@>O>=JctP6+fRi{?m`gj+Xy$Tbti}W7EdhUwd`K z`gLp9tX{Qp#qwoKmn>dXQvAxo1 at q?>6&B2$lb<(xR_ at C)UwZL{oNSMK#&ppoJn!Tk zc3ajoYi33|XECR-Q=gkMIrZ5|&rF=~^iwIxNlzw at AD8gN<74B;jE)->Yl?{;8D%u+ z2}UDYlFg0BX2=tRU3;r{bG{sT%xr!Bd0v-9%j%q=J^nm2#J>`}!fixw|g zx@`H1m8({-S-WoihUKQg8#iqV+Z-m3jERYgHH8H4*tsiM9lbTi=p8`rDJ`Xj8_LQU zZ=XKB4<70ru05>Pm212`gN~o*B~zR_eTw#Wt*q)BdOmd6g_=R$fV#SV1M7X42ln at N zZ0ORx$8{j!Y|vD4*516%L3;w7Q*-wfbPMT9rsWszpWjzK#a6a`|6H_V+Po~-c6%~29IEGZ*N-8Pau>a(N0}GBd$lhUkq#-t;$@VwDfld8C z8E4nj$eFh$tM^w&Brpm8`W+x5A|lq9DJdDrE>_~0)3Cr(qwB-WBS#!q90Eml=uJ>e zE7!;~Z#?j8!Pk&Ye9{bT&lo3^ZjX_X{ov}&>CnK)(6>%eB3M=@1ZX>hr>mdKI;Vst E0IBCi?*IS* diff --git a/src/public/images/icon-queued-11px.png b/src/public/images/icon-queued-11px.png index 159e763892533ceb20e34c6a5d95f22a0827467f..bd99c71acb11fb0308d26760110e66d470317cc8 100644 GIT binary patch delta 365 zcmV-z0h0cf1FZv)Nqp)lP%0$v-kzsTE4^^u$vf|Gb3c at bkcshl+y=RT16V)| ztbkb!&&!=gC^-i-qDI<2f-4V)t zK)KDV?z7kdkL&gNMP(c8*qt`IIBigrC5mE2vcmIhyWJi)_$|Ny31G at EBP7mw00000 LNkvXXu0mjfBrUJa delta 342 zcmV-c0jd721C|4jNq;y=L_t(|+G70w|33o=XvWn_GcdE3F#P^rzyJfRoD&%S{_eTH zsQD>~%Lr1enNV-W at aNY_b~#;!P=6l=qZelx&Pfd{+iG$=p>X<-QgG{V*Q-5W+bo?OL_Ah6SgJ}@I z?9E;VLrZ%GkUA!i8$nhJaWFABI6A_e`~B`M2C>Pl41)G94B94E3?Ow(APF527KT+T zS27 at j`=wb7vX#vYCm%fp%Yy)zyz=G`Lv?sKTp@?D8iQz9ECa8pC4&Qy-+J;BSeywI zJRo1c`|*$Az)$}DU_qtsX<&sQK1duS4^qbj3P(`zH0`?0pa=2 at 5Wt)S;)BG&!3R`_ oHJm|i1UU^ooEb at pL4W`Q0HnjIr!FTu)c^nh07*qoM6N<$f-`5CrT_o{ diff --git a/src/public/images/icon_add_hardwarePool.png b/src/public/images/icon_add_hardwarePool.png deleted file mode 100644 index 3e7431c9602cc829b712d12cccec89e87b90a09f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1223 zcmV;&1UUPNP)dbVG7wVRUJ4ZXi@?ZDjy7FEKbT zFgP18k2C-P0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q!|*>Mgsr<1RzO7 zK~zYI?U!9l990;GpJ{g&SSYk*7qI-4Qe$cbO)C9KynrT1T7oudnix&frtzwYjTgpN z(<|eJsjZ1znbcIHHzp01xMC}IV at pzPx6nqkjfvJ!SP*cR!ou#%?wm7cya2b$vLLK6 zTumO?6p(_6-x;!- at DwlMVLjnlxy<|6SM at GdY0yyyR>`|4u%o~Im` zGjO8)HUOs%Y at 4&_U|R=DDU=P9qeBc|_w|;!t@lY}#CtT-SRuFsF#iU01KB-Y28&MvB!7#cEB% z0>p!%j9`HJ9XqMtv6J4LfmUB_}j+=a-y82N7^jM6TVax+}bzR1?WOi`hvBqTnQcEL3TEvAU zq9?d=wuga%`*=NG0K6U#0HJW0s)}+hesu|HNi4ZUcxw08?0S}CC*LL*j*yq*B*(ED zP1Bf&8U(`;00M#QOh>1weWH%K+9#8WeZDV|QX+*w3Xz at i!aNsS%01j0eZbEHBa9FH zN+KFzwJQfV;PsS{o9m{p?>2Yt{>0urElfrxh#Lk%2&5DUk)`cpkr>q_Yk9in5o)VS z5ZfP5vHb?R5o36GkkXPe98MR(!621Yl^BMBkS4+uh%A-sE{DV2d++x-wok_542C8F z*t)fjipq`j{cwv|EJk_xhM5cX7*foDg)p;%Uz18Tr`vAErdZ{4;Reijf`a at 48XKFK zn4CbGGay6PXTjMkKY!)>p5_B9VtwN6bLhmXWk$1 zp99u?I5u>8!`5wVEG?$coy(LS=l*CI03ig*R_q&TrL*E|lv3p8x at MHi8P&6|+TGo zf$si*|Bck~rsf8Fd^|*Pu at _qiY^9RliFn+=k`@VN0PN1RxBt^K+-_fId*{cWd_Xw- z2bQ#w&1EJMi-IBZe*SP$(-xddji%;?M&LD|_4(EV)NHQi{kAjnz)LwyEE}Goh*IEq ly5eQQ|Lyqi{xqy8{7-{$Rd%;2W=8-3002ovPDHLkV1lsAK2`t# diff --git a/src/public/images/icon_add_hardwarepool.png b/src/public/images/icon_add_hardwarepool.png deleted file mode 100644 index 6eae0d566f10503c7a6a7f980a9d2b6d0e6353d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1133 zcmV-z1d{uSP)=jNwIZ{&3Ukwe59?r-twaZ9FchhXPlCe-aaHytKFHhz`y@=J=!-Ds#8@}$ifduI z#dO2Y4M8U^O==T!yX3aHH_82z_&cXpCS+aIH9V;!>DETni0v#}|NQ$g0gK?a;E2X0$cRfrBO at hcPZ^|Mu2fKLuvzN8a8WQTyPkNGS2Ds&MtGT{CE=(0 z_T>A0XMW)AXD>g6!d;;VA4K{1WRM0?&fxOt0D{50a5|j)z0={~ZA=h2_`)|AX=`fGwN=86 zk>9%KX&gQN4nl&6s!9tg%@zDx$CD{O#){v66|>1%bUf0D&W=a(9{YS>LnElBs=Suv zd2N*yI~pCh6S;?9gHxCe{*FviM1{2ycJ8eUHk%#e<2P{Y_AfYipa%&tjx>D&m4P*t z+A?L2iV{4oO?bTZ0d%yupzeOyAp14QDG8Gl3vO2f%oZy`6CpIWG$X~}ngUf(xe?{S zWvkh2AG`C{BH0sC8WXVupU~dkiKgal82|Y?BnrC5#;tP;Wr at qJ@~V^tze4ADccJWx zG=mM~C6irAXHZjJgRZXqh$rIElsQmJmgm9cdw%xvkAdzZ2lg&2yF#++IXdGh;ndaE z!D6xS^dJ*lBac<~&6P5~Ii<-n)NKAJ8a}zTeJ8fL>rrdBVMb2lZbaa7m{(bXADZ%F zu<2W#Y-~2`oafq{*YjKL_L>83K2Hatzl|RZc^>K)BO$&Wt2aBrb~W3_41RXYc_^98 zzwmU5N4iET$!e1Q)T?WT&l|vQDx=iCX&m3*y*J0wXMMdBIr1<^;DvJ{O>mtKq)e8d zdi$2k?f>Ntw~rFW;3uDc2toLp!xn;zsZa`BET0#>Qms at -0d@wzPSyLY_b^)9JosSX z)DrM&E)#2p7cs(3^;n_DYl7eZ)9}BA|0BQvgiBR+n^usz00000NkvXXu0mjf{^cvr diff --git a/src/public/images/icon_add_pools.png b/src/public/images/icon_add_pools.png index 8ed5b10ef6be8558e4a6a76241ae028118185d8a..14b6d568c9f74b8fd02af967934429618f5d4a84 100644 GIT binary patch delta 784 zcmV+r1MmE!2C4=jiBL{Q4GJ0x0000DNk~Le0000P0000M2nGNE05!iiwvizyf6Pfl zK~#9!yjIO?6G0Szvmg0tQmxVGrGga;QuH7myjW84Dv0R8i$_63Q0zg_rZ%P8gEudt z|A8RtMNqI*>BZtfNUb1J(1KL4me at Ag?Ci|=X7(eKM5K+a4<0*{eLKJ3`@J_aAwme) zY_q}vK^rYx%Ex1N!7z-x9>f at bf9O(rZ>V^85~u5DB{K=KvByTPy!t%*LU6j!;H5WD z#CY-YMDfPOW0FtXnV`imnf~s52Z7h-8iM)`9g&ZL=P#!Q?%Wz&3-OQWUu!Nc%ItLz zi!&ZXHS(395-0#$i}gw$85uM1dE7$w5y;td7l2qh!RW{V_sYPk at 4+;Ue+XzjX2g3S zW?KDHp$573^z_21$3N8M(a9{VIu%GIlTc6ZPlhCk2wszVtl&UBrpW6cwq8-0q3bx1 zikp#oE#0nvAj0qbI3YZsOo0%Ky7aYWTSt{77+I@&(Z}0&pHQ90+(n?jrhVz;3TmZb zmUL0fA_zr2*ox4$Um4z6|lYW*U9tUu;NmbF5cc|luTEbX~awr z2_{-(aH|za*mac at 84-*%^+f1G%cNW`zn#9i_i!k0-^~wdf!X2xN-9~?<)wKL%mLw< z5fQ&YBmx5h!KNnuSeL7-tLqFtJJGY8^9jfCqLX0i*(k(q6VjO^f8?^Az!6Aitk++N z=0>1lcc~r!9eoMi148ung50(QWYP&NoC&sxZNX}OcQ$oZG#B-D#`6d~k4GStAY{u- zsRWG+HQJhoQmKQ2RLpnT`bP$fkiK zBhuUjYV@~rQpPcPW_q`PxV9C8ttk^XkuQ-;T at 3WvYFpR%1|AbFAPk5B*KR-EpsVU# zy}aSgh{s48AG^@g8+a+MpfBhkGOI*WcK>QpYe&BsH_gcZ_#^RKfB^tLZdj;lIfa}6 O0000;;Ef5k~e zK~#9!v{k>06G0Syvp>&xNm#_7g``js5z#^r3*mYT1%Ay`W(52O*oEv%BMaGn4G(E|I8r1G8^-XXpFA_syGKCWL^EY))^$ z80$Zqzh2_QUM`)VcQHhN#XuPte_0T?7}aRb6g5s`J#frGDnC9m2k`my at VATi;L(i} zV*&TFHPuYW>nLzNCk2er&OKoK=5ufz!+Zb8^c8>|`=w<`>m5M#8rU`)Tv<8uXXLmE zP=D1IZD!zYMeyml at ABqhX%Dm_3o@>a{?TTEilE2J*z_4B0L at PTt(Acye=-SNQ!8c0 z1%f-?u+lK!M5jZ5 at C^WOt}RpE<O>F3(lukp}N9s$=2!ND!$m zEaZq&0#ewhbFB;k84-y!e{S%^N$qMcDW&cv47k?99^0x5av(j6POVmZv2bDMp`QQy zF29voESC35dl(Xg_4fd_s}_o{SZ^7v7&EaDG_lp3jXfg5bZea;2u at +lVc(J@$&+?F z>YwnJ3p3zh73Fe16!Hzq7r}hxb)r>E^?1*?dd6%;ZhVWX*ndege;G5&2)1nxAUnyx zov4BDc_7nCv<)UWMVW~n$9#aGS6lfn%dg?X)dTXT5iUbE+l72U72%~D!f+FD!{r`W z7+I`Hi6D+tG%YepmOs9K5e}a`C>Q5)AruN3Iv#^HPXI(hQE2ZIy$_boj738Uy7@^T zip9-1{0Xj`0pB0-U*RMx$!jV}nNggQFikWpgUYx1?4 at Jn@_PJesv*qM*)>1cK2;L- zV3jZb(zq_1A0~mNfr-faPXelpjwD+3M_c#CHu|UkTYv!okIFbH>pEC#00000NkvXX Hu0mjf3BYL- diff --git a/src/public/images/icon_add_smartpool.png b/src/public/images/icon_add_smartpool.png deleted file mode 100644 index 6bb07d7cca9839042a779bf8a7203b16bc6cb830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmV;l155mgP)5ZRZ4q=+JlAbLOqnqQ(16_vfd^?<$v5d{?y6e`t+R4^!t6ePsR2Nn&T zuld~m+y0N+`EO0;YHQibFCIADd(S=G-}#+;&i!wUbB@^(9cEGHz-J$vF*c&H>V9}=Hxg1O#lhO{gM*Wh`1Wgz|;0n zo1R>>W-FGI?9=AeGX>X2FL+GTM*~Oi5nGpi#Wt8S7HdmqO29R#eDnc{Y&Z6Dnf!s$wGc!5OEWT8X{Bxe79IDniZ>9Q^T9IMVgUMcSNhVdmWrC7*;kl;4No1u7n(xt6 zgYUALiCj=5Ku%dVVA7|DXM(^LV>pnYA2wr%`KnZd7ubv{fyht^*fpZyQ(pjG1Hs<{;tifV2s{B zE(Id&D^tb%c$QH?|0M9qBS4hdGXh;r+O2KU=%k16Qs;r9C-|4IKj^bqe{?wPv{bQK}|DW<*fB^u) WmiNB)iZKuX0000004R=004l4008;_ z004mL004C`008P>0026e000+nl3&F}000B+Nkl-{D*(BK+UWz15*os!{LW z-m72Uzjc4DR(Z_#YXeqotG#;g`do{WyFzY5aF9rWxq&?Y;V?CpN!}B(HaM zbyF&K5Jn-BH-9FWoSGnt?ctA(pL_GC-^P;Vf;z|FfAU$e!N=PM9>Ud{#2D)J1^k71 z=H}-Z9sQjkR?ok9`1?-)>num2>TG$iYjroSc4=zLG zQlwkQ#+(8~M8quC8t`VSm96c?4wA$Wh5^RJB-SF5Ab-|UD74`Fb6WxL=0P>NuDj#$ z<7EK89_-u!Gyyt}W5Ot)USGh`4mL>$!;mP7h)s+!hR7IF68{4A)PME#08u(Wd~N*d z9 at lko98F>^aTF4Ub)qO_x>7;#h8udtQGCkv+#LWGA*>rn(M4odM5s)SUHbgUJ~}%( zag;`^C4Ww0!Z0KZ0V4 at 2{X3;Ly>giuz*?+htBY5xI=MV*F-|9m|Py*-wniy-l zXWN01yY8pBv6ZfZ0}3X6%eg=2Y0I5|0k1G#y)bkLz-e!9-{&Z`St->oA_RdUtQ$lG z$8jDk_U?Il*TJI{)@?wP%Xrn`8;c(atikYklkbe^sj9SNAlbA(z>ZV|jhFTtCf>FR(3YsjH zBD-t+@`>=;g@>KawczD5=cNqOPaI&U$1r~R1YmC$eL0}Bd)FJUdTnc-(QA4;Xepwa zS{7M`KKNCVi9afFZQ|4M?+zUSrf&!80L?(h%KihpbEWk=b-wLB<>og4hzTwyK}+pS zG<)Ub)UU^efC^AwR!FC5)e5u#`7Gj6-2=b}=F_>@Wj!aUaym^lH*K_-L15CIWNQC2 Y09G{U6=A;BzW at LL07*qoM6N<$f+?gI+W-In delta 1063 zcmV+?1larM2)qc8B!3xnMObuGZ)S9NVRB^vL1b at YWgtmyVP|DhWnpA_ami&o000Bt zNkl%@PUzP zr>3XotFP*-?zObm at PA+YelIM`y6btUl;o4+rFU%Gn&7rIN^7CiXQkAqPfjg?*BEEubCIu9O zvCh5a_i)a~Ui;>D^zij7g)v&AK;&cvK>!}Jk(~k=Dt`k^rjWhFWWq8eAYQ&>{Zps} zxgAfQuPoKTM{#^#fR70RybD2WL#Q`hs4cf=)<;SN;tY2>76}ctb6> zvhZxW0&3=5w8o0N;OEsr_)AD>^?l~**1{UoMx*iTFYk`*?)G#0hcgk|3r8QL@{ujT z#cP#HZu|4EH?}3?mZd3ovkqaQ at c^7;HE&ebjy<{1L< zyfEr3`HZnW{ag1R+JE at CmD>CWCgV_Pgy5p$ZlKY}3UMttI0U_!!drtcy|)*l6-0o+>a^#Ud!(ZESUdU)HG=EdgA_{}tdcDguC zY=6a-k9X|u`grr5^uSX*_aM$9CP8tUNbY<`u1`qRb4+4oa=>`cb2NtW;TO4FZW8ZV z^V~v9F()|&i4=rFnaR)w$XXYXgtagxiUsJ8gZi;nfEkaRR`S+r<@x|CY{D{oyF+5Y z%#ZLu)fRwaX;y8xdw7Ha_YElSD0Nx4>whigwudc-sD#6i3+{RCwLq^_A-wwA%IfvA zU$*C`KlN*~m;dcNB at Rin0$MS@n(Xv=6Wt!?Dww+uKpM;nhFM9Q>Dn7fL0`bPdv;2_Qb h-Rs9>yW{^YzyPfG;6H4dM9BaE002ovPDHLkV1mQp2-*Mu diff --git a/src/public/images/icon_add_vm.png b/src/public/images/icon_add_vm.png index 4e9859b5236e85adfb5ac554f17f80ff96a3e3be..0a399d7e8b1fa19950e0da7678a31adde31ab284 100644 GIT binary patch delta 1052 zcmV+%1mpXT39|?xiBL{Q4GJ0x0000DNk~Le0000P0000M2nGNE05!iiwvizxe*@J? zL_t(|+O$<&XdG1({$}S+cFm at 1cVopCl8REL1Q$zv at WE;x`_j^`6yMrXp&)_}MubvH z4Xq+V8!Lj+rSw5x`bSFz at u!Gd!6=rBLZVauKIu%`0#y#=VNs?gSlH}dRCA$SFQ(FxsX!9e<3JW>TPU; zZLv*Z+~zC_g#yy)etdc96iUC(;@qXr$anzHSM+f}nVD55?&@Yx`-v4p_3t)o~!v=%2n zxPYqNfGZ_j*P(w8j^lO>e at ZW8lIY1vY{Crd^#&UCCTg~gO4Y`Exz>H3A9)z#FF%KM zYwty^UPq(ZLW@{Pr8Iaba!%@kkgohnSYk^U{s2x(brto_o8v4){Cxd4ygpf^Q~5o~ zm5~uCLzc`oUUsckD-0Jq7(H=AYgJ1#axhvfk&H>QwED&V2PoEyf3$j=_(zwo;N4TF z(If_*&(ikqs4~rjPugtAP}p1t20IIS1y7^hc3>m~?D`*=eD8gocxJ{7{%TN^v>1eK z+uwgT_TXcke2lz0quER!+NeXtMft-|(^{fD+4sUYDm7cnIl%HQNs_u0NnK>K*>$tN~s==AAEhdNHFc`xRVx9{$%Q#Z;?zUH*iRpfw5ex{hQ&s?k`j;pT;dD30cBwZZT0& z7<=~Y9UUAT9HGK{wp1$J(b&+?5G>0&*=RIw6pJT5jD*kH<{ncsIyWOkNvy<)8Rf}ZdI at 9sTUSObyw2jE0t^6> W+zGw>Sx2#yIMiBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;De*`c| zL_t(|+O$<&XdG1({_f1|ZZ}Cc+5AwArh-06wDzI+18Jx}vQgi=AGkXjLNQ}!hn6UTQrf5&{rs6>cwZVxu^RcwwZQde}++r<&{6M zR^Gsq`yWNa^TB%&8588oG%V6E;rR-#TZ7}eXt)wmN%*wq`4VS;Jcs4gGUD2r7Gd9V zuzUBO+-<|d`0S(OSh}`?Pd+`v#nEtW%H_~o=)um1?#JBx0_{oEDG=LsPfqz})N z^puoGm_RJj8Dxitht2(`f7bNJ$$eWWlXVz`sR}|$eKUpzi`aVmt=KX&fVrO+VBc_X zeR&OQl?r9#K}to?g$T%a5U6$*F<$9#z(}1*!ZsZOArzBL*VOY?nJd(MY&?@GoNt&e(oH;`0_h!5KL0} znoTV-lb%c<;*VNY#uvySN7i<``LL at F6@D3|-$NR4dKV2li-)xX_tw9;;=WI+YtO(98-*M5>WFcRuH()L$%G zC8>}|2$7}{o_PE*ADnta&zhvz3EVo_sD0=$L3r5Rux-?9^(Ed)J7~~4J^RD#-fS*= z3twar;@^#Jf4ZOXJg-!#R8Div)7m*MG)W(KbsUs9aNwzj2L=X4rIb&XN~JbqBO at co zWHKK(j&o&t`n}I}uQnGKfSYDrBoyO6oY-)dr!x<~$;m at 6b#-?=-(T!UHk)B%T1+Z7 zj|E8sjvUhjUO}x^J9g~o(J9gkVn>o4r6J-?FBY8j5 zK~#9!v{hYb990zlX6DZB>}J*`MjL&oR)a>Vii(IJmPCB$OF*=F&+}02vQSG zN+cGAg0xh9 at S$&_R47y`HpI4AY}FEyR4UTO{)S}Z&SoarnLB@;dv|s^kq8^XyBuck z%$@uFoOA9daUA3S9<1?4p|NM^f6eZEP9IWLwL7~g45Kf(?;ji-`DB8o>t`jDBx>~0 z;T=ExdH%aN^5<5?)KA~UViOt{fo6#RPI2Ai{)kYY1z}MbC978R6`%qr0c&R5FJgFjRHf^4jM%3je=oiAIuzCc zwPhospo*|I15Hy?p!Ezje=l+x+bSK(+`ls-i7y^5%gNWzx5Hle9>qdI&d*KVz>jCI zA_ysm^i$%Sf*X~f)GH`;BaS23jx(6GOV1(-h1_*f%xiL!6Q?g>$IgLu7uJVkd*5L` z_fIgLJtHll?Yvr$=Hs at ze|lx*g?tf?a}q%iVEe1Png;mli;qdUUt|KH`?JeZtdyPr zbbo$@ERn`w;WJ^T<9=`n+gWC0H0mc>2jl(bai3jvSl7f8@*sILkExD9h)9 z821CPYPI_FnO&VvH1e_K{okaT^Y1+jvpbaO&tD3~1PS>qPh9o}ElD76^4f4$u#1-{%QpahCU9vFKY zg}eccF;YmOX;8@;Q3PQi)YR>ENyUu5X$B(j){bmbF)D zd>P4elP-5qf0#`)v+ at v)&71Gp-P*dL%W;-rnk}%b>V?_aOQX{?k`AK=gp~ym)*1iE z(^^A&qrd-1M at PqF#bVJgO%sM;$ntg^2aavK3+3{;1N-;)CLlZu((I9x6O~9&q9`P! z8i%n+U`-S!MO6Tx3D#>3(G1JU25T{E*pxQS-vSH(6e=Vr)uxseD*ylh07*qoM6N<$ Ef(U>J9RL6T delta 1048 zcmV+z1n2wJ2(SntiBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;Ef6_ at r zK~#9!v{gZ99Yq-aW_R}O%j-+tdxjKyusNuQD8?QFQmL3j!ILz#3W5js8&Smp?DBHD5-epMI;p!4T(|(qqGfeo++4^^zGZt+uhmOUH_SVFK%p7BG?~h zcV=hi`~Ls?|CwcJn&NgE?{pYre{0{)of?TYT0C;(oJBABpBPjGxhNEPx|ylDyi;2- z)&ZvowCDRqCxC0uZ at jwyEIxl{|CWF|(dG%tMBwflsor`gk!;0A_b|NsEi9hX-roJh z>%d(PXvq@)cVO`ZOp~qOS%2Zy$Z-pBf9i~i`Q1B`G`)Uc;x9e;Y@`?df0ctMb(s_% zF!Ng#-~7 at G8JpSxi>Ht>+paWFJ&Pw0u|c{sByk8ol*jT3v+`^zvM42RUeM#oA1ioi zY%EtDf)*9ld!Gb=QCu6oIsVo$9*O8{Zt+L-Joys(GINKla__(N)Sed?tgmreQ{%~Fgsc_Ra`0$y!DlwvDm^^q7f*>S7fh0-s z^!~?S83{>1Es79^p`MSU7M2=5F3;5=A^~z9TzR? zh`@6%A(8 at q5K!1LoTi6Z`e=HYMvp!`gg=*-QD3OzhSStaglaAA;k8=rDH``s>m}x| zf$E1O{8-uBtggbZC&|PM*e~OL`BY;(*>E9)ISLmM;`iCt2lEtqFZ1kQqU%4Ov;3 zyNJu<59-0HH;3+Sfl5tnDiB|oRU+kJ_R>{!*+3xFJ=Q5Y2E#C at F}>!d+mtLi|ItxA zbYPb{jwFkR?b}Q0c<4z<2~&xCfBYyclfx=7aNb1{S};t5fAo&2wJ5Q)o7Og6m+};^ zBM_CcjsE^^)LnsPm0;WdOmmY?DV3yX2(6 at H#3Y-UMZi?f7+ot7;)Hh!9#JG)`NP}u z_So>t^WRS%-{^`7tM?(iV;2&G>(Vt+NqtLKS<2E(ri2QFzNyng>{7`1)%h z^!4=(l}e>zxm-rEnB6_9ggwurGvfx!D=X9Qoj$!+<@MixwEx}M?f&WiEx-V^8x_mc SF($770000%3n(%SqNvQy-jv;GcflY86f#)SEUVesS=eBAw%O5LA;n8t zctgbmFNjp234~cHUP>($GfWXIN)$3wOj1%bBnoE%L4A7cIUoFX&WGKzXW#$1yyy4z zOo|LwC at C*w0CE;V+S}XP+S*!LTAG`io0^&$8yg!M8tUuo>+0%iYinz2YO1TNtE#Fh zDk{p$%MIo2R9WkiU6nHq-OAa%XWov}v8C5$7oId1oQN#B$mEq}W at ZNGSI^vZBtGk~ ze8b7;H3vm&%hJ-)0#+U#z2cBx`T_4nyFJr(4w<{d!(Qmd_3R1M!g!FHa=P$Z3$%(jS(pv6PFUB zrBjkdcMKC4+JW#%YHXt857e<{D9bUZ zTqMD1u}qH2Cy1m$Qf1JDKs1ix(J0D{N`p|TSS)-F{ ztQmF8OX=8Iyc)wC3w5`y!%>#*h0In_$3aCjYa;BFg^-BEMEA@>p-LDeLpg at xSx(Ec z$(qjNhZ{M@#&StkG&D}8a#TJ9^{m=c&j?q zIFmf=Oiz;rmNQYj#%Q7v7$U)FP!TH+l^qrH! zMS$c&T~HU00U#Kr3+e(g00hHyL0v!wfMA#|s0+vd5De1=bpaUwf?>L#E+7LyFiaQJ z1!MpShUtR3fD8b^FkMg=kO3eVrVHuFQF(JYO$Bi8mFnW~#NI%RM^%>zke3+N#&>@2d zJvY!}z_ZWvcX#XO`m{^mKE0iv>g9wWzIUCS`XVAE(D9DO at xTY^b08#Z>d>)X8OQ5a zWhaukrxOydy7tyq7tLPgK4tNI at s`^G8&5T?tGm`K45M8VV at fK0i=BprLmCZ|3Q5eR5HyjyKGQ!blMl)?y+AauMG=fBl6iAykMzjiw7J(7{0YMbxDhMKK z6NI#wCQBPq7ZLVFlI~NHC}+^n`+3eix5a#T=IWT*ySnGT_x_&eJm=hVjUWivY#D}8 zHtsrkA_?39egXF~BjaOb&uNV1r z__6>GN1?+*Jp*83;seVo%d{Wvpridr$#E+65-BB82&53J&aXZDw8o)+Z{YmV(siu9 zfoOCmlapVWn*Pq|Q{626S;Vnzgb+w65JHQ^{znvgS+>di{49+Pd#Q?4GdDX&Q*#rx zZ6lE*sh?*Vvv>G->-_agHnoUv^wux=3N)I;&fH`qudA#Abp7n z6wmj(z;oSIxML%wKnjT^RsgPS>1+YW#?ed8L?^{ZFt&y~xUFI~J;RaI4a{`|Sqr%zT?SSl(`09h=@fh?9|$BrMPRoD&}W%cUhq~uk} z$%%#VOf0qQt6t~xVYG5aj~(nriG^Y3m46wzaYjKLq!=4QARQ{ zilibVs7O6YX$=Nl1gX`N8hwOXtx?TYE5p at c;c8{5QbvU0GR3SpvYE4H&j^_{eP+nC zzzP0=6UIpcB>_@#fYdKwyx2d$Pb~2sD<0$PHyWH51L^-G;M~}8nluRW#VH(odyJ0O zV1eXm1G`COqv%MET0!HcULe+dpdYT3!^o9 z4ME{pv_`Ep2%|+zT%nT at LU2z{bC_6 at g$frjz34wMdQTr6NnoyQ9!t(0?uxmNWb at tl z?rtMput_+D`QuuQ?}qWYTyWtFc|4&j4{H(A(*fLhkcv>@L|?y_J;5&#GmN72LJr4h zG_sAu**a3m;kmoJbGUpCpU(mgmLWz<;n6IuVPNwjZ`Sc8402MXr&KyEMz4#@bdi*Z z$)q=GRm;oa`qquK26oenvgJArCmPptcx*1Gb!AZK0Vah$B!N>pGFYcmdp5tmpNb at m zIx^gV`Aiz_L07(GYTLD~o&ZNgcmf^*7T1-<6$JAHLcW{ORWReN`exI6+fx3PsioY5LxXq=OcQnbo!*=OFJKCJD=&Q{sct$Jg`7jE2 at Rp841gK$U1kco zFjPlsaLQAq!IcC at sS5Srv`v2S`I?^^!~(>U)0)dSkKTHeALXWv`$t*6c~P_p6kLQ0 z;esLnWk%^jxS$9?nNhkBE+_&}W|S_33yJ`g8Kn#1f+7HAM(IMhpa?*jQMwQ=C<0Js zlrDq|iU5=ur3>MLA^>GZ=|Z at m2tb)px)3fX0#Ig at E`$q;0F)V}3*mwy0A)t$Lb#v^ zK$%gx5H2VJP-c`agbRuQlo_Q9;esLnWk%^jxS$9?nNhkBE+_&}<`1UJp{>({(1P|3 zBk1F>YW(}JKmTZ`uY3LK_m?kz`}KJ(XnlJ8%cF-sKe&JIryuXu+_`=0X7!C9u3x)) z1vETWRepcr{JFDdPMt=Ff|XHbzBK1~Njg z(`wY=b5&u=P(mS>;d5rs3Yq!!jOo*+PMI7$Y2sHw69T2<1N_HH#C~IaeZ0NKjP?|H zFof;`w~- at Uhx2({4x8mNZ0L|LzxaIcpn*(hY(W2hef#w8)w4(U&$@MW>eBhsPL7{+ zbg;MUVB6lNowXH%;aqQH)q#=1aH0Ea=ms%{T_eNUzON)`jx8&;+mNB=!9L~j)@yBK z1?>}@I6B+GizO))Tl=vTHFdZ}vR>qBYdy_=4%T*622{zWG z+iw#OJ-aTZ!Oq*xu?JhP-(edxd%fyn%E+UO{riZ>-UcgH?&GpEHg-LOa*JOmldQXr z6{H?MzIKGEa*%f?`=q6|h1K^G3~~0oQctN?IeT%j7wso at Ch3j R89Sq{uW(RidYOqa>K~7S%X0t# diff --git a/src/public/images/icon_addstorage.png b/src/public/images/icon_addstorage.png deleted file mode 100644 index 5536ecf70e71f46b4cd0dcb9752e43dbee98cb35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946 zcmV;j15NyiP)5l+SAvR~*1U?>X7sS;;0 at Q!y!+olViUOG080#8Q(+-O`gi3B7n|+GFXZ;-4VJ zUV1Ifr5C}ISWpPt!-74uCa81`7PGV2pGmfHn^|#Znw_`PLnd{zt0nou7v8)FAHLtu zeEAB`^Vm-aApp3LoSp_g86JB3+Vk2b00aF|);HF^1 at 5I5(rEy35b%ZM^f$+kkK8au z;tU-droVpxr4*Z+e^FVlP%P%Dtd*~(7SiAC8+`HOnYqb{sUOdMI729;qm+x=R4C=5 zl%myY(P+Hn_r>3M`seZ&QV79r0$zLWw(rN~L}H9cqz@@2LQ3Qzfe_M9K{$Mv(fB(6 zmt|*V*Y9SyemB$QRtS-d$43!DAcaKwKq>bW#?Y~0gb>Ltu+vmHP1U8MM+ at +eHY&5NhL(*?wN at PpY5-p?@G+sIs3aejK*=dwgjE|4=ODaW3*9nIY6AFfKmCN(mCgn<*d_G5P#NhECk9NTJYg+FN z*KN|<8{yKWPkEBbu=H?=N~Mf#H_&yRw+4?g`_V;S)GdS%JK!I#ocRxMW&T$HewzDW z4_LJn)#?VZ5rZ>l&oVW2nx?yrZ97<&MXgq&SSYakbQ#a{&_vrzd7kIBJKlZsReQRw zv$XU8T at Mos29ZLtW&KSdU%<>|$*r0gvG~qE>1^3)w%(|tw>QGclkZ`gD?C}wu#$a7 z-LeP-0vw4Ba(*_+i at NoC@SU$__I$SwO|`m#5i^*aJVhcgMss@`+v!#Tpmj`}coP(8 z1cSlw;^He6LQ1TyE%Nz1W-iO>s!7}!1!#0t{6BGDxhmPEqFyJ^6CfIma(*^Rxm*Ic ze-QAkJ3rq}&VBwR6BDOMyg%kog^gv^snu$fibc#^7U0&t!KsDxJTOqMlx|E;Okud0Rke)x#K89C|{=|uQua$}gJkR6E;2@<^anGXv7oI|F UHgb%7 diff --git a/src/public/images/icon_addto_smartpool.png b/src/public/images/icon_addto_smartpool.png index 08c7763fb82580fa7b87b5600672fc0274cf01f0..1594358a175624a0243c5eba427c51decf1a9949 100644 GIT binary patch delta 1086 zcmV-E1i|~I2-OH7iBL{Q4GJ0x0000DNk~Le0000P0000M2nGNE05!iiwvizyfA>j5 zK~#9!v{q|uR7Dj2?qj!U7q?J(v`Dj!2B;-%M8Fg^rClHdiD_07{}`K46QeOSf*50X zB(3eLk@!b{n3#xZ(gZOO60#;GT5EU+1_;XrA6+a`r7jInE!*AR$IRu-+`DC4N?MwD zlCx)K at 7ejzcjlY9t2mB>|J(H3e?TF7fA6;X0>5vss;c$*NsRG>re%G;r|r{Tnm%|{ zf{Dk**U`HD$E&{_bGVh7;E6LwoDbXH>S^2kW?0lSYbIoVB2!nsv=a!Md*<*)f9DnZIn at bD31opll-ne~4l}BXwz-ws0iN5RFF5|GhatUlDEFgrm6Ck-(Ao=?AKQ zKb54ywoLiMb3I29Ki*AU;RwI971e9Qk}fA2iX0FV%iUwK`{+7-3oR`zpBRSds|DL0 zgQG2`1t~HUl`EgZ+RYJhVCAB+I~2uSe7~HYb7oL+hRl~^XA;Q%f0H*52n5!wsCj}C zOqkhG_~ulipd<{_7=@~Etg2s6)z(dDgP5ezMo zn)1w+SD_SC(Af`(?ZScc76OZ3qzzQSNKFHMmt at N-Dyw7^b7qpt*cdpm77Vx;6BryT zr!MH}bUN`|_1x9_f4WmRe0~@&*FKDmRV&eTU=Xp3|6wFsir3dg at aNgjsC^cmZ)!$p zc_ps?{u at qwdlWYY2Qa^^%u^Wcg(pk5?QUx|UDuQEY~Aw8&~00d|CPmsfea3v8%FZF zArnshk%nK_vGLjUSXTWQii1Mt9Kn)#sHv?*QJ{!cWK#Ncf0d3$y|5HVVy6+mnD|I- zZ*RZU+uQqI#|w`*J2#b1DZ#&oO(`|56vHy9 at 7$D?it{w?JU^NehKFljFg3qT-dp1ng?={4-E|we>y`X62ZsK&3L at 55Y0~qv17;ENG6lCxDRx$q;#jZ3wJNYyf~M933&C=?Ye$wy`Z0C{}? zWB21-NIu6)N_%nEe+KRcqItIgcXc`SYkQ`4M}PqU6r$HPLp8j=?*IS*07*qoM6N<$ Eg1EK~kpKVy delta 1037 zcmV+o1oHdU2&D)iiBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;Ef5%Bg zK~#9!v{hYb6jv1f=FaTwCMz*f%#R`q#)qoJpH^)UHE}@$rX^9Nh*Cmq8+?#$g!&*p z32~_)r7b at 6sX`zvX;IT+Kv7Brqt>4$F&5&QV029rV>Iq&**H79cRY7yXS2~=Sqok` zduHdJIp6)hd(OR*VHkLyL$Mzue at RNc>-fH2&lFtW+~FV>eq*qAxma|(a_up_6$Hrw>oxXj;d$&+*D0&*C>-zELWZa9=T_Jhf9 z|1$XH+vgKeV5%pzXeOi~nFdn;GBIQHD3h`DXUoS8hMQL&AkLXJFWW{7f762L$<0Nx zXf*mW0W6?DY6?Jc%y at -f%WBGxj)ZaP&t8oF7ovBH6=!Ia_%`q|_-2`^s#-%V)L9Iq z%e+0z~i{LcEG!X!Jg5HZ1U- at n)}ZU7F#dad{R zuHD1M_G at OZ#C59;Ze1Qge{Xj`<>J`-$s(-!a4vz+97%{oBK0j3KW*2a!{_sT$3 at AK z6r5Oa=VowbNwlJJIW~T}9ui~V0^HESd5i!VHg5A^#kx|8a}s-JQclNgfK%NQaJ${> zO3OFU0u<<6hUDA=xSOeM6)1TwRMxJ?nyL>dnwp#v3tO{kF)Fu}f75(EC8a7?T^5Mq zngQUPYb6B=j+_~h3fKC;9bX|XeJnNuzuq(;=O3cVDMBLl6vG1#!H7k9MHy8y!*JjQ zu at wpPNLrW0!uIwaL?V&??G=SUylKF2ejW&D4HgNdZ3cE`_ at w&ytL>G%w?P`vCq9;y7z* zY5BLStLyNwor{cbYDzPf=i|wk>29zqx&}F(cLR>%A#?y_Tj8C9>Gy^+>RCAO(rxdAuG}} zt(}@ssjI6yW7yf*84yg#gjTs+fnt{@$)4G#srV==&PuWgvcj>ku}dD0$1m8Ch2J5$ z7(A(ro{cS)2IeHM$4Juuugg0dfSfD126oEP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG- z6f_mZ>wo_M00U4-L_t(I%Z-%HZ0jW)Z7&!Ct-;QxUQYniPj7IJ at c_VnvyQij+j zMBRj=Q4pqtotvjH>K=?q~ z7ayKy$W?$#pWi at L2|G0=54=GVJG}Q;t61w$m!LR`r98pf8iFMl${n7c{%{k3Pu at 9+ z_r6~f=p`{JF{misdSaVkZ9{Xtf{`smmi;{l+Te(2RN%Z=djkY8zns2+9s-;?)&W( zKKkwtR25N=N`M#7;*H-?6#zave~M*JkW_DTxKgH2%z_sh?QI at 4TC8Rlu$5N^ITWQE z+h;f?`*J8E{M9?h?P!iS3+wphB>>E!d4B87V0nQ#mm*AoIIn7CXsGbsSHB{_*YBU% zYnCD`EdEID#pAs7Qjw`#-};AL&o6g7?A)s|6Vy01oguh%QFbF(%Ic=77>ePg%NahP-tmnhyi7(~}2q!d&XQ7~bS?QSv(_$*Tq8RSyQnh at tK z;sxZXC3Y}IA_68&6zk~d4M9W=iU&1}WuSY%N^o!*!ZD!V5Qh?|fKiBgXtPe3X7qE| zV<>*`=$Su};Ysr$YxnB- at +`h^fK)mU0zT?Mr$x}b%iNI+6G!sP000yS1^@s6cz2e)00004b3#c}2nYxW zddbVG7wVRUJ4ZXi@?ZDjy8FEKVRFgRU@^RoZ|1T#rQ zK~y-6ot0f|6jc<*fA`LGyUXrUYHb!sO-ZqqE?rP8D#%BRD+Fj2VhmOSLW(?ShzXdG z8smcrsf`dZDjJM0YEq%8loo-;3WjJRD2Qyk^n)4-Wh+~Xv35KAIpagibj!Acc#=uZ zoOA#A-E+>|JHjvw?lvLBxcB+)B7vcotzG{@BS1sl;V1oF9p_SnlbCuxi{gp+p1F_B zsjA#o$<^*IfU~PYL$oxXd_EeDHg){jox0QHP2a1Mg1p(v{3kqdfJ3!M%zXdAZG699 z;D^&^(Cz~^X(jIbf)|S(FFd?y<97D%-v_|^pVgwIJJ`9koE2U#ZqGdYzDwBbj-!7C zd$3q66T&8htSc)&XmKd7R#m;rlqq&I-Zz}i2R;|ych<4v85e83%b4yOgJsyWj{XxG zNP(%zLpDZxcciHifX*x3gu`JopPnXgJ(z`G$zs>(KEC^-o-NCBSy)`mbeES$=D6u> z_ou*8Dycr+3P9DGBAiYKPN&1n2}NMH3LL5dj)(Zsn8~H)UdnupJXbu6LeD&Ma%Pe} zBZn)OeGCl^9=&|AV_ga)97~w~$rC5=6cvp at q{M2qU{&Hs1r*f+83i1RNBOO#la;;( zmMs7juVl#9En5I+X=x!EjUc7KZd0%-Aca6G5>TA zHf<+=p)#!Dd2|5)+E9FC at Nd-qnlk+4*oPGh(T0Z+LSVJ2*n~hxkpz;cN&>}|Lnz{+ zKX}vB4u*mw5G`rp%|zFxa;hx00%ceWd=5X at iPEl zRz95qa at rISI%!rbsu4qsRw74%LXijwx~>z8#Y~+PNp@!@cjj`vH^BAY0A8<`bLY?T z%F1F^D?V&m5G*#-bjwJqREercgd8~ziG)rh5 at DeK-?2)PEgaKLKN5|Y{>L93;AZe| zR+lVi<1{Dxn$OZ>&qrotBT0ZUrqlHVnx>6!SF$zkC^7w5G&U|*cc_+Ar;bta(k6DT zT1rpfExu|C&_6Aoblb>z5`eB7Xxi{ty9~qN&NI43Y^YdIQ`2#VwJ^h4cpT{FjsBmm zbX}!-Pc=kCyzR|pTUHNxz)wsU7%~k**T-olyt`V at UoQHZ&szarf9*{(KF}Aey6E at 4 z7a9zCSFSBa&Mlz3r-RP6u7*TR-}%2F0G>I8)9en% z_S{){<%Swr0ua1$`^2Kfi$1NcscEX(y}P`+rltwtKMn%KTfqhS!vFvP07*qoM6N<$ Eg00CqEC2ui diff --git a/src/public/images/icon_change_role.png b/src/public/images/icon_change_role.png index 5740cabfb7eea8594274766ecf5cccd64a0c00c7..999f2d3dc25fe7cee7249672f63584dbfc39f036 100644 GIT binary patch delta 1135 zcmV-#1d#j62!sicB!3BTNLh0L01FcU01FcV0GgZ_0000WV at Og>004R=004l4008;_ z004mL004C`008P>0026e000+nl3&F}000CENklJAfbzv7uQH&IeS`-99Hx(3xcI8qxihoiR1aTp5q#FDJ5uw;t z3|8CPsBJ!)OlBt2zL|ONez|a_j?v=A3zz%gaev%%{{M51 at ZR%(uJCF-Eb0QB>dRyeE^&d>g9lN3Xws;@z)LoVQo*t>R>iF`tBCcn{F(z at FZF%PV+$ zaA;_R{z8#BiGNwVIM3qJJc)LP-~8~@i{E at dYXO38Sdt`DQp)ipNv41d5InW_wtdc- zgJWakY~D0Ve_?=pZ=T`db!^%+3f>%?yzhp69ahi{Q%Y?IP)coYLwi?hY4^eb!3{Y2qsZ{C#A;gwdqHM|Ka*tYVh?5r0W`jmEqSO{9~EYJW{y$NK!o>xeNifys{LMBwU`_jM0A;|WQ*zDo zlQ+NA-y1wJw0151`2yBjmMUfD7Z<74%^R{ zncklrDd9!P+=?MGjwtcWt!NM-*^v at LruVPkb$BZvx`AqS849U(=Srg`pUPsLW3Hx| zDSvCuEo)|14AwbNS$ayNB_Y*rK!$+ST7MCS;f`*a_rCnY*@fEPw`Q=$frq+=>4yDF zN)HH+=H)(x!HYTxaC=1443Js9oK)}gIM8;dp$tsUApjCP1r z4k6V|fDGD-#)U%Rk!rPi9H3gQ9v>JOcz at hGecH=3+E|RSSmUtPVU5LFi?J4M9abp3 zY5fEQ-IYSISbV5jt-e<*79R#K`#AbIo;$ZA7+eP`gYSgdF|Yu13%5LriONR-*KKSG z^mQ3K2Kq;KzVMvN5AT!1qeXfOh;+}N>5C(XR;$lT|LUIms{H(1$aY-kT; zf#Nl{KQ at u--*A`A@pG<1Mf4Ow*?J1xFG{t|6hyX|fy+BX9>2~a; z+g&|s*L at 5)akU}UHB&_U)nR*gyz2nd-kpf}V*m)6@|f-F`+5KX002ovPDHLkV1gY& B6#W1I delta 1077 zcmV-51j_q_3CakNB!3xnMObuGZ)S9NVRB^vL1b at YWgtmyVP|DhWnpA_ami&o000B* zNklj0vY`*W%Tu#OSMz; zwSKU+cL*yJ1i^XE`Rh1#*T7yLJHDkdab&|IV^Atu;Cmia>rGf#s>7d)^%G~NYo8{d zX~2x{`xi7#dw)R)@q at 1Guc1wRG&OPfxu-UM{?hiRLFXJi;e+Q2 at DQ}!ap3CQUobmg z|KPK;^IzclP#FfJ32B<+Ft4e~TjZI>RS3fnw@}U_ptr7ZC>IMrYm)R4pqd6t9-2Fj z^Np&oZKYx!gdcz}0uVs}K_Ed&iP$0Ja|Qw{+i1%gAb*B8g at u?LD$Jy5nujA6F+31l z4 at 31m@cjgoBt)+z9waDrY62)xIw-B70v$+E%YT|eZNvxoWc+Hn_NA^XkIPWLLj}l>8W745J?jp at uFNf;{(iP+b+k8IhX7Z3L$RftCdm*Vwc6Ufgq;09CB)GNhFe*1jl4U zP2ZSqfTCr|AuA!ahm<+kYPGHq80m7k{2?B{;?@?R-?72%`_S);yVCOqbJs;%rvts} zEr>!%43UZRM3qsLGJ>5h7K;a{=vL*`9eb{kkUvjaVHAg-^WJMIM3G>Vl5!*QPtt`p4)oH6E?wKzPtk!U41NR$2Nstu?b5}? zK|g>A6VN8a>uMqmbZQeqpbFggeH|8b{$|oCFZ%c=`HecUE?lsEQMR%2GVhN at ZTWO?~-30yr<^J^@L`UFz#_l2oE9 zz~{NMwVss6*F#p<*7nlhj;G=Y at Buh|zOl6np!H-f(tTzCeKV{@#n(UDANBQJeG&Jv zxfztAB7hkUN{`A)r~>@`(>sca-S;nJ{a%0Hb%g2MED{uQSqmKiCG=Ml>;g5Q^l!xe zC}amfz{@wU=DsZe!JC|KE%oSTS3zh%gkmZ|!#lfrnE6$+-4O7irx{CCz)K})EXsTf XaMp^uM|p6u00000NkvXXu0mjfP0Zkf diff --git a/src/public/images/icon_conf_message.png b/src/public/images/icon_conf_message.png deleted file mode 100644 index 1153a76fedee496949647a72b4fc345231dd884e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49126 zcmdSA1#DbD+vc4#ZNtpmG~6&VGcz+YGbar*Gc^r2%*;#^W at er+!)*G0cK2D3UhVhl zlU8fZvF~%nZ zzj5^iQ!%ZK`K2#UoDU`79p1d`Qmys99j$mY+=6Pj;U|_QOX==6PwZt!0?LOPzcwg=n z*H2+=ll!L5gbz})U}!Rv=PUW->qLYdeDTH$y{5o2)8;7Mg;JU)w+XV2_oAH7BcKVG zVb_S- at Am$i^pEbDEkI4HBg*wLUBj03XWqrKdiw zvg>(Su*1jB2WoZE^ZB>O)88%|WL3Ek8v}gH513{zuVFVrJK+EB@<+54OK3E~z4rro zTkPXZ+{Q{!^m$|S{UiSTKh^tBoKO}p<$-~*LD*O+D}BtO&$`=cV=bMW+w5HU%{*}a z#$LC5fyZsV*!4zAFE+(w+16Mqd9VLi3PU73S`MFl)phOO{n)RI3Bv!gK-_l=A9nb% z!8j(TkO;um}>Q)!d=C>}-7BXBQxfB^6_m9pRZCSM23>r*}JF>SH zvN{Y#P6K7_Pt)q&0+9;?*A47ftIYzpN3e~X9)1P+zh~Zgb!4u(626~V$5z@#!y8#Y z4r=AwNk_vzx|(K9BE%pN9U|{(^T(LHLbaF;=GqTFSx<2g7{#xODPOZHFQv1ZoddvC zYkige!@B++;}qC*&>WGG zHTJ6gEsie;Y7;}8dX0yKcD*MzcYxX at 05SDzIhrPew2;>$l z!dA=`c+x3EH`JdmlH|FRfzV%2GhAt4W#}L?B8p7%O3gExmNq1i7EW=XLf=@&uxph= zZnY3BGM{(Tx1IQN9r#1ROu<^4P2jdx$=O-cSFIY&d4 at aGRl8{PAz}25XdyGrpsj%=e6Wp4r()(z(|wXwu`5jxN0S*ZDZg$J@@`_B zi7N#ZW#I;>lg_+G`4 at T>JS#;?g?wz_is-d6fmE{h5%xIXY}o-_cP%@6)Of|knpy0T zm_z30t~6ys^H_o`A at b+4?e&PIW@}h}J}Eiz=nuaLZO~u<0e)pXQEYlf$M^%Wy=gM0<=u+N at hbHG`twOK>=q-2vaRA{=g@ z=1%40YvruBQlkq}N@@e at HSr|9vRK?z^Qf71t6MKw*zm>cOdh6DcMNo`zNYZy7=Y|rLNaFe2s%|nzBHOK$F&iHq!}X zqy+LntgjjdT?76UMi1=$K>Vjm-fz34I{=Zh;?7CMZ!Gwno3scz<~&xcfq>e#wfotO z17ORzZZ9Sm1z5IxGyYGwWZKm`HU0cX^I_SZifzoHiG2gp*x76*2d6&O&do-VsdOqY zUlPJW2m=v$54iGp28& zHzO%5XusWXuzHe6u*H8Hg1uNNC at Ap%G#pS~A?-Kz?U^3W&wcR1>353ESF^|-2|)Je zVh^&bc+2H2UkgEE>`VF0EDl_qBIUyT>MWtr!i!aw8%7Sh at _f$LcUxf^{{TG|Z at j4$@#D8Wpc!owKDfdyy`vnLG=e5zhOY;`9%DTv5c at 8XYPaVW+T2m<;$w&{!kfpZtLS)rIa*SB*1p` zd(3LMc#oL^g zfSHBcNAxSS2rHFNd*6ToSq&+`b1ZX%MSjwuoRWR;4!*%&9F}BO#x`5-X39CXPqBac z3Ogo=GYKUoXx0A`1pu>cHaT?R5Jo6l>*-BKv5MfnLZnN;k|kaDQ>(KWo-PQYeSBCt zVm1L)!0}7sY3 z8F=G_ifv?JIx8sdfT6=9$6n`R?>kLT$T#DkVSMUL8-TW;)o&_VL)`;8c6M_G5#VmNH8k6@`Q!y zpaB6C`RqXV{nBwOa|pYwjH_yBVZnm(M#IDwDxdJgI2g(cuDSTG$36G5?;TzgK+KeS z9y&h?Xv2_~GX;?7HS$McN$0Wx1BTjO-Ba<&$yLXJTJV*r at S?waOX63nC&gI^ixA;G zf at N7VVi06Z1{DyC(>JBQ5lH;mUCJgDfzi?YB13}kwRl2@@wN9g=pg9@`Z4%SVcj_9 zlK}^kPi{0;gu!!&Gjm()kc~oRTss)cBnAS)iF(_XghPA154TNP97cMi92AjtL1v#Y z5(z#pgLbzK9;T at ODWv^m9D-=s0VCF_!=GCidJ~=1c^MnE;xyBA6NTPiLu|cEYrmCF zIPsD6J}>z2R`!$CHrFsu6+B**ub!^0x$fgP zgO3=BgSRkQL at M$#vj2ws+D?9)Rd8UR?u`9S$Mm>W8n>frp3+x{l%~l9C23O~ z59*;G{cNv><@}`ySxyNVN|lnVWhf+G2GP3wKChSHXs7__#hDwl%3h*`Ni)H?W}jU* zd9ADF2;c at 4*t>Zsx-Zz~!}H_k6k4zT2noH;WEmV9k$Yp;Y z3S2M2MYLvJZq8T579vJhF?lb`(a|YwElbi?WbZy{%m!@uaY{2P=e0=u!h(W$or9bM zKuN9;D=}9_qAC14wl^nCK#)268jB(BQ`q+l65^_?J#8|MrUdQu&S4UJ8Qr78ZmHwQ zXD3<5EGKf;hH}XQ5n-GsRRW%MD$OVSOK2{KSCV~q4u|=)X3OOIQSmZ4*#f$A5yZzO zZ9F~+4qaJIc(Mvn(hA0z6O`|XNQgwqM~@PtSB^85j20|Z7U=N{sI(P2onm*ySD9y7 z+}qdF*$#{kQI56N3>u9;G%(`#g=oiEWp?#~6JG?Hsm>VBTu!DP9k0`~UL|Ek_Ue%l zfYnvihwP;g*A!y-abg_%#;gX6naYe*M)SI}f_)afe?*4l6k}2o7m_5bG$qQ$_1g$1 zW`cO%^QX9yZe$s+M8gmgd4=&0p>D_L~tl^J~=v5i{-frG at _)lCWGdVn1LNa-{w0*?jy8&}S zJjY1FaE$3YVz8f{VJ6x?yZ at EK;{F49E6sX`<$OWqB?CiY);Z%369$oGhU=JB0TGO^ zFwcDatj@}C^PHkpk`xipwcw?{+IX%@0F)A at XNsUh_CG8!Vkuj;95 zuwwexTB||N5VQ5J*dwqH`88yS?3S#R49|)`Mj{s{d)dDWV{fZUyELA&S4pF;|?lEr|cQgp|7o1;D{_d_t#Fq0Ldy zVSs8G43sQAfN^bm?_t+)E)k8DKnns-z`_Ofd2)2!gU?|MiK#)0nkUXx zmV)3UZYq^t4q#2e z1kTqGcaKu+WK65jS$_Sl$5(CKDOhe&JKDdGKApXW)!kIhJ@^KDy_znei>cvtILEkB z#Z9BfSzSs2|y)QtKm^0 zQ~hWIx{w;24udm>5F!{$JK=pxL>^U$F00TYRmeYeKEcrp6#b1okKxXh|JEFs`m*4< z6-W{h$rmaxpGyu?JWX?C(>Xt}6|XUb?5|N8A4DpzWQ~1N;pyAcWLD z8u%*-O307nZ`g?l_qVOT{rGOh)ftuShR(GK=~}6}p>n2OKw!kBNhxF0Xr=p;^YY~R+mh>tT>Z5$m7H_>>nq8Q62xXC$+iz<%wV#W`pzbg z?v^s1j)U{SG%5Rv;{~?+EyY&}wfK{7zAn0df<2C{K zyuU-AR`Vk16-4a_;pGcwIpIn*2>#;Mf2A|n&!~`>o;&!W^JnAGGEmDX!71qh%&`vp zr>7M(jR)E)?vHC#s|g!VHWk!ch!uG42jXK`%eW~jZdS61jG*xuk{80buiq!fVOG~$ zzsEkYDy$zTEM^oqoH#a*>Ifjtp2}duuSF%-cb1q&dqsdhg&j$-ZteCy?Kf1LE7uj( zB&#ShSrEIdpe%OCl{d*QXS1>XR867o93o!o+-mVXEO z=|~!1fTHxZi8QTPl0md_Bg`_I(05yo!3?TR#bZLSr^qP)shDi1qGwLoLLn6{{ZF)% zyFc}!-`LvX2;+F^ZJWS)GK!j3tj;T1?+066B1l{$@~fKGAl+fR{FnwyQDXIOVoqgV z|M(&0ml8||F`sfCX6J|>9(Ij=-6Q^bv0bIvnOt`_JGUgRdYWH$-NgGQYf&-T8M)%w z^6Gw?TU`InCe*&mZ6ll&;_q2l=_|)VG2XVzM1$f1yk`#)z2>##7K=r*ecWB43N+u=!aP$!Ei2{gi-HU$cY>Q%&6e&*`z214hr8+a+xX@)jcBeAP7Y6UU? z7ESH=MA#yxCeWxS0hY!^XXOp+nonWeOX?o_;_OW`@8NWV>w>LfA{kQKqx+xiVG_a@ z4L?A8FyxRbMq6$e)`1e`WVSq9j0#^rb^jwnwoMHH$viV)?3- z5WB_orihDBTP0pndmBVBG0j}eYKIAcRb}3jcBva;mRkHUTFK(C9yBm7W5=pI`Fy^y@~6jLiQQoA#>in$g9qzd z*_DeX%}H={Py>3|^FpwnXW1foxS9MU?21pXV`DFRt%(LbFtGJu2{L=}e&1>Pq2FBr zenXMuHo_G|*PA=~LvN^=CD_4lxcQya>M#N2g5!4!XO;@an_p)6hH8?M=4Md=2U*1w zzEai%dA8&5$@AL9U>D0uEQxAPenob|z+la#<+Gn=+3x*xe%(f|Prt at f!ClAws2sP- z17^8rB`B}Q6 at PFsB=T?&A335#r!1zT%Cp$OyYPM|SGoY`F7W8muN1?>w2;K#>H>aO`f3-jR)T3?(i!_-dX~hsb%1ShOd5?kKfpy_)qf_v4SG^|0l=CWe4Q z<>X>Pa_3&hReJvNHj*&=sa>qC?J8GC-Ksx`?X*_!j?&k3-IwCnj`IGA)st5Q>lg|p zJ|=N4OW at Gm+X~Q{e~(SprXv{=YSzU1ij%#rSqJSxCbsIrYAYU%>Moi1=_tH$+<8so6&jg5^wy;Xe45czR5z}eOp zFZB|Rmln|2vJLz!(Tm4;0y@{B?n)HOx8C)9d}*;& zo>mv|}PXR4R` zmNCEP)b85>i?W5Z&l-d)KZO^M<=l20fNL$!kQ0(5A)CN;Mu*z*kd$Eae7nQ6P7QME zK<%txnc9IbaT9SU>}1h$E?4_sXKtKhfke_39f!*)y( zoG0Z)sF%j#byM8;5O7`wvneOEs at aV2Z6B=z!{>j#a1cnzjguMoK3k1L! z389nUHY85sDSLFBi0swMc&(UTrU`0h#DrWE zg;WWo5E^Sz#MG(e*NkA5;ZSfRkMX#YoN0_tWfx7u14pPa89}8&Aq$PVaf|oF6^=al zXQf8jevc4dJ3NTDWLU^%BVKOd-J8r_8VZ9T(4C_<*1SgNIw8r?g_kH5L zL6f?oTgSS~wH$-q*sgpbL^z)%Nako_4vO24Ryc-{+(G*isKuU z4VkC9#ks=_-J at uT5y7o9QLp#yX0g8g-c0Qjr!DKSYpTb zEK#(;=f~y$2+BP at k*6o!~7(1*@0 z|5=E^cF-e`5B^@e&?Dl&Jp2c)c-cT+{g6hW8TzPT-{Fk at N`<#R at 4h~8${EcoD+!A2 zHCc)h7d6CW)=XX&Q~1dgV}F&Dt9*SN!a%|Qa|OJ4CH$hiwy~gb14iVu;riXa{w at 3v zl+oRyrZdj>&SJB-@@Y6-oW3DlE?zXfyl<*6ve`h)Ejm^)YNLY%EYk&ba2a6{nUIWJ z5&eKvv9e)#@#guKn*Op>h_xzrC4x4`atUF5lNXcBqLper-{BZ)CnOqjx1=7%^&Oo$ zQ%0zfL;<+K^6E`P{-hc&Ji{SZ=SSwvs=@5YB{`qmLVin5=T05G)+x^g>#x}+FD>WA zEEDTa=^a6IuJT}o at jW`P37p~#m$4^bNO%=PqjMxF|t}9l0oRLk?Vb6IHN*4wqI7tNJ_#`_~Q+)jNUfE{YLD&3N?G>CAVBQwr|AB+FO&b z&v2WUO3fRAQY=ej9~;G}E`-qB4M4}Ds9DmEJS7{d2MAQOS)5=4Twv%S_>U})3!X!!;Px- at O3X|Epl>A`J1c}%x<}rcAP8N2H z5;6|C&zV_iu0i~w$#RyPs1m(z83Va;&z_#p^+g*qU(B~`Df|w0PaV}QqXqz2yAn2I zbIHy=^WNBwYEnMC7P_N1)u6 at T%FSY0Gov-dR{(E-c`0aRJitX*s4)%4 at xq7q48JLA zX|F}SFy}w)*`qiRRM*=kLa`%@3Qjgs4i&Tb6B%g2mfk|@RV{Px&yJAV{maLmfs~G& zEkvku{o-dM)t>(UyCjZpY9Xy+{)l-H(($N%LZYV$y)fr84jcDsQo-sQBF!AHUgNRT z&%4Y&bh0bdok!@|KFGTcNwCmRUwTE4aI*b+MXoZ=QTGjyo;216MAKZAaN9`KoCsR< z(Q3EAW|0G=oRuz^yPcgOq%~*K8;|PnqMlM1D3nU_>eB66JHg_5i(%%|Dc)s?^v_}T z=yT8pxQ7EU^}Y at zpfh88QNUUp8fo{Nz&B$e_jiPKj|JEfn4MJu+X=L^iVMfhl3R$P zd`lA1zn?K|ay+O at T0+MfG){40#a=--b^WXZg8d8KD>m4fxy1r6_RvPYc|jXV#C7PtqET zt}aTe^OQvzrW#4~M_1AGtW8HB_?9ub%;_c}7k9uhl9p#r6=HrVnj`O1>38BX>EL|d zvPh`Y&?4=VRQiGjo-}g2k%6^R$e6O_>=}Bb`UReFZoGp-XVFDF#kb zRb=Mta#LzBbsZ^ReNL8qfH(0gbNAF3<xh~fd`??nwgPZ<6%!{tx+y^AaQ zR)0?07Bs&ZA^LJo)@Ya_$IV}hv7rrX-pG`vrKni<{RCTut2pMmpM&$f4rw)1_)?+E z3T3^YD+)E_BHQt(-H7EizWQ-zOSJ!G1o?{lNH>V}E(>EHJ^JCu?CZsbngvZP+U3>l zAGQg?&#E*Ps!u_w+)(+f62&7Q7?3k!wGqa at YZu_I+d6ZAV>sWFX=eB)xOF{*kSHueg0zcjw-1uHWBCu`fk%YBL^M#IPelQ()Q=WNf=Vdp~myltyM> z6Thcwp>h5=vzpl{|HOqQNZEV?$x}#39+01bhbE&y)Rm`UBJ6bJ%cgbkuy1$Jmgp|=-o#*2$S?I>=JEBh~Krp-cD zsre5yOGG`E@|uR=WySm##ZnEFC{vIqi>hxu%LXSR5d1NHm6)`@^O`ukX at c8X2LU>6MeL!iCdlF8EPT>k#v z9uvn?a#qB!1u@>5fu6yngCgXfLJa4(SjW*3>t18lQe)M at KOL+~ebp*u82JC5>Dz8wyP~eJ41O1u znYHzZW)|*=Eh*-7Y?Z>rPSyO-Pubs5`7um84#Tj7Potl_`_ErI{>0tBfk|;NZO=&Q zdti&tw59F*Uj=H(8%8f5ce%B8KZx4UMiT)bQl<|ZeXHzasv8AbTs)a*I)gDbgQD!P z8vB~&cQTJM?8^o0$_C`30oL7mu#T6D(jJF)x3W)XO^bX90Od^4! zjiB0$mpQJeOp7U|%gpddoXBBm!V{b8wr>}DdS)abl2BBGw;-2R-AzCOLu=rJt zVZ+z=tE4!huS#Of9+$jG*?A1I5iw1KHyu&h^#FaZzS=?AXBIVQA>?e zk;Dlbf`*iPIf}`2-U`c-sY2`7tOYBkbSUSwdu&tr%y8 at bk5I75E-D&%N|A+T_WAfx zjCTFh=@2*f at TVS+e)K at uB&@L9QR687r+ZE3jPtwOcn(mCk z9hyi0*#jGlyt&zg4zBOX&l^==I~NxJVOoVw^;&=V2)fwe*3kvK7-F9F)gH7f at 0SSp z`{(k%OiP#5Y!%&1ElbD26#=jz?&vx&g)T&wou^V+ at s|%p{i{s91C3tQ{SAD^&h4sWoBOdx8?_Qs&0fJ41yN_i;-?-mNoVx{&KGOgk_EV5xu=p zt}??zuWrC!LX`~yp5a*>>MT7;X?v(S-1=-CS?=rnBXs+pX!#+quIvL$eMrj=t?O$4 z2!%EwL;f;Z+-OtY2mL%jnylY^7gW&C*EqO z4_0P)7?Dlv3hdS>0VQzvk<&7|#^}~xvAQl;F0VlNT4B?AlgaBk5m{$f4E#ax9DSY7 zUz)#J&=@gAU~%uU at 7t)%_2y)rxYc zkyXh8dy3;pd~a56BiGV6;wpA0+{Gfyyhsf94y at 5m9+~k`xLccCL{(W;@c5lfuIcf6 zZ10d9ITzOIdzoYKzKF%vPE2+Hk at +nRoxq#gAv9Lf-7$iy`OkXu1PIEh*L?T~Sq6G(GfQsyK1OB?d>O`2A=vu&jrzX+#nw^|7$^yCAB zbhm35EEY(NQ^=M<{>(@orm9Q81$2+`rtlNl)b<6EXr1;${D!k4sZ$v)!a{KvV_49BN|6MC z4eJHD(sDRnC(qnyH_+-V`y&@rm#Y=Bd}>(^e)Yc%aA^AiwZPmluWMyD- at pb~S0gEv z!tv?Y=k3;de9L5zO?H3HaMQNiQF{x-lDP{bE6`ZvxVRPOb at dX8mHnqRRP1Ie71`oqs`J*<~o zvJ1Ze@(_k}xqe4?!g~71n$5&1-_-|z at 1cdCcG1PrD>nwFmrds9b+!&7sNsACwH~F4qmXHFWGkLjFBu;f7YNoV(e@ zB20(g!-hwfg-s>*)+oe3S*IVtW&RP=9wRHap2MD}pl+B{ynL>y47cX-l;Zcrqj~q5 zc_ijKX)3B>s%un&pgH80vD|k|b zoN0!nA~1oiM-@=rfNetUz)z(p9rt-BMwRW?)3kX^4~bONwR#olLX$f>4{i9n69FRn zYK+3*pP zXPqKU^*GG9a|aiA&XbDD45u~*7pYl1^fQ>ycW(>=Z&Ikg+rYT z!qWJ2erE+vmSL;uM=Vlgr0aJ{`$^lU1Y at G)XZ(4kHN8iI)D?$HNXyHV?|EwVFMi1H%BoMCgB6rfFG7QNiyB<1N$!)# z6Z6~UwMU>;Ydo9tBx=@}V6|D$ ztR{X_EJ5}i29OvqN?vi%pys<%+S;W*@AQTU-*`&j$*RrG1`LxIKG$@y_L=8`-=%86 z1Q~yKnH0+D2uX1qXzvI)(nDX>h+n%>JZD35GMo49qjQjZ{Bf`7on31uHaW1vLH`o8 z92yaNG2C~;@(>WJ(ov?~Y`EP;2+QVFclpCrv8d*f&HtLi;|}#G*KjezyL|kJ>sJ_K zr1K;9^-_ZBr&|0qvg!j*H~S&2*4LVQqms~OJxAss9^t4w{Cx==-2P%e6Yb#hAm&hS zy*L1)Hf=a*b(77y!U<{wBik at zqxgwS#=Oly0dJ8;sH*hIBi%12H6~D8 at tdER4!`fa zcu6&fQ4OQyS?U?8mo6%77t at l`!qngf5+`Gk#G87hUPyc!rACTBH+58%>@iH976Ahc zut2mc>O7=@162PF(o9ITZm||B!qKObtm2mRB6<>U;(7H0rQge5oUv|!CR)$bd?Io+ zng~Z9wIVz_qjRK at 2iboLN9~fZn0?rJHZ$sgB|ae|wy6o*+shU3U7}`93*}r#QyO}A1VO;@<}`c+y^Xa_U>}E!Q{&|9^rafbWDp(XRK&Ev;aMZH z^qT()FXuUJ(XVBo1?ZsBi at lfZ?DlKgt=C+_J8KpKUrhCh&v>ukGx0laT(#-y8-Y~F z($V=j{&T~6o-x#b^!7M{ZgpsIMqTbpSJwIhJ$`NO5cToyo!2^qv at gL92SGvG*&$Tq zi^md~zL$^SEfiG~+u3%_#^vWk1SwCUgl at nk65Z-LwxLnX2HcgJop{&1Sg88&dzcFd zK>_2>DPhu#Vb!ul>K}Jc at jF8J682`4#906<`UX$%r>N!WJTE6$KY;BiljNrqb!vv> z&oi_+h$l*!3ZKxLz3Kyx&D+G9PP>XSjYNoUE}>}Ixlg9nP2W0*84Y~;@&(2)8TBL!;t=$`f;WHIVq~t*YwF6={BSk(*W!P_8gRZRqPvu6$IOmf1<;25)~}4TVb@!pzN#VXFGH2UX?^L(>l-xSPOJY9~lRj8fW8BZFxCIEE%;gP}vKY;a(j2 zMIqd}U!0sX!eTlwCZ}v;Al81~0E=8WofE6zi(V^%UXf7En#hMg(Bq>g%Flogv!EaQ zz<puAKCR)towARub;yoU{=UNSk6h_x?et9Oc%Kypn=S| z2T88KPv~}%@|?U@{WDWJN~tS{6V4YVbWaOOr{7Ym4SaAXI<1}`=JXowJsSARIp#7( ztS3C9XFxtS#9cRHo3Bzj?|hgRY3T z+O-#Ay#?;;tovT37C?>-$%8J38GNc22U)dS9a;M-=UDn_xJ&Gv=|aYHt77m2=R$`x zm5tiaEq0umZazVAzbEN~L}~}HkTEwOm}+g8|30aS+i1$yX~lf6*1k4Gb3|NzQvuDV zN_UoOqzh^ydLTmb!gd*N7_C<+TE4+qZUUhSWKF-tgTzdD#eClR20++;_wRA8J6Rpr zF^^235p`5w%Z}%)RIg8up323y0!?zdlh>ow)4Zq;b$m|Q97{8FYBN>#@sTa_sJG~ zu3O&(7n-{(N}s^4urcmNl}Cm)GpxqFH_k(YLHixU!+I94>_?^tirC~pKdUPu8*-b` zoaJFqK4b0;?Xa)b0;P}GCZN?Yc3NFzO}grE at oo8~C&Rus%T6 at e^#ZA3>WhM?JM6rWJLDK^aC_)#m3y$$S#-i1a>^(gnmogLqkfp{aKRX> z<<=ddhx6+Ub-t)IO7^KUaIKhl;c4)jXX|>82I at 7QdZ}`p=I(oD`@9S;ceU!yzKuC` zUg&`q4?TQW_!iGVJ|?T4z{QKz#<%D3hr_P7uBvB(#fP#7{>pi`mn at O_T>M3=|1RzM z;jcyi|13T7^T9loH}fc$e)#th7XLlGx$ggG4gANoK880tIv$S_E*L)y)!`dLe>gi5 zC)Vlr%6q*#g=g2~qQu4X&8KV~55}6-g%t-vLL3D6T`pte2t#`0~*?_((8Kn1;TK?ILVkyUlYqD zO)_cZ67xJTzO=z9zU;9!D>K^;0!n03G{fw+D>BpV*Zssk)uvd8+zM)9wV)P4Sla25_r7 zy0-H3juP=bpsQrRJ;hCqZDNBi7%-a$-jBGSiSK}Wh40C4KKMJ`jY~Z5qFUcRy678H zeygw&DR`47n@)S#L`!uZ-=b^cXFPY<@hWXcrKLSUb6<>a)poH5Z+x%j7kV-AOyRTs z7JI at 9bXb2Q=_Ib>^PFN$IToBPov^?hzPKOayOw_4$DUxTB-&*l<5Y=4_*+F`_Mt$4Tc)GPB}6 at jpz*tJ%@rWYD-=@ zQ%i4;Tk-$f&xDixA$8qv;@Yl zZMQx9g9kYuw!5zPhUjMWz5iSpBe`x?qY$Ej&(ZYS>>V^pkb(N5mX+$XFxsJtw`}_~ zclRS#b(s*T{zSZw#seA`9bS9$`vWmqmf)94rIm+Mwk3M&JK*s}yi8j<)%PF40J)ja z{3vt8Tb7*lhOQXwoO at -+;`=W26T2;(B)2MWB~#4Gm$jbR+$2A$+=XMxx+VY at HfH_V zxG4BOMqND at r#t-1>C(v1!ww}~n4A&-)}!`RK=yqTC; zdJNBnUk{Z5F2RG zk^K7*|G~;2 zB~g^){eO-G{ugjvJ&z9HbIeoyZZiB z)|I1`)ipEL0d)Vpc;4)@C) zo?!e&fUB-0^mK6!iDp02Z=|dh=`3(}SttxFc)V=k4Q2Lik(&AFcs0qJ!*FHt!{hPV zsmm^{=EehTPDbxI`5Q%uRSe5VK=Cu~WncFPiU74QGVDQ05tc`d6 zw;jbML@@YdxMd4VQ|k_RoJ<(v!n$p*hr6aCL|g{F9D#$=`EL0+T|PD|yI8(c2gVPT_kJ};#46>m#_{{^q;*sDdM&_C@|qj! zvOd#^z2xdE)@E8=KLg1`)qvM6fpGNj={DdVr1|NfL;9}8Xwm#~atKZTP|VWpV}k%} z?)$V(YMAQ}q4VpLDF0k{d#o9L2t8VIl}sYN`&&54UvF0@?)J$nQ>8IPCdb(Pv3-k% zX0tAw{zW0B;D6h~4qy*-e+j1DlGfa1yv+dXf-Lml``7?AO`bcNiDArVB$s3RNMRls zSq8M#)GgzhU?y!of2n!wR+?1v)RL;p<#h}Qf zMHIj~AGPj&$Ejd-K4*y8s5CfzQsSP|P(A9eqk`lq;_ at csAW<_Rd9bh4`bWlIy7IzWrk~ zH5h!{ZLG5U3bj3oRcnrGmFz!1_IeZs+!VuQJO{DxSr$3YYxe)hix!cqeSBn^RXK1 zgZb*_lJh#Q{O|MUSFPi|ri*CN|C;36_8&(yrr;GvhQ*V23EnAPTsCDNOe at G?lk?#) zOjkLxWa!^hNof_GqI$r0j02zJnp&!PNhvthm4A3MlPgv7YmHNWT4+P8w8VO;*6F8h zO3VW9!eXfg5R(*J1)}>u8pvtGX7>TKy&sHUhybT6Aj at tcuHQ at BS4~rZf>j^Iidg}ZfrgET^zv$ zRwD|>j${D;)O^6Z5^_zb%U~sm=HW^63Ku%Az-g2>x?lRZ=Cb>6#p6eP9^8E*y=%PQ zR7M6pW<4ED!_|3<0PnsG`p^+|y|r=u_6FU~k3jv0i+UR6glzt56WV-LeV1e>5mgOo zJ8$}$U+`HU0_PSS)7%DBbf#jOW_LX`5r5DMyM>&FOc?(ycGN`UJ?P(kIaaZv3>o6w z#-ktLkt!he{nf#XOcrz>56&dnE&#Io{P8~Xef_C6tIcA`)s!)1cc1Pz{I`ZEaoepPK}>czD at m8ZcS1}amoD?dy}JJt zZTe75EuDNIfP3YXEdS3&vaQbQR?;u->n;iIw6t~@Tgk!XD7gaqvn4bx&Po3XYft3!0E+ at tJK~Q3UuX7 zXFX_U{R`P=*AF-Tkuu({zx&s}n7GFst6c^Kqw!!EGb9h91tYpX-r^G~@RRf3$2Hwn zeO)X!iw82z++YXSv#JZFgBIX1Lo>j90N_IqHdX>Q}b)^ON9)e0|YQg>u8cXKE znl-03kh_e%)XwGPn+ at cd*N2Vox*~<{pB2z2;|_GT$OgeIma&7CzmFtfj-LR1aH4ur zgEEEZrbFY9*Cxy-`eWm3rn{GwqbP)?WS0QDY}fI&Y>1Z%?Ic2?tpf1}8o0aa9X5(O z6vcGrkEh(v(KcPz($8o71f>;t(5+6|4KM|l1{BVCGUg*wN0uRiQ-h{HP^#3^KP#(# zzB2_^s}f7uGE4qnA7{PjoFw+O!%u*h-W>+Uv&R2Pace^U_vH2etoA=C?y?x6vhM$~ zjj8IAlIMGQN}xJoSVO<;Cs;6d7*m2r{u3kR{?3yo+Two{zjs|gG-??JN at hgUx3lXd z1!iw9-kojsyLSHvU;G1K>as)Xi~k|)e+cUUZ{3__p<3IUlIC35fz>MdM1e9Ph=uvN z_o!2}6Y&1(0J847-i1V5?2ZBNf8J0x)?9GD;hWs0fu?F8O{$l`wM(vd=|1_!UyRJ> zYAwL;C-YH!5_dop;tnEmt%>Go%^*w>7qA3CKca at 8=Rijy$lDFx9h>5^lHy65f#Ml8BbU7`2k-KVBR`SE4lUd|`z9{yS#C3LYlN zQWH0F++buq0Av3lv%tH5%2WN01(K#`dL*N24*%BUe`}Zq@@adu9Cw|tYwkSog%GXd zy at m2@U^JaD`0mVDW^VVuX=u2{NpkPJXA1G>&aSI;USbM}<{vrC{V!SiDbaw|(^dXL z%Fvgtd@#d{)q4h$L&r9e>uSHqvHcSVT=1TqYW`W)O;>vs{4yT_UN}zW=SG(^ASpP|G+~N2WH at -r#~hA+FL~q#bse{R ze{*zYXqvWGe*~0mI>6>VuHeksbae+RWFflK0m17svY-cp!k)?XZx`%52#lS7BWR9J z{Zs(>=02~kwj=&(aG4r03M|8&B<=#tn>6-Dl%9~W!P$0Ei$v4KRC9d%zO9TZ|_6E+AjtMJyic&!v82* zR>sG92q~FvI}_=f&=*$Sj7`Dk_3B;m1f7(?enh{Wo!!4f#Kt`SJ~1c~y3%vSBX4$e z>1b{T7{B;YqYU_7TwlS2&Rm7~ybTIkNSdNu07`?(RJ*l?PM7VVp2yAGd?0(qh1BzR zL?AEZN(eP1F!cg@?_yRK9M%Lg+Pfub^H(f5%Dx02H(v_x#~z at e1|z^yw7$>TRcV3NMXKfq}g2cYRIw8mFzgjd^5PK-OZ{e#vPv1t0C*8_=S`Lp2F+d?~x zormtR(b^AzJAnUNE^i5;H0B$Qf?Yk(Xqkqz?OUuu+U1oY>f3;wmlY$oSmqJ=2oUux z!bBIfO%Nni&55=Q3QHawg^G6d{I^oO at HS?89Yxbw0LcMP18_5i?aXyDAIGZ7g-(|0 zjYnbFJfxg*q8kLI1kE70%d}0ceU4|9)=qa;z+Sdy2Q{v|@4K!*W}Az9Dcm2WCe^MRb_PjD5(}F7cvmwl|t5H=Ci&dzzGCM>N^j4TnpzT=v{ZLZW!we zQSSnd0ry?sl2bKL;Q at Z|guqs|1<>-$#|U~)^r^3j^1rY zr8^TrP_wOej8QrNeKK$&aB*baW*A2BkgJjjOyw6i04-P5fZc1#a=v&w+frwz%XIU0 z&!JX>E2}4tF1}ZX6j&Vp_l*6`HTG`k&f_{0z18(`uk42%@6A`;_)kVbpV4;$*1}VP z$-y*DMZ4c$8r(sBPX?P(mwd(n>$`u~f1kk>&(LAXcSg(UXFTqFS%CHWbLs9wDYCKg zkfwyZ7#8IE;$9Vcaj#vb>EEKVBRXN3*&THo at E6mgs#|;C6<>U4z~dM9ZR}}PnahNs zu_WC|nd_beCMQsqq=n}*q>N`lG#7wN0FRu#{#rR7_bbTkxR;=HQ4NV7(r-yYcv5u$ zD7lo&&*bSEmsjXM8EH6lRqCQc1O$}4+Xhu!c_QHZsFnX=t^zmw#u9Q&27zl|S04`D z=>4EgfVYtN4r&&(aKZYPi@;x+ZZsSET$;E-k$$>+-eACyZ{_DTB(0+r<3(#^}}es3>Gg z$fPIlHu(~^|MzKhigSd}Vw2{|35+sGo&jBDjVQQ)-||6k7jeI#dM$-f%Ol;x{;1Vk znBMlhjOWEBw%;IrR<^Qb#Gx9Eu;q1B5zny~#(CR7n!kqJ8ZGF+t{tU- zO2RkUe9%B{8H}nOW_xn7ADF43?MyzFwRzn6&F*@_6LtOdNbN_ zc)deRNHlZvX&|H9UhCGKfVgj{NCw>;-xM!hVE~WMiNpgJ5`-?ktWytM)6Zr=CO^D4 zY^^bZSB)Mv{`}0^oIrFkQ{p6^9MwS%%{(b+%AuR90kdd=^#Zu|d-c!&$x|f7oo5ns z#X2{H!RLHKqd6}|F&`@WhSv~ULCfVM at z38z^6FM>EcjQ*0eUqks=1D z#m}{WU`H3%U4E#%kRaJnG_4a^aj3M-&$+Ps at a^bHKt5j$*FvXpU{cOHeVfPGs=}3e zwIRg)SIFkRaXVdLvVVL>arMQ7|4V$Ur^5kq-DPW6?N_O5lK)P9VUZQJp&;?>N{WCH z&j9`Ij0e@~@0Z7ypJFWh1ko5j!ta@?AjN$c7*GEn=kWDz|7R}h|Gw3u0}C;B()Fgp zJ-ccA@^9~|gou>M&=l*XE56_v+e=2KS8QEmEMzpaOs6_8SBB<^ma5w`)n2E*NX5 at 1 zcuCX#mePO?V%jz)ezM>IA!d;x%?u5<(mp>zH at wB&?3KyqzAM;C_nbr{zosDV#C4KQMkO1cxVgK;A)`(W_t>0}a*%298 zm_td0cUHLj*-PiLHx+yTBrQzdvs^E2u5IU1S)JLL-FsQs6>@bNBT(P2xib%S+Y@=0 zn3w!+!G9^LjjLumr46SjHS;VgyLY*phEkphfkphrb!-1N at b+~F18Y8?@K?JqT`3Ah zdT~89SO`Zy;(>l>73pDh>Q4K<%byr`cCP$I0GTD>E;4CWV&c3I^F`6Lo_+2D2CS8G zsr6^H!fcv1EJi?AX5(x}Sk0}OuUE!~@+LA{KA|W`YlqJx#8P at +l`*hk{pEVJCm>2| zrg0 at 5!u(>uef6Oz!P;5+6{kOl^|q!Xp~p?+P2UCD1Eq{72t>bH0rj343D+3TI~=T% z*bL>bJM>RhE0yb;hxrZ@*9^}~zAkHKtg!=G-zsM at d$dy|XU`W!hy^+Gyl>BrHyQ^P zd>KQ}eEkYDE&pU%PM4)EZb|KEVSVZo(EZ6Y`uF;SZM~~*@&=L^TYj1n&&=%i+)O*; z=m)8qK^*jkz->lUxz6!I1$Ph1QM~+RV;Scc?`bEKZc(v3Wae+z+S=8OT#5wiO{-m= zs;o7nmhG?0ysGl}ScKk-z>oOrt5 at 5o!tS3B%25l=WkU|dya+M&hXFoqCl~X`H*;AM zr at HyKLQS?3-BEC~lwg%K`e>+bGkIY%{(VbOJ!|Hnw(gpo(G4a6Z&A2TP-s}AQ zyFXFp*B60 z*ML;yLKUVHj2}Fib0lji{yvbZg|zbM!qv?SR;*GSR}6v+PI;X5(WXJ$WlRg_*G65!SPt#lcqFVj9s|Hh(l& z)SFo_wL*7i-C*I1{J~SMAhL54YKWYI4ml)($eS4+P^94$^UFFijezVqI>?5)GEpg? z?PTR6J-;SAghTLJm$_NU3YqbEPu2NT16*!ViQrH4AUyw;-CorpM^a1BLS-&Cawh&$ zX?g##yKi2?HH7E)%jEx1^>5u->*;k;b`z&tF1p6r*_^yntL2zu{w7V8 zn>=oSIaT#F)r-e3ORB+Z@)vQ52?+^_+&Mt)hwrBa1qXMt=-F5!&jT5~KnVU{URXQt z$31AUNCC!DeJaloMEP?}aX*%u>EKgGjP0;OniX^0mXV#<{hRt7$i_0y~rv#4I>N7tDtW&Ro=9Kq;Y}?{^%&Ns_I+4Rky<) zl4-x?jGHX_fg!@3`##3l;vj;dYoENZR zc?Kx?`JVA?V+nqI;$oNhv<&ThC~^aG=Bb{L*&1BTtm5HcwdAnQBwt8%7-7G zB6*Y8>JbKq!*}vl2Kj8DZ|^%Pyq?&!^N!w-Bg(<}g1j^iHXIpXz^oJ?pNIe8wOhU> zrZff;==c03c>)1?35m~WD)rv0uc-NxU0&|zpm*F-J1v>P8_Ji&+76~uuB^sd7Sl+~ zSP>+R0l8uKgw!VW9{_2&p{qScsB!@{;;o42W>^)Y$b04UY!&0PsHeU at oVj3805{!^ ztZ&k at L>w3O4bZPu3g_{sqmD9w>-~`rOAauSdP?cgRgxuE-w31FF9FIQ{cyrauOeTQ zh1ED}-H7EWHK#aV+~PYtCYw8-h1{=&Rus_5grL%*cULwRqEp*&4&=q}8 at KSI3Fb?% z#Pq5v)aZy6`h6N4ERRS&5bWs}`3c7EQCw=t_vQQ61__L&lJ5tKlVDbOv3{@f z%M_;}&1)p21wSbaK7WBQFddg4O_RzxjVC{Nxcqf~9acVM1`(f(gayc}fD3+TOH&TH z*pluzMk*fORN6>BlPX8vQd#^%$Z$7q{Vd3H7=k&*yp=CBcH_9-dfiQr(G~;xk-B^{ z?uHa1bQyaw=KeXuU?}|#|K11Oc(YHl$m at 5l>XPt~=;~4UzAF?gTzTHRfmYq1^Zp%o zes~mc*kdToAsms1E7Qe(oVpVRv{^xE=iCKgZEUg+v zMdRYbzqg zzozXn%d-h}J|r$A{wcpBs{&9ra}Xx7`L6PcDzJpe2jYdB*8F=0*~-?N)yJwM6wR68 z2Rb;0gxh3TskC={P>q4^7^k)s7kFvOrLV at +8dgq^@CId9^;bc)>g3oDZ+Ameu(uyh z_IEnoPMY8>UHAc0E~|aO?&}&xKM7=5o(vI1L?&#=D`n&7lyYW&Ir{Y9xow7x)Lw+16SM?%3S at KbBR5P0ns1m+);Lp~R>Yd;y_{&C()G$3 at yd6G z7Q<+sWZIlZ#V1DS=&oOd4MjN1SbuvLc7Sq1U0twi5LrZ95ByXSY-LT1?qI3l1nhT! zUq8k4WTaci$2J$1rl>nHqyx$8u<$rCyQ^sNOxcj5n4z{+y?A|_tnf$*s!oXi&eC4LC+}|;O<07dV-g`f!L?u5|8%;lN<VyfbB}H|kX&@s z^=xd=#k%~qWWV`rGc!=u<67&R4C#<#pKpRAq_eAtfTe}R(SX|4Kb3r52?Wm_mis*+ z-zVPZtxo!Pc}+-5y4C#2Kc}>mAv^u#>V=q9jm+nBELr9*k2#TGC2rVm1l&eZ4CH7% z?>v#=ba?-#UwQxjw(P!DQcD$m6V!~PF|7&AM~Dh5n;gtGwciJ5FHrsnc(oZ0!o~Nd zR1K9mMPL5%cFV0>y1D+iSlsR^sKpt3+hDw5HYc(@zjV3%nTaRYnvHz(jdT<1K+mYH zVVYF8Sz5$G^JjCB{POkTAba|j at uR1L3q>-akpfIFwAx7T-O&(HTuN|KJppo#7{RUK z+2zo#oFgsY_!aS)p!_7PK2xFW;^xVhB)v3FOr3+2WZ4gc>o_yjk at 4s_daPzpnX{#o z0EMz at x{mwbI=cQ=U1Jp9gafuu z7bNIqM=Nwxb9k{Y7GYoiiu9d#)b@)cIi&1jmRaqoXu4_g5Ru+jiO{Q3&miwtMuBSi zBk%W?^?D|csU+IogCe@}zamF`r0fEcwiEWBoHL!H@%WYBxI5?YNTw6LyGVSFAxZ?m zUSrtOJmxU;AX>Dx0X+kcDC3M$6Yb{U&)iR!q8}ql7F4rH8OM4pjzOU1qWw}CnjumQ z?xM_=8bNeCt>Uo}UVN+4`RGtJ=8U`h+3|v?8*Lb%C1N;XO|23q1wP11JY4oVOp;`) z1HgdPuJoWu6sdR9!WRA9VUZKva$qJMi5rO=(SbIZQ%7It)N?u)M}lN}6a`rr`icoV z%-M;c?@)d8BURoc6Y&bYqdYo^E~GZwHIemo;7dkN&&;0F58!dB;VM3g#tm8>&Y%xo z=KSpk7rj#6*TG896o&(x`p#cJSN%su%mvfHqc^7%IPUhuwZdGk;kocoP5s3C<3)XG z?A1&3wAt#C>m|(*dzwSiBbicA}S)@$a-pRK%x~PV--G-Cv-%9G&R((ya(;eK4Sh0ITjbh(#A&C4 z<;>Lox>C5Cn<+yn!Vkd#_#;8lWY?p2)EGsr+#ytubJ)X#zrR6+ciFh!+OH&(5Qg(A ztKJa_C>H|1Kc`kFYlkjn6JJJwUeS%={dhYBwGuhF{yl8SpIm+xCLPK|(v8|bEY ztl<^UAX{cx at _rBVPeW3CY4&%~$VvJLv9soVn!xrP=UCbgd?Aso$uA=MUZIjf4`|+P zd06$v!t}VDba}xow4>HAXN)i?;K|jQgl!xxOJ60>)xK50z#;4w)bTEee}3VMAcY)9 z&|R4isV)B?HbvqjsPCeV^146FSX`+tP`pl|tWN^4 zwzk6JiE0MmhBMnCUt)JMBDAV8V%

                              cf7< ztLMSTE(o}Tv}_4KUC;lxaSTso&(mnTvK-IgD|)S at k=gp^nJTs%)yZ^!e{wZ)WlBdHIC^ zw}|n|c^{|JDko`z2-0K*%8?es<9(2SA>~S!uopHm>embz0mNA;A}pYQ3-N~@rcPVi z6)#i%q1zE89q-{mD3pkOcYIiec+O{sB*|6k at gPU_glI+6{Bn_BH~vv=VrNVlSX2>{ zX7{pq+i)4%N2gGqoi;k=S)j7bUuS;U8fHQu0oJN-7cTY(^qgc0y=Xbx>r^Pp at 7`+Z zwtwnvAwgJDfy?Sm+~o-y+5M9DpscW`!v1rGxmxG%=Zs>iG!ff2w&$?cAuqzTNhz)O zM(C at gzp@d at u#~&u74$xRQ9G4TzFJUqGRtRT>R at V%LPs(kjV<&K_Uw>%dawE%FZ3}( z!#*VB89}ZUzdg}V%j_+E3Lh`h+r}X*{th01BUdFGa_z>+VIM*)I81kI)?Udw`0R5` z+g^aK8H>AHuS}XR<#(S3r^$J%!gY#DevsizVqwhL9l^hyzEo#CB`B8?jUm*GZ-+$61nBn6Z98l{I3r at r(DWxfe64Eql?=-d0`>?b89f^KT4N%fy4O{Ed# z6 at iz$7+wU`%thFjE?&7W0TdfYiPm4v|5}bKh}2(7{~cAruYd7_p^9OSIEp*8ly@{PuwKMXq`IWp(=C)4Wr%^*-_E2^ zObg7H`##tzs!zR{H=#uQUoRasAZo~u;Q;Q~MW{!F^yx}cv_Y_lf;_3d$Z|VIit;*j zxyh+umUE!cD^qdwW_uN6<-L&0!Se+Q;rIVMBYneH%n1J|7Q*ezNx~Da5&~|*+nb8l zkz(k~4LYr(4Abm at eCo5yHvT4BztXJ`Y79ixzt<+kakQD{<+Uz~}KmrpL{jG58qYI!kCq{)xxjP)39jn}y&#}zhGhixai2d$(j;S0x0 zT>l(A&j#EQB3tm*S*6%scm)aq5{mIEgEVkB-9*VOb7rxCr`rdBS&Nb{JBk#I`c8Pj zG%C!Z&a+s9>_V&_qa_(h at 7sLN5=U2TP8R*m;R)Sbmuf4WPQR;+K;s at y10Vj9N^#*h zGV{upm2cG!Xs&x{zLGV~<%llH6kvRGD-w>0Z&_?8ae66Os*7M=$UppW+8Jw*au@~8 zuQ1*ecD^aPB_?d^*2a)#_71*D9dZMId*hdAc{3N+cDkLt&GJQ^tNu>5-RM;cKB^g9 z9pbPtW03>gF at +Fl#saadGY z at 5!#qum?OVc#abZ`9NA(Q(w7^MST?0^t)5UC}p}wEa)@skjN at C)^36UCjYv5C`rIm zc2c5KWuD*g_UYsYz~6fVGpq{&ISBwi-cMY~g>id6HJXA?^6b~Rga{u^7jniI;3vwu z7vUWvgx5GjC5L}u<7?W1(vJ3`IX%?syEQ$&2HJOS2ooRJMEayAAG(Qm at Mh_}_1RUT zhG6rAs+!K(h|^cKEap6SdXkF_hB!0*l_&M~VIBOwUUv-JKM3q)ak0uOrv=Y!$QeaY z8bMiU)J?s=7b+?O`K=4PC%{!rCylf|6;G~m}R>$|mR zxkJa5acVN19j8}<-uGe~OJV*L>qh_z^8)?BgHFx}IZK6^>w{~}yH_3o-H{eQON4c6 zCtT*Ui|b>_So)qzA%z6}lUGET|4{yz(Lo+gU#&+dgoSHA+3jYNX)#XjV0k8wp*jKT zTo3dqve|eFan$UGd>nCd=SbF5#Xg&8v`;1>Y+ua~BW>fB_4?a*Gu%HH{$V-L4X@!v zCW0}JZ{f|@2j;}**5>|%j4)uKBe&2gfy#Ima at tZ+hPxNc>*`3(j8v424ie2W=B1=- zRGe2hp_cnzNVdZg_XV_f;Dkoh#DNQo-pyA|QC;9|U9K at IcDr|)a;?$WDB)*bWSLj+ z at chV$_(ibv*XlQ2Uj05a)aSGp6;vO_))UPopPUqU5V;k{w z*k3x at Uobvn1Sq7xZpMEw%R2WONQQTdTXUp}QE9D4nJzWu7DIfE$$w({I?)_}B^wj0 zGiP10A<!e_Zk$OSwv907z_<(RAbxT7 at _QQ1 z>6tL62)QcX&Goq91b<8mQ?0hnUVE&rx$|`K?P!z_gD`!6pP$rD z#HES2Ay)G$+G_IwGPM)Tzw}mw8Pf1-KKZinNc_;+NrF9#@PS{IxmQY6qX~=6lwd#@ ze3LBFBo2B-_3ngUk~w9B;r7(fPYw)G>_6Jyxo|h$=nb zy at eOO!~b-vB3-Y43w(v?A##xCJFO~sSxeJS^)Tbcd`=Hpj;AKXY%K~eX0a1_<5w!q zcvc+=a|~2Xsg}}DDZjxxS&^sGUQg77c9W=odO~&=6{u!^U1%mXt_-A%(r+G+gI z6AeO2_`VMM>uMPKok!bLiej{4V(Hc9tKEXuhcjg`gS#wgu%K;`&Mhl_`?o|_%7Mqu zl8UErJZcoLFV0aUTw at wR$A%Mzh at 2!5qyufX2R8pSKc%D4?fn;agOL{q+Xxeh6`Sg{ z4mi_FNUN53?(Pi#$$DaP{j(d!Xg1L#G3_D?H=AqFIV^hrCRUh9+|~1!`jUS({K5b1&UC7z(q zg4sZQCYu1MM6Gu!7bFVl;nfds%Vqb4PCyUc1lV(H3=hIBSi*LVnSN-iq?3=`DpxBH zdM~b6YIJ646%>X5Ue;(E*tbcHAjo1DMbkg!w z6HPomc;VI7ZV`R^P9Vp!M@^OFgdD!%IVGs=Q=B=yj z&oElk<@7i+j?Y>oWTWmU6 at 3vtO;t9w&6o#ZpHuc+O*v`#&Hbsdw$P(6-%o5OQJjRczati1WZhh0iO at RJ)$u^VN}nbP zf_q{b(0ya{TEAiH{)Fut3w_v(c?=u-v-gf~T}tDA)+o04?I%9~2{KIhRMS_+M-&M+ zy|E|VNsO{gmJ(FBb~76d2!O{%r5|Mi*vUliv}3~D$?_swle$_*5>BvK)V6eZFZdMF z+i^e5uh at aKA;XpBy9e8sj3xwIq{p9IngP};%hde-^%=X~>dPWSjbcUyregiKW^Pe` ze6^3Ll)9iqY)JhWpYx&CRU-R^`CI+jFBK8 zPes2=Tsui~WvrDymXb3`O2{=4Nwz-QM=Jl?aA({A7mY+|#~E)m@=H0EpRQ{3%dDZZ zby+o`z#=QVdSyO#@C+$&yPe$@nOULf=0d#5p!LmiCzW9J>u;7T)2~e?>l2O3<>hHX9 zMVxZq9-iwwl)(2384txVL8nzt4ZH5p&1u>P)_N;@KL(yokEX8We&?LjI%_Hr at C z3bCdZcFH|Sn8PE|Xg!C*Pdk;=h)M>pG(_cxoDG8p&-L~l+QIN at MKpV+%SH0u1 at Nzx zS*y9mZzh;3raAK^6)8R6hQ`hf4aS2w6CWb}Xz^!Z6r zMk_U8ShdwoUet8Xb?x~IB@%(8R&sJy=_|94P9~tX$Gf2FE0-}8>DhZwpT9amH- z8+tNb=^ZpOQwFHhvW-cMt*W at RV1m6*c&`-=;vQeE6*h2rPM6zTbc2;Axfa|sTfu6e z3Fr(FV7psgpgV2BRrYXj_(?|dlRio;HjltxZggme`c17qDLz?IJw;sT?-|l}DKli> z;7`)U`C7}o!!0?l!;I>kXe5pZJvTduTbab_ at PvDM-e2d+grL7PgnbW7nY#S;PAbJQ z|Ae@&i70llWZUegF2pa_IDQ|uZr+nPv`R&hx at D89XPYA$gDWnZS*f_SUe#qjTFyLg z(?t0%fze&(;tST9aoYH_ff>LWTIh4*lgdipd|9UXZqDf89p+X}-Iobzhg zblc!>rA;Gf=%AL8LyhzBl8*#TdzgVfw)+WeX3ayRtH#)O{3<_SNj_qEzV4k?W89&G@>b zj?Vq_uEh^ggMp6KjSy0FFRG+Vr at C~CZ*L^fKFvPre4P20-EIF%GHGADZ;y=T$HQE9 z?AJ)Z{l5eBcvGr3xdy#`;EEkJ$>lx3%l%J5tn&%??oaQZ#&E;F%OzJYG)@uMRp|3q z7527EP+kGk53BMD6Ps-5l^iQw1R|<&sTyT?ZMuvWbx0c13I6z zv-?n&Fy`z at Jj@fzM*3FHC!JCekgkc9^B5cRGyWz at dc=3P{e3tz7+%58f3>R2lDcka z5E14^S>pcurD^txXVRm8$8Frl`i70J2&Yyyf?l!1_OgGbRW4>R$JR50uyc&NJYr3z z8zpE6rkl;A#*>6fu-GeosD$JjW9n#H$B&YksT}0WC64{JT at NvQg&dpOQQAGEImdIM zZYI7$ysZft+~BK_BVN4-dzPiP>kJRatRx0OFSY^3 at XTTEhWG9XwX88*dO23yn;f;$4*0*^;4mugq?GquPiFaKq zC~Mor7|}PQ17;htS-!Zwq^E>|oS$YHJ1>4$z>SPK6t<=2KoF|W at 60c1e8KKcGBlX- zn<}R$-J6px6ME)9ph}~eDz#JaHYhh43Z$bDyeb_h#Tz$9-^k-j0Im5`nT-}TUvsJX z!M}{BNy9w9?Y?h8h0fajiXA3=8nXVySSNrznx-QccSwb at fThMKH9L4orWBwb;>K9x z3H|{nKs(m2$-yCN{T_pj1A~)}vRUuWf at IA6&OBQHNRzp<&)kZ%`#aa;X_&tg{yv`D z*We!H>tjB|0z0!${K2i)S- at m>!bpAJjJ_9SbDfCgy>4jKo`X ziRSZno1P8}N$$R;ua#qpgXz#eDck)kh#-&$Zc7^Wx&6NyF_S3iS=ZK^`K#Ht+|RDd zLFl&jt&prC^>~Jefrn>?nK}(|r9xXGT(6Qdf at MRzV;ufkdF3n2-fvuM at eUetApOvg zq~sr+kbp*jDEZqVeFNo{;x1QO>;&4*=9+lH0OI(tuc2 at 8fPbl~Nqeot%5{nlRce3Q zG3LG9xS=4#`t>ne at 95?2MPz6DllXk!DrP>R`nCDwN2=QO_*9VgXXB at Vn)T^V+N_3M zYD_b+o47IqmjkPy9cy!w1R7+o!UQwJq^j3IpH9M${rwKOUnxA>%dxEE{c(urWIGSp z?Y(6uj-2T=VS*G+f={-O?7X>2Cp(&3a(#LDsIJxpmrL*3&QCP{o@^O#mfR zy;dhvJWKT)eeu(xnFYb}HqeTwcev+_wb5HqUqK#|qSPo5_Fk!cBzdwxvh zfZHzz_Gcb7;*A~3io=zhArge!`xI at 3+2ShBE63@60%@gpJOEFeEDsA6W`7^O`Y<;O zNga~MXLF&C=Y9hb->I3#PXECaa5F8IqQZ{pt!qVIrQB4WvS<)XnApp`bTltHnD->XJyw^i4>_E9N; z8 at CU$_YQOfs4opXFw+5+E3TGGH$2fP^)?IWuePd5E2|&JEoD&oxxKp6GOnH`9!E0z68IY%ivwcx3`cOsC$_&b|mo4Tke%aBONxRh& zyB-eKJMfQ*k(ab3U^YzoB0aBIMj$=9MHk*HlzQ@&ttcsN4HDF)fJ~neY#)H<+LM1FaUXee^<5w1QT-A!!8IL*9ecxp(B at _g zXKvj0b%Azv!6QB)oQI|))YE&OuK>Qc`*4H2xUjwbZwxBg%706pUWq0}>wTXOQgGR% zvW3-0N$|=#yR%mJ?#E=*K6*F*ba1G>0l2(b$r3gD7V<|O^KIkfBuXqQbP;y!{st9_ zyJ+tiUH!J59MD%q&V+9Q{E+F!7jd5&V=e6TD>t-~>g(JSJE0Ze;WRJ-_5_t at 1|tC2 z*OV!{Ysbv_=j0Fcx2MVc$BV72z%|Un3R^)tc$_QNGzv^_M(QhJcGSU)k+~Y!O7q8> zrJj=J6*$^!BltJ>K&P)@HqUu<@OVacqaR0yBJNIxX(>{(%Qj6pi(YB`1dWAVV zjA at 22&L-;+B{jwvr(tG{sTm?m=c06Etcod<$~h~9a#$gU4p at h{F+w1z9C2N6s7%ZN71;MMWys!Ck*u_P1tT at eg&5M}Ph-$~l2o zvAuXuSvmzl>YD9YUS0V-hHy#tT5B%rQ+fRW;nj(RRo^x3;eE7FeRz6Ot*6t0ckBAo zt)sgV#+&T;`#nK z!I9g|n{yQKiZX)Yhmpekjj=^rN|Y+Fd@|~p|6o{8{B(`wm7}72FCns~zq?x;KQN$Q zSe&h%`Y?$s()Q!OYz<zWuoD!z4Yi6!|nVol1?fBmI>9u#? z7omP{yjC}JXH{+Uq$s*yk33!PQ9gblC-VP)xb{cU%I;)!K6kTlQbGc)9O$-#vxDS_ zqcTI_6knzf4bBT$cwrxJ#$!>abQ%ZZL-P-05TGM>??EAfz67X;Aqh!hS<(UmZ6nw; z*NAOy)CfAF2Dud_Y#0^4d914UN63ht0 at d(h*eR1OP{4 at dz`HXPr1gQD^f{-1g zA0U=YHVt9`N5QB_i~+>J2#z*Jn;0AELtH5wh&_b?K^sHRNTm1!jYFYu1}Mnl1vQls zkML|?Kb#BEdT~whHv%+(!(rhN2rick=VIVYwm$-8Vq$_oq7i5`OiaMS!WkS255@@7 zT4?fTA0jP`$_`|40+|fRd|!$Wb1#Pgh0ZUubS>T-g|)O0BWzKiSS5l-VIfd(Bx0$v zxDYR%#96Xw6b_T^#$*PYF5JF#Ae+Wzvgu(EOIHkjzVa{7msP*i(})xf%~b3I3qu;i zkS1SxCkJ*pe|4sAOnD4FkPT7Kn4K8V7fqEfD8bF z!E}MT02u%TgXscw0Wtsx2Ga%V0%QOX45kaz1;_v(7)%$a3y=XoFqke-7a#+GU@%>v zEH=f{5DcaZ)CI@@AQ(&+s0)w* zKromtP!}KrfM76Ppe{fL0Ks6oKwW?g0D}K9T{2%zde9i+;~iY_ISzA)aeWC1DYhNa z+|Bm*+cr{w*LIcrW1`~8MjJovbNsqZ{A=IX9lhutyRTnOLnd~`jm}J&Co+eFRs{`0 zb=}iW!c{W!3Un at dJ3LnHJp6ru>XtcqgHj5O z1*^^p*139G+Z1+RF6j$@ZaAun?ZeF|tVXT7E~(`J}m!PUHi(bLVYHpHmNNw4(m+GU$~y|xo`?53n(s}vEo zYx%^5-q8TFsG&U&4Th$zV~1sK>$nYn%$# zNFLF{^d>kqmSK6i>=H&hc3U*H{a%H#0{X%xix7vTxps#DQ96sK_^6JHe08wEyc^i2C7d^jVC%v8nX^$$MA&8Z_^|9t;u& zpOun~U#C^Jx5~%ydY7!Nx?TjxiZa%w1{3A%W3IGL?QX<(kI55a;sa=T>GVUx8p&{N6NB<|O~VHE zn~7UDAGEwtlHK)l%Am`QxO^#R`QF`Tb|p#GF5g`qYXTO9gh=9nUbHHm3e-v z-(R7mIdOaQIRAz1OoX8vcWl?QsG47ozv`t6Ry!HNp+phnk6J~5%LO^CC0 z7i$r2)^U`PidPeQBG}x95wdK3Bl*%s|1)pr5`tMXhQrc_yRIszT*xQodF#+ZWH!$T z@>BZq-Um%J@;(f&jOicy=n+#?_PWJdvy~ov-RNURprXHv3boVas%CI~&!^WD~4K#J!RyhDhQ39}w7CZ6jt|c*p($EuLSu diff --git a/src/public/images/icon_delete.gif b/src/public/images/icon_delete.gif deleted file mode 100644 index c31ff069900e2cb80cca8b70e4b9dacd9ca860dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13735 zcmeI3XH=6{9EXDoMXg9xR8(FArD`FInUn+&iV#SUB^!B3-arT$Ol3LMcl|TkT#{ON(80(Q56mcF_b7)YD_nJ*R%V_d{}X^Zf64?(ge8U at X*lE;NalEz(9Y0e_vl; zZ*Ol;PfvGucUMxB#MfP5(% z at 6S1mIH5SI{Al zkIpCBv2<*e45e5m#&8r-ilZe8hLTA{`OgXRxJv!k!aR5y0w)l;*H`68VPi(IFr(P`P%RlWD~35W z at UHp==)Q7}lrI#-{ad*;gF;&@zYAI{wyxjsKT0K5xmF?3g at y{#y7v zG8T=AF$u0vJEPv~jL%~Tq;fHevxH(a0wYHV1-9hn!3XYdVb|(dsAEZ9%H^G{FJ0wB z=`4GHDAO-Y3Ks#A3w1$VKn8$dm at cRb$N&%w(*<<_832M|x}Yu~13)lL7t{r000 at TZ zg1UeV0KqU_P#2H^AQ+|#>H;zV1jBSeT|fqaV3;nb3&;Qv4ATX50T}>-VY;9$AOk=! zOc&GzWB>?;>4Lg|3;@9}T~HU00U#Kr3+e(g00hHyL0v!wfMA#|s0+vd5De1=bpaUw zf*+VJo#mGvm_+@&BUb&6Lu>BuzyAE=_uIeS`t_Hef4ceOjq5*rKl|Oc-+cYmwJ*Q; z{IgH5&V2Im^hZ}Ne>nBQ`|rK`&f9Oj`Nr$7UAp+{D=$w at jE`Ly9T^@Pd}-jt{=OG_ zd!FxpuIt(JogM9Mtu4*xn$9*h)YsLXsj052JY7*<$2hH z%W-#OySf~5e#*)5po6^~i)l+>&~2=(EG^7wR0^47X8Oc|{res_dCb^|xEC?pvwN4p z&K=wJw{6|>sNQDXO^kpKgk;Hb_Bax1 zQfP3duEFE%xg$l+hVJ{kX#Vy`IT)(iy4q+HbqCAD)zX)((qCh&OEa+F?`GrAQEk^Y z*=)Y+-~lcpz*Dtz?LIxL-A<;S%-|;XE49c(y1}08zVe$5ZY8d}wzSt47>yU|`=lyI zX)P<$wry2r*%KQs>QaJC;v%nJIJilVEeNI(n=TpaZVU^%;hE~1XX-MUTw#16Wy3}X suFYuI>U9-$MS9Ij2cC8TkzMO^xxT(=>U`K(_HMV{_R9__1j3X50KHs7CIA2c diff --git a/src/public/images/icon_delete.png b/src/public/images/icon_delete.png index a4ca764863c98fbf912122ad452d892012246cdc..7ffe772e7e8230503ca1a8cb0725dc66f385b749 100644 GIT binary patch delta 944 zcmV;h15f;p2gnB at iBL{Q4GJ0x0000DNk~Le0000J0000M2nGNE03w~Ie~}?5e`-lY zK~#9!tW at 1=990zm-8(b8vmdix$)+Kxl~USDuob(t1|ujmj|vrhs1JoIh<)vUkVggo zfTBp>Gzh*b)Nd(9lqA+xo6wd@(PC}ckL>5{%-r>yJF}DBCIugQhr_w|oH at UH&!<>g zTEgR6=H}hrnBbES-W4o=<@7rXe_5w+K?repM7^PudQ(dI)5!m^Qa%L4XZzLD=iYX5 z#c#Xq=2tgL5Fc_TK?PX$N at l>k3XZ9Jxv?``)y(SIgV18i%%b$KV>HqC>9)~Q#MjWww**Wk$`2H at H`)Gf4`4j&qcS} zLx-qZZ^Cu^*toj3y!_#NZGV9!@7G$I zZ*^Q$w>sFowqDT*Aj%k~x$pM%E4UQ|`lnv6t+@(R$WHF~SiN0Gf8}@uFE5;co1DOdAcvP;d>+poe-_f2#>%Y*4$U3G2|BO; z-N&y#euGaxdOu4z9>1(Xho!-V=35l#C&~_dKfvsy10e;bi&E$XFnedw3K9NfO0lgJv=?J_MS4z%(&B)*5Iey* zQ<8uzLujJ`LLA2C^Y*3N#zF81FfHVpO*wo9401`}p_dsVDwlyS_FyHTMg+sws zQH+w7px7Da!{{HJPEBEU!VDD5Od8+Ut73L6Ze+XD>cF`cPJNN3?SX+VD zcRwEm<5AGM^2-k&Q()!w-+rE#Lgx3(?mP6TId<>volVM0)%U$ifBkvmLLAR1ZrmFM zo*>*I(EyOU;HbzGegKb_I#D;0$7LiV5Hs3KjMe^jsYQk=>PK$~#Opr+1_0dpT~_6} SO7j2!002ov22Mn-LSTZ9V9E#p delta 885 zcmV-*1B(2}2aX3JiBL{Q4GJ0x0000DNk~Le0000G0000M2nGNE0LiKxe32n2e=tcz zK~#9!tW at 1g(@_|Heqa00mFUcUn4;z~F|aaAGGaspNkx}l^d|%fdC^7PR}gd&{RLeF z(M8xI6iOmZ+jOR_Xl=U9ujZW1x#jP3zs^~kjnPF=FT8L*-sgGG`<~| zquqyU7}jtB9P1`qM|3dzeg)}ae?XsxmK)V`@^hbeW}}>d={|n+ELiSp&xziP?FTyG za=Boub3&3u%+H4r3J3A^YY2h4nIYt~2i{5F2*K%09(=6pl+FqFZrr%p)pza;);3aj z?iqr?Ai%b#4z+u15Cj8KsTBPFDLi at dc#6 at K>)!WMZ#Y80I~w-h8WFwCWc>iTm0$q;B#?xS(ZaE97Z~m1UDb39D0;+ab!E7>v#!?L3q6Bo7qbmnHI#9ja zLUf|R;c&uiu7J@`D~ga}bhcdE9QS*v-d4Lat{~+oq at m@;;vcP) zKujc(e~S~#3G|$*e at xSXcY5}Zh?V7~opB*nFC|bFN%VMLJcGruYbS7OW^QM^i`)RU zXe+N^C_4O7-o z6LAYYae6tA}|+k00000 LNkvXXu0mjfGOnLF diff --git a/src/public/images/icon_delete_11px.png b/src/public/images/icon_delete_11px.png index df23d647b71064c8b8a413915aca2b65260f4bf9..93dc3e569a884499034b217dbe08195217bd4164 100644 GIT binary patch delta 346 zcmV-g0j2)e0+|DlNPhu4NklY~Cr2#2pAeI8+XFz=R+<|qoVDgNH z_JQ_1{K5qi@|pp^etcv2_wNr}^S{4;8Mt at _8D2cRzTwNqw-Z=^VmT3!(E-w80t}L( z{0!fJ{$}{_=^I$_r>{R4p1u0Oa92n);LL&be?W at w&zUiaL4QP25oqdPhQEJ)15Nw` zrvLu^4dwp@>AlYgaHpOD2nH27F@{r@?=xttNHH8dbBn=9Q;y;I#d{1VjvZ#$ zxwM;+3Fbaw0d59SK^_J{J}w3k0UicE9!>@kAfJ_m8SV$TVr&2 at pa?5Q2VljopWeNN zZVEC0$%AMXC{zF5rCU$bp1uCSAR)rfu;b`e1|fcKhK>6!Fnsy`lYx_){|&O at o<(z~ sfoLTlRzouM7D(auuOI6`9Do1=0Gri(Bn^i4F8}}l07*qoM6N<$f?~~}7ytkO delta 280 zcmV+z0q6di1J?qONPhtNNkl<| z$Q(8{7OZTniunZuv9i$>@4Ip5K7*!`6oaS`KUe_728n^>&?BX6!{$9zKspG`uysJ( e2IBw(7yvkgLlK}?VXs600000L=V2-b`3?j&84?5>-wNee3C ztyn863MwEf3KfdfyI at 5`3vH=*fLc*JL961e^{Tr~niPB zpcV9um>HOcm#`|UeY=a3GRsAPidTWKAbN;>Ev*DD at E&5u_y84)+RoL8m<$h3h)oeY`t_XNFA5Jr6H&f1_wTQ7f89P-us6GW9P#%zYAyoUHawkL4 z4CPFh4}#L=Zc-O9NKC(V{Y(dp|DQ0P%lMLOlxY98 at Ei%EAO=J=t~s;r?~Lb|kfg*| z)hoo-~^SpPCdc0woveLb{*~K*1W&+>4Gu<1*3E!T~G#~V3aPT3(5c#jM9a4K^cI8QM!;WC<9P1N*B at vWdI6B z=|Z}o3_!ssT}T&{0Vo)y3+aL~00pCTAze at gpkS0PqzlRb6pYe^bU_(_f>FAVE+_*~ zFiIEF1!VvVM(IMjpbS94C|yVwlmRFhr3>kTG5`f1G+nvbmmWaWo_8d)cN~VkfBydK z&p |Lxabe*WplAHLuB-M8QLeErqlJzswD`DdSgviswYc753W!Tay+-0|)^Z@;zu z&8}^o9qn7Uw7v2A=GQj8y786Pmp80$dFjO$o`3GyXPVbNy|!u1>Zcl4t$gx{6^}pm z=<-LFEnV{PLk})q^uYZK at 4NS&1$Q^xRe$IFJ8r-2)?04A>Bbx8T|f7_Yph=(6sp4^z;jjXtSc_R?9xjrFP=H$qUphk@(ZV3Fg0-gd1a+jCi~AV z at treiVzJlb#u%5=Q8eCeqpcKaF`LGneb$+0oIdunLZSda^^}vxoOI#|#~*j>F-MO+ zDnIYYBSwuJk$d>?VMB9_Lk=@wSV6DRFbo at sne^8&`hyzG7;M;5+PJ~l(>Xh5Sx!Aa z+*rM8D40Oc&FflcG7MR>r#FDL;(78oY<^o|eh9NK-8ObNwYq$z!#J^hSJ`N6t)6|@8fLY0m+x%%HFfvoV-x-bU at v>A diff --git a/src/public/images/icon_delete_white.png b/src/public/images/icon_delete_white.png deleted file mode 100644 index 6be345ca1fb0b1ba2eca1ad210902aedad115a90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 501 zcmeAS at N?(olHy`uVBq!ia0vp^d_XL~!3HGNrubO_DVAa<&kznEsNqQI0P;BtJR*x3 z7`TN%nDNrxx<5ccnG)BClHmNblJdl&R0hYC{G?O`x6Go{^8BLgVg=`5;~Cf7n1Sj< zK%#*!07Mk;uxYav2?Oy*C7LmR(tP*tzwRv zCBa9w&YsE4VQl_^O>b}8^#b)`?r>xC8B?VfO5ZJ2jM$=R>YHY)nYpUbebW4zN`3n! z?dE2)&$dtbw0o7-nk7 at _@4owv{eT3sL;mi&`$9v%{;p>zFFO$C>-AHPY4y*VK7po9 zI?JJj3QZkU0JHP=(Dh4KBCE zf=(Pw3JLq~pLc3Fn&dc1#YT?*lF8G${l;_sG`pHie0Sc>Q}J|)oaPe9;=r(A>oJMu zYr6ttug|@?im}&__eFd{Pi8_gkJrj=kG0L?qh9O1*cJ72qII9c>#(IFrLp$4zb~)2 zc9h9$rQe^h;+PA)8L7fs9Cm-4`?o`X_bc;5vAgXL_x>uik>fl(LFe>~@4x5xsk1dR oR?ZW46}>caw#4a`57^}0UE8*~ZY0tP*Ur>mdKI;Vst09|gwwEzGB diff --git a/src/public/images/icon_edit.png b/src/public/images/icon_edit.png deleted file mode 100644 index aaf2459f2e31ee73a7fff3e324d2825e4fca1e65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375 zcmeAS at N?(olHy`uVBq!ia0vp^0zk~e!3HF=pW8M9DVAa<&kznEsNqQI0P;BtJR*x3 z7`Q%wFr(8NlNmrk(Gu5)66d1S#FEVXJcW?V+*AfreIrYK0}CgYnWjJmG9U%P`DrEP ziAAXljw$&`sS0kHMXBZaMcKs)&cVhruDLM-)m`v(aSYLzICYY3-XRA8H~D>xw%a|D zgO at M)ThkJw;OaGpc})@jHk0%lYl~U}mM&c6;r at B4LxjXn_AsfnCf4sW)3$J@^(_&* z!7$(O*s-$rduKHMEwsulJMjA92G&`>X9YH at Oiw*|x`^|@?T;Nx-a0pF$ApTSI-IMS zfBuNX_h8xb5BL3(mrqr-Y)SBB<4M>pzPNy^WRkXxrbJWl0``6`xmI at 8Nm14}{roh2 z4mme9omN+Te&*@F)W3WOlFA-COe|iuZvU<$#s$}}`fk~Lv|RZQ^UZCi<#~2Lx&rhY NgQu&X%Q~loCII`8jh_Gj diff --git a/src/public/images/icon_edit_11px.png b/src/public/images/icon_edit_11px.png index 398eae61c82434ac65d8c90ffd3e4934b3d2ad25..b695d1b779f278150796138bae0e2ad0d876dd49 100644 GIT binary patch delta 272 zcmV+r0q_2e0?-1GNq_Q5L_t(|+G70w|33pRAS)}|45Z9~_~hfqk84@*DBShf($W>g zo^|h at E0E8?h|Oe>!novA*Px?^8H@!585oWqX9zU6U|_Fp^3 at 1*UV7Ld=aOTVzMz~^Rg?|qpy={=a*->;I0)`v0$QbpF4%PU*j~vGIS9t;iVUL8JHY zzc9Ri|CK at 2s{w4{gsp<8CPD#7G2g0Hm%yBtFYn=02m*{iXZ%7I0LBy>u80B%FaVu% Wj5au(tf~M200{s|MNUMnLSTZ9NrmPB delta 204 zcmV;-05kv40*wNYNq?_NL_t(|+G1wF142VXH*0HaF9Tx6YuBzFV8)~HfBF0OYWbX; z4DavVbJ+6yIU_SJg%%bT48d>Tg89ZbZZKSPcXwdIrO?vSk|7KvaQryK*pC`J1pgpVET#jOwsKpymg z_~SSOgnq(cRSae_VkibF3JdFp3*b at +1OJimW_&RU5MTg}O?4#GmVYfgzz?bA{d6eZ6n%BsyjeIAzl9cLW`8KrTneoD5mBpYHy_HXl7&mMaj&{2#TGN zgOQ1=ob2%9+kS$-`xR}B9bNS7ji7`LZS;-4h at 06Px!BlSID8RRWKCHRhk=5EhO at O- zQFYBYTey(#WkLzw7E+GWc%Q(QB3u(M=t9WY3zgw=4CfnXp(bn#7T|ukJ}aX3$(XE+ z)^s_m*sQ2;P_>wkR>X7HQA{XXG05K}~3WyVTF}=|(%zp65IO*(uxh=6jSyFk> ztBTz6N>ui>V}&4&@!0Y!kqtA*C(co(0|s{g(EA8p9ki*x(V63e4d{$i90J?SDPBX% zfY^dh1(yMkoMcOG(MZkD at 3XB8_I{Mt#(=3;#(xj*Z3#&srpsp6UeRJGeA|+= zvJeq}+!%qpt;7CLNByT(Y4TZfprAM at tt^xj-+I|g(_wX>hQV2dK;oKTJ at KVVN6G1~ z81$L(m(->FXE7;63Olp}`osSB{=dr!)$igAjf_g~H|1O=Q5brm5ro=?n8&_}?(l$q zOfDuLLx1$K+Fa|vb2Vu!KQ8UwUM^=o`{<0`zXgymX-t|njq>zyUs*-8xjn{LX%jg5 z-5A8ZE{GGi)BZk=}#nQucE1j_4OzzR#?8rHjMrc`qRIY=i?vBZBCyhBK=_XjnhZEOum9GXrWh zJyryMugGQljzj9s&Sr$QlTWtKW-FbeF*_Bi9r_rnRtq)*NC;Q0W-HHq!^j$@fxXq; zb^M0B!KWvp(d&CLTG5#Bt7 at ZUWr+f31oV;)~#{`;6j(T~Bfx}41;bzd5S>w8_ zQv&7yy;Zez)7 at 55L(c~U#N#WdMFx8xCb1hid&e2RQ+^vR$)PxB_)P3<4FIJrZ);2B~Jh2V4jYC`E at 1 z5tdO%(n$>E+95V&s{E)Ouw+ZNV`$&4rpc(xdFSNlDBMky;R6>nL1D>#mq|x}oeT z&|HCf>}i;=3TC!X4;O!Lo&wbJN0=cTsTxfC5XT_-7|x&abO)nYX!`G{3>EuAf14u; zjgP3X{Ve at B1$|054b?t`$(mQM#;sYVpcR$jHOTD#p=C=WR8|q4dH86kcJy-Yv%ta1 z)zzcb07Tm(=!RI#wVf(m04fxEkKAm9q&+m@)r6$w&=uD>`aY>R{$cwZ_sNkG7>^Fb#zYrRu<+LDD}VN5CXPM54Mhu_)w;H?0m5#;*hliq_uk|-o;x<`67y& zaOV*8NW#a?c{8$xAxjxC1J&u1*iz)>qp>D@@^wv7kiWo7{pfX^^t?Kq()E^mPX4G$ zarc?%W`w$jA3+rtvsZbUnqM_{E~je)LFV#V&r8RSMfLaWr-3WnCMun;vI{+SD2axUZHKB)m*<(dz>5Q#L?CvmW}T zY|f_a3QOqxUrv7T8x65^nhnG#e-w}F&qcHIDPF=1{vI);4J+S}J$%(D#7 at d=o++hS z9j#50Qpd(Ey>e?uj!3T at M&2Bc?kXUY`hXpt>A=VpOHn+4i86~o*T;;w;6hMlkioL` z$x8g3dqoAuI^9I;K{*~{Dm at iGo}xLa2NOMq1N{hhaEAKRL|3_?o?Vqp@`J$Mv1NR( zc+a9K)8yblTu-P2vuAAACo=Jr)9u*I6Nged9f|u9C{1Wd=D0*wc8q%zrT7566a`PK zF at tY1c9U03!j8CQ41 at DVU2qIA99vy*6{nTE$$s~7cw3gLH)60Uk1*%)AK^&*j>m(5 zN?IiTj%)d5;GUm$I+wsC_rtJ-bIr!i>Il_+VFo*9EEGtONLQ}GWjhZ at f(Wm zkhMSh1cya#kb0nVJnUIh^2gPb_K`IAI|5mcgj^j>vCen0sZ<2#gWPMe0W6u0-MK$u z;QnxK&5ikxO^N@>H{9O7fgVA==b)_!x??@%hZ#DYpeQ&Trj-DIJUh`jgfxDxm-q#! z8$uKVQ9`ykEZc)N1$#N!=B8OQc!#Ui#;`0n=|8dN9JmM#1A1Tek0_&+npyW64AWA) zAG$;kVQQPgXkb4_D(-cvulpxaonNV`qbTH5fOGo-Se2GWrHDU2a(%|!ClZp24c!=F#|p$Rhd>1ZNj$3-b; zGYcsaCB+>MuD;>-f9*@|wiB at e%A`w*Xb|k`$BP%1#wlV!X?*F?pBO?1b;#QJ&I=S2 zq_O74X0qRncB>80pf=y)6qXN8F+%C1xqvF5zto4MeT7X`&ARc=9p>N`Rk+;u)m$R3 zM at 84kMQWK6kr@$jD({)HwG7fDi_Fn^*At}hF;VCh5V at YIQp4!C1kOD at RB*=L at 6nG*tkL4qs+TgB)UHk7viX)ADav zSogu-ulmlkI@(7YB!0#{ZV`wy#&&t$H9XFU!jkO1x-SS23B^AY1FG+Cgi-ty#h`VO(5KkH at Lu4X{ z-3*lfA8HY_{vPAP(vbHTtb|%{MdLVBmoVU=u?I3@<^q43h8syC;L&@hz9 zM3FnL8r==WIJO`{O4ed9i)Cbq!$-~2N4FsK7$+EK0#2zZTG+{P%CX24mgk6JGFKO?zK}i4x zeJI|3m at 4$3@`vxD`9kyQWSW%9el5mCGH8Iwwz+>f!3*i2Frr;Dc6>s7rEw6YtR! zNdWX}<7Aj3UEz8 at _Tbk(;wN9Cbftp5toSkh`4YpLufo;X^GEOJs6r0N27cjHVkioz zqG7}H9l|Kn(- at r!-u2QK&8+=Mm7@=dx08@#7(y1z z*4MHp?M3p$#ZlZewleiZx9ZW4PSHun)8nS(JHMb-Sfn~BWyUZSTnYYgyw$GP&lzz8yLX5Th9ekAN`mgf+nhks4#@AU* zIaiyrYm*UAQg3NIDmmBJKT%w%9^dLaEUP;#=e^Vm8HukuEN2Z*l-c_6#N`~DBE&P> z>NN!4mjV1+03$cE;(Ke`YI?}|M!|d=WW0M|3G#$Fs1Pi0{$9zPz^;&IEdZ2pO| zk+Q6j(#b~IuHos5Pt|bOMtnifep70q!<-+xCJR{+(}N&%`WwC(;Yk>n?E}@pYT(k) zlia~+rHWL5gnRWV4&t{~Le|^S?=Llqok6bi$BxnOmX!N$+(cvqd*xxi&-;ij!_i5R zVW~*dkkD%pr%EAC>+n>k>`Uni?T|@b*I3s;F;~J~!olN!v+sobLP_eC>&@8Dg0_n^ zEyRA{MXq;AT{z~oM|Nf4d at vHF+;;sOVFIlqhq*9MD6-)~lNWTbLd|a&ZI85F_U({O z$%)m8R&w!&k6DX;C9^quq`Z42p;QTTwW#L13bgG5xp(W57nVHB*c^L!!-P-!%05~m zB#ut`IR at qYa;nH;X{x29EiFq<3-6~`KYp71IIV`JVUQJ-Vsr%S1>}JM)U6WhYs=Eh zkT;4D37JX1w-g3eur!UJl>?K~lQQ-~7MyDLIcvq)Oy`3e83=QD~e0WS|ha1FrrWUq!dj6araaIc#!Ja{hkPbbSHM_}D9-?#1FPMeufa-BW`_v*n_W(9{jvyQzc%U2Oy8a zLX=645X*B&OC!syMOJ;kFN%tqy*fU&2hvqlC`G?c6Y^OFCk20z;KgmYOYJz5gC-pec at dZE;#h2eV zW&xSnV`WL}R}XT;(tMW~2TVD*S4XXXg}D#@Wj{mj{v8N>-P*<=K-^6Qac+6?Usc!r z?6C)UWK&ADly)PYq3zUOKzR_Vi0I)wxphX-C~Tngt! z3z}J0KL|_9v~aFi=4L#It@>jTRDtV$j6&~VH9o~Ix`>i#B8X~wra>56vF!G6dOG)3 z$zgor{gRtvdMfMOSX!P%ls1pVD!arYftG_~D9#|%&)%o)lv3Ol<0B(h$2{Ysv>c0| zC>#xvVI8Z3OnKHDe%&J;P=)bPCy(ghj2m`P1?z?RL)-08<%}*(>PQ at DjZc96GJ#{Qf1AM2GofSfRx}Ov%lljO z78(P_?!Eil$$~miQU0DEMT^yOY>JQzX^ty at 14$LUT=8@(^=1kFJRD= z)%vMnB3WM@&Wol~m(}U6jSsk2eQMUg+`5F$Ngh2O*K8~+ZOlFM4mKlkC at ZF@JfSQh zksnQGS7X04zCI|w2#dY73D6-R2{5OS^OauK_ z6J at XFq(5s>PMWz+0)5G*p?EV(74*}V-rfWt8YahgXS_@|Q0KPdA&`1pjRy9=H|DKR zc~q*@g1pf|#T*m+M<&JEYq`$Vi=VQJ^x=qZCveZCv#!tuSu^+nE)rXz$5oAD&)g&% z^=4%V8)C0x!Ey+{X!)G at RsuIknAUNk02NT9ZdP&&TbF*A#F_jsBYRr}@B_4>hPe;_cxIf!Az7uhR^c z<=?OiHCxEXRgsRTS4E6o0IQCn16{;X^J1d zgm at kO1eE96jF7}G5Rmn!+8mz{LqCK|PL4my`Z?Z`nv_ecaC8NKPP;9s`Syi#wMvlO zO?S;2%0EiKF3p0lyyUL1`6>$!f`Gng6%F!!RgG9U>C1&QgQww^j+k0 zE5EWn^Q&w+4f&o24%k0a$MosOd&$R_B1k at Uvd`X?c#bK2dUIFOCmk&7gKg&1BDXnv zCC0`OwX$r1#SP*X6ByBii{6fK;Nb}4khIT at nkt{{u3D<+aN`5wa^~Vq3kg` zBi0gM_4+3>HqwQC9SD={@v=RBW at ZDgGxZRJIqRB!%wdRu?O-=$5!-!T z!k+@$ecnk5Ot$ozn!BMXm3}#~P>H7AdDmX+UAyv2v#b97KQqr)x~*|n7+T(<7xK^z^ORWMbr8FVo!uL&BC#f;qUiakt)|6s4R!I${;G#90q_X1D?g5 z3AuD_GXj3-gL7TLpqbf^+XtAYuL9gQaYy?M>KK;VNk%40(|siS`A1V2A-v}6F$WU6 z+;Ev}%y)zC?A0y(r8suAM}mh}Kd(@F>8(jDdlLn>QG^1sn2J$l at VEuslAsef#&xNz zNP`bt!uCJW7f~HFdSkX7>VuCW2^Z1b(#4#StmCyT0>y!}wu6{^xAPWKUL6 at TGu+dY>E4Jwb zRY}gyN6+Ke*F5S?C=oL)kio(7tN+a6gyPBxe!>-ZTooEgl^DNA at lZ1z@A;Sq-?`G6 z)*yms#hGxsfFkT!gz*qIGgACU6Or5QLOU?Mq=%;209SJ4_Z5=YjtaTQhWN*TLke^^Zi_RkH>Ke7XPfs5$a{< zwHlHSwVyBCu@*x9h5TZIocN>Fq_U*2b7?Xo^yD^<^F at sYIPiKb7Y|G_Nzsy at aUE`Y zX5en|pp6>RJ3ZJ-Cvk99?SxoMq~lO-$=K+GIaVtEV&@Lbv?LlEXFc`_J~XR0{mfxf zS3Y#2i49pU*Vd8a3vkz-dcCXwc-);;>5 z-6?I{Dn|e%Bc2o|9v0m!lJi|B(Z=Vu%W805SMzThcK8$btwiGT6obw~b}XTX6T~z) zx12d4PNrgULwpiiyd;s49hc?7b(a3UM znZuxPDhxujFlw#RsPanpay=eJk1ILKxJACt>Q<(bCS#gbA$Q8niI}yt+9#O7`sZcZ zcK7TRT)+A?!faR<&i*v3 at xdDdn4Z)?mxOL=0*3;ZRdg=w$cuE(iw1g)Ovsh`6h>Ic zKJe6lcxAz$E1K)_>K~`($>d^7_?pFJrR7HHQ|5zkuDsB8v=fj04`d7vk~oRhX2VYF z_db$?6_f&6`7fj3QQ~f`{ug6 at DuN$9n+^Gg)|Q{ZkW>e(h7Tj}YA)9aJ^1r+snaFe z-w_2`Q`Cqon|l-P>9?0YbUuxO8LvT9=7Q<0SgG>*?S_CQP at 39(`#@Gr5YJsuzF_D^ z89Ch|L+{Y~Z#HR3EUW=lD#xH0Qb0a}szRRDfJ$%LuLF%LcoR{T+JzdFu;E8f=`sxR zGEM;pHvXGznSZ}xV-r-`kYJF|%t<}Wv{xE4BY34GOBMJx8U<1G`Qj-ZTI!o7d-i6Qh{?x^K z_AU(s96tjJ5bU1JdTD=b-`sMa3fqRR(|4WXZnX+B;3bC*Dq8RVW!mDg(%F1Q^s(BT zm%qfZQ-c2324kq5tih^_VTPDU&*F(+s3*l5>```EHNCpZdt=cm8VH}9+7(OK)}%J5q32Em0h6{6xun_nJ)L*`SjUi z_O9dHmjX{)cYpFcWdzcaA5qdj>Z=_xXntBrfowZ zg{j@$19l~|Zw71d&O+24{N{5x5`%>2Q${@Sa}>P%1o^G5!`q z*S0z8g{*rWZKj%=*Lel{OV0>9b9w at FRA5Fp%M4K#vVCmD;p;}UgI8)69};8nA*h{q zcCe1x+vQRG`uPSn>3gM{%YLgLg}gOqRRcr^qwRIWHukY&NHfPS)RT9(mTYI4zm=#vD+1$O>{4p^IH)Uk%rcx>eUKbd9*slNQf4W57n=qSMR8Pb&k4!kHgyt z|IPS}0ebEny|+GkNgTDQ52?^<;P8y3^>NC8liP67pud}A;Tpl>eXfV4t`pB7rFNl% zrTjE|3@)!$JSG;_?7Jnt^lsxW6HF!_A5Yca5sbtnB>bfA_VCBdBCR#gI4<7?)heF* zj at IP84I@S*r_z|+$Cy{(JeO)W8ON&`4%<@|%C}#Xq4X()D9Po9(eO@#ZGeWnQ*&^tWa5jhqM_>mhm+I0cvOFP+ z$|R{6z0UJXBv$YY!F!5qlwWWZRyueo#-%tZa@;Ard%896cT6jG(ftL-cSPxB9sGQm*jqi=Ht zT$37c;us1Hj^V8aI+@%GBXY740-!@n3i;x^I7Y)k;RP`$ZzB at x=QND7P=6uuwE;i! zbi*qyQqQa^@tCy~b<&P6HDe5DI&cLf-YL!uBVE!w1{J)*JHPNY5gTPL4Pl$+)!4dV zy5=)vaExnah6c;R{K_cBW{25hU}~RnqQ?vd4X2nj>ZR$1YGEyWO?cjMsv&oFX&tX z5oMSDkn1nGx!Y at KL^YqI4k$`af0|Ls=o{Rn4W2JZMJNb4*6zQqI7XF=$ZU zRdJMWmzd3J>IfG(kv)ye<}PfS^;Ilnav%X4z_ti11$YgUkp+|NG5yZqmA?}J&`pB1 zFMud85{PUZ-Fr+a1aR?_y4Sce9W!?q3Ouy3{~hYEH9LYfZAsgFX;cOrnKGnehvBr2 z_mYY1&3paQYZ(GYj0ObLErvcu>=`sp&Zg`R7LP3D%uDJ?-}wIFyiFh(eJ;cmRpG{w z!U`AfdnwRYCHTrrx*Ks}DIC9R<7fU&e~u@$BBisI5U zg$2Zj#e1l2ODe4pNsCj6rWRs=UUtEyHppf4i9g~;(_u1Sw?~%KzUmKIAsb^NnWQ}p zBvr}ZE0WnJ1k!mzTriDsf&JYqS_e-tMYTUZ;v?$hb at LJ9OCwQD^k0g->y1w6XcnXS zbC_T#IO^~a0%xuFUotxV4hm#D_u6e9Wz~=`>)*E;2LiW}MI6x{n?V)0)#&M~UL3td zDC9j^Z;B(5mh<`NeFaT&O&mx*RL2|GN$5wg z)sk+yCwxu*VBO0AUja3NkcWc^Z8~8RMm*1Km=z at -;ggQ}&=`}plhZzxY!AzoaYrrI z*%0RaK7&P$Yc1NLi45L|=h$B?2M*<@O;>U1t9W+gPpRRa-eV9uUF}X-DehC%%O>bB zZU(fMm^bOxp at WG3h5nEAd{;Le%WJVnP*#AOFfE^VA(ehstO=J(oI!O8{erc|7h{p} zLAiA!QBJq~kxY_CirK!KQFyHHI4S+gG9=li8Kke{Cs=iScF}_)`Y}jO?bsAVQ#}d$ z`Ka*y<2MS+#&Ng9$CD;Pk0_EZ13wQ7O;}dx-kYL#Q4w at 4TFz4f(qsg8PMBf zukT1ZThyT7i*TgB8yJFOh8>H{q$uL1Gu-&5#jBC7jBGQ0uJX)M#>HR_HZA4H9+&JT zy!XWlsY+q3>1(T0B+#vwGb=ubFf}xZe6eRrvKtY#<_|IhGT$Kks`ah6SwKnB=N2Lf zA0$$>XPegin27o8$-RYjCvg_gmwYOW(A4#jFoP8{D9C^n1>X$i1^p98g8d&h^QAc( z%u;bly)>pD3_(g7N;T7~TfL23rXpKQLqMromLEMo!#V)t|^R)O(9!yWcSa#N_+2}j~}v-{_{RJPE;m^`gIsn zuBhZpQ6!HEz=-BS8yol at lB2+9=aFo4QFDftkYAquOPw?IH6ORTZ*_=ofT>v~ z(y`SzDbO^miA`mtPYMPhHy1(dGje)r1u0hBq at yEl28Tfgx{dy%m`t&57(G9F3@*rs z;pbNzgIrQkgMt|TD7qBzso%SspYOPDwS&s#ohG`e1(0zbzN+MTDr7Uk9=drw^*C+- z*fS4>!K5?Ihjk};r)&Z4L6_&b5)XT!Zg4tgKajU+(L)p2s}=5li?N1KA{&25$%RSb zpE+skx}Ft7(JgX?Qt7E;*D(vZQ5w$Bp1QaSvyXq_iAhk3*Gpu%jZw5;fk3iMQmKqG6p7zd#jx_#FEy6 at 1fDQQC~gYG8+G z=jOhm%n;klCHc;-b__)(X^!P-Al>QRA;~?P-&QA0NUd0G*bI(>ZdITDB7%fR2d$Qy zHV!SfW*NP#W%MzYe_QsnB$#|WyzP-|!(PgZe>dXYzQef9 zGrP3ALiS&QxwCc;4F%5Q{9zgDJLF5$J1=e?e1z`KTSQ=D;<&?m3bunIsxK^wF)YNCOb54u}K_l;+NBTbxeM)u at Cw0t_uH7c?;z zG~-(uOSo2FT(f9vt~kknOwAYMCOY+5$m)}U#bNwWeF(&p>p2y!a{Js8~-+pFx?I8imf&xk?gkC!X~@C}&J&udGkAleTld3b&g-8=$3ULIUR% zzDr6kN*F7M+$77=8M~q5#N129wUwpQ360T0w{=5r zl{Jmd=zx?!f3TT|L_|njg;`E1N`?J5V9S0X1r>L$)4Juucp2IUjd~Km>JV>zszV9M z;-60>>%fyr=`S3LyH+ZnSg6Tc1=hU3N{We9)LK_S at SaO}aWjbc&!5FvxDpMjjOw#Z zY6r5dcBm{+qB3IHSy%?LT_dC2QKG2s<^8u#?r9`Rz%7qJ^Z at KQgJj#|gW|JfI|}iZ zV`*!lQxoemU6POnI}p0$Hf(9pOeAXhdRRs$4xV%DJey>mCbD) zpo&?jNn&pYcVAzS?!wRjGiB+kt05;|jaVkmva3Gp7~b;ffVyOl&->70ZB-vF|4Zr_ zIe at G2=ML?|UQhWH_KWeo30&%3q;&77L~35RM`=z(!@^uuUKbs;b!@cf^)qK{YYdx2 zFOl^}72fRpgSpkoJhy78I)TB(3f1THCCW3aDG&Xt%&PkhGfzM*ZaXg);C82{f%0ud z at FU^!?@qYWZXLzr4{cZY8=y^!&QvZ1ZxE+Xuf at sP*)iv!&gGz#7R3hAYQl!aE9 at tn z*>L8oZsRI)X;o|N6p-##+mdgZ7&E!PkP$B*wZ1A@!X^3%cac#sU?>{LTd|H`8A at r z3RV70$jtrfu}L(Yd4?~pUF)?PKC=pj>wz_{z at zo6ppPkYphhGqU5XA((wKT8{k zmWXr7q`_tEJ5lo9Gb-#GF|qz;GP0{7V9#xn=AEFsRt|e8t9bF8H93Kwk?E6H4aQ&F z)%xpHjF~y*f1T-#NT5V*CRpl>7v4DPW`=vEg1hD5C at oLAj|;92J+~p-!dY8 at mzSOQ zuYNiFKXDa9*OZ`b(B0O`4vF at u>vyx6C0YWDi3)CyWP8z_PN=ap-? zWmP7VpK+4Mjm{&@YK)BB5joJ$*#s_vOt%%k{AeO0pXNx0 at J+NtcuZ=<_Uzbl`qeFTrm7 zqjk#u`w+3yinabk?o^XrG5toI1)J;RGggd&p%I3Fd*58shv at DFgjBoGRnhB*n98C8 z?s^jDQO}NeR>N=>v7~%PiH~QPLpd7OC6ZgabBPPsmG(`TpW+}Av^j{x_)(P%fkwN^ zQU35i*ZH!*lDMR=HQ)&GNAAe%x%s-}`_$O32L-knjj4F(XEC6ih)U6qB>x!F2-zHz zz&_iu%`4MAzJzvW0zob4IM7N~S+|d{=BjOUjCmK%1^pT at P7SrZSa1vMq$EfX|BAnU z3|;Sq{90J?C^{yvCu6m~;#-??b?3L|>r{ zdPR70N9)y5jzKnr$G;2Sv%~3QfV(N?-;Heg#o(z=vIk&(j>girps^)$Of| zQ**Il|KkSByK`1Nb;0#91H5)32e{=lt!2$i9?TD}MBX at -+PU9xS@wMi>4m?i)!C$8 zdXy>zCoVqTm+h2Kb||UcoR7h;s7k5gb{m;Bsg)uP~dUVp#3Hrx> zAx<8}Z}oIV(6F_$Mz+y6FxE at L@PgT+>b)8+&FCjE*#OV6*WNjn81F#->b~TReN!s| z`tdZkLdHW99EJ+D+F8XJbDhx?)91`Jb!tu2!HpDZBE^>BErDT#* z7y0`1gVe3Qnl5^^uhWH^(EJ8lQM{Ar?pdC*xB=L_Wf5Ko{MehmI=k_)Blqe9ZQ&Ki ztlg5zGfQSOrFcG;+xTGhf!2`|F(QA%RB1){w6^KfT#}D3YB2NUBsqmEvEhEd!8|P_83aX{o@=cyGx)np%wBjY^{^Sp-2qyp1`q+IbMpbbsdsx;>F{3Rm at mG)|9^ z^$I|=-rK<31@?(Lvl)=`T|5~k_m%&GAHd(?B=C}S${Meu4R3IZo>r-MA#4&{yvx=G z4A=7JEf1IfF%GZpza7GAJlA3zv+=6==tJd|$){m at CS3#cOxu4UFj{$rqIZ}2mHuK@ zRZg0&*irMLfGs5Ib(DGF;H+^V!{9Rd2iIuT= zO>rwWqVO8iGK(*84%+x<;vg6?+bTFDV>esV53&`i)s7{)VZ-1|N<1ivgP{oY}WupJp=Rq~z7> zo>fWSzkyT-EMKs}Qv2u~1bIJI%mYF)8UMdHmt=Y#r(bi`Sfefw-PkMqK;yP!Z9(}+ zm;EGqR`bH}1ur2ITOr?1EJu?KDV^0hdFbWW{|;Sw6>rdG)7LS$G4ww}SFZj)(3Rx$ zAEB#h0&RS5r!Dz^fv$k&%|CiDVKv8w7B4a$;(TPi{tLK<)wQ>Xe=Ml-tEVY7$L}Z2 zoiqd=9p^NgqPa at cY+nBGfmj*$QC5{F#l4Hprd|X^KUC)84(&C3{e=-n)$hu`<*Y&* zn>xzU;B*AMHMT6$Z1FU9gT4I(PCxS)1EEFeNzuY{ntHybI;coa&#L%Ayo6~#<1i%W zgMQLlu2(M(8Y*%Q517kWat~7MaVp`fr-L^AE|T+PGQTUiJ5f zL&HFv at Ujn_`K$-!A0%v=*35^OF?ntuZJB{um8h?Hi@}xpUVDwW7IyQ$=(1Mo?8PYuis&G!m&=M#=i7Uk zXLn>-kgVJ+o89{5*m;5pwehzXL*X)ar|EyWED7}LH%bS(xH?<(RQ at X!iN|qBx9je# zcIR{W at nxNt!>IK$RGNRJz$`;y at J1zPW95@=M5!Fujr+zs04Piw1pnq-!iT2~xKU>@ zZGPKkF3i|z=UI0))~&%x;LHuEaPMgE+s19%d%NGt7qbjal0HK|Fz5r0t(yjc!I2vq z8#y|wgkSlZ#$cmPw-7yC<-H#NF|H5z-=kmnjKzp2H-SXDSK;u3TmlKLr-z>y!QqRP zx*lF4Hwd(ihqtzxlf2!zyvc4k-?qrL at z7EL_1=4!DA%nG3dg= zPjAXqpZ@=%TvK)bJ8~gj{GX8Pz0+fwoVhKs!HNRj8C&Lr`pi8nptybFI zj2Yfqwrz$eYVbp<|9isw?3}6qshldGbgT*X97|KHuCq^D=k3r_9;-IGb1yByjoi3Q z&&|`b0gunc)e at 3W3;gE8B*460!nlM9=-XadREYxyZR#M7OM3Vuj2IU?s$Y>F9Un*D86t zcPuLbb#?UZzS-~rwnrZdo!lC)3ZNxy6Ko9e;VgBD?+h6mj0A?Ak+_%8C$-`iCx(Ra zKG!_st{10pjNdd~t}QQTNhD(Q1}J&pGv7%fKFNn#_DNFlgqckTL}it3^hevy>)}v+ zOXb1If3MR*q*Ewby(adSLg at C^5~at9w|qh$uKxd265)TS^p;1M7HS1#`t)8)5>JYR zhCDJq=5w65LWm&8y#b%4XuCT&52!grd#vzJ9M7z_adExreC z2GkHG%RHeU>nJJ%)~z}BK_G|M$Hzwp?@^~BBIN~o@q6E%e4?ZC`0BYoc^V4W+&rL;yFu&aFnwx zIaV9&B at k~mlhsl~e at JkD1Ob>Gyq at xUWyyTMuR2vbqa0Kk`3YuyQQ9D at yxIIiX!2Td z`JI?};lc9b7b2s*7pe>Xu!VcU!0{BD>XpZuxUGwynqFe zcb;r%lLwj9z;7 at X?66?FQ*B!tq(34n1C=8RsxY1=8)&~al7LA*dEh#Y)sNIE7cPVF zmK$F&gfpgJVqYbU1SGs5g8i?!K6j89=bemp+^Boj*I_jbZ}axYjAV~@_wGtXH^Pl_ z+LPBKRnr0(;95b4OtRJ0%H#j=Y2F3{%pr5 z2P?1-v4ef|b;|354=ITH_G$gKmIY910GVtioEXP`+nwHNk1v zd*M0M8?fEcKdfW-$h>C-Q%5HT_*h(#SW#JxWGxT9=CJ at k3`5?U3p8F5n-eYi(bH;T zYciFGi!aMh-D$QxNhgVVa{)0{Yy;6rh at Tc#DE&2Slf3_(yG8h1?HV^FjxnYj?sLt>M!iWJ2-j2zI=vF-Y{P)pIT%f8wwA zndj_;M4sz306kQ=fq;GYOs}Vb<<1uE*_Tm=jtiaF#X~pm6~V>RS1+Sg_w&Vz)rObH zG4NsMOK0UH(IU7MEL1V?@{}Pq4VeC!M5`UJo8jbKRo_(Wi_)kI2YauT9eX>M-P zYW4{oVJaXiIk{Vx2?qr(;NKTpg3ph)!2QEXfRE=654hxT$DyDM%IF^4{VIR_5C&oO ze1*L1&lbu3vzx{9;d*~_lA*)v>5liJiqi=8=1D?)?x`*-F-z{Y^Bu=Dq~cEJR{qgB zu`qt|Z1W*gOX<374^|7WUAthk!sM*YL%`Pju+$xRO1y8e>C{|j<3W^$>h`__Qt4)N z8}$Sb^nrjqj_7Az?yq*i?XE#Be;AR!@w5{ivwnkQQC^3%HDeoU2W9&yjeZ9DW#0Uz7bvm}FH4knw|Ao?21lvsMw(2RElu3qvm= zG=Dkpi{WL0xaz#b1o9=Yhl-Dt&hN94S87HG7nO)hOy~huUW<^&G0d`O9~I+;*JGc| zHoq~*iOnBH6_-;2cNMQ`hMfS$DS&0qcWcSVF2trvSA4DVEZf-lA&slC=;qE9%^?bct&JIHDU-KRK`jzwmR$IY;Z zF75^euVtS1amP6;NOoCI<#gn|rU1}Rw-+ZixSIrNM5)J`kNjB$sE!r|L*Y;NKe}FH z2QEmcycl6_2Z9Y-rtDcBhIIx-AA?^nYW_U)Bp2Ttw-EmO&xD5yoV at Ncer?mu-}IZ7 ziyp-0)xVn6W3b;>pf+h}=jWlX3^`fG1T5I4ME4X=R2((!SY42m4m6aSe4Qw{CRYCC z-uSHfP$wb0zrc^7T|{f|boJ~}50p{apMQoR9x4|I(!8n&l+VP2f+lDliQXT&#sqq1 zz^EUW&G-#qwwe%``P}Sg{OWfzThlf;P=1`fw%MNj%8!{bI*evJPcJa8?{|pHI$ahh*B at _FpKw_#~u4;5msw#=7I5^=j`=pWRlhJkaxJ0$3%pC zNFg(F=;p#xLe)Dl`Fzm at x0Iz6$a`(<&L=z=9lIH3a(b$B>~m;|_V8FVitRS_5;Zvk z$?D&!z2>jXto^N=I)6*(#>$`d1^+cs^M*s`?5TO>l~qgmMQ8N<^n&1~$UR0 zN9%R5=3nRDFn{%pq8A9-1~_^i-_s_Wu|rDNtY3Yzwo4}fCM_D{>YjYJ%(8C%Wu9W3 z5R1ouwFF!xcw4dX>dt79zP2c^$Cozw${#rq>m>^q-*3h7n+SZ!g8pypy>~bq-~aco zBuI3kBx*>4=)GGlNOU4P(R=T8brHP>L9~$QMDKOASOlwgR`0B`<>&pW-|v0>?$7dU;xk- z>Xa`?8ivr(p at Y{jbX#s|N2WwV5EEcoGON-{vvw=7Xxx!Y9 at d)1pu^cI1d3 at -yN;|{ zpe at J6aVFO<2itYq1IpmlC^qrd?tGLZgZA9ui)&$OyW=L6>dNiWl!VrP{3p^tvq;9b zfPxd&ioG14%Ok&5_3Li7cs8SK7daYEoxWR7p=OThZ&swM5Z-`;fyOlqRkds2emq{F zIrSypDDK zBd%E25Q>pCfOB2TOGtWD!`c`;bhI(<-@?oLl+Yo~)j&{7IL2Xjnc1&zJli=tqutYD zVH3k^Y)AjL?8dutk3hcUsBYw at BW~FcwOkFb61`x9IxbJNVa_>u2{jv5)J{NBk(JgAaJUY*0ja**X%)Y2)SERv8|_EY+!io)cv`>#tJ|JUqbkPQ{iy8PII`~-9j;5d zN|{z8z3x at t z_(7pd#*d029}Rf~dmgI?9y6h$0pYE6nc6R6rlN(HMl*Re9Y&S=l_xH9;tnL at KK_bl zr&peRr55n0c>}~J*MX1OeCTz#AUg55tP?-&-Nu_m?upymd)cDmiw&En-qdq at q|UdZ zPLdKgSt$dbcCg+WOvWKtX=SRDvBX~XYrh1hL)^<8A=QQ?|10SZ{9n(rtvEIoO=jr z#-N!$U-x5Q3w1hgqh8RYF^8lY59b_>LPCd-S3H}OG@>?dU*vkdTpsnhiEPM77Qvdt zYAyzWtRUs}$(l&jymf51k^Lpx_{H7kqvv|D`hmv7mF7Fs6%BSRBRfnSD@)~)yfX`?< zp8J*6s9O=Xm56i2VT3i at hj?ckJ>i zmimy&d~2lSq`2lwE1-4-vDk>$AzyO(kH#4#7!Ip9sf=ZFyTr*i;lvhsN%S=NZKkf` ziphPyI6I3S?RtmIb*9vvR!{FY6udmt3Wz-{*Qj`Y_L#M; zu|uYUv<%)cZw!6VFqa$n+5n+`2??yW1H!RTAPHO6-M80a^CZ! z3UZudnz1*@Z|#~6Bc191B8Ajb!xe}@84y8T)1lYwAU3c9o;$oJ0r;ip3EmWusz;s$ zyb@^`7&R_+q-OOSM|z-o#P=)DI(8Raztm>ITz)3EkJK7UNT7zz#{(!?+pgf?%_sg! zt>G7ID;Hdss1|NG@~+M(IsV{WtOwq!-UI3t?=!Cb(sW;Ve^L??jeSgV%!g;gWUT|9l zS!D6`yPFlCwSF?}7PGsPnB;s~oF=W;Pa$b+>eN%0ik?H1;cWqhc>E3z_PKq$^e+p6 zcL5fcu%-_=<)x<@2Fou1*NZ?(@lM!hUI-7k+CUv+qaub1^f zZ4l8=Sa>z+y*=QcXU%_JNl|5Y1E)X}%QnRCos=$p!X!ML zzV$5I7`R03E1vlWpm2`RCJ1i at a|Sg%J%oSC!wycq?N at e~b+}KI z{4S;PceB9(6MU5l4GXm9VH4)Ayw7hcAep at e2C(>8ZgcEF`! z*_*57 z%$p3zLZ8cOw~Go0yoouip7O6#PKr2U5_&B2mI7IkSLVc8qOYBE6Eboc({>f1m9g>d z=tw=|0^!PZ32QqvfC9^zph at nZ-|9Akz0N<5_;Sde6^WNDX#4*f40I7U&TB{W`QEPF zvTy>Ookjl%f~8e%fa2|t=Wxhsh7z#UDtouO{Htfrk! z_YO+MbE{bqx9MvLF7nNtaHGpcBo59)c*pt-J)z`@hu;?#y}c%K&KE`I(k146KHly1 zyc5C?&usGn?poJ(ndj>M-Nmg8{Lh`&|Jl;NcX8*1 at Z>cA+t-*1jtN;_XNR~7gSwS8 z^WMBUQ at fFcI3)RK2{+enlo2NXdV9Za2cnSkN1%8*6io}0R-9k@>g at ILYL8RLU;V}J zu(@_CgtqW^yq??OR`A;8aT>Czr9N)Ti3wOCuZ`~~5eT1|o_d2kMA-vx&UYZoPRs2G z`03^_ at FxF~qOS6k#9xi_SNb$E$x zb!0Hz4G{l|M7v0Y1lo|9IQRbSAgTHUflw45wo1t~_IIdLB8o-W?d8tmFN z3tUuqhYfEZ*kXgXtQ4}3(=OXv(qL!VaPZ7YynlpG4$Pyym!mBej*38 at ksBb-YfZpC zU*nWtAiQ?wdnh*Sb{Mn42{+FGqlVX*%221m7=w7kKs(z!=fUz^QTk~E-J1HmzI`A1`5bq~N{60t-}63H9r}YX`O>O^W)2S~os&U+dbmHEVKlVt zabB_>T!F&$ux?vvcL2l%_!-8GaRd$ojCmTvP;W%{yrE7bR&Or%&UFowmTLEalJz^7 z9Q&m#8LLh%K$$dnM=~H_Swa$YtCQO~y8P*si5-r%@oNyp+ at _rf0AJo@)l|1epZCpE zKyQ|Iu+F3AA2jzhQ+gu%Q#!zV8>*j&GR`%SpCQ*hNY8zJMS#9kKoNi);dObiSvTo0 zK9z_F5R)G;+f)oo?cfgh&|2)VdE&jLr|wgQZteyNlLd at iUh zrAMVMLOi+r{b%CFsAhoTpkjp%wf at 6-E2!Ik!#XF(nr@AL(sf5jOkC=Io`Pf%hBE__sgoprAT~z#^2k=ka+_u__G}%K^h}wHena^{}Vz zO7ct}E*=W1cY5R>xYA_&oD+PXZS)-IY!Ea&*yJ->b+?3bY;Z at E(>sDM z-w;%=z4M=@cI2o_b>EAiHUW|V?0aEGGV7_!#GZELWixGz6)SfzEN&AHSx`TC#dwV% z*z;8NP2G0KW#;zRX27l&4YrD`S)VtZfD9I=H)0&?LpkrWx^|72d3{Gt!I#?}4|BV| z+Rw8JwA?Iv{y5AM%ZPvw^;AaUx7!ICqB!k;nNjJ#N2tzSUXM8jv_YV!nPH_zxQX&Z z%X at LvSecMsU-ty!MkCMV4IUOCKvdhI-}Qn&8&2c2VRlJZn~QwyyAQZ&{}i97dIjqz z{%$M<5JGEz>m`Pc5D$=FY}=oc>n}+#x?!Qa$PTXG_kB&{ydmF_3dgNnSKLP{oBllN z_tS57aM at zu2=_KqJ{6eA&9eiVFRuiFH9|bF{xTU4H2^8V-F((*{@yNd(3RP}b*detx2J4fQ(c zt52Ns904qERxN)!hRGhIg73!e&nF+VyKtrfmTOPMJ9fp0herbIW3nO{5zDh%<*3=M z7K!>_vvPK*n0W>l03`_< z+22Eo*=Gc!;mm%cRMpFsS(+0E#fvvBl9kLXlj@ zF5Vq7=tENh&krRk5 at WAMRiMv z!=Q^|r>z1Ypy>5FsPx7|pyX#Ej4Xp=oL84nJ7*YH= z%PUvDTcGjyj8L-_e9dENv at H@o(cr>$R73CBRpq!7#NYLrMIUGCT6U$X^9==NW1 z2>TqN{7-}{Yrj$CXoJ9k4F;l*<^i5a$GG%^mP=@ofW?Sw(egN=<4ns`Gtl$87+GM{ z1k=J(6;x&3 at fT&i)&%d!pTqh50W+2dbU#pIu=mnknZxw?JdR3m z2<4ltS6w(bBJ-D~MU|Vwb53DboY1RT>`%xpQ-0+9V8?(Da`Ea&>tBcbKhBANKQnT* za`dW^rw0<=qeH%&9_5ylH(1N<*jP{;I$k1Lc2(3teX4Wg0j^auFBhFco8#W>?KhA& z3#G)xFiET>=}4}nwGxb~m))u(o|qP_%(s;aVGa7)RQQWKM!oVouQ*gEVQFVoG1w^h% zC~Xf&OsE3b3=|a+eqG)7b-uv**5zzBwhLq9s_ zt){hW9$~K_ffVW~&M^+^Twiw21Cd)+1PE1dR-^2?*#N<&tp zY&KNzC5JAwl#10;m zRk`yC;(eH~K2`1(uQS+TR~e&OM)&R at 3(h$OZSi;`?zD?1kLWlSi=JvxVnP+voGF!^ ziV$wd8rBFb*p^vlXPjCoecHR{o6T9tI at 6}_7niY2)9iY at D08k{p$l>O8o0Wx-$Lyd z?-SixP;vUx=g9-J`vbmG9mPxME$4|#qQ4Hkj>1Z-gFwRRWu(4?Zob+bDYpt0pU?Ks z-bI>t^PIMNU=Vikz%xEC31CWm}Wndq#X~zIm$o$Sh4E?pSw<5nY zn8NZC at F~N?W!?E7fj>2RbYwgYuXZG^Q!nC_nhc_l$l$6_t at X&uN+Ztls?dd7v)kqU z6(E2Wl^3w}s~CI(Rka21iXtGFp`nE5;M_?RA~Jq3OV9~8k3=H6m{SjTasl5^`wRZI zxw=c;uD27}elB~{2b9|#-+;(MWM7WyXOV!H5ks4)H0B4jhltoi?c0jJ)M4$vf_1!Y zrV7xm?2D=x{Sn$n!I at O%=TzW#qQTwFX)p- at YM}N6D?lfsW_Lr(vpl)@-l`y?(|z+> zT0}=bOOP5eHUAX@=xfPgd%@%r5C`lc at P#%fVjpqUQf%N9p1Qux<8teYjD_}jkN z+M<{sc$r#>=5*I(Yr6=g*Q(nDX z7}3RA#lobffw$A;)jpbb_VzXppn#^78!Ic(S*(c2QuXp_Q}Yd*-3}KS#UFfvcDcrO z9oYvJ`|leK9Q;w at Du^ryzfFe-ye9M{iu*u2caw(AhVVZ-=6|ykUckAfvqMSc_1zN< z?Ip#(eL8uU@*55Pe^cszJp0b40j!Pt%+r at i3Tz}%y$p#8&&VI&eKIEMJR^A=6&n*1 z6U&wXRKNXvn3J<}J&Bt9py#$Dq2&j8P{nc7!tr(s8X%B^HdmX--Vc#`A6d|Y;cVD< z-wtg#Jh11?lx8LPArX50L#nZyXI);4$+OjAT_->N-QXuOPH3rFi&CspF1+>a_Nru$ zR=l$%SDAOXj!l{>Spl#IBwrTZvK1P~Vpa+UH at X>Q&o6;L8A;o7v%qDD&r&A{30WuY z=9v%Wd{h{OF4D}^WJZjI$pp}tD_QOXM?L>2r*77LQX&{yrEI0SA--dS-CswzB5Zb89mu$?`L-EDOw)q zPA0-g4 at H;v80|lP8aJ%WZFSO3aW-b$3c&ej!~)U6aevSX3Tp0B1%p;q7N?}uA*<5| zXM4pZDIUrzFu(Y?TmFIP9MWG^20!9b+KEs;u**{EY;_10o*{%oF2714Z29S8>cM!UPK3nJ z5OoR3 at T=jz({&cIv`H~SwjF^>H@?2rPT(|umhXz`F`zL24c+m|r2&=LV^wP9=cq-^Cxq~JGl)ktLWQ}4fhwAJOTuYnjWWNA?decVg ze$S$XW9X6uUIKo=%Ry;t!JGmHOo{=r*|~R~IcKY)i=!cc-jAM;#NeXl5D(}K#ooAg z=QX^u%F2B2|C&u~qcJsLMedA1-PUl->AAj|$v6W2g8+h3heWsIr`RgRcK}g|u9G!d zkX#N0oJ&A(HMpEk;Emi#y1f2z_;z at 09{5Yj3yRiq}6>GAwwYr03MguA^7 zm1)H|3i7GEpN9*jjTJ3)ps>YN>h2EWJzps4N=Zyj z67t^D>I{D~1aER9i7z0D$}tG5#Ua=p%#C9e#R|Z_=T=TBN3>3(&P=QLy8ICKRcA3P ztiR-86F2Vg4U$zc{-$KxTqlOkQ1nf2LEMoU&Ij*j*~PNskcK5fqMUqEo%c2nTKfHx zy>TK*`;qutSH~)cyChltMiAlAup?h-d2r4bb#bzOM at ym&yD-_^%Q6emhhim&D{_-x za0#}$wfvkc+x{cFNG|DIeP`y2wPzhPXw8wJFNyP)BhCmuJjdb3!!GYrbo!I8AKZ9? z>n^t`XF0qt6dYr2W1U=c-?RsT`O8kaR!|Bn)E?iWPImVq)8lb1SBlB;4j>Sdeah5` zD1AMO$08D9AZ5un1;S?-2#m6|XTMww$l-<$?@#&jUjpahbWuZE3bEIn%z6p zlf{7{=xh%J`$1TB%PolgU8oy=uSCLnKJQii(b9r|{?~D<)RJ^O4W-zb*zYCR#N_~r z24=k27ha1Tf-;PO(tbE0hLyh_Le|o?CbcnY at B}j^xPi8Ifgu(tX7Vi^uH?g at Yr3&@ z*%=Nh67ln4#UBfYdpLcPi`t8zYGo44TdvKZ1kCl at gYAu0u2BQ5xl?ao!dZnU*kxHo zFCSNe at m@cEXjsgO^sDp-8AU9qA2lt0M zNSJ?m9lV3IN1mTDsooWdUrrf}h<-ccY_Tet>DrFHTx>pi2#s z)?j3}V{nmIV;{31K{7xs%e!#8SD#ORV+SYm(hBa5ZHx>EO)3j#JPrnbeEgA(s%(41 z_@$$$LP*z5|0{Co{^|&tX*2tdz^l>2YAF72wti?Fr<+NxRpVcY7!kRn0H)sfjlk-}_~s zl+bUb9bYjMxu}x*Xo at k-*fAqg{;1Fy(;1gdFPxSHrR9+&Fpv!EdG|HzS5 at OC*DJ+D z!I%CG2uj0BzihZ5znsC&WPQtxulfwx7vHC=At3Ar9%KqZ5{Ia>uO7~sHFK92Z)Xcy zoOsn(K3x6KUon~zSf8FdTYpc_o at xGqWc8(Z{qx?=AxqsPu at 0l8(3yt!#sb+T%LD$_ zG>s#B_jzaXB!a?t=pU;!6WzF=AcELr;J8{`#1sLXO~tLj0Y1p<3*@6*S;BrG$Oj;E|Yx_Xg+VdNP at DT2#qZ-wXu>H6-_0(uZI)e^y*}& zzXE;2#pQT^M$nlm7|<9x5VNFMhLr&8drmM={47|MaIF6frHmD*bymX^eBWx4 z5z)9~Bp!wxh8Wa<)*DkqTx8U;I243|Bsyhz8ELx<@LG+T at S(4f-86&c9)v%mWx9sg zHDVo!EY>T-YHPq}bZ%~`org-`5wU at CPSUy+Dh(EYC3j=)mYvfsF^`LYR}WZ*|Vj^oSY+M*BVPf(+i)A39}iAOOR;miTJ zD^3q;4nz#M%Zld(ish{By{aQxC1WOh`~3u()r>O$c? z7r9F<)~U5u7fvD9%9oR|+e!amdxae5tZuof=M`T}FxJzwS{DG3{l+KkgbS&P3xW^1 zDQ9s at PSH+Gcc?v{&8scQ)E2o7R9kHeN?eBGd?0EUXpVKZLQYL z7{>GWy?1^rVi`rn*j)y6vTowhu?@ZgwZ8V}o}RJcC6!|Kzb^J9vgGc=BrTf8S5XZ5 zkg3%9v-HUvNABLQJ-~$PtYMFfwB{EhMkn%9B!_*_^LxG+Yiq&L_?5jd-HG);n-3c) zp=uRqA6$rN_dH$*GKbx#zSa_z#>h*ur}vfH^M=G>)duHBD`&xmPjT7&)hzMeT}*$u zvfb at k_oG+eeHwe zmFK#8M->J^xpO9yMTP793999`t|f%S<0s#)JQ#%6r=@3nokK^;rakS8%I(E*Ly6*P z$p#yB_qRblxnv9N{O*{D at UIiZxDba|p~1d6tnlwNN6J*y?a>k?N*#6}@n~09Jib`W z>;2tg_#;j$1Yzc at PFE6SXP{aHHCsu6o9}a&d#>avT>gqs|Uq z5Z}ys^hxr&$!tH8nW}d9d_pIrKpDDjVR>@Y)bEa$G%BX{Mh|r!S0x!5f0S at Nuz=d8 z$!j6!%U1NSh-Z9HKoLM;l50n-p|Xbh!jvBPTI*@I-KjQuP_R-=mLB9n_R~ET#ni5% z`>>Hbt#vHCg3sVy7-CWMN2b*X$&pf^3A5p5<BP469Il z?vH17DiB4)+YkWThgqm=sQBSRT!c=5fQ&Sew!nM~T7uj%MTx;7Z<>Q2-%~?j)M`sP zWZ?~;#Ay%fWA-)xHG zvu5skD(|ATKngT?-5ViBv-an~;C9lA1~WN7^RslS#br#I<~Ao9*au0kKCUQrH?_+3 zCX!5JvXS6XdH at cuk2Ftjf}ejo>OOyMabsk_u!Ogt3$sZ_&HQ+XNgm*SP}~?&J^A@* z at rZp_*(Kk3NFg}H+d=y^BqB)upz^EC_LGV8eQuInk|dmY5<7_cG$MxA=8ZMg0viYw zbhCaF^+d5bQ{w}yulG2gthamMazGXR{mlS0e5j at +B3|t2S*$)$PNRy~?0LOO at 4{7m zzFtsVr+1WrhP!7b`h=0*n}bCY17`Fg+5x=`wO48Jd#FQt?vI&E1^4r;<5pnV`#xA) zFio at srKbZv1V7a=)d)v&hz=MvB!5-E;Hxyr6(+)9;u%EG>5X2ge@#~Q3M8a6c=g(K zs`nvZ32E9(pB#iK9T*rr-1_SYCu0=8ch%zff at nXF#vRY^(dZXzkEd5v1;GdT)QUuwf$1vk9W<)atwvZAiXVmYe4v zt|v_e4k at IC&=Ce-9?{jJIoDle4(^v)i0w8XXznx-C4|iE&$0fpbvy2LjtOhTS$;0| z;<39QFCeA>r_5gki^W-x*fe7j19-T;1DG@^wAqj)t<$#00Va{7=d~Sw&`Hn5=+v8& z5cRmqW+}9D!en98ULE+Undw+zrqSkop5mw9>89h!U05c}A4P0j_N0tUafkAvi}E9J z{ZxkFoJ0=VTjxCf$mqt|ABFZ$c#AaQ3^UogN{4M9bP{&Mq1mPStNad^c~=B@%^m7! z;tU=Emx=w(;7>2TV@)roqM8ra)7Keolv!)9C0q2KCOkkkfGYxRS0;2*7R$&e6Z3vd zJfj8he at y-2faSjH@xhQj at _C$O9BeUMgn-XlXg;*@Q(lX^$36vbr|8YY(L~ikZYfUJ z=#G2s8TTJj^%H|NUh;R|UDAg4Z5CeGGTzgrIqria69Qf|H_xh%ot`!MGbRv1Ky zsI0QKY#xJRFS7nyn}A-zc&Cv6d#ZkcMFxz`7#(!(W#b at 1-}_8N_=j at r-(W4{@wb4g z8yzEzQ(P$#05?uPw&=`=HK!tF&O2$Q3v4{Nr>Y|f-DB`QInC3M)$$hMx+G8pnh79~ILW zvRr5gPg7{4jIgB6F{o?rzKI;cYTX~E$VX^ ze+Hn#6mr+c3f13vnuvQ-RQHUHZnQ$Fyul)kA^yJa*Ujgzmm;Kg?G{ETh&49spYnR# z2(8Qo`;ad00Z5H=wEK42SVE;tWhO3mE>y3dy83p6ndBGpYgYesoK7#O{Xopv{YVVK z$LkZnAi(gQ?8}4(Vt4#}IaDS%ME%}o#|w!@{rFbKhtg;YKS6EFex7+2EB7IGsy&dm zgLkRO&SJhn(^h|{)&HFjy{CJ!Sr;Fm8c{!}a5c|m7 z*awg92$*Zf#&?J-Kaz$RHjHB)*^w|HWJM$V1=I97$f)aNr)3T(q(0{oZ!kvL zfVOt*QSizraBkk~>9R5MQ=GN4B|6y-mo`JzB}$7|4^mIlj7!cH;@oLev2;7u z{2EW;$=9VYX4#v{@XEVwa)iGgp;tayhZ{4aT?e-kJU)K%If?S{n4d*}M1k}2Vnp{R zcVr`dwYtVuj2#`DMjp>R)HewvjQ34 zhJ-=dt3zFHDKJElJ>BO5=-_V+q|3xJr^e4`FgylBQ1g3DI9g2{CU&J(rlwvzd}Xm; z5uZXkZP}aX)d{|jbfc-7r?F4po9+@(`S|F8xqNZ at aFOyXvgl;<3YPc!!MiJY at mlRG z;8S#0ft at U`aRuJ9YRVS!+X-ie6B@{TGzA`dQ(i~`HkzRL*lWx#w zc6CEB(xK9yb5B>FZss)I9?OAgT_lMDcrEiZuAbAhe2R4<>%9vWS1^X)Hug~)dq?b9MO6bEd^BMgMFIXum)Y7SyRqYa z^x2yc(+W2cbjxNY&M|n%T?V%G)>_G at NWIntyy-w~dJA8%yPS6N zr-U-eAr-e=C6e2G2cX*yT+FE at +FSlc41TM+RBx17+`-!p`SXQat;gq#l^T;&GBW)D zcXMwL^?AgV()*bHV4>oRy&ZEax3_BmLS=yfHaraD?960(x-^3jyV8-Cs<%Suj7(dxf|_G(^=g0cHMcYzLzqR@;? z*rw==k at lv{lbzg=fRm2BP^^P90x)kfP1s_LkzoG(rN}W+`0!F_PmfWvhg%sq(?z;T z=w(;zwsnxacMM&XF7j^c9QZLpl>-m_H0kbA!#i##YUrfV$OPzLmqt_MT4Sq at y31sx zb2Do5Zezd9ycH2`dtpo&DgS7GKIF%X&kFugi(@NY+x#I)iBTvqzQNF=Qv=icUvKY7 zMG&XU0t_vc{oV<@4AI;Wi_Dsxx5$X)V*B#6bOvAQ$M8&hEA%paBkwXsu at NWNq42Xq zc31y$Y>#VncH7-}E1Bf-!c2H8Pt-#kIv8+zl`*u(nd#XNxrE^k$)^*3Tsai)!ic}> zYJZ#QcCsjE`}UFPd$a;ma|i4_)D^)!x;D2>7Rs3U^Uj|dnrTlKiAZ&uc*NAJ0Ucy-VT4 z54jwac87Y_ms?mipznY^51BGmrNpI!ZfRpe7ekykj%1SGFg|Q8A;O!^$%!vUxukCK zSL17p_Z(6*2kixWy?b#G&Vo1jEp*mV(%I=K7FuJtIO4}!=2d{Ty z{%QHrMEhvMIPwM4!#8$Zjzv-Vm9mZA+wr$R+!O;&h2({iL0P<256n>)LcKJDxfprY z&D1&_T;RT5(OU^$CSt*B^~his;;gWyxb~*Om;($(#Wf9%Q%;%W7VLM^3sxX?$Us at i z=Fa*VodNC|(cL|!27vj(JO#H;ZOW#H^1MKQosgc6p-|72k#qQWFZDh0SM5;z7dS^T zk>%Xvmae24nV4OQHn%6xv1df`h2*28zm6vtKWE3!gV4uPDQROWkF9x`f;%g^uTmP4 zu|R&U)Q`}sGihl>MW+MhzFaCE@(PaGWj;z9 at esptzN|AJird`&z$#M$e4JT`lYtkj zu}YW-Q}%7 at kB4>$Qn5IqO$6b5+q!o-NpJrOlR%z^%IBwjTcildNFwTW?9xG!6J53R zzL=CjTui2cK)m_!HbU;}iVNKeIBzgqJxYJAj$6#G`XI z*W#`@4~Pl#)ikWmZb4_pN~Vn(wFNu)eK~tX_JGp0gp?eXr&ZJXrBQO-TR2YBP+TvY z7Z`R%DKhVv-6fsj+C0BtH3VmV))U^r3hDA1jy3mwM#WeV-;*)D at xDJ9RTcbwM?k)- z_8W{Qu`E_SeA=8x&|qYy)cmt%BGsU{L5mzlvE|EFuAM|0%=rSe1p-wy%!C^dKeKC? z-f{-1w|XLx9=QZgQK0-6DGOQ^_KWpvl&$Xhf?)bYyQAohBj8sPgIYtS_e21BWJBr` zav~be6_t%kO0*?yk;RWMexyU%BW6Xs8Sr+?i^fBVL?e1NppOpXQkp36f-B56vcktR zE~-x!$PjP@#VdOU`R-y9 at pxPcYn)T^?hp0mp@`PSlgoL4F;_N7R{Jd6yVjqDukwlcmpfQ~_;)JTI;nXQ&Sw zvE^KCZS#pK^J&6`K4jtgNDcLGP`s?xCVD`eS4$cd^lgIZb;1PkC)mAYVa}#vj}TLq zi(tK4drFZ#Jh#L~ zt&1yxM5r!gVY@~}(HQ5}pr3V;b@<5$!&j at To+rfOUO1obdNf~dr_w)s3m&{+E|SWyt3-2mKOzUO>!IAGh%_sG|W>2{yZIk}^-@>tJ<9z89!ww!}<@EGnd zHUT1Eq<;32TGjaQqg}42w|%d^omk7FJfsx+IU?H}JZz6aRcmt<96g70L8dFay?_d2 z=wx}3v%eUnCD%P at 59ehrD$kG?PAu~?g9MLEmx1oC2V0Ax1^MMW)SgSnH$jfU4C$jd z=m(~CG)*k`+QdR3?LQYzA}x%Mx$DVj;Gdnhw_(r#SSdI6`Jx1!qBSu}obd>`k2RxvFU_!<+C-js z&wGXW7yiugDo=lou&~y!s at j~nLEl=~GVc(E{(z69ejo1f%;D|y#Fw?oh_!}FNB~f$ zygO0Wxw^7;305-e%$P$>MBSm^CsSk3A)15e4H0FNpZ&M-iFwq!;KF?0m`~aOs`8Ig z)p_~C at h$hv%xde^oSZS=2I-oFrfD-5NYH^$lI8B}I(#4AA1ld!oy~Dh#fcsaTQ at mc z&+MzRr!^?l7Y;GIV+AHst2+&NV=vpVtOuLIB=B1+n#;0jO1}YxX;TbBTigQuTD{0wI7ur3c z0e;bMF at Jh-MniT4a=4$S?=bsW20JWrm*0|t8IGqsy)iwjVuRTcr>isOJyt?mv^6DO z%=gfzSAkMBQEVfJ%Re(73Zy3GJuey|!Wq#=T}nR?0h)6sGU&~!K4ZOmw4u#NlK7F^ zr_DEw$e>B9uO9~R?guX0=xg{gMNqb8V)x6FNfZIJ1D)wA-N0V}IVii@ zB`Fw0vB$NquD5U0PBQKFvA=|o_pw_e0AVn7{GLsgYJ1~iBnkanOx4|e`%3JcY;8=6 z_<8uCQ32`p71RqiNcPv`I%Vt+tK?TYmc~M2&;4o9NQI2|GoqYH)Xumg!q*SOw2__m z4$GmRl0RAk_;L`fEh25FBf*5p#s!lpp7gizG`GqtqINkV&OfJtHFN}P)Un3X*Q;)} zGjT3nhR at _83j(N7`D86VrT7rYEt at GN)6{mAO5`X~eA21ua{7Fdi|ye>2?*8PvKE-u zuN+Mq+I#y at H&x?DR1x2r0PEBElmN*seF% z=Kac{txHp*xGKa?gLzYf#VVFS?+!xteY|(rp2|Gj$}p|r__B**Z#fOw?7Cti2%G3K zpoip+f)CdBtUTC=Mq3*iGrib3$o={QE26lyVLuY{T66p4^OnnS&8liHv>Tqfpk=`w0I2J;OpQm+Z)}Ugxj2Ob=Zv zh3i`7WCzMv0!8rFw at I6G(}m?77WR|9d6J5**#T}?X|5*n3_hM(wZYCNq8fyR7^Tp= z`+mKlpDE}^q;d^jP~0>nKSTjy8GEt!9UsgeaLrj*#J2rNHV<@4a at njeuY8L36jY;T zq`)H4?o_uokjPQd+lrGoSud{O)ACsGhvpA++N?}3ANG2^Zb91?F^A8X^3+j<)mJU4cP at o=?Ln6!k=0sF*V5ZpF>Kh~=v~*K zJwR=d-;R+6utavTNc_h=jUo>t-<}Gy%B14j5$vKDvIMR7qL^$1`K~m{hTpVNFQ>#G zyih3G()vavztTdjPkbA)YUYa5^Yd%)N3olv=sa3TM<6XSiZ5U;oHFOYI=^aEv=V-5 z?<}Qv{Ns6&&ZHi>sC$JvAdIvc2BRU!IrGUlvg2m$uk{eEcT~`1m3(E@=tk-!6klp5Sfig=Jb9&IH1dS=v^% zSk{`ab+ibQ6B)Rr_~mGUu6$S!5RsIj6D#eq6}7n98kg8MXeoFg35<*RliV$Z4gl<~PnF!X zVqp1x at E!Wi&0zZN>Dsy968dhbC9f4M$_Zl}38pb3@)9xHYh^%7UG!_B{BF)zOGfz= z9O1qa at Qux}-$z?c(Gw at WJ4`2qgfA`BU+gwkn)Tk7?TT)p4>scQ?4mz#YIPp)Q`?Jk zdfV at w#d)QsZNg|AYYq45A3k1T)tvv;%H}tfgI38oma_H^E$_C4RZI+jW(23OqSJ|< zHg|0ax;+_bq2hdPq>4h4x6WS2se0nNXw=geka{Vg%kkbW1}}>{A>u{h?*r|UG{Bf% zGRxqDniP-juj`NP@@!vyBK5zGashvfn|yRHMDZOP7f28(Co7EV<;Bie_y#GxM(aA-%3yl%5eJnV%iF@*M|MCLQ~BM>hmud$V%#S~>cc!SWr6MR zPy*jk)|%N7X at cHngNEEPcx%sH?o-(8p1|swRx-KuA{6ZV&>$)VPfuN zYQf>{;QY5Ago**YolVT_EZpf$Ev#%D#TkxTIvD6}%*7eB`IWhponq z-rhai%uLvv0U+^E%vZP!;)>i&|23PFf&On2cRO(gslO_u z*HKoZmvM5npy%V at W;f&F<)h~l;NTJD5f&6+qt`TXr+;JONY5ik&%?!a_lHM>n_GmB zoBkg!28oAvQ(~^>mLeLma{s9F?muw`Yj<~N5l&7oFE0)+UJfT$D^6}su!$dx^hqzMPG#g_o17og2N3 zCa>6ECI6e~-?jd`yoIcZyM at FZ4d$`*FZMT at 4aa!10I9NEk zyWKJ4{_o7p%|tAnTpdi at C2Sl_tSmU49j(MT|2^|RuHWC+`py=2w&eVmFaNpf|Js%R zS0?_={r^h%zX$zO$#22^gX<5j-y-l^;y>>CgX^~l{FeBSyZ+$%EdswK{^PDcxPFVk zZ;Ai7>kqEqBJf+{KkoX2>$eE}miUjm{^0s80>35xa5(;QB2Bza{?Tu0Obbi@h1#kGuZh z`Yi&#CH~{CKe&F2z;B8Fxa$wD-y-l^;y>>CgX^~l{FeBSyZ+$%EdswK{*Uf@`0tS( z7LIqrJG}13am;q*e80$t>Me6(Y_h82TXo9F+zh_2ay+|n(!3cqKe&o36GF~G zMaJ}cSO*yT=l@>-=>Zo04T9D!qg4>%VwwtVNC%>r{tsnPpg0aLN{2D at o^#KA&%M)P z^v-A&y>M3V^PKnm4!kk;)Y!!fBfuTt2XMDATbyt2$M%8eu3f!Ot+qxkKLwC)7i0Uu zrw0e3OWwUH?Gj`Eg4=6HjQLA0l_R4p6JD5r$za;C2Sj(-_a}z at vrP;(Qz! z&E==^_aEG2ef=ka4WfX)F_=(CFu;MO#me&1V&&n$V1M!3_pi>!^4qhSbRWs&AzqbU o?t)>@#zC|jH-TPYa_@@%2D-C3|D#cqjQ{`u07*qoM6N<$f+;DDivR!s diff --git a/src/public/images/icon_migrate.png b/src/public/images/icon_migrate.png deleted file mode 100644 index 05681556a7d0050cfc8585289796ac7a24380f16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 354 zcmeAS at N?(olHy`uVBq!ia0vp^{6Ngj!3HE3xL=O}QY^(zo*^7SP{WbZ0pxQQctjR6 zFmQbUVMeDlCNqG7G9|7NCBgY=CFO}lsSJ)O`AMk?Zka`?<@rU~#R|^B#xt(DF$2|! zfYdn`r6!hS=I1GdWag$anCYA88(3&>pSl1jzsJ+XF+^ix??pqtCIgAKhufQ?^c$Jk z6+X&sdU3+H;L2=+S51 at U4jo~(c=0N&bHT+wd=4gUi{dXWefxQ7Js0oCB=cl;b_<575o$U(${TusNATmJ40nBW6SZM$#*+mchA at Sq_^Ng^X{z&SWm3C z-Q=^s{PlJX12^NjB0Aw}y5;)}8g{<;zopr05?^MJ^%m! diff --git a/src/public/images/icon_move.png b/src/public/images/icon_move.png index 20d429da54ed429bf5b5763a7ff473e5f601ae27..00827c5a405c94d88f93bb8e7febeb35a2a6e2e3 100644 GIT binary patch delta 541 zcmV+&0^_L6IRSf7?k! zK~#9!%#^=N!$1_rb4_ePDy at wLaS#y&!NE}wDmW;Jh_tTaU*O{4A`UM86%OJg6l?`S zR|OXl7sbI at DAcx5hYFfY&iC$e*XwVQ4!-b``;|}L_r1Fi#+cCy3mH8!tJ5SQ#B^Qv z+%(NpC=?n@=Sozc&!vZO&95Sge^{2ayna at R`o8~`&m^tCO6$X$?=d5NT5f`6^5vQ| zz0*pa0QtPRmVHH-12PkhGOg at t`~t&oi3uv|K}2|=t(+7GJkKjY-bQp7f%3DZ*yh0SIS&F|WtZ`-DrBV><6f>J;K{aadlMS5 zHoM${9Nf{Msz`d+o2-JIb2^BWRsw%-$c(h8*dC0Fd)lA+1jwv}z(=S&w7k6S94w9- zc4GIDQA(@Op9Z&sNR7IGSr<^uah$7m5FJFioc at 0BBzQQej><{P)7`;L+-yPnyB$Ox f+W+;>{t;jRmp2R?_PFvI00000NkvXXu0mjf4)*&F delta 540 zcmV+%0^|L;1h at ntiBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;Ef7(ez zK~#9!V*LOAKLafRBR)x>jQh41I1ZMwSWmnaBzbd|Nj1G`1b1` zL(a~342;~u89+-W;PVMK!1U?Uf2Vo>QNceTegu;I^XDHJfBEs3A#>Xspd~_Cq*}rV zGSOqnbD|V;u`)8u@)c$H_vLMmxVU&F$PENj5y%3U`A>=VvLGiD!!%zp2G-x7=L-r7 zrUHfj612d6<|C4l7!xp-_NU4H1LhGPAon{y3&3Id=l5TdEr0 at 0s``#ke=XR8- at pD5 zZMXm at GsBV?8HNiNF6<;Gqe3kp&Iepm7r|6?{`~nJ1_lQ1 z*d%qEZ=e{yF;kJ@)`jES?d|PzfkLl=_$$Fk24Z<2<^y78WS;>woz|?s2Ig=A4d0fd z%y8=>rs2etMVvs)4+>r+ax4QXhg7OA|JSX*`v2L7U;hssI$eI3Wud at kBnzCnC_K_yvgHA_ogK>I0A^98eekg5tlls&L4!(P&;L e)7k=n00RIclt-#p*McGd00003S9EaB%@h)nuf^3#cAju{n5V9sv3t|*vRj^u%)+JdWCCSFkY64mhltU_@ z))uu`kE*Ds#RI&mfY6Fs6%{SkquQcUtrfMGM_o67fIfZfGavjm^C6i`-v1o${JzeJ zkrBa4(j9R}&LIf*Ae(E*;_hT}x6-)VY23}!dv(XTx;b3kZ0_1D?&?hLN-}rZ&Rv|r z)mpg=EO&kych1sK%W!8++!<4Sm9BPYRL%Cd^y0HMg~MkTRnI6qVcvM`$TFN-d!%xS zuwt=)d9Lr|{K~TIA%_-uAI$PPu+U?CUitn^Y+r_8Z#ud!U9cz3y=1}Q;`wgcrKP)5 zT~!%-74wT_b9M=57Wvq>W9(Kp%jN;b0++-MJ at xB2jziis0oQG!b_^O$vLyel3bk8E zT at uBjaa4lAtj6vhD8*2NUX4u%)Jn9LFe=fYNnxnyl+iJ|lq8)}kA;RftL%i`WHC`J ziP}v at vz4%`F;Y**Q3T(24C5Huh_Fd&Y?$K@)Ujq5%}}UZEEVY_0diCxB$g>;N=1+m zjV4)i6lq3f3REVM at EL#E+7LyFiaQJ1!MpShUtR3fD8b^FkMg=kO3eVrVHu< zG5`d_bU|G}27q9gE~pF001yn*1$6-#0D at tdkuGgzw_JeTff%dym7tmm!Gd){prf(OBa8MvL2 zf3b4K^1RPKTlVSFC5v-&vKM`lwJH=R%#>uiZN_xg%1pD+W|J}L zBST_BJf+vgkyAgMGCB5xN$*db at ZR{C=y7AmygOPO6*+38W<K`50FVExL73g_wya%eQuk zr;Z)kw?h!Y!;bB`AVU$Mhbt;8lsK-8 z^zP>6e5(3%HBm!E4(Z|D{oXM;OMR-Szr=G1#bGVdE;0lB{HK{<$Kk$VdP)|rb za887Rl#re{B at s$oXbq;qF2)Ej{^~BU-rc-28(Tn at NXSQNXlsI{hq+K;BbHwv)+1FRPC)gea+SAe-M z0jUQ|E5Vt{iElog3~M8|dXP>=5RU~=tzDpa&_aHG%Cajv1IBN!3fB~v25b{h z=P(E~b=nviO5nx1KHgzm0}4aw!MJRwrJ{Kk`E~KOJ z5=f}l+dR(`7>oLLi{++UeAcN(`F!4WW;eMrJ}2E>w^1xNc%C;A&BU c at J@gM08VUk9{_Eko&W#<07*qoM6N<$f^r_c>;M1& diff --git a/src/public/images/icon_poweroff_11px.png b/src/public/images/icon_poweroff_11px.png index b0e0d7af80bd1205a2809be0bd3438968bd42b6e..34943709070f17f429ae1be8218feaeadb35eaaf 100644 GIT binary patch delta 417 zcmV;S0bc%w1mFXZNq>S#L_t(|+ANVjOPf&?#-DpHNh%~564AVkP_(@L1f3E)C}^TX zaIlNu;?Uq~+}fc-Gj!;8PzOJNQ>>KGX7d{uiQtq(s<;U0d+$A`=Y8XahvzxJbKw3{ zgS8I;7z!$6a7&5?paKO9C7(;<2QzMzVrXMDj4?HBbYHwF3V*WIsx)*UYHA&GUDMh? zllP(b)FDq02l55Xe{Cl|WgbMnBOYq!sO6oY2(4oMahp$*^sR zQ2ca&N&gy?@hBOdjE6}bb7#HCHMF%Z5FuS&#OU-GF0!~gI*gkbpPnS#*+{qxw6k_7 zLUcdIY<&xn?0 at pN`wLcBuD+RY8#zQWXZDK)xuAcad0j?+bqz?R at H`k`Zs#NB8ryj4 z_3-%TH$2ms>VSQ={{jpEELPLI-~y2#00000 LNkvXXu0mjfn;pc> delta 455 zcmV;&0XY8P1BL{UNq?wGL_t(|+ANUGYZE~j#(y)r*%&u1AxWc>7W|}Qi`IipFM1Lc z5l;?SDnbaobZfNAOE!wAKhA z*d6o;Hh-YhxN&Tu(GhF2wYux(wq|DMaH=&#(P!e}6T+vDAPh;mT{bs9V>(VtDdbA| z;34ExjmhRJ9H^n=5md at dJYL1E*Qr=;eA2X7F6_&bzkHQ6iby_mkbaTm(>f~X;$69h z<<=+d;3|pn7Jtq$eESNu)1%+KkNVwZ_~td<-06&4xtV$NCo{Px=TY$x)qeLMo|-_MG0xDr^WX(Rkr`KD1~VIopSl1jf8Eo?F+^ix>%_CYhYSQ-_jd~F*e;0K z#-Q>m!i90+q?kh07B(kYg>4LcuhkS*%ksDP3fec?oMb=!@7YgV=hb^k;wxYF$j!W2 zn##%Y%I-tpqyvj2HpZEEBs4IH?MaJ0=h at 6M&)<34>Hm!kp;tZTe`Y9{?YnsM%a*$j zf0QhIn<%#@PyYO-2d1+&dL(?%N_!UaeqPM>kM9y2B$9b`*12}9DArr{tvl(8mwt%O&g2H=46#xHHTVQw>}ydnR2`)W&=+6;b!QIlVAJH~)uC&kFmw+% z(WQ+Es^7q at 9mKjgu)Okx*n2y&O2}P^lRjU-#(qP4{z&Dc+C*Ok`c1?a+SP at pmk>iR o1!G+qKK~b8L$Um3YX1o^018T+8u#h!jQ{`u07*qoM6N<$f^`*Y`v3p{ delta 235 zcmV#X*=6tN;oaeP+7?sa*^R zFbjyU0P))YTT-9F6=P9|43+?K9}`fK6cEn@>f8+!a6?kC6N;Y$aSRZ9GXaTUAT|cc zB5MG$J%Cg$5O0ENmIWy`11ScY?uMkH0?NJ(q}D+dbAc3pgJg1ofErYx><*|OKpH^) zI19w5K#Ctj75D-1WT2uQQ2s8M2B_k-jKDB81Tu=Cp1=m&piYB?Gblu$9 at PQjG;9jN l09#CfVh|LQ=;8nY1^^`sfS#{)l%W6s002ovPDHLkV1hQFT+aXi diff --git a/src/public/images/icon_remove.png b/src/public/images/icon_remove.png index cf3cdf4211bbc410986c4f007c0fa7ee920d49ca..3727f26d9c1bd32c07c37b6cbd0b24f88ed4d674 100644 GIT binary patch literal 1200 zcmV;h1W)^kP)6m&&cbVG7wVRUJ4ZXi@?ZDjy8FEuYPImnTCb^rhb3Q0sk zR5*>bl+SA%Wf;dl?>p1k?9A?%?51?L38X1lga!$e6l!igsZi|NUQ+OoOA at 0!s1U0c z*MQZN5L!_G1?$1mf-P8cF;pTRTI)q5X%lM6#%aSiq`r^W6XDtwzscbxOidr-+lX)ebcJVSEuImC&uh*&7YJ~MVySuxWRieH)|H;SK0Mh|jkHO@*xp!Z) zZTo!x-o4|6Vv%e%i{m&5ArL~~I1ZlYkrJp;{4p6-F*4r;T zj`LA2pF7mQHxEXjwL%+%)(WKz#%Q$C0Ho6{N~?Uc(Kvi`Y;5J`4>x}UkN~Ap$(NR# z_IsZ>WZ5>u!v`t7S|W;L;wU1DVv;x_iXx&oqEsp|JbVD#w()y=4 at pZ-mr5nS1C)dN z2Tppfcf#4 at pp9m9bQIThnVg&?mFgi*65=?fC)LB`F&9Izx{BRC>0 zt0mByVzJ2lhx6Udr%s*b)aldRe13kOVxiFXS0gP81V;e71%x3fCE94THfW`BdQz0j zWr85U^E^DyBM1UMD3 at _ksTNFWw9!Z at 0fst2sg!ENG{zW=G3>Ey3i}HGc=W|WfjySp z)oIo0yi$sehcu&TJ&vNT2mx6?%gpOD_`XjN1O!2V at B7Tm%(UMj7+U%`j%Y^FdZ){} z5r(%LVFRO0OJ)pHQ&ZhrEi5dsu&~h0r>3Vc+O!rBHX1a- at HU_&kOV<>saCI}jYetB z?Ck6l4RF(G+ at 3V^^M5sJ_Kn%L-->#zP7qX=fW!hstzO&6=kp`!bo!v_F^ zZf=fTUmuojBcwnG$)!tQGCn at e)hkzd^k|FSYL)vBe!sE2y!>ep1ltxs5ClnK- at ZgE z^}OeLeU;4$*RNe?U~mv=NiYTs2r2NhK9|3~%=Y#+Q53PZzP7qqsa(8u>();|(`x_J zdUbVmy-+MBjb`K7Y{u{H at 6Q7QA=*6C@=R-um+`3A>fF6|@9x&t*5}{exN!-n0;)3{ z44_t4R({RpavNbI%qXRXlO(|ygOCEH6=6MOXJ?1aKQ>ugUt6qHDxWPbE`9~<05Lo{ z4<+CLelC|Qj*N`Fl+9+3rc$ZHwrvjpBuR3=*=+t&tyY)s+`043!-o$a009sI`tQI_ zZUbq+1Kjo at cKdtM-dqQ2K-jLC#{o|ZNo!Wx?IqiF-3BCp>fGvojXwb at 3-zTWq*L(# O0000#D6d34UL6iTSc#sh~t_ug~A^E>B0DBHH-v_9%oVJD6E zU%vAGP$Kb3TbO at 4z_Nm->r&yk at Ni@O!QFf|{j=j^zZNET#m)>TZ`?lD+dInhJV#L! zpn8wT18%n)N~LmnCzDyc|I5OsM+f`QPl8dM at tzCA$?J=6^!1%@?=BqDYdU_iCem{XT3`6=~fB889 z>bg$G&%|OWTu&6CIeKq-y}mf6;q`h+(Ji4Z*pXPQ~P?_7XEE)l*3hNUL27zT+n4O)4a#aO}_LFvQZjO`y4Pj{H=zv8d zhtzCuFJCZCtAUdUL@?H6VqyZg01Jv*BklP3I2p%)s1D6A%trp{UZGVpt5THLD at vuv zFf4JzdW?;Y!C-$MJbtnb-+p%+{`e~m1Lu1ol}ZuS7#LwnwOo{?qjlsU%q+=;hq+w# zk!@RK_X2@{Q==#W%+Jq*D2lMOv;>=58R!%RGLHc at O^3|R?ju}}9IAN>SdJG)N3P$z zmrN#UP1F88d``OU?d at bCp0iS^^ztU?dL5RRmuoA_OCOhIY0+_4TZh)xwc63KBztLw zxjHZ~K;b5YLLrh0))8CmV~Ti$R##W8-`3XdNJod?JL?rp^Cb*BwQ6NEpU>Nhq7I5; zl*aTBfXYw}s>^0`u(+^LTKje7?(yON9cNw9vBs+x9qY&7g$RVWt3o9D(Zx%b60vxk z54Q=Pic&NVo*&BFTU(D`96bA>S}8wpd?m+fDCGa1AO!jy3py5JgWP$y$J6gPagOw| zX&7l$DQBFyN;5UR1v=?*q?!+auL<_Gj*w&ZCIDOW)d!M#%_~ebK~$@*&Gz)(`jftY a1Q-C{5SJRa&|F*q0000pSl1jzr)kTF+^kH(n-5{4><_1rmKEu>|pE2 zY_RLdVfRo-aeBkX!C~O*;KRGcfmv*$;(-UM4^)2tac=VUi#l6vez0rRr`H?}?{{8p z%MgF>+_0|bqiy(h>GM(N#0q)ed}R+5U`ece9y7V+^v{IGhcz+WzgIt&+HjcR at Wmq) z903_!mAB8xHrROcu6pXRbdlurNq?A0L_t(|+G1cp1xi3{j3&nL|Nnn5Mg|5zd=7~72q|_0;zuBH zAf67yGl19$n__<;{svWujDG at gFA%dKEA|B9Cs-82a4xztjDYw$RB{~pSl1j|HIS8F+^ix?<7ON!wv$j^L4pYq|S(L zTd=6)`Lt8+A0!J>3t7Cow|z35ppmiDp{lEc`@$|yw}{s_mnv*aQdRtU_FcyP`9GC& z5BZ(j$#LPk?e9~Ya`u_~PCg>>+=_L>wPTAk42~%%g at n3>hIViqlVAuD&Cb1(KWAI6 zbgyBHKtQMq%X`~<)h;YR1%}5Ktm+O4U**NoD50##;==O$4v&xT^3UYnNkvQn*Gp{*WCE|3cFTX`KKTDt9_x#m{lG9_ at O1TaS?83{1OTY3 Bp<)04 diff --git a/src/public/images/icon_selection_add.gif b/src/public/images/icon_selection_add.gif deleted file mode 100644 index fc41da2c0ce2fc85d3a8c7282edf0f33bdaa093a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13127 zcmeI3X?PPw7{?a`!4?k$4^VNt^|r}oH%Z$pNh+q4f(C(B!Fq0YC+V7Gcir8Zv|d#} z1;zWs`@;LaMaA2SH>h}m_lcr{2YAHUCM1Q&2cP!?-`@F36sxXUa;7IBYvfYI=lQwQv!~YHEa=9*q0qW{h-b z&D|Dh>7LxGbf=V%$~8nQ!Z|6IF*C%G*<2>A+fpvV$*R##B-(d}d5-NvoK%Dx=l;RE zYsL(VumP{&QGEUY8>sb)bz-QlwuWty9d?qevtk`9`h4_5lmtNv2yC%&(F)oNTWUg@ z*4R{Blm3cu9gbs4JfF>Gy;;B4u#&tG3Wa!|$cv(f5+1utcjTN$x2p at 2te>Zm*ovi@ zj%MhrJFnbsbUG1^a~CSL;^Abow2*Fl`wr?=j0~TXO~B2`i=iDFy7`U133dE8L7 zMAv_m2L&k at D3;FjXn}GCQqw-?gX;PtqhqbjPO7gbkgk zij**{jO;|UjGQEVQcHyS^57=-SJ*X;1&t+N%H{g4m#%WNbjsd0%k+gwaS at PQ)P=f0 z20$>T3w41EfM84)>H--6!I&=81u_7FF$Xx= z7}JHiKn6fCrVDj}41i!v7wQ5T0Ku3p)CDpCf-zmF3uFKUW4cfm$N&h&bfGSg0T7Jo zLR}yOAQ;nyxV^;chh@%d+;ezIcu#~*$8!Tawmd-t8Umo9nh%{N|u z?bTNnzuf!Mi!VI?+_TR-z38bYpIG?#V~;-a at IwziaQ}Vx-gEa|ciwUPZMWXC;O3id zyy5!muD#~!tFD}X#pRb>ddbBXU3kIy=bbz6oU`Z7IqS?bX3v^=`e{9nnym^@R%(B?jqVFnJLHDWm#azZpvX`V zaPNiU24%<;6$iNY-g__HiYq+VgrxBC1E2p3-u<5!$&)AF|1-YN at 9i^eL_=*r?!%NZ zoeY!9<-A^RWv=)5Xd_!M+cNzQ)@4muNf4WDA#qI)aU0jJ<5*1%apU|^Pt=T%R&98P zMVdNBH7gwnC7^P3;fi2Z%BIW|v1K-!O6qAT8{%ZuXdx2qJHtH3b|H2m#0_=+V4XE1 zhDBJPTW~2JuaEUryTuwYP*YvSHpwT1%uljqo_dm2EX}kv zLuZ|N+<+rg0ESmN_>*vKe1bV9@?fnYN%SQ z{eQ~+UP%xO<=vn{d60KRbQ9BM-8s`X<2w?jDn(yro0aUk7FFR%lB9 at kr>QexYiFt= z#SAMY+hHvw#|a7}JHiKn6fCrVDj}41i!v7wQ5T0Ku3p)CDpCf-zmF3uFKUW4cfm$N&h& zbfGSg0T7JoLR}yOAQ;nyx`Hs0(BO1Y^2T z7svnz#&n at BkO2^k=|Wu~10WdFg}OinK=5|cRZ)8BL3H}OBSYVD^vM19?>~S4wdv14 ze*f*)Uw;1S$BjRH|J}FWeErpzUwr=Ar=NWM(T5+r|K7Xry#3ajZ at m86tFOHL(u*%V z|J<|BJpI&@Pi$EK_+yVgvhLxB9$fptn$@dTu2_EmvZYHF-*@k#h4GDnKW_2_;F*$G&hYtx$&e?(GyP?Ib!&*hU4oa z#|=HUE*uInQlPe`+VAs=1+7>1`<1cM^tzE1~to6M4=ZN?-OQ_G at 3q}3u~bvkpCj!9<5$<(Ap6a`Tc z5y5?5>%Q-z;=ZA{EAIQgpaKFa#yd?&3Y>%I`@z3&PEK-j=lSmP-1qMtHKw^CqEWUt+6voRLY~mn zT$+>qi*TKeW63<9%jJAIzt6Ojyci0FctPSN$x8`uw%c%&yw}K%C=RlAoFG5~@xU8oCW00d*YP#4Gm2*z}wE|38bjOjvMAOj#6 z(}lV~20$>T3w41EfM84)>H--6!I&=81u_7FF$Xx=7}JHiKn6fCrVDj}41i!v7wQ5T0Kpqgm#1>mgBbLBM~>d(s4D!s=AXa+TD at xJ zpDUIx`{VcDmj3$7&p-Y6!}s5P`_0#1efh=bpMCnt#~*$8!IJmid-t8U-+J?n*B8I` z>Y`U(e(A**o`3GyXP$m);ge51zTmM(A9?tp2OqfqzI*Sv`>s3hxc#?gx%#RruekiOOE0OQOL0ytM}&u>XGh?z8t^Be)uN&pmeEZP#6P-f71jw%=~s z;oA(`dgxYL4)JU;c+lnpt2Y}^#V|FitC>MefvIKa<6e_t1`Mqp-n(e#lF75?E?&_- IdmwYre}d~ueE)jg=CK)Uj~LMRR)HJ zW(J0z|AF*N28L1t28LG&3=CE?7#PI!C&eFi1M1QCba4!+xRvzd|9^XC!-{8TX8upi vQDZYYuwq%_n$C~^|NmFXW&*1F|DT!Rii+k=mbK at X0=W#Hu6{1-oD!M<8}2ZN delta 202 zcmZ3=c!SZfGr-TCmrII^fq{Y7)59eQNDBcm4+k5N%olpQ2S~9LJ9&n106`5$O2F>uI|c^7RHMxTvSDVDK-~BG0DevFPf8BdQTZDhGwu$Vum&+dtXk=-FFU&r{JGraH+|7#_ z2JyFz6XZ!D#Bf*dAu#^ZhUCE`gB(Wk&u2#N-oCzNGele at U-bi-W47EpVYG4CjrjO5 zKENH)j2&RlW+yy~qug95t;5uBh;L at Im3i$wkldCSW<~e}P|6S`b_Hnaf3BT}d+Ar; zZQ-$vQ67J-r9Y6$f=wjqY5*s-1c6Q+(NGC#@pb7V6el0R?yhdw+uI)#+L0Dv9Umw| zC4|=uRliz+FY|Bgnj`O3l?YU}%`0kJ`&aYL4h`hjou3_aa&N)>X|G z8%^>kjx{hr6;>ACTWPve{WkJm2Q)RDmonjG;SD*>IbsaV=3%z0KYhQ at _R%_qToaA&x1A<;{Zyu#rPwGG5Sv^=i z2vQLQYXvQh)I$x5Eg=TlsrSAf;*IEwaQ zr5R{w3moraTz at FsyOT($trVrR^NIY`o$Y=ZSe>bUwb#1Bp$sJXa7biyZnbA5-oE+* zPfKfeszL!(@=?%$v+cktQPZl8=51TLSXjaHCs`D~{-iZ!_n8U-P6HeHf5vXu1}x&U ztZZx|_n}C3f!u5Xsh&Mr5?sgIbrKSg)~o@?9q-OD*- zCua#mvdDpOY-_O- z?%^u92pvR#^{0GkY~<99oB!j1U;KqJ#$=|L%Kaprd`9 at f}*VG*VI6y|B&1)w=zShb!YCKx!v#1?7D7I+Fj1v``vH$eCIoJXBYr> zviv|nYD#jsVHgF78 at BCSwm7dne-Ws;t3rwY7|Ew9j@;{eaZ@@xGzLBG*JNeja9iMb zSrLhtD6vl=g)x at z&sqV;>>ZO_zH%*1g*R?LD6Bet^q*u>$~Ow1Op6DoTO#*4w&P{T z>Z4**z$-GIv4l`jamrA0F_AN2+ivO)jVE^VuVJJvL`sq`pB$kI5W-O{e-Q+v6NT-; zjky^{=glj6j^*X=_o at rH&|-bQs2iZ9&B3JS4jXkzs>ML>OSE0CLxz7oGP9P&8SORA z-212?cb#Cycv>|_!g$yHRIh2KI67LdG+|%qR_xumRj(6I3pl4rsy$&rGFOdMzn;f; zl-hbF!GPeF{zF$=E4uIBe^A{!n7SYbh84!S%ClPbh4a;DX{_=1l>aWd^4sBX921UE zuuWx=h3wol$lJ6{wahe`c0tV)(|$)sCrWqj(fi?{AWGKdqUBO;0=W>HTyjM!2oY5v z0)shNRj>g$dHG}7rFd0Aam at 3d-}*G(1_vjr7j^U?>Eeb8OkQ8}pWC zqwn=AJhCq@%#=@@oq z#4DHBf2?tWAJlApjYRlgKe?j0xj9SCQzyX8(pJwa>TgHYL!Xl3OLrM*W?q3w(JsdO z at l%+hFpa)`2|0R|zbgze{NG?6DIqB#XL|*#UjhsO-=fbL@}u7G00000NkvXXu0mjf DRj#aY literal 4228 zcmeAS at N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5n9Wp~AN+NuHtdjF{^%6m9^eS=-fVvqNZ0suv5|gu2OB9k) z(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ^va*VFffGH?<^D zp&~aYuh^=>Rtapb6_5=Q)>l#hD=EpgRf0Gw!Z$#{Ilm}X!9>qU&qz1fz|2^|)L75h z)X2=pL`T8Mz`#P^z+B(hK-bX1%D~jh#83eWlHCStb$zJpw*7iAWdWaj57 zfXqxx$}cUkRZ;@VD?klTNrszUP+F7&HaR6(KQ$*cH#M)MSl>|3P#;-6FeHL9(=$qn z;o96Z~cnI0-zQH{UWd$6rBYb`6cI at QE<80UxFoRz>}hBK!5w7f zSXz>iUsN2BUz`aFN}xO_gcWR3lC2>A1al!l?wC^o;X$}LnV at jC%1O*iw^gdpO-W5l zEX^rV(ueBM2gM3Zi;X_2fgtmfi&7Iy@{5ox2u>|TwE)E|m at L>VWX&MMN-|4wQjv^; zSqx1rB)b)1o(&=-LyLj=F(kDpx0qTs;WXO at Io_?DAwlJw56lP2C7yX{`QT)ZswUGh zrO36SBr&B3mJKlFoij at +amxk)OAc at vz+rkoa()UhnL-jU7Q;)5a2XzwniHO11S~_a z>UGUc%)}=jS_G2?CkPvG(n2Z#fUyA)0~Rd6GEE;|s6kT`wEUqJ1r9A*84fdd)Dl=o z5Jis$7g50kQ#2Y}u#g~%9t|#{f(fQ*G`L_PK@>e2Tto#EOcB1|;zD$bQuBcA<8ol9 zr{$vbQw9d6Tb?eCAr-f_O!fB=36wd$KR<1bN%_^QF at _smx9bQpYie^@vAPOKmaJ$F z36NFNS{Pi?+0=J+VY2J;CZ?_4f+ZSWygq at 6{L9vAzPoj5o!;(q>t4T^U1z-c^1D~> zma)r!e*V4g{oeEMzt`=*KRa>OvP5I4+a?=Szu3Gxk-6}382 at b!gVTYsv(`T~j^J2x z-zUD}SDN{U-$CzYt`mPzTa*?XP+LCj_ at s|#*nN8?+pb^C+mkp;G)`Ejqc!|YjGoQB zkcJZ*6y20B^7J27vb9*Id$wZ9lb$bGl0TPe8$4B?dH7`vThit1oTUf} zldp-p`o^XHV5GJvgSeJf_e`G|6F>SKEd8)*X4CoPg1qUOeCHYUCK=0~D!aqgt}*-X zh47Zz;uS0GlSj_r&_z)wQF~q6;)8wp=dCW*{1DMPZSmtzKvnWb z#i*ADn(TS}@7os4tMOVW5nJu>L&9ZOWCn(>b6~bm^#-t98Z40d2x at YnCEge zi?qKRLqi#@Y&pbiwpxXRKH6~AgXKv?fX{rHXv>^QT&D9Hbe8^2soNi4U9s)ke)$=9 z^Q3P at pL(!P$Uykn49;2V>-Tv%)$VLKsc?MSH0=zVs at ZE_^C#7YtZ0b~o&KSCB8#)l z$-021Z_B?lA6>NVyk7Qxk(+zopr0BEclmjD0& diff --git a/src/public/images/icon_start.png b/src/public/images/icon_start.png deleted file mode 100644 index 6d0fa99563e59ed316dda79097b90525331c2343..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)ckWXt9Q4~kdd-G;GZ7f7Ot*HqX#D%L8#hPLT#eRUg=vwHa3tdPT`4~Y4T=Y|9 z(}i>suuvDt#<&n&xKYSN(@B-4Lo$Ef#6?ZjBnK{B?&Wa#UBMr=s+)O3rsX(Md!w1D z5?80P^04^61yH`(_66UT=ILw{VIf z((;5HYqeKc`i^(9h}T&ricP%EHD0ZM1mNYnRSHXOV*U3QBNRZ}ci4Z_1mOAGBKwao z`WHt>QS` zRmdPT8AKNCu7i}?osiR^sPqQ21brLJNO<<<0hZE4u_BHXLEom=pJg}{l?nM^yVepS zE&1nJegzp!k&wiaBv$+k=JC(72$7bYxwF>P%m>@GhJZq-P4^_oGOAFUu7H9wch;De Z`8W0bsG*n0qL=^x002ovPDHLkV1nH7|55+| diff --git a/src/public/images/icon_start_11px.png b/src/public/images/icon_start_11px.png index 2a16cb27080e3154905d1b546a6a6ae6e62b8f5e..40130afd576267d699d4208bb0b6593b6f9ced5b 100644 GIT binary patch delta 354 zcmV-o0iFKz1EK?vNqL at rl zx at 5H-oJ1EPYd0}dL0sY at xQQS%1rfwirw)R}+?~(m`f>2f-Mt^r-93?`+W at l>k%Yvg zO-fRboIJXMdF25~Nr>g>&e$eBGEl}KGDcEs5ps>Km17tyuz!Schl{72qkx~pQc)na z-2VDiUG(sN4OoAKg)omqX(O at G0!`J*_~hZnC6cu>#(dn*5(kxbk6|B=h1kV~_d2JT z{{13m#-^WdzFN4ZRLDjBr_9J^b!F`!=HE-svp^8Sh z+x#&Wn at qGU?^`#Se&cSG(G3N+r%SGM%$oDY>Q3{MniFn1bfNY3^<2BLEX3Fv>Cws| zt)l|$fYyERtb``V?lBZ7nJD<~T-+bz;$MIP0G11#6t}1-wg3PC07*qoM6N<$g52t| A5C8xG delta 437 zcmV;m0ZRU&1M~xsNq?3}L_t(|+B}fYNy!^=U3wnDv2!Hv3-z!nv-48&xEIpsT zDUi%wDq))Lqd0bSP|RU@*I&==Z*q1B{_hX%1ay@!pNLs(yvcqtL+y5^|%)@~aREp-I_ z`y0l3XR*0-fPa3Zls(qbeqaUa2d-fM at cHu*R`wV0P`?E6&5mX$FFB_g&f02}?=ieJ zp0ShP!0FRI!Vv?u6@*i>Kov(8cT)*Q{l|E$isola*)d^Q0$q`S>gB_g6lJFyQj#R? zi}0c+NxJ;e4X`M}YGt9IrEF2~PYYUCU|Mq>&nhWMNiLJTVdu)V9=tj+l&UfCrk&Gz fUzis(_btEx5j?B(D`{iY00000NkvXXu0mjfJ$BGG diff --git a/src/public/images/icon_stop.png b/src/public/images/icon_stop.png deleted file mode 100644 index a8b443f86d83453a860c3b8bed7234627b9e3e19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmeAS at N?(olHy`uVBq!ia0vp^{6Ngj!3HE3xL=O}QY^(zo*^7SP{WbZ0pxQQctjR6 zFmQbUVMeDlCNqG7G9|7NCBgY=CFO}lsSJ)O`AMk?Zka`?<@rU~#R|^B#xt(DF$2|! zfYdn`r6!hS=I1GdWag$anCYA88(3&>pSl1j|IE|HF+^ix>qJ|>!wv#&_oXf=R4ws1 zv9m#QgYztt%#583#~(AzX=v)J(Ddm|adDMb-FAGpcVg1dbXmJh)73L8H{Z$^kxliS z!BnWebaC!H1I4S1cOT^$XPvko*RgGPo at G8BCMVpH|?`A5cr3*Q&DuIxVaUG?8;(}K#3wBHXt z6$o7`jXc6I|NH5aZVvpyYj1Dv_U=F5yXx<`*Jb(V58mWidcg8lMz7C1ON+R?OZut3 j8NuAwIO+ra8yWT|DCg|F at 9HfK^f7~{tDnm{r-UW|mVlho diff --git a/src/public/images/icon_stop_11px.png b/src/public/images/icon_stop_11px.png index f794281ac2c12c13a7d52602b108d4caa88418cf..656639d2e28d7f6b124b97ecae964ca3ab58d433 100644 GIT binary patch delta 257 zcmV+c0sj8?0>J{1NPht1NklzM8Bnb2tgD<+^=4y=kNe~jefO% zg5V)6f`7e3Gq2fcyQRol1A)Am$-E@?{rmtRV6Y+(l^!KvxdFZETEtrfIx}g0ULJ+v zRoP%aPRceLQ<9 at KHv9jM1ruv%ZB8q}Q!(oyh00000NkvXX Hu0mjfT3vrI delta 312 zcmV-80muHq0`~%tNPhttNklWEXC1s&&qtPfV3|37+no@>wZmk=ea5j at O=exN#hkagMg7k2E)8*XoWI63)E<-f@ zs*=|Srx!7KM)2cZaBdhPaJKibylO)!1;!Y at zdn$>K0(UT-G4uE2P`~Z?+Vd~%oPix zVS at j%YzKKZg5KB at oN>?I+``+-GtTZ8;qb`8#?CI@WR)0;^A1iMTx*_bF}o3 zE*ZM)8I%k&^>PIKoo}IcRUuA0VQ2960|gwL2`xI0<{-_MM1$bQn&%H=~B|L0PNCKwlVW# z-y&R;fbLh$(Q`hX5!@3+k?*?hRw=dl_txojVq?tLVzI~omdhnSBLLRx^`|lBkMH|T zCX>hTbUKk`8LsQj=JWaC1xHcjH%*gHr&B!7<2gl9a6BGy9A~)O?XsUUM at qRJd<<|L zhcFBYf`Ie+Ob`TwVTcfd!QcZa<@R~8qqW|Q$0LfO0Ki&{)*5RY0LrptG#aC|-n?Ld zYki|E%Lg{bU>ozmx4M2g=Yi|`N>x?An~epasw%Gk!&1sPO;eOo-`L!n?^r2Cnx;r8 z<7X^ZtCiojZ7QWi2myeU5^KM4+qPJ15kd_2`~C0VPLd=OLd>kSxKh&Z_wYQAey{gf zB7~T|y}xD8%??14BnM!4Q!38$3wfTCUoI%6VqnA900000 LNkvXXu0mjfwA9 at F diff --git a/src/public/images/icon_suspend_11px.png b/src/public/images/icon_suspend_11px.png index cbf04c54f9ab1028ca86f446264d31c4fc4104f8..1767d92ead03791806f735f6762dacd35f9309b1 100644 GIT binary patch delta 309 zcmV-50m}ZA1N8!sNq-kfL_t(|+GJ5Xa)U4see2;cP;miQbe at SD>a=NN8Y*gz;52Dn z`v_Fr0ZN|(t=K#*IPpw0^R!y&>FrOh*DvhrNYq3{6vRXf#GM!uAzRlKFnfof10;vh z72isTm11%tuP1JqYCQ6?6JR6abqUhF!8#ru2h~vXL$0d0G=CSI&u`GEZky&4d`DEx zHN=|ATFEBjE5-;7O1rurD3YESvC2XS#eXu at R&_r`G_#aYk(4KXD__YWku`40%R(X7 zo-$p+V1jbzIw^(zCI6){NZYpTuY4nQW6#FJQq4QVGo6{;{5Y`Ek*V~odXB98sj6<3 zHqI=#XNSftJuXn^CSnhYaDu`KS}J;CdIN`Z=Nx>3KLQK at Vt~IJRW;=d00000NkvXX Hu0mjfbxw?p delta 340 zcmV-a0jvJ?0+a)gNq;s;L_t(|+FVevZi6roJsXq>5v5xoQnF^rgqn&8 at eN)101yL1 zKBGgnEd8NYnX=G5_zwUR0;YE^L`qM>e(&A$!#)OMB}w9%rg>=FHk-8BYoY}yWI{f%YTCZRhA`OE*IdOuef0t z2WROJfhdZ=_kFltuX-oW7z4*y0{Qs;e$O_WwN9Yw`yNokU1?rb6|C1A(lSnhY;Ibd z%y at t3RrfI8nnq)7ZW;-7T|Xyxz2>CL$&7b77DWL#vOjY-CXZ&)sZTx@$FVyMLxDs; zhKex#feL#XV at +?xPp6YWuqVMp(|m605zcM-83+ad00611cP5b`D1X#RL_t(|+LTer34}lptdUheJ_N-8Gz2p+ z7?ber$0SU{ml+s{2ci#8kY2ml3-+S}HQfV6RdtUdB3wP{#AWt_uOvyZZ5!5g70mOD zWmzyylT?0JRRxX7<2WKsQ}lh0uItdYEt;kg)OC$v7{1C(%CZc3o+FAPQDij+J8Ef~ z_9e4gQ52$7mL-B9_(a( zh9Uhg9LEu|tj_a1u{(}K at +qbMDo4DvXLaWXp8^a3R;iT_r9xrx00000NkvXXu0mjf Dwufz( delta 281 zcmV+!0p|X)0?h)D83+OZ001V=;Bk>5D1YxsL_t(|+H8<9a)U4sMOkUJ2rfYx_jcTJ z01AdPaDw;*6vV?F7)oY11vAbm;wBbnpmd6SS+-Lot5LK6N&oLs-}lS1ME?~<(aUDT zklVI>v`8BkV?-p5V{2_)*D7e^I964qv|_E9ftgT5bSLI{o~EfROAW#U0g+!~7=MP- z$Ej%=Xb%})1`-FN>$?5x9)E1NyI2HXUl$i#ZUoWw`VHAF&RrZD>$>K7E>8m9$KyNl zr)gRg1*TxeL^yJH(aPsT08(`RJYz_kB#E{1Oo|t5Fr>Ndg8epx{WVBRoMqYJ at aD6S fzke$F5nuopj5O3ROnn6a0000f-CU$4W*}+{v3or;R zEz`&{4bX_psJuGd)XXk}>>x{{Q#vWP>>xW_XIWg(PapGn;k)N~vHR?^-~V%bpWoYO zYF=)pi5iQHL-rs at T3T99PfurOryvMj)aQ0_9 at 1yQCoyN z&n!BeZ#FJhC(5WM>YVbn>E`lB}$oDrN9e)@jCv22Z=c at UG=p$g#vDxjeD;$W at +|&XD)B zGJSYbxCoG3s0-=>G5`d_bU|G}27q9gE~pF001yn*1$6-#0D at tH;zV1jBSeT|fqaV3;nb3&;QveA;v+ z4!!hXIQe;pSANG46+HIuKY#yq^w0i3e*f*)BftC{IQ-L(eLsBv-M8O--FxV(FTeQw zvrl_IIe6gXkM at 7q{lWY1y}R$7uFkjjzV+rCufMkE)!nb`+PULp|Mr(&eBt?RTeoc9 z^xU)0bUeNBsSQuIKhgI1`gN@>&5x~J^XTeF9$xiO(}OElJh1%!`<5-e_nsw-8}DwY zziUxlZOxr`EL>1sRq6B2uaG?AJb~xjuJYU2vQj7Gpi8LRZoTE^n~LY&IA`_^*B2Ge zDwug)zJ12E)AOcH&AleacJ-9(EUU$gkfuzdL9f$l2sN%!W?VHX{mLsYpO`iQQ=pfP zzx0xeFB*5 at 1?P_)bKdB4M~zHPNlr>kh>weni9TmU6oM#@Mk8 at Z5XlHVp9wv{L1Gp+ zE0#IfwPhPRHXiT`8T;&g`?EU&3poEM#2sJbAG3SWk(x5BX>V-yycv_$k!yrGS+ol=~iHC*Z1SL_jNqCwqyu at _=msb zo1UI?`#Hb!{r&DK!WhH<9q7Q3f3KdIJbm&QA|KSD502PEqOP%~rt%|mzNtgmURel7 zquy{NcG(vUTr|`C#J67`pC;2!vQsr~*!n!6x at -44>r$%xcei%7f7w!3S!rXnu*#%{ zRfP;xTTO;lrKZNhJX4?B7cD9(tDT-6w=X^yngwor<&Bnx=C-46_P%tmf8JKCdFUL2 zDTfo^x_b|K7X09H&to0p!BU__tE(&O76S1mLt&ZSJ$c)ghIaS#0i)By_a{D119$Fy zeT_PQ#i4z>I^VXKj4(XVk7Z2`G;Q1r>o)I(hOQ1&QeF?fNF2O#v!GK+Xmv&T3a8s^ z-MVGVqZ at zp&r!?$CDO$uf6eNbyW4t8SQFg4GXiW`6>QkOAJOJ=6p3+YZq^4$K|~d; zn^0-{E(k_q*r?)QM at QqHDYw5~sRfnf1yH19O=O_7`bOJI>xxKtiG0=Is^$$42*p84 zMj=-NP-IY(SqUP(1)%dvkY8=Vk!S*!7Ulv)tGg5qB}oz}Qg$F>e*kE!(P)IQe+jf^ z3vjXqQ6NB$P7Ow#2DA(fjD`Y+Mj*z6kXurT1WFAys|gT7Wr~IAtRvMj3@ zhNP5=gDQtbNr_C$a(YoDJ)Lc9o47qs_ z1cXz9L?$sx5R23ze+80^AtlPdOBiIbLn0Q%Rc4m(Fv at ahEK5)IsVt_rL^KE%g8_mG zKX8c{$c!2wDT0zZGT$}|J4 zo+gFi~p&?wzf5_`(i zwM{MNZ988(S=;<#(VtTfArwnOPj?Hd7I-{1AHmb!I5IE{l$(noU#G%0D~otZK;Qjx z32xpP{&9Thf47SYG+Q8b+xpHm?|<^S|LTYXD={{`hz}n>g-`u_9?#6U at v|Y~@%v8v z;b-6Awd;G%5JoLgPPY1VQ%ifr+P2PtSNrxCY;UV3tpnhENbUz(4X4jt4gGrQD%ZQC zv&3R42BTgNUY{2xrra@e>_F&J2urfwRTi+dut^r zGKO>4Zo=Sz9bB`ni2cgxPuXHiu8JwB5->998G|-K`UoV>p;zPSiSf}f0$L!7WsgpG zZ|l9%*0nti6y$$^1B1ihcDchhe?NO577n}vaEG) zXB~JWe>_~X--W?JJ3N?q5FYKna3JJ+G)kTcW_+hJZ=C{FT1Lo7S`JJ@=N~Uk-kS^6 z%y>M|e|;Dp%({XEc+kHvcblv$_andTja%N+c-i==PuGvsowZSH{kw+Em7k0NR%Vl!huktYj$ fUKal){uW>Wi0@`npk8xC00000NkvXXu0mjfn;wA4 delta 1238 zcmV;{1S$LR3hN0WiBL{Q4GJ0x0000DNk~Le0000K0000M2nGNE0Kh at K29Y5re*}$5 zL_t(|+N_mZY!qb_$Ir}sv)!GUy|lZ_-q^NF3vJn2wFQYZMQUOK5(JDTw1x0sQWN71 zA!^iDqlgbgeSrr|NYJ1tHfqvTO}5sqg at Rm)hSD~r^u~6(+r3R^XLn{kzkx-iMH7jW z{F5(}^Z(5`XU>_SFvjqIUR2AAe+U0HAeET2 at fO=wyUp^LmFJpy-sqW`ja^A5)1gRg zt~)+?J#@MEv~nk&39ftMo}e#2dYvi{u3K4Ny8M$34b}UDW%hcXjV`tqDQvah?(;e= zjRMbaODrgEBrNNTO%BQb2-IPl_r6gXDD!{XTpwtX;}g_eGy;-JOA5Ww#>u2ofy9%NrXi*2JfVf#U5_b$xR}0b0NmT?`no zwKORH7Vb9qN*K1Gw&K~jXtak|Kd0}NU0HDL>QyWJTX8lC8dIeC>mE%i8s*^;Wwse8 z;22CAEFN at 5aX$jEGb6&euU?T|(n%S+;G!15f2QzO1 zikuCK0yz!9xS#@K_0T0&3~sk`Iq at Qt7Sl^cDVa>ve%7oyqE6l*vd-UP?L{pB$T*7Hhl$pNLN*qtym!StI3=QV|0=Qu4f* zClDDbmKlNNc!Be>^-ECSDa;iRiEOgfwKg)figcRkt2T4hlin$A!oG7UD~ z02^w&;Bgdz%Pzp=bOcVE>beoTIsO^(DoFj?DxWxVh~D1z+)II~>O*TAo0xFlfc9ng z8LfTW<8)n>0~QnvCX)&57M_%?!moo@;p1Z`W9QEHzY`n3e>6xCe+{+{d#bf#U(G{n zKG at T~lQf@#cq~C5{_yB*U;l-PT{||_Rj({%Swur3EkXalV5+;P?*iGFW3!{@y9pwr zw+r2Y?P%-RSNTB0!52DqlOAC>-uV;sh6g~Fq|mub-G|4=M>b+W0iNSHaY3BdWbtBb z@@juhN=5Z=e+W at dZ`ZB4+uqvo>TB;E%}*sId^53t-#^}k*SGA)uDUH>8!gTtiCISE zAu1y(C-N8Wne}1T$K}ty?b!4DD+k^^lAnmnI6{CrtZC-~?0#^|X=D_tNQgzBhJw*p zP*LF?wfK!9ug|}4 at 9s8~m9ud2$FtD+?GG?EeC?a~e at OT(C7YQcG2+VgEh^6$K~>be zK(-|#-JacSHV4DuQ+KafHm}V{B;dQyIryrxs{s4u&73$trNb&3+tmN^#b#LEkvM;4 zbXBP5j5;$l-ZeMW`?f5`byz0Q*sfBy>e9f#lJ(P9&A>uVxxEaEqC$M)_q+F&$U$T) z^hB>^EMCt{pZfdyrxcoPD4g|2=kFJ$Uw;TN01dYAKO4LcTmS$707*qoM6N<$f;i+- A2LJ#7 diff --git a/src/public/images/icon_vmpool.png b/src/public/images/icon_vmpool.png index 7cf11748f6eac0e1aa3fbf55534d166663a9f585..657ab42e568d9b2df0430eda79edaa523eac72f7 100644 GIT binary patch delta 943 zcmV;g15o^f2ge5?iBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;Ee`!fX zK~#9!v{hY5R6!IzvwL+{+t4U5g6K!epor=rfaNDVs6VRm+A&v(xGzL{ZC zO8B1^g8yuc{A~N7rbuN)dngoYe=1(|JpUROqW?^y_aRRIxzvizc-x~- at 9s%oOqTfT z=Qm|{;_!pS>DFC3nFX7HUdb41T)A#D_|C_Y#f{r`(9nGM{?q1*UB~7OhJ1cN|LSm& z2&yIk!}ol>qcl$fBoGZWA6rizk9QKcyU_&!FxT at 6jFeepp)1hYJco2x^fF(&Zp^YEtKy%{o}23;Pcqopi3!2bIJ zgE;xdvOEC(*>)61Q)Ws5dA<)jw{L-l`c-i2?n4-T`yQ;BSqz?3>o)G^m{@QQR7M0K zg%c=Rw~FB!hgsVOQrgetw5o=(CR?_23GCg|3@={2QNgoW8!9Rce{g8O%ZmVr1D`ms z6}vf=+3!aRgox!4Fe4Fa2P_^4kFxh zsfrw_HfEpBWYlj306fX5eXvb)z;QD zSk?^0VvE2uQ}4&e$2#AjY4(U=6Ftdv715xYzgW1Xwe?nAUES8|>gs4L7K3Ossw8Y# z7Fd~#{WF;y>AQS+uLdA3^M$-pbp6(#FGjD at 2?cs1hN zsMw&Pq at MMWJ00OlP941?2Hm3nf7w8Q^3{e|6F&dSSTa4 at GYot`wX)Z?Aw0R;xh}xP z=md+boLLRDvL-iP$2k8;3Gcmzp;tpxwY9$}o?d%BE(7-H;#;<+n?@0c(i7rvd6Ca= zKNaxmeKVq1gD6cy=ZK;t=e(k&p)&-r3Wc|0>k%JU5BR_)^e!m+Ldyn!(Npx&p!VDQ7FB_0pmrs%?44cN%k z2&ZZ$3?l*xz!=Ag&Vw*i2G=JGL- at WA&+`$7WlWnc#=aI2gaN`JOm&`~Nx=1#X&C|z z5zxn+GngeCb0rI=?chw;e{rgW8x>~t&;rO7rs%D2F_H$pePktxMb{+vtUyqV8&dSRs#HR z_!*wRe1nN!Me>PBe?yWGQlx55|v>FQhHU5NoOr# zEK)&Ts%ar&rW5z1e`A9nbOkUQE1K7P_FcNR(hd#p&Ie#-vu49ZdDGUWuDp3HblIcbn0-y((K=p)N0HBzEcf1L-sJz^C;|OzMMLFjKMaJ`=x8}>(`$uGp z8XrGn|I%djq%`9%H=TD3OfGo?pz!WG%B)MUH59ot$9r at x&yy8d=`6!XzJq at RxT6Vu7Q(DVye7oJIK at c3gk1v&AqJEy at I=#fX%DiT> zgwt;Cji=uOR&wuvFX-87Ln(ttE%*Wa0e<4-Gm65zl8lJNxP^Jdccbj)PjEM;MFG`U z{s`wFyC}>r+FF)n1N3~TgNy2LkO2GzV20*VI}DPHP);BG+NOD0ttbT1!%Oh?_g|` z*e*%!#BtIjb-!-uo+j;=q-~m}X*Rn}<1}gGX0x$tJBzKeTu at 0S4T(3BT`q-=}--x#ymD at 44rmd)^%}lv4bv!{u at rN=r+hwApPg zv&ob#2!b^x%V8-hO@%_i*Peg=g-`#ob^LV%b0>|jY5Vp?6=hX#X6F at H=82SIc(DK2 zv(G&J=pF0mU0~>U9 at 0xTD5LDHsX{8qpKz49C-=qM{V9^Il`|lEvTIzGHiys;Ud}=!E?0#~uGi zafgkMLM0S@(tPT7U~jLgs3u^_ at Seaq9<>*8cE}cI4!OqT3PcpyD<>DF| z>bLSdk7VOJd9o!i;rEA%ii at 1XL&FjP-|gymr%+QF9&!y|Nb)UyS^;a|3ncM^Bh_+qi}4_^Gix3?Jtk&UNM_&f)@ zySq~ZuA9W>&6~x7#mfqc%c>XvAQT{k0-OP07-PCN7K^3IVYizUC9&J#kzs8r5O at Uu z+-`T at t?Kk%faAEuD=I2-^YU^5AkJe`hU2(jxww?yb^k-_%~sn(@kCuC;o&RY|KN7J zBk3A#-Fa`7&6)pEFkk^dmZBGa{?fDGJ at oPmt@l0r=)dp=acMk%!0-KbeEGhIKlBK1 z5bEM-niPD-?;Q^pl~;VzYIo*K;h at xiv2$NrTib*stMCbyNwF56&v)?b*|V1y(sl3Ny&nM37*CUB`Ny&> z`?H*mZ&)mrLMbZ6Mn*>WwY9ZP?ApESlLp?fGM--}+J(c14u5x{K6dTe`KZAl)XtTo zQuIg6V^93)wcYzaQ5?@0i-z&)3;%xd+5hvlev#qm58S;CM1$rTbJ=*csp^td` zdk(Kyx#IHr_3H`*K}g}JltNJy5JK?!>uxt$a5(bln{U23l5UV28yoX-a&!J|$&$qzi;IhGHk%DRpSZ#3x{gpN zgkUhJU%YT}WO#UFjWgT%^^F at he8}N&und!WHd7P at lv12M+ZAYQZL8_(>gor8+S*!M zK|%hrW#wfXii(OeY_?3qw+{wG at QjX1Z};?^85|gVe^*ymLVUYp$BuieSKss8vSrH> z=ELni?d3RDsI9Hd;y4bfs^XQOz4Ak^ckHRH+qRxqvShI#p5N#5DXpz-Up##1 at ZTis zzH8UcKdh^-`^QC#7R^t{v17*vc~w)#IKh-)d>MiXCCjT;x?HYYx7(edZ2poJf7G<| z;T&Gfn5Rumj7{r0xytf}k1Q%(De{6jp>un7f#qUfmjM7_IR2iZ(p8pZo{jf?r~m*c z0F6+vyb%n;8aV^Is;I0=&?%s&IheA%5iEek6>H3=PriN+fD=xq)5F2LM>DmM?AFzO81iexY`im6g_tii%CYcYi9<8aV z$uk&c=7v(5R-V~xhS_Xp6;)ky<;vCNq97DntyVVK>&<~-7%&Wjf`WWI&+~Zz`giTx z^~myy at -H?tG%OLtnf0FB-efXj>9VD!;*yf)j`sGhJ$rV4<y7K*Oxb2ly0ral74Rr2bej|Qd z_U_&LNM+ at UCu&?Zd0=o;vQ$k4(X<(zb$U}eYlHv*Hf`EeR#aT{WK(m~5|(3c*bWRu zT|- at dSy|cVw{6?DIc`3nY1&QcNjrXLh&&|y(bGcll@#C^#!-l4k#UIovTtyr9eRP=`=YhsY`t^X{ z^Mjce0aXbFo8+NLyzzlTBQq(P8-Y?vRVCK-_Sx2l7q3`rpz=Yn!U7igbFXjNR;F4Tge0 at QwMJ91cfu{MpQG9Aw$Bw7 z7AA~KPtWDvBS((B#Jk<@(1Ra-;*v)61mgpMMN2Eon$~SxdFtfxO8`(%y6Q9KYd6^9 zQz;iZjt)k!Wx#X3fgAYKn5{(96&M z)7D-4#>a;HzgoX at zcYbfQ}N=zexZdIjjw2$a{i5jFTVl+>({T}{rWH7_~zEFo41Qb zF`!O%%n;ufF=~Z->Jn-`bkBe_B*jm|!u1z%)*tX!)VRz+cofa at 65)>@HtkR!xY8 zSw}cKegrKot>?TR?*}wZ(+Bzoe$>?5SetBst5#L6j7Fn>2jDZ5QmScc+OI#lu48Cu zBoc{4Vit?Vsw(Pb0GJL;f4{G{@3U*xt}ae)V>X-S7p2SPa;~bXT%&347 at icBXdn=H z5tvQ2O#40G^9=TG%qc2M7~#d0_15f;BYy$laR9J5ayIay1=_6FqPmVr at 9=rI+dY%~ zq?Breg1cUlnF2(o^D^Rb?7#l4um4>8!wjPiNs?4jUS5740H_jtP9x;Y$!!Rs5KI}J zhhF;0m*VLsPMo;7eaH3_imGmBlZ-~w2nmHkPrBW1?;LGnV)BzGPn_I6Jso=P%$YNR zc>enO`hW0x$9CrC<|YK#Mw2OX?b@~30LHDEmI{{Tpr|ScA9+lMk0|b9LFu5n-90!E$_K^&v`{ri<7-{et!OvrlzLmQ>RX~IJ2E!Sh8eEUcBtL zdwPbZCa1m(%o<<7H+-Py^ohT96f8~HuPMX9nw3`z0FCQ5u5G;kW2LhCj>j79I~xo5 zN1mE1>pG=GPxWega?F<|5#8V279P2J{*$Lp9qXDUO(x4oZbOI;T~Gh@+ImpvYj9t_Q7e>jc<$8k^<6(lat!~o7< zXc`9IkZ_XrkNYpTw6yfhm0Ma`Cim at o;F78;3C1 at go6P}cb|qC)psI-{a_`t!blf-o zho?@R>YOD_#n*>|p?~&xz1wrLoe6F=%b8`)$T0tj%jIg#FUZ?6Jsp5XG-#RzP1WG_ zj=eRP!s7wJ?RKj>-v8l_L0`BO3=5sk#3=wE7Tit==Vm}=J*X_p^Yc+vRVCyXQf_a{Yfj1x+ zoE}b=AxYARlK!;qShHqLp~GRPs-_{CCmM+=;c)okLb^$kbolC(D}Aw8v{KUuWCJBpLxIuD&Z_HvvHq%0xk&Pjk$ra#U4?q9}o6{zxP`*w at z!p6BONOf1Vn zR%E*%2&+|9C4T=n38>H78S+CrgFW%AZ*wOW=cvhtUrQA`L` zqLJvCj*gDrx$?YQICcEZW8;19lq@*IFfiJ(8*-O7l*iM3y&V%F-{9Ah`QIyOx=tm9 zASx3?WDVh%hLA)+NP6QVgy`XL2%%62kw^s5XcV!Sl#&N)Zf^QLhr|Am!N8|xux}0{ zgpd at 2W;qrBvQyb_4?NF at bV_6C>KKMGB-1FRR$#`9s;UZEmLW+JB9Vxy>$+dp35`Ue z31cM7GBoYFwg&)E6y at uYaAZ1}ZZeyM{6%@o;%PA{7E=`E>3CYgo+Jgv+KHBW>Z#cJ zc!|BRBH|@|M=MWnUSH?;vNDmbj$zo8_uzQWkuG&3%d#&Pi`~}zwYPVik4B}mp%TyY z37rOmq4TP$y&O+VFut(=+SkT=I}!rRbWozxkOE^zZ$aNX3WjCDFl@?de>dPbE+t(+ zh>oeLz%xgV9IJ^&rBCVUPARi!Z*TW13mAjZDAd;0)|T9kegMEQEEtBF5A1cFq`d;h za%?HXFbQ+Yvdq$SyhJ0u?(XjJ?dql~>RajJ-FRpkfg&phlS8xwMcZ3jdZvahE*SLB z!E^D%aM(ZeeWRC!H|U3-K*TY?0J^s zvqBS|&$Jvl)ONFS2_ZgB(}DmJlGi4aQOvYipWLuqyz|4Ut7K^pI-R=}Gn__&S zvHow4U21u}xMugFbiyK&qePk>d+GMoes|Dfk+j}r)$S+m0dNlhoPPd`zXjl?jjy}A zTiLvMlNUf~a$R_ zX3P8p0Ho7J*L4Jg;Wtj5I(1~BcYC)`74 at K|X&GbR2Kz>kRpljFR??mxZw3s*@&KTz zg5iO5bh=fcL+pXmwX961uBI^EP;uu+1+!20&oA=iHGaM`8e=$kLgiGp}9~t5SpQE at kFT=TrS7Q-GCq1!=fiAxyhY!rFqU)!pCIi=ao=@l} z5{dQzNa#l}2>1HD<6knG#0N7n%!Ps|h^ngTF)8K=hr=CmOnF>W)lZ9I=|NM5vCwD~ zGl)j0EGtuz6zeQn$xATvr}zsY~14YjQyv at Vrep(#B77Xz-pQXMNy;SP{f1T-*TKd zaUulZgN==i?-xVDpYuGQD;mWdqtR#urI2Mg7>mi{nx>7biuQC%OUw6Drc6gyU at CCU zU`QS(sgL8hv=?TR;c~e|i!~!9Obbqjx>Z$uaiMk#{%G9gav1<*B$1{0O9TsG_3G6b zESs4AID7W&bo at 8W+S*z(Aw)>x2_|38TnN?G)eg~YU7KOcY0^}AOb+?au`GL~t*tG= zPxt*H?2qw?R|23mnI_wzjs;pX3;ZVe9JZYIvU8sq3^y zmgRHh<>glo95}F`n_9DGO`*YHSj8LodY$THN=!M+aa at 0AXXkYn8UWPS*XOe=>tYzV zbe&$+b^U at UihZ+2mx9{bS_6O;1_QrI*D29;{VhsqPiJT6b?-~1n~(DH^3e6(D;~}3 zn!k}>ko)`b3!M-G&&b%{w6wH*ZlQK}^gkBd#jhXg>gp;TS at u`$4qL*3YI0(#Z)!47 z<955#E)-yanC~v`;$|Tl#cw4W9;Fm9Db{v9!vpRb-(B1WnwlCv<#amglIh`4cwCm{ zwCR<2+%>+txMhf<_;JxFrukOWDP;3@&s zLRk{!9h${)JkF$?#Hq?mswPvJ${#={nab37swR_VVk(ZuGxkI?=&>c+vN*CR5u`}T zTtIL`lf=^48;#!Idf&bGobSsY4}d_By^s_w%h9ju^?R at 1z2|&q`_8wW?~;h%$Az)6 zF*Q1R&?Nar#t#cw?OfK+!cSu{N)g#KB>*s}u;?j9Pi&``}86P}&(EV5%@gYG(^z_qD>m;cL%`h#J z^Lj`yKqS43b2A%GzW)6$+c;XUwaNrR;P>|Qm}04D78Vxm($bPmlQeb0vC`h<(S4u# zKXZlh+roU&&DZ9E+2|*&KYoh89xy+yiVq(KRqhxtX>&G@)aw_`8&1FR%7I3G=`JEt zc<=5?5J?6{Ha|7EVe4^-hjhtLfZdh|Eb^1H8y`7xL^YcQKgydz0M*Bou4B;9%isO_ ze`UbCAKZ6eST2{}bKmC8n>_#?fDiy?XJ-0d`irOj-h-bz_&@VEsI{iQJzA|kvG_aegk{rf$)Pv`SybBL^xw8uFbZZ+#$k3aKg|LC5( z?i?B!86f~*w>m%Q>FI&BX&)F_$2Q}6&QvND`jE}~i3Jh8uY}zlrXQmo|Nk at m*qF)C zP=ORDCQUgMjeMiN^uU3i`9*C!Z^ip=zx#pA#dD{3?-(3>n-UdN at _BXT(4mi;TpAk# zjgF4fL|-30 at x;qi8K0mh^FCb-FA)F?L?iOV%QYS!pX7rF4>FdqTa1kz)pvhpi=RlN zsIByoqW)Koe&fG?=z)F1m1-4s4NTH5e^-~=s2ja z?$4qx^0)Y9pN;^_5toQ`gZ&T~GkfDYadG z+E2r9OZ=6u97})WH}+cG!cYjH|83uhcGM1y^Gd9#=lHWv{*A4hHx86ar8P+-w?YH} z5h)^yRrJ at Ekq{9b7NI9zKBoP~ey#ufb)DoRy at ayrTS~NT$Eq2&bWsmb#)^$EfB2Mr&f{lqgXG2(y5A5p6i~by8|zX zE2WGRFXI{Z4SdfsJW`RdWQ^xL4FHZP4RUBDI$NvcrE&D=QF-*yN8Qa6_%J|a-8PhP zmW?STow%p5IQPl>_ugTwvmc&V5h117+EqI5Clo|PM~;Z)hm*AeA3Sp8 zUB=M;N1>K{_C%RbIWD~O%J)9CdGp55eF%x(e+MN^M$IL>aA(pC%pY8CdtVU3c8~?~K!(d>Nh33~jj~UUzrb6AFXkX>ce| zVQucp{iECN)2lHP=Nw*m;iXoZ+K$mGQ|+nxy}iBO(&8fLO4Z{;x(O$dg|>ZteK*+g z&4%K!v9Whaafc3d4b~sGk&*yR^V;lqd5WX!rg5Muz1 zj*rv3%N<8w-#+h3{Yoh;-- at OVsY`9syq@>Yi33Pn*f|cZnmEnw?xvKoHQf( zZF!TyFp=4O?EByThY;*3_Y9a~wb#oR%akir5atW$da=6_!ngkYZ`VKhGr#nksgu*G zbrZRty#JD|l=+H{??=@pP zXmQIiRSCOuBsUunMy?MCkk9vVvzbU=-zd+{j^ChnEg=dkuZ^2=ea;?4U*FLieR(xB z1e`;zzn}YNX84(B4)Ec_V>o;mSj!rin3#~mhYraHkkW2AAgu$RV`F1#|Ni|d8X3`Z zlWkMVHB_T+s9Nm-Fpt!hMdl(MWy3Hu$&giY+l$}%(|@}EOTW6oc>ap5I&ND)1OUxOjq-((0Kme+JPJiCm0&pq|O?*G!SW>@R+ at BGpK(|Y(*Klcxq z-K6+92S1pfooPi^I%n;u>_R>tWSU{U-;ml&q&GkJr~l at +?!W)O;%enioOr9Ve%F1! zTj^hSQ7N^^K$D$xjFF~evjENW%{Z!6$~rooB+}c+sa_XpE at XAPVGTm7gVZSNX$1g2 zizJ at Uq*I5e8_3J z5CIb!BSjr>%V5h%|gie1XadO4k9w&u2M@$KZ~YTmr%*T&83 zt~+1Lg84b1rx%Y=YD%n_+QK7BMH8Xega8B%Gf!R4gv2<<>xIoy6%C!EA7Y z)-Qkg%PSeCX?z at NI{&2E?D}<-57l)Z0d&`t9~Kxv&EZnX8H^wwq9?T6$RHCM7e!=z zBEUx{u7ks at z_Ba%oTljS}e_IXh_5~SxlVJ`1wQk(NL zq0=sk5F-oaI^4;DeQs(+p4K4S(>MJ6AAI`{2dV=j%Njy#n#$DVMD)Oc$4`I}E8XUf z&t}Wjj$Y99jF<5;uG8^St&~zJ89zWLuES$b3Yk!p^EeJ;WJ4lD?4_cE)WC!CwC}9b ziRyGjMY$l5h+PR{sy4M{r46~Y**1j~@~l*^b`oiqsw#Pn%E5)#l|JRbkPw%(r+IyC5_;n`o#1k*; zN+mJ*NO{fkaiGJ6fb*q*v#iYgO{Z^U at g4kvNlSv>M5)**LGfK=2gFgvtv6gZw at kz&yT*s6%oyjEV zluA3|@rj8PCr-F8A3VtN9)@+$T#g!2ADljhFQBFYli*Kbd*FG8R;B8{B%l0 z?pB5}Ha4b)9)Da{`odr^8Vp_0%YZvUAropBb-jjuCKQh&Ymn_kMMTD=odI^LD#|Ma z3ch71BCk7#oCl>L8qTt)j#f!ssbHbwFD$kC`dVXSV{)^EGB!4*s{8hNTo}o6+%9uK zRkCRbgpjmvtOIE{kWtPT6D#G%OrpT7ckH?MrP{(wt=Xvc6X+U4x!ykNdMq-2{K?P% z@<}G$BRCM61$Gd)(gq>RdtIF0LVfQPP+mV}gZUdD(xRt#lGI1s}gShNta zIB9F*W|SgP+RKx315lI~+;B;+2oZpZ3QF7%h>S~7kUTA#&SD*@wl3opgfT1%{R?wb z>%(lgs=Wl=x?=)72xpm84hk&-QB2kB%yiQ`X z#uaiIaYc|6M5j4|3P~tXL>`+kBVo*j$|$?!@yA_P{p%VSpMF}@tUZ>AV^m1XFocFKoP6`{W_ at uT zfk+5M5D*B)&(^l>zWbOHw6#WtMVYwW4q8i#MGzE$&?SRFBmhW26co$7nM^)U9VHq% z^#kh%?9zTEvi{6l#~+B}P6?2A+p4D at kPW! z+}vFce(JZg*}@{T3+HDpZ at W5mZVNjm+>IVP8S z%FoBq(x%B%C+=UGpBX8J{+gIcC+e7YUVm{H37CaD1M9ZFTJG;7FJ%asAVtUX$))l07?de8RhbF1L%Y=|ymR~q_b`ita9r*kd}rOp9j{tWbsQ`4`f{yOwMT1?^T_&T zai~H|1)##h)TQBbXD04%EX>>m;S9QcXVBdyW at DaP@PX5)wS3~ zRdhDLP2;%Gm7z!= z*VeIs2qZ*^x7=~>55jEr5+tJ|&79BQ?QRwfj*O41QfY_Z4839sH3;G1*{fG>o4#=B zc61{$sJq4#2uL^Xy7L7c7SGVX{-dY<%U54`_MdLO^TB+VLB2m0XQz^-nM-FL{Pg4h z6ARAzfn1!Lw~JSf?d=>o1n!D(j|HxrsrWvvQ$(9ze)ik{z|R)%>|eJfxV5}yZQjmY zJbme*&wS~h2}r&3`b&>S?e-T3H||*0XyTleGp{}0zIXrU59Nd0o08F2UE(sv*CWsW z$3On9!Of#1VXm;O1-I2$v{%o)Jw-}Mp=WS#=RJ=GUXZ!*`^?4Dm^$;?b9X&>;9KY3 zeslZG)u}J9zim%Y>={I^SY2`Q0zhqk8twYRjqg#jX0M!k>(axY`}uz?j$;;Ae&*}{ z`hOlC9x524sZ=V#tYUBmfLg5vYrAnMA|jVBU+L_=|Fi!~-_XzmiHV>o+o&xLUU=vA z`{$=GJS=Q`OQm9_TCI3N5WpA%qW2ChGb4^;G#gEsx-#7?RtKKD^TE&lvDRi*X+13# zS3O at A+Ev{;INCjpd|gyWB?^5GitJHU5%)n+PrJU@(O0-;EX=<^wwCLvM7dqDR(xx4I{{4pScfHDt1t^;F$jvE5OS7jJqFio2dws8F z9rPfH+j{JoZ~T4b;!hS!#brCkTI;5#XBvfa&*@IPKDuS|#%vgdH`Slw?RQRJ`Q*?3 z>TeMA(HbceY+Qb>gm(t-I=gUh2>5*7p5K2#}}u?^m088Z1&Qb6T5cb^Wdp=YO?{U zY^T$yk~V!Cckf$mWtyZD4GeF&-7oZX4R|+4+~%tTNGCdj02QxJU3_@=Baa7RzJyz^ zTMqf^0P at v=chxt2;Zz?)%8GP);mnC$)oLZ|?d`eI*K3hX^7;JDUr8$+UOMx}{=R{A zGpxy8Jo)931&ikUdyXt<+CkMh6#m$P#4;6d$qNft(zt?+=SF%YM2;Mh}N|GR0YwR>Q& zKeu6c*Si+rTH|O6g**y{ya&J&k?h38iC^A&`@V|`qSz(;L_xqzue!~TiiXm(_E*2rMi?NRI628tyXi+ zx!lDIZ~x}mw_lyT?XHJ^XWja(6ILY9Y_wXRUG$spBoW7fk1$J0725U1J-c`BT#d_W zKyoZ{*QWKi8Q|T0sgwdUX9z0K1QNE@!NGymg0Co(33}c+{{4dweCijbtj9|pw;TKR zMakIM7>|w~qQSn6o(Gi^wml5jcjf%apTF~t-MQt;Yqz4z;_THCGqiE at rDNZJHer5v z)$L>Cw!8ed{^H3mj%>gEHEX$;!e2UvbDbmOFG-ZYTN~XD$fJUDwtViLH$S(2``&<; zQ4gF=!Olj2D5aGMghU9-UH?PUH8G2Fmi at rX_{3?TEIiN}?gen$-cJPp-uGH&fe;Zu z9v~V}YbtX^a+Lyv0*KWj at BxtfC;>7+SN#*oh at v9F@#LE?|LV?N+p|h_-P9kp{BotN zOXX7O{J9H1|N38iM{d7=|JPD6ajWjf7dys&;uGs!e#1f#M?qP8Y7mTdSI$n}F>(Bv z|9aircJ%?0?r-n)`$8cijJsWv4=;k$Cl{=7ML8^_i3hf~=)I z)t;&ctT3h`U@(z at 0BWZ;EnJ at m%ORW3qILel?W|N$krbnpvw6L)y?_6HH`_m<>`atV zIw%sm%IVi%yuVT|dV>dU$OP=O|kjNE`(z#}%zNgr~epxTb)Y%Ew(>wTm5hMgC2-vYe-V>JdZgdTy z0wGdtQw?Ip*R1So^tdbw*Y&&$M3h|n{!z<>biE!7(gY}GhO-}WQ8)$zAVnT^59SzQ z`N)gyIz~p;WzL*A`*SlF&b~dcVOuks)%8H7vE8L at 6omzkbe~Jyx(lb?ckkR=2FI~a&45y+3CzXT91##*G(JG|+I`MHHJR;!g& zL&NjAYh=`)1%F*D5yaHt{$U_xsv(av;Aj zb^he$V()OiyAI!fF1*U=shsU4$)}z_b zZ13yu at qX0wZ`im#Ja_i|&zybh`1$qQc3b16E at l%chEdm<YY5x4+RE*|qPz8F_9&|EAl`iD$<@vmN?-WKqc4U at 4IX z!^?)^1$h!zIDhuk7dGGZnP53}Gl`l2yQ^N1sj-tt8H5lKW?;3WdvcvYY2A&j2SD77 zgkPg7y?oi%?`L61*Wd6_%j_1cECE(Xn1w&o>EL%2=NKYdn1l&J0+Eke=B?0LfxvxH zyHyPe`I$6|TD}KzPWL8>9enlqZ~eEMH?J>3RytW+Jk)YH=+8|{{?u&=}@$VYDvfa`A86p+ZvgpRbC zN#eM$nql8F21%#AAx&+;(kvAw1ju0hS=Yg3FsqDW~d1*mH~*GE)ySRevnNSw_TF3wGz z**LKI&JTSu*(MQ^sAZwhP)up5XYj(=iI>w#rEFI7My!OTTHW at J>^MVE5x_nK at 0$n3 zIfu9tBS{h$$4O$XbDn2Rxl+ok#lsS00&nK>*-e{oyYrIsOwp!dOrUy>|KO>g at 98O5 zK=gt0uZReeBmn>zW1#g461fOOQ3p=MIZopwS^4@^(5TfVU#d<7o{CEr5LR+%@k9fiNck zHHjn{-n{d>3zyHVul80}9pFMCAD%h!(mgx(JTwE+1z}=iyet9bPN&|J#O=+-TRz9m z-0Xa^Vf*cWB1CnisAkfHo4(P_kqukEb>;N&9h>fYG<@GXZ$jUuJ94MqeC3fn`}R*+ z#YF`R5gt%BJRb#_um*Hp!=-B9>zjAq^PC7< zMU)p2x_S4AIvrV&(3SuI zAOJ~3K~&b_;>D?!7i1dO8cAWkG`;8EPk#T*#IbFKLM|`NYqGOmx^$&g>>c{S<~#0q zD~UUqOQ%lUPqq4vzP_IK^;F&r&uBOsZ(5wcI#TH$w&I*4g2pXl_F*7h8=r%cwlEri z_BQRj`_&8Yy#CAO%JMGf>nId*-j#DFKfC?T2fnX?GDJvq*J63%<>wwNmy7w8Xl%CH z^#^zDebut7DUpWJgq8?5MsC}Aa`KyBYdMxx7fpHHZR+ilFFovto+Qy_0x1~DL8vf& z`O;@M-~Y4Ta#BKjX%?AG=CszT#llU326Y3M)+Cw83Tnp(kxUk^O!CZ`<82!?W99jN zrqE-WbC-GNp1pqprfEO$Y40PS`>IXa)fa#8y}!SfvTf3_2R{Exzhl{Tj8Y5Y+#-`d zPdcp`OV*Mt?!4!bZ|>gv$m^%yI=*N2!o-)?vO9TR(0KG0{?1pJrO6 at -gmh6vH=#ta zaF6!|~ zw76 at nskShCn;v&CXliSk5AmITGc znW+bc*A1xUXlyo`u4iDw_nb%rifR&3+fYVFh^e8NTiJa6&HC)6{rR4CtH|IAUba+R zn!U2Fr+>ID5FetmF6opRdQf}evM$xDXO6cwZn^DSBGMq1mKgCt!q<}{z4wsyEsYn! z`#HWuWX*2er7LIL%sW3gea{02zM3soYV0h}&rTJyqocFAa&=1BHm#7K0dcBSM&$in z$?u_|`!|AMmX%yqO3!jTuEp7~g%qMSx5#yj_A at yVwz5WhgFu8JO@T}+MVFOi=UH)V z+4;WF={=8p;a{A6`}n8*AjH1U?0Z`o6BCe&{(q3Bd16@*aKng+6G=onrO0UG#08Z~ zPf)7#p5i_C|G6Skj>RgXx)Z5;qO2I{I2Ioe7Iv%l8#@MsL at Q}H#=IzsNszBE&X*J+ zyB4X$S_@@@OSj#5-wUujLk3GoMJq+s2R{2t|L&0~gw`XYmv;x`LE0>De^O}|F&{?p%su=Y|NvMs^ZQ8!)TW2R; z+*z%bR}~C$`E2&|n=e1I=fO`m0nUj~=G2=n-J1#h!b&@mT_W#0n$Z<`JS8upR z$Jlln2cg##ry84Y8-423=~wR!E5rF^OSy*LO?$GF at 4Wh{N>BeHDaw&>aQeh64_4Oi z$}hW%i=eeI)f#^A;Yqfxp at B9Oh`XN7wb at LTVJ6q_Uk!0{5trY5cJ338{lf2u2~BTT)(+QR7}5CWPYnFpCGiqcu8VpFTDNv5-jY)|B* zljen}E-Z;-UhD28BvdECtWs{e(XK7#szKsXFMvxWU+K|zKKQA&02Kmdh)6NB0*OaL zniRuY=hqkKdYbj6-l$p6Gs{|ab|SI9>srP$X&P5+wHh2dIOpJ8*Pwj;J3GGdITPgS zpZNUW__xOB8DV$X3e6IzDOOVDv?#3zI at O5bK?NRZ_{uq-6)8_?Yehw9#$n ztJbo;e0d7S)6m+$Xbo*Nj5a at f*ZP{;OHPDp#Im52vdm&GPflzO0&h*Wl18%?Z`^** zw}{jNE19xZ7L3u#If31hL%jnd)3~OXuZ0E?V0LD{ zzW2Zvzf$dAcNV}Bvu*eEtxFi(0dYNXx)!@M2`Ek3^Be28j-Gt``1396+^WnZ2z)&| zb^bvCjuFTTL|;68;%CaG+_I8elBCGwiYEh;Srns}EU1-+QDVXlQs=8Sgd4pB>o31~ z{Dp>NmnT{!@TGTzE}wYj4kGpRHUEO1otb%f(}SPT%h at jKSIK(kqaI=oQX=NJ= zUZf+fOD^7+NanmxS9P9xOY at 35T1y&faT)ERNRi*+FkejjIL<&RewpbRI0Mt?9gp`r1m(Sg)VRa{p;CbGPVfk?}{(;gPk!lI=} z`8s2msJ!Fuhn{}ewyU*9+3#WNFk_70BB15mO?Z%(t>jz_kR{%NIeRSRnc}6z1VHj0atT1|M+8tYy79+ at 0CT{zw)>+Mz7bUs*=}YTgeg4n? z7TcsJ41;_jACR-%Nzr8x2|6~tF)6OUR!UnEhDCug$~o(`8%q`E(p8O)0HBqUfsxIx z3v-KvmOOU#1>N7uMK7h- at _hiK-3(^uZ^|@ZC>LmQG9-)B2z8qmsw3KOB*qV&BT`*| z+nOOltT}Z~M3jPdx)Zg_iwjq8Tw#oXF$SLJ!Sg&Azo(a zC{?1U4UKlO+`Hf$r)wEQQi>W&^XpmQscXx7E%!0AD^&Wfc2zz*=bP-+sMTnu>{(rF zakRVSE~3Fhg#uM9bPCh-L>k-fxbHi!J^$o=gfMTNgL4+nI at p`vU3YE>OZMdJFWz_W zCqMuC#7oaTFgHJwTkaSE5g}8~%~l46FN39)K$>&S`Q)`@&#(bTT`hVc$>f5TA+NFR z_Pd__{&UamPjVYp_7MY6eY>(}PQJXaZ+OFtrzhUnuKRZ7t$V+*76 at A)ZPrTV-m4I4 zKqYO<&M7F7YpLhjF at w~~iItPcqWC`3IZhp)pKU=Yf}*az|E|wOPzrF&B0$REh^=n5 zHQF$>==9#b4r61G{rlB!KzmN)+KF?>8iUuaPjs!d_#)!>^sIOj^BQ9`uGOuz7LcMk zD>Gz5kD$uVp`RiBFFf_Nzdbj7d7tB?;GDx!tvgvhaz;M^K}0DciQ3JAW4F3h4}dX# zRH*dMLQ_PEjaXB>3FqvATXNuBPaoM$-gTfG1tI`w6e5t5UpYqEQD5wbiT5D_w1^U= zL at TWzTAX`V0LFEO+Uay|xs}jAxM7KeQ_)_Wx>gFWY&#q)-$%lbSP4=PlC_SZO_IDK z>Yfe2+9VSe28md9(s4#wg}{EErEV0Io>u9vLcP8?WNor)_(9x>f)}6ule=22`f>;Q002QI*VsII&udUv z5^Eb)x8oBy??gn*p+krGE60x6zINQPlx-?2&B4LpXRpki9`Of8S9N<)d1LtYtKVNI znd*wh9y|L^bH`_X<_99uV2hTHDNV_e_I%;hQqup3p%jD#;`<`$ts2?;z&e&%J6+3l zAE+U<+L9zmyy|t;YPK8R&rW$N(4OyyOtwlu|I5!j`HQnxFYSqw&YIMZ4+AD9#e^hI zf;BTtBFSWPu~H&di+pU)5m*x`t{dj436Qlt(tt=I$YdKL5Un#Dx=8XPBhs9mm7u94 z(IlRRkkTnLujwRnPtPDoKnxORnP+cOx0XXT%nPpN3^F3iQZFJhJ`PulUP$~fY&x4Z zcka3W`OD`|eX7w&R at E}1PBS|{eQE1TjK}kQH#oB8dk|?T)-{)?cHTwl_?Hhd1YO5S zWpa{rD@}A7x1gl4W6wP=^4zKBsx1ZJ_3iM_oH+iV?jK#2qjA!LujOhGWR{eox_G7? zWlXA#|Ch@})_{qF2c?r##dWPE^1*cUj~Aj8u}geyZ9$Q#EX~bsxN>pwz{kl*06=wx zE(vpm`dTA*olDKk>i{-f>6E3V}%$OOCR&B+36o&cQ?e`xzN{(w_G}o+~6wQ3O11s`Sc%_PfXNi(_5HVm3*iYuwj>aP)alNnwSX at K^xPNZm{0RvWXr#bch#y-$oL5 z6rsru&5_MJkNRG)2KjqsD5X&>^_=wm>;gP*$?C2<_~1=Xy1G82Bsn?n0`fba=!PRS zM>cML%FezWt)(JU*|?$}>K4zoHto9Wbt}4I6SQ(F^XSCr zkLIa^S_2SPo+eKV<*al0Mtxx$ui at mW(pn0I@={;_$mGUtyI&r?`=M_Y3gyMM)GGv0 znj8QZgt?~CW_5iJfOFO?&Ry9Ak}Q!b6udAS1dG8FUpZ#R05vu?rqF#Xh8hFZ_&D^@ zqcBItC%h-0JncXE_v)(89>Q zs|LQT1lO8JHXEKcS~Xdu5opyerX%TMUI4cyP3k8GL<9(HMdGm|KdqDhh1O9wK7Igw zeV{dQ=4HT4V5O8JpDmUmVlqskFPuJc-AjXv1EalulserzTa5i(%iv#b&Pa*{fJ5pc` zVZTvd>P>92>Y`Spv2OGBS2D#?#7ve62}C~V2{R>N$>z&#-_NX>C$?I($_wB9#?M+t zzhkVE#0(oU1FjYHRMW+3Q4dtmldUE-)fcC&fgsDnI81EJ681q}OfS{+jXpHHrP5xSfCJwHNOuLfNHpZ^lE9@`4^{ z+e3+$ z$h1FffkBXswvO)oGef54gzMxw(UmB)hYufq*I3+`+yY1#UUIB$OvFtQ)!4di$5VFZ z#77Vx1k$|P8s56?3`829RxMK)NG2yI|4OSkQId!@j^W5D&riT>i*iswLD%PJ2T7}5 zCA`iTj40n53O!W4mdd7$1&^KmPz;5c=~`lFVj|UQELPScVk<>LLINR0;Aq!#BCu(a2dKzS^$O`863(sP zHhMXe$*zeZCP^o_aQeijNb3rDde~XF!Gph^S%#gpmHOh`_O&KB^8BDvuJ+ABIR2QK z39ek(>w4RgL at sG7QuU2H_e^AhZ0p08m&s&nn|JSd-8rs#?5??kPrT<@JMWqm&ph)C zn}SO`ooPX&F|cXtS!vERKdgFZ7cWY=QaLV6EfHyG_M<3Vv=b8(e`TeTLx&DYE9wy_ zij&wK59t&bpmO3_9pxlL=?l3KS8s$JGj`$p>zWkXR)2 at Awp3#AkX zK^Q5eSDne$S(?6h=8hz48&X<>MIZg+-~VzHHP^JGI_EqsI%JjtL^9j%yzk{qCb#BY zuF+g7zWv$@zxziNw?SJvzKm5Hh at h}twx~QEo##63Ps?K?y-&wupF6|1OR~r2!G6d+JOg86- z*?eua<03$pA+?&dffv8?Ctp%bLj>9EL^i?kz|-IOgTLF38l_bW0icb?<(~c%!iY$z zwgTPofP5S{d>G=~Wh>4^Fw)RO%|f~7q*5Q;LGO9K9a_KjIfyirQnf(mThq}scknHE zm*MpA;lux5d*2qE*KwrRJu~N=|NQqKH-aEYkPt5tBvFnn}WXsF13J*YG=Ja&W>FLwm)6GXlMvPi95&O^(EQ4aH z_-;_WxJ4EFZ}}xKi!=4zj~zS)%nfuo00-ik#YGw&9pzVEId#hm`+orhfIrH16GRnD zj-vs{AaGk|u}F7%zxw4{UpaN^WURH$5~E7F>g-cr`NqFw8EXcoiq^_adneoo1R$A# z&=OlPoxT0%T*qxCNp!>ZqRb4{+H&{L{?~u`he|muV~iJuje^!mTgh9-B>wd4Kl+lj z*eltd6 at RI zwa-2I^ie==SY{F^??`gtI+%ecCw&{_(vfX6o5&{E^Wec(%S-bQHe2@TcfOKQeeGg6kV)~sYRI$G;Eqr+{ zs{wVhRxEX2Vx|TgYy~ozX&aZsy_y6R<$A^FVzhC>| zcUrB+O<%@!kTn=IYnS&B0`{*pYTSGf1KK3c8U at a3rm>r3iXAILw&%wRnzcf+)hKLq zJbv`cUp)Ss-~QhJ$Yk=>C=Al=IAU9^MkWk{eJjiJyNOwlHQ25ql~Qq`qkATuEiDpJ zT?#1)Aa{p?IhQdtHAM%${&j7I*8~>z-hq40xL&GxE6PL&358Eip0hYOU{Egp`u4=keS;!06~zlI`v$Wk6ey5io}NeBq?2oN4Pj z7nKVeuOXmHNn?x;Xg$NEglId*=?btApe$K7ln7KUU}{OJK23nAz2`Eol^U>Mbm9UE z)7!uMd`DOBM~-rDPkgX`Y4m1dV`e~5EPxp;k&dL0Eu~c0u5ovD1Y_-ndVKKkb1&s` z#ai3+GK1EMv_`kBNDu|&bEU;czx>S~0EiVtRUxKW+_1#g=5Wa6SX*w#O)xe##-Z<< z1a)LI2TZovxux%IC7rh4m9=p2%ZOOBR at 8-+*Mx&N;u>W#Ha5m#=$jaHWPk%i8T9mQ zdBd#C-jX)4%O at NA_8)vhGB*syO{p=Not?d=bG^8AOJEWS&~u;VN8g(V at U}Hj)^%joLG}InYpoR-$O5_ z{p at W!)@~KVgh(6`P~!{F{_gklh0b{?)tx z1K_H?Xwc};3amM8Y=c{81s_Ip;X;9g9vNFk4`2SjNEI1Ov6b`yV@= z&g7SFZ$@Si&>)2Jp8Zd}v2EAh$xJ%`nI=3TBIL5g+MWjv{-AT)u3uS}3t(u4NQZ3E zu2%19Tl@&jC~rf?Gvni2SgIMrCSn1tLTAsi>-qI|p6z+*aQ6d`u7-mx)dL%a^Wp3@ z;oyz9u1kAnW}MxCwCBVvW^SZ2xw1mL#JWArXcj++w(l5tjhPz`b3;-TCAk#~R~_xf zS~ijhS6isH&s_un6jlOSr34AF+S$C_;k?@2$x3ag)R|nv90uUt;29$`UWi)Mz>1Xz z4?gvZU79IV*jD1`hNrC+qC{au6qDnnEQ zr(CXB##>CZ6;g6OSE|XI6;s^+Vg_wv%V4Wy=u$dYoc-GKFO2u}?s(hxv&~OaasPVY z)oKJ*A|}F9QN%U?q%we5*|-1k|C!0;Z^x=&W(b(YGJu$W^w6_M_CECZf6rx$)z5-{ zAp{f(oy!M at pZhm^9(v*!B3>lTi)<*+pkm>HVP?j51-4qyhb<9Fg=Y9L%x0Y&-vJGFh;u8SZgoCeG`zAzCWzaQo z;6+4K2c~-8w(ZCC(#e}U{Mdpm&$b31IQTaJP}NL9gqir&t8z;!m5 at PrRx)Z3oB)8u zHf|52jg62pk^&^u$e|3al^Kh<5p1G#hpWsytQxt6aTG{?on3vW(tb9$9r^_d$YqPwEn9a^f9dPr`4?LTcE2qd&YPGQv~E;QO|`%@6DCNQ zscj1v5m_jwDN)8YO3aya7usIy_&8vYTM=%RO>h4_ueTEp z-iS>@Td&T}(r*>^#VKnV7FBuA{Re)2{>Mk2i<6+Zq1N5Tg{>BRsn5p)gZKOyGAs!R zWl7Yu{hprq>Xn3)N(U&Rw+xUIy5Q8eZrky*b07RKC at fh1`a%Bmym#rWgbB?^UCjlcXmCxOZ5bMGKwjToBXLGqxRTP<&Tt%$fcc*lSp zY-z`o(G at CJ>gK1v at tyJMH(vei6k0sZ?gop?uAH0RfbB^uRs$zlb#7ryA(Hb7tf)(fNW{QM{1m_K*=P#m|?#%gc9$u%N^5CR_ z3mG`dHt&7(sm8qro_zD;6Yo59dgkrlO5&)bb?n7)m|d^caXqY7(G#GgG>+?qQaV~n z6{Y;_rTZRv@`!T8B|}(SW*OQg6A>=kVzDSCSaILyp8Q$g&V473zxEg33xaBYl0+G@ zR&0#Wtgc;xlqzvuFY4;u{&Ry|K>;fiwi+H~Bnxcz_U~$LdHx at rJ@di44}SRG at oyz@ zSc>B)qjl_E at BY);yzF_Yz;#lQpUt0p_{lFHDRyl=FF-7l6idLg0yeI%h(^>49h?%L zvKCuXK)ux6JDtQ)p4f^Fd+!tZBLIRRKb>3X8yNf$1UHQJ;_WhJUsx|Fbps#({>QD; z62s6Fs*q-YELcjNnEvZ;hEel|HA~jQ!N=MO2Ve2b&4mnj@Xn$5THP2LPWt#L{#e9GMCO4E|TE|#kAlWtk!BLqmipBY>khD7#e!hgKkxD z!0Bbc{#s>eFbaY$Koo$?*BB}Yx at X(YQ%X4ViO>s4gPSrZJRejK8MAG1;oM##>#Y`Z z|K!w10YC(t$>z%WQqLKXat at j1lS|7LfTi$i+BWiF?AWCIeA3|=SLH(1of5elr0A?y z%G(ysp59xlRdzRnV8B|=0P+Y2kUBj_ zbunXSqh9GvVVDz^}IN-1m|4QdKFS1t_d#>j7Z4 zyl}Dq1I&tCu>v80FLW6GWpW^j_$2zI(oLA>+0Kil8NRLcIH#HRCNU}+MHK% z{48XxwFO{VBuNFdlw+dIg|jDjEu5Wwpix~JuqMe`B8Q3OYPBL^rBabpD)9YGwbZli zRQI-lvzR7zJSf{B%LQNfFnC4$ZlZWdGXBb zp7N!+U6qyj-C at w!N at QIjWbCEV*(3`amUteACff}wRA2KR)Yc*z at qCj z*&+g$tTiPeL|*GCfA-{w`{vGm^hg}FI<3)ZVp0f5LP{f*6J+xpXLsx#db at AO?lX+o zWTLuIP$A%obYv|KMRPD0#z&7HwWFh>aP;VODom at AC*)Qud0XYu#XU(F768Snn|Z^2 zWnyp~x7FF#e;OI*Bdh1~nZlAE?rsea-#mkMVq!u at g?*_m7fKQ0c3?aBi^(5-_uTBv z(@7F56nZBqoxekwqx1twjt~&r8)8P6W~SUN~U*Dnbwej~$zovvtSMWwUuD zumr$GiP9%vb;UQO1pp;15+r0z(<-irSk$mdNm#VXvu<7pC;?&)C3;uW#taNd7TF0& za@|3!gke~NiXV=Q4Cxy&2?20ya#9`$axP>c%_5siASwzJc{VmHK%^MK5o>q)iI at a{ zK>-O1Y%x<^SX;I>U0EtNLw`nLYA2-?ijvS+5>jQDjLTQm1Yib63EFBKB8r-HymG8< zy&D#z!-o%BW`@bhNqIi$@KV;MWlrT3$pWIyYp_{iL<*%)%p?$*2tW%E5g|0uK)@1P z(h{*mml(2$m_vpPAh-alwTy_EP=ZE+gbrVh#nTEu)9P3K1{+#u%(&%dtRcGCLI^ zxg2=STDe?~dxIV9`;iJe{gkUILjYMsn`6c-5T}vRLn#!IQ3!}a2qwV+g!Au3AFa^wV<9-(`nMf0( zj6rdO04i3>YPRY&k00NyM at Mh!55PZu~PESXL6{Hnc#~wIU zL~=A4DH4I}cT*j7nRLh>5Yl9ZI62laH2ki{dj&LiK00BCjb@!b{jHWu;iB4PpRt zh*PMnVxt4Lu`IVDh)eOz%+RJW^UHJsFdjZ^j~qD?XXV3I=WQ&S*mN>-MLSLkNqdCs zpj}l4OiYH2 at xVzK+*o4}0m!f>7oz#2Q)Xyrlwsjb3e#DW%BzMW!A&Be1c)p6$u4mc z5cvudO>R_6;wU_$laUvOFFU~wA0DvDtNJOrWL3Z3vhwfl(7_6Fltnspr)9t3Y$qSEQ at kn ze&!iHx|+O%6B83Qy#M|rx?n}AQmi?Svbqoj!8>MjboUJv2_oXL zW5?v~jt(!>ab8*KA{L#0Gxg)&Z#L^UR3z)+;8J(rMQgE!c>UYKn~uL(ng$}`7&C62 zo|bN-A-i%p5jK3`)hh^{YyY$Y5a&xAC5BVACIJ*IzzMq+3clI*9ZpPufcs}8)M~QO z$cUP&@Otz6xsa9{4N7u3JAdGS9Yf@?u`xV!XjFvZDQRs at hFM=U>J{v|YHT4fT+4OP zLiK$r`@V&#DH z6IwyWmtbP)C60)tK!7GF*CQvk+E( zz4h%dYTob)g70Tq4}bpY|1fah=l%+;I^D31`H#zI8)MHuuiMGzx`k{$z_GD$gwatL znwYq*yL)D2gkgMqz2f+-#>H`bd>lvDi#p$6{;{#qD}=RX(!%&S;Ly! z?a%*Yv{o-~UJ7vyrBe68v)}#4|C|ke3}DX8EmfB%VJSSaiBIvG=YQ%}2!F?ctCGGl z4AZ9Y?<6+T)ho6WH5LHX?XwXO^{&i`p{=w8i}%YR>+{QtL{uY&l~pT6hk zQ=$VAcM$R5)XU%hCzs~WJZx at K`oeKsv-`eB{``?AzdC_}Pdk{oa4Pty{s+%KleEjf zJ67 at O?+VuJ at AXq@wMW_Cf(^Eju6Aj4^0w^8jx+2gO#{9xOq5uBkn4bySR&A z10Vv%+ZRP5*s+8ev{ZQi_~bumwHi0fDFIl!9bD at Ez;V+Rw6I^!w78&Gf8Mh~3&<=an at H9oJUlp`ZEt_I4Gne!dp=lgc;eHR$#9VzBi lGri*b7g}qHk+-BA{x2U$r4mGCJ6-?)002ovPDHLkV1gF$4w3)> diff --git a/src/public/images/map.png b/src/public/images/map.png deleted file mode 100644 index 3d8c9fee4bcb027d0b4d7490bb80f061b9ef3879..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmV-$0gwKPP){&gl3px zWbpOt7lvQIelxf at I&4M~eg?#6fv%l}(`G(iJ_b%ME(QZb4G`A{S?=b|8z2LXvD$q8 z+&PB6o^A&8u=x1#Bg4xVFBnwS)EH*Xn4ZSMKmvI8?j6I^r%xE}- at A|MXAlTn7s$ZP z%fe7BTnXmK#Y96q`SdCN00V*bLF?hp27yIOmST1G%a<=f&Ss#Vv(W(|XEWkUp149A z?rfj}b!-}e at wo5Uv15*kii)_Ly`S;_|Njg)G)n=gB{G| diff --git a/src/public/images/minus.gif b/src/public/images/minus.gif deleted file mode 100644 index 9a8d727d70ff5161ec18c0cd0156ae8d50a23b75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU at w$``4~=2xoOmJxRJ?YUCe?7 p4c<*mc6tvw4?K5dl1^^H;N?iZ| diff --git a/src/public/images/move.png b/src/public/images/move.png deleted file mode 100644 index fb181d554c0aca1341c6998f31f9b62f99efe089..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmeAS at N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhEX7WqAsj$Z!;#Vf4nJ zaD4z_MyE9Xom?)`MRBiH{g{wrmwv$}mYj%p~bP0l+XkKqtboh diff --git a/src/public/images/network_error.png b/src/public/images/network_error.png deleted file mode 100644 index 979532ca24998ab0306a99d75101c10277a6dbd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 989 zcmV<310wv1P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG_ z5;Y#$0+jRs00Uh~L_t(I%bk*KXw_vH#;^N-&hcz#XYV_w9o at +Hz-AC-RtDN4A=rwF z5~&Y~Rv)UFWg{s@(1$FfWYpFtsleW#2pq9SOq)1yJ7!E{Zf&bJ33{7zZ|>#%pI;x& zY?5w{t`E<1^YHL{uKT(lF^}BL(%jfc#pcbNNw(pf<66?SE({Hxr?e=BGH{vjDfO%x0=*HFuX~lO4`v;Me{u z4J;H|QGO4SIP!i8Oo;D4DZ!JmZR?iV%opU;0r(tgYQiKQ-IR|zQ_9!x#u+}5pz6UG zl4xr^I(Pe53*0$aSGJZ6iR9<2xNm(fQjpb&Oxg~v;JRFojkn&u at JyXcQUCTkNFFuY zVw`Kf9#2`Agh at 2K7w5y8VkGhD2M7Ms;T+JZ at rxu1W5gms23r$MpNewBl59*OClukQ zhJ4)F7&k7?ptvB;#j$a~pU0_#*I(I#nNeSzfW8oZcaW!Na@?>c2frf%y-}KKm*L5H zwYvI>AE3*>MQ>L(nc)m>UYf&nM-iM7bcx3LI8u&auOL^gu1ZGC#p|AcOmM2Mo zc0T)@GCWUj?hZ at -h=j>xazW|OKO&m;r!??eNER{)PiCInn5UPXiK;LX(DofqX>xp2 zA`RrrgCAoO)m!4w7lt-LGJv041iew7-loQP}vrgHrQJp2JSZTf){00000 LNkvXXu0mjf9%#$R diff --git a/src/public/images/network_trend_check.png b/src/public/images/network_trend_check.png deleted file mode 100644 index 7639ea8acf6d303c5955b2d714e1d2a299c80e75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 749 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG_ z5;hw4LIW-U00M1EL_t(I%bk?ZOI1M}#XsNsR6_c(3HkvkQAA>ekVp|N!l3>XH6bW# z5en9$^krD0AyyP((!wl4Oo@~bq99w;CJdBF%1DBTLMnRaw79zQ6+j0meT;5 at r^TDR?0%AX|SkxHbQo871wuOzP4$$vG#vV06yODS&gSuk}&V z>S at w{se`SSHqXkZziNvwMR-#+QpJ2Z9k^*4U+mY=e3gdgt5n<)kUL4{oKsYrm8)dx z?GPS@}H+chnj8s;)Bdy%Cec_nG7yEm57-ZM%^MLkcyTnXm^1_$8hRYgp7 z*fOc4NGb$dFU2T7=`exs1nW zJ~A*d{7NJfj?C-_GH6+*pjB4&!j|(fjvcq~>Ynp(1|uVm+2*D2%4y+F)lQk`q>Q&m zK>k_d=n)SyA&EC{VXno`a6dFGayrTXd*|hyG0Mt3-oF!bZ7!26OUtecCto?0u{9p3 f?8y37{4f3hq9;DQ6 at jn|00000NkvXXu0mjf9??+H diff --git a/src/public/images/network_trend_down.png b/src/public/images/network_trend_down.png deleted file mode 100644 index d429172c00d5bccd09a0aef62be050891a726b05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmV-n1D^beP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG_ z5;r5TT)Jlf00QAjL_t(I%axSdZ%k1b#eaLxOk0;ur`1%Xgb|%lC8E*72nf7XP>>kwbr-x zQDQ_;00z($O2B(xT#L9U72;nNE*$h#`rTVb9^EJT>Lu3TAhzRDv12E(U3*x0^ay3O zE9V7OMnnpPL>Rn!fvLBzDOnF~{I3{OfYzuNZ#5hRKLTro4{(gQgsiEP)L&DM6EKrRH$yjSEk(wIp z#bwUSFm{WJH6Mg6g>}sDuX+fA>022dprrs6gS1QBoFPKSDxtT zvZeIhyUWzj0DsOU44NNLo?w3)CH1BqJ7?h-my&P^(GBZaxN#HK at Bp~BkBJ9dT~$T= z_ARzvx|-kdJPwNpskWyWE6bW|Hz?n>oltoch2rbIJ7k`>QCeGzJv8VgONwgCN*6HF z at hl)5Kr5v{D^_2>NoB(U!qE!PLuIILJWMw638l2phGLagEGFI6?PFPx50(4s2$e?* zv1;GE4&w at rxI{uBsv_ayo$&i79<$cUMHmFzwmF@#e39~1+orW_Y;NJl)3#ZWQm%!u zT- at 9=#<9V2z;SRKhpvwwIGvgPOLBp_o&-H-&k)_Y+ZQR1<;+zPr2<3mO~g5s&H_3J z>Ze at ao1pvhd18C_d2tqllHf>m{<$;$iIbDlh5teT)ZbYt#s1#U^t3b+ZKy8{OXag` z&=>{XA3kz&A`=*t{@YXoz==LO&z~h$-+-Gki}Y+Z^SJgKj&r55T at 49i00000NkvXXu0mjffEkVp diff --git a/src/public/images/network_trend_up.png b/src/public/images/network_trend_up.png deleted file mode 100644 index d2476f8d4dbe10bcc509e2ffa919690d1c0eabf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 837 zcmV-L1G at Z)P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG_ z5;qf;g^J4n00PBHL_t(I%Z-%HOBG=h#(!t-wfxAdnHG{|V%J;wMXQR4+DI)TlOV%g z^an&OgaSX%br3;+KnSf|R0w5XDpm?s8_kUsXdhNc>P5 at BbLTxRX1a~nymdBnhM9BT zbDrmUA5m2W16cfbC?M;9wpKm<5#L8gxLa1j+{p8c=b;(G1ao6_fO||cM=~MMAaZ7 zsDOxIVXzcx_wJ#mD1TKeYYm2e3|2>}z1qRTvths>VxfT_3}F2C`dAe`h1saO>uYJK zCQ40LH}TOIsi^@(LF9L?t2V2S#<&&90SsY)?|t_uI(aJ9zyc=Q+DNKPRwzVy^Ep=D zPWcmh|o}X#jhl zoR;}zg16F>lu_PazR3K*6O!>oZ(X&R>+d5cT9qOxJ?zCLB6YQE=n0Dmn~xr2{{92r zwO+!p6C{nxhVTX=dt&77t0D1mI)!VHtQGqwrN>XOnm!9rb=6&7=F|0SsB16 at 8?_xU z4#swH6E>FPU|a{a6R7K85=ltdOpTAzF#3wT9p!0;q86dNd~$YGlC`B60yo$AnhdH~ z)LS$@`<06G7rcg=?oxhDNlOdPw{K(>Zy{V5 at c}0wDM{rEA3w0PbsN>KSJnzVPzMrX zXJ*BgVd;c=TD3OfGo?pz!WG%B)MUH59ot$9r at x&yy8d=`6!XzJq at RxT6Vu7Q(DVye7oJIK at c3gk1v&AqJEy at I=#fX%DiT> zgwt;Cji=uOR&wuvFX-87Ln(ttE%*Wa0e<4-Gm65zl8lJNxP^Jdccbj)PjEM;MFG`U z{s`wFyC}>r+FF)n1N3~TgNy2LkO2GzV20*VI}uiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU at w$y4*XmR1y>vzmpih{E$}o|KC(Juvl9;ogEauy5=OfK diff --git a/src/public/images/slider-bg-1.png b/src/public/images/slider-bg-1.png deleted file mode 100755 index b7d806ed630bb92ef4f8ff94108ee9e3bb07171d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmeAS at N?(olHy`uVBq!ia0vp^CxDopgAGXfK4bb1q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c73F!lIEGZ*dUO3C=K%$t)`v4Z_w4lB-8uJ2;H|vH+w+oy z1*$IOeW({WVfn#BsOtTtsM{_}B3v0iM969`)xHvCE2D1AsJ6TBEMr30l+9c}L`&~P zGl=c)U{^6_PtaUl`)a$X^lX+NX6@;RHh<(YV91^-+OzI^=L?|C44$rjF6*2UngCuv BOOpTq diff --git a/src/public/images/slider-bg-2.png b/src/public/images/slider-bg-2.png deleted file mode 100755 index 8b24cf0910fc24c075e44d324ab05ef2fb739ddc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmV-M0lEH(P)2N3a1T2XOG^5J3rxRD->U5tO2~nPZ0nB diff --git a/src/public/images/slider-handle_select.gif b/src/public/images/slider-handle_select.gif deleted file mode 100644 index 338d2445a78753c15cc5c4e72c734eb074d1e599..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13245 zcmeI3eOwcD9LEnu(MdiOrj^xk_C&GW-5wabwjphSm@|_VhH2hzw{h*^uG`TDk)aWq zW|^63p*>KPX=rJWV3tx*SdkQ!lulT~XBOQaYKFa_e@*$9 z1uK&zfx_`{IIIclG`#4=Nt4Nh6IxuWRm+4rR1uWuh&mXW7 at H(MkDU!MA}2^3A4HXT zX%}BESujjlDAD>4M+=FCf+0=cK{X5?z$3JPlNtg~%q$n0H;zV1jBSeT|fqaV3;nb3&;Qv4ATX50T}>- zVY;9$AOk=!Oc&GzWB>?;>4Lg|3;@9}T~HU00U#Kr3+e(g00hHyL0v!wfMA#|s0+vd z5De1=bpaUwf?>L#E+7LyFiaQJ1!MpShUtR3fD8b^FkMg=kO3h0wCPeMUwW`X`FTfJ ze#em#{qNs at djCHD*PnkJ`~A0HdyXFY<>#Lc|MpIE!5?(xS~uX=RlBP$+W{?M`qA6R<-lEwEeT3CB;%{>d|SKmGF zuBtmLD zRu8i03mwLqmPzxrXN_ENY=~Nw);3{b+nT{!=GP*lyQRhzJ%zK5R<+VS!!~SPNgW(o qI(Bix)b-1ESGk&Yh1whT1iI#6bxWD?oh3Eb&L_t(|+U!Y<>A z3c5i>Jp?^eP!V0E8&V?GV-E$r7eqG*G_oiOk|IsA5((5utF1(Bb7$t9)Bm5DwcXX# zZLxyzu;2V={(on_^WV-KMF;`^YB=B at jw$jf^1nK?XoZ4<^ncZdc2%aPdXK59V_CSJ zb8!_wTs%~L;ZY)l5v@%(;lSZUWSu^~_eocKgWyJA1lpe76m>NR8tQ8HS0qXvf;NWT zg_y2sT6ym5dBB73B8(-A%1ErNzu&a-+?j*%kab`@-wVM{MMq1EkqQrI+W-3^L10~{$n5NrTMusvb{zg5-l0#HGzil^Es z>=^}xMX>IMAJ*Ue0*aajf}03t!;~_0KGTR zWgXw6qcr4w at 4MH~cO at BqW^`KtwbUByG&|s3-{VmN03KxX(U2^iZ^uGPX zTp4l&-=qinU~%Pg2n_ba^9S`K&z6=~pniocE`j9MhNZ}#n80&%7Y2Mj-*%Llh&((+iqY1((X;b8jy&!+c6eiC=zWiTcNXdzEtQ#J&>BB+6govGb;nO?A>Q^m^$PZ7W}%W77KYE zl7AF-lTG|pvs3W>=+VP)`p9N*>79_B;RR2U%W@{V`s7R*Z+DlzF~;K}r~dhxnF)Wlb;n0AnTU&=;xp_}H8_0s)+8MpTE^5W(dTyTS1*d02=62wT80pP zB*Xc}BBy91#fVCxgK{=Zaw76SdTtBn(;>z^V@(~M|3~tl0t^5s=HNXcp at pOX0000< KMNUMnLSTYP>dCJF delta 908 zcmV;719SZ22ge7HNq=ccL_t(|+U!?NNK{c2{_cBkeE!gsl}{{m3 at IpyGRlMsD#%Sm zTJ2g?5VcFG))j4YQEh^V+}pybMG!=^sEEQGC at Lmm{K1SIOC9`~d4HYr-gA15GdlL? z#si1 at Jomo)ednC--gye!wy{tqVF7Isd=dP=nvxk1Lipzj!++PB64_pCY7L9|g3UPA z9PqmjcqIYbxs2z22i)%>lMQ9gz{_a!p+ha5K<~-yJB8YD?|O4ypwm^##8R at XE#$17 zr(D3^oI@@TJ9}5yH=aRc?YXbdY$|8o(0m1`+UT-PMj?i-&fK;C)a8mU|AL(R%6qar9^;;+XQZ!XgTv1EVx{1=TZlG zay+5aOU}U{a30wU^&J*}uEA-n$e4BNao#{(4M~kK at Hd>aCC*R&~27(a^YtGA8l{0m|ft z?uv5`a9V{iP1BCkxPrWz%6VsM%1GZ#ZzAUqTv7$HUFX)Mm zz>-yp(UwAYNl-PM^3MTI62({Y at 8rCio9dT4LVwj|2q-4h;!(s05|o^Uqpf>Uvr)sR z$N(O9bR#}wK&vRCY#Ee~BoQ$6IR)pBRgrJ+iN5ZrT3hGd6-FNvshu{Pz%K$IfjP=% z=l+_en<-~){v2Blhi4U>-yqJ$ zE`MLad6pvorY$c*C{%(#U<9g~TQp94xVLoMIYgXFcm#w;Vjkd}dE#T=NZZBzmoEH` zj|S3hOU|BW{G_U$;!C~r|0kw_z>%v3Eu}X-lnb^X%HrNvoz6-BwHZTaosn!i^}uDede(JhuLwH at DOS^c(Vd z(evEbtJzZKaDPRE>$u`;@O8yhC~<79f8E8(~< z+ZjrE_O(TSuYT=kZvE)1w{prU zuvmVa=!1e`V8A)>cWR2WK-N-Q+|mq>Y54S%~68e=MM-pDOCa5G#3nXC>50viJS#K{rZwRay(rL#OPNI@*o zT-mv3H&G@~rci92ZsqBR&uvRIP=YdqWQT*3B at Py%bVe^(zH84u_~zhIq}RbYr}R0k zGk*&RZr28J$w*41^Y2^ZwHZ{G&JFKvVnI|n!3ph1Hg;{K=2Z44X=puxT#Xb7tyD+(wivJ3&F zn1au-$$DQ=1FgU3pNG4B at 3Rk8nn<==9n18jv zi4AoQR>~WdWc9hOuFqOqTh~M)k+7y|psFfQLtWQF&t{F(zxRdet`xo$f z%XLU(MvTsXp=|MBqW~$OWKpIC=&Wm$0$1NCHgaO)S{i$TZl~@GNziO>tKvx~WD{BXm*4E)`S~aUp_>7OY^kCQ>lc)M_)SU?-iar|5Tf;2V)DJA zTDupA4o-?21zS_rJkhExz_$@_*h%==e*te*vDzB)oPo2ndGU#tCxFY(x8Es$5?{VQ z+!g2&ORKT8Hfs~?wH$QMb)fIw$XfdXL~(5G zu7wxYNA(*(ZGWo!gd>TOZZin@$%zFy at x{j7*xY9pVYddj++P+O_rY$dNkH$HH0FJs1H2Z zlDRt&_byp at bj{hJ%_lY9%=lZI^}ntR3=H)5_2rLdvzh*SJ#sFcPN7_`%*@Zvk4{fd zouR2~oYZTu+JGxf(D+8jtbP0Uf0fJS29wETBArenk%)RZmtnnLXEjTu(vKgEk1g+! u`Pl{d|8{2E at Gx;R|2}P<+c!o25nupBEGyh0U05gp0000@k+ at umlW}0Y}(EK`{_1 zAm_j$vq&)qBsj20IdOuc4;)a=5h92aLO>3YI1$MqViAOF7_l2+1VRxC+sxRrb8)b}b{qfLuzfX4fWp?QlGNi5<+__DQB~O=&`BQgpjI2C%aNq2)o0nG@ zdiiHc>BYfqyEpra+>5er<$#)=*8Z6!E4{L;tfP{&!c&H$v2Q!)_i+CIAwmvs+P>$o zZQH}hKcVOnI)8Nyovcg+T)uGXL~!GlUAq_bEE!OP0Z1k^2!~V%A**T-f`I at iiVW4N z2}Y#?x^6(ZtV0PolgsxTMx}rB+Q at MP-Za(7732h^Qcrhx7o=igh=qetGOCbHL?EmN zkd at k(OL|qTPqGEEPLvGDOqAgE^~=4Dq+LReNU}Wr-hZttaM!YgP}hrMWfpT*=E%`W zXO)~1Qq>6VCBXBYjl62yx``=Udj7XRAkxtVSDz^`v%3!l)^C7M7cB!Ty#SVfy%sip zGYIoP{|d(R6g16Q3}5!Ig2!?j at N-A@?~OJRxq&>6ta*Z#bTb6;j at z0v_%~C4$Jrui zn0o$PHGi4VcXp&88C79cYXZie+nI9YCeJco6)dbz(i)hi1?|lm5K5pm8HH#l01 at O= zECkJQhr>YyQd-C<8a(IP@!#P>0SRn|w_)4BYz8v69P#W at fZsRj_@^xuL2%W7dnLp% zDpT_O5Ft*#bIBHZUVu!9Exr=sADmY*MPNlD0)NDI`z-f`Ki4&w+TOC>61XtJBa^8Y zCPkcqQS`5UG|Z zt)=p18Ra at pU&S|rxsAyexMiB+4x8fPS}WxsU9(zhK%Cl|V`9x>TjesIu|}twxJrJ7 zrGH}nQn6g=T{yedO(_En`#fh(`I6H|=FLdML_rt(3WASko}Tdo&O)cT+Bzo)WpGzpA z at oDYT=T3Iu(ZdI~u?jP$Ssni8{+$DU!BcaFUV^_b41bUNAKYn2CmBSRdxnp`9CFzY zICBk{t}*H|nXEp%Y3Mq^{D6B77_Xa7 at 8Z|%$3G2kjs6p00F(Z4zsKNb4FCWD07*qo IM6N<$f^zEL0ssI2 delta 932 zcmV;V16%x+2;T>gNq>P!L_t(|+U!={Pg7?Y|DB%G?^Xf at YC#amkj=V*I+wUQX66T> zi3!&x{sG<*z2ah5#$uY)=Rs3VN3-s22vU~nMB7o19!GE>s{2AuwIhYq)QvL^F|V?Lk% zqYu4kX=#DGwhrQ^fOvccPiLZt#h&8v*v7Oc(0+G+<~rgvrTAc=l`&e3nOh+Y$KvXFrp{oY$LhMhb3V zO&!ONcOacv!ESdgL{Ua6mBa_lEoj`+n15r2Vd1K(#DD4rh>Bemuv)C3Yc*e8;B*&7yW*hNi^^RND1WjHkEae+s|_O~!w>}lP2 at CUu_#jH z1d4pi+uK?8txLVTdh6b1w<9M>|HG+9_!XCzGuvIhQ7&-GovcW?3HmTRHt~;(78mA= zJmd%E0;fcZ!uqSbf&O3Na5%RNqmf5j_fC at ORFbI#!Ipm3J8Vs zCVwt`LHaz+cE<3wgZAGFAR2vwxzz0C at sY^4+X3IsJU3|l-9 at yjsd?|`cBj*K=+mR; zl8M=Tt-HurjYp at y%ZWnp$y79;ajul(W1ffrQEa2}XrS|9E)g5u?yIqgG7GMAvk9?AsiP{4I0000#5u&OIDnf!*3dE%w*dSK0KnPT}AhAHKSo0T9sTD$k6^npc2|?LJpj23)h_-2+ zHj~Cp+{Ae}6Wj54#*gv!+ at 3qNQ50Dbk1Ks+&-i>lpL@=ktKjgZOifOnWsJSan37B+ z5)+nX3(K~bgzL_7&ad4_rEXH3_}g#@j3r;0{8&}hkKX&>;@DL3JYw+#ITS4D%lLI> z1~Wfj&A6 at Bm$Sd8E>XODSZ0he`{Y70Sy^0K7WJkpTCNaHx=3XUj+k5A65n2(5i&-` zN{=+E-L`q|<(FRd`+Z+r`s(X=Xy7Cw0fq(_upJjg+eOB3kS#R9U526I6aLJ?tRO|J$uJOHzp$Gz`9N9_3vc>Kq;^+Kt1Ww%h!y8+pYBh~T#Uh$!R zXCA_BK?(E`q~9Br^3FQ8(zD3TO(ROMwbXRYG%Mev??3pSyyn4IPkH-%_>D-2T|W^Y zgzv};xTEia2NP)6WoisV&)^V3M~->h+_-%`S2oQb=I^C1lXp}0az9Xc=e5Y|;h^%% z#B(EX5X44q6(yTN&nKosJ)sGo<{S3v%A0Gn{kz4z(r+uP*;#tDO|sq3!YG)wu50;$6P?HP21G{?O(&>dLqC862I3E#!IpG00000NkvXX Hu0mjfwm{v~ diff --git a/src/public/javascripts/jquery-treeview/demo/index.html b/src/public/javascripts/jquery-treeview/demo/index.html index 7087163..aff15fa 100644 --- a/src/public/javascripts/jquery-treeview/demo/index.html +++ b/src/public/javascripts/jquery-treeview/demo/index.html @@ -255,8 +255,8 @@

                              Sample 3 - two trees with one tree control, black and gray theme, cookie-based persistance

                                diff --git a/src/public/stylesheets/components.css b/src/public/stylesheets/components.css index 708eb0e..540c413 100644 --- a/src/public/stylesheets/components.css +++ b/src/public/stylesheets/components.css @@ -18,6 +18,8 @@ } .header_titlebar { + color: #4e4e4e; + text-transform: uppercase; background: #979797; float: left; height: 25px; @@ -29,7 +31,7 @@ .header_menu { padding: 5px 0 0 10px; margin: 1px; - background: #CCCCCC url(../images/bg_menu_big.jpg) repeat-x top; + background: #CCCCCC url(../images/bg_navtoolbar.png) repeat-x top; font-size: 110%; line-height:1.5; height: 26px; @@ -80,10 +82,11 @@ height: 28px; border-right: 1px solid #5A7A8E; border-left: 1px solid #93B2C4; - background: #000000 url(../images/bg_toolbarheader.jpg) repeat-x top; + background: #000000 url(../images/bg_toolbarheader.png) repeat-x top; } #toolbar_nav li:hover { background: #4B95B8; + color: #FFFFFF; } #toolbar_nav li.current { background: #4B95B8; @@ -127,9 +130,8 @@ .no-grid-items{ padding: 45px; margin: 50px; - width: 750px; height: 150px; - border: 1px solid #E8E8E8; + border: 1px solid #c9e7f7; vertical-align: middle; } .no-grid-items-text { diff --git a/src/public/stylesheets/default.css b/src/public/stylesheets/default.css index c257ada..911d795 100644 --- a/src/public/stylesheets/default.css +++ b/src/public/stylesheets/default.css @@ -21,7 +21,7 @@ hr { height: 1px; border: none; border-top: 1px solid #bbbbbb; margin: 14px 0px; /* ========= TABLE ========== */ #main { width: 976px; } -#main td { vertical-align: top;} +#main td { vertical-align: top; } /* ========= TREE ========== */ diff --git a/src/public/stylesheets/jquery.jgrowl.css b/src/public/stylesheets/jquery.jgrowl.css index 7f558f1..95dbf48 100644 --- a/src/public/stylesheets/jquery.jgrowl.css +++ b/src/public/stylesheets/jquery.jgrowl.css @@ -76,7 +76,7 @@ div.center div.jGrowl-notification, div.center div.jGrowl-closer { div.jGrowl div.jGrowl-notification, div.jGrowl div.jGrowl-closer { background-color: #FFFFCC; - background-image: url(../images/icon_conf_message.png); + background-image: url(../images/icon_conf_success.png); background-repeat: no-repeat; color: #333333; opacity: .95; diff --git a/src/public/stylesheets/layout.css b/src/public/stylesheets/layout.css index 981ff22..a739cbc 100644 --- a/src/public/stylesheets/layout.css +++ b/src/public/stylesheets/layout.css @@ -7,6 +7,8 @@ html { /*overflow: hidden;*/ font-size: small; + min-width: 900px; + min-height: 400px; } body { @@ -45,7 +47,7 @@ a { color:#000000; text-decoration: none;} width: 100%; height: 90px; overflow: hidden; - background:#535353 url(../images/bg_header.jpg) repeat-x top; + background:#535353 url(../images/bg_header.png) repeat-x top; } .header_image { @@ -98,7 +100,7 @@ a { color:#000000; text-decoration: none;} .toolbar { margin: 1px 0 1px 0; - background: #CCCCCC url(../images/bg_menu_big.jpg) repeat-x top; + background: #CCCCCC url(../images/bg_navtoolbar.png) repeat-x top; height: 31px; border-left: #FFFFFF solid 1px; border-top: #FFFFFF solid 1px; @@ -128,7 +130,7 @@ a { color:#000000; text-decoration: none;} /* ----- Right side of Header -------- */ .header_info { - padding: 10px 30px 0px 10px; + padding: 10px 31px 0px 10px; margin: 0; float: right; text-align: right; @@ -143,9 +145,14 @@ a { color:#000000; text-decoration: none;} #help-div { position: fixed; top: 10px; - right: -1px; + right: 10px; } +.headeritem { + margin-left:5px; +} + + #textfield_effect { border-width: 1px; border-style: solid; @@ -158,7 +165,7 @@ a { color:#000000; text-decoration: none;} height: 16px; } #searchbox-button{ - vertical-align: bottom; + vertical-align: middle; } @@ -169,7 +176,7 @@ a { color:#000000; text-decoration: none;} color: #FFFFFF; font-size: 110%; border-left: 1px solid #93B2C4; - background: #000000 url(../images/bg_toolbarheader.jpg) repeat-x top; + background: #000000 url(../images/bg_toolbarheader.png) repeat-x top; } @@ -199,8 +206,9 @@ a { color:#000000; text-decoration: none;} background: none; } -.ui-tabs-nav a:hover {color:#FFFFFF; border-bottom: 5px solid #5599B8;} -.ui-tabs-selected a {color:#FFFFFF; font-weight: bold; height: 24px; line-height:1.6; border-bottom: 5px solid #5599B8;} +.ui-tabs-nav a:hover {color:#FFFFFF; border-bottom: 5px solid #537585;} +.ui-tabs-nav a:focus, .ui-tabs-nav a:active {outline-style: none;} +.ui-tabs-selected a {color:#FFFFFF; outline-style: none; height: 24px; line-height:1.6; border-bottom: 5px solid #5599B8;} .ui-tabs-hide {/*display:none;*/} @@ -276,8 +284,8 @@ a { color:#000000; text-decoration: none;} float:left; line-height:1.7; list-style-type:none; - margin:0pt; - padding:0pt 8px; + margin:0; + padding:0; text-align:center; text-decoration:none; } @@ -298,6 +306,10 @@ a { color:#000000; text-decoration: none;} text-decoration:none; } .selection_tools a:hover { + -moz-border-radius-bottomleft:2px; + -moz-border-radius-bottomright:2px; + -moz-border-radius-topleft:2px; + -moz-border-radius-topright:2px; background:#B0CBDE none repeat scroll 0%; } .selection_key { diff --git a/src/public/stylesheets/ovirt-tree/tree.css b/src/public/stylesheets/ovirt-tree/tree.css index 441ae83..ef1f1f7 100644 --- a/src/public/stylesheets/ovirt-tree/tree.css +++ b/src/public/stylesheets/ovirt-tree/tree.css @@ -11,7 +11,7 @@ .ovirt-tree, .ovirt-tree ul { list-style: none; margin:0; - padding:5px 0 5px 16px; + padding:1px 0 1px 22px; margin-right: 8px; } @@ -19,6 +19,7 @@ background-repeat: no-repeat; background-position: left; padding: 4px 0 4px 4px; + width: 100%; cursor: pointer; /* maybe move this into a clickable class? */ } @@ -59,16 +60,16 @@ } .expandable { - background: url('../../images/plus.gif') no-repeat left; + background: url('../../images/dir_closed.png') no-repeat left; } .expanded { - background: url('../../images/minus.gif') no-repeat left; + background: url('../../images/dir_open.png') no-repeat left; } .ovirt-tree .current { background-color: #698FA6; - color:#000000; + color:#FFFFFF; width: 100%; } -- 1.6.0.6 From mmorsi at redhat.com Wed May 6 13:25:18 2009 From: mmorsi at redhat.com (Mohammed Morsi) Date: Wed, 6 May 2009 09:25:18 -0400 Subject: [Ovirt-devel] [PATCH server] integrate anyterm into ovirt web interface Message-ID: <1241616318-3625-1-git-send-email-mmorsi@redhat.com> this patch adds the necessary components to forward vm web terminal requests from the local apache server to the node which the vm is running on (httpd configuration and vm2node lookup scripts) as well as changes to the wui to allow users to access this functionality --- conf/ovirt-server.conf | 6 +++++ ovirt-server.spec.in | 2 + scripts/ovirt-vm2node | 35 ++++++++++++++++++++++++++++++++++ src/app/controllers/vm_controller.rb | 10 ++++++++- src/app/views/vm/show.rhtml | 27 +++++++++++++++++++------ src/public/javascripts/ovirt.js | 15 +++++++++++++- 6 files changed, 86 insertions(+), 9 deletions(-) create mode 100755 scripts/ovirt-vm2node diff --git a/conf/ovirt-server.conf b/conf/ovirt-server.conf index bab6f1a..36564ed 100644 --- a/conf/ovirt-server.conf +++ b/conf/ovirt-server.conf @@ -21,6 +21,12 @@ NameVirtualHost AdminNetIpAddress:80 TransferLog /etc/httpd/logs/access_log LogLevel warn + RewriteEngine On + RewriteMap vmnodes prg:/usr/bin/ovirt-vm2node + RewriteRule ^/terminal/(.*\.(js|css|gif)|proxy/anyterm-module)$ http://${vmnodes:anyterm}:81/$1 [P] + RewriteRule ^/terminal/(.*)$ http://${vmnodes:$1}:81/anyterm.html?param=$1 [P,NE] + + ProxyPass /ovirt http://AdminNodeFQDN/ovirt ProxyPassReverse /ovirt http://AdminNodeFQDN/ovirt diff --git a/ovirt-server.spec.in b/ovirt-server.spec.in index 6da7297..b4f7454 100644 --- a/ovirt-server.spec.in +++ b/ovirt-server.spec.in @@ -130,6 +130,7 @@ touch %{buildroot}%{_localstatedir}/log/%{name}/db-omatic.log %{__rm} -f %{buildroot}%{app_root}/task-omatic/.gitignore %{__cp} -a %{pbuild}/scripts/ovirt-add-host %{buildroot}%{_bindir} +%{__cp} -a %{pbuild}/scripts/ovirt-vm2node %{buildroot}%{_bindir} %{__cp} -a %{pbuild}/scripts/ovirt-reindex-search %{buildroot}%{_sbindir} %{__cp} -a %{pbuild}/scripts/ovirt-update-search %{buildroot}%{_sbindir} %{__rm} -rf %{buildroot}%{app_root}/tmp @@ -199,6 +200,7 @@ fi %{_sbindir}/ovirt-reindex-search %{_sbindir}/ovirt-update-search %{_bindir}/ovirt-add-host +%{_bindir}/ovirt-vm2node %{_initrddir}/ovirt-host-browser %{_initrddir}/ovirt-db-omatic %{_initrddir}/ovirt-host-collect diff --git a/scripts/ovirt-vm2node b/scripts/ovirt-vm2node new file mode 100755 index 0000000..ef81df1 --- /dev/null +++ b/scripts/ovirt-vm2node @@ -0,0 +1,35 @@ +#!/usr/bin/ruby + +############################ Initialize active record +require 'rubygems' +require 'active_record' +require 'yaml' + +dbconfig = YAML::load(File.open('/usr/share/ovirt-server/config/database.yml')) +ActiveRecord::Base.establish_connection(dbconfig['production']) + + +########################### Initlialize vm / host classes +class Host < ActiveRecord::Base + has_many :vms +end + +class Vm < ActiveRecord::Base + belongs_to :host +end + +########################## retreive host from vm w/ specified name +$stdin.each{ |vmname| # get vm name from stdin + vmname.chomp! # remove the newline + + # specially handle 'anyterm' to just return + # first host (for css/js/etc which aren't + # vm dependent) + if vmname == 'anyterm' + puts Host.find(:first, :conditions => "state = 'available'").hostname + else + puts Vm.find(:first, :conditions => ['description = ?', vmname]).host.hostname + end + + $stdout.flush +} diff --git a/src/app/controllers/vm_controller.rb b/src/app/controllers/vm_controller.rb index 29c0f16..47d17ba 100644 --- a/src/app/controllers/vm_controller.rb +++ b/src/app/controllers/vm_controller.rb @@ -26,7 +26,7 @@ class VmController < ApplicationController verify :method => :post, :only => [ :destroy, :create, :update ], :redirect_to => { :controller => 'dashboard' } - before_filter :pre_console, :only => [:console] + before_filter :pre_console, :only => [:console, :terminal] def index @vms = Vm.find(:all, @@ -40,6 +40,14 @@ class VmController < ApplicationController end end + def terminal + # optionally add rows and columns params to url here + # eg ?param=vmname&rows=30&columns=100 + redirect_to "https://" + params[:host] + + "/terminal/" + @vm.description + + "?param=" + @vm.description + end + def show svc_show(params[:id]) @actions = @vm.get_action_hash(@user) diff --git a/src/app/views/vm/show.rhtml b/src/app/views/vm/show.rhtml index add29b4..a73f505 100644 --- a/src/app/views/vm/show.rhtml +++ b/src/app/views/vm/show.rhtml @@ -3,16 +3,29 @@ <%- end -%> <%- content_for :action_links do -%> - <%if @can_control_vms and @vm.has_console -%> - <%= link_to image_tag("icon_x.png") + " Open Console", - {:controller => 'vm', :action => 'console', :id => @vm}, - :id=>"vnc_console_link" %> + <%if @can_control_vms -%> + <%if @vm.has_console -%> + <%= link_to image_tag("icon_x.png") + " Open Console", + {:controller => 'vm', :action => 'console', :id => @vm}, + :id=>"vnc_console_link" %> + + <% end -%> + + <%= link_to image_tag("icon_x.png") + " Open Terminal", + {:controller => 'vm', :action => 'terminal', :id => @vm}, + :id=> "vm_terminal_link"%> <% end -%> + <%if @can_modify -%> <%= link_to image_tag("icon_edit.png") + " Edit", {:controller => 'vm', :action => 'edit', :id => @vm}, diff --git a/src/public/javascripts/ovirt.js b/src/public/javascripts/ovirt.js index c24df16..2754817 100644 --- a/src/public/javascripts/ovirt.js +++ b/src/public/javascripts/ovirt.js @@ -380,4 +380,17 @@ var VmCreator = { VmCreator.recreateTree(storedOptions); VmCreator.clickCheckboxes(); } -} \ No newline at end of file +} + +function get_server_from_url() +{ + var regexS = "https.*" + var regex = new RegExp(regexS); + var results = regex.exec( window.location.href ); + var start = 8; + if(results == null){ + start = 7; + } + var end = window.location.href.indexOf('/', 8) - start; + return window.location.href.substr(start, end); +} -- 1.6.0.6 From jboggs at redhat.com Wed May 6 19:06:47 2009 From: jboggs at redhat.com (Joey Boggs) Date: Wed, 6 May 2009 15:06:47 -0400 Subject: [Ovirt-devel] [PATCH server] update ovirt-add-host to use ipa commands instead of kadmin.local Message-ID: <1241636807-6831-1-git-send-email-jboggs@redhat.com> This updates ovirt-add-host to use ipa-addservice and ipa-getkeytab rather than kadmin.local. This also enables the ability to use a remote ipa server in the future. Functionality and behavior is retained the same. --- scripts/ovirt-add-host | 24 +++++++++++++++++------- 1 files changed, 17 insertions(+), 7 deletions(-) diff --git a/scripts/ovirt-add-host b/scripts/ovirt-add-host index c6b7cd2..eb7b90d 100755 --- a/scripts/ovirt-add-host +++ b/scripts/ovirt-add-host @@ -6,8 +6,11 @@ import socket import shutil import sys -def kadmin_local(command): - ret = os.system("/usr/kerberos/sbin/kadmin.local -q '" + command + "'") +def add_principal(command): + ret = os.system("ipa-addservice '" + command + "'") + +def get_keytab(command): + ret = os.system("ipa-getkeytab -s " + ipa_host + " -p " + command + " -k " + outname) if ret != 0: raise @@ -22,6 +25,14 @@ default_realm = krbV.Context().default_realm ipaddr = get_ip(sys.argv[1]) +f = open('/etc/krb5.conf','r') +for line in f.read().split('\n'): + if "admin_server" in line: + key, value = line.split("=", 1) + host,port = value.split(":",1) + ipa_host = host.strip() +f.close() + libvirt_princ = 'libvirt/' + sys.argv[1] + '@' + default_realm qpidd_princ = 'qpidd/' + sys.argv[1] + '@' + default_realm @@ -32,11 +43,10 @@ else: # here, generate the libvirt/ principle for this machine, necessary # for taskomatic and host-browser -kadmin_local('addprinc -randkey +requires_preauth ' + libvirt_princ) -kadmin_local('ktadd -k ' + outname + ' ' + libvirt_princ) - -kadmin_local('addprinc -randkey ' + qpidd_princ) -kadmin_local('ktadd -k ' + outname + ' ' + qpidd_princ) +add_principal(libvirt_princ) +get_keytab(libvirt_princ) +add_principal(qpidd_princ) +get_keytab(qpidd_princ) # make sure it is readable by apache and qpidd. os.chmod(outname, 0644) -- 1.6.0.6 From jboggs at redhat.com Wed May 6 20:54:09 2009 From: jboggs at redhat.com (Joey Boggs) Date: Wed, 6 May 2009 16:54:09 -0400 Subject: [Ovirt-devel] [PATCH server] separate ipa common tasks freeipa::common and rename ipa_server_install to ipa_install Message-ID: <1241643249-8848-1-git-send-email-jboggs@redhat.com> This breaks out the common steps for a bundled/remote ipa server in to its own class to support the use of a remote ipa server. Also renames ipa_server_install to ipa_install to form a consistency for the dependencies after ipa is configured for either bundled or remote. The installer now includes the freeipa::common class by default to support either methods. --- installer/bin/ovirt-installer | 1 + installer/modules/ovirt/manifests/freeipa.pp | 58 ++++++++++++++------------ 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/installer/bin/ovirt-installer b/installer/bin/ovirt-installer index 2d88886..ad4d56d 100755 --- a/installer/bin/ovirt-installer +++ b/installer/bin/ovirt-installer @@ -327,6 +327,7 @@ firewall_rule{"nat-forward": chain => "FORWARD", in_interface => "<%= admin_dev firewall_rule{"nat-postrouting": table => "nat", chain => "POSTROUTING", out_interface => "<%= guest_dev %>", protocol => "", action => "MASQUERADE"} <% end %> include postgres::bundled +include freeipa::common include freeipa::bundled include ovirt::setup END_OF_TEMPLATE diff --git a/installer/modules/ovirt/manifests/freeipa.pp b/installer/modules/ovirt/manifests/freeipa.pp index aa806fe..796b8b4 100644 --- a/installer/modules/ovirt/manifests/freeipa.pp +++ b/installer/modules/ovirt/manifests/freeipa.pp @@ -18,6 +18,35 @@ # Author: Joey Boggs #-- +class freeipa::common{ + + exec {"get_krb5_tkt": + command => "/bin/echo $freeipa_password|/usr/kerberos/bin/kinit admin", + require => Single_Exec[ipa_install] + } + + single_exec {"ipa_modify_username_length": + command => "/usr/sbin/ipa-defaultoptions --maxusername=12", + require => Exec["get_krb5_tkt"] + } + + single_exec {"ipa_add_ovirtadmin_user": + command => "/usr/sbin/ipa-adduser -f Ovirt -l Admin -p $freeipa_password ovirtadmin", + require => Single_exec[ipa_modify_username_length] + } + + single_exec {"ipa_ovirtadmin_group": + command => "/usr/sbin/ipa-modgroup -a ovirtadmin admins", + require => Single_exec[ipa_add_ovirtadmin_user] + } + + single_exec {"set_pw_expiration": + command => "/usr/sbin/ipa-moduser --setattr krbPasswordExpiration=19700101000000Z ovirtadmin", + require => Single_exec[ipa_ovirtadmin_group] + } + +} + class freeipa::bundled{ package {"ipa-server": @@ -36,7 +65,7 @@ class freeipa::bundled{ exec {"replace_line_returns": command => "/bin/sed -i -e 's/^/#/' /etc/httpd/conf.d/ipa-rewrite.conf", - require => Single_Exec[ipa_server_install] + require => Single_Exec[ipa_install] } file_replacement{"ipa_proxy_config_1": @@ -59,36 +88,11 @@ class freeipa::bundled{ require => [Single_exec[add_guest_server_to_etc_hosts],Package[dnsmasq]] } - single_exec {"ipa_server_install": + single_exec {"ipa_install": command => "/usr/sbin/ipa-server-install -r $realm_name -p $freeipa_password -P $freeipa_password -a $freeipa_password --hostname $ipa_host -u dirsrv -U", require => [Exec[set_kdc_defaults],Single_exec[dnsmasq_restart]] } - exec {"get_krb5_tkt": - command => "/bin/echo $freeipa_password|/usr/kerberos/bin/kinit admin", - require => Single_Exec[ipa_server_install] - } - - single_exec {"ipa_modify_username_length": - command => "/usr/sbin/ipa-defaultoptions --maxusername=12", - require => Exec["get_krb5_tkt"] - } - - single_exec {"ipa_add_ovirtadmin_user": - command => "/usr/sbin/ipa-adduser -f Ovirt -l Admin -p $freeipa_password ovirtadmin", - require => Single_exec[ipa_modify_username_length] - } - - single_exec {"ipa_ovirtadmin_group": - command => "/usr/sbin/ipa-modgroup -a ovirtadmin admins", - require => Single_exec[ipa_add_ovirtadmin_user] - } - - single_exec {"set_pw_expiration": - command => "/usr/sbin/ipa-moduser --setattr krbPasswordExpiration=19700101000000Z ovirtadmin", - require => Single_exec[ipa_ovirtadmin_group] - } - firewall_rule{"krb5": destination_port => "88"} firewall_rule {"ldap": destination_port => '389'} firewall_rule {"freeip-636": destination_port => '636'} -- 1.6.0.6 From jguiditt at redhat.com Wed May 6 21:13:02 2009 From: jguiditt at redhat.com (Jason Guiditta) Date: Wed, 06 May 2009 17:13:02 -0400 Subject: [Ovirt-devel] [PATCH server] UI updates/tweaks. [rebased] In-Reply-To: <1241628798-10789-1-git-send-email-jeremy.perry@redhat.com> References: <1241558159-7746-1-git-send-email-jeremy.perry@redhat.com> <1241628798-10789-1-git-send-email-jeremy.perry@redhat.com> Message-ID: <1241644382.5351.5.camel@localhost.localdomain> ACK, with one requested change inline. If you dont have push perms, resend with fix and I will push for you. -j On Wed, 2009-05-06 at 12:53 -0400, Jeremy Perry wrote: > From: Jeremy Perry > > New images integrated, almost all images in the UI are updated or replaced. Also includes several minor style tweaks and in a few cases some verbage and capitalization changes for consistency. > > > > @@ -199,8 +206,9 @@ a { color:#000000; text-decoration: none;} > background: none; > > } > -.ui-tabs-nav a:hover {color:#FFFFFF; border-bottom: 5px solid #5599B8;} > -.ui-tabs-selected a {color:#FFFFFF; font-weight: bold; height: 24px; line-height:1.6; border-bottom: 5px solid #5599B8;} > +.ui-tabs-nav a:hover {color:#FFFFFF; border-bottom: 5px solid #537585;} > +.ui-tabs-nav a:focus, .ui-tabs-nav a:active {outline-style: none;} > +.ui-tabs-selected a {color:#FFFFFF; outline-style: none; height: 24px; line-height:1.6; border-bottom: 5px solid #5599B8;} > > .ui-tabs-hide {/*display:none;*/} > > @@ -276,8 +284,8 @@ a { color:#000000; text-decoration: none;} > float:left; > line-height:1.7; > list-style-type:none; > - margin:0pt; > - padding:0pt 8px; > + margin:0; > + padding:0; > text-align:center; > text-decoration:none; > } > @@ -298,6 +306,10 @@ a { color:#000000; text-decoration: none;} > text-decoration:none; > } > .selection_tools a:hover { > + -moz-border-radius-bottomleft:2px; > + -moz-border-radius-bottomright:2px; > + -moz-border-radius-topleft:2px; > + -moz-border-radius-topright:2px; Would you be kind enough to combine the above into one line as follows? -moz-border-radius: 2px; > background:#B0CBDE none repeat scroll 0%; > } > .selection_key { > diff --git a/src/public/stylesheets/ovirt-tree/tree.css b/src/public/stylesheets/ovirt-tree/tree.css > index 441ae83..ef1f1f7 100644 > --- a/src/public/stylesheets/ovirt-tree/tree.css > +++ b/src/public/stylesheets/ovirt-tree/tree.css > @@ -11,7 +11,7 @@ > .ovirt-tree, .ovirt-tree ul { > list-style: none; > margin:0; > - padding:5px 0 5px 16px; > + padding:1px 0 1px 22px; > margin-right: 8px; > } > > @@ -19,6 +19,7 @@ > background-repeat: no-repeat; > background-position: left; > padding: 4px 0 4px 4px; > + width: 100%; > cursor: pointer; /* maybe move this into a clickable class? */ > } > > @@ -59,16 +60,16 @@ > } > > .expandable { > - background: url('../../images/plus.gif') no-repeat left; > + background: url('../../images/dir_closed.png') no-repeat left; > } > > .expanded { > - background: url('../../images/minus.gif') no-repeat left; > + background: url('../../images/dir_open.png') no-repeat left; > } > > .ovirt-tree .current { > background-color: #698FA6; > - color:#000000; > + color:#FFFFFF; > width: 100%; > } > From jeremy.perry at redhat.com Thu May 7 14:08:52 2009 From: jeremy.perry at redhat.com (Jeremy Perry) Date: Thu, 7 May 2009 10:08:52 -0400 Subject: [Ovirt-devel] [PATCH server] UI updates/tweaks. In-Reply-To: <1241628798-10789-1-git-send-email-jeremy.perry@redhat.com> References: <1241628798-10789-1-git-send-email-jeremy.perry@redhat.com> Message-ID: <1241705332-19235-1-git-send-email-jeremy.perry@redhat.com> From: Jeremy Perry 05/07 - Made additional change per prequest from Jason Guiditta, and fixed 4 images that were not fully compressed. New images integrated, almost all images in the UI are updated or replaced. Also includes several minor style tweaks and in a few cases some verbage and capitalization changes for consistency. --- src/app/models/vm_task.rb | 18 ++++++------ src/app/views/hardware/quick_summary.rhtml | 8 +++--- src/app/views/hardware/show.html.erb | 3 +- src/app/views/hardware/show_hosts.rhtml | 8 +++--- src/app/views/hardware/show_storage.rhtml | 8 +++--- src/app/views/hardware/show_vms.rhtml | 10 +++--- src/app/views/host/show.rhtml | 8 +++--- src/app/views/layouts/_header_redux.rhtml | 4 +- src/app/views/layouts/_side_toolbar.rhtml | 8 +++--- .../views/layouts/components/standard_tree.rhtml | 2 +- src/app/views/layouts/redux.rhtml | 6 +--- src/app/views/network/list.html.erb | 2 +- src/app/views/network/show.rhtml | 4 +- src/app/views/resources/quick_summary.rhtml | 10 +++--- src/app/views/resources/show.rhtml | 3 +- src/app/views/resources/show_vms.rhtml | 10 +++--- src/app/views/search/results.rhtml | 2 +- src/app/views/smart_pools/show.rhtml | 7 +++-- src/app/views/smart_pools/show_hosts.rhtml | 6 ++-- src/app/views/smart_pools/show_pools.rhtml | 7 +++-- src/app/views/smart_pools/show_storage.rhtml | 6 ++-- src/app/views/smart_pools/show_vms.rhtml | 10 +++--- src/app/views/storage/show.rhtml | 8 +++--- src/app/views/storage_volume/show.rhtml | 4 +- src/app/views/task/_show.rhtml | 6 ++-- src/app/views/user/_change_role_menu.rhtml | 2 +- src/app/views/user/_show.rhtml | 2 +- src/app/views/vm/_form.rhtml | 2 +- src/app/views/vm/show.rhtml | 8 +++--- src/public/images/Untitled-4.gif | Bin 13123 -> 0 bytes src/public/images/add2.png | Bin 48768 -> 0 bytes src/public/images/addhost.png | Bin 789 -> 0 bytes src/public/images/addhost2.png | Bin 47684 -> 0 bytes src/public/images/addstoragepool.png | Bin 1069 -> 0 bytes src/public/images/bg-image.png | Bin 345 -> 0 bytes src/public/images/bg_header.jpg | Bin 13178 -> 0 bytes src/public/images/bg_menu_big.jpg | Bin 13136 -> 0 bytes src/public/images/bg_toolbarheader.jpg | Bin 13253 -> 0 bytes src/public/images/close.png | Bin 1219 -> 0 bytes src/public/images/delete.png | Bin 50803 -> 0 bytes src/public/images/delete_white.gif | Bin 13236 -> 0 bytes src/public/images/fade.png | Bin 649 -> 0 bytes src/public/images/folderClosed.gif | Bin 13657 -> 0 bytes src/public/images/host.png | Bin 208 -> 0 bytes src/public/images/icon-queued-11px.png | Bin 406 -> 429 bytes src/public/images/icon_add_11px.png | Bin 334 -> 304 bytes src/public/images/icon_add_hardwarePool.png | Bin 1223 -> 0 bytes src/public/images/icon_add_hardwarepool.png | Bin 1133 -> 0 bytes src/public/images/icon_add_pools.png | Bin 803 -> 810 bytes src/public/images/icon_add_smartpool.png | Bin 948 -> 0 bytes src/public/images/icon_add_user.png | Bin 1084 -> 1109 bytes src/public/images/icon_add_vm.png | Bin 1166 -> 1075 bytes src/public/images/icon_add_vmpool.png | Bin 1072 -> 1109 bytes src/public/images/icon_addhost.gif | Bin 13484 -> 0 bytes src/public/images/icon_addhost.png | Bin 789 -> 0 bytes src/public/images/icon_addstorage.gif | Bin 14161 -> 0 bytes src/public/images/icon_addstorage.png | Bin 946 -> 0 bytes src/public/images/icon_addto_smartpool.png | Bin 1061 -> 1109 bytes src/public/images/icon_adduser.png | Bin 976 -> 0 bytes src/public/images/icon_addvm.png | Bin 1242 -> 0 bytes src/public/images/icon_change_role.png | Bin 1098 -> 1124 bytes src/public/images/icon_clear.png | Bin 533 -> 0 bytes src/public/images/icon_conf_message.png | Bin 49126 -> 0 bytes src/public/images/icon_delete.gif | Bin 13735 -> 0 bytes src/public/images/icon_delete.png | Bin 910 -> 968 bytes src/public/images/icon_delete_11px.png | Bin 343 -> 409 bytes src/public/images/icon_delete_white.gif | Bin 13236 -> 0 bytes src/public/images/icon_delete_white.png | Bin 501 -> 0 bytes src/public/images/icon_edit.png | Bin 375 -> 0 bytes src/public/images/icon_edit_11px.png | Bin 269 -> 336 bytes src/public/images/icon_host.png | Bin 47738 -> 0 bytes src/public/images/icon_migrate.png | Bin 354 -> 0 bytes src/public/images/icon_move.png | Bin 568 -> 569 bytes src/public/images/icon_newgroup.gif | Bin 13501 -> 0 bytes src/public/images/icon_note.png | Bin 954 -> 0 bytes src/public/images/icon_poweroff_11px.png | Bin 518 -> 480 bytes src/public/images/icon_refresh.png | Bin 381 -> 0 bytes src/public/images/icon_refresh_11px.png | Bin 300 -> 303 bytes src/public/images/icon_remove.png | Bin 1056 -> 1071 bytes src/public/images/icon_restore.png | Bin 350 -> 0 bytes src/public/images/icon_restore_11px.png | Bin 246 -> 263 bytes src/public/images/icon_save.png | Bin 414 -> 0 bytes src/public/images/icon_selection_add.gif | Bin 13127 -> 0 bytes src/public/images/icon_selection_remove.gif | Bin 13117 -> 0 bytes src/public/images/icon_selection_showdetail.gif | Bin 13124 -> 0 bytes src/public/images/icon_separator.png | Bin 216 -> 165 bytes src/public/images/icon_smartpool.png | Bin 725 -> 754 bytes src/public/images/icon_smartpools_dir.png | Bin 4228 -> 901 bytes src/public/images/icon_start.png | Bin 587 -> 0 bytes src/public/images/icon_start_11px.png | Bin 500 -> 418 bytes src/public/images/icon_stop.png | Bin 396 -> 0 bytes src/public/images/icon_stop_11px.png | Bin 375 -> 321 bytes src/public/images/icon_suspend.png | Bin 521 -> 0 bytes src/public/images/icon_suspend_11px.png | Bin 404 -> 373 bytes src/public/images/icon_terminal_11px.png | Bin 333 -> 306 bytes src/public/images/icon_unassignedhost.gif | Bin 13337 -> 0 bytes src/public/images/icon_view.png | Bin 1259 -> 1393 bytes src/public/images/icon_vmpool.png | Bin 899 -> 967 bytes src/public/images/icon_x.png | Bin 340 -> 0 bytes src/public/images/image_ovirt.png | Bin 773 -> 0 bytes src/public/images/logo-small.png | Bin 6264 -> 0 bytes src/public/images/logo.png | Bin 20874 -> 0 bytes src/public/images/map.png | Bin 368 -> 0 bytes src/public/images/minus.gif | Bin 905 -> 0 bytes src/public/images/move.png | Bin 351 -> 0 bytes src/public/images/network_error.png | Bin 989 -> 0 bytes src/public/images/network_trend_check.png | Bin 749 -> 0 bytes src/public/images/network_trend_down.png | Bin 865 -> 0 bytes src/public/images/network_trend_up.png | Bin 837 -> 0 bytes src/public/images/ovirt_logo_redux.png | Bin 773 -> 0 bytes src/public/images/plus.gif | Bin 907 -> 0 bytes src/public/images/slider-bg-1.png | Bin 204 -> 0 bytes src/public/images/slider-bg-2.png | Bin 326 -> 0 bytes src/public/images/slider-handle.gif | Bin 176 -> 0 bytes src/public/images/slider-handle_select.gif | Bin 13245 -> 0 bytes src/public/images/toolbar_add_smartpool.png | Bin 967 -> 995 bytes src/public/images/toolbar_add_vmpool.png | Bin 1134 -> 1222 bytes src/public/images/toolbar_delete.png | Bin 991 -> 1045 bytes src/public/images/view.png | Bin 985 -> 0 bytes .../javascripts/jquery-treeview/demo/index.html | 4 +- src/public/stylesheets/components.css | 10 ++++--- src/public/stylesheets/default.css | 2 +- src/public/stylesheets/jquery.jgrowl.css | 2 +- src/public/stylesheets/layout.css | 29 +++++++++++++------- src/public/stylesheets/ovirt-tree/tree.css | 9 +++--- 125 files changed, 125 insertions(+), 113 deletions(-) delete mode 100644 src/public/images/Untitled-4.gif delete mode 100644 src/public/images/add2.png delete mode 100644 src/public/images/addhost.png delete mode 100644 src/public/images/addhost2.png delete mode 100644 src/public/images/addstoragepool.png delete mode 100644 src/public/images/bg-image.png delete mode 100644 src/public/images/bg_header.jpg delete mode 100644 src/public/images/bg_menu_big.jpg delete mode 100644 src/public/images/bg_toolbarheader.jpg delete mode 100644 src/public/images/close.png delete mode 100644 src/public/images/delete.png delete mode 100644 src/public/images/delete_white.gif delete mode 100644 src/public/images/fade.png delete mode 100644 src/public/images/folderClosed.gif delete mode 100644 src/public/images/host.png delete mode 100644 src/public/images/icon_add_hardwarePool.png delete mode 100644 src/public/images/icon_add_hardwarepool.png delete mode 100644 src/public/images/icon_add_smartpool.png delete mode 100644 src/public/images/icon_addhost.gif delete mode 100644 src/public/images/icon_addhost.png delete mode 100644 src/public/images/icon_addstorage.gif delete mode 100644 src/public/images/icon_addstorage.png delete mode 100644 src/public/images/icon_adduser.png delete mode 100644 src/public/images/icon_addvm.png delete mode 100644 src/public/images/icon_clear.png delete mode 100644 src/public/images/icon_conf_message.png delete mode 100644 src/public/images/icon_delete.gif delete mode 100644 src/public/images/icon_delete_white.gif delete mode 100644 src/public/images/icon_delete_white.png delete mode 100644 src/public/images/icon_edit.png delete mode 100644 src/public/images/icon_host.png delete mode 100644 src/public/images/icon_migrate.png delete mode 100644 src/public/images/icon_newgroup.gif delete mode 100644 src/public/images/icon_note.png delete mode 100644 src/public/images/icon_refresh.png delete mode 100644 src/public/images/icon_restore.png delete mode 100644 src/public/images/icon_save.png delete mode 100644 src/public/images/icon_selection_add.gif delete mode 100644 src/public/images/icon_selection_remove.gif delete mode 100644 src/public/images/icon_selection_showdetail.gif delete mode 100644 src/public/images/icon_start.png delete mode 100644 src/public/images/icon_stop.png delete mode 100644 src/public/images/icon_suspend.png delete mode 100644 src/public/images/icon_unassignedhost.gif delete mode 100644 src/public/images/icon_x.png delete mode 100644 src/public/images/image_ovirt.png delete mode 100644 src/public/images/logo-small.png delete mode 100644 src/public/images/logo.png delete mode 100644 src/public/images/map.png delete mode 100644 src/public/images/minus.gif delete mode 100644 src/public/images/move.png delete mode 100644 src/public/images/network_error.png delete mode 100644 src/public/images/network_trend_check.png delete mode 100644 src/public/images/network_trend_down.png delete mode 100644 src/public/images/network_trend_up.png delete mode 100644 src/public/images/ovirt_logo_redux.png delete mode 100644 src/public/images/plus.gif delete mode 100755 src/public/images/slider-bg-1.png delete mode 100755 src/public/images/slider-bg-2.png delete mode 100755 src/public/images/slider-handle.gif delete mode 100644 src/public/images/slider-handle_select.gif delete mode 100644 src/public/images/view.png diff --git a/src/app/models/vm_task.rb b/src/app/models/vm_task.rb index d7afe54..984e807 100644 --- a/src/app/models/vm_task.rb +++ b/src/app/models/vm_task.rb @@ -42,7 +42,7 @@ class VmTask < Task # a hash of task actions which point to a hash which define valid state transitions ACTIONS = { ACTION_CREATE_VM => { :label => "Create", - :icon => "icon_start.png", + :icon => "icon_start_11px.png", :start => Vm::STATE_PENDING, :running => Vm::STATE_CREATING, :success => Vm::STATE_STOPPED, @@ -50,7 +50,7 @@ class VmTask < Task :privilege => [Privilege::MODIFY, PRIV_OBJECT_VM_POOL]}, ACTION_START_VM => { :label => "Start", - :icon => "icon_start.png", + :icon => "icon_start_11px.png", :start => Vm::STATE_STOPPED, :running => Vm::STATE_STARTING, :success => Vm::STATE_RUNNING, @@ -58,7 +58,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_SHUTDOWN_VM => { :label => "Shutdown", - :icon => "icon_x.png", + :icon => "icon_stop_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_STOPPING, :success => Vm::STATE_STOPPED, @@ -66,7 +66,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_POWEROFF_VM => { :label => "Poweroff", - :icon => "icon_x.png", + :icon => "icon_poweroff_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_POWERING_OFF, :success => Vm::STATE_STOPPED, @@ -74,7 +74,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_SUSPEND_VM => { :label => "Suspend", - :icon => "icon_suspend.png", + :icon => "icon_suspend_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_SUSPENDING, :success => Vm::STATE_SUSPENDED, @@ -82,7 +82,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_RESUME_VM => { :label => "Resume", - :icon => "icon_start.png", + :icon => "icon_start_11px.png", :start => Vm::STATE_SUSPENDED, :running => Vm::STATE_RESUMING, :success => Vm::STATE_RUNNING, @@ -90,7 +90,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_SAVE_VM => { :label => "Save", - :icon => "icon_save.png", + :icon => "icon_save_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_SAVING, :success => Vm::STATE_SAVED, @@ -98,7 +98,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_RESTORE_VM => { :label => "Restore", - :icon => "icon_restore.png", + :icon => "icon_restore_11px.png", :start => Vm::STATE_SAVED, :running => Vm::STATE_RESTORING, :success => Vm::STATE_RUNNING, @@ -106,7 +106,7 @@ class VmTask < Task :privilege => [Privilege::VM_CONTROL, PRIV_OBJECT_VM_POOL]}, ACTION_MIGRATE_VM => { :label => "Migrate", - :icon => "icon_restore.png", + :icon => "icon_migrate_11px.png", :start => Vm::STATE_RUNNING, :running => Vm::STATE_MIGRATING, :success => Vm::STATE_RUNNING, diff --git a/src/app/views/hardware/quick_summary.rhtml b/src/app/views/hardware/quick_summary.rhtml index a2aad00..111037c 100644 --- a/src/app/views/hardware/quick_summary.rhtml +++ b/src/app/views/hardware/quick_summary.rhtml @@ -3,18 +3,18 @@ <%- end -%> <%- content_for :action_links do -%> <%if @can_modify -%> - <%= link_to image_tag("icon_edit.png") + " Edit", + <%= link_to image_tag("icon_edit_11px.png") + " Edit", {:controller => 'hardware', :action => 'edit', :id => @pool}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <%if @pool.quota -%> - <%= link_to image_tag("icon_edit.png") + " Edit Default Quota", + <%= link_to image_tag("icon_edit_11px.png") + " Edit Default Quota", {:controller => 'quota', :action => 'edit', :id => @pool.quota}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> - <%= image_tag "icon_x.png" %> Remove Default Quota + <%= image_tag "icon_x_11px.png" %> Remove Default Quota <% else -%> - <%= link_to image_tag("icon_edit.png") + " Edit Default Quota", + <%= link_to image_tag("icon_edit_11px.png") + " Edit Default Quota", {:controller => 'quota', :action => 'new', :pool_id => @pool }, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <% end -%> diff --git a/src/app/views/hardware/show.html.erb b/src/app/views/hardware/show.html.erb index e029e4b..dd5aeb5 100644 --- a/src/app/views/hardware/show.html.erb +++ b/src/app/views/hardware/show.html.erb @@ -11,7 +11,8 @@

                                <%= image_tag "icon_smry_his.png", :style=>"vertical-align:middle;" %> History

                                <%= render_component :controller=> 'graph', :action => 'history_graphs', :id => @pool.id, :params => { :poolType => 'hardware' }%> - + +

                                <%= image_tag "icon_smry_perf.png", :style=>"vertical-align:middle;" %> Performance

                                <%= render_component :controller=> 'graph', :action => 'snapshot_graph', :id => @pool.id, :params => { :poolType => 'hardware' }%> diff --git a/src/app/views/hardware/show_hosts.rhtml b/src/app/views/hardware/show_hosts.rhtml index 64e5d91..09a6188 100644 --- a/src/app/views/hardware/show_hosts.rhtml +++ b/src/app/views/hardware/show_hosts.rhtml @@ -1,14 +1,14 @@
                                -
                                Select a host above.
                                +
                                Select a host.
                                <% else %> @@ -114,7 +114,7 @@
                                No hosts found in this pool.

                                <%if @can_modify -%> - <%= image_tag "icon_addhost.png", :style=>"vertical-align:middle;" %>   + <%= image_tag "icon_add_host.png", :style=>"vertical-align:middle;" %>   Add first host to this hardware pool <% end -%>
                                diff --git a/src/app/views/hardware/show_storage.rhtml b/src/app/views/hardware/show_storage.rhtml index 8d09577..c9f46ad 100644 --- a/src/app/views/hardware/show_storage.rhtml +++ b/src/app/views/hardware/show_storage.rhtml @@ -1,14 +1,14 @@
                                @@ -86,7 +86,7 @@
                                -
                                Select a VM pool above.
                                +
                                Select a virtual machine pool.
                                <% else %> @@ -95,10 +95,10 @@ <%= image_tag 'no-grid-items.png', :style => 'float: left;' %>
                                - No VM Resource Pools found in this hardware pool.

                                + No virtual machine pools found in this hardware pool.

                                <%if @can_modify -%> <%= image_tag "icon_add_vmpool.png", :style => "vertical-align:middle;" %>   - Add first vm resource pool to this hardware pool + Add first virtual machine pool to this hardware pool <% end -%>
                                diff --git a/src/app/views/host/show.rhtml b/src/app/views/host/show.rhtml index 1e0787e..f706761 100644 --- a/src/app/views/host/show.rhtml +++ b/src/app/views/host/show.rhtml @@ -5,19 +5,19 @@ <%if @can_modify -%> <%if @host.disabled? -%> - <%= image_tag "icon_start.png" %> Enable Host + <%= image_tag "icon_start_11px.png" %> Enable Host <% else -%> - <%= image_tag "icon_suspend.png" %> Disable Host + <%= image_tag "icon_suspend_11px.png" %> Disable Host <% end -%> <%if @host.is_clear_task_valid? -%> - <%= image_tag "icon_x.png" %> Clear VMs + <%= image_tag "icon_x_11px.png" %> Clear VMs <% end -%> - <%= link_to image_tag("icon_edit.png") +"Edit Network", + <%= link_to image_tag("icon_edit_11px.png") +"Edit Network", {:controller => 'host', :action => 'edit_network', :id => @host.id}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> diff --git a/src/app/views/layouts/_header_redux.rhtml b/src/app/views/layouts/_header_redux.rhtml index 146220c..c1a1df1 100644 --- a/src/app/views/layouts/_header_redux.rhtml +++ b/src/app/views/layouts/_header_redux.rhtml @@ -1,10 +1,10 @@ - +
                                Hi, <%= @user %>
                                'results' %>"> - " title="Search" type="image">  | + " title="Search" type="image"> | 
                                <%= link_to 'Log out', { :controller => "login", :action => "logout"}%>
                                diff --git a/src/app/views/layouts/_side_toolbar.rhtml b/src/app/views/layouts/_side_toolbar.rhtml index bc52ea3..b4fbe86 100644 --- a/src/app/views/layouts/_side_toolbar.rhtml +++ b/src/app/views/layouts/_side_toolbar.rhtml @@ -13,25 +13,25 @@ <%if pool[:type]=="HardwarePool" and @can_modify -%> <% end -%> <% end -%> <%if pool and @can_modify -%>
                                -
                                - <%= link_to image_tag("icon_help.png"), - {:controller => 'help', :action => @help_section, :anchor => @anchor}, - :id=>"help-link", :popup => true, :title => "Help" %> -
                                + <%= yield %> <%# the rest of the center and right hand side %>
                                diff --git a/src/app/views/network/list.html.erb b/src/app/views/network/list.html.erb index 9a304cf..0451a9c 100644 --- a/src/app/views/network/list.html.erb +++ b/src/app/views/network/list.html.erb @@ -1,6 +1,6 @@
                                <%- content_for :right do -%> <%= render_component :controller=> 'graph', :action => 'snapshot_graph', :id => @pool.id, :target => 'resource' %> -<% end -%> \ No newline at end of file +<% end -%> diff --git a/src/app/views/resources/show.rhtml b/src/app/views/resources/show.rhtml index 789465b..11c2129 100644 --- a/src/app/views/resources/show.rhtml +++ b/src/app/views/resources/show.rhtml @@ -10,7 +10,8 @@

                                <%= image_tag "icon_smry_his.png", :style=>"vertical-align:middle;" %> History

                                <%= render_component :controller=> 'graph', :action => 'history_graphs', :id => @pool.id, :params => { :poolType => 'vm' } %> - + +

                                <%= image_tag "icon_smry_perf.png", :style=>"vertical-align:middle;" %> Performance

                                <%= render_component :controller=> 'graph', :action => 'snapshot_graph', :id => @pool.id, :params => { :poolType => 'vm' } %> diff --git a/src/app/views/resources/show_vms.rhtml b/src/app/views/resources/show_vms.rhtml index 1e75d35..996d3fb 100644 --- a/src/app/views/resources/show_vms.rhtml +++ b/src/app/views/resources/show_vms.rhtml @@ -1,11 +1,11 @@
                                @@ -125,7 +125,7 @@
                                No vms found in this pool.

                                <%if @can_modify -%> - <%= image_tag "icon_addhost.png", :style => "vertical-align:middle;" %>   + <%= image_tag "icon_add_host.png", :style => "vertical-align:middle;" %>   Add first virtual machine to resource pool <% end -%>
                                diff --git a/src/app/views/search/results.rhtml b/src/app/views/search/results.rhtml index 1989054..1537b60 100644 --- a/src/app/views/search/results.rhtml +++ b/src/app/views/search/results.rhtml @@ -8,7 +8,7 @@ Search
                              • - <%= image_tag "icon_smartpool.png", :style => "vertical-align:middle;" %>  Add to Smart Pool    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %> + <%= image_tag "icon_addto_smartpool.png", :style => "vertical-align:middle;" %>  Add to Smart Pool    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %>
                                  <% smart_pools = SmartPool.smart_pools_for_user(@user) %> <% smart_pools.each_index { |index| %> diff --git a/src/app/views/smart_pools/show.rhtml b/src/app/views/smart_pools/show.rhtml index 45b1753..6e53de9 100644 --- a/src/app/views/smart_pools/show.rhtml +++ b/src/app/views/smart_pools/show.rhtml @@ -4,14 +4,15 @@
                                  <%= image_tag "icon_smry_res.png", :style=>"vertical-align:middle;" %> Resources

                                  - What do we show here for Smart Pools? + What do we show here for smart pools?


                                  <%= image_tag "icon_smry_his.png", :style=>"vertical-align:middle;" %> History

                                  - What do we show here for Smart Pools? + What do we show here for smart pools? +


                                  <%= image_tag "icon_smry_perf.png", :style=>"vertical-align:middle;" %> Performance

                                  - What do we show here for Smart Pools? + What do we show here for smart pools? diff --git a/src/app/views/smart_pools/show_hosts.rhtml b/src/app/views/smart_pools/show_hosts.rhtml index a4b6be7..8b13c2b 100644 --- a/src/app/views/smart_pools/show_hosts.rhtml +++ b/src/app/views/smart_pools/show_hosts.rhtml @@ -1,6 +1,6 @@ @@ -60,7 +60,7 @@
                                  -
                                  Select a host above.
                                  +
                                  Select a host.
                                  <% else %> @@ -70,7 +70,7 @@
                                  No hosts found in this pool.

                                  - <%= image_tag "icon_addhost.png", :style=>"vertical-align:middle;" %>   + <%= image_tag "icon_add_host.png", :style=>"vertical-align:middle;" %>   Add first host to this smart pool
                                  diff --git a/src/app/views/smart_pools/show_pools.rhtml b/src/app/views/smart_pools/show_pools.rhtml index ed1ad54..de8741b 100644 --- a/src/app/views/smart_pools/show_pools.rhtml +++ b/src/app/views/smart_pools/show_pools.rhtml @@ -1,6 +1,6 @@ @@ -56,7 +56,7 @@
                                  -
                                  Select a pool above.
                                  +
                                  Select a pool.
                                  <% else %> @@ -66,7 +66,8 @@
                                  No pools found in this pool.

                                  - Add first Pool to this smart pool + <%= image_tag "icon_add_pools.png", :style=>"vertical-align:middle;" %>   + Add first pool to this smart pool
                                  diff --git a/src/app/views/smart_pools/show_storage.rhtml b/src/app/views/smart_pools/show_storage.rhtml index 3090f0e..da553a1 100644 --- a/src/app/views/smart_pools/show_storage.rhtml +++ b/src/app/views/smart_pools/show_storage.rhtml @@ -1,6 +1,6 @@ @@ -94,8 +94,8 @@ ${htmlList(pools, id)} <%= image_tag 'no-grid-items.png', :style => 'float: left;' %>
                                  - No storage Pools found in this pool.

                                  - <%= image_tag "icon_addstorage.png", :style=>"vertical-align:middle;" %>   + No storage pools found in this pool.

                                  + <%= image_tag "icon_add_storage.png", :style=>"vertical-align:middle;" %>   Add first storage volume to this smart pool
                                  diff --git a/src/app/views/smart_pools/show_vms.rhtml b/src/app/views/smart_pools/show_vms.rhtml index e56600b..48ae800 100644 --- a/src/app/views/smart_pools/show_vms.rhtml +++ b/src/app/views/smart_pools/show_vms.rhtml @@ -1,6 +1,6 @@ @@ -59,7 +59,7 @@
                                  -
                                  Select a vm above.
                                  +
                                  Select a virtual machine.
                                  <% else %> @@ -68,9 +68,9 @@ <%= image_tag 'no-grid-items.png', :style => 'float: left;' %>
                                  - No vms found in this pool.

                                  - <%= image_tag "icon_addvm.png", :style=>"vertical-align:middle;" %>   - Add first VM to this smart pool + No virtual machines found in this pool.

                                  + <%= image_tag "icon_add_vm.png", :style=>"vertical-align:middle;" %>   + Add first virtual machine to this smart pool
                                  diff --git a/src/app/views/storage/show.rhtml b/src/app/views/storage/show.rhtml index dd52d79..b0b1d4e 100644 --- a/src/app/views/storage/show.rhtml +++ b/src/app/views/storage/show.rhtml @@ -4,19 +4,19 @@ <%- content_for :action_links do -%> <%if @can_modify -%> - <%= link_to image_tag("icon_edit.png") + " Edit", + <%= link_to image_tag("icon_edit_11px.png") + " Edit", {:controller => 'storage', :action => 'edit', :id => @storage_pool}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> - <%= image_tag "icon_refresh.png" %> Refresh + <%= image_tag "icon_refresh_11px.png" %> Refresh <%if @storage_pool.user_subdividable -%> - <%= link_to image_tag("icon_addstorage.png") + " Add new Volume", + <%= link_to image_tag("icon_add_11px.png") + " Add New Volume", {:controller => 'storage_volume', :action => 'new', :storage_pool_id => @storage_pool.id}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <% end %> - <%= image_tag "icon_x.png" %> Delete + <%= image_tag "icon_delete_11px.png" %> Delete <%- end -%> <%- end -%> diff --git a/src/app/views/storage_volume/show.rhtml b/src/app/views/storage_volume/show.rhtml index 3963a3c..cefc51a 100644 --- a/src/app/views/storage_volume/show.rhtml +++ b/src/app/views/storage_volume/show.rhtml @@ -5,13 +5,13 @@ <%- content_for :action_links do -%> <%if @can_modify -%> <%if @storage_volume.supports_lvm_subdivision and @storage_volume.vms.empty? -%> - <%= link_to image_tag("icon_addstorage.png") + " Add new Volume", + <%= link_to image_tag("icon_add_11px.png") + " Add New Volume", {:controller => 'storage_volume', :action => 'new', :source_volume_id => @storage_volume.id}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <% end %> <%if @storage_volume.deletable -%> - <%= image_tag "icon_x.png" %> Delete + <%= image_tag "icon_delete_11px.png" %> Delete <%- end -%> <%- end -%> diff --git a/src/app/views/task/_show.rhtml b/src/app/views/task/_show.rhtml index 9421dc9..521ab8e 100644 --- a/src/app/views/task/_show.rhtml +++ b/src/app/views/task/_show.rhtml @@ -2,7 +2,7 @@
                                    <%if task_types %>
                                  • - <%= image_tag "view.png", :style => "vertical-align:middle;" %>  <%= task_types.select {|type| type[1]==task_type}[0][0] %> + <%= image_tag "icon_view.png", :style => "vertical-align:middle;" %>  <%= task_types.select {|type| type[1]==task_type}[0][0] %>    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %>
                                      <% task_types.each_index { |index| %> @@ -21,7 +21,7 @@ <% end %>
                                    • - <%= image_tag "view.png", :style => "vertical-align:middle;" %>  <%= task_states.select {|state| state[1]==task_state}[0][0] %> + <%= image_tag "icon_view.png", :style => "vertical-align:middle;" %>  <%= task_states.select {|state| state[1]==task_state}[0][0] %>    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %>
                                        <% task_states.each_index { |index| %> @@ -66,7 +66,7 @@ <% else %> diff --git a/src/app/views/user/_change_role_menu.rhtml b/src/app/views/user/_change_role_menu.rhtml index 4044b88..b8b5a3c 100644 --- a/src/app/views/user/_change_role_menu.rhtml +++ b/src/app/views/user/_change_role_menu.rhtml @@ -1,4 +1,4 @@ -<%= image_tag "icon_move.png", :style => "vertical-align:middle;" %>  Change Role    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %> +<%= image_tag "icon_change_role.png", :style => "vertical-align:middle;" %>  Change Role    <%= image_tag "icon_toolbar_arrow.gif", :style => "vertical-align:middle;" %>
                                          <% @roles.each_index { |index| %>
                                          • <%if @can_modify -%> -
                                          • <%= image_tag "icon_addhost.png", :style => "vertical-align:middle;" %>  Add User
                                          • +
                                          • <%= image_tag "icon_add_user.png", :style => "vertical-align:middle;" %>  Add User
                                          • <%= render :partial => 'user/change_role_menu' %>
                                          • <%= image_tag "icon_remove.png", :style => "vertical-align:middle;" %>  Remove
                                          • <% end -%> diff --git a/src/app/views/vm/_form.rhtml b/src/app/views/vm/_form.rhtml index 610f2bc..034c3df 100644 --- a/src/app/views/vm/_form.rhtml +++ b/src/app/views/vm/_form.rhtml @@ -72,7 +72,7 @@ {if !item.available}disabled="disabled" style="display:none"{/if} {if item.selected}checked="checked"{/if}/> ${item.name} {if item.size}(${item.size} GB){/if} {if item.create_volume} - <%=image_tag("icon_addstorage.png")%> + <%=image_tag("icon_add_storage.png")%> {if item.is_pool} diff --git a/src/app/views/vm/show.rhtml b/src/app/views/vm/show.rhtml index add29b4..0da81d0 100644 --- a/src/app/views/vm/show.rhtml +++ b/src/app/views/vm/show.rhtml @@ -4,7 +4,7 @@ <%- content_for :action_links do -%> <%if @can_control_vms and @vm.has_console -%> - <%= link_to image_tag("icon_x.png") + " Open Console", + <%= link_to image_tag("icon_x_11px.png") + " Open Console", {:controller => 'vm', :action => 'console', :id => @vm}, :id=>"vnc_console_link" %> <% end -%> <%if @can_modify -%> - <%= link_to image_tag("icon_edit.png") + " Edit", + <%= link_to image_tag("icon_edit_11px.png") + " Edit", {:controller => 'vm', :action => 'edit', :id => @vm}, :rel=>"facebox[.bolder]", :class=>"selection_facebox" %> <% for name, action in @actions %> @@ -30,10 +30,10 @@ <% end -%> <% end %> - <%= image_tag "icon_x.png" %> Cancel queued tasks + <%= image_tag "icon_cancel_11px.png" %> Cancel queued tasks - <%= image_tag "icon_x.png" %> Delete + <%= image_tag "icon_delete_11px.png" %> Delete <% end -%> <% end -%> diff --git a/src/public/images/Untitled-4.gif b/src/public/images/Untitled-4.gif deleted file mode 100644 index 564b352f71e15fd954f7eae56058b5625f55d333..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13123 zcmeI3XM7W79LKMKQj3V9;MVIQxSG4%C25;8NyU^hB#1Ox1RU49C+V5w?z~)0S{&d) z8H(U$xN+|R3JUJM_uhNp*1E!TO`8-xe(>{u!Mp$SB6;%U`+vsw`MrI{j&G_DDwRwn zGmBw-K3}0ws4fhe8k@{EDvm%Y&YVh!rW;057u2X zYTAVL^P)%f`uwcFmY3?JU|nqu+pIY31jS&bI#%*}>4zkXqU;yhp2kJ0XfI at I33*Cm zQ_q_8SD0&a97`62TrS7we7tEV1u+;53SLQ&Bo8G#*$%@|@*X2QqBu$KJdGr)+PdZF zrop=NDy?R_6XrN~p;GHPoMM$0GO~R4L3!282zkX4MBXcuW~PN9Iw(hNqBy1E^aCOOkiW!Y%6FXUEk1eI4U*Ase0Btm`Ed%OXU=#NWONv$kN)B4mGp-swTrlu!4 z{<}QTTiyriDGv#*h(2Pvt-EL1Wc>exX==%r)o!P|uSHV at k|r5qI9cjU+}N3>$_dlX zC{9GrC`lqD^+ZT04{mmU#a+`_&{ztkT=s6gbd_7AQ}(_^rY}y4i-6>!F4P4w0D>`H zs0(BO1Y^2T7svnz#&n at BkO2^k=|Wu~10WdFg}OinKrp5Yb%6|kU`!Y40vQ0om at d=> zG5~@xU8oCW00d*YP#4Gm2*z}wE|38bjOjvMAOj#6(}lV~20$>T3w41EfM84)>H--6 z!I&=81u_7FF$Xx=i+Mc>T3kUwQeZ7hib(xo4kw z`l%J+PA9?tpb!#7dV9o0L?_0I<-h1x8>&`oFzwOprZocWp8?L`@#kJR5ebtp$ zT)uqS(j}K&ddbBXU3kIbMdvR(@7x9R=gmFm>^WzhdB*9d&7O7YDJP#av$G?gJF(r# z+9z11kx8eH*V~c_qN%OQamOBW^o;4#j+)wXuLjjpCoz(-cxhn0sHT_ at 2HXcjNq!-z4zL4kKK3Mb(fuo58G+Sp*w6p zWV^xJ4yxLwa^Tim4d~ymf?=w=1~3De0#n1#=01~Q`VF36v10bju7ykEfm{pE9JB!z CAxTgG diff --git a/src/public/images/add2.png b/src/public/images/add2.png deleted file mode 100644 index cd925e396e97fed605d5f1ef595709797ebbd879..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48768 zcmeFZbyQqU*XW6akl^kT9D=)huwcO*g1fszNN{&=+`Vy^;L^CeyF=qWJnwhE`^}xT z=B_(;&HOcQtv*$C&Z*kHtEy{PpZfLgupbIi$Or at oP*70FGSc6a-&3rAj!z%ow|=*sq%jVW zuXtON&m{LG?>hWPxa?xksi>T5W-R_&-7t at 3%+O#*^LJ2PIWF%2OXoJGI-N=FTYac% z2jZgka5^Ka3?_ZIJ0gyb at 65;FKap!-bVD3~HdBQT~4gjE*$XE>y7t;Hmt)<@pn^B?}J z)c;>8NeUyB4+*c&)nB1rvDRerifM&v{xRtK=S_gC_x}Kg`5=zQ) zGDtE at bq4Jsu{90((j+qK)EN=zC*DUEN$lalhw)=@I$VC!3a~>@`XMUl1b)R#lDDT_o&r(p=#eZ4s z>O4=Hnb~tbPompX><`p$^5(a_+XPMAUwW02?ptR++i>{%Sg|2QvPIPtb2zf{!_ayuE}Tk#WomSA#1?TjVP|+zXN8Aa%?qINsAu(NQ8p0gw;JYwPU at 9cw9k) zrkBk~*&l<7dp0e{K6Zc|Ql at NJHcc<^emLtcc6aT~YyE&H+8}b2CneeQ z8xb?TDB(|02CTfyOxi&BqP5eK%@Fr^_=$8$wWnHdS)4J at dRBV|Bq=tHc=>a=v`@l#opqx$8;qdW7kcEwu0tC_-P} zMFGX1&Qh;hHO0EZVi}(i=_>{6Y_X>RoGZyWw_Le5VJ;L^qH%((Sim1_7j&@rh*C#? zFbcVrmOtqlHgc_LWR78PaeT1j3-UOz?jP3XQ2-_KIN~rzPc6S{C-?Irk%f@$u7;)D z=ejiLoPny@*x0sN+xmVw;mI)t4V$u*Qe0EY5kkwQY_8g=<8hb;Z)WRF1CNjhvPARQ zEnGfEP2@}&Pue(HGzJ=0b+IvLn2EcGhzR26C69v=R-TM8H1W3x`w^@Bz{kj-7FYy#1-jH2(bg at H?sqLxb_PO{Ag8)7BMU&<4F<~^ zGYZt-63`g+^C2A+54u*kX=wQ4{YLeR4!*p2g1dMfa60Wuc`CS%f}AJjcV?HfctZQj zSGg|;RJGdfY^?@?T@#ljcxH`#EbNjP7UcA0?6d6*FgI%g+7i*^zjUJbWd*!>yE_Im zu2+*xBgJ9pty83RyAt&D&CHW|LxYp}M}Ho=InKDad?b@#3(W;2-RmHQDxGG3SoF=q zTZc7S{kGl`3Q=8Qpi-X6y&2n{gj=6s#dirl+Pen~P&Vzc`F}Q$>wl!hO6X;s={?7Q7a)r-Rk?yOWW1 z+E*KEq!og`#(^4B^+*HB&fkm!Jg=`GlqLopr76<0?{(0r#^FplyCtJ2kEk(rEw+l} zzkf%d4LFr*NIJ5||3(V;imLH!t1w^JvuVS|L)RS9UAm#hY#U5XAzf&+O-m1BWd?P8 z`4_<@QPZw!*fqgednaf9l;aL*fDbOUv)p7FMgCiNU@{rCZ=s8RO7DnbJtP(ncXO_a zt&KUGE#arxt-hFsYHu!c$+NO-WRH|6QU~w0?0P#ZU4S`9U?g5qep+6YM8$>!wWqQ! zeK3%UO?UYGr_kwr3sW{cADuDHKJ$;C@~fqTky(FsJ{vEn4Jh~t*}D(ueRX at x^}@Pg zz>OeQoJc#L!DWvr3DAb)q60;G4)yS<%PCn;eZiFsy9sVtt%JQd6glWIkvSLhFhD26 zu&2)a6PK?MqGMSS5oF4h+D7GHBmWk_gHqg`<6l!-K+D4&3 at d`F$Esk^Jke)FUi}5* zE||Z?Ixllu-#UOxj2?t7^NGO= znE+Chx>g at b+7;C15hi^SP9nv+c%AHWIpz<gr|P} zVV?KEUl@?Y9vkGNoO+W3rSEe at D%GAdu_&G{%}=^RPF4=e|0GNz at nDDIbMwL29r<8x zG5sr}DXVoN;jhyW0Zp=L5?>NaJ*zI7?Hd2U1n1##(?LUpCC3Gr!gBD|DgQ`OlJBC#G3(B at R|tT&L{H;~_^BjC|rWgz~a~ia54Qf>l7IRA at 1j zbB-n;5IG!KX_ at J3xGJHQnM=|5xoewW!ZzV-Qk-(Z$#1(VFV58Jd3gYp`t7hhr zq4BNn&z5N|4*_VslC8Ybl%msHm}_vl1CF_mJpND%NTokH zh%$OKBUB1?0_d#2t1KiHDe#W7&E)+Sk754J+9FjvofluK8`YNbvPxT|xsAVzvFiP3CuuP$UYDugHioy_`kZkwfuekRunyK62sQ_O1E_=9Q6~Na?OFW_>o$Q#S8EJkkaMu9CnanqE!*{c0_mU;1O=dP^$*I zP;#5rO~EAxIb0;RkSM6>HxiCeX^M`hIIjfSvlluAON2 at 9STK2hGqb?Tm*I&UG at owt z`g*spVa_{&1Rq2wb(Mh+XiCXuQ5 at YY56r)2cF<^QZUv8pU*n=u**M0znYBgC#!&MG zOf9VBRGG##5lsebUV~p|+c`}l0>*{`w+UaYCt?KpZQ$rkw9$T&r{MBj|7sDqE3v2c z3e!UPzG25ncx97aU9WN{62`I7r$V3gH99`!XNac&iL``s@$LiqU29+JkMBWau>S0! zm%>v8yhJM*lx9k!u?r(8a`=xSTtT`CYV<-~lDp#jm2MljTCJ}p$xPMjZcuEQw7MMd zdSdp@@3xpZvZS)S at mc0AkdF6BL%TCn>{*mL&3)E9%kJ52IjpMt?(-rv)$RnjY@!d$ zZ72!eCBLX|d~1mKilO`oOXV?(_~~gpiR+UsU%`g?^Szd1cz*@v*=Q}o6v2K!_Iu-5xFM^KWPaZw6v;*xxXH3uRURN|kFCWSecM~&yK_0pSRe3=0#{l7F zLtNp23vWRm7}*d(BZ>DfqC-sLr`sTd9^VTGfFJk-kBXVhZL3Sch3^-r*d$BI4vg4f zkgNm9Pf;yA%yx1Drmj|ex0Betj~uN;9rBpe9?SMgEC4ga#vP|75Dg|Kl#Egyt79;d zPYniA8O5VH!%Y2LjG;v9?@WmF-J>*TA6`n at 9a$t#=teGFsQREE&sY}2JM1`?wK&J} zH4X>e5>Kb))}`8EzX=3?`u9E|@oew!9*ZMyQvHZ at xs+%Du2#hP4O8u+UwmChX8p08 z_T6`F(}Fp&Zv)UIVqdrZRiR++=d_jT^jGrAVqNVvpQvN=?IsI{>%>th*T2K76eGiR z!zN1=CR*Q;W11OsI3oRtkRsF$U!6KI8$P;`+vJ~hOF0b@%BRq-D|w?<1`S1@$#W_|A0q$M=(C?%j>}z4b%XgQND(3$1<`7T3oWVljCYxGLpel#?nu8Sn>L#B*J?Ic>)Vs+#3Ff zuVwsjnXq0Qo0V7&Uu|nFIYsL%xhygsWPm+!>~)fo;mGrc2It*S+B+u_f+PD`uu?%~#UcljM5!er^S9pyF# zc)N5IVoZ}?b4{mnQPv2)cW<6()zjXEcB!#PVP(aX1KQNHF1>~%>y;0qyZ)`a`r8UH zTRI)El%rtL$>u#-%rbw|3 at h@y=x zjn-dlc^*0L4Bfr3EB57IJNq`kNmGCT&%ubFz`*$6EgO at GMKR6C=Y;eiW z-htot;&dCZ at U5&ZU6GzoNdhH+eUYGz{Vh5Eeu9wa*t<$-GnnE)C at jlc8g-Lra``0_ zQZC=XcUEcn(Z^+c)-U*i#HPo-*;dXz- at 3bz?{w;DXEM(9!MdB|g)?H!mBOZ&YxeEi z-M;$^s(cLbBahRrPI{_uzVG&+UkGP7 at hgW@eQLK$za|GyaTV`0Z<~XfgV60Il=ce> zRn&Fy>=9ju{RKq}^Hp#zBHslcPhWUetqiJFTkt1=Gml4Et at qtxoYwB9dp6y zH`L7w=kc(nLwv>@NKmojB*sA44fm#x;B_sBL9Y|wNnlCil7jRRLGcjbKwzV=%zxMB zXbiftA5Vo|)m+kw$*^e@(15I+=UM_uZf{z>FOWo%PJuwlMAkzL)h9r{P!0Vr!>+&3 zwJ942>j2P}>+)s3omhy&4{;i$1oVIw^h~;y2A^FBETv!2le;tm=7^BKqa{(F;Do6A zl5 at Hrd{#SUMAt7{B{TlOotVWkJiing^!c^$OQtCo=-{_F_FJeb#$<=Ool^1A+6AC$ zrk>+{9q&p7PuuosIMCVQo?>E&xUsw1=pZ~RWnzL&L-ka**13N|i#JC4n;xr6|D>$B zMVd8za1~yw(P70yi=y>HS)@z<#HhJ>@jsR5-6nb_VjBLY=9;M!={ep`^DbBMv~C}U z=Oga&JOvP}quN#(9fs$oj88U%=l&yy at 2ABdYJVX6MPzvH1+=&Z`^DGbw{muuk}P+_ zL#utg{v~h_usqEj+gu|vD+Jh8`JUz9fOo4hTUYx>xwy>1Cia_mq0ilub7O7)2xY<$ z_9uLo+ zR1t{0)Sui;=4F#UF~_bQzblQ1=AfSEEe2>bYE at PRfAfp-PO?{6u!;w0XI60{oDfJ- z>}yomf|?s8UZaVk-n#FQ%_{>p9!5c-HIz{@F%o-PY6kX{Uz?2A;w(5xx2+?;ArCi} zOLJraxW$Fwf}?YM;e*fnh$lWxb#aN0)|&NCVvB1a>Fpulj7}sJjAcQOxQeqZ0G-#or>a}@fU!(t(RdVamjQK(tUX7ZpbT+mg3%Q zLY3nV-Z7`|cG6$T=X_wcutq%JQbES!_X+UULl^%7c!BP+|MirM`@FHKfLd~<^T6#k z2cJ&Qy6!%C&$IEG6Xkq=P13z?6a7V&K9?%S*jl{5bMDDGVO?hd>NUU(cI8#>=@$Xz zEkaY2G;jbK$UzHpDFZuI4npu=Pp6D|)K?-=89Py&esJKmF|F?Io%K?YgylBY&^Az? z*{aP`R3aaUcYRoN at bP41NS|}TTCW?iqJC!mY8!U4PCe_0gg$_4wW9vPyT}zaznon5 zp_kPn6joVkz)IO4w!sW(`3qQ-Akamr{0Cs*Qh4Ccc+x|!hiuC3BZ46WwfRJCl6{k? z{8eTDXxcFxj+Ua8qE6AQOTK$OREzDLv`@_?+|-3hDlu1_P3MnII2k&ah at wA@^zb+( z;6-BdAl{covDGUZIA2IlI2nSKeb-tq`GtF>W`oA}=c*mlujpRw at doYkvJS`dPHGuF zCCCYE475=9Ma(j-+V+*RkYh&};EvmfgO{8j!E9}}eP(9p>hYou`WZcFW2 at T7m%{vn zrgSN;Vm`!t&))YbYg!xNi`#NHbuy>}Auqfm<-B@&tQT at 5fVoa9dlFR1VY!F~B}wnL ztR&zO3_lOy6LXSNM0Mn=>ha?b)&yVOsNQ*(iBLS-ff6;xx at LCpFs=n7y?Z8 at 8+^Tl zPld at a`YOh7jd^R5liAU@>Zmoa*d^bxye`pYX!Y0UlqOIZR`2_S#A0YcwV;j4Y)A%x4Z733!<==ZCJo1f{@|4K963 zJc74yV$d45MgWcE($vTGjMJ$}uDkDKTQ073sRp_`~ zeuo0(5#<|h;ZAoa^<9h-h7j3By9Tph3b})%8;+psi7MN4GF#DC6 zR_{z;zp_)D7?A&&5E at 2@a*4h_b2QJ*eBHQBrNNyT=Rs^G$jdhuX&FB%mbn)pzr#`R zFiHokfN-NjTG_WjryWB=Jm+JGZt!b~Ls%?AUx^{{t+X=CUCEAo$ICs8|4Z#h31m)@ z0!bwR=m25SBv9z8O7!J;l7T;SBl5NLBk@)htq{oW@!AtiRcoDk5`A4IkWocfd%mFp zk_VV_$GCGhfC+@|F2HaWq6yW8;w=lmGV5ecBTiN%3*bs_5QoHIM}BZT`@Q~PetkN zbJtMUu{y8DQcZ9-{xHwqFTleMDu56RDVEEqYbtu^u$J5FJrp;2`Nn&o+_mT2(b$00 zS;QL|5C at EZJd+IO+$?wcFujD~F<11!kNno3Ifh95Rnc0|V6CEHJr`!1=o;2;qule3 zwx~dnO8WC^pRllk08X55`fM4k!0sZIXnrGI%y8XG64Q27ElwZ*cg*>=0rPrs5m!Iz zwYY)roK%nR7doQ#SZSYH71(=wsLH!8V1S8 at k+Zy!uqOKrmo# z#r!t>?K(X~pd1T-?Z8ACcF4wdc%NED;e(LrT6B6uzw^)g z&%n{}kc*+dYhG|*h-pW;X0y>&7YQP_6Y%n at x^hwNrMSprX5JI)VsWZ{l&z6Q8#$wx zrA>b{LsPP?SUIuvr!`|l4qhb){FhIk(rbr83fKo7>M*}TvaX=RzXmM5 zIJvc-H|#p*Tp*e=%hLaHL`n;OB=ZrHh&{T*Op8vK6 at 0zFvOsXhZ=9%EJo~}QBao4P zY3;$qX_n=efpP?1>hx95G-4&pZnP^t9YF1V{Ssil499VBcXn%w8f|$9^wmd!zu5Ac zEZTyuH}aSi%9wwxJ;Q|Qo0%|T;#d(pTT|c<5x418Xo``jmSsG$#T;6rsPIB{-;(eW zeno)UZ}$1eKE39cL?Gh{{|B@;iF<;&QDassRjE9Bw^&XTdV~ z;cv1sCAOU&pfQ6-b0oUmyni2}tJ~R6_S>%Ye8#a=cY&u2%<3V_Zfs-k9w6!<+^jwi z at H<0Ay&``WmxQq;XHs1jE-9ch0M4MOUERhW3!l#HZOSnytgN_PP0;CzWDpZCH>o^0 zb5)L)TxuECh@~LV at _PuB#IWbXggSsN;77OIQtTGIWw{5#dnfuRc(yJ}3vG{+M9bYe3{v+kL8YNw^jb`>bZA+&Av?$;PmlzB9V-Znjkaa-&Yqu;Zuq_^PBBV+vF(X z!Sj-X)}5X${hF=YX7Lj>O>~0}v3=9UvGyFw8>_#S zp*1e)cfCJ5 at eB2rT@ZKW8$oqd5F}n`4od?iA)Aq0JarvhYtGfL>9zE4s9pC{hs*Yt zl7q11Jv%*Ir7qPSuuW${!yM-JPa%;A?&J~>jW5xyI at R7q?D4FE7SAe}NY_85P5s?B z6;Jjngn4=*n(p0da2`+(KcufBg!u*q;|c{Z*3{fGTq7i+qw`SHdeyvcEWTo4tuIp( zSlf#KsgyCEw<7&Xr4tfj(OxOOcsijSq{n9=g0n2f6p|+)X4&u`9Irc5v|Mp@=@^Zt z62&uc9({!e>ey=DjB#H`Tioq#D`0ImRxbt{enoSXq5}KytQPv~$3J23-K(SOf<$@Z zHfZwaPd@`L8>Cb$xTsP8$K*Y`ypv#lA{-Nf7Ma-qF)MrWpC!y_eCI}hr6`W7v3d?UgPI; zPnJ!CYv_k~SiGulKS4SXB=~TcOmY_K3OMO at C>&Jsqhc!49PYLAGH5XU)MP}r+BTqo zBqeG8&Dh2v60$ES)Sp>IB)&V!o*;s`7p#&r2|7D8+Zx*A-A-^CRyZQLcqN}_)$nhk z2m9+z8v{sb1EM;KY_e%;TJql*7FDW9bH{)GNt!2FY79RFrQ6E>@XDBc{ML%TkTaBx z7p_H{22Ko&{F8qx7N(qG6IJ-DQ}SQTt^jNHpc;q9dW%O;W&5vIJCCF_*jfwcfaNz) zaI7~~QKBAog5P$SdK!rZJp@$B*M at Gs8 z#}1>_;fryJ51A1QVOduUhK%Q&BiPXX%01-Xsp;wByw@!B3^$_-`${OCKb*@UrIlrl zKO(kvF#R)q+~=pz&d>8n3oP&SL}~7qG+DY6<6zT1;~xq*-yXei_A;oD=WTWaYiLD& z%|CI>2CL9Av5~R8FEbXkTTf0bUPG+Cs;^NPS*=4CrCP$}+(E?ym#hoXsCyc;VRNks zQ?Cdw{lTI6sY at t*V|X$-VHG74KW^$ijk(`gVDpB5vg15wxH{c~0+ZN}IBO)cqI|BX z&}+0PKt8)>;|Gq3a#XBpeH3qs$SBHZ|3nuriu77hzhNX2X#}S1j%GZ(v}iV%;K#iJ zSY;G`v*L5f)*@={_U5AwnqcWzeVa+$ZPeXo-ikQF4N#z6RbXk)AbygqQPROOq1jRg zhwqr(Z~#Y-CJ0tq4C(Eg7~@>_N3uzWrLMkdqGN^K?B8R4vKB+%smY|Br(SiCIdb#7 z_sgZdhZb;V3uLaOJldP-B*_RA at V``=7TTETaqrZF;o4$rzK%m@)(8LC`$+yE0qDv5 zc|~P5e_L4nV>AkCo1Or_3n^I|=Om-Q&1_bJHm!CdsA6ezJ(Z7&x3)nJyOA^4Hp)=P zc#(~MfSJOe7sojB&F>fO!46LWy1e3ZWoZ0944c8ve93qh%+F5s4l~qLRB%`#_xZ~s zw at pZSF~8nI%3rx?te1W|aN%cStx9apUX-P9i6@{JD6={yCXE}&!q0AnVIR`guIeV7 zP!HA*h*mCH9^*&4BCz;s3>OfmhX%khipxEHKWcYyh1J3I`EzNdk+z1bm?p!*?!}x- z|8;8;chPl5nl6?Wee27Z-^I}54X zvo3BQjo;{E*drpACZ_u_tFif(NAIF*Qf&eNw36kR60YZ0LeeiV+HW+N;9T^4+doF} zHAg*AeuUka#Hl74TV-}}#e(H~CimE0GO>pgJRd5xtP^hUbNHt?5B4pFNTLqD)$ihZ zL=3>5RmR64+iUp0jy!N5UxT8kBzjs{i7w~-aO<_n;3LA?e at V|0p6^zLc}3?_Y~d|% z&-Oyg$I7|4a0-oy_X*aX z?w85v$8E?1GUo|LJCQ->ifE$h<=!Z^(5}~+<_REU_^P_sk`yid*k_`f&6HwF{ll=> zQ~zxnqi>eqm4#6aKB35^NdAcd-ni2eX&TK6&1RpliW#aPv=qjbI=o8-L6aAjcZlW> zFDk-jf6ANVU&P}`!Gf^*8&)Qax+j6~%N?cP7yI4ZiY#sm4*F4*rPIndK*<)eA-|y@ zZ1S_IgSh#^dv9_SW6)c^Ih_glVIr|RV@~#1mW0s~46l)c??^km-Noe at abwmmP1aWX z*%tkI{4j)KNy9!NiaDQDq3Jw!m%6EXRg3Qw(N;WnFG?_1(#phA_b&{}Xw%;<$Q at aD zOOWNh~y__Y+mK=T94+Zr1-(N_U9ggis>s#_$PS8v97g z^efR)ypz2RgWY-VNyGOCqq~#X#V(O<6v-b2R;&BKHX^O$9f$fvMxL1E7 zuJIFXSUaSECDo7C_!AuWP#_W=6hZSGNgXf8OX4B}tmB at M73 z%H1Ls`~)2YPnR=IJvdjy2`skxNtSVbThq5HMC5P=t{MTu#~g at xbmyS4OD#w|N!6E- at hut8R?s`MajR|l#l zosBvmw2s5N06MtGA3c*KgeR~t!kpHWya-ADW;_BX7XPM?RuMm)05eIJeI5qin`qfH z`u{69R}23**%z>@HOsc!PzS3b`IbBWWx- at F98`_|80%TS29`*+6HY4}EpH+|%cMrY z9T!cRT+#g|bAw1>by9Zb7w`Y`d-PjUGIQRfU#!eN at ts!jN at v!3+aSAZo-eODS?4CM zGn{f#p0|QBII%o_xa>o}{*U~WAEeA4Q2nXyZg%7#m1Yzp(U_RunKv{$?Z_k=Q%l~k z-8=cgm)r1{zSSX$KaXmpDlP{tB;4?gaQ)v9&b>pPZ`%w8X+1yJB0^mAX3%|vs7 at lC z+6+ow>sHC%jqWbanu>xQPC|y-aAoLfwqwiPqsrzYf5`T>zGWm at rcZbPB#XtOek-l1)ae4;?D zxCXM<8`;`s{kLSodBzEi3UCt-f7o9VAQ9PTa z&SOKoM}}?2Ot`8{)CbBt<`#i9rvFbk+ok8GEk-}hNMJ)P}d(-y0jnGX|^ zHBI|znE6FELw`wQ+8r at 2?^F%-w$YwCWyQldv?X_pyg9`2Hav+Cii^rJN_F(x?Vjj? zWcLL5W@~u;;N`#~0?d^rs!c0syYs&@Q4bTX34Vs+RdEc9)zwcY$_QKKu&BgdXP%wf zJku50dslOhRY0bIZ0CSf_fIww9#Nh`Po`!6(x7Gr#$toj=ZL8clt z2H>Qulzmc>QQq~(Z!QaF0$PyZQXPROiEFVw{mT*uVZHoI!P4dsz7_>V|Hpn=pII)R z>`kf9V&a2}3J5I=a|S5{?TLJDaZGChO|M at o{z`M}l at g-ew+#rLMqk*Bn47hp!);is zO`$Wvv=khLaWAv_KlKeh)|+s-E?5>#%IM)QZ*1|MxLL-*Pxf^3{{1V*GF~?|U;-x9 zcB`b8nnfQSz&!CwHw6+FlYNHlQ5JdYy;I5Fgl=KqefIoI^tCRK#vc<8dr5cd93*<1 zR(z$rRn|!Z&ODJKJ}=jUbNcdU^7yW{tot*LYl4+x%6ZgfXnEP_4m-h5O4J1~7e|h2 z7ovtjRS$m}T$gq7Q)ad!EUru!9xyD~Jq#H;qpF}+j&FOlUwB+hveu=Ratzpy8oIWu z_kadJAv{h6FRhMm+DnV{J3H0oU7ImDt3u_?YP-*?4vm{jxve-TJVHx(q?i`Y)k zE%3=m_r&X4k&^u1 at Ue*YLwtkaF%FvbJoEa1H`Ht)QCU2iiH(4pyP?5ppUJNe^h3m+>z2Rw5ssgmvktyS-6fH_3XGy z_;g|?;o*+sJ at w%8Z|wDN?DcQ#^>6I;Z|wDN?DcQ#^>6I;|4Zz(et+q zvrLp{wd$7r60Vb57<`C`76^4Kf$kSk2w=!Dv*7%wDMm`Ad9=ngxZf@$yk~1^_P0SF zu$1-WcEv at y3v_=5+{TJnx~zBQH|6$&iiXeSpJ6f!30i2HX%gfq$_3qf@)EU&oQP%w z!%v29i9XwCg9jTGZAr7;aGZ0O&Mhz8mU)ScFx^^x8NBqYWb6r1LP(`F??}#jBW{CV zxW5>VHG1o*Bh^f;tnlAjx5 at WIF|h|yta$X2=&J%=r=Ra^j(_t06pqoF>bn8+!E3&- zbsOu_x-Wsq^v_d7BLdFuKTT0otgh!oth5GUGAvgdqDaH=2Z;;Vx|;_?@p^H08>~UU zE|ZdMOWcQyy{vrGDyj1SA(PNyR!m&BeMC0rzgRrllct&3*mSg=rP3V0#m`r7UwnCB zqn)9&1?>I#hY9D9L?iOlwu(WV>kWKUpDC4!v7S8RuLlXT<2N zV2%_%Mjeq{_>d2V7dfK{0=Hecur;t)wxWm`m;MnJJ-;g%g&u5Y3i54fPj(%M9!>*} zbP^BEKQBd_!PtdBxr2!V*4O;t)xln<_RiDh4>y+Sj8TFlxW)3o--jOaXUg6vX$2_m zB^IQy9PhXb(B?7qFWiOL#LKga$dyUrZZZ6cej8C*8ibs2#G6=f5Y?Q{ZH at 92y2Uk1 z0_os|BHE~F1DTb|dwv+(g(_UT1d`rogobdmg`k zI$JqfzoHXsaDRyohkmKE`q61jWjspo8pOW5*>=C|0_?cAmMnh|ep!~Xw(ja7Bt{K= zjfP(-7=@7LuZJb#dYAaTd*5}w`{lj+(CI0RqWoe(J00J+#Dog!RvIZcEdOZr!QR5A zS1p0s3<$9s?F({F8y=f5Gsz-gAP~w^BzA}*xntLpC}RBtR{dN!6$4{+t)9Pg&$b*? zU(eVPkOLp&aEM&w>e+Nv2rcE1Xm3LJ(dH-Vy$N%psnD<+0`DRQNH1YwVn~z#tL_DV ztu&Qu{I=HpvJEBqg8y?Yj>huNO6puy=$6UdO!QAQQS zV#P};hYE8&7z@})FV&hnq{Ab*#BSG)ijy~N&=)2uf2aE=dR+j6!EYxg*5ChZ1l5tG z$US2m8K|fM*6g_VZf=|*Pft(Iext6%Bx>`FYMuU`p1h03C%4s=w~*)OXXfv&6<)&m z5X)!KCL~QrNXTy)${E@=zluK6t;hAxT-*cpM2A+o>lhEP{t4)+fIlrIOd(7_*HP}u!mrc^pTd2)W8<)@`xi+>Lxna;L z0;pzc5lXkIcD}zIN at K<&SIn_L)9#kFq0cL+yU8ktN-6$b8hg4mDCncSK zv_bhoV!HcEb0HW${~-KlJk|c_;L$GNtk&@UV!?UefIVSbDmMYc0YfxoGS9z$AXv(3{YN^kL!0*2_C;x|7)bORZ^A@#$7H9cUnJzXAK(eJsX58cxTgxZN|N#rXjwz6kRt`8!xifWEB~=H`cVHyvI^6 zJFIP8iR*`6$qNjXN?p|FHshA+`(5uFPpi)q2J-^fnfJZyEfd+clwf^cbL13nUg{cm zAa(l+-)P!Nm}|_P*?js_tMVT(-+YH0y{*RJEq<(qem+U at UoR@KOiIUjAsZn7JjKR7 z{|%%~*k~r)Y0Yu3(Y`v!ct}xkQ~6m~o%uAySRc|v1|~!E#&;cS7^zn)TDl=vYJy;j zW=_4vL8MHDquHQ6#|3I?w9ImOPcc5DZXe?#1JNh=C%U=|pq31^bga zJH=e5LLU9eZ)oqH*C0SPK)LZ7sD+sS)-T?b@$QPwH>fLgRG?Aqfwj#XuW|R4 at 4#@t zVcY1Sp3^()fgMa6lN97{eMM$VV>^<)Gz7_K1KcnT`RUBl`ATg}v>L at sX-cfhRUa(8 zEQa)g+|H`z%o;09R>%MKC2&fBj4 zHX;8tEA{00(f?l$as0caAt}*T+(mlS?~dat|7C>K!v05d^1pZXFDG=%pr2U5O7M>8 z at Q!G>j%fd6YTE-5n~KOF;hzrz#WNJ2PvmVTRN^UR{x2`mDMzA%&I`o at -q8kka967$ z*j{hJnP|{Cy=V}0iucL at p6zhO8Lbo0A7nxD?+kIds54IT1sb|ljz0 at F_|I{7y+xfH zG at f{?^PT|qys~_s2bQ{8^=Dp3ojWfKAPWbce#^oOrx0J$6|eJ!iS9=J%Ru6+y7q+4pTP&O~B%4$Vojic(joP{=eWbIo?6!cy(N?(lV zx2TA8>P9prKF2A%%3CSrX)K)?a%{9zgg|IVkvFu);)4m}T`4^m^#qwt?#JDAUhsOt zY9 at HUk3A;#9yS)kdocoA2ST2iXP_P*_(dc6fZqm;q|U*>#n#{hOD~n8&0a+u;5KU z^A&*`GTSlZ4-GDck{;lvSsP{3gCh$34%JFk#wqMa_QJpg)~#|?(TU&ZI?ifg7i at tV z&OFqL^Pr%ySroXA262Uo_CaPf;V$ZwZSMkCm$q3X-mlFHwqN&;@irLO!q`eLHgdgf zt0%lUvhQxb^gRh9NPe|jzJ6RApT^%{G!JQ#KHG?%6>?I4%5kB(mt7e1dnMM*n(;8X zb$#^Orzkz9k5;{1PLFsxNR1b7I{hXQ!zdqQFSC2aRZ2L&T-M4t%_!L9)=AN+!i0K} zRoT3is=FkF%7$4L`M77YL2Vh6BK=wdB(LEk(W>ksgjAQ$co#kml8;NgI?MU*H6_ok zp~^T5P$I{`PP5>|4zM;UPHDCl9;`Lr7`^rGqF6pUYxtX1C!O7VVVA}3 at U!$%rQ8bB zC~#a&9tgwU3B>hnShqlwtlU5x`?1*~e)CP7xb z;tN})Hi)yahBScQDW(1sT0#X7$W*B&U0=v>DUlw at bh$8_SH<_VlXwai+g#NDyCW- at 4e zADUaz#|awOAUN$lv9Pg+q_g{(w|7MgjgB7DIfnl?oZ!XKgr(oE5GXG?vK1b7{sQeolKtvhJKv1WAnN(8OW8oF3RD9JEMrE5xzV*~eP(NJ+KPvNE$au5mxZcUGuvgZy`SvAB z5l{=3)>bLr9VCbz>8>)|p~9L~YwTnHMvvgt#j0_E^C#!761b)QRhIteD!=vZi>&0IzV1bWk~wz4vBvqZ!AG#Qkg zlG5{&1rOo%Lu~no~Qnun<7Yx_bTh+b6ozjzAQc=Rf*~Vj* zp6YeQ?gu at B4*kN>D)X~;Zy^V(gL1EvQ_?-_4cC@>dvB6-R8P3Fw`xz*yXa?tu>Tv_ z`;c+^_2Fs<+~E=2TEdL at jjw~`i2d7JHuZIAdkd~@06Obxk3k2x8X)PzZwAp4*U=vR6K33~o%O6@^_y>gYNPN)Tk- z at YMTC2o*@-4wW9Mo7uH#;_}1{MF6oAxHjM?SW%&$Mz*E z>h7mRUh2M6Oxr=slR_nafdcAIZml9hBV at v0Y_+V{$5_zl20rA16}P$n?NH!};_iI6 z at Ga@pmw3CoaZ&J1Qs>Ki6a9iKZk3iJ#BOpG(wHurnCQ>qTJ%l*O=b@|UgYfQb#(g~ z?~948+b(vIP3|@PLoUXjXnogSV~)Ab9oJqdJ1Ky|UXxtOM`AOjQp@`=P`EE$uzy%qNFEi}j zK!{1}q!ZiYu)(1CQwZduuH=O;rS$fwmH0nDCVV{Llr{hHYx^F-=HK)@j5i#<{VUnM z#(RGYH9;nhf!;=HZ^uj6fO*H%nBLNfs>9}O+Y7StfyQ$4uM=h0q-wfeO)ol+^-`jH z^MaWA#q>_DS1;ZTCvxh0b1!e757Y{U=^*MtmD33~!4q^(Bya~Fv44CrVYQAbrUM7C z+ssKU{cm?Nb^ARnSM`ne)t+Xq?YCyW3ZmyDb_08F$Zkg7{+_AgBmrl%3Sk?Boy at My z-ykC->6p(NnJLcmBOU5QOLmX5cV7YOOQh$Tj}&`Yf{-!Eq19LaGFVV~ynhP4PA)K|>=8x!rO%we1xb>%FlF)lNz`&A6!j|WDY?%qiLaNDF6UGDSLYfpD+&-miqDAc4N4GNmH$1_E7Qk!w>k*T&Y1ak! z(V^SsAT=Tx at UF&zV`9)HPv!aC!huY_5PTMWO8%9|-f1GLL)tBoQa at npW=P8TO*^IR zCF@#upls~;DZ2eHq1pgu#py;?(+9n==||=VzB9<-2#DR}fPc80&s>amNI5HN==Q=# zO2aQH<$S>%znrc7g#X&iOF(omCT=6#{Pfh|$p63w{qd=I6xVa|H5xSimfgP%ycVp^ z0{&J at o4X_SWEaf-LI_FHx#coAdu~~Vu|B$_I z1qp~|6bjw~xcD4B(5F~(zLl at qK?1V3$|nHkt=i*SJ_2{F3ZDHHJ`&t-)=&S at 5^#<1 zUDZ6qi`hD3bwOxXARPn|jGBn^RRE0dwc!O${CUiV#(xpobKTSMtTd?@si>-+Ht{0* z&&l)ka8*}WgQr_6KYnz9loT4Y4WrfeOfojd_v>{U^bOm*{NA|JTp$8*?4FIjt~ua* zY3>z5bE46JUCY&x?P#|M at Xm&JI&?iCcW)M$R<*vJU`ivo)y;7#Nb0oPBUIdczL*nI zJB>-j^fL~jP!-ODb@^=r{Z2TdK+gz-g5H;TN6no_Y(m+>05o#3JLS{H&Q6AEo9v{^t;QQ^d%QvG z-9MG(kd at ZyX1clu<34$$^IY-dQGJ3URdUfV_S6-qzenC^gGws+ at g z)vE$dFC at KHgEox(!H}Wz9pR at zMfIb0!N+FpC4-xZ0SNJPK1G+C>5K5zp;zOzEEn8Z|c<9A-U*WSnU4nX6mn~i)F3P12vx*Qv&NI0DYou4$UaThWO!Xn*LH#Ey40m5OXDyMuUGzT>7gF!83R-)32_ z(2Bag*Q`M-df!G-5B7*YNi08tiQBi at 7;*V~cS?llh!_RrgU{~*N&Fw}y=7EeUEA-A z6(}x6TC`BCxI4iLv^ccIp%iy_cPQ=!ibJ8rp}0#49-u&Qhu{vul5Flr?&p2?IOjdP zANCmMLo+hSV&y-tx#n;FGuOPbG86G}TyKV%uob5p78#S%X&vPHS3f5Xi<~lkR1SG* z$ivw4S>14$@fG#)?<~vJei1SiFTOOK&9Ch=tU9PVb($BqBNF%WRXjhtcK=ysb|1B% z5Buyq at F|-Qxjq+2BOaG^>Z7&Sbi2eod3T4FEh at g$xOL`9IloWrcqi&0DRG;XGVpm9 z{jL5~9E_D(rY0F({N-`RV43gdPWh8JRH{ufLtCg?1~+LWo^jk9bs5L?dHBLcuX4w0 zzOCc7!`{Q3fNQ%`;i?evDqqx4Je5wHb?YT;tThkZT7 z;i8>#QIpCPoN6?jb36tP8G>K)Y)w&#TD at h=^?125=5ZU*n2{`kK84;=0t8xsD;knD z;i~x?7%n3R%hvHrdo9Ndy0LoxM#EL6yEB!IMW?l_*7`KEDR{GhxX4Pe+R^(B6674W+(NM*Kw2 at zvir_GUd1vmVwrDEyTw%$p(E>g=zwQXhO)kpY~o`N+q2aSamGMqnUZExz7sU$AH?_4l~ zJZ_xN^?$7oQ@;ZH*VqKyqkDY=(Hk`)tQ|1?Wxd{Q;dfOUe!tE6z>g@*ag1rf*do2N zX+DZ at s0WA?QBDt6!Uko4c=gRk9&>{j0hRZ;!}}6|UyAOaEfJ{(__^OJk;Z{BqcVF+ zR-XyD8=_bIpz6GHZ_zogE(_{3n%pr`XCNVg7&e{oBWG>Dz6WhR^HpjKyIfzrnFTgpRNll{h=f&wTTUB3W#@d*0z=t&hgCNKW$lT`2I(D-^o8%# zg08_w{-b);g*K`P%sZ_cs{?rx690ad4NR&&cCj2hkFRYUuy|gl5x-RYjhp}`_wQ~e z9xvY4B$eAgOP+9FJ7cbOu5IZ-G*$A)9rJu^kJJ>^YKk60*u)rt6emC_=M_TIoES^p z*_JmuuRzmzH0eyy!h0To07cPBPmwcEij$T{Vrd7yk`4F^CUt$F_DYh7lAHIpt6uB< zBp9tG4}+NGLRy?Awa2KCGzMkrnNwx&5yIfEkW4&&mj~m*HeULdnZSELvnyzGWKKod znFfrxadx+Ncy0Odd-#gk(3S36%KZIMzNI^wW8(nRf(kPpjO8R4tNp3Y6=*x)TKY1* zB_1XBty5^F=6wJdf!YekTS?g!%j!M84ye#$1c~1Vm?Pr!e8Uk?{7a}ywfB)4gypIH z&eqOc_jf-ZU2xbKZ&_W2z2Hx4IGN*})_LcchxwN4)p66SP7lz{iXN~XEE)n0t3iCQ z1^j!|{P#)juYBSJx<=?TF?V;7*zHe at D8Fj215U135q@w`y7CH at aC7+9yJDs96m_6@ z?(2uZJVu(tzZ1+E)O2?f9+ih4o_;&1>NM%;pud{im1txGSv#CmoO$?MPKV!86GY5V zEY(IR-J#uxm)U9U?41qpxEU2)#g-$4W~}F+ at 4SCHvkhJ?kic$}bCfKC8nf z%Fq8c=BQ at cw_Z6Z{Fq7Tsmxn4cx8UM18b?CR?cnk$W=`Hb@;oC&2PuY>KT_XXQnG? z`;k5*pn?gKQzGH>LkT6JUwzDe0mY+s1KT7{jsDy at Fe6v%b@ zAcHs at v8FVK{oqZbAKqQ8en$uhYE*Pa06&&G9(IisZV#PH9WFxuytNO1ix1m z?ciaO>^Rtv^mmn~7`qo~DZBp;@!48(3mSs&2_oBZN0aPis2i-PX=T&Ahfwg`X;#K< zc^iO=y>lmBXtH66g9~8Z at t+3n5Yoh>?~6;G9+Np2OCs~>67yc49(q0h6hHEXbpgQj z-3<~FR{eic+$#V7A#?pde(Iko?t&1GoaTSKGNWLhkmYfHgsm{BQ$@Al$(u917g2;s zRDhIld*ebLZv6M%^L0l60={qzjHf|RwKBbn^GRQuyE$3wb?E#nU;GZ8 at 34Sr34h1w zy$fmstzVs_!JAtf;-(##0xIRTaD62F?`LPG- at uO$wgI;nyWkavl at 8eb+17BtZNU{; zebpJuOU|(^a!8^IOuup-R5R~zlkA?YXQgX2U1JP-GnNhK6uAk2-`{`*E>#ii%_%qu z!aN at Vkhk!GCmCS4E!l<57z3b at cphbo;_6`2i0ACOYG)I~y(t|~kCW(9PXg811oE#+ zbclpYAPt#_b05qNBFf>aHy+10J6 at ZH0cGs8;Q0nN*ogMviZ{~EU22Y7 at 3@Qd4LvyN zox#3 at f)Vs{m)EsU641Tn`9joX%$AW|pA`;5!)+bz@`J`;RQrn^O^K1k9gB|6G7J8# z-L?VPi!Hsj+-{!MJDhuPFY{k4JztRnSCZwc!6k at u2hL-iv!z>V{XLr&fy+wI(BYj! zYYfn~g+lg8+Eqtu8uUE-9yEIz?;Gxw19j`@<7iL4M}))AN%i3ub;h9HuW`zZFpu4Z zUb0P_UHWWL!tD#dn86LIGQ^=MMn4`l(80FAdAKrPoPO3wv#!1%Ike(0K;r^n at rxQ` zYo?{J?KpsZxxk*a(59t7aDN0*hy1`#zOrbfn#X}k=VXwc9UaVN7!IwtU6gJFRU%N` zEZbK*>;Q3oJ_a%49R34-KQZ|M zlP$&2)J|@{$hH!g5J5C at hhbgK0qEm%NY4jMN&ftED0iKnk|fv&Jce=@L7;u+-D-mt_ksNq<5 z`x?K+OEzae{Ty`Ac+S5Qxr=~k4+az?wA at cFic3_fC|C~Z?rKc9#wdr~bykySe`4bx zAi8JAzW%GtMhu*wM{Hvk0gn2C!-LIUW7QAOaE=e|igJ2}lg+G+xm?~G?V>jd0}xbY zY9otP{7bF+hkETBUcSq7DCE76%f48l>?zRFb*=@{=3VFTP>qt$Cg2}jxNsokMyocw z9bJ%ci62QD*C at FZ3yb|^*WR1Y$_B4dj6$;Sfn?YB`kL?!Y+tcT7Q{#2p!lCd5W$YF zf1BE#qdwJjKb+DyfCymQ2Q`%0NL?Xxx2Y(fZKtnXeSl$hmvF>__`xg2YY4_zplE3B zu{kL>wY at P3=w at uRR%FfkvgHs!XLfcg#<4M!^C7Ey&ybndd*lpswd01B+x^vcfmNXO zcE$b2QI=RnIGCWfDgw8|M$iDkY5U8BLhl1ib^hvR+}^Jp3^~gTEjz|elpk8zkE=n? z1owHnCJ;6my02{Vumk`^we0$xFZr|YsT?*W@#FtcWF4*0kGR#^7^FS4nhbQ4t%sYAd8Zu1iN{gavV&F)iq3ozo)hjlU at wJ|9G zOl^DTA%+YS_mf|0KbV*6FHJDKWudvu4r(~?eof`LDc_lTk6pE)cz{$s^JUCu)MsvR z#cbdh`z}*HH6W3jXBW6oQ3Z0UD#@^Nvoj}4PnPK9=$wWx`IT3W?w at _B^v^Lq_;-(0 zXX?5A=*(h05xmxPcPj5aKG>eAxbhkcgJ4m$1D1mm1LFP28}hflJk!2`cpUz0NSt>c z0jz9QuY5a!%AO#C;%{^pl26#3IMV2-Ls82Ys*W;9|tlMgUxSh5F-9GxnGBW%@rCV+vZu}|Fnnj zKNGI1`$m?d1qAsw>We;E0Jy{L~9)pTn70JIXjw(SR7ojd!i66aCKnUrH#--EWLq;!4mw(TsSs}=25-AOdt~MLipwy zR2L7ANqnWL5f!HQIcLyoPRR8f#%FlH)oE5bZpX*(C0 at iDoSBlRdEpc!54;o2Zgi_*S zm?YMdv?bTm+VIBI%kR`-&psBe&O2SiWuJL?MqwX(gt8=e?jJQ74JrDj#wWUukaeY%tAo&DeQ>S;x2hH at U*;=Trbi!?;&1MgCF3XP_GO9nOU$xB6QnF6?L(F&J=$350xyHkO!YY!>zrMs{& z?HVc~EcE@?Av}Ir0*8K6b)AiC$1Kg%i}nVpt#{7LRE88I&^qe~|8Tm-BOe;a?dJ6x z9$}9_ffUMV&T$UPTyJ*wLyGM9CcQ$7g>ukH8Ph7?dRg3eS}zipMSmT69EXe$EfD3z&kY1AgX97EQ at -Rz9{y(0n{=WzxCa`|2O$W>~S4j$NL{WWoi3%@B zpFTX&Cu+YSdKwiQ6B855mJy(S_vI)jXZL0bF%_xnvMce<2mH92ZJ8O5Sj2?jN}=w~l1gFYKd z+j6tq%MhNYPU7RUPT4FlAIW*C&=1PD6U_BO& zLVlBwC;_&a+oqpg-NANvIaFwFs(IJPrNWN-*S}z5oD}$+fVTU_CY3%BqMT&qo~%cX zEDa>IBv*Z3*eR!}c^tc#@FUz5oj#y+{1`QAT%F(UqM7Dw%D5A_=c5wyM+(FKK`kh# zxknKMTvJ(^mR1L^%^aTZmz1WsDX&6(;^Xf42N*b{zp4y=!X~#7A%AR>rP9 at A7bHB3 ze-A-hJ-?x!zLY4{w2=)^H$P*xdLlY!itF*u0 at g#BIP6@!A7374`3YQIG5H4CS! zm1VN|=gaBG6HVIT5<^3jr9{K8hJT)Iu#lupiQ%*D3S7DH{aot`nBmXzUj29iC at OeE zbFzA+Pa*bHl~S2Om7ZB}Q(#r3gjD=-_V+#5uV at S%sX}N^hyrdy8D at e~o{K=%7^-rJ z_TIpaw25{$Bk=Q^c4AjFvsR9wE28^S&|_W>a%(f at 6cAua43N#vz5Bv3TNPOx2^Qe_ zIp^OQb-#9I|^Z0l~GP3L1eoa;NF?dM9CzJlt6_L4p7_%1ud+IILK7 zd*xN&*Ck at Rkw-%|5`fE{L8W=?WBfW2 at xUegc?ORV-AF5MxwoF^K?E0}F9?IGY}BrV zvR*YN*qvQJww6-OIGqCDE(ez7P)hj2lft(aS7*Z$ThMoUQEABSVl6rl*ct0+^X z#FOcD|6%=cA72T3XA2_JhH at O}RrM$z8$ul`T4YCNjjhHp^@uk8dgEBu=9Hvo&jX(S z4)Lm|Cy at 7Iv9voSF*QlZbN^je*qfpIW*4IPLZYY~{m?p0yq&?^I95?~KMXXN3UWDu z4JvhJYQ@(TN6 at d@OIe})rC80}*u%GQR>k<+(j8On7#ai7H+_Y1$0nGOo-eXXWGBFl z%lHI21;pAPtiaT?2c`QH1d_HR at psPl)pjp}O8X7L!egPw-qP}*oIG`Ll74%0f=!!H z*}bcBGf^zDQrI=A at vnOcw)*vgoGk19W19#r>0CWW=F9aLom5CI5x~5}g{u)q7$1)P z at Y7+Z4=LLH$v2O0-9hzNJLGd5o|g*tF?X>J&be}>4!(i_4G09hk5PAsFx5{IA+y}z^%X0SokFD&qS`nxGDlv*6Yj7jbQYa9Py zvlJ8g)=p>AVc-qT_=fB(2L+M%#jxU!#iM=9pOQ;jOTZdsBGfyst-u7-jl090%{Hzv zef0S=&wzyUN_UXcii&Olwgf#|KW<29%&PRO^v4;+EUCdQj9#-+ey&>p>AO8_odY}O z98v}jReheuE84?lmIT{Hp~e|kTk=Pg-IBT-((QqT$K+_K zW)DlgV?#7FS1yA3L+m6>Kfeyzh1f5Mvk8qEh zGC}piGM}1wvk}@a+oXhk3$6Id*@z{T)F;#QX-4)L5%R}Hj;M~hu*5;w7|y9{Q1TQTJ}s+MxwQs;tdRaT|?$NNn)Lb zNg=b1AB+UDOIHSbEvcGD_8;-i=1T;I^3Xn2YazIGLVyJ^NI-FQ*sy85do~r94(nFA z3~}lDPxl|NOAmwUQe{fcuF$OF-X*ahYwRY(ODg?bL7%J)jYdRKp)>+Z>^_R|5X&hf zYdBTcQua2>wNr0xTtl at fTdZO?<7zKe?aJk)U`qsz7n6P>4KJT{3=_NI^qD`J6`_(G zD$`KN;6Oc_JN{HH&~w^W(<=~Xov?*mVzMo->Zr<&OK at 8uK&3!73A>n!Rw0dmX1Lq<00>;j-zkGujtcEH=V=k&!Bg}SpjiSIe`p4JsdUOYpL zP0hqJ1tuQHWP~yMVXrzou00en*eNer5GawewDqV7Z2)vIRxHEeyp!IgQ=Wv^T8egoPfu^jAZX(?`3{}?EEXClcC@`O z%K1ClXj5K=c-}JuzKakySaiMHuMZ=WYvaqw*z2Nwyt7J*d0xNL-1~|zCJ6m`TAdSs zz;^R9M#803*ndLDM)w(NQ^YTuitR7s1EGpi2SCBQgNSzDz zpNy#`@jG2~1v&(e#hG4*!^WsWgiacF$bDKf>>??YIQ>JL+3<$ zxK({noyiS0TA4gI+^IyDDNp1d)rGP30wpzYZ#}*HEW2fPKyR9xI zE1XLez zhRy=2yGE`S6GeCgmXDlSwH^2IGIER$Hp-Gm2L`GVVp=qTO0bmiMIr?5d22F%-8;^e ziyah~W50A2b$-Z5csuX*QOo zYRQoJ`lA_MxATo+;BDVV8;tM&PJMH;N1#4(UPd z1l$hYui}<~qP%h2_2L8fM;=tWB_1*M)H`=oi0j+Y-PU>z?LOS5Qymg|P(|Q%qE<4q(-O zx#ViLgu6!!KV%q5qSWFo$Ct|Q8H$OopjkuTBc1O{kh(T|__7tqaj71 at zItv7UGX3` zaL}{mP>S+GWQYfMp3tm|<6Aj0cqx}lMa&|5e>3DdgDLXs(9x(s;cf&&cdz^i_smSA zo!?Qup>?JG;bi+SO&AxBj5l&L at K8xRoEP?G;9ba7sIsWxqjk6;iNCf9K<<9{Ae*QT-#4TMw&oNV4)Q$L2iYtRR4%K z&CZAKxq&cZt+fKY_=eAZ_sJ|V|C?Vfp&r4DhB)74bD@@{_`$IkG2U0ftqp}MFd;lwHjP(}W5I{*nAs%;IA7khplt4EO2 zq~bAm(O}%Sc->H-8yMH+8Ktk`>Yj-_X{h_=aLHJo8F`3$KsQ6}Ra*Q$;)s^}Q|5Bv zqkPM_RcQ8s7djVI6DdLI`G6PRs5+_|{zwkNA-#s=uNp?aD&t&X0u&~mLFAmi=+%bT zB;~JwLfV7Zubrp+u=q-e(_VVzz&_G|0-}f8em&!)kHYn=UYb}G?dQ>W;Q2io`Evc~ z%$lko=&-=@IC=W>ySQ^h%n}>43*6Ss;*ApK&5k^_;>cVc@`!sd3rGe7D#ARMAev68 z&MVOl=UZdBWr)0)`Y3QjCM|>v)6aWCQ-|bOf0;RWP-Z5!*K(-2+f0xUJbN(D`peqo zq|Y%Xvri4-}% z{UlO5Jr|`*cV0r&?K+#K$i at Mcg;krY at hKKYu?k%X74E-wMS|v?1e$H%kW4HO~&+bb~mts~j80u0gF5lc=*@|^e5OqUoq_wK6pL^Mx9XmXlo!EJ*$ zm+1XPd)3Dy%j!PjHkN`JU1Z8zRb3w1>Nk$}`tHZ0$z!UVhz5?ISM#UMSQoJ>yp5v@ ziW(<_wx1N!=(3!s at Xu1HqYSkc(dsON+PFPjZ>Tr&uq`DqP)f=tcu&lTXawLYzG+Eh z4c*_OUyFJj#h(LcP=#Fe&_ncgpC at A97T3REqZzAIs%SJzqlVn>p3UM2 z8KK6e?Q>qYTcOqYATQ#TeE_jhj at HlJc9sySk1~^&yO*jr&z-$HLyZfH_%&-r?Pt;p z>mmv1d!C5F_;|hI7X|3PljKcm!1g9CRzhTgg4NNsIvFLJ^y1s-v80g{MuF`sKJNKu ztB=4os=eU1gSJl0@$VE+Pe$u4_dSr-|a6 zeL1W|7yHE2$P0(&I3U-CjqeCsek2Vx at ljTStsBJQU_(R)lNAm36-?9PAfc?6osl^t zllqcNxJe&n1>D}XMch|KfpYU-&ym(`o|h5w z6??wg4NC9Qw_I2;XZ*(!ir2XBIPbNhPZo{ ze5o*iCL~R2W4Q+ at d($09uUo|a;r4xyLrI46uraN$GdUsI3nb#B>6Ry`y6kP1=QfsS zG*~nMndBFZkM9iAPF?%rp`F5}%!xvzYD-}T^9`AWU=KZ_0%Q+c@?DTOv1}*S^ae-a+1KSzX4%`Su&ReP+26k&p;bQKxHn=(x(RB-dwTNhOA`6f2|tSf zkpkz{<%rHGcSI9yjk?Bmj13K&{qW44wnBRa`cTvfUSi15FyM&?L zP#TvICTn-#@l8MOc`gAu at Q>#+@#new!h5E+B1~yGciake-C_zV4JeET*nRwJp*N5DqbP0ph*GD>@QXsG*d%D+UfSs>p08J*2DJ5x}E^GE?T6MhdBRxo}rfKXC>n*xPR6adD{Cw-6<7#A({*axj8?$klsSzrDyTOk7ZSc z9^3dRBvguNC6r!a9xh6gs;|VVLOSu4-=h)Ug!w31UgjE#jmQO%L}}qtiEY*^b%g_A zA|5Y%s~vO#zp$$th!GE!jm|$`d%l&^e0L%TqIQxb at Z&Yl*SKb&YW*DRK+^XREUs`I z-MLEk^6V6j&pNE)d!RF_bDt3>0JEk at cShx&;3l!*yS}wz(jI(zZyusAvS?Ph+yhK3s{7ufw{c31<|H6H?DNb~L*Lo*swqTt)KJ3Ol%bRi5`se|)Kk#y+v& z_NmB?RCs$4L)z3+P$A-dM#s!7<5wg6(yHv|GG~Rh$mAAEc(e#EzNngjMlVe$O0l0W z+-a_E*=GFY0D10q`7?Z(*D6f!dX09R8_Amv5)wbF-}{ve@}%l%zb3zxU+0DNTuKQB=g)5O0g0SJ`kltRy z7B`o2P^Ob~v(U@#*d5D2dCwS{Y907P>+JYZLX`aveKct-x`gd_5;e5bsAT-~Zpxy` zaxF1b$6RHy(z)ricy};fX5NX2wlf-$N60@}SP1^X_(j1tYH576dxt+*DKQEm#y1#p ze5U{L(bu~NQsIQ at vH$~fWuNx~FM~BV#Uiri7R)kYx!Cfam(Aiz{TQC at XoFmZZRTIa zC^li{+7*4V%kJ)9iS2cc&TfBLnkSQ7QIvV##uJ5wNdpa-S)&i>b!2++LoQ*sQ}X$w z4_6M^`%uEKI$GamdmPLv*uH&Y`W~&o)Y1w40C9$KkFC$|kc7}@jz0KPLo at B!5&^MJ zOZ-YelCCt>xMiPjnrCgJ!nq`_z=Dpql@^U{sE0anHx41?nqRP&6F!;CYQ;g_^ABZp zH2z-n1?;NiOW4zi->(|;Ul(YnLKEy}h6$epw81e>OGmswr$G~!xxUBuFS#5f3xX&N z7Lub3nLnuE6An2Ymi2_VH&mFJHzMzX+>e+tRi(tG1MjF~LY9IZH;-kK-_T>Vl at j30 zUS`D<`BCVG#^S_1cjJl-=NhOyvGeG8ehmvnSEj)l}3ERFc^mb*8IVBg}A z18?iYmwR;*cSg-$8fzU-8bvTNVZE{8vM-J*sFH2++=;&nz)sQUR7hSN8I;9Yb3+|- z!q-jHpO2Ae-Ab+3#tt~pEq*KE%|s}8qaG3DM3@!Y9M{o27;}h1ueh$kamFc=+=}sj zX3+wu4jw2k-P+war_sk=Cph at f)Ce$LTp;82s!Q2&Q(h40uNTtQHW2E)HgpX8?xDU< z`lco|j9kb=b?X)+M=+cw(O6s_$mR6Kbq3a?Sy_6QN8kwnDn z*yY0{2bvn`12HN6xR^|Rfq2uC9hltLRVSKNQ2t<;dX(OJJ-3)m>Cuu(uf#GUU6a9g zKX`0B_1FdZty{mXS@&hq$4n_dsiytyL(-hlA8_ss7zJ0Cln>3I;!X0<4YumzN at C#2-CJg=V7D~por z*~WC3fna-BF{0QQrpUZ!c9nFz*W&pFt;IX{v7Gb_Qb?EAu&+fMjfycNM3eb=>-lIZ zsygWVu7G at Z-8U#zVtK53*o-NUp#I2gndukJM2bOi{Z=`Y67!dBT)T->s0)Qii+HMP zs0p_~erD%T-IWYtPxV9sT~Z0mVt at HODKlyn_REbMgtgAaqG0-DhrQ^nJ>XX}omyj+ z=cFHLL}ThRQUWT at Rh7*va-?M~k)=FOfqiwgaI$xcS<0g(3^`|O>jFaZ0;({f$SiCxsiFQ&vX?bl1dj>x>xiQQzfBUnPM9S83`I*8 z=4>u;3;xJ*8KhfhOD?jHB_2x2D!XIJvBj`&|!ua{;*J24a*@t*N z4Y-kWMH_|%nqbdNz33f`+8GzTzzTU;vZgiCt_|jJB-W^Ox>tqGbqe+~;ZjCfYx;84 z*t$3Eb59v2M<}9``X&L(2)+;XXyxS|*lN^wUboWOKjI z#SMc9$WOIb)>U=`^X?+Y>I2kNk)3GAlgrL39aVZBBNy4;t1qu=KJimxMw9lpwSV$Sr!_^fx?R!iyh zVaqsAP`j^fY1N+q(G4%^(5NgP=iDCju}rcII~}3>YH{8Bj8NPI^YcSSlXo|r9{DL0 zaQkZ)G18FeMx;Vz>9c4-hJStwaCQ2g6KQwIwpHL(pa<3IIiGiMMWE-iUIadQUS?@N z58>c3I9O^1L@=g)@sL{6i2TtZ*W1^z-_Sw$&a5K141)odZ3-H;MWLv(x(mh5Xnnn*18p`ixO2rO;Ghgx7c at 7&M-+Z;TM}CTFPu7Tc zanDud|8teIObT!5EC?%2amx-Gj9fz?VTf4L(kXBXr>jRMA}(GRBgdQwm-|#Zw*S%u zqq$w=ndgE>sBh6|jz>j01I)})!=id?_7-`2aoe<081mzOB=!4nuX_$}mpiVkMMkV8 zL_z|9IOE-ovdqsW&f12Nn6k)<2*c2GWX5Ms`L3w-iIexmluvo#zz8zH*h1vSy?CX0D#uaEM129SY>2Y0%Mh^S&-*6>Q2 zchH3NOlp7_`^^^4F3+h*j)8WM()8 at +zQ|yNM(pvMlQG}pD9>!p%&AzRcE;&wk9&@n z5*KeziXg$uTOj>3_VX=ngB5U>5~s^vJ^X;mm^8Y-(spCuG?2( z>}G4BlEp9F4;mH{?_5JXumfd(J*`*9h+HGR);2d15 at YbCMj{q6I>?A}BvL!)4iDQn z3e|#l+1jmyd`|vk4&cjywY7 at 0pN$0JCmR(`rMT1H#Z%oWuZr5_h&YbU1k}>tty9Jt z&D^ZHSkJ~ec^JHqizxJ?L==#;KK#}T7<|X}k(_CIr&=Xq3@$$9(0ny>F~!A(by*5T zw6w1Kr}ZmGQ-}23Vd;%TNhw`9-rbT>F*X{U2Wo;Ei-kyda1_oQ->Mmi2%pN z=e2{q>j8p9T>V4iu;{6zz>w(Y)Sx(LtXAxiAB&Nh=AuO at vA{3isq|3M^={ zxK^)-aZtX#O at Ful?D{OUy%jAw+oOVxldo=hCjKE+?KqO at Q2(I!$Vas<8Lh=+z`n{L z6}5pi)n~z{0 at AiTJ%+79_&kU=HAt*-8TkG%_`u6^m+iR>)^^6nT8_LuOk49A at K*OV z6JF?Kw>~X6cMNp6v2WqVMljaa*p%tP&PjT)!n;s>({g&KQhm6t&75U|8xr?x-QiN1 zQ1&FzW$0;vaU=abJ(rIOZudaf2}8Y`td@*4GI6nPpw#ZDu0Si>Y&_)76Nb&K%Mejh zKMU~)oakEnr0@~l^6f{S8 at SjDX#Y!-uC{GVdmCt7iV+l?ka|)!4(+7(k!6)85X*SJ z4!qaoY_mY1_Qrp>7EY<)FvKv(jqlCP=$APhVU@@@;5`muO??F8 at 835lLU+oJ2<>zH zYR!b at TqRuJCMP>k&f+hEv#~?mlAA6pZ?|}m?8%c-NP!5^AG*p*S*vDO|=nHNG{g(eMSgc&O( zPQ;9BWE6GM2d2Qahyv7)i};bQ|I$&?eGgcOZ_egw6a z8Zi+>@6e^e+BA^B=4-e3c!kwR0z18QdCa4w;XDVxL_ at jet_wrDE|PXd1>d3Y^hxYCDLS7T-04pZkK*&244?i*H$0aR;eLG}e$&s*hfw?oBcl>gZ#gox93GZJdB&uIs at ingwg-G5jg3fl zY#489eJm{e2HpKx_6+dJCbnIk13a#GpxRkcLEAf at spZq1(8DhcYrClbw zg>Z||)N0wx0Dh8XiTTXK4W6if8uh+D(%3?)d{r&3uGT5G9a07wNCIJ_j*_~h&;SB@ z8d4>vC5 at fEv^m1afD+o|jkinJ1sXBYi}S*QJ& zpVC&G)6;hEJkBFEZ3{|eUuSSYi}iGsRdeB28=KE`4pJ58c*^>Fr2M;9RxvT$*%8d5 z$}R_5>fH5Z$j(%RnTq3$p(+AS+BSC+r|ORFq|rcINbI42EXRAd6tp7l0E-vB|KM+v zqya+pkXZp8)~2}ieBF3zlW+a%GqLYoloRM%+|(1aV8!=rAnaAp%ZC>#+|y=l(N8_W zv- at 51E;0HSPUVIBWz at c&wIK0q?4s#vM_9+uwm9Td0w(pCq35kM>2N%hY%uo1cpx54>bmqTDgB*f9sMsWUgE&g6M1WB$H*@5a=M^L`AG8FdW`E-a6_m& zs%${VeF&cS7;Ej^h%{bbi+*En`F&gOba at zbZeL({!6rjM3EnjHbzWn|$QfpzZR`6^ z3RFcPMu=6=JnZ|m_IYrVXbVxdP=*orqQ$Pua_mjNOl}0CbCVWZV(-0ll>atcLv!WR zyy4GA2uAaa&1q}LQ%xUtmGA%mH%S5!7)zN?Gdx(nLXnVoh^^jgyJ{;diI_Op zaTuFAd^F?mv~&E&$3MjYo{q*QHfFB0AI&VR?8WJhTRZ7!txUz~wD^^|lpSTvEUgs0 zoy|18Ro>1h8UakUYr zllrSdT5V-DS{VmtGg>|lZgvwcUOrkr0S+EP9$`TNHd;+%SK2qm_Ov{Lv^-o~4}W+> zxVc66xM}}&qm#gT*b;L#H5bv4mHStn5C4hNS-QG9ig0pzczAGl at NzgfTX1p<3k!2{ z at o@6+usVLKAf7}261WGg~t| zGkaH;2WH&=otdeLh`EEaow2Kgm7TGL8KA_$~1tcm2Wj zTLgYf{Ks8?aQzm6-xB|E*B at NJMc}u at f86y4*KZN{E%6_B{lWEH1b$2W$6bGL{T6}W z68~}6A6&mh;J3to-1P_7ZxQ${@gH~n!S!1NeoOqvU4L->7J=Uq|8dtJT)#!&x5R(k z^#|8)5%?|fA9wx1^;-mfOZ>-Oe{lU4f!`AUan~PQzeV7;#DCoN2iI>A_$~4O=q{}P ztn at Ime^}n(@vx3VhM;B>2?_PvYgwtcLa}zK%9i@?o&W z>E|Qr$_k}q=e0YJGW^UyNWj?8S;fU0RU`k8tCoO;Q*^!4z3xY}%%X2wbg4_gH0xuX z*lg_V%Ft{s2uChQ8ESQHUh*Loyf3lPz&0Ej`3s3V at MR>|q7&8=dk6TZJlbl)C3*z` z;j2x}(C(|g-cGOsD%n;&=Y2lk<~%XI-y^HXm`UsxNR6PJ1(elnBWLAsQIIGPYLl^` zAfnBy*K_x2;kP(Q3vZZG7Qr6r$1d_$IG2kdY;xSODRQJ63_QX+M}vSumJRgj8rxQR zrALHzPbSz13R?qva^xm$wO_v<^k|UDjC=a->8L3c5v~VvjKHUTrL4d-IZc9AUg;Fl z!L3^67?EH+Z=L4~){&UKH=18)Zce#6&j$z3I&L71hN~)8X_;uIzGNT936WoX<0WQ@ z?2+lli{`@PZm=(rm6q+|PW#Cm6QNv|_szM)H9Nh-j(OtR7tm(d>3K?FHN at JrN_$-) zF(ZODjWx4ZU_zOV-&nX-?(o`Hx?vP at 9XWY1R>>F>^W&)CknhRQdTPCCqJHCL^7Oep zBJelCxAx!X$e~dm at k{NxxH(eakZkOg*WmF^kD79nztG;FGHRHA>q+yl0&fVH%(EdZ zk5b(bf4iKX7v*FdyzEnPxV>>?g70=%3N z;VNJGh4($)EZS^Fgy(!~c!FNO3n8%{NP~;&`tq-(Td!ZK$W}^!2>xGhQ?%&- diff --git a/src/public/images/addhost.png b/src/public/images/addhost.png deleted file mode 100644 index efa3c570c72182d6e5897bc53f6300114fe4d10f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 789 zcmV+w1M2*VP)LmCZ|3Q5eR5HyjyKGQ!blMl)?y+AauMG=fBl6iAykMzjiw7J(7{0YMbxDhMKK z6NI#wCQBPq7ZLVFlI~NHC}+^n`+3eix5a#T=IWT*ySnGT_x_&eJm=hVjUWivY#D}8 zHtsrkA_?39egXF~BjaOb&uNV1r z__6>GN1?+*Jp*83;seVo%d{Wvpridr$#E+65-BB82&53J&aXZDw8o)+Z{YmV(siu9 zfoOCmlapVWn*Pq|Q{626S;Vnzgb+w65JHQ^{znvgS+>di{49+Pd#Q?4GdDX&Q*#rx zZ6lE*sh?*Vvv>G->-_agHnoUv^wux=3N)I;&fH`qudA#Abp7n z6wmj(z;oSIxML%wKnjT^RsgPS>1+YW4++BjZySux)%RKV?-`%~t at 4b8O z*?a3uTTNGWb=7pw%=z>;^t+rm;%B_iU|?W~k`f|{A4`;v2^|*tW1eajIq|XhSvZ=w z**RJ{eGyh-O_>*i{Mhfo-ceP}J>zV4$|isb<%huogd9>F0hAk>>$TJT6$@duVY2Oa z!|$QZU6OMke<-^SWE4FC;Kmjz(MdCdG=HgLbbdn3Mxsw*ob>q9pWU&HgQt2SxQ~ke zl^&6Md9Fqa at 1K30R{Y6BNz*)mgo8yjGrMu}k*_S#zC6cWX75*rrBOt0Ht&s|CC{V4 z+3}SgHFn at b<#Kv&+C!>ek%3Az&-><-e07^9ev6kK;6hKCt-*~I_`cY`zbaAA>*I(0 zRurwDLf7;PiqE>uVL=2ueQ7NAeLqgzaGj*U?09W}WS!vqwqX^fpN;(SSc%gbgPe+(@K90gR3fm_%**q;#-xT zvdew(O#+>^vHa;@*7p# zci*U5+3{xH0!R|dkMtMd?b7$1H#0N3&hLq|N%H(=d at J3YR?d5XnP*#b<@aqI(-3Fn z^Yh+kQoJ)ikGiHvto;yH81-KO)*Z9`%SrPAZ6CeGb4U<j?7i;nZ2FrncKYP~{gGPBKv=T!DZv%|sq4{$zQlm*%55oc_I8NP?X$f# zlMV9HI7!R%q!A~#@q$rb7svcHtW~}|?*O!Fp_BEt3C{o)rp}_dkU>p%x1lCjx*6*t zLS6K-*&@e0?%EUq3vNXV0~lVY~wf|Os(TrG)sC+ZMqBoT;{$vYe!p at 0jg$to7j zEw=Jwg5t|mPzMma{DGkKf?Jh2$m3AI4gHeMItcj;7#?j^csZr?sBVh)`-*TNWe9}@ zSBOJ+&=ht_sS<>LqB0S{*agc$P;2VG&TK;+utgTNg_3u&@x=~k0OI4Wl}XIrgS4pQ zO4z5S1~=Jcp|*IL?qt*I>+~M(S_Sv#4W3B7N7}rumtXcelSeuf6QUOAe288i&}Kpe zSR$4(o#8i^6E%2_SGhO`kzaw6;ywq8R~%vWPdmy6<(ouE8zl>5ryD_M;xp}1!n07{ z^0`>3lD8Pfs6ZV8ndBxei!cNmdcau3;;aJ+NHYyEb`g~^!k=nHf2DN7Enzs2{?>%} zUR#5SI9meg4CW=yCdla6hhV)QIJ{(-cX;2 zTM2YAyZZ*m$wmkS4=pL+i}N7`Sqa{>V#NK{5p)U?a?0UXKp6~K;fgViry~;oHGw`4 z8;8#--HR=fv_!EzlFinOJToqe>n>?F>Ov)vA-%)9l?0a+0oI5Y4($&1CoLYXM at ALz zDMf`jW-ia1rwQ6o|6|x=Jx)^)c!CU=Pa`A^EF(TmASg}Rh)n*5eu{Utz}%oaON$Nv z&U~+6{3V^CQE`xlCM3zEWYUtU4iBLm8h}rHMA&BKTrOOwNfLLrktnv*&CAQ6i zp at ksIGKEHc>?S&8O3i|*)P4AfAkGRSE`DI}11lP`jw??45>NXY&lM}hS{g!ziDv|E z4 at Hb8B=6oURY6V>442vB#q2(h%-HYk}JU~8q35#zc%?M(On&{+zQgo=nikcDoH6van zQK5!|Grm);s;}le{YPpNmyIVt%xv-y0k7=~n|vZ^ubI(sxP02l-P}a`ZftB1iX)ED zcqX+MuyrAwd;P>G(_oX at zn?ON06M-${~A{Y5HO^+{I287Y0+#FqMeIUAkEa#P$&Fu zlcR&h+&7$p6vRryvXo7m`8q8uXTxRhG;i{~Y4p*|3316k*8B9Hrt>xnCT$&EE5BN} zG`2hG5M06Tm_|71NtQLJ%#kUM4l6R`MY^woOW9E5o;0KeN;awkssuGu;Y4OR%;)xV zS6=>*#&ktAnWTBKBKc5eLg$Ua at MwqnX@*x@#jGZPAloE?XD;qhnG zJT17_`9CPHiXjX_0&eT$An4W#i^ z9*FVa5o3P0QQh4TvJ4Bp7t$L>-LzlM#dur(`iyBm%(rDPFuoN$g?|bhdk3V{JHb1)FsDb}a3)D3#Z2$*2n?1K zPD-DO3`w?m1}SLl7^{xYA$nlgFy^yM8#V<|#_w)jxo7+Dt1^s+Y&y!*6b47)e at 0SQD|Np0m*x zi?F1zMpG?QtCF-MM4?-1nJtT;O>g61r?au>BxclrO+uhzIf*5uJh+5Gmfh3P&t;%S zo|aYXA@#G!c?^~hFxl`2`GTW_|4Da41S=MuRVEp1z0SkNkZl;kjr++6v)cV$2Q+v=!#Vu%kMYMcde2q=|ryH9qv=Th;6FZf^Ms~lic1p ziC(cGXipCBiP59H3*|Z$s6fI~qcmP0)6TN)QqfL{pfUt&35qtdEM`K~uJ4)No~p-^ zKQ?Dq&kI>aV-{bJTEk#AV-Ovv{T9)7;)*F-*kJM79hAU@(P{GxSpfvfvO55OlVHahcZm>Wm7xNJI1^ zk;!^Y4Ud#xg{2Ui%{vgm(Dog-?{hLk0BdSOk|L~@t!E9bvL)i(>+gh3{34p~Cdk7E z8SZJ}TFgUS9O!E1`ZETWO$u_FK#{B)aYvJN$V=}~k at isr1`-B&`Icb{M;sW*FSbdk z{zGw^rW@|Ha+`dgfRre&oKOx8)QSpt!k-b6)KBrY%qQIPX(y1gE42mT6i`UbzoJdk z3sm+{~+kS-4U z+z=-_{gYlp3BxjdFHRAwsLx0Q3%OiaQoFl_s(9nM)k(2S=D569IW;|tM%c at 5`OL-E zwq=M4 at z*Rp5!CKDnq(e{%K++_g?Dxo&(La5OYR8R5sU313qf-WdEeT%U?g0G#daUn z3`6EK$~G=llJ`ZJ+r_-E6b~83=f$cN at hWg(ZAD^?*?@0s#LWBC?wKjqO<{kyHo1w5 zo*~ZMHc^?qrq;ZmI*HG!!ihT{+5iCm{1Kw+oS6;_!(6rPuS(b06)xNdIzO*xT@*W+CV5wl5;STX`iWmHm z&k`=9lKw^|cSRGPvz1;{Hef~UMgOKRl@*7HuTYfdWtq$mDX zHGT|Gy3^{)#7>HvDZJIC2D3Vv1=2<V3z*Y>K;9go*brnP)n zNCSGE@`Q-iP*&tw8q`k8DNo8x*R)hTOQl01$oNDmd;gVBpM003^`M%%?%C~Sl`NpN zkA9^!&E?VkBJR>Vv`SWTXA*vAQhGkZ;`0>qV3JO$RGC9F&*YiYW5Ra4TR!(pqyL66 z`=(p~`a$`mmieUCVa-gXZrN&hA!F3M-u<6ewy_(uu@`%l zhSjb`A2gBT`?1y_#lOfo-m9E6#oTG9lq~K at L{KhEoP1YnEwtcb-eBkzTlZrz^Q)J_ z6`OMy1Dp%-*(OE%SFoACPj2ngbz2qH#m_uI at uewT83eMu_ zc~C|w zw|X*ar|e?o1N zReb~1^l!TVB&L9^hywn^aI7rtU|@D9;dX^fw#{08r>N+a;Pe?n40)??fNh!K)w)h? zD)H*#)NFM5rQu0TBMs8z-IsrJ=L9B=CY|$^Bk)*!m3`sWHe35je^utV$Qhinh%$<| z#MN(nM;v`BCfrbjPKGaU9i%~)zQzSF`B?dddF|w*vrvdcpO4TdBDxn&yi*uI*Y3Ba zu5v?~XdBE-RHK;;2!i@#AySJE=f>BtRUbq@`MI at Zrmw8o8tOU;<=6{Kj^P+v^ladJ z=0q?lP?AG*OwGLbLi&4fuAO;tHfCn(yxzn~xTwKfY;lAQg4;t&{{-wrgU(J{f9AID zZ9`geIh^OtHU-}nRYR8dOgwcgm(S<5A&&isu1H;;xa9vq|A^QadE~*!U~Sb+lnFp0 zT>8}kecGirGpob7?P at 7}CXZp~I{=!zosCToCDWUE&a*n>7r4hSQ#d}P3e6RTn4vJ5 zI?O28mpC}>R{8cc*#l|bM3=xe0#qoZx)n)x%WLmVpJg~~Ej>h_b?GxEoQbN10(TVA2`zEEf;zcwy;jo1JaVWW+o zkPky+?**(AZk&h(ZJ2!>*?VAZj_a-P1c)TpUG^WnNmPrj$rxEFQ~^$8JW50h*Rdev zm`B3njeOmd at 3&WR5B>lA4W zU6TU#LHC=>hH#j?Sp-s%{DLj}r)jmxV at sxEOYCL~89F~|i5GOb+4!#&99j?;cy1?ln#k7#SLI*(1V3m+^^Kx($AisxCm>H>Iq{}$4&bpm%? zpEcb_V6WXjOv_CkpK=|WVi#W^&>`(-2AjR~<=VFls=)PJLRc%pZ8kkj`%M<4Dsior z?qN2I;De0QJlCbS?#-o^P;Q}{+flqS8_OQ#+ESkMGc#R0>w@|%41 zq;Gn|jEgdv{EQPk9&}!5Hlqv;y@*3bwZ;{xGjSSGbztCT6g5=47PJ(!CMNQ|3x8Cf zj*ZJnj*9z+(zG<^C-Im&^ew!G^XZG-jID0H80=E&p*?pPfv5(OXz at 1T!x}1j6%=0^ zjnP6Ys-G@$ z{PugOK2>05 at erMLU!bJeA`Hl@{n%@5pt8Euo1EuZCCkHOa&?D)XeJL51Uy0d>WSY8 z)8BVYWfFZ~X}q*MEaE9PMRksnBkDR6!nuq)BjxG1q_%tJSMT>(>S_FEaKx2M|t0PCR|?jc+f&xoARl zigPbU!YV3ud$iH{F8ar-Xx at RTPoZG5XKd{}1ug!j at aHj46%Epubel!uI6fv at POxv{ z%$j5MQK~9lGpjzL{4SF33tG02t$`aCbqc1 at g%chVdz3!&8zEE1;pQ at NE;^TT@@NCt z9V5`E;s}6Fy{Bifu6cQuTr!XH=!viE&!@a5^#Blq<4OF2eB--^*vW>)_T7yJzyS;5 zI<@4PUnQIAB5EQ*0;6dq7Xz>MA(o8CQbY{TOT4(*l_kmnaps`-_(8;9?0qfkYjuiW z;TQ(mHGhOx*EnOHkEg(?Kqp#H(WsdrcPp}GO5fpyLte+2S7AqZoxob*#nB at v9=7<| zDSLRvQwAyV9(}-oeLpuLz9>F9w}SZLyczx}3J>ROf1kt(c^t>dx at 3Auo5d07n&hJ2 z?D$}ROWOGz_+;Dr<^FwLV*ul!cTbo_>zFe^17?SeSw-m8ps4PR!{`Zo+c{ZR9DLhx zbKVQ;DM&`)qC8L5-Rxu`q)hK+U86(8rh*@{YKUy? z?_n2n$ylp8%U5N-H~*9tLOj}4gAo28Pc_~7r!@@&|V>@Tcw`Agcr zB741gm%DcA>I$A;!L>1g8Jv>0j>%A1tR?2#F^-DPhj6`w^|lf>xmN at Ma%ng( zMr~>8YuhRje>84^H||C5L0edjC=FY~KzrzHA^DV97|KWjAm0d>RJv(ZJV&hX4R4=g zNYV`YjaEmP?h{9vlA#Y8sDkA)!XkFuc{Q1r@}us<5K*L76H)|FQ4Dq;HhZCs;(ndv zbJQO#HZ`;O(R62 at 1dsH6ae`^W5Qh6G$QR9BVk7xqzr3r^R&TW0^V%h}?_f#_|8!LG zGbAb`*n$17t9W9*IraN?WOYDebB8$mNFccwg0h&C)uz0wokZxi&rjr5a$jNe39xXV ztqY|2=_Tt4t*Zn$Ab#m!eGaoNbMWGiFGNHgRhCG?0H;6U-&NkoM zvS>%T?fF3DmOY?dgNOG+BA~22=HT-p8-(z-PQc^bZ#v#lJF$+5e6m-}rGqDWJ-|i# z7uQImHOckF+9OT0lXw1`)l<3_kJcCU7ulY|cOUg17TwBTWtoaa7)IySdeR)Ygt$-8UV=1<(S5sJ%I3OWzjwgw+c5Y^<|bme?^ zF&B*+S{*|E-_6*Z~z!I%P>Ues?c2|d&S2Y|~eIyZLs1-jP-BZEdJ_)0?x6D)W?7;0d= zia^j6&2 at RT?5Slkx#%LkRxw#=xk>t@FkjvVmpTs}~ zB|s3MA at 9J}8s*_V)d{NsaTucJa*fc7KM$8WUAzr~DA1Oo zMrg^>mvGmxt at NqmW#obJ`i9C^XqjaE~yQ@`q<<=7Ys?+3eVQ9z(J0NDEx=e84S-O_%4otQ$N+;_XMB2^u{=Exv zl*8Q-fH8R8&YqvJoj{N_2qv?3#gwZ-SV-S}S!Xn`pr!CFedT-$CB13}Uw`UCLHc>+ zlj8+!>H2_EM z{Y?s{51(J9*N?tRBBCAPrV(GHE5{B`8;FJlDv{_aM=xFE#=BN at I-asak6B3Gb&{-x zmK_75sCD*8;WQxH^SNWH_9RIB4uH5O(j8*4U-CV-T zaq%5bt`)qsk>wn;@5i6iK#6$TOQ75%dzN(ygYcoBkx*RVH4m?={2&i=geik$r2_fy zArWI3yiYnCkqFyl!8IU*r~uTZ2ZRu-F#OOD_?_*IZ_v;iBmArOEMI62uN-dhO4xFk z&mnogB(xE+A5Z4)Ah{i~WI`UtWfCDx>$L8UORu)C^mxe at Rw8AORW5#;IU0R)_7%8A zU8?n9HcJ;Z8Yt#H4m@|a|ATGA#eY8SiK#j%g{f7h`+EzsYRW|2+PUed3v=-qC&l`Y z>>2fHTrjiYY7qOD5r;GcYk3t7l95!4!Kc1%!9FRs+Zrt_Jq3 z0_;z1fWu#nVn)q=OuuT_2~Rz at Y-Tc$TG3nGz3jxl^HssIHD&JJpT&eD8YnB|6AFJ=UXT&8ScMt83IFR0 at YV zatPmw&dbp7e(p)f6%MeKm5iL?fb&|L`Ey}79Wa$hy#}!Ma zQFvH|zxCQtT3J<93RdU-5&{P#vn`u8q@(z+2u5NO5`I!mCzvBl*rtDpnInIIM%z&1|K!IfQP`DhlE zSyC}to%feWtl((^D2i+ZZD&7G;mf0V at hGttt zsQy#7sR=D!kqXS=j~r31|2N>FdZz!c{Vsg(7Ze6FUvi!W)n}(yjgWJ0-5^|Q)Ogqq z+yrczmaZ>1+@|x33}w8f$WniPA3Y*SD6{Xyp4MuZWK7Tn8k=KJX8fMaFqg;p#IntS zM7~5GK7hJ)^NaoGZvQCS6;!N=Yv>~jHR4rIos$Bz?li8`8XVfe^rPG#lb=*%o#p*G z;6z{*`^Mc&@rhypQxybbcA7M~3V(u>y#aS)B3{aXCxEROe(2 zofjMvjpUoL=?dH?SWF{gQRtc at N7}%QxS!@41)s~Ig-g38EvtTy!lHCU2w70)M&X_& zcU~D7mp?9FI2n>N2v_%gCr79E&+%2mun8hXXQqgVny_bcvUheSf;PY65)3CBf~xGI zs5CJ1A8H`){FGap at g3J(pFrEps~+6hEp@# zB~hc!MtaVO*|PmT6cyJj#SA`;zz<%T3 at vv)wGQ*;5c8*`bbM`|4zYOLq+-5A950Rk zK~F-eU-csQ!%uXLI7{s=rpQhqf_QzOfi9kYnt;PCyKerDUAVoQGTIJHM+i^W8~qyc z1;sx?q_biW{5$G+P~EtH66xrWl8#t5g84FS92X at X@euc)7S$EG92kNa(Qth8oTuoe zJopRq-ZipD#M$iOh5t{;4&#PbBV;BWaiO?b=+luZLdVL at B28dQtV!Zo$!Cb1rSgE^9>fuoLQZJKs^`mr0kpFR7p|=?y_# zXhwOdm{0S$B2Cuz_^#acQ1)UteG;&OP5`CXq9~FZ=Lo~sm9oK(z*!9Bv%vNQvd*nK zahm6Pm0Q})1dr}5-;5qYZt59HY`V|v`ae7&<;Gq)A#8q0NnsJm0V`8eG1avBmx9kg zSpvxkSyYt-KI1oUQj1^~-&{(ekxXNsWX+|>A^Auyt2|?V`?~}O=R_Y at q&2A<_#%pz&98evhMC5qFETa|uTMw+4^n70jQqU5W zT?Lk~o<7Cz z$5xWcrjd1_>7Iu7wKKgeXWGBub=*P)W!b+$|0L6x%*81nWvr5(Kv((l-{v}t`!DjI zOi~r at JSsLoG`zqk at 6bi9P&&Fx-xA_ankz|+_+yorlro}FjEGHVWib!nAMv;1-T=eb+|hT?l)cxhEh;U)<>~F zMpGD_{1v-!&@plGXai3jjJsORkeRZBzYG>XuvkZyI3bB$X><;%Rpaf&Lj;m=O`NP? z7u>v;9q}PIW5D3uU_dvJb^VyPj1s#LEMl_6u5pN5PjQ}9LdC}ZLg zO>DYU1>O~;3`p+d1KfU0<0t0#IV}&Le+*C|ZuKE=zUUGIJEu*e)u)a&*s4cRS{`rI z>^JaN3pd_)#QLN|bRH|yW&V7AN(*BRJM%5LA9+i1?@FDu8{(gP9y5G1oqJO)*vPu} z#lH;htX4zH_qwo{6)!Q8`%IuzF77j*>${d~;_1wa7s`eGqd{i65)S?5li`Nsc)KOP zS#4JBNmeNfR^LwT(ntyS|21+OS;s-yBJreH_l^5_K+vwKtZ}uuarkx~eO;^NHI)Sz zvJuxmguX6NLMFFQq)^VNRmQ00qL*|u65PtT!j|fZDO(*hg-*zjt3YK}J}(b`QkZ>S z$nsW)%I(Ibx(H$Mm)i!BJX#Aifsq=($P++m&YZ5*slsB7YIq~i*t&9F3w>TIzPYi4 zYvs*7i?-&9lk9}4>4Mx$uRaT2VG&UFM-CS&>j?kfzj8HI1^OQcMm%`P?*e8>?uUoY9?7p8R~U5E73F ziL0>qU5ZfQD00%gS3p7a7vHR(#>!9;HS0-$D}%iCsZJ#%3q>d-|A^HW4y7F%RTLI# z@)p3V?^g*?(TZBzig&!%5? z-nlMX;wkwLu{F1q^+xZr(QY>uL)J&_GsD^O1=DpMJudU*(`XZ4gMFMrLJ_;lVk3=Y zR6$pRwrs}XJj^v$y{0MbHA|7TF~2~c(Pr8z-kU#dDdYhGSEJP4ZR5dDIZRgT=|h>U z-}^B+-Uw(FToG>dR>@;h!*tJ9eGFXmL at wPLSDKn+Tl?<*UbR at J*EN2-$nSHT+?J-kdYdx6te(hErim|<6hF>d$5z)UJ?cut%(af}zu zpnIl`@ha+U(_3OYud6tVJtGc8A6bMyChe5%?D6)>TPk-%zuC>=v#4HaC?KK_Xeo|x zW^){1m}QP01^$C%G#^OD^b~>cKafly-Zb#s2<}2;5&}i>KapyoMq7%hA0fz?X0`U>lf!WVpF4e3Gdob{x#%9()7#e>n|$#9$G|>(hoO5?&*&p->cKzvFN=LN zmjQj}k%#5tqcHNn3V-NZD$c+{yoVa=t&jd+==uw6;Y`k%AM|zqwt4!OzCOrrM14+A z{y$eAh1(1%{`-~cnblK*+UW4Hsn1SHygaGgXR|TMw8so#!3n#2{z;K;B%4vgExow* zU{8Z8+C;uKa;Y!r4~d6$(kQ!=Cd)`H)|bsPk^5hKHu=W+Wv8LIs1+*hJQ`LKQ^5Z} z`oduaYr9IGU~M1|9cmCY0p5?)i|o0Ut)P|HMs$cs&&Kq-+Ju_k-0Y;t`~OBa-|+tp zV;{^abXz$#SyQg at uR&a>{@KTJ8=oRy at 4z4~Abq!uRUh6Kbji2XXj7p27V1-KVi~_K zu at 5oezX9PGQD)sO9-V^MxW&APN5abB;3WYdzP_ttE94+IO`ULa46;@z7>v8!8~oh{ z!L2+ZiwWnQ(LDXUt%B4DAv6s#r(oMM>baWBud;3(R=CtBtW2x_t}?ACdY?5VAy9~# z(42M;?`ukK-;NPkhjnWV<~QY;5i at 5IpZ_HfHdl#Sn1q?&#ElP+8`;F}A86bC&(PNI z^%vUag{_W}AAJbtkOy`_Vs4&-HXGd?#if8rZ^@{3|AxZ+LoXX`rv5vy`+Y5m-gX)q z4}>^AX!sr0H3M2^p}z264WU~C-R-))mui^15KCP_ZzLWB(ADAKK9&>iWDLphKy}zB zGXzj>;G$-zwsAf8*cY`bVw|AUmPT##wtqmXfISOvz~A^hWA=u)d^&o#$9%MP^3%;T zj;sAqheKar`x5+pc!BeCgKylC&t5$MQ0jhCdyz2r{Ms^DF0U)F_I!X_?pGMPpk=nS zssTG_R&xBH?BCtW3s53e*tLyTG#_0TzsH#iiD0`&5^*^*CfLC%m{6L#2!)7zZQ)lj zWCqEl(~$3a;fze9<*Pqa{W&qg5Z>fyxkp|)uPmFP*EcZUKwa`0C9(!r6&q&heG93U z^CWI+5uJ)+K62%bt0OpP2o~{lj>0f&&o9kQ&=v8WIi-frE5+uv(y6IQb=TR%5(jzr zW%Z{RcT;-NeqmfFEHaY5X8Yd%s%#vW!^bwjtr5ysJSC;2qY+Dy*ztmLd>xu2q+TmP zww at aK*_NDCk6L<%tv2!a266ExpO>&=8xB^A2%Y{KFV^>Z&aorowMqAvqRgqqw*SOk zmFEA2yHJb&a#xuLw&$9-P&EB*$%$bd_A;P;k9f1kVDyGn5^fzv!-IJm5S6#q>Nc&L z_hupKGx6fvo+Om+a-SwT?k$();$icQGtO0LL}sTNhwk#~r8E7Y<2WZq(XmLbV{X6n zl$v8_RQ~%iT(r)Z-`Alz{{j3ZGS5%fBd?GQ-4r9${#?gcXl|Y7tAaSiaghjNqPmar zHaHV*g;s`$_iM(>k|E*_R&&Tqoy*T+6gRQwiZ^>)zzG+L>+6y zanZx~WMPIjeRdokpf&DjS|V~OJd812EFdJrpXZV8?)$wkOK`)x%~SD1%(6i?Y&U~d z(SB-OD?fZlu3`wsQeY=u0811Ov-*;G15$n7+i7K|sxCf?jo7VBd zaX-lT$Te`{=?&5Gf3ZCWU`h(|UDV6lZS!j$5L5^X at V+&v-Wq`Gi8_Fx9(|j+D z`FX0!s0WeN!+g4K;syGPU;Ln$14$i4xhK)Od*-%!?@E}wv8nVRg3)H*i$$R^y8}+z(GP-I+5WM{0qk~|S8fVR`e?k=rRO{@9V0XxET@%**lg}ncb=HT_DwO(3L`yj;B z(qUaX0%SAosdbe#e9b{J)U|3iTLmt<ISA1fgbe>G{)aJ^J*bd3?F) zt64oyIk6AVG5xAIfl67UuX5H?YO-U{S&120$BgUYJMedq+7yDZqZVcb+)%t>E0H~K zY2x6h3GNEd?VTrU!w2RAYWaS8hP;g3^Y1^w_E+U42H>-`gGRY&^A0Ua1wrlEn4b}n zrKdfLFdNPnPmF4c(~XVlix%*ArRx>j0Hk&;iN`Ll0(nMiJ8sw(AUy>v`@SJ6p+FBy z(ifRs?|VtJO#;XnA|SQiTf{zbgJR0~@POmZi+0%fW8HBN$w-?hK-0SIv6uQ!bJ4da zcAg`&%u0f*p$9G5c5_^e_`9d1JQfM_xTTPx570xCuWUk{h~>@E%%QJ3ejQP%M3Ap+ z*L-!_-F1l&oe#pF#=V&j%H`Cyt=~QUoayQFC*`hUA=oeSq(`k9aJ>>y|HqO6Oa5$` zY7{Wf=Pgc at G|`02M>nD~*3AwNx>H}IAMGx6=Mf4E{Qrh8)DQSl_<*nF(?Lrlv$Fm8 zQT~AOt3y?wYw#H>ookD-d$3s}#0FLs*})`*M4e38ycZY?m0& z0((aIVsGs11VFHJJmaH_)V8td$>YuaLlps;$E}5kbBsylK+;q0Y}~g`dC> z-PIG4?wQ|G(hnagm{?r>4shNbejEJC`Ncq{@r7U2eev+ at jPSXB?RR&;h|K07QdU(k z_FQ4dJ;=lLME|H7I8b)D^W?P#N#}cai98fsx5E zFgbv=n(NGZrmv;Y9^A&$*?eQQ8(6#2pAZ&<2~F!<{G%p(AmEWp>FbYQZqcq)1hx-{ zu5Sy at PG!`me0)FAk)nB=8!h}ULVoi2j8U=wfg<<)pXe+3P58uBFwj-7ZL>}~{ct|d zUOQfU7kFfVe_G8%$O7A7(cB6@;Hod!jJNFyYyYqgcGz~t$#krHzGWi^jo_DsvN*rE zu41SK*sqZ_^KH0XJ39~?Fge%CLDJaE9E>wG|AyK&ZKgM{>ugIGAAqsi3!S at WxL z_?|HN0XVu-kD=jtK|WvA9rNV0J^t5dkS-xuMCIaG;ml|f->3XjNZjgR1Dp~LoF|(U zKgNI!E65NB2$3et4OSO{TohB*hkwVfklFPs{I7hEChXbXJyK#xh|e%)&Yco#CzE6M z|AAjHTK~eYYu*q1N&pEs at P!BZ3FUizMC7%91nYeS*6GNNApK-QIUU=$LT+FGCZ-k7n$1Tf_KnR^j!LMMJ< zeDE6{M$IekT5$@;*lpwG>e5n{cp`dFfU*}p^SuPzi$bV%uLKoOn8j2;R95MFU$p(4 z0S=W&Di2N`lwLEDUV(7+s^~|gp~uIWC_j&XgdO^E_5HVE4gX7_k8s1ZP at 5Ab6et}D zJV_E7^2odxj5smH5CM)yBR*@1rE25HG#CWunC7WDG+ z!YJiZ<|&X1vUr);1f>E10N-UWCvcnG3fc(QE|bU!q01{o`;*4e3vyv$M0ys1P6bf`>tvO;8%2a> zpo&W=V&eHHYosqkCcAG`7yM!Kj{<>XDRxH(PqshKstxW>PSbDOyg6|qF`ocwZvq1` zw<<{#BfO;-Xwf<4uhEQGHuv>ea(;}5JCafLOAn?u3iAQ4o?e4jd^5(QM;u4SskTqN zhn362p!^zzcE}`~7cZ{|_A~Og&X-RXQw8q(7$7sge)4P5G2M0w{^Qrme?}@xDS7!| z%=yBE at o7Hctm8&}<5k*p at Z_=ddxy~za#9eX7zb at xV>B54 zOgoB`&4VAYlVkLC3h2p?^oIKGWerrz0xUIppJ*cFz4eWAp})JL at d@Y%8R2VCd1P)e z!)e%k<2f+sx8F8AsAKoad}Mu~j!q2lv$`U&p|TmyS{el9vH))w27R^WX?(;t#+wbJ zr_ at DPWhxIA-j-gv((JpFjuQ=L1Df()I1jF;IB_N(4#Yg}n3e at M!e#K$1#Yqun;z<= z%`Msl`P*+h{>KIR&sC`-%ZvJdJ;n0w5(g(oS#lQWP=bMhEB(h!NG0^Y+)w^nn;$o! z`7Mh8eT*Ol7zb1s2NY}vl)o$0t^V+h1tg#_xC4LTborMPS?h77IC9DV@*FZa9`Rh%ZDZePU3W?$;E60_v*Iv_Zv-Yf3) z?i8L~6AR)O&NiMhb(F8mc0cLhwdv-MRG6K$dI9V$4 at x~xPKo!dHe8zO?7WE5kUgME z-YY#!?xJ3R0)FogUWfG4Z;w|y4{h#2%|(pxB0OzGN30_6S(Miytxeb_rMeQ>3wIvJ z*%oAs^5TTIp0AM;C7^+gO1+ME-}BErFHW*1Q`cm&2@|XuKr;RZmX{U;g{&3W^ns1Z z)Pm592rX?Veo?&48?HJZQ9zzJ_F(am^7&&n{Bq4O;es-8i5Wfc%4gyIc@(qk)lb!Q z9(3fF+3G*~er#8yr0RA`;Hl~}#jqW~I0-27_2*M{bZr&{43h{vV5(%kJ;h9nY~X?} zn6dx#y&v*Dlii)~=D#Pt`4Db*HZ1bLi)nrNI7Q!}vRj4aaG{&ua;XfLjSRGBu}!)r ze#Wy0ZLczRv|8GI^!J5?RxKC1h{pG7e!&-G&(uC^Z_&pb=MHOc96 z#bXxOgBSM$0 at pIHd$?nq6(l>Xr}BCVK9fLjm%EE&JKPO|G@{fat!MtMd}L><{K4>- zN7+tLZ2tubl at BB2U4O7~^Q0ro(~#bP at N+QeqNeDTC%O3csG0EJJ|;X|56NqOW7l?F z{C|GYa?#(g`Sh)1bsO#V=BrN_JNSDUs=OaBVFKqJQlh(y$14v1Y};Irl=e52ntdHF zxh7W8_H2CBda4uuwl~j at u3Jd!=yLVyRevI*x;OXw4tJoEFF*rQ1(Z+6-vo`*JQG13 zxW@!~XFzHkl}-EiW44$PS at _-VWN7z!Sgh(A?W;V`T-$BUeC0>Yh3~BGz9G38e(ya~ z#!9T6(a49a7jQJaHhTvR6Q!ZQsAVKO%@4P!5-iz1&E9Vo;;Boos;M at pvaie$5Wc1(XH}B?Tp z5|jq%4jFm?fuS3QZWvb{@2S9<0##OHZA zZ~1}PxwXHzG$=87^|Q_4q3IqF>PUQhS2{xBH-Sh1Pa*SuZ`7YlROi-5=w!`Y(fIL6 z%w%tYsM)6F74 zo}2Sren1|!`>q$1!KYb#>b=9|IA<2^rO`L{;`C1EZ7TJ(`;!?-ox{X0q`?-^jPC(O zXKYmmd4AU?0qvT%z3hqXCb at 13G+cVW@4bavIcI;^kgh}cf{q58H!##SZh?o1c)`xE zH*IyWR}}dPN})F_ruUH^&Vjl??`@cTO&$#URCa|UL}VlAmaL|4va*@ry!^6(ZSym( zc+W73ku8X8Q^!YGW?akG6g+&gH5u5($M=%ZDZ|}JNJk{jX at 8X^;P+&%Yi?Gjx7E@% zhR?*F;eExOZ}kCzV%bT<=v`OBsxfM{7GNWG#SV2|o$A0`aPbjtHLj|kf}|s>!K>y# z7;5l%6L1Go|FG9CaocP#Z+bC4fTFoCV(jv^f&;^PX~Srq=acdMYb|UCc0+d;PBfcS znmP?PX-_&KbKOt8t$^xA&m2sI(Pq;U%P_sg(GLvF{adT+7O{=c6V{)-P(O4nNvM8o zPTuMKDwzBs>|(q{Kdt(9W~`O4L81C6uYPkEH5#E at Bex>a at FmYRo3EcMjyRF{`cfj zv0K)!s$oAZMFd9yn-?Anp|TO-y={fYA7bW`r8g#X1$A8})rZw*ZVM7lBocms$`|K1 z-oMMO;4zCvh%fGgpL6-q8}dPP5(znH0lNFmcgs9e_xF!-#Uz%Sw$FX37Y;~W at 5NlC zB=2(42EXiKy*HXpK(Nuu)}~@fygA7lDi8e9rFi;|M!i{fcpFpK_%?&gH-U$M-qD6rP4(Iux5gL%Wv{IK$<@K5Z>v3u at EE8yY2 zm31wOEOA%xDK~bRqkl at ihxCeRU3)oY%`xGWuTbsmVN=nYW1XP*<4Ucn*B8&(I-0v= zt4J&0U5lpBCru0a!EcQan%9uvS_dE;%kKx6(XNb2j(`G+BsTpEGdZ^v78K|Wb3$rgSTGxy2ypOsN7(3sH`X->fBN^Q| zv-7c$$h}7B4dgg@%&?}&K^=v2uX}5EsAxeJJixk%L(|V8o=4#Gy`2-0$mcd1luo#r z2W0mC>2>P!>O*Zxh4YKlN$>S at mOA&k)?QR|l|aG??~jg8+G4uRvBM~bI8(6lBslG& zQdouyd$}jq_I6huJoAk%lQ~vo-vUN1RrMXCjPHvmBog;{u`eAHW&T(Reh9L< zhP8akt1Lg)La;Q=?e&eUuRQsHT(ug$Hh526a1g=2d{1{`2DB`!wBp5HNkOnVpXpzN zcYrrCSDCGe82RtrBC53EKnM!64N0(?wkMv`cX9))G-Luxz=77N1jE266pZi+=27E+ ztN~?xuDH9sJKys&D8K*`InGyJpXDs{+a5{bdarxYHSS}*?RkCDEZ^k=zFjp0bwI?z zVUe|{kB)$U&6 at vOGd#Gcy(6WgYNRnNI~5v(xH4im(j6IHF at AWq zb{Gj)7whC at mg+p*lnVA#q#B2dwwA+xLIbv!y+VhP`$FhWJh5cES(?VH8oIf3AD~pc z_u5qn+y2Jj694=u54v1L^3WoLZ{oMHH3Lp#6CSF! zjF1!^;{!=0Q`nbozZ?A&kaz3L#h9zOZBwUyJ3N$@*9Ow#7oG8#-d88OQd66IR(<^y zR>C`{9b>?Kqo;ynnjPlEad3E-4cBI2mQOFB&Bjjbh8MyCzf+`cj zXK%5OV#{HVF&CV4_X;p>e2b|Hbt#TBN<<8HvM+KStuB;go;T5LXf8?(uLcX!c>q|0 zV#e89=&2k#520T#ap!FG=ot^aA44^vzX(&WZJKBn at L)1|S>)%(hx1t`!>eAGWt*W@ zC`>QgjN0Bc?)uXtXL!Mi7(KQC0 z)vI>K;&zY$``~>xHa36u;cK%`b_qZc(53E64jGe!3kOph!07q6Y6Za8qWW at rRQfW+ zn>#RYE at 6Ud4k!UCRqE0hI9{}YdK at -wa)E5==916e;)6U9OTiS7faG)NowG at 4P-x?c z!Ojg~tDjunLFNVcu<1fz_tPEP)NiW~o}7v)1Y7^dO5a1g}}+(;X_i5nE6^ z{#U1V=4?p!Jcyz;1Cjt7`(Y-so9U~>-VT)&a~+ITYY$*p-6tKhqJHs-^O-=f7pWRs zdL2$HEFEtxfIUo2_R4HIU$ z-K~26I?fT#ih>aJRY&7 at ItUq~xE%jjP#Jzis4raKPB;g3K%nQ at 5#=Yi$%@0P2MM)U z*^qvJ&m`hz6Yte6UREGLOxJ0^{YoGgPUEs=aZOjBk9_NY2)OI~l9;T14Dk(kweKCu at q#RLL&Rt{LQVP({_)!THy!;5 at U#f3;Xm zwxQRrt{k>gp&M;)w~D@#!=2g6YrpYG=u?^wz)Dy$FfoX-v0(e_3%y&Y&(ZJ3W@>H+$kzF at z!85^_0VnD+91ve5 z6N-hi1dLPFu2$!0PaTym-?d3q_cm;=Ugaxqoruuw9>Zt9bqzJA0woDW^PPM6_Q;@5 zO$|||Z-56*o;4Ouhkde=TW-ZDZRD?bmDC#|5RP~q07 at e6T$ngn?feqeD=7hkE{mVH z3xa at Rx0|5yOAk0~7rFHBkqQP|e-$(w;7nz_tezPO|?F!H3hc<=%@YFSoG&Y`Ud?+y-|$XkWe65^O8 zH&XPZHZs}?#x*PMH4!h&i`Ew0E)#OkeSBkZ56xk$sa*%h&8EZ3f$53K-s2SXD@#1k zgc;R#K_Uknt9&aCUQo`-oxp9rNah6%K-nZgzO^_wM&uk^t9eperC$Y6Xc5jh01^|b z0k(t1L?zydXPzvsA`3VUJ<-lu`&0bXq*tgwdp2!IS!BW!qxE|=#D?Cm at _wcVEAyU- zGRnp%cmv8Clp}Z)G+p1-w0^?cLc8Q_tloC-zCvR{H43Y at j}DGvXgUs{bKPm#xaAe` z2 at y=Ap5dC{q|W!}@IDf~XG4HcMHh9d0V}$hw1~v}cls^W2C&NE{f5GiubblVkEV(p zMG_<1NucRRd5u}rGu2>5b+C><+is5z3LtijAiecSfG$~P2h)0=t*JHTM9bwuh2C)L zL(8eyyhZ=`S&3cV2#*AP58gv92Szs4vGpadM5-Z0fJJM|-9hOAG6Q*xo>l9c#4RwQ}NiDHWg-6QQd_~#knZqmYi{& z;F5iXb#B(VjmnpUNB+57)ogPeh5-p#t2C|dr^~XJs#W?Bx9`F0yM}Gl0f~OG?L}4R zV}385SUeu|m+mTExoo>kUJ?6q>~j)PUK;`u$*dstAM)_m?Mk~>s``3yc<~|H%$E;^ z_ATs=z7kT at i-v{~`5yzeAOC-5qWVfrJYcI2xl+SaMSPH|Qz8REB zO~8t`)X0+GDyHAsRf+dL4FR!mF|^0FvbFvMpSfJWi5z7qB=QDFVP9{Dt&Y&@X|n{P z93AJ{&3-tya|Uo#1T%zD>(5B?Zo9ws4{!k)i0PeNoU7jfA;_7760&linic4FHSFPD zynuJj at k8>i@;XaBU-BRy at B^^~Kjc~@B#@i{0JTssI!Pv%m3HHLM0fYcw0DR*sQNzO zp-CFR>@H?4K|iVi$15EaO#vsn53Io2a!MK-G4nDblX>Y`$%7TcliB;O{Gl>7iL+x5F=gDN&D8|9v at X z#4Zj at _SX0jc!X-WKNI%9QKA-g)j+}DBFfVZrtKdhBib`DF_l_adrMxecKMhd+S$bz zi+T57 at 9g;8LC1%eR|g0CST4!T9S`lq%YlS-$TpwjxTD2v3kPlOW)!$&8ql@~7UUK; zinnhdFDg>kLRA`O7yhW#yoWE`9CdZ1)8J*6U#+4Pe*ibXV;!Lg0f!&W-Hq;1;B$hE zU)cYB&-g!-t`P>JKmOAx`BH- at 6%FkT#eX{F^yvc&`u~CLf1Lf$A%obO4_RifQc0a z4m3zG4{f17nPUK=@G-im55v{?_hSdN)yUw!3v-&a(5FP`jZdj2@?Q1$ET_)bM)aJG z1$w~GWL?nGbC#vqX59E1I~~=@o~`-jO0Bc(ai5yCRI>qKPe{Hky=N~rjmNAO3T^f< z%3WLme=(79dd-GrPLt2yMn47tAZvPpj%=~ zRd8^aAuDH*fJJzWAp7iH^Y8ASFeidMnnzyh-)>IIL|lz-{vgD;s0g_L?eL~%wSG~O zyj0cRoX4)Ljb!v>*Zp5PsAp(-UAvhHqrH^fK4NtK8Z&KLTiEHQo8fBCx)+4=(})M7 zMdJRV6%x|krwRqFt1ZvSXhPO!k1h^M%hJ45*I)sO3HJhnuQ_GDs||g|rF0ObeBzL! z*4^$DDl$h1hhn at b^$OMb9mrc2HUC;{@`N}vr<|tQSYh1^lEMnc{i!AYT1nS}Th#`0 zK(g(ImCMu4Hr4ve)y$L0X1yrM;bH1Bk`eil-{+gGWEs=qgzS5Q*B<=8*SmqU0y+L` z=BI$-!gqA1Yu83p;?LEoRbQ(!vIuPnu8EeCOFYT_xsUi0i>)tR1nUh~!f!0cNmBXd zA(%6csT!`gKX at x+p_j`9`tq)W)bo*58|Uyf3A_yagpZTb-ijp+444)NiV} zN0&fD0DYgmAc at 08Eg+uI8H>O3>@8^eV3U*mG4L(B_*Qdz(3-*pfu_Cjgv)C~4YNrE z`X at mIr5=fX*O>S^#ZLfHnZAoHT8Kg(1)N(@Xg#!&PVk+=S*D`lY2;%cZ`N$E5P+R} zOUftVX*`y*>Kf?#GO5$(<6#F$z}4=M%7Xm~VLh2d$TH!=YoBm~Pj>za?|rdCi7q2v z5rmMmsZa at n}*!2gp}t|O9mrTqPCaT=Ax2YvG!y{?ix0pMB&aB zV+iY1mMc>e$o6^vvNt~KV_%4^qdeV~9Q-pmFbh;zo4Z~YJND_-kV)Be4>Tw8mhw>BH#IS;} zA9++#DiCebXtK~MzpXrmeb-ygi5Mt*+QNf7a))G7PP{AIwbYBFGZuT-UzBiSf%D1t zRc@)=B&2DDkSMQ^RPUo5gqHrW>|l~e%5gOD-rc#z=~ZaifC)roJmSP(MiHF%O;dtw zz}cE;%OOH;|GL6T?5TJe;)dMp4_uPHVWTiF$9~|%A(~qz-_VuiYU5QG4O(k7=v(sQ z^{6X?AJ2K@`H0)cG`)e;+b4J4;D+m6%6U%TD<$W+`*;`k{CAxpV1bIWo;8%x8nxGt zn6v$Z=*&c1>$OsHydwz2?2s}&D#p-&;<>1#I7n6MU6IHI1_GmE0vtv>*wk zNOC-fM-xcCfnmzl&Fb5|x>nCF%~T0s7&`kCp#cz9!)hDia3AV{-!GZ8S;%+Oc(Sr2 zX!w27CcP{ZPfI0!F8*iPEpa7)qKO4Bp2=sKQ%IIESSA1`%((i`Q^-c9&a^H at 9iC9u z6c5neAvnw`%|fxQ%bk1#bW1m}DL2PSMIv!IqWo*=_yFg()Uxg}s8*E(^PYPI)4R%{qGbqHBWPCJ$A0836CL^EuB&&oqJ*<_~Z5Od-#M^XDf3(7yvl_lxlx2URB45kv_^5Wqa#p}@ zJNVUObPqb})hC#y0urQkNBYzt87)Q*2L?Aq4UP#b5+noEy0QnScm4J34-RlDAFa^- z#MbDb at U*H(*7H#C=jWfcMx*Fy0}at*^1 zxIE1AZJOVbQOM))ZnOJiPVp>Ic!pAmrZ}h!{DF at 5U=@rVQ4eO}5N;R6DzffSPX~|) z4ZEC<{C2i1yD8pnI$ci>kaEA$_##O(;Lz(6=K$&GEWl-KCUnrFu=YzPnUx2 at vInJq zjLGzh^m?fh)hw>?Ye=-1KKkRBk~CnWn^-j$y{wl0Y=$wz)Hy3!@ub)l(-oK9Ad;2@ zrQ?+&IG76S`|v&IPfhbSx4d$)(3`*}1f_9xKrUQJK*4Bly0PufUvrM^oBzx8Fc9_= zFEXVN$z#;TcQ4oMx`pej_wz+R_NPP4no%W4^fp$&d(M`sW(0M0ai|h!8dzIH4XFF+%`n zSM%t!Z&S#UkZJe~|ASQDuxE52~_H2 zF3wA;pp>fRR#Qja*P_rtyS;e>)1z*+i{DD9yHaV?;D z{di84MrycRODT&J^L+l~bB$o{S$l1tV1j+pHhQVWj-tA&ItM<{U8Nw662%naZfO{( zoICVxXHlnn{E%F<^&Kd at GxsxM$XndTKVdU&_t6>s848C-;fM3TO@=j9XEzz)FJseoZh~`YKe6 zaHAbSi_olar;Hb at ch$fY`q*xk71g|FA`yWdff&+)HkwjIU1im?Iu%8LB)jGK7- at Tp z at Y+q8@u6>#y);9WUW8+ at vOU8bTJg?AR-4rk^>yG2IuDQZ?qe13sQ6$d7iq&9l@@ED zil- at 0+unJPxYt#X{8PC>f5+alSI?CG5EHPSsNv9t3JqFFAfQrI#k|b~6;}6Fre&ej9}trwJE6ZQ7*_Xv=c?M5V$N9MO{aJiPZMG7)r- z;@p%usal(x9F>+R%e#TL*Xn1D;05|Wx;z!Nj-g`gtpK{%w(#oNhu(nN-v;u`&e`#i zO0xvsmUS`VBC1)Ml{Vr>(SbjViQHZbY;PUQ9wP5s#^Fb;M*a3Q`>D{S^*;AqiOZ zp at p%kIk1s)T=qZ>YrGFvv)`^A!jhSD)LJjiN7J|pUdgMaxBPsngeeWNTe;W7l?e0V zpyPVKqbV&Xl3G+YWixZAdvvYv93|4DPA zN>$q#D_N$}ny0nZa*$UiLbi z>!OE*s>J0OK(6GzJW^9m?9`xcbW at nq6f{qJJ?5muQraJy;Be?No{n2AVM=E+ze2A}uI^ow5s$wROH;^V|!Fm=o z9SI at mX6P?=y)hM)9(ysYL-Bb&UpS~ilo9X40PLUUq3+=l$4d!OdO?D+GDNz9i*0C0 z3ab=lM#p>^P67NcjYUxFZIzIvcl^$K&*n%4-u>~2 at CjQo!TTwf53?;J42!>v^S=&j zYb;tt2&2;1s5K7Kj5GanDNZk1c^avFOE!Wj(BKX4gc&V5Ux$J_NvoPH6ap+SGO3nV zF=<*mTxejQq9wA0y|NU1?o$iqk~2yeFNNB z%)06pC&SDN0FOfwCXkw`ug^)N6c z#a~{;8xrL;tNF}dHk$P>-82>&gd}wP#ymts^Ug+}GBJ2}v}|U?f<8<;Xpp5LpOJWg zI;Q9OoV`-?xWG1H4VHW8hs6!kMoUt8Ip{|)rirORIGRUv#Hc0prQ~om2j5mIH2y;3xFm|N<&kHWb7<}KF<;f+n0bZ>K zJb%WbUu`^}T~`+Z9~Ii3q|SWNNw_esiQkr8vRTTq)%lIRxctPAxAIhIQ^uTnUB$JuplYsb(70l?BIgQ%BZ_OIHsNLTxFrv;d_}DVA$=U=gm`G zAtDe%Y+CW6f?Iiy@~VgOGjZcgme7J^9@=}?0)gn*=J{X6jxYF1wBZbMx%(=|9iQ}) z_9LOW<%a75PS*uD1bD4onrIRXUP0H%1FqmNZ+zp;uV-Rfk2fTjjm3|=NZ zK{kP_g6-F)^wX9r$S9Kweoeii1qggj|K^0{x$pJKm_GV-f>Z)*IZ~8>-&S}ry!lH( zo2SV>?a{ooCfF zgwX#nGZFr=0>=+n+hpQBpyp1`1mhf6S`@&8Q;01#H)_kJOqusVhWQE`5ALn*OhWe@ z{76CjJgj{P?+R<6c)#XkbVV~j!ogN3tD8b~ySm#)PxIClZsdJ3mO8G^g=*ydeZ6qj z^7JxZjjw4;Nm=W3$nmps21AY;4dHnjZH$TT(xZCY&~_dl&s*BfZ at 9Kn*chc1lYFOE zBy at sEwZM!NipHKFv2VrvjuS5cbeO`PhFIZ-doPo5?@Ah8vD1xLsZ=&uWiTW at _W!>9 z`t3 at T^uEK=C-}BtGz4r+n4VCT at hx5 z#RA&3W6ragMfIPE8GE0JBl!9J5|;!Sev*Bg(n9P{Uap4AhK6ZA+U{bKY&J}6XM8Gy zrZfiXSPk$luv&WzaZvArydQFOV at cFe!aN;ouuUYyYg`H|y4*U9*;Xj6WCS=h&v at Q#Va(@~ zv4%Ly^l9fzNYtgvxN`Y!yyY#P(u?ma5iD|d)sfW?b#jKk9i>-2*@T<2pxuVH6FfhC z at im3=_*8&ZkVJ{=`f5~vj3>I8zE)FfC(eP6-Fam8UQel`5^Ff-lpr~Lcm(iF5=EJ9 zX`T8A9m*tF4}`-zOyq%N?=qZXNuK at O^IRDWD3Q%<$mtlBt-!GO*l|41JsjyxD?roN z>npw$eqkh{kI}S at vRJ=|Ol$@5EN}}lKz_ZPO}xlI5ZSkM6lKo9yXR42=n+>^Ys6qO z#_bmXUndGSihy2{zdhm+V at MjJy*bwRl?FqUIWqmOfKGw7K)P%^OKSW=2IEsO1hsh3 zf}_*IY35LFV{Y!l%U==y9q}c++n%F^UX$SGXfK+&Wd_IWquCx&wa?F^e z at huUdJFSX1aR^XKsuI^tD!axxT9P5xT#Z+Ub`h$6ctm^~8K7)?m2VeO?9Dxafy`<>n24M#AjWgb at Q60?Mu81 zS^tBugrW&7_iDMT^D`tN+lX4=q5haYJS#yEVNaFmj>$90L*~GLb7#k_H}o8C9d0DL zWL34&4x?WRZqX3Q-k#z)T8&Sve|k+9#Uzv$!@&&6KkB0EdiGM2tVO3@#(I%nq|qQnuFRp-8xJuh-Zr?gQapht1@$J7Fw z{Ip>hB|(8mxB2=Nhl$fe^!d9{^C}Nfbn8}Tt_gTpHv!FNd%e_4r19&P at Fjmnh(!Op zVh_+qzD%Gly_LUsyvAF_b3)nFu&R6RGO1nuBhY;pF6PV%?Y%%VhJZ~&x-ZHi;plyr z;^or4&htygYOQH1S=j-Ar=>55`ZDT9kS2SLXrF=!@c>@#$xNJn#)>298Az**NpIM&ex0hlk9CSp0xM5u7_TJ)4C za%3gEug|2_%cBCE?IzPA{H7;<*EU4aH;%4GANf!_CjpFb)!?H5Z91E75$D}xEximH z*&xH)@>q&|TWs}lPuZMI9!6chUF=SI6$n#F zjzNj at 4~3tc8<{`;e*b_}6mg~;z}Q+f;Dg|sFzqez=$!dQtE_l#_HQrC=kTR}jm&kn zL$4#Z3a;ann{o1;ioZJL_6)4X_qoUBc09aTC7W7VoDFa1jd_Yg2LsNoGluuMGQawz zkTlXI^>QkJJCEW+1o3x$-5+zkE>@N7KRz at 6j8$T8?Sg%Tx+8eTHx_ou!Wpy29{Q)2 zcE*ckB2xX<#8qI5feg)rZGT{fZ(Wnpg%rNvqQ1YKE}dh9k0xmk9x?TLP?(<^A%(|U zv zj8EIki123f@)Ao?Zs|J$wfI_-ea957AqSy8ADE6JS at EWSgwH!mxw at RhL+gx}M+5jO zycFVgVUD{I8e|wP#3{0Er#I-~0uK#J-b?y36ARsHMu)l)=R~w5bhZq|9bqskZ)kCz zbIGQ*VSkuivH at vA1}n<8_ckx+jBq!I4nHfbVu2<;N0Vs%EF3c>lY^XPh--ccTtK#_*ZZ_KeH zT9jlo8TB at Pzf3 z>e-*xc2E0B>~qkBCArF53HQ7w#Ds+!S~eH=pbJwK^JcC3qCNcIc?U#}fbxx`v^>_A zHM550F$%pqI4-kLTpv3o3E#XZ7cHH*|&GnvSMToR`wSn->*6|EY_)#feAUjK4QD08aQS?tak z at TY}Aqp8|=Du_I~Dg6aG5e?Ux+SWBC+KR5|@@J-BnUKz?c~M^my#30O$#5dEsD3Tz zv!jHx77D!3DvPb0$jPj$+Os7x1ROyj at 93o1TWTheh)ZFMb57n{CZlM&;}uyC(RVgD zEU#41_n^Pj*=t}R^H-%}8W9~?R&;Jg2YVfHUdidjya*o>&~tu9o!wJ#jgcd^64W?d z{#s8R&=Jhbbh|u9ecX(#;BIeUNK9Es6Dj;D2iH$}cwmd-O|34`6XJq;(wLARQ$%l* zrij159;J$KwUl~=nX_Jn8q_;diXPy3thW=i&@IfQtOr3zrJ@`~^E!F=CQB3=TTCW{d{IlilJjho zv}w+|kwOiw!EML<^Vd_ORIw at jQ-Bo||Hp<$6%{_Y5L(lKd7%PoYLXTrhRbE{a{VK$ zvnr`n>!2?sjYBBtZw-0-YNx>kZ_yLYL0XzmU5`$tR@~J(s||fdFLV9Z-dxvy7NEw7 zwEz^_)8(VKDbp&_taF7L8ZrUOrjsu;awnPD={*csT;AgcChzy98gabd-%U%ow~a_S z^b7B~`F$~L^u$7$i{i;hslMWL+d>jDDxPH0pUHv&?+u8BeRUGJglh6TlFxTz$@atk zVtCbFNA31;+w7Z=UVr=YS}+l+2U*;yRaG*7*zFk zH=(f$NH=7rss|HPFiS7Thn$0HoR(bws56p}rKB=TQ6#w{zycCFI$HsHSPyoV#fl0m z_o%&BPVYjTLm4v1anO&<8)#ZsA9aX_LpsNn&Z4bMPk9>2Xy9L6cXwgXAXqsM&*icL zWAduLUU;Z0S+U!*7si=O9tjWj9lK%g>o-i)1z5FG;WTpX))#$KEz;5RS=JtDcpW3` zW#KE5T}VECF!gjg1&$b0l+jjRr2>*`h_0n>89PjDqPUkW9Y6BJdNo-8C1PY^OMZKw z@(jnBqKV)V&Rre+dyT7Hnqc`n^l66jwi7H2y_QJQ1huTIU+5Oa(11=tTCyQdi8C3c z at VRdM;Ee@#ONZzS-$kE at z~ZqypUTYF2rFAHo0{#pJM^8U9m_5e=r8za`p=O*?>xS4 zZ+tnMtaw|fq$B`!&bJq1o3AhDkYppf$$~lDLev}nb2>f#5~4kX-V{|a{WWkGpO{y( z2QI?@gXOFPpsx5VU6YSL65sm3!lJ%W!^IWzeTcqUc!n-Zkt7`mB~|IUsmK567^4}r*lc&dWd?5&^A+egrtb0~_5BeC*i zCuYz1Z|ub7V9t-~P6`-reBqfB_4rEu0?B4)bw7^UQR*UCX7c^uiAg9L}hEDTeWw9fo_XVseSm1c7vs<(CYIc}i z3Ho{yz7u7nB|9?`rTkC*`jsfvlf}34xC65jp+IUkxr z5{(OZfb{iYejW5M+Cqm=+`z>=kWaW8s-AJAJoyrNQ}I zp9SHIdf4*$TL;9y0U$)eJ)o?BChw=S=rq02OoAZc{wnwqKK9vky{Piodi4U%7=do<3=10TF0qXUs zk6JATovV%0F&o*^0~P}+q3tU(8Irrur9^` zIW`$0 at vN5{Ah1m?*JIcDghi3?_3{^|#|BPd7>^`L#V4`lbDgLlvXr>H5Qxc`58y zWYIWIoV8l&Mj8>g#E7#Zz;Meuk&GMd*x`Y+{d>bStsFz2ezY;xx3QTbHv+yT2}`>6hy{Gcw3p6mZ2lT4{R?TN8&7(aiEK9N zdRE at c$FXDgqW9c_4gmEf0edD|z%sez5{X}rv`V~8{QIgbs#8kqN3lzo1M zH>6W-G=EwR1MBShMMuksS>rP3C)r8N%9Y|u3~x|}_3$SjeP$|1NLhgdcFH1Br}*0X zVc9mubHQ+Aj;@V8maX<%JspD7WCk8-0R>v1J3khLBmlm?bRfNzx#wt~@6-JLbbLKy z*;7!Q=7dYF=No;z(S7mNMY&dqC+MEwi&-GvfL+<>m}Ja*&TL(mhj;UQ&R}R`m*hvXe;U z5c`EwulGcN+EIeb*Kz+M!6!Xq8%E4cbrh1kef~B<-5b|UtC7Bl)JF+jf$x4fbXCFy zkthcL80?Uu1;+G|T?HT2rFr#!-+b;+U@!lLH1Iyg4g4cv`q`r}5L)|W9RfB*CQMqUzjRw5L2H>vFQc!(2Yy(2_pcF~6l)!z3< zTG8k-TelY+8#=cka=S?Y=GCUH&)k+a+D+9r`nu{T0V+FHw1;($?t!jm3VT(LrCw~r zc}|BlMtEb&0XyO01peb}b at QV#1pTc>P5Bk at _P&{lNZ9;=;K-swmY at ob2bq}Q z9rnhSs^{NEzL=tzth2Ue>|M{ebmynzhkeY at Zq@1Avul*_Nce^p?~$G8Z$Ew+JolQr zC2PBC=Gh-B9=dPB83e;nz->0u+hN_#^YrS#|M!z*At>zS?B`iNtlwd1XuPC$@AW+O zR8>SRT%0(~EM3g4IDMU5|M5VmIKbD{%)-ISliu9Q#?D!S;iRpLf!@wifmS$=}^d+h6Vd!(L|=B9;sQ$*1DJq7MR`tUS%=eVrVgJw$ya82%ww^dbFMHWvf^ zKS(?sBp9UsQb at 0-szER7;%-IH&&k7K!Oh1{&o9WyE5s`zB*;#$ZRSb;&diyfSBRdM zoBQE|SCofGl%I$G?}I_|=|f7~-O^fAOHSc$oe#ex7;HT~T}8RLe0+R3efT(C+-MPi} zTlu)SJ9yB`YV(Qz#reMw{YUG6_^ss3Jgp=j at DS$U7U19(e9t2+$|ESs&1>*q`2R`t zzp<;jSlU_p{r|BGi}LaP&Hi7A{$>~F`U{Bv0?a>9|Eo^_TmJtIFiVSn{Di`)rI4|NVIF{q(od*6xj+J-G1i4#AOX-A>q0J&0BDSLAs0vhG{(A+3nTy}W at B9yWke}PYA*Y~ z`08w~d_jqpK*Aap*tjbX)p2I5^7tWUemT{TGxO3#-8=(fYsA!j)A&OcRaYd6WGv4o7{ zgfQ-w1&L_Uw8V(JshG61ex at xXOCr^vWEy_^KFnSZ$X#A8B0uk}Yr2$CNe$*y8A*BS zyf$M&{qMwa-GTCMmu+9`Q)y!A^l1tCk&%FvkZ@$a&sZruYmuonxXWOw~BuAim&qjlxr zL~DB|Yvf)k;Uc3((ZtQu%kLLW*fIHR at v~;WOYvq?Y!WTJSdbVG7wVRUJ4ZXi@?ZDjy8FEKJNFgViXWaIz<1BOXN zK~y-6m6T0PTvZgufA_ulf?*gKgixlXg;XiEFc{NV8G~9Xi6)I}H%(|4#)WZFjnTxF zNsZBkUHZ|Gn3yh2(A0%7rm;g}Td?J$v=j!U!>gTn2=n=7-n{p&ivcnMP0C4LZr-^$ z_xC^N+nR_&16$U=xMF>ep-kDfXb zx)zDPhFTLqT4fx|MB3%bCnZ*Xo$KSbh_4oDu5-`MCktQCB at 4g*I{WV=fNQ&g&#qKN zee}k$t&BE+mydKG#S?77u}n}LgrXuH8-xPV#^rAy($UQQ)G{Ye^mV_q{?AtrQfW?h zg+5)-jSD+q#j?F?8Er=%2y{Nbk+K4cf>2b1qJm?=hN#-s!|1tryp8+thQb`}aA>|0 z`($y|=vQQwZNfHzRetGF6>KAm5TXJR0)$do6<0+7P z5S5-8k11WXm2F9=_Y^C?T|)Kxar=X)z5tG8Qd~{2uEn{X$P(EfplnMr at d@(TG|8+< zYrTh}&-2oeY_m%(sSH1IVPT3p^c16i7++=O$ zDq8$5sazSKTOr)wWpE%$Ub{zsX9JBrgXETO5uduwjivOD!1*U0S7)Q)bML&`@m<&1 zi at 0j)u}uS6E at 2rN%#2%W7?P70fzhAUIt!&u`~GLjFv}ANqfl0 n%)|WWz%L_X+ST3S4L!ksH^aopM6UnZ00000NkvXXu0mjfxwh=} diff --git a/src/public/images/bg-image.png b/src/public/images/bg-image.png deleted file mode 100644 index 782060e0d0f47b405d7dc1bd01e6817d8a09847f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 345 zcmeAS at N?(olHy`uVBq!ia0vp^tPBi{4>;I>tlWvq6Mz&;v6E*A2N2Y7q;vrJoCO|{ z#X$AfL734=V|E2lP_o1|q9iy!t)x7$D3zhSyj(9cFS|H7u^?41zbJk7I~ysWqHCTm zjv*P1Z)Z3PH7M{fcOU*<+q3_pc~yJWglX42Y|^GonHw=<+FuL(%z0}?U0ha)xQ3Yg zEnb{qvMT5oYnsH&?JI9Me?HUNBNU~4-r&TOmwT2SGyXaKVo%zK7?mwMC!91sExU`; zCf4u7&(O!FO}g(#pmzXy#n_&OyK at P{<=p={=icA^x3~MX`;)}?$}h@<<2dq+eMtA0 zdjG`p98Hp}R$4dhBbqksrqt0LNlD8R$!~WY-KbMfIHJ{>RS^Gt{3HrBvmn0NsK^zk zL{DnZ&s}g>{%;np0l zW?O<^S3j~(y at DwEjfP`zINcdGx|ZUwGE2-ev|7ofx at WtGw%sW9k6*62v~9cfmQXs# zyUkBJ89 zdC3Pc2Bt^dKhsqFU%*Ub$jdo(8@<1tI_vqq`6nhyX~8?m}E30w6KE3vq!6fW+u7#04S% z5~I5i7l;5zjP62QAOaxqjqZw#u6j_5-S23#iyYk_q(s8OU@#O6heF|Kn0 at DF!{OOE zJ{Fsc#rQbi8*%>5LVV#4pG+<;CX;KctE+3Hjrm2mNF*}P&o9U0%PUKXrIpd at f6ls> zBr!|Mk=ymtIdS$$WrZ$`88V{sNet^hp2! diff --git a/src/public/images/bg_menu_big.jpg b/src/public/images/bg_menu_big.jpg deleted file mode 100644 index 10597aa856e49a05b075f9f07ca247ca5144ca84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13136 zcmeI3&2AD=6vyurN^zhq6IyNBnoOo!VLteh3D6iCv`sL^HnDN#bmo>KFf$pZLi-3l zk}mARM{rR!Ci(c3JxU at slJrt+MngS6Aw8 zm7X-8oqKfu{P}@--ZG1pv|Zs#eZAjtJJdJCey44B^?q3z7T4K62+NWo0d|KMmAsx)U(e)^L^smwj at 3LqyDhz-=W^rp8PPbs zBnKd7zznGece)Y(8!*e9 at N!SR_VBe>rcB$kLv6pyoTtjym|3QN?06l+uQWSGgUWAR z+9=7>=$!`~9h>=r`BI)3^XlxAcllp7Q}F+#{HQ240l`IFhzmpjBt~~3E)W5b7~O at q zKmiP2q%3q$}UMt31D5CM=F-G#V71VCbR7vcgD0Ey9Ehzmpj zBt~~3E)W5b7~O at qKmhpPGP$|2v9UQlSWtvpSXfw$FRmpLYwN4R>iYEQKkfz> zM2M0t!iPA4%n4jb;0B+`{oy1FnO)&1i$6%P2^VfQOp=_y9<1DmGD#2>u4{wnHxdtV ftW!uJ+vLl;xr_G~hl$JB+y?h%_ebc%^5E+q1xDSnF3HS=P-xW>lbv?K~`iMx>(pYpm2rxu?Tik3r#bW%weaw;vPXOn71 z&1Pnw6jpRsIHuPGH6y69%pR(yC|X((x*-kxE+5 zx};>YSxHtURZTEOqP|^o^=6`0Kh!C5zs@|Z8&1V`D^^YL>guc388#?n9NMs)jk-`=N##8LL!y4yemtEFZ%Rqdt^h`Q-H$pbL}rcK>D(*yJW z2h22jyzDd1X8W_4hD0}MmDb!kbDkm%F*6Nq&2p-`Tc}j^bt=7R)AgLxpMB^CJKJWy zV7`=k#=O7x-nV=tgFg62Qod6Zn}FaVF2n^Q01~6S5EqC5NQ~}6Tp$71tI_vqq`6nhyX~8?m}E30w6KE z3vq!6fW+u7#04S%5~I5i7l;5zjP62QAOavUx(jiE2!O=sF2n^Q01~6S5EqC5NQ~}6 zTp$7<@k8Ae?*HmRYwZ7y2K$ktb&C{9C=dt)1EF9r6b`XFvNsgk8;OpLL`FuUe6$^W zbTr1tMx*ig{{8Xz)a2ykl-LWe2)8E`ibkRbVzC1gfIZvMOYaO? zR|vm{lu6jn at x;e-ex7SxB@=`res&Fn&mZ7|kFmAGF~a!*!QkN9KF&W at 4)XEw<>Tkh zzx at kS9pqRAb`J#S4+eZ*ah}clhKlpt*uMC3>n4f#*%I&P$sGCn at y`xzrM at k_VgB{a z<<-ns?#A at Bk diff --git a/src/public/images/close.png b/src/public/images/close.png deleted file mode 100644 index d7173ba6ba7622549815a6d217cd697b0d5386ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1219 zcmV;!1U&nRP)%cI~!2I~W?>BrSyl2dRGC%1Dem)F>xzLz%p$Q!fD3N_pYELP>qqVw! z at 7}#X|9e;7-CVo&g}i?KYAFoEg=8{0l}si{CWnc~6KJh*U6*RLN~K(;SS$Hwq4_G2NEFhUG_h!mrrV_1bZNC(fFT;~Cy|IVJUoo+y1aPtf^xaE zC8BQJy?eI^paH&IT9Tuq`pVeYSix}|yjF{HrGo3a_M_2%_i^ZjQJYL9TGSq4{+MRYcbop0BKm-9qgj%Ia%WHA! zgHw2|R-srd{sDZe7Z(>N1K2Q~!cwUejYb1FhA2U#yQb4=noXA=@Bza} za)jbRF>`);`X?2JVLm=IG!>0TX}8)4!if`UmY0_)6bdL2L at 7iB5yh3l6|P^uPAYW* zQHnQjjy~~QQKAqf7=%PT&cVTfwg4v*iO}*|hzJTW2;<{fZr)r6;Nr!L0LQR3vf1o$ z3A!^30{Z%*V2on{7!0BWWfVq2OsFv!ve|KL+wMuWZJTWNWKX_`phTgR5QYJw6qeR{ z-|zTmlu{TIf>EFh0$jel$l0 at JdGh250JF2RM59rDxN`>)>DF8Xtu0*FMQOEfiO8Pk zwayF-#0ZUs&>&)1SXk)6Zr%F67uD?SET1hdvc0|CJrhO5j!&NN~MbHx{Qx!0eJfWUcP!stUt!cND>et5gR|~u>aTobIYRQ^`~J%9+qWMm0O#byir4bCYKMni zb4t*vYfz3Yc8yBUtYuk5A`wcZ63s?q%W<5QUblJp at FCOF)4#Rbtwg)snXxR3h;8 at a za12u2sH}*E=Xq2r6&m&W7Q&6y)$i&(Ai%R{&l>rB{z0``t=H at Ibi32ZU<@chYmJED z`#zrMaacQ~R;xY_{BXsYaF$nBSL^TX*l)+xt5+ujKgb)*oH60KFf`6_JKI-E?TN6X hwRL}EW8;5cz(1RC%yMzy<&*#b002ovPDHLkV1hWsJum_)@-4E~X_Bma3 zZ`Hs4UETfR-ahr~aCuoVIB0BW5D*YJ3GrWwe{1-^JK_(Bza at EsEZ5)ayQ7eV@{hlp z*AL^czu%$k#5Ej2Kwyyn?VxiTKJR}UQJqB8orE1s44f=%Z3vYutW7}J7=AJ^a#WHW z{mY2^uV2a5)XCMr!30Fm*w)a5P}IV~#MRaT;7BN}#FDZk3iday$j(7k%`M|%u{So5 z5f)rtE04ruSDKr(9{hYpitC3x`kc_fL>K#dH|g5$)61PXKr4E0`N?~&$wcGO-R5tC zzuWcIeb|I92H$>3PC>|~$JGtH{{-cTubJM3+{?#1Izv>%8 zJo&dt+!`Px`noyx`Sj|jc04Za2zkK9|y1QzIOI_Q`t{)^i`Ga&E3fy_h0tVp`|R)9X;vYJev_!lP@$b zZuSe|RdlXCZmdE1{8v{9d1pzyR|r!K+YWCa4q?Z(o7{Y#4jY%f{GRRoa=@YJq2&}z z+sGy+W*h)rg93kZdkt-croH#~B?ZpXC^r$PT;CC)Z z$GfYU&2l;CEF3*2vmLz4#pw__6+)hN;@zvm=hrNFkFxF%Z#u6V1aqAmKR-?%Pwd8I z;XUlGj5qP?B7~FP?0WDW`fiOv^L1zssFKDqT&HMhWsfF?thmhJ@!IU>LINk@;qec# zmwBf2=h^wNvv<}PQn2Ptkm|a8f`aa0L6S#WG(|lsMk?v}m*S4q&l0o2xunLTBNfn~ z+6*G`?IK-3v!w*`;J$ny8aC}KeD>Ap7- at wd$20wgU9tF_I#IKGWOj^-uIfxlglt3Pmz#roOSoeI^#*Qx7$D8hAEECr zpz=D$88({%usjkpuoU?651rwy+ at r)`3dqJ4 at y?}-zjOm;d56dAC?p3+`)p;(A`;G6 zMnrL0%uX%Ord~6V at y$I+AV|y7PQ at R?-m5_-pAustwc#eQpeDl~gUDl;n(YZk$u)SR zeryS-lZe|)&?4y}YM3U6F?@_6ZpmgM|M)RsTpEb}~CLE!bvBX9$XWd77{uP8vbRbp~25O&AYSMH at 3 z>aaK1t(3<++u0+osC6;+>CR?wK1Qjd>Vk`UJWgcjXax4 zM3U-LhQNw2&mvQ%jprRRqo#&Y8QhD)inW7?P464{#SDWAMUi6gWJ_gT9r}+>k at kGg zuTPVQ&n*rV$Ns9Ai)buRoc2(SAagcVUf4^#BcQ at O?f*97qd3pFp+ujBcRFzu_BFRt zHh^{^TOCQf9$=TK!lIoRJ%>Uji3ffDr}sO<mg{LqFTrPp0pXY7k?tTSsaV2JP zw0^9%H6x?;fYHuC{=q}XQ*kQz5 zOrcH11aI-pvt;C}ho&e-y95Cv6lwgxQ6t7bn9?K=^Wqk7uCp5jJ4r+ie}q!#d*4 at o z%04%z+Ls#rR$;=UwJl;<)~C*VAJdVw=CE`8sV@&c at oZ)U_u?OGcn(k1a~}nnwuz)w zSSwr}+n009%N!4g(o!ID6CCfUtzG%Q9)JdPb^`t=e(KDBVBCqx4{k!<{=W+*cgR6o=oW77q2R`3;tE|=R4P)x+eAxERPgAI^;Nf%9U`|6g{UE zsaMxD4*^Crsx0l`wZ%8#NX#AMXwa2X5}QP{v#?m^o+3~x(K_f5Q*siBvPr?rWkoOR zF{5A7_Q`H3gl(`(etX!A`V^pGE`9!)-|M=g^j>$R$^z at 9ZZMGaPaj(4R<9xuj|g$9 zl-PoQ%vpc;F)IV_M$LBQ*w6k$Tkh`f~;{zM8~HLMF}OS9N6H~MlzHY!L(dvOs!Ik at e8*s$D&-majGibeEu z;Z%Arh$6Z>!Sr}vD;w?BwEP|Vm>0_`=GT7`rF4H*cC6Mzbr&@J!4b{vU?(ltrms-K z2j(<$v at qdIGNW2hV7#+)4>E>uO-ECebOT$Z3$kBmBynPYyE=PByj2|l7lXc#W3x>d zG2vSl1In}>T(5ThhUFzJjK|wQCm6M8*reHR5u5_W)(t87$@|XGW^*f>$SrImRTa)z zhOb_tuYX#ONtaWSP5foz45OLlX3`Vo5d-b)jVQ;{A`sk}b<&UG&C)q%#WMQ3f6s0x z5QP~dI3#~mWaiMM0X;+NhrsE_Fp`&glPeJ?XdxiX;6XCE7V%-(2?7t#q?$0ad`J{; zQEDJT7I%~KVwm&C5N%iLi#E4OrbvdAXmMEGc4h=#*KXt`h^l# z857Crio16=cBD$iZJ1WH!m3B4C^q3~OZqs3-vY5^Iij(y`y9+~$hCc}xB!N?^}bK@ zcj6nevK$1_p!hm at opQzoo@9gLVkTS_zZtc$+_ at 41;cn*&Y@%R`zJ^xJx!GKjvrfLN zuGbtWf1^Os!OP$Irwwzg5{)iQ50!x3HCk1pX0I8ZN0kCWM^g2^2ygpk3{yQw78||2 zl;mEcAZ#6(Npw at Uh01V3`*+k)V9RyU7dT_oNDeK!Ty at ojl3+e#HUpApIU@|r zyKte~?h8HtmdTM3rG!>(T*3Lhew z)u7nE4^Dn-I#OV!@1Q^$&1ptA!YT0JkNRN7+!L(f6B>AonTb8Wrpa|??xc-PVZB=b z`dvXGi1 at zG)FmejoPZfm2fWx5CZh*|hmhr{*>E5MTGaL=)^CD3xiws|SDgh7OA{yf zT+phwBVS?;(DfBri`Q<&F>Qsz3dgi787 zVay<7kP)NVFwWkJyh^?|X?USdPezkqDCaiV9f5(6FlN=h%D4N$qou!;mv-OY%afK`9NW zD03EZ2$_g_1J_c~IPvNtKMB)o=nrE1>r|gl!B1kD8=j6f z_NJ20Y#fUH!_rIyKwBdQNaw=R_7a9zeR4y%raSx6^T$C>m~D=kaogTV2RD2|ZBCw6 z8iifl!b9EJPX=qh-B=UM7{&ii=y1sLEYyv)QYGcU9U$|7K1dzdLsFvuqZUq-Eysi* z_nd*C?2WRQ-9ut{pXYgv>&L%gluFS16o`M>GiRbzk#f&2r(HKd*7XIg>lqB3IJm2| zG$o?n(PQV_q22{h(^EFRrJgc0Yh~vrqZRHadR!dVxHzV{l+W2jyR|=nra~>C?~&UU zE_tFh$DU?6{_#9*JPvC-F0q)Urt at I94Cg@iYm%O;4oBYmzPsw)+vq`eRF~wKo>V at M zp#h^E`{77+9rv2|`fp^Cq1w1*T7zUfy;V8VWVQw^YouG4UIza(r(Sg{&yu$8yr#2e zxtQoaX>GLfKt9gyyZh9ON9Cen<)Wo#xh%jLD%K)0)I4$U8 zWCLiHN7Zj=MLG`t{OnxjlGf#BXi=>`AYO7%DAPwUWJ<#_$`_Woi3-^naBD}zd3kjo zeeeiwa4W!w#-s5!Z#F9S;Vjj&IRzp*W=+Y44qqU z1lKvUYSN}jIhUt+a%|b at Wdofvj7wOAx7$VBAetIA!t4~#C4=%cP1iKGssR+Xf!-8@ z!eb(rY|9I-Vs073w@#CdNy;#e{wc$a+j#52YObOudxk+~jYitIk8FW7S4saV12xd8 z>^lxE1RuPg9J(f#rd$v|E#vsmysbuOVh3;De#a2kTY4Utiy}0B_#g-zlG7!?^)xcG zI=C0i{=9wNb_yXN`{5r>AOqdHIM_|aXQKU(>xY|`tdxs+R0m_Itfu6=Pq>$jW+B-lbtr&rV4zK3 zcY27Ay!=aK`q6tOPxjtQdinRQ$4^f?{J86Ea;A;b-K_+|_2`HBYA;jNF5RPK2ZfQe zCzo48h%piW3kCl~N^Xcl*_iLlYP02;?bQ|M4~Vu{9%6as^JjU6o0hTYP6nB3-2N>= z5PfOY+l{W>t9Q4c)QtYX8ZvZ6x%nRcWsp+JeMNTZC3qHJ73uoEc~$ePw4H$b5*;Ol z9xGzVLNkP-a3xe*@MY!@v_Ts^igheosVKA|e^N_PZ&${WfO4alBRF32#?M9j{X4qb z=Ep4xdOMrTGrBBE8X2+OD at tQXd&x%mLg at tUKAY_BZJ2_AYg at BU-e%hEMUr7Bz4UI8!zpo*Nm~>=_$&F8wRm8Q#f`F3FWlHp{IBM~(IM z6KHVU?C0w>jtUbb1`6!38;tj>Sel2cA-OmqHkfTAK9}>WjpW1|HFvKoD}aB4LNeKw zU$SDcSXj?P@^PYcxy9Py#Mp5+?3{uz#R%m4j|{Q_m~95f&MXaEj86SCaKgi|l`;Fa zE{Bc9SO+fVMz79t%&nZT;&ph{w9v zxUlRz{23cay_He%5|^c!SplAC0#}LjMw8Sero9^HA=V`7yMG%}za(J$zGL=_BW_ at S zE$_CXtQv@%cxFGJWX?jc3uyR7S8B_iWX{LWuYOI%==AM^46_YEu7&W|*D@^KS{j`2 zznkNPLZeP6%&&c2%0#z+JY1@}UgS{=MC_6qgoRk(!f>KXHH75Hnxa42U~)4g*M%&}{t+RvMt}%tAqJ zcX!qFp;hLp5=MY8XS2s;T3lB?AV_x+btexlsn9>`iRe1?PeP| zJG%4Q<@vs!P;qP_6P5uhi31y`)1jXdF$7x zOW+(-NTwF#8i4(gS&N&j7UP)AWY?B79^;Bj2PZjU^ zIgz&bnlE$hm_JVzJ~Lnf2p;_mK!)h2Yw*nKWrHpbGf#Z(2))Bp9wz+OF&+Y1H}Ari zO$^%BIc;0XwyXY!Y1D^J+0`H^t!`DTkGAHi*U556BT#m9yMM*?MZMn at -BgdtP{G-npD#tS zERjBve}mV_`RmLg{C3qgPo*n*I6*y~)(3b3j;5hWQpNB=n zAqLWUX>IQuPRX%*IisE_#cZqeNqI;AC)%xm8&Ss!51}e}pTJ1!SJ1mLNec$hOU62O z>-nc`~qWnsJNQ%^eMpQpt^HGuMsLryx-qyZb zY4M5NV;f};Wb7f8*c^jZsOz_G%KgyfGLEZ_4ow1(Pa~u|rZKC7o9ZP`%qz-l{vFG* zLAXi&bGVymbI=6^33#Bj9*7PzVtEaUlwHvkHjQRi3Mo3!j($@vR)22i!}974y1}#> zbphnop(7g;hhH<44Fka~Zb? zH><<;}`|3OT6~ zyu}7obNh{6v?^(M>QM>6te|!lV^jKTy4+clKkB%O{TkOkSr_n8ApMd`aPR=0j(^q- zsBsQGY27h2%Tp3UDg?~eKFCzFNl!26eoXzkO at qu_3`t7JvuY$-Ra;b5HCF3jrGXz@ z)~MgT*3!0b32#K*I;vPxaI9U1Jd9y{TfV-I-FRI?OOS!qv9y2Q{s6os^Mw~-TvwdytKx~ZXqU^Aj#?>Of*Lu z{~_&~(kUecZA|qpoe+b)J?$%$-|LN-|4Z`0%xK8aG(nwVh2*h=7~RLLMrTQW*oWvu zE-yJT=wa0avo$@|G<>A5 at A))R at dp)lEb5M=WyAQgrF#0f_762XR$~?bU3pFl?exU(apJ%HmTUK7K0%~oOm_Wtf_h+cmLz|FK{8Tik=i0=T4QujA at 3BkURW3xm ztJ8?u=_Kg5H;d0FAXJu+<2Fb#~ zQ6%=>`4k-iK!^r=yo<#1Ncqh13<~W=xXwbteOj3&GJSdyO!woxM9M2xZwc&W%Hqb) z*vsvQ9|p7Z at 9c#lU)#dbH<8tYy9VC)`QX9JF~;{3k@&+SVL)HlIu%gq-6iW#?~bET zf7QsX2ukvFoS!QmZY0O}Gx77+}7`>3hZoYqnXI+3nGW4o|3`IN!MOblvalMI8Jg3e{dJS7fs(7PDKukc zMWcU76vP1IMK4q4m0+^{jzdRA7#(>X&*QzlIp^KHAmmia-6LS6;3JJo!}EzPe3`f~ zQO5GFppEK-qpD(YK~qJB;rJUlrqJl_FX@ zsQhr&Dg|`YO~W|(bP?f|$Ph#YIou!n)NN%-cWZ;H=teZjv5DK%4E-vQAG#ANklwf7NAAbCtB0+3 zfdOkx9L>3&FaB2UOoi75x46~@jc&Eq?k9K;%hRUkkfDJsL2|iXRxx7IWT~?PgNFV~ z#VrFUBpWtHc18xsD; zNc$IJN3?=#y4OR>a1oRX<9myzsjWrT{yQOk z>f|g(TPbfn=^{8OXI(&^-lcMro)kI}qOE(6)Bg+#+6D9NmD>mA+K!pjN>g{HOuspu z3e1b^mKDx*JPzel^D at cUUszFReq*A5wsymr at P{Qa;u1Jvh1Qoo-eNOAb*og%yV&O8 z!dZE%Qp3C2=ApA~(G{rR-EI1yP_yty;y_=c_;66Y zP0HYeF1WB6H|f$reW}!)Dd|&Dy(y`$t`Rrs^FLblYO5BE(3sj2j4)?fxn_GMSJ2!l z>dMo`c4?rI(LE|EnWGmKJu0fkj2cfpE3k%@fJT#UT&wtirMsC2_4=+$=*Y*&qtXb0 zp%tJg;h8&tIL6sU4Mbq*Y2iEJ-ucNA|Cy(SD*xGeRn9BcmQwvImYH1htHzd8{i}wV zEBNB{b5`2o^mh-Z^6WqD=Km4cW47qZ6;U+2 at Ss7H@+g_z7%*LauW`1}wVbv1#FglF z$~`MW!svWcv3*~*U7_ at 3$olXhiF-Or6ub;*f0H( z)e8ku%URzP$(9dxE~!#>s782J#tR%YcuZ(Hy9kZ{-0*v;NNP5Mls$f)u<$m$QjfA| zCvw!?z+- at w>AoeEuz~Z~6vwP`NqsvQp=!iq&s})uC at p-OkseEwNuV`i4iGh<83o5fEK%IetB5W((p>mS4&}}5&y+gU$660L?#%W}eV_q4V=r-4( zI+6~!!0Y!W@#+sko8r?*za|h|v~lL^R&J*&VuYT%GWo6fw(kz{82!u-y^d>3 at 1oFt zS^~f>g<(DeG%d>&T^1Krsf+ouRvlm#lQLDc at M8kcLJh}w?oAo4701R`>^qZCRIxzz zOpoivXyOG$4onzIJD5+ at 3OgziDH%SregV at N)_)y9DvfTw?ee80okh)S}_}nXKkMxJXXUrmUsuaobH^-2X9>$ z#T3K-7?(}BTU4g{dPvK=!X7N$4!>w*Ez}Nd7-XqOT!$OA+Y$LDaXbcHsDI=qQZV3NQsS`>p=%kE;08#> z>RKjwq#grvDecq>L5+0=d?nj0vv7*9zj~J0xo)b`MjdZ;e{X>$7eAp|%})hcRU36B z*WIwY1I-3KaeWHdr?#U)Y$f!z=%G5b1mt(jL|ZD0vy z9ekV|LVo;R9|3DJngLy7ItFo0+UvhT<7OToFXk7Y1*PIYp5b$b%*;;xHvF{%B)YU& zc8`kY!im{%`ng<41>QM@&(p-;(gJ at p{WcMHdPN5R;hWKCa2ojyHkr&?(eZOPY~>+T z%u25GlkfigKX4Ay-6Qc3=hcp``^A2ff>B-PYS2e8Q}`A(OVm?wcfnJMos|5t_l3@? zU|lDSh>Phqs#Da=oke!W_G8Qi3J34E%nmtrICGYPpKIJ at 8+@jr*(WuwV=VgU#_e*Z zzuKj)8`=lNFO*yyK$1dOQkzpJSMclBL%|+nP?89^aW4$1o4yJ2zDbV3r*Qy`M>mpkEqNT6`A@~&k{BtA z1lVBaL*nM^^c=-)#<)qWzTyp^ibXAc>nC=qS%-4-O5PC$O5H%Mqw<+T6RcO0h0i#R z@|m&(S%t)mBRXISU3$%UPHH;)WdV(0DW=rfAOcyq6u|r6aD^KnKjCg4Q=N=!GdPSK zYjyww-g2e>Z{5xIC`wWkTVh%`RdpY`%nom`E*UG9B^2ciEAmFchdoY`?KF)xVGZE;D>DcFThNsJ~Ou zs#K>`%aws7X8d-Mc6wL;&+aCo)7w$V=iO5x?Qs|Gz!#Y38I^1zmk=fqw3VieK?O96 z`NLs4wXnF9`M^!aGxI14E3VA87<+Cn=SyCzg%uZDp36y+%Q>4h^PTzdCp_s2Y56eH z4$cq2_t8J8WVaOVk{eLSM`O=ZEhYisNZT`dY(3sRi&>MH zrgd|aLlsf}733moG^{ZcE)RV8>BCu*IYyYL24<5DrA+8N+>(OLXu_@%w#Ltx-P3Jp zwn;9NBO)bOZ!;$&EkjqEwcTT|uH_v;pyOKNg9`($C zS0$-EdwD-b*+=(7O at pmp<%N=0A#WkK2OmfD72Cd!J!n2AB--c0(%wNeYF;&RUd+S# z=_-fmOCs_G|@ht z$V%utoB818nKholHl_a%c?u6i{IEVYQ;H~TQS98~RbIP9Kb`PCb}*w(z)PbHgY%H> z^KTY7rHbDt`tB^5y%0(#`)ZdCmi_+e^`L>&`a}FUfDwd9R3q1s(9f-5B at pBD8Owqi zG7o`;G}Eyd6Cb6a7!?=MIFXI8XY4s^IY4wTbSZ3Al`mRk}nEqoFl<5nn7rjEn1__J5GJ0CqhRfhWSo%!z}1Qrgr zKRdObd1ctgZ?&27;stONBaP8uC#6MUmD2;cY73uN6NbZ5cIj^z1)Z=eK!@4%d;WsD z^B^#8C}Ur|?)$-HWk|E+T?XQwg)_%&)T5yK|2N`hoP5_i2N(!g<~Nkrl5VOIWr6c@ zJ|~bfjAX4R-l|)Kc-elnVY36bQ$-yX{~^$xLFJ=39P{D?%lm1)xUWaYHYn^lE1pKu zv*R>O_3Es0PqUri-nZwIF^tE_QAD9rL#dn%%605$dDx9)PNS$;cWvj33Wg2ap`Wbn^s8?-F3C4j=NhTioKOX@ zS0b|H9%9f$sRLy;OC8KctVh|H#1_F|&|sy#(elAjAC&gHD{KVEQL15=6%Z72s}Od> zA+1uEG>Z`A?kDdh>nBOi;^()*KsgNsAh3ip)3ZibOsNFoLHPDTy0*_SmS;${@?-F4 zW+FDl?;Z`iH5vQ at g(J}lnVQ^3j5RIQ6~m2rOuI16^VNf&=lG>ctm7?EB*Y(>mT*|> zz!Ed+KxUwk(2Yc+FrOaoK~>)pqAVxEJY00Qsv(Tfig|XIj1rpg^J5{xxGoRtKnWYe zR;jiu)Ke=MXXrYp;H+tpR-oCQ^18%!V~t*3tHo!I z|3*ER!--70GuXv(4pUzph}B$uBPFNLfmo%dXGaR-acn?+2<|c)tU$!&qBPYQ(?z}M zoZCeXs}hg2 at JTSdpkTlSwE!5{+X-DbK{kqeN}hIlu%HqrLEDN5(F(SA%KtyP_L}- zCgzD~l+qLiOyX1+N;!<;(m)E6$!V7A+2KDW3^rV=W_d959|G|lYwpEBjr0a@%H^O@ zL-bRDu9VV8{S_zL5F7LAM_t7#1S+9e3nW3~5%`l7a*-^N2}=!#e3{}E72%0}6trnR zJnAuQ`cB-}SQ*`UerhYX^D0jIa{M4P2AD}Sa7?@^%*AR8-odbs%d(8DyKSae6B7ka z2|}0yB2!qdK~Jm%mIX}~(#(~x5go9;rRS-DHoy)70z7 at Tw7T_l3I zb^XdyH&tUNsuGuj93ykUgp?q(QN!{djn_2Yf~}L)#|nr>{_&X}z_Er}S`tYF4naff z^2gq3T<2tU5A2u*KuH8GB(3=y>V$PPR5pyk at VRjKk35BH~*y92J;;k9V5=w?vxeR|}0aT3cYCG7d3?+j%9nxl=^1utH*9DasB0h6 z56Nql)3f8h6>lXwT^!ZhIc3^aESkkSHeS7qC?eB45;dm zb?hP1k_D0S^Bb7hStb-SO6ngY}|=(|eIxlU1?0XbxRPJ>@OOD*I{0 zbIGe|i!|kS35=%2u)}FubZk+c0fwpUql{{xHa>v9+M<%Ha*>3 at A#PcWdUqDi{*&j( zt8>Y+cFB^hQl+ at DEog*wNVs9_zjO*(%@TClQrVm)f;-^ij at QJ8%ts2F0>S;Qd04d?TeVtk(7>yF3^)W#F>6}?*Id$Sm(u>uWq9S1Zm87|=S$ZLkGwh) zL%SU4fCOlzRH=ci#hi?+oy{$B6YIA#?9d7ONB?9(V2J$=VHui6*WGDm ze>-M^46_Jrss2%^P()G(o0((#`7^Y`u)HGEnRmZv+dE+f$tbUYM)R0Du>5?s=;Zrt zyUWGEn*D{{!r0ktj*2&DrCvgVO3Xr>RDpeiX#aLNB z_Q}Pq0KLY9Ue270scvzI;yQ#7*&lT2Ku8 at Nes^!X^FNujiSv+yQeF$*c3l0@$U!{= z(d5DF|9}c6Pa$S39VL>tNQEK0Do|>*!jZ>S3h)s|NdLq}Z-D at unnQo2;!j?wNVw7 at rr zQFNV$6YJP#(-E_4?{8-3&v0=qK$tGAI&d}VS2rg!n9sk=CD}c2e%;x#=kWao0*b5D)t|`u23R at CdW6=1-P}K5=B2c_7D4>Q(g+sp z>CFXg16m8uS`>SzvebiMtJXIt>Rawl<8tcf3(Gre?0?Kd!g@~R7OS$zXnEy{Q0${xFq!q?->7RuYtIo{d_$N(lINF3F^W|uW zuwmK^jvngkfi;f*;X}gg??KtT at E=?Mp%qR3T?zZU#pNL>&gG( zL*Zx at Nx1~{&kHH&4)=S?G&V||%YYwS6z@%*r7FIE$w=yI5qlhXkNtMDA1(>a+BK6= z(U7AX!jkBSw7@!k>~yFXZ}miJ*8uH-7sYhUqRDR_3B73CHk=sY#`T5R9>~%R8+zRX zdm2LGk7!jP7(V)SJw531p>iH at gr7HM6~Se3NnCYLDITw$r-G&Hk$CUMq&3>VheUtS zar*ntdSt{dp2QUr7W~Lpq7+7A!Uec?;BX?C*g`)|v-=rqY{Zj2Gn4>uvXB&@F!wtB z&2*5 at a@ihm-n)K}hkD=o?on*yw%P7=mug>Ol1M~#1-2Cz9{+uj18c7hOf7sD0p?U}x2S;yT-M1iUWrFB`e#pf$vRSzVZPBLPj0K&nN& zoksl>gJD_^)81d?oFvTN=3<0hakXtB_Wq)b?=O5-66xAz znmHa35f&>aUd4V3uA|^nCC;zNL;ldggfto*2KJY9N$bYto zPEb$aKhcGTdcj(1YxqT$^hv|>z#K(nm%j0wZuJCQI)SfYth-7%=QTwL at k>msgT3K0 zw2IplyM(7&Wg^?47mHi!-&l+hf10W#KEN5nE4&vzXE*U&`8B3Pu_!Y-);VzYt(o)n ziv8R|T7q1=u9NDbH2u)2&ZeZ>o0Y!g$|sHB z9%LqP^LqSYe2>>lWRJ!rg<)zXYj|om*_~W2QoNFR8WLu*ea`C&hPUajQTaWag&nG# z-0hDL$}~MqO7 at Ive6T3~#+u~vwj|O1m(9ezMm2l4CJCjpr5DSNQS57|0gDg_2R+-^ zA5F`QVH5*AaB8+BUym9+J-C<+ zhGU_wmPE*vAFT6`Wt8*6C0P~1C&kDvLE?AX1~n#z7%H`OXAex8y9HaYe+q$J-Qp5 zOTJuYGqY6{k+rTt^YT+qlooy__#Ex*(fanB+0ly@|(oPB*-;ESQJ3{QTP65-;b^b3uvq`%hUSuJq;?CZ|cZ`&li;%b53EBT^5|lcwWW zuQ_`Qa~u_0o2qVSKM7nwr;_?e9=MCYjn5Q8lyo`NbC^GzrjN;=(2zKGY#nr)pnm0J zt`TOjzyw=M at D+&j%a_5I`1W`mW^5qY6eeYbsBo2SC64^tvdc%}*>M8%`MrU3NNO3t=7;S$bZb`HQU(^ev#%2g>c+Q;nIL^+)koLK~fL@^pM#0p|h1Ze#RG{i2q) z&?;^xR0hnr7fcg9(V13*jq=sF^F|Q7YW^pow+q!7FmJ^TNd#LRm8(E^d2Ct7 at bc(? z6)Q&yz`tUJeRtE)w&1 at PD+;y$Ay$%{|7WqHeUu<-X}>P at KZun;$8LpwS;{ffxXOpf zs>qi}SV&8=*ukkKikzy<*dft$E0z!b>LrU0j=c8G9>)P4kIIL5<^waI1hZuu57t{q zqv)(JEXijoe1GYz at _sfXcg08`#rhO93X9`Pq&3RwtErh)F`&)Iv=!k1aeBOocj^u) zaz~s7vbn_fOE-o(@7SVbwoA?;_*?%$oD;rf at CBKcx8zUf2&;-1%?%1YYU#$;l#UC= z#nWfsUr#neSAYEpfdabS;AnLa^xeY1ISbQKy%-nRFlNf*bK+sS-pq5q3-o-2SB0yO zp1^D>QswLQhy%i?n3g&Ni6N at C&i?#6cDz&gs9IFy$kW<{*DN(9`S=~L!~topL>*E* z!FKrHRSl5alL4zto~OzST37sly- zcMbTwRz4l*@SOw_I~e&U)+mT zWP0$Qe#|P-uJ>+ZPU9g=-OLz-?twP;Y;J##zqo>{VJ at zQcs_Fz=!OraNEzL+!{pXr zL9W<37N7rl#L%uhkW8WcX^>qPnBeBNvQjwF&OiiaN9iHHRN84xc#)41 zP~++}0q=J91^UzlHr5XF+Y2MCSO#=M$L{^!%@xjxX z`EVWgU^#C3z@;|m#Wys&>IG^~qEJ;@DW?DZH9i at pqMHmgRZ0_?4l3~c at m-P-G63;< zJ4Pf2NT4q|{e)D8H~x5-=@?fG&T3YiAVJ)!Le!~~u*o22OEsq^Zi7x*t?W6HKvGaXfHx>e}nXAARkVr%y%-c3wv4QVT#N4vFb4vz(+ at ssZ+ z7UZbLkW_Rsb>pP0Fa)K-8uk|vZ?wH}YX at wK<qrNw&e?+XQp7W=9|wOCP&NJhf|2Y>JT%S2jhDz{9`J7xhGNo|1gyYeRs{D8$H@%D3!5~KckMmS5Z(d8=RkAJ=68{kH*wkxC at pCY}gdRUZ0H2v#!%g z$(8_Gwc^0xC7fkkS>o#kT!8+BCE)_<7=AT2AAx^mN|nYxqmtRS*!)+fG at Jf2Do>}X zTRLJ7A8CuWi+|k(wkA(F at t`RdRi at AfYgF@>K($PBW`G~-xI#>)WVk6>;3v) z_>(-lA~wN-(x1NBeTLFcvZ5Rd@|f*+g|9Fwce7W$&Duun{smmYXxlAV+#H$nHpBeu zmn3kTVT$pe1H)uHW%%B63IRvcwYuRNXa0m*UQM%|x~5?T6Ybr)HvW{^ABeiQZ2HzI zlAF8lLaNLms#k~=Oq+n{q6Da1nCzaDEo)>IygFWaZo!(AT-kF96S;~NtT4U;Y=$_S02p>AtHY&^zWpmBS)nm(S1^ym2LIn6l1zNQD z1qEa}`33i9I#~V#kJ8or?RWi$%95+ww56z2i;Cbsu$FAhBs*g^ql)%_=LbRMin|9~ zW?5Not%+Ez$hg?}&w|YvWW(5PDis?0^X00U&=!_O#}-0Ije2BR(|ckbvkO#0OTOfP z8!T3n*=340CCblpJMCr54r4}x`~o^epW=rz9<@sD1aaH7EIJg;?FiptU+z$c+Ny+_=btbqKBbGyL2yeoiOx32RU8 z(Ce~cYVPADw!tS!i8^AY^bVKLD+{&ht=kt{@1{0|Ke;|*O~E+pfM!?XljYk!*gtry?=K!Svp`en{!dmIUOefnD=ti8F at PbXi&Mij`b(} zx{QG22lSA9%RMUsmyOGt%vV(3YM~XnpmzRVt+ilmYWe*OA<%h5=#{0vg1ht5ty>_Jc`nr-ZW#y0Dz~0dIdaX}J-qu?OX2+ezZ9fDQf70$o3-ep*y&a~~ zO``DdaScv~K}g}e4? zbv-D%f~D;1^}EQ1moQVVqk#XwQcQKXyLYTtExf{5%QmQQu>~)DezEjzL+bm3PJcbu z&-^y(F}1EzyZw|;IzcSb$S+g-qEcty)-e}==z0gEAGV2aUMwjol|h*wotc(5B+X%L zq91MrDFMT;1)s<+nYk-L4)mQ)@ViYUC--K8L+bRcom1oz4h@``5C%CxtGKVQOYg8A ze_pxQ@^{(4Ci{lUbiL7dyL*YG;FFuEye)_P88r?Weckg9dd1!43cW&mgHTA3In`W02_WD1${sY&rBN_;Wu*Ds;Y zh_4h;o;$b7{DPWKN=Y?5Gd&zwZ at 9kZL^+5wIVuhL-;|xd1F_D4jt at S&f43fYZ{_=E zsWD{p@$$j~NF$4(FX~kYs~Ad?3TqJW`bU#T?$i6psAN#(YJZC7tQ`x_^ISQWlIyl@ z9JXbub<1j3V|OusSA4rSIvbwhl at N48sF57x)IffjWB`IOhYZce{Ogv8jU9G at 4IM4!=mara&)kF zc5RJ}3s>Bwx6jUeh!_mUCw#=OoWpod$hZp_6eK%uzmKe~MiQ}DtcaFhRWP8K_#O*c zBjze8DTObR_>j64*9au~_xeT8rd=?Ocbez?3#F*S3JQ+wCpGeOI;!dG9+ zSvA{VbzS}4?WX)o;^E=padKQ(U>O>$!yWc4pQ~eP;|ody2QpzFk?zPzvq6U`WxSsP zwbcv3*)Dbnh423o59Gr at I$9S$56ljqfL{&2L`&dbt#a2QVHNC7#F}F*PR_YY*V|ki zj$3#hgyN^UD?J$d?6C{KbdNZ!vqSA4zt5;5NnDyE9jJ zg0rE5)dt;9j$FsyoBZwmgs)%5a@)=+oPI(5mS`OZxjjPL$U5E136XvBGoax~$CBJg z?tZ*q%K6*5JWQKmG+J)1Q%Atf6pXx=YHCx=QT`|RG5SSL=TWJ6VewIpt4A>bV!_(< z7SQGL6lL163>Mnqt~#rx0+@&# zpMs#2;n13Sie1R=|5V6-X{EKU zJpKRgSDO45XKYTgvvisD6A}_qqyIKS#_|8VG5NoZUm2mf_4iS)@5UHVc+pdM(J_0` z{S&F{h@@^VdqDg|1&>tC*T?Sbx{e#AKYH>13Y?Q(Z166GK3sOBF#z4&rjPcphWfC9 zee%k{kOLOHAbO_Lk7=Y{!3Hc!1MG_RMbz78g*DjuSC3&88-cUZ-Grng+ot^x6WRU3 z?cjni?7%{Io6R(S#HR~kON7FM!WRM117eutQt%NJvDAdejH2P)`0iQ^2NYe2R<4;1 zz4h=`LNKd!c6MriPj`oMA_|m~)B9SKh2}=o zzaMJ=9Ois~8xAQ1hHl8Af5105E zM;BkI7wd=Fp|3c9I0+S=gh2_IQN}79(B$nLaTi$75jjfO^QbT~2{>R2HVK;)-iQ*J zP^t)zR50=OZ&OwpegHr-8W-R%Qz0X;dqjj7b4x#AM*+iqeza9e$ij!QZ}c?HD-zT# zxvrWR9#e%hSWHkkE7HpqK5iBkI81A`aRfTdz&mj|9s-tD{X(d6c9(X<)-4B=DKHi> zhT#oc!Kds=9eJ(bA9Zmz0D>o^vUgRczmL6V9z>wPfKwgZ_PsIbng^Q_2l}=KVH1U< ze&>iik9#n-JdWI5ON=6 at l-Ad!bT9#Xq1!`D8$dkZ2@@edABc5moA4ID9I^$gVq%Gi z`U;#}&UfT)8~eY9iJS~NX9YNR>d~v%@=-uW=T+z<~c2bwCK_{V>oavEC&H{&cXe`!41o>OG7DHrheJHdrC?(3Lr z&*BJFaN|+{AJIgqdMe{AW}FYhaUC9*8XfwD+M{9hFw z*Pn_lPJBm;lmx9bb|>Ehp14!z4+?5Bl$3&iK7HhKusn* z%}K*4H(3#(MX0g)FWtQPrz`IA%LhL$m(Rw6KeQQqme>h!j`=jn2zL(izcqsB8}K(~ z0Ul>U^-2rn?Rxsze*n1K+2GGpN3%#mi14n--Csm3yMMdpEa~rDG$zHP-GXjF& zJ9^()fc_M6l!F|7Rwe=3MZN%@$;5!)HJk>V4m*ra`9T9l29YgM#%wRpTc&WY%&23T z>Z4gG{6(=6MS(z0 at rm;GK_;zdE|Sflzi|C*P{W>Jk at EvraB4O1V{{Lb-0_Ficz~hm z09Md^&3bg|QshGJkhn7pk#K;^4^_%JsmKl*79 z*_{{xTCW^0bZWC0GY?fb7t;&suL at O@Cb(e!qb2B{fb*I;Vz7uy{xVc)OCb+JR7 at IA z3)3qc+iqux9FM*Pk>0~8ZToGT230#$4Oi9FPB{d#{abnXcb2UHrZPPm#pxr^t9^Zt z4Knj~EXU}q+z0#=LCR-_aQj&9SAgOZftr0#5DF2} zVQ~3dFh$U&z)PK7#H=6dFViMG_uYwM9V!uaIM}j5rvLI1c#uL9?*4f5oiW9##?#y7 z at C#mBY_yMisA%S{eM7j(Xd z%HI*FZ*|wjMuucAGo^yuUx9Sr;!SW{ZT%936>0MN-TV3no~6mP*WWO8xjzbLIu5Jq zx()W&3C at yWIhp)?%T0TedZ%*J-*{l0U~SX>{+C`G?do=mDf=^2JNGYiVDf%u4}s$8*szuS-5v`;%F7(nhuZ$-@$_++Q`rL53Q5 zp&|i48eUp$D_ZQks+ZIBJf+M0HuFXG-8QucwI^PSif(rlgF>~>PA~lXD;;t1OIG;L z-h-bCo{}~ef;knF^G`xd_gXM3VpCY`wE}s?mFDf!K(@tw22ZTKhq4kTKXdT&?u}Pg zGs$=X4%NDh8;bmh+ at Z?Q&)piwTI~8Qs>9plrq-9)jDg8w!VS5I#;>%pwrYhFb>BB` zb>dC%USI<0IdFKB&wq*+Ua|RgI4ulv&~2%)eeL9uJ)q)C;SsovjC~2Y86vb1<$>&E zTQ*{MfM(f_fDq%*sA0l|`1TCD{QFl=3Iq6I;{ll1=G+Xq8#6cB%E4eKXmwMD5kbFb zlfq~8VAVNgWv>nK*doa?+;*haVRx>kx#Xl?py12g39 at xGz2^sXE znahJI<&oZz7%Ti&oT418^yQJsCL<}xudrC*7nn=oNhPj(PeQvgh(Yyx3yTQz<h(W8~M1h!BvPLUqQfYuvUu(#A);hI<`j7Lov!wA}6GEYP zy?Cel!m6tWaXx9j92{Eb*5r}jM8>n>_2!`Z at Y{64$dPx!Ye(S0p5xm(B4f&q)J;)} z3fJKDLZ4@=w)GvAEI*HErvjzx<_?;R`Hzgll8&kkYaXB76XLh%?}LdwIs0^hGo%if`B~!Km3jZ9+}jo zSGnKMnDk#i<*oOwZ~IMbsgX=Zh=1>lGmCn1?<)iNp~6f3<2?=E-L zAhTaNb9fSD_W}SwZTYD{xzj+_*ocp0{~^ zw{K*9mCA$wa~wulykaZb|M+wT%Zac9I((~k6sK5C#|yZhn4=(nffp+0Ic+Iqg|ECm z))?V{P$GFd;WjLDS0TR-aRIEhd;(F#0pAjnEkk37XxekM&(GkamvFv&8avxN3%x(W zLM))s;}Vq(x$e^a&ID#ptm#?zc);6jUlgK6tvdj639|%uLgk~-(RIYvu7H1A&3{jF z|M(Nf=ym##$ptJjtv8&3ScU3r08hc*)4%r6K?QwO^7HuK2YYYj6 at Q?878*vRM379; zVx>VtM*e=XV;bnglkW$$-S)q`xKRtcO3i{0XOH9R(}0lk*%%B5UF;m|N`0&j_S&Ul zrJL!_-szyYpKS>$sfs8wUz@$XTj=Zo0<VH?4Ci1+|7h_SISYVkA}Q^;(s9IO@#y7XM2k zn|ow;`RA1rFe^q)+&$DhtR+~Z^D^M^_;ag=ho&Q=tJd3RRl@|FzI>NBk8;<+rt;MW zUDk1&Tw5jX2RvkZ#V>N0uqRFGCYHdslWSlNdudw0X#!^z#~RfnZwFgLN`nihd^ij6 zX+uj;iHUw|e>hXx(U0Yoz8IPo|+$Uc0{c?WM0d at 6et0j-HR=uyz`AD6?5ss5 at YvY zA at D^PkVsfUfKxb$?Cm_p$ssxG3zx_1eIDKa_=`W#i(O85Q`sLheb~qj$Oh^-o6y?c zlsxOf1FX?7y%nMqj+>vG)gl}bU4a%!wsw?}}OZz$%*+EYG$k at 0O7c$yyG zs%8;Vx9D-1;a_0+-okda&JLnAUO*6$y95$&mr$v5eWFlnCQYiW_!|KH6=CphE|lQP zjC2`)3}|LpB->_19c{pucT><{@fFEVV(~5 zZ+oy5f1bE)>-Oh84bjkVgW&Uv(|XM8iyLRTtrM2d++Q(xt_$Q2wT zHnf-bpRx>8V*$f5G=4(MiDw=n2=mhw42RX8OPkbrP2k6ookM2|$X_STg5zvdS9>=4 ztN;g at KS>FV2?C-0y8Z}vX5ol2gfk{900*qT< zlIy}fN)oM7 at Pl1~OCpD`#nPP9X3h2a&3lTe#nZ=$QmNK- at DGWE;m4OScrAvgmCy^ z*o40=ny4ke9|-ptb<#rZBh9VTR~z<$%1yiE!UvUnx$7QYK-FwqcLpE~rlbtUnickp z!#|bJrV^()>Amf*)+WOmA{0Re at -H`n){V&70 zNJGLG=w%2R;1pd_t zUM=I`Fedbg()<%%+FKsv;}n#-ovaj55%=u7Ih(>x8g#o7s5=>feYid+C#UH>+}a$~ z&Ta5V_;L?YNX2IV%*ECTFnap6RvqxAxS^7Zn6(1+7Yz-aPo7|%2P%TgHM?I994$G) zeGZy8MZoVk=hIGJ+yeXJm&2K%A!(;@jJr*FSY#8z;_n4*ThMdRe$E->p!rO4CvKMr zHyZ+$5>5S&k)`GO?5uo;53zOjqT_5M{^n~L^ZnE`M7YH%A~bxh)%LLnaLd^x&YE4k8cb!geS85Fv at K*rJs zKmU^?Q!oQrxhQlZ*}`^@4A<#|Yytiy7f~8Gi|v|=L{|?yM(J1j<^@?H>(cT7^F{F1 z{mP*WGTW#E9GLk6XJtg#qz+Z6;Um5YjZEnuhD&$#{CiNl3pZx@?#Hm%0q+1@|DbJD zH?v^${w~#3^PSu^YgfW>#HJqc5r0W2NZ3FrmROrwf4dx4Ik;Zh1ACt|J8KK%f7$i` zK6E_ACibu at XU@rZEiLPp-R>2mKT5n at Zne;}6>s=K})dP2C2( z&m{|R>>gY8D9(mL!i(So0H*76N}B!=IyexW7}EM=9{d0s?bsSDO!$s##~0wHnP>VR zPS#$z4nX9s))g__-MO=^-V+TcDDf~vU at C>YIUNY)aK#2Fkm41?G*&tf7S#tTQf)AN zoaY6RO$Wg**gdy2y0dW9wVT=pBvo@?#zV$J7KUJsg9vJDo<vmar05RWr7K`lTiuWOwlI9{ZVR>G!KUU*K5!!pPsNst=GVu*x!`4=sya8ZU2OQKSn=4CPt=QS}bK83weoT z17Hm&irsq(^dqC;O^Nxj+<4f+-)iE*-*%;@=>>HcV&c+6FTzFePg3vdZi5{UD%pWQ z-erOpaYxnV?qlYbR~yUAJ^sp(@&T1;TZCRi%Z28p6L7pC4=sRmfW4 zNMf#4KXCQa3U<$vJrLdm5QQdmFmn?nL9n%p;J at I>l-wx$ZtJp!`l7(wHkduv*wc=$ zS+o;iUIysf%Q~W5IA>wm$n-+74XNwb_q6@)aLN0!wGH2yL8f3xc(axK-6eoO!96+W zupI?YmvS8SE`?3vyU&c at 7=`;^mJ^C?TG7Td`qKKmyP@&|mqw6X4J7VqC}95WA?GjR z1iFbI0QOGKL7Rp{#33I2dW7tS!r?1xU__85Lc<-B?JD7);ipG)vCBg+x4W7NQm6yB z9y6jPaYc&|jZY09_YvN_vq&EFWs;cc7WH(YNq_ke!5FH-L9BMbflkpEBJhg^iqC}J zH8k^aT56F#>JF1tTqa}x0bbsk5}nn z-r8ow&y7Cfz>PXySm`OeEm>>-pqZ&nCNnvaM`4hKF3t7YC=Yk{sF-fR5!`f+pOt;4AjSJ{;4jyv$ILr_yL+iWd_TOVQ^EU?pS zOa#au;TbM{lHtn^dEp%XCu at 4m`LWLn;L`lU=I}~Z0e`vaAV+!Rh0I7;S@UOD3G^*k>In2k2%);CK zv=lw|Xf*KM#|jCv?K(Wf;`%e4s#7`It>@PDQp?U&Zwqoyope6$Ukfe}sTG*-vmtCiIaLh7Lq5T#-I-X;nlEPuXC|?Bff7WLuOBd6)zISKBqaRI|Gj{nIlfw=lK#(@ zssG=(t`@Li0xbu;bEtGp!8`GP9;RtNV!C(rF at 2=>vU2ClX z08Mr0>+&nX65Ay5TIt9ZAFG0;Rmf)>6<0AnoGSfU))XzRz>Lch?~!_t-b0!5Y=@Vs zqqee4gHuZSH$dEq8NINEnl4LDlTU{3Mw|9O#=yGE*D at FU8LigxlYl|XGy zeY9pq7!9VVrq{8knH}hr(pnQ9{=t$@xLDFYDqc!(4%5=#)BC~gHi-S2pZ?biM1`!U z)x|VkL4=i71kizNZqfTAcL$WA`#b--CtnjI7bEJ=7a_J;4sp*O9@pNJ>vM-^`{fmxe!6Sukd$Ps zv+*~BS7?{(-4L4~cB ztgtopv)cyF))O9&EnnJA;z{GA at GNF`%)7 at F)|r0*=qk)T-jPJ8gP3umQqt>@)tpjV z>L)oGmdDZ81N`~&AkqLqwk_p=DLpqDj2-*fl#fTN! z#m50r7IE)`)n5hPh@?Y)d_*5v>+%vMldsmC>UMfT<@`)P_hbf&S&gU!u_=WU(qp!l z*XCo=+HUNs$YL5dsA8z+O2}l4t1GqHZmahB|8jn_Ppd<{vkh16AVWk1)m|^6hI1sz zm$)%IQ@<3Rxz3eyv59!@a>Dp~FMv>FOjP^*J3<1vT+y4EmX$6OxNqDOtu>5m^|_N$ zd?y}c^|68S_RdgYvVi=JFp6tF)hz0Co9qU>9NI6ckI-diEBPM>DsHxlQIB8<0@^8< ziX8{DL{4jYtv|)d2z$!7z()n;&nKbHtF&~WZwzLy-$OaL4l4F1>6BeZQ?TCdKiwWh zRt(rcWye1vf>ksipsxmsj05g(>9$-xKHo!CIm+KusK8$^*-hh=1RFQLf%2UP5H7Kz zDutGwyyqK_y4gwEV!>b2mQbUf_@^}PBlkwUUT2yOWL#2V{2`5~9hL>*z;jLaL~N3W zccE5S1Vpmxq<4*|xyI)AJ^o~GKQZv9b8-TWqT(S%rCma;6Hbjqs8p)u4+nos&saY=ORLG1Fe7z1y2<1boRkvH5&nnDve#azy*r^3gtJ zzw(Od3b;=94mnnIJ0g{Q6MML`)gd}=bz|`~5SV&a;}7wI=~;ZER^q-ka4YI#;+l$D z4pnX`U)G1VCqeVi!hE*@D%d at 0^8+{D-=;4-*CU7OP9sjJTS7aJQD?z$%8^LM{)zG+qi#INl*V zgukusrTo4Ac<#FpBtwEjdT(NDbWmnSS2p)vB;?b*PlBvfJ6pE=?(&)+dNBiPOezC) zG3;~puHE4m<41MyTO$RQQOP1cc7;wYFBqBCD8;u0gUP4F7MXn`S>@7QbOxs3svkI3DSDcc{21*=asr&k9lYK7aXHiEhBGw6m*- zn!AP8#f9qrDi^MMK9~_ zEO)l8dv2 at -qQsNjlUmRsn&S at 9*e_pdFazCZQkFmcvt?UUO*>7RKeQRoVqF_jfRmO~ zx7wX)YR3c{%rkxsez5)lOhM(xs2QPjL_90=^USMXM4i7{C~o(Vc*z%c at yl|}W>#u* zZt-mMHJ4DH!;?Gf{EAJF|MU#MHBVRQwn>kgZ+>knRZsyN41LGmGP-|VV!lWz;-fg% zy_aot7%w7Jnt~CM+(3<=y^Ryp^XYPKSI<>cY5atHO8R_IN_I}&CM~!B ztD*0yFLa9zQ!T}=$vlO}EDr;<3x>4*E*bZXA27+aX at R4<3O?b7{1u#nlQ$E0uAOk5 z5Glpf`Mun7h2%4Cy*N#}OCo&>K)%Ycp?|<@?tN>)!4Z5DGNgWEnEBRrF4YufvXq$Z z-9N9HO~*OXYj*$!FBR>SDzOaEkq8!LwbV)w6Ih=gSWqUks+|lE)R0bjc^x0jOM9|L z0$QR56IZpXZlt37AKxA*i0j}7&Z zGfp3$tezts$f&|#wFpDw8ml2+sE)6#So`j2uY%usnA*+fgTb!9PafUXoTk4mfY764 zw`CMR==PzoCta!)I`!5}GZFrJuc0&!d7n5wGnc{>k%majjphxbUh|-;Ka{iHsVZNR zDp!B!8c-M0p`17sJP;z)_R=;NKttMeOKqQZYK3LuUBfpNthG3*&;Q$B?MfOEtjg{~ z-6=x-JNX{y$q9xTer=+z$fJ9o&&iO?jjQibm1MUdSEgE2AdVOCLyn=zsmFM~F`8Mu z<0&Y2uZN3jXN`&StP$4Qr}i{4^2USg1}^}e>(*zA)bnRG=eOeunar=g1o+6g8FKvK z)u15$w15RIYIuDV2oR;`(+kF;;Ol;I=18IbCt2kwJ3SA-nbT1z^1O(_kF!U~95?T< zgtX_n#j)y$gnw*Jxfk{O0U-s9B?@nfW8yk at cw`%{O&8IfQ-^XobM!l>diSwf4*!O!P z&HM2>+oiF*3RzLQD_5}kejqgYMnmMc1l at e}$SJj8=*zb>Cg*csQ7#|Sc=GkykZ(pa zMT#D&>1DP4xT#704ElZ*Ye22|!B2=&iFX;b0tUF+bP=2Ng0d zcS-t^cG|RCei#Cy&zLgg}h_;zi$tXd!iEGRS=e6 at Pa4gdVf#*RL$;qq=if zb+*p!%L%89CQH<&wqs!`nbYNEej$t`KNMJ3L^D#aGAKnUewO?v_LzwCWZU; zZRRlMtK%o=4fQsNUwLxEUl>35?Q&{L8WE|Jm~R0+fByNJo_1Dm>2>sIk at 4mYn&K~z zKWO}l{I5Kx(K`s8a64Y>?b_7`D$f2pypwNF!RMUC-K|Kg<};P;>tX57{4~*qMI~S9 zZ;X?X%sTC(KOf!K_zL(NAcW8$2AgM7v4(9r~k^SHSWT$$uLa2XRLM?7QUw ziS8Ub*jnNRCMD-uNr{A~Hep=%TS-%CR7GXTnJ|ejbeFWR3pd&H69rqOI=;{;?xh9!9!6hhiJzT-W4r zDFX_fKl~%k8&^)!v-SIFfhNl>b{X%jg_#@L2T2h_fo+G+*pPC=;w1P#-xgOV;}eSX^e`^%{9A)9TnL)*SH@}bxs at MMQK!nNfW?_ zI%Y8v_%DOTQK*l)@;28u2sVu2X7)cjlOss&Nbm3XlWS;R_j|Ywza{qR%ta5Xjeqq4 zAQ-m*_l{CLT278J3zJe+p)-|QY9~omhcQ=J9Z6)ng*<&=ElXT)uZAvbJ$2u`JI^4g zHSO~;;KQ;F&5!4W=yw&gACi!X!Ke at IO~o+03^8ks?d5)^bxv>r^YK}mSQBet=|(s+ z39eB~hTFdDaU`URp{ChhJ;dQGhjj%;&feDP!H$ko4(Jz+H}H8`yV-gt&z5mCa-0i5 zDG{V1{wFmgw2OFMvZ1^sHf%&GFvN at 3uDgC|@`GIw;Ce*z1i>KV at oD*}Yi||mDe^-J zF{@i)dlzXwr+`lPQhgYf9#`u3O7ZD5y?G)@m7Yu z{&}QRHWpfkD|S}Aq{AG87P&9gvQzenM_gi`@>Ywl7rjefLl+zb-4I0^k)-N87!0~S zWn|3-8%KH=kB8Wb+4s z at NYOFz=V;G>H8ww at wWnhu1qe=4~QFH$@517>G{UJxpjSM$lY3K#>rfk3s(cQcfrL^g;psXb=5gHR%p0jAW)&Gy zyw%scoDC$Njpuno2bGQrdu at kCyRCGoALb7h1*V;Sj{kTjer%zHJyv*f&o at K@kXTGv z6{>fG&r_QIP3{aC at Mv=vFk at Hpe(O0yqp2$;FrA6CsPj0^ET at pH$6`@Q-tVG-uf)ZJ zoR8adeQ?Yu&%MUpurm;u8DiPvW9BbbQY9-HPj6dwze-elm*u>dlb8wxi9QP44%)0u7hS?G_JGsR+%GnsDc}Df7&gDn^#HqF+;wH~^BLvc9_A z at ZIx^v*wC at oUELTUWt~w{q&v8QdG<5qIO at u17?XHdCbl6H2o5>XCmGS-PgKuuis=H zpobXpOZHq%X(I>km!CLuUo+~!X)-tP%7eTt}x&Gw?@8Ir_cHc at Qjq1kS=W>c0;^?`5-&Mdrl?X~%mU{Su z@#~Z!es2;9i&BmJU~p}_`-xJEWl9J4O%)Q&F>og=#J|XK?K;#&zYqFq$kmHC#aNU4 zc&zbV3N20hN~R25o1n7q&qmZ>-|PpSr4UcbU-z6CKgY?bqQw^ygNz$%NQ8dcV5wr!=5(AV6kGU~;j_TSm^8+PCkHW%Hc zI>G$bWQ(>wZ#LNqjYKCl4GNqGV68+X0o`}7lajrRdO-6;u<=q~+Lb#=4wp2V_sdp4 z@;=AZM%P}o$sPA%luH+}iL>P;xs2?%eed}Gmvok+V at W=#JDMV>^HK9LvDg-_Is?PM zi7uRi?jv(pGtJKG8^iI(x6`7AM*w$~h%9*yZ!@lu!kKhox4AF zeOCuVN>y_j^E*dXtH|tMcOET>4oCZQNV50+4pi8RIfNV zmCNAvkI~;G`VQGbbJym2<@7$?rE<_H&lxGzT_BX6Y+s;@UQn4_Xec(AUH~7EdQ0u* z2TW>8oYk?kGhwGZAD*y7mlBw1NL!0O6mvUC at duX5avs-wM7V@#rq(E!rdFUR50_P# z3}8w6 at NQaNlWX*s(IMLJ&I at f6M%96g at us)f6}B36dSbwMxqwHZKRwJNz6cpuD=-XK zjx9b|f3OW|#U86eIJ}hU!X(}n8D2bQZ~vU+!T9H at u;k*28{W0g&reSXv;re~p$Fz; z=D6HsDZDdljyJj3q!^>i(+kXd9r#fHU}A@$x6dQ30?~gt1c7A2c!#_(Kj_d za-?tDctj>}A9`-HZ+0{&KOk5?ZjD+F=7uW%(JJu)zm~`WnsPY?Day9n(?6q zD_Wtv^Yjpm?WQK5UFE<^wvb6WHD(18?UN5*b!#A(vBvk1+_i=?tg5O50AGhdFdH)F zLg#hjK%`9h`Tnkhlh3OS0IjZ6m>>!igK6`l at 7Ax^E{Trb03Nh*du=Q+Uo zt!{{k6#oaKErrL zClqvE?PF2Rs4mIFb%@8`q~t^c=hnHS`aF3a{ZdaI=~jL)6(R~^Hu*?jW^Vd@{2oAv|M zT=e3bSr$6gZEl4AF0g|@aZ)iF1UZSEJTDAI;P^#7l)pu?S}$e9+wi`ANlQQMby)d3 z%D<`F at oh8dF2w(cCr|&GqDlmoBQa{_gXb1PHA9R0W=91b%^V1nQcm>B`YTy?%W$&q zh`B9dKQh4N$ze1f&CK_x1$Sjn4 at 45Y-g;#;M54;SNsbzGn+1$%j9Kk7Pum%L%Wr3j zn6iz1!gEv0Mby1C{#)(ymcX49ERg!@JVVWl<J7Ss*DcKehvg+^v7m;`Z9m;5sewir3o~n(z6%@A=pO+F`%G$G at LNwP5s9(YVoYzn z84UBtd$r$VPv8 at e=rl^0#u=uMXI8!xq%46+C$d;L5^Im&N$^DW)cn54Y|gj=4(VXK zOInx5!67d{7q0#lrF|qJJ>imfH+$4ifzlJz=rEkTy%Q&(S^>P5S3;RflVrF~n}*g6 zZXHO0cT2PKxsyyqP=5b=4K>5%sz!cWgPk>K%(XLC?#^f$@kP?=VY&xroyvj2Gpppp zJS(XbhvOZ*dfA#6=NhDFDB2+2a-&g9!KLD8MXyh3m6&7nICTHR_(T at MhxC=-fU9Hg zdHS2YXJOA;_WvF-fyRCj#5VD)qCL+-IES<^GloC2-komi at O7S~I0a8QFzLKd^afGU z(|&tt=yZk!pV{iXX)$al-o4ci+NW~`RBohZg7_Z%oU^QqSO5K&(qj%z9q|4MnTt)P zstK>JvM0_|d>UPU`z++$RA8iLj)tLo{k5_9L`V8-s&6oX*Jt8?M*i59(&%mYj%H7* zN-~I^a}bxd8lA6n_+pgCI;3dTu1;3|mcK)EH;tWqshDK>w*E`>*ZZRdESDkB zAdSv~Nr|#FT;uCAM-Dxq^UX`5vpI5EI%lfOT^{2Om~MUevbi>JDvT+%IqN@TbXGhYwWl3qbGCE>rR## z at i;uQnyZ_}?{YiE6l&&ol&4I;D^xUW|N2EYK+WAP4l1kF&3(9##=DIV8H06MpNzH=>N9#OKDV+HJSLBz-)QPjtFBDQ;3J!1oZn_n>P_k+B%?KKp zXPK}=Q9tK%JEB_SIdjW8Q_m)E42eK|&O^20)&@=YxtM3R`Ri8dKdCJ)I~VRfo*HFM zNdGehSS3Dv-FU64Dxd($VH>g_UBt$ArB#$7Mj|H#Ct6QOIdwm&JLXY=$GSji|KBgZ8MfG0vpZ%})&NHZ~ZSCVA z2oVGk1T2UlD1wv_I-yAs^eCtl0cnO1LQMh*BoygV1*8`d5CIEPq>6-&ptQ&lLAoFi ziX57pfRx;Lj at NVUojdoPe7H03hwKlTwb%Tg=UMx=|Czn_?5vee>jUu1V8H`jk1Y-Q z>xS>`g~#&t`HI0o2hVkgOHK3zj#6uUmM-LYh-dn+r(10h%Y{5{&A at V%E!v19i-B-0cr(kwtyQ>qtc#Tdv z`Hdn453PUG!g)N)j&xs=n#uFZv!YnGtPi7cRJMnbUxSW_6gfE#lV#*=zKqpsMTn(j z;k74?BP$#9TiY5Is~ZlRA&Nta*w5 at fa3FQL?K at H7ycrxbyyvl(W{4FdD`i;R#|ub{ z^$H7EE;Zbd7cVHzFi=f+?gt+X?jCsFLAxHzj;TG$E1nnf9$)zugbD_w^#Yie?5j at J zO0d?ehYmLMjIKr?>{cMv{3my^FmrPh@@+~H1oCxEUo>ID(jqh%!=LYQ zkF5oBq+XtJr-U%S;L)_Dj+tBLd4z+in0fgMrqquD`oi_2%X=5k!P#r;p~nd$_%Q$c zo@{(^+L>L1lQFVv=HoZ!+0j{tMpbgjsnXk*- zgst$8-N35Crn5S2jW5>n<%go1 zgq^f^6e99AUcHqYL73~?nF`=Cv1k&9 zQwA@$dcLk|d)@1LKK0Uyzoso=1^ZHK*ZRZCEh)VdbJH8$iOf&$meJnZm$J`4FlP~r zAK7_p`-pFDlZ at vK(tCfb%8)&BQee}<(N0DEjK44wpNid=j3^B6wRK4NozK68neR2Z zxle?qCq+AIDP->w>!9^(-NA>F>>l+edjn}}hHM*tQgh9QVtNJw%TIAn3B}qCY)xWa zKE`?AZBFY)Ji0AJ&Ev20DdHL&+?KLGdiKLynNdXVo<={q_V#LztHm(dC%UurHU%T>!W_4h+sTZ=U52 z`?c8`IGEE*TKc?*^pfJ~CDy#m#7lz(zD~%G6l}d(T{0?Lnz9hT59bPvdq0KVFg&cc zl7Q_zmItd5-4T`bgL5^%X<9i`<)vq?tHaD!a5G4IzUQV=oz%y8 at -|_YQ~c(ch!<5K z$@rkYrpf4w_H0h3_HtW$>Zd8~=ip7mSpdqFQju&&8N8RWQuL0}DC(ytsl%h5Au`pm zV*(~3sVuGWw>DLii)C!tZF1sUb28d>m%1f2Grq_#hf1dG-&Jg1w8>}lcn}fRhADJ8 z%i&q7T1C{?d-Gf(0DAEA9N(*)G*tul(Jx5^xx|7kX)P>Uswd0<0 at 7ETZB?#=+&aoB~{8pR9LDh;CZDap}Ixw;%JB&cY)>kGu1fUZ=W~z%zMVLf7 z%CFg8l+bKIS1rCtkSS>+0uuVGH7@$p9aF9}sgyR{SI;p?yJUV<@p%NV?me6_ at z{ee z%zsoAFs=yNl6#lH8R1stE}FJ$7S-3uUH4 at dvD2I1dn3H}jlH1Zy(6LdJ?Z-?F52C2 zWwwT!r#PlqmtFQz{}RRwFF+8__(5*y+BNlo5&h<)>&C$(}ch4mwKUz z0P?@ ziaSu5^X?vJN}A^)l3&p7Zr&TS33_R<%cRCbOXpxZi^PFf-Q9;Sh#ClmBG39*6zR=S zy&_D^UrlFpMC(c1O_zfV_EjB=x=|GgLz+MTbSq4)Lekxtt3;GwpQL=aQTm|yMDXAYtj z{6|Gd;kZw?pGu+Hea!VQdjsNI!Yq<`6;ea})wg4HBw2IkN?KGRoi*a6)hYoM76%lC z+%&)hw}tgMd`jvJ}bx(jev=w*No72O%8u*A0f00>VetRr1ka55!R5)H>60MpGfCuU(`K<>*VO|>-PxF zX0`KtY*}E#k)3gtwwB3YjR&0hAIdPh4V|+Z=;~t+OV4G&-KF7`RXxy5~DKKIF9+{&xQO)LmSENOhPu zi(X*EPAIo;uVnd9w+?sPE9;t^=R3sK56|yVh8C5&MqD$LuI#<+EF3nTu=CtSJ#h0k z(m4b>*hpI8>fMsnhQ5{q5@{6s%uM* z<#wgpQN9^&{jr^R7}M5OAThJ-;z3^dw5S3k3zO0BLD*s1u;H1nvkN3`lTyLt&u=4bUHXp|tk*ZZHV=hXm)U0n+|n5NKg| z4XBIuL;w|JAkuJIc?Ft6wm~Q1O5U-0p*l|a>3V0#$$je{3L4 z4q8jy)4>sHtf&8 at CT&jxm=pnFhPiG9y8I1yd&kM6hd*L)dpzno#Za)qVhWS|th5Z4Lh7wGGVZaa> zS at 6%yv_N%QCsfxH0mGp^P0?sK%|8!c-`Nv^M|-+rfx0I0>fa;(Mf6wIzv2;kFdRaY z#zRF~R#943$rPgUor<&XBz!(%# z9sF14e;wbSqo&z{W=rr-U;cCGKTqZVr12N`|4I5klQN3X1($(~fr~Bzbcq at 6V&I~S z09|5+yBN6WB0!gz;VuR)x(LuEX1I%ii!K6mi5c!<;G&BFU1Em27`W&nK$n=|E(R{T z2+$>FxQl^{E&_Ck8SY}>qKg1sVurgIxacB4mzd!$1}?e?&?RQLi-C(S0(6NP?qcAg zivV3>hPxQJ=psOunBgu4F1iTNC1$vbfr~Bzbcq at 6V&I~S09|5+yBN6WB0!h;zq*U# zubCbQ6m5D3o;HsI(&y$tTQD4XNl)8UJRvqo%XJ^*XnWv|W*f}4my^}4Pha;HoE+U{ zmEOIgTw9ei(R88ACaVrw2gr-8{mk2QX8u>9Rkw%1Y081)WS?<$5iS=v^ns?ph1G}2 zIudu1c_n5{G7EEZicIA?R2^rQfEtXv7 rGHaQM_X at XXPdyq#HTF1G45GbAU8kNz+H-xMcysB3kzR?;t&o2JV!jmc diff --git a/src/public/images/delete_white.gif b/src/public/images/delete_white.gif deleted file mode 100644 index f761c9ca967c6fd899b23c3cf2fb1bdba6ea3eef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13236 zcmeI3X?PPw9EUfO0v6C#yhYt^#fv1n*@Pxpk`zo0v>L=V2-b`3?j&84?5>-wNee3C ztyn863MwEf3KfdfyI at 5`3vH=*fLc*JL961e^{Tr~niPB zpcV9um>HOcm#`|UeY=a3GRsAPidTWKAbN;>Ev*DD at E&5u_y84)+RoL8m<$h3h)oeY`t_XNFA5Jr6H&f1_wTQ7f89P-us6GW9P#%zYAyoUHawkL4 z4CPFh4}#L=Zc-O9NKC(V{Y(dp|DQ0P%lMLOlxY98 at Ei%EAO=J=t~s;r?~Lb|kfg*| z)hoo-~^SpPCdc0woveLb{*~K*1W&+>4Gu<1*3E!T~G#~V3aPT3(5c#jM9a4K^cI8QM!;WC<9P1N*B at vWdI6B z=|Z}o3_!ssT}T&{0Vo)y3+aL~00pCTAze at gpkS0PqzlRb6pYe^bU_(_f>FAVE+_*~ zFiIEF1!VvVM(IMjpbS94C|yVwlmRFhr3>kTG5`f1G+nvbmmWaWo_8d)cN~VkfBydK z&p |Lxabe*WplAHLuB-M8QLeErqlJzswD`DdSgviswYc753W!Tay+-0|)^Z@;zu z&8}^o9qn7Uw7v2A=GQj8y786Pmp80$dFjO$o`3GyXPVbNy|!u1>Zcl4t$gx{6^}pm z=<-LFEnV{PLk})q^uYZK at 4NS&1$Q^xRe$IFJ8r-2)?04A>Bbx8T|f7_Yph=(6sp4^z;jjXtSc_R?9xjrFP=H$qUphk@(ZV3Fg0-gd1a+jCi~AV z at treiVzJlb#u%5=Q8eCeqpcKaF`LGneb$+0oIdunLZSda^^}vxoOI#|#~*j>F-MO+ zDnIYYBSwuJk$d>?VMB9_Lk=@wSV6DRFbo at sne^8&`hyzG7;M;5+PJ~l(>Xh5Sx!Aa z+*rM8D40Oc&FflcG7MR>r#FDL;(78oY<^o|eh9NK-8ObNwYq$z!#J^hSJ`N6t)6|@8fLY0m+x%%HFfvoV-x-bU at v>A diff --git a/src/public/images/fade.png b/src/public/images/fade.png deleted file mode 100644 index 77059e64ebc90e419e8a4979d165bce436220640..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 649 zcmV;40(Sk0P)W?nb0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!D at jB_RCwClRoiYQF$lvb|NpPm?z@|C z3(Op;>TA=UXoewy7~?2kL&XO7Uk*1Bg81Yn#`_*%dP%Lr*~@*9`vGgeoG0!tfITet za4!plh-gcWaZk$pYQOWQHseG(*7ILU?9KP`V^{I#<0a-T&CBNPsIX{ao^eLjVL&t_ z%*?Q*>0&dGU_n at 5T~zrt$)7WEo^wfqf at P`^KzlXVycD<_!PpR9D85pbdpUEwkjf%- zP(Xs1IJ`X^aNZYH{26hj$kg>E5v}Bj=ir#d{_}My6gaCofbP;-!fB8D9(D#x?~8nV>9va zg$(4Q9Al)KGz9sfVO(Guq^G(&2}pz5 at nSo;C8G)I&2`;)hz{4wNJeE;#{M7jLIFK! zzJ at r8G_h)leCi?2s?nJv^GMpN+7@;)jfLf_4-wiJ>VtxZ032YQX^r^2opymZ+vBRX z7u~_h%L5+KW=4~O9uX$I?5OhUDuYb5Po$w2DDT|#Vn;_Kab74^93O8!r%PJ<`E*sr-_wZ5*jQj_0Z0ollt!i&5D z>9V_mk8$vp=;!kDzQ6zlXZvPMOZ|!Py$LbG>6>*R(5x`+0k973lqy%H$unuBnA-Y2m)XMKoLL*zzk?w2u;#sHh>4N6#zH^L}Jq9Dz&D8JA+t$ujFKRFpAL?_oT4r=1g7(qp$d zT#Uy+u@*j!W2Ae3H%*bvh?r%dqWv#O|C}aX;7E;JDKjh78d4J>S7}u`ZA3Vk%!=e# z)Z4qbm`;aM=GKD6^Z$-hVm6L9&Z-H(rPv9-q^z0kuBc$5qawVfwGa7Ac`Atx3 zxt{imxJgX2b^n at f>;Erd7IT{~=XAl=ye$?p&Dl6R=MY_zGv%$$EM_L17woKPwA$GW zj?S>A>*@B+JAPlwS4**wVoA5<^2VpPZRK6LY4?6thHn`ZPl6;D>%zK_3?RWcU04^A z0VEiw3+qBMfCS at oVO>ZDkYJoHtP9Bi5{%P at bs-r*f^oXAE+hj;FiscNg=7E;#_7Vk zkPINfI9*s5k^v+brwi*sGJpi*bYWdc29RK!F02d501}MTg>@krK!S0)ur4G6NH9(p z)`esM3C8Kdx{wSY!8l!57m@)a7^e&CLNb5^-!WZ*?I%4rhjhHdEuG`&0N0zYH8x!R z=gQxgef59+d8zJ?i?uZuey=`%?rc@%Z@>O>=JctP6+fRi{?m`gj+Xy$Tbti}W7EdhUwd`K z`gLp9tX{Qp#qwoKmn>dXQvAxo1 at q?>6&B2$lb<(xR_ at C)UwZL{oNSMK#&ppoJn!Tk zc3ajoYi33|XECR-Q=gkMIrZ5|&rF=~^iwIxNlzw at AD8gN<74B;jE)->Yl?{;8D%u+ z2}UDYlFg0BX2=tRU3;r{bG{sT%xr!Bd0v-9%j%q=J^nm2#J>`}!fixw|g zx@`H1m8({-S-WoihUKQg8#iqV+Z-m3jERYgHH8H4*tsiM9lbTi=p8`rDJ`Xj8_LQU zZ=XKB4<70ru05>Pm212`gN~o*B~zR_eTw#Wt*q)BdOmd6g_=R$fV#SV1M7X42ln at N zZ0ORx$8{j!Y|vD4*516%L3;w7Q*-wfbPMT9rsWszpWjzK#a6a`|6H_V+Po~-c6%~29IEGZ*N-8Pau>a(N0}GBd$lhUkq#-t;$@VwDfld8C z8E4nj$eFh$tM^w&Brpm8`W+x5A|lq9DJdDrE>_~0)3Cr(qwB-WBS#!q90Eml=uJ>e zE7!;~Z#?j8!Pk&Ye9{bT&lo3^ZjX_X{ov}&>CnK)(6>%eB3M=@1ZX>hr>mdKI;Vst E0IBCi?*IS* diff --git a/src/public/images/icon-queued-11px.png b/src/public/images/icon-queued-11px.png index 159e763892533ceb20e34c6a5d95f22a0827467f..bd99c71acb11fb0308d26760110e66d470317cc8 100644 GIT binary patch delta 365 zcmV-z0h0cf1FZv)Nqp)lP%0$v-kzsTE4^^u$vf|Gb3c at bkcshl+y=RT16V)| ztbkb!&&!=gC^-i-qDI<2f-4V)t zK)KDV?z7kdkL&gNMP(c8*qt`IIBigrC5mE2vcmIhyWJi)_$|Ny31G at EBP7mw00000 LNkvXXu0mjfBrUJa delta 342 zcmV-c0jd721C|4jNq;y=L_t(|+G70w|33o=XvWn_GcdE3F#P^rzyJfRoD&%S{_eTH zsQD>~%Lr1enNV-W at aNY_b~#;!P=6l=qZelx&Pfd{+iG$=p>X<-QgG{V*Q-5W+bo?OL_Ah6SgJ}@I z?9E;VLrZ%GkUA!i8$nhJaWFABI6A_e`~B`M2C>Pl41)G94B94E3?Ow(APF527KT+T zS27 at j`=wb7vX#vYCm%fp%Yy)zyz=G`Lv?sKTp@?D8iQz9ECa8pC4&Qy-+J;BSeywI zJRo1c`|*$Az)$}DU_qtsX<&sQK1duS4^qbj3P(`zH0`?0pa=2 at 5Wt)S;)BG&!3R`_ oHJm|i1UU^ooEb at pL4W`Q0HnjIr!FTu)c^nh07*qoM6N<$f-`5CrT_o{ diff --git a/src/public/images/icon_add_11px.png b/src/public/images/icon_add_11px.png index 40062556a491ca665553e9d61d067c3247f16e18..755119960ece3b3bf46da5ede41b52db6744a9bd 100644 GIT binary patch delta 277 zcmV+w0qXwF0FfBpmu z1SSW9>GgBhgK3zJEPwv|VPIxqVfgdsH&!b_27wh$+WHQ~x__VF{{St7bN}~md zgZHfe_I~bQCP at B2Ba#Dw*8T^I9^ABpfdwS+^)t{~u(?19Mvw+1OQ1}!iO5!Knb?3$ zy?*)#YVa^1y9lWN$B#cK!2 at G3F%St at qAfTX1o_z*etiARFz3iWhI>~|peV?3=LgdO b0R{k;$4%GV84f5g00000NkvXXu0mjfJ3o6B delta 307 zcmV-30nGle0?q=EB!3BTNLh0L01FcU01FcV0GgZ_0000WV at Og>004R=004l4008;_ z004mL004C`008P>0026e000+nl3&F}0002gNkl^gMn-8F15!o5$_rHeGWq*D#c+$CWF5lsZs`8G^ z&v*_ZxT|F_JwAU)zg^CP&N(CqNRtGBR<{MfWIO at jK{VD{3dUe<`V#4!%YviD$-^ao z7Ucib;q;Jopb_eKvknLXsN at Q&q6n+m5(98Kr=S3eiXh}5cPlhP4_&F&P=Vbh^5-Gn z2sDnZH_yWayeuix`TC?({2;!Z`HdX=?b-|U>O}x<0|1uCP1mpC3F!a;002ovPDHLk FV1lkfe|G=? diff --git a/src/public/images/icon_add_hardwarePool.png b/src/public/images/icon_add_hardwarePool.png deleted file mode 100644 index 3e7431c9602cc829b712d12cccec89e87b90a09f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1223 zcmV;&1UUPNP)dbVG7wVRUJ4ZXi@?ZDjy7FEKbT zFgP18k2C-P0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q!|*>Mgsr<1RzO7 zK~zYI?U!9l990;GpJ{g&SSYk*7qI-4Qe$cbO)C9KynrT1T7oudnix&frtzwYjTgpN z(<|eJsjZ1znbcIHHzp01xMC}IV at pzPx6nqkjfvJ!SP*cR!ou#%?wm7cya2b$vLLK6 zTumO?6p(_6-x;!- at DwlMVLjnlxy<|6SM at GdY0yyyR>`|4u%o~Im` zGjO8)HUOs%Y at 4&_U|R=DDU=P9qeBc|_w|;!t@lY}#CtT-SRuFsF#iU01KB-Y28&MvB!7#cEB% z0>p!%j9`HJ9XqMtv6J4LfmUB_}j+=a-y82N7^jM6TVax+}bzR1?WOi`hvBqTnQcEL3TEvAU zq9?d=wuga%`*=NG0K6U#0HJW0s)}+hesu|HNi4ZUcxw08?0S}CC*LL*j*yq*B*(ED zP1Bf&8U(`;00M#QOh>1weWH%K+9#8WeZDV|QX+*w3Xz at i!aNsS%01j0eZbEHBa9FH zN+KFzwJQfV;PsS{o9m{p?>2Yt{>0urElfrxh#Lk%2&5DUk)`cpkr>q_Yk9in5o)VS z5ZfP5vHb?R5o36GkkXPe98MR(!621Yl^BMBkS4+uh%A-sE{DV2d++x-wok_542C8F z*t)fjipq`j{cwv|EJk_xhM5cX7*foDg)p;%Uz18Tr`vAErdZ{4;Reijf`a at 48XKFK zn4CbGGay6PXTjMkKY!)>p5_B9VtwN6bLhmXWk$1 zp99u?I5u>8!`5wVEG?$coy(LS=l*CI03ig*R_q&TrL*E|lv3p8x at MHi8P&6|+TGo zf$si*|Bck~rsf8Fd^|*Pu at _qiY^9RliFn+=k`@VN0PN1RxBt^K+-_fId*{cWd_Xw- z2bQ#w&1EJMi-IBZe*SP$(-xddji%;?M&LD|_4(EV)NHQi{kAjnz)LwyEE}Goh*IEq ly5eQQ|Lyqi{xqy8{7-{$Rd%;2W=8-3002ovPDHLkV1lsAK2`t# diff --git a/src/public/images/icon_add_hardwarepool.png b/src/public/images/icon_add_hardwarepool.png deleted file mode 100644 index 6eae0d566f10503c7a6a7f980a9d2b6d0e6353d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1133 zcmV-z1d{uSP)=jNwIZ{&3Ukwe59?r-twaZ9FchhXPlCe-aaHytKFHhz`y@=J=!-Ds#8@}$ifduI z#dO2Y4M8U^O==T!yX3aHH_82z_&cXpCS+aIH9V;!>DETni0v#}|NQ$g0gK?a;E2X0$cRfrBO at hcPZ^|Mu2fKLuvzN8a8WQTyPkNGS2Ds&MtGT{CE=(0 z_T>A0XMW)AXD>g6!d;;VA4K{1WRM0?&fxOt0D{50a5|j)z0={~ZA=h2_`)|AX=`fGwN=86 zk>9%KX&gQN4nl&6s!9tg%@zDx$CD{O#){v66|>1%bUf0D&W=a(9{YS>LnElBs=Suv zd2N*yI~pCh6S;?9gHxCe{*FviM1{2ycJ8eUHk%#e<2P{Y_AfYipa%&tjx>D&m4P*t z+A?L2iV{4oO?bTZ0d%yupzeOyAp14QDG8Gl3vO2f%oZy`6CpIWG$X~}ngUf(xe?{S zWvkh2AG`C{BH0sC8WXVupU~dkiKgal82|Y?BnrC5#;tP;Wr at qJ@~V^tze4ADccJWx zG=mM~C6irAXHZjJgRZXqh$rIElsQmJmgm9cdw%xvkAdzZ2lg&2yF#++IXdGh;ndaE z!D6xS^dJ*lBac<~&6P5~Ii<-n)NKAJ8a}zTeJ8fL>rrdBVMb2lZbaa7m{(bXADZ%F zu<2W#Y-~2`oafq{*YjKL_L>83K2Hatzl|RZc^>K)BO$&Wt2aBrb~W3_41RXYc_^98 zzwmU5N4iET$!e1Q)T?WT&l|vQDx=iCX&m3*y*J0wXMMdBIr1<^;DvJ{O>mtKq)e8d zdi$2k?f>Ntw~rFW;3uDc2toLp!xn;zsZa`BET0#>Qms at -0d@wzPSyLY_b^)9JosSX z)DrM&E)#2p7cs(3^;n_DYl7eZ)9}BA|0BQvgiBR+n^usz00000NkvXXu0mjf{^cvr diff --git a/src/public/images/icon_add_pools.png b/src/public/images/icon_add_pools.png index 8ed5b10ef6be8558e4a6a76241ae028118185d8a..14b6d568c9f74b8fd02af967934429618f5d4a84 100644 GIT binary patch delta 784 zcmV+r1MmE!2C4=jiBL{Q4GJ0x0000DNk~Le0000P0000M2nGNE05!iiwvizyf6Pfl zK~#9!yjIO?6G0Szvmg0tQmxVGrGga;QuH7myjW84Dv0R8i$_63Q0zg_rZ%P8gEudt z|A8RtMNqI*>BZtfNUb1J(1KL4me at Ag?Ci|=X7(eKM5K+a4<0*{eLKJ3`@J_aAwme) zY_q}vK^rYx%Ex1N!7z-x9>f at bf9O(rZ>V^85~u5DB{K=KvByTPy!t%*LU6j!;H5WD z#CY-YMDfPOW0FtXnV`imnf~s52Z7h-8iM)`9g&ZL=P#!Q?%Wz&3-OQWUu!Nc%ItLz zi!&ZXHS(395-0#$i}gw$85uM1dE7$w5y;td7l2qh!RW{V_sYPk at 4+;Ue+XzjX2g3S zW?KDHp$573^z_21$3N8M(a9{VIu%GIlTc6ZPlhCk2wszVtl&UBrpW6cwq8-0q3bx1 zikp#oE#0nvAj0qbI3YZsOo0%Ky7aYWTSt{77+I@&(Z}0&pHQ90+(n?jrhVz;3TmZb zmUL0fA_zr2*ox4$Um4z6|lYW*U9tUu;NmbF5cc|luTEbX~awr z2_{-(aH|za*mac at 84-*%^+f1G%cNW`zn#9i_i!k0-^~wdf!X2xN-9~?<)wKL%mLw< z5fQ&YBmx5h!KNnuSeL7-tLqFtJJGY8^9jfCqLX0i*(k(q6VjO^f8?^Az!6Aitk++N z=0>1lcc~r!9eoMi148ung50(QWYP&NoC&sxZNX}OcQ$oZG#B-D#`6d~k4GStAY{u- zsRWG+HQJhoQmKQ2RLpnT`bP$fkiK zBhuUjYV@~rQpPcPW_q`PxV9C8ttk^XkuQ-;T at 3WvYFpR%1|AbFAPk5B*KR-EpsVU# zy}aSgh{s48AG^@g8+a+MpfBhkGOI*WcK>QpYe&BsH_gcZ_#^RKfB^tLZdj;lIfa}6 O0000;;Ef5k~e zK~#9!v{k>06G0Syvp>&xNm#_7g``js5z#^r3*mYT1%Ay`W(52O*oEv%BMaGn4G(E|I8r1G8^-XXpFA_syGKCWL^EY))^$ z80$Zqzh2_QUM`)VcQHhN#XuPte_0T?7}aRb6g5s`J#frGDnC9m2k`my at VATi;L(i} zV*&TFHPuYW>nLzNCk2er&OKoK=5ufz!+Zb8^c8>|`=w<`>m5M#8rU`)Tv<8uXXLmE zP=D1IZD!zYMeyml at ABqhX%Dm_3o@>a{?TTEilE2J*z_4B0L at PTt(Acye=-SNQ!8c0 z1%f-?u+lK!M5jZ5 at C^WOt}RpE<O>F3(lukp}N9s$=2!ND!$m zEaZq&0#ewhbFB;k84-y!e{S%^N$qMcDW&cv47k?99^0x5av(j6POVmZv2bDMp`QQy zF29voESC35dl(Xg_4fd_s}_o{SZ^7v7&EaDG_lp3jXfg5bZea;2u at +lVc(J@$&+?F z>YwnJ3p3zh73Fe16!Hzq7r}hxb)r>E^?1*?dd6%;ZhVWX*ndege;G5&2)1nxAUnyx zov4BDc_7nCv<)UWMVW~n$9#aGS6lfn%dg?X)dTXT5iUbE+l72U72%~D!f+FD!{r`W z7+I`Hi6D+tG%YepmOs9K5e}a`C>Q5)AruN3Iv#^HPXI(hQE2ZIy$_boj738Uy7@^T zip9-1{0Xj`0pB0-U*RMx$!jV}nNggQFikWpgUYx1?4 at Jn@_PJesv*qM*)>1cK2;L- zV3jZb(zq_1A0~mNfr-faPXelpjwD+3M_c#CHu|UkTYv!okIFbH>pEC#00000NkvXX Hu0mjf3BYL- diff --git a/src/public/images/icon_add_smartpool.png b/src/public/images/icon_add_smartpool.png deleted file mode 100644 index 6bb07d7cca9839042a779bf8a7203b16bc6cb830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmV;l155mgP)5ZRZ4q=+JlAbLOqnqQ(16_vfd^?<$v5d{?y6e`t+R4^!t6ePsR2Nn&T zuld~m+y0N+`EO0;YHQibFCIADd(S=G-}#+;&i!wUbB@^(9cEGHz-J$vF*c&H>V9}=Hxg1O#lhO{gM*Wh`1Wgz|;0n zo1R>>W-FGI?9=AeGX>X2FL+GTM*~Oi5nGpi#Wt8S7HdmqO29R#eDnc{Y&Z6Dnf!s$wGc!5OEWT8X{Bxe79IDniZ>9Q^T9IMVgUMcSNhVdmWrC7*;kl;4No1u7n(xt6 zgYUALiCj=5Ku%dVVA7|DXM(^LV>pnYA2wr%`KnZd7ubv{fyht^*fpZyQ(pjG1Hs<{;tifV2s{B zE(Id&D^tb%c$QH?|0M9qBS4hdGXh;r+O2KU=%k16Qs;r9C-|4IKj^bqe{?wPv{bQK}|DW<*fB^u) WmiNB)iZKuX0000mr at PP8-so_)2X6+GO zZ;m)bCK8JLq-xQx-v4~|lOJZ6?9O{PV;X=8z!x4Hd>gL)YA)B0bSeYWGErVFp$OBLn1vckswYH#dZDM0{0}Bhk!(h_0&rg2$ z5yd<5b|h-ltAAs;UHt^8A{>rDRW&FCE=dYxNk&gk3PwvG3*?jq8{ZVh`2{+2#o}#W zA=B0ywc%bW*|s at M(*WlTw&PHs4VU&XApMtKOF{$FfJnnE+;t zk%op>vaHB(Y at 5JMSe6Aw35WnJGM~i1KsD*VdWy`hq<=(amy1g$C at ExF@mMlylxemI z*u+|`1{d0FM=xfv3#z6HR-l4lwkV^IPAb$zBWsny)lbikBb&*RUW!*Tvzf=%Gz_e) zuApVfGxSQQ`|i=H>%#T0+%CHGkkUvvfBH7O^2Fe|Tt=J7?c9lUGDZ5 at sMM+`mCIOf z@~QW}xPS7N#cZLSr3xnc1|u|&8-WV&t}*l7&z4W(WV!);^%ClHbD|9NWcOl8K8$Z_ zc_(`N_uN{X;q7s0G=Ba0rTvEjf_J|;@3Fn~#sN`2u>~&wRVpO!8l9NC<6flpCyi?>iLyKe&k@{&Y|6i zro65f>kQYb3|H3}3Y0*cL5m`uAIM9J_OKW$F;ZIrPLrg#^3K6SflpgYjqkWmP49x^ zP=6BJL6gYMZP}d(@iZrmq(qw7hDL>?-E+#)>GU}5$smWAGRl4cp%^%G{K;^AAgR+t z(O8LMyjY)UuuNZy^&kmZ$mPa at BWry&Z?ltbxES1yS{g*G=u(HcL|n^akwG zA2rr2eO&zZ%vm~KyA`OIjwo4X$I!&_Pp?4=1s+-q at S0*ZY|D z%=C0ORpVY~5)|-(k!q)=r{=4#>Z|UxwAS!{U;KVAEX%s(iYN{~__zJhEf1r&p^&b{ULaL&hG`{s7^@bxQ&FY?WgMZlU8h0vqLoK(m at NBvQYUW(D#)`Y(=hZ>@OGs(;edg-c!Wz>?qw(u6?~d&5 z_H+A(GZEVhM<1i|kuAW*Yn4iF`}40iwmk{$kqi`5ENW5JRnVAiLoRjcZJ~L2>HDJ} zM9K2`{3OoRE)?b&0`a^s>MQw-u|54;_aEAS_x1}yU-NILA0FMAd34W1knE?O1C4Jhs?by>ITE#|g|ErzIs!;lN^ zdF{18uT&wt`rFFt^|N2L=chmQYqOXC?Rq>V4oS2ES~0)lz<6(AWG_z_9=DzJW{Q!* zEr)LHf>)dUss87wDN||fzYb|;_J11f0n_h{S)(gJYm=^M%V;jGZRF&)3^+GO8;>1C v%Ct$CyNY)DM*dFV&H&x($7H+X|1H1(toPtQY??&L00000NkvXXu0mjfmRtNE diff --git a/src/public/images/icon_add_vm.png b/src/public/images/icon_add_vm.png index 4e9859b5236e85adfb5ac554f17f80ff96a3e3be..0a399d7e8b1fa19950e0da7678a31adde31ab284 100644 GIT binary patch delta 1052 zcmV+%1mpXT39|?xiBL{Q4GJ0x0000DNk~Le0000P0000M2nGNE05!iiwvizxe*@J? zL_t(|+O$<&XdG1({$}S+cFm at 1cVopCl8REL1Q$zv at WE;x`_j^`6yMrXp&)_}MubvH z4Xq+V8!Lj+rSw5x`bSFz at u!Gd!6=rBLZVauKIu%`0#y#=VNs?gSlH}dRCA$SFQ(FxsX!9e<3JW>TPU; zZLv*Z+~zC_g#yy)etdc96iUC(;@qXr$anzHSM+f}nVD55?&@Yx`-v4p_3t)o~!v=%2n zxPYqNfGZ_j*P(w8j^lO>e at ZW8lIY1vY{Crd^#&UCCTg~gO4Y`Exz>H3A9)z#FF%KM zYwty^UPq(ZLW@{Pr8Iaba!%@kkgohnSYk^U{s2x(brto_o8v4){Cxd4ygpf^Q~5o~ zm5~uCLzc`oUUsckD-0Jq7(H=AYgJ1#axhvfk&H>QwED&V2PoEyf3$j=_(zwo;N4TF z(If_*&(ikqs4~rjPugtAP}p1t20IIS1y7^hc3>m~?D`*=eD8gocxJ{7{%TN^v>1eK z+uwgT_TXcke2lz0quER!+NeXtMft-|(^{fD+4sUYDm7cnIl%HQNs_u0NnK>K*>$tN~s==AAEhdNHFc`xRVx9{$%Q#Z;?zUH*iRpfw5ex{hQ&s?k`j;pT;dD30cBwZZT0& z7<=~Y9UUAT9HGK{wp1$J(b&+?5G>0&*=RIw6pJT5jD*kH<{ncsIyWOkNvy<)8Rf}ZdI at 9sTUSObyw2jE0t^6> W+zGw>Sx2#yIMiBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;De*`c| zL_t(|+O$<&XdG1({_f1|ZZ}Cc+5AwArh-06wDzI+18Jx}vQgi=AGkXjLNQ}!hn6UTQrf5&{rs6>cwZVxu^RcwwZQde}++r<&{6M zR^Gsq`yWNa^TB%&8588oG%V6E;rR-#TZ7}eXt)wmN%*wq`4VS;Jcs4gGUD2r7Gd9V zuzUBO+-<|d`0S(OSh}`?Pd+`v#nEtW%H_~o=)um1?#JBx0_{oEDG=LsPfqz})N z^puoGm_RJj8Dxitht2(`f7bNJ$$eWWlXVz`sR}|$eKUpzi`aVmt=KX&fVrO+VBc_X zeR&OQl?r9#K}to?g$T%a5U6$*F<$9#z(}1*!ZsZOArzBL*VOY?nJd(MY&?@GoNt&e(oH;`0_h!5KL0} znoTV-lb%c<;*VNY#uvySN7i<``LL at F6@D3|-$NR4dKV2li-)xX_tw9;;=WI+YtO(98-*M5>WFcRuH()L$%G zC8>}|2$7}{o_PE*ADnta&zhvz3EVo_sD0=$L3r5Rux-?9^(Ed)J7~~4J^RD#-fS*= z3twar;@^#Jf4ZOXJg-!#R8Div)7m*MG)W(KbsUs9aNwzj2L=X4rIb&XN~JbqBO at co zWHKK(j&o&t`n}I}uQnGKfSYDrBoyO6oY-)dr!x<~$;m at 6b#-?=-(T!UHk)B%T1+Z7 zj|E8sjvUhjUO}x^J9g~o(J9gkVn>o4r6J-?FBY8j5 zK~#9!v{hYb990zlX6DZB>}J*`MjL&oR)a>Vii(IJmPCB$OF*=F&+}02vQSG zN+cGAg0xh9 at S$&_R47y`HpI4AY}FEyR4UTO{)S}Z&SoarnLB@;dv|s^kq8^XyBuck z%$@uFoOA9daUA3S9<1?4p|NM^f6eZEP9IWLwL7~g45Kf(?;ji-`DB8o>t`jDBx>~0 z;T=ExdH%aN^5<5?)KA~UViOt{fo6#RPI2Ai{)kYY1z}MbC978R6`%qr0c&R5FJgFjRHf^4jM%3je=oiAIuzCc zwPhospo*|I15Hy?p!Ezje=l+x+bSK(+`ls-i7y^5%gNWzx5Hle9>qdI&d*KVz>jCI zA_ysm^i$%Sf*X~f)GH`;BaS23jx(6GOV1(-h1_*f%xiL!6Q?g>$IgLu7uJVkd*5L` z_fIgLJtHll?Yvr$=Hs at ze|lx*g?tf?a}q%iVEe1Png;mli;qdUUt|KH`?JeZtdyPr zbbo$@ERn`w;WJ^T<9=`n+gWC0H0mc>2jl(bai3jvSl7f8@*sILkExD9h)9 z821CPYPI_FnO&VvH1e_K{okaT^Y1+jvpbaO&tD3~1PS>qPh9o}ElD76^4f4$u#1-{%QpahCU9vFKY zg}eccF;YmOX;8@;Q3PQi)YR>ENyUu5X$B(j){bmbF)D zd>P4elP-5qf0#`)v+ at v)&71Gp-P*dL%W;-rnk}%b>V?_aOQX{?k`AK=gp~ym)*1iE z(^^A&qrd-1M at PqF#bVJgO%sM;$ntg^2aavK3+3{;1N-;)CLlZu((I9x6O~9&q9`P! z8i%n+U`-S!MO6Tx3D#>3(G1JU25T{E*pxQS-vSH(6e=Vr)uxseD*ylh07*qoM6N<$ Ef(U>J9RL6T delta 1048 zcmV+z1n2wJ2(SntiBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;Ef6_ at r zK~#9!v{gZ99Yq-aW_R}O%j-+tdxjKyusNuQD8?QFQmL3j!ILz#3W5js8&Smp?DBHD5-epMI;p!4T(|(qqGfeo++4^^zGZt+uhmOUH_SVFK%p7BG?~h zcV=hi`~Ls?|CwcJn&NgE?{pYre{0{)of?TYT0C;(oJBABpBPjGxhNEPx|ylDyi;2- z)&ZvowCDRqCxC0uZ at jwyEIxl{|CWF|(dG%tMBwflsor`gk!;0A_b|NsEi9hX-roJh z>%d(PXvq@)cVO`ZOp~qOS%2Zy$Z-pBf9i~i`Q1B`G`)Uc;x9e;Y@`?df0ctMb(s_% zF!Ng#-~7 at G8JpSxi>Ht>+paWFJ&Pw0u|c{sByk8ol*jT3v+`^zvM42RUeM#oA1ioi zY%EtDf)*9ld!Gb=QCu6oIsVo$9*O8{Zt+L-Joys(GINKla__(N)Sed?tgmreQ{%~Fgsc_Ra`0$y!DlwvDm^^q7f*>S7fh0-s z^!~?S83{>1Es79^p`MSU7M2=5F3;5=A^~z9TzR? zh`@6%A(8 at q5K!1LoTi6Z`e=HYMvp!`gg=*-QD3OzhSStaglaAA;k8=rDH``s>m}x| zf$E1O{8-uBtggbZC&|PM*e~OL`BY;(*>E9)ISLmM;`iCt2lEtqFZ1kQqU%4Ov;3 zyNJu<59-0HH;3+Sfl5tnDiB|oRU+kJ_R>{!*+3xFJ=Q5Y2E#C at F}>!d+mtLi|ItxA zbYPb{jwFkR?b}Q0c<4z<2~&xCfBYyclfx=7aNb1{S};t5fAo&2wJ5Q)o7Og6m+};^ zBM_CcjsE^^)LnsPm0;WdOmmY?DV3yX2(6 at H#3Y-UMZi?f7+ot7;)Hh!9#JG)`NP}u z_So>t^WRS%-{^`7tM?(iV;2&G>(Vt+NqtLKS<2E(ri2QFzNyng>{7`1)%h z^!4=(l}e>zxm-rEnB6_9ggwurGvfx!D=X9Qoj$!+<@MixwEx}M?f&WiEx-V^8x_mc SF($770000%3n(%SqNvQy-jv;GcflY86f#)SEUVesS=eBAw%O5LA;n8t zctgbmFNjp234~cHUP>($GfWXIN)$3wOj1%bBnoE%L4A7cIUoFX&WGKzXW#$1yyy4z zOo|LwC at C*w0CE;V+S}XP+S*!LTAG`io0^&$8yg!M8tUuo>+0%iYinz2YO1TNtE#Fh zDk{p$%MIo2R9WkiU6nHq-OAa%XWov}v8C5$7oId1oQN#B$mEq}W at ZNGSI^vZBtGk~ ze8b7;H3vm&%hJ-)0#+U#z2cBx`T_4nyFJr(4w<{d!(Qmd_3R1M!g!FHa=P$Z3$%(jS(pv6PFUB zrBjkdcMKC4+JW#%YHXt857e<{D9bUZ zTqMD1u}qH2Cy1m$Qf1JDKs1ix(J0D{N`p|TSS)-F{ ztQmF8OX=8Iyc)wC3w5`y!%>#*h0In_$3aCjYa;BFg^-BEMEA@>p-LDeLpg at xSx(Ec z$(qjNhZ{M@#&StkG&D}8a#TJ9^{m=c&j?q zIFmf=Oiz;rmNQYj#%Q7v7$U)FP!TH+l^qrH! zMS$c&T~HU00U#Kr3+e(g00hHyL0v!wfMA#|s0+vd5De1=bpaUwf?>L#E+7LyFiaQJ z1!MpShUtR3fD8b^FkMg=kO3eVrVHuFQF(JYO$Bi8mFnW~#NI%RM^%>zke3+N#&>@2d zJvY!}z_ZWvcX#XO`m{^mKE0iv>g9wWzIUCS`XVAE(D9DO at xTY^b08#Z>d>)X8OQ5a zWhaukrxOydy7tyq7tLPgK4tNI at s`^G8&5T?tGm`K45M8VV at fK0i=BprLmCZ|3Q5eR5HyjyKGQ!blMl)?y+AauMG=fBl6iAykMzjiw7J(7{0YMbxDhMKK z6NI#wCQBPq7ZLVFlI~NHC}+^n`+3eix5a#T=IWT*ySnGT_x_&eJm=hVjUWivY#D}8 zHtsrkA_?39egXF~BjaOb&uNV1r z__6>GN1?+*Jp*83;seVo%d{Wvpridr$#E+65-BB82&53J&aXZDw8o)+Z{YmV(siu9 zfoOCmlapVWn*Pq|Q{626S;Vnzgb+w65JHQ^{znvgS+>di{49+Pd#Q?4GdDX&Q*#rx zZ6lE*sh?*Vvv>G->-_agHnoUv^wux=3N)I;&fH`qudA#Abp7n z6wmj(z;oSIxML%wKnjT^RsgPS>1+YW#?ed8L?^{ZFt&y~xUFI~J;RaI4a{`|Sqr%zT?SSl(`09h=@fh?9|$BrMPRoD&}W%cUhq~uk} z$%%#VOf0qQt6t~xVYG5aj~(nriG^Y3m46wzaYjKLq!=4QARQ{ zilibVs7O6YX$=Nl1gX`N8hwOXtx?TYE5p at c;c8{5QbvU0GR3SpvYE4H&j^_{eP+nC zzzP0=6UIpcB>_@#fYdKwyx2d$Pb~2sD<0$PHyWH51L^-G;M~}8nluRW#VH(odyJ0O zV1eXm1G`COqv%MET0!HcULe+dpdYT3!^o9 z4ME{pv_`Ep2%|+zT%nT at LU2z{bC_6 at g$frjz34wMdQTr6NnoyQ9!t(0?uxmNWb at tl z?rtMput_+D`QuuQ?}qWYTyWtFc|4&j4{H(A(*fLhkcv>@L|?y_J;5&#GmN72LJr4h zG_sAu**a3m;kmoJbGUpCpU(mgmLWz<;n6IuVPNwjZ`Sc8402MXr&KyEMz4#@bdi*Z z$)q=GRm;oa`qquK26oenvgJArCmPptcx*1Gb!AZK0Vah$B!N>pGFYcmdp5tmpNb at m zIx^gV`Aiz_L07(GYTLD~o&ZNgcmf^*7T1-<6$JAHLcW{ORWReN`exI6+fx3PsioY5LxXq=OcQnbo!*=OFJKCJD=&Q{sct$Jg`7jE2 at Rp841gK$U1kco zFjPlsaLQAq!IcC at sS5Srv`v2S`I?^^!~(>U)0)dSkKTHeALXWv`$t*6c~P_p6kLQ0 z;esLnWk%^jxS$9?nNhkBE+_&}W|S_33yJ`g8Kn#1f+7HAM(IMhpa?*jQMwQ=C<0Js zlrDq|iU5=ur3>MLA^>GZ=|Z at m2tb)px)3fX0#Ig at E`$q;0F)V}3*mwy0A)t$Lb#v^ zK$%gx5H2VJP-c`agbRuQlo_Q9;esLnWk%^jxS$9?nNhkBE+_&}<`1UJp{>({(1P|3 zBk1F>YW(}JKmTZ`uY3LK_m?kz`}KJ(XnlJ8%cF-sKe&JIryuXu+_`=0X7!C9u3x)) z1vETWRepcr{JFDdPMt=Ff|XHbzBK1~Njg z(`wY=b5&u=P(mS>;d5rs3Yq!!jOo*+PMI7$Y2sHw69T2<1N_HH#C~IaeZ0NKjP?|H zFof;`w~- at Uhx2({4x8mNZ0L|LzxaIcpn*(hY(W2hef#w8)w4(U&$@MW>eBhsPL7{+ zbg;MUVB6lNowXH%;aqQH)q#=1aH0Ea=ms%{T_eNUzON)`jx8&;+mNB=!9L~j)@yBK z1?>}@I6B+GizO))Tl=vTHFdZ}vR>qBYdy_=4%T*622{zWG z+iw#OJ-aTZ!Oq*xu?JhP-(edxd%fyn%E+UO{riZ>-UcgH?&GpEHg-LOa*JOmldQXr z6{H?MzIKGEa*%f?`=q6|h1K^G3~~0oQctN?IeT%j7wso at Ch3j R89Sq{uW(RidYOqa>K~7S%X0t# diff --git a/src/public/images/icon_addstorage.png b/src/public/images/icon_addstorage.png deleted file mode 100644 index 5536ecf70e71f46b4cd0dcb9752e43dbee98cb35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946 zcmV;j15NyiP)5l+SAvR~*1U?>X7sS;;0 at Q!y!+olViUOG080#8Q(+-O`gi3B7n|+GFXZ;-4VJ zUV1Ifr5C}ISWpPt!-74uCa81`7PGV2pGmfHn^|#Znw_`PLnd{zt0nou7v8)FAHLtu zeEAB`^Vm-aApp3LoSp_g86JB3+Vk2b00aF|);HF^1 at 5I5(rEy35b%ZM^f$+kkK8au z;tU-droVpxr4*Z+e^FVlP%P%Dtd*~(7SiAC8+`HOnYqb{sUOdMI729;qm+x=R4C=5 zl%myY(P+Hn_r>3M`seZ&QV79r0$zLWw(rN~L}H9cqz@@2LQ3Qzfe_M9K{$Mv(fB(6 zmt|*V*Y9SyemB$QRtS-d$43!DAcaKwKq>bW#?Y~0gb>Ltu+vmHP1U8MM+ at +eHY&5NhL(*?wN at PpY5-p?@G+sIs3aejK*=dwgjE|4=ODaW3*9nIY6AFfKmCN(mCgn<*d_G5P#NhECk9NTJYg+FN z*KN|<8{yKWPkEBbu=H?=N~Mf#H_&yRw+4?g`_V;S)GdS%JK!I#ocRxMW&T$HewzDW z4_LJn)#?VZ5rZ>l&oVW2nx?yrZ97<&MXgq&SSYakbQ#a{&_vrzd7kIBJKlZsReQRw zv$XU8T at Mos29ZLtW&KSdU%<>|$*r0gvG~qE>1^3)w%(|tw>QGclkZ`gD?C}wu#$a7 z-LeP-0vw4Ba(*_+i at NoC@SU$__I$SwO|`m#5i^*aJVhcgMss@`+v!#Tpmj`}coP(8 z1cSlw;^He6LQ1TyE%Nz1W-iO>s!7}!1!#0t{6BGDxhmPEqFyJ^6CfIma(*^Rxm*Ic ze-QAkJ3rq}&VBwR6BDOMyg%kog^gv^snu$fibc#^7U0&t!KsDxJTOqMlx|E;Okud0Rke)x#K89C|{=|uQua$}gJkR6E;2@<^anGXv7oI|F UHgb%7 diff --git a/src/public/images/icon_addto_smartpool.png b/src/public/images/icon_addto_smartpool.png index 08c7763fb82580fa7b87b5600672fc0274cf01f0..1594358a175624a0243c5eba427c51decf1a9949 100644 GIT binary patch delta 1086 zcmV-E1i|~I2-OH7iBL{Q4GJ0x0000DNk~Le0000P0000M2nGNE05!iiwvizyfA>j5 zK~#9!v{q|uR7Dj2?qj!U7q?J(v`Dj!2B;-%M8Fg^rClHdiD_07{}`K46QeOSf*50X zB(3eLk@!b{n3#xZ(gZOO60#;GT5EU+1_;XrA6+a`r7jInE!*AR$IRu-+`DC4N?MwD zlCx)K at 7ejzcjlY9t2mB>|J(H3e?TF7fA6;X0>5vss;c$*NsRG>re%G;r|r{Tnm%|{ zf{Dk**U`HD$E&{_bGVh7;E6LwoDbXH>S^2kW?0lSYbIoVB2!nsv=a!Md*<*)f9DnZIn at bD31opll-ne~4l}BXwz-ws0iN5RFF5|GhatUlDEFgrm6Ck-(Ao=?AKQ zKb54ywoLiMb3I29Ki*AU;RwI971e9Qk}fA2iX0FV%iUwK`{+7-3oR`zpBRSds|DL0 zgQG2`1t~HUl`EgZ+RYJhVCAB+I~2uSe7~HYb7oL+hRl~^XA;Q%f0H*52n5!wsCj}C zOqkhG_~ulipd<{_7=@~Etg2s6)z(dDgP5ezMo zn)1w+SD_SC(Af`(?ZScc76OZ3qzzQSNKFHMmt at N-Dyw7^b7qpt*cdpm77Vx;6BryT zr!MH}bUN`|_1x9_f4WmRe0~@&*FKDmRV&eTU=Xp3|6wFsir3dg at aNgjsC^cmZ)!$p zc_ps?{u at qwdlWYY2Qa^^%u^Wcg(pk5?QUx|UDuQEY~Aw8&~00d|CPmsfea3v8%FZF zArnshk%nK_vGLjUSXTWQii1Mt9Kn)#sHv?*QJ{!cWK#Ncf0d3$y|5HVVy6+mnD|I- zZ*RZU+uQqI#|w`*J2#b1DZ#&oO(`|56vHy9 at 7$D?it{w?JU^NehKFljFg3qT-dp1ng?={4-E|we>y`X62ZsK&3L at 55Y0~qv17;ENG6lCxDRx$q;#jZ3wJNYyf~M933&C=?Ye$wy`Z0C{}? zWB21-NIu6)N_%nEe+KRcqItIgcXc`SYkQ`4M}PqU6r$HPLp8j=?*IS*07*qoM6N<$ Eg1EK~kpKVy delta 1037 zcmV+o1oHdU2&D)iiBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;Ef5%Bg zK~#9!v{hYb6jv1f=FaTwCMz*f%#R`q#)qoJpH^)UHE}@$rX^9Nh*Cmq8+?#$g!&*p z32~_)r7b at 6sX`zvX;IT+Kv7Brqt>4$F&5&QV029rV>Iq&**H79cRY7yXS2~=Sqok` zduHdJIp6)hd(OR*VHkLyL$Mzue at RNc>-fH2&lFtW+~FV>eq*qAxma|(a_up_6$Hrw>oxXj;d$&+*D0&*C>-zELWZa9=T_Jhf9 z|1$XH+vgKeV5%pzXeOi~nFdn;GBIQHD3h`DXUoS8hMQL&AkLXJFWW{7f762L$<0Nx zXf*mW0W6?DY6?Jc%y at -f%WBGxj)ZaP&t8oF7ovBH6=!Ia_%`q|_-2`^s#-%V)L9Iq z%e+0z~i{LcEG!X!Jg5HZ1U- at n)}ZU7F#dad{R zuHD1M_G at OZ#C59;Ze1Qge{Xj`<>J`-$s(-!a4vz+97%{oBK0j3KW*2a!{_sT$3 at AK z6r5Oa=VowbNwlJJIW~T}9ui~V0^HESd5i!VHg5A^#kx|8a}s-JQclNgfK%NQaJ${> zO3OFU0u<<6hUDA=xSOeM6)1TwRMxJ?nyL>dnwp#v3tO{kF)Fu}f75(EC8a7?T^5Mq zngQUPYb6B=j+_~h3fKC;9bX|XeJnNuzuq(;=O3cVDMBLl6vG1#!H7k9MHy8y!*JjQ zu at wpPNLrW0!uIwaL?V&??G=SUylKF2ejW&D4HgNdZ3cE`_ at w&ytL>G%w?P`vCq9;y7z* zY5BLStLyNwor{cbYDzPf=i|wk>29zqx&}F(cLR>%A#?y_Tj8C9>Gy^+>RCAO(rxdAuG}} zt(}@ssjI6yW7yf*84yg#gjTs+fnt{@$)4G#srV==&PuWgvcj>ku}dD0$1m8Ch2J5$ z7(A(ro{cS)2IeHM$4Juuugg0dfSfD126oEP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG- z6f_mZ>wo_M00U4-L_t(I%Z-%HZ0jW)Z7&!Ct-;QxUQYniPj7IJ at c_VnvyQij+j zMBRj=Q4pqtotvjH>K=?q~ z7ayKy$W?$#pWi at L2|G0=54=GVJG}Q;t61w$m!LR`r98pf8iFMl${n7c{%{k3Pu at 9+ z_r6~f=p`{JF{misdSaVkZ9{Xtf{`smmi;{l+Te(2RN%Z=djkY8zns2+9s-;?)&W( zKKkwtR25N=N`M#7;*H-?6#zave~M*JkW_DTxKgH2%z_sh?QI at 4TC8Rlu$5N^ITWQE z+h;f?`*J8E{M9?h?P!iS3+wphB>>E!d4B87V0nQ#mm*AoIIn7CXsGbsSHB{_*YBU% zYnCD`EdEID#pAs7Qjw`#-};AL&o6g7?A)s|6Vy01oguh%QFbF(%Ic=77>ePg%NahP-tmnhyi7(~}2q!d&XQ7~bS?QSv(_$*Tq8RSyQnh at tK z;sxZXC3Y}IA_68&6zk~d4M9W=iU&1}WuSY%N^o!*!ZD!V5Qh?|fKiBgXtPe3X7qE| zV<>*`=$Su};Ysr$YxnB- at +`h^fK)mU0zT?Mr$x}b%iNI+6G!sP000yS1^@s6cz2e)00004b3#c}2nYxW zddbVG7wVRUJ4ZXi@?ZDjy8FEKVRFgRU@^RoZ|1T#rQ zK~y-6ot0f|6jc<*fA`LGyUXrUYHb!sO-ZqqE?rP8D#%BRD+Fj2VhmOSLW(?ShzXdG z8smcrsf`dZDjJM0YEq%8loo-;3WjJRD2Qyk^n)4-Wh+~Xv35KAIpagibj!Acc#=uZ zoOA#A-E+>|JHjvw?lvLBxcB+)B7vcotzG{@BS1sl;V1oF9p_SnlbCuxi{gp+p1F_B zsjA#o$<^*IfU~PYL$oxXd_EeDHg){jox0QHP2a1Mg1p(v{3kqdfJ3!M%zXdAZG699 z;D^&^(Cz~^X(jIbf)|S(FFd?y<97D%-v_|^pVgwIJJ`9koE2U#ZqGdYzDwBbj-!7C zd$3q66T&8htSc)&XmKd7R#m;rlqq&I-Zz}i2R;|ych<4v85e83%b4yOgJsyWj{XxG zNP(%zLpDZxcciHifX*x3gu`JopPnXgJ(z`G$zs>(KEC^-o-NCBSy)`mbeES$=D6u> z_ou*8Dycr+3P9DGBAiYKPN&1n2}NMH3LL5dj)(Zsn8~H)UdnupJXbu6LeD&Ma%Pe} zBZn)OeGCl^9=&|AV_ga)97~w~$rC5=6cvp at q{M2qU{&Hs1r*f+83i1RNBOO#la;;( zmMs7juVl#9En5I+X=x!EjUc7KZd0%-Aca6G5>TA zHf<+=p)#!Dd2|5)+E9FC at Nd-qnlk+4*oPGh(T0Z+LSVJ2*n~hxkpz;cN&>}|Lnz{+ zKX}vB4u*mw5G`rp%|zFxa;hx00%ceWd=5X at iPEl zRz95qa at rISI%!rbsu4qsRw74%LXijwx~>z8#Y~+PNp@!@cjj`vH^BAY0A8<`bLY?T z%F1F^D?V&m5G*#-bjwJqREercgd8~ziG)rh5 at DeK-?2)PEgaKLKN5|Y{>L93;AZe| zR+lVi<1{Dxn$OZ>&qrotBT0ZUrqlHVnx>6!SF$zkC^7w5G&U|*cc_+Ar;bta(k6DT zT1rpfExu|C&_6Aoblb>z5`eB7Xxi{ty9~qN&NI43Y^YdIQ`2#VwJ^h4cpT{FjsBmm zbX}!-Pc=kCyzR|pTUHNxz)wsU7%~k**T-olyt`V at UoQHZ&szarf9*{(KF}Aey6E at 4 z7a9zCSFSBa&Mlz3r-RP6u7*TR-}%2F0G>I8)9en% z_S{){<%Swr0ua1$`^2Kfi$1NcscEX(y}P`+rltwtKMn%KTfqhS!vFvP07*qoM6N<$ Eg00CqEC2ui diff --git a/src/public/images/icon_change_role.png b/src/public/images/icon_change_role.png index 5740cabfb7eea8594274766ecf5cccd64a0c00c7..72ae14ecf52febeda354a066b64629b74dad9a41 100644 GIT binary patch delta 1067 zcmV+`1l0S=2;>NmNPh$dNkl5p6qf{D%f>i|1 z_n>yQ3boZL_&l8W_{8j6Kb>6`y+G6V{V847 at 8_JKHVmVTWB!Tvk320y_mkaY4}hks zAc6oooi;e_O at G+f+<>{cbKr9J+)ERuKF9f?(hH*pYUvrfx%F24Q0c}&glUjUnV at Mp zs0e0E1%)Zl*Jpv-aSnCUM?f_R>t6KSZnr0EjrwRmhABhpSz^b}A$9O0OA at X?6VtuiHZ<6kP? zL<^X1p1D$4Dr2EQQPjvgjz#gj4njRxYcxQDK9iIU0o&xVZQIjW5DmknPi_*>_q87u zFJCGT6bCS8Y7{0H9DxXRU0Aug0v%tOiaFO*IfJ$>Zs`Mc0;UXg+w0?Zyj{pCFO;@# zheF=Me18g9ZPcM!t3lHaKKkJ6i|_bc(0pG_07En{_KeJ at vD~c>n)BL$eO9sW9^q7A zcK$cGbY%%enuE*iZuqvccUnm0q}N!WHS(IgVS*=dD`GvE#GLJ?G3&MiFXnfR96i5t z9IRbAC}or=u9_3V>>rzuH!d6nJyTi#ed<`Z%75J}h5Fiypgq)*HgA4-VvMP&XVZg2 zAejc0^#Gh81jm=y=Lpt--q9SIODRkO_18QGu7Kg<;hlMo`%Lu12 z(9 at 8`IW(7~Lm{hJ*;C|Ml7^wz&s|(;9sYC?w;L|RL&-*`&bP%srKE$3Nnp7GdTHz? z)qh07MwvWDl1Tzvt=2CGUpekEBMSj1sgMa2Ga2 at 23|o4~j0^(x+li&b`tdBwdZO8E z{u(J7+y4Ik=Viz*NHrBf0yOeeAXrcz;Q at Vso|z6ZaObEd$(;hlV)1c=eTnT6l8*G8 z at 4U*w9%bMr%#|5M2r_Z*(T%$ht}R30)PE;QW=Ua_Ci at b?CQTLw_rLj?p5O75x?{Kq zSqoSy`*-?02f$eeQJrsayL!BG^4NPgyw-cbsXe%~7wMG^d;55J$0F at LshJ~5W%`*)8WQdPE( zt86>j0vY`*W%Tu#OSMz;wSKU+cL*yJ1i^XE`Rh1#*T7yLJHDkdab&|IV^Atu;Cmia z>rGf#s>7d)^%G~NYo8{dX~2x{`xi7#dqD{CgRbkZp-p@=HF5a4r#626()Oo8=NvrY zgXaqH5VYNK;D74eUobmg|KPK;^IzclP#FfJ32B<+Ft4e~TjZI>RS3fnw@}U_ptr7Z zC>IMrYm)R4pqd6t9-2Fj^Np&oZKYx!gdcz}0uVs}K_Ed&iP$0Ja|Qw{+i1%gAci-E zg_s;F%%o|Wha(m-JP=$DL-jrI{REUGM6V?tBq()i0)Hq`Iw-B70v$+E%bG%M#0U6f{A#-PrLHTF%TT^U1;~#Y5Xule>kh!K z%q^e(et*V2N7Nh!^iUdcE at TYIMjoDYFN%FZt)s&8W);HgGlRuSc`N+XABSr~N;Z1Z zi8{CM at sPs!7F!YP!6GF09V3^iij^R zUp#g+DN6E;sH(aPfnFp{+#KKY$xcNx-^-3qK!3zIRNDbKSXsx9a4Zm*1AWWnN(X5z z3 at jP+b+k8IhX7Z3L$RftCdm*Vwc6Ufgq;09CB)GNhFe*1jl4UP2ZSqfTCr|AuA!ahm<+kYPGHq80m7k{2?B{;?@?R-?72% z`_S);yVCOqbJs;%rvts}Er>!%43UZRM3qsLGJ>5h7K;a{=vL*`9hrxocqQ{-b za{){Xd1T&=)^o6r+90ccthy_6=TI)RXMfLsm%hFdP$G6eCTf8WDNau9&XhLob{|e$San_Ch7GMCPfcF~>LbkgA015yA LNkvXXu0mjfc7g31 diff --git a/src/public/images/icon_clear.png b/src/public/images/icon_clear.png deleted file mode 100644 index 13525872d623329906d10c0499e2123b58b7fcb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmV+w0_y#VP)kkUvjaVHAg-^WJMIM3G>Vl5!*QPtt`p4)oH6E?wKzPtk!U41NR$2Nstu?b5}? zK|g>A6VN8a>uMqmbZQeqpbFggeH|8b{$|oCFZ%c=`HecUE?lsEQMR%2GVhN at ZTWO?~-30yr<^J^@L`UFz#_l2oE9 zz~{NMwVss6*F#p<*7nlhj;G=Y at Buh|zOl6np!H-f(tTzCeKV{@#n(UDANBQJeG&Jv zxfztAB7hkUN{`A)r~>@`(>sca-S;nJ{a%0Hb%g2MED{uQSqmKiCG=Ml>;g5Q^l!xe zC}amfz{@wU=DsZe!JC|KE%oSTS3zh%gkmZ|!#lfrnE6$+-4O7irx{CCz)K})EXsTf XaMp^uM|p6u00000NkvXXu0mjfP0Zkf diff --git a/src/public/images/icon_conf_message.png b/src/public/images/icon_conf_message.png deleted file mode 100644 index 1153a76fedee496949647a72b4fc345231dd884e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49126 zcmdSA1#DbD+vc4#ZNtpmG~6&VGcz+YGbar*Gc^r2%*;#^W at er+!)*G0cK2D3UhVhl zlU8fZvF~%nZ zzj5^iQ!%ZK`K2#UoDU`79p1d`Qmys99j$mY+=6Pj;U|_QOX==6PwZt!0?LOPzcwg=n z*H2+=ll!L5gbz})U}!Rv=PUW->qLYdeDTH$y{5o2)8;7Mg;JU)w+XV2_oAH7BcKVG zVb_S- at Am$i^pEbDEkI4HBg*wLUBj03XWqrKdiw zvg>(Su*1jB2WoZE^ZB>O)88%|WL3Ek8v}gH513{zuVFVrJK+EB@<+54OK3E~z4rro zTkPXZ+{Q{!^m$|S{UiSTKh^tBoKO}p<$-~*LD*O+D}BtO&$`=cV=bMW+w5HU%{*}a z#$LC5fyZsV*!4zAFE+(w+16Mqd9VLi3PU73S`MFl)phOO{n)RI3Bv!gK-_l=A9nb% z!8j(TkO;um}>Q)!d=C>}-7BXBQxfB^6_m9pRZCSM23>r*}JF>SH zvN{Y#P6K7_Pt)q&0+9;?*A47ftIYzpN3e~X9)1P+zh~Zgb!4u(626~V$5z@#!y8#Y z4r=AwNk_vzx|(K9BE%pN9U|{(^T(LHLbaF;=GqTFSx<2g7{#xODPOZHFQv1ZoddvC zYkige!@B++;}qC*&>WGG zHTJ6gEsie;Y7;}8dX0yKcD*MzcYxX at 05SDzIhrPew2;>$l z!dA=`c+x3EH`JdmlH|FRfzV%2GhAt4W#}L?B8p7%O3gExmNq1i7EW=XLf=@&uxph= zZnY3BGM{(Tx1IQN9r#1ROu<^4P2jdx$=O-cSFIY&d4 at aGRl8{PAz}25XdyGrpsj%=e6Wp4r()(z(|wXwu`5jxN0S*ZDZg$J@@`_B zi7N#ZW#I;>lg_+G`4 at T>JS#;?g?wz_is-d6fmE{h5%xIXY}o-_cP%@6)Of|knpy0T zm_z30t~6ys^H_o`A at b+4?e&PIW@}h}J}Eiz=nuaLZO~u<0e)pXQEYlf$M^%Wy=gM0<=u+N at hbHG`twOK>=q-2vaRA{=g@ z=1%40YvruBQlkq}N@@e at HSr|9vRK?z^Qf71t6MKw*zm>cOdh6DcMNo`zNYZy7=Y|rLNaFe2s%|nzBHOK$F&iHq!}X zqy+LntgjjdT?76UMi1=$K>Vjm-fz34I{=Zh;?7CMZ!Gwno3scz<~&xcfq>e#wfotO z17ORzZZ9Sm1z5IxGyYGwWZKm`HU0cX^I_SZifzoHiG2gp*x76*2d6&O&do-VsdOqY zUlPJW2m=v$54iGp28& zHzO%5XusWXuzHe6u*H8Hg1uNNC at Ap%G#pS~A?-Kz?U^3W&wcR1>353ESF^|-2|)Je zVh^&bc+2H2UkgEE>`VF0EDl_qBIUyT>MWtr!i!aw8%7Sh at _f$LcUxf^{{TG|Z at j4$@#D8Wpc!owKDfdyy`vnLG=e5zhOY;`9%DTv5c at 8XYPaVW+T2m<;$w&{!kfpZtLS)rIa*SB*1p` zd(3LMc#oL^g zfSHBcNAxSS2rHFNd*6ToSq&+`b1ZX%MSjwuoRWR;4!*%&9F}BO#x`5-X39CXPqBac z3Ogo=GYKUoXx0A`1pu>cHaT?R5Jo6l>*-BKv5MfnLZnN;k|kaDQ>(KWo-PQYeSBCt zVm1L)!0}7sY3 z8F=G_ifv?JIx8sdfT6=9$6n`R?>kLT$T#DkVSMUL8-TW;)o&_VL)`;8c6M_G5#VmNH8k6@`Q!y zpaB6C`RqXV{nBwOa|pYwjH_yBVZnm(M#IDwDxdJgI2g(cuDSTG$36G5?;TzgK+KeS z9y&h?Xv2_~GX;?7HS$McN$0Wx1BTjO-Ba<&$yLXJTJV*r at S?waOX63nC&gI^ixA;G zf at N7VVi06Z1{DyC(>JBQ5lH;mUCJgDfzi?YB13}kwRl2@@wN9g=pg9@`Z4%SVcj_9 zlK}^kPi{0;gu!!&Gjm()kc~oRTss)cBnAS)iF(_XghPA154TNP97cMi92AjtL1v#Y z5(z#pgLbzK9;T at ODWv^m9D-=s0VCF_!=GCidJ~=1c^MnE;xyBA6NTPiLu|cEYrmCF zIPsD6J}>z2R`!$CHrFsu6+B**ub!^0x$fgP zgO3=BgSRkQL at M$#vj2ws+D?9)Rd8UR?u`9S$Mm>W8n>frp3+x{l%~l9C23O~ z59*;G{cNv><@}`ySxyNVN|lnVWhf+G2GP3wKChSHXs7__#hDwl%3h*`Ni)H?W}jU* zd9ADF2;c at 4*t>Zsx-Zz~!}H_k6k4zT2noH;WEmV9k$Yp;Y z3S2M2MYLvJZq8T579vJhF?lb`(a|YwElbi?WbZy{%m!@uaY{2P=e0=u!h(W$or9bM zKuN9;D=}9_qAC14wl^nCK#)268jB(BQ`q+l65^_?J#8|MrUdQu&S4UJ8Qr78ZmHwQ zXD3<5EGKf;hH}XQ5n-GsRRW%MD$OVSOK2{KSCV~q4u|=)X3OOIQSmZ4*#f$A5yZzO zZ9F~+4qaJIc(Mvn(hA0z6O`|XNQgwqM~@PtSB^85j20|Z7U=N{sI(P2onm*ySD9y7 z+}qdF*$#{kQI56N3>u9;G%(`#g=oiEWp?#~6JG?Hsm>VBTu!DP9k0`~UL|Ek_Ue%l zfYnvihwP;g*A!y-abg_%#;gX6naYe*M)SI}f_)afe?*4l6k}2o7m_5bG$qQ$_1g$1 zW`cO%^QX9yZe$s+M8gmgd4=&0p>D_L~tl^J~=v5i{-frG at _)lCWGdVn1LNa-{w0*?jy8&}S zJjY1FaE$3YVz8f{VJ6x?yZ at EK;{F49E6sX`<$OWqB?CiY);Z%369$oGhU=JB0TGO^ zFwcDatj@}C^PHkpk`xipwcw?{+IX%@0F)A at XNsUh_CG8!Vkuj;95 zuwwexTB||N5VQ5J*dwqH`88yS?3S#R49|)`Mj{s{d)dDWV{fZUyELA&S4pF;|?lEr|cQgp|7o1;D{_d_t#Fq0Ldy zVSs8G43sQAfN^bm?_t+)E)k8DKnns-z`_Ofd2)2!gU?|MiK#)0nkUXx zmV)3UZYq^t4q#2e z1kTqGcaKu+WK65jS$_Sl$5(CKDOhe&JKDdGKApXW)!kIhJ@^KDy_znei>cvtILEkB z#Z9BfSzSs2|y)QtKm^0 zQ~hWIx{w;24udm>5F!{$JK=pxL>^U$F00TYRmeYeKEcrp6#b1okKxXh|JEFs`m*4< z6-W{h$rmaxpGyu?JWX?C(>Xt}6|XUb?5|N8A4DpzWQ~1N;pyAcWLD z8u%*-O307nZ`g?l_qVOT{rGOh)ftuShR(GK=~}6}p>n2OKw!kBNhxF0Xr=p;^YY~R+mh>tT>Z5$m7H_>>nq8Q62xXC$+iz<%wV#W`pzbg z?v^s1j)U{SG%5Rv;{~?+EyY&}wfK{7zAn0df<2C{K zyuU-AR`Vk16-4a_;pGcwIpIn*2>#;Mf2A|n&!~`>o;&!W^JnAGGEmDX!71qh%&`vp zr>7M(jR)E)?vHC#s|g!VHWk!ch!uG42jXK`%eW~jZdS61jG*xuk{80buiq!fVOG~$ zzsEkYDy$zTEM^oqoH#a*>Ifjtp2}duuSF%-cb1q&dqsdhg&j$-ZteCy?Kf1LE7uj( zB&#ShSrEIdpe%OCl{d*QXS1>XR867o93o!o+-mVXEO z=|~!1fTHxZi8QTPl0md_Bg`_I(05yo!3?TR#bZLSr^qP)shDi1qGwLoLLn6{{ZF)% zyFc}!-`LvX2;+F^ZJWS)GK!j3tj;T1?+066B1l{$@~fKGAl+fR{FnwyQDXIOVoqgV z|M(&0ml8||F`sfCX6J|>9(Ij=-6Q^bv0bIvnOt`_JGUgRdYWH$-NgGQYf&-T8M)%w z^6Gw?TU`InCe*&mZ6ll&;_q2l=_|)VG2XVzM1$f1yk`#)z2>##7K=r*ecWB43N+u=!aP$!Ei2{gi-HU$cY>Q%&6e&*`z214hr8+a+xX@)jcBeAP7Y6UU? z7ESH=MA#yxCeWxS0hY!^XXOp+nonWeOX?o_;_OW`@8NWV>w>LfA{kQKqx+xiVG_a@ z4L?A8FyxRbMq6$e)`1e`WVSq9j0#^rb^jwnwoMHH$viV)?3- z5WB_orihDBTP0pndmBVBG0j}eYKIAcRb}3jcBva;mRkHUTFK(C9yBm7W5=pI`Fy^y@~6jLiQQoA#>in$g9qzd z*_DeX%}H={Py>3|^FpwnXW1foxS9MU?21pXV`DFRt%(LbFtGJu2{L=}e&1>Pq2FBr zenXMuHo_G|*PA=~LvN^=CD_4lxcQya>M#N2g5!4!XO;@an_p)6hH8?M=4Md=2U*1w zzEai%dA8&5$@AL9U>D0uEQxAPenob|z+la#<+Gn=+3x*xe%(f|Prt at f!ClAws2sP- z17^8rB`B}Q6 at PFsB=T?&A335#r!1zT%Cp$OyYPM|SGoY`F7W8muN1?>w2;K#>H>aO`f3-jR)T3?(i!_-dX~hsb%1ShOd5?kKfpy_)qf_v4SG^|0l=CWe4Q z<>X>Pa_3&hReJvNHj*&=sa>qC?J8GC-Ksx`?X*_!j?&k3-IwCnj`IGA)st5Q>lg|p zJ|=N4OW at Gm+X~Q{e~(SprXv{=YSzU1ij%#rSqJSxCbsIrYAYU%>Moi1=_tH$+<8so6&jg5^wy;Xe45czR5z}eOp zFZB|Rmln|2vJLz!(Tm4;0y@{B?n)HOx8C)9d}*;& zo>mv|}PXR4R` zmNCEP)b85>i?W5Z&l-d)KZO^M<=l20fNL$!kQ0(5A)CN;Mu*z*kd$Eae7nQ6P7QME zK<%txnc9IbaT9SU>}1h$E?4_sXKtKhfke_39f!*)y( zoG0Z)sF%j#byM8;5O7`wvneOEs at aV2Z6B=z!{>j#a1cnzjguMoK3k1L! z389nUHY85sDSLFBi0swMc&(UTrU`0h#DrWE zg;WWo5E^Sz#MG(e*NkA5;ZSfRkMX#YoN0_tWfx7u14pPa89}8&Aq$PVaf|oF6^=al zXQf8jevc4dJ3NTDWLU^%BVKOd-J8r_8VZ9T(4C_<*1SgNIw8r?g_kH5L zL6f?oTgSS~wH$-q*sgpbL^z)%Nako_4vO24Ryc-{+(G*isKuU z4VkC9#ks=_-J at uT5y7o9QLp#yX0g8g-c0Qjr!DKSYpTb zEK#(;=f~y$2+BP at k*6o!~7(1*@0 z|5=E^cF-e`5B^@e&?Dl&Jp2c)c-cT+{g6hW8TzPT-{Fk at N`<#R at 4h~8${EcoD+!A2 zHCc)h7d6CW)=XX&Q~1dgV}F&Dt9*SN!a%|Qa|OJ4CH$hiwy~gb14iVu;riXa{w at 3v zl+oRyrZdj>&SJB-@@Y6-oW3DlE?zXfyl<*6ve`h)Ejm^)YNLY%EYk&ba2a6{nUIWJ z5&eKvv9e)#@#guKn*Op>h_xzrC4x4`atUF5lNXcBqLper-{BZ)CnOqjx1=7%^&Oo$ zQ%0zfL;<+K^6E`P{-hc&Ji{SZ=SSwvs=@5YB{`qmLVin5=T05G)+x^g>#x}+FD>WA zEEDTa=^a6IuJT}o at jW`P37p~#m$4^bNO%=PqjMxF|t}9l0oRLk?Vb6IHN*4wqI7tNJ_#`_~Q+)jNUfE{YLD&3N?G>CAVBQwr|AB+FO&b z&v2WUO3fRAQY=ej9~;G}E`-qB4M4}Ds9DmEJS7{d2MAQOS)5=4Twv%S_>U})3!X!!;Px- at O3X|Epl>A`J1c}%x<}rcAP8N2H z5;6|C&zV_iu0i~w$#RyPs1m(z83Va;&z_#p^+g*qU(B~`Df|w0PaV}QqXqz2yAn2I zbIHy=^WNBwYEnMC7P_N1)u6 at T%FSY0Gov-dR{(E-c`0aRJitX*s4)%4 at xq7q48JLA zX|F}SFy}w)*`qiRRM*=kLa`%@3Qjgs4i&Tb6B%g2mfk|@RV{Px&yJAV{maLmfs~G& zEkvku{o-dM)t>(UyCjZpY9Xy+{)l-H(($N%LZYV$y)fr84jcDsQo-sQBF!AHUgNRT z&%4Y&bh0bdok!@|KFGTcNwCmRUwTE4aI*b+MXoZ=QTGjyo;216MAKZAaN9`KoCsR< z(Q3EAW|0G=oRuz^yPcgOq%~*K8;|PnqMlM1D3nU_>eB66JHg_5i(%%|Dc)s?^v_}T z=yT8pxQ7EU^}Y at zpfh88QNUUp8fo{Nz&B$e_jiPKj|JEfn4MJu+X=L^iVMfhl3R$P zd`lA1zn?K|ay+O at T0+MfG){40#a=--b^WXZg8d8KD>m4fxy1r6_RvPYc|jXV#C7PtqET zt}aTe^OQvzrW#4~M_1AGtW8HB_?9ub%;_c}7k9uhl9p#r6=HrVnj`O1>38BX>EL|d zvPh`Y&?4=VRQiGjo-}g2k%6^R$e6O_>=}Bb`UReFZoGp-XVFDF#kb zRb=Mta#LzBbsZ^ReNL8qfH(0gbNAF3<xh~fd`??nwgPZ<6%!{tx+y^AaQ zR)0?07Bs&ZA^LJo)@Ya_$IV}hv7rrX-pG`vrKni<{RCTut2pMmpM&$f4rw)1_)?+E z3T3^YD+)E_BHQt(-H7EizWQ-zOSJ!G1o?{lNH>V}E(>EHJ^JCu?CZsbngvZP+U3>l zAGQg?&#E*Ps!u_w+)(+f62&7Q7?3k!wGqa at YZu_I+d6ZAV>sWFX=eB)xOF{*kSHueg0zcjw-1uHWBCu`fk%YBL^M#IPelQ()Q=WNf=Vdp~myltyM> z6Thcwp>h5=vzpl{|HOqQNZEV?$x}#39+01bhbE&y)Rm`UBJ6bJ%cgbkuy1$Jmgp|=-o#*2$S?I>=JEBh~Krp-cD zsre5yOGG`E@|uR=WySm##ZnEFC{vIqi>hxu%LXSR5d1NHm6)`@^O`ukX at c8X2LU>6MeL!iCdlF8EPT>k#v z9uvn?a#qB!1u@>5fu6yngCgXfLJa4(SjW*3>t18lQe)M at KOL+~ebp*u82JC5>Dz8wyP~eJ41O1u znYHzZW)|*=Eh*-7Y?Z>rPSyO-Pubs5`7um84#Tj7Potl_`_ErI{>0tBfk|;NZO=&Q zdti&tw59F*Uj=H(8%8f5ce%B8KZx4UMiT)bQl<|ZeXHzasv8AbTs)a*I)gDbgQD!P z8vB~&cQTJM?8^o0$_C`30oL7mu#T6D(jJF)x3W)XO^bX90Od^4! zjiB0$mpQJeOp7U|%gpddoXBBm!V{b8wr>}DdS)abl2BBGw;-2R-AzCOLu=rJt zVZ+z=tE4!huS#Of9+$jG*?A1I5iw1KHyu&h^#FaZzS=?AXBIVQA>?e zk;Dlbf`*iPIf}`2-U`c-sY2`7tOYBkbSUSwdu&tr%y8 at bk5I75E-D&%N|A+T_WAfx zjCTFh=@2*f at TVS+e)K at uB&@L9QR687r+ZE3jPtwOcn(mCk z9hyi0*#jGlyt&zg4zBOX&l^==I~NxJVOoVw^;&=V2)fwe*3kvK7-F9F)gH7f at 0SSp z`{(k%OiP#5Y!%&1ElbD26#=jz?&vx&g)T&wou^V+ at s|%p{i{s91C3tQ{SAD^&h4sWoBOdx8?_Qs&0fJ41yN_i;-?-mNoVx{&KGOgk_EV5xu=p zt}??zuWrC!LX`~yp5a*>>MT7;X?v(S-1=-CS?=rnBXs+pX!#+quIvL$eMrj=t?O$4 z2!%EwL;f;Z+-OtY2mL%jnylY^7gW&C*EqO z4_0P)7?Dlv3hdS>0VQzvk<&7|#^}~xvAQl;F0VlNT4B?AlgaBk5m{$f4E#ax9DSY7 zUz)#J&=@gAU~%uU at 7t)%_2y)rxYc zkyXh8dy3;pd~a56BiGV6;wpA0+{Gfyyhsf94y at 5m9+~k`xLccCL{(W;@c5lfuIcf6 zZ10d9ITzOIdzoYKzKF%vPE2+Hk at +nRoxq#gAv9Lf-7$iy`OkXu1PIEh*L?T~Sq6G(GfQsyK1OB?d>O`2A=vu&jrzX+#nw^|7$^yCAB zbhm35EEY(NQ^=M<{>(@orm9Q81$2+`rtlNl)b<6EXr1;${D!k4sZ$v)!a{KvV_49BN|6MC z4eJHD(sDRnC(qnyH_+-V`y&@rm#Y=Bd}>(^e)Yc%aA^AiwZPmluWMyD- at pb~S0gEv z!tv?Y=k3;de9L5zO?H3HaMQNiQF{x-lDP{bE6`ZvxVRPOb at dX8mHnqRRP1Ie71`oqs`J*<~o zvJ1Ze@(_k}xqe4?!g~71n$5&1-_-|z at 1cdCcG1PrD>nwFmrds9b+!&7sNsACwH~F4qmXHFWGkLjFBu;f7YNoV(e@ zB20(g!-hwfg-s>*)+oe3S*IVtW&RP=9wRHap2MD}pl+B{ynL>y47cX-l;Zcrqj~q5 zc_ijKX)3B>s%un&pgH80vD|k|b zoN0!nA~1oiM-@=rfNetUz)z(p9rt-BMwRW?)3kX^4~bONwR#olLX$f>4{i9n69FRn zYK+3*pP zXPqKU^*GG9a|aiA&XbDD45u~*7pYl1^fQ>ycW(>=Z&Ikg+rYT z!qWJ2erE+vmSL;uM=Vlgr0aJ{`$^lU1Y at G)XZ(4kHN8iI)D?$HNXyHV?|EwVFMi1H%BoMCgB6rfFG7QNiyB<1N$!)# z6Z6~UwMU>;Ydo9tBx=@}V6|D$ ztR{X_EJ5}i29OvqN?vi%pys<%+S;W*@AQTU-*`&j$*RrG1`LxIKG$@y_L=8`-=%86 z1Q~yKnH0+D2uX1qXzvI)(nDX>h+n%>JZD35GMo49qjQjZ{Bf`7on31uHaW1vLH`o8 z92yaNG2C~;@(>WJ(ov?~Y`EP;2+QVFclpCrv8d*f&HtLi;|}#G*KjezyL|kJ>sJ_K zr1K;9^-_ZBr&|0qvg!j*H~S&2*4LVQqms~OJxAss9^t4w{Cx==-2P%e6Yb#hAm&hS zy*L1)Hf=a*b(77y!U<{wBik at zqxgwS#=Oly0dJ8;sH*hIBi%12H6~D8 at tdER4!`fa zcu6&fQ4OQyS?U?8mo6%77t at l`!qngf5+`Gk#G87hUPyc!rACTBH+58%>@iH976Ahc zut2mc>O7=@162PF(o9ITZm||B!qKObtm2mRB6<>U;(7H0rQge5oUv|!CR)$bd?Io+ zng~Z9wIVz_qjRK at 2iboLN9~fZn0?rJHZ$sgB|ae|wy6o*+shU3U7}`93*}r#QyO}A1VO;@<}`c+y^Xa_U>}E!Q{&|9^rafbWDp(XRK&Ev;aMZH z^qT()FXuUJ(XVBo1?ZsBi at lfZ?DlKgt=C+_J8KpKUrhCh&v>ukGx0laT(#-y8-Y~F z($V=j{&T~6o-x#b^!7M{ZgpsIMqTbpSJwIhJ$`NO5cToyo!2^qv at gL92SGvG*&$Tq zi^md~zL$^SEfiG~+u3%_#^vWk1SwCUgl at nk65Z-LwxLnX2HcgJop{&1Sg88&dzcFd zK>_2>DPhu#Vb!ul>K}Jc at jF8J682`4#906<`UX$%r>N!WJTE6$KY;BiljNrqb!vv> z&oi_+h$l*!3ZKxLz3Kyx&D+G9PP>XSjYNoUE}>}Ixlg9nP2W0*84Y~;@&(2)8TBL!;t=$`f;WHIVq~t*YwF6={BSk(*W!P_8gRZRqPvu6$IOmf1<;25)~}4TVb@!pzN#VXFGH2UX?^L(>l-xSPOJY9~lRj8fW8BZFxCIEE%;gP}vKY;a(j2 zMIqd}U!0sX!eTlwCZ}v;Al81~0E=8WofE6zi(V^%UXf7En#hMg(Bq>g%Flogv!EaQ zz<puAKCR)towARub;yoU{=UNSk6h_x?et9Oc%Kypn=S| z2T88KPv~}%@|?U@{WDWJN~tS{6V4YVbWaOOr{7Ym4SaAXI<1}`=JXowJsSARIp#7( ztS3C9XFxtS#9cRHo3Bzj?|hgRY3T z+O-#Ay#?;;tovT37C?>-$%8J38GNc22U)dS9a;M-=UDn_xJ&Gv=|aYHt77m2=R$`x zm5tiaEq0umZazVAzbEN~L}~}HkTEwOm}+g8|30aS+i1$yX~lf6*1k4Gb3|NzQvuDV zN_UoOqzh^ydLTmb!gd*N7_C<+TE4+qZUUhSWKF-tgTzdD#eClR20++;_wRA8J6Rpr zF^^235p`5w%Z}%)RIg8up323y0!?zdlh>ow)4Zq;b$m|Q97{8FYBN>#@sTa_sJG~ zu3O&(7n-{(N}s^4urcmNl}Cm)GpxqFH_k(YLHixU!+I94>_?^tirC~pKdUPu8*-b` zoaJFqK4b0;?Xa)b0;P}GCZN?Yc3NFzO}grE at oo8~C&Rus%T6 at e^#ZA3>WhM?JM6rWJLDK^aC_)#m3y$$S#-i1a>^(gnmogLqkfp{aKRX> z<<=ddhx6+Ub-t)IO7^KUaIKhl;c4)jXX|>82I at 7QdZ}`p=I(oD`@9S;ceU!yzKuC` zUg&`q4?TQW_!iGVJ|?T4z{QKz#<%D3hr_P7uBvB(#fP#7{>pi`mn at O_T>M3=|1RzM z;jcyi|13T7^T9loH}fc$e)#th7XLlGx$ggG4gANoK880tIv$S_E*L)y)!`dLe>gi5 zC)Vlr%6q*#g=g2~qQu4X&8KV~55}6-g%t-vLL3D6T`pte2t#`0~*?_((8Kn1;TK?ILVkyUlYqD zO)_cZ67xJTzO=z9zU;9!D>K^;0!n03G{fw+D>BpV*Zssk)uvd8+zM)9wV)P4Sla25_r7 zy0-H3juP=bpsQrRJ;hCqZDNBi7%-a$-jBGSiSK}Wh40C4KKMJ`jY~Z5qFUcRy678H zeygw&DR`47n@)S#L`!uZ-=b^cXFPY<@hWXcrKLSUb6<>a)poH5Z+x%j7kV-AOyRTs z7JI at 9bXb2Q=_Ib>^PFN$IToBPov^?hzPKOayOw_4$DUxTB-&*l<5Y=4_*+F`_Mt$4Tc)GPB}6 at jpz*tJ%@rWYD-=@ zQ%i4;Tk-$f&xDixA$8qv;@Yl zZMQx9g9kYuw!5zPhUjMWz5iSpBe`x?qY$Ej&(ZYS>>V^pkb(N5mX+$XFxsJtw`}_~ zclRS#b(s*T{zSZw#seA`9bS9$`vWmqmf)94rIm+Mwk3M&JK*s}yi8j<)%PF40J)ja z{3vt8Tb7*lhOQXwoO at -+;`=W26T2;(B)2MWB~#4Gm$jbR+$2A$+=XMxx+VY at HfH_V zxG4BOMqND at r#t-1>C(v1!ww}~n4A&-)}!`RK=yqTC; zdJNBnUk{Z5F2RG zk^K7*|G~;2 zB~g^){eO-G{ugjvJ&z9HbIeoyZZiB z)|I1`)ipEL0d)Vpc;4)@C) zo?!e&fUB-0^mK6!iDp02Z=|dh=`3(}SttxFc)V=k4Q2Lik(&AFcs0qJ!*FHt!{hPV zsmm^{=EehTPDbxI`5Q%uRSe5VK=Cu~WncFPiU74QGVDQ05tc`d6 zw;jbML@@YdxMd4VQ|k_RoJ<(v!n$p*hr6aCL|g{F9D#$=`EL0+T|PD|yI8(c2gVPT_kJ};#46>m#_{{^q;*sDdM&_C@|qj! zvOd#^z2xdE)@E8=KLg1`)qvM6fpGNj={DdVr1|NfL;9}8Xwm#~atKZTP|VWpV}k%} z?)$V(YMAQ}q4VpLDF0k{d#o9L2t8VIl}sYN`&&54UvF0@?)J$nQ>8IPCdb(Pv3-k% zX0tAw{zW0B;D6h~4qy*-e+j1DlGfa1yv+dXf-Lml``7?AO`bcNiDArVB$s3RNMRls zSq8M#)GgzhU?y!of2n!wR+?1v)RL;p<#h}Qf zMHIj~AGPj&$Ejd-K4*y8s5CfzQsSP|P(A9eqk`lq;_ at csAW<_Rd9bh4`bWlIy7IzWrk~ zH5h!{ZLG5U3bj3oRcnrGmFz!1_IeZs+!VuQJO{DxSr$3YYxe)hix!cqeSBn^RXK1 zgZb*_lJh#Q{O|MUSFPi|ri*CN|C;36_8&(yrr;GvhQ*V23EnAPTsCDNOe at G?lk?#) zOjkLxWa!^hNof_GqI$r0j02zJnp&!PNhvthm4A3MlPgv7YmHNWT4+P8w8VO;*6F8h zO3VW9!eXfg5R(*J1)}>u8pvtGX7>TKy&sHUhybT6Aj at tcuHQ at BS4~rZf>j^Iidg}ZfrgET^zv$ zRwD|>j${D;)O^6Z5^_zb%U~sm=HW^63Ku%Az-g2>x?lRZ=Cb>6#p6eP9^8E*y=%PQ zR7M6pW<4ED!_|3<0PnsG`p^+|y|r=u_6FU~k3jv0i+UR6glzt56WV-LeV1e>5mgOo zJ8$}$U+`HU0_PSS)7%DBbf#jOW_LX`5r5DMyM>&FOc?(ycGN`UJ?P(kIaaZv3>o6w z#-ktLkt!he{nf#XOcrz>56&dnE&#Io{P8~Xef_C6tIcA`)s!)1cc1Pz{I`ZEaoepPK}>czD at m8ZcS1}amoD?dy}JJt zZTe75EuDNIfP3YXEdS3&vaQbQR?;u->n;iIw6t~@Tgk!XD7gaqvn4bx&Po3XYft3!0E+ at tJK~Q3UuX7 zXFX_U{R`P=*AF-Tkuu({zx&s}n7GFst6c^Kqw!!EGb9h91tYpX-r^G~@RRf3$2Hwn zeO)X!iw82z++YXSv#JZFgBIX1Lo>j90N_IqHdX>Q}b)^ON9)e0|YQg>u8cXKE znl-03kh_e%)XwGPn+ at cd*N2Vox*~<{pB2z2;|_GT$OgeIma&7CzmFtfj-LR1aH4ur zgEEEZrbFY9*Cxy-`eWm3rn{GwqbP)?WS0QDY}fI&Y>1Z%?Ic2?tpf1}8o0aa9X5(O z6vcGrkEh(v(KcPz($8o71f>;t(5+6|4KM|l1{BVCGUg*wN0uRiQ-h{HP^#3^KP#(# zzB2_^s}f7uGE4qnA7{PjoFw+O!%u*h-W>+Uv&R2Pace^U_vH2etoA=C?y?x6vhM$~ zjj8IAlIMGQN}xJoSVO<;Cs;6d7*m2r{u3kR{?3yo+Two{zjs|gG-??JN at hgUx3lXd z1!iw9-kojsyLSHvU;G1K>as)Xi~k|)e+cUUZ{3__p<3IUlIC35fz>MdM1e9Ph=uvN z_o!2}6Y&1(0J847-i1V5?2ZBNf8J0x)?9GD;hWs0fu?F8O{$l`wM(vd=|1_!UyRJ> zYAwL;C-YH!5_dop;tnEmt%>Go%^*w>7qA3CKca at 8=Rijy$lDFx9h>5^lHy65f#Ml8BbU7`2k-KVBR`SE4lUd|`z9{yS#C3LYlN zQWH0F++buq0Av3lv%tH5%2WN01(K#`dL*N24*%BUe`}Zq@@adu9Cw|tYwkSog%GXd zy at m2@U^JaD`0mVDW^VVuX=u2{NpkPJXA1G>&aSI;USbM}<{vrC{V!SiDbaw|(^dXL z%Fvgtd@#d{)q4h$L&r9e>uSHqvHcSVT=1TqYW`W)O;>vs{4yT_UN}zW=SG(^ASpP|G+~N2WH at -r#~hA+FL~q#bse{R ze{*zYXqvWGe*~0mI>6>VuHeksbae+RWFflK0m17svY-cp!k)?XZx`%52#lS7BWR9J z{Zs(>=02~kwj=&(aG4r03M|8&B<=#tn>6-Dl%9~W!P$0Ei$v4KRC9d%zO9TZ|_6E+AjtMJyic&!v82* zR>sG92q~FvI}_=f&=*$Sj7`Dk_3B;m1f7(?enh{Wo!!4f#Kt`SJ~1c~y3%vSBX4$e z>1b{T7{B;YqYU_7TwlS2&Rm7~ybTIkNSdNu07`?(RJ*l?PM7VVp2yAGd?0(qh1BzR zL?AEZN(eP1F!cg@?_yRK9M%Lg+Pfub^H(f5%Dx02H(v_x#~z at e1|z^yw7$>TRcV3NMXKfq}g2cYRIw8mFzgjd^5PK-OZ{e#vPv1t0C*8_=S`Lp2F+d?~x zormtR(b^AzJAnUNE^i5;H0B$Qf?Yk(Xqkqz?OUuu+U1oY>f3;wmlY$oSmqJ=2oUux z!bBIfO%Nni&55=Q3QHawg^G6d{I^oO at HS?89Yxbw0LcMP18_5i?aXyDAIGZ7g-(|0 zjYnbFJfxg*q8kLI1kE70%d}0ceU4|9)=qa;z+Sdy2Q{v|@4K!*W}Az9Dcm2WCe^MRb_PjD5(}F7cvmwl|t5H=Ci&dzzGCM>N^j4TnpzT=v{ZLZW!we zQSSnd0ry?sl2bKL;Q at Z|guqs|1<>-$#|U~)^r^3j^1rY zr8^TrP_wOej8QrNeKK$&aB*baW*A2BkgJjjOyw6i04-P5fZc1#a=v&w+frwz%XIU0 z&!JX>E2}4tF1}ZX6j&Vp_l*6`HTG`k&f_{0z18(`uk42%@6A`;_)kVbpV4;$*1}VP z$-y*DMZ4c$8r(sBPX?P(mwd(n>$`u~f1kk>&(LAXcSg(UXFTqFS%CHWbLs9wDYCKg zkfwyZ7#8IE;$9Vcaj#vb>EEKVBRXN3*&THo at E6mgs#|;C6<>U4z~dM9ZR}}PnahNs zu_WC|nd_beCMQsqq=n}*q>N`lG#7wN0FRu#{#rR7_bbTkxR;=HQ4NV7(r-yYcv5u$ zD7lo&&*bSEmsjXM8EH6lRqCQc1O$}4+Xhu!c_QHZsFnX=t^zmw#u9Q&27zl|S04`D z=>4EgfVYtN4r&&(aKZYPi@;x+ZZsSET$;E-k$$>+-eACyZ{_DTB(0+r<3(#^}}es3>Gg z$fPIlHu(~^|MzKhigSd}Vw2{|35+sGo&jBDjVQQ)-||6k7jeI#dM$-f%Ol;x{;1Vk znBMlhjOWEBw%;IrR<^Qb#Gx9Eu;q1B5zny~#(CR7n!kqJ8ZGF+t{tU- zO2RkUe9%B{8H}nOW_xn7ADF43?MyzFwRzn6&F*@_6LtOdNbN_ zc)deRNHlZvX&|H9UhCGKfVgj{NCw>;-xM!hVE~WMiNpgJ5`-?ktWytM)6Zr=CO^D4 zY^^bZSB)Mv{`}0^oIrFkQ{p6^9MwS%%{(b+%AuR90kdd=^#Zu|d-c!&$x|f7oo5ns z#X2{H!RLHKqd6}|F&`@WhSv~ULCfVM at z38z^6FM>EcjQ*0eUqks=1D z#m}{WU`H3%U4E#%kRaJnG_4a^aj3M-&$+Ps at a^bHKt5j$*FvXpU{cOHeVfPGs=}3e zwIRg)SIFkRaXVdLvVVL>arMQ7|4V$Ur^5kq-DPW6?N_O5lK)P9VUZQJp&;?>N{WCH z&j9`Ij0e@~@0Z7ypJFWh1ko5j!ta@?AjN$c7*GEn=kWDz|7R}h|Gw3u0}C;B()Fgp zJ-ccA@^9~|gou>M&=l*XE56_v+e=2KS8QEmEMzpaOs6_8SBB<^ma5w`)n2E*NX5 at 1 zcuCX#mePO?V%jz)ezM>IA!d;x%?u5<(mp>zH at wB&?3KyqzAM;C_nbr{zosDV#C4KQMkO1cxVgK;A)`(W_t>0}a*%298 zm_td0cUHLj*-PiLHx+yTBrQzdvs^E2u5IU1S)JLL-FsQs6>@bNBT(P2xib%S+Y@=0 zn3w!+!G9^LjjLumr46SjHS;VgyLY*phEkphfkphrb!-1N at b+~F18Y8?@K?JqT`3Ah zdT~89SO`Zy;(>l>73pDh>Q4K<%byr`cCP$I0GTD>E;4CWV&c3I^F`6Lo_+2D2CS8G zsr6^H!fcv1EJi?AX5(x}Sk0}OuUE!~@+LA{KA|W`YlqJx#8P at +l`*hk{pEVJCm>2| zrg0 at 5!u(>uef6Oz!P;5+6{kOl^|q!Xp~p?+P2UCD1Eq{72t>bH0rj343D+3TI~=T% z*bL>bJM>RhE0yb;hxrZ@*9^}~zAkHKtg!=G-zsM at d$dy|XU`W!hy^+Gyl>BrHyQ^P zd>KQ}eEkYDE&pU%PM4)EZb|KEVSVZo(EZ6Y`uF;SZM~~*@&=L^TYj1n&&=%i+)O*; z=m)8qK^*jkz->lUxz6!I1$Ph1QM~+RV;Scc?`bEKZc(v3Wae+z+S=8OT#5wiO{-m= zs;o7nmhG?0ysGl}ScKk-z>oOrt5 at 5o!tS3B%25l=WkU|dya+M&hXFoqCl~X`H*;AM zr at HyKLQS?3-BEC~lwg%K`e>+bGkIY%{(VbOJ!|Hnw(gpo(G4a6Z&A2TP-s}AQ zyFXFp*B60 z*ML;yLKUVHj2}Fib0lji{yvbZg|zbM!qv?SR;*GSR}6v+PI;X5(WXJ$WlRg_*G65!SPt#lcqFVj9s|Hh(l& z)SFo_wL*7i-C*I1{J~SMAhL54YKWYI4ml)($eS4+P^94$^UFFijezVqI>?5)GEpg? z?PTR6J-;SAghTLJm$_NU3YqbEPu2NT16*!ViQrH4AUyw;-CorpM^a1BLS-&Cawh&$ zX?g##yKi2?HH7E)%jEx1^>5u->*;k;b`z&tF1p6r*_^yntL2zu{w7V8 zn>=oSIaT#F)r-e3ORB+Z@)vQ52?+^_+&Mt)hwrBa1qXMt=-F5!&jT5~KnVU{URXQt z$31AUNCC!DeJaloMEP?}aX*%u>EKgGjP0;OniX^0mXV#<{hRt7$i_0y~rv#4I>N7tDtW&Ro=9Kq;Y}?{^%&Ns_I+4Rky<) zl4-x?jGHX_fg!@3`##3l;vj;dYoENZR zc?Kx?`JVA?V+nqI;$oNhv<&ThC~^aG=Bb{L*&1BTtm5HcwdAnQBwt8%7-7G zB6*Y8>JbKq!*}vl2Kj8DZ|^%Pyq?&!^N!w-Bg(<}g1j^iHXIpXz^oJ?pNIe8wOhU> zrZff;==c03c>)1?35m~WD)rv0uc-NxU0&|zpm*F-J1v>P8_Ji&+76~uuB^sd7Sl+~ zSP>+R0l8uKgw!VW9{_2&p{qScsB!@{;;o42W>^)Y$b04UY!&0PsHeU at oVj3805{!^ ztZ&k at L>w3O4bZPu3g_{sqmD9w>-~`rOAauSdP?cgRgxuE-w31FF9FIQ{cyrauOeTQ zh1ED}-H7EWHK#aV+~PYtCYw8-h1{=&Rus_5grL%*cULwRqEp*&4&=q}8 at KSI3Fb?% z#Pq5v)aZy6`h6N4ERRS&5bWs}`3c7EQCw=t_vQQ61__L&lJ5tKlVDbOv3{@f z%M_;}&1)p21wSbaK7WBQFddg4O_RzxjVC{Nxcqf~9acVM1`(f(gayc}fD3+TOH&TH z*pluzMk*fORN6>BlPX8vQd#^%$Z$7q{Vd3H7=k&*yp=CBcH_9-dfiQr(G~;xk-B^{ z?uHa1bQyaw=KeXuU?}|#|K11Oc(YHl$m at 5l>XPt~=;~4UzAF?gTzTHRfmYq1^Zp%o zes~mc*kdToAsms1E7Qe(oVpVRv{^xE=iCKgZEUg+v zMdRYbzqg zzozXn%d-h}J|r$A{wcpBs{&9ra}Xx7`L6PcDzJpe2jYdB*8F=0*~-?N)yJwM6wR68 z2Rb;0gxh3TskC={P>q4^7^k)s7kFvOrLV at +8dgq^@CId9^;bc)>g3oDZ+Ameu(uyh z_IEnoPMY8>UHAc0E~|aO?&}&xKM7=5o(vI1L?&#=D`n&7lyYW&Ir{Y9xow7x)Lw+16SM?%3S at KbBR5P0ns1m+);Lp~R>Yd;y_{&C()G$3 at yd6G z7Q<+sWZIlZ#V1DS=&oOd4MjN1SbuvLc7Sq1U0twi5LrZ95ByXSY-LT1?qI3l1nhT! zUq8k4WTaci$2J$1rl>nHqyx$8u<$rCyQ^sNOxcj5n4z{+y?A|_tnf$*s!oXi&eC4LC+}|;O<07dV-g`f!L?u5|8%;lN<VyfbB}H|kX&@s z^=xd=#k%~qWWV`rGc!=u<67&R4C#<#pKpRAq_eAtfTe}R(SX|4Kb3r52?Wm_mis*+ z-zVPZtxo!Pc}+-5y4C#2Kc}>mAv^u#>V=q9jm+nBELr9*k2#TGC2rVm1l&eZ4CH7% z?>v#=ba?-#UwQxjw(P!DQcD$m6V!~PF|7&AM~Dh5n;gtGwciJ5FHrsnc(oZ0!o~Nd zR1K9mMPL5%cFV0>y1D+iSlsR^sKpt3+hDw5HYc(@zjV3%nTaRYnvHz(jdT<1K+mYH zVVYF8Sz5$G^JjCB{POkTAba|j at uR1L3q>-akpfIFwAx7T-O&(HTuN|KJppo#7{RUK z+2zo#oFgsY_!aS)p!_7PK2xFW;^xVhB)v3FOr3+2WZ4gc>o_yjk at 4s_daPzpnX{#o z0EMz at x{mwbI=cQ=U1Jp9gafuu z7bNIqM=Nwxb9k{Y7GYoiiu9d#)b@)cIi&1jmRaqoXu4_g5Ru+jiO{Q3&miwtMuBSi zBk%W?^?D|csU+IogCe@}zamF`r0fEcwiEWBoHL!H@%WYBxI5?YNTw6LyGVSFAxZ?m zUSrtOJmxU;AX>Dx0X+kcDC3M$6Yb{U&)iR!q8}ql7F4rH8OM4pjzOU1qWw}CnjumQ z?xM_=8bNeCt>Uo}UVN+4`RGtJ=8U`h+3|v?8*Lb%C1N;XO|23q1wP11JY4oVOp;`) z1HgdPuJoWu6sdR9!WRA9VUZKva$qJMi5rO=(SbIZQ%7It)N?u)M}lN}6a`rr`icoV z%-M;c?@)d8BURoc6Y&bYqdYo^E~GZwHIemo;7dkN&&;0F58!dB;VM3g#tm8>&Y%xo z=KSpk7rj#6*TG896o&(x`p#cJSN%su%mvfHqc^7%IPUhuwZdGk;kocoP5s3C<3)XG z?A1&3wAt#C>m|(*dzwSiBbicA}S)@$a-pRK%x~PV--G-Cv-%9G&R((ya(;eK4Sh0ITjbh(#A&C4 z<;>Lox>C5Cn<+yn!Vkd#_#;8lWY?p2)EGsr+#ytubJ)X#zrR6+ciFh!+OH&(5Qg(A ztKJa_C>H|1Kc`kFYlkjn6JJJwUeS%={dhYBwGuhF{yl8SpIm+xCLPK|(v8|bEY ztl<^UAX{cx at _rBVPeW3CY4&%~$VvJLv9soVn!xrP=UCbgd?Aso$uA=MUZIjf4`|+P zd06$v!t}VDba}xow4>HAXN)i?;K|jQgl!xxOJ60>)xK50z#;4w)bTEee}3VMAcY)9 z&|R4isV)B?HbvqjsPCeV^146FSX`+tP`pl|tWN^4 zwzk6JiE0MmhBMnCUt)JMBDAV8V%

                                            cf7< ztLMSTE(o}Tv}_4KUC;lxaSTso&(mnTvK-IgD|)S at k=gp^nJTs%)yZ^!e{wZ)WlBdHIC^ zw}|n|c^{|JDko`z2-0K*%8?es<9(2SA>~S!uopHm>embz0mNA;A}pYQ3-N~@rcPVi z6)#i%q1zE89q-{mD3pkOcYIiec+O{sB*|6k at gPU_glI+6{Bn_BH~vv=VrNVlSX2>{ zX7{pq+i)4%N2gGqoi;k=S)j7bUuS;U8fHQu0oJN-7cTY(^qgc0y=Xbx>r^Pp at 7`+Z zwtwnvAwgJDfy?Sm+~o-y+5M9DpscW`!v1rGxmxG%=Zs>iG!ff2w&$?cAuqzTNhz)O zM(C at gzp@d at u#~&u74$xRQ9G4TzFJUqGRtRT>R at V%LPs(kjV<&K_Uw>%dawE%FZ3}( z!#*VB89}ZUzdg}V%j_+E3Lh`h+r}X*{th01BUdFGa_z>+VIM*)I81kI)?Udw`0R5` z+g^aK8H>AHuS}XR<#(S3r^$J%!gY#DevsizVqwhL9l^hyzEo#CB`B8?jUm*GZ-+$61nBn6Z98l{I3r at r(DWxfe64Eql?=-d0`>?b89f^KT4N%fy4O{Ed# z6 at iz$7+wU`%thFjE?&7W0TdfYiPm4v|5}bKh}2(7{~cAruYd7_p^9OSIEp*8ly@{PuwKMXq`IWp(=C)4Wr%^*-_E2^ zObg7H`##tzs!zR{H=#uQUoRasAZo~u;Q;Q~MW{!F^yx}cv_Y_lf;_3d$Z|VIit;*j zxyh+umUE!cD^qdwW_uN6<-L&0!Se+Q;rIVMBYneH%n1J|7Q*ezNx~Da5&~|*+nb8l zkz(k~4LYr(4Abm at eCo5yHvT4BztXJ`Y79ixzt<+kakQD{<+Uz~}KmrpL{jG58qYI!kCq{)xxjP)39jn}y&#}zhGhixai2d$(j;S0x0 zT>l(A&j#EQB3tm*S*6%scm)aq5{mIEgEVkB-9*VOb7rxCr`rdBS&Nb{JBk#I`c8Pj zG%C!Z&a+s9>_V&_qa_(h at 7sLN5=U2TP8R*m;R)Sbmuf4WPQR;+K;s at y10Vj9N^#*h zGV{upm2cG!Xs&x{zLGV~<%llH6kvRGD-w>0Z&_?8ae66Os*7M=$UppW+8Jw*au@~8 zuQ1*ecD^aPB_?d^*2a)#_71*D9dZMId*hdAc{3N+cDkLt&GJQ^tNu>5-RM;cKB^g9 z9pbPtW03>gF at +Fl#saadGY z at 5!#qum?OVc#abZ`9NA(Q(w7^MST?0^t)5UC}p}wEa)@skjN at C)^36UCjYv5C`rIm zc2c5KWuD*g_UYsYz~6fVGpq{&ISBwi-cMY~g>id6HJXA?^6b~Rga{u^7jniI;3vwu z7vUWvgx5GjC5L}u<7?W1(vJ3`IX%?syEQ$&2HJOS2ooRJMEayAAG(Qm at Mh_}_1RUT zhG6rAs+!K(h|^cKEap6SdXkF_hB!0*l_&M~VIBOwUUv-JKM3q)ak0uOrv=Y!$QeaY z8bMiU)J?s=7b+?O`K=4PC%{!rCylf|6;G~m}R>$|mR zxkJa5acVN19j8}<-uGe~OJV*L>qh_z^8)?BgHFx}IZK6^>w{~}yH_3o-H{eQON4c6 zCtT*Ui|b>_So)qzA%z6}lUGET|4{yz(Lo+gU#&+dgoSHA+3jYNX)#XjV0k8wp*jKT zTo3dqve|eFan$UGd>nCd=SbF5#Xg&8v`;1>Y+ua~BW>fB_4?a*Gu%HH{$V-L4X@!v zCW0}JZ{f|@2j;}**5>|%j4)uKBe&2gfy#Ima at tZ+hPxNc>*`3(j8v424ie2W=B1=- zRGe2hp_cnzNVdZg_XV_f;Dkoh#DNQo-pyA|QC;9|U9K at IcDr|)a;?$WDB)*bWSLj+ z at chV$_(ibv*XlQ2Uj05a)aSGp6;vO_))UPopPUqU5V;k{w z*k3x at Uobvn1Sq7xZpMEw%R2WONQQTdTXUp}QE9D4nJzWu7DIfE$$w({I?)_}B^wj0 zGiP10A<!e_Zk$OSwv907z_<(RAbxT7 at _QQ1 z>6tL62)QcX&Goq91b<8mQ?0hnUVE&rx$|`K?P!z_gD`!6pP$rD z#HES2Ay)G$+G_IwGPM)Tzw}mw8Pf1-KKZinNc_;+NrF9#@PS{IxmQY6qX~=6lwd#@ ze3LBFBo2B-_3ngUk~w9B;r7(fPYw)G>_6Jyxo|h$=nb zy at eOO!~b-vB3-Y43w(v?A##xCJFO~sSxeJS^)Tbcd`=Hpj;AKXY%K~eX0a1_<5w!q zcvc+=a|~2Xsg}}DDZjxxS&^sGUQg77c9W=odO~&=6{u!^U1%mXt_-A%(r+G+gI z6AeO2_`VMM>uMPKok!bLiej{4V(Hc9tKEXuhcjg`gS#wgu%K;`&Mhl_`?o|_%7Mqu zl8UErJZcoLFV0aUTw at wR$A%Mzh at 2!5qyufX2R8pSKc%D4?fn;agOL{q+Xxeh6`Sg{ z4mi_FNUN53?(Pi#$$DaP{j(d!Xg1L#G3_D?H=AqFIV^hrCRUh9+|~1!`jUS({K5b1&UC7z(q zg4sZQCYu1MM6Gu!7bFVl;nfds%Vqb4PCyUc1lV(H3=hIBSi*LVnSN-iq?3=`DpxBH zdM~b6YIJ646%>X5Ue;(E*tbcHAjo1DMbkg!w z6HPomc;VI7ZV`R^P9Vp!M@^OFgdD!%IVGs=Q=B=yj z&oElk<@7i+j?Y>oWTWmU6 at 3vtO;t9w&6o#ZpHuc+O*v`#&Hbsdw$P(6-%o5OQJjRczati1WZhh0iO at RJ)$u^VN}nbP zf_q{b(0ya{TEAiH{)Fut3w_v(c?=u-v-gf~T}tDA)+o04?I%9~2{KIhRMS_+M-&M+ zy|E|VNsO{gmJ(FBb~76d2!O{%r5|Mi*vUliv}3~D$?_swle$_*5>BvK)V6eZFZdMF z+i^e5uh at aKA;XpBy9e8sj3xwIq{p9IngP};%hde-^%=X~>dPWSjbcUyregiKW^Pe` ze6^3Ll)9iqY)JhWpYx&CRU-R^`CI+jFBK8 zPes2=Tsui~WvrDymXb3`O2{=4Nwz-QM=Jl?aA({A7mY+|#~E)m@=H0EpRQ{3%dDZZ zby+o`z#=QVdSyO#@C+$&yPe$@nOULf=0d#5p!LmiCzW9J>u;7T)2~e?>l2O3<>hHX9 zMVxZq9-iwwl)(2384txVL8nzt4ZH5p&1u>P)_N;@KL(yokEX8We&?LjI%_Hr at C z3bCdZcFH|Sn8PE|Xg!C*Pdk;=h)M>pG(_cxoDG8p&-L~l+QIN at MKpV+%SH0u1 at Nzx zS*y9mZzh;3raAK^6)8R6hQ`hf4aS2w6CWb}Xz^!Z6r zMk_U8ShdwoUet8Xb?x~IB@%(8R&sJy=_|94P9~tX$Gf2FE0-}8>DhZwpT9amH- z8+tNb=^ZpOQwFHhvW-cMt*W at RV1m6*c&`-=;vQeE6*h2rPM6zTbc2;Axfa|sTfu6e z3Fr(FV7psgpgV2BRrYXj_(?|dlRio;HjltxZggme`c17qDLz?IJw;sT?-|l}DKli> z;7`)U`C7}o!!0?l!;I>kXe5pZJvTduTbab_ at PvDM-e2d+grL7PgnbW7nY#S;PAbJQ z|Ae@&i70llWZUegF2pa_IDQ|uZr+nPv`R&hx at D89XPYA$gDWnZS*f_SUe#qjTFyLg z(?t0%fze&(;tST9aoYH_ff>LWTIh4*lgdipd|9UXZqDf89p+X}-Iobzhg zblc!>rA;Gf=%AL8LyhzBl8*#TdzgVfw)+WeX3ayRtH#)O{3<_SNj_qEzV4k?W89&G@>b zj?Vq_uEh^ggMp6KjSy0FFRG+Vr at C~CZ*L^fKFvPre4P20-EIF%GHGADZ;y=T$HQE9 z?AJ)Z{l5eBcvGr3xdy#`;EEkJ$>lx3%l%J5tn&%??oaQZ#&E;F%OzJYG)@uMRp|3q z7527EP+kGk53BMD6Ps-5l^iQw1R|<&sTyT?ZMuvWbx0c13I6z zv-?n&Fy`z at Jj@fzM*3FHC!JCekgkc9^B5cRGyWz at dc=3P{e3tz7+%58f3>R2lDcka z5E14^S>pcurD^txXVRm8$8Frl`i70J2&Yyyf?l!1_OgGbRW4>R$JR50uyc&NJYr3z z8zpE6rkl;A#*>6fu-GeosD$JjW9n#H$B&YksT}0WC64{JT at NvQg&dpOQQAGEImdIM zZYI7$ysZft+~BK_BVN4-dzPiP>kJRatRx0OFSY^3 at XTTEhWG9XwX88*dO23yn;f;$4*0*^;4mugq?GquPiFaKq zC~Mor7|}PQ17;htS-!Zwq^E>|oS$YHJ1>4$z>SPK6t<=2KoF|W at 60c1e8KKcGBlX- zn<}R$-J6px6ME)9ph}~eDz#JaHYhh43Z$bDyeb_h#Tz$9-^k-j0Im5`nT-}TUvsJX z!M}{BNy9w9?Y?h8h0fajiXA3=8nXVySSNrznx-QccSwb at fThMKH9L4orWBwb;>K9x z3H|{nKs(m2$-yCN{T_pj1A~)}vRUuWf at IA6&OBQHNRzp<&)kZ%`#aa;X_&tg{yv`D z*We!H>tjB|0z0!${K2i)S- at m>!bpAJjJ_9SbDfCgy>4jKo`X ziRSZno1P8}N$$R;ua#qpgXz#eDck)kh#-&$Zc7^Wx&6NyF_S3iS=ZK^`K#Ht+|RDd zLFl&jt&prC^>~Jefrn>?nK}(|r9xXGT(6Qdf at MRzV;ufkdF3n2-fvuM at eUetApOvg zq~sr+kbp*jDEZqVeFNo{;x1QO>;&4*=9+lH0OI(tuc2 at 8fPbl~Nqeot%5{nlRce3Q zG3LG9xS=4#`t>ne at 95?2MPz6DllXk!DrP>R`nCDwN2=QO_*9VgXXB at Vn)T^V+N_3M zYD_b+o47IqmjkPy9cy!w1R7+o!UQwJq^j3IpH9M${rwKOUnxA>%dxEE{c(urWIGSp z?Y(6uj-2T=VS*G+f={-O?7X>2Cp(&3a(#LDsIJxpmrL*3&QCP{o@^O#mfR zy;dhvJWKT)eeu(xnFYb}HqeTwcev+_wb5HqUqK#|qSPo5_Fk!cBzdwxvh zfZHzz_Gcb7;*A~3io=zhArge!`xI at 3+2ShBE63@60%@gpJOEFeEDsA6W`7^O`Y<;O zNga~MXLF&C=Y9hb->I3#PXECaa5F8IqQZ{pt!qVIrQB4WvS<)XnApp`bTltHnD->XJyw^i4>_E9N; z8 at CU$_YQOfs4opXFw+5+E3TGGH$2fP^)?IWuePd5E2|&JEoD&oxxKp6GOnH`9!E0z68IY%ivwcx3`cOsC$_&b|mo4Tke%aBONxRh& zyB-eKJMfQ*k(ab3U^YzoB0aBIMj$=9MHk*HlzQ@&ttcsN4HDF)fJ~neY#)H<+LM1FaUXee^<5w1QT-A!!8IL*9ecxp(B at _g zXKvj0b%Azv!6QB)oQI|))YE&OuK>Qc`*4H2xUjwbZwxBg%706pUWq0}>wTXOQgGR% zvW3-0N$|=#yR%mJ?#E=*K6*F*ba1G>0l2(b$r3gD7V<|O^KIkfBuXqQbP;y!{st9_ zyJ+tiUH!J59MD%q&V+9Q{E+F!7jd5&V=e6TD>t-~>g(JSJE0Ze;WRJ-_5_t at 1|tC2 z*OV!{Ysbv_=j0Fcx2MVc$BV72z%|Un3R^)tc$_QNGzv^_M(QhJcGSU)k+~Y!O7q8> zrJj=J6*$^!BltJ>K&P)@HqUu<@OVacqaR0yBJNIxX(>{(%Qj6pi(YB`1dWAVV zjA at 22&L-;+B{jwvr(tG{sTm?m=c06Etcod<$~h~9a#$gU4p at h{F+w1z9C2N6s7%ZN71;MMWys!Ck*u_P1tT at eg&5M}Ph-$~l2o zvAuXuSvmzl>YD9YUS0V-hHy#tT5B%rQ+fRW;nj(RRo^x3;eE7FeRz6Ot*6t0ckBAo zt)sgV#+&T;`#nK z!I9g|n{yQKiZX)Yhmpekjj=^rN|Y+Fd@|~p|6o{8{B(`wm7}72FCns~zq?x;KQN$Q zSe&h%`Y?$s()Q!OYz<zWuoD!z4Yi6!|nVol1?fBmI>9u#? z7omP{yjC}JXH{+Uq$s*yk33!PQ9gblC-VP)xb{cU%I;)!K6kTlQbGc)9O$-#vxDS_ zqcTI_6knzf4bBT$cwrxJ#$!>abQ%ZZL-P-05TGM>??EAfz67X;Aqh!hS<(UmZ6nw; z*NAOy)CfAF2Dud_Y#0^4d914UN63ht0 at d(h*eR1OP{4 at dz`HXPr1gQD^f{-1g zA0U=YHVt9`N5QB_i~+>J2#z*Jn;0AELtH5wh&_b?K^sHRNTm1!jYFYu1}Mnl1vQls zkML|?Kb#BEdT~whHv%+(!(rhN2rick=VIVYwm$-8Vq$_oq7i5`OiaMS!WkS255@@7 zT4?fTA0jP`$_`|40+|fRd|!$Wb1#Pgh0ZUubS>T-g|)O0BWzKiSS5l-VIfd(Bx0$v zxDYR%#96Xw6b_T^#$*PYF5JF#Ae+Wzvgu(EOIHkjzVa{7msP*i(})xf%~b3I3qu;i zkS1SxCkJ*pe|4sAOnD4FkPT7Kn4K8V7fqEfD8bF z!E}MT02u%TgXscw0Wtsx2Ga%V0%QOX45kaz1;_v(7)%$a3y=XoFqke-7a#+GU@%>v zEH=f{5DcaZ)CI@@AQ(&+s0)w* zKromtP!}KrfM76Ppe{fL0Ks6oKwW?g0D}K9T{2%zde9i+;~iY_ISzA)aeWC1DYhNa z+|Bm*+cr{w*LIcrW1`~8MjJovbNsqZ{A=IX9lhutyRTnOLnd~`jm}J&Co+eFRs{`0 zb=}iW!c{W!3Un at dJ3LnHJp6ru>XtcqgHj5O z1*^^p*139G+Z1+RF6j$@ZaAun?ZeF|tVXT7E~(`J}m!PUHi(bLVYHpHmNNw4(m+GU$~y|xo`?53n(s}vEo zYx%^5-q8TFsG&U&4Th$zV~1sK>$nYn%$# zNFLF{^d>kqmSK6i>=H&hc3U*H{a%H#0{X%xix7vTxps#DQ96sK_^6JHe08wEyc^i2C7d^jVC%v8nX^$$MA&8Z_^|9t;u& zpOun~U#C^Jx5~%ydY7!Nx?TjxiZa%w1{3A%W3IGL?QX<(kI55a;sa=T>GVUx8p&{N6NB<|O~VHE zn~7UDAGEwtlHK)l%Am`QxO^#R`QF`Tb|p#GF5g`qYXTO9gh=9nUbHHm3e-v z-(R7mIdOaQIRAz1OoX8vcWl?QsG47ozv`t6Ry!HNp+phnk6J~5%LO^CC0 z7i$r2)^U`PidPeQBG}x95wdK3Bl*%s|1)pr5`tMXhQrc_yRIszT*xQodF#+ZWH!$T z@>BZq-Um%J@;(f&jOicy=n+#?_PWJdvy~ov-RNURprXHv3boVas%CI~&!^WD~4K#J!RyhDhQ39}w7CZ6jt|c*p($EuLSu diff --git a/src/public/images/icon_delete.gif b/src/public/images/icon_delete.gif deleted file mode 100644 index c31ff069900e2cb80cca8b70e4b9dacd9ca860dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13735 zcmeI3XH=6{9EXDoMXg9xR8(FArD`FInUn+&iV#SUB^!B3-arT$Ol3LMcl|TkT#{ON(80(Q56mcF_b7)YD_nJ*R%V_d{}X^Zf64?(ge8U at X*lE;NalEz(9Y0e_vl; zZ*Ol;PfvGucUMxB#MfP5(% z at 6S1mIH5SI{Al zkIpCBv2<*e45e5m#&8r-ilZe8hLTA{`OgXRxJv!k!aR5y0w)l;*H`68VPi(IFr(P`P%RlWD~35W z at UHp==)Q7}lrI#-{ad*;gF;&@zYAI{wyxjsKT0K5xmF?3g at y{#y7v zG8T=AF$u0vJEPv~jL%~Tq;fHevxH(a0wYHV1-9hn!3XYdVb|(dsAEZ9%H^G{FJ0wB z=`4GHDAO-Y3Ks#A3w1$VKn8$dm at cRb$N&%w(*<<_832M|x}Yu~13)lL7t{r000 at TZ zg1UeV0KqU_P#2H^AQ+|#>H;zV1jBSeT|fqaV3;nb3&;Qv4ATX50T}>-VY;9$AOk=! zOc&GzWB>?;>4Lg|3;@9}T~HU00U#Kr3+e(g00hHyL0v!wfMA#|s0+vd5De1=bpaUw zf*+VJo#mGvm_+@&BUb&6Lu>BuzyAE=_uIeS`t_Hef4ceOjq5*rKl|Oc-+cYmwJ*Q; z{IgH5&V2Im^hZ}Ne>nBQ`|rK`&f9Oj`Nr$7UAp+{D=$w at jE`Ly9T^@Pd}-jt{=OG_ zd!FxpuIt(JogM9Mtu4*xn$9*h)YsLXsj052JY7*<$2hH z%W-#OySf~5e#*)5po6^~i)l+>&~2=(EG^7wR0^47X8Oc|{res_dCb^|xEC?pvwN4p z&K=wJw{6|>sNQDXO^kpKgk;Hb_Bax1 zQfP3duEFE%xg$l+hVJ{kX#Vy`IT)(iy4q+HbqCAD)zX)((qCh&OEa+F?`GrAQEk^Y z*=)Y+-~lcpz*Dtz?LIxL-A<;S%-|;XE49c(y1}08zVe$5ZY8d}wzSt47>yU|`=lyI zX)P<$wry2r*%KQs>QaJC;v%nJIJilVEeNI(n=TpaZVU^%;hE~1XX-MUTw#16Wy3}X suFYuI>U9-$MS9Ij2cC8TkzMO^xxT(=>U`K(_HMV{_R9__1j3X50KHs7CIA2c diff --git a/src/public/images/icon_delete.png b/src/public/images/icon_delete.png index a4ca764863c98fbf912122ad452d892012246cdc..7ffe772e7e8230503ca1a8cb0725dc66f385b749 100644 GIT binary patch delta 944 zcmV;h15f;p2gnB at iBL{Q4GJ0x0000DNk~Le0000J0000M2nGNE03w~Ie~}?5e`-lY zK~#9!tW at 1=990zm-8(b8vmdix$)+Kxl~USDuob(t1|ujmj|vrhs1JoIh<)vUkVggo zfTBp>Gzh*b)Nd(9lqA+xo6wd@(PC}ckL>5{%-r>yJF}DBCIugQhr_w|oH at UH&!<>g zTEgR6=H}hrnBbES-W4o=<@7rXe_5w+K?repM7^PudQ(dI)5!m^Qa%L4XZzLD=iYX5 z#c#Xq=2tgL5Fc_TK?PX$N at l>k3XZ9Jxv?``)y(SIgV18i%%b$KV>HqC>9)~Q#MjWww**Wk$`2H at H`)Gf4`4j&qcS} zLx-qZZ^Cu^*toj3y!_#NZGV9!@7G$I zZ*^Q$w>sFowqDT*Aj%k~x$pM%E4UQ|`lnv6t+@(R$WHF~SiN0Gf8}@uFE5;co1DOdAcvP;d>+poe-_f2#>%Y*4$U3G2|BO; z-N&y#euGaxdOu4z9>1(Xho!-V=35l#C&~_dKfvsy10e;bi&E$XFnedw3K9NfO0lgJv=?J_MS4z%(&B)*5Iey* zQ<8uzLujJ`LLA2C^Y*3N#zF81FfHVpO*wo9401`}p_dsVDwlyS_FyHTMg+sws zQH+w7px7Da!{{HJPEBEU!VDD5Od8+Ut73L6Ze+XD>cF`cPJNN3?SX+VD zcRwEm<5AGM^2-k&Q()!w-+rE#Lgx3(?mP6TId<>volVM0)%U$ifBkvmLLAR1ZrmFM zo*>*I(EyOU;HbzGegKb_I#D;0$7LiV5Hs3KjMe^jsYQk=>PK$~#Opr+1_0dpT~_6} SO7j2!002ov22Mn-LSTZ9V9E#p delta 885 zcmV-*1B(2}2aX3JiBL{Q4GJ0x0000DNk~Le0000G0000M2nGNE0LiKxe32n2e=tcz zK~#9!tW at 1g(@_|Heqa00mFUcUn4;z~F|aaAGGaspNkx}l^d|%fdC^7PR}gd&{RLeF z(M8xI6iOmZ+jOR_Xl=U9ujZW1x#jP3zs^~kjnPF=FT8L*-sgGG`<~| zquqyU7}jtB9P1`qM|3dzeg)}ae?XsxmK)V`@^hbeW}}>d={|n+ELiSp&xziP?FTyG za=Boub3&3u%+H4r3J3A^YY2h4nIYt~2i{5F2*K%09(=6pl+FqFZrr%p)pza;);3aj z?iqr?Ai%b#4z+u15Cj8KsTBPFDLi at dc#6 at K>)!WMZ#Y80I~w-h8WFwCWc>iTm0$q;B#?xS(ZaE97Z~m1UDb39D0;+ab!E7>v#!?L3q6Bo7qbmnHI#9ja zLUf|R;c&uiu7J@`D~ga}bhcdE9QS*v-d4Lat{~+oq at m@;;vcP) zKujc(e~S~#3G|$*e at xSXcY5}Zh?V7~opB*nFC|bFN%VMLJcGruYbS7OW^QM^i`)RU zXe+N^C_4O7-o z6LAYYae6tA}|+k00000 LNkvXXu0mjfGOnLF diff --git a/src/public/images/icon_delete_11px.png b/src/public/images/icon_delete_11px.png index df23d647b71064c8b8a413915aca2b65260f4bf9..93dc3e569a884499034b217dbe08195217bd4164 100644 GIT binary patch delta 346 zcmV-g0j2)e0+|DlNPhu4NklY~Cr2#2pAeI8+XFz=R+<|qoVDgNH z_JQ_1{K5qi@|pp^etcv2_wNr}^S{4;8Mt at _8D2cRzTwNqw-Z=^VmT3!(E-w80t}L( z{0!fJ{$}{_=^I$_r>{R4p1u0Oa92n);LL&be?W at w&zUiaL4QP25oqdPhQEJ)15Nw` zrvLu^4dwp@>AlYgaHpOD2nH27F@{r@?=xttNHH8dbBn=9Q;y;I#d{1VjvZ#$ zxwM;+3Fbaw0d59SK^_J{J}w3k0UicE9!>@kAfJ_m8SV$TVr&2 at pa?5Q2VljopWeNN zZVEC0$%AMXC{zF5rCU$bp1uCSAR)rfu;b`e1|fcKhK>6!Fnsy`lYx_){|&O at o<(z~ sfoLTlRzouM7D(auuOI6`9Do1=0Gri(Bn^i4F8}}l07*qoM6N<$f?~~}7ytkO delta 280 zcmV+z0q6di1J?qONPhtNNkl<| z$Q(8{7OZTniunZuv9i$>@4Ip5K7*!`6oaS`KUe_728n^>&?BX6!{$9zKspG`uysJ( e2IBw(7yvkgLlK}?VXs600000L=V2-b`3?j&84?5>-wNee3C ztyn863MwEf3KfdfyI at 5`3vH=*fLc*JL961e^{Tr~niPB zpcV9um>HOcm#`|UeY=a3GRsAPidTWKAbN;>Ev*DD at E&5u_y84)+RoL8m<$h3h)oeY`t_XNFA5Jr6H&f1_wTQ7f89P-us6GW9P#%zYAyoUHawkL4 z4CPFh4}#L=Zc-O9NKC(V{Y(dp|DQ0P%lMLOlxY98 at Ei%EAO=J=t~s;r?~Lb|kfg*| z)hoo-~^SpPCdc0woveLb{*~K*1W&+>4Gu<1*3E!T~G#~V3aPT3(5c#jM9a4K^cI8QM!;WC<9P1N*B at vWdI6B z=|Z}o3_!ssT}T&{0Vo)y3+aL~00pCTAze at gpkS0PqzlRb6pYe^bU_(_f>FAVE+_*~ zFiIEF1!VvVM(IMjpbS94C|yVwlmRFhr3>kTG5`f1G+nvbmmWaWo_8d)cN~VkfBydK z&p |Lxabe*WplAHLuB-M8QLeErqlJzswD`DdSgviswYc753W!Tay+-0|)^Z@;zu z&8}^o9qn7Uw7v2A=GQj8y786Pmp80$dFjO$o`3GyXPVbNy|!u1>Zcl4t$gx{6^}pm z=<-LFEnV{PLk})q^uYZK at 4NS&1$Q^xRe$IFJ8r-2)?04A>Bbx8T|f7_Yph=(6sp4^z;jjXtSc_R?9xjrFP=H$qUphk@(ZV3Fg0-gd1a+jCi~AV z at treiVzJlb#u%5=Q8eCeqpcKaF`LGneb$+0oIdunLZSda^^}vxoOI#|#~*j>F-MO+ zDnIYYBSwuJk$d>?VMB9_Lk=@wSV6DRFbo at sne^8&`hyzG7;M;5+PJ~l(>Xh5Sx!Aa z+*rM8D40Oc&FflcG7MR>r#FDL;(78oY<^o|eh9NK-8ObNwYq$z!#J^hSJ`N6t)6|@8fLY0m+x%%HFfvoV-x-bU at v>A diff --git a/src/public/images/icon_delete_white.png b/src/public/images/icon_delete_white.png deleted file mode 100644 index 6be345ca1fb0b1ba2eca1ad210902aedad115a90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 501 zcmeAS at N?(olHy`uVBq!ia0vp^d_XL~!3HGNrubO_DVAa<&kznEsNqQI0P;BtJR*x3 z7`TN%nDNrxx<5ccnG)BClHmNblJdl&R0hYC{G?O`x6Go{^8BLgVg=`5;~Cf7n1Sj< zK%#*!07Mk;uxYav2?Oy*C7LmR(tP*tzwRv zCBa9w&YsE4VQl_^O>b}8^#b)`?r>xC8B?VfO5ZJ2jM$=R>YHY)nYpUbebW4zN`3n! z?dE2)&$dtbw0o7-nk7 at _@4owv{eT3sL;mi&`$9v%{;p>zFFO$C>-AHPY4y*VK7po9 zI?JJj3QZkU0JHP=(Dh4KBCE zf=(Pw3JLq~pLc3Fn&dc1#YT?*lF8G${l;_sG`pHie0Sc>Q}J|)oaPe9;=r(A>oJMu zYr6ttug|@?im}&__eFd{Pi8_gkJrj=kG0L?qh9O1*cJ72qII9c>#(IFrLp$4zb~)2 zc9h9$rQe^h;+PA)8L7fs9Cm-4`?o`X_bc;5vAgXL_x>uik>fl(LFe>~@4x5xsk1dR oR?ZW46}>caw#4a`57^}0UE8*~ZY0tP*Ur>mdKI;Vst09|gwwEzGB diff --git a/src/public/images/icon_edit.png b/src/public/images/icon_edit.png deleted file mode 100644 index aaf2459f2e31ee73a7fff3e324d2825e4fca1e65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375 zcmeAS at N?(olHy`uVBq!ia0vp^0zk~e!3HF=pW8M9DVAa<&kznEsNqQI0P;BtJR*x3 z7`Q%wFr(8NlNmrk(Gu5)66d1S#FEVXJcW?V+*AfreIrYK0}CgYnWjJmG9U%P`DrEP ziAAXljw$&`sS0kHMXBZaMcKs)&cVhruDLM-)m`v(aSYLzICYY3-XRA8H~D>xw%a|D zgO at M)ThkJw;OaGpc})@jHk0%lYl~U}mM&c6;r at B4LxjXn_AsfnCf4sW)3$J@^(_&* z!7$(O*s-$rduKHMEwsulJMjA92G&`>X9YH at Oiw*|x`^|@?T;Nx-a0pF$ApTSI-IMS zfBuNX_h8xb5BL3(mrqr-Y)SBB<4M>pzPNy^WRkXxrbJWl0``6`xmI at 8Nm14}{roh2 z4mme9omN+Te&*@F)W3WOlFA-COe|iuZvU<$#s$}}`fk~Lv|RZQ^UZCi<#~2Lx&rhY NgQu&X%Q~loCII`8jh_Gj diff --git a/src/public/images/icon_edit_11px.png b/src/public/images/icon_edit_11px.png index 398eae61c82434ac65d8c90ffd3e4934b3d2ad25..b695d1b779f278150796138bae0e2ad0d876dd49 100644 GIT binary patch delta 272 zcmV+r0q_2e0?-1GNq_Q5L_t(|+G70w|33pRAS)}|45Z9~_~hfqk84@*DBShf($W>g zo^|h at E0E8?h|Oe>!novA*Px?^8H@!585oWqX9zU6U|_Fp^3 at 1*UV7Ld=aOTVzMz~^Rg?|qpy={=a*->;I0)`v0$QbpF4%PU*j~vGIS9t;iVUL8JHY zzc9Ri|CK at 2s{w4{gsp<8CPD#7G2g0Hm%yBtFYn=02m*{iXZ%7I0LBy>u80B%FaVu% Wj5au(tf~M200{s|MNUMnLSTZ9NrmPB delta 204 zcmV;-05kv40*wNYNq?_NL_t(|+G1wF142VXH*0HaF9Tx6YuBzFV8)~HfBF0OYWbX; z4DavVbJ+6yIU_SJg%%bT48d>Tg89ZbZZKSPcXwdIrO?vSk|7KvaQryK*pC`J1pgpVET#jOwsKpymg z_~SSOgnq(cRSae_VkibF3JdFp3*b at +1OJimW_&RU5MTg}O?4#GmVYfgzz?bA{d6eZ6n%BsyjeIAzl9cLW`8KrTneoD5mBpYHy_HXl7&mMaj&{2#TGN zgOQ1=ob2%9+kS$-`xR}B9bNS7ji7`LZS;-4h at 06Px!BlSID8RRWKCHRhk=5EhO at O- zQFYBYTey(#WkLzw7E+GWc%Q(QB3u(M=t9WY3zgw=4CfnXp(bn#7T|ukJ}aX3$(XE+ z)^s_m*sQ2;P_>wkR>X7HQA{XXG05K}~3WyVTF}=|(%zp65IO*(uxh=6jSyFk> ztBTz6N>ui>V}&4&@!0Y!kqtA*C(co(0|s{g(EA8p9ki*x(V63e4d{$i90J?SDPBX% zfY^dh1(yMkoMcOG(MZkD at 3XB8_I{Mt#(=3;#(xj*Z3#&srpsp6UeRJGeA|+= zvJeq}+!%qpt;7CLNByT(Y4TZfprAM at tt^xj-+I|g(_wX>hQV2dK;oKTJ at KVVN6G1~ z81$L(m(->FXE7;63Olp}`osSB{=dr!)$igAjf_g~H|1O=Q5brm5ro=?n8&_}?(l$q zOfDuLLx1$K+Fa|vb2Vu!KQ8UwUM^=o`{<0`zXgymX-t|njq>zyUs*-8xjn{LX%jg5 z-5A8ZE{GGi)BZk=}#nQucE1j_4OzzR#?8rHjMrc`qRIY=i?vBZBCyhBK=_XjnhZEOum9GXrWh zJyryMugGQljzj9s&Sr$QlTWtKW-FbeF*_Bi9r_rnRtq)*NC;Q0W-HHq!^j$@fxXq; zb^M0B!KWvp(d&CLTG5#Bt7 at ZUWr+f31oV;)~#{`;6j(T~Bfx}41;bzd5S>w8_ zQv&7yy;Zez)7 at 55L(c~U#N#WdMFx8xCb1hid&e2RQ+^vR$)PxB_)P3<4FIJrZ);2B~Jh2V4jYC`E at 1 z5tdO%(n$>E+95V&s{E)Ouw+ZNV`$&4rpc(xdFSNlDBMky;R6>nL1D>#mq|x}oeT z&|HCf>}i;=3TC!X4;O!Lo&wbJN0=cTsTxfC5XT_-7|x&abO)nYX!`G{3>EuAf14u; zjgP3X{Ve at B1$|054b?t`$(mQM#;sYVpcR$jHOTD#p=C=WR8|q4dH86kcJy-Yv%ta1 z)zzcb07Tm(=!RI#wVf(m04fxEkKAm9q&+m@)r6$w&=uD>`aY>R{$cwZ_sNkG7>^Fb#zYrRu<+LDD}VN5CXPM54Mhu_)w;H?0m5#;*hliq_uk|-o;x<`67y& zaOV*8NW#a?c{8$xAxjxC1J&u1*iz)>qp>D@@^wv7kiWo7{pfX^^t?Kq()E^mPX4G$ zarc?%W`w$jA3+rtvsZbUnqM_{E~je)LFV#V&r8RSMfLaWr-3WnCMun;vI{+SD2axUZHKB)m*<(dz>5Q#L?CvmW}T zY|f_a3QOqxUrv7T8x65^nhnG#e-w}F&qcHIDPF=1{vI);4J+S}J$%(D#7 at d=o++hS z9j#50Qpd(Ey>e?uj!3T at M&2Bc?kXUY`hXpt>A=VpOHn+4i86~o*T;;w;6hMlkioL` z$x8g3dqoAuI^9I;K{*~{Dm at iGo}xLa2NOMq1N{hhaEAKRL|3_?o?Vqp@`J$Mv1NR( zc+a9K)8yblTu-P2vuAAACo=Jr)9u*I6Nged9f|u9C{1Wd=D0*wc8q%zrT7566a`PK zF at tY1c9U03!j8CQ41 at DVU2qIA99vy*6{nTE$$s~7cw3gLH)60Uk1*%)AK^&*j>m(5 zN?IiTj%)d5;GUm$I+wsC_rtJ-bIr!i>Il_+VFo*9EEGtONLQ}GWjhZ at f(Wm zkhMSh1cya#kb0nVJnUIh^2gPb_K`IAI|5mcgj^j>vCen0sZ<2#gWPMe0W6u0-MK$u z;QnxK&5ikxO^N@>H{9O7fgVA==b)_!x??@%hZ#DYpeQ&Trj-DIJUh`jgfxDxm-q#! z8$uKVQ9`ykEZc)N1$#N!=B8OQc!#Ui#;`0n=|8dN9JmM#1A1Tek0_&+npyW64AWA) zAG$;kVQQPgXkb4_D(-cvulpxaonNV`qbTH5fOGo-Se2GWrHDU2a(%|!ClZp24c!=F#|p$Rhd>1ZNj$3-b; zGYcsaCB+>MuD;>-f9*@|wiB at e%A`w*Xb|k`$BP%1#wlV!X?*F?pBO?1b;#QJ&I=S2 zq_O74X0qRncB>80pf=y)6qXN8F+%C1xqvF5zto4MeT7X`&ARc=9p>N`Rk+;u)m$R3 zM at 84kMQWK6kr@$jD({)HwG7fDi_Fn^*At}hF;VCh5V at YIQp4!C1kOD at RB*=L at 6nG*tkL4qs+TgB)UHk7viX)ADav zSogu-ulmlkI@(7YB!0#{ZV`wy#&&t$H9XFU!jkO1x-SS23B^AY1FG+Cgi-ty#h`VO(5KkH at Lu4X{ z-3*lfA8HY_{vPAP(vbHTtb|%{MdLVBmoVU=u?I3@<^q43h8syC;L&@hz9 zM3FnL8r==WIJO`{O4ed9i)Cbq!$-~2N4FsK7$+EK0#2zZTG+{P%CX24mgk6JGFKO?zK}i4x zeJI|3m at 4$3@`vxD`9kyQWSW%9el5mCGH8Iwwz+>f!3*i2Frr;Dc6>s7rEw6YtR! zNdWX}<7Aj3UEz8 at _Tbk(;wN9Cbftp5toSkh`4YpLufo;X^GEOJs6r0N27cjHVkioz zqG7}H9l|Kn(- at r!-u2QK&8+=Mm7@=dx08@#7(y1z z*4MHp?M3p$#ZlZewleiZx9ZW4PSHun)8nS(JHMb-Sfn~BWyUZSTnYYgyw$GP&lzz8yLX5Th9ekAN`mgf+nhks4#@AU* zIaiyrYm*UAQg3NIDmmBJKT%w%9^dLaEUP;#=e^Vm8HukuEN2Z*l-c_6#N`~DBE&P> z>NN!4mjV1+03$cE;(Ke`YI?}|M!|d=WW0M|3G#$Fs1Pi0{$9zPz^;&IEdZ2pO| zk+Q6j(#b~IuHos5Pt|bOMtnifep70q!<-+xCJR{+(}N&%`WwC(;Yk>n?E}@pYT(k) zlia~+rHWL5gnRWV4&t{~Le|^S?=Llqok6bi$BxnOmX!N$+(cvqd*xxi&-;ij!_i5R zVW~*dkkD%pr%EAC>+n>k>`Uni?T|@b*I3s;F;~J~!olN!v+sobLP_eC>&@8Dg0_n^ zEyRA{MXq;AT{z~oM|Nf4d at vHF+;;sOVFIlqhq*9MD6-)~lNWTbLd|a&ZI85F_U({O z$%)m8R&w!&k6DX;C9^quq`Z42p;QTTwW#L13bgG5xp(W57nVHB*c^L!!-P-!%05~m zB#ut`IR at qYa;nH;X{x29EiFq<3-6~`KYp71IIV`JVUQJ-Vsr%S1>}JM)U6WhYs=Eh zkT;4D37JX1w-g3eur!UJl>?K~lQQ-~7MyDLIcvq)Oy`3e83=QD~e0WS|ha1FrrWUq!dj6araaIc#!Ja{hkPbbSHM_}D9-?#1FPMeufa-BW`_v*n_W(9{jvyQzc%U2Oy8a zLX=645X*B&OC!syMOJ;kFN%tqy*fU&2hvqlC`G?c6Y^OFCk20z;KgmYOYJz5gC-pec at dZE;#h2eV zW&xSnV`WL}R}XT;(tMW~2TVD*S4XXXg}D#@Wj{mj{v8N>-P*<=K-^6Qac+6?Usc!r z?6C)UWK&ADly)PYq3zUOKzR_Vi0I)wxphX-C~Tngt! z3z}J0KL|_9v~aFi=4L#It@>jTRDtV$j6&~VH9o~Ix`>i#B8X~wra>56vF!G6dOG)3 z$zgor{gRtvdMfMOSX!P%ls1pVD!arYftG_~D9#|%&)%o)lv3Ol<0B(h$2{Ysv>c0| zC>#xvVI8Z3OnKHDe%&J;P=)bPCy(ghj2m`P1?z?RL)-08<%}*(>PQ at DjZc96GJ#{Qf1AM2GofSfRx}Ov%lljO z78(P_?!Eil$$~miQU0DEMT^yOY>JQzX^ty at 14$LUT=8@(^=1kFJRD= z)%vMnB3WM@&Wol~m(}U6jSsk2eQMUg+`5F$Ngh2O*K8~+ZOlFM4mKlkC at ZF@JfSQh zksnQGS7X04zCI|w2#dY73D6-R2{5OS^OauK_ z6J at XFq(5s>PMWz+0)5G*p?EV(74*}V-rfWt8YahgXS_@|Q0KPdA&`1pjRy9=H|DKR zc~q*@g1pf|#T*m+M<&JEYq`$Vi=VQJ^x=qZCveZCv#!tuSu^+nE)rXz$5oAD&)g&% z^=4%V8)C0x!Ey+{X!)G at RsuIknAUNk02NT9ZdP&&TbF*A#F_jsBYRr}@B_4>hPe;_cxIf!Az7uhR^c z<=?OiHCxEXRgsRTS4E6o0IQCn16{;X^J1d zgm at kO1eE96jF7}G5Rmn!+8mz{LqCK|PL4my`Z?Z`nv_ecaC8NKPP;9s`Syi#wMvlO zO?S;2%0EiKF3p0lyyUL1`6>$!f`Gng6%F!!RgG9U>C1&QgQww^j+k0 zE5EWn^Q&w+4f&o24%k0a$MosOd&$R_B1k at Uvd`X?c#bK2dUIFOCmk&7gKg&1BDXnv zCC0`OwX$r1#SP*X6ByBii{6fK;Nb}4khIT at nkt{{u3D<+aN`5wa^~Vq3kg` zBi0gM_4+3>HqwQC9SD={@v=RBW at ZDgGxZRJIqRB!%wdRu?O-=$5!-!T z!k+@$ecnk5Ot$ozn!BMXm3}#~P>H7AdDmX+UAyv2v#b97KQqr)x~*|n7+T(<7xK^z^ORWMbr8FVo!uL&BC#f;qUiakt)|6s4R!I${;G#90q_X1D?g5 z3AuD_GXj3-gL7TLpqbf^+XtAYuL9gQaYy?M>KK;VNk%40(|siS`A1V2A-v}6F$WU6 z+;Ev}%y)zC?A0y(r8suAM}mh}Kd(@F>8(jDdlLn>QG^1sn2J$l at VEuslAsef#&xNz zNP`bt!uCJW7f~HFdSkX7>VuCW2^Z1b(#4#StmCyT0>y!}wu6{^xAPWKUL6 at TGu+dY>E4Jwb zRY}gyN6+Ke*F5S?C=oL)kio(7tN+a6gyPBxe!>-ZTooEgl^DNA at lZ1z@A;Sq-?`G6 z)*yms#hGxsfFkT!gz*qIGgACU6Or5QLOU?Mq=%;209SJ4_Z5=YjtaTQhWN*TLke^^Zi_RkH>Ke7XPfs5$a{< zwHlHSwVyBCu@*x9h5TZIocN>Fq_U*2b7?Xo^yD^<^F at sYIPiKb7Y|G_Nzsy at aUE`Y zX5en|pp6>RJ3ZJ-Cvk99?SxoMq~lO-$=K+GIaVtEV&@Lbv?LlEXFc`_J~XR0{mfxf zS3Y#2i49pU*Vd8a3vkz-dcCXwc-);;>5 z-6?I{Dn|e%Bc2o|9v0m!lJi|B(Z=Vu%W805SMzThcK8$btwiGT6obw~b}XTX6T~z) zx12d4PNrgULwpiiyd;s49hc?7b(a3UM znZuxPDhxujFlw#RsPanpay=eJk1ILKxJACt>Q<(bCS#gbA$Q8niI}yt+9#O7`sZcZ zcK7TRT)+A?!faR<&i*v3 at xdDdn4Z)?mxOL=0*3;ZRdg=w$cuE(iw1g)Ovsh`6h>Ic zKJe6lcxAz$E1K)_>K~`($>d^7_?pFJrR7HHQ|5zkuDsB8v=fj04`d7vk~oRhX2VYF z_db$?6_f&6`7fj3QQ~f`{ug6 at DuN$9n+^Gg)|Q{ZkW>e(h7Tj}YA)9aJ^1r+snaFe z-w_2`Q`Cqon|l-P>9?0YbUuxO8LvT9=7Q<0SgG>*?S_CQP at 39(`#@Gr5YJsuzF_D^ z89Ch|L+{Y~Z#HR3EUW=lD#xH0Qb0a}szRRDfJ$%LuLF%LcoR{T+JzdFu;E8f=`sxR zGEM;pHvXGznSZ}xV-r-`kYJF|%t<}Wv{xE4BY34GOBMJx8U<1G`Qj-ZTI!o7d-i6Qh{?x^K z_AU(s96tjJ5bU1JdTD=b-`sMa3fqRR(|4WXZnX+B;3bC*Dq8RVW!mDg(%F1Q^s(BT zm%qfZQ-c2324kq5tih^_VTPDU&*F(+s3*l5>```EHNCpZdt=cm8VH}9+7(OK)}%J5q32Em0h6{6xun_nJ)L*`SjUi z_O9dHmjX{)cYpFcWdzcaA5qdj>Z=_xXntBrfowZ zg{j@$19l~|Zw71d&O+24{N{5x5`%>2Q${@Sa}>P%1o^G5!`q z*S0z8g{*rWZKj%=*Lel{OV0>9b9w at FRA5Fp%M4K#vVCmD;p;}UgI8)69};8nA*h{q zcCe1x+vQRG`uPSn>3gM{%YLgLg}gOqRRcr^qwRIWHukY&NHfPS)RT9(mTYI4zm=#vD+1$O>{4p^IH)Uk%rcx>eUKbd9*slNQf4W57n=qSMR8Pb&k4!kHgyt z|IPS}0ebEny|+GkNgTDQ52?^<;P8y3^>NC8liP67pud}A;Tpl>eXfV4t`pB7rFNl% zrTjE|3@)!$JSG;_?7Jnt^lsxW6HF!_A5Yca5sbtnB>bfA_VCBdBCR#gI4<7?)heF* zj at IP84I@S*r_z|+$Cy{(JeO)W8ON&`4%<@|%C}#Xq4X()D9Po9(eO@#ZGeWnQ*&^tWa5jhqM_>mhm+I0cvOFP+ z$|R{6z0UJXBv$YY!F!5qlwWWZRyueo#-%tZa@;Ard%896cT6jG(ftL-cSPxB9sGQm*jqi=Ht zT$37c;us1Hj^V8aI+@%GBXY740-!@n3i;x^I7Y)k;RP`$ZzB at x=QND7P=6uuwE;i! zbi*qyQqQa^@tCy~b<&P6HDe5DI&cLf-YL!uBVE!w1{J)*JHPNY5gTPL4Pl$+)!4dV zy5=)vaExnah6c;R{K_cBW{25hU}~RnqQ?vd4X2nj>ZR$1YGEyWO?cjMsv&oFX&tX z5oMSDkn1nGx!Y at KL^YqI4k$`af0|Ls=o{Rn4W2JZMJNb4*6zQqI7XF=$ZU zRdJMWmzd3J>IfG(kv)ye<}PfS^;Ilnav%X4z_ti11$YgUkp+|NG5yZqmA?}J&`pB1 zFMud85{PUZ-Fr+a1aR?_y4Sce9W!?q3Ouy3{~hYEH9LYfZAsgFX;cOrnKGnehvBr2 z_mYY1&3paQYZ(GYj0ObLErvcu>=`sp&Zg`R7LP3D%uDJ?-}wIFyiFh(eJ;cmRpG{w z!U`AfdnwRYCHTrrx*Ks}DIC9R<7fU&e~u@$BBisI5U zg$2Zj#e1l2ODe4pNsCj6rWRs=UUtEyHppf4i9g~;(_u1Sw?~%KzUmKIAsb^NnWQ}p zBvr}ZE0WnJ1k!mzTriDsf&JYqS_e-tMYTUZ;v?$hb at LJ9OCwQD^k0g->y1w6XcnXS zbC_T#IO^~a0%xuFUotxV4hm#D_u6e9Wz~=`>)*E;2LiW}MI6x{n?V)0)#&M~UL3td zDC9j^Z;B(5mh<`NeFaT&O&mx*RL2|GN$5wg z)sk+yCwxu*VBO0AUja3NkcWc^Z8~8RMm*1Km=z at -;ggQ}&=`}plhZzxY!AzoaYrrI z*%0RaK7&P$Yc1NLi45L|=h$B?2M*<@O;>U1t9W+gPpRRa-eV9uUF}X-DehC%%O>bB zZU(fMm^bOxp at WG3h5nEAd{;Le%WJVnP*#AOFfE^VA(ehstO=J(oI!O8{erc|7h{p} zLAiA!QBJq~kxY_CirK!KQFyHHI4S+gG9=li8Kke{Cs=iScF}_)`Y}jO?bsAVQ#}d$ z`Ka*y<2MS+#&Ng9$CD;Pk0_EZ13wQ7O;}dx-kYL#Q4w at 4TFz4f(qsg8PMBf zukT1ZThyT7i*TgB8yJFOh8>H{q$uL1Gu-&5#jBC7jBGQ0uJX)M#>HR_HZA4H9+&JT zy!XWlsY+q3>1(T0B+#vwGb=ubFf}xZe6eRrvKtY#<_|IhGT$Kks`ah6SwKnB=N2Lf zA0$$>XPegin27o8$-RYjCvg_gmwYOW(A4#jFoP8{D9C^n1>X$i1^p98g8d&h^QAc( z%u;bly)>pD3_(g7N;T7~TfL23rXpKQLqMromLEMo!#V)t|^R)O(9!yWcSa#N_+2}j~}v-{_{RJPE;m^`gIsn zuBhZpQ6!HEz=-BS8yol at lB2+9=aFo4QFDftkYAquOPw?IH6ORTZ*_=ofT>v~ z(y`SzDbO^miA`mtPYMPhHy1(dGje)r1u0hBq at yEl28Tfgx{dy%m`t&57(G9F3@*rs z;pbNzgIrQkgMt|TD7qBzso%SspYOPDwS&s#ohG`e1(0zbzN+MTDr7Uk9=drw^*C+- z*fS4>!K5?Ihjk};r)&Z4L6_&b5)XT!Zg4tgKajU+(L)p2s}=5li?N1KA{&25$%RSb zpE+skx}Ft7(JgX?Qt7E;*D(vZQ5w$Bp1QaSvyXq_iAhk3*Gpu%jZw5;fk3iMQmKqG6p7zd#jx_#FEy6 at 1fDQQC~gYG8+G z=jOhm%n;klCHc;-b__)(X^!P-Al>QRA;~?P-&QA0NUd0G*bI(>ZdITDB7%fR2d$Qy zHV!SfW*NP#W%MzYe_QsnB$#|WyzP-|!(PgZe>dXYzQef9 zGrP3ALiS&QxwCc;4F%5Q{9zgDJLF5$J1=e?e1z`KTSQ=D;<&?m3bunIsxK^wF)YNCOb54u}K_l;+NBTbxeM)u at Cw0t_uH7c?;z zG~-(uOSo2FT(f9vt~kknOwAYMCOY+5$m)}U#bNwWeF(&p>p2y!a{Js8~-+pFx?I8imf&xk?gkC!X~@C}&J&udGkAleTld3b&g-8=$3ULIUR% zzDr6kN*F7M+$77=8M~q5#N129wUwpQ360T0w{=5r zl{Jmd=zx?!f3TT|L_|njg;`E1N`?J5V9S0X1r>L$)4Juucp2IUjd~Km>JV>zszV9M z;-60>>%fyr=`S3LyH+ZnSg6Tc1=hU3N{We9)LK_S at SaO}aWjbc&!5FvxDpMjjOw#Z zY6r5dcBm{+qB3IHSy%?LT_dC2QKG2s<^8u#?r9`Rz%7qJ^Z at KQgJj#|gW|JfI|}iZ zV`*!lQxoemU6POnI}p0$Hf(9pOeAXhdRRs$4xV%DJey>mCbD) zpo&?jNn&pYcVAzS?!wRjGiB+kt05;|jaVkmva3Gp7~b;ffVyOl&->70ZB-vF|4Zr_ zIe at G2=ML?|UQhWH_KWeo30&%3q;&77L~35RM`=z(!@^uuUKbs;b!@cf^)qK{YYdx2 zFOl^}72fRpgSpkoJhy78I)TB(3f1THCCW3aDG&Xt%&PkhGfzM*ZaXg);C82{f%0ud z at FU^!?@qYWZXLzr4{cZY8=y^!&QvZ1ZxE+Xuf at sP*)iv!&gGz#7R3hAYQl!aE9 at tn z*>L8oZsRI)X;o|N6p-##+mdgZ7&E!PkP$B*wZ1A@!X^3%cac#sU?>{LTd|H`8A at r z3RV70$jtrfu}L(Yd4?~pUF)?PKC=pj>wz_{z at zo6ppPkYphhGqU5XA((wKT8{k zmWXr7q`_tEJ5lo9Gb-#GF|qz;GP0{7V9#xn=AEFsRt|e8t9bF8H93Kwk?E6H4aQ&F z)%xpHjF~y*f1T-#NT5V*CRpl>7v4DPW`=vEg1hD5C at oLAj|;92J+~p-!dY8 at mzSOQ zuYNiFKXDa9*OZ`b(B0O`4vF at u>vyx6C0YWDi3)CyWP8z_PN=ap-? zWmP7VpK+4Mjm{&@YK)BB5joJ$*#s_vOt%%k{AeO0pXNx0 at J+NtcuZ=<_Uzbl`qeFTrm7 zqjk#u`w+3yinabk?o^XrG5toI1)J;RGggd&p%I3Fd*58shv at DFgjBoGRnhB*n98C8 z?s^jDQO}NeR>N=>v7~%PiH~QPLpd7OC6ZgabBPPsmG(`TpW+}Av^j{x_)(P%fkwN^ zQU35i*ZH!*lDMR=HQ)&GNAAe%x%s-}`_$O32L-knjj4F(XEC6ih)U6qB>x!F2-zHz zz&_iu%`4MAzJzvW0zob4IM7N~S+|d{=BjOUjCmK%1^pT at P7SrZSa1vMq$EfX|BAnU z3|;Sq{90J?C^{yvCu6m~;#-??b?3L|>r{ zdPR70N9)y5jzKnr$G;2Sv%~3QfV(N?-;Heg#o(z=vIk&(j>girps^)$Of| zQ**Il|KkSByK`1Nb;0#91H5)32e{=lt!2$i9?TD}MBX at -+PU9xS@wMi>4m?i)!C$8 zdXy>zCoVqTm+h2Kb||UcoR7h;s7k5gb{m;Bsg)uP~dUVp#3Hrx> zAx<8}Z}oIV(6F_$Mz+y6FxE at L@PgT+>b)8+&FCjE*#OV6*WNjn81F#->b~TReN!s| z`tdZkLdHW99EJ+D+F8XJbDhx?)91`Jb!tu2!HpDZBE^>BErDT#* z7y0`1gVe3Qnl5^^uhWH^(EJ8lQM{Ar?pdC*xB=L_Wf5Ko{MehmI=k_)Blqe9ZQ&Ki ztlg5zGfQSOrFcG;+xTGhf!2`|F(QA%RB1){w6^KfT#}D3YB2NUBsqmEvEhEd!8|P_83aX{o@=cyGx)np%wBjY^{^Sp-2qyp1`q+IbMpbbsdsx;>F{3Rm at mG)|9^ z^$I|=-rK<31@?(Lvl)=`T|5~k_m%&GAHd(?B=C}S${Meu4R3IZo>r-MA#4&{yvx=G z4A=7JEf1IfF%GZpza7GAJlA3zv+=6==tJd|$){m at CS3#cOxu4UFj{$rqIZ}2mHuK@ zRZg0&*irMLfGs5Ib(DGF;H+^V!{9Rd2iIuT= zO>rwWqVO8iGK(*84%+x<;vg6?+bTFDV>esV53&`i)s7{)VZ-1|N<1ivgP{oY}WupJp=Rq~z7> zo>fWSzkyT-EMKs}Qv2u~1bIJI%mYF)8UMdHmt=Y#r(bi`Sfefw-PkMqK;yP!Z9(}+ zm;EGqR`bH}1ur2ITOr?1EJu?KDV^0hdFbWW{|;Sw6>rdG)7LS$G4ww}SFZj)(3Rx$ zAEB#h0&RS5r!Dz^fv$k&%|CiDVKv8w7B4a$;(TPi{tLK<)wQ>Xe=Ml-tEVY7$L}Z2 zoiqd=9p^NgqPa at cY+nBGfmj*$QC5{F#l4Hprd|X^KUC)84(&C3{e=-n)$hu`<*Y&* zn>xzU;B*AMHMT6$Z1FU9gT4I(PCxS)1EEFeNzuY{ntHybI;coa&#L%Ayo6~#<1i%W zgMQLlu2(M(8Y*%Q517kWat~7MaVp`fr-L^AE|T+PGQTUiJ5f zL&HFv at Ujn_`K$-!A0%v=*35^OF?ntuZJB{um8h?Hi@}xpUVDwW7IyQ$=(1Mo?8PYuis&G!m&=M#=i7Uk zXLn>-kgVJ+o89{5*m;5pwehzXL*X)ar|EyWED7}LH%bS(xH?<(RQ at X!iN|qBx9je# zcIR{W at nxNt!>IK$RGNRJz$`;y at J1zPW95@=M5!Fujr+zs04Piw1pnq-!iT2~xKU>@ zZGPKkF3i|z=UI0))~&%x;LHuEaPMgE+s19%d%NGt7qbjal0HK|Fz5r0t(yjc!I2vq z8#y|wgkSlZ#$cmPw-7yC<-H#NF|H5z-=kmnjKzp2H-SXDSK;u3TmlKLr-z>y!QqRP zx*lF4Hwd(ihqtzxlf2!zyvc4k-?qrL at z7EL_1=4!DA%nG3dg= zPjAXqpZ@=%TvK)bJ8~gj{GX8Pz0+fwoVhKs!HNRj8C&Lr`pi8nptybFI zj2Yfqwrz$eYVbp<|9isw?3}6qshldGbgT*X97|KHuCq^D=k3r_9;-IGb1yByjoi3Q z&&|`b0gunc)e at 3W3;gE8B*460!nlM9=-XadREYxyZR#M7OM3Vuj2IU?s$Y>F9Un*D86t zcPuLbb#?UZzS-~rwnrZdo!lC)3ZNxy6Ko9e;VgBD?+h6mj0A?Ak+_%8C$-`iCx(Ra zKG!_st{10pjNdd~t}QQTNhD(Q1}J&pGv7%fKFNn#_DNFlgqckTL}it3^hevy>)}v+ zOXb1If3MR*q*Ewby(adSLg at C^5~at9w|qh$uKxd265)TS^p;1M7HS1#`t)8)5>JYR zhCDJq=5w65LWm&8y#b%4XuCT&52!grd#vzJ9M7z_adExreC z2GkHG%RHeU>nJJ%)~z}BK_G|M$Hzwp?@^~BBIN~o@q6E%e4?ZC`0BYoc^V4W+&rL;yFu&aFnwx zIaV9&B at k~mlhsl~e at JkD1Ob>Gyq at xUWyyTMuR2vbqa0Kk`3YuyQQ9D at yxIIiX!2Td z`JI?};lc9b7b2s*7pe>Xu!VcU!0{BD>XpZuxUGwynqFe zcb;r%lLwj9z;7 at X?66?FQ*B!tq(34n1C=8RsxY1=8)&~al7LA*dEh#Y)sNIE7cPVF zmK$F&gfpgJVqYbU1SGs5g8i?!K6j89=bemp+^Boj*I_jbZ}axYjAV~@_wGtXH^Pl_ z+LPBKRnr0(;95b4OtRJ0%H#j=Y2F3{%pr5 z2P?1-v4ef|b;|354=ITH_G$gKmIY910GVtioEXP`+nwHNk1v zd*M0M8?fEcKdfW-$h>C-Q%5HT_*h(#SW#JxWGxT9=CJ at k3`5?U3p8F5n-eYi(bH;T zYciFGi!aMh-D$QxNhgVVa{)0{Yy;6rh at Tc#DE&2Slf3_(yG8h1?HV^FjxnYj?sLt>M!iWJ2-j2zI=vF-Y{P)pIT%f8wwA zndj_;M4sz306kQ=fq;GYOs}Vb<<1uE*_Tm=jtiaF#X~pm6~V>RS1+Sg_w&Vz)rObH zG4NsMOK0UH(IU7MEL1V?@{}Pq4VeC!M5`UJo8jbKRo_(Wi_)kI2YauT9eX>M-P zYW4{oVJaXiIk{Vx2?qr(;NKTpg3ph)!2QEXfRE=654hxT$DyDM%IF^4{VIR_5C&oO ze1*L1&lbu3vzx{9;d*~_lA*)v>5liJiqi=8=1D?)?x`*-F-z{Y^Bu=Dq~cEJR{qgB zu`qt|Z1W*gOX<374^|7WUAthk!sM*YL%`Pju+$xRO1y8e>C{|j<3W^$>h`__Qt4)N z8}$Sb^nrjqj_7Az?yq*i?XE#Be;AR!@w5{ivwnkQQC^3%HDeoU2W9&yjeZ9DW#0Uz7bvm}FH4knw|Ao?21lvsMw(2RElu3qvm= zG=Dkpi{WL0xaz#b1o9=Yhl-Dt&hN94S87HG7nO)hOy~huUW<^&G0d`O9~I+;*JGc| zHoq~*iOnBH6_-;2cNMQ`hMfS$DS&0qcWcSVF2trvSA4DVEZf-lA&slC=;qE9%^?bct&JIHDU-KRK`jzwmR$IY;Z zF75^euVtS1amP6;NOoCI<#gn|rU1}Rw-+ZixSIrNM5)J`kNjB$sE!r|L*Y;NKe}FH z2QEmcycl6_2Z9Y-rtDcBhIIx-AA?^nYW_U)Bp2Ttw-EmO&xD5yoV at Ncer?mu-}IZ7 ziyp-0)xVn6W3b;>pf+h}=jWlX3^`fG1T5I4ME4X=R2((!SY42m4m6aSe4Qw{CRYCC z-uSHfP$wb0zrc^7T|{f|boJ~}50p{apMQoR9x4|I(!8n&l+VP2f+lDliQXT&#sqq1 zz^EUW&G-#qwwe%``P}Sg{OWfzThlf;P=1`fw%MNj%8!{bI*evJPcJa8?{|pHI$ahh*B at _FpKw_#~u4;5msw#=7I5^=j`=pWRlhJkaxJ0$3%pC zNFg(F=;p#xLe)Dl`Fzm at x0Iz6$a`(<&L=z=9lIH3a(b$B>~m;|_V8FVitRS_5;Zvk z$?D&!z2>jXto^N=I)6*(#>$`d1^+cs^M*s`?5TO>l~qgmMQ8N<^n&1~$UR0 zN9%R5=3nRDFn{%pq8A9-1~_^i-_s_Wu|rDNtY3Yzwo4}fCM_D{>YjYJ%(8C%Wu9W3 z5R1ouwFF!xcw4dX>dt79zP2c^$Cozw${#rq>m>^q-*3h7n+SZ!g8pypy>~bq-~aco zBuI3kBx*>4=)GGlNOU4P(R=T8brHP>L9~$QMDKOASOlwgR`0B`<>&pW-|v0>?$7dU;xk- z>Xa`?8ivr(p at Y{jbX#s|N2WwV5EEcoGON-{vvw=7Xxx!Y9 at d)1pu^cI1d3 at -yN;|{ zpe at J6aVFO<2itYq1IpmlC^qrd?tGLZgZA9ui)&$OyW=L6>dNiWl!VrP{3p^tvq;9b zfPxd&ioG14%Ok&5_3Li7cs8SK7daYEoxWR7p=OThZ&swM5Z-`;fyOlqRkds2emq{F zIrSypDDK zBd%E25Q>pCfOB2TOGtWD!`c`;bhI(<-@?oLl+Yo~)j&{7IL2Xjnc1&zJli=tqutYD zVH3k^Y)AjL?8dutk3hcUsBYw at BW~FcwOkFb61`x9IxbJNVa_>u2{jv5)J{NBk(JgAaJUY*0ja**X%)Y2)SERv8|_EY+!io)cv`>#tJ|JUqbkPQ{iy8PII`~-9j;5d zN|{z8z3x at t z_(7pd#*d029}Rf~dmgI?9y6h$0pYE6nc6R6rlN(HMl*Re9Y&S=l_xH9;tnL at KK_bl zr&peRr55n0c>}~J*MX1OeCTz#AUg55tP?-&-Nu_m?upymd)cDmiw&En-qdq at q|UdZ zPLdKgSt$dbcCg+WOvWKtX=SRDvBX~XYrh1hL)^<8A=QQ?|10SZ{9n(rtvEIoO=jr z#-N!$U-x5Q3w1hgqh8RYF^8lY59b_>LPCd-S3H}OG@>?dU*vkdTpsnhiEPM77Qvdt zYAyzWtRUs}$(l&jymf51k^Lpx_{H7kqvv|D`hmv7mF7Fs6%BSRBRfnSD@)~)yfX`?< zp8J*6s9O=Xm56i2VT3i at hj?ckJ>i zmimy&d~2lSq`2lwE1-4-vDk>$AzyO(kH#4#7!Ip9sf=ZFyTr*i;lvhsN%S=NZKkf` ziphPyI6I3S?RtmIb*9vvR!{FY6udmt3Wz-{*Qj`Y_L#M; zu|uYUv<%)cZw!6VFqa$n+5n+`2??yW1H!RTAPHO6-M80a^CZ! z3UZudnz1*@Z|#~6Bc191B8Ajb!xe}@84y8T)1lYwAU3c9o;$oJ0r;ip3EmWusz;s$ zyb@^`7&R_+q-OOSM|z-o#P=)DI(8Raztm>ITz)3EkJK7UNT7zz#{(!?+pgf?%_sg! zt>G7ID;Hdss1|NG@~+M(IsV{WtOwq!-UI3t?=!Cb(sW;Ve^L??jeSgV%!g;gWUT|9l zS!D6`yPFlCwSF?}7PGsPnB;s~oF=W;Pa$b+>eN%0ik?H1;cWqhc>E3z_PKq$^e+p6 zcL5fcu%-_=<)x<@2Fou1*NZ?(@lM!hUI-7k+CUv+qaub1^f zZ4l8=Sa>z+y*=QcXU%_JNl|5Y1E)X}%QnRCos=$p!X!ML zzV$5I7`R03E1vlWpm2`RCJ1i at a|Sg%J%oSC!wycq?N at e~b+}KI z{4S;PceB9(6MU5l4GXm9VH4)Ayw7hcAep at e2C(>8ZgcEF`! z*_*57 z%$p3zLZ8cOw~Go0yoouip7O6#PKr2U5_&B2mI7IkSLVc8qOYBE6Eboc({>f1m9g>d z=tw=|0^!PZ32QqvfC9^zph at nZ-|9Akz0N<5_;Sde6^WNDX#4*f40I7U&TB{W`QEPF zvTy>Ookjl%f~8e%fa2|t=Wxhsh7z#UDtouO{Htfrk! z_YO+MbE{bqx9MvLF7nNtaHGpcBo59)c*pt-J)z`@hu;?#y}c%K&KE`I(k146KHly1 zyc5C?&usGn?poJ(ndj>M-Nmg8{Lh`&|Jl;NcX8*1 at Z>cA+t-*1jtN;_XNR~7gSwS8 z^WMBUQ at fFcI3)RK2{+enlo2NXdV9Za2cnSkN1%8*6io}0R-9k@>g at ILYL8RLU;V}J zu(@_CgtqW^yq??OR`A;8aT>Czr9N)Ti3wOCuZ`~~5eT1|o_d2kMA-vx&UYZoPRs2G z`03^_ at FxF~qOS6k#9xi_SNb$E$x zb!0Hz4G{l|M7v0Y1lo|9IQRbSAgTHUflw45wo1t~_IIdLB8o-W?d8tmFN z3tUuqhYfEZ*kXgXtQ4}3(=OXv(qL!VaPZ7YynlpG4$Pyym!mBej*38 at ksBb-YfZpC zU*nWtAiQ?wdnh*Sb{Mn42{+FGqlVX*%221m7=w7kKs(z!=fUz^QTk~E-J1HmzI`A1`5bq~N{60t-}63H9r}YX`O>O^W)2S~os&U+dbmHEVKlVt zabB_>T!F&$ux?vvcL2l%_!-8GaRd$ojCmTvP;W%{yrE7bR&Or%&UFowmTLEalJz^7 z9Q&m#8LLh%K$$dnM=~H_Swa$YtCQO~y8P*si5-r%@oNyp+ at _rf0AJo@)l|1epZCpE zKyQ|Iu+F3AA2jzhQ+gu%Q#!zV8>*j&GR`%SpCQ*hNY8zJMS#9kKoNi);dObiSvTo0 zK9z_F5R)G;+f)oo?cfgh&|2)VdE&jLr|wgQZteyNlLd at iUh zrAMVMLOi+r{b%CFsAhoTpkjp%wf at 6-E2!Ik!#XF(nr@AL(sf5jOkC=Io`Pf%hBE__sgoprAT~z#^2k=ka+_u__G}%K^h}wHena^{}Vz zO7ct}E*=W1cY5R>xYA_&oD+PXZS)-IY!Ea&*yJ->b+?3bY;Z at E(>sDM z-w;%=z4M=@cI2o_b>EAiHUW|V?0aEGGV7_!#GZELWixGz6)SfzEN&AHSx`TC#dwV% z*z;8NP2G0KW#;zRX27l&4YrD`S)VtZfD9I=H)0&?LpkrWx^|72d3{Gt!I#?}4|BV| z+Rw8JwA?Iv{y5AM%ZPvw^;AaUx7!ICqB!k;nNjJ#N2tzSUXM8jv_YV!nPH_zxQX&Z z%X at LvSecMsU-ty!MkCMV4IUOCKvdhI-}Qn&8&2c2VRlJZn~QwyyAQZ&{}i97dIjqz z{%$M<5JGEz>m`Pc5D$=FY}=oc>n}+#x?!Qa$PTXG_kB&{ydmF_3dgNnSKLP{oBllN z_tS57aM at zu2=_KqJ{6eA&9eiVFRuiFH9|bF{xTU4H2^8V-F((*{@yNd(3RP}b*detx2J4fQ(c zt52Ns904qERxN)!hRGhIg73!e&nF+VyKtrfmTOPMJ9fp0herbIW3nO{5zDh%<*3=M z7K!>_vvPK*n0W>l03`_< z+22Eo*=Gc!;mm%cRMpFsS(+0E#fvvBl9kLXlj@ zF5Vq7=tENh&krRk5 at WAMRiMv z!=Q^|r>z1Ypy>5FsPx7|pyX#Ej4Xp=oL84nJ7*YH= z%PUvDTcGjyj8L-_e9dENv at H@o(cr>$R73CBRpq!7#NYLrMIUGCT6U$X^9==NW1 z2>TqN{7-}{Yrj$CXoJ9k4F;l*<^i5a$GG%^mP=@ofW?Sw(egN=<4ns`Gtl$87+GM{ z1k=J(6;x&3 at fT&i)&%d!pTqh50W+2dbU#pIu=mnknZxw?JdR3m z2<4ltS6w(bBJ-D~MU|Vwb53DboY1RT>`%xpQ-0+9V8?(Da`Ea&>tBcbKhBANKQnT* za`dW^rw0<=qeH%&9_5ylH(1N<*jP{;I$k1Lc2(3teX4Wg0j^auFBhFco8#W>?KhA& z3#G)xFiET>=}4}nwGxb~m))u(o|qP_%(s;aVGa7)RQQWKM!oVouQ*gEVQFVoG1w^h% zC~Xf&OsE3b3=|a+eqG)7b-uv**5zzBwhLq9s_ zt){hW9$~K_ffVW~&M^+^Twiw21Cd)+1PE1dR-^2?*#N<&tp zY&KNzC5JAwl#10;m zRk`yC;(eH~K2`1(uQS+TR~e&OM)&R at 3(h$OZSi;`?zD?1kLWlSi=JvxVnP+voGF!^ ziV$wd8rBFb*p^vlXPjCoecHR{o6T9tI at 6}_7niY2)9iY at D08k{p$l>O8o0Wx-$Lyd z?-SixP;vUx=g9-J`vbmG9mPxME$4|#qQ4Hkj>1Z-gFwRRWu(4?Zob+bDYpt0pU?Ks z-bI>t^PIMNU=Vikz%xEC31CWm}Wndq#X~zIm$o$Sh4E?pSw<5nY zn8NZC at F~N?W!?E7fj>2RbYwgYuXZG^Q!nC_nhc_l$l$6_t at X&uN+Ztls?dd7v)kqU z6(E2Wl^3w}s~CI(Rka21iXtGFp`nE5;M_?RA~Jq3OV9~8k3=H6m{SjTasl5^`wRZI zxw=c;uD27}elB~{2b9|#-+;(MWM7WyXOV!H5ks4)H0B4jhltoi?c0jJ)M4$vf_1!Y zrV7xm?2D=x{Sn$n!I at O%=TzW#qQTwFX)p- at YM}N6D?lfsW_Lr(vpl)@-l`y?(|z+> zT0}=bOOP5eHUAX@=xfPgd%@%r5C`lc at P#%fVjpqUQf%N9p1Qux<8teYjD_}jkN z+M<{sc$r#>=5*I(Yr6=g*Q(nDX z7}3RA#lobffw$A;)jpbb_VzXppn#^78!Ic(S*(c2QuXp_Q}Yd*-3}KS#UFfvcDcrO z9oYvJ`|leK9Q;w at Du^ryzfFe-ye9M{iu*u2caw(AhVVZ-=6|ykUckAfvqMSc_1zN< z?Ip#(eL8uU@*55Pe^cszJp0b40j!Pt%+r at i3Tz}%y$p#8&&VI&eKIEMJR^A=6&n*1 z6U&wXRKNXvn3J<}J&Bt9py#$Dq2&j8P{nc7!tr(s8X%B^HdmX--Vc#`A6d|Y;cVD< z-wtg#Jh11?lx8LPArX50L#nZyXI);4$+OjAT_->N-QXuOPH3rFi&CspF1+>a_Nru$ zR=l$%SDAOXj!l{>Spl#IBwrTZvK1P~Vpa+UH at X>Q&o6;L8A;o7v%qDD&r&A{30WuY z=9v%Wd{h{OF4D}^WJZjI$pp}tD_QOXM?L>2r*77LQX&{yrEI0SA--dS-CswzB5Zb89mu$?`L-EDOw)q zPA0-g4 at H;v80|lP8aJ%WZFSO3aW-b$3c&ej!~)U6aevSX3Tp0B1%p;q7N?}uA*<5| zXM4pZDIUrzFu(Y?TmFIP9MWG^20!9b+KEs;u**{EY;_10o*{%oF2714Z29S8>cM!UPK3nJ z5OoR3 at T=jz({&cIv`H~SwjF^>H@?2rPT(|umhXz`F`zL24c+m|r2&=LV^wP9=cq-^Cxq~JGl)ktLWQ}4fhwAJOTuYnjWWNA?decVg ze$S$XW9X6uUIKo=%Ry;t!JGmHOo{=r*|~R~IcKY)i=!cc-jAM;#NeXl5D(}K#ooAg z=QX^u%F2B2|C&u~qcJsLMedA1-PUl->AAj|$v6W2g8+h3heWsIr`RgRcK}g|u9G!d zkX#N0oJ&A(HMpEk;Emi#y1f2z_;z at 09{5Yj3yRiq}6>GAwwYr03MguA^7 zm1)H|3i7GEpN9*jjTJ3)ps>YN>h2EWJzps4N=Zyj z67t^D>I{D~1aER9i7z0D$}tG5#Ua=p%#C9e#R|Z_=T=TBN3>3(&P=QLy8ICKRcA3P ztiR-86F2Vg4U$zc{-$KxTqlOkQ1nf2LEMoU&Ij*j*~PNskcK5fqMUqEo%c2nTKfHx zy>TK*`;qutSH~)cyChltMiAlAup?h-d2r4bb#bzOM at ym&yD-_^%Q6emhhim&D{_-x za0#}$wfvkc+x{cFNG|DIeP`y2wPzhPXw8wJFNyP)BhCmuJjdb3!!GYrbo!I8AKZ9? z>n^t`XF0qt6dYr2W1U=c-?RsT`O8kaR!|Bn)E?iWPImVq)8lb1SBlB;4j>Sdeah5` zD1AMO$08D9AZ5un1;S?-2#m6|XTMww$l-<$?@#&jUjpahbWuZE3bEIn%z6p zlf{7{=xh%J`$1TB%PolgU8oy=uSCLnKJQii(b9r|{?~D<)RJ^O4W-zb*zYCR#N_~r z24=k27ha1Tf-;PO(tbE0hLyh_Le|o?CbcnY at B}j^xPi8Ifgu(tX7Vi^uH?g at Yr3&@ z*%=Nh67ln4#UBfYdpLcPi`t8zYGo44TdvKZ1kCl at gYAu0u2BQ5xl?ao!dZnU*kxHo zFCSNe at m@cEXjsgO^sDp-8AU9qA2lt0M zNSJ?m9lV3IN1mTDsooWdUrrf}h<-ccY_Tet>DrFHTx>pi2#s z)?j3}V{nmIV;{31K{7xs%e!#8SD#ORV+SYm(hBa5ZHx>EO)3j#JPrnbeEgA(s%(41 z_@$$$LP*z5|0{Co{^|&tX*2tdz^l>2YAF72wti?Fr<+NxRpVcY7!kRn0H)sfjlk-}_~s zl+bUb9bYjMxu}x*Xo at k-*fAqg{;1Fy(;1gdFPxSHrR9+&Fpv!EdG|HzS5 at OC*DJ+D z!I%CG2uj0BzihZ5znsC&WPQtxulfwx7vHC=At3Ar9%KqZ5{Ia>uO7~sHFK92Z)Xcy zoOsn(K3x6KUon~zSf8FdTYpc_o at xGqWc8(Z{qx?=AxqsPu at 0l8(3yt!#sb+T%LD$_ zG>s#B_jzaXB!a?t=pU;!6WzF=AcELr;J8{`#1sLXO~tLj0Y1p<3*@6*S;BrG$Oj;E|Yx_Xg+VdNP at DT2#qZ-wXu>H6-_0(uZI)e^y*}& zzXE;2#pQT^M$nlm7|<9x5VNFMhLr&8drmM={47|MaIF6frHmD*bymX^eBWx4 z5z)9~Bp!wxh8Wa<)*DkqTx8U;I243|Bsyhz8ELx<@LG+T at S(4f-86&c9)v%mWx9sg zHDVo!EY>T-YHPq}bZ%~`org-`5wU at CPSUy+Dh(EYC3j=)mYvfsF^`LYR}WZ*|Vj^oSY+M*BVPf(+i)A39}iAOOR;miTJ zD^3q;4nz#M%Zld(ish{By{aQxC1WOh`~3u()r>O$c? z7r9F<)~U5u7fvD9%9oR|+e!amdxae5tZuof=M`T}FxJzwS{DG3{l+KkgbS&P3xW^1 zDQ9s at PSH+Gcc?v{&8scQ)E2o7R9kHeN?eBGd?0EUXpVKZLQYL z7{>GWy?1^rVi`rn*j)y6vTowhu?@ZgwZ8V}o}RJcC6!|Kzb^J9vgGc=BrTf8S5XZ5 zkg3%9v-HUvNABLQJ-~$PtYMFfwB{EhMkn%9B!_*_^LxG+Yiq&L_?5jd-HG);n-3c) zp=uRqA6$rN_dH$*GKbx#zSa_z#>h*ur}vfH^M=G>)duHBD`&xmPjT7&)hzMeT}*$u zvfb at k_oG+eeHwe zmFK#8M->J^xpO9yMTP793999`t|f%S<0s#)JQ#%6r=@3nokK^;rakS8%I(E*Ly6*P z$p#yB_qRblxnv9N{O*{D at UIiZxDba|p~1d6tnlwNN6J*y?a>k?N*#6}@n~09Jib`W z>;2tg_#;j$1Yzc at PFE6SXP{aHHCsu6o9}a&d#>avT>gqs|Uq z5Z}ys^hxr&$!tH8nW}d9d_pIrKpDDjVR>@Y)bEa$G%BX{Mh|r!S0x!5f0S at Nuz=d8 z$!j6!%U1NSh-Z9HKoLM;l50n-p|Xbh!jvBPTI*@I-KjQuP_R-=mLB9n_R~ET#ni5% z`>>Hbt#vHCg3sVy7-CWMN2b*X$&pf^3A5p5<BP469Il z?vH17DiB4)+YkWThgqm=sQBSRT!c=5fQ&Sew!nM~T7uj%MTx;7Z<>Q2-%~?j)M`sP zWZ?~;#Ay%fWA-)xHG zvu5skD(|ATKngT?-5ViBv-an~;C9lA1~WN7^RslS#br#I<~Ao9*au0kKCUQrH?_+3 zCX!5JvXS6XdH at cuk2Ftjf}ejo>OOyMabsk_u!Ogt3$sZ_&HQ+XNgm*SP}~?&J^A@* z at rZp_*(Kk3NFg}H+d=y^BqB)upz^EC_LGV8eQuInk|dmY5<7_cG$MxA=8ZMg0viYw zbhCaF^+d5bQ{w}yulG2gthamMazGXR{mlS0e5j at +B3|t2S*$)$PNRy~?0LOO at 4{7m zzFtsVr+1WrhP!7b`h=0*n}bCY17`Fg+5x=`wO48Jd#FQt?vI&E1^4r;<5pnV`#xA) zFio at srKbZv1V7a=)d)v&hz=MvB!5-E;Hxyr6(+)9;u%EG>5X2ge@#~Q3M8a6c=g(K zs`nvZ32E9(pB#iK9T*rr-1_SYCu0=8ch%zff at nXF#vRY^(dZXzkEd5v1;GdT)QUuwf$1vk9W<)atwvZAiXVmYe4v zt|v_e4k at IC&=Ce-9?{jJIoDle4(^v)i0w8XXznx-C4|iE&$0fpbvy2LjtOhTS$;0| z;<39QFCeA>r_5gki^W-x*fe7j19-T;1DG@^wAqj)t<$#00Va{7=d~Sw&`Hn5=+v8& z5cRmqW+}9D!en98ULE+Undw+zrqSkop5mw9>89h!U05c}A4P0j_N0tUafkAvi}E9J z{ZxkFoJ0=VTjxCf$mqt|ABFZ$c#AaQ3^UogN{4M9bP{&Mq1mPStNad^c~=B@%^m7! z;tU=Emx=w(;7>2TV@)roqM8ra)7Keolv!)9C0q2KCOkkkfGYxRS0;2*7R$&e6Z3vd zJfj8he at y-2faSjH@xhQj at _C$O9BeUMgn-XlXg;*@Q(lX^$36vbr|8YY(L~ikZYfUJ z=#G2s8TTJj^%H|NUh;R|UDAg4Z5CeGGTzgrIqria69Qf|H_xh%ot`!MGbRv1Ky zsI0QKY#xJRFS7nyn}A-zc&Cv6d#ZkcMFxz`7#(!(W#b at 1-}_8N_=j at r-(W4{@wb4g z8yzEzQ(P$#05?uPw&=`=HK!tF&O2$Q3v4{Nr>Y|f-DB`QInC3M)$$hMx+G8pnh79~ILW zvRr5gPg7{4jIgB6F{o?rzKI;cYTX~E$VX^ ze+Hn#6mr+c3f13vnuvQ-RQHUHZnQ$Fyul)kA^yJa*Ujgzmm;Kg?G{ETh&49spYnR# z2(8Qo`;ad00Z5H=wEK42SVE;tWhO3mE>y3dy83p6ndBGpYgYesoK7#O{Xopv{YVVK z$LkZnAi(gQ?8}4(Vt4#}IaDS%ME%}o#|w!@{rFbKhtg;YKS6EFex7+2EB7IGsy&dm zgLkRO&SJhn(^h|{)&HFjy{CJ!Sr;Fm8c{!}a5c|m7 z*awg92$*Zf#&?J-Kaz$RHjHB)*^w|HWJM$V1=I97$f)aNr)3T(q(0{oZ!kvL zfVOt*QSizraBkk~>9R5MQ=GN4B|6y-mo`JzB}$7|4^mIlj7!cH;@oLev2;7u z{2EW;$=9VYX4#v{@XEVwa)iGgp;tayhZ{4aT?e-kJU)K%If?S{n4d*}M1k}2Vnp{R zcVr`dwYtVuj2#`DMjp>R)HewvjQ34 zhJ-=dt3zFHDKJElJ>BO5=-_V+q|3xJr^e4`FgylBQ1g3DI9g2{CU&J(rlwvzd}Xm; z5uZXkZP}aX)d{|jbfc-7r?F4po9+@(`S|F8xqNZ at aFOyXvgl;<3YPc!!MiJY at mlRG z;8S#0ft at U`aRuJ9YRVS!+X-ie6B@{TGzA`dQ(i~`HkzRL*lWx#w zc6CEB(xK9yb5B>FZss)I9?OAgT_lMDcrEiZuAbAhe2R4<>%9vWS1^X)Hug~)dq?b9MO6bEd^BMgMFIXum)Y7SyRqYa z^x2yc(+W2cbjxNY&M|n%T?V%G)>_G at NWIntyy-w~dJA8%yPS6N zr-U-eAr-e=C6e2G2cX*yT+FE at +FSlc41TM+RBx17+`-!p`SXQat;gq#l^T;&GBW)D zcXMwL^?AgV()*bHV4>oRy&ZEax3_BmLS=yfHaraD?960(x-^3jyV8-Cs<%Suj7(dxf|_G(^=g0cHMcYzLzqR@;? z*rw==k at lv{lbzg=fRm2BP^^P90x)kfP1s_LkzoG(rN}W+`0!F_PmfWvhg%sq(?z;T z=w(;zwsnxacMM&XF7j^c9QZLpl>-m_H0kbA!#i##YUrfV$OPzLmqt_MT4Sq at y31sx zb2Do5Zezd9ycH2`dtpo&DgS7GKIF%X&kFugi(@NY+x#I)iBTvqzQNF=Qv=icUvKY7 zMG&XU0t_vc{oV<@4AI;Wi_Dsxx5$X)V*B#6bOvAQ$M8&hEA%paBkwXsu at NWNq42Xq zc31y$Y>#VncH7-}E1Bf-!c2H8Pt-#kIv8+zl`*u(nd#XNxrE^k$)^*3Tsai)!ic}> zYJZ#QcCsjE`}UFPd$a;ma|i4_)D^)!x;D2>7Rs3U^Uj|dnrTlKiAZ&uc*NAJ0Ucy-VT4 z54jwac87Y_ms?mipznY^51BGmrNpI!ZfRpe7ekykj%1SGFg|Q8A;O!^$%!vUxukCK zSL17p_Z(6*2kixWy?b#G&Vo1jEp*mV(%I=K7FuJtIO4}!=2d{Ty z{%QHrMEhvMIPwM4!#8$Zjzv-Vm9mZA+wr$R+!O;&h2({iL0P<256n>)LcKJDxfprY z&D1&_T;RT5(OU^$CSt*B^~his;;gWyxb~*Om;($(#Wf9%Q%;%W7VLM^3sxX?$Us at i z=Fa*VodNC|(cL|!27vj(JO#H;ZOW#H^1MKQosgc6p-|72k#qQWFZDh0SM5;z7dS^T zk>%Xvmae24nV4OQHn%6xv1df`h2*28zm6vtKWE3!gV4uPDQROWkF9x`f;%g^uTmP4 zu|R&U)Q`}sGihl>MW+MhzFaCE@(PaGWj;z9 at esptzN|AJird`&z$#M$e4JT`lYtkj zu}YW-Q}%7 at kB4>$Qn5IqO$6b5+q!o-NpJrOlR%z^%IBwjTcildNFwTW?9xG!6J53R zzL=CjTui2cK)m_!HbU;}iVNKeIBzgqJxYJAj$6#G`XI z*W#`@4~Pl#)ikWmZb4_pN~Vn(wFNu)eK~tX_JGp0gp?eXr&ZJXrBQO-TR2YBP+TvY z7Z`R%DKhVv-6fsj+C0BtH3VmV))U^r3hDA1jy3mwM#WeV-;*)D at xDJ9RTcbwM?k)- z_8W{Qu`E_SeA=8x&|qYy)cmt%BGsU{L5mzlvE|EFuAM|0%=rSe1p-wy%!C^dKeKC? z-f{-1w|XLx9=QZgQK0-6DGOQ^_KWpvl&$Xhf?)bYyQAohBj8sPgIYtS_e21BWJBr` zav~be6_t%kO0*?yk;RWMexyU%BW6Xs8Sr+?i^fBVL?e1NppOpXQkp36f-B56vcktR zE~-x!$PjP@#VdOU`R-y9 at pxPcYn)T^?hp0mp@`PSlgoL4F;_N7R{Jd6yVjqDukwlcmpfQ~_;)JTI;nXQ&Sw zvE^KCZS#pK^J&6`K4jtgNDcLGP`s?xCVD`eS4$cd^lgIZb;1PkC)mAYVa}#vj}TLq zi(tK4drFZ#Jh#L~ zt&1yxM5r!gVY@~}(HQ5}pr3V;b@<5$!&j at To+rfOUO1obdNf~dr_w)s3m&{+E|SWyt3-2mKOzUO>!IAGh%_sG|W>2{yZIk}^-@>tJ<9z89!ww!}<@EGnd zHUT1Eq<;32TGjaQqg}42w|%d^omk7FJfsx+IU?H}JZz6aRcmt<96g70L8dFay?_d2 z=wx}3v%eUnCD%P at 59ehrD$kG?PAu~?g9MLEmx1oC2V0Ax1^MMW)SgSnH$jfU4C$jd z=m(~CG)*k`+QdR3?LQYzA}x%Mx$DVj;Gdnhw_(r#SSdI6`Jx1!qBSu}obd>`k2RxvFU_!<+C-js z&wGXW7yiugDo=lou&~y!s at j~nLEl=~GVc(E{(z69ejo1f%;D|y#Fw?oh_!}FNB~f$ zygO0Wxw^7;305-e%$P$>MBSm^CsSk3A)15e4H0FNpZ&M-iFwq!;KF?0m`~aOs`8Ig z)p_~C at h$hv%xde^oSZS=2I-oFrfD-5NYH^$lI8B}I(#4AA1ld!oy~Dh#fcsaTQ at mc z&+MzRr!^?l7Y;GIV+AHst2+&NV=vpVtOuLIB=B1+n#;0jO1}YxX;TbBTigQuTD{0wI7ur3c z0e;bMF at Jh-MniT4a=4$S?=bsW20JWrm*0|t8IGqsy)iwjVuRTcr>isOJyt?mv^6DO z%=gfzSAkMBQEVfJ%Re(73Zy3GJuey|!Wq#=T}nR?0h)6sGU&~!K4ZOmw4u#NlK7F^ zr_DEw$e>B9uO9~R?guX0=xg{gMNqb8V)x6FNfZIJ1D)wA-N0V}IVii@ zB`Fw0vB$NquD5U0PBQKFvA=|o_pw_e0AVn7{GLsgYJ1~iBnkanOx4|e`%3JcY;8=6 z_<8uCQ32`p71RqiNcPv`I%Vt+tK?TYmc~M2&;4o9NQI2|GoqYH)Xumg!q*SOw2__m z4$GmRl0RAk_;L`fEh25FBf*5p#s!lpp7gizG`GqtqINkV&OfJtHFN}P)Un3X*Q;)} zGjT3nhR at _83j(N7`D86VrT7rYEt at GN)6{mAO5`X~eA21ua{7Fdi|ye>2?*8PvKE-u zuN+Mq+I#y at H&x?DR1x2r0PEBElmN*seF% z=Kac{txHp*xGKa?gLzYf#VVFS?+!xteY|(rp2|Gj$}p|r__B**Z#fOw?7Cti2%G3K zpoip+f)CdBtUTC=Mq3*iGrib3$o={QE26lyVLuY{T66p4^OnnS&8liHv>Tqfpk=`w0I2J;OpQm+Z)}Ugxj2Ob=Zv zh3i`7WCzMv0!8rFw at I6G(}m?77WR|9d6J5**#T}?X|5*n3_hM(wZYCNq8fyR7^Tp= z`+mKlpDE}^q;d^jP~0>nKSTjy8GEt!9UsgeaLrj*#J2rNHV<@4a at njeuY8L36jY;T zq`)H4?o_uokjPQd+lrGoSud{O)ACsGhvpA++N?}3ANG2^Zb91?F^A8X^3+j<)mJU4cP at o=?Ln6!k=0sF*V5ZpF>Kh~=v~*K zJwR=d-;R+6utavTNc_h=jUo>t-<}Gy%B14j5$vKDvIMR7qL^$1`K~m{hTpVNFQ>#G zyih3G()vavztTdjPkbA)YUYa5^Yd%)N3olv=sa3TM<6XSiZ5U;oHFOYI=^aEv=V-5 z?<}Qv{Ns6&&ZHi>sC$JvAdIvc2BRU!IrGUlvg2m$uk{eEcT~`1m3(E@=tk-!6klp5Sfig=Jb9&IH1dS=v^% zSk{`ab+ibQ6B)Rr_~mGUu6$S!5RsIj6D#eq6}7n98kg8MXeoFg35<*RliV$Z4gl<~PnF!X zVqp1x at E!Wi&0zZN>Dsy968dhbC9f4M$_Zl}38pb3@)9xHYh^%7UG!_B{BF)zOGfz= z9O1qa at Qux}-$z?c(Gw at WJ4`2qgfA`BU+gwkn)Tk7?TT)p4>scQ?4mz#YIPp)Q`?Jk zdfV at w#d)QsZNg|AYYq45A3k1T)tvv;%H}tfgI38oma_H^E$_C4RZI+jW(23OqSJ|< zHg|0ax;+_bq2hdPq>4h4x6WS2se0nNXw=geka{Vg%kkbW1}}>{A>u{h?*r|UG{Bf% zGRxqDniP-juj`NP@@!vyBK5zGashvfn|yRHMDZOP7f28(Co7EV<;Bie_y#GxM(aA-%3yl%5eJnV%iF@*M|MCLQ~BM>hmud$V%#S~>cc!SWr6MR zPy*jk)|%N7X at cHngNEEPcx%sH?o-(8p1|swRx-KuA{6ZV&>$)VPfuN zYQf>{;QY5Ago**YolVT_EZpf$Ev#%D#TkxTIvD6}%*7eB`IWhponq z-rhai%uLvv0U+^E%vZP!;)>i&|23PFf&On2cRO(gslO_u z*HKoZmvM5npy%V at W;f&F<)h~l;NTJD5f&6+qt`TXr+;JONY5ik&%?!a_lHM>n_GmB zoBkg!28oAvQ(~^>mLeLma{s9F?muw`Yj<~N5l&7oFE0)+UJfT$D^6}su!$dx^hqzMPG#g_o17og2N3 zCa>6ECI6e~-?jd`yoIcZyM at FZ4d$`*FZMT at 4aa!10I9NEk zyWKJ4{_o7p%|tAnTpdi at C2Sl_tSmU49j(MT|2^|RuHWC+`py=2w&eVmFaNpf|Js%R zS0?_={r^h%zX$zO$#22^gX<5j-y-l^;y>>CgX^~l{FeBSyZ+$%EdswK{^PDcxPFVk zZ;Ai7>kqEqBJf+{KkoX2>$eE}miUjm{^0s80>35xa5(;QB2Bza{?Tu0Obbi@h1#kGuZh z`Yi&#CH~{CKe&F2z;B8Fxa$wD-y-l^;y>>CgX^~l{FeBSyZ+$%EdswK{*Uf@`0tS( z7LIqrJG}13am;q*e80$t>Me6(Y_h82TXo9F+zh_2ay+|n(!3cqKe&o36GF~G zMaJ}cSO*yT=l@>-=>Zo04T9D!qg4>%VwwtVNC%>r{tsnPpg0aLN{2D at o^#KA&%M)P z^v-A&y>M3V^PKnm4!kk;)Y!!fBfuTt2XMDATbyt2$M%8eu3f!Ot+qxkKLwC)7i0Uu zrw0e3OWwUH?Gj`Eg4=6HjQLA0l_R4p6JD5r$za;C2Sj(-_a}z at vrP;(Qz! z&E==^_aEG2ef=ka4WfX)F_=(CFu;MO#me&1V&&n$V1M!3_pi>!^4qhSbRWs&AzqbU o?t)>@#zC|jH-TPYa_@@%2D-C3|D#cqjQ{`u07*qoM6N<$f+;DDivR!s diff --git a/src/public/images/icon_migrate.png b/src/public/images/icon_migrate.png deleted file mode 100644 index 05681556a7d0050cfc8585289796ac7a24380f16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 354 zcmeAS at N?(olHy`uVBq!ia0vp^{6Ngj!3HE3xL=O}QY^(zo*^7SP{WbZ0pxQQctjR6 zFmQbUVMeDlCNqG7G9|7NCBgY=CFO}lsSJ)O`AMk?Zka`?<@rU~#R|^B#xt(DF$2|! zfYdn`r6!hS=I1GdWag$anCYA88(3&>pSl1jzsJ+XF+^ix??pqtCIgAKhufQ?^c$Jk z6+X&sdU3+H;L2=+S51 at U4jo~(c=0N&bHT+wd=4gUi{dXWefxQ7Js0oCB=cl;b_<575o$U(${TusNATmJ40nBW6SZM$#*+mchA at Sq_^Ng^X{z&SWm3C z-Q=^s{PlJX12^NjB0Aw}y5;)}8g{<;zopr05?^MJ^%m! diff --git a/src/public/images/icon_move.png b/src/public/images/icon_move.png index 20d429da54ed429bf5b5763a7ff473e5f601ae27..00827c5a405c94d88f93bb8e7febeb35a2a6e2e3 100644 GIT binary patch delta 541 zcmV+&0^_L6IRSf7?k! zK~#9!%#^=N!$1_rb4_ePDy at wLaS#y&!NE}wDmW;Jh_tTaU*O{4A`UM86%OJg6l?`S zR|OXl7sbI at DAcx5hYFfY&iC$e*XwVQ4!-b``;|}L_r1Fi#+cCy3mH8!tJ5SQ#B^Qv z+%(NpC=?n@=Sozc&!vZO&95Sge^{2ayna at R`o8~`&m^tCO6$X$?=d5NT5f`6^5vQ| zz0*pa0QtPRmVHH-12PkhGOg at t`~t&oi3uv|K}2|=t(+7GJkKjY-bQp7f%3DZ*yh0SIS&F|WtZ`-DrBV><6f>J;K{aadlMS5 zHoM${9Nf{Msz`d+o2-JIb2^BWRsw%-$c(h8*dC0Fd)lA+1jwv}z(=S&w7k6S94w9- zc4GIDQA(@Op9Z&sNR7IGSr<^uah$7m5FJFioc at 0BBzQQej><{P)7`;L+-yPnyB$Ox f+W+;>{t;jRmp2R?_PFvI00000NkvXXu0mjf4)*&F delta 540 zcmV+%0^|L;1h at ntiBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;Ef7(ez zK~#9!V*LOAKLafRBR)x>jQh41I1ZMwSWmnaBzbd|Nj1G`1b1` zL(a~342;~u89+-W;PVMK!1U?Uf2Vo>QNceTegu;I^XDHJfBEs3A#>Xspd~_Cq*}rV zGSOqnbD|V;u`)8u@)c$H_vLMmxVU&F$PENj5y%3U`A>=VvLGiD!!%zp2G-x7=L-r7 zrUHfj612d6<|C4l7!xp-_NU4H1LhGPAon{y3&3Id=l5TdEr0 at 0s``#ke=XR8- at pD5 zZMXm at GsBV?8HNiNF6<;Gqe3kp&Iepm7r|6?{`~nJ1_lQ1 z*d%qEZ=e{yF;kJ@)`jES?d|PzfkLl=_$$Fk24Z<2<^y78WS;>woz|?s2Ig=A4d0fd z%y8=>rs2etMVvs)4+>r+ax4QXhg7OA|JSX*`v2L7U;hssI$eI3Wud at kBnzCnC_K_yvgHA_ogK>I0A^98eekg5tlls&L4!(P&;L e)7k=n00RIclt-#p*McGd00003S9EaB%@h)nuf^3#cAju{n5V9sv3t|*vRj^u%)+JdWCCSFkY64mhltU_@ z))uu`kE*Ds#RI&mfY6Fs6%{SkquQcUtrfMGM_o67fIfZfGavjm^C6i`-v1o${JzeJ zkrBa4(j9R}&LIf*Ae(E*;_hT}x6-)VY23}!dv(XTx;b3kZ0_1D?&?hLN-}rZ&Rv|r z)mpg=EO&kych1sK%W!8++!<4Sm9BPYRL%Cd^y0HMg~MkTRnI6qVcvM`$TFN-d!%xS zuwt=)d9Lr|{K~TIA%_-uAI$PPu+U?CUitn^Y+r_8Z#ud!U9cz3y=1}Q;`wgcrKP)5 zT~!%-74wT_b9M=57Wvq>W9(Kp%jN;b0++-MJ at xB2jziis0oQG!b_^O$vLyel3bk8E zT at uBjaa4lAtj6vhD8*2NUX4u%)Jn9LFe=fYNnxnyl+iJ|lq8)}kA;RftL%i`WHC`J ziP}v at vz4%`F;Y**Q3T(24C5Huh_Fd&Y?$K@)Ujq5%}}UZEEVY_0diCxB$g>;N=1+m zjV4)i6lq3f3REVM at EL#E+7LyFiaQJ1!MpShUtR3fD8b^FkMg=kO3eVrVHu< zG5`d_bU|G}27q9gE~pF001yn*1$6-#0D at tdkuGgzw_JeTff%dym7tmm!Gd){prf(OBa8MvL2 zf3b4K^1RPKTlVSFC5v-&vKM`lwJH=R%#>uiZN_xg%1pD+W|J}L zBST_BJf+vgkyAgMGCB5xN$*db at ZR{C=y7AmygOPO6*+38W<K`50FVExL73g_wya%eQuk zr;Z)kw?h!Y!;bB`AVU$Mhbt;8lsK-8 z^zP>6e5(3%HBm!E4(Z|D{oXM;OMR-Szr=G1#bGVdE;0lB{HK{<$Kk$VdP)|rb za887Rl#re{B at s$oXbq;qF2)Ej{^~BU-rc-28(Tn at NXSQNXlsI{hq+K;BbHwv)+1FRPC)gea+SAe-M z0jUQ|E5Vt{iElog3~M8|dXP>=5RU~=tzDpa&_aHG%Cajv1IBN!3fB~v25b{h z=P(E~b=nviO5nx1KHgzm0}4aw!MJRwrJ{Kk`E~KOJ z5=f}l+dR(`7>oLLi{++UeAcN(`F!4WW;eMrJ}2E>w^1xNc%C;A&BU c at J@gM08VUk9{_Eko&W#<07*qoM6N<$f^r_c>;M1& diff --git a/src/public/images/icon_poweroff_11px.png b/src/public/images/icon_poweroff_11px.png index b0e0d7af80bd1205a2809be0bd3438968bd42b6e..34943709070f17f429ae1be8218feaeadb35eaaf 100644 GIT binary patch delta 417 zcmV;S0bc%w1mFXZNq>S#L_t(|+ANVjOPf&?#-DpHNh%~564AVkP_(@L1f3E)C}^TX zaIlNu;?Uq~+}fc-Gj!;8PzOJNQ>>KGX7d{uiQtq(s<;U0d+$A`=Y8XahvzxJbKw3{ zgS8I;7z!$6a7&5?paKO9C7(;<2QzMzVrXMDj4?HBbYHwF3V*WIsx)*UYHA&GUDMh? zllP(b)FDq02l55Xe{Cl|WgbMnBOYq!sO6oY2(4oMahp$*^sR zQ2ca&N&gy?@hBOdjE6}bb7#HCHMF%Z5FuS&#OU-GF0!~gI*gkbpPnS#*+{qxw6k_7 zLUcdIY<&xn?0 at pN`wLcBuD+RY8#zQWXZDK)xuAcad0j?+bqz?R at H`k`Zs#NB8ryj4 z_3-%TH$2ms>VSQ={{jpEELPLI-~y2#00000 LNkvXXu0mjfn;pc> delta 455 zcmV;&0XY8P1BL{UNq?wGL_t(|+ANUGYZE~j#(y)r*%&u1AxWc>7W|}Qi`IipFM1Lc z5l;?SDnbaobZfNAOE!wAKhA z*d6o;Hh-YhxN&Tu(GhF2wYux(wq|DMaH=&#(P!e}6T+vDAPh;mT{bs9V>(VtDdbA| z;34ExjmhRJ9H^n=5md at dJYL1E*Qr=;eA2X7F6_&bzkHQ6iby_mkbaTm(>f~X;$69h z<<=+d;3|pn7Jtq$eESNu)1%+KkNVwZ_~td<-06&4xtV$NCo{Px=TY$x)qeLMo|-_MG0xDr^WX(Rkr`KD1~VIopSl1jf8Eo?F+^ix>%_CYhYSQ-_jd~F*e;0K z#-Q>m!i90+q?kh07B(kYg>4LcuhkS*%ksDP3fec?oMb=!@7YgV=hb^k;wxYF$j!W2 zn##%Y%I-tpqyvj2HpZEEBs4IH?MaJ0=h at 6M&)<34>Hm!kp;tZTe`Y9{?YnsM%a*$j zf0QhIn<%#@PyYO-2d1+&dL(?%N_!UaeqPM>kM9y2B$9b`*12}9DArr{tvl(8mwt%O&g2H=46#xHHTVQw>}ydnR2`)W&=+6;b!QIlVAJH~)uC&kFmw+% z(WQ+Es^7q at 9mKjgu)Okx*n2y&O2}P^lRjU-#(qP4{z&Dc+C*Ok`c1?a+SP at pmk>iR o1!G+qKK~b8L$Um3YX1o^018T+8u#h!jQ{`u07*qoM6N<$f^`*Y`v3p{ delta 235 zcmV#X*=6tN;oaeP+7?sa*^R zFbjyU0P))YTT-9F6=P9|43+?K9}`fK6cEn@>f8+!a6?kC6N;Y$aSRZ9GXaTUAT|cc zB5MG$J%Cg$5O0ENmIWy`11ScY?uMkH0?NJ(q}D+dbAc3pgJg1ofErYx><*|OKpH^) zI19w5K#Ctj75D-1WT2uQQ2s8M2B_k-jKDB81Tu=Cp1=m&piYB?Gblu$9 at PQjG;9jN l09#CfVh|LQ=;8nY1^^`sfS#{)l%W6s002ovPDHLkV1hQFT+aXi diff --git a/src/public/images/icon_remove.png b/src/public/images/icon_remove.png index cf3cdf4211bbc410986c4f007c0fa7ee920d49ca..44c4210a85ae5e7f4f4123c76d5f5b7655d68f14 100644 GIT binary patch delta 1047 zcmV+y1nB#q2(JhsiBL{Q4GJ0x0000DNk~Le0000K0000M2nGNE0Kh at K29Y5sf6+-q zK~#9!td&b^6Hyd^&pe!V@)*;krHL)n7A%5A3Q|G4bESf4Y&Qxnx=CZyg$nhtu?Bps zgrcDS1?$41pn|mts9Y4Eh?SbHt$R_Gj}}aW~TT;Hx8WKn>*)z_uTUu!Eqe; zpO5gT#S_O*1e!vjeS#qD5=F5Of5$Fb$HOy>v6nbLUCn0iU%zp^_%EPv{_MHkk}M4e z0)hRi>H~kk4?drdzbu!_P%4$6f at 85*oUkqX_T{Tr9?@AIK>7hDo*g-JM3&{t%`Gkc z(O3+E!5}D#0%#!@n*05JzK&;aHY%0AojZ2qo=s1`@t_`1IDPWeUfggge;f&SH at 8Ia zwE&FSz|hAu+O~sNX25L5H<0x%rHS;8x;e6=+xCvDUnF5Sv58`#>IOQ!wIg-1^-tJ1BgK^0$TZeVY-Cn zMAxQBr&6h(0^n0sfABS`eC|D|V=33)Hk31s*dQ?^IqVm!gb?DgG z0V5+L5N>J$N_Ih{@)Kcv{0{W at _rrtx4`6k58H$AheE#}na%N`c8oDLROAjYjw6)d3 z)3#!gHt9<`Jbv^T+S=POB}8g7yiy6O1vQwsHv!pfmRHWFe}zx;OS*nzc6Rm^g+p?S zn$6G8FJMEkjHUA{Iwra zfD{xBp|PHxZJs at t9^0|xwqO%zBLzI*bG2H1TPPG}=H})euB at zlC6A%h=$3zMux{n3 zD1H>5dx-45x7^KTloDl(yXO4$6X04axggnVbFLMZE4F9VPZs^}kJNVo1_0&6`=QI< Rtu+7u002ovPDHLkV1m&`@MQo1 delta 1032 zcmV+j1o!)|2%rcdiBL{Q4GJ0x0000DNk~Le0000J0000M2nGNE03w~Ie~}?5f5J&b zK~#9!tdz at Z8&?#E&*(WblE#{`Mz$k4cHG2?;|6QdLTE{CB?L_9rVG)6slhwDc+)?i z(9%L%C=dkf~Mc)J^2v!0&b z4{Egbg$G&%|OWTu&6CIeKq-y}mf6;q`h+(Ji4Z*pXPQ~P?_7Xe=HgSs0!;73qE|hW3+oZf=g001aVi0Y5#GpkaR*DFe;$S^E%#CnX4jlp1lA3T1t4c~ru8~*q!4Fl(U zA(cuI)fgCIO0`^+f2E^!8c?(#M7e+^}- at KPhCTUI6{ylt7y6x at lWFeljQmORvCg^${ zmY0`nE6YnCmt|?uaaUW1*4DM!(Xk|ZX@lIA%B at 8>YYGpH@&)bTk4vJ!w#`F+?%1{le%Vu-1xUf)K`*r2+@!|d* zXI;^;#;X?{>&M`Q2!yz+LL~ap#Y>kGv3Q&hw+Wt#QZx>pAIjTXTaRBHJo}+qDL-(0 zCC6$gpSl1jzr)kTF+^kH(n-5{4><_1rmKEu>|pE2 zY_RLdVfRo-aeBkX!C~O*;KRGcfmv*$;(-UM4^)2tac=VUi#l6vez0rRr`H?}?{{8p z%MgF>+_0|bqiy(h>GM(N#0q)ed}R+5U`ece9y7V+^v{IGhcz+WzgIt&+HjcR at Wmq) z903_!mAB8xHrROcu6pXRbdlurNq?A0L_t(|+G1cp1xi3{j3&nL|Nnn5Mg|5zd=7~72q|_0;zuBH zAf67yGl19$n__<;{svWujDG at gFA%dKEA|B9Cs-82a4xztjDYw$RB{~pSl1j|HIS8F+^ix?<7ON!wv$j^L4pYq|S(L zTd=6)`Lt8+A0!J>3t7Cow|z35ppmiDp{lEc`@$|yw}{s_mnv*aQdRtU_FcyP`9GC& z5BZ(j$#LPk?e9~Ya`u_~PCg>>+=_L>wPTAk42~%%g at n3>hIViqlVAuD&Cb1(KWAI6 zbgyBHKtQMq%X`~<)h;YR1%}5Ktm+O4U**NoD50##;==O$4v&xT^3UYnNkvQn*Gp{*WCE|3cFTX`KKTDt9_x#m{lG9_ at O1TaS?83{1OTY3 Bp<)04 diff --git a/src/public/images/icon_selection_add.gif b/src/public/images/icon_selection_add.gif deleted file mode 100644 index fc41da2c0ce2fc85d3a8c7282edf0f33bdaa093a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13127 zcmeI3X?PPw7{?a`!4?k$4^VNt^|r}oH%Z$pNh+q4f(C(B!Fq0YC+V7Gcir8Zv|d#} z1;zWs`@;LaMaA2SH>h}m_lcr{2YAHUCM1Q&2cP!?-`@F36sxXUa;7IBYvfYI=lQwQv!~YHEa=9*q0qW{h-b z&D|Dh>7LxGbf=V%$~8nQ!Z|6IF*C%G*<2>A+fpvV$*R##B-(d}d5-NvoK%Dx=l;RE zYsL(VumP{&QGEUY8>sb)bz-QlwuWty9d?qevtk`9`h4_5lmtNv2yC%&(F)oNTWUg@ z*4R{Blm3cu9gbs4JfF>Gy;;B4u#&tG3Wa!|$cv(f5+1utcjTN$x2p at 2te>Zm*ovi@ zj%MhrJFnbsbUG1^a~CSL;^Abow2*Fl`wr?=j0~TXO~B2`i=iDFy7`U133dE8L7 zMAv_m2L&k at D3;FjXn}GCQqw-?gX;PtqhqbjPO7gbkgk zij**{jO;|UjGQEVQcHyS^57=-SJ*X;1&t+N%H{g4m#%WNbjsd0%k+gwaS at PQ)P=f0 z20$>T3w41EfM84)>H--6!I&=81u_7FF$Xx= z7}JHiKn6fCrVDj}41i!v7wQ5T0Ku3p)CDpCf-zmF3uFKUW4cfm$N&h&bfGSg0T7Jo zLR}yOAQ;nyxV^;chh@%d+;ezIcu#~*$8!Tawmd-t8Umo9nh%{N|u z?bTNnzuf!Mi!VI?+_TR-z38bYpIG?#V~;-a at IwziaQ}Vx-gEa|ciwUPZMWXC;O3id zyy5!muD#~!tFD}X#pRb>ddbBXU3kIy=bbz6oU`Z7IqS?bX3v^=`e{9nnym^@R%(B?jqVFnJLHDWm#azZpvX`V zaPNiU24%<;6$iNY-g__HiYq+VgrxBC1E2p3-u<5!$&)AF|1-YN at 9i^eL_=*r?!%NZ zoeY!9<-A^RWv=)5Xd_!M+cNzQ)@4muNf4WDA#qI)aU0jJ<5*1%apU|^Pt=T%R&98P zMVdNBH7gwnC7^P3;fi2Z%BIW|v1K-!O6qAT8{%ZuXdx2qJHtH3b|H2m#0_=+V4XE1 zhDBJPTW~2JuaEUryTuwYP*YvSHpwT1%uljqo_dm2EX}kv zLuZ|N+<+rg0ESmN_>*vKe1bV9@?fnYN%SQ z{eQ~+UP%xO<=vn{d60KRbQ9BM-8s`X<2w?jDn(yro0aUk7FFR%lB9 at kr>QexYiFt= z#SAMY+hHvw#|a7}JHiKn6fCrVDj}41i!v7wQ5T0Ku3p)CDpCf-zmF3uFKUW4cfm$N&h& zbfGSg0T7JoLR}yOAQ;nyx`Hs0(BO1Y^2T z7svnz#&n at BkO2^k=|Wu~10WdFg}OinK=5|cRZ)8BL3H}OBSYVD^vM19?>~S4wdv14 ze*f*)Uw;1S$BjRH|J}FWeErpzUwr=Ar=NWM(T5+r|K7Xry#3ajZ at m86tFOHL(u*%V z|J<|BJpI&@Pi$EK_+yVgvhLxB9$fptn$@dTu2_EmvZYHF-*@k#h4GDnKW_2_;F*$G&hYtx$&e?(GyP?Ib!&*hU4oa z#|=HUE*uInQlPe`+VAs=1+7>1`<1cM^tzE1~to6M4=ZN?-OQ_G at 3q}3u~bvkpCj!9<5$<(Ap6a`Tc z5y5?5>%Q-z;=ZA{EAIQgpaKFa#yd?&3Y>%I`@z3&PEK-j=lSmP-1qMtHKw^CqEWUt+6voRLY~mn zT$+>qi*TKeW63<9%jJAIzt6Ojyci0FctPSN$x8`uw%c%&yw}K%C=RlAoFG5~@xU8oCW00d*YP#4Gm2*z}wE|38bjOjvMAOj#6 z(}lV~20$>T3w41EfM84)>H--6!I&=81u_7FF$Xx=7}JHiKn6fCrVDj}41i!v7wQ5T0Kpqgm#1>mgBbLBM~>d(s4D!s=AXa+TD at xJ zpDUIx`{VcDmj3$7&p-Y6!}s5P`_0#1efh=bpMCnt#~*$8!IJmid-t8U-+J?n*B8I` z>Y`U(e(A**o`3GyXP$m);ge51zTmM(A9?tp2OqfqzI*Sv`>s3hxc#?gx%#RruekiOOE0OQOL0ytM}&u>XGh?z8t^Be)uN&pmeEZP#6P-f71jw%=~s z;oA(`dgxYL4)JU;c+lnpt2Y}^#V|FitC>MefvIKa<6e_t1`Mqp-n(e#lF75?E?&_- IdmwYre}d~ueE)jg=CK)Uj~LMRR)HJ zW(J0z|AF*N28L1t28LG&3=CE?7#PI!C&eFi1M1QCba4!+xRvzd|9^XC!-{8TX8upi vQDZYYuwq%_n$C~^|NmFXW&*1F|DT!Rii+k=mbK at X0=W#Hu6{1-oD!M<8}2ZN delta 202 zcmZ3=c!SZfGr-TCmrII^fq{Y7)59eQNDBcm4+k5N%olpQ2S~9LJ9&n106`5$O2F>uI|c^7RHMxTvSDVDK-~BG0DevFPf8BdQTZDhGwu$Vum&+dtXk=-FFU&r{JGraH+|7#_ z2JyFz6XZ!D#Bf*dAu#^ZhUCE`gB(Wk&u2#N-oCzNGele at U-bi-W47EpVYG4CjrjO5 zKENH)j2&RlW+yy~qug95t;5uBh;L at Im3i$wkldCSW<~e}P|6S`b_Hnaf3BT}d+Ar; zZQ-$vQ67J-r9Y6$f=wjqY5*s-1c6Q+(NGC#@pb7V6el0R?yhdw+uI)#+L0Dv9Umw| zC4|=uRliz+FY|Bgnj`O3l?YU}%`0kJ`&aYL4h`hjou3_aa&N)>X|G z8%^>kjx{hr6;>ACTWPve{WkJm2Q)RDmonjG;SD*>IbsaV=3%z0KYhQ at _R%_qToaA&x1A<;{Zyu#rPwGG5Sv^=i z2vQLQYXvQh)I$x5Eg=TlsrSAf;*IEwaQ zr5R{w3moraTz at FsyOT($trVrR^NIY`o$Y=ZSe>bUwb#1Bp$sJXa7biyZnbA5-oE+* zPfKfeszL!(@=?%$v+cktQPZl8=51TLSXjaHCs`D~{-iZ!_n8U-P6HeHf5vXu1}x&U ztZZx|_n}C3f!u5Xsh&Mr5?sgIbrKSg)~o@?9q-OD*- zCua#mvdDpOY-_O- z?%^u92pvR#^{0GkY~<99oB!j1U;KqJ#$=|L%Kaprd`9 at f}*VG*VI6y|B&1)w=zShb!YCKx!v#1?7D7I+Fj1v``vH$eCIoJXBYr> zviv|nYD#jsVHgF78 at BCSwm7dne-Ws;t3rwY7|Ew9j@;{eaZ@@xGzLBG*JNeja9iMb zSrLhtD6vl=g)x at z&sqV;>>ZO_zH%*1g*R?LD6Bet^q*u>$~Ow1Op6DoTO#*4w&P{T z>Z4**z$-GIv4l`jamrA0F_AN2+ivO)jVE^VuVJJvL`sq`pB$kI5W-O{e-Q+v6NT-; zjky^{=glj6j^*X=_o at rH&|-bQs2iZ9&B3JS4jXkzs>ML>OSE0CLxz7oGP9P&8SORA z-212?cb#Cycv>|_!g$yHRIh2KI67LdG+|%qR_xumRj(6I3pl4rsy$&rGFOdMzn;f; zl-hbF!GPeF{zF$=E4uIBe^A{!n7SYbh84!S%ClPbh4a;DX{_=1l>aWd^4sBX921UE zuuWx=h3wol$lJ6{wahe`c0tV)(|$)sCrWqj(fi?{AWGKdqUBO;0=W>HTyjM!2oY5v z0)shNRj>g$dHG}7rFd0Aam at 3d-}*G(1_vjr7j^U?>Eeb8OkQ8}pWC zqwn=AJhCq@%#=@@oq z#4DHBf2?tWAJlApjYRlgKe?j0xj9SCQzyX8(pJwa>TgHYL!Xl3OLrM*W?q3w(JsdO z at l%+hFpa)`2|0R|zbgze{NG?6DIqB#XL|*#UjhsO-=fbL@}u7G00000NkvXXu0mjf DRj#aY literal 4228 zcmeAS at N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5n9Wp~AN+NuHtdjF{^%6m9^eS=-fVvqNZ0suv5|gu2OB9k) z(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ^va*VFffGH?<^D zp&~aYuh^=>Rtapb6_5=Q)>l#hD=EpgRf0Gw!Z$#{Ilm}X!9>qU&qz1fz|2^|)L75h z)X2=pL`T8Mz`#P^z+B(hK-bX1%D~jh#83eWlHCStb$zJpw*7iAWdWaj57 zfXqxx$}cUkRZ;@VD?klTNrszUP+F7&HaR6(KQ$*cH#M)MSl>|3P#;-6FeHL9(=$qn z;o96Z~cnI0-zQH{UWd$6rBYb`6cI at QE<80UxFoRz>}hBK!5w7f zSXz>iUsN2BUz`aFN}xO_gcWR3lC2>A1al!l?wC^o;X$}LnV at jC%1O*iw^gdpO-W5l zEX^rV(ueBM2gM3Zi;X_2fgtmfi&7Iy@{5ox2u>|TwE)E|m at L>VWX&MMN-|4wQjv^; zSqx1rB)b)1o(&=-LyLj=F(kDpx0qTs;WXO at Io_?DAwlJw56lP2C7yX{`QT)ZswUGh zrO36SBr&B3mJKlFoij at +amxk)OAc at vz+rkoa()UhnL-jU7Q;)5a2XzwniHO11S~_a z>UGUc%)}=jS_G2?CkPvG(n2Z#fUyA)0~Rd6GEE;|s6kT`wEUqJ1r9A*84fdd)Dl=o z5Jis$7g50kQ#2Y}u#g~%9t|#{f(fQ*G`L_PK@>e2Tto#EOcB1|;zD$bQuBcA<8ol9 zr{$vbQw9d6Tb?eCAr-f_O!fB=36wd$KR<1bN%_^QF at _smx9bQpYie^@vAPOKmaJ$F z36NFNS{Pi?+0=J+VY2J;CZ?_4f+ZSWygq at 6{L9vAzPoj5o!;(q>t4T^U1z-c^1D~> zma)r!e*V4g{oeEMzt`=*KRa>OvP5I4+a?=Szu3Gxk-6}382 at b!gVTYsv(`T~j^J2x z-zUD}SDN{U-$CzYt`mPzTa*?XP+LCj_ at s|#*nN8?+pb^C+mkp;G)`Ejqc!|YjGoQB zkcJZ*6y20B^7J27vb9*Id$wZ9lb$bGl0TPe8$4B?dH7`vThit1oTUf} zldp-p`o^XHV5GJvgSeJf_e`G|6F>SKEd8)*X4CoPg1qUOeCHYUCK=0~D!aqgt}*-X zh47Zz;uS0GlSj_r&_z)wQF~q6;)8wp=dCW*{1DMPZSmtzKvnWb z#i*ADn(TS}@7os4tMOVW5nJu>L&9ZOWCn(>b6~bm^#-t98Z40d2x at YnCEge zi?qKRLqi#@Y&pbiwpxXRKH6~AgXKv?fX{rHXv>^QT&D9Hbe8^2soNi4U9s)ke)$=9 z^Q3P at pL(!P$Uykn49;2V>-Tv%)$VLKsc?MSH0=zVs at ZE_^C#7YtZ0b~o&KSCB8#)l z$-021Z_B?lA6>NVyk7Qxk(+zopr0BEclmjD0& diff --git a/src/public/images/icon_start.png b/src/public/images/icon_start.png deleted file mode 100644 index 6d0fa99563e59ed316dda79097b90525331c2343..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)ckWXt9Q4~kdd-G;GZ7f7Ot*HqX#D%L8#hPLT#eRUg=vwHa3tdPT`4~Y4T=Y|9 z(}i>suuvDt#<&n&xKYSN(@B-4Lo$Ef#6?ZjBnK{B?&Wa#UBMr=s+)O3rsX(Md!w1D z5?80P^04^61yH`(_66UT=ILw{VIf z((;5HYqeKc`i^(9h}T&ricP%EHD0ZM1mNYnRSHXOV*U3QBNRZ}ci4Z_1mOAGBKwao z`WHt>QS` zRmdPT8AKNCu7i}?osiR^sPqQ21brLJNO<<<0hZE4u_BHXLEom=pJg}{l?nM^yVepS zE&1nJegzp!k&wiaBv$+k=JC(72$7bYxwF>P%m>@GhJZq-P4^_oGOAFUu7H9wch;De Z`8W0bsG*n0qL=^x002ovPDHLkV1nH7|55+| diff --git a/src/public/images/icon_start_11px.png b/src/public/images/icon_start_11px.png index 2a16cb27080e3154905d1b546a6a6ae6e62b8f5e..40130afd576267d699d4208bb0b6593b6f9ced5b 100644 GIT binary patch delta 354 zcmV-o0iFKz1EK?vNqL at rl zx at 5H-oJ1EPYd0}dL0sY at xQQS%1rfwirw)R}+?~(m`f>2f-Mt^r-93?`+W at l>k%Yvg zO-fRboIJXMdF25~Nr>g>&e$eBGEl}KGDcEs5ps>Km17tyuz!Schl{72qkx~pQc)na z-2VDiUG(sN4OoAKg)omqX(O at G0!`J*_~hZnC6cu>#(dn*5(kxbk6|B=h1kV~_d2JT z{{13m#-^WdzFN4ZRLDjBr_9J^b!F`!=HE-svp^8Sh z+x#&Wn at qGU?^`#Se&cSG(G3N+r%SGM%$oDY>Q3{MniFn1bfNY3^<2BLEX3Fv>Cws| zt)l|$fYyERtb``V?lBZ7nJD<~T-+bz;$MIP0G11#6t}1-wg3PC07*qoM6N<$g52t| A5C8xG delta 437 zcmV;m0ZRU&1M~xsNq?3}L_t(|+B}fYNy!^=U3wnDv2!Hv3-z!nv-48&xEIpsT zDUi%wDq))Lqd0bSP|RU@*I&==Z*q1B{_hX%1ay@!pNLs(yvcqtL+y5^|%)@~aREp-I_ z`y0l3XR*0-fPa3Zls(qbeqaUa2d-fM at cHu*R`wV0P`?E6&5mX$FFB_g&f02}?=ieJ zp0ShP!0FRI!Vv?u6@*i>Kov(8cT)*Q{l|E$isola*)d^Q0$q`S>gB_g6lJFyQj#R? zi}0c+NxJ;e4X`M}YGt9IrEF2~PYYUCU|Mq>&nhWMNiLJTVdu)V9=tj+l&UfCrk&Gz fUzis(_btEx5j?B(D`{iY00000NkvXXu0mjfJ$BGG diff --git a/src/public/images/icon_stop.png b/src/public/images/icon_stop.png deleted file mode 100644 index a8b443f86d83453a860c3b8bed7234627b9e3e19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmeAS at N?(olHy`uVBq!ia0vp^{6Ngj!3HE3xL=O}QY^(zo*^7SP{WbZ0pxQQctjR6 zFmQbUVMeDlCNqG7G9|7NCBgY=CFO}lsSJ)O`AMk?Zka`?<@rU~#R|^B#xt(DF$2|! zfYdn`r6!hS=I1GdWag$anCYA88(3&>pSl1j|IE|HF+^ix>qJ|>!wv#&_oXf=R4ws1 zv9m#QgYztt%#583#~(AzX=v)J(Ddm|adDMb-FAGpcVg1dbXmJh)73L8H{Z$^kxliS z!BnWebaC!H1I4S1cOT^$XPvko*RgGPo at G8BCMVpH|?`A5cr3*Q&DuIxVaUG?8;(}K#3wBHXt z6$o7`jXc6I|NH5aZVvpyYj1Dv_U=F5yXx<`*Jb(V58mWidcg8lMz7C1ON+R?OZut3 j8NuAwIO+ra8yWT|DCg|F at 9HfK^f7~{tDnm{r-UW|mVlho diff --git a/src/public/images/icon_stop_11px.png b/src/public/images/icon_stop_11px.png index f794281ac2c12c13a7d52602b108d4caa88418cf..656639d2e28d7f6b124b97ecae964ca3ab58d433 100644 GIT binary patch delta 257 zcmV+c0sj8?0>J{1NPht1NklzM8Bnb2tgD<+^=4y=kNe~jefO% zg5V)6f`7e3Gq2fcyQRol1A)Am$-E@?{rmtRV6Y+(l^!KvxdFZETEtrfIx}g0ULJ+v zRoP%aPRceLQ<9 at KHv9jM1ruv%ZB8q}Q!(oyh00000NkvXX Hu0mjfT3vrI delta 312 zcmV-80muHq0`~%tNPhttNklWEXC1s&&qtPfV3|37+no@>wZmk=ea5j at O=exN#hkagMg7k2E)8*XoWI63)E<-f@ zs*=|Srx!7KM)2cZaBdhPaJKibylO)!1;!Y at zdn$>K0(UT-G4uE2P`~Z?+Vd~%oPix zVS at j%YzKKZg5KB at oN>?I+``+-GtTZ8;qb`8#?CI@WR)0;^A1iMTx*_bF}o3 zE*ZM)8I%k&^>PIKoo}IcRUuA0VQ2960|gwL2`xI0<{-_MM1$bQn&%H=~B|L0PNCKwlVW# z-y&R;fbLh$(Q`hX5!@3+k?*?hRw=dl_txojVq?tLVzI~omdhnSBLLRx^`|lBkMH|T zCX>hTbUKk`8LsQj=JWaC1xHcjH%*gHr&B!7<2gl9a6BGy9A~)O?XsUUM at qRJd<<|L zhcFBYf`Ie+Ob`TwVTcfd!QcZa<@R~8qqW|Q$0LfO0Ki&{)*5RY0LrptG#aC|-n?Ld zYki|E%Lg{bU>ozmx4M2g=Yi|`N>x?An~epasw%Gk!&1sPO;eOo-`L!n?^r2Cnx;r8 z<7X^ZtCiojZ7QWi2myeU5^KM4+qPJ15kd_2`~C0VPLd=OLd>kSxKh&Z_wYQAey{gf zB7~T|y}xD8%??14BnM!4Q!38$3wfTCUoI%6VqnA900000 LNkvXXu0mjfwA9 at F diff --git a/src/public/images/icon_suspend_11px.png b/src/public/images/icon_suspend_11px.png index cbf04c54f9ab1028ca86f446264d31c4fc4104f8..1767d92ead03791806f735f6762dacd35f9309b1 100644 GIT binary patch delta 309 zcmV-50m}ZA1N8!sNq-kfL_t(|+GJ5Xa)U4see2;cP;miQbe at SD>a=NN8Y*gz;52Dn z`v_Fr0ZN|(t=K#*IPpw0^R!y&>FrOh*DvhrNYq3{6vRXf#GM!uAzRlKFnfof10;vh z72isTm11%tuP1JqYCQ6?6JR6abqUhF!8#ru2h~vXL$0d0G=CSI&u`GEZky&4d`DEx zHN=|ATFEBjE5-;7O1rurD3YESvC2XS#eXu at R&_r`G_#aYk(4KXD__YWku`40%R(X7 zo-$p+V1jbzIw^(zCI6){NZYpTuY4nQW6#FJQq4QVGo6{;{5Y`Ek*V~odXB98sj6<3 zHqI=#XNSftJuXn^CSnhYaDu`KS}J;CdIN`Z=Nx>3KLQK at Vt~IJRW;=d00000NkvXX Hu0mjfbxw?p delta 340 zcmV-a0jvJ?0+a)gNq;s;L_t(|+FVevZi6roJsXq>5v5xoQnF^rgqn&8 at eN)101yL1 zKBGgnEd8NYnX=G5_zwUR0;YE^L`qM>e(&A$!#)OMB}w9%rg>=FHk-8BYoY}yWI{f%YTCZRhA`OE*IdOuef0t z2WROJfhdZ=_kFltuX-oW7z4*y0{Qs;e$O_WwN9Yw`yNokU1?rb6|C1A(lSnhY;Ibd z%y at t3RrfI8nnq)7ZW;-7T|Xyxz2>CL$&7b77DWL#vOjY-CXZ&)sZTx@$FVyMLxDs; zhKex#feL#XV at +?xPp6YWuqVMp(|m605zcM-83+ad00611cP5b`D1X#RL_t(|+LTer34}lptdUheJ_N-8Gz2p+ z7?ber$0SU{ml+s{2ci#8kY2ml3-+S}HQfV6RdtUdB3wP{#AWt_uOvyZZ5!5g70mOD zWmzyylT?0JRRxX7<2WKsQ}lh0uItdYEt;kg)OC$v7{1C(%CZc3o+FAPQDij+J8Ef~ z_9e4gQ52$7mL-B9_(a( zh9Uhg9LEu|tj_a1u{(}K at +qbMDo4DvXLaWXp8^a3R;iT_r9xrx00000NkvXXu0mjf Dwufz( delta 281 zcmV+!0p|X)0?h)D83+OZ001V=;Bk>5D1YxsL_t(|+H8<9a)U4sMOkUJ2rfYx_jcTJ z01AdPaDw;*6vV?F7)oY11vAbm;wBbnpmd6SS+-Lot5LK6N&oLs-}lS1ME?~<(aUDT zklVI>v`8BkV?-p5V{2_)*D7e^I964qv|_E9ftgT5bSLI{o~EfROAW#U0g+!~7=MP- z$Ej%=Xb%})1`-FN>$?5x9)E1NyI2HXUl$i#ZUoWw`VHAF&RrZD>$>K7E>8m9$KyNl zr)gRg1*TxeL^yJH(aPsT08(`RJYz_kB#E{1Oo|t5Fr>Ndg8epx{WVBRoMqYJ at aD6S fzke$F5nuopj5O3ROnn6a0000f-CU$4W*}+{v3or;R zEz`&{4bX_psJuGd)XXk}>>x{{Q#vWP>>xW_XIWg(PapGn;k)N~vHR?^-~V%bpWoYO zYF=)pi5iQHL-rs at T3T99PfurOryvMj)aQ0_9 at 1yQCoyN z&n!BeZ#FJhC(5WM>YVbn>E`lB}$oDrN9e)@jCv22Z=c at UG=p$g#vDxjeD;$W at +|&XD)B zGJSYbxCoG3s0-=>G5`d_bU|G}27q9gE~pF001yn*1$6-#0D at tH;zV1jBSeT|fqaV3;nb3&;QveA;v+ z4!!hXIQe;pSANG46+HIuKY#yq^w0i3e*f*)BftC{IQ-L(eLsBv-M8O--FxV(FTeQw zvrl_IIe6gXkM at 7q{lWY1y}R$7uFkjjzV+rCufMkE)!nb`+PULp|Mr(&eBt?RTeoc9 z^xU)0bUeNBsSQuIKhgI1`gN@>&5x~J^XTeF9$xiO(}OElJh1%!`<5-e_nsw-8}DwY zziUxlZOxr`EL>1sRq6B2uaG?AJb~xjuJYU2vQj7Gpi8LRZoTE^n~LY&IA`_^*B2Ge zDwug)zJ12E)AOcH&AleacJ-9(EUU$gkfuzdL9f$l2sN%!W?VHX{mLsYpO`iQQ=pfP zzx0xeFB*5 at 1?P_)bKdB4M~zHPNlr>kh>weni9TmU6oM#@Mk8 at Z5XlHVp9wv{L1Gp+ zE0#IfwPhPRHXiT`8T;&g`?EU&3poEM#2sJbAG3SWk(x5BX>V-yycv_$k!yrGS+ol=~iHC*Z1SL_jNqCwqyu at _=msb zo1UI?`#Hb!{r&DK!WhH<9q7Q3f3KdIJbm&QA|KSD502PEqOP%~rt%|mzNtgmURel7 zquy{NcG(vUTr|`C#J67`pC;2!vQsr~*!n!6x at -44>r$%xcei%7f7w!3S!rXnu*#%{ zRfP;xTTO;lrKZNhJX4?B7cD9(tDT-6w=X^yngwor<&Bnx=C-46_P%tmf8JKCdFUL2 zDTfo^x_b|K7X09H&to0p!BU__tE(&O76S1mLt&ZSJ$c)ghIaS#0i)By_a{D119$Fy zeT_PQ#i4z>I^VXKj4(XVk7Z2`G;Q1r>o)I(hOQ1&QeF?fNF2O#v!GK+Xmv&T3a8s^ z-MVGVqZ at zp&r!?$CDO$uf6eNbyW4t8SQFg4GXiW`6>QkOAJOJ=6p3+YZq^4$K|~d; zn^0-{E(k_q*r?)QM at QqHDYw5~sRfnf1yH19O=O_7`bOJI>xxKtiG0=Is^$$42*p84 zMj=-NP-IY(SqUP(1)%dvkY8=Vk!S*!7Ulv)tGg5qB}oz}Qg$F>e*kE!(P)IQe+jf^ z3vjXqQ6NB$P7Ow#2DA(fjD`Y+Mj*z6kXurT1WFAys|gT7Wr~IAtRvMj3@ zhNP5=gDQtbNr_C$a(YoDJ)Lc9o47qs_ z1cXz9L?$sx5R23ze+80^AtlPdOBiIbLn0Q%Rc4m(Fv at ahEK5)IsVt_rL^KE%g8_mG zKX8c{$c!2wDT0zZGT$}|J4 zo+gFi~p&?wzf5_`(i zwM{MNZ988(S=;<#(VtTfArwnOPj?Hd7I-{1AHmb!I5IE{l$(noU#G%0D~otZK;Qjx z32xpP{&9Thf47SYG+Q8b+xpHm?|<^S|LTYXD={{`hz}n>g-`u_9?#6U at v|Y~@%v8v z;b-6Awd;G%5JoLgPPY1VQ%ifr+P2PtSNrxCY;UV3tpnhENbUz(4X4jt4gGrQD%ZQC zv&3R42BTgNUY{2xrra@e>_F&J2urfwRTi+dut^r zGKO>4Zo=Sz9bB`ni2cgxPuXHiu8JwB5->998G|-K`UoV>p;zPSiSf}f0$L!7WsgpG zZ|l9%*0nti6y$$^1B1ihcDchhe?NO577n}vaEG) zXB~JWe>_~X--W?JJ3N?q5FYKna3JJ+G)kTcW_+hJZ=C{FT1Lo7S`JJ@=N~Uk-kS^6 z%y>M|e|;Dp%({XEc+kHvcblv$_andTja%N+c-i==PuGvsowZSH{kw+Em7k0NR%Vl!huktYj$ fUKal){uW>Wi0@`npk8xC00000NkvXXu0mjfn;wA4 delta 1238 zcmV;{1S$LR3hN0WiBL{Q4GJ0x0000DNk~Le0000K0000M2nGNE0Kh at K29Y5re*}$5 zL_t(|+N_mZY!qb_$Ir}sv)!GUy|lZ_-q^NF3vJn2wFQYZMQUOK5(JDTw1x0sQWN71 zA!^iDqlgbgeSrr|NYJ1tHfqvTO}5sqg at Rm)hSD~r^u~6(+r3R^XLn{kzkx-iMH7jW z{F5(}^Z(5`XU>_SFvjqIUR2AAe+U0HAeET2 at fO=wyUp^LmFJpy-sqW`ja^A5)1gRg zt~)+?J#@MEv~nk&39ftMo}e#2dYvi{u3K4Ny8M$34b}UDW%hcXjV`tqDQvah?(;e= zjRMbaODrgEBrNNTO%BQb2-IPl_r6gXDD!{XTpwtX;}g_eGy;-JOA5Ww#>u2ofy9%NrXi*2JfVf#U5_b$xR}0b0NmT?`no zwKORH7Vb9qN*K1Gw&K~jXtak|Kd0}NU0HDL>QyWJTX8lC8dIeC>mE%i8s*^;Wwse8 z;22CAEFN at 5aX$jEGb6&euU?T|(n%S+;G!15f2QzO1 zikuCK0yz!9xS#@K_0T0&3~sk`Iq at Qt7Sl^cDVa>ve%7oyqE6l*vd-UP?L{pB$T*7Hhl$pNLN*qtym!StI3=QV|0=Qu4f* zClDDbmKlNNc!Be>^-ECSDa;iRiEOgfwKg)figcRkt2T4hlin$A!oG7UD~ z02^w&;Bgdz%Pzp=bOcVE>beoTIsO^(DoFj?DxWxVh~D1z+)II~>O*TAo0xFlfc9ng z8LfTW<8)n>0~QnvCX)&57M_%?!moo@;p1Z`W9QEHzY`n3e>6xCe+{+{d#bf#U(G{n zKG at T~lQf@#cq~C5{_yB*U;l-PT{||_Rj({%Swur3EkXalV5+;P?*iGFW3!{@y9pwr zw+r2Y?P%-RSNTB0!52DqlOAC>-uV;sh6g~Fq|mub-G|4=M>b+W0iNSHaY3BdWbtBb z@@juhN=5Z=e+W at dZ`ZB4+uqvo>TB;E%}*sId^53t-#^}k*SGA)uDUH>8!gTtiCISE zAu1y(C-N8Wne}1T$K}ty?b!4DD+k^^lAnmnI6{CrtZC-~?0#^|X=D_tNQgzBhJw*p zP*LF?wfK!9ug|}4 at 9s8~m9ud2$FtD+?GG?EeC?a~e at OT(C7YQcG2+VgEh^6$K~>be zK(-|#-JacSHV4DuQ+KafHm}V{B;dQyIryrxs{s4u&73$trNb&3+tmN^#b#LEkvM;4 zbXBP5j5;$l-ZeMW`?f5`byz0Q*sfBy>e9f#lJ(P9&A>uVxxEaEqC$M)_q+F&$U$T) z^hB>^EMCt{pZfdyrxcoPD4g|2=kFJ$Uw;TN01dYAKO4LcTmS$707*qoM6N<$f;i+- A2LJ#7 diff --git a/src/public/images/icon_vmpool.png b/src/public/images/icon_vmpool.png index 7cf11748f6eac0e1aa3fbf55534d166663a9f585..657ab42e568d9b2df0430eda79edaa523eac72f7 100644 GIT binary patch delta 943 zcmV;g15o^f2ge5?iBL{Q4GJ0x0000DNk~Le0000O0000M2nGNE0NQ;;Ee`!fX zK~#9!v{hY5R6!IzvwL+{+t4U5g6K!epor=rfaNDVs6VRm+A&v(xGzL{ZC zO8B1^g8yuc{A~N7rbuN)dngoYe=1(|JpUROqW?^y_aRRIxzvizc-x~- at 9s%oOqTfT z=Qm|{;_!pS>DFC3nFX7HUdb41T)A#D_|C_Y#f{r`(9nGM{?q1*UB~7OhJ1cN|LSm& z2&yIk!}ol>qcl$fBoGZWA6rizk9QKcyU_&!FxT at 6jFeepp)1hYJco2x^fF(&Zp^YEtKy%{o}23;Pcqopi3!2bIJ zgE;xdvOEC(*>)61Q)Ws5dA<)jw{L-l`c-i2?n4-T`yQ;BSqz?3>o)G^m{@QQR7M0K zg%c=Rw~FB!hgsVOQrgetw5o=(CR?_23GCg|3@={2QNgoW8!9Rce{g8O%ZmVr1D`ms z6}vf=+3!aRgox!4Fe4Fa2P_^4kFxh zsfrw_HfEpBWYlj306fX5eXvb)z;QD zSk?^0VvE2uQ}4&e$2#AjY4(U=6Ftdv715xYzgW1Xwe?nAUES8|>gs4L7K3Ossw8Y# z7Fd~#{WF;y>AQS+uLdA3^M$-pbp6(#FGjD at 2?cs1hN zsMw&Pq at MMWJ00OlP941?2Hm3nf7w8Q^3{e|6F&dSSTa4 at GYot`wX)Z?Aw0R;xh}xP z=md+boLLRDvL-iP$2k8;3Gcmzp;tpxwY9$}o?d%BE(7-H;#;<+n?@0c(i7rvd6Ca= zKNaxmeKVq1gD6cy=ZK;t=e(k&p)&-r3Wc|0>k%JU5BR_)^e!m+Ldyn!(Npx&p!VDQ7FB_0pmrs%?44cN%k z2&ZZ$3?l*xz!=Ag&Vw*i2G=JGL- at WA&+`$7WlWnc#=aI2gaN`JOm&`~Nx=1#X&C|z z5zxn+GngeCb0rI=?chw;e{rgW8x>~t&;rO7rs%D2F_H$pePktxMb{+vtUyqV8&dSRs#HR z_!*wRe1nN!Me>PBe?yWGQlx55|v>FQhHU5NoOr# zEK)&Ts%ar&rW5z1e`A9nbOkUQE1K7P_FcNR(hd#p&Ie#-vu49ZdDGUWuDp3HblIcbn0-y((K=p)N0HBzEcf1L-sJz^C;|OzMMLFjKMaJ`=x8}>(`$uGp z8XrGn|I%djq%`9%H=TD3OfGo?pz!WG%B)MUH59ot$9r at x&yy8d=`6!XzJq at RxT6Vu7Q(DVye7oJIK at c3gk1v&AqJEy at I=#fX%DiT> zgwt;Cji=uOR&wuvFX-87Ln(ttE%*Wa0e<4-Gm65zl8lJNxP^Jdccbj)PjEM;MFG`U z{s`wFyC}>r+FF)n1N3~TgNy2LkO2GzV20*VI}DPHP);BG+NOD0ttbT1!%Oh?_g|` z*e*%!#BtIjb-!-uo+j;=q-~m}X*Rn}<1}gGX0x$tJBzKeTu at 0S4T(3BT`q-=}--x#ymD at 44rmd)^%}lv4bv!{u at rN=r+hwApPg zv&ob#2!b^x%V8-hO@%_i*Peg=g-`#ob^LV%b0>|jY5Vp?6=hX#X6F at H=82SIc(DK2 zv(G&J=pF0mU0~>U9 at 0xTD5LDHsX{8qpKz49C-=qM{V9^Il`|lEvTIzGHiys;Ud}=!E?0#~uGi zafgkMLM0S@(tPT7U~jLgs3u^_ at Seaq9<>*8cE}cI4!OqT3PcpyD<>DF| z>bLSdk7VOJd9o!i;rEA%ii at 1XL&FjP-|gymr%+QF9&!y|Nb)UyS^;a|3ncM^Bh_+qi}4_^Gix3?Jtk&UNM_&f)@ zySq~ZuA9W>&6~x7#mfqc%c>XvAQT{k0-OP07-PCN7K^3IVYizUC9&J#kzs8r5O at Uu z+-`T at t?Kk%faAEuD=I2-^YU^5AkJe`hU2(jxww?yb^k-_%~sn(@kCuC;o&RY|KN7J zBk3A#-Fa`7&6)pEFkk^dmZBGa{?fDGJ at oPmt@l0r=)dp=acMk%!0-KbeEGhIKlBK1 z5bEM-niPD-?;Q^pl~;VzYIo*K;h at xiv2$NrTib*stMCbyNwF56&v)?b*|V1y(sl3Ny&nM37*CUB`Ny&> z`?H*mZ&)mrLMbZ6Mn*>WwY9ZP?ApESlLp?fGM--}+J(c14u5x{K6dTe`KZAl)XtTo zQuIg6V^93)wcYzaQ5?@0i-z&)3;%xd+5hvlev#qm58S;CM1$rTbJ=*csp^td` zdk(Kyx#IHr_3H`*K}g}JltNJy5JK?!>uxt$a5(bln{U23l5UV28yoX-a&!J|$&$qzi;IhGHk%DRpSZ#3x{gpN zgkUhJU%YT}WO#UFjWgT%^^F at he8}N&und!WHd7P at lv12M+ZAYQZL8_(>gor8+S*!M zK|%hrW#wfXii(OeY_?3qw+{wG at QjX1Z};?^85|gVe^*ymLVUYp$BuieSKss8vSrH> z=ELni?d3RDsI9Hd;y4bfs^XQOz4Ak^ckHRH+qRxqvShI#p5N#5DXpz-Up##1 at ZTis zzH8UcKdh^-`^QC#7R^t{v17*vc~w)#IKh-)d>MiXCCjT;x?HYYx7(edZ2poJf7G<| z;T&Gfn5Rumj7{r0xytf}k1Q%(De{6jp>un7f#qUfmjM7_IR2iZ(p8pZo{jf?r~m*c z0F6+vyb%n;8aV^Is;I0=&?%s&IheA%5iEek6>H3=PriN+fD=xq)5F2LM>DmM?AFzO81iexY`im6g_tii%CYcYi9<8aV z$uk&c=7v(5R-V~xhS_Xp6;)ky<;vCNq97DntyVVK>&<~-7%&Wjf`WWI&+~Zz`giTx z^~myy at -H?tG%OLtnf0FB-efXj>9VD!;*yf)j`sGhJ$rV4<y7K*Oxb2ly0ral74Rr2bej|Qd z_U_&LNM+ at UCu&?Zd0=o;vQ$k4(X<(zb$U}eYlHv*Hf`EeR#aT{WK(m~5|(3c*bWRu zT|- at dSy|cVw{6?DIc`3nY1&QcNjrXLh&&|y(bGcll@#C^#!-l4k#UIovTtyr9eRP=`=YhsY`t^X{ z^Mjce0aXbFo8+NLyzzlTBQq(P8-Y?vRVCK-_Sx2l7q3`rpz=Yn!U7igbFXjNR;F4Tge0 at QwMJ91cfu{MpQG9Aw$Bw7 z7AA~KPtWDvBS((B#Jk<@(1Ra-;*v)61mgpMMN2Eon$~SxdFtfxO8`(%y6Q9KYd6^9 zQz;iZjt)k!Wx#X3fgAYKn5{(96&M z)7D-4#>a;HzgoX at zcYbfQ}N=zexZdIjjw2$a{i5jFTVl+>({T}{rWH7_~zEFo41Qb zF`!O%%n;ufF=~Z->Jn-`bkBe_B*jm|!u1z%)*tX!)VRz+cofa at 65)>@HtkR!xY8 zSw}cKegrKot>?TR?*}wZ(+Bzoe$>?5SetBst5#L6j7Fn>2jDZ5QmScc+OI#lu48Cu zBoc{4Vit?Vsw(Pb0GJL;f4{G{@3U*xt}ae)V>X-S7p2SPa;~bXT%&347 at icBXdn=H z5tvQ2O#40G^9=TG%qc2M7~#d0_15f;BYy$laR9J5ayIay1=_6FqPmVr at 9=rI+dY%~ zq?Breg1cUlnF2(o^D^Rb?7#l4um4>8!wjPiNs?4jUS5740H_jtP9x;Y$!!Rs5KI}J zhhF;0m*VLsPMo;7eaH3_imGmBlZ-~w2nmHkPrBW1?;LGnV)BzGPn_I6Jso=P%$YNR zc>enO`hW0x$9CrC<|YK#Mw2OX?b@~30LHDEmI{{Tpr|ScA9+lMk0|b9LFu5n-90!E$_K^&v`{ri<7-{et!OvrlzLmQ>RX~IJ2E!Sh8eEUcBtL zdwPbZCa1m(%o<<7H+-Py^ohT96f8~HuPMX9nw3`z0FCQ5u5G;kW2LhCj>j79I~xo5 zN1mE1>pG=GPxWega?F<|5#8V279P2J{*$Lp9qXDUO(x4oZbOI;T~Gh@+ImpvYj9t_Q7e>jc<$8k^<6(lat!~o7< zXc`9IkZ_XrkNYpTw6yfhm0Ma`Cim at o;F78;3C1 at go6P}cb|qC)psI-{a_`t!blf-o zho?@R>YOD_#n*>|p?~&xz1wrLoe6F=%b8`)$T0tj%jIg#FUZ?6Jsp5XG-#RzP1WG_ zj=eRP!s7wJ?RKj>-v8l_L0`BO3=5sk#3=wE7Tit==Vm}=J*X_p^Yc+vRVCyXQf_a{Yfj1x+ zoE}b=AxYARlK!;qShHqLp~GRPs-_{CCmM+=;c)okLb^$kbolC(D}Aw8v{KUuWCJBpLxIuD&Z_HvvHq%0xk&Pjk$ra#U4?q9}o6{zxP`*w at z!p6BONOf1Vn zR%E*%2&+|9C4T=n38>H78S+CrgFW%AZ*wOW=cvhtUrQA`L` zqLJvCj*gDrx$?YQICcEZW8;19lq@*IFfiJ(8*-O7l*iM3y&V%F-{9Ah`QIyOx=tm9 zASx3?WDVh%hLA)+NP6QVgy`XL2%%62kw^s5XcV!Sl#&N)Zf^QLhr|Am!N8|xux}0{ zgpd at 2W;qrBvQyb_4?NF at bV_6C>KKMGB-1FRR$#`9s;UZEmLW+JB9Vxy>$+dp35`Ue z31cM7GBoYFwg&)E6y at uYaAZ1}ZZeyM{6%@o;%PA{7E=`E>3CYgo+Jgv+KHBW>Z#cJ zc!|BRBH|@|M=MWnUSH?;vNDmbj$zo8_uzQWkuG&3%d#&Pi`~}zwYPVik4B}mp%TyY z37rOmq4TP$y&O+VFut(=+SkT=I}!rRbWozxkOE^zZ$aNX3WjCDFl@?de>dPbE+t(+ zh>oeLz%xgV9IJ^&rBCVUPARi!Z*TW13mAjZDAd;0)|T9kegMEQEEtBF5A1cFq`d;h za%?HXFbQ+Yvdq$SyhJ0u?(XjJ?dql~>RajJ-FRpkfg&phlS8xwMcZ3jdZvahE*SLB z!E^D%aM(ZeeWRC!H|U3-K*TY?0J^s zvqBS|&$Jvl)ONFS2_ZgB(}DmJlGi4aQOvYipWLuqyz|4Ut7K^pI-R=}Gn__&S zvHow4U21u}xMugFbiyK&qePk>d+GMoes|Dfk+j}r)$S+m0dNlhoPPd`zXjl?jjy}A zTiLvMlNUf~a$R_ zX3P8p0Ho7J*L4Jg;Wtj5I(1~BcYC)`74 at K|X&GbR2Kz>kRpljFR??mxZw3s*@&KTz zg5iO5bh=fcL+pXmwX961uBI^EP;uu+1+!20&oA=iHGaM`8e=$kLgiGp}9~t5SpQE at kFT=TrS7Q-GCq1!=fiAxyhY!rFqU)!pCIi=ao=@l} z5{dQzNa#l}2>1HD<6knG#0N7n%!Ps|h^ngTF)8K=hr=CmOnF>W)lZ9I=|NM5vCwD~ zGl)j0EGtuz6zeQn$xATvr}zsY~14YjQyv at Vrep(#B77Xz-pQXMNy;SP{f1T-*TKd zaUulZgN==i?-xVDpYuGQD;mWdqtR#urI2Mg7>mi{nx>7biuQC%OUw6Drc6gyU at CCU zU`QS(sgL8hv=?TR;c~e|i!~!9Obbqjx>Z$uaiMk#{%G9gav1<*B$1{0O9TsG_3G6b zESs4AID7W&bo at 8W+S*z(Aw)>x2_|38TnN?G)eg~YU7KOcY0^}AOb+?au`GL~t*tG= zPxt*H?2qw?R|23mnI_wzjs;pX3;ZVe9JZYIvU8sq3^y zmgRHh<>glo95}F`n_9DGO`*YHSj8LodY$THN=!M+aa at 0AXXkYn8UWPS*XOe=>tYzV zbe&$+b^U at UihZ+2mx9{bS_6O;1_QrI*D29;{VhsqPiJT6b?-~1n~(DH^3e6(D;~}3 zn!k}>ko)`b3!M-G&&b%{w6wH*ZlQK}^gkBd#jhXg>gp;TS at u`$4qL*3YI0(#Z)!47 z<955#E)-yanC~v`;$|Tl#cw4W9;Fm9Db{v9!vpRb-(B1WnwlCv<#amglIh`4cwCm{ zwCR<2+%>+txMhf<_;JxFrukOWDP;3@&s zLRk{!9h${)JkF$?#Hq?mswPvJ${#={nab37swR_VVk(ZuGxkI?=&>c+vN*CR5u`}T zTtIL`lf=^48;#!Idf&bGobSsY4}d_By^s_w%h9ju^?R at 1z2|&q`_8wW?~;h%$Az)6 zF*Q1R&?Nar#t#cw?OfK+!cSu{N)g#KB>*s}u;?j9Pi&``}86P}&(EV5%@gYG(^z_qD>m;cL%`h#J z^Lj`yKqS43b2A%GzW)6$+c;XUwaNrR;P>|Qm}04D78Vxm($bPmlQeb0vC`h<(S4u# zKXZlh+roU&&DZ9E+2|*&KYoh89xy+yiVq(KRqhxtX>&G@)aw_`8&1FR%7I3G=`JEt zc<=5?5J?6{Ha|7EVe4^-hjhtLfZdh|Eb^1H8y`7xL^YcQKgydz0M*Bou4B;9%isO_ ze`UbCAKZ6eST2{}bKmC8n>_#?fDiy?XJ-0d`irOj-h-bz_&@VEsI{iQJzA|kvG_aegk{rf$)Pv`SybBL^xw8uFbZZ+#$k3aKg|LC5( z?i?B!86f~*w>m%Q>FI&BX&)F_$2Q}6&QvND`jE}~i3Jh8uY}zlrXQmo|Nk at m*qF)C zP=ORDCQUgMjeMiN^uU3i`9*C!Z^ip=zx#pA#dD{3?-(3>n-UdN at _BXT(4mi;TpAk# zjgF4fL|-30 at x;qi8K0mh^FCb-FA)F?L?iOV%QYS!pX7rF4>FdqTa1kz)pvhpi=RlN zsIByoqW)Koe&fG?=z)F1m1-4s4NTH5e^-~=s2ja z?$4qx^0)Y9pN;^_5toQ`gZ&T~GkfDYadG z+E2r9OZ=6u97})WH}+cG!cYjH|83uhcGM1y^Gd9#=lHWv{*A4hHx86ar8P+-w?YH} z5h)^yRrJ at Ekq{9b7NI9zKBoP~ey#ufb)DoRy at ayrTS~NT$Eq2&bWsmb#)^$EfB2Mr&f{lqgXG2(y5A5p6i~by8|zX zE2WGRFXI{Z4SdfsJW`RdWQ^xL4FHZP4RUBDI$NvcrE&D=QF-*yN8Qa6_%J|a-8PhP zmW?STow%p5IQPl>_ugTwvmc&V5h117+EqI5Clo|PM~;Z)hm*AeA3Sp8 zUB=M;N1>K{_C%RbIWD~O%J)9CdGp55eF%x(e+MN^M$IL>aA(pC%pY8CdtVU3c8~?~K!(d>Nh33~jj~UUzrb6AFXkX>ce| zVQucp{iECN)2lHP=Nw*m;iXoZ+K$mGQ|+nxy}iBO(&8fLO4Z{;x(O$dg|>ZteK*+g z&4%K!v9Whaafc3d4b~sGk&*yR^V;lqd5WX!rg5Muz1 zj*rv3%N<8w-#+h3{Yoh;-- at OVsY`9syq@>Yi33Pn*f|cZnmEnw?xvKoHQf( zZF!TyFp=4O?EByThY;*3_Y9a~wb#oR%akir5atW$da=6_!ngkYZ`VKhGr#nksgu*G zbrZRty#JD|l=+H{??=@pP zXmQIiRSCOuBsUunMy?MCkk9vVvzbU=-zd+{j^ChnEg=dkuZ^2=ea;?4U*FLieR(xB z1e`;zzn}YNX84(B4)Ec_V>o;mSj!rin3#~mhYraHkkW2AAgu$RV`F1#|Ni|d8X3`Z zlWkMVHB_T+s9Nm-Fpt!hMdl(MWy3Hu$&giY+l$}%(|@}EOTW6oc>ap5I&ND)1OUxOjq-((0Kme+JPJiCm0&pq|O?*G!SW>@R+ at BGpK(|Y(*Klcxq z-K6+92S1pfooPi^I%n;u>_R>tWSU{U-;ml&q&GkJr~l at +?!W)O;%enioOr9Ve%F1! zTj^hSQ7N^^K$D$xjFF~evjENW%{Z!6$~rooB+}c+sa_XpE at XAPVGTm7gVZSNX$1g2 zizJ at Uq*I5e8_3J z5CIb!BSjr>%V5h%|gie1XadO4k9w&u2M@$KZ~YTmr%*T&83 zt~+1Lg84b1rx%Y=YD%n_+QK7BMH8Xega8B%Gf!R4gv2<<>xIoy6%C!EA7Y z)-Qkg%PSeCX?z at NI{&2E?D}<-57l)Z0d&`t9~Kxv&EZnX8H^wwq9?T6$RHCM7e!=z zBEUx{u7ks at z_Ba%oTljS}e_IXh_5~SxlVJ`1wQk(NL zq0=sk5F-oaI^4;DeQs(+p4K4S(>MJ6AAI`{2dV=j%Njy#n#$DVMD)Oc$4`I}E8XUf z&t}Wjj$Y99jF<5;uG8^St&~zJ89zWLuES$b3Yk!p^EeJ;WJ4lD?4_cE)WC!CwC}9b ziRyGjMY$l5h+PR{sy4M{r46~Y**1j~@~l*^b`oiqsw#Pn%E5)#l|JRbkPw%(r+IyC5_;n`o#1k*; zN+mJ*NO{fkaiGJ6fb*q*v#iYgO{Z^U at g4kvNlSv>M5)**LGfK=2gFgvtv6gZw at kz&yT*s6%oyjEV zluA3|@rj8PCr-F8A3VtN9)@+$T#g!2ADljhFQBFYli*Kbd*FG8R;B8{B%l0 z?pB5}Ha4b)9)Da{`odr^8Vp_0%YZvUAropBb-jjuCKQh&Ymn_kMMTD=odI^LD#|Ma z3ch71BCk7#oCl>L8qTt)j#f!ssbHbwFD$kC`dVXSV{)^EGB!4*s{8hNTo}o6+%9uK zRkCRbgpjmvtOIE{kWtPT6D#G%OrpT7ckH?MrP{(wt=Xvc6X+U4x!ykNdMq-2{K?P% z@<}G$BRCM61$Gd)(gq>RdtIF0LVfQPP+mV}gZUdD(xRt#lGI1s}gShNta zIB9F*W|SgP+RKx315lI~+;B;+2oZpZ3QF7%h>S~7kUTA#&SD*@wl3opgfT1%{R?wb z>%(lgs=Wl=x?=)72xpm84hk&-QB2kB%yiQ`X z#uaiIaYc|6M5j4|3P~tXL>`+kBVo*j$|$?!@yA_P{p%VSpMF}@tUZ>AV^m1XFocFKoP6`{W_ at uT zfk+5M5D*B)&(^l>zWbOHw6#WtMVYwW4q8i#MGzE$&?SRFBmhW26co$7nM^)U9VHq% z^#kh%?9zTEvi{6l#~+B}P6?2A+p4D at kPW! z+}vFce(JZg*}@{T3+HDpZ at W5mZVNjm+>IVP8S z%FoBq(x%B%C+=UGpBX8J{+gIcC+e7YUVm{H37CaD1M9ZFTJG;7FJ%asAVtUX$))l07?de8RhbF1L%Y=|ymR~q_b`ita9r*kd}rOp9j{tWbsQ`4`f{yOwMT1?^T_&T zai~H|1)##h)TQBbXD04%EX>>m;S9QcXVBdyW at DaP@PX5)wS3~ zRdhDLP2;%Gm7z!= z*VeIs2qZ*^x7=~>55jEr5+tJ|&79BQ?QRwfj*O41QfY_Z4839sH3;G1*{fG>o4#=B zc61{$sJq4#2uL^Xy7L7c7SGVX{-dY<%U54`_MdLO^TB+VLB2m0XQz^-nM-FL{Pg4h z6ARAzfn1!Lw~JSf?d=>o1n!D(j|HxrsrWvvQ$(9ze)ik{z|R)%>|eJfxV5}yZQjmY zJbme*&wS~h2}r&3`b&>S?e-T3H||*0XyTleGp{}0zIXrU59Nd0o08F2UE(sv*CWsW z$3On9!Of#1VXm;O1-I2$v{%o)Jw-}Mp=WS#=RJ=GUXZ!*`^?4Dm^$;?b9X&>;9KY3 zeslZG)u}J9zim%Y>={I^SY2`Q0zhqk8twYRjqg#jX0M!k>(axY`}uz?j$;;Ae&*}{ z`hOlC9x524sZ=V#tYUBmfLg5vYrAnMA|jVBU+L_=|Fi!~-_XzmiHV>o+o&xLUU=vA z`{$=GJS=Q`OQm9_TCI3N5WpA%qW2ChGb4^;G#gEsx-#7?RtKKD^TE&lvDRi*X+13# zS3O at A+Ev{;INCjpd|gyWB?^5GitJHU5%)n+PrJU@(O0-;EX=<^wwCLvM7dqDR(xx4I{{4pScfHDt1t^;F$jvE5OS7jJqFio2dws8F z9rPfH+j{JoZ~T4b;!hS!#brCkTI;5#XBvfa&*@IPKDuS|#%vgdH`Slw?RQRJ`Q*?3 z>TeMA(HbceY+Qb>gm(t-I=gUh2>5*7p5K2#}}u?^m088Z1&Qb6T5cb^Wdp=YO?{U zY^T$yk~V!Cckf$mWtyZD4GeF&-7oZX4R|+4+~%tTNGCdj02QxJU3_@=Baa7RzJyz^ zTMqf^0P at v=chxt2;Zz?)%8GP);mnC$)oLZ|?d`eI*K3hX^7;JDUr8$+UOMx}{=R{A zGpxy8Jo)931&ikUdyXt<+CkMh6#m$P#4;6d$qNft(zt?+=SF%YM2;Mh}N|GR0YwR>Q& zKeu6c*Si+rTH|O6g**y{ya&J&k?h38iC^A&`@V|`qSz(;L_xqzue!~TiiXm(_E*2rMi?NRI628tyXi+ zx!lDIZ~x}mw_lyT?XHJ^XWja(6ILY9Y_wXRUG$spBoW7fk1$J0725U1J-c`BT#d_W zKyoZ{*QWKi8Q|T0sgwdUX9z0K1QNE@!NGymg0Co(33}c+{{4dweCijbtj9|pw;TKR zMakIM7>|w~qQSn6o(Gi^wml5jcjf%apTF~t-MQt;Yqz4z;_THCGqiE at rDNZJHer5v z)$L>Cw!8ed{^H3mj%>gEHEX$;!e2UvbDbmOFG-ZYTN~XD$fJUDwtViLH$S(2``&<; zQ4gF=!Olj2D5aGMghU9-UH?PUH8G2Fmi at rX_{3?TEIiN}?gen$-cJPp-uGH&fe;Zu z9v~V}YbtX^a+Lyv0*KWj at BxtfC;>7+SN#*oh at v9F@#LE?|LV?N+p|h_-P9kp{BotN zOXX7O{J9H1|N38iM{d7=|JPD6ajWjf7dys&;uGs!e#1f#M?qP8Y7mTdSI$n}F>(Bv z|9aircJ%?0?r-n)`$8cijJsWv4=;k$Cl{=7ML8^_i3hf~=)I z)t;&ctT3h`U@(z at 0BWZ;EnJ at m%ORW3qILel?W|N$krbnpvw6L)y?_6HH`_m<>`atV zIw%sm%IVi%yuVT|dV>dU$OP=O|kjNE`(z#}%zNgr~epxTb)Y%Ew(>wTm5hMgC2-vYe-V>JdZgdTy z0wGdtQw?Ip*R1So^tdbw*Y&&$M3h|n{!z<>biE!7(gY}GhO-}WQ8)$zAVnT^59SzQ z`N)gyIz~p;WzL*A`*SlF&b~dcVOuks)%8H7vE8L at 6omzkbe~Jyx(lb?ckkR=2FI~a&45y+3CzXT91##*G(JG|+I`MHHJR;!g& zL&NjAYh=`)1%F*D5yaHt{$U_xsv(av;Aj zb^he$V()OiyAI!fF1*U=shsU4$)}z_b zZ13yu at qX0wZ`im#Ja_i|&zybh`1$qQc3b16E at l%chEdm<YY5x4+RE*|qPz8F_9&|EAl`iD$<@vmN?-WKqc4U at 4IX z!^?)^1$h!zIDhuk7dGGZnP53}Gl`l2yQ^N1sj-tt8H5lKW?;3WdvcvYY2A&j2SD77 zgkPg7y?oi%?`L61*Wd6_%j_1cECE(Xn1w&o>EL%2=NKYdn1l&J0+Eke=B?0LfxvxH zyHyPe`I$6|TD}KzPWL8>9enlqZ~eEMH?J>3RytW+Jk)YH=+8|{{?u&=}@$VYDvfa`A86p+ZvgpRbC zN#eM$nql8F21%#AAx&+;(kvAw1ju0hS=Yg3FsqDW~d1*mH~*GE)ySRevnNSw_TF3wGz z**LKI&JTSu*(MQ^sAZwhP)up5XYj(=iI>w#rEFI7My!OTTHW at J>^MVE5x_nK at 0$n3 zIfu9tBS{h$$4O$XbDn2Rxl+ok#lsS00&nK>*-e{oyYrIsOwp!dOrUy>|KO>g at 98O5 zK=gt0uZReeBmn>zW1#g461fOOQ3p=MIZopwS^4@^(5TfVU#d<7o{CEr5LR+%@k9fiNck zHHjn{-n{d>3zyHVul80}9pFMCAD%h!(mgx(JTwE+1z}=iyet9bPN&|J#O=+-TRz9m z-0Xa^Vf*cWB1CnisAkfHo4(P_kqukEb>;N&9h>fYG<@GXZ$jUuJ94MqeC3fn`}R*+ z#YF`R5gt%BJRb#_um*Hp!=-B9>zjAq^PC7< zMU)p2x_S4AIvrV&(3SuI zAOJ~3K~&b_;>D?!7i1dO8cAWkG`;8EPk#T*#IbFKLM|`NYqGOmx^$&g>>c{S<~#0q zD~UUqOQ%lUPqq4vzP_IK^;F&r&uBOsZ(5wcI#TH$w&I*4g2pXl_F*7h8=r%cwlEri z_BQRj`_&8Yy#CAO%JMGf>nId*-j#DFKfC?T2fnX?GDJvq*J63%<>wwNmy7w8Xl%CH z^#^zDebut7DUpWJgq8?5MsC}Aa`KyBYdMxx7fpHHZR+ilFFovto+Qy_0x1~DL8vf& z`O;@M-~Y4Ta#BKjX%?AG=CszT#llU326Y3M)+Cw83Tnp(kxUk^O!CZ`<82!?W99jN zrqE-WbC-GNp1pqprfEO$Y40PS`>IXa)fa#8y}!SfvTf3_2R{Exzhl{Tj8Y5Y+#-`d zPdcp`OV*Mt?!4!bZ|>gv$m^%yI=*N2!o-)?vO9TR(0KG0{?1pJrO6 at -gmh6vH=#ta zaF6!|~ zw76 at nskShCn;v&CXliSk5AmITGc znW+bc*A1xUXlyo`u4iDw_nb%rifR&3+fYVFh^e8NTiJa6&HC)6{rR4CtH|IAUba+R zn!U2Fr+>ID5FetmF6opRdQf}evM$xDXO6cwZn^DSBGMq1mKgCt!q<}{z4wsyEsYn! z`#HWuWX*2er7LIL%sW3gea{02zM3soYV0h}&rTJyqocFAa&=1BHm#7K0dcBSM&$in z$?u_|`!|AMmX%yqO3!jTuEp7~g%qMSx5#yj_A at yVwz5WhgFu8JO@T}+MVFOi=UH)V z+4;WF={=8p;a{A6`}n8*AjH1U?0Z`o6BCe&{(q3Bd16@*aKng+6G=onrO0UG#08Z~ zPf)7#p5i_C|G6Skj>RgXx)Z5;qO2I{I2Ioe7Iv%l8#@MsL at Q}H#=IzsNszBE&X*J+ zyB4X$S_@@@OSj#5-wUujLk3GoMJq+s2R{2t|L&0~gw`XYmv;x`LE0>De^O}|F&{?p%su=Y|NvMs^ZQ8!)TW2R; z+*z%bR}~C$`E2&|n=e1I=fO`m0nUj~=G2=n-J1#h!b&@mT_W#0n$Z<`JS8upR z$Jlln2cg##ry84Y8-423=~wR!E5rF^OSy*LO?$GF at 4Wh{N>BeHDaw&>aQeh64_4Oi z$}hW%i=eeI)f#^A;Yqfxp at B9Oh`XN7wb at LTVJ6q_Uk!0{5trY5cJ338{lf2u2~BTT)(+QR7}5CWPYnFpCGiqcu8VpFTDNv5-jY)|B* zljen}E-Z;-UhD28BvdECtWs{e(XK7#szKsXFMvxWU+K|zKKQA&02Kmdh)6NB0*OaL zniRuY=hqkKdYbj6-l$p6Gs{|ab|SI9>srP$X&P5+wHh2dIOpJ8*Pwj;J3GGdITPgS zpZNUW__xOB8DV$X3e6IzDOOVDv?#3zI at O5bK?NRZ_{uq-6)8_?Yehw9#$n ztJbo;e0d7S)6m+$Xbo*Nj5a at f*ZP{;OHPDp#Im52vdm&GPflzO0&h*Wl18%?Z`^** zw}{jNE19xZ7L3u#If31hL%jnd)3~OXuZ0E?V0LD{ zzW2Zvzf$dAcNV}Bvu*eEtxFi(0dYNXx)!@M2`Ek3^Be28j-Gt``1396+^WnZ2z)&| zb^bvCjuFTTL|;68;%CaG+_I8elBCGwiYEh;Srns}EU1-+QDVXlQs=8Sgd4pB>o31~ z{Dp>NmnT{!@TGTzE}wYj4kGpRHUEO1otb%f(}SPT%h at jKSIK(kqaI=oQX=NJ= zUZf+fOD^7+NanmxS9P9xOY at 35T1y&faT)ERNRi*+FkejjIL<&RewpbRI0Mt?9gp`r1m(Sg)VRa{p;CbGPVfk?}{(;gPk!lI=} z`8s2msJ!Fuhn{}ewyU*9+3#WNFk_70BB15mO?Z%(t>jz_kR{%NIeRSRnc}6z1VHj0atT1|M+8tYy79+ at 0CT{zw)>+Mz7bUs*=}YTgeg4n? z7TcsJ41;_jACR-%Nzr8x2|6~tF)6OUR!UnEhDCug$~o(`8%q`E(p8O)0HBqUfsxIx z3v-KvmOOU#1>N7uMK7h- at _hiK-3(^uZ^|@ZC>LmQG9-)B2z8qmsw3KOB*qV&BT`*| z+nOOltT}Z~M3jPdx)Zg_iwjq8Tw#oXF$SLJ!Sg&Azo(a zC{?1U4UKlO+`Hf$r)wEQQi>W&^XpmQscXx7E%!0AD^&Wfc2zz*=bP-+sMTnu>{(rF zakRVSE~3Fhg#uM9bPCh-L>k-fxbHi!J^$o=gfMTNgL4+nI at p`vU3YE>OZMdJFWz_W zCqMuC#7oaTFgHJwTkaSE5g}8~%~l46FN39)K$>&S`Q)`@&#(bTT`hVc$>f5TA+NFR z_Pd__{&UamPjVYp_7MY6eY>(}PQJXaZ+OFtrzhUnuKRZ7t$V+*76 at A)ZPrTV-m4I4 zKqYO<&M7F7YpLhjF at w~~iItPcqWC`3IZhp)pKU=Yf}*az|E|wOPzrF&B0$REh^=n5 zHQF$>==9#b4r61G{rlB!KzmN)+KF?>8iUuaPjs!d_#)!>^sIOj^BQ9`uGOuz7LcMk zD>Gz5kD$uVp`RiBFFf_Nzdbj7d7tB?;GDx!tvgvhaz;M^K}0DciQ3JAW4F3h4}dX# zRH*dMLQ_PEjaXB>3FqvATXNuBPaoM$-gTfG1tI`w6e5t5UpYqEQD5wbiT5D_w1^U= zL at TWzTAX`V0LFEO+Uay|xs}jAxM7KeQ_)_Wx>gFWY&#q)-$%lbSP4=PlC_SZO_IDK z>Yfe2+9VSe28md9(s4#wg}{EErEV0Io>u9vLcP8?WNor)_(9x>f)}6ule=22`f>;Q002QI*VsII&udUv z5^Eb)x8oBy??gn*p+krGE60x6zINQPlx-?2&B4LpXRpki9`Of8S9N<)d1LtYtKVNI znd*wh9y|L^bH`_X<_99uV2hTHDNV_e_I%;hQqup3p%jD#;`<`$ts2?;z&e&%J6+3l zAE+U<+L9zmyy|t;YPK8R&rW$N(4OyyOtwlu|I5!j`HQnxFYSqw&YIMZ4+AD9#e^hI zf;BTtBFSWPu~H&di+pU)5m*x`t{dj436Qlt(tt=I$YdKL5Un#Dx=8XPBhs9mm7u94 z(IlRRkkTnLujwRnPtPDoKnxORnP+cOx0XXT%nPpN3^F3iQZFJhJ`PulUP$~fY&x4Z zcka3W`OD`|eX7w&R at E}1PBS|{eQE1TjK}kQH#oB8dk|?T)-{)?cHTwl_?Hhd1YO5S zWpa{rD@}A7x1gl4W6wP=^4zKBsx1ZJ_3iM_oH+iV?jK#2qjA!LujOhGWR{eox_G7? zWlXA#|Ch@})_{qF2c?r##dWPE^1*cUj~Aj8u}geyZ9$Q#EX~bsxN>pwz{kl*06=wx zE(vpm`dTA*olDKk>i{-f>6E3V}%$OOCR&B+36o&cQ?e`xzN{(w_G}o+~6wQ3O11s`Sc%_PfXNi(_5HVm3*iYuwj>aP)alNnwSX at K^xPNZm{0RvWXr#bch#y-$oL5 z6rsru&5_MJkNRG)2KjqsD5X&>^_=wm>;gP*$?C2<_~1=Xy1G82Bsn?n0`fba=!PRS zM>cML%FezWt)(JU*|?$}>K4zoHto9Wbt}4I6SQ(F^XSCr zkLIa^S_2SPo+eKV<*al0Mtxx$ui at mW(pn0I@={;_$mGUtyI&r?`=M_Y3gyMM)GGv0 znj8QZgt?~CW_5iJfOFO?&Ry9Ak}Q!b6udAS1dG8FUpZ#R05vu?rqF#Xh8hFZ_&D^@ zqcBItC%h-0JncXE_v)(89>Q zs|LQT1lO8JHXEKcS~Xdu5opyerX%TMUI4cyP3k8GL<9(HMdGm|KdqDhh1O9wK7Igw zeV{dQ=4HT4V5O8JpDmUmVlqskFPuJc-AjXv1EalulserzTa5i(%iv#b&Pa*{fJ5pc` zVZTvd>P>92>Y`Spv2OGBS2D#?#7ve62}C~V2{R>N$>z&#-_NX>C$?I($_wB9#?M+t zzhkVE#0(oU1FjYHRMW+3Q4dtmldUE-)fcC&fgsDnI81EJ681q}OfS{+jXpHHrP5xSfCJwHNOuLfNHpZ^lE9@`4^{ z+e3+$ z$h1FffkBXswvO)oGef54gzMxw(UmB)hYufq*I3+`+yY1#UUIB$OvFtQ)!4di$5VFZ z#77Vx1k$|P8s56?3`829RxMK)NG2yI|4OSkQId!@j^W5D&riT>i*iswLD%PJ2T7}5 zCA`iTj40n53O!W4mdd7$1&^KmPz;5c=~`lFVj|UQELPScVk<>LLINR0;Aq!#BCu(a2dKzS^$O`863(sP zHhMXe$*zeZCP^o_aQeijNb3rDde~XF!Gph^S%#gpmHOh`_O&KB^8BDvuJ+ABIR2QK z39ek(>w4RgL at sG7QuU2H_e^AhZ0p08m&s&nn|JSd-8rs#?5??kPrT<@JMWqm&ph)C zn}SO`ooPX&F|cXtS!vERKdgFZ7cWY=QaLV6EfHyG_M<3Vv=b8(e`TeTLx&DYE9wy_ zij&wK59t&bpmO3_9pxlL=?l3KS8s$JGj`$p>zWkXR)2 at Awp3#AkX zK^Q5eSDne$S(?6h=8hz48&X<>MIZg+-~VzHHP^JGI_EqsI%JjtL^9j%yzk{qCb#BY zuF+g7zWv$@zxziNw?SJvzKm5Hh at h}twx~QEo##63Ps?K?y-&wupF6|1OR~r2!G6d+JOg86- z*?eua<03$pA+?&dffv8?Ctp%bLj>9EL^i?kz|-IOgTLF38l_bW0icb?<(~c%!iY$z zwgTPofP5S{d>G=~Wh>4^Fw)RO%|f~7q*5Q;LGO9K9a_KjIfyirQnf(mThq}scknHE zm*MpA;lux5d*2qE*KwrRJu~N=|NQqKH-aEYkPt5tBvFnn}WXsF13J*YG=Ja&W>FLwm)6GXlMvPi95&O^(EQ4aH z_-;_WxJ4EFZ}}xKi!=4zj~zS)%nfuo00-ik#YGw&9pzVEId#hm`+orhfIrH16GRnD zj-vs{AaGk|u}F7%zxw4{UpaN^WURH$5~E7F>g-cr`NqFw8EXcoiq^_adneoo1R$A# z&=OlPoxT0%T*qxCNp!>ZqRb4{+H&{L{?~u`he|muV~iJuje^!mTgh9-B>wd4Kl+lj z*eltd6 at RI zwa-2I^ie==SY{F^??`gtI+%ecCw&{_(vfX6o5&{E^Wec(%S-bQHe2@TcfOKQeeGg6kV)~sYRI$G;Eqr+{ zs{wVhRxEX2Vx|TgYy~ozX&aZsy_y6R<$A^FVzhC>| zcUrB+O<%@!kTn=IYnS&B0`{*pYTSGf1KK3c8U at a3rm>r3iXAILw&%wRnzcf+)hKLq zJbv`cUp)Ss-~QhJ$Yk=>C=Al=IAU9^MkWk{eJjiJyNOwlHQ25ql~Qq`qkATuEiDpJ zT?#1)Aa{p?IhQdtHAM%${&j7I*8~>z-hq40xL&GxE6PL&358Eip0hYOU{Egp`u4=keS;!06~zlI`v$Wk6ey5io}NeBq?2oN4Pj z7nKVeuOXmHNn?x;Xg$NEglId*=?btApe$K7ln7KUU}{OJK23nAz2`Eol^U>Mbm9UE z)7!uMd`DOBM~-rDPkgX`Y4m1dV`e~5EPxp;k&dL0Eu~c0u5ovD1Y_-ndVKKkb1&s` z#ai3+GK1EMv_`kBNDu|&bEU;czx>S~0EiVtRUxKW+_1#g=5Wa6SX*w#O)xe##-Z<< z1a)LI2TZovxux%IC7rh4m9=p2%ZOOBR at 8-+*Mx&N;u>W#Ha5m#=$jaHWPk%i8T9mQ zdBd#C-jX)4%O at NA_8)vhGB*syO{p=Not?d=bG^8AOJEWS&~u;VN8g(V at U}Hj)^%joLG}InYpoR-$O5_ z{p at W!)@~KVgh(6`P~!{F{_gklh0b{?)tx z1K_H?Xwc};3amM8Y=c{81s_Ip;X;9g9vNFk4`2SjNEI1Ov6b`yV@= z&g7SFZ$@Si&>)2Jp8Zd}v2EAh$xJ%`nI=3TBIL5g+MWjv{-AT)u3uS}3t(u4NQZ3E zu2%19Tl@&jC~rf?Gvni2SgIMrCSn1tLTAsi>-qI|p6z+*aQ6d`u7-mx)dL%a^Wp3@ z;oyz9u1kAnW}MxCwCBVvW^SZ2xw1mL#JWArXcj++w(l5tjhPz`b3;-TCAk#~R~_xf zS~ijhS6isH&s_un6jlOSr34AF+S$C_;k?@2$x3ag)R|nv90uUt;29$`UWi)Mz>1Xz z4?gvZU79IV*jD1`hNrC+qC{au6qDnnEQ zr(CXB##>CZ6;g6OSE|XI6;s^+Vg_wv%V4Wy=u$dYoc-GKFO2u}?s(hxv&~OaasPVY z)oKJ*A|}F9QN%U?q%we5*|-1k|C!0;Z^x=&W(b(YGJu$W^w6_M_CECZf6rx$)z5-{ zAp{f(oy!M at pZhm^9(v*!B3>lTi)<*+pkm>HVP?j51-4qyhb<9Fg=Y9L%x0Y&-vJGFh;u8SZgoCeG`zAzCWzaQo z;6+4K2c~-8w(ZCC(#e}U{Mdpm&$b31IQTaJP}NL9gqir&t8z;!m5 at PrRx)Z3oB)8u zHf|52jg62pk^&^u$e|3al^Kh<5p1G#hpWsytQxt6aTG{?on3vW(tb9$9r^_d$YqPwEn9a^f9dPr`4?LTcE2qd&YPGQv~E;QO|`%@6DCNQ zscj1v5m_jwDN)8YO3aya7usIy_&8vYTM=%RO>h4_ueTEp z-iS>@Td&T}(r*>^#VKnV7FBuA{Re)2{>Mk2i<6+Zq1N5Tg{>BRsn5p)gZKOyGAs!R zWl7Yu{hprq>Xn3)N(U&Rw+xUIy5Q8eZrky*b07RKC at fh1`a%Bmym#rWgbB?^UCjlcXmCxOZ5bMGKwjToBXLGqxRTP<&Tt%$fcc*lSp zY-z`o(G at CJ>gK1v at tyJMH(vei6k0sZ?gop?uAH0RfbB^uRs$zlb#7ryA(Hb7tf)(fNW{QM{1m_K*=P#m|?#%gc9$u%N^5CR_ z3mG`dHt&7(sm8qro_zD;6Yo59dgkrlO5&)bb?n7)m|d^caXqY7(G#GgG>+?qQaV~n z6{Y;_rTZRv@`!T8B|}(SW*OQg6A>=kVzDSCSaILyp8Q$g&V473zxEg33xaBYl0+G@ zR&0#Wtgc;xlqzvuFY4;u{&Ry|K>;fiwi+H~Bnxcz_U~$LdHx at rJ@di44}SRG at oyz@ zSc>B)qjl_E at BY);yzF_Yz;#lQpUt0p_{lFHDRyl=FF-7l6idLg0yeI%h(^>49h?%L zvKCuXK)ux6JDtQ)p4f^Fd+!tZBLIRRKb>3X8yNf$1UHQJ;_WhJUsx|Fbps#({>QD; z62s6Fs*q-YELcjNnEvZ;hEel|HA~jQ!N=MO2Ve2b&4mnj@Xn$5THP2LPWt#L{#e9GMCO4E|TE|#kAlWtk!BLqmipBY>khD7#e!hgKkxD z!0Bbc{#s>eFbaY$Koo$?*BB}Yx at X(YQ%X4ViO>s4gPSrZJRejK8MAG1;oM##>#Y`Z z|K!w10YC(t$>z%WQqLKXat at j1lS|7LfTi$i+BWiF?AWCIeA3|=SLH(1of5elr0A?y z%G(ysp59xlRdzRnV8B|=0P+Y2kUBj_ zbunXSqh9GvVVDz^}IN-1m|4QdKFS1t_d#>j7Z4 zyl}Dq1I&tCu>v80FLW6GWpW^j_$2zI(oLA>+0Kil8NRLcIH#HRCNU}+MHK% z{48XxwFO{VBuNFdlw+dIg|jDjEu5Wwpix~JuqMe`B8Q3OYPBL^rBabpD)9YGwbZli zRQI-lvzR7zJSf{B%LQNfFnC4$ZlZWdGXBb zp7N!+U6qyj-C at w!N at QIjWbCEV*(3`amUteACff}wRA2KR)Yc*z at qCj z*&+g$tTiPeL|*GCfA-{w`{vGm^hg}FI<3)ZVp0f5LP{f*6J+xpXLsx#db at AO?lX+o zWTLuIP$A%obYv|KMRPD0#z&7HwWFh>aP;VODom at AC*)Qud0XYu#XU(F768Snn|Z^2 zWnyp~x7FF#e;OI*Bdh1~nZlAE?rsea-#mkMVq!u at g?*_m7fKQ0c3?aBi^(5-_uTBv z(@7F56nZBqoxekwqx1twjt~&r8)8P6W~SUN~U*Dnbwej~$zovvtSMWwUuD zumr$GiP9%vb;UQO1pp;15+r0z(<-irSk$mdNm#VXvu<7pC;?&)C3;uW#taNd7TF0& za@|3!gke~NiXV=Q4Cxy&2?20ya#9`$axP>c%_5siASwzJc{VmHK%^MK5o>q)iI at a{ zK>-O1Y%x<^SX;I>U0EtNLw`nLYA2-?ijvS+5>jQDjLTQm1Yib63EFBKB8r-HymG8< zy&D#z!-o%BW`@bhNqIi$@KV;MWlrT3$pWIyYp_{iL<*%)%p?$*2tW%E5g|0uK)@1P z(h{*mml(2$m_vpPAh-alwTy_EP=ZE+gbrVh#nTEu)9P3K1{+#u%(&%dtRcGCLI^ zxg2=STDe?~dxIV9`;iJe{gkUILjYMsn`6c-5T}vRLn#!IQ3!}a2qwV+g!Au3AFa^wV<9-(`nMf0( zj6rdO04i3>YPRY&k00NyM at Mh!55PZu~PESXL6{Hnc#~wIU zL~=A4DH4I}cT*j7nRLh>5Yl9ZI62laH2ki{dj&LiK00BCjb@!b{jHWu;iB4PpRt zh*PMnVxt4Lu`IVDh)eOz%+RJW^UHJsFdjZ^j~qD?XXV3I=WQ&S*mN>-MLSLkNqdCs zpj}l4OiYH2 at xVzK+*o4}0m!f>7oz#2Q)Xyrlwsjb3e#DW%BzMW!A&Be1c)p6$u4mc z5cvudO>R_6;wU_$laUvOFFU~wA0DvDtNJOrWL3Z3vhwfl(7_6Fltnspr)9t3Y$qSEQ at kn ze&!iHx|+O%6B83Qy#M|rx?n}AQmi?Svbqoj!8>MjboUJv2_oXL zW5?v~jt(!>ab8*KA{L#0Gxg)&Z#L^UR3z)+;8J(rMQgE!c>UYKn~uL(ng$}`7&C62 zo|bN-A-i%p5jK3`)hh^{YyY$Y5a&xAC5BVACIJ*IzzMq+3clI*9ZpPufcs}8)M~QO z$cUP&@Otz6xsa9{4N7u3JAdGS9Yf@?u`xV!XjFvZDQRs at hFM=U>J{v|YHT4fT+4OP zLiK$r`@V&#DH z6IwyWmtbP)C60)tK!7GF*CQvk+E( zz4h%dYTob)g70Tq4}bpY|1fah=l%+;I^D31`H#zI8)MHuuiMGzx`k{$z_GD$gwatL znwYq*yL)D2gkgMqz2f+-#>H`bd>lvDi#p$6{;{#qD}=RX(!%&S;Ly! z?a%*Yv{o-~UJ7vyrBe68v)}#4|C|ke3}DX8EmfB%VJSSaiBIvG=YQ%}2!F?ctCGGl z4AZ9Y?<6+T)ho6WH5LHX?XwXO^{&i`p{=w8i}%YR>+{QtL{uY&l~pT6hk zQ=$VAcM$R5)XU%hCzs~WJZx at K`oeKsv-`eB{``?AzdC_}Pdk{oa4Pty{s+%KleEjf zJ67 at O?+VuJ at AXq@wMW_Cf(^Eju6Aj4^0w^8jx+2gO#{9xOq5uBkn4bySR&A z10Vv%+ZRP5*s+8ev{ZQi_~bumwHi0fDFIl!9bD at Ez;V+Rw6I^!w78&Gf8Mh~3&<=an at H9oJUlp`ZEt_I4Gne!dp=lgc;eHR$#9VzBi lGri*b7g}qHk+-BA{x2U$r4mGCJ6-?)002ovPDHLkV1gF$4w3)> diff --git a/src/public/images/map.png b/src/public/images/map.png deleted file mode 100644 index 3d8c9fee4bcb027d0b4d7490bb80f061b9ef3879..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmV-$0gwKPP){&gl3px zWbpOt7lvQIelxf at I&4M~eg?#6fv%l}(`G(iJ_b%ME(QZb4G`A{S?=b|8z2LXvD$q8 z+&PB6o^A&8u=x1#Bg4xVFBnwS)EH*Xn4ZSMKmvI8?j6I^r%xE}- at A|MXAlTn7s$ZP z%fe7BTnXmK#Y96q`SdCN00V*bLF?hp27yIOmST1G%a<=f&Ss#Vv(W(|XEWkUp149A z?rfj}b!-}e at wo5Uv15*kii)_Ly`S;_|Njg)G)n=gB{G| diff --git a/src/public/images/minus.gif b/src/public/images/minus.gif deleted file mode 100644 index 9a8d727d70ff5161ec18c0cd0156ae8d50a23b75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU at w$``4~=2xoOmJxRJ?YUCe?7 p4c<*mc6tvw4?K5dl1^^H;N?iZ| diff --git a/src/public/images/move.png b/src/public/images/move.png deleted file mode 100644 index fb181d554c0aca1341c6998f31f9b62f99efe089..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmeAS at N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhEX7WqAsj$Z!;#Vf4nJ zaD4z_MyE9Xom?)`MRBiH{g{wrmwv$}mYj%p~bP0l+XkKqtboh diff --git a/src/public/images/network_error.png b/src/public/images/network_error.png deleted file mode 100644 index 979532ca24998ab0306a99d75101c10277a6dbd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 989 zcmV<310wv1P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG_ z5;Y#$0+jRs00Uh~L_t(I%bk*KXw_vH#;^N-&hcz#XYV_w9o at +Hz-AC-RtDN4A=rwF z5~&Y~Rv)UFWg{s@(1$FfWYpFtsleW#2pq9SOq)1yJ7!E{Zf&bJ33{7zZ|>#%pI;x& zY?5w{t`E<1^YHL{uKT(lF^}BL(%jfc#pcbNNw(pf<66?SE({Hxr?e=BGH{vjDfO%x0=*HFuX~lO4`v;Me{u z4J;H|QGO4SIP!i8Oo;D4DZ!JmZR?iV%opU;0r(tgYQiKQ-IR|zQ_9!x#u+}5pz6UG zl4xr^I(Pe53*0$aSGJZ6iR9<2xNm(fQjpb&Oxg~v;JRFojkn&u at JyXcQUCTkNFFuY zVw`Kf9#2`Agh at 2K7w5y8VkGhD2M7Ms;T+JZ at rxu1W5gms23r$MpNewBl59*OClukQ zhJ4)F7&k7?ptvB;#j$a~pU0_#*I(I#nNeSzfW8oZcaW!Na@?>c2frf%y-}KKm*L5H zwYvI>AE3*>MQ>L(nc)m>UYf&nM-iM7bcx3LI8u&auOL^gu1ZGC#p|AcOmM2Mo zc0T)@GCWUj?hZ at -h=j>xazW|OKO&m;r!??eNER{)PiCInn5UPXiK;LX(DofqX>xp2 zA`RrrgCAoO)m!4w7lt-LGJv041iew7-loQP}vrgHrQJp2JSZTf){00000 LNkvXXu0mjf9%#$R diff --git a/src/public/images/network_trend_check.png b/src/public/images/network_trend_check.png deleted file mode 100644 index 7639ea8acf6d303c5955b2d714e1d2a299c80e75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 749 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG_ z5;hw4LIW-U00M1EL_t(I%bk?ZOI1M}#XsNsR6_c(3HkvkQAA>ekVp|N!l3>XH6bW# z5en9$^krD0AyyP((!wl4Oo@~bq99w;CJdBF%1DBTLMnRaw79zQ6+j0meT;5 at r^TDR?0%AX|SkxHbQo871wuOzP4$$vG#vV06yODS&gSuk}&V z>S at w{se`SSHqXkZziNvwMR-#+QpJ2Z9k^*4U+mY=e3gdgt5n<)kUL4{oKsYrm8)dx z?GPS@}H+chnj8s;)Bdy%Cec_nG7yEm57-ZM%^MLkcyTnXm^1_$8hRYgp7 z*fOc4NGb$dFU2T7=`exs1nW zJ~A*d{7NJfj?C-_GH6+*pjB4&!j|(fjvcq~>Ynp(1|uVm+2*D2%4y+F)lQk`q>Q&m zK>k_d=n)SyA&EC{VXno`a6dFGayrTXd*|hyG0Mt3-oF!bZ7!26OUtecCto?0u{9p3 f?8y37{4f3hq9;DQ6 at jn|00000NkvXXu0mjf9??+H diff --git a/src/public/images/network_trend_down.png b/src/public/images/network_trend_down.png deleted file mode 100644 index d429172c00d5bccd09a0aef62be050891a726b05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmV-n1D^beP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG_ z5;r5TT)Jlf00QAjL_t(I%axSdZ%k1b#eaLxOk0;ur`1%Xgb|%lC8E*72nf7XP>>kwbr-x zQDQ_;00z($O2B(xT#L9U72;nNE*$h#`rTVb9^EJT>Lu3TAhzRDv12E(U3*x0^ay3O zE9V7OMnnpPL>Rn!fvLBzDOnF~{I3{OfYzuNZ#5hRKLTro4{(gQgsiEP)L&DM6EKrRH$yjSEk(wIp z#bwUSFm{WJH6Mg6g>}sDuX+fA>022dprrs6gS1QBoFPKSDxtT zvZeIhyUWzj0DsOU44NNLo?w3)CH1BqJ7?h-my&P^(GBZaxN#HK at Bp~BkBJ9dT~$T= z_ARzvx|-kdJPwNpskWyWE6bW|Hz?n>oltoch2rbIJ7k`>QCeGzJv8VgONwgCN*6HF z at hl)5Kr5v{D^_2>NoB(U!qE!PLuIILJWMw638l2phGLagEGFI6?PFPx50(4s2$e?* zv1;GE4&w at rxI{uBsv_ayo$&i79<$cUMHmFzwmF@#e39~1+orW_Y;NJl)3#ZWQm%!u zT- at 9=#<9V2z;SRKhpvwwIGvgPOLBp_o&-H-&k)_Y+ZQR1<;+zPr2<3mO~g5s&H_3J z>Ze at ao1pvhd18C_d2tqllHf>m{<$;$iIbDlh5teT)ZbYt#s1#U^t3b+ZKy8{OXag` z&=>{XA3kz&A`=*t{@YXoz==LO&z~h$-+-Gki}Y+Z^SJgKj&r55T at 49i00000NkvXXu0mjffEkVp diff --git a/src/public/images/network_trend_up.png b/src/public/images/network_trend_up.png deleted file mode 100644 index d2476f8d4dbe10bcc509e2ffa919690d1c0eabf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 837 zcmV-L1G at Z)P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG_ z5;qf;g^J4n00PBHL_t(I%Z-%HOBG=h#(!t-wfxAdnHG{|V%J;wMXQR4+DI)TlOV%g z^an&OgaSX%br3;+KnSf|R0w5XDpm?s8_kUsXdhNc>P5 at BbLTxRX1a~nymdBnhM9BT zbDrmUA5m2W16cfbC?M;9wpKm<5#L8gxLa1j+{p8c=b;(G1ao6_fO||cM=~MMAaZ7 zsDOxIVXzcx_wJ#mD1TKeYYm2e3|2>}z1qRTvths>VxfT_3}F2C`dAe`h1saO>uYJK zCQ40LH}TOIsi^@(LF9L?t2V2S#<&&90SsY)?|t_uI(aJ9zyc=Q+DNKPRwzVy^Ep=D zPWcmh|o}X#jhl zoR;}zg16F>lu_PazR3K*6O!>oZ(X&R>+d5cT9qOxJ?zCLB6YQE=n0Dmn~xr2{{92r zwO+!p6C{nxhVTX=dt&77t0D1mI)!VHtQGqwrN>XOnm!9rb=6&7=F|0SsB16 at 8?_xU z4#swH6E>FPU|a{a6R7K85=ltdOpTAzF#3wT9p!0;q86dNd~$YGlC`B60yo$AnhdH~ z)LS$@`<06G7rcg=?oxhDNlOdPw{K(>Zy{V5 at c}0wDM{rEA3w0PbsN>KSJnzVPzMrX zXJ*BgVd;c=TD3OfGo?pz!WG%B)MUH59ot$9r at x&yy8d=`6!XzJq at RxT6Vu7Q(DVye7oJIK at c3gk1v&AqJEy at I=#fX%DiT> zgwt;Cji=uOR&wuvFX-87Ln(ttE%*Wa0e<4-Gm65zl8lJNxP^Jdccbj)PjEM;MFG`U z{s`wFyC}>r+FF)n1N3~TgNy2LkO2GzV20*VI}uiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU at w$y4*XmR1y>vzmpih{E$}o|KC(Juvl9;ogEauy5=OfK diff --git a/src/public/images/slider-bg-1.png b/src/public/images/slider-bg-1.png deleted file mode 100755 index b7d806ed630bb92ef4f8ff94108ee9e3bb07171d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmeAS at N?(olHy`uVBq!ia0vp^CxDopgAGXfK4bb1q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c73F!lIEGZ*dUO3C=K%$t)`v4Z_w4lB-8uJ2;H|vH+w+oy z1*$IOeW({WVfn#BsOtTtsM{_}B3v0iM969`)xHvCE2D1AsJ6TBEMr30l+9c}L`&~P zGl=c)U{^6_PtaUl`)a$X^lX+NX6@;RHh<(YV91^-+OzI^=L?|C44$rjF6*2UngCuv BOOpTq diff --git a/src/public/images/slider-bg-2.png b/src/public/images/slider-bg-2.png deleted file mode 100755 index 8b24cf0910fc24c075e44d324ab05ef2fb739ddc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmV-M0lEH(P)2N3a1T2XOG^5J3rxRD->U5tO2~nPZ0nB diff --git a/src/public/images/slider-handle_select.gif b/src/public/images/slider-handle_select.gif deleted file mode 100644 index 338d2445a78753c15cc5c4e72c734eb074d1e599..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13245 zcmeI3eOwcD9LEnu(MdiOrj^xk_C&GW-5wabwjphSm@|_VhH2hzw{h*^uG`TDk)aWq zW|^63p*>KPX=rJWV3tx*SdkQ!lulT~XBOQaYKFa_e@*$9 z1uK&zfx_`{IIIclG`#4=Nt4Nh6IxuWRm+4rR1uWuh&mXW7 at H(MkDU!MA}2^3A4HXT zX%}BESujjlDAD>4M+=FCf+0=cK{X5?z$3JPlNtg~%q$n0H;zV1jBSeT|fqaV3;nb3&;Qv4ATX50T}>- zVY;9$AOk=!Oc&GzWB>?;>4Lg|3;@9}T~HU00U#Kr3+e(g00hHyL0v!wfMA#|s0+vd z5De1=bpaUwf?>L#E+7LyFiaQJ1!MpShUtR3fD8b^FkMg=kO3h0wCPeMUwW`X`FTfJ ze#em#{qNs at djCHD*PnkJ`~A0HdyXFY<>#Lc|MpIE!5?(xS~uX=RlBP$+W{?M`qA6R<-lEwEeT3CB;%{>d|SKmGF zuBtmLD zRu8i03mwLqmPzxrXN_ENY=~Nw);3{b+nT{!=GP*lyQRhzJ%zK5R<+VS!!~SPNgW(o qI(Bix)b-1ESGk&Yh1whT1iI#6bxWD?oh3Eb&L_t(|+U!Y<>A z3c5i>Jp?^eP!V0E8&V?GV-E$r7eqG*G_oiOk|IsA5((5utF1(Bb7$t9)Bm5DwcXX# zZLxyzu;2V={(on_^WV-KMF;`^YB=B at jw$jf^1nK?XoZ4<^ncZdc2%aPdXK59V_CSJ zb8!_wTs%~L;ZY)l5v@%(;lSZUWSu^~_eocKgWyJA1lpe76m>NR8tQ8HS0qXvf;NWT zg_y2sT6ym5dBB73B8(-A%1ErNzu&a-+?j*%kab`@-wVM{MMq1EkqQrI+W-3^L10~{$n5NrTMusvb{zg5-l0#HGzil^Es z>=^}xMX>IMAJ*Ue0*aajf}03t!;~_0KGTR zWgXw6qcr4w at 4MH~cO at BqW^`KtwbUByG&|s3-{VmN03KxX(U2^iZ^uGPX zTp4l&-=qinU~%Pg2n_ba^9S`K&z6=~pniocE`j9MhNZ}#n80&%7Y2Mj-*%Llh&((+iqY1((X;b8jy&!+c6eiC=zWiTcNXdzEtQ#J&>BB+6govGb;nO?A>Q^m^$PZ7W}%W77KYE zl7AF-lTG|pvs3W>=+VP)`p9N*>79_B;RR2U%W@{V`s7R*Z+DlzF~;K}r~dhxnF)Wlb;n0AnTU&=;xp_}H8_0s)+8MpTE^5W(dTyTS1*d02=62wT80pP zB*Xc}BBy91#fVCxgK{=Zaw76SdTtBn(;>z^V@(~M|3~tl0t^5s=HNXcp at pOX0000< KMNUMnLSTYP>dCJF delta 908 zcmV;719SZ22ge7HNq=ccL_t(|+U!?NNK{c2{_cBkeE!gsl}{{m3 at IpyGRlMsD#%Sm zTJ2g?5VcFG))j4YQEh^V+}pybMG!=^sEEQGC at Lmm{K1SIOC9`~d4HYr-gA15GdlL? z#si1 at Jomo)ednC--gye!wy{tqVF7Isd=dP=nvxk1Lipzj!++PB64_pCY7L9|g3UPA z9PqmjcqIYbxs2z22i)%>lMQ9gz{_a!p+ha5K<~-yJB8YD?|O4ypwm^##8R at XE#$17 zr(D3^oI@@TJ9}5yH=aRc?YXbdY$|8o(0m1`+UT-PMj?i-&fK;C)a8mU|AL(R%6qar9^;;+XQZ!XgTv1EVx{1=TZlG zay+5aOU}U{a30wU^&J*}uEA-n$e4BNao#{(4M~kK at Hd>aCC*R&~27(a^YtGA8l{0m|ft z?uv5`a9V{iP1BCkxPrWz%6VsM%1GZ#ZzAUqTv7$HUFX)Mm zz>-yp(UwAYNl-PM^3MTI62({Y at 8rCio9dT4LVwj|2q-4h;!(s05|o^Uqpf>Uvr)sR z$N(O9bR#}wK&vRCY#Ee~BoQ$6IR)pBRgrJ+iN5ZrT3hGd6-FNvshu{Pz%K$IfjP=% z=l+_en<-~){v2Blhi4U>-yqJ$ zE`MLad6pvorY$c*C{%(#U<9g~TQp94xVLoMIYgXFcm#w;Vjkd}dE#T=NZZBzmoEH` zj|S3hOU|BW{G_U$;!C~r|0kw_z>%v3Eu}X-lnb^X%HrNvoz6-BwHZTaosn!i^}uDede(JhuLwH at DOS^c(Vd z(evEbtJzZKaDPRE>$u`;@O8yhC~<79f8E8(~< z+ZjrE_O(TSuYT=kZvE)1w{prU zuvmVa=!1e`V8A)>cWR2WK-N-Q+|mq>Y54S%~68e=MM-pDOCa5G#3nXC>50viJS#K{rZwRay(rL#OPNI@*o zT-mv3H&G@~rci92ZsqBR&uvRIP=YdqWQT*3B at Py%bVe^(zH84u_~zhIq}RbYr}R0k zGk*&RZr28J$w*41^Y2^ZwHZ{G&JFKvVnI|n!3ph1Hg;{K=2Z44X=puxT#Xb7tyD+(wivJ3&F zn1au-$$DQ=1FgU3pNG4B at 3Rk8nn<==9n18jv zi4AoQR>~WdWc9hOuFqOqTh~M)k+7y|psFfQLtWQF&t{F(zxRdet`xo$f z%XLU(MvTsXp=|MBqW~$OWKpIC=&Wm$0$1NCHgaO)S{i$TZl~@GNziO>tKvx~WD{BXm*4E)`S~aUp_>7OY^kCQ>lc)M_)SU?-iar|5Tf;2V)DJA zTDupA4o-?21zS_rJkhExz_$@_*h%==e*te*vDzB)oPo2ndGU#tCxFY(x8Es$5?{VQ z+!g2&ORKT8Hfs~?wH$QMb)fIw$XfdXL~(5G zu7wxYNA(*(ZGWo!gd>TOZZin@$%zFy at x{j7*xY9pVYddj++P+O_rY$dNkH$HH0FJs1H2Z zlDRt&_byp at bj{hJ%_lY9%=lZI^}ntR3=H)5_2rLdvzh*SJ#sFcPN7_`%*@Zvk4{fd zouR2~oYZTu+JGxf(D+8jtbP0Uf0fJS29wETBArenk%)RZmtnnLXEjTu(vKgEk1g+! u`Pl{d|8{2E at Gx;R|2}P<+c!o25nupBEGyh0U05gp0000@k+ at umlW}0Y}(EK`{_1 zAm_j$vq&)qBsj20IdOuc4;)a=5h92aLO>3YI1$MqViAOF7_l2+1VRxC+sxRrb8)b}b{qfLuzfX4fWp?QlGNi5<+__DQB~O=&`BQgpjI2C%aNq2)o0nG@ zdiiHc>BYfqyEpra+>5er<$#)=*8Z6!E4{L;tfP{&!c&H$v2Q!)_i+CIAwmvs+P>$o zZQH}hKcVOnI)8Nyovcg+T)uGXL~!GlUAq_bEE!OP0Z1k^2!~V%A**T-f`I at iiVW4N z2}Y#?x^6(ZtV0PolgsxTMx}rB+Q at MP-Za(7732h^Qcrhx7o=igh=qetGOCbHL?EmN zkd at k(OL|qTPqGEEPLvGDOqAgE^~=4Dq+LReNU}Wr-hZttaM!YgP}hrMWfpT*=E%`W zXO)~1Qq>6VCBXBYjl62yx``=Udj7XRAkxtVSDz^`v%3!l)^C7M7cB!Ty#SVfy%sip zGYIoP{|d(R6g16Q3}5!Ig2!?j at N-A@?~OJRxq&>6ta*Z#bTb6;j at z0v_%~C4$Jrui zn0o$PHGi4VcXp&88C79cYXZie+nI9YCeJco6)dbz(i)hi1?|lm5K5pm8HH#l01 at O= zECkJQhr>YyQd-C<8a(IP@!#P>0SRn|w_)4BYz8v69P#W at fZsRj_@^xuL2%W7dnLp% zDpT_O5Ft*#bIBHZUVu!9Exr=sADmY*MPNlD0)NDI`z-f`Ki4&w+TOC>61XtJBa^8Y zCPkcqQS`5UG|Z zt)=p18Ra at pU&S|rxsAyexMiB+4x8fPS}WxsU9(zhK%Cl|V`9x>TjesIu|}twxJrJ7 zrGH}nQn6g=T{yedO(_En`#fh(`I6H|=FLdML_rt(3WASko}Tdo&O)cT+Bzo)WpGzpA z at oDYT=T3Iu(ZdI~u?jP$Ssni8{+$DU!BcaFUV^_b41bUNAKYn2CmBSRdxnp`9CFzY zICBk{t}*H|nXEp%Y3Mq^{D6B77_Xa7 at 8Z|%$3G2kjs6p00F(Z4zsKNb4FCWD07*qo IM6N<$f^zEL0ssI2 delta 932 zcmV;V16%x+2;T>gNq>P!L_t(|+U!={Pg7?Y|DB%G?^Xf at YC#amkj=V*I+wUQX66T> zi3!&x{sG<*z2ah5#$uY)=Rs3VN3-s22vU~nMB7o19!GE>s{2AuwIhYq)QvL^F|V?Lk% zqYu4kX=#DGwhrQ^fOvccPiLZt#h&8v*v7Oc(0+G+<~rgvrTAc=l`&e3nOh+Y$KvXFrp{oY$LhMhb3V zO&!ONcOacv!ESdgL{Ua6mBa_lEoj`+n15r2Vd1K(#DD4rh>Bemuv)C3Yc*e8;B*&7yW*hNi^^RND1WjHkEae+s|_O~!w>}lP2 at CUu_#jH z1d4pi+uK?8txLVTdh6b1w<9M>|HG+9_!XCzGuvIhQ7&-GovcW?3HmTRHt~;(78mA= zJmd%E0;fcZ!uqSbf&O3Na5%RNqmf5j_fC at ORFbI#!Ipm3J8Vs zCVwt`LHaz+cE<3wgZAGFAR2vwxzz0C at sY^4+X3IsJU3|l-9 at yjsd?|`cBj*K=+mR; zl8M=Tt-HurjYp at y%ZWnp$y79;ajul(W1ffrQEa2}XrS|9E)g5u?yIqgG7GMAvk9?AsiP{4I0000#5u&OIDnf!*3dE%w*dSK0KnPT}AhAHKSo0T9sTD$k6^npc2|?LJpj23)h_-2+ zHj~Cp+{Ae}6Wj54#*gv!+ at 3qNQ50Dbk1Ks+&-i>lpL@=ktKjgZOifOnWsJSan37B+ z5)+nX3(K~bgzL_7&ad4_rEXH3_}g#@j3r;0{8&}hkKX&>;@DL3JYw+#ITS4D%lLI> z1~Wfj&A6 at Bm$Sd8E>XODSZ0he`{Y70Sy^0K7WJkpTCNaHx=3XUj+k5A65n2(5i&-` zN{=+E-L`q|<(FRd`+Z+r`s(X=Xy7Cw0fq(_upJjg+eOB3kS#R9U526I6aLJ?tRO|J$uJOHzp$Gz`9N9_3vc>Kq;^+Kt1Ww%h!y8+pYBh~T#Uh$!R zXCA_BK?(E`q~9Br^3FQ8(zD3TO(ROMwbXRYG%Mev??3pSyyn4IPkH-%_>D-2T|W^Y zgzv};xTEia2NP)6WoisV&)^V3M~->h+_-%`S2oQb=I^C1lXp}0az9Xc=e5Y|;h^%% z#B(EX5X44q6(yTN&nKosJ)sGo<{S3v%A0Gn{kz4z(r+uP*;#tDO|sq3!YG)wu50;$6P?HP21G{?O(&>dLqC862I3E#!IpG00000NkvXX Hu0mjfwm{v~ diff --git a/src/public/javascripts/jquery-treeview/demo/index.html b/src/public/javascripts/jquery-treeview/demo/index.html index 7087163..aff15fa 100644 --- a/src/public/javascripts/jquery-treeview/demo/index.html +++ b/src/public/javascripts/jquery-treeview/demo/index.html @@ -255,8 +255,8 @@

                                            Sample 3 - two trees with one tree control, black and gray theme, cookie-based persistance

                                              diff --git a/src/public/stylesheets/components.css b/src/public/stylesheets/components.css index 708eb0e..540c413 100644 --- a/src/public/stylesheets/components.css +++ b/src/public/stylesheets/components.css @@ -18,6 +18,8 @@ } .header_titlebar { + color: #4e4e4e; + text-transform: uppercase; background: #979797; float: left; height: 25px; @@ -29,7 +31,7 @@ .header_menu { padding: 5px 0 0 10px; margin: 1px; - background: #CCCCCC url(../images/bg_menu_big.jpg) repeat-x top; + background: #CCCCCC url(../images/bg_navtoolbar.png) repeat-x top; font-size: 110%; line-height:1.5; height: 26px; @@ -80,10 +82,11 @@ height: 28px; border-right: 1px solid #5A7A8E; border-left: 1px solid #93B2C4; - background: #000000 url(../images/bg_toolbarheader.jpg) repeat-x top; + background: #000000 url(../images/bg_toolbarheader.png) repeat-x top; } #toolbar_nav li:hover { background: #4B95B8; + color: #FFFFFF; } #toolbar_nav li.current { background: #4B95B8; @@ -127,9 +130,8 @@ .no-grid-items{ padding: 45px; margin: 50px; - width: 750px; height: 150px; - border: 1px solid #E8E8E8; + border: 1px solid #c9e7f7; vertical-align: middle; } .no-grid-items-text { diff --git a/src/public/stylesheets/default.css b/src/public/stylesheets/default.css index c257ada..911d795 100644 --- a/src/public/stylesheets/default.css +++ b/src/public/stylesheets/default.css @@ -21,7 +21,7 @@ hr { height: 1px; border: none; border-top: 1px solid #bbbbbb; margin: 14px 0px; /* ========= TABLE ========== */ #main { width: 976px; } -#main td { vertical-align: top;} +#main td { vertical-align: top; } /* ========= TREE ========== */ diff --git a/src/public/stylesheets/jquery.jgrowl.css b/src/public/stylesheets/jquery.jgrowl.css index 7f558f1..95dbf48 100644 --- a/src/public/stylesheets/jquery.jgrowl.css +++ b/src/public/stylesheets/jquery.jgrowl.css @@ -76,7 +76,7 @@ div.center div.jGrowl-notification, div.center div.jGrowl-closer { div.jGrowl div.jGrowl-notification, div.jGrowl div.jGrowl-closer { background-color: #FFFFCC; - background-image: url(../images/icon_conf_message.png); + background-image: url(../images/icon_conf_success.png); background-repeat: no-repeat; color: #333333; opacity: .95; diff --git a/src/public/stylesheets/layout.css b/src/public/stylesheets/layout.css index 981ff22..855d61d 100644 --- a/src/public/stylesheets/layout.css +++ b/src/public/stylesheets/layout.css @@ -7,6 +7,8 @@ html { /*overflow: hidden;*/ font-size: small; + min-width: 900px; + min-height: 400px; } body { @@ -45,7 +47,7 @@ a { color:#000000; text-decoration: none;} width: 100%; height: 90px; overflow: hidden; - background:#535353 url(../images/bg_header.jpg) repeat-x top; + background:#535353 url(../images/bg_header.png) repeat-x top; } .header_image { @@ -98,7 +100,7 @@ a { color:#000000; text-decoration: none;} .toolbar { margin: 1px 0 1px 0; - background: #CCCCCC url(../images/bg_menu_big.jpg) repeat-x top; + background: #CCCCCC url(../images/bg_navtoolbar.png) repeat-x top; height: 31px; border-left: #FFFFFF solid 1px; border-top: #FFFFFF solid 1px; @@ -128,7 +130,7 @@ a { color:#000000; text-decoration: none;} /* ----- Right side of Header -------- */ .header_info { - padding: 10px 30px 0px 10px; + padding: 10px 31px 0px 10px; margin: 0; float: right; text-align: right; @@ -143,9 +145,14 @@ a { color:#000000; text-decoration: none;} #help-div { position: fixed; top: 10px; - right: -1px; + right: 10px; } +.headeritem { + margin-left:5px; +} + + #textfield_effect { border-width: 1px; border-style: solid; @@ -158,7 +165,7 @@ a { color:#000000; text-decoration: none;} height: 16px; } #searchbox-button{ - vertical-align: bottom; + vertical-align: middle; } @@ -169,7 +176,7 @@ a { color:#000000; text-decoration: none;} color: #FFFFFF; font-size: 110%; border-left: 1px solid #93B2C4; - background: #000000 url(../images/bg_toolbarheader.jpg) repeat-x top; + background: #000000 url(../images/bg_toolbarheader.png) repeat-x top; } @@ -199,8 +206,9 @@ a { color:#000000; text-decoration: none;} background: none; } -.ui-tabs-nav a:hover {color:#FFFFFF; border-bottom: 5px solid #5599B8;} -.ui-tabs-selected a {color:#FFFFFF; font-weight: bold; height: 24px; line-height:1.6; border-bottom: 5px solid #5599B8;} +.ui-tabs-nav a:hover {color:#FFFFFF; border-bottom: 5px solid #537585;} +.ui-tabs-nav a:focus, .ui-tabs-nav a:active {outline-style: none;} +.ui-tabs-selected a {color:#FFFFFF; outline-style: none; height: 24px; line-height:1.6; border-bottom: 5px solid #5599B8;} .ui-tabs-hide {/*display:none;*/} @@ -276,8 +284,8 @@ a { color:#000000; text-decoration: none;} float:left; line-height:1.7; list-style-type:none; - margin:0pt; - padding:0pt 8px; + margin:0; + padding:0; text-align:center; text-decoration:none; } @@ -298,6 +306,7 @@ a { color:#000000; text-decoration: none;} text-decoration:none; } .selection_tools a:hover { + -moz-border-radius: 2px; background:#B0CBDE none repeat scroll 0%; } .selection_key { diff --git a/src/public/stylesheets/ovirt-tree/tree.css b/src/public/stylesheets/ovirt-tree/tree.css index 441ae83..ef1f1f7 100644 --- a/src/public/stylesheets/ovirt-tree/tree.css +++ b/src/public/stylesheets/ovirt-tree/tree.css @@ -11,7 +11,7 @@ .ovirt-tree, .ovirt-tree ul { list-style: none; margin:0; - padding:5px 0 5px 16px; + padding:1px 0 1px 22px; margin-right: 8px; } @@ -19,6 +19,7 @@ background-repeat: no-repeat; background-position: left; padding: 4px 0 4px 4px; + width: 100%; cursor: pointer; /* maybe move this into a clickable class? */ } @@ -59,16 +60,16 @@ } .expandable { - background: url('../../images/plus.gif') no-repeat left; + background: url('../../images/dir_closed.png') no-repeat left; } .expanded { - background: url('../../images/minus.gif') no-repeat left; + background: url('../../images/dir_open.png') no-repeat left; } .ovirt-tree .current { background-color: #698FA6; - color:#000000; + color:#FFFFFF; width: 100%; } -- 1.6.0.6 From sseago at redhat.com Thu May 7 14:11:20 2009 From: sseago at redhat.com (Scott Seago) Date: Thu, 7 May 2009 14:11:20 +0000 Subject: [Ovirt-devel] [PATCH server] fixed bug in 'move items' that prevented moving hosts or storage. Also added separate handler for PartialSuccessException to facilitate better notification of partial successes. Message-ID: <1241705480-20430-1-git-send-email-sseago@redhat.com> Signed-off-by: Scott Seago --- src/app/controllers/application.rb | 10 ++++++++++ src/app/controllers/hardware_controller.rb | 2 +- src/app/models/host.rb | 3 +++ src/app/models/storage_pool.rb | 4 ++++ src/app/services/application_service.rb | 1 + src/app/services/hardware_pool_service.rb | 5 +++-- 6 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/app/controllers/application.rb b/src/app/controllers/application.rb index 6932a1f..4834915 100644 --- a/src/app/controllers/application.rb +++ b/src/app/controllers/application.rb @@ -50,6 +50,7 @@ class ApplicationController < ActionController::Base # to most specific rescue_from Exception, :with => :handle_general_error rescue_from PermissionError, :with => :handle_perm_error + rescue_from PartialSuccessError, :with => :handle_partial_success_error def choose_layout if(params[:component_layout]) @@ -124,6 +125,15 @@ class ApplicationController < ActionController::Base :title => "Access denied") end + def handle_partial_success_error(error) + failures_arr = error.failures.collect do |resource, reason| + resource.display_name + ": " + reason + end + handle_error(:error => error, :status => :ok, + :message => error.message + ": " + failures_arr.join(", "), + :title => "Some actions failed") + end + def handle_general_error(error) handle_error(:error => error, :status => :internal_server_error, :title => "Internal Server Error") diff --git a/src/app/controllers/hardware_controller.rb b/src/app/controllers/hardware_controller.rb index 0b6cf9b..7ef08db 100644 --- a/src/app/controllers/hardware_controller.rb +++ b/src/app/controllers/hardware_controller.rb @@ -214,7 +214,7 @@ class HardwareController < PoolController edit_items(params[:target_pool_id], :svc_move_storage, :move) end - def edit_items(svc_method, target_pool_id, item_action) + def edit_items(target_pool_id, svc_method, item_action) alert = send(svc_method, params[:id], params[:resource_ids].split(","), target_pool_id) render :json => { :success => true, :alert => alert, diff --git a/src/app/models/host.rb b/src/app/models/host.rb index 0665c3f..588137b 100644 --- a/src/app/models/host.rb +++ b/src/app/models/host.rb @@ -142,4 +142,7 @@ class Host < ActiveRecord::Base return vms.size == 0 end + def not_movable_reason + return "Host has VMs" + end end diff --git a/src/app/models/storage_pool.rb b/src/app/models/storage_pool.rb index 92548bd..40333d0 100644 --- a/src/app/models/storage_pool.rb +++ b/src/app/models/storage_pool.rb @@ -165,4 +165,8 @@ class StoragePool < ActiveRecord::Base } return true end + + def not_movable_reason + return "Storage in use" + end end diff --git a/src/app/services/application_service.rb b/src/app/services/application_service.rb index 7652996..f8085eb 100644 --- a/src/app/services/application_service.rb +++ b/src/app/services/application_service.rb @@ -34,6 +34,7 @@ module ApplicationService def initialize(msg, failures={}, successes=[]) @failures = failures @successes = successes + super(msg) end end diff --git a/src/app/services/hardware_pool_service.rb b/src/app/services/hardware_pool_service.rb index c9aa70b..51519fa 100644 --- a/src/app/services/hardware_pool_service.rb +++ b/src/app/services/hardware_pool_service.rb @@ -69,7 +69,7 @@ module HardwarePoolService resources.each do |resource| begin if !resource.movable? - failed_resources[resource] = "Not Movable" + failed_resources[resource] = resource.not_movable_reason elsif ! resource.hardware_pool.can_modify(@user) failed_resources[resource] = "Failed permission check" else @@ -82,7 +82,8 @@ module HardwarePoolService end end unless failed_resources.empty? - raise PartialSuccessError.new("Move #{item_class.table_name.humanize} only partially successful", + raise PartialSuccessError.new("Move failed for some " + + "#{item_class.table_name.humanize}", failed_resources, successful_resources) end return "Move #{item_class.table_name.humanize} successful." -- 1.6.0.6 From sseago at redhat.com Thu May 7 14:46:50 2009 From: sseago at redhat.com (Scott Seago) Date: Thu, 07 May 2009 10:46:50 -0400 Subject: [Ovirt-devel] Re: [PATCH server] fixed bug in 'move items' that prevented moving hosts or storage. Also added separate handler for PartialSuccessException to facilitate better notification of partial successes. In-Reply-To: <1241705480-20430-1-git-send-email-sseago@redhat.com> References: <1241705480-20430-1-git-send-email-sseago@redhat.com> Message-ID: <4A02F45A.2000001@redhat.com> Scott Seago wrote: > Signed-off-by: Scott Seago > --- > src/app/controllers/application.rb | 10 ++++++++++ > src/app/controllers/hardware_controller.rb | 2 +- > src/app/models/host.rb | 3 +++ > src/app/models/storage_pool.rb | 4 ++++ > src/app/services/application_service.rb | 1 + > src/app/services/hardware_pool_service.rb | 5 +++-- > 6 files changed, 22 insertions(+), 3 deletions(-) > OK I pushed this. Scott From mmorsi at redhat.com Thu May 7 12:49:10 2009 From: mmorsi at redhat.com (Mohammed Morsi) Date: Thu, 7 May 2009 08:49:10 -0400 Subject: [Ovirt-devel] ovirt vnc proxy Message-ID: <1241700552-3654-1-git-send-email-mmorsi@redhat.com> The following patches for the ovirt server / viewer implements an ovirt-speicifc vnc proxy solution in which the client (viewer) sends the vm name which they want to connect to before the connection is actually established and maintained. Thus the ovirt network will need to expose one public port for vnc access From mmorsi at redhat.com Thu May 7 12:49:11 2009 From: mmorsi at redhat.com (Mohammed Morsi) Date: Thu, 7 May 2009 08:49:11 -0400 Subject: [Ovirt-devel] [PATCH server] added ovirt vnc proxy server, to proxy vnc request to managed vms In-Reply-To: <1241700552-3654-1-git-send-email-mmorsi@redhat.com> References: <1241700552-3654-1-git-send-email-mmorsi@redhat.com> Message-ID: <1241700552-3654-2-git-send-email-mmorsi@redhat.com> run on startup by default like the other ovirt services --- conf/ovirt-vnc-proxy | 49 ++++++++++++++ installer/modules/ovirt/manifests/ovirt.pp | 1 + ovirt-server.spec.in | 5 ++ src/vnc-proxy/vnc-proxy.rb | 94 ++++++++++++++++++++++++++++ 4 files changed, 149 insertions(+), 0 deletions(-) create mode 100755 conf/ovirt-vnc-proxy create mode 100644 src/vnc-proxy/vnc-proxy.rb diff --git a/conf/ovirt-vnc-proxy b/conf/ovirt-vnc-proxy new file mode 100755 index 0000000..b3f565f --- /dev/null +++ b/conf/ovirt-vnc-proxy @@ -0,0 +1,49 @@ +#!/bin/bash +# +# +# ovirt-vnc-proxy startup script for ovirt-vnc-proxy +# +# chkconfig: - 97 03 +# description: ovirt-vnc-proxy proxies vnc requests to ovirt +# managed vms. +# + +DAEMON=/usr/share/ovirt-server/vnc-proxy/vnc-proxy.rb + +. /etc/init.d/functions + +start() { + echo -n "Starting ovirt-vnc-proxy: " + daemon $DAEMON + RETVAL=$? + echo +} + +stop() { + echo -n "Shutting down ovirt-vnc-proxy: " + killproc vnc-proxy.rb + RETVAL=$? + echo +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + status) + status $DAEMON + RETVAL=$? + ;; + *) + echo "Usage: ovirt-vnc-proxy {start|stop|restart|status}" + exit 1 + ;; +esac +exit $RETVAL diff --git a/installer/modules/ovirt/manifests/ovirt.pp b/installer/modules/ovirt/manifests/ovirt.pp index 09b1925..f7df804 100644 --- a/installer/modules/ovirt/manifests/ovirt.pp +++ b/installer/modules/ovirt/manifests/ovirt.pp @@ -196,6 +196,7 @@ class ovirt::setup { firewall_rule{"http": destination_port => "80"} firewall_rule {"https": destination_port => '443'} firewall_rule {"host-browser": destination_port => '12120'} + firewall_rule {"vnc-proxy": destination_port => '5500'} firewall_rule {"qpidd": destination_port => '5672'} firewall_rule {"collectd": destination_port => '25826', protocol => 'udp'} firewall_rule {"ntpd": destination_port => '123', protocol => 'udp'} diff --git a/ovirt-server.spec.in b/ovirt-server.spec.in index 6da7297..683f214 100644 --- a/ovirt-server.spec.in +++ b/ovirt-server.spec.in @@ -104,6 +104,7 @@ touch %{buildroot}%{_localstatedir}/log/%{name}/db-omatic.log %{__install} -Dp -m0755 %{pbuild}/conf/ovirt-mongrel-rails.sysconf %{buildroot}%{_sysconfdir}/sysconfig/ovirt-mongrel-rails %{__install} -Dp -m0755 %{pbuild}/conf/ovirt-rails.sysconf %{buildroot}%{_sysconfdir}/sysconfig/ovirt-rails %{__install} -Dp -m0755 %{pbuild}/conf/ovirt-taskomatic %{buildroot}%{_initrddir} +%{__install} -Dp -m0755 %{pbuild}/conf/ovirt-vnc-proxy %{buildroot}%{_initrddir} # copy over all of the src directory... %{__cp} -a %{pbuild}/src/* %{buildroot}%{app_root} @@ -179,6 +180,7 @@ fi %daemon_chkconfig_post -d ovirt-host-collect %daemon_chkconfig_post -d ovirt-mongrel-rails %daemon_chkconfig_post -d ovirt-taskomatic +%daemon_chkconfig_post -d ovirt-vnc-proxy %preun if [ "$1" = 0 ] ; then @@ -187,11 +189,13 @@ if [ "$1" = 0 ] ; then /sbin/service ovirt-host-collect stop > /dev/null 2>&1 /sbin/service ovirt-mongrel-rails stop > /dev/null 2>&1 /sbin/service ovirt-taskomatic stop > /dev/null 2>&1 + /sbin/service ovirt-vnc-proxy stop > /dev/null 2>&1 /sbin/chkconfig --del ovirt-host-browser /sbin/chkconfig --del ovirt-db-omatic /sbin/chkconfig --del ovirt-host-collect /sbin/chkconfig --del ovirt-mongrel-rails /sbin/chkconfig --del ovirt-taskomatic + /sbin/chkconfig --del ovirt-vnc-proxy fi %files @@ -204,6 +208,7 @@ fi %{_initrddir}/ovirt-host-collect %{_initrddir}/ovirt-mongrel-rails %{_initrddir}/ovirt-taskomatic +%{_initrddir}/ovirt-vnc-proxy %{_sysconfdir}/cron.d/%{name} %config(noreplace) %{_sysconfdir}/sysconfig/ovirt-mongrel-rails %config(noreplace) %{_sysconfdir}/sysconfig/ovirt-rails diff --git a/src/vnc-proxy/vnc-proxy.rb b/src/vnc-proxy/vnc-proxy.rb new file mode 100644 index 0000000..b20bb1f --- /dev/null +++ b/src/vnc-proxy/vnc-proxy.rb @@ -0,0 +1,94 @@ +#!/usr/bin/ruby +# +# vnc-proxy.rb +# ovirt vnc proxy server, relays ovirt encoded +# vnc requests to correct node +# Copyright (C) 2008 Red Hat, Inc. +# Written by Mohammed Morsi +# +# 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; version 2 of the License. +# +# 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. A copy of the GNU General Public License is +# also available at http://www.gnu.org/copyleft/gpl.html. + +$: << File.join(File.dirname(__FILE__), "../dutils") + +require 'dutils' +require 'daemons' +include Daemonize + +########### +OVIRT_SERVER_PORT = 5500 +VM_NAME_MAX_LEN = 250 +VNC_DATA_MAX_LEN = 800000 + +########### + +$debug = true + +def DEBUG(msg) + puts msg if $debug +end + +$verbose = true +def VERBOSE(msg) + puts msg if $verbose +end + +########### + +# TODO catch errors + +daemonize + +server = TCPServer.open(OVIRT_SERVER_PORT) + +while(true) do + Thread.start(server.accept) do |client| + DEBUG "client accepted" + + # first msg will be the vm description + vm_description = client.recv(VM_NAME_MAX_LEN).to_s + DEBUG "vm received: " + vm_description + ";" + + # lookup vm + vm = Vm.find(:first, :conditions => [ "description = ?", vm_description ]) + unless vm.nil? || vm.host.nil? || vm.state != "running" + # connect to node + DEBUG "connecting to node " + vm.host.hostname + ":" + vm.vnc_port.to_s + node_socket = TCPSocket.open(vm.host.hostname, vm.vnc_port) + + # begin new thread to process server->client messages + Thread.start do + DEBUG "listening for server->client data" + while(true)do + node_data = node_socket.recv VNC_DATA_MAX_LEN + client.write node_data + VERBOSE "server -> client data " + node_data.size.to_s + end + end + + # process client -> server messages + DEBUG "listening for client->server data" + while(true) do + client_data = client.recv VNC_DATA_MAX_LEN + node_socket.write client_data + VERBOSE "client -> server data " + client_data.size.to_s + end + + node_socket.close + end + + client.close + end +end -- 1.6.0.6 From mmorsi at redhat.com Thu May 7 12:49:12 2009 From: mmorsi at redhat.com (Mohammed Morsi) Date: Thu, 7 May 2009 08:49:12 -0400 Subject: [Ovirt-devel] [PATCH viewer] connect to the ovirt-vnc-proxy server to access a vm's vnc In-Reply-To: <1241700552-3654-2-git-send-email-mmorsi@redhat.com> References: <1241700552-3654-1-git-send-email-mmorsi@redhat.com> <1241700552-3654-2-git-send-email-mmorsi@redhat.com> Message-ID: <1241700552-3654-3-git-send-email-mmorsi@redhat.com> --- Makefile.am | 2 +- internal.h | 30 ++++++ main.c | 27 +++++- tunnel.c | 310 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 364 insertions(+), 5 deletions(-) create mode 100644 tunnel.c diff --git a/Makefile.am b/Makefile.am index 1247729..b5a3e01 100644 --- a/Makefile.am +++ b/Makefile.am @@ -18,7 +18,7 @@ bin_PROGRAMS = ovirt-viewer -ovirt_viewer_SOURCES = main.c wui_thread.c internal.h +ovirt_viewer_SOURCES = main.c wui_thread.c tunnel.c internal.h ovirt_viewer_CFLAGS = $(OVIRT_VIEWER_CFLAGS) -DCAINFO='"$(CAINFO)"' ovirt_viewer_LDADD = $(OVIRT_VIEWER_LIBS) diff --git a/internal.h b/internal.h index 04512f9..80e675e 100644 --- a/internal.h +++ b/internal.h @@ -39,6 +39,21 @@ extern gboolean debug; } \ } while (0) +/* Verbose messages are always compiled in, but have to + * be turned on using the --verbose command line switch. + */ +extern gboolean verbose; + +#define VERBOSE(fs,...) \ + do { \ + if (verbose) { \ + fprintf (stderr, "%s:%d: [thread %p] ", __FILE__, __LINE__, \ + g_thread_self ()); \ + fprintf (stderr, (fs), ## __VA_ARGS__); \ + fprintf (stderr, "\n"); \ + } \ + } while (0) + /* String equality tests, suggested by Jim Meyering. */ #define STREQ(a,b) (strcmp((a),(b)) == 0) #define STRCASEEQ(a,b) (strcasecmp((a),(b)) == 0) @@ -53,6 +68,12 @@ extern gboolean debug; extern const char *cainfo; extern gboolean check_cert; +/* server we're connecting to */ +extern const char* hostname; + +/* vm currently in focus */ +extern struct vm* vm_in_focus; + /* Communications between the main thread and the WUI thread. For * an explanation of the threading model, please see the comment in * main(). @@ -144,6 +165,15 @@ extern gboolean wui_thread_has_valid_vmlist (void); */ extern gboolean wui_thread_is_busy (void); + +/* Communications between the main thread and the tunnel thread.*/ +extern void start_tunnel (void); +extern void stop_tunnel (void); + +/* port which local tunnel is listening on */ +extern int tunnel_port; + + /* Returns true if the main vm list contains a * running vm w/ the same name as specified one */ diff --git a/main.c b/main.c index 356d379..e5a9e4b 100644 --- a/main.c +++ b/main.c @@ -55,6 +55,8 @@ gboolean debug = 0; +gboolean verbose = 0; + /* Usually /etc/pki/tls/certs/ca-bundle.crt unless overridden during * configure or on the command line. */ @@ -68,6 +70,10 @@ gboolean check_cert = FALSE; // do we want this enabled by default ? */ static GSList *vmlist = NULL; +/* internal.h shared constructs */ +const char* hostname; +struct vm* vm_in_focus; + /* Private functions. */ static void start_ui (void); static GtkWidget *menu_item_new (int which_menu); @@ -198,6 +204,8 @@ static const GOptionEntry options[] = { "check the SSL certificate of the server", NULL }, { "debug", 'd', 0, G_OPTION_ARG_NONE, &debug, "turn on debugging messages", NULL }, + { "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, + "turn on verbose messages", NULL }, { "version", 'V', 0, G_OPTION_ARG_NONE, &print_version, "display version and exit", NULL }, { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL } @@ -225,6 +233,10 @@ main (int argc, char *argv[]) * processed in the main thread - see: * http://mail.gnome.org/archives/gtk-app-devel-list/2007-March/msg00232.html * + * A tunnel thread is also started to locally listen for vnc packets + * and make them proxyable, adding the vm name, before forwarding onto + * the server + * * Note that under Win32 you must confine all Gtk/Gdk interactions * to a single thread - see: * http://developer.gimp.org/api/2.0/gdk/gdk-Threads.html @@ -267,6 +279,7 @@ main (int argc, char *argv[]) gtk_main (); stop_wui_thread (); + stop_tunnel(); exit (0); } @@ -510,6 +523,7 @@ help_about (GtkWidget *menu) const char *authors[] = { "Richard W.M. Jones ", "Daniel P. Berrange ", + "Mohammed Morsi ", NULL }; @@ -557,7 +571,7 @@ connect_to_wui_on_enter (GtkWidget *widget, gpointer data) static void connect_to_wui (GtkWidget *widget, gpointer data) { - const char *hostname; + //const char *hostname; char *uri; int len; @@ -570,6 +584,7 @@ connect_to_wui (GtkWidget *widget, gpointer data) snprintf (uri, len, HTTPS "://%s/ovirt", hostname); wui_thread_send_connect (uri); + start_tunnel(); } static void @@ -606,7 +621,7 @@ connect_to_vm (GtkWidget *widget, gpointer _vm) int i, uuidlen, len, fd; GtkWidget *child; const char *label; - const char* hostname; + //const char* hostname; char *label2; char new_title[97]; // 47 chars for title + 50 for vm name @@ -637,9 +652,13 @@ connect_to_vm (GtkWidget *widget, gpointer _vm) return; } + // FIXME on notebook tab switch, change vm_in_focus + vm_in_focus = vm; + /* This VM isn't in the notebook already, so create a new console. */ - hostname = gtk_entry_get_text (GTK_ENTRY (ca_hostname)); - fd = viewer_open_vnc_socket(hostname, vm->forward_vnc_port); + //hostname = gtk_entry_get_text (GTK_ENTRY (ca_hostname)); + DEBUG ("connecting to local tunnel on port %i", tunnel_port); + fd = viewer_open_vnc_socket("127.0.0.1", tunnel_port); if (fd == -1) return; /* We've already given an error. */ child = vnc_display_new (); diff --git a/tunnel.c b/tunnel.c new file mode 100644 index 0000000..83d1ce2 --- /dev/null +++ b/tunnel.c @@ -0,0 +1,310 @@ +/* ovirt viewer console application + * Copyright (C) 2008 Red Hat Inc. + * Written by Mohammed Morsi + * + * 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. + */ + +/* ovirt-viewer starts listening on network port to + * encapsulate vnc packets including the vm's name + * so as to be able to be proxied. + * + * This operation takes place in another thread + * which can be started/stopped by calling + * start_tunnel / stop_tunnel. + * + * An additional connection thread is created and maintained + * internally for each vm / vnc connection open in ovirt-viewer + * establishing a connection w/ the ovirt server. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "internal.h" + +/* constants */ + +// port to try to listen on, if we can't, increment until we find one we can +const int PORT_RANGE_START = 5600; + +// max length of a vm name +const int VM_NAME_MAX_LEN = 250; + +// max length of vnc data +const int VNC_DATA_MAX_LEN = 800000; + +// port which to connect to on ovirt server +const int OVIRT_SERVER_PORT = 5500; + +/* Private thread functions */ +static gpointer tunnel_thread(gpointer data); +static gpointer client_server_thread(gpointer data); +static gpointer server_client_thread(gpointer data); + +/* Other private functions */ +static void close_socket(gpointer _socket, gpointer data); +static void wait_for_thread(gpointer _thread, gpointer data); + +/* tunnel and main threads */ +static GThread *tunnel_gthread = NULL; +static GThread *main_gthread = NULL; + +/* list of communication threads */ +static GSList *communication_threads = NULL; + +/* list of sockets */ +static GSList *sockets = NULL; + +/* thread termination flag */ +static gboolean run_tunnel = FALSE; + +/* internal.h shared constructs */ +int tunnel_port; + +///////////////// + +/** public implementations **/ + +/* start tunnel thread */ +void +start_tunnel(void) +{ + GError *error = NULL; + + DEBUG ("starting the tunnel thread"); + + assert (tunnel_gthread == NULL); + + run_tunnel = TRUE; + + main_gthread = g_thread_self (); + + tunnel_gthread = g_thread_create (tunnel_thread, NULL, TRUE, &error); + if (error) { + g_print ("%s\n", error->message); + g_error_free (error); + exit (1); + } +}; + +/* stop tunnel thread */ +void +stop_tunnel(void) +{ + if(!run_tunnel) + return; + + DEBUG ("stopping the tunnel thread"); + + assert (tunnel_gthread != NULL); + ASSERT_IS_MAIN_THREAD (); + + run_tunnel = FALSE; + + g_slist_foreach(sockets, close_socket, NULL); + + (void) g_thread_join (tunnel_gthread); + tunnel_gthread = NULL; +}; + +///////////////// + +/** private implementations **/ + +/* the tunnel thread */ +static gpointer +tunnel_thread (gpointer _data) +{ + //char vm_data[VM_NAME_MAX_LEN]; + int local_server_socketfd, ovirt_server_socket, client_socketfd; + unsigned int local_server_len, client_len, ovirt_server_len; + + struct sockaddr_in local_server_address; + struct sockaddr_in ovirt_server_address; + struct sockaddr_in client_address; + + GThread *client_server_gthread = NULL; + GThread *server_client_gthread = NULL; + + int sockets_param[2]; + int * c_socket; + + DEBUG ("tunnel thread starting up"); + + // ovirt server address + ovirt_server_address.sin_family = PF_INET; + ovirt_server_address.sin_addr.s_addr = inet_addr(hostname); + ovirt_server_address.sin_port = htons(OVIRT_SERVER_PORT); + ovirt_server_len = sizeof(ovirt_server_address); + + // create local net socket + local_server_socketfd = socket(PF_INET, SOCK_STREAM, 0); + c_socket = malloc(sizeof(int)); *c_socket = local_server_socketfd; + sockets = g_slist_prepend(sockets, c_socket); + + // local server address + tunnel_port = PORT_RANGE_START; + local_server_address.sin_family = PF_INET; + local_server_address.sin_addr.s_addr = inet_addr("127.0.0.1"); + local_server_address.sin_port = htons(tunnel_port); + local_server_len = sizeof(local_server_address); + + // increment ports until one is available + while(bind(local_server_socketfd, (struct sockaddr*)&local_server_address, local_server_len) < 0){ + tunnel_port += 1; + local_server_address.sin_port += htons(tunnel_port); + } + + DEBUG ("tunnel bound to local port %i", tunnel_port); + + // increase client buffer size? + listen(local_server_socketfd, 5); + + while(run_tunnel) { + // establish connection w/ ovirt server + ovirt_server_socket = socket(PF_INET, SOCK_STREAM, 0); + c_socket = malloc(sizeof(int)); *c_socket = ovirt_server_socket; + sockets = g_slist_prepend(sockets, c_socket); + DEBUG ("connecting to ovirt server %s on %i", hostname, OVIRT_SERVER_PORT); + if(connect(ovirt_server_socket, (struct sockaddr*)&ovirt_server_address, ovirt_server_len) < 0){ + DEBUG ("could not connect to ovirt server"); + return NULL; + } + DEBUG ("connected to ovirt server"); + + // accept a client connection + client_len = sizeof(client_address); + client_socketfd = accept(local_server_socketfd, (struct sockaddr*)&client_address, &client_len); + // TODO check accept return value for err + c_socket = malloc(sizeof(int)); *c_socket = client_socketfd; + sockets = g_slist_prepend(sockets, c_socket); + + DEBUG ("client connected to tunnel"); + + // send target vm for this session + //strcpy(vm_data, vm_in_focus->description); + DEBUG ("sending vm %s", vm_in_focus->description); + write(ovirt_server_socket, vm_in_focus->description, strlen(vm_in_focus->description)); + + sockets_param[0] = ovirt_server_socket; + sockets_param[1] = client_socketfd; + + // launch thread for client -> server traffic + client_server_gthread = g_thread_create (client_server_thread, + &sockets_param, TRUE, NULL); + + // launch thread for server -> client traffic + server_client_gthread = g_thread_create (server_client_thread, + &sockets_param, TRUE, NULL); + + communication_threads = g_slist_prepend(communication_threads, client_server_thread); + communication_threads = g_slist_prepend(communication_threads, server_client_thread); + } + + // wait for connection threads to finish + g_slist_foreach(communication_threads, wait_for_thread, NULL); + + DEBUG ("tunnel thread completed"); + return NULL; +}; + +/* the tunnel thread */ +static gpointer +client_server_thread (gpointer _data){ + int nbytes; + char vnc_data[VNC_DATA_MAX_LEN]; + + int ovirt_server_socket = ((int*)_data)[0], + client_socket = ((int*)_data)[1]; + + DEBUG ("client/server thread starting up"); + + while(run_tunnel){ + VERBOSE( "accepting client data"); + + // grab vnc data + nbytes = read(client_socket, vnc_data, VNC_DATA_MAX_LEN); + if(nbytes <= 0){ + DEBUG ( "error reading data from client" ); + break; + } + VERBOSE ("read %i bytes from client", nbytes); + + // send network_data onto server + nbytes = write(ovirt_server_socket, vnc_data, nbytes); + if(nbytes <= 0){ + DEBUG ( "error writing data to server" ); + break; + } + VERBOSE ("wrote %i bytes to server", nbytes); + } + + DEBUG ("client/server thread completed"); + return NULL; +}; + +/* the server thread */ +static gpointer +server_client_thread (gpointer _data){ + char vnc_data[VNC_DATA_MAX_LEN]; + + int ovirt_server_socket = ((int*)_data)[0], + client_socket = ((int*)_data)[1]; + + int nbytes; + + DEBUG ("server/client thread starting up"); + + while(run_tunnel){ + // grab vnc data + nbytes = read(ovirt_server_socket, vnc_data, VNC_DATA_MAX_LEN); + if(nbytes <= 0){ + DEBUG ( "error reading data from server" ); + break; + } + VERBOSE ("read %i bytes from server", nbytes); + + // send network_data onto client + nbytes = write(client_socket, vnc_data, nbytes); + if(nbytes <= 0){ + DEBUG ( "error writing data to client" ); + break; + } + VERBOSE ("wrote %i bytes to client", nbytes); + } + + DEBUG ("server/client thread completed"); + return NULL; +}; + +static void close_socket(gpointer _socket, gpointer data){ + shutdown(*(int*) _socket, 2); + close(*(int*) _socket); + free((int*) _socket); +}; + +static void wait_for_thread(gpointer _thread, gpointer data){ + g_thread_join(*(GThread**)_thread); +}; -- 1.6.0.6 From kc at cobradevil.org Fri May 8 10:55:34 2009 From: kc at cobradevil.org (william) Date: Fri, 08 May 2009 12:55:34 +0200 Subject: [Ovirt-devel] Ovirt Storage SAN LVM support Message-ID: <1241780134.10878.40.camel@RIC.kc.mindef.nl> Hello List, How can we integrate fibre channel SAN storage like VMware does with VMFS in Ovirt So what would be the purpose of creating such a infrastructure? Using luns in a virtual environment is nasty because you have to control which server the lun is attached. We only have one SAN so I can't tell for other systems how it works. In the SAN management you have to assign disk space to a lun which is bounded to a FC card or multiple FC cards. When using one lun to one host it is realy simple and you could not screw up the filesystem on it because only one machine is using the specified lun. But when you assign one lun to multiple machines you have to find a way that not all machines are writing to the disk at the same time. Cluster filesystems This can be done using cluster filesystems where you create an gfs or ocfs filesystem which or both cluster aware. The thing is that you need to setup central locking ability's on these filesystems to make sure everything stays in sync and one node cannot access files which are already opened on another node accessing the files. LVM When using LVM on a SAN lun gives you flexibility because you can resize logical volumes in a volume group if the lun is big enough. The problem of locking stays when you say I can open the same logical volume on multiple machines but that would be the same for iscsi. Our experience is very good using a volume group on a lun of 1TB which is attached to multiple nodes. The only thing you have to make sure is don't start a virtual machine on multiple nodes. So you have to find a way that when a node is unreachable which had vm's running on it you would have to kill the server before starting the vm on a new node. Only this way you can make sure that your vm's stay consistent otherwise you will end up with a node running on mutiple servers crashing the entire file system. (our experience: rebuild the entire machine). The better way would be to let the administrator login to the node from the normal lan and bring the systems down manualy and start them on another node. When you are going to look how VMware uses a lun then it is almost the same as what LVM can do for us. I have contacted a storage specialist with dell, and he confirmed my guessing. VMware uses two types of SAN storage within its products. You can assign a lun raw to a vm so you can give it priority on SAN level (QOS for high io workloads), or you can assign one big lun to the nodes which shares the load on all vm's that are running from it. The VMFS is a cluster aware filesystem so it can lock the files which are already in use. This is no problem when the node dies and the file has no locking anymore so you can start the vm on another node. It still is a problem when for some reason the management lan goes down for one node and the vm's are still running. The management does not know if the vm's are running so it does nothing because the file on VMFS are still locked. So you could manualy login to the node and see what is the problem and you can decide as an administrator what you gonna do with the vm's, live migration is not possible so you should bring the system down manually. So how can we implement this within Ovirt? My thinking is that LVM could do the job. It is mostly implemented in libvirt so we can make use of that. There are several options for this. 1. The easy method would be to have a LVM already on the lun so you don't have to create one. The only thing would be to add a volume group to Ovirt with the possibility to create LVM's on it. It also would be nice to give administrators an option for resizing the logical volume. So in technical terms you should run the command vgdisplay on the nodes and capture all the volume groups and present that to the administrator. It would be nice to see which Volume group is available in what nodes so you can assign the storage specifically to a group of vm's which are administered by another department. The administrator can then select the volume group to use and add it to the storage pool. When you have assigned this to the Virtual Machine Pool you can create new logical volumes within the Volume Group and assign this to a virtual machine. This is mostly the same for iscsi with logical volumes. 2. The second method would be to discover the luns on nodes and use that lun to create a Volume group on it. This is more complicated then one but is how VMware uses SAN luns so we should also be able to implement this. The rest would be the same as for method 1. probably roadmap? 3. The third method would be to assign a lun to a specific vm so you could make use of the SAN tools for snapshotting and QOS. This is apparently important for systems under heavy load. I can't say because we haven't got any. This will be harder to implement and should be on the roadmap I guess. The only thing would be to keep the LVM metadata correct on all nodes so you would have to run a command on all nodes so the metadata is updated. Also when a node goes down first the nodes which have the Volume group attached to it should have the LVM metadata updated so Ovirt manager would know if complete node is down and if it is safe to start the virtual machine on another node. Another way could be using CLVM but then you should have multiple nodes before you could create the cluster lvm. The pro's for an LVM storage are: It is very quick when creating a disk for a virtual machine. It has the ability to snapshot the volume. It is easy to use migration and it is realy fast and did I already mention that it is realy fast? The con's are I cannot think off con's over using iscsi or nfs it is just faster. I have tested a bit on my local disk and here are the results: other linux dist so it could be a little bit different 1. Create a local logical volume in a volume group lvcreate -n testlvm -L+1G VGname 2. show the logical volume with lvdisplay: here it says "# open 0" 3. start virt manager and assign the lvm as a raw device /dev/mapper/VGname_testlvm to a new vm 4. start the vm 5. issue the command lvdisplay and it will say "# open 1" for the testlvm this could be the locking mechanism i guess but i'm not sure. A clvm tech guy could maybe give an answer to that. With kind regards William van de Velde From mmorsi at redhat.com Fri May 8 15:05:27 2009 From: mmorsi at redhat.com (Mohammed Morsi) Date: Fri, 8 May 2009 11:05:27 -0400 Subject: [Ovirt-devel] [PATCH node] add anyterm to node requirements and setup on startup Message-ID: <1241795127-3302-1-git-send-email-mmorsi@redhat.com> adds anyterm rpm dependency to ovirt node spec and sets up anyterm on node instantation by setting the service to start by default and making the necessary anyterm sysconfig changes --- ovirt-node.spec.in | 1 + scripts/ovirt-functions | 12 ++++++++++++ scripts/ovirt-install-node-stateful | 2 ++ scripts/ovirt-install-node-stateless | 2 ++ 4 files changed, 17 insertions(+), 0 deletions(-) diff --git a/ovirt-node.spec.in b/ovirt-node.spec.in index 1a73066..1b847c5 100644 --- a/ovirt-node.spec.in +++ b/ovirt-node.spec.in @@ -42,6 +42,7 @@ Requires: qemu-img Requires: nc Requires: grub Requires: /usr/sbin/crond +Requires: anyterm ExclusiveArch: %{ix86} x86_64 %define app_root %{_datadir}/%{name} diff --git a/scripts/ovirt-functions b/scripts/ovirt-functions index e89898d..6ce5ffc 100755 --- a/scripts/ovirt-functions +++ b/scripts/ovirt-functions @@ -201,6 +201,18 @@ ovirt_setup_libvirtd() { fi } +ovirt_setup_anyterm() { + # configure anyterm + sed -i -e 's/^# ANYTERM_CMD=\/usr\/bin\/anyterm-cmd/ANYTERM_CMD="sudo /usr/bin/virsh console %p"/' \ + /etc/sysconfig/anyterm + + sed -i -e 's/^# ANYTERM_LOCAL_ONLY=true/ANYTERM_LOCAL_ONLY=false/' \ + /etc/sysconfig/anyterm + + # permit it to run the virsh console + echo "anyterm ALL=NOPASSWD: /usr/bin/virsh console *" >> /etc/sudoers +} + md5() { md5sum $1 2>/dev/null | (read MD5 filename; echo $MD5) } diff --git a/scripts/ovirt-install-node-stateful b/scripts/ovirt-install-node-stateful index 3ec1c29..9426c81 100755 --- a/scripts/ovirt-install-node-stateful +++ b/scripts/ovirt-install-node-stateful @@ -75,6 +75,7 @@ chkconfig libvirt-qpid on chkconfig iptables on chkconfig ntpdate on chkconfig ntpd on +chkconfig anyterm on backup_file /etc/sysconfig/libvirtd backup_file /etc/libvirt/qemu.conf @@ -82,6 +83,7 @@ backup_file /etc/libvirt/libvirtd.conf backup_file /etc/sasl2/libvirt.conf backup_file /etc/krb5.conf ovirt_setup_libvirtd +ovirt_setup_anyterm backup_file /etc/sysconfig/iptables # We open up anything coming from ovirtbr0 to this node, since it diff --git a/scripts/ovirt-install-node-stateless b/scripts/ovirt-install-node-stateless index 705c491..cceb048 100755 --- a/scripts/ovirt-install-node-stateless +++ b/scripts/ovirt-install-node-stateless @@ -20,8 +20,10 @@ chkconfig --level 3 ovirt-early on chkconfig --level 3 ovirt on chkconfig --level 3 ovirt-post on chkconfig --level 3 collectd on +chkconfig --level 3 anyterm on ovirt_setup_libvirtd +ovirt_setup_anyterm # make sure we don't autostart virbr0 on libvirtd startup rm -f /etc/libvirt/qemu/networks/autostart/default.xml -- 1.6.0.6 From imain at redhat.com Fri May 8 19:11:31 2009 From: imain at redhat.com (Ian Main) Date: Fri, 8 May 2009 12:11:31 -0700 Subject: [Ovirt-devel] [PATCH node] Require latest libvirt-qpid on the node. Message-ID: <1241809891-17149-1-git-send-email-imain@redhat.com> This patch just ups the version requirement for ovirt node. This version implements the refresh() command and is built against and requires the latest qpid packages. Signed-off-by: Ian Main --- ovirt-node.spec.in | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/ovirt-node.spec.in b/ovirt-node.spec.in index 1a73066..489b1ef 100644 --- a/ovirt-node.spec.in +++ b/ovirt-node.spec.in @@ -23,7 +23,7 @@ BuildRequires: libvirt-devel >= 0.5.1 BuildRequires: dbus-devel hal-devel Requires: libvirt >= 0.5.1 Requires: augeas >= 0.3.5 -Requires: libvirt-qpid >= 0.2.3 +Requires: libvirt-qpid >= 0.2.14-3 Requires: hal Requires: collectd-virt Requires: wget -- 1.6.0.6 From sseago at redhat.com Fri May 8 19:34:09 2009 From: sseago at redhat.com (Scott Seago) Date: Fri, 8 May 2009 19:34:09 +0000 Subject: [Ovirt-devel] [PATCH server 1/3] before_filter and rescue_from refactoring in application.rb Message-ID: <1241811251-15502-1-git-send-email-sseago@redhat.com> Most of these before_filters will go away once we're using the service later for everything. I fixed a couple cases where the legacy before_filter was in conflict with the service layer code, and the authorize_xxx methods now just raise PermissionError rather than formatting the reply, since rescue_from handles that for us now. I've also added ActionError to the rescue_from handlers, and for PartialSuccessError we now automatically include failures in hte json alert, and we set @successes and @failures so that html response views can access them. Signed-off-by: Scott Seago --- src/app/controllers/application.rb | 52 ++++++++++++++++++++---------------- 1 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/app/controllers/application.rb b/src/app/controllers/application.rb index 4834915..cff5b77 100644 --- a/src/app/controllers/application.rb +++ b/src/app/controllers/application.rb @@ -32,24 +32,24 @@ class ApplicationController < ActionController::Base # FIXME: once service layer is complete, the following before_filters will be # removed as their functionality has been moved to the service layer + # pre_new # pre_create - # pre_edit will remain only for :edit, not :update or :destroy + # pre_edit # pre_show - # authorize_admin will remain only for :new, :edit + # authorize_admin before_filter :pre_new, :only => [:new] before_filter :pre_create, :only => [:create] - before_filter :pre_edit, :only => [:edit] # the following is to facilitate transition to service layer - before_filter :tmp_pre_update, :only => [:update, :destroy] + before_filter :tmp_pre_update, :only => [:edit, :update, :destroy] before_filter :pre_show, :only => [:show] - before_filter :authorize_admin, :only => [:new, :edit] - before_filter :tmp_authorize_admin, :only => [:create, :update, :destroy] + before_filter :tmp_authorize_admin, :only => [:new, :edit, :create, :update, :destroy] before_filter :is_logged_in, :get_help_section # General error handlers, must be in order from least specific # to most specific rescue_from Exception, :with => :handle_general_error rescue_from PermissionError, :with => :handle_perm_error + rescue_from ActionError, :with => :handle_action_error rescue_from PartialSuccessError, :with => :handle_partial_success_error def choose_layout @@ -100,24 +100,20 @@ class ApplicationController < ActionController::Base def pre_show end - def authorize_view(msg=nil) - authorize_action(Privilege::VIEW,msg) + # These authorize_XXX methods should go away once we're fully converted to + # the service layer + def authorize_view + authorize_action(Privilege::VIEW) end - def authorize_user(msg=nil) - authorize_action(Privilege::VM_CONTROL,msg) + def authorize_user + authorize_action(Privilege::VM_CONTROL) end - def authorize_admin(msg=nil) - authorize_action(Privilege::MODIFY,msg) + def authorize_admin + authorize_action(Privilege::MODIFY) end - def authorize_action(privilege, msg=nil) - msg ||= 'You have insufficient privileges to perform action.' - unless authorized?(privilege) - handle_error(:message => msg, - :title => "Access Denied", :status => :forbidden) - false - else - true - end + def authorize_action(privilege) + authorized!(privilege) + true end def handle_perm_error(error) @@ -129,18 +125,26 @@ class ApplicationController < ActionController::Base failures_arr = error.failures.collect do |resource, reason| resource.display_name + ": " + reason end + @successes = error.successes + @failures = error.failures handle_error(:error => error, :status => :ok, :message => error.message + ": " + failures_arr.join(", "), :title => "Some actions failed") end + def handle_action_error(error) + handle_error(:error => error, :status => :conflict, + :title => "Action Error") + end + def handle_general_error(error) + flash[:errmsg] = error.message handle_error(:error => error, :status => :internal_server_error, :title => "Internal Server Error") end def handle_error(hash) - log_error(hash[:error]) + log_error(hash[:error]) if hash[:error] msg = hash[:message] || hash[:error].message title = hash[:title] || "Internal Server Error" status = hash[:status] || :internal_server_error @@ -156,7 +160,9 @@ class ApplicationController < ActionController::Base @errmsg = msg @ajax = params[:ajax] @nolayout = params[:nolayout] - if @ajax + if @layout + render :layout => @layout + elsif @ajax render :template => 'layouts/popup-error', :layout => 'tabs-and-content' elsif @nolayout render :template => 'layouts/popup-error', :layout => 'help-and-content' -- 1.6.0.6 From sseago at redhat.com Fri May 8 19:34:10 2009 From: sseago at redhat.com (Scott Seago) Date: Fri, 8 May 2009 19:34:10 +0000 Subject: [Ovirt-devel] [PATCH server 2/3] Additional vm_controller refactoring: In-Reply-To: <1241811251-15502-1-git-send-email-sseago@redhat.com> References: <1241811251-15502-1-git-send-email-sseago@redhat.com> Message-ID: <1241811251-15502-2-git-send-email-sseago@redhat.com> 1) Moved all remaining auth/before_filter action into service layer 2) Added rdoc comments 3) delete VMs action now uses svc_destroy action Signed-off-by: Scott Seago --- src/app/controllers/vm_controller.rb | 89 +++++++------------------- src/app/services/vm_service.rb | 103 ++++++++++++++++++++++++++---- src/app/views/resources/vm_actions.rhtml | 2 +- 3 files changed, 114 insertions(+), 80 deletions(-) diff --git a/src/app/controllers/vm_controller.rb b/src/app/controllers/vm_controller.rb index 29c0f16..a40fc5c 100644 --- a/src/app/controllers/vm_controller.rb +++ b/src/app/controllers/vm_controller.rb @@ -17,7 +17,6 @@ # MA 02110-1301, USA. A copy of the GNU General Public License is # also available at http://www.gnu.org/copyleft/gpl.html. require 'socket' -require 'services/vm_service' class VmController < ApplicationController include VmService @@ -26,8 +25,6 @@ class VmController < ApplicationController verify :method => :post, :only => [ :destroy, :create, :update ], :redirect_to => { :controller => 'dashboard' } - before_filter :pre_console, :only => [:console] - def index @vms = Vm.find(:all, :include => [{:vm_resource_pool => @@ -52,7 +49,10 @@ class VmController < ApplicationController end def new + alert = svc_new(params[:vm_resource_pool_id]) + _setup_provisioning_options @storage_tree = VmResourcePool.find(params[:vm_resource_pool_id]).get_hardware_pool.storage_tree.to_json + @networks = Network.find(:all).collect{ |net| [net.name, net.id] } render :layout => 'popup' end @@ -63,6 +63,9 @@ class VmController < ApplicationController end def edit + svc_modify(params[:id]) + _setup_provisioning_options + @networks = Network.find(:all).collect{ |net| [net.name, net.id] } @storage_tree = @vm.vm_resource_pool.get_hardware_pool.storage_tree(:vm_to_include => @vm).to_json render :layout => 'popup' end @@ -74,37 +77,26 @@ class VmController < ApplicationController render :json => { :object => "vm", :success => true, :alert => alert } end - #FIXME: we need permissions checks. user must have permission. Also state checks - # this should probably be implemented as an action on the containing VM pool once - # that service module is defined def delete - vm_ids_str = params[:vm_ids] - vm_ids = vm_ids_str.split(",").collect {|x| x.to_i} - failure_list = [] - success = false - begin - Vm.transaction do - vms = Vm.find(:all, :conditions => "id in (#{vm_ids.join(', ')})") - vms.each do |vm| - if vm.is_destroyable? - destroy_cobbler_system(vm) - vm.destroy - else - failure_list << vm.description - end - end - end - if failure_list.empty? - success = true - alert = "Virtual Machines were successfully deleted." - else - alert = "The following Virtual Machines were not deleted (a VM must be stopped to delete it): " - alert+= failure_list.join(', ') + vm_ids = params[:vm_ids].split(",") + successes = [] + failures = {} + vm_ids.each do |vm_id| + begin + svc_destroy(vm_id) + successes << @vm + rescue PermissionError => perm_error + failures[@vm] = perm_error.message + rescue Exception => ex + failures[@vm] = ex.message end - rescue - alert = "Error deleting virtual machines." end - render :json => { :object => "vm", :success => success, :alert => alert } + unless failures.empty? + raise PartialSuccessError.new("Delete failed for some VMs", + failures, successes) + end + render :json => { :object => "vm", :success => success, + :alert => "VM Pools were successfully deleted." } end def destroy @@ -142,6 +134,7 @@ class VmController < ApplicationController end def console + svc_modify(params[:id]) @show_vnc_error = "Console is unavailable for VM #{@vm.description}" unless @vm.has_console if @vm.host.hostname.match("priv\.ovirt\.org$") @vnc_hostname = IPSocket.getaddress(@vm.host.hostname) @@ -172,40 +165,6 @@ class VmController < ApplicationController end end - def pre_new - unless params[:vm_resource_pool_id] - flash[:notice] = "VM Resource Pool is required." - redirect_to :controller => 'dashboard' - end - - # random MAC - mac = [ 0x00, 0x16, 0x3e, rand(0x7f), rand(0xff), rand(0xff) ] - # random uuid - uuid = ["%02x" * 4, "%02x" * 2, "%02x" * 2, "%02x" * 2, "%02x" * 6].join("-") % - Array.new(16) {|x| rand(0xff) } - newargs = { - :vm_resource_pool_id => params[:vm_resource_pool_id], - :vnic_mac_addr => mac.collect {|x| "%02x" % x}.join(":"), - :uuid => uuid - } - @vm = Vm.new( newargs ) - unless params[:vm_resource_pool_id] - @vm.vm_resource_pool = @vm_resource_pool - end - set_perms(@vm.vm_resource_pool) - @networks = Network.find(:all).collect{ |net| [net.name, net.id] } - _setup_provisioning_options - end - def pre_edit - @vm = Vm.find(params[:id]) - set_perms(@vm.vm_resource_pool) - @networks = Network.find(:all).collect{ |net| [net.name, net.id] } - _setup_provisioning_options - end - def pre_console - pre_edit - authorize_user - end # FIXME: remove these when service transition is complete. these are here # to keep from running permissions checks and other setup steps twice def tmp_pre_update diff --git a/src/app/services/vm_service.rb b/src/app/services/vm_service.rb index 8256730..ff1a919 100644 --- a/src/app/services/vm_service.rb +++ b/src/app/services/vm_service.rb @@ -22,12 +22,54 @@ module VmService include ApplicationService - def svc_show(vm_id) - # from before_filter - @vm = Vm.find(vm_id) - authorized!(Privilege::VIEW, at vm.vm_resource_pool) + # Load the Vm with +id+ for viewing + # + # === Instance variables + # [@vm] stores the Vm with +id+ + # === Required permissions + # [Privilege::VIEW] on vm's VmResourcePool + def svc_show(id) + lookup(id,Privilege::VIEW) + end + + # Load the Vm with +id+ for editing + # + # === Instance variables + # [@vm] stores the Vm with +id+ + # === Required permissions + # [Privilege::MODIFY] on vm's VmResourcePool + def svc_modify(id) + lookup(id,Privilege::MODIFY) end + # Load a new Vm for creating + # + # === Instance variables + # [@vm] loads a new Vm object into memory + # === Required permissions + # [Privilege::MODIFY] for the vm's VmResourcePool as specified by + # +vm_resource_pool_id+ + def svc_new(vm_resource_pool_id) + raise ActionError.new("VM Resource Pool is required.") unless vm_resource_pool_id + + # random MAC + mac = [ 0x00, 0x16, 0x3e, rand(0x7f), rand(0xff), rand(0xff) ] + # random uuid + uuid = ["%02x"*4, "%02x"*2, "%02x"*2, "%02x"*2, "%02x"*6].join("-") % + Array.new(16) {|x| rand(0xff) } + + @vm = Vm.new({:vm_resource_pool_id => vm_resource_pool_id, + :vnic_mac_addr => mac.collect {|x| "%02x" % x}.join(":"), + :uuid => uuid }) + authorized!(Privilege::MODIFY, @vm.vm_resource_pool) + end + + # Save a new Vm + # + # === Instance variables + # [@vm] the newly saved Vm + # === Required permissions + # [Privilege::MODIFY] for the vm's VmResourcePool def svc_create(vm_hash, start_now) # from before_filter vm_hash[:state] = Vm::STATE_PENDING @@ -59,9 +101,15 @@ module VmService return alert end - def svc_update(vm_id, vm_hash, start_now, restart_now) + # Update attributes for the Vm with +id+ + # + # === Instance variables + # [@vm] stores the Vm with +id+ + # === Required permissions + # [Privilege::MODIFY] for the Vm's VmResourcePool + def svc_update(id, vm_hash, start_now, restart_now) # from before_filter - @vm = Vm.find(vm_id) + @vm = Vm.find(id) authorized!(Privilege::MODIFY, @vm.vm_resource_pool) #needs restart if certain fields are changed @@ -119,9 +167,15 @@ module VmService return alert end - def svc_destroy(vm_id) + # Destroys for the Vm with +id+ + # + # === Instance variables + # [@vm] stores the Vm with +id+ + # === Required permissions + # [Privilege::MODIFY] for the Vm's VmResourcePool + def svc_destroy(id) # from before_filter - @vm = Vm.find(vm_id) + @vm = Vm.find(id) authorized!(Privilege::MODIFY, @vm.vm_resource_pool) unless @vm.is_destroyable? @@ -129,20 +183,34 @@ module VmService end destroy_cobbler_system(@vm) @vm.destroy - return "Virtual Machine wa ssuccessfully deleted." + return "Virtual Machine was successfully deleted." end - def svc_vm_action(vm_id, vm_action, action_args) - @vm = Vm.find(vm_id) - authorized!(Privilege::MODIFY, @vm.vm_resource_pool) + # Queues action +vm_action+ for Vm with +id+ + # + # === Instance variables + # [@vm] stores the Vm with +id+ + # === Required permissions + # permission is action-specific as determined by + # VmTask.action_privilege(@action) + def svc_vm_action(id, vm_action, action_args) + @vm = Vm.find(id) + authorized!(VmTask.action_privilege(vm_action), + VmTask.action_privilege_object(vm_action, at vm)) unless @vm.queue_action(@user, vm_action, action_args) raise ActionError.new("#{vm_action} is an invalid action.") end return "#{vm_action} was successfully queued." end - def svc_cancel_queued_tasks(vm_id) - @vm = Vm.find(vm_id) + # Cancels queued tasks for for Vm with +id+ + # + # === Instance variables + # [@vm] stores the Vm with +id+ + # === Required permissions + # [Privilege::MODIFY] for the Vm's VmResourcePool + def svc_cancel_queued_tasks(id) + @vm = Vm.find(id) authorized!(Privilege::MODIFY, @vm.vm_resource_pool) Task.transaction do @@ -151,6 +219,7 @@ module VmService return "Queued tasks were successfully canceled." end + protected def vm_provision if @vm.uses_cobbler? # spaces are invalid in the cobbler name @@ -174,4 +243,10 @@ module VmService end end + private + def lookup(id, priv) + @vm = Vm.find(id) + authorized!(priv, at vm.vm_resource_pool) + end + end diff --git a/src/app/views/resources/vm_actions.rhtml b/src/app/views/resources/vm_actions.rhtml index b3fa1ad..2a50a31 100644 --- a/src/app/views/resources/vm_actions.rhtml +++ b/src/app/views/resources/vm_actions.rhtml @@ -20,7 +20,7 @@ <% end %> Action succeeded for these VMs:
                                                - <% for vm in @success_list %> + <% for vm in @successes %>
                                              • <%= vm.description %>
                                              • <% end %>
                                              -- 1.6.0.6 From sseago at redhat.com Fri May 8 19:34:11 2009 From: sseago at redhat.com (Scott Seago) Date: Fri, 8 May 2009 19:34:11 +0000 Subject: [Ovirt-devel] [PATCH server 3/3] Additional refactoring of pool controllers (and subclasses) In-Reply-To: <1241811251-15502-2-git-send-email-sseago@redhat.com> References: <1241811251-15502-1-git-send-email-sseago@redhat.com> <1241811251-15502-2-git-send-email-sseago@redhat.com> Message-ID: <1241811251-15502-3-git-send-email-sseago@redhat.com> 1) Moved all remaining auth/before_filter action into service layer 2) Added rdoc comments 3) Fixed a bug in 'add hosts/storage' functionality 4) Removed explicit error handling where it could be pushed up to the rescue_from handlers Signed-off-by: Scott Seago --- src/app/controllers/hardware_controller.rb | 44 ++++++---------- src/app/controllers/pool_controller.rb | 50 ++++++----------- src/app/controllers/resources_controller.rb | 52 ++++-------------- src/app/controllers/smart_pools_controller.rb | 24 ++------- src/app/services/hardware_pool_service.rb | 61 ++++++++++++++++----- src/app/services/pool_service.rb | 73 ++++++++++++++++++++----- src/app/services/smart_pool_service.rb | 47 ++++++++++++---- src/app/services/vm_resource_pool_service.rb | 60 ++++++++++++++++----- 8 files changed, 237 insertions(+), 174 deletions(-) diff --git a/src/app/controllers/hardware_controller.rb b/src/app/controllers/hardware_controller.rb index 7ef08db..56b6e08 100644 --- a/src/app/controllers/hardware_controller.rb +++ b/src/app/controllers/hardware_controller.rb @@ -28,8 +28,6 @@ class HardwareController < PoolController verify :method => [:post, :delete], :only => :destroy, :redirect_to => { :action => :list } - before_filter :pre_modify, :only => [:move, :removestorage] - def index if params[:path] @pools = [] @@ -124,12 +122,12 @@ class HardwareController < PoolController def hosts_json if params[:exclude_host] - pre_show_pool + svc_show(params[:id]) hosts = @pool.hosts find_opts = {:conditions => ["id != ?", params[:exclude_host]]} include_pool = false elsif params[:id] - pre_show_pool + svc_show(params[:id]) hosts = @pool.hosts find_opts = {} include_pool = false @@ -146,6 +144,7 @@ class HardwareController < PoolController end def vm_pools_json + svc_show(params[:id]) json_list(Pool, [:id, :name, :id], [@pool, :children], @@ -154,7 +153,7 @@ class HardwareController < PoolController def storage_pools_json if params[:id] - pre_show_pool + svc_show(params[:id]) storage_pools = @pool.storage_pools find_opts = {:conditions => "type != 'LvmStoragePool'"} include_pool = false @@ -171,11 +170,13 @@ class HardwareController < PoolController end def storage_volumes_json + svc_show(params[:id]) json_list(@pool.all_storage_volumes, [:display_name, :size_in_gb, :get_type_label]) end def move + svc_modify(params[:id]) @resource_type = params[:resource_type] @id = params[:id] @pools = HardwarePool.get_default_pool.full_set_nested(:method => :json_hash_element, @@ -191,15 +192,17 @@ class HardwareController < PoolController end def additional_create_params - {:resource_type => params[:resource_type], - :resource_ids => params[:resource_ids], - :parent_id => (params[:hardware_pool] ? - params[:hardware_pool][:parent_id] : - params[:parent_id])} + ret_hash = {:resource_ids => params[:resource_ids], + :parent_id => (params[:hardware_pool] ? + params[:hardware_pool][:parent_id] : + params[:parent_id])} + ret_hash[:resource_type] = Host if params[:resource_type] == "hosts" + ret_hash[:resource_type] = Storage if params[:resource_type] == "storage" + ret_hash end def add_hosts - edit_items(@pool.id, :svc_move_hosts, :add) + edit_items(params[:id], :svc_move_hosts, :add) end def move_hosts @@ -207,7 +210,7 @@ class HardwareController < PoolController end def add_storage - edit_items(@pool.id, :svc_move_storage, :add) + edit_items(params[:id], :svc_move_storage, :add) end def move_storage @@ -225,23 +228,8 @@ class HardwareController < PoolController end def removestorage + svc_modify(params[:id]) render :layout => 'popup' end - - protected - #filter methods - def pre_new - @pool = HardwarePool.new - super - end - def pre_edit - @pool = HardwarePool.find(params[:id]) - @parent = @pool.parent - set_perms(@pool) - end - def pre_modify - pre_edit - authorize_admin - end end diff --git a/src/app/controllers/pool_controller.rb b/src/app/controllers/pool_controller.rb index 6e41ac6..5c5949a 100644 --- a/src/app/controllers/pool_controller.rb +++ b/src/app/controllers/pool_controller.rb @@ -20,10 +20,6 @@ class PoolController < ApplicationController - before_filter :pre_show_pool, :only => [:users_json, :show_tasks, :tasks, - :vm_pools_json, - :pools_json, :storage_volumes_json] - XML_OPTS = { :include => [ :storage_pools, :hosts, :quota ] } @@ -36,6 +32,16 @@ class PoolController < ApplicationController {} end + def show_tasks + svc_show(params[:id]) + super + end + + def tasks + svc_show(params[:id]) + super + end + def show svc_show(params[:id]) render_show @@ -65,6 +71,7 @@ class PoolController < ApplicationController end def users_json + svc_show(params[:id]) attr_list = [] attr_list << :grid_id if params[:checkboxes] attr_list += [:uid, [:role, :name], :source] @@ -97,6 +104,7 @@ class PoolController < ApplicationController end def new + svc_new(get_parent_id) render :layout => 'popup' end @@ -141,44 +149,22 @@ class PoolController < ApplicationController end def edit + svc_modify(params[:id]) render :layout => 'popup' end def destroy - alert = nil - success = true - status = :ok - begin - alert = svc_destroy(params[:id]) - rescue ActionError => error - alert = error.message - success = false - status = :conflict - rescue PermissionError => error - alert = error.message - success = false - status = :forbidden - rescue Exception => error - alert = error.message - success = false - status = :method_not_allowed - end + alert = svc_destroy(params[:id]) respond_to do |format| - format.json { render :json => { :object => "pool", :success => success, + format.json { render :json => { :object => "pool", :success => true, :alert => alert } } - format.xml { head status } + format.xml { head(:ok) } end end protected - def pre_new - @parent = Pool.find(params[:parent_id]) - set_perms(@parent) - end - def pre_show_pool - @pool = Pool.find(params[:id]) - set_perms(@pool) - authorize_view + def get_parent_id + params[:parent_id] end # FIXME: remove these when service transition is complete. these are here # to keep from running permissions checks and other setup steps twice diff --git a/src/app/controllers/resources_controller.rb b/src/app/controllers/resources_controller.rb index edee59d..97d5ee9 100644 --- a/src/app/controllers/resources_controller.rb +++ b/src/app/controllers/resources_controller.rb @@ -68,7 +68,7 @@ class ResourcesController < PoolController end def vms_json - pre_show_pool + svc_show(params[:id]) super(:full_items => @pool.vms, :find_opts => {}, :include_pool => :true) end @@ -78,8 +78,6 @@ class ResourcesController < PoolController params[:parent_id])} end - #FIXME: we need permissions checks. user must have permission. We also need to fail - # for pools that aren't currently empty def delete vm_pool_ids = params[:vm_pool_ids].split(",") successes = [] @@ -94,48 +92,20 @@ class ResourcesController < PoolController failures[@pool] = ex.message end end - success = failures.empty? - alert = "" - if !successes.empty? - alert = "Virtual Machine Pools #{successes.collect{|pool| pool.name}.join(', ')} were successfully deleted." - end - if !failures.empty? - alert += " Errors in deleting VM Pools #{failures.collect{|pool,err| "#{pool.name}: #{err}"}.join(', ')}." + unless failures.empty? + raise PartialSuccessError.new("Delete failed for some VM Pools", + failures, successes) end render :json => { :object => "vm_resource_pool", :success => success, - :alert => alert } + :alert => "VM Pools were successfully deleted." } end def vm_actions - begin - alert = svc_vm_actions_hosts(params[:id], params[:vm_action], - params[:vm_ids].split(",")) - @success_list = @vms - @failures = {} - render :layout => 'confirmation' - rescue PermissionError - raise - rescue PartialSuccessError => error - @success_list = error.successes - @failures = error.failures - render :layout => 'confirmation' - rescue Exeption => ex - flash[:errmsg] = 'Error queueing VM actions.' - @success_list = [] - @failure_list = [] - end + @layout = 'confirmation' + alert = svc_vm_actions(params[:id], params[:vm_action], + params[:vm_ids].split(",")) + @successes = @vms + @failures = {} + render :layout => @layout end - - protected - def pre_new - @pool = VmResourcePool.new - super - end - def pre_edit - @pool = VmResourcePool.find(params[:id]) - @parent = @pool.parent - @current_pool_id=@pool.id - set_perms(@pool.parent) - end - end diff --git a/src/app/controllers/smart_pools_controller.rb b/src/app/controllers/smart_pools_controller.rb index 0198d47..83e72b5 100644 --- a/src/app/controllers/smart_pools_controller.rb +++ b/src/app/controllers/smart_pools_controller.rb @@ -21,7 +21,6 @@ class SmartPoolsController < PoolController include SmartPoolService - before_filter :pre_modify, :only => [:add_pool_dialog] def show_vms show end @@ -41,12 +40,11 @@ class SmartPoolsController < PoolController end def additional_create_params - {:parent_id => (params[:hardware_pool] ? - params[:hardware_pool][:parent_id] : - params[:parent_id])} + {} end def add_pool_dialog + svc_modify(params[:id]) @selected_pools = @pool.tagged_pools.collect {|pool| pool.id} render :layout => 'popup' end @@ -80,7 +78,7 @@ class SmartPoolsController < PoolController def items_json_internal(item_class, item_assoc) if params[:id] - pre_show_pool + svc_show(params[:id]) full_items = @pool.send(item_assoc) find_opts = {} include_pool = false @@ -152,20 +150,8 @@ class SmartPoolsController < PoolController end protected - #filter methods - def pre_new - @pool = SmartPool.new - @parent = DirectoryPool.get_or_create_user_root(get_login_user) - set_perms(@parent) - end - def pre_edit - @pool = SmartPool.find(params[:id]) - @parent = @pool.parent - set_perms(@pool) - end - def pre_modify - pre_edit - authorize_admin + def get_parent_id + DirectoryPool.get_or_create_user_root(get_login_user).id end end diff --git a/src/app/services/hardware_pool_service.rb b/src/app/services/hardware_pool_service.rb index 51519fa..28040f3 100644 --- a/src/app/services/hardware_pool_service.rb +++ b/src/app/services/hardware_pool_service.rb @@ -22,43 +22,78 @@ module HardwarePoolService include PoolService + # Load a new HardwarePool for creating + # + # === Instance variables + # [@pool] loads a new HardwarePool object into memory + # [@parent] stores the parent of @pool as specified by + # +parent_id+ + # === Required permissions + # [Privilege::MODIFY] for the parent pool + def svc_new(parent_id, attributes=nil) + @pool = HardwarePool.new(attributes) + super(parent_id) + end + + # Save a new HardwarePool + # + # === Instance variables + # [@pool] the newly saved HardwarePool + # [@parent] stores the parent of @pool as specified by + # +parent_id+ + # === Required permissions + # [Privilege::MODIFY] for the parent pool def svc_create(pool_hash, other_args) - # from before_filter - @pool = HardwarePool.new(pool_hash) - @parent = Pool.find(other_args[:parent_id]) - authorized!(Privilege::MODIFY, at parent) + svc_new(other_args[:parent_id], pool_hash) - alert = "Hardware Pool was successfully created." Pool.transaction do @pool.create_with_parent(@parent) begin - if other_args[:resource_type] == "hosts" - svc_move_hosts(@pool.id, other_args[:resource_ids].split(","), @pool.id) - elsif other_args[:resource_type] == "storage" - svc_move_storage(@pool.id, other_args[:resource_ids].split(","), @pool.id) + if other_args[:resource_type] + svc_move_items_internal(@pool.id, other_args[:resource_type], + other_args[:resource_ids].split(","), + @pool.id) end - # wrapped in a transaction, so fail on partial success + # wrapped in a transaction, so fail on partial success rescue PartialSuccessError => ex # Raising ActionError here since we're aborting the transaction. Errors # on creation here result in no persistent changes to the database. raise ActionError.new("Could not move all hosts or storage to this pool") end end - return alert + return "Hardware Pool was successfully created." end + # Move Hosts identified by +host_ids+ from one Hardware Pool to another. The + # target pool for the hosts is specified as +target_pool_id+. + # + # === Instance variables + # [@pool] the current HardwarePool + # [@parent] the parent of @pool + # === Required permissions + # [Privilege::MODIFY] for the target pool as well as the current + # pool for each moved host def svc_move_hosts(pool_id, host_ids, target_pool_id) svc_move_items_internal(pool_id, Host, host_ids, target_pool_id) end + + # Move Storage Pools identified by +storage_pool_ids+ from one Hardware Pool + # to another. The target pool for the hosts is specified as +target_pool_id+. + # + # === Instance variables + # [@pool] the current HardwarePool + # [@parent] the parent of @pool + # === Required permissions + # [Privilege::MODIFY] for the target pool as well as the current + # pool for each moved Storage Pool def svc_move_storage(pool_id, storage_pool_ids, target_pool_id) svc_move_items_internal(pool_id, StoragePool, storage_pool_ids, target_pool_id) end def svc_move_items_internal(pool_id, item_class, resource_ids, target_pool_id) # from before_filter - @pool = HardwarePool.find(pool_id) target_pool = Pool.find(target_pool_id) authorized!(Privilege::MODIFY,target_pool) - authorized!(Privilege::MODIFY, at pool) unless @pool == target_pool + lookup(pool_id, Privilege::MODIFY) resources = item_class.find(resource_ids) diff --git a/src/app/services/pool_service.rb b/src/app/services/pool_service.rb index 2377094..c05b0dc 100644 --- a/src/app/services/pool_service.rb +++ b/src/app/services/pool_service.rb @@ -22,34 +22,69 @@ module PoolService include ApplicationService - def svc_show(pool_id) - # from before_filter - @pool = Pool.find(pool_id) - authorized!(Privilege::VIEW, at pool) + # Load the Pool with +id+ for viewing + # + # === Instance variables + # [@pool] stores the Pool with +id+ + # [@parent] stores the parent of @pool + # === Required permissions + # [Privilege::VIEW] for the pool + def svc_show(id) + lookup(id, Privilege::VIEW) end - def update_perms - set_perms(@pool) + # Load the Pool with +id+ for editing + # + # === Instance variables + # [@pool] stores the Pool with +id+ + # [@parent] stores the parent of @pool + # === Required permissions + # [Privilege::MODIFY] for the pool + def svc_modify(id) + lookup(id, Privilege::MODIFY) end + def additional_update_actions(pool, pool_hash) end - def svc_update(pool_id, pool_hash) + # Update attributes for the Pool with +id+ + # + # === Instance variables + # [@pool] stores the Pool with +id+ + # [@parent] stores the parent of @pool + # === Required permissions + # [Privilege::MODIFY] for the pool + def svc_update(id, pool_hash) # from before_filter - @pool = Pool.find(params[:id]) - @parent = @pool.parent - update_perms - authorized!(Privilege::MODIFY) + svc_modify(id) Pool.transaction do additional_update_actions(@pool, pool_hash) @pool.update_attributes!(pool_hash) end end - def svc_destroy(pool_id) - # from before_filter - @pool = Pool.find(pool_id) - authorized!(Privilege::MODIFY, @pool) + # Load a new Pool for creating + # + # === Instance variables + # [@pool] loads a new Pool object into memory + # [@parent] stores the parent of @pool as specified by + # +parent_id+ + # === Required permissions + # [Privilege::MODIFY] for the parent pool + def svc_new(parent_id, attributes=nil) + @parent = Pool.find(parent_id) + authorized!(Privilege::MODIFY, @parent) + end + + # Destroy the Pool object with +id+ + # + # === Instance variables + # [@pool] the destroyed pool + # [@parent] stores the parent of @pool + # === Required permissions + # [Privilege::MODIFY] for the pool + def svc_destroy(id) + svc_modify(id) check_destroy_preconditions @pool.destroy return "Pool was successfully deleted." @@ -57,4 +92,12 @@ module PoolService def check_destroy_preconditions end + + protected + def lookup(id, priv, use_parent_perms=false) + @pool = Pool.find(id) + @parent = @pool.parent + @current_pool_id = @pool.id if use_parent_perms + authorized!(priv, use_parent_perms ? @parent : @pool) + end end diff --git a/src/app/services/smart_pool_service.rb b/src/app/services/smart_pool_service.rb index 344b9e8..67adfe0 100644 --- a/src/app/services/smart_pool_service.rb +++ b/src/app/services/smart_pool_service.rb @@ -22,23 +22,46 @@ module SmartPoolService include PoolService - def svc_create(pool_hash, other_args) - # from before_filter - @pool = SmartPool.new(pool_hash) - @parent = DirectoryPool.get_or_create_user_root(get_login_user) - authorized!(Privilege::MODIFY, at parent) + # Load a new SmartPool for creating + # + # === Instance variables + # [@pool] loads a new SmartPool object into memory + # [@parent] stores the parent of @pool as specified by + # +parent_id+ + # === Required permissions + # [Privilege::MODIFY] for the pool + def svc_new(parent_id, attributes=nil) + @pool = SmartPool.new(attributes) + super(parent_id) + end - alert = "Smart Pool was successfully created." + # Save a new SmartPool + # + # === Instance variables + # [@pool] the newly saved SmartPool + # [@parent] stores the parent of @pool as specified by + # +parent_id+ + # === Required permissions + # [Privilege::MODIFY] for the pool + def svc_create(pool_hash, other_args) + svc_new(nil, pool_hash) @pool.create_with_parent(@parent) - return alert + return "Smart Pool was successfully created." end - # if item_class is nil, resource_ids is an array of [class, id] pairs + # Add or remove (depending on +item_action+) objects represneted by + # +resource_ids+ in the smart pool identified by +pool_id+. Item type + # is identified by +item_class+. If +item_class+ is nil, then + # +resource_ids+ is an array of [class, id] pairs. + # + # === Instance variables + # [@pool] the current SmartPool + # [@parent] the parent of @pool + # === Required permissions + # [Privilege::MODIFY] for the current smart pool + # [Privilege::VIEW] for any item being added to this smart pool def svc_add_remove_items(pool_id, item_class, item_action, resource_ids) - # from before_filter - @pool = SmartPool.find(pool_id) - @parent = @pool.parent - authorized!(Privilege::MODIFY, at pool) + svc_modify(pool_id) unless [:add, :remove].include?(item_action) raise ActionError.new("Invalid action #{item_action}") end diff --git a/src/app/services/vm_resource_pool_service.rb b/src/app/services/vm_resource_pool_service.rb index 30f7106..00cf982 100644 --- a/src/app/services/vm_resource_pool_service.rb +++ b/src/app/services/vm_resource_pool_service.rb @@ -22,22 +22,56 @@ module VmResourcePoolService include PoolService - def svc_create(pool_hash, other_args) - # from before_filter - @pool = VmResourcePool.new(pool_hash) - @parent = Pool.find(other_args[:parent_id]) - authorized!(Privilege::MODIFY, at parent) + # Load the VmResourcePool with +id+ for editing + # + # === Instance variables + # [@pool] stores the Pool with +id+ + # [@parent] stores the parent of @pool + # === Required permissions + # [Privilege::MODIFY] for the parent pool + def svc_modify(id) + lookup(id, Privilege::MODIFY, true) + end - alert = "VM Pool was successfully created." - @pool.create_with_parent(@parent) - return alert + # Load a new VmResourcePool for creating + # + # === Instance variables + # [@pool] loads a new VmResourcePool object into memory + # [@parent] stores the parent of @pool as specified by + # +parent_id+ + # === Required permissions + # [Privilege::MODIFY] for the parent pool + def svc_new(parent_id, attributes=nil) + @pool = VmResourcePool.new(attributes) + super(parent_id) end - def update_perms - @current_pool_id=@pool.id - set_perms(@pool.parent) + # Save a new VmResourcePool + # + # === Instance variables + # [@pool] the newly saved VmResourcePool + # [@parent] stores the parent of @pool as specified by + # +parent_id+ + # === Required permissions + # [Privilege::MODIFY] for the parent pool + def svc_create(pool_hash, other_args) + svc_new(other_args[:parent_id], pool_hash) + @pool.create_with_parent(@parent) + return "VM Pool was successfully created." end + # Perform action +vm_action+ on vms identified by +vm_id+ within Pool + # +pool_id+ + # + # === Instance variables + # [@pool] the current VmResourcePool + # [@parent] the parent of @pool + # [@action] action identified by +vm_action+ + # [@action_label] label for action identified by +vm_action+ + # [@vms] VMs identified by +vm_ids+ + # === Required permissions + # permission is action-specific as determined by + # VmTask.action_privilege(@action) def svc_vm_actions(pool_id, vm_action, vm_ids) # from before_filter @pool = VmResourcePool.find(pool_id) @@ -65,12 +99,10 @@ module VmResourcePoolService end end unless failed_vms.empty? - raise PartialSuccessError.new("#{@action} only partially successful", + raise PartialSuccessError.new("#{@action} failed for some VMs", failed_vms, successful_vms) end return "Action #{@action} successful." end - - end -- 1.6.0.6 From gilberto.mautner at locaweb.com.br Sat May 9 13:35:34 2009 From: gilberto.mautner at locaweb.com.br (Gilberto Mautner) Date: Sat, 9 May 2009 10:35:34 -0300 Subject: [Ovirt-devel] Type Object has no attibute 'seq' or Timed Out waiting for broker Message-ID: Hello, I'm getting erros "Type Object has no attribute 'seq'" and "Timed out waiting for broker to synchronize" when trying to start vms or refresh storage pools. I cannot find anything else than some stack trace errors that don't show where the problem is. I did the install procedure as instructed in http://ovirt.org/install-instructions.html Any help will be greatly appreciated. Thanks Gilberto From kc at cobradevil.org Sat May 9 19:45:58 2009 From: kc at cobradevil.org (william) Date: Sat, 09 May 2009 21:45:58 +0200 Subject: [Ovirt-devel] Type Object has no attibute 'seq' or Timed Out waiting for broker In-Reply-To: References: Message-ID: <1241898358.16959.2.camel@RIC.kc.mindef.nl> Hello Gilberto Just resolved my issue regarding the seq ;) Do you have already nodes available? ovirt-server add's the storage pool and try's to mount or detect this pool from an available node. When there are no nodes you cannot add the storage and the message says Pending. My problem was a firewall on the storage server which refused connections from available nodes. With kind regards William van de Velde On Sat, 2009-05-09 at 10:35 -0300, Gilberto Mautner wrote: > Hello, > > I'm getting erros "Type Object has no attribute 'seq'" and "Timed out > waiting for broker to synchronize" when trying to start vms or refresh > storage pools. > > I cannot find anything else than some stack trace errors that don't > show where the problem is. > > I did the install procedure as instructed in http://ovirt.org/install-instructions.html > > Any help will be greatly appreciated. > > Thanks > > Gilberto > > _______________________________________________ > Ovirt-devel mailing list > Ovirt-devel at redhat.com > https://www.redhat.com/mailman/listinfo/ovirt-devel From gilberto.mautner at locaweb.com.br Mon May 11 01:07:17 2009 From: gilberto.mautner at locaweb.com.br (Gilberto Mautner) Date: Sun, 10 May 2009 22:07:17 -0300 Subject: [Ovirt-devel] $guest_httpd_ipaddr missing in ovirt-appliance.pp Message-ID: Hello, I have followed the steps in http://ovirt.org/build-instructions.html to build a physical host and run oVirt Server as a virtual appliance on it. It almost worked flawlessly, except for one thing. The file ovirt- appliance.pp doesn't contain a $guest_httpd_ipaddr variable, which is used to assemble the httpd configuration file when the appliance boots for the first time. When generating an ovirt.pp file through ovirt-installer that variable is included, but the appliance relies on the ovirt-appliance.pp already built in. When the install arrives at the step of creating the httpd conf files it fails and exits without executing the rest of the tasks. Is there a workaround to make that variable present in the appliance before it is started up for the first time? Thanks Gilberto From fstutter at gmail.com Mon May 11 09:57:39 2009 From: fstutter at gmail.com (Freddy Stutterheim) Date: Mon, 11 May 2009 11:57:39 +0200 Subject: [Ovirt-devel] Storage Pending Message-ID: <51d1c06c0905110257v9f95f30y845ac116aef8a76c@mail.gmail.com> Hello,i just installed Ovirt with the instuctions on http://ovirt.org/install-instructions.html but when i try to add a storage pool i only get the state "Pending" and nothing happens(also tried nfs). I have a node that is available. I used the iscsi setup instuctions on http://ovirt.org/iscsi-setup.html. The storage is on the same machine as the oVirt server. I have a dns server in my network, but is it better to enable dns durring install of ovirt? Is it easier to disable SElinux and Firewall? Any help wil be very much appreciated. -------------- next part -------------- An HTML attachment was scrubbed... URL: From fstutter at gmail.com Mon May 11 09:14:05 2009 From: fstutter at gmail.com (Freddy Stutterheim) Date: Mon, 11 May 2009 11:14:05 +0200 Subject: [Ovirt-devel] Storage pending Message-ID: <51d1c06c0905110214p6cda825dl85389df429bf5d31@mail.gmail.com> Hello,i just installed Ovirt with the instuctions on http://ovirt.org/install-instructions.html but when i try to add a storage pool i only get the state "Pending" and nothing happens. I have a node that is available. I used the iscsi setup instuctions on http://ovirt.org/iscsi-setup.html. The storage is on the same machine as the oVirt server. I have a dns server in my network, but is it better to enable dns durring install of ovirt? Is it easier to disable SElinux and Firewall? Any help wil be very much appreciated. Freddy S. -------------- next part -------------- An HTML attachment was scrubbed... URL: From hbrock at redhat.com Mon May 11 14:18:13 2009 From: hbrock at redhat.com (Hugh O. Brock) Date: Mon, 11 May 2009 10:18:13 -0400 Subject: [Ovirt-devel] $guest_httpd_ipaddr missing in ovirt-appliance.pp In-Reply-To: References: Message-ID: <20090511141813.GA20032@redhat.com> On Sun, May 10, 2009 at 10:07:17PM -0300, Gilberto Mautner wrote: > Hello, > > I have followed the steps in http://ovirt.org/build-instructions.html > to build a physical host and run oVirt Server as a virtual appliance > on it. > > It almost worked flawlessly, except for one thing. The file ovirt- > appliance.pp doesn't contain a $guest_httpd_ipaddr variable, which is > used to assemble the httpd configuration file when the appliance boots > for the first time. > > When generating an ovirt.pp file through ovirt-installer that variable > is included, but the appliance relies on the ovirt-appliance.pp > already built in. When the install arrives at the step of creating the > httpd conf files it fails and exits without executing the rest of the > tasks. > > Is there a workaround to make that variable present in the appliance > before it is started up for the first time? Interesting -- we have not tested building the appliance lately. Joey, is there an easy solution to this problem? --Hugh From jboggs at redhat.com Mon May 11 14:29:40 2009 From: jboggs at redhat.com (Joey Boggs) Date: Mon, 11 May 2009 10:29:40 -0400 Subject: [Ovirt-devel] $guest_httpd_ipaddr missing in ovirt-appliance.pp In-Reply-To: <20090511141813.GA20032@redhat.com> References: <20090511141813.GA20032@redhat.com> Message-ID: <4A083654.40601@redhat.com> Hugh O. Brock wrote: > On Sun, May 10, 2009 at 10:07:17PM -0300, Gilberto Mautner wrote: > >> Hello, >> >> I have followed the steps in http://ovirt.org/build-instructions.html >> to build a physical host and run oVirt Server as a virtual appliance >> on it. >> >> It almost worked flawlessly, except for one thing. The file ovirt- >> appliance.pp doesn't contain a $guest_httpd_ipaddr variable, which is >> used to assemble the httpd configuration file when the appliance boots >> for the first time. >> >> When generating an ovirt.pp file through ovirt-installer that variable >> is included, but the appliance relies on the ovirt-appliance.pp >> already built in. When the install arrives at the step of creating the >> httpd conf files it fails and exits without executing the rest of the >> tasks. >> >> Is there a workaround to make that variable present in the appliance >> before it is started up for the first time? >> > > Interesting -- we have not tested building the appliance lately. > > Joey, is there an easy solution to this problem? > > --Hugh > There's 2 ways to do it one is to boot the appliance and switch to runlevel 1 then insert the variable or after booting and failing, insert it then run ace install ovirt_appliance. From fstutter at gmail.com Mon May 11 15:48:20 2009 From: fstutter at gmail.com (Freddy Stutterheim) Date: Mon, 11 May 2009 17:48:20 +0200 Subject: [Ovirt-devel] Type Object has no attibute 'seq' or Timed Out waiting for broker Message-ID: <51d1c06c0905110848m3a78c3bfl49557b9194f3c83f@mail.gmail.com> Have you found a sollution for the problem? I have iscsi setup on host machine, and i get the same errors. i allready disabled the firewall and selinux on the host but i still ony get " Type Object has no attribute 'seq' " . Please help. Freddy -------------- next part -------------- An HTML attachment was scrubbed... URL: From fstutter at gmail.com Mon May 11 15:58:21 2009 From: fstutter at gmail.com (Freddy Stutterheim) Date: Mon, 11 May 2009 17:58:21 +0200 Subject: [Ovirt-devel] Type Object has no attibute 'seq' or Timed Out waiting for broker Message-ID: <51d1c06c0905110858x70b4a36at9b671265346743a6@mail.gmail.com> Have you found a sollution for the problem? I have iscsi setup on host machine, and i get the same errors. i allready disabled the firewall and selinux on the host but i still ony get " Type Object has no attribute 'seq' " . Please help. Freddy -------------- next part -------------- An HTML attachment was scrubbed... URL: From sseago at redhat.com Mon May 11 16:24:23 2009 From: sseago at redhat.com (Scott Seago) Date: Mon, 11 May 2009 16:24:23 +0000 Subject: [Ovirt-devel] [PATCH server] converted the quota controller to use the service layer. Message-ID: <1242059063-27975-1-git-send-email-sseago@redhat.com> Signed-off-by: Scott Seago --- src/app/controllers/quota_controller.rb | 61 ++++-------------- src/app/services/quota_service.rb | 100 +++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+), 47 deletions(-) create mode 100644 src/app/services/quota_service.rb diff --git a/src/app/controllers/quota_controller.rb b/src/app/controllers/quota_controller.rb index d4fbcd0..fcdd672 100644 --- a/src/app/controllers/quota_controller.rb +++ b/src/app/controllers/quota_controller.rb @@ -18,78 +18,45 @@ # also available at http://www.gnu.org/copyleft/gpl.html. class QuotaController < ApplicationController + include QuotaService # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html) verify :method => :post, :only => [ :destroy, :create, :update ], :redirect_to => { :controller => 'dashboard' } - def redirect_to_parent - redirect_to :controller => @quota.pool.get_controller, :action => 'show', :id => @quota.pool - end - def show - @quota = Quota.find(params[:id]) - authorize_view + svc_show(params[:id]) end def new + svc_new(params[:pool_id]) render :layout => 'popup' end def create - begin - @quota.save! - render :json => { :object => "quota", :success => true, - :alert => "Quota was successfully created." } - rescue - render :json => { :object => "quota", :success => false, - :errors => @quota.errors.localize_error_messages.to_a} - end + alert = svc_create(params[:quota]) + render :json => { :object => "quota", :success => true, :alert => alert } end def edit + svc_modify(params[:id]) render :layout => 'popup' end def update - begin - @quota.update_attributes!(params[:quota]) - render :json => { :object => "quota", :success => true, - :alert => "Quota was successfully updated." } - rescue - render :json => { :object => "quota", :success => false, - :errors => @quota.errors.localize_error_messages.to_a, - :alert => $!.to_s} - end + alert = svc_update(params[:id], params[:quota]) + render :json => { :object => "quota", :success => true, :alert => alert } end def destroy - pool = @quota.pool - if @quota.destroy - alert="Quota was successfully deleted." - success=true - else - alert="Failed to delete quota." - success=false - end - render :json => { :object => "quota", :success => success, :alert => alert } + alert = svc_destroy(params[:id]) + render :json => { :object => "quota", :success => true, :alert => alert } end - protected - def pre_new - @quota = Quota.new( { :pool_id => params[:pool_id]}) - set_perms(@quota.pool) - end - def pre_create - @quota = Quota.new(params[:quota]) - set_perms(@quota.pool) - end - def pre_show - @quota = Quota.find(params[:id]) - set_perms(@quota.pool) + # FIXME: remove these when service transition is complete. these are here + # to keep from running permissions checks and other setup steps twice + def tmp_pre_update end - def pre_edit - @quota = Quota.find(params[:id]) - set_perms(@quota.pool) + def tmp_authorize_admin end end diff --git a/src/app/services/quota_service.rb b/src/app/services/quota_service.rb new file mode 100644 index 0000000..ca6f2db --- /dev/null +++ b/src/app/services/quota_service.rb @@ -0,0 +1,100 @@ +# +# Copyright (C) 2009 Red Hat, Inc. +# Written by Scott Seago , +# +# 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; version 2 of the License. +# +# 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. A copy of the GNU General Public License is +# also available at http://www.gnu.org/copyleft/gpl.html. +# Mid-level API: Business logic around quotas +module QuotaService + include ApplicationService + + # Load the Quota with +id+ for viewing + # + # === Instance variables + # [@quota] stores the Quota with +id+ + # === Required permissions + # [Privilege::VIEW] on quota's Pool + def svc_show(id) + lookup(id,Privilege::VIEW) + end + + # Load the Quota with +id+ for editing + # + # === Instance variables + # [@quota] stores the Quota with +id+ + # === Required permissions + # [Privilege::MODIFY] on quota's Pool + def svc_modify(id) + lookup(id,Privilege::MODIFY) + end + + # Update attributes for the Quota with +id+ + # + # === Instance variables + # [@quota] stores the Quota with +id+ + # === Required permissions + # [Privilege::MODIFY] for the Quota's Pool + def svc_update(id, quota_hash) + lookup(id,Privilege::MODIFY) + @quota.update_attributes!(quota_hash) + return "Quota was successfully updated." + end + + # Load a new Quota for creating + # + # === Instance variables + # [@quota] loads a new Quota object into memory + # === Required permissions + # [Privilege::MODIFY] for the quota's Pool as specified by + # +pool_id+ + def svc_new(pool_id) + @quota = Quota.new( { :pool_id => pool_id}) + authorized!(Privilege::MODIFY, at quota.pool) + + end + + # Save a new Quota + # + # === Instance variables + # [@quota] the newly saved quota + # === Required permissions + # [Privilege::MODIFY] for the quota's Pool as specified by + # +pool_id+ + def svc_create(quota_hash) + @quota = Quota.new( quota_hash) + authorized!(Privilege::MODIFY, at quota.pool) + @quota.save! + return "Quota was successfully created." + end + + # Destroys for the Quota with +id+ + # + # === Instance variables + # [@quota] stores the Quota with +id+ + # === Required permissions + # [Privilege::MODIFY] on quota's Pool + def svc_destroy(id) + lookup(id,Privilege::MODIFY) + @quota.destroy + return "Quota was successfully deleted." + end + + private + def lookup(id, priv) + @quota = Quota.find(id) + authorized!(priv, at quota.pool) + end + +end -- 1.6.0.6 From mmcgrath at redhat.com Mon May 11 16:50:57 2009 From: mmcgrath at redhat.com (Mike McGrath) Date: Mon, 11 May 2009 11:50:57 -0500 (CDT) Subject: [Ovirt-devel] [PATCH server] Lower apache retry interval Message-ID: This will cause apache to try reconnecting more often to the ovirt backend so when it restarts, it's less noticeable to the user. --- a/conf/ovirt-server.conf +++ b/conf/ovirt-server.conf @@ -21,7 +21,7 @@ NameVirtualHost AdminNetIpAddress:80 TransferLog /etc/httpd/logs/access_log LogLevel warn - ProxyPass /ovirt http://AdminNodeFQDN/ovirt + ProxyPass /ovirt http://AdminNodeFQDN/ovirt retry=3 ProxyPassReverse /ovirt http://AdminNodeFQDN/ovirt From imain at redhat.com Mon May 11 18:35:37 2009 From: imain at redhat.com (Ian Main) Date: Mon, 11 May 2009 11:35:37 -0700 Subject: [Ovirt-devel] Type Object has no attibute 'seq' or Timed Out waiting for broker In-Reply-To: <51d1c06c0905110858x70b4a36at9b671265346743a6@mail.gmail.com> References: <51d1c06c0905110858x70b4a36at9b671265346743a6@mail.gmail.com> Message-ID: <20090511113537.4f397883@tp.mains.net> On Mon, 11 May 2009 17:58:21 +0200 Freddy Stutterheim wrote: > Have you found a sollution for the problem? > I have iscsi setup on host machine, and i get the same errors. > i allready disabled the firewall and selinux on the host but i still ony get > " Type Object has no attribute 'seq' " . > Please help. The issue is actually that the qmf call is timing out. This usually happens with storage type things where there's actually a firewall or the port/host is not set correctly etc and the call to mount takes ages to complete. The error is a programming error in QMF in the timeout exception. This should be fixed in a version of qmf that should be hitting fedora any day now. The new version also includes the ability to specify the timeout length, which I will likely increase to allow the real error from libvirt-qpid to come back. Ian From sseago at redhat.com Mon May 11 18:49:57 2009 From: sseago at redhat.com (Scott Seago) Date: Mon, 11 May 2009 18:49:57 +0000 Subject: [Ovirt-devel] [PATCH server] converted the task controller to use the service layer. Message-ID: <1242067797-32374-1-git-send-email-sseago@redhat.com> Signed-off-by: Scott Seago --- src/app/controllers/task_controller.rb | 15 ++------- src/app/models/storage_volume.rb | 4 ++ .../task_service.rb} | 35 +++++++++++--------- 3 files changed, 26 insertions(+), 28 deletions(-) copy src/app/{controllers/task_controller.rb => services/task_service.rb} (57%) diff --git a/src/app/controllers/task_controller.rb b/src/app/controllers/task_controller.rb index 9756f79..ba31e0c 100644 --- a/src/app/controllers/task_controller.rb +++ b/src/app/controllers/task_controller.rb @@ -18,19 +18,10 @@ # also available at http://www.gnu.org/copyleft/gpl.html. class TaskController < ApplicationController - def show - @task = Task.find(params[:id]) - if @task[:type] == VmTask.name - set_perms(@task.vm.vm_resource_pool) - elsif @task[:type] == StorageTask.name - set_perms(@task.storage_pool.hardware_pool) - elsif @task[:type] == StorageVolumeTask.name - set_perms(@task.storage_volume.storage_pool.hardware_pool) - elsif @task[:type] == HostTask.name - set_perms(@task.host.hardware_pool) - end - authorize_view + include TaskService + def show + svc_show(params[:id] end end diff --git a/src/app/models/storage_volume.rb b/src/app/models/storage_volume.rb index 59d166e..45cd5c6 100644 --- a/src/app/models/storage_volume.rb +++ b/src/app/models/storage_volume.rb @@ -166,6 +166,10 @@ class StorageVolume < ActiveRecord::Base return_hash end + def permission_obj + storage_pool.hardware_pool + end + def movable? if vms.size > 0 or (not lvm_storage_pool.nil? and not lvm_storage_pool.movable?) diff --git a/src/app/controllers/task_controller.rb b/src/app/services/task_service.rb similarity index 57% copy from src/app/controllers/task_controller.rb copy to src/app/services/task_service.rb index 9756f79..9e5b5b4 100644 --- a/src/app/controllers/task_controller.rb +++ b/src/app/services/task_service.rb @@ -1,6 +1,6 @@ -# -# Copyright (C) 2008 Red Hat, Inc. -# Written by Scott Seago +# +# Copyright (C) 2009 Red Hat, Inc. +# Written by Scott Seago , # # 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 @@ -16,21 +16,24 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301, USA. A copy of the GNU General Public License is # also available at http://www.gnu.org/copyleft/gpl.html. +# Mid-level API: Business logic around tasks +module TaskService + include ApplicationService -class TaskController < ApplicationController - def show - @task = Task.find(params[:id]) - if @task[:type] == VmTask.name - set_perms(@task.vm.vm_resource_pool) - elsif @task[:type] == StorageTask.name - set_perms(@task.storage_pool.hardware_pool) - elsif @task[:type] == StorageVolumeTask.name - set_perms(@task.storage_volume.storage_pool.hardware_pool) - elsif @task[:type] == HostTask.name - set_perms(@task.host.hardware_pool) - end - authorize_view + # Load the Task with +id+ for viewing + # + # === Instance variables + # [@task] stores the Task with +id+ + # === Required permissions + # [Privilege::VIEW] on task target's Pool + def svc_show(id) + lookup(id,Privilege::VIEW) + end + private + def lookup(id, priv) + @task = Task.find(id) + authorized!(priv, at task.task_target.permission_obj) end end -- 1.6.0.6 From sseago at redhat.com Mon May 11 19:07:17 2009 From: sseago at redhat.com (Scott Seago) Date: Mon, 11 May 2009 19:07:17 +0000 Subject: [Ovirt-devel] [PATCH server] removed obsolete @attach_to_pool references Message-ID: <1242068837-32751-1-git-send-email-sseago@redhat.com> Signed-off-by: Scott Seago --- src/app/controllers/storage_controller.rb | 23 ++++++----------------- src/app/views/host/_list.rhtml | 3 --- src/app/views/host/list.rhtml | 4 ---- src/app/views/storage/_list.rhtml | 5 ----- src/app/views/storage/list.rhtml | 4 ---- 5 files changed, 6 insertions(+), 33 deletions(-) diff --git a/src/app/controllers/storage_controller.rb b/src/app/controllers/storage_controller.rb index 2cb5464..3cd969d 100644 --- a/src/app/controllers/storage_controller.rb +++ b/src/app/controllers/storage_controller.rb @@ -43,26 +43,15 @@ class StorageController < ApplicationController :redirect_to => { :action => :list } def list - @attach_to_pool=params[:attach_to_pool] - if @attach_to_pool - pool = HardwarePool.find(@attach_to_pool) - set_perms(pool) - if authorize_view - conditions = "hardware_pool_id is null" - conditions += " or hardware_pool_id=#{pool.parent_id}" if pool.parent - @storage_pools = StoragePool.find(:all, :conditions => conditions) - end - else - #no permissions here yet -- do we disable raw volume list - conditions = [] - EQ_ATTRIBUTES.each { |attr| - conditions << "#{attr} = :#{attr}" if params[attr] - } + #no permissions here yet -- do we disable raw volume list + conditions = [] + EQ_ATTRIBUTES.each { |attr| + conditions << "#{attr} = :#{attr}" if params[attr] + } - @storage_pools = StoragePool.find(:all, + @storage_pools = StoragePool.find(:all, :conditions => [conditions.join(" and "), params], :order => "id") - end end def show diff --git a/src/app/views/host/_list.rhtml b/src/app/views/host/_list.rhtml index 2d68957..2ff2924 100644 --- a/src/app/views/host/_list.rhtml +++ b/src/app/views/host/_list.rhtml @@ -17,9 +17,6 @@ "Yes" end %> -<%if @attach_to_pool -%> - <%= link_to 'Choose', { :action => 'attach_to_pool', :id => host, :hardware_pool_id => @attach_to_pool }, { :class => "choose" } %> -<% end -%> <% end %> diff --git a/src/app/views/host/list.rhtml b/src/app/views/host/list.rhtml index c1386bb..04846f3 100644 --- a/src/app/views/host/list.rhtml +++ b/src/app/views/host/list.rhtml @@ -19,11 +19,7 @@ <%- content_for :title do -%> - <%if @attach_to_pool -%> - <%= _("Choose a Host") %> - <% else -%> <%= _("Listing Hosts") %> - <% end -%> <%- end -%> diff --git a/src/app/views/storage/_list.rhtml b/src/app/views/storage/_list.rhtml index 652d659..ccb0dbe 100644 --- a/src/app/views/storage/_list.rhtml +++ b/src/app/views/storage/_list.rhtml @@ -29,14 +29,9 @@ <%elsif type == StoragePool::NFS -%> <%= storage_pool[:export_path] %> <% end -%> -<%if @attach_to_pool -%> - <%= link_to 'Choose', { :action => 'attach_to_pool', :id => storage_pool, :hardware_pool_id => @attach_to_pool }, { :class => "choose" } %> -<% else -%> - <%- if defined?(remove_from_pool) && remove_from_pool -%> <%= link_to( 'detach', { :controller => "storage", :action => 'remove_from_pool', :id => storage_pool, :hardware_pool_id => hardware_pool }, :confirm => 'Are you sure?', :method => :post, :class => "remove") %> <%- end -%> -<% end -%> <% end %> diff --git a/src/app/views/storage/list.rhtml b/src/app/views/storage/list.rhtml index 8f4ee6e..35731c3 100644 --- a/src/app/views/storage/list.rhtml +++ b/src/app/views/storage/list.rhtml @@ -24,9 +24,5 @@ <%- content_for :title do -%> - <%if @attach_to_pool -%> - <%= _("Choose a Storage Pool") %> - <% else -%> <%= _("Listing Storage Pools") %> - <% end -%> <%- end -%> -- 1.6.0.6 From imain at redhat.com Mon May 11 20:59:10 2009 From: imain at redhat.com (Ian Main) Date: Mon, 11 May 2009 13:59:10 -0700 Subject: [Ovirt-devel] [PATCH server 1/3] before_filter and rescue_from refactoring in application.rb In-Reply-To: <1241811251-15502-1-git-send-email-sseago@redhat.com> References: <1241811251-15502-1-git-send-email-sseago@redhat.com> Message-ID: <20090511135910.18449376@tp.mains.net> On Fri, 8 May 2009 19:34:09 +0000 Scott Seago wrote: > Most of these before_filters will go away once we're using the service later for everything. I fixed a couple cases where the legacy before_filter was in conflict with the service layer code, and the authorize_xxx methods now just raise PermissionError rather than formatting the reply, since rescue_from handles that for us now. > > I've also added ActionError to the rescue_from handlers, and for PartialSuccessError we now automatically include failures in hte json alert, and we set @successes and @failures so that html response views can access them. > ACK From sseago at redhat.com Mon May 11 21:14:49 2009 From: sseago at redhat.com (Scott Seago) Date: Mon, 11 May 2009 21:14:49 +0000 Subject: [Ovirt-devel] [PATCH server] converted the storage controller to use the service layer. Message-ID: <1242076489-14763-1-git-send-email-sseago@redhat.com> Signed-off-by: Scott Seago --- src/app/controllers/storage_controller.rb | 205 +++++++++-------------------- src/app/services/storage_pool_service.rb | 150 +++++++++++++++++++++ 2 files changed, 210 insertions(+), 145 deletions(-) create mode 100644 src/app/services/storage_pool_service.rb diff --git a/src/app/controllers/storage_controller.rb b/src/app/controllers/storage_controller.rb index 3cd969d..4cc4953 100644 --- a/src/app/controllers/storage_controller.rb +++ b/src/app/controllers/storage_controller.rb @@ -18,14 +18,11 @@ # also available at http://www.gnu.org/copyleft/gpl.html. class StorageController < ApplicationController + include StoragePoolService EQ_ATTRIBUTES = [ :ip_addr, :export_path, :target, :hardware_pool_id ] - before_filter :pre_pool_admin, :only => [:refresh] - before_filter :pre_new2, :only => [:new2] - before_filter :pre_add, :only => [:add, :addstorage] - def index list respond_to do |format| @@ -55,106 +52,70 @@ class StorageController < ApplicationController end def show - @storage_pool = StoragePool.find(params[:id]) - set_perms(@storage_pool.hardware_pool) - if authorize_view - respond_to do |format| - format.html { render :layout => 'selection' } - format.xml { - xml_txt = @storage_pool.to_xml(:include => :storage_volumes) do |xml| - xml.type @storage_pool.class.name - end - render :xml => xml_txt - } - end + svc_show(params[:id]) + respond_to do |format| + format.html { render :layout => 'selection' } + format.xml { + xml_txt = @storage_pool.to_xml(:include => :storage_volumes) do |xml| + xml.type @storage_pool.class.name + end + render :xml => xml_txt + } end end def new + svc_load_hw_pool(params[:hardware_pool_id]) + @storage_types = StoragePool::STORAGE_TYPE_PICKLIST + render :layout => false end def new2 - @storage_pools = @storage_pool.hardware_pool.storage_volumes + svc_new(params[:hardware_pool_id], params[:storage_type]) render :layout => false end - def insert_refresh_task - @task = StorageTask.new({ :user => @user, - :task_target => @storage_pool, - :action => StorageTask::ACTION_REFRESH_POOL, - :state => Task::STATE_QUEUED}) - @task.save! - end - def refresh - begin - insert_refresh_task - storage_url = url_for(:controller => "storage", :action => "show", :id => @storage_pool) - flash[:notice] = 'Storage pool refresh was successfully scheduled.' - rescue - flash[:notice] = 'Error scheduling Storage pool refresh.' - end - redirect_to :action => 'show', :id => @storage_pool.id + alert = svc_refresh(params[:id]) + render :json => { :object => "vm", :success => true, :alert => alert } end def create - begin - StoragePool.transaction do - @storage_pool.save! - insert_refresh_task - end - respond_to do |format| - format.json { render :json => { :object => "storage_pool", - :success => true, - :alert => "Storage Pool was successfully created.", - :new_pool => @storage_pool.storage_tree_element({:filter_unavailable => false, :state => 'new'})} } - format.xml { render :xml => @storage_pool, - :status => :created, - :location => storage_pool_url(@storage_pool) - } - end - rescue => ex - # FIXME: need to distinguish pool vs. task save errors (but should mostly be pool) - respond_to do |format| - format.json { - json_hash = { :object => "storage_pool", :success => false, - :errors => @storage_pool.errors.localize_error_messages.to_a } - json_hash[:message] = ex.message if json_hash[:errors].empty? - render :json => json_hash } - format.xml { render :xml => @storage_pool.errors, - :status => :unprocessable_entity } - end + pool = params[:storage_pool] + unless type = params[:storage_type] + type = pool.delete(:storage_type) end + alert = svc_create(type, pool) + respond_to do |format| + format.json { render :json => { :object => "storage_pool", + :success => true, :alert => alert, + :new_pool => @storage_pool.storage_tree_element({:filter_unavailable => false, :state => 'new'})} } + format.xml { render :xml => @storage_pool, + :status => :created, + :location => storage_pool_url(@storage_pool) + } + end end def edit + svc_modify(params[:id]) render :layout => 'popup' end def update - begin - StoragePool.transaction do - @storage_pool.update_attributes!(params[:storage_pool]) - insert_refresh_task - end - render :json => { :object => "storage_pool", :success => true, - :alert => "Storage Pool was successfully modified." } - rescue - # FIXME: need to distinguish pool vs. task save errors (but should mostly be pool) - render :json => { :object => "storage_pool", :success => false, - :errors => @storage_pool.errors.localize_error_messages.to_a } - end + alert = svc_update(params[:id], params[:storage_pool]) + render :json => { :object => "storage_pool", :success => true, + :alert => alert } end def addstorage + svc_load_hw_pool(params[:hardware_pool_id]) + @storage_types = StoragePool::STORAGE_TYPE_PICKLIST render :layout => 'popup' end def add - render :layout => false - end - - def new + svc_load_hw_pool(params[:hardware_pool_id]) render :layout => false end @@ -167,87 +128,41 @@ class StorageController < ApplicationController # in addition to the current pool (which is checked). We also need to fail # for storage that aren't currently empty def delete_pools - storage_pool_ids_str = params[:storage_pool_ids] - storage_pool_ids = storage_pool_ids_str.split(",").collect {|x| x.to_i} - - begin - StoragePool.transaction do - storage = StoragePool.find(:all, :conditions => "id in (#{storage_pool_ids.join(', ')})") - storage.each do |storage_pool| - storage_pool.destroy - end + storage_pool_ids = params[:storage_pool_ids].split(",") + successes = [] + failures = {} + storage_pool_ids.each do |storage_pool_id| + begin + svc_destroy(storage_pool_id) + successes << @storage_pool + rescue PermissionError => perm_error + failures[@storage_pool] = perm_error.message + rescue Exception => ex + failures[@storage_pool] = ex.message end - render :json => { :object => "storage_pool", :success => true, - :alert => "Storage Pools were successfully deleted." } - rescue - render :json => { :object => "storage_pool", :success => true, - :alert => "Error deleting storage pools." } end + unless failures.empty? + raise PartialSuccessError.new("Delete failed for some Storage Pools", + failures, successes) + end + render :json => { :object => "storage_pool", :success => true, + :alert => "Storage Pools were successfully deleted." } end def destroy - unless @storage_pool.movable? - @error = "Cannot delete storage with associated vms" - respond_to do |format| - format.json { render :json => { :object => "storage_pool", - :success => false, :alert => @error } } - format.xml { render :template => "errors/simple", :layout => false, - :status => :forbidden } - end - return - end - - pool = @storage_pool.hardware_pool - if @storage_pool.destroy - alert="Storage Pool was successfully deleted." - success=true - else - alert="Failed to delete storage pool." - success=false - end + alert = svc_destroy(params[:id]) respond_to do |format| format.json { render :json => { :object => "storage_pool", - :success => success, :alert => alert } } - format.xml { head(success ? :ok : :method_not_allowed) } + :success => true, :alert => alert } } + format.xml { head(:ok) } end end - def pre_new - @hardware_pool = HardwarePool.find(params[:hardware_pool_id]) - set_perms(@hardware_pool) - authorize_admin - @storage_pools = @hardware_pool.storage_volumes - @storage_types = StoragePool::STORAGE_TYPE_PICKLIST - end - - def pre_add - pre_new - end - - def pre_new2 - new_params = { :hardware_pool_id => params[:hardware_pool_id]} - if (params[:storage_type] == "iSCSI") - new_params[:port] = 3260 - end - @storage_pool = StoragePool.factory(params[:storage_type], new_params) - set_perms(@storage_pool.hardware_pool) - authorize_admin - end - def pre_create - pool = params[:storage_pool] - unless type = params[:storage_type] - type = pool.delete(:storage_type) - end - @storage_pool = StoragePool.factory(type, pool) - set_perms(@storage_pool.hardware_pool) - end - def pre_edit - @storage_pool = StoragePool.find(params[:id]) - set_perms(@storage_pool.hardware_pool) + # FIXME: remove these when service transition is complete. these are here + # to keep from running permissions checks and other setup steps twice + def tmp_pre_update end - def pre_pool_admin - pre_edit - authorize_admin + def tmp_authorize_admin end end diff --git a/src/app/services/storage_pool_service.rb b/src/app/services/storage_pool_service.rb new file mode 100644 index 0000000..dd36304 --- /dev/null +++ b/src/app/services/storage_pool_service.rb @@ -0,0 +1,150 @@ +# +# Copyright (C) 2009 Red Hat, Inc. +# Written by Scott Seago , +# David Lutterkort +# +# 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; version 2 of the License. +# +# 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. A copy of the GNU General Public License is +# also available at http://www.gnu.org/copyleft/gpl.html. +# Mid-level API: Business logic around storage pools +module StoragePoolService + + include ApplicationService + + # Load the StoragePool with +id+ for viewing + # + # === Instance variables + # [@storage_pool] stores the Storage Pool with +id+ + # === Required permissions + # [Privilege::VIEW] on StoragePool's HardwarePool + def svc_show(id) + lookup(id,Privilege::VIEW) + end + + # Load the StoragePool with +id+ for editing + # + # === Instance variables + # [@storage_pool] stores the Storage Pool with +id+ + # === Required permissions + # [Privilege::MODIFY] on StoragePool's HardwarePool + def svc_modify(id) + lookup(id,Privilege::MODIFY) + end + + # Update attributes for the StoragePool with +id+ + # + # === Instance variables + # [@storage_pool] stores the Storage Pool with +id+ + # === Required permissions + # [Privilege::MODIFY] on StoragePool's HardwarePool + def svc_update(id, storage_pool_hash) + lookup(id,Privilege::MODIFY) + authorized!(Privilege::MODIFY, at storage_pool.hardware_pool) + StoragePool.transaction do + @storage_pool.update_attributes!(storage_pool_hash) + insert_refresh_task + end + return "Storage Pool was successfully modified." + + end + + # Refresh the StoragePool with +id+ + # + # === Instance variables + # [@storage_pool] stores the Storage Pool with +id+ + # === Required permissions + # [Privilege::MODIFY] on StoragePool's HardwarePool + def svc_refresh(id) + lookup(id,Privilege::MODIFY) + insert_refresh_task + return "Storage pool refresh was successfully scheduled." + end + + # Load a parent HardwarePool in preparation for creating/adding + # a storage pool + # + # === Instance variables + # [@hardware_pool] loads the HardwarePool as specified by + # +hardware_pool_id+ + # === Required permissions + # [Privilege::MODIFY] for the storage pool's HardwarePool as + # specified by +hardware_pool_id+ + def svc_load_hw_pool(hardware_pool_id) + @hardware_pool = HardwarePool.find(hardware_pool_id) + authorized!(Privilege::MODIFY, at hardware_pool) + end + + # Load a new StoragePool for creating + # + # === Instance variables + # [@storage_pool] loads a new StoragePool object into memory + # === Required permissions + # [Privilege::MODIFY] for the storage pool's HardwarePool as + # specified by +hardware_pool_id+ + def svc_new(hardware_pool_id, storage_type) + new_params = { :hardware_pool_id => hardware_pool_id} + if (storage_type == "iSCSI") + new_params[:port] = 3260 + end + @storage_pool = StoragePool.factory(storage_type, new_params) + authorized!(Privilege::MODIFY, at storage_pool.hardware_pool) + end + + # Create a new StoragePool + # + # === Instance variables + # [@storage_pool] the newly-created StoragePool + # === Required permissions + # [Privilege::MODIFY] for the storage pool's HardwarePool + def svc_create(storage_type, storage_pool_hash) + @storage_pool = StoragePool.factory(storage_type, storage_pool_hash) + authorized!(Privilege::MODIFY, at storage_pool.hardware_pool) + StoragePool.transaction do + @storage_pool.save! + insert_refresh_task + end + return "Storage Pool was successfully created." + end + + # Destroys for the StoragePool with +id+ + # + # === Instance variables + # [@storage_pool] stores the StoragePool with +id+ + # === Required permissions + # [Privilege::MODIFY] for the StoragePool's HardwarePool + def svc_destroy(id) + lookup(id, Privilege::MODIFY) + unless @storage_pool.movable? + raise ActionError.new("Cannot delete storage with associated vms") + end + @storage_pool.destroy + return "Storage Pool was successfully deleted." + end + + private + def lookup(id, priv) + @storage_pool = StoragePool.find(id) + authorized!(priv, at storage_pool.hardware_pool) + end + + def insert_refresh_task + @task = StorageTask.new({ :user => @user, + :task_target => @storage_pool, + :action => StorageTask::ACTION_REFRESH_POOL, + :state => Task::STATE_QUEUED}) + @task.save! + end + + +end -- 1.6.0.6 From imain at redhat.com Mon May 11 21:17:33 2009 From: imain at redhat.com (Ian Main) Date: Mon, 11 May 2009 14:17:33 -0700 Subject: [Ovirt-devel] [PATCH server 2/3] Additional vm_controller refactoring: In-Reply-To: <1241811251-15502-2-git-send-email-sseago@redhat.com> References: <1241811251-15502-1-git-send-email-sseago@redhat.com> <1241811251-15502-2-git-send-email-sseago@redhat.com> Message-ID: <20090511141733.161e5ff4@tp.mains.net> On Fri, 8 May 2009 19:34:10 +0000 Scott Seago wrote: > 1) Moved all remaining auth/before_filter action into service layer > 2) Added rdoc comments > 3) delete VMs action now uses svc_destroy action > > Signed-off-by: Scott Seago ACK From imain at redhat.com Mon May 11 21:17:48 2009 From: imain at redhat.com (Ian Main) Date: Mon, 11 May 2009 14:17:48 -0700 Subject: [Ovirt-devel] [PATCH server 3/3] Additional refactoring of pool controllers (and subclasses) In-Reply-To: <1241811251-15502-3-git-send-email-sseago@redhat.com> References: <1241811251-15502-1-git-send-email-sseago@redhat.com> <1241811251-15502-2-git-send-email-sseago@redhat.com> <1241811251-15502-3-git-send-email-sseago@redhat.com> Message-ID: <20090511141748.1de81207@tp.mains.net> On Fri, 8 May 2009 19:34:11 +0000 Scott Seago wrote: > 1) Moved all remaining auth/before_filter action into service layer > 2) Added rdoc comments > 3) Fixed a bug in 'add hosts/storage' functionality > 4) Removed explicit error handling where it could be pushed up to the rescue_from handlers > > Signed-off-by: Scott Seago ACK From fstutter at gmail.com Mon May 11 21:36:36 2009 From: fstutter at gmail.com (Freddy Stutterheim) Date: Mon, 11 May 2009 23:36:36 +0200 Subject: [Ovirt-devel] Type Object has no attibute 'seq' or Timed Out waiting for broker Message-ID: <51d1c06c0905111436p3cd66b4dne9a05b262a5e8d5c@mail.gmail.com> Until this is fixt it isn't possible to use iscsi or nfs storage? -------------- next part -------------- An HTML attachment was scrubbed... URL: From fstutter at gmail.com Mon May 11 22:29:16 2009 From: fstutter at gmail.com (Freddy Stutterheim) Date: Tue, 12 May 2009 00:29:16 +0200 Subject: [Ovirt-devel] Type Object has no attibute 'seq' or Timed Out waiting for broker Message-ID: <51d1c06c0905111529m2c60968fp6b0f031cb8a2ec5d@mail.gmail.com> It keeps hanging on pending.There is no firewall on the host server. I installed Ovirt with the instuctions on http://ovirt.org/install-instructions.html but when i try to add a storage pool i only get the state "Pending" and nothing happens. And after that i get Type Object has no attibute 'seq' I have a node that is available. I used the iscsi setup instuctions on http://ovirt.org/iscsi-setup.html. The storage is on the same machine as the oVirt server. Until the updated qpid no storage is possible? -------------- next part -------------- An HTML attachment was scrubbed... URL: From imain at redhat.com Mon May 11 22:38:19 2009 From: imain at redhat.com (Ian Main) Date: Mon, 11 May 2009 15:38:19 -0700 Subject: [Ovirt-devel] [PATCH server] converted the quota controller to use the service layer. In-Reply-To: <1242059063-27975-1-git-send-email-sseago@redhat.com> References: <1242059063-27975-1-git-send-email-sseago@redhat.com> Message-ID: <20090511153819.59ea95b2@tp.mains.net> On Mon, 11 May 2009 16:24:23 +0000 Scott Seago wrote: > > Signed-off-by: Scott Seago ACK From imain at redhat.com Mon May 11 22:38:32 2009 From: imain at redhat.com (Ian Main) Date: Mon, 11 May 2009 15:38:32 -0700 Subject: [Ovirt-devel] [PATCH server] converted the task controller to use the service layer. In-Reply-To: <1242067797-32374-1-git-send-email-sseago@redhat.com> References: <1242067797-32374-1-git-send-email-sseago@redhat.com> Message-ID: <20090511153832.693b011e@tp.mains.net> On Mon, 11 May 2009 18:49:57 +0000 Scott Seago wrote: > > Signed-off-by: Scott Seago ACK From imain at redhat.com Mon May 11 22:39:00 2009 From: imain at redhat.com (Ian Main) Date: Mon, 11 May 2009 15:39:00 -0700 Subject: [Ovirt-devel] [PATCH server] removed obsolete @attach_to_pool references In-Reply-To: <1242068837-32751-1-git-send-email-sseago@redhat.com> References: <1242068837-32751-1-git-send-email-sseago@redhat.com> Message-ID: <20090511153900.6428f27b@tp.mains.net> On Mon, 11 May 2009 19:07:17 +0000 Scott Seago wrote: ACK From imain at redhat.com Mon May 11 23:00:09 2009 From: imain at redhat.com (Ian Main) Date: Mon, 11 May 2009 16:00:09 -0700 Subject: [Ovirt-devel] Type Object has no attibute 'seq' or Timed Out waiting for broker In-Reply-To: <51d1c06c0905111529m2c60968fp6b0f031cb8a2ec5d@mail.gmail.com> References: <51d1c06c0905111529m2c60968fp6b0f031cb8a2ec5d@mail.gmail.com> Message-ID: <20090511160009.76699583@tp.mains.net> On Tue, 12 May 2009 00:29:16 +0200 Freddy Stutterheim wrote: > It keeps hanging on pending.There is no firewall on the host server. > I installed Ovirt with the instuctions on > http://ovirt.org/install-instructions.html but when i try to add a storage > pool > i only get the state "Pending" and nothing happens. > And after that i get Type Object has no attibute 'seq' > I have a node that is available. I used the iscsi setup instuctions on > http://ovirt.org/iscsi-setup.html. > The storage is on the same machine as the oVirt server. > Until the updated qpid no storage is possible? No it will work if you get it right.. something is not right with your setup. If everything works it only takes a second to connect to the storage pool. The only way to debug this at the moment is to get onto the node via the console or ssh (if you built it yourself) and check the libvirtd logs. Ian From fstutter at gmail.com Tue May 12 09:53:03 2009 From: fstutter at gmail.com (Freddy Stutterheim) Date: Tue, 12 May 2009 11:53:03 +0200 Subject: [Ovirt-devel] Type Object has no attibute 'seq' or Timed Out waiting for broker Message-ID: <51d1c06c0905120253t487a0a43i1e6de678a3266582@mail.gmail.com> Is it posible the install the node pxe images to hd and then reboot in single user mode and change the root password passwd?if yes, how? I have try booting with --kopts 1 in cobbler as defined on http://ovirt.org/install-instructions.html but the system hangs when booting the node from pxe. Freddy -------------- next part -------------- An HTML attachment was scrubbed... URL: From imain at redhat.com Tue May 12 16:40:21 2009 From: imain at redhat.com (Ian Main) Date: Tue, 12 May 2009 09:40:21 -0700 Subject: [Ovirt-devel] Type Object has no attibute 'seq' or Timed Out waiting for broker In-Reply-To: <51d1c06c0905120253t487a0a43i1e6de678a3266582@mail.gmail.com> References: <51d1c06c0905120253t487a0a43i1e6de678a3266582@mail.gmail.com> Message-ID: <20090512094021.372070f8@tp.mains.net> On Tue, 12 May 2009 11:53:03 +0200 Freddy Stutterheim wrote: > Is it posible the install the node pxe images to hd and then reboot in > single user mode and change the root password passwd?if yes, how? > I have try booting with --kopts 1 in cobbler as defined on > http://ovirt.org/install-instructions.html but the system hangs when booting > the node from pxe. > > Freddy There are some instructions here: http://ovirt.org/page/Ovirt-developer-installer#Node_Troubleshooting Right at the bottom there.. requires you having console access to the node however. If you build your own it'll pick up your public ssh key and put it in the node image :). Ian From mmorsi at redhat.com Tue May 12 17:25:03 2009 From: mmorsi at redhat.com (Mohammed Morsi) Date: Tue, 12 May 2009 13:25:03 -0400 Subject: [Ovirt-devel] [PATCH server] integration anyterm into ovirt web interface Message-ID: <1242149104-3617-1-git-send-email-mmorsi@redhat.com> this patch adds the necessary components to forward vm web terminal requests from the local apache server to the node which the vm is running on (httpd configuration and vm2node lookup scripts) as well as changes to the wui to allow users to access this functionality --- conf/ovirt-server.conf | 6 ++++++ ovirt-server.spec.in | 2 ++ scripts/ovirt-vm2node | 26 ++++++++++++++++++++++++++ src/app/controllers/vm_controller.rb | 8 ++++++++ src/app/views/vm/show.rhtml | 28 ++++++++++++++++++++-------- src/public/javascripts/ovirt.js | 15 ++++++++++++++- 6 files changed, 76 insertions(+), 9 deletions(-) create mode 100755 scripts/ovirt-vm2node diff --git a/conf/ovirt-server.conf b/conf/ovirt-server.conf index bab6f1a..36564ed 100644 --- a/conf/ovirt-server.conf +++ b/conf/ovirt-server.conf @@ -21,6 +21,12 @@ NameVirtualHost AdminNetIpAddress:80 TransferLog /etc/httpd/logs/access_log LogLevel warn + RewriteEngine On + RewriteMap vmnodes prg:/usr/bin/ovirt-vm2node + RewriteRule ^/terminal/(.*\.(js|css|gif)|proxy/anyterm-module)$ http://${vmnodes:anyterm}:81/$1 [P] + RewriteRule ^/terminal/(.*)$ http://${vmnodes:$1}:81/anyterm.html?param=$1 [P,NE] + + ProxyPass /ovirt http://AdminNodeFQDN/ovirt ProxyPassReverse /ovirt http://AdminNodeFQDN/ovirt diff --git a/ovirt-server.spec.in b/ovirt-server.spec.in index 6da7297..b4f7454 100644 --- a/ovirt-server.spec.in +++ b/ovirt-server.spec.in @@ -130,6 +130,7 @@ touch %{buildroot}%{_localstatedir}/log/%{name}/db-omatic.log %{__rm} -f %{buildroot}%{app_root}/task-omatic/.gitignore %{__cp} -a %{pbuild}/scripts/ovirt-add-host %{buildroot}%{_bindir} +%{__cp} -a %{pbuild}/scripts/ovirt-vm2node %{buildroot}%{_bindir} %{__cp} -a %{pbuild}/scripts/ovirt-reindex-search %{buildroot}%{_sbindir} %{__cp} -a %{pbuild}/scripts/ovirt-update-search %{buildroot}%{_sbindir} %{__rm} -rf %{buildroot}%{app_root}/tmp @@ -199,6 +200,7 @@ fi %{_sbindir}/ovirt-reindex-search %{_sbindir}/ovirt-update-search %{_bindir}/ovirt-add-host +%{_bindir}/ovirt-vm2node %{_initrddir}/ovirt-host-browser %{_initrddir}/ovirt-db-omatic %{_initrddir}/ovirt-host-collect diff --git a/scripts/ovirt-vm2node b/scripts/ovirt-vm2node new file mode 100755 index 0000000..1d6104c --- /dev/null +++ b/scripts/ovirt-vm2node @@ -0,0 +1,26 @@ +#!/usr/bin/ruby + +$: << '/usr/share/ovirt-server' +$: << '/usr/share/ovirt-server/dutils' + +require 'dutils' + +########################## retreive host from vm w/ specified name +$stdin.each{ |vmname| # get vm name from stdin + begin + vmname.chomp! # remove the newline + + # specially handle 'anyterm' to just return + # first host (for css/js/etc which aren't + # vm dependent) + if vmname == 'anyterm' + puts Host.find(:first, :conditions => "state = 'available'").hostname + else + puts Vm.find(:first, :conditions => ['description = ?', vmname]).host.hostname + end + rescue Exception => e + puts + end + + $stdout.flush +} diff --git a/src/app/controllers/vm_controller.rb b/src/app/controllers/vm_controller.rb index a40fc5c..10d841a 100644 --- a/src/app/controllers/vm_controller.rb +++ b/src/app/controllers/vm_controller.rb @@ -37,6 +37,14 @@ class VmController < ApplicationController end end + def terminal + # optionally add rows and columns params to url here + # eg ?param=vmname&rows=30&columns=100 + redirect_to "https://" + params[:host] + + "/terminal/" + @vm.description + + "?param=" + @vm.description + end + def show svc_show(params[:id]) @actions = @vm.get_action_hash(@user) diff --git a/src/app/views/vm/show.rhtml b/src/app/views/vm/show.rhtml index 0da81d0..52961c5 100644 --- a/src/app/views/vm/show.rhtml +++ b/src/app/views/vm/show.rhtml @@ -2,17 +2,29 @@ <%=h @vm.description %> <%- end -%> -<%- content_for :action_links do -%> - <%if @can_control_vms and @vm.has_console -%> - <%= link_to image_tag("icon_x_11px.png") + " Open Console", - {:controller => 'vm', :action => 'console', :id => @vm}, - :id=>"vnc_console_link" %> + <%if @can_control_vms -%> + <%if @vm.has_console -%> + <%= link_to image_tag("icon_x_11px.png") + " Remote Desktop", + {:controller => 'vm', :action => 'console', :id => @vm}, + :id=>"vnc_console_link" %> + + <% end -%> + + <%= link_to image_tag("icon_x_11px.png") + " Open Terminal", + {:controller => 'vm', :action => 'terminal', :id => @vm}, + :id=> "vm_terminal_link"%> <% end -%> + <%if @can_modify -%> <%= link_to image_tag("icon_edit_11px.png") + " Edit", {:controller => 'vm', :action => 'edit', :id => @vm}, diff --git a/src/public/javascripts/ovirt.js b/src/public/javascripts/ovirt.js index c24df16..2754817 100644 --- a/src/public/javascripts/ovirt.js +++ b/src/public/javascripts/ovirt.js @@ -380,4 +380,17 @@ var VmCreator = { VmCreator.recreateTree(storedOptions); VmCreator.clickCheckboxes(); } -} \ No newline at end of file +} + +function get_server_from_url() +{ + var regexS = "https.*" + var regex = new RegExp(regexS); + var results = regex.exec( window.location.href ); + var start = 8; + if(results == null){ + start = 7; + } + var end = window.location.href.indexOf('/', 8) - start; + return window.location.href.substr(start, end); +} -- 1.6.0.6 From mmorsi at redhat.com Tue May 12 17:25:04 2009 From: mmorsi at redhat.com (Mohammed Morsi) Date: Tue, 12 May 2009 13:25:04 -0400 Subject: [Ovirt-devel] [PATCH node] add anyterm to node requirements and setup on startup In-Reply-To: <1242149104-3617-1-git-send-email-mmorsi@redhat.com> References: <1242149104-3617-1-git-send-email-mmorsi@redhat.com> Message-ID: <1242149104-3617-2-git-send-email-mmorsi@redhat.com> adds anyterm rpm dependency to ovirt node spec and sets up anyterm on node instantation by setting the service to start by default and making the necessary anyterm sysconfig changes --- ovirt-node.spec.in | 1 + scripts/ovirt-functions | 12 ++++++++++++ scripts/ovirt-install-node-stateful | 2 ++ scripts/ovirt-install-node-stateless | 2 ++ 4 files changed, 17 insertions(+), 0 deletions(-) diff --git a/ovirt-node.spec.in b/ovirt-node.spec.in index 1a73066..1b847c5 100644 --- a/ovirt-node.spec.in +++ b/ovirt-node.spec.in @@ -42,6 +42,7 @@ Requires: qemu-img Requires: nc Requires: grub Requires: /usr/sbin/crond +Requires: anyterm ExclusiveArch: %{ix86} x86_64 %define app_root %{_datadir}/%{name} diff --git a/scripts/ovirt-functions b/scripts/ovirt-functions index e89898d..4d81193 100755 --- a/scripts/ovirt-functions +++ b/scripts/ovirt-functions @@ -201,6 +201,18 @@ ovirt_setup_libvirtd() { fi } +ovirt_setup_anyterm() { + # configure anyterm + sed -i -e 's/^# ANYTERM_CMD=\/usr\/bin\/anyterm-cmd/ANYTERM_CMD="sudo \/usr\/bin\/virsh console %p"/' \ + /etc/sysconfig/anyterm + + sed -i -e 's/^# ANYTERM_LOCAL_ONLY=true/ANYTERM_LOCAL_ONLY=false/' \ + /etc/sysconfig/anyterm + + # permit it to run the virsh console + echo "anyterm ALL=NOPASSWD: /usr/bin/virsh console *" >> /etc/sudoers +} + md5() { md5sum $1 2>/dev/null | (read MD5 filename; echo $MD5) } diff --git a/scripts/ovirt-install-node-stateful b/scripts/ovirt-install-node-stateful index 3ec1c29..9426c81 100755 --- a/scripts/ovirt-install-node-stateful +++ b/scripts/ovirt-install-node-stateful @@ -75,6 +75,7 @@ chkconfig libvirt-qpid on chkconfig iptables on chkconfig ntpdate on chkconfig ntpd on +chkconfig anyterm on backup_file /etc/sysconfig/libvirtd backup_file /etc/libvirt/qemu.conf @@ -82,6 +83,7 @@ backup_file /etc/libvirt/libvirtd.conf backup_file /etc/sasl2/libvirt.conf backup_file /etc/krb5.conf ovirt_setup_libvirtd +ovirt_setup_anyterm backup_file /etc/sysconfig/iptables # We open up anything coming from ovirtbr0 to this node, since it diff --git a/scripts/ovirt-install-node-stateless b/scripts/ovirt-install-node-stateless index 705c491..cceb048 100755 --- a/scripts/ovirt-install-node-stateless +++ b/scripts/ovirt-install-node-stateless @@ -20,8 +20,10 @@ chkconfig --level 3 ovirt-early on chkconfig --level 3 ovirt on chkconfig --level 3 ovirt-post on chkconfig --level 3 collectd on +chkconfig --level 3 anyterm on ovirt_setup_libvirtd +ovirt_setup_anyterm # make sure we don't autostart virbr0 on libvirtd startup rm -f /etc/libvirt/qemu/networks/autostart/default.xml -- 1.6.0.6 From mmorsi at redhat.com Tue May 12 18:30:38 2009 From: mmorsi at redhat.com (Mohammed Morsi) Date: Tue, 12 May 2009 14:30:38 -0400 Subject: [Ovirt-devel] [PATCH server] integrate anyterm into ovirt web interface Message-ID: <1242153038-3758-1-git-send-email-mmorsi@redhat.com> this patch adds the necessary components to forward vm web terminal requests from the local apache server to the node which the vm is running on (httpd configuration and vm2node lookup scripts) as well as changes to the wui to allow users to access this functionality --- conf/ovirt-server.conf | 6 ++++++ ovirt-server.spec.in | 2 ++ scripts/ovirt-vm2node | 26 ++++++++++++++++++++++++++ src/app/controllers/vm_controller.rb | 8 ++++++++ src/app/views/vm/show.rhtml | 27 ++++++++++++++++++++------- src/public/javascripts/ovirt.js | 15 ++++++++++++++- 6 files changed, 76 insertions(+), 8 deletions(-) create mode 100755 scripts/ovirt-vm2node diff --git a/conf/ovirt-server.conf b/conf/ovirt-server.conf index bab6f1a..36564ed 100644 --- a/conf/ovirt-server.conf +++ b/conf/ovirt-server.conf @@ -21,6 +21,12 @@ NameVirtualHost AdminNetIpAddress:80 TransferLog /etc/httpd/logs/access_log LogLevel warn + RewriteEngine On + RewriteMap vmnodes prg:/usr/bin/ovirt-vm2node + RewriteRule ^/terminal/(.*\.(js|css|gif)|proxy/anyterm-module)$ http://${vmnodes:anyterm}:81/$1 [P] + RewriteRule ^/terminal/(.*)$ http://${vmnodes:$1}:81/anyterm.html?param=$1 [P,NE] + + ProxyPass /ovirt http://AdminNodeFQDN/ovirt ProxyPassReverse /ovirt http://AdminNodeFQDN/ovirt diff --git a/ovirt-server.spec.in b/ovirt-server.spec.in index 6da7297..b4f7454 100644 --- a/ovirt-server.spec.in +++ b/ovirt-server.spec.in @@ -130,6 +130,7 @@ touch %{buildroot}%{_localstatedir}/log/%{name}/db-omatic.log %{__rm} -f %{buildroot}%{app_root}/task-omatic/.gitignore %{__cp} -a %{pbuild}/scripts/ovirt-add-host %{buildroot}%{_bindir} +%{__cp} -a %{pbuild}/scripts/ovirt-vm2node %{buildroot}%{_bindir} %{__cp} -a %{pbuild}/scripts/ovirt-reindex-search %{buildroot}%{_sbindir} %{__cp} -a %{pbuild}/scripts/ovirt-update-search %{buildroot}%{_sbindir} %{__rm} -rf %{buildroot}%{app_root}/tmp @@ -199,6 +200,7 @@ fi %{_sbindir}/ovirt-reindex-search %{_sbindir}/ovirt-update-search %{_bindir}/ovirt-add-host +%{_bindir}/ovirt-vm2node %{_initrddir}/ovirt-host-browser %{_initrddir}/ovirt-db-omatic %{_initrddir}/ovirt-host-collect diff --git a/scripts/ovirt-vm2node b/scripts/ovirt-vm2node new file mode 100755 index 0000000..1d6104c --- /dev/null +++ b/scripts/ovirt-vm2node @@ -0,0 +1,26 @@ +#!/usr/bin/ruby + +$: << '/usr/share/ovirt-server' +$: << '/usr/share/ovirt-server/dutils' + +require 'dutils' + +########################## retreive host from vm w/ specified name +$stdin.each{ |vmname| # get vm name from stdin + begin + vmname.chomp! # remove the newline + + # specially handle 'anyterm' to just return + # first host (for css/js/etc which aren't + # vm dependent) + if vmname == 'anyterm' + puts Host.find(:first, :conditions => "state = 'available'").hostname + else + puts Vm.find(:first, :conditions => ['description = ?', vmname]).host.hostname + end + rescue Exception => e + puts + end + + $stdout.flush +} diff --git a/src/app/controllers/vm_controller.rb b/src/app/controllers/vm_controller.rb index a40fc5c..10d841a 100644 --- a/src/app/controllers/vm_controller.rb +++ b/src/app/controllers/vm_controller.rb @@ -37,6 +37,14 @@ class VmController < ApplicationController end end + def terminal + # optionally add rows and columns params to url here + # eg ?param=vmname&rows=30&columns=100 + redirect_to "https://" + params[:host] + + "/terminal/" + @vm.description + + "?param=" + @vm.description + end + def show svc_show(params[:id]) @actions = @vm.get_action_hash(@user) diff --git a/src/app/views/vm/show.rhtml b/src/app/views/vm/show.rhtml index 0da81d0..a0b7197 100644 --- a/src/app/views/vm/show.rhtml +++ b/src/app/views/vm/show.rhtml @@ -3,16 +3,29 @@ <%- end -%> <%- content_for :action_links do -%> - <%if @can_control_vms and @vm.has_console -%> - <%= link_to image_tag("icon_x_11px.png") + " Open Console", - {:controller => 'vm', :action => 'console', :id => @vm}, - :id=>"vnc_console_link" %> + <%if @can_control_vms -%> + <%if @vm.has_console -%> + <%= link_to image_tag("icon_x_11px.png") + " Remote Desktop", + {:controller => 'vm', :action => 'console', :id => @vm}, + :id=>"vnc_console_link" %> + + <% end -%> + + <%= link_to image_tag("icon_x_11px.png") + " Open Terminal", + {:controller => 'vm', :action => 'terminal', :id => @vm}, + :id=> "vm_terminal_link"%> <% end -%> + <%if @can_modify -%> <%= link_to image_tag("icon_edit_11px.png") + " Edit", {:controller => 'vm', :action => 'edit', :id => @vm}, diff --git a/src/public/javascripts/ovirt.js b/src/public/javascripts/ovirt.js index c24df16..2754817 100644 --- a/src/public/javascripts/ovirt.js +++ b/src/public/javascripts/ovirt.js @@ -380,4 +380,17 @@ var VmCreator = { VmCreator.recreateTree(storedOptions); VmCreator.clickCheckboxes(); } -} \ No newline at end of file +} + +function get_server_from_url() +{ + var regexS = "https.*" + var regex = new RegExp(regexS); + var results = regex.exec( window.location.href ); + var start = 8; + if(results == null){ + start = 7; + } + var end = window.location.href.indexOf('/', 8) - start; + return window.location.href.substr(start, end); +} -- 1.6.0.6 From mmorsi at redhat.com Tue May 12 19:05:37 2009 From: mmorsi at redhat.com (Mohammed Morsi) Date: Tue, 12 May 2009 15:05:37 -0400 Subject: [Ovirt-devel] [PATCH server] integrate anyterm into ovirt web interface Message-ID: <1242155137-5223-1-git-send-email-mmorsi@redhat.com> this patch adds the necessary components to forward vm web terminal requests from the local apache server to the node which the vm is running on (httpd configuration and vm2node lookup scripts) as well as changes to the wui to allow users to access this functionality --- conf/ovirt-server.conf | 6 ++++++ ovirt-server.spec.in | 2 ++ scripts/ovirt-vm2node | 26 ++++++++++++++++++++++++++ src/app/controllers/vm_controller.rb | 9 +++++++++ src/app/views/vm/show.rhtml | 27 ++++++++++++++++++++------- src/public/images/icon_machine_11px.png | Bin 0 -> 354 bytes src/public/javascripts/ovirt.js | 15 ++++++++++++++- 7 files changed, 77 insertions(+), 8 deletions(-) create mode 100755 scripts/ovirt-vm2node create mode 100644 src/public/images/icon_machine_11px.png diff --git a/conf/ovirt-server.conf b/conf/ovirt-server.conf index bab6f1a..36564ed 100644 --- a/conf/ovirt-server.conf +++ b/conf/ovirt-server.conf @@ -21,6 +21,12 @@ NameVirtualHost AdminNetIpAddress:80 TransferLog /etc/httpd/logs/access_log LogLevel warn + RewriteEngine On + RewriteMap vmnodes prg:/usr/bin/ovirt-vm2node + RewriteRule ^/terminal/(.*\.(js|css|gif)|proxy/anyterm-module)$ http://${vmnodes:anyterm}:81/$1 [P] + RewriteRule ^/terminal/(.*)$ http://${vmnodes:$1}:81/anyterm.html?param=$1 [P,NE] + + ProxyPass /ovirt http://AdminNodeFQDN/ovirt ProxyPassReverse /ovirt http://AdminNodeFQDN/ovirt diff --git a/ovirt-server.spec.in b/ovirt-server.spec.in index 6da7297..b4f7454 100644 --- a/ovirt-server.spec.in +++ b/ovirt-server.spec.in @@ -130,6 +130,7 @@ touch %{buildroot}%{_localstatedir}/log/%{name}/db-omatic.log %{__rm} -f %{buildroot}%{app_root}/task-omatic/.gitignore %{__cp} -a %{pbuild}/scripts/ovirt-add-host %{buildroot}%{_bindir} +%{__cp} -a %{pbuild}/scripts/ovirt-vm2node %{buildroot}%{_bindir} %{__cp} -a %{pbuild}/scripts/ovirt-reindex-search %{buildroot}%{_sbindir} %{__cp} -a %{pbuild}/scripts/ovirt-update-search %{buildroot}%{_sbindir} %{__rm} -rf %{buildroot}%{app_root}/tmp @@ -199,6 +200,7 @@ fi %{_sbindir}/ovirt-reindex-search %{_sbindir}/ovirt-update-search %{_bindir}/ovirt-add-host +%{_bindir}/ovirt-vm2node %{_initrddir}/ovirt-host-browser %{_initrddir}/ovirt-db-omatic %{_initrddir}/ovirt-host-collect diff --git a/scripts/ovirt-vm2node b/scripts/ovirt-vm2node new file mode 100755 index 0000000..1d6104c --- /dev/null +++ b/scripts/ovirt-vm2node @@ -0,0 +1,26 @@ +#!/usr/bin/ruby + +$: << '/usr/share/ovirt-server' +$: << '/usr/share/ovirt-server/dutils' + +require 'dutils' + +########################## retreive host from vm w/ specified name +$stdin.each{ |vmname| # get vm name from stdin + begin + vmname.chomp! # remove the newline + + # specially handle 'anyterm' to just return + # first host (for css/js/etc which aren't + # vm dependent) + if vmname == 'anyterm' + puts Host.find(:first, :conditions => "state = 'available'").hostname + else + puts Vm.find(:first, :conditions => ['description = ?', vmname]).host.hostname + end + rescue Exception => e + puts + end + + $stdout.flush +} diff --git a/src/app/controllers/vm_controller.rb b/src/app/controllers/vm_controller.rb index a40fc5c..e918ae7 100644 --- a/src/app/controllers/vm_controller.rb +++ b/src/app/controllers/vm_controller.rb @@ -37,6 +37,15 @@ class VmController < ApplicationController end end + def terminal + # optionally add rows and columns params to url here + # eg ?param=vmname&rows=30&columns=100 + @vm = Vm.find(params[:id]) + redirect_to "https://" + params[:host] + + "/terminal/" + @vm.description + + "?param=" + @vm.description + end + def show svc_show(params[:id]) @actions = @vm.get_action_hash(@user) diff --git a/src/app/views/vm/show.rhtml b/src/app/views/vm/show.rhtml index 0da81d0..c933281 100644 --- a/src/app/views/vm/show.rhtml +++ b/src/app/views/vm/show.rhtml @@ -3,16 +3,29 @@ <%- end -%> <%- content_for :action_links do -%> - <%if @can_control_vms and @vm.has_console -%> - <%= link_to image_tag("icon_x_11px.png") + " Open Console", - {:controller => 'vm', :action => 'console', :id => @vm}, - :id=>"vnc_console_link" %> + <%if @can_control_vms -%> + <%if @vm.has_console -%> + <%= link_to image_tag("icon_machine_11px.png") + " Remote Desktop", + {:controller => 'vm', :action => 'console', :id => @vm}, + :id=>"vnc_console_link" %> + + <% end -%> + + <%= link_to image_tag("icon_machine_11px.png") + " Open Terminal", + {:controller => 'vm', :action => 'terminal', :id => @vm}, + :id=> "vm_terminal_link"%> <% end -%> + <%if @can_modify -%> <%= link_to image_tag("icon_edit_11px.png") + " Edit", {:controller => 'vm', :action => 'edit', :id => @vm}, diff --git a/src/public/images/icon_machine_11px.png b/src/public/images/icon_machine_11px.png new file mode 100644 index 0000000000000000000000000000000000000000..bd4b6d3446ece6c856eadf4f15dfc503cd7693d6 GIT binary patch literal 354 zcmV-o0iFJdP)D6U zK(W*mk#YeVP5^8Uz^>@o0xm;C!xe%O|Ezyw#txJbu{0iQ=F^*JyGkkH)J6Sz{mglJ z9LZu;J`8y3`xN)_-^d)r5MZ4}cYAkKdwO|9V2+%3&`Ou$<;6MVJVQ!_9fuGaJ0US^ z4euPtS_`EVVvN`d!H{N1La>08Gg8_^az9TeYZzt~&to><+k+y5O3yIHp&)l>2kckV!IF8E`{$!~B zez5Cq-a_zKZQG)*>!NCm;VFyvX?nfR%#Q#A01nsI^~{BAx&QzG07*qoM6N<$f=XzY A-v9sr literal 0 HcmV?d00001 diff --git a/src/public/javascripts/ovirt.js b/src/public/javascripts/ovirt.js index c24df16..2754817 100644 --- a/src/public/javascripts/ovirt.js +++ b/src/public/javascripts/ovirt.js @@ -380,4 +380,17 @@ var VmCreator = { VmCreator.recreateTree(storedOptions); VmCreator.clickCheckboxes(); } -} \ No newline at end of file +} + +function get_server_from_url() +{ + var regexS = "https.*" + var regex = new RegExp(regexS); + var results = regex.exec( window.location.href ); + var start = 8; + if(results == null){ + start = 7; + } + var end = window.location.href.indexOf('/', 8) - start; + return window.location.href.substr(start, end); +} -- 1.6.0.6 From jguiditt at redhat.com Tue May 12 19:27:44 2009 From: jguiditt at redhat.com (Jason Guiditta) Date: Tue, 12 May 2009 15:27:44 -0400 Subject: [Ovirt-devel] [PATCH server] integrate anyterm into ovirt web interface In-Reply-To: <1242155137-5223-1-git-send-email-mmorsi@redhat.com> References: <1242155137-5223-1-git-send-email-mmorsi@redhat.com> Message-ID: <1242156464.4690.2.camel@localhost.localdomain> ACK, one minor fix inline. On Tue, 2009-05-12 at 15:05 -0400, Mohammed Morsi wrote: > this patch adds the necessary components to forward > vm web terminal requests from the local apache server to the > node which the vm is running on (httpd configuration and > vm2node lookup scripts) as well as changes to the wui to > allow users to access this functionality > --- > conf/ovirt-server.conf | 6 ++++++ > ovirt-server.spec.in | 2 ++ > scripts/ovirt-vm2node | 26 ++++++++++++++++++++++++++ > src/app/controllers/vm_controller.rb | 9 +++++++++ > src/app/views/vm/show.rhtml | 27 ++++++++++++++++++++------- > src/public/images/icon_machine_11px.png | Bin 0 -> 354 bytes > src/public/javascripts/ovirt.js | 15 ++++++++++++++- > 7 files changed, 77 insertions(+), 8 deletions(-) > create mode 100755 scripts/ovirt-vm2node > create mode 100644 src/public/images/icon_machine_11px.png > > diff --git a/conf/ovirt-server.conf b/conf/ovirt-server.conf > index bab6f1a..36564ed 100644 > --- a/conf/ovirt-server.conf > +++ b/conf/ovirt-server.conf > @@ -21,6 +21,12 @@ NameVirtualHost AdminNetIpAddress:80 > TransferLog /etc/httpd/logs/access_log > LogLevel warn > > + RewriteEngine On > + RewriteMap vmnodes prg:/usr/bin/ovirt-vm2node > + RewriteRule ^/terminal/(.*\.(js|css|gif)|proxy/anyterm-module)$ http://${vmnodes:anyterm}:81/$1 [P] > + RewriteRule ^/terminal/(.*)$ http://${vmnodes:$1}:81/anyterm.html?param=$1 [P,NE] > + > + > ProxyPass /ovirt http://AdminNodeFQDN/ovirt > ProxyPassReverse /ovirt http://AdminNodeFQDN/ovirt > > diff --git a/ovirt-server.spec.in b/ovirt-server.spec.in > index 6da7297..b4f7454 100644 > --- a/ovirt-server.spec.in > +++ b/ovirt-server.spec.in > @@ -130,6 +130,7 @@ touch %{buildroot}%{_localstatedir}/log/%{name}/db-omatic.log > %{__rm} -f %{buildroot}%{app_root}/task-omatic/.gitignore > > %{__cp} -a %{pbuild}/scripts/ovirt-add-host %{buildroot}%{_bindir} > +%{__cp} -a %{pbuild}/scripts/ovirt-vm2node %{buildroot}%{_bindir} > %{__cp} -a %{pbuild}/scripts/ovirt-reindex-search %{buildroot}%{_sbindir} > %{__cp} -a %{pbuild}/scripts/ovirt-update-search %{buildroot}%{_sbindir} > %{__rm} -rf %{buildroot}%{app_root}/tmp > @@ -199,6 +200,7 @@ fi > %{_sbindir}/ovirt-reindex-search > %{_sbindir}/ovirt-update-search > %{_bindir}/ovirt-add-host > +%{_bindir}/ovirt-vm2node > %{_initrddir}/ovirt-host-browser > %{_initrddir}/ovirt-db-omatic > %{_initrddir}/ovirt-host-collect > diff --git a/scripts/ovirt-vm2node b/scripts/ovirt-vm2node > new file mode 100755 > index 0000000..1d6104c > --- /dev/null > +++ b/scripts/ovirt-vm2node > @@ -0,0 +1,26 @@ > +#!/usr/bin/ruby > + > +$: << '/usr/share/ovirt-server' > +$: << '/usr/share/ovirt-server/dutils' > + > +require 'dutils' > + > +########################## retreive host from vm w/ specified name > +$stdin.each{ |vmname| # get vm name from stdin > + begin > + vmname.chomp! # remove the newline > + > + # specially handle 'anyterm' to just return > + # first host (for css/js/etc which aren't > + # vm dependent) > + if vmname == 'anyterm' > + puts Host.find(:first, :conditions => "state = 'available'").hostname > + else > + puts Vm.find(:first, :conditions => ['description = ?', vmname]).host.hostname > + end > + rescue Exception => e > + puts > + end > + > + $stdout.flush > +} > diff --git a/src/app/controllers/vm_controller.rb b/src/app/controllers/vm_controller.rb > index a40fc5c..e918ae7 100644 > --- a/src/app/controllers/vm_controller.rb > +++ b/src/app/controllers/vm_controller.rb > @@ -37,6 +37,15 @@ class VmController < ApplicationController > end > end > > + def terminal > + # optionally add rows and columns params to url here > + # eg ?param=vmname&rows=30&columns=100 > + @vm = Vm.find(params[:id]) > + redirect_to "https://" + params[:host] + > + "/terminal/" + @vm.description + > + "?param=" + @vm.description > + end > + > def show > svc_show(params[:id]) > @actions = @vm.get_action_hash(@user) > diff --git a/src/app/views/vm/show.rhtml b/src/app/views/vm/show.rhtml > index 0da81d0..c933281 100644 > --- a/src/app/views/vm/show.rhtml > +++ b/src/app/views/vm/show.rhtml > @@ -3,16 +3,29 @@ > <%- end -%> > > <%- content_for :action_links do -%> > - <%if @can_control_vms and @vm.has_console -%> > - <%= link_to image_tag("icon_x_11px.png") + " Open Console", > - {:controller => 'vm', :action => 'console', :id => @vm}, > - :id=>"vnc_console_link" %> > + <%if @can_control_vms -%> > + <%if @vm.has_console -%> > + <%= link_to image_tag("icon_machine_11px.png") + " Remote Desktop", > + {:controller => 'vm', :action => 'console', :id => @vm}, > + :id=>"vnc_console_link" %> > + > + <% end -%> > + > + <%= link_to image_tag("icon_machine_11px.png") + " Open Terminal", This icon should be icon_terminal instead of _machine > + {:controller => 'vm', :action => 'terminal', :id => @vm}, > + :id=> "vm_terminal_link"%> > > <% end -%> > + > <%if @can_modify -%> > <%= link_to image_tag("icon_edit_11px.png") + " Edit", > {:controller => 'vm', :action => 'edit', :id => @vm}, > diff --git a/src/public/images/icon_machine_11px.png b/src/public/images/icon_machine_11px.png > new file mode 100644 > index 0000000000000000000000000000000000000000..bd4b6d3446ece6c856eadf4f15dfc503cd7693d6 > GIT binary patch > literal 354 > zcmV-o0iFJdP) zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz1W80eRCwBqkv&cWF%X5{qRH-Fh>D6U > zK(W*mk#YeVP5^8Uz^>@o0xm;C!xe%O|Ezyw#txJbu{0iQ=F^*JyGkkH)J6Sz{mglJ > z9LZu;J`8y3`xN)_-^d)r5MZ4}cYAkKdwO|9V2+%3&`Ou$<;6MVJVQ!_9fuGaJ0US^ > z4euPtS_`EVVvN`d!H{N1La>08Gg8_^az9TeYZzt~&to><+k+y5O3yIHp z&115skI%1i at AUf$XS{nKOW&{qGAy61JlwC)G))O2V#vd>&)l>2kckV!IF8E`{$!~B > zez5Cq-a_zKZQG)*>!NCm;VFyvX?nfR%#Q#A01nsI^~{BAx&QzG07*qoM6N<$f=XzY > A-v9sr > > literal 0 > HcmV?d00001 > > diff --git a/src/public/javascripts/ovirt.js b/src/public/javascripts/ovirt.js > index c24df16..2754817 100644 > --- a/src/public/javascripts/ovirt.js > +++ b/src/public/javascripts/ovirt.js > @@ -380,4 +380,17 @@ var VmCreator = { > VmCreator.recreateTree(storedOptions); > VmCreator.clickCheckboxes(); > } > -} > \ No newline at end of file > +} > + > +function get_server_from_url() > +{ > + var regexS = "https.*" > + var regex = new RegExp(regexS); > + var results = regex.exec( window.location.href ); > + var start = 8; > + if(results == null){ > + start = 7; > + } > + var end = window.location.href.indexOf('/', 8) - start; > + return window.location.href.substr(start, end); > +} From jguiditt at redhat.com Tue May 12 19:28:54 2009 From: jguiditt at redhat.com (Jason Guiditta) Date: Tue, 12 May 2009 15:28:54 -0400 Subject: [Ovirt-devel] Re: [PATCH node] add anyterm to node requirements and setup on startup In-Reply-To: <1242149104-3617-2-git-send-email-mmorsi@redhat.com> References: <1242149104-3617-1-git-send-email-mmorsi@redhat.com> <1242149104-3617-2-git-send-email-mmorsi@redhat.com> Message-ID: <1242156534.4690.3.camel@localhost.localdomain> On Tue, 2009-05-12 at 13:25 -0400, Mohammed Morsi wrote: > adds anyterm rpm dependency to ovirt node spec and sets up > anyterm on node instantation by setting the service to > start by default and making the necessary anyterm > sysconfig changes > --- ACK, this works fine for me From jguiditt at redhat.com Tue May 12 19:30:23 2009 From: jguiditt at redhat.com (Jason Guiditta) Date: Tue, 12 May 2009 15:30:23 -0400 Subject: [Ovirt-devel] [PATCH node-image] unblacklist gconv as needed by anyterm and open anyterm port In-Reply-To: <1240343276-3514-2-git-send-email-mmorsi@redhat.com> References: <1240343276-3514-1-git-send-email-mmorsi@redhat.com> <1240343276-3514-2-git-send-email-mmorsi@redhat.com> Message-ID: <1242156623.4690.5.camel@localhost.localdomain> On Tue, 2009-04-21 at 15:47 -0400, Mohammed Morsi wrote: > --- > common-blacklist.ks | 4 ++-- > common-post.ks | 2 ++ > 2 files changed, 4 insertions(+), 2 deletions(-) ACK, this works for me From fstutter at gmail.com Tue May 12 20:56:17 2009 From: fstutter at gmail.com (Freddy Stutterheim) Date: Tue, 12 May 2009 22:56:17 +0200 Subject: [Ovirt-devel] Type Object has no attibute 'seq' or Timed Out waiting for broker Message-ID: <51d1c06c0905121356w38d517d3v651aac7cbf2c2a66@mail.gmail.com> Thanks for your help so var, I build the node image and booted from cd and set the root password.I can login to the node, but storage is still pending_setup on action refresh_pool.The output of sudo ruby /usr/share/ovirt-server/qmf-libvirt-example.rb : Error looking up SRV record: DNS result has no information for _qpidd._ tcp.freddysnet.org Error looking up SRV record: DNS result has no information for _qpidd._tcp /usr/share/ovirt-server/qmf-libvirt-example.rb:12: Unable to determine qpid server from DNS SRV record (RuntimeError) And on the node: [root at node102 ~]# libvirt-qpid --broker ovirt.freddysnet.org 2009-may-12 20:51:09 info QMF Agent Initialized: broker= ovirt.freddysnet.org:5672 interval=3 storeFile= Error: virConnectGetVersion Subsystem none: code: 0 2009-may-12 20:51:10 debug QMF Agent attempting to connect to the broker... 2009-may-12 20:51:10 debug ConnectionImpl created for \x00- 2009-may-12 20:51:10 info Connecting to tcp:ovirt.freddysnet.org:5672 2009-may-12 20:51:10 debug TCPConnector created for \x00- 2009-may-12 20:51:10 debug RECV [56604 ovirt.freddysnet.org:5672] INIT(0-10) 2009-may-12 20:51:10 trace RECV [56604 ovirt.freddysnet.org:5672]: Frame[BEbe; channel=0; {ConnectionStartBody: server-properties={qpid.federation_tag:V2:36:str16(8c212cac-fdfb-4c64-81ad-83e40a554367)}; mechanisms=str16{V2:6:str16(GSSAPI)}; locales=str16{V2:5:str16(en_US)}; }] 2009-may-12 20:51:10 debug CyrusSasl::start(GSSAPI) 2009-may-12 20:51:10 debug min_ssf: 0, max_ssf: 256 2009-may-12 20:51:10 debug Exception constructed: Sasl error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No credentials cache found) (qpid/client/SaslFactory.cpp:226) 2009-may-12 20:51:10 warning Closing connection due to internal-error: Sasl error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No credentials cache found) (qpid/client/SaslFactory.cpp:226) 2009-may-12 20:51:10 trace SENT [56604 ovirt.freddysnet.org:5672]: Frame[BEbe; channel=0; {ConnectionCloseBody: reply-code=501; reply-text=internal-error: Sasl error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No credentials cache found) (qpid/client/SaslFactory.cpp:226); }] 2009-may-12 20:51:10 trace RECV [56604 ovirt.freddysnet.org:5672]: Frame[BEbe; channel=0; {ConnectionCloseOkBody: }] 2009-may-12 20:51:10 debug Exception constructed: internal-error: Sasl error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No credentials cache found) (qpid/client/SaslFactory.cpp:226) 2009-may-12 20:51:10 debug Exception constructed: internal-error: Sasl error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No credentials cache found) (qpid/client/SaslFactory.cpp:226) 2009-may-12 20:51:10 debug Connection failed: exception=internal-error: Sasl error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No credentials cache found) (qpid/client/SaslFactory.cpp:226) 2009-may-12 20:51:12 debug QMF Agent attempting to connect to the broker... 2009-may-12 20:51:12 debug ConnectionImpl created for \x00- 2009-may-12 20:51:12 info Connecting to tcp:ovirt.freddysnet.org:5672 2009-may-12 20:51:12 debug TCPConnector created for \x00- 2009-may-12 20:51:12 debug RECV [56605 ovirt.freddysnet.org:5672] INIT(0-10) 2009-may-12 20:51:12 trace RECV [56605 ovirt.freddysnet.org:5672]: Frame[BEbe; channel=0; {ConnectionStartBody: server-properties={qpid.federation_tag:V2:36:str16(8c212cac-fdfb-4c64-81ad-83e40a554367)}; mechanisms=str16{V2:6:str16(GSSAPI)}; locales=str16{V2:5:str16(en_US)}; }] 2009-may-12 20:51:12 debug CyrusSasl::start(GSSAPI) 2009-may-12 20:51:12 debug min_ssf: 0, max_ssf: 256 2009-may-12 20:51:12 debug Exception constructed: Sasl error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No credentials cache found) (qpid/client/SaslFactory.cpp:226) 2009-may-12 20:51:12 warning Closing connection due to internal-error: Sasl error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No credentials cache found) (qpid/client/SaslFactory.cpp:226) 2009-may-12 20:51:12 trace SENT [56605 ovirt.freddysnet.org:5672]: Frame[BEbe; channel=0; {ConnectionCloseBody: reply-code=501; reply-text=internal-error: Sasl error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No credentials cache found) (qpid/client/SaslFactory.cpp:226); }] 2009-may-12 20:51:12 trace RECV [56605 ovirt.freddysnet.org:5672]: Frame[BEbe; channel=0; {ConnectionCloseOkBody: }] 2009-may-12 20:51:12 debug Exception constructed: internal-error: Sasl error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No credentials cache found) (qpid/client/SaslFactory.cpp:226) 2009-may-12 20:51:12 debug Exception constructed: internal-error: Sasl error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No credentials cache found) (qpid/client/SaslFactory.cpp:226) 2009-may-12 20:51:12 debug Connection failed: exception=internal-error: Sasl error: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No credentials cache found) (qpid/client/SaslFactory.cpp:226) ^C Any idears? Freddy -------------- next part -------------- An HTML attachment was scrubbed... URL: From kc at cobradevil.org Tue May 12 21:02:23 2009 From: kc at cobradevil.org (william) Date: Tue, 12 May 2009 23:02:23 +0200 Subject: [Ovirt-devel] [PATCH server webui] Change the "Edit virtual machine" to "Save settings" button] In-Reply-To: <1240429379.11522.5.camel@RIC.kc.mindef.nl> References: <1240429379.11522.5.camel@RIC.kc.mindef.nl> Message-ID: <1242162143.5313.3.camel@RIC.kc.mindef.nl> Now with a git patch! and a reply to all ;) G William On Wed, 2009-04-22 at 21:42 +0200, william wrote: > A small change in the Web UI edit virtual machine. > > --- app/views/vm/edit.rhtml.orig 2009-04-22 21:18:50.000000000 > +0200 > +++ app/views/vm/edit.rhtml 2009-04-22 21:19:11.000000000 +0200 > @@ -11,7 +11,7 @@ > <%= render :partial => 'form', :locals => { :create => false } %> > > > - <%= popup_footer("$('#vm_form').submit()", "Edit Virtual Machine") %> > + <%= popup_footer("$('#vm_form').submit()", "Save settings") %> > > >