aboutsummaryrefslogtreecommitdiff
path: root/old
diff options
context:
space:
mode:
Diffstat (limited to 'old')
-rwxr-xr-xold/C.compare129
-rwxr-xr-xold/C.run141
-rwxr-xr-xold/Cpp.compare129
-rwxr-xr-xold/Cpp.run142
-rwxr-xr-xold/Java.compare129
-rwxr-xr-xold/Java.run160
-rwxr-xr-xold/Pascal.compare129
-rwxr-xr-xold/Pascal.run107
-rwxr-xr-xold/compare.sh129
-rw-r--r--old/connect.php44
-rwxr-xr-xold/create-import-file.sh197
-rw-r--r--old/getextdata.old931
-rw-r--r--old/getextdata.php931
-rw-r--r--old/import-system.txt78
-rw-r--r--old/import.php280
-rw-r--r--old/import.txt1143
-rwxr-xr-xold/run.sh164
-rwxr-xr-xold/updatescore.sh118
-rw-r--r--old/webcast/config.php25
-rw-r--r--old/webcast/contest/index.php61
l---------old/webcast/index.php1
-rw-r--r--old/webcast/runs/index.php41
-rw-r--r--old/webcast/time/index.php12
-rw-r--r--old/webcast/version/index.php10
24 files changed, 0 insertions, 5231 deletions
diff --git a/old/C.compare b/old/C.compare
deleted file mode 100755
index cc4c63b..0000000
--- a/old/C.compare
+++ /dev/null
@@ -1,129 +0,0 @@
-#!/bin/bash
-#//////////////////////////////////////////////////////////////////////////////////////////
-#//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-#//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-#//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-#//
-#//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-#//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-#//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-#//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-#//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-#//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#///////////////////////////////////////////////////////////////////////////////////////////
-#Last modified: 31/oct/2011 by cassio@ime.usp.br
-#
-# This script receives:
-# $1 team_output
-# $2 sol_output
-# $3 languagename
-# $4 problemname
-# $5 problem_input
-#
-# BOCA reads the last line of the standard output
-# and pass it to judges
-#
-if [ ! -r "$1" -o ! -r "$2" ]; then
- echo "Parameter problem"
- exit 43
-fi
-
-# if there is an special checker, use it. It can be defined by an sol_output
-# which has .sh extension (which makes it be executed instead of compared to)
-# or by the existence of the file bocachecker.$4 in the execution path (here
-# $4 is in fact the short problename, which has to match with the spec in BOCA)
-schecker=
-if [ ${2: -3} == ".sh" ]; then
- schecker=$2
- chmod 755 "$schecker"
-else
- if [ "$4" != "" ]; then
- schecker=`which "bocachecker.$4"`
- fi
-fi
-if [ -x "$schecker" ]; then
- echo "Calling special checker $schecker"
- "$schecker" "$@"
- ret=$?
- if [ "$ret" == "0" ]; then
- echo "Checker answered YES"
- exit 4
- fi
- if [ "$ret" == "1" ]; then
- echo "Checker answered WRONG ANSWER"
- exit 6
- fi
- if [ "$ret" == "2" ]; then
- echo "Checker answered OUTPUT FORMAT ERROR"
- exit 5
- fi
- echo "special checker returned unknown code"
- exit 43
-fi
-
-# Next lines of this script just compares team_output and sol_output,
-# although it is possible to change them to more complex evaluations.
-
-diff -q "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff \"$1\" \"$2\" # files match"
- echo "Files match exactly"
- exit 4
-fi
-diff -q -b "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b \"$1\" \"$2\" # files match"
- echo -e "diff -c \"$1\" \"$2\" # files dont match - see output"
- diff -c "$1" "$2"
- echo "Files match with differences in the amount of white spaces"
- exit 5
-fi
-diff -q -b -B "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b -B \"$1\" \"$2\" # files match"
- echo -e "diff -c -b \"$1\" \"$2\" # files dont match - see output"
- diff -c -b "$1" "$2"
- echo "Files match with differences in the amount of white spaces and blank lines"
- exit 5
-fi
-diff -q -i -b -B "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -i -b -B \"$1\" \"$2\" # files match"
- echo -e "diff -c -b -B \"$1\" \"$2\" # files dont match - see output"
- diff -c -b -B "$1" "$2"
- echo "Files match if we ignore case and differences in the amount of white spaces and blank lines"
- exit 5
-fi
-diff -q -b -B -w "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b -B -w \"$1\" \"$2\" # files match"
- echo -e "diff -c -i -b -B \"$1\" \"$2\" # files dont match - see output"
- diff -c -i -b -B "$1" "$2"
- echo "Files match if we discard all white spaces"
- exit 5
-fi
-diff -q -i -b -B -w "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -i -b -B -w \"$1\" \"$2\" # files match"
- echo -e "diff -c -b -B -w \"$1\" \"$2\" # files dont match - see output"
- diff -c -b -B -w "$1" "$2"
- echo "Files match if we ignore case and discard all white spaces"
- exit 5
-fi
-wd=`which wdiff`
-if [ "$wd" != "" ]; then
- wdiff \"$1\" \"$2\" >/dev/null 2>/dev/null
- if [ "$?" == "0" ]; then
- echo -e "wdiff \"$1\" \"$2\" # files match"
- echo -e "diff -c -i -b -B -w \"$1\" \"$2\" # files dont match - see output"
- diff -c -i -b -B -w "$1" "$2"
- echo "BUT Files match if we compare word by word, ignoring everything else, using wdiff"
- echo "diff has a bug that, if a line contains a single space, this is not discarded by -w"
- exit 5
- fi
-fi
-echo -e "### files dont match - see output"
-diff -c -i -b -B -w "$1" "$2"
-echo "Differences found"
-exit 6
diff --git a/old/C.run b/old/C.run
deleted file mode 100755
index 6336c09..0000000
--- a/old/C.run
+++ /dev/null
@@ -1,141 +0,0 @@
-#!/bin/bash
-#//////////////////////////////////////////////////////////////////////////////////////////
-#//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-#//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-#//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-#//
-#//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-#//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-#//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-#//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-#//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-#//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#///////////////////////////////////////////////////////////////////////////////////////////
-#Last modified: 17/oct/2011 by cassio@ime.usp.br
-#
-# parameters are:
-# $1 base_filename
-# $2 source_file
-# $3 input_file
-# $4 languagename
-# $5 problemname
-# $6 timelimit
-#
-# the output of the submission should be directed to the standard output
-#
-# the return code show what happened (according to safeexec):
-# 0 ok
-# 1 compile error
-# 2 runtime error
-# 3 timelimit exceeded
-# 4 internal error
-# 5 parameter error
-# 6 internal error
-# 7 memory limit exceeded
-# 8 security threat
-# 9 runtime error
-# other_codes are unknown to boca: in this case BOCA will present the
-# last line of standard output to the judge
-
-umask 0022
-id -u bocajail >/dev/null 2>/dev/null
-if [ $? == 0 ]; then
- bocau=`id -u bocajail`
- bocag=`id -g bocajail`
- chown bocajail.nogroup .
-else
- bocau=`id -u nobody`
- bocag=`id -g nobody`
- chown nobody.nogroup .
-fi
-if [ "$bocau" == "" -o "$bocag" == "" ]; then
- echo "error finding user to run script"
- exit 43
-fi
-
-# this script makes use of safeexec to execute the code with less privilegies
-# make sure that directories below are correct.
-sf=`which safeexec`
-[ -x "$sf" ] || sf=/usr/bin/safeexec
-gcc=`which gcc`
-[ -x "$gcc" ] || gcc=/usr/bin/gcc
-
-if [ "$1" == "" -o "$2" == "" -o "$3" == "" ]; then
- echo "parameter problem"
- exit 43
-fi
-if [ ! -r $2 ]; then
- echo "$2 not found or it's not readable"
- exit 44
-fi
-if [ ! -r $3 ]; then
- echo "$3 not found or it's not readable"
- exit 45
-fi
-if [ ! -x $sf ]; then
- echo "$sf not found or it's not executable"
- exit 46
-fi
-if [ ! -x $gcc ]; then
- echo "$gcc not found or it's not executable"
- exit 47
-fi
-
-prefix=$1
-name=$2
-input=$3
-
-# setting up the timelimit according to the problem
-if [ "$6" == "" ]; then
-time=5
-else
-time=$6
-fi
-let ttime=$time+30
-
-$gcc -O2 -lm -o $prefix "$name"
-ret=$?
-if [ "$ret" != "0" ]; then
- echo "Compilation Error: $ret"
- exit 1
-else
- cdir=`pwd`
- echo "Current directory is $cdir" >&2
- echo $cdir | grep -q "/bocajail"
- if [ $? == 0 ]; then
- cdir=`echo $cdir | sed "s/.*\/bocajail//"`
- cat <<EOF > runit.sh
-#!/bin/bash
-[ -f /proc/cpuinfo ] || /bin/mount -t proc proc /proc
-#/bin/mount --bind /dev /dev
-[ -d /sys/kernel ] || /bin/mount -t sysfs sysfs /sys
-cd $cdir
-$sf -F10 -n0 -U$bocau -G$bocag -C. -ostdout0 -estderr0 -d512000 -m512000 -f20000 -t$time -T$ttime -i$input ./$prefix
-echo \$? > runit.retcode
-/bin/umount /proc 2>/dev/null
-#/bin/umount /dev
-/bin/umount /sys 2>/dev/null
-EOF
- chmod 755 runit.sh
- chroot /bocajail $cdir/runit.sh
- ret=`cat runit.retcode`
- if [ "$ret" == "" ]; then
- echo "Execution error - check autojudging"
- exit 49
- fi
- else
- echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
- echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
- echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
- $sf -F10 -n0 -C. -U$bocau -G$bocag -ostdout0 -estderr0 -d512000000 -m512000000 -t$time -T$ttime -i$input ./$prefix
- ret=$?
- fi
- if [ $ret -gt 10 ]; then
- ret=0
- fi
-fi
-if [ -f stdout0 ]; then
- cat stdout0
-fi
-exit $ret
diff --git a/old/Cpp.compare b/old/Cpp.compare
deleted file mode 100755
index cc4c63b..0000000
--- a/old/Cpp.compare
+++ /dev/null
@@ -1,129 +0,0 @@
-#!/bin/bash
-#//////////////////////////////////////////////////////////////////////////////////////////
-#//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-#//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-#//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-#//
-#//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-#//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-#//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-#//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-#//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-#//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#///////////////////////////////////////////////////////////////////////////////////////////
-#Last modified: 31/oct/2011 by cassio@ime.usp.br
-#
-# This script receives:
-# $1 team_output
-# $2 sol_output
-# $3 languagename
-# $4 problemname
-# $5 problem_input
-#
-# BOCA reads the last line of the standard output
-# and pass it to judges
-#
-if [ ! -r "$1" -o ! -r "$2" ]; then
- echo "Parameter problem"
- exit 43
-fi
-
-# if there is an special checker, use it. It can be defined by an sol_output
-# which has .sh extension (which makes it be executed instead of compared to)
-# or by the existence of the file bocachecker.$4 in the execution path (here
-# $4 is in fact the short problename, which has to match with the spec in BOCA)
-schecker=
-if [ ${2: -3} == ".sh" ]; then
- schecker=$2
- chmod 755 "$schecker"
-else
- if [ "$4" != "" ]; then
- schecker=`which "bocachecker.$4"`
- fi
-fi
-if [ -x "$schecker" ]; then
- echo "Calling special checker $schecker"
- "$schecker" "$@"
- ret=$?
- if [ "$ret" == "0" ]; then
- echo "Checker answered YES"
- exit 4
- fi
- if [ "$ret" == "1" ]; then
- echo "Checker answered WRONG ANSWER"
- exit 6
- fi
- if [ "$ret" == "2" ]; then
- echo "Checker answered OUTPUT FORMAT ERROR"
- exit 5
- fi
- echo "special checker returned unknown code"
- exit 43
-fi
-
-# Next lines of this script just compares team_output and sol_output,
-# although it is possible to change them to more complex evaluations.
-
-diff -q "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff \"$1\" \"$2\" # files match"
- echo "Files match exactly"
- exit 4
-fi
-diff -q -b "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b \"$1\" \"$2\" # files match"
- echo -e "diff -c \"$1\" \"$2\" # files dont match - see output"
- diff -c "$1" "$2"
- echo "Files match with differences in the amount of white spaces"
- exit 5
-fi
-diff -q -b -B "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b -B \"$1\" \"$2\" # files match"
- echo -e "diff -c -b \"$1\" \"$2\" # files dont match - see output"
- diff -c -b "$1" "$2"
- echo "Files match with differences in the amount of white spaces and blank lines"
- exit 5
-fi
-diff -q -i -b -B "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -i -b -B \"$1\" \"$2\" # files match"
- echo -e "diff -c -b -B \"$1\" \"$2\" # files dont match - see output"
- diff -c -b -B "$1" "$2"
- echo "Files match if we ignore case and differences in the amount of white spaces and blank lines"
- exit 5
-fi
-diff -q -b -B -w "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b -B -w \"$1\" \"$2\" # files match"
- echo -e "diff -c -i -b -B \"$1\" \"$2\" # files dont match - see output"
- diff -c -i -b -B "$1" "$2"
- echo "Files match if we discard all white spaces"
- exit 5
-fi
-diff -q -i -b -B -w "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -i -b -B -w \"$1\" \"$2\" # files match"
- echo -e "diff -c -b -B -w \"$1\" \"$2\" # files dont match - see output"
- diff -c -b -B -w "$1" "$2"
- echo "Files match if we ignore case and discard all white spaces"
- exit 5
-fi
-wd=`which wdiff`
-if [ "$wd" != "" ]; then
- wdiff \"$1\" \"$2\" >/dev/null 2>/dev/null
- if [ "$?" == "0" ]; then
- echo -e "wdiff \"$1\" \"$2\" # files match"
- echo -e "diff -c -i -b -B -w \"$1\" \"$2\" # files dont match - see output"
- diff -c -i -b -B -w "$1" "$2"
- echo "BUT Files match if we compare word by word, ignoring everything else, using wdiff"
- echo "diff has a bug that, if a line contains a single space, this is not discarded by -w"
- exit 5
- fi
-fi
-echo -e "### files dont match - see output"
-diff -c -i -b -B -w "$1" "$2"
-echo "Differences found"
-exit 6
diff --git a/old/Cpp.run b/old/Cpp.run
deleted file mode 100755
index 6c6d7ea..0000000
--- a/old/Cpp.run
+++ /dev/null
@@ -1,142 +0,0 @@
-#!/bin/bash
-#//////////////////////////////////////////////////////////////////////////////////////////
-#//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-#//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-#//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-#//
-#//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-#//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-#//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-#//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-#//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-#//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#///////////////////////////////////////////////////////////////////////////////////////////
-#Last modified: 17/oct/2011 by cassio@ime.usp.br
-#
-# parameters are:
-# $1 base_filename
-# $2 source_file
-# $3 input_file
-# $4 languagename
-# $5 problemname
-# $6 timelimit
-#
-# the output of the submission should be directed to the standard output
-#
-# the return code show what happened:
-# 0 ok
-# 1 compile error
-# 2 runtime error
-# 3 timelimit exceeded
-# 4 internal error
-# 5 parameter error
-# 6 internal error
-# 7 memory limit exceeded
-# 8 security threat
-# 9 runtime error
-# other_codes are unknown to boca: in this case BOCA will present the
-# last line of standard output to the judge
-
-umask 0022
-id -u bocajail >/dev/null 2>/dev/null
-if [ $? == 0 ]; then
- bocau=`id -u bocajail`
- bocag=`id -g bocajail`
- chown bocajail.nogroup .
-else
- bocau=`id -u nobody`
- bocag=`id -g nobody`
- chown nobody.nogroup .
-fi
-if [ "$bocau" == "" -o "$bocag" == "" ]; then
- echo "error finding user to run script"
- exit 43
-fi
-
-# this script makes use of safeexec to execute the code with less privilegies
-# make sure that directories below are correct.
-sf=`which safeexec`
-[ -x "$sf" ] || sf=/usr/bin/safeexec
-gpp=`which g++`
-[ -x "$gpp" ] || gcc=/usr/bin/g++
-
-if [ "$1" == "" -o "$2" == "" -o "$3" == "" ]; then
- echo "parameter problem"
- exit 43
-fi
-if [ ! -r $2 ]; then
- echo "$2 not found or it's not readable"
- exit 44
-fi
-if [ ! -r $3 ]; then
- echo "$3 not found or it's not readable"
- exit 45
-fi
-if [ ! -x $sf ]; then
- echo "$sf not found or it's not executable"
- exit 46
-fi
-if [ ! -x $gpp ]; then
- echo "$gpp not found or it's not executable"
- exit 47
-fi
-
-prefix=$1
-name=$2
-input=$3
-
-# setting up the timelimit according to the problem
-# note that problems should spelling the same as inside BOCA
-if [ "$6" == "" ]; then
-time=5
-else
-time=$6
-fi
-let ttime=$time+30
-
-$gpp -O2 -lm -o $prefix "$name"
-ret=$?
-if [ "$ret" != "0" ]; then
- echo "Compiling Error: $ret"
- exit 1
-else
- cdir=`pwd`
- echo "Current directory is $cdir" >&2
- echo $cdir | grep -q "/bocajail"
- if [ $? == 0 ]; then
- cdir=`echo $cdir | sed "s/.*\/bocajail//"`
- cat <<EOF > runit.sh
-#!/bin/bash
-[ -f /proc/cpuinfo ] || /bin/mount -t proc proc /proc
-#/bin/mount --bind /dev /dev
-[ -d /sys/kernel ] || /bin/mount -t sysfs sysfs /sys
-cd $cdir
-$sf -F10 -t$time -T$ttime -i$input -ostdout0 -estderr0 -U$bocau -G$bocag -n0 -C. -f20000 -d512000 -m512000 ./$prefix
-echo \$? > runit.retcode
-/bin/umount /proc 2>/dev/null
-#/bin/umount /dev
-/bin/umount /sys 2>/dev/null
-EOF
- chmod 755 runit.sh
- chroot /bocajail $cdir/runit.sh
- ret=`cat runit.retcode`
- if [ "$ret" == "" ]; then
- echo "Execution error - check autojudging"
- exit 49
- fi
- else
- echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
- echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
- echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
- $sf -F10 -n0 -C. -U$bocau -G$bocag -ostdout0 -estderr0 -d512000000 -m512000000 -t$time -T$ttime -i$input ./$prefix
- ret=$?
- fi
- if [ $ret -gt 10 ]; then
- ret=0
- fi
-fi
-if [ -f stdout0 ]; then
- cat stdout0
-fi
-exit $ret
diff --git a/old/Java.compare b/old/Java.compare
deleted file mode 100755
index cc4c63b..0000000
--- a/old/Java.compare
+++ /dev/null
@@ -1,129 +0,0 @@
-#!/bin/bash
-#//////////////////////////////////////////////////////////////////////////////////////////
-#//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-#//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-#//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-#//
-#//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-#//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-#//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-#//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-#//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-#//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#///////////////////////////////////////////////////////////////////////////////////////////
-#Last modified: 31/oct/2011 by cassio@ime.usp.br
-#
-# This script receives:
-# $1 team_output
-# $2 sol_output
-# $3 languagename
-# $4 problemname
-# $5 problem_input
-#
-# BOCA reads the last line of the standard output
-# and pass it to judges
-#
-if [ ! -r "$1" -o ! -r "$2" ]; then
- echo "Parameter problem"
- exit 43
-fi
-
-# if there is an special checker, use it. It can be defined by an sol_output
-# which has .sh extension (which makes it be executed instead of compared to)
-# or by the existence of the file bocachecker.$4 in the execution path (here
-# $4 is in fact the short problename, which has to match with the spec in BOCA)
-schecker=
-if [ ${2: -3} == ".sh" ]; then
- schecker=$2
- chmod 755 "$schecker"
-else
- if [ "$4" != "" ]; then
- schecker=`which "bocachecker.$4"`
- fi
-fi
-if [ -x "$schecker" ]; then
- echo "Calling special checker $schecker"
- "$schecker" "$@"
- ret=$?
- if [ "$ret" == "0" ]; then
- echo "Checker answered YES"
- exit 4
- fi
- if [ "$ret" == "1" ]; then
- echo "Checker answered WRONG ANSWER"
- exit 6
- fi
- if [ "$ret" == "2" ]; then
- echo "Checker answered OUTPUT FORMAT ERROR"
- exit 5
- fi
- echo "special checker returned unknown code"
- exit 43
-fi
-
-# Next lines of this script just compares team_output and sol_output,
-# although it is possible to change them to more complex evaluations.
-
-diff -q "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff \"$1\" \"$2\" # files match"
- echo "Files match exactly"
- exit 4
-fi
-diff -q -b "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b \"$1\" \"$2\" # files match"
- echo -e "diff -c \"$1\" \"$2\" # files dont match - see output"
- diff -c "$1" "$2"
- echo "Files match with differences in the amount of white spaces"
- exit 5
-fi
-diff -q -b -B "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b -B \"$1\" \"$2\" # files match"
- echo -e "diff -c -b \"$1\" \"$2\" # files dont match - see output"
- diff -c -b "$1" "$2"
- echo "Files match with differences in the amount of white spaces and blank lines"
- exit 5
-fi
-diff -q -i -b -B "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -i -b -B \"$1\" \"$2\" # files match"
- echo -e "diff -c -b -B \"$1\" \"$2\" # files dont match - see output"
- diff -c -b -B "$1" "$2"
- echo "Files match if we ignore case and differences in the amount of white spaces and blank lines"
- exit 5
-fi
-diff -q -b -B -w "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b -B -w \"$1\" \"$2\" # files match"
- echo -e "diff -c -i -b -B \"$1\" \"$2\" # files dont match - see output"
- diff -c -i -b -B "$1" "$2"
- echo "Files match if we discard all white spaces"
- exit 5
-fi
-diff -q -i -b -B -w "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -i -b -B -w \"$1\" \"$2\" # files match"
- echo -e "diff -c -b -B -w \"$1\" \"$2\" # files dont match - see output"
- diff -c -b -B -w "$1" "$2"
- echo "Files match if we ignore case and discard all white spaces"
- exit 5
-fi
-wd=`which wdiff`
-if [ "$wd" != "" ]; then
- wdiff \"$1\" \"$2\" >/dev/null 2>/dev/null
- if [ "$?" == "0" ]; then
- echo -e "wdiff \"$1\" \"$2\" # files match"
- echo -e "diff -c -i -b -B -w \"$1\" \"$2\" # files dont match - see output"
- diff -c -i -b -B -w "$1" "$2"
- echo "BUT Files match if we compare word by word, ignoring everything else, using wdiff"
- echo "diff has a bug that, if a line contains a single space, this is not discarded by -w"
- exit 5
- fi
-fi
-echo -e "### files dont match - see output"
-diff -c -i -b -B -w "$1" "$2"
-echo "Differences found"
-exit 6
diff --git a/old/Java.run b/old/Java.run
deleted file mode 100755
index 7708811..0000000
--- a/old/Java.run
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/bin/bash
-#//////////////////////////////////////////////////////////////////////////////////////////
-#//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-#//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-#//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-#//
-#//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-#//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-#//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-#//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-#//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-#//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#///////////////////////////////////////////////////////////////////////////////////////////
-#Last modified: 17/oct/2011 by cassio@ime.usp.br
-#
-# parameters are:
-# $1 base_filename
-# $2 source_file
-# $3 input_file
-# $4 languagename
-# $5 problemname
-# $6 timelimit
-#
-# the output of the submission should be directed to the standard output
-#
-# the return code show what happened:
-# 0 ok
-# 1 compile error
-# 2 runtime error
-# 3 timelimit exceeded
-# 4 internal error
-# 5 parameter error
-# 6 internal error
-# 7 memory limit exceeded
-# 8 security threat
-# 9 runtime error
-# other_codes are unknown to boca: in this case BOCA will present the
-# last line of standard output to the judge
-
-umask 0022
-id -u bocajail >/dev/null 2>/dev/null
-if [ $? == 0 ]; then
- bocau=`id -u bocajail`
- bocag=`id -g bocajail`
- chown bocajail.nogroup .
-else
- bocau=`id -u nobody`
- bocag=`id -g nobody`
- chown nobody.nogroup .
-fi
-if [ "$bocau" == "" -o "$bocag" == "" ]; then
- echo "error finding user to run script"
- exit 43
-fi
-
-export CLASSPATH=.:$CLASSPATH
-
-# this script makes use of safeexec to execute the code with less privilegies
-# make sure that directories below are correct.
-sf=`which safeexec`
-[ -x "$sf" ] || sf=/usr/bin/safeexec
-java=`which java`
-[ -x "$java" ] || java=/usr/java/bin/java
-javac=`which javac`
-[ -x "$javac" ] || javac=/usr/java/bin/javac
-
-if [ "$1" == "" -o "$2" == "" -o "$3" == "" ]; then
- echo "parameter problem"
- exit 43
-fi
-if [ ! -r $2 ]; then
- echo "$2 not found or it's not readable"
- exit 44
-fi
-if [ ! -r $3 ]; then
- echo "$3 not found or it's not readable"
- exit 45
-fi
-if [ ! -x $sf ]; then
- echo "$sf not found or it's not executable"
- exit 46
-fi
-if [ ! -x $java ]; then
- echo "$java not found or it's not executable"
- exit 47
-fi
-if [ ! -x $javac ]; then
- echo "$javac not found or it's not executable"
- exit 47
-fi
-
-prefix=$1
-name=$2
-input=$3
-
-# setting up the timelimit according to the problem
-# note that problems should spelling the same as inside BOCA
-if [ "$6" == "" ]; then
-time=5
-else
-time=$6
-fi
-let ttime=$time+30
-
-$javac "$name"
-ret=$?
-if [ "$ret" != "0" ]; then
- echo "Compilation Error: $ret"
- exit 1
-else
- if [ ! -f "$prefix.class" ]; then
- echo "Class file $prefix.class not generated - possible name mismatch"
- exit 48
- fi
- cdir=`pwd`
- echo "Current directory is $cdir" >&2
- echo $cdir | grep -q "/bocajail"
- if [ $? == 0 ]; then
- cdir=`echo $cdir | sed "s/.*\/bocajail//"`
- cat <<EOF > runit.sh
-#!/bin/bash
-[ -f /proc/cpuinfo ] || /bin/mount -t proc proc /proc
-#/bin/mount --bind /dev /dev
-[ -d /sys/kernel ] || /bin/mount -t sysfs sysfs /sys
-cd $cdir
-$sf -t$time -T$ttime -i$input -F256 -u256 -ostdout0 -estderr0 -U$bocau -G$bocag -n0 -C. -f20000 -d1000000 -m1000000 -- $java -Xmx512M -Xms512M $prefix
-echo \$? > runit.retcode
-/bin/umount /proc 2>/dev/null
-#/bin/umount /dev
-/bin/umount /sys 2>/dev/null
-EOF
- chmod 755 runit.sh
- chroot /bocajail $cdir/runit.sh
- ret=`cat runit.retcode`
- if [ "$ret" == "" ]; then
- echo "Execution error - check autojudging"
- exit 49
- fi
- if [ $ret -gt 10 ]; then
- echo "> > > > > > > Nonzero return code - possible runtime error - GUESSING IT IS RUNTIME ERROR! < < < < < < < <"
- exit 9
- fi
- else
- echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
- echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
- echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
-# $java $prefix < $input
- $sf -t$time -T$ttime -i$input -F256 -u256 -U$bocau -G$bocag -ostdout0 -estderr0 -n0 -C. -d900000000 -m900000000 -- $java -Xmx512M -Xms512M $prefix
- ret=$?
- fi
- if [ $ret -gt 10 ]; then
- echo "> > > > > > > Nonzero return code - possible runtime error - GUESSING IT IS RUNTIME ERROR! < < < < < < < <"
- ret=9
- fi
-fi
-if [ -f stdout0 ]; then
- cat stdout0
-fi
-exit $ret
diff --git a/old/Pascal.compare b/old/Pascal.compare
deleted file mode 100755
index cc4c63b..0000000
--- a/old/Pascal.compare
+++ /dev/null
@@ -1,129 +0,0 @@
-#!/bin/bash
-#//////////////////////////////////////////////////////////////////////////////////////////
-#//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-#//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-#//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-#//
-#//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-#//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-#//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-#//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-#//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-#//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#///////////////////////////////////////////////////////////////////////////////////////////
-#Last modified: 31/oct/2011 by cassio@ime.usp.br
-#
-# This script receives:
-# $1 team_output
-# $2 sol_output
-# $3 languagename
-# $4 problemname
-# $5 problem_input
-#
-# BOCA reads the last line of the standard output
-# and pass it to judges
-#
-if [ ! -r "$1" -o ! -r "$2" ]; then
- echo "Parameter problem"
- exit 43
-fi
-
-# if there is an special checker, use it. It can be defined by an sol_output
-# which has .sh extension (which makes it be executed instead of compared to)
-# or by the existence of the file bocachecker.$4 in the execution path (here
-# $4 is in fact the short problename, which has to match with the spec in BOCA)
-schecker=
-if [ ${2: -3} == ".sh" ]; then
- schecker=$2
- chmod 755 "$schecker"
-else
- if [ "$4" != "" ]; then
- schecker=`which "bocachecker.$4"`
- fi
-fi
-if [ -x "$schecker" ]; then
- echo "Calling special checker $schecker"
- "$schecker" "$@"
- ret=$?
- if [ "$ret" == "0" ]; then
- echo "Checker answered YES"
- exit 4
- fi
- if [ "$ret" == "1" ]; then
- echo "Checker answered WRONG ANSWER"
- exit 6
- fi
- if [ "$ret" == "2" ]; then
- echo "Checker answered OUTPUT FORMAT ERROR"
- exit 5
- fi
- echo "special checker returned unknown code"
- exit 43
-fi
-
-# Next lines of this script just compares team_output and sol_output,
-# although it is possible to change them to more complex evaluations.
-
-diff -q "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff \"$1\" \"$2\" # files match"
- echo "Files match exactly"
- exit 4
-fi
-diff -q -b "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b \"$1\" \"$2\" # files match"
- echo -e "diff -c \"$1\" \"$2\" # files dont match - see output"
- diff -c "$1" "$2"
- echo "Files match with differences in the amount of white spaces"
- exit 5
-fi
-diff -q -b -B "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b -B \"$1\" \"$2\" # files match"
- echo -e "diff -c -b \"$1\" \"$2\" # files dont match - see output"
- diff -c -b "$1" "$2"
- echo "Files match with differences in the amount of white spaces and blank lines"
- exit 5
-fi
-diff -q -i -b -B "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -i -b -B \"$1\" \"$2\" # files match"
- echo -e "diff -c -b -B \"$1\" \"$2\" # files dont match - see output"
- diff -c -b -B "$1" "$2"
- echo "Files match if we ignore case and differences in the amount of white spaces and blank lines"
- exit 5
-fi
-diff -q -b -B -w "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b -B -w \"$1\" \"$2\" # files match"
- echo -e "diff -c -i -b -B \"$1\" \"$2\" # files dont match - see output"
- diff -c -i -b -B "$1" "$2"
- echo "Files match if we discard all white spaces"
- exit 5
-fi
-diff -q -i -b -B -w "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -i -b -B -w \"$1\" \"$2\" # files match"
- echo -e "diff -c -b -B -w \"$1\" \"$2\" # files dont match - see output"
- diff -c -b -B -w "$1" "$2"
- echo "Files match if we ignore case and discard all white spaces"
- exit 5
-fi
-wd=`which wdiff`
-if [ "$wd" != "" ]; then
- wdiff \"$1\" \"$2\" >/dev/null 2>/dev/null
- if [ "$?" == "0" ]; then
- echo -e "wdiff \"$1\" \"$2\" # files match"
- echo -e "diff -c -i -b -B -w \"$1\" \"$2\" # files dont match - see output"
- diff -c -i -b -B -w "$1" "$2"
- echo "BUT Files match if we compare word by word, ignoring everything else, using wdiff"
- echo "diff has a bug that, if a line contains a single space, this is not discarded by -w"
- exit 5
- fi
-fi
-echo -e "### files dont match - see output"
-diff -c -i -b -B -w "$1" "$2"
-echo "Differences found"
-exit 6
diff --git a/old/Pascal.run b/old/Pascal.run
deleted file mode 100755
index df98e41..0000000
--- a/old/Pascal.run
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/bin/bash
-#//////////////////////////////////////////////////////////////////////////////////////////
-#//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-#//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-#//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-#//
-#//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-#//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-#//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-#//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-#//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-#//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#///////////////////////////////////////////////////////////////////////////////////////////
-#Last modified: 25/may/2010 by cassiopc
-#
-# parameters are:
-# $1 base_filename
-# $2 source_file
-# $3 input_file
-# $4 languagename
-# $5 problemname
-# $6 timelimit
-#
-# the output of the submission should be directed to the standard output
-#
-# the return code show what happened:
-# 0 ok
-# 1 compile error
-# 2 runtime error
-# 3 timelimit exceeded
-# other_codes are unknown to boca: in this case BOCA will present the
-# last line of standard output to the judge
-
-umask 0022
-chown nobody.nogroup .
-
-# this script makes use of safeexec to execute the code with less privilegies
-# make sure that directories below are correct.
-grep=`which grep`
-[ -x "$grep" ] || grep=/bin/grep
-sf=`which safeexec`
-[ -x "$sf" ] || sf=/usr/bin/safeexec
-pascal=`which fpc`
-[ -x "$pascal" ] || pascal=/usr/bin/fpc
-
-if [ "$1" == "" -o "$2" == "" -o "$3" == "" ]; then
- echo "parameter problem"
- exit 43
-fi
-if [ ! -r $2 ]; then
- echo "$2 not found or it's not readable"
- exit 44
-fi
-if [ ! -r $3 ]; then
- echo "$3 not found or it's not readable"
- exit 45
-fi
-if [ ! -x $sf ]; then
- echo "$sf not found or it's not executable"
- exit 46
-fi
-if [ ! -x $pascal ]; then
- echo "$pascal not found or it's not executable"
- exit 47
-fi
-
-prefix=$1
-name=$2
-input=$3
-
-# setting up the timelimit according to the problem
-# note that problems should spelling the same as inside BOCA
-if [ "$6" == "" ]; then
-time=5
-else
-time=$6
-fi
-let ttime=$time+30
-
-$pascal -o$prefix $name >compiler.out 2>compiler.out
-$grep -irq linking compiler.out
-ret=$?
-$grep -irq "lines compiled" compiler.out
-ret2=$?
-if [ "$ret" != "0" -o "$ret2" != "0" ]; then
- cat compiler.out
- echo "Compiling Error: $ret"
- exit 1
-else
- $sf -F10 -t$time -T$ttime -i$input -opascal.out -n0 -R. ./$prefix
- ret=$?
- if [ -f pascal.out ]; then
- cat pascal.out
- $grep -irq "runtime error" pascal.out
- ret2=$?
- if [ "$ret2" = "0" ]; then
- echo "Strange output - possible runtime error"
- if [ $ret -lt 4 ]; then
- ret=48
- fi
- fi
- else
- echo "Output file not found - possible runtime error"
- fi
-fi
-exit $ret
diff --git a/old/compare.sh b/old/compare.sh
deleted file mode 100755
index cc4c63b..0000000
--- a/old/compare.sh
+++ /dev/null
@@ -1,129 +0,0 @@
-#!/bin/bash
-#//////////////////////////////////////////////////////////////////////////////////////////
-#//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-#//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-#//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-#//
-#//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-#//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-#//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-#//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-#//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-#//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#///////////////////////////////////////////////////////////////////////////////////////////
-#Last modified: 31/oct/2011 by cassio@ime.usp.br
-#
-# This script receives:
-# $1 team_output
-# $2 sol_output
-# $3 languagename
-# $4 problemname
-# $5 problem_input
-#
-# BOCA reads the last line of the standard output
-# and pass it to judges
-#
-if [ ! -r "$1" -o ! -r "$2" ]; then
- echo "Parameter problem"
- exit 43
-fi
-
-# if there is an special checker, use it. It can be defined by an sol_output
-# which has .sh extension (which makes it be executed instead of compared to)
-# or by the existence of the file bocachecker.$4 in the execution path (here
-# $4 is in fact the short problename, which has to match with the spec in BOCA)
-schecker=
-if [ ${2: -3} == ".sh" ]; then
- schecker=$2
- chmod 755 "$schecker"
-else
- if [ "$4" != "" ]; then
- schecker=`which "bocachecker.$4"`
- fi
-fi
-if [ -x "$schecker" ]; then
- echo "Calling special checker $schecker"
- "$schecker" "$@"
- ret=$?
- if [ "$ret" == "0" ]; then
- echo "Checker answered YES"
- exit 4
- fi
- if [ "$ret" == "1" ]; then
- echo "Checker answered WRONG ANSWER"
- exit 6
- fi
- if [ "$ret" == "2" ]; then
- echo "Checker answered OUTPUT FORMAT ERROR"
- exit 5
- fi
- echo "special checker returned unknown code"
- exit 43
-fi
-
-# Next lines of this script just compares team_output and sol_output,
-# although it is possible to change them to more complex evaluations.
-
-diff -q "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff \"$1\" \"$2\" # files match"
- echo "Files match exactly"
- exit 4
-fi
-diff -q -b "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b \"$1\" \"$2\" # files match"
- echo -e "diff -c \"$1\" \"$2\" # files dont match - see output"
- diff -c "$1" "$2"
- echo "Files match with differences in the amount of white spaces"
- exit 5
-fi
-diff -q -b -B "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b -B \"$1\" \"$2\" # files match"
- echo -e "diff -c -b \"$1\" \"$2\" # files dont match - see output"
- diff -c -b "$1" "$2"
- echo "Files match with differences in the amount of white spaces and blank lines"
- exit 5
-fi
-diff -q -i -b -B "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -i -b -B \"$1\" \"$2\" # files match"
- echo -e "diff -c -b -B \"$1\" \"$2\" # files dont match - see output"
- diff -c -b -B "$1" "$2"
- echo "Files match if we ignore case and differences in the amount of white spaces and blank lines"
- exit 5
-fi
-diff -q -b -B -w "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b -B -w \"$1\" \"$2\" # files match"
- echo -e "diff -c -i -b -B \"$1\" \"$2\" # files dont match - see output"
- diff -c -i -b -B "$1" "$2"
- echo "Files match if we discard all white spaces"
- exit 5
-fi
-diff -q -i -b -B -w "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -i -b -B -w \"$1\" \"$2\" # files match"
- echo -e "diff -c -b -B -w \"$1\" \"$2\" # files dont match - see output"
- diff -c -b -B -w "$1" "$2"
- echo "Files match if we ignore case and discard all white spaces"
- exit 5
-fi
-wd=`which wdiff`
-if [ "$wd" != "" ]; then
- wdiff \"$1\" \"$2\" >/dev/null 2>/dev/null
- if [ "$?" == "0" ]; then
- echo -e "wdiff \"$1\" \"$2\" # files match"
- echo -e "diff -c -i -b -B -w \"$1\" \"$2\" # files dont match - see output"
- diff -c -i -b -B -w "$1" "$2"
- echo "BUT Files match if we compare word by word, ignoring everything else, using wdiff"
- echo "diff has a bug that, if a line contains a single space, this is not discarded by -w"
- exit 5
- fi
-fi
-echo -e "### files dont match - see output"
-diff -c -i -b -B -w "$1" "$2"
-echo "Differences found"
-exit 6
diff --git a/old/connect.php b/old/connect.php
deleted file mode 100644
index 1ee33da..0000000
--- a/old/connect.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-//////////////////////////////////////////////////////////////////////////////////////////
-//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-//
-//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-///////////////////////////////////////////////////////////////////////////////////////////
-// created 14/June/2011 by cassio@ime.usp.br
-require('header.php');
-
-if(($ct = DBContestInfo($_SESSION["usertable"]["contestnumber"])) == null)
- ForceLoad("../index.php");
-if(($st = DBSiteInfo($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usersitenumber"])) == null)
- ForceLoad("../index.php");
-
-$fn = tempnam("/tmp","bkp-");
-$fout = fopen($fn,"wb");
-echo $_POST;
-echo $_POST['data'];
-fwrite($fout,base64_decode($_POST['data']));
-fclose($fout);
-$size=filesize($fn);
-$name=$_POST['name'];
-if ($size > $ct["contestmaxfilesize"] || strlen($name)>100 || strlen($name)<1) {
- LOGLevel("User {$_SESSION["usertable"]["username"]} tried to submit file " .
- ":${name}: with $size bytes.", 1);
- MSGError("File size exceeds the limit allowed or invalid name.");
-} else
-
- DBNewBkp ($_SESSION["usertable"]["contestnumber"],
- $_SESSION["usertable"]["usersitenumber"],
- $_SESSION["usertable"]["usernumber"],
- $name,
- $fn, $size);
-@unlink($fn);
-ForceLoad("../index.php");
-?>
diff --git a/old/create-import-file.sh b/old/create-import-file.sh
deleted file mode 100755
index 0d3ca9e..0000000
--- a/old/create-import-file.sh
+++ /dev/null
@@ -1,197 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2007- C. P. de Campos (cassio@ime.usp.br). All rights reserved.
-# Licensed under Q Public License version 1.0. See http://www.opensource.org/licenses/qtpl.php
-
-for i in /usr/bin/cut /bin/cat /bin/date /usr/bin/basename /bin/true /usr/bin/uuencode /usr/bin/wc /usr/bin/tail; do
- if [ ! -x $i ]; then
- echo "$i not found. Aborting"
- exit 1
- fi
-done
-
-if [ "$1" == "" -o "$2" == "" -o ! -d "$2" -o ! -r "$2" ]; then
- echo "Usage $0 <filename> <directory>"
- echo "filename will be overwritten."
- echo "directory must contain the following files:"
- echo " *.run: where * is a language name."
- echo " *.compare: where * is a language name."
- echo " *.in: where * is a problem name."
- echo " *.out: where * is a problem name."
- echo " *.pdf: where * is a problem name."
- echo " For better compatibility, use only letters in filenames (avoid spaces, symbols, etc)."
- exit 1
-fi
-file=$1
-dir=$2
-
-d=`/bin/date +%s`
-endmark=endmark$d
-
-echo -n "Enter the contest name: "
-read name
-
-echo -n "Enter your site name: "
-read site
-
-st=$d
-while /bin/true; do
- echo -n "Enter starting date (format complying with /bin/date. For example, '12/25/2007 13:34'): "
- read data
- st=`/bin/date -d "$data" +%s`
- if [ $? == 0 ]; then
- break
- fi
-done
-
-echo "Creating contest, site and answer sections"
-/bin/cat << EOFEOF > $file
-$endmark
-
-[contest]
-contestname=$name
-scorelevel=4
-sitename=$site
-startdate=$st
-
-[site]
-
-[answer]
-answernumber=1
-answername=NO - Compile error
-answeryes=f
-
-answernumber=2
-answername=NO - Runtime error
-answeryes=f
-
-answernumber=3
-answername=NO - Time limit exceeded
-answeryes=f
-
-answernumber=4
-answername=YES
-answeryes=t
-
-answernumber=5
-answername=NO - Presentation error
-answeryes=f
-
-answernumber=6
-answername=NO - Wrong answer
-answeryes=f
-
-answernumber=7
-answername=NO - Contact staff
-answeryes=f
-
-answernumber=8
-answername=NO - Problem/File name mismatch
-answeryes=f
-
-EOFEOF
-
-echo "Creating language section"
-echo "[language]" >> $file
-
-j=1
-for i in $dir/*.run ; do
- lang=`/usr/bin/basename "$i" .run`
- echo "Creating $lang"
- mds=`/usr/bin/md5sum $i | /usr/bin/cut -d" " -f1`
- mdc=`/usr/bin/md5sum $dir/$lang.compare | /usr/bin/cut -d" " -f1`
-
- echo -n "Enter language name: "
- read name
-
- /usr/bin/uuencode -m x < $dir/$lang.run > $file.tmp
- lin=`/usr/bin/wc -l $file.tmp | /usr/bin/cut -d" " -f1`
- let lin="$lin - 1"
-
- /bin/cat << EOFEOF >> $file
-langnumber=$j
-langname=$name
-langscriptmd5=$mds
-langcompscriptmd5=$mdc
-langscript=base64:$lang.run
-EOFEOF
- /usr/bin/tail -n $lin $file.tmp >> $file
- echo "***${endmark}***" >> $file
-
- /usr/bin/uuencode -m x < $dir/$lang.compare > $file.tmp
- lin=`/usr/bin/wc -l $file.tmp | /usr/bin/cut -d" " -f1`
- let lin="$lin - 1"
- echo "langcompscript=base64:$lang.compare" >> $file
- /usr/bin/tail -n $lin $file.tmp >> $file
- echo "***${endmark}***" >> $file
-
- echo "" >> $file
- let j="$j + 1"
-done
-
-echo "Creating problem section"
-echo "[problem]" >> $file
-letters="A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
-
-j=1
-for i in $dir/*.out ; do
- prob=`/usr/bin/basename "$i" .out`
- letter=`echo $letters | /usr/bin/cut -d" " -f$j`
- echo "Creating problem $letter (basename=$prob)"
-
- echo -n "Enter full name: "
- read full
- echo -n "Enter time limit: "
- read tl
- echo -n "Enter Color name: "
- read cn
- echo -n "Enter Color (html RGB format): "
- read rgb
-
- /bin/cat << EOFEOF >> $file
-probnumber=$j
-probname=$letter
-probfullname=$full
-probbasename=$prob
-probtimelimit=$tl
-probcolorname=$cn
-probcolor=$rgb
-EOFEOF
-
- if [ -r $dir/$prob.in ]; then
- mds=`/usr/bin/md5sum $dir/$prob.in | /usr/bin/cut -d" " -f1`
- echo "probinputfilemd5=$mds" >> $file
- echo "probinputfile=base64:$prob.in" >> $file
- /usr/bin/uuencode -m x < $dir/$prob.in > $file.tmp
- lin=`/usr/bin/wc -l $file.tmp | /usr/bin/cut -d" " -f1`
- let lin="$lin - 1"
- /usr/bin/tail -n $lin $file.tmp >> $file
- echo "***${endmark}***" >> $file
- fi
- if [ -r $dir/$prob.out ]; then
- mds=`/usr/bin/md5sum $dir/$prob.out | /usr/bin/cut -d" " -f1`
- echo "probsolfilemd5=$mds" >> $file
- echo "probsolfile=base64:$prob.out" >> $file
- /usr/bin/uuencode -m x < $dir/$prob.out > $file.tmp
- lin=`/usr/bin/wc -l $file.tmp | /usr/bin/cut -d" " -f1`
- let lin="$lin - 1"
- /usr/bin/tail -n $lin $file.tmp >> $file
- echo "***${endmark}***" >> $file
- fi
- if [ -r $dir/$prob.pdf ]; then
- mds=`/usr/bin/md5sum $dir/$prob.pdf | /usr/bin/cut -d" " -f1`
- echo "probdescfilemd5=$mds" >> $file
- echo "probdescfile=base64:$prob.pdf" >> $file
- /usr/bin/uuencode -m x < $dir/$prob.pdf > $file.tmp
- lin=`/usr/bin/wc -l $file.tmp | /usr/bin/cut -d" " -f1`
- let lin="$lin - 1"
- /usr/bin/tail -n $lin $file.tmp >> $file
- echo "***${endmark}***" >> $file
- fi
-
- echo "" >> $file
- let j="$j + 1"
-done
-
-echo "[end]" >> $file
-rm -f $file.tmp
-echo "Done."
diff --git a/old/getextdata.old b/old/getextdata.old
deleted file mode 100644
index 7c9955d..0000000
--- a/old/getextdata.old
+++ /dev/null
@@ -1,931 +0,0 @@
-<?php
-//////////////////////////////////////////////////////////////////////////////////////////
-//BOCA Online Contest Administrator. Copyright (c) 2003-2004 Cassio Polpo de Campos.
-//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-//
-//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-///////////////////////////////////////////////////////////////////////////////////////////
-
-//retorna ip do cliente
-function getIP() {
- if (getenv("HTTP_CLIENT_IP"))
- $ip = getenv("HTTP_CLIENT_IP");
- else
- if(getenv("HTTP_X_FORWARDED_FOR"))
- $ip = getenv("HTTP_X_FORWARDED_FOR");
- else
- if(getenv("REMOTE_ADDR"))
- $ip = getenv("REMOTE_ADDR");
- else
- $ip = "UNKNOWN";
- $ip = strtok ($ip, ",");
- return $ip;
-}
-//para compatibilidade com versoes velhas e novas do php
-function DB_lo_open($conn, $file, $mode) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_loopen ($conn, $file, $mode);
- else
- return pg_lo_open ($conn, $file, $mode);
-}
-function DB_lo_read_all($id) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_loreadall ($id);
- else
- return pg_lo_read_all ($id);
-}
-function DB_lo_import($conn, $file) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_loimport ($file, $conn);
- else
- return pg_lo_import ($conn, $file);
-}
-function DB_lo_close($id) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_loclose ($id);
- else
- return pg_lo_close ($id);
-}
-function DB_lo_unlink($c,$id) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_lounlink ($id,$c);
- else
- return pg_lo_unlink ($c,$id);
-}
-function DB_lo_create($conn) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_locreate ($conn);
- else
- return pg_lo_create ($conn);
-}
-function DB_lo_write($fp, $data) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_lowrite ($fp, $data);
- else
- return pg_lo_write ($fp, $data);
-}
-function DB_lo_read($fp, $len) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_loread ($fp, $len);
- else
- return pg_lo_read ($fp, $len);
-}
-
-//abrir conexao com o banco de dados
-function DBConnect() {
- $dbconn="host=localhost dbname=bocadb user=bocauser password=boca";
- $conn = pg_connect ($dbconn);
- if (!$conn) {
- echo "Unable to connect to local database\n";
- return null;
- }
- return $conn;
-}
-function DBExtConnect($c, $contest, $site) {
- $r = DBExec($c, "select * from sitetable where sitenumber=$site and contestnumber=$contest");
- if (DBnLines($r)==0) {
- echo "Unable to find the site in the database (site=$site, contest=$contest).\n";
- exit;
- }
- $st = DBRow($r,0);
-
- if(($f = file("sqlpass.php"))===false) $pass="boca";
- else $pass=trim($f[1]);
-
- // gambiarra para testar se a conexao esta de pe
- $fp = fsockopen ($st["siteip"], 5432, $errno, $errstr, 10);
- if (!$fp) {
- echo "$errstr ($errno). Aborting this connection (ip=".$st["siteip"].").\n";
- return null;
- }
- fclose ($fp);
- // se a conexao cair entre o teste acima e o connect abaixo, esse script pode demorar ate
- // dar o timeout (no meu teste foram cerca de 3min para cada timeout)
-
- $conn = pg_connect ("host=" . $st["siteip"] . " dbname=bocadb user=bocauser password=$pass");
- if (!$conn) {
- echo "Unable to connect to site $site (ip=".$st["siteip"].")\n";
- return null;
- }
- echo "Connected to " .$st["siteip"].". Let's exchange data...\n";
- return $conn;
-}
-
-function GetExternalData ($contest) {
- $c = DBConnect();
- if ($c==null) return;
- $r = DBExec($c, "select * from contesttable where contestnumber=$contest");
- if (DBnLines($r)==0) {
- echo "Unable to find the contest $contest in the database.\n";
- exit;
- }
- $ct = DBRow($r,0);
- $localsite = $ct["contestlocalsite"];
- $mainsite = $ct["contestmainsite"];
-
- if ($mainsite!=$localsite) {
- $r = DBExec($c, "select * from sitetable where sitenumber=".$ct["contestmainsite"]." and contestnumber=$contest");
- if (DBnLines($r)==0) {
- echo "Unable to find the main site in the database (site=$site, contest=$contest).\n";
- exit;
- }
- $st = DBRow($r,0);
- if (($t = DBExtConnect($c, $contest, $st["sitenumber"]))!=null) {
- DBExec($c, "begin work");
-
- // sincronizando contest
- $r = DBExec ($t, "select * from contesttable where contestnumber=$contest");
- $n = DBnLines ($r);
- $atual = DBRow($r,0);
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- DBExec ($c, "update contesttable set ".
- "contestduration=".$atual["contestduration"].",".
- "conteststartdate=".$atual["conteststartdate"].",".
- "contestmaxfilesize=".$atual["contestmaxfilesize"].",".
- "contestactive='".$atual["contestactive"]."',".
- //"contestmainsite=".$atual["contestmainsite"].",".
- "contestname='".escape_string($atual["contestname"])."',".
- "contestlastmileanswer=".$atual["contestlastmileanswer"].",".
- "contestlastmilescore=".$atual["contestlastmilescore"].",".
- "contestpenalty=".$atual["contestpenalty"].",".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and updatetime<".$atual["updatetime"]);
-
- // sincronizando answers
- $r = DBExec ($t, "select * from answertable where contestnumber=$contest");
- $rr = DBExec ($c, "select * from answertable where contestnumber=$contest for update");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "answers: external(site=$mainsite, reading=$mainsite)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["answernumber"]==$aqui["answernumber"] && $la["contestnumber"]==$aqui["contestnumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"])
- $situacao[$j]="atualizar";
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $del=0; $upd=0; $ins=0;
- for ($k=0; $k<$nn; $k++) {
- $atual = DBRow($rr, $k);
- if (!$needed[$k]) {
- DBExec($c, "delete from answertable where contestnumber=$contest and answernumber=".$atual["answernumber"]);
- $del++;
- }
- }
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="atualizar") {
- $upd++;
- DBExec ($c, "update answertable set ".
- "runanswer='".$atual["runanswer"]."',".
- "yes='".$atual["yes"]."',".
- "fake='".$atual["fake"]."',".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and answernumber=".$atual["answernumber"].
- " and updatetime<".$atual["updatetime"]);
- } else if ($situacao[$j]=="inserir") {
- $ins++;
- DBExec($c,"insert into answertable (contestnumber, answernumber, runanswer, yes, fake, updatetime) values (" .
- $contest.",".$atual["answernumber"].",'".$atual["runanswer"]."','".$atual["yes"]."',".
- "'".$atual["fake"]."',".$atual["updatetime"].")");
- }
- }
- echo " deletions=$del, updates=$upd, insertions=$ins\n\n";
-
- // sincronizando languages
- $r = DBExec ($t, "select * from langtable where contestnumber=$contest");
- $rr = DBExec ($c, "select * from langtable where contestnumber=$contest for update");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "languages: external(site=$mainsite, reading=$mainsite)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["langnumber"]==$aqui["langnumber"] && $la["contestnumber"]==$aqui["contestnumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"])
- $situacao[$j]="atualizar";
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $del=0; $upd=0; $ins=0;
- for ($k=0; $k<$nn; $k++) {
- $atual = DBRow($rr, $k);
- if (!$needed[$k]) {
- DBExec($c, "delete from langtable where contestnumber=$contest and langnumber=".$atual["langnumber"]);
- $del++;
- }
- }
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="atualizar") {
- $upd++;
- DBExec ($c, "update langtable set ".
- "langname='".escape_string($atual["langname"])."',".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and langnumber=".$atual["langnumber"].
- " and updatetime<".$atual["updatetime"]);
- } else if ($situacao[$j]=="inserir") {
- $ins++;
- DBExec($c,"insert into langtable (contestnumber, langnumber, langname, updatetime) values ($contest,".$atual["langnumber"].
- ",'".escape_string($atual["langname"])."',".$atual["updatetime"].")");
- }
- }
- echo " deletions=$del, updates=$upd, insertions=$ins\n\n";
-
- // sincronizando problems
- $r = DBExec ($t, "select * from problemtable where contestnumber=$contest");
- $rr = DBExec ($c, "select * from problemtable where contestnumber=$contest for update");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "problems: external(site=$mainsite, reading=$mainsite)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["problemnumber"]==$aqui["problemnumber"] && $la["contestnumber"]==$aqui["contestnumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"])
- $situacao[$j]="atualizar";
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $del=0; $upd=0; $ins=0;
- for ($k=0; $k<$nn; $k++) {
- $atual = DBRow($rr, $k);
- if (!$needed[$k]) {
- DBExec($c, "delete from problemtable where contestnumber=$contest and problemnumber=".$atual["problemnumber"]);
- $del++;
- }
- }
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="inserir") {
- $ins++; $upd--;
- DBExec($c,"insert into problemtable (contestnumber, problemnumber, problemname, updatetime) values ($contest,".
- $atual["problemnumber"].",'".escape_string($atual["problemname"])."', 0)");
- }
- if ($situacao[$j]=="atualizar" || $situacao[$j]=="inserir") {
- $upd++;
- $p = DBRow($r2, 0);
- if ($p["probleminputfile"]>0) DB_lo_unlink($c, $p["probleminputfile"]);
- if ($p["problemsolfile"]>0) DB_lo_unlink($c, $p["problemsolfile"]);
- DBExec($t, "begin work");
- if ($atual["probleminputfile"]=="") $inputfile="null";
- else {
- $in = DB_lo_open($t, $atual["probleminputfile"], "r");
- if (!$in) $inputfile="null";
- else {
- $inputfile = DB_lo_create ($c);
- $out = DB_lo_open ($c, $inputfile, "w");
- while (($buf = DB_lo_read ($in, 100000)) != false)
- DB_lo_write ($out, $buf);
- DB_lo_close ($out);
- DB_lo_close ($in);
- }
- }
- if ($atual["problemsolfile"]=="") $solfile="null";
- else {
- $in = DB_lo_open($t, $atual["problemsolfile"], "r");
- if (!$in) $solfile="null";
- else {
- $solfile = DB_lo_create ($c);
- $out = DB_lo_open ($c, $solfile, "w");
- while (($buf = DB_lo_read ($in, 100000)) != false)
- DB_lo_write ($out, $buf);
- DB_lo_close ($out);
- DB_lo_close ($in);
- }
- }
- DBExec ($t, "commit work");
-
- DBExec ($c, "update problemtable set ".
- "problemname='".escape_string($atual["problemname"])."',".
- "problemfullname='".escape_string($atual["problemfullname"])."',".
- "problembasefilename='".escape_string($atual["problembasefilename"])."',".
- "probleminputfilename='".escape_string($atual["probleminputfilename"])."',".
- "problemsolfilename='".escape_string($atual["problemsolfilename"])."',".
- "fake='".$atual["fake"]."',".
- "probleminputfile=".$inputfile.",".
- "problemsolfile=".$solfile.",".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and problemnumber=".$atual["problemnumber"].
- " and updatetime<".$atual["updatetime"]);
- }
- }
- echo " deletions=$del, updates=$upd, insertions=$ins\n\n";
- DBExec($c, "commit work");
- }
-
- }
-
- $r = DBExec ($c, "select * from sitetable where contestnumber=$contest");
- $n = DBnlines($r);
- if ($n == 0) {
- echo "Unable to find sites in the database.\n";
- exit;
- }
- $st = array();
- for ($i=0;$i<$n;$i++) {
- $st[$i] = DBRow($r,$i);
- }
-
- for ($i=0; $i<count($st); $i++) {
- $site=$st[$i]["sitenumber"];
- if ($site==$ct["contestlocalsite"]) continue;
- if (($t = DBExtConnect($c, $contest, $site))==null) continue;
- DBExec($c, "begin work");
-
- // sincronizando site
- $r = DBExec ($t, "select * from sitetable where contestnumber=$contest and sitenumber=$site");
- $rr = DBExec ($c, "select * from sitetable where contestnumber=$contest and sitenumber=$site for update");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- $atual = DBRow($r,0);
- $p = DBRow($rr,0);
-// if ($p["updatetime"]<$atual["updatetime"]) {
- if ($atual["sitestartdate"]=="") $atual["sitestartdate"]="null";
- if ($atual["sitelastmilescore"]=="") $atual["sitelastmilescore"]="null";
- if ($atual["sitelastmileanswer"]=="") $atual["sitelastmileanswer"]="null";
- if ($atual["siteenddate"]=="") $atual["siteenddate"]="null";
- if ($atual["siteendeddate"]=="") $atual["siteendeddate"]="null";
- if ($atual["siteautoend"]!="t") $atual["siteautoend"]="f";
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- DBExec ($c, "update sitetable set ".
- //"siteip='".escape_string($atual["siteip"])."',".
- "sitename='".escape_string($atual["sitename"])."',".
- "siteactive='".escape_string($atual["siteactive"])."',".
- "sitepermitlogins='".escape_string($atual["sitepermitlogins"])."',".
- "sitestartdate=".$atual["sitestartdate"].",".
- "sitelastmilescore=".$atual["sitelastmilescore"].",".
- "sitelastmileanswer=".$atual["sitelastmileanswer"].",".
- "siteenddate=".$atual["siteenddate"].",".
- "siteendeddate=".$atual["siteendeddate"].",".
- "siteautoend='".escape_string($atual["siteautoend"])."',".
- "sitejudging='".escape_string($atual["sitejudging"])."',".
- "siteglobalscore='".escape_string($atual["siteglobalscore"])."',".
- "sitescorelevel=".$atual["sitescorelevel"].",".
- "sitenextuser=".$atual["sitenextuser"].",".
- "sitenextclar=".$atual["sitenextclar"].",".
- "sitenextrun=".$atual["sitenextrun"].",".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and sitenumber=".$atual["sitenumber"]);
-// ." and updatetime<".$atual["updatetime"]);
-// }
-
- // sincronizando users
- $r = DBExec ($t, "select * from usertable where contestnumber=$contest and usersitenumber=$site");
- $rr = DBExec ($c, "select * from usertable where contestnumber=$contest and usersitenumber=$site");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "users: external(site=$site, reading=$site)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["usernumber"]==$aqui["usernumber"] && $la["contestnumber"]==$aqui["contestnumber"] &&
- $la["usersitenumber"]==$aqui["usersitenumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"])
- $situacao[$j]="atualizar";
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $del=0;
- for ($k=0; $k<$nn; $k++) {
- $atual = DBRow($rr, $k);
- if (!$needed[$k]) {
- DBExec($c, "delete from usertable where contestnumber=$contest and usersitenumber=$site and usernumber=".
- $atual["usernumber"]);
- $del++;
- }
- }
- $upd=0; $ins=0;
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
- if ($atual["userlastlogin"]=="") $atual["userlastlogin"]="null";
- if ($atual["userlastlogout"]=="") $atual["userlastlogout"]="null";
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="atualizar") {
- DBExec ($c, "update usertable set ".
- "username='".escape_string($atual["username"])."',".
- "userfullname='".escape_string($atual["userfullname"])."',".
- "userdesc='".escape_string($atual["userdesc"])."',".
- "usertype='".escape_string($atual["usertype"])."',".
- "userenabled='".$atual["userenabled"]."',".
- "usermultilogin='".$atual["usermultilogin"]."',".
- "userpassword='".$atual["userpassword"]."',".
- "userip='".$atual["userip"]."',".
- "userlastlogin=".$atual["userlastlogin"].",".
- "userlastlogout=".$atual["userlastlogout"].",".
- "usersession='".$atual["usersession"]."',".
- "userpermitip='".$atual["userpermitip"]."',".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and usersitenumber=".$atual["usersitenumber"].
- " and usernumber=".$atual["usernumber"]." and updatetime<".$atual["updatetime"]);
- $upd++;
- } else if ($situacao[$j]=="inserir") {
- DBExec ($c, "insert into usertable (username, userfullname, userdesc, usertype, userenabled, usermultilogin, ".
- "userpassword, userip, userlastlogin, userlastlogout, usersession, userpermitip, updatetime, ".
- "contestnumber, usersitenumber, usernumber) values (".
- "'".escape_string($atual["username"])."',".
- "'".escape_string($atual["userfullname"])."',".
- "'".escape_string($atual["userdesc"])."',".
- "'".$atual["usertype"]."',".
- "'".$atual["userenabled"]."',".
- "'".$atual["usermultilogin"]."',".
- "'".$atual["userpassword"]."',".
- "'".$atual["userip"]."',".
- $atual["userlastlogin"].",".
- $atual["userlastlogout"].",".
- "'".$atual["usersession"]."',".
- "'".$atual["userpermitip"]."',".
- $atual["updatetime"].",$contest,".$atual["usersitenumber"].",".$atual["usernumber"].")");
- $ins++;
- }
- }
- echo " deletions=$del, updates=$upd, insertions=$ins\n\n";
-
- // sincronizando clars
- $r = DBExec ($t, "select * from clartable where contestnumber=$contest and clarsitenumber=$site");
- $rr = DBExec ($c, "select * from clartable where contestnumber=$contest and clarsitenumber=$site");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "clars: external(site=$site, reading=$site)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["clarnumber"]==$aqui["clarnumber"] && $la["contestnumber"]==$aqui["contestnumber"] &&
- $la["clarsitenumber"]==$aqui["clarsitenumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"])
- $situacao[$j]="atualizar";
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $del=0;
- for ($k=0; $k<$nn; $k++) {
- $atual = DBRow($rr, $k);
- if (!$needed[$k]) {
- DBExec($c, "delete from clartable where contestnumber=$contest and clarsitenumber=$site and clarnumber=".
- $atual["clarnumber"]);
- $del++;
- }
- }
- $upd=0; $ins=0;
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
- if ($atual["claranswer"]=="") $atual["claranswer"]="null";
- else $atual["claranswer"]="'".escape_string($atual["claranswer"])."'";
- if ($atual["clarjudge"]=="") $atual["clarjudge"]="null";
- if ($atual["clarjudgesite"]=="") $atual["clarjudgesite"]="null";
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="atualizar") {
- DBExec ($c, "update clartable set ".
- "usernumber=".$atual["usernumber"].",".
- "clardate=".$atual["clardate"].",".
- "clardatediff=".$atual["clardatediff"].",".
- "clardatediffans=".$atual["clardatediffans"].",".
- "clarproblem=".$atual["clarproblem"].",".
- "clardata='".escape_string($atual["clardata"])."',".
- "claranswer=".$atual["claranswer"].",".
- "clarstatus='".escape_string($atual["clarstatus"])."',".
- "clarjudge=".$atual["clarjudge"].",".
- "clarjudgesite=".$atual["clarjudgesite"].",".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and clarsitenumber=".$atual["clarsitenumber"].
- " and clarnumber=".$atual["clarnumber"]." and updatetime<".$atual["updatetime"]);
- $upd++;
- } else if($situacao[$j]=="inserir") {
- DBExec ($c, "insert into clartable (contestnumber, clarsitenumber, clarnumber, usernumber, clardate,".
- "clardatediff, clardatediffans, clarproblem, clardata, claranswer, clarstatus, clarjudge, clarjudgesite, updatetime) ".
- "values (".$contest.",".$atual["clarsitenumber"].",".$atual["clarnumber"].",".$atual["usernumber"].",".
- $atual["clardate"].",".
- $atual["clardatediff"].",".
- $atual["clardatediffans"].",".
- $atual["clarproblem"].",".
- "'".escape_string($atual["clardata"])."',".
- $atual["claranswer"].",".
- "'".escape_string($atual["clarstatus"])."',".
- $atual["clarjudge"].",".
- $atual["clarjudgesite"].",".
- $atual["updatetime"].")");
- $ins++;
- }
- }
- echo " deletions=$del, updates=$upd, insertions=$ins\n\n";
-
- // sincronizando clars
- $r = DBExec ($t, "select * from clartable where contestnumber=$contest and clarsitenumber=$localsite");
- $rr = DBExec ($c, "select * from clartable where contestnumber=$contest and clarsitenumber=$localsite");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "clars: external(site=$site, reading=$localsite)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["clarnumber"]==$aqui["clarnumber"] && $la["contestnumber"]==$aqui["contestnumber"] &&
- $la["clarsitenumber"]==$aqui["clarsitenumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"])
- $situacao[$j]="atualizar";
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $upd=0; $ins=0;
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
- if ($atual["claranswer"]=="") $atual["claranswer"]="null";
- else $atual["claranswer"]="'".escape_string($atual["claranswer"])."'";
- if ($atual["clarjudge"]=="") $atual["clarjudge"]="null";
- if ($atual["clarjudgesite"]=="") $atual["clarjudgesite"]="null";
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="atualizar") {
- DBExec ($c, "update clartable set ".
- "usernumber=".$atual["usernumber"].",".
- "clardate=".$atual["clardate"].",".
- "clardatediff=".$atual["clardatediff"].",".
- "clardatediffans=".$atual["clardatediffans"].",".
- "clarproblem=".$atual["clarproblem"].",".
- "clardata='".escape_string($atual["clardata"])."',".
- "claranswer=".$atual["claranswer"].",".
- "clarstatus='".escape_string($atual["clarstatus"])."',".
- "clarjudge=".$atual["clarjudge"].",".
- "clarjudgesite=".$atual["clarjudgesite"].",".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and clarsitenumber=".$atual["clarsitenumber"].
- " and clarnumber=".$atual["clarnumber"]." and updatetime<".$atual["updatetime"]);
- $upd++;
- } else if($situacao[$j]=="inserir") {
- $ins++;
- echo "Clar inserts shouldn't exist (clarnumber=".$atual["clarnumber"].")...\n";
- }
- }
- echo " updates=$upd, insertions=$ins\n\n";
-
- // sincronizando runs
- $r = DBExec ($t, "select * from runtable where contestnumber=$contest and runsitenumber=$site");
- $rr = DBExec ($c, "select * from runtable where contestnumber=$contest and runsitenumber=$site");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "runs: external(site=$site, reading=$site)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["runnumber"]==$aqui["runnumber"] && $la["contestnumber"]==$aqui["contestnumber"] &&
- $la["runsitenumber"]==$aqui["runsitenumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"]) {
- $situacao[$j]="atualizar";
- }
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $del=0;
- for ($k=0; $k<$nn; $k++) {
- $atual = DBRow($rr, $k);
- if (!$needed[$k]) {
- $del++;
- DBExec($c, "delete from runtable where contestnumber=$contest and runsitenumber=$site and runnumber=".
- $atual["runnumber"]);
- }
- }
- $upd=0; $ins=0;
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
-/*
- $r2 = DBExec ($c,"select * from runtable where contestnumber=$contest and runsitenumber=".$atual["runsitenumber"].
- " and runnumber=".$atual["runnumber"]." for update");
- if (DBnLines($r2)>0) {
- $p = DBRow($r2, 0);
- DB_lo_unlink($c, $p["rundata"]);
- }
-*/
- if ($atual["runjudge"]=="") $atual["runjudge"]="null";
- if ($atual["runjudgesite"]=="") $atual["runjudgesite"]="null";
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="atualizar") {
- $upd++;
- DBExec ($c, "update runtable set ".
- "usernumber=".$atual["usernumber"].",".
- "rundate=".$atual["rundate"].",".
- "rundatediff=".$atual["rundatediff"].",".
- "rundatediffans=".$atual["rundatediffans"].",".
- "runproblem=".$atual["runproblem"].",".
- "runlangnumber=".$atual["runlangnumber"].",".
- "runanswer=".$atual["runanswer"].",".
- "runstatus='".escape_string($atual["runstatus"])."',".
- "runjudge=".$atual["runjudge"].",".
- "runjudgesite=".$atual["runjudgesite"].",".
- "runfilename='".escape_string($atual["runfilename"])."',".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and runsitenumber=".$atual["runsitenumber"].
- " and runnumber=".$atual["runnumber"]." and updatetime<".$atual["updatetime"]);
- } else if ($situacao[$j]=="inserir") {
- $ins++;
- DBExec($t, "begin work");
- $in = DB_lo_open($t, $atual["rundata"], "r");
- if (!$in) $o="0";
- else {
- $o = DB_lo_create ($c);
- $out = DB_lo_open ($c, $o, "w");
- while (($buf = DB_lo_read ($in, 1000)) != false)
- DB_lo_write ($out, $buf);
- DB_lo_close ($out);
- DB_lo_close ($in);
-
- $in = DB_lo_open($t, $atual["rundata"], "r");
- if (!$in) {
- $o="0";
- LOGLevel("Run not saved as file (run=".$atual["runnumber"].",site=".$atual["runsitenumber"].
- ",contest=$contest", 1);
- } else {
- $sitess=$atual["runsitenumber"];
- $nss=$atual["runnumber"];
- $user=$atual["usernumber"];
- $problem=$atual["runproblem"];
- $filename=escape_string($atual["runfilename"]);
- $ttimet=$atual["rundate"];
- $fp = fopen("/tmp/boca/contest${contest}.site${sitess}.run${nss}.user${user}.".
- "problem${problem}.time${ttimet}.${filename}", "w");
- if ($fp) {
- while (($buf = DB_lo_read ($in, 1000)) != false)
- fwrite ($fp, $buf);
- fclose ($fp);
- $fp = fopen("/tmp/check/contest${contest}.site${sitess}.run${nss}.user${user}.".
- "problem${problem}.time${ttimet}.${filename}.check", "w");
- if ($fp) {
- fwrite($fp, "1");
- fclose ($fp);
- }
- else
- LOGLevel("Run not saved as check file (run=".$atual["runnumber"].",site=".$atual["runsitenumber"].
- ",contest=$contest", 1);
- } else
- LOGLevel("Run not saved as file (run=".$atual["runnumber"].",site=".$atual["runsitenumber"].
- ",contest=$contest", 1);
- DB_lo_close ($out);
- }
-
- }
- DBExec ($c, "insert into runtable (contestnumber, runsitenumber, runnumber, usernumber, rundate,".
- "rundatediff, rundatediffans, runproblem, runfilename, rundata, runanswer, runstatus, runjudge,".
- "runjudgesite, runlangnumber, updatetime) ".
- "values (".$contest.",".$atual["runsitenumber"].",".$atual["runnumber"].",".$atual["usernumber"].",".
- $atual["rundate"].",".
- $atual["rundatediff"].",".
- $atual["rundatediffans"].",".
- $atual["runproblem"].",".
- "'".escape_string($atual["runfilename"])."',$o,".
- $atual["runanswer"].",".
- "'".escape_string($atual["runstatus"])."',".
- $atual["runjudge"].",".
- $atual["runjudgesite"].",".
- $atual["runlangnumber"].",".
- $atual["updatetime"].")");
- DBExec ($t, "commit work");
- }
- }
- echo " deletions=$del, updates=$upd, insertions=$ins\n\n";
-
- // sincronizando runs
- $r = DBExec ($t, "select * from runtable where contestnumber=$contest and runsitenumber=$localsite");
- $rr = DBExec ($c, "select * from runtable where contestnumber=$contest and runsitenumber=$localsite");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "runs: external(site=$site, reading=$localsite)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["runnumber"]==$aqui["runnumber"] && $la["contestnumber"]==$aqui["contestnumber"] &&
- $la["runsitenumber"]==$aqui["runsitenumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"]) {
- $situacao[$j]="atualizar";
-
-
- if ($la["runanswer"] != "") {
- $rrr = DBExec($c, "select * from answertable where answernumber=".$la["runanswer"].
- " and contestnumber=".$la["contestnumber"]);
- $ans = (DBnLines($rrr)>0)? DBRow($rrr, 0) : null;
- if ($ans == null) {
- echo "Problem with the answer table. Unable to send balloon because the answer was " .
- "not found (run=".$la["runnumber"].", site=".$la["runsite"].", contest=" .
- $la["contestnumber"].", answer=".$la["runanswer"].").";
- $yesla = 'x';
- } else $yesla = $ans["yes"];
- } else $yesla='f';
- if ($aqui["runanswer"] != "") {
- $rrr = DBExec($c, "select * from answertable where answernumber=".$aqui["runanswer"].
- " and contestnumber=".$aqui["contestnumber"]);
- $ans = (DBnLines($rrr)>0)? DBRow($rrr, 0) : null;
- if ($ans == null) {
- echo "Problem with the answer table. Unable to send balloon because the answer was " .
- "not found (run=".$aqui["runnumber"].", site=".$aqui["runsite"].", contest=" .
- $aqui["contestnumber"].", answer=".$aqui["runanswer"].").";
- $yesaqui = 'x';
- } else $yesaqui = $ans["yes"];
- } else $yesaqui='f';
-
- if ($yesla == 't' && $yesaqui == 'f') {
- $rrr = DBExec ($c, "select * from sitetable where contestnumber=".$aqui["contestnumber"].
- " and sitenumber=$localsite");
- if (DBnLines($rrr)<=0)
- echo "Site info not found (contest=${aqui["contestnumber"]}, site=$localsite).";
- else {
- $b = DBRow($rrr,0);
- $ti = $b["sitestartdate"];
- $tempo = time();
- $ta = $tempo - $ti;
- $tf = $b["sitelastmileanswer"];
-// if ($ta < $tf) {
- $rrr = DBExec ($c, "select * from usertable where contestnumber=".
- $aqui["contestnumber"]." and usersitenumber=$localsite and usernumber=".
- $aqui["usernumber"]);
- if (DBnLines($rrr)<=0)
- echo "User info not found (contest=${aqui["contestnumber"]}, ".
- "site=$localsite, user=${aqui["runusernumber"]}).";
- else {
- $u = DBRow ($rrr,0);
- $rrr = DBExec ($c, "select * from problemtable where contestnumber=".
- $aqui["contestnumber"]." and problemnumber=".
- $aqui["runproblem"]);
- if (DBnLines($rrr)<=0)
- echo "Problem info not found (contest=${aqui["contestnumber"]}, ".
- "problem=${aqui["runproblem"]}).";
- else {
- $p = DBRow ($rrr,0);
- mail("balloon@mainserver", "YES: team=" . $u["username"] .
- ", problem=" . $p["problemname"],
- "User ".$u["username"] ." should receive a balloon for ".
- $p["problemfullname"]."\n");
- }
- }
-// }
- }
- } else if ($yesla == 'f' && $yesaqui == 't') {
- $rrr = DBExec ($c, "select * from usertable where contestnumber=".
- $aqui["contestnumber"]." and usersitenumber=$localsite and usernumber=".
- $aqui["usernumber"]);
- if (DBnLines($rrr)<=0)
- echo "User info not found (contest=${aqui["contestnumber"]}, ".
- "site=$localsite, user=${aqui["runusernumber"]}).";
- else {
- $u = DBRow ($rrr,0);
- $rrr = DBExec ($c, "select * from problemtable where contestnumber=".
- $aqui["contestnumber"]." and problemnumber=".
- $aqui["runproblem"]);
- if (DBnLines($rrr)<=0)
- echo "Problem info not found (contest=${aqui["contestnumber"]}, ".
- "problem=${aqui["runproblem"]}).";
- else {
- $p = DBRow ($rrr,0);
- mail("balloon@mainserver", "NO: team=" . $u["username"] .
- ", problem=" . $p["problemname"],
- "Remove the balloon from user ". $u["username"] .
- " for ".$p["problemfullname"]."\n");
- }
- }
- }
-
-
- }
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $upd=0; $ins=0;
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
-
- if ($atual["runjudge"]=="") $atual["runjudge"]="null";
- if ($atual["runjudgesite"]=="") $atual["runjudgesite"]="null";
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="atualizar") {
- $upd++;
- DBExec ($c, "update runtable set ".
- "usernumber=".$atual["usernumber"].",".
- "rundate=".$atual["rundate"].",".
- "rundatediff=".$atual["rundatediff"].",".
- "rundatediffans=".$atual["rundatediffans"].",".
- "runproblem=".$atual["runproblem"].",".
- "runlangnumber=".$atual["runlangnumber"].",".
- "runanswer=".$atual["runanswer"].",".
- "runstatus='".escape_string($atual["runstatus"])."',".
- "runjudge=".$atual["runjudge"].",".
- "runjudgesite=".$atual["runjudgesite"].",".
- "runfilename='".escape_string($atual["runfilename"])."',".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and runsitenumber=".$atual["runsitenumber"].
- " and runnumber=".$atual["runnumber"]." and updatetime<".$atual["updatetime"]);
- } else if ($situacao[$j]=="inserir") {
- $ins++;
- echo "Run Inserts shouldn't exist (run=".$atual["runnumber"].")...";
- }
- }
- echo " updates=$upd, insertions=$ins\n\n";
-
- DBExec($c, "commit work");
- DBClose($t);
- }
- DBClose($c);
-}
-
-//fecha a conexao com o banco (isso nao eh realmente necessario, ja que o php/apache cuidam do servico)
-function DBClose($c) {
- if ($c) pg_close($c);
-}
-//executar instrucao no banco de dados, parando em caso de erro quando $stop=1
-function DBExec($conn,$sql) {
-// echo $sql . "\n";
- $result = pg_exec ($conn, $sql);
- if (!$result) {
- echo "Unable to exec SQL in the database. SQL=(" . $sql . ")," .
- " Error=(" . pg_errormessage($conn) . ")\n";
- exit;
- }
- return $result;
-}
-//devolve o numero de linhas da consulta
-function DBnlines ($result) {
- return pg_numrows ($result);
-}
-//pega uma linha da consulta no formato de array
-function DBRow ($r, $i) {
- return pg_fetch_array ($r, $i);
-}
-function escape_string($s) {
- return str_replace("'", "''", $s);
-}
-if (getIP()!="UNKNOWN") exit;
-
-$x = DBConnect();
-if ($x==null) exit;
-$y = DBExec($x, "select * from contesttable where contestactive='t'");
-if (DBnLines($y)==0) {
- echo "Unable to find the active contest in the database.\n";
- exit;
-}
-$ct = DBRow($y,0);
-DBClose($x);
-GetExternalData($ct["contestnumber"]);
-
-?>
diff --git a/old/getextdata.php b/old/getextdata.php
deleted file mode 100644
index 7c9955d..0000000
--- a/old/getextdata.php
+++ /dev/null
@@ -1,931 +0,0 @@
-<?php
-//////////////////////////////////////////////////////////////////////////////////////////
-//BOCA Online Contest Administrator. Copyright (c) 2003-2004 Cassio Polpo de Campos.
-//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-//
-//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-///////////////////////////////////////////////////////////////////////////////////////////
-
-//retorna ip do cliente
-function getIP() {
- if (getenv("HTTP_CLIENT_IP"))
- $ip = getenv("HTTP_CLIENT_IP");
- else
- if(getenv("HTTP_X_FORWARDED_FOR"))
- $ip = getenv("HTTP_X_FORWARDED_FOR");
- else
- if(getenv("REMOTE_ADDR"))
- $ip = getenv("REMOTE_ADDR");
- else
- $ip = "UNKNOWN";
- $ip = strtok ($ip, ",");
- return $ip;
-}
-//para compatibilidade com versoes velhas e novas do php
-function DB_lo_open($conn, $file, $mode) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_loopen ($conn, $file, $mode);
- else
- return pg_lo_open ($conn, $file, $mode);
-}
-function DB_lo_read_all($id) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_loreadall ($id);
- else
- return pg_lo_read_all ($id);
-}
-function DB_lo_import($conn, $file) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_loimport ($file, $conn);
- else
- return pg_lo_import ($conn, $file);
-}
-function DB_lo_close($id) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_loclose ($id);
- else
- return pg_lo_close ($id);
-}
-function DB_lo_unlink($c,$id) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_lounlink ($id,$c);
- else
- return pg_lo_unlink ($c,$id);
-}
-function DB_lo_create($conn) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_locreate ($conn);
- else
- return pg_lo_create ($conn);
-}
-function DB_lo_write($fp, $data) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_lowrite ($fp, $data);
- else
- return pg_lo_write ($fp, $data);
-}
-function DB_lo_read($fp, $len) {
- if (strcmp(phpversion(),'4.2.0')<0)
- return pg_loread ($fp, $len);
- else
- return pg_lo_read ($fp, $len);
-}
-
-//abrir conexao com o banco de dados
-function DBConnect() {
- $dbconn="host=localhost dbname=bocadb user=bocauser password=boca";
- $conn = pg_connect ($dbconn);
- if (!$conn) {
- echo "Unable to connect to local database\n";
- return null;
- }
- return $conn;
-}
-function DBExtConnect($c, $contest, $site) {
- $r = DBExec($c, "select * from sitetable where sitenumber=$site and contestnumber=$contest");
- if (DBnLines($r)==0) {
- echo "Unable to find the site in the database (site=$site, contest=$contest).\n";
- exit;
- }
- $st = DBRow($r,0);
-
- if(($f = file("sqlpass.php"))===false) $pass="boca";
- else $pass=trim($f[1]);
-
- // gambiarra para testar se a conexao esta de pe
- $fp = fsockopen ($st["siteip"], 5432, $errno, $errstr, 10);
- if (!$fp) {
- echo "$errstr ($errno). Aborting this connection (ip=".$st["siteip"].").\n";
- return null;
- }
- fclose ($fp);
- // se a conexao cair entre o teste acima e o connect abaixo, esse script pode demorar ate
- // dar o timeout (no meu teste foram cerca de 3min para cada timeout)
-
- $conn = pg_connect ("host=" . $st["siteip"] . " dbname=bocadb user=bocauser password=$pass");
- if (!$conn) {
- echo "Unable to connect to site $site (ip=".$st["siteip"].")\n";
- return null;
- }
- echo "Connected to " .$st["siteip"].". Let's exchange data...\n";
- return $conn;
-}
-
-function GetExternalData ($contest) {
- $c = DBConnect();
- if ($c==null) return;
- $r = DBExec($c, "select * from contesttable where contestnumber=$contest");
- if (DBnLines($r)==0) {
- echo "Unable to find the contest $contest in the database.\n";
- exit;
- }
- $ct = DBRow($r,0);
- $localsite = $ct["contestlocalsite"];
- $mainsite = $ct["contestmainsite"];
-
- if ($mainsite!=$localsite) {
- $r = DBExec($c, "select * from sitetable where sitenumber=".$ct["contestmainsite"]." and contestnumber=$contest");
- if (DBnLines($r)==0) {
- echo "Unable to find the main site in the database (site=$site, contest=$contest).\n";
- exit;
- }
- $st = DBRow($r,0);
- if (($t = DBExtConnect($c, $contest, $st["sitenumber"]))!=null) {
- DBExec($c, "begin work");
-
- // sincronizando contest
- $r = DBExec ($t, "select * from contesttable where contestnumber=$contest");
- $n = DBnLines ($r);
- $atual = DBRow($r,0);
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- DBExec ($c, "update contesttable set ".
- "contestduration=".$atual["contestduration"].",".
- "conteststartdate=".$atual["conteststartdate"].",".
- "contestmaxfilesize=".$atual["contestmaxfilesize"].",".
- "contestactive='".$atual["contestactive"]."',".
- //"contestmainsite=".$atual["contestmainsite"].",".
- "contestname='".escape_string($atual["contestname"])."',".
- "contestlastmileanswer=".$atual["contestlastmileanswer"].",".
- "contestlastmilescore=".$atual["contestlastmilescore"].",".
- "contestpenalty=".$atual["contestpenalty"].",".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and updatetime<".$atual["updatetime"]);
-
- // sincronizando answers
- $r = DBExec ($t, "select * from answertable where contestnumber=$contest");
- $rr = DBExec ($c, "select * from answertable where contestnumber=$contest for update");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "answers: external(site=$mainsite, reading=$mainsite)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["answernumber"]==$aqui["answernumber"] && $la["contestnumber"]==$aqui["contestnumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"])
- $situacao[$j]="atualizar";
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $del=0; $upd=0; $ins=0;
- for ($k=0; $k<$nn; $k++) {
- $atual = DBRow($rr, $k);
- if (!$needed[$k]) {
- DBExec($c, "delete from answertable where contestnumber=$contest and answernumber=".$atual["answernumber"]);
- $del++;
- }
- }
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="atualizar") {
- $upd++;
- DBExec ($c, "update answertable set ".
- "runanswer='".$atual["runanswer"]."',".
- "yes='".$atual["yes"]."',".
- "fake='".$atual["fake"]."',".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and answernumber=".$atual["answernumber"].
- " and updatetime<".$atual["updatetime"]);
- } else if ($situacao[$j]=="inserir") {
- $ins++;
- DBExec($c,"insert into answertable (contestnumber, answernumber, runanswer, yes, fake, updatetime) values (" .
- $contest.",".$atual["answernumber"].",'".$atual["runanswer"]."','".$atual["yes"]."',".
- "'".$atual["fake"]."',".$atual["updatetime"].")");
- }
- }
- echo " deletions=$del, updates=$upd, insertions=$ins\n\n";
-
- // sincronizando languages
- $r = DBExec ($t, "select * from langtable where contestnumber=$contest");
- $rr = DBExec ($c, "select * from langtable where contestnumber=$contest for update");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "languages: external(site=$mainsite, reading=$mainsite)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["langnumber"]==$aqui["langnumber"] && $la["contestnumber"]==$aqui["contestnumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"])
- $situacao[$j]="atualizar";
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $del=0; $upd=0; $ins=0;
- for ($k=0; $k<$nn; $k++) {
- $atual = DBRow($rr, $k);
- if (!$needed[$k]) {
- DBExec($c, "delete from langtable where contestnumber=$contest and langnumber=".$atual["langnumber"]);
- $del++;
- }
- }
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="atualizar") {
- $upd++;
- DBExec ($c, "update langtable set ".
- "langname='".escape_string($atual["langname"])."',".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and langnumber=".$atual["langnumber"].
- " and updatetime<".$atual["updatetime"]);
- } else if ($situacao[$j]=="inserir") {
- $ins++;
- DBExec($c,"insert into langtable (contestnumber, langnumber, langname, updatetime) values ($contest,".$atual["langnumber"].
- ",'".escape_string($atual["langname"])."',".$atual["updatetime"].")");
- }
- }
- echo " deletions=$del, updates=$upd, insertions=$ins\n\n";
-
- // sincronizando problems
- $r = DBExec ($t, "select * from problemtable where contestnumber=$contest");
- $rr = DBExec ($c, "select * from problemtable where contestnumber=$contest for update");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "problems: external(site=$mainsite, reading=$mainsite)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["problemnumber"]==$aqui["problemnumber"] && $la["contestnumber"]==$aqui["contestnumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"])
- $situacao[$j]="atualizar";
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $del=0; $upd=0; $ins=0;
- for ($k=0; $k<$nn; $k++) {
- $atual = DBRow($rr, $k);
- if (!$needed[$k]) {
- DBExec($c, "delete from problemtable where contestnumber=$contest and problemnumber=".$atual["problemnumber"]);
- $del++;
- }
- }
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="inserir") {
- $ins++; $upd--;
- DBExec($c,"insert into problemtable (contestnumber, problemnumber, problemname, updatetime) values ($contest,".
- $atual["problemnumber"].",'".escape_string($atual["problemname"])."', 0)");
- }
- if ($situacao[$j]=="atualizar" || $situacao[$j]=="inserir") {
- $upd++;
- $p = DBRow($r2, 0);
- if ($p["probleminputfile"]>0) DB_lo_unlink($c, $p["probleminputfile"]);
- if ($p["problemsolfile"]>0) DB_lo_unlink($c, $p["problemsolfile"]);
- DBExec($t, "begin work");
- if ($atual["probleminputfile"]=="") $inputfile="null";
- else {
- $in = DB_lo_open($t, $atual["probleminputfile"], "r");
- if (!$in) $inputfile="null";
- else {
- $inputfile = DB_lo_create ($c);
- $out = DB_lo_open ($c, $inputfile, "w");
- while (($buf = DB_lo_read ($in, 100000)) != false)
- DB_lo_write ($out, $buf);
- DB_lo_close ($out);
- DB_lo_close ($in);
- }
- }
- if ($atual["problemsolfile"]=="") $solfile="null";
- else {
- $in = DB_lo_open($t, $atual["problemsolfile"], "r");
- if (!$in) $solfile="null";
- else {
- $solfile = DB_lo_create ($c);
- $out = DB_lo_open ($c, $solfile, "w");
- while (($buf = DB_lo_read ($in, 100000)) != false)
- DB_lo_write ($out, $buf);
- DB_lo_close ($out);
- DB_lo_close ($in);
- }
- }
- DBExec ($t, "commit work");
-
- DBExec ($c, "update problemtable set ".
- "problemname='".escape_string($atual["problemname"])."',".
- "problemfullname='".escape_string($atual["problemfullname"])."',".
- "problembasefilename='".escape_string($atual["problembasefilename"])."',".
- "probleminputfilename='".escape_string($atual["probleminputfilename"])."',".
- "problemsolfilename='".escape_string($atual["problemsolfilename"])."',".
- "fake='".$atual["fake"]."',".
- "probleminputfile=".$inputfile.",".
- "problemsolfile=".$solfile.",".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and problemnumber=".$atual["problemnumber"].
- " and updatetime<".$atual["updatetime"]);
- }
- }
- echo " deletions=$del, updates=$upd, insertions=$ins\n\n";
- DBExec($c, "commit work");
- }
-
- }
-
- $r = DBExec ($c, "select * from sitetable where contestnumber=$contest");
- $n = DBnlines($r);
- if ($n == 0) {
- echo "Unable to find sites in the database.\n";
- exit;
- }
- $st = array();
- for ($i=0;$i<$n;$i++) {
- $st[$i] = DBRow($r,$i);
- }
-
- for ($i=0; $i<count($st); $i++) {
- $site=$st[$i]["sitenumber"];
- if ($site==$ct["contestlocalsite"]) continue;
- if (($t = DBExtConnect($c, $contest, $site))==null) continue;
- DBExec($c, "begin work");
-
- // sincronizando site
- $r = DBExec ($t, "select * from sitetable where contestnumber=$contest and sitenumber=$site");
- $rr = DBExec ($c, "select * from sitetable where contestnumber=$contest and sitenumber=$site for update");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- $atual = DBRow($r,0);
- $p = DBRow($rr,0);
-// if ($p["updatetime"]<$atual["updatetime"]) {
- if ($atual["sitestartdate"]=="") $atual["sitestartdate"]="null";
- if ($atual["sitelastmilescore"]=="") $atual["sitelastmilescore"]="null";
- if ($atual["sitelastmileanswer"]=="") $atual["sitelastmileanswer"]="null";
- if ($atual["siteenddate"]=="") $atual["siteenddate"]="null";
- if ($atual["siteendeddate"]=="") $atual["siteendeddate"]="null";
- if ($atual["siteautoend"]!="t") $atual["siteautoend"]="f";
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- DBExec ($c, "update sitetable set ".
- //"siteip='".escape_string($atual["siteip"])."',".
- "sitename='".escape_string($atual["sitename"])."',".
- "siteactive='".escape_string($atual["siteactive"])."',".
- "sitepermitlogins='".escape_string($atual["sitepermitlogins"])."',".
- "sitestartdate=".$atual["sitestartdate"].",".
- "sitelastmilescore=".$atual["sitelastmilescore"].",".
- "sitelastmileanswer=".$atual["sitelastmileanswer"].",".
- "siteenddate=".$atual["siteenddate"].",".
- "siteendeddate=".$atual["siteendeddate"].",".
- "siteautoend='".escape_string($atual["siteautoend"])."',".
- "sitejudging='".escape_string($atual["sitejudging"])."',".
- "siteglobalscore='".escape_string($atual["siteglobalscore"])."',".
- "sitescorelevel=".$atual["sitescorelevel"].",".
- "sitenextuser=".$atual["sitenextuser"].",".
- "sitenextclar=".$atual["sitenextclar"].",".
- "sitenextrun=".$atual["sitenextrun"].",".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and sitenumber=".$atual["sitenumber"]);
-// ." and updatetime<".$atual["updatetime"]);
-// }
-
- // sincronizando users
- $r = DBExec ($t, "select * from usertable where contestnumber=$contest and usersitenumber=$site");
- $rr = DBExec ($c, "select * from usertable where contestnumber=$contest and usersitenumber=$site");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "users: external(site=$site, reading=$site)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["usernumber"]==$aqui["usernumber"] && $la["contestnumber"]==$aqui["contestnumber"] &&
- $la["usersitenumber"]==$aqui["usersitenumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"])
- $situacao[$j]="atualizar";
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $del=0;
- for ($k=0; $k<$nn; $k++) {
- $atual = DBRow($rr, $k);
- if (!$needed[$k]) {
- DBExec($c, "delete from usertable where contestnumber=$contest and usersitenumber=$site and usernumber=".
- $atual["usernumber"]);
- $del++;
- }
- }
- $upd=0; $ins=0;
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
- if ($atual["userlastlogin"]=="") $atual["userlastlogin"]="null";
- if ($atual["userlastlogout"]=="") $atual["userlastlogout"]="null";
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="atualizar") {
- DBExec ($c, "update usertable set ".
- "username='".escape_string($atual["username"])."',".
- "userfullname='".escape_string($atual["userfullname"])."',".
- "userdesc='".escape_string($atual["userdesc"])."',".
- "usertype='".escape_string($atual["usertype"])."',".
- "userenabled='".$atual["userenabled"]."',".
- "usermultilogin='".$atual["usermultilogin"]."',".
- "userpassword='".$atual["userpassword"]."',".
- "userip='".$atual["userip"]."',".
- "userlastlogin=".$atual["userlastlogin"].",".
- "userlastlogout=".$atual["userlastlogout"].",".
- "usersession='".$atual["usersession"]."',".
- "userpermitip='".$atual["userpermitip"]."',".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and usersitenumber=".$atual["usersitenumber"].
- " and usernumber=".$atual["usernumber"]." and updatetime<".$atual["updatetime"]);
- $upd++;
- } else if ($situacao[$j]=="inserir") {
- DBExec ($c, "insert into usertable (username, userfullname, userdesc, usertype, userenabled, usermultilogin, ".
- "userpassword, userip, userlastlogin, userlastlogout, usersession, userpermitip, updatetime, ".
- "contestnumber, usersitenumber, usernumber) values (".
- "'".escape_string($atual["username"])."',".
- "'".escape_string($atual["userfullname"])."',".
- "'".escape_string($atual["userdesc"])."',".
- "'".$atual["usertype"]."',".
- "'".$atual["userenabled"]."',".
- "'".$atual["usermultilogin"]."',".
- "'".$atual["userpassword"]."',".
- "'".$atual["userip"]."',".
- $atual["userlastlogin"].",".
- $atual["userlastlogout"].",".
- "'".$atual["usersession"]."',".
- "'".$atual["userpermitip"]."',".
- $atual["updatetime"].",$contest,".$atual["usersitenumber"].",".$atual["usernumber"].")");
- $ins++;
- }
- }
- echo " deletions=$del, updates=$upd, insertions=$ins\n\n";
-
- // sincronizando clars
- $r = DBExec ($t, "select * from clartable where contestnumber=$contest and clarsitenumber=$site");
- $rr = DBExec ($c, "select * from clartable where contestnumber=$contest and clarsitenumber=$site");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "clars: external(site=$site, reading=$site)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["clarnumber"]==$aqui["clarnumber"] && $la["contestnumber"]==$aqui["contestnumber"] &&
- $la["clarsitenumber"]==$aqui["clarsitenumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"])
- $situacao[$j]="atualizar";
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $del=0;
- for ($k=0; $k<$nn; $k++) {
- $atual = DBRow($rr, $k);
- if (!$needed[$k]) {
- DBExec($c, "delete from clartable where contestnumber=$contest and clarsitenumber=$site and clarnumber=".
- $atual["clarnumber"]);
- $del++;
- }
- }
- $upd=0; $ins=0;
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
- if ($atual["claranswer"]=="") $atual["claranswer"]="null";
- else $atual["claranswer"]="'".escape_string($atual["claranswer"])."'";
- if ($atual["clarjudge"]=="") $atual["clarjudge"]="null";
- if ($atual["clarjudgesite"]=="") $atual["clarjudgesite"]="null";
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="atualizar") {
- DBExec ($c, "update clartable set ".
- "usernumber=".$atual["usernumber"].",".
- "clardate=".$atual["clardate"].",".
- "clardatediff=".$atual["clardatediff"].",".
- "clardatediffans=".$atual["clardatediffans"].",".
- "clarproblem=".$atual["clarproblem"].",".
- "clardata='".escape_string($atual["clardata"])."',".
- "claranswer=".$atual["claranswer"].",".
- "clarstatus='".escape_string($atual["clarstatus"])."',".
- "clarjudge=".$atual["clarjudge"].",".
- "clarjudgesite=".$atual["clarjudgesite"].",".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and clarsitenumber=".$atual["clarsitenumber"].
- " and clarnumber=".$atual["clarnumber"]." and updatetime<".$atual["updatetime"]);
- $upd++;
- } else if($situacao[$j]=="inserir") {
- DBExec ($c, "insert into clartable (contestnumber, clarsitenumber, clarnumber, usernumber, clardate,".
- "clardatediff, clardatediffans, clarproblem, clardata, claranswer, clarstatus, clarjudge, clarjudgesite, updatetime) ".
- "values (".$contest.",".$atual["clarsitenumber"].",".$atual["clarnumber"].",".$atual["usernumber"].",".
- $atual["clardate"].",".
- $atual["clardatediff"].",".
- $atual["clardatediffans"].",".
- $atual["clarproblem"].",".
- "'".escape_string($atual["clardata"])."',".
- $atual["claranswer"].",".
- "'".escape_string($atual["clarstatus"])."',".
- $atual["clarjudge"].",".
- $atual["clarjudgesite"].",".
- $atual["updatetime"].")");
- $ins++;
- }
- }
- echo " deletions=$del, updates=$upd, insertions=$ins\n\n";
-
- // sincronizando clars
- $r = DBExec ($t, "select * from clartable where contestnumber=$contest and clarsitenumber=$localsite");
- $rr = DBExec ($c, "select * from clartable where contestnumber=$contest and clarsitenumber=$localsite");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "clars: external(site=$site, reading=$localsite)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["clarnumber"]==$aqui["clarnumber"] && $la["contestnumber"]==$aqui["contestnumber"] &&
- $la["clarsitenumber"]==$aqui["clarsitenumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"])
- $situacao[$j]="atualizar";
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $upd=0; $ins=0;
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
- if ($atual["claranswer"]=="") $atual["claranswer"]="null";
- else $atual["claranswer"]="'".escape_string($atual["claranswer"])."'";
- if ($atual["clarjudge"]=="") $atual["clarjudge"]="null";
- if ($atual["clarjudgesite"]=="") $atual["clarjudgesite"]="null";
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="atualizar") {
- DBExec ($c, "update clartable set ".
- "usernumber=".$atual["usernumber"].",".
- "clardate=".$atual["clardate"].",".
- "clardatediff=".$atual["clardatediff"].",".
- "clardatediffans=".$atual["clardatediffans"].",".
- "clarproblem=".$atual["clarproblem"].",".
- "clardata='".escape_string($atual["clardata"])."',".
- "claranswer=".$atual["claranswer"].",".
- "clarstatus='".escape_string($atual["clarstatus"])."',".
- "clarjudge=".$atual["clarjudge"].",".
- "clarjudgesite=".$atual["clarjudgesite"].",".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and clarsitenumber=".$atual["clarsitenumber"].
- " and clarnumber=".$atual["clarnumber"]." and updatetime<".$atual["updatetime"]);
- $upd++;
- } else if($situacao[$j]=="inserir") {
- $ins++;
- echo "Clar inserts shouldn't exist (clarnumber=".$atual["clarnumber"].")...\n";
- }
- }
- echo " updates=$upd, insertions=$ins\n\n";
-
- // sincronizando runs
- $r = DBExec ($t, "select * from runtable where contestnumber=$contest and runsitenumber=$site");
- $rr = DBExec ($c, "select * from runtable where contestnumber=$contest and runsitenumber=$site");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "runs: external(site=$site, reading=$site)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["runnumber"]==$aqui["runnumber"] && $la["contestnumber"]==$aqui["contestnumber"] &&
- $la["runsitenumber"]==$aqui["runsitenumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"]) {
- $situacao[$j]="atualizar";
- }
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $del=0;
- for ($k=0; $k<$nn; $k++) {
- $atual = DBRow($rr, $k);
- if (!$needed[$k]) {
- $del++;
- DBExec($c, "delete from runtable where contestnumber=$contest and runsitenumber=$site and runnumber=".
- $atual["runnumber"]);
- }
- }
- $upd=0; $ins=0;
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
-/*
- $r2 = DBExec ($c,"select * from runtable where contestnumber=$contest and runsitenumber=".$atual["runsitenumber"].
- " and runnumber=".$atual["runnumber"]." for update");
- if (DBnLines($r2)>0) {
- $p = DBRow($r2, 0);
- DB_lo_unlink($c, $p["rundata"]);
- }
-*/
- if ($atual["runjudge"]=="") $atual["runjudge"]="null";
- if ($atual["runjudgesite"]=="") $atual["runjudgesite"]="null";
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="atualizar") {
- $upd++;
- DBExec ($c, "update runtable set ".
- "usernumber=".$atual["usernumber"].",".
- "rundate=".$atual["rundate"].",".
- "rundatediff=".$atual["rundatediff"].",".
- "rundatediffans=".$atual["rundatediffans"].",".
- "runproblem=".$atual["runproblem"].",".
- "runlangnumber=".$atual["runlangnumber"].",".
- "runanswer=".$atual["runanswer"].",".
- "runstatus='".escape_string($atual["runstatus"])."',".
- "runjudge=".$atual["runjudge"].",".
- "runjudgesite=".$atual["runjudgesite"].",".
- "runfilename='".escape_string($atual["runfilename"])."',".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and runsitenumber=".$atual["runsitenumber"].
- " and runnumber=".$atual["runnumber"]." and updatetime<".$atual["updatetime"]);
- } else if ($situacao[$j]=="inserir") {
- $ins++;
- DBExec($t, "begin work");
- $in = DB_lo_open($t, $atual["rundata"], "r");
- if (!$in) $o="0";
- else {
- $o = DB_lo_create ($c);
- $out = DB_lo_open ($c, $o, "w");
- while (($buf = DB_lo_read ($in, 1000)) != false)
- DB_lo_write ($out, $buf);
- DB_lo_close ($out);
- DB_lo_close ($in);
-
- $in = DB_lo_open($t, $atual["rundata"], "r");
- if (!$in) {
- $o="0";
- LOGLevel("Run not saved as file (run=".$atual["runnumber"].",site=".$atual["runsitenumber"].
- ",contest=$contest", 1);
- } else {
- $sitess=$atual["runsitenumber"];
- $nss=$atual["runnumber"];
- $user=$atual["usernumber"];
- $problem=$atual["runproblem"];
- $filename=escape_string($atual["runfilename"]);
- $ttimet=$atual["rundate"];
- $fp = fopen("/tmp/boca/contest${contest}.site${sitess}.run${nss}.user${user}.".
- "problem${problem}.time${ttimet}.${filename}", "w");
- if ($fp) {
- while (($buf = DB_lo_read ($in, 1000)) != false)
- fwrite ($fp, $buf);
- fclose ($fp);
- $fp = fopen("/tmp/check/contest${contest}.site${sitess}.run${nss}.user${user}.".
- "problem${problem}.time${ttimet}.${filename}.check", "w");
- if ($fp) {
- fwrite($fp, "1");
- fclose ($fp);
- }
- else
- LOGLevel("Run not saved as check file (run=".$atual["runnumber"].",site=".$atual["runsitenumber"].
- ",contest=$contest", 1);
- } else
- LOGLevel("Run not saved as file (run=".$atual["runnumber"].",site=".$atual["runsitenumber"].
- ",contest=$contest", 1);
- DB_lo_close ($out);
- }
-
- }
- DBExec ($c, "insert into runtable (contestnumber, runsitenumber, runnumber, usernumber, rundate,".
- "rundatediff, rundatediffans, runproblem, runfilename, rundata, runanswer, runstatus, runjudge,".
- "runjudgesite, runlangnumber, updatetime) ".
- "values (".$contest.",".$atual["runsitenumber"].",".$atual["runnumber"].",".$atual["usernumber"].",".
- $atual["rundate"].",".
- $atual["rundatediff"].",".
- $atual["rundatediffans"].",".
- $atual["runproblem"].",".
- "'".escape_string($atual["runfilename"])."',$o,".
- $atual["runanswer"].",".
- "'".escape_string($atual["runstatus"])."',".
- $atual["runjudge"].",".
- $atual["runjudgesite"].",".
- $atual["runlangnumber"].",".
- $atual["updatetime"].")");
- DBExec ($t, "commit work");
- }
- }
- echo " deletions=$del, updates=$upd, insertions=$ins\n\n";
-
- // sincronizando runs
- $r = DBExec ($t, "select * from runtable where contestnumber=$contest and runsitenumber=$localsite");
- $rr = DBExec ($c, "select * from runtable where contestnumber=$contest and runsitenumber=$localsite");
- $n = DBnLines ($r);
- $nn = DBnLines ($rr);
- echo "runs: external(site=$site, reading=$localsite)=$n, local=$nn\n";
- for ($k=0; $k<$nn; $k++) $needed[$k]=false;
- for ($j=0;$j<$n;$j++) {
- $la = DBRow($r,$j);
- for ($k=0; $k<$nn; $k++) {
- $aqui = DBRow($rr,$k);
- if ($la["runnumber"]==$aqui["runnumber"] && $la["contestnumber"]==$aqui["contestnumber"] &&
- $la["runsitenumber"]==$aqui["runsitenumber"]) {
- $needed[$k]=true;
- if ($la["updatetime"]>$aqui["updatetime"]) {
- $situacao[$j]="atualizar";
-
-
- if ($la["runanswer"] != "") {
- $rrr = DBExec($c, "select * from answertable where answernumber=".$la["runanswer"].
- " and contestnumber=".$la["contestnumber"]);
- $ans = (DBnLines($rrr)>0)? DBRow($rrr, 0) : null;
- if ($ans == null) {
- echo "Problem with the answer table. Unable to send balloon because the answer was " .
- "not found (run=".$la["runnumber"].", site=".$la["runsite"].", contest=" .
- $la["contestnumber"].", answer=".$la["runanswer"].").";
- $yesla = 'x';
- } else $yesla = $ans["yes"];
- } else $yesla='f';
- if ($aqui["runanswer"] != "") {
- $rrr = DBExec($c, "select * from answertable where answernumber=".$aqui["runanswer"].
- " and contestnumber=".$aqui["contestnumber"]);
- $ans = (DBnLines($rrr)>0)? DBRow($rrr, 0) : null;
- if ($ans == null) {
- echo "Problem with the answer table. Unable to send balloon because the answer was " .
- "not found (run=".$aqui["runnumber"].", site=".$aqui["runsite"].", contest=" .
- $aqui["contestnumber"].", answer=".$aqui["runanswer"].").";
- $yesaqui = 'x';
- } else $yesaqui = $ans["yes"];
- } else $yesaqui='f';
-
- if ($yesla == 't' && $yesaqui == 'f') {
- $rrr = DBExec ($c, "select * from sitetable where contestnumber=".$aqui["contestnumber"].
- " and sitenumber=$localsite");
- if (DBnLines($rrr)<=0)
- echo "Site info not found (contest=${aqui["contestnumber"]}, site=$localsite).";
- else {
- $b = DBRow($rrr,0);
- $ti = $b["sitestartdate"];
- $tempo = time();
- $ta = $tempo - $ti;
- $tf = $b["sitelastmileanswer"];
-// if ($ta < $tf) {
- $rrr = DBExec ($c, "select * from usertable where contestnumber=".
- $aqui["contestnumber"]." and usersitenumber=$localsite and usernumber=".
- $aqui["usernumber"]);
- if (DBnLines($rrr)<=0)
- echo "User info not found (contest=${aqui["contestnumber"]}, ".
- "site=$localsite, user=${aqui["runusernumber"]}).";
- else {
- $u = DBRow ($rrr,0);
- $rrr = DBExec ($c, "select * from problemtable where contestnumber=".
- $aqui["contestnumber"]." and problemnumber=".
- $aqui["runproblem"]);
- if (DBnLines($rrr)<=0)
- echo "Problem info not found (contest=${aqui["contestnumber"]}, ".
- "problem=${aqui["runproblem"]}).";
- else {
- $p = DBRow ($rrr,0);
- mail("balloon@mainserver", "YES: team=" . $u["username"] .
- ", problem=" . $p["problemname"],
- "User ".$u["username"] ." should receive a balloon for ".
- $p["problemfullname"]."\n");
- }
- }
-// }
- }
- } else if ($yesla == 'f' && $yesaqui == 't') {
- $rrr = DBExec ($c, "select * from usertable where contestnumber=".
- $aqui["contestnumber"]." and usersitenumber=$localsite and usernumber=".
- $aqui["usernumber"]);
- if (DBnLines($rrr)<=0)
- echo "User info not found (contest=${aqui["contestnumber"]}, ".
- "site=$localsite, user=${aqui["runusernumber"]}).";
- else {
- $u = DBRow ($rrr,0);
- $rrr = DBExec ($c, "select * from problemtable where contestnumber=".
- $aqui["contestnumber"]." and problemnumber=".
- $aqui["runproblem"]);
- if (DBnLines($rrr)<=0)
- echo "Problem info not found (contest=${aqui["contestnumber"]}, ".
- "problem=${aqui["runproblem"]}).";
- else {
- $p = DBRow ($rrr,0);
- mail("balloon@mainserver", "NO: team=" . $u["username"] .
- ", problem=" . $p["problemname"],
- "Remove the balloon from user ". $u["username"] .
- " for ".$p["problemfullname"]."\n");
- }
- }
- }
-
-
- }
- else
- $situacao[$j]="ok";
- break;
- }
- }
- if ($k>=$nn) $situacao[$j]="inserir";
- }
- $upd=0; $ins=0;
- for ($j=0;$j<$n;$j++) {
- $atual = DBRow($r,$j);
-
- if ($atual["runjudge"]=="") $atual["runjudge"]="null";
- if ($atual["runjudgesite"]=="") $atual["runjudgesite"]="null";
- if ($atual["updatetime"]=="") $atual["updatetime"]=time();
- if ($situacao[$j]=="atualizar") {
- $upd++;
- DBExec ($c, "update runtable set ".
- "usernumber=".$atual["usernumber"].",".
- "rundate=".$atual["rundate"].",".
- "rundatediff=".$atual["rundatediff"].",".
- "rundatediffans=".$atual["rundatediffans"].",".
- "runproblem=".$atual["runproblem"].",".
- "runlangnumber=".$atual["runlangnumber"].",".
- "runanswer=".$atual["runanswer"].",".
- "runstatus='".escape_string($atual["runstatus"])."',".
- "runjudge=".$atual["runjudge"].",".
- "runjudgesite=".$atual["runjudgesite"].",".
- "runfilename='".escape_string($atual["runfilename"])."',".
- "updatetime=".$atual["updatetime"].
- " where contestnumber=$contest and runsitenumber=".$atual["runsitenumber"].
- " and runnumber=".$atual["runnumber"]." and updatetime<".$atual["updatetime"]);
- } else if ($situacao[$j]=="inserir") {
- $ins++;
- echo "Run Inserts shouldn't exist (run=".$atual["runnumber"].")...";
- }
- }
- echo " updates=$upd, insertions=$ins\n\n";
-
- DBExec($c, "commit work");
- DBClose($t);
- }
- DBClose($c);
-}
-
-//fecha a conexao com o banco (isso nao eh realmente necessario, ja que o php/apache cuidam do servico)
-function DBClose($c) {
- if ($c) pg_close($c);
-}
-//executar instrucao no banco de dados, parando em caso de erro quando $stop=1
-function DBExec($conn,$sql) {
-// echo $sql . "\n";
- $result = pg_exec ($conn, $sql);
- if (!$result) {
- echo "Unable to exec SQL in the database. SQL=(" . $sql . ")," .
- " Error=(" . pg_errormessage($conn) . ")\n";
- exit;
- }
- return $result;
-}
-//devolve o numero de linhas da consulta
-function DBnlines ($result) {
- return pg_numrows ($result);
-}
-//pega uma linha da consulta no formato de array
-function DBRow ($r, $i) {
- return pg_fetch_array ($r, $i);
-}
-function escape_string($s) {
- return str_replace("'", "''", $s);
-}
-if (getIP()!="UNKNOWN") exit;
-
-$x = DBConnect();
-if ($x==null) exit;
-$y = DBExec($x, "select * from contesttable where contestactive='t'");
-if (DBnLines($y)==0) {
- echo "Unable to find the active contest in the database.\n";
- exit;
-}
-$ct = DBRow($y,0);
-DBClose($x);
-GetExternalData($ct["contestnumber"]);
-
-?>
diff --git a/old/import-system.txt b/old/import-system.txt
deleted file mode 100644
index 7a23479..0000000
--- a/old/import-system.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-import-system.txt
------------------
-Last modified 20/aug/2007 by cassio@ime.usp.br
-
-************************************
-OUTDATED INFORMATION. PLEASE WAIT FOR A NEW VERSION OF THIS FILE.
-FOR MORE DETAILS, SEE THE EXAMPLE FILE: bits/import.txt
-************************************
-
-
-
-It's possible to create a language file
-(or use the same user file for it, putting the
-languages at the end). Following are some language
-examples, but it is recommended to insert the
-languages by the web pages directly. See the files
-run.sh and compare.sh for compiling/running script and
-comparing script respectively.
-
-
-[language]
-langnumber=1
-langname=C
-langscript=runscriptforlang1.sh
-#!/bin/bash
-echo este eh o runscript 1...
-exit 1
-***END***
-langcompscript=compscriptforlang1.sh
-#!/bin/bash
-echo este eh o compscript 1...
-exit 1
-***END***
-
-langnumber=2
-langname=C++
-langscript=runscriptforlang2.sh
-#!/bin/bash
-echo este eh o runscript 2...
-exit 2
-***END***
-langcompscript=compscriptforlang2.sh
-#!/bin/bash
-echo este eh o compscript 2...
-exit 2
-***END***
-
-langnumber=3
-langname=Java
-langscript=runscriptforlang3.sh
-#!/bin/bash
-echo este eh o runscript 3...
-exit 3
-***END***
-langcompscript=compscriptforlang3.sh
-#!/bin/bash
-echo este eh o compscript 3...
-exit 3
-***END***
-
-
-
-Contacts and Copyrights
------------------------
-BOCA Copyright (c) 2003- Cassio Polpo de Campos (cassio@ime.usp.br)
-http://www.ime.usp.br/~cassio/boca
-
-This software may be distributed under the terms of the Q Public
-License version 1.0. A copy of the license can be found with this
-software or at http://www.opensource.org/licenses/qtpl.php
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/old/import.php b/old/import.php
deleted file mode 100644
index 45dd4bd..0000000
--- a/old/import.php
+++ /dev/null
@@ -1,280 +0,0 @@
-<?php
-//////////////////////////////////////////////////////////////////////////////////////////
-//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-//
-//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-///////////////////////////////////////////////////////////////////////////////////////////
-//Change list
-// 17/aug/2007 by cassio@ime.usp.br: created
-// 25/aug/2007 by cassio@ime.usp.br: php initial tag changed to complete form
-
-require 'header.php';
-
-if (isset($_FILES["importfile"]) && isset($_POST["Submit"]) && $_FILES["importfile"]["name"]!="") {
- if ($_POST["confirmation"] == "confirm") {
- $type=myhtmlspecialchars($_FILES["importfile"]["type"]);
- $size=myhtmlspecialchars($_FILES["importfile"]["size"]);
- $name=myhtmlspecialchars($_FILES["importfile"]["name"]);
- $temp=myhtmlspecialchars($_FILES["importfile"]["tmp_name"]);
- if (!is_uploaded_file($temp)) {
- IntrusionNotify("file upload problem.");
- ForceLoad("../index.php");
- }
- if (($ar = file($temp)) === false) {
- IntrusionNotify("Unable to open the uploaded file.");
- ForceLoad("../index.php");
- }
- echo "<br>Starting to create the contest<br>";
- $asep = trim($ar[0]);
- $i=1;
-
- for (; $i<count($ar) && strpos($ar[$i], "[contest]") === false; $i++) ;
- for ($i++; $i<count($ar) && $ar[$i][0] != "["; $i++) {
- $x = trim($ar[$i]);
- //contestname, startdate, duration, lastmileanswer, lastmilescore, penalty, contestactive
- $tmp = explode("=", $x, 2);
- $param[trim($tmp[0])]=trim($tmp[1]);
- }
- $nc = DBNewContest($param);
- echo "<br>Contest $nc created<br>";
-
- for (; $i<count($ar) && strpos($ar[$i], "[site]") === false; $i++) ;
- while(strpos($ar[$i],"[site]") === true) {
- for ($i++; $i<count($ar) && $ar[$i][0] != "["; $i++) {
- $x = trim($ar[$i]);
- // sitenumber, siteip, sitename, scorelevel
- $tmp = explode("=", $x, 2);
- $param[trim($tmp[0])]=trim($tmp[1]);
- }
- DBNewSite($nc, null, $param);
- echo "New site created<br>";
- }
-
- for (; $i<count($ar) && strpos($ar[$i], "[answer]") === false; $i++) ;
- for ($i++; $i<count($ar) && $ar[$i][0] != "["; $i++) {
- echo "<br>Searching for answers<br>\n";
- $x = trim($ar[$i]);
- if (strpos($x, "answ") !== false && strpos($x, "answ") == 0) {
- unset($answnumber);
- unset($answname);
- unset($answyes);
- while (strpos($x, "answ") !== false && strpos($x, "answ") == 0) {
- $tmp = explode ("=", $x, 2);
- switch (trim($tmp[0])) {
- case "answernumber": $answnumber =trim($tmp[1]); break;
- case "answername": $answname =trim($tmp[1]); break;
- case "answeryes": $answyes =trim($tmp[1]); break;
- }
- $i++;
- if ($i>=count($ar)) break;
- $x = trim($ar[$i]);
- }
- if (isset($answnumber) && is_numeric($answnumber) && isset($answname)) {
- DBNewAnswer ($nc, $answnumber, $answname, $answyes);
- echo "Answer $answnumber created<br>";
- }
- }
- }
-
- for (; $i<count($ar) && strpos($ar[$i], "[language]") === false; $i++) ;
- for ($i++; $i<count($ar) && $ar[$i][0] != "["; $i++) {
- echo "<br>Searching for languages<br>\n";
- $x = trim($ar[$i]);
- if (strpos($x, "lang") !== false && strpos($x, "lang") == 0) {
- unset($langnumber);
- unset($langname);
- unset($langproblem);
- unset($script);
- unset($compscript);
- unset($langscript);
- unset($langcompscript);
- unset($langscripthash);
- unset($langcompscripthash);
- while (strpos($x, "lang") !== false && strpos($x, "lang") == 0) {
- $tmp = explode ("=", $x, 2);
- switch (trim($tmp[0])) {
- case "langnumber": $langnumber =trim($tmp[1]); break;
- case "langname": $langname =trim($tmp[1]); break;
- case "langproblem": $langproblem =trim($tmp[1]); break;
- case "langscripthash": $langscripthash =trim($tmp[1]); break;
- case "langscript": $langscript =trim($tmp[1]);
- $i++;
- for ($j=1; trim($ar[$i]) != "***$asep***"; $j++) {
- if(substr($langscript,0,7)!="base64:") $script .= $ar[$i];
- else $script .= trim($ar[$i]);
- $i++;
- }
- if(substr($langscript,0,7)=="base64:") {
- $langscript = substr($langscript,7);
- $script = base64_decode($script);
- }
- if(trim($langscripthash) != "" && myshorthash($script) != trim($langscripthash))
- echo "ERROR: Hash of $langscript does not match $langscripthash, ".myshorthash($script)."<br>\n";
- break;
- case "langcompscripthash": $langcompscripthash=trim($tmp[1]); break;
- case "langcompscript": $langcompscript =trim($tmp[1]);
- $i++;
- for ($j=1; trim($ar[$i]) != "***$asep***"; $j++) {
- if(substr($langcompscript,0,7)!="base64:") $compscript .= $ar[$i];
- else $compscript .= trim($ar[$i]);
- $i++;
- }
- if(substr($langcompscript,0,7)=="base64:") {
- $langcompscript = substr($langcompscript,7);
- $compscript = base64_decode($compscript);
- }
- if(trim($langcompscripthash) != "" && myshorthash($compscript) != trim($langcompscripthash))
- echo "ERROR: Hash of $langcompscript does not match<br>\n";
- break;
- }
- $i++;
- if ($i>=count($ar)) break;
- $x = trim($ar[$i]);
- }
- if (isset($langnumber) && is_numeric($langnumber) && isset($langname)) {
- DBNewLanguage ($nc,
- $langnumber, $langname, $langproblem, '', '',
- $langshowingoutput, $script, $langscript, $compscript, $langcompscript, 1, 1);
- echo "Language $langnumber created<br>";
- }
- }
- }
-
- for (; $i<count($ar) && strpos($ar[$i], "[problem]") === false; $i++) ;
- for ($i++; $i<count($ar) && $ar[$i][0] != "["; $i++) {
- echo "<br>Searching for problems<br>\n";
- $x = trim($ar[$i]);
- if (strpos($x, "prob") !== false && strpos($x, "prob") == 0) {
- unset($probnumber);
- unset($probname);
- unset($probfullname);
- unset($probbasename);
- unset($probinputfile);
- unset($probinputfilehash);
- unset($probinputfilepath);
- unset($probsolfile);
- unset($probsolfilehash);
- unset($probsolfilepath);
- unset($probdescfile);
- unset($probdescfilehash);
- unset($probdescfilepath);
- unset($probtimelimit);
- unset($probcolorname);
- unset($probcolor);
- while (strpos($x, "prob") !== false && strpos($x, "prob") == 0) {
- $tmp = explode ("=", $x, 2);
- switch (trim($tmp[0])) {
- case "probnumber": $probnumber =trim($tmp[1]); break;
- case "probname": $probname =trim($tmp[1]); break;
- case "probfullname": $probfullname =trim($tmp[1]); break;
- case "probbasename": $probbasename =trim($tmp[1]); break;
- case "probtimelimit": $probtimelimit =trim($tmp[1]); break;
- case "probcolorname": $probcolorname =trim($tmp[1]); break;
- case "probcolor": $probcolor =trim($tmp[1]); break;
- case "probinputfilehash": $probinputfilehash =trim($tmp[1]); break;
- case "probinputfile": $probinputfile =trim($tmp[1]);
- $i++;
- for ($j=1; trim($ar[$i]) != "***$asep***"; $j++) {
- if(substr($probinputfile,0,7)!="base64:") $probinputfilepath .= $ar[$i];
- else $probinputfilepath .= trim($ar[$i]);
- $i++;
- }
- if(substr($probinputfile,0,7)=="base64:") {
- $probinputfile = substr($probinputfile,7);
- $probinputfilepath = base64_decode($probinputfilepath);
- }
- if(trim($probinputfilehash) != "" && myshorthash($probinputfilepath) != trim($probinputfilehash))
- echo "ERROR: Hash of $probinputfile does not match<br>\n";
- break;
- case "probsolfilehash": $probsolfilehash =trim($tmp[1]); break;
- case "probsolfile": $probsolfile =trim($tmp[1]);
- $i++;
- for ($j=1; trim($ar[$i]) != "***$asep***"; $j++) {
- if(substr($probsolfile,0,7)!="base64:") $probsolfilepath .= $ar[$i];
- else $probsolfilepath .= trim($ar[$i]);
- $i++;
- }
- if(substr($probsolfile,0,7)=="base64:") {
- $probsolfile = substr($probsolfile,7);
- $probsolfilepath = base64_decode($probsolfilepath);
- }
- if(trim($probsolfilehash) != "" && myshorthash($probsolfilepath) != trim($probsolfilehash))
- echo "ERROR: Hash of $probsolfile does not match<br>\n";
- break;
- case "probdescfilehash": $probdescfilehash=trim($tmp[1]); break;
- case "probdescfile": $probdescfile =trim($tmp[1]);
- $i++;
- for ($j=1; trim($ar[$i]) != "***$asep***"; $j++) {
- if(substr($probdescfile,0,7)!="base64:") $probdescfilepath .= $ar[$i];
- else $probdescfilepath .= trim($ar[$i]);
- $i++;
- }
- if(substr($probdescfile,0,7)=="base64:") {
- $probdescfile = substr($probdescfile,7);
- $probdescfilepath = base64_decode($probdescfilepath);
- }
- if(trim($probdescfilehash) != "" && myshorthash($probdescfilepath) != trim($probdescfilehash))
- echo "ERROR: Hash of $probdescfile does not match<br>\n";
- break;
- }
- $i++;
- if ($i>=count($ar)) break;
- $x = trim($ar[$i]);
- }
- if (isset($probnumber) && is_numeric($probnumber) && isset($probname) &&
- isset($probfullname) && isset($probbasename) &&
- isset($probtimelimit) && isset($probcolorname) && isset($probcolor)) {
- DBNewProblem ($nc,
- $probnumber, $probname, $probfullname, $probbasename, $probinputfile,
- $probinputfilepath, $probsolfile, $probsolfilepath, 'f', $probdescfile, $probdescfilepath,
- $probtimelimit, $probcolorname, $probcolor, 1, 1, 1);
- echo "Problem $probnumber created<br>";
- }
- }
- }
- }
- echo "</body></html>";
- exit;
-}
-?>
-<br>
-<br>
-<center><b>
-To import a pre-defined contest, just fill in the import file field.</b></center>
-<br>
-<form name="form1" enctype="multipart/form-data" method="post" action="import.php">
- <input type=hidden name="confirmation" value="noconfirm" />
- <center>
- <table border="0">
- <tr>
- <td width="25%" align=right>Import file:</td>
- <td width="75%">
- <input type="file" name="importfile" size="40">
- </td>
- </tr>
- </table>
- </center>
- <script language="javascript">
- function conf() {
- if (confirm("Confirm?")) {
- document.form1.confirmation.value='confirm';
- }
- }
- </script>
- <center>
- <input type="submit" name="Submit" value="Import" onClick="conf()">
- <input type="reset" name="Submit2" value="Clear">
- </center>
-</form>
-
-</body>
-</html>
-
diff --git a/old/import.txt b/old/import.txt
deleted file mode 100644
index 7af6b5b..0000000
--- a/old/import.txt
+++ /dev/null
@@ -1,1143 +0,0 @@
-end123
-
-[contest]
-contestname=Fase Regional da Maratona de Programacao 2007
-scorelevel=4
-sitename=Nome do meu site
-startdate=1190480400
-
-[site]
-
-[answer]
-answernumber=1
-answername=NO - Compile error
-answeryes=f
-
-answernumber=2
-answername=NO - Runtime error
-answeryes=f
-
-answernumber=3
-answername=NO - Time limit exceeded
-answeryes=f
-
-answernumber=4
-answername=YES
-answeryes=t
-
-answernumber=5
-answername=NO - Presentation error
-answeryes=f
-
-answernumber=6
-answername=NO - Wrong answer
-answeryes=f
-
-answernumber=7
-answername=NO - Contact staff
-answeryes=f
-
-answernumber=8
-answername=NO - Problem/File name mismatch
-answeryes=f
-
-[language]
-langnumber=1
-langname=C
-langscriptmd5=7da844fdb1408384529484e9010b6b5d
-langscript=run.sh
-#!/bin/bash
-#//////////////////////////////////////////////////////////////////////////////////////////
-#//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-#//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-#//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-#//
-#//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-#//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-#//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-#//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-#//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-#//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#///////////////////////////////////////////////////////////////////////////////////////////
-#Last modified: 21/aug/2007 by cassio@ime.usp.br
-#
-# parameters are:
-# $1 base_filename
-# $2 source_file
-# $3 input_file
-# $4 languagename
-# $5 problemname
-# $6 timelimit
-#
-# the output of the submission should be directed to the standard output
-#
-# the return code show what happened:
-# 0 ok
-# 1 compile error
-# 2 runtime error
-# 3 timelimit exceeded
-# other_codes are unknown to boca: in this case BOCA will present the
-# last line of standard output to the judge
-
-umask 0022
-chown nobody.nogroup .
-
-export CLASSPATH=.:$CLASSPATH
-
-# this script makes use of safeexec to execute the code with less privilegies
-# make sure that directories below are correct.
-sf=`which safeexec`
-[ -x "$sf" ] || sf=/usr/bin/safeexec
-gcc=`which gcc`
-[ -x "$gcc" ] || gcc=/usr/bin/gcc
-gpp=`which g++`
-[ -x "$gpp" ] || gpp=/usr/bin/g++
-java=`which java`
-[ -x "$java" ] || java=/usr/java/bin/java
-javac=`which javac`
-[ -x "$javac" ] || javac=/usr/java/bin/javac
-pascal=`which fpc`
-[ -x "$pascal" ] || pascal=/usr/bin/fpc
-grep=`which grep`
-[ -x "$grep" ] || grep=/bin/grep
-
-if [ "$1" == "" -o "$2" == "" -o "$3" == "" ]; then
- echo "parameter problem"
- exit 43
-fi
-if [ ! -r "$2" ]; then
- echo "$2 not found or it's not readable"
- exit 44
-fi
-if [ ! -r "$3" ]; then
- echo "$3 not found or it's not readable"
- exit 45
-fi
-if [ ! -x "$sf" ]; then
- echo "$sf not found or it's not executable"
- exit 46
-fi
-
-prefix=$1
-name=$2
-input=$3
-
-# setting up the timelimit according to the problem
-# note that problems should spelling the same as inside BOCA
-if [ "$6" == "" ]; then
-time=5
-else
-time=$6
-fi
-let ttime=$time+30
-
-# choose the compiler according to the language
-# note that languages should spelling the same as inside BOCA
-case "$4" in
-C)
- $gcc -lm -o "$prefix" "$name"
- ret=$?
- if [ "$ret" != "0" ]; then
- echo "Compiling Error: $ret"
- exit 1
- else
- $sf -F10 -t$time -T$ttime -i$input -n0 -R. "./$prefix"
- ret=$?
- if [ $ret -gt 3 ]; then
- ret=0
- fi
- fi
- ;;
-C++)
- $gpp -lm -o "$prefix" "$name"
- ret=$?
- if [ "$ret" != "0" ]; then
- echo "Compiling Error: $ret"
- exit 1
- else
- $sf -F10 -t$time -T$ttime -i$input -n0 -R. "./$prefix"
- ret=$?
- if [ $ret -gt 3 ]; then
- ret=0
- fi
- fi
- ;;
-Pascal)
- $pascal -o"$prefix" "$name" >compiler.out 2>compiler.out
- $grep -irq linking compiler.out
- ret=$?
- $grep -irq "lines compiled" compiler.out
- ret2=$?
- if [ "$ret" != "0" -o "$ret2" != "0" ]; then
- cat compiler.out
- echo "Compiling Error: $ret"
- exit 1
- else
- $sf -F10 -t$time -T$ttime -i$input -opascal.out -n0 -R. "./$prefix"
- ret=$?
- if [ -f pascal.out ]; then
- cat pascal.out
- $grep -irq "runtime error" pascal.out
- ret2=$?
- if [ "$ret2" = "0" ]; then
- echo "Strange output - possible runtime error"
- if [ $ret -lt 4 ]; then
- ret=48
- fi
- fi
- fi
- fi
- ;;
-Java)
- $javac "$name"
- ret=$?
- if [ "$ret" != "0" ]; then
- echo "Compiling Error: $ret"
- exit 1
- else
- $sf -u10 -F30 -t$time -T$ttime -i$input -n0 -R. $java "$prefix"
- ret=$?
- if [ $ret -gt 3 ]; then
- echo "Nonzero return code - possible runtime error"
- ret=47
- fi
- fi
- ;;
-*)
- echo "Language not recognized"
- exit 42
- ;;
-esac
-exit $ret
-***end123***
-langcompscriptmd5=bde30aa6d558a0b1596ce7bf8daa75f3
-langcompscript=compare.sh
-#!/bin/bash
-#//////////////////////////////////////////////////////////////////////////////////////////
-#//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-#//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-#//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-#//
-#//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-#//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-#//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-#//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-#//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-#//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#///////////////////////////////////////////////////////////////////////////////////////////
-#Last modified: 21/aug/2007 by cassio@ime.usp.br
-#
-# This script receives:
-# $1 team_output
-# $2 sol_output
-# $3 languagename
-# $4 problemname
-# $5 problem_input
-#
-# BOCA reads the last line of the standard output
-# and pass it to judges
-#
-# Next lines of this script just compares team_output and sol_output,
-# although it is possible to change them to more complex evaluations.
-
-if [ ! -r "$1" -o ! -r "$2" ]; then
- echo "Parameter problem"
- exit 43
-fi
-diff -q "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff \"$1\" \"$2\" # files match"
- echo "Files match exactly"
- exit 4
-fi
-diff -q -b "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b \"$1\" \"$2\" # files match"
- echo -e "diff -c \"$1\" \"$2\" # files dont match - see output"
- diff -c "$1" "$2"
- echo "Files match with differences in the amount of white spaces"
- exit 5
-fi
-diff -q -b -B "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b -B \"$1\" \"$2\" # files match"
- echo -e "diff -c -b \"$1\" \"$2\" # files dont match - see output"
- diff -c -b "$1" "$2"
- echo "Files match with differences in the amount of white spaces and blank lines"
- exit 5
-fi
-diff -q -i -b -B "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -i -b -B \"$1\" \"$2\" # files match"
- echo -e "diff -c -b -B \"$1\" \"$2\" # files dont match - see output"
- diff -c -b -B "$1" "$2"
- echo "Files match if we ignore case and differences in the amount of white spaces and blank lines"
- exit 5
-fi
-diff -q -b -B -w "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -b -B -w \"$1\" \"$2\" # files match"
- echo -e "diff -c -i -b -B \"$1\" \"$2\" # files dont match - see output"
- diff -c -i -b -B "$1" "$2"
- echo "Files match if we discard all white spaces"
- exit 5
-fi
-diff -q -i -b -B -w "$1" "$2" >/dev/null 2>/dev/null
-if [ "$?" == "0" ]; then
- echo -e "diff -c -i -b -B -w \"$1\" \"$2\" # files match"
- echo -e "diff -c -b -B -w \"$1\" \"$2\" # files dont match - see output"
- diff -c -b -B -w "$1" "$2"
- echo "Files match if we ignore case and discard all white spaces"
- exit 5
-fi
-echo -e "diff -c -i -b -B -w \"$1\" \"$2\" # files dont match - see output"
-diff -c -i -b -B -w "$1" "$2"
-echo "Differences found"
-exit 6
-***end123***
-
-[problem]
-probnumber=1
-probname=A
-probfullname=Bits
-probbasename=bits
-probtimelimit=2
-probcolorname=Branco
-probcolor=ffffff
-probinputfilemd5=3d80104620532811bddcb6ee7ae45ff1
-probinputfile=base64:bits.in
-MSA3CjQgMSAxMCAyMCAzMAoyIDIwMDAgOTk5CjMgMCAwIDAKMiAxIDEwMDAK
-MTAwMCAxMDczNzQxODI0IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCjEgMAoxIDgKMAo=
-====
-***end123***
-probsolfilemd5=01cb6992846e7c6d7e77ca91fd1c401a
-probsolfile=bits.sol
-Instancia 1
-3
-
-Instancia 2
-20
-
-Instancia 3
-22
-
-Instancia 4
-3
-
-Instancia 5
-20
-
-Instancia 6
-31000
-
-Instancia 7
-1
-
-Instancia 8
-4
-
-***end123***
-probdescfile=base64:warmup07.pdf
-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
-7zZNtU1sVVZCtyGoSjQ0EMGv+wSaIUFs4S5tlZaX5WMrQDlYev4VIZRE2Pqb
-2wGgo6nLHbGGwovtXwLGqeJc5QDA/e9p9ssj3hr18pyJyKv7EyUuLi2mZx7C
-Rd1vvFuYoO4HGUqkcnSHm58X8PDupdfD5VBgVmFWwxh+lPx/2/IR+KxsJYvn
-wHHhHHo1t7zSMxScK0nsTkvI8owb0gWR32t6LyVxhr+P5fKz2FeeoGl0xd/B
-wo904g8Y269a9/WvYUZDSTCc29mWu2CW34IqtdXM0i2dtSqSrKjKXV4mhYU0
-+Kbm4zfq0rXyXJjMVraqLa0XA7VJKpVuMm6bm/4JTrPFWZjbbN8XCWQJtKU0
-MabK+AQke3V3/+r/9sdL7GVuZHN0cmVhbQplbmRvYmoKMiAwIG9iaiA8PAov
-VHlwZSAvUGFnZQovQ29udGVudHMgMyAwIFIKL1Jlc291cmNlcyAxIDAgUgov
-TWVkaWFCb3ggWzAgMCA1OTUuMjc1NiA4NDEuODg5OF0KL1BhcmVudCAxNiAw
-IFIKPj4gZW5kb2JqCjEgMCBvYmogPDwKL0ZvbnQgPDwgL0YxNiA2IDAgUiAv
-RjE5IDkgMCBSIC9GOCAxMiAwIFIgL0YxMSAxNSAwIFIgPj4KL1Byb2NTZXQg
-WyAvUERGIC9UZXh0IF0KPj4gZW5kb2JqCjE0IDAgb2JqIDw8Ci9MZW5ndGgx
-IDc4MQovTGVuZ3RoMiAxNTQ3Ci9MZW5ndGgzIDUzMgovTGVuZ3RoIDIxMTcg
-ICAgICAKL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnja7VJrOJTr
-Gq6wqlELITOl+iymHMc3wxhDDkNkYiyFcoxp5hummflmmoM9Isqpg6KD1FA5
-RpgiSpSSqU2rcoiKKZLSioWEaiO0hlZX12793PvXvvb3/nnv57nf+7m/+33R
-el7eZiQ6dwfkyoWFZlgM1gZwplDIWBBQ7EEQgUY78yGqkMmFN1CFkA2AJRKt
-gE0iNoCzAECCDd7CBk9AoAFnLi+SzwwLFwKGzkazJAJA4kB8Jo0KAxSqMBzi
-KDRoVDbgzaUxIWEkBiCx2cCW2RMCYAskgPgREB2DwGIBOpMmBHZAYUwYYT7r
-iQwzuADha5ku4n1rRUB8gcIUYDhn0whQmKRzYXYkQIcYCHNPrmIapPDy37D1
-o7iriM32pHJm5eeS+lufymGyI/9icDk8kRDiAxQuHeLDP1K3QV/NUSA6U8T5
-sUsWUtlMGgkOY0OAGdYSA1p+rTMFrkwxRPdiCmnhAIPKFkBzdQim/+hEkd+c
-D3MntwCXzWSTv652rulFZcJCn0geBIDf2XMY+x0rQuIzxUAgiAFBrIKoWN92
-wT8Mc4FpXDoTDgNweCuAyudTIxGKR6RAeCAKCzBhOiQGILHCsTkG5goVRwBF
-MnsABpePmL1XKxAwZ0MCwWx1roAFCYA56ztU+DaH5+Dff9LJiSuOMrPAAWY4
-vGIoaGkNEPDgnn8j0kR8PgQL5x6SIqpvmMFUpAtBYoiGkD/l0mwTdp6qTCqK
-cclrKVYxEuhKChMe3kq8IrHFDLywXfaYf63ZB1o9qpGosZNZop4+5H7RnM7A
-v0RVkqIborzNEzs0GpZqGeVkeC8cpg0EbV9wL6tepsY5e/CtfE0v75rJ8DP9
-j90Rt1RKPfqxhFzU0CHlovan02MxrNjGl3LV03T9N+mI4KwbHiehrX3dRx9M
-Dm7k5nHl5+/pBGV81JyRo2RdrazOpRJichZF6YnEbmoxaCRm9DQisJmsNXK/
-c8RN3jaLdK0eb82WAPNW2OlJ/Oyrq9wp7xa9fmREfK0nWdJKjtuT7raN7Ptp
-ZXHOMlrRSrbdxvOo+VCZLKCWYw/X7e8t2xy3jFXWgrNLw/KunURvCZ2YRo8a
-HFH+EPz584t/fUlG1Q7TovTmIS8t2GZinekQYWgyYPQQRKm0HWjQ86eGn3gr
-JDm4vVB1TK7nNDn0RFePUwA/4pO9Wk8vHNCX4xD9NhOcU9mmlACT8qqG40Eu
-4nlE/7vw+p7c93/crU3OxG13dQ58EVrj025yT3r1dt4GTel+5eCGKlfXPIOq
-RdyO1046evaaurba6qSgXh8gPEVe1yo+Ohh+M3oZfnJiVYmN1dnWKds3zem+
-DdeGCq1Wxai8iV/JSsEM+hhHWb9TuuUuDY1ssZZWNPy2fN0puk+02eZTrJIi
-96IkTuQIcfHJYmLZe6xSdvTND6SqfzKy+EeBUkP32I/GRvXokPvSEaH6Ua/P
-uaEYvr9DTa0M5sO9lyaiInA1v4bgbYPCZlrtC7fkn49KjR0eabdcdTAEYaPa
-0/GaiOK57E6P+ZLwqWOjSFXDpephoBx+Wyzp+u0lk/g6/ma+hkjfzu/iWvta
-VOntV+OOm81wGgyfKJDtb3Jofs8kml6dy5FqoelavfecqGGGcmQDRfMO+QMS
-bqjmJSe5CtEF0xV56VvNY3o7HK9Y6Qk9xnNtYO+15Eq28bwFXcrjY+nI3o/8
-fWfb3AhXs1PoDp05XgGfcibtuh9NivZq3h861Pj8hgWFQfkS6H0yVIfBS2s8
-ItMqYLQ/Mi23vw1ik53aUfmWmanbH5smW4f1ZhQhy2Rnzqr1rcDXRFtKfqrO
-xwgdHqpcaL5eXyjoqkwoLeg8F0YMe/DLO6/sT7tOmyay2sFliCPjZ8ZNaaEI
-raTAIVXOuyWOrZkGlV7q9dLJ52F8C86TYG3x7ncf5u8/X7c+LMLx2W38rnMG
-g2NVwaGeR5YHZ1iZld/BLEy7UfqUMKIPdvhlxFp2+dh/tCUbhzp4WOmkrlpa
-0RM6z/uu/3Q+raRvNdZkgOeYkus1YbV7PaNyn0TOOS4t+P0Mmdnu2LQ6v968
-cdQi3nrhg4TGZJ8Cgwwl57G9RW7UY+9Vdqj/vLAurT8ge43NVGRFkiESakg8
-fGKie6ZptCLvZVG7byRQ7Tc5sOVO2pMNwVc3zEy1g7qbqJJRtV34+8/EbjML
-fCt0e2mfr5NYDXJZf9ov958uvg5jrwwwWqY9ZTkX2dFY1T055a3S9XrpU+3N
-hSGZruPXfyLj2vY4tSBry9YERBUuGIohli7ERdWd+BLkecBxbMTGtA8Tu2m6
-0viACzngWL+/54oVzlE9XWVBD8XT8uaxQe1Rv/5jgahXam1El7F4nZT4ff5M
-8uoEVZnPziP9yNj08yk3lIe33dN9G7jyCt24Rqlj7NKiCGmrwFrtHyzkzti4
-aelamDgCbmsbPp5dVkQM0Xoev6ldmeXiZVshSppEeOnUTqbgrHWnKi43FjYp
-FT7W3kV/U00brNFsQpabBmTRRLEkKjmGvvqVq9qX7vyWOIME0lEN33G9cfQ6
-lgfveSrmjp1l0KmsmRMyafHpcu01Tpdj2+rW1d39lVdQ5E6+MRTSstmzoqxp
-g+0fnmkth4uFdp6Ld3dq09U3pg7piy2fsQ/2qpNjesK5O2TLr/Sftiz5eSiZ
-LOBdRh9GLallm5anrovz7pNsbVnBQjEPEnyzKJkY6jVnwz7272WqzfffLLHr
-XPrc99jiuBlCYkm4V0JbRp4nL2/AadX0T8fOdKtzkafvXsjxT9w100YYCZmP
-tAzIWZ4psvLozN+9lAX+hx/i/wL/EwI0NkTlC7kcKp+F+BNxl1mpZW5kc3Ry
-ZWFtCmVuZG9iagoxNSAwIG9iaiA8PAovVHlwZSAvRm9udAovU3VidHlwZSAv
-VHlwZTEKL0VuY29kaW5nIDE3IDAgUgovRmlyc3RDaGFyIDYwCi9MYXN0Q2hh
-ciAxMTAKL1dpZHRocyAxOCAwIFIKL0Jhc2VGb250IC9CSFpFUUkrQ01NSTEw
-Ci9Gb250RGVzY3JpcHRvciAxMyAwIFIKPj4gZW5kb2JqCjEzIDAgb2JqIDw8
-Ci9Bc2NlbnQgNjk0Ci9DYXBIZWlnaHQgNjgzCi9EZXNjZW50IC0xOTQKL0Zv
-bnROYW1lIC9CSFpFUUkrQ01NSTEwCi9JdGFsaWNBbmdsZSAtMTQuMDQKL1N0
-ZW1WIDcyCi9YSGVpZ2h0IDQzMQovRm9udEJCb3ggWy0zMiAtMjUwIDEwNDgg
-NzUwXQovRmxhZ3MgNAovQ2hhclNldCAoL2xlc3Mvay9uKQovRm9udEZpbGUg
-MTQgMCBSCj4+IGVuZG9iagoxOCAwIG9iagpbNzc4IDAgMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNTIxIDAgMCA2MDAg
-XQplbmRvYmoKMTcgMCBvYmogPDwKL1R5cGUgL0VuY29kaW5nCi9EaWZmZXJl
-bmNlcyBbIDAgLy5ub3RkZWYgNjAvbGVzcyA2MS8ubm90ZGVmIDEwNy9rIDEw
-OC8ubm90ZGVmIDExMC9uIDExMS8ubm90ZGVmXQo+PiBlbmRvYmoKMTEgMCBv
-YmogPDwKL0xlbmd0aDEgMTYxOQovTGVuZ3RoMiA5NzMzCi9MZW5ndGgzIDUz
-MgovTGVuZ3RoIDEwNjkwICAgICAKL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4K
-c3RyZWFtCnja7ZZlVJvftu6B4sW9aKA4FHd3dytaNDgECW7F3V2LO8WhUNyt
-SItbcdeiLRBuuvc5//bs+/HeT3fcJCPjfeaaa87f+6z1roSGUk3zjbgFyAwo
-A3IEv2FnYRcASCprsLMB2FnY2CRQaWgkXYCmYBuQo5QpGCgAYOfn5wDIAM2g
-F9CPADeXADcHKg1AEuTk5WJjZQ0G0Esy/E7iBYg7AF1szE0dAcqmYGugA7SG
-uak9QBNkbgMEe7EAxO3tARq/Z7gCNICuQBd3oAULKjs7wMLGHAwwA1rZOKKy
-/kaSd7QEAXj/HbZwc/rvIXegiysUCkD/L0wGABTSAuRo7wWwAFqisqqAoN2A
-UJb/G1j/WVzGzd5exdThd/nfRv1vw6YONvZe/5UAcnByAwNdAMogC6CL43+m
-vgX+m00ZaGHj5vCfo/JgU3sbc3FHK3sggO3fIRtXGRtPoIWaDdjcGmBpau8K
-/Fcc6GjxnxBQ5/6FwCopLi+jJ8P07zX915iaqY0jWMvL6Z+qv5P/pdn/aKg7
-LjaeAAM2qL3s0ETo+7+vjP6jl7SjOcjCxtEKwMHNAzB1cTH1QoXuHqjiBviw
-A2wcLYCeAKAnFJiVxREEhk4BQD3xA1iCXFB/Lyg7B4DV0uZ37N+SB8BqAQLb
-A11d/wryAVitXEzdgX8i/ABWU3Oot/9EOLgArOZQI+3tTf+JcXICWKGt7U0d
-/oSgac5uIDDQwsz+31vjv0e42ACsTqYuQEd7oOVfUfb/iv5H8u9uIAeHP724
-uAGs1l5O1kDHPyHovThBtxvI4k8IeifeQBfQnwD0RkCOf26DG0oB9vgzzv3b
-HpCby58AtCjwf7Bw8wJYHW3+rsH3G84e9IeEBzpJ4o+CTpD8o6AE0v8oXqhl
-8n8UtJLKHwXNVP1H8UFJ1f4o6DzNPwpqj9Y/Cnpk/OP5/zCX/7eLNi7mbg6W
-9tBd8k8YyvfHWH4og9kfBWUw/7MN2KAQFn9J6Gr9tUnYfpv3l4QyWv0lod2t
-/5LQBfxry7FBLbP9S0Ip7P+SUIw/m4od+myxOv4loRigvyQUw+kvCcVw/ktC
-MVz+klAM178kFAP8l4Ra4/aXhFK5/5EcUAzPvyS0r/df8ncpG3uLfxv0vx8Y
-EhIgT583HNzsAOgX229v+QH8PPx+/yPT3M0F+jCA/3UeQ8+d/9aWNtBTCgj0
-BJqjLs2DzAVDbNNbwir8pYumKxEYYSWsWhNUGnu+db4MXkyEtS8dU3RmXG/Q
-/VWVhYuxh7BH4fFI4hrV4av+ReY80DkhYw6y526yl+XdRqL7I0vZa9eJ6i74
-GPNzy+z1CTes6tf18YoUveLB3Iuh4wI1eimtfaRVSpheA/em3uwQHl5dmSx7
-7fDQBlpOSg2sDOeKCK7wNQ+slCT4talgf9tw5E9MK5egDjecX0XI+ckQwzv8
-eGzzDgpOjS1GPI190ZPy4nAszPrngZFasWyAlaYLYA9hGVljTD44DzesNteb
-WNp45oJwUjpC2f2cua1Dl/KJhsdovXTHmJPJ2LpYYbGE7SKpCFQdS/cT2Rty
-BEi75y/sUEwOoN54f+6LmQwuiNUxZNBHoERvs31NqD+YlT2N582OcZ2jTSzu
-j0rlJJry7OMmlmUk7lfqimqzjfXLVoLh0V/V7CXmwJCQ2mEeYV4zuZLigAah
-Cyt5nNjlpkScF0vthqG+2rcYDWzlx6/KWnC+3TQ4a9ggePN1MY2yGs0W8UL/
-wJ3AFM+QSW5LEnl80YI8VMYwNB9T7TBnNuG9j4jlGCrSGISI7u57n5sYs6ir
-O0Tqxny8BSHlqqf8Ew8OWgYNHQN57wjSLZCqclO07WcvkKnP32Zbw7SsCtSG
-vBQdCqJ34YkTlACvIY7x1Maby/SSSA67TFCzClIyKy7AxjoXlCllpZzCJJc8
-AN9eb7hhydYuADJOimA/fbTGxszgTdsNvETEk1f/buAGz1HI9lTU7KbP17yf
-zljV+xoxnzjz8Z4o1/nTynWqWvtRzmWbb/fwRJp83ERyNDEhVosT0O/wdane
-SvhbPB88VDlEV/r97Z/9fkQRDSEJkrDSaBsd+GdHMDsxX8wjrh4FzxeXBmBg
-DYCYrJoOL3Ro659RbRY4hguCHcwN2XrsTiXpXJ0Ydtt12doOosSo+zlsv16p
-yjbL8jdF0NRYZt7NEB4pKZxIiXU7VMJkrj9xmHGnGZpbeFEGRf+wORnxZiKN
-qbH3bNk1rUNK72IaHuNo0hRzu5UnOdSbueWWEXG2ytMIUJUGeSgy3kOuFocE
-WaMzIZiu7VKNU/iluLLkRcMFXzyFRZooFCZ3AW7ZtkpSlluLGHfDYXY1iFsF
-8Ji1bzafbJ+Ml/wrW/BSrdPLOjxVMoB1GAdN2YlxESbyl9fJKS+Olj8JKMdw
-slBR1saDFOS11EhbSmmjRkFOidTGLxTntSW+y3b4tM9bke/VJoZvZYx7V5XE
-iTY3DR9YEvSWsxVX8PYBJ+jLRU7jhdLJHG5KUE0NnEU1OTamEIa1ntwTQSc7
-K/RInEpcm1vi8c8kUgwlFlWhAeSvOX3d9hks9E81mknZP9AFYC5EjszdOO4b
-0alSmv340GQV1YIQaSXwMTDu4gd23D7SBmNPPGMZa9Tcyt2ifcTUMSwENxfI
-B3gQOcoMsnpQn5I4q/FpHAUK18Nv6b9Lse/kfp8jMH1PbLdy5Xxg6v88RfRR
-kfas9hDNaybw3fe4mcP7m4l7Yr0asdlwyCn3W9JSd5duVnvLcP3pX6/oc3nu
-cTIL7DoF8S7lk+NMZTUwixD9i4b9kh7hOtAMnoGVsnPZ6xnf75itLNiqskx+
-xKPPaIbC6k4JeR7obivGPK9640SfoEgh1kctRMC07vg0wp1SRPE3fJe5TS/A
-HAQMBA5YNnEWQlD0wyewBZNRsNmbZF/qv1Bqh/Ei3016UK7SjKFH+XYYwEIo
-uIYqw/F5UWVVVCVvLe34iQEHhkb+pCkkGgR6tWZnI8Rs77H7Gs9l00TBvO6n
-HOSOquRgX9Goe9KSinJzM+JtVuZK3Rw7uvYDSrf1z4v7IMt9LvEA97qMDlVb
-xmUMDoFevaeiCw3GwoQBcs6C5HI8s0r3ku0+tSCPM/TixDxVeBYVnLz3+lN6
-QosgdcSaZEsFsNZcgK7dar1/PqLmdowF16v96OdPDq/rJvXEgP5JS3HZnJsF
-82I/XbSsL62whQHKH2qHrqmOWoFuQL0yf/uiew84wPi+PV0vxNQ5j4w99YZt
-7P2eudzbgPeb4V9jhzqFkUaZMKbTwBy8YeTKR2iha0Qnc9nvtSJwcq3cNGZr
-MuFHR+b2hkXkggPhcDR0KWTwEDM6LdWVthth7AKpy1920/YTjHxVlXjPPD/U
-B//4WYHqTvi27kRNL3ZfR2wNkuEeHuc7XO5z+emMjoTO+RtEuYWsigjfhWDN
-67kiaeez8iTvIBNxwbP3HvQnwyFup8XQIuLb14lXd6MLbQI4KvvckgNRNoho
-8vfnkpqLiJP7oyp2+Bo90So239f0KAKZJeQhcojsj+0qBGcTWzD9xrbjOU/R
-WtuzH8g2Nj+9/VEM42kV+p7mKFyxCCnsTTDySfGBRcmHFs7ml4QZJlTAYTJJ
-Ri/8xvuJDTmgmHBs1bTP5ykn32aeX14+L6TVcBaDxIQVRthxv4TRC3i9txqZ
-8MusvGWP/L4y9uZSKo31yzM5+cM6Wtxpy/ZYnXtBaU3mbSQx2xMLivYH4j7P
-Db3FAO2inMi5JYYlC/Gv3QoFSZFuZzxLtqxayEMinM/2HgUX/q0vBbPkm12l
-E2R0wDRpwxzOwbrlC1kFCk9j53C6cbnl350nlI2Zqx7f1bPmt3bWptw3nZyq
-hjrnRQrV7ndQSE9ErVyBRNTPr8Z+tldwPO/irH+OkK/Vi+/AsLPvYaEBKp/8
-Quf4+YPYVVbs2P0HvYcEmRK3x1MQAH0wAG5LHigZv5yqYfnjtfijdFP4lAoo
-K1Qh0a8hSB3r89pxs9fPD86jaQ2dXIugV7Bp6SvXYRVxDkTATt/WSq6uKiYR
-EAb8i5p1Xp4L1BxX/9uudOZek43AEwdfEphA8AKoFPsDEizrqj1FylYoynmc
-W2bTsdZdmoYVEk1Ir1h0bTi5CHKp52nW9Cq5XWZ+M4dnq7T3Z7v8M//vIhgk
-JK9zOgm600Nojd1Omx+PN0Z4iVqGIwrX9BhotlzC1ism2NgSkeMvSo+DUedl
-V4aR+EU5C49ZXBqiqR0JjbGw1rny9XTRC78/PCaKo7iP4u/kX8lNxDP65Oi+
-4ArARPNlxduT+dT+nihHGz2FvB3HYmo8tz7DwOvckiWPVoE6SoZTCk7REjih
-HpGuM8M33YH1c44C4cb6SsQufvfQZrKK6PtDLUftPXyo2iyQ5SFQ7Z0NCtGv
-3RQRhi51y2OEB3mioUDlGTV5nY/Has+UTXbTF5Y/qgfs8/ySs96XUI2Rl41r
-xpW/FYKbaOZiWm4tbonxCh7wK4RNmt7lOqqtoY6OkTOgGCM4X5jEqFWcGJHg
-F4IJEheJ+pZzxlvUyvsqDoJtllOBpI1rg+M3cVooqC0y/vFBjTGhiEr0bn7S
-srLKdEvr9oRXDNjHRq/5VIxpkEvx3GaI4ZbmWKZHuTqIlpcbZ4Cf5Fj+NFP8
-nCqGIVWRNTHYj+8oiLGqRe2GFrYXWXKi/kL462t427RI47S2WqG000Vy208v
-IAuChbg4V3PnZYx+5rx+mFKW/sJBFRJDuoFsNeuQ+DzvRCGDNvfNVtxqUoU+
-eK8EAEbm7Pyrlz8qYN4TPYFPp4n2tJTG86uCt3XHAVHO30U8uMXGyQfbfAuY
-1vIlhpNOL9XYtI58Tx683naPnEoiJrq5+NMfZ/f3v+PouG4T4fVuRNfJwkOo
-QOa6nViSjQp3TatbUmTS2qsYRSr2Ee8PqgiF7bks9jyvkG4fRc4VoF2qmIgb
-9Y+KHTebu40V7yqx8bVlVkCpob3FwCduojD6kaUKs1+mlGhP9fApLw3GLZhp
-bnicd1XavxMieRKdrFnFkzOyq/81eUatovNBn9MitZzZJ9xS8unnNsamC9Vt
-TydOuvIv6slLqUN5Mb6ONS2W2JBBiKN8SWTRSy5U6rtOru/P/QnXOc/wzgUj
-QY/DdOLerT8ON2mbvFJ5vrxPF/4p5Y0lQY78mBEqH9oh1PrJjfNze0c7aACO
-3eJu1/OaA+eDxrpfgGqN7rY3AFvinmm6SNzgPn+KnA7zPp5xEh4WHOm1cOKB
-KOrwknJ01xjO9ULvegz2/cXLTBr9lbW+aKfPiJrcvrA6qAwe1Y+wt86eG9Tf
-TyY/W576IIe8iZZq0ddxypk0kZ3apSpkCoX0gU7yJlcsUuBFQdWDLBNrIqi8
-STwGc7x5cJY+o88iQsqqeBHVVdbLoppT0+YXu24Noelwu2sz2AbyvfiZVw31
-54GYtcltGWLFaSkD8cGkJj7f4KvoG19E0G2MrD9a627AqNL36mc4Ena7Gr9b
-4nDkNGcxC8GNrX4g0fSTW19SGcwb9enaQkD+lhVeGex54lNHhMcbyh9uEePW
-lf09cT2NDamBh+OAkuxlq0zgJRfJazhEksE15lJgF4wqTtqsSS7ley/QUBRX
-xkWNtZ/cR0S3UJaP20ufx6MoJs+052rQSJdV0KIsD59jGzORg4sw5tFyaMM/
-FglB5Oy1rio+eEsLjYgBYPKHf1IZtHZz0pjXhi+4CD4a5lM5fEhxhnX1JvtR
-9UMvxeiwNaKdYGrh9EfjSaoUipt5RbFRlxs/Bf54YL85GyoLKw8zcOFttW0+
-VVeL6A8C8qmMm88Twqsiq8KhvSg51As2ToNRrKSz9OmoIfhhh15qXY+VQbQq
-CqP1UnXxP1YxKW8qdQwfjF9bzFIQ2nroWxnHFSCCdhlKwSerrr1cCT+SFwS2
-5VqX6R7OTssaKRT0V8qkkZKI3bKGl3qrO2fNCO3BhoYtXb3EIdwcSD8xUHHW
-T2jz+l8M1AyS6JHtXB4WSgS+DxwLub8+5T5A8OJ1J7oqF335qEKJDYuKvQaZ
-Ya8YVDtmlyUywZQJZn30EfWsImp+m6h6GP2RBhKGQtDJpI9mVSuTg1+NV565
-NwA0GIgdp2pNx6p+Ke8wExmyRYwEOF/kBAa2SXl5UymB9SiZo7o96hOqJjdQ
-TKGOX2Saw9f9yN1M4SzOGz8lsUUNu3kdQt7G3KiSahBvxlcYpcPrJUr3yZ3t
-9lrtdAbZ7Jybc3ZRDoMu/56dofTVGmUJYJs3CnW1pbylkP/iel2vbiuJ8DZu
-r5lJ2yglNPelrmNZW2hzRACWZkBmEUvkcPHGT2LQ5hUO9V19QeZN9gA9jqWP
-a8cMpPt7GYyuM1WcuXI/TTORZYc0LZw8TsvN4NfXoZTXmDeVH1AKwQlLIfXp
-yjTJvCCfzHRXQewNhQg74DTxnDZ28re4D1TsJ7ahUl/9D0WPldj4Ssc/Ch++
-8QYez+3o4k3OmukMBUusDj4zDzlXjf4cdQjntq7Tac0aCInNbLlKoFH/tFV0
-MB2aLZh7tmVOuAEzWjb3mlZskQbhM6tk4Vi4kz4MuE89bJW5f7cfEhjcf7dn
-iQSpGGq2CLrEdzpo217Gxld+9wb2cir4bqIRj+vmEncrcTKWjIxZX1LTfbYA
-wauYatkwGRU/EVKyeWF7I62+Z4/2bqj7fBWdFl15bz3pcFPEUhASIBTK451S
-8HkzsEJW3VYExsjfUjz2nFRw7RRMIZJoCN7zflc8TYAZO9A7WFNpwz4ZpFK/
-36MaR54KcrNhLGahmYRtemMPlGnONwwr5rK5EckqoKhbsi18wz15E2Lf+NF2
-kFjOtLfDJB6WtCFugeIbb78de9crgGPxmLHPoKY3gYEffzgGLCLvwK7dOhWB
-6KT7QKrmY0BH0MCw8kcJwNkBP0PTHq0LxwuIrEnGgiLq5go3teaw+FalSFxI
-RMdqflE312uDLIESsq4sp+ZTl063qdN2bhKlowNEBbBI5s0tVmOO2rGHYVHX
-lCQE3vsxHEfk65tRM0nst6u4LR0W/XwKL+grhUvowjRa04PcLm77FN21K5F3
-emPc2Z7ivgFEUO5kzK1K9NOpLmDed6HXDKEB0YhsTQhKpPtqfqrVyj3mLoZi
-XKpNuYZX4j3zDozI4MsP+aZrCMJ2Oex6bte8jD5alZDGrSPo0zbM8tfVOuyp
-tr3BI1V7APd/msdPVK12hZ9fcxw+vzPiOq3FyBIOKC9PNqhzWEbA66yhjEsc
-NUUn/baNg0GrtSsmVQn/6q37WESwTXEakc+pqKQDdRy1vm/fxX12n3eyy+EK
-EhxQTN5309VKqLTVv4u+XpcKO+Cbg68vvLJub59pfbakglSy6YDji9wt7wmg
-K35WaL2d4a/LOckPvcUiUjdKp5AabIOyurtjjHZJk0D5CGXfqoAR31bkMX/9
-CF7fl3wFRtWdy0in9w03Du0ET6IzS1/Ou5DRNI4rv0l057rcW4YNosD1EM0p
-sKZn6ricw3ArPDzB+yat39ZTkbOaPNSfcNY5PSGHgMLegTcC0dutdk0AMvWy
-T+hDXF/ln8sXByxAQLMltSa5hN3kCHvhXjRX3c319y9pg3F0XVJpGd66V++c
-fB5ivl8kZli20PSfvXqPvviZS3VP75X6GEFFvv0kOm5UyByFHNmli2RbVt12
-EeNMX+ZcLNpHEogFLKdYfvvg16pXw6fSOX2m2Ps4Jc7X8Vlrk6q6J2JV245G
-xKIOX849jNfqb+B/cXFtELWeW+GwJW6dhrYv66IdDB+NvjFvMWe/GXFukNXk
-s6ffn6VkccgffkGRqBmypsuRhFZc4BhdobijLRHuVUrB6KuOOMlj5b8D7Ium
-wy+HjWFtHjOC/j9jxdff6aRFWJzZu3APPsdFMm2ybdyusSNzZ6kRHOnz23x3
-UZNjNcvvTcxt/mBHk9xLeUdBfMPEItnjrRHA++adWwp2kaZxujGbC1/tWMJu
-JAL81k4cAYEAT8FY0Vb/JzBtz4bfRGGTTg+CTdXZTKPk+wAHFLiVdoEnkZfu
-K1jI2Dvm3LHUM/7Kd3KfRsxpT78T7gOnOoT1L5Ur1wfJWcxrzGORyHaDg7LX
-HN27Tb/AsjFcWqQ3ZjamUqZW0YSXYehEqBQOq7xRB/JXoiExvekuDtNYw49D
-FhtS8DlWq5feEYdktf7gUyZnXmtg8KTXFR427M9+QFcVv0YGXBy3CvNF1y1e
-SbzLpTyDezuGNOXbRlj0guSo3Kgs+sAYBY2rcCN2/kmI6aWl4p1Zc6RyaqS4
-hX50ReuZcF40u+Et6c+D9TK6SeIv+wn8ODYsjGT8HU2qQ+Oav6AwlY3eQ5PW
-QIdAJiLZ4DZUR3Avy4VkIosjZv3iYR2MWU3GUq1zsRPPq/zoDK8CQgpRlZTY
-q/gc82p33Q11/Ee+Ut6pJ67e19ifVJx7QzzSZHuuIS2+VefvKvPR8zcf/TB7
-8+F09EeOafjR5AfpycnWuWB37LPwSNkevMDM31XK0mZbso44HLMbcIFqDcfU
-zHejOPT5ynR2ZNGSOc4TtOqtmCu8hEGN1G8aCHrU2FHo35pRQvLWW2AWL+6G
-e4rVPRj7nfxUU/AJXYx7Wr4VdiR52HYpCm4xahmhkBEjrMrZIjwUYaZADvMJ
-qCtCxunQsR4TwUubCZWaXwni05RMTg7Te6TC8lxkQN6cXipG7uMIVD5B4Ov6
-GRx7frpPkRToD+KLAjiaMmayM5f260zjg/0X15doCOx9VsewPxt7CV4aoT1w
-30Vz6a2gJwajTCN0CA5QDjAHnpeURcGfL3Q8+BasngEhtTNJBpGuwM7Q+bNx
-6rMFmavboVcmzWJ1Wg9ub6j6SuRUS2QxW2GIzQkcinxDKNQa9uPX6U7UHRgB
-p0VIH5LjJqRQ1KOzk3bxZ1n3RVqYTM5YELAGRw2DfBxl5zji4OF4dGgFzlSl
-f0nMiauS5HGsHSajzegYmCiMyboMViOHOm/qjrmUBAwYn/qrcaG0mIDP69CQ
-RLPZG+uYG++McUtyM7Z9V9gmvZQ7ItxFmZ4BWiXc1FT3OrwCL8ikgHfte7AP
-mcNhtB/YIPOKTuO62prlkU6+p3f3VXFDLa4VXO+xWohpKh8rP6Y1LWeGirAE
-87cTFD02czN9+VCJwDl8xQBuFF4p4PgsaEBCZuWQxzcYqgGzRkQ7yHusRMLJ
-fOZhR7XMZq1oYJdBgeVKyIvTpd7QWINSFb9p7Cf8SYYFLuaXqHS/sJF6+0q9
-GgnbfS5MY/V7mZqpoIClsLSyJZQXq0ta+fiiePG2Fm1CLkjV6wmjQV720bGi
-pPgHLlLzyoGELS+jleXHPBXgcpyHVfVr1ifuIzFkQsj7MRqDhhACoxe/q1Jw
-+FWzivIJLqpxFdZ+kzN3bsi0IdrS944pFR3eB1Ij48LMpxU7lnKPrvwYvtk3
-7Y8DqWIkhUtxRyTXkduSvtK6jxk588K7BlWyUT0EJ99cT/80GvoCRrIaCXsY
-bPYPLzIR4XIz9b2Ljx4ORgGPa6aU27J0whMw8Awpe3eYl6i431aUxDRqacRL
-Svz85Bi5UQOrSEaFJCNkeHee7MxIlsAGKUe3IDsZhB1B8Y3t2k3yx3oON4/i
-5OkFuX7dvauN2FczlQJvLh+EnesNsghcVrkoSxvKFB6pfgu0ZPYdKtkq3viK
-1tG+GtymxVfy5suSSdNBBWku1VYy6JKJ0pHh0JRgjJX00uwLi3T73kdDcQ13
-8XFy8ss71CQgIaMTo2p52O5oJ13hPBfpcD9kYn4/gEJSDv9Ny20/p+5i3M5Z
-Y9HgtlWR/q/FLzl9geaWwMt20SZ+cvdQMVV/UgGm/AFU9wrkgpAd6z0MBVzS
-1BKihLHRzqThyh73A45U6laRtbqfqRMc+rNFMQKzfBcPC0uvLrzjmhVe0OWS
-imoahbc+38myxqhec8nBigmLCBuv1978GmPeV9i4SXAPsCPdXuaKB7NXJ9sw
-HI/kSe9SMo1jcwx8h3XE3Ve4MQprXmBFlv1qLKZp7VSnu//tk5OwqU7VUekx
-atGsfmECamDr11dM1iMxFu1E+I7U9u1rjFdKuOYjLIw4BxpjO0hWRAxXyuyS
-RzwK2RsMQJmI2puoXEsna8Fh5TrPPOFjAnTLxI14wVxWyfaqWRS5a0zcDuGk
-Po2iMjQ6W9Yj9kMVMQb0qex9jmSffOuaczsLiuZ2YeCBAuRCJ5i8Scm7tJnS
-FcH6l5pkT3r3h5zesDCmsR4M+JcqkD4xVIfsIw1MMT0O6w3n1mBnuz7FJ7mU
-L9xSHfhfgK6d4RCKstP9wna2i9R7x6PnguH31xEXF7wfDFQRZ4lL72dbw/0q
-xHfQLxeRzWXjp9yHpYNZLlqpEAHDFbN2tXKdLnt+cVVpzQClFOEFj2YDJzXA
-ZfNyf4veReAO2YtFRZD5dyw0RJq328GTXWlGwxkxwsCGLDfLYOAOxLqN6p4y
-nExfAJlYhhyRUrWfTD1M+3AnYxJlFd2nvj320uiLHpVhqrUrCpi9O5ZLUOmb
-DK96UvCPDWBZxuBiNRYJ9RN1+0GwQ3PpCv20sTzpVZEki0VkwjxXe4qWx1BP
-DvLWCtcW4EOtgxZcCX93djeH71hFHuFu4tsf+wzJRMlP79dxjY3SERZKbZRv
-k8JpSV22rtZXWX2wnX26vZyj23LFi5YF1RWMRTP6jPKDKV/EiUxdfDFm/bqz
-8RSxdQums7rCzRr9lN4dpmPPGIygBnYkKJbWMqgl0IGYEh3OkbThkIP30c4C
-4yGcutRSY8GIWypVmHmNce59lUQPr4zFHuisXr3IvH1RmIbzYnR9l+jHtbtL
-O3FYSjeb+yt3XSvHz6zi2pHHk6dpVCQUPLfsT18AcSBNBVJC6Y6qfKmBSRVe
-s0aXV8/Z2DEnbJ+QQIDtk1gdv4Q2xi0SRlvKhp2nOFL6b7mMX7Rs0HlpuvxN
-u5yRctzw6iRyfV7yXPO6tiMwyWKUY2y9uJC7RUj3nIvrTI03Gpp2Atcu4hTC
-EsHV/wSPkn+FobKO8eoLmPiAfzbaSRASIH9kBMM3HmnwGm3W78bv2e7O5/sa
-Nv476zFFLwVJXPyrdyas28s0S2uJP7uwSrvWrMg0Z27eNNVvLLrlNUSA9/0q
-iu1sfXHj9fJcHCKtj1q4FEl37mUKSE61vy8gky2sYKbEIzunYyWSqNBx7u+C
-eOC79uL2584iOBdfpVxV12pdMlwNgeu9HQdTLQ+E2TUjiHpU2fX3mnsZdm9w
-OzNL9G+W9gxzkJbGuKuWZ8Z/divyRPM1TnjaGUfuLEjKHOFUsuLkp9N+rkft
-c3yiWdZECgjzpyq4Tk907XGwv3jOwSkf/s61LGP1VubxY8iXM6JIfXpqcXqS
-IoUjieuXwWAl/pKOqaXwtdv+HJ/nN3l3kjvPr12ZEUx1kBq6we9zh1v4z6Pg
-KBYNOjDcbpG5MsXl4cSOYZpur3RbESdU9qx8dTYEv+FfYHk6ddwWhle9mKtv
-5yhoEZAw6hSzMcT5lCV3JbLQlnQ3HVGRDmPx7l6xDRUoLOSlqfI2peU0H1tT
-3i6AgmESrvSuPuGVDd1AFZM79fLiiT2GkgyJWzkNmG+BCyHMokC4hmWhWist
-/957/oivpDC0lo6udMTVBknI9Ha4Su3y7YlGnORrLlkMb7llo+935NnGSlLr
-i9p0GPGEh/jnGwwfsmlTbyGjj3fWEtmLH96iTvF5j4mx0SW3BVE4i5/mQnxb
-Y97Ns88IbKrQUeC7qtB87AvrPfapewXzJWSwgOD6XIRCxGoJ/h2sM3ep5phz
-UL+oHDN9ytz7upnQj3iHTDrVZmpSesEeQYj4MieGwjtV54kQsExTq3ksnhl7
-9NiEnyltFqcMq26EeqNworfp9rprVrDP8izw8MqX7Y6PaGP9kBrSkeCcTi4a
-8EXIcEYlbAVX9tErrLvY7GrPRKGeGpsATfdwevSBGyL1K9rhJk1YpboAQtS2
-DxnCJRZMx0n8tVqa5CfsdyGxjmBT6K3tP0ZcRJthaJ8N7+z0ZoG+KuHUk68P
-TY3UvCfmQOFXBT9TyvXXeg9a/5jqfK6JXHRlsIpVKgV2Tj8jp2FYf74fJ7qP
-5ZQ1v1ToLIb48/UQbzeCw4myFo15mEet1kttz8EWkYnLjMmm6fSRHNy7ahg4
-Av/Y3uW6bxbf7Aw8832FcN4gi3y2WY4EB2+VD0vvUw6oL6VDkN5dClnLK3Xc
-N3FIfARoIlcR2xjNd27yyhW6uInjnTHBohddj5zEraF01UzM+aXYrAyfkY/X
-NiT69bJ/KbJMm7MkegoIugzMMKI99kNp7easUHst7ihFcDAPEzrxI84dBf0S
-glZjSqeswqO1u+cnDcEZnXjewLBs9FJyEGDxLcta//UhFS0fng+rZG+vcfjQ
-CcGcpUPoq2KmuCv2F4DhJzLRrybrD5WvBQlrC9UcQYSt6nFqCy1X89Q7eSpT
-undFBzJkIgIFFwakpg8acyAWnjc/4qkx/UGPKzBHFkLIeT2ZH3FSPFWpMHp3
-i3OrU6SMM3R4Y+0fpvMN8sW8xeLJS/YW4+sMV2TxhDgSJMRF1YFZ34a5Bw42
-3/n/ehNHxUO5825xT5lFzIWgnW1QRFPGG5n45SRvrMg5bA9zevRiwotyjQ0a
-GrGAqs2rvJxXGJf3wgwa9DGnTZ5Om+H0ip6EDh6c1jyiCtu4W524Oza7eVFq
-y6YyEq0niZFTRQa1mhpPLv1fgi9iNJ7pgwuY7zOitztRFd5ZTCe+XQ+4R6Xb
-zl8b0A6pTLz7uKo/wlmJwMctL/mOGbV2FAZex7BgxAmjYQ44v1srX94mQI+n
-2M4l+vljvssUCC0j/ueba3WF/gtM4710euy3ryF6WXCP6a4xaLirZZ+pa6Nl
-XlYEa3js24YEK0dK+gVOfE3d55pu284cjN/nF3nlCBOP8sNQnsFk9Zc7IyVh
-ndBGi8NCnl6Sg2piOWoxABAhFBxIBTcW71RIxIWsaeiiovs5AU0S5kFdPl+d
-OLXXyfShL+hTPND0c2SvUzkcYHemBC83Sj1QsK8FtiD92RKmzK4rungxMm81
-AaGT2cCjY34BkOJEIas47gcQwN0VIgstZWGJdUTBQvdezpb/VF7jNt/tNphO
-uCJrmbqU7+/p546mvZj1aju7WItYPamDMpOxXrHQ+WgY/SNp16cXzaKfYRcH
-NrTJthglNixyhEcOlG8dxQo8prD84/XNtZRwgp+HLn1qJHeSnzYl3grMVoKH
-Xj+uV8KtE5n34+Ovlzko+Q4N4FiK9BglDBHx2Ocy4sZtHGdmKupQFvf6TcpV
-zFwDv6R2sOUYHQUC+ZKf1S8dwy/eI5uBZrFa0JfWj8ScdOk+48E01oZHCxYc
-eLmeMkaRvMsfwEsU4gyreEWQGvaOintzQk2CdIZu3buotkki/GTJq+9y+ypN
-HkPsDPdAH1N9ITh8IVU6s8gB3bF9froif5RBbuBIceJWIgAUVfLTK8gEEMOW
-kTlR+TJGe4UDkkyLpeFQt43T/vHOXoUi+6fgpluiKC/yg2EKptHDvp97OpyV
-ILQlodgQjYJfkD0i2y6KWN8Dc8nXIIK340qZSsvNl45LibZ8T+wHJMXXYgpy
-gteZostKdKyRZk0z0aK+D5X2BVcaPQ8ffH7Bo02iRvJukm+VHry2mB2dSZAc
-Wew/sTvX0OeuAqhpzj6Efqc4N8+r/VKoWkymfe7jua5VgTP/BSKGZDB7nm58
-KEbbcNaaRyjEhCWCeF384SAKUTEDXoat+rJZxnoQVqsXRKl9OGPkncFwswaw
-UZGRMKkq9OCApNirn/r0BKWM/BRokcEO4DdzX53C1e63dunQ9S639tF+5Qns
-ixPoeUlSqxiK6ODOliGkeYE1XevzsUlA6fqBo8jeiGYauJJgfBsgu5c43mD8
-wD0vbprbYi9xdF3dKtTB2Zdsk820NV5OXvONYF5zIe9dGcf+TABQMpcvkHEL
-kyXbbp0xhs9sWg7pzqzJ465tYqye7HsEtdN+M7gwJYPtw+HJLptZgbYIsX5R
-D0Bnk7h1tIMbCUtk4+ydTSd1A7tugc2maPT0phrXtHDw6wGicxPRstDW4jUL
-T36dt5bSQLISVV16ExvCDKZZsrfoBsVZ5KwiM3LWDnz56D2fwXhTWN9h5u9R
-wyObtm2zyXnszFtsqw/jZEQ26A+RgQTnOCfJFReLzt1xFMbfz164xPlE7RpG
-rfbvHXzr1/4ohhNRibu/w/E6I0zox7d+40II73TchyhBjcyZePmjyDmYiCwM
-A46JLuf0p7Zlm/Nfr2xivkuk0o/0kMyVdbb4n0QRaqw8ixKlz87NSFXIluod
-LJklsf0fvlD/f4H/JwqY2wNNXcAgB1MXO9T/BZZAZIllbmRzdHJlYW0KZW5k
-b2JqCjEyIDAgb2JqIDw8Ci9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQov
-RW5jb2RpbmcgMTkgMCBSCi9GaXJzdENoYXIgMTIKL0xhc3RDaGFyIDEyNgov
-V2lkdGhzIDIwIDAgUgovQmFzZUZvbnQgL0NBSUZZRitDTVIxMAovRm9udERl
-c2NyaXB0b3IgMTAgMCBSCj4+IGVuZG9iagoxMCAwIG9iaiA8PAovQXNjZW50
-IDY5NAovQ2FwSGVpZ2h0IDY4MwovRGVzY2VudCAtMTk0Ci9Gb250TmFtZSAv
-Q0FJRllGK0NNUjEwCi9JdGFsaWNBbmdsZSAwCi9TdGVtViA2OQovWEhlaWdo
-dCA0MzEKL0ZvbnRCQm94IFstMjUxIC0yNTAgMTAwOSA5NjldCi9GbGFncyA0
-Ci9DaGFyU2V0ICgvZmkvZG90bGVzc2kvZ3JhdmUvYWN1dGUvY2VkaWxsYS9l
-eGNsYW0vcXVvdGVkYmxyaWdodC9wYXJlbmxlZnQvcGFyZW5yaWdodC9jb21t
-YS9oeXBoZW4vcGVyaW9kL3plcm8vb25lL3R3by9mb3VyL2VpZ2h0L25pbmUv
-Y29sb24vQi9DL0UvSS9OL08vUC9TL1QvcXVvdGVkYmxsZWZ0L2NpcmN1bWZs
-ZXgvYS9iL2MvZC9lL2YvZy9oL2kvai9sL20vbi9vL3AvcS9yL3MvdC91L3Yv
-eC96L3RpbGRlKQovRm9udEZpbGUgMTEgMCBSCj4+IGVuZG9iagoyMCAwIG9i
-agpbNTU2IDAgMCAwIDI3OCAwIDUwMCA1MDAgMCAwIDAgMCA0NDQgMCAwIDAg
-MCAwIDAgMCAwIDI3OCA1MDAgMCAwIDAgMCAwIDM4OSAzODkgMCAwIDI3OCAz
-MzMgMjc4IDAgNTAwIDUwMCA1MDAgMCA1MDAgMCAwIDAgNTAwIDUwMCAyNzgg
-MCAwIDAgMCAwIDAgMCA3MDggNzIyIDAgNjgxIDAgMCAwIDM2MSAwIDAgMCAw
-IDc1MCA3NzggNjgxIDAgMCA1NTYgNzIyIDAgMCAwIDAgMCAwIDAgNTAwIDAg
-NTAwIDAgMCA1MDAgNTU2IDQ0NCA1NTYgNDQ0IDMwNiA1MDAgNTU2IDI3OCAz
-MDYgMCAyNzggODMzIDU1NiA1MDAgNTU2IDUyOCAzOTIgMzk0IDM4OSA1NTYg
-NTI4IDAgNTI4IDAgNDQ0IDAgMCAwIDUwMCBdCmVuZG9iagoxOSAwIG9iaiA8
-PAovVHlwZSAvRW5jb2RpbmcKL0RpZmZlcmVuY2VzIFsgMCAvLm5vdGRlZiAx
-Mi9maSAxMy8ubm90ZGVmIDE2L2RvdGxlc3NpIDE3Ly5ub3RkZWYgMTgvZ3Jh
-dmUvYWN1dGUgMjAvLm5vdGRlZiAyNC9jZWRpbGxhIDI1Ly5ub3RkZWYgMzMv
-ZXhjbGFtL3F1b3RlZGJscmlnaHQgMzUvLm5vdGRlZiA0MC9wYXJlbmxlZnQv
-cGFyZW5yaWdodCA0Mi8ubm90ZGVmIDQ0L2NvbW1hL2h5cGhlbi9wZXJpb2Qg
-NDcvLm5vdGRlZiA0OC96ZXJvL29uZS90d28gNTEvLm5vdGRlZiA1Mi9mb3Vy
-IDUzLy5ub3RkZWYgNTYvZWlnaHQvbmluZS9jb2xvbiA1OS8ubm90ZGVmIDY2
-L0IvQyA2OC8ubm90ZGVmIDY5L0UgNzAvLm5vdGRlZiA3My9JIDc0Ly5ub3Rk
-ZWYgNzgvTi9PL1AgODEvLm5vdGRlZiA4My9TL1QgODUvLm5vdGRlZiA5Mi9x
-dW90ZWRibGxlZnQgOTMvLm5vdGRlZiA5NC9jaXJjdW1mbGV4IDk1Ly5ub3Rk
-ZWYgOTcvYS9iL2MvZC9lL2YvZy9oL2kvaiAxMDcvLm5vdGRlZiAxMDgvbC9t
-L24vby9wL3Evci9zL3QvdS92IDExOS8ubm90ZGVmIDEyMC94IDEyMS8ubm90
-ZGVmIDEyMi96IDEyMy8ubm90ZGVmIDEyNi90aWxkZSAxMjcvLm5vdGRlZl0K
-Pj4gZW5kb2JqCjggMCBvYmogPDwKL0xlbmd0aDEgMTE2NwovTGVuZ3RoMiA1
-MDgxCi9MZW5ndGgzIDUzMgovTGVuZ3RoIDU4MzEgICAgICAKL0ZpbHRlciAv
-RmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnja7ZNXXJPrssbpRBQE6T006b1Lk947
-ilKEAAmEFgihhKIUQUGk994hgHRBOoj0LqgUCb13AVHqyVpr76Vn7ctzrs7v
-5MtF/s/MO/N88044WAyM+RXtYDZgNZgrgl9YQPgeUFnXxERYCCgsICSkRMTB
-oQwHgxBQmKsKCAG+BxSWlhYBKrrBgSISQGGhe2IimC8RB1AZ5oaEQ+0dEEAu
-Ze4/kiSBii5gONQW5ArUBSEcwC6YGrYgZ6AxzBYKRiAFgIrOzkCjP054AI3A
-HmC4F9hOgEhYGGgHtUUAbcD2UFciwT88abpCYEDJv2Q7T7d/h7zAcA+MKSDX
-nza5gRiTdjBXZyTQDgwhEtSDYbqBMV7+N2z9s7iap7OzHsjlj/J/Tuo/4iAX
-qDPyXxkwFzdPBBgO1IXZgeGu/0w1Bf9lThdsB/V0+WdUEwFyhtoquto7g4FC
-f0lQDzWoD9jOAIqwdQAi4J7gP2Wwq90/PWAm96cDQWUlZRUVE95/XeqfQQMQ
-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
-0yo/U1WPJ41inJaf6o581jiN31e5CtCzc4hkxj+SeDp21u0yWNXTCipm5qia
-S3qYX1dmm1uU3HV4SZzZWpbkYJ9IYQo2XNKVOvpgTE60b9GarReMD0J4qOLf
-qPy++iWSl0t+wfeL7ISU0YOXl5WZ/abxvAXlKqSZdCMxoyXfLGeJcUmsajLl
-Hcc/tM+tvUCiW86jzf111KrvxIZtU8IeCK7yfgMgzwQMBVPKnlRSDN2+HVkY
-tAPdbyDAqopLcOTra3HaR6vuX7ily58lbrlkEPcU4UjMKCp4CvEF5th8gE/R
-iqmLpXxakX4UrJygNrFsNfPo0FeXlWpcJWbX8fiJCgcclGqOc35vgFp20zJz
-U//Iqp5ivCwlxKvi7nuZRLzTYFhbKG5FUT7I1rdAmsoxqiBplyjTh1lQDX7W
-1revx0de5NDWjbyYeijHEcSekZhBrVhv8k5ZtbGle/5qmWuYKn7n9Sgb+cPM
-CYOAUfnt701iF3Zk6DoSLgGGiMiM1bmXsjt56XqA8xffY+X38/zGDzwd/Prj
-4yhiKvtXCd7sXyxSmNw9Dsn4iSO0Uz8SUKBqxuecaZRJoo2YVO6Z8s8l3Ii0
-l3FHQe1fleqEjfaQ1uACFiLw7tRBiZlqRZbJOKjIhSj7q03OBc/yaJjWog45
-NX1ohzpzmvSG/LpHfU28KH+o1pyEJbmsHVuGhVcewHfPNUT56UYgqxKou7a6
-t9VyE7T8e0x3noW+55GB3yZlt0kwv6XvXgkBnroXNpKa+Ofi0TMAWXBtqnT4
-N9vIdyzGoofouVZpv8aRFjpkbD9DLzfhRTiPUHtRCEQJAuXU01vbaMYtgoJI
-4hD8+3qqe6/jQ+tILNfxPbYC8b/OORNGXdJtaqP9GHLGyHE/+IRE59il3eek
-kwHDmrMJKcsIPAQM68xk09X1nX3j3oaoja/GewU/5mOqN4Mn3TWE0crUWcRn
-V7ODOQ0e5hUdejxI4fGM3pj8XFLPKtqbYUpEfspmnY76UuJvItm+/ID0dnts
-In4OIwuj0VVwO1NylaOif3cK2KhkEjmpuM04EtFf1tA5b/HNPv7dcwKIWIqj
-cF67Rm5O1cMiCzVH5rVbMZfc8+4TmjAFRY3oSPUsPq9wShnfAySfQQfH+FLz
-3me24Xm2BCYRJzO14JQ47EgLCe5ww5glCc6OQe+O8tMAMONCwPmi21lHecrN
-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
-p84x5J1bs3S+XwUFzwmLt/imBn/veO6cPIMarXfRrJOYCvrVZFdCeqcubrKr
-zoQX3UBvJ1gybLO5JGmD4Xmb43M8nCvOGBsDz6clY6Tlq6Qs66E/qa83YiDD
-gFvXX7XO1fNkGRUZr2MpHjmWr23ZXiOeTUVSsbi8uxN94rxKOgw6EsSLEaPC
-NRSRGoqgpeavmF1l6IM4PMNiQE0Qh8/xDh/CoDJkCs+IIfO18arZhTMCoRUb
-7W3pEx9PUK+43RXmQRc6iWJXNg9VLpizrlvkD8duxPmNRmwYf6+rFm9p324T
-a+xkASxHKlU1KjK+cCMMRmDJD9ClJIr2oSxo2idlsZ7UtbZQanJrg8QePYpa
-ZWZnkRzcJB7I50ZLL/UArr2MadF2fIoKoN1ZigplVjgxSWQ5svQmJ3WynmAx
-G/qGX5Y4U9xgGGtYd3nlYI3MZOtuXDTF51pW0weI3K9v+lkY58eUz8wZDGux
-HrxGJN5iVs2HG+0xXkYWuZbV+1fhUPoCR3hfWnwzynU63GYT6yR6yZJ5mkhl
-wUPyfoCRuHT8eUakcLjRGdk9vfYZ7L6CmpgxLx/yNEt5pS9vclWkvs12dwmF
-rGZRkAQJail8eak5wCrwzkjzNgkZ3/w2a7vmmu8eNEMpHD0AERwLROD47YY3
-DOvOdRk1K1gzG80qFbAleYKZhuQBd8HN/o8l+Tf6sw4ogqS60KtGLwG0W0Kf
-0ghToqrcknofmBJavarf3NQRX6aPSuRluH82shSnUx3xuKnf64J2pS6MlL4I
-3CKS3/S5/k3+2zBvUc8dkiYlk44ZM47bduyo/jXbq5c6ZyzNbKEeohOn5/gE
-7b5FuxOBH/PWQxQWXuo6tJqBlLJGDxj8qf0n6g541y4znDS7F9Dlj0hP9mZK
-PtJ33WrOlL0JljWW1/DMelsc3tDL2n1V1dY7k5WUXki1OW1lZvcdegb2O689
-c2sWLP0484xvEkkDJuiLX/WGnt/iLnslCNyq8XWjrTGwDLKhP5d5qLr6pNWM
-hMt8CYesGqumE9uSL7BhvoixUXQDMsEFh9AiFMRdIqFTyJVFWWet44MhBIF3
-tasI9rpDm9XlCYx494aIYSmx7gv0LfeoD+ypP5N2/Oid371RiQp/MnCXsDhF
-FfW6rijTjbgLJV5jIzF4UjgVLLmWwfmyShVIkjavs/v1ijmKqwoZFs/Wcdsd
-8g5Pl9VBv4w1KPcLPOszvo80WZiK0P/wQ/T/Bf5PFLB1BoPgCJgLCO5E9F/h
-LatfZW5kc3RyZWFtCmVuZG9iago5IDAgb2JqIDw8Ci9UeXBlIC9Gb250Ci9T
-dWJ0eXBlIC9UeXBlMQovRW5jb2RpbmcgMjEgMCBSCi9GaXJzdENoYXIgNDYK
-L0xhc3RDaGFyIDEyNAovV2lkdGhzIDIyIDAgUgovQmFzZUZvbnQgL0NCQ0RE
-VCtDTVRUMTAKL0ZvbnREZXNjcmlwdG9yIDcgMCBSCj4+IGVuZG9iago3IDAg
-b2JqIDw8Ci9Bc2NlbnQgNjExCi9DYXBIZWlnaHQgNjExCi9EZXNjZW50IC0y
-MjIKL0ZvbnROYW1lIC9DQkNERFQrQ01UVDEwCi9JdGFsaWNBbmdsZSAwCi9T
-dGVtViA2OQovWEhlaWdodCA0MzEKL0ZvbnRCQm94IFstNCAtMjM1IDczMSA4
-MDBdCi9GbGFncyA0Ci9DaGFyU2V0ICgvcGVyaW9kL3plcm8vb25lL3R3by90
-aHJlZS9maXZlL3NldmVuL2NvbG9uL0EvSS9icmFja2V0bGVmdC9icmFja2V0
-cmlnaHQvYS9jL2kvai9rL24vby9wL3Evci9zL3QvdS92L2JhcikKL0ZvbnRG
-aWxlIDggMCBSCj4+IGVuZG9iagoyMiAwIG9iagpbNTI1IDAgNTI1IDUyNSA1
-MjUgNTI1IDAgNTI1IDAgNTI1IDAgMCA1MjUgMCAwIDAgMCAwIDAgNTI1IDAg
-MCAwIDAgMCAwIDAgNTI1IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
-IDAgMCA1MjUgMCA1MjUgMCAwIDAgNTI1IDAgNTI1IDAgMCAwIDAgMCA1MjUg
-NTI1IDUyNSAwIDAgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1
-MjUgMCAwIDAgMCAwIDUyNSBdCmVuZG9iagoyMSAwIG9iaiA8PAovVHlwZSAv
-RW5jb2RpbmcKL0RpZmZlcmVuY2VzIFsgMCAvLm5vdGRlZiA0Ni9wZXJpb2Qg
-NDcvLm5vdGRlZiA0OC96ZXJvL29uZS90d28vdGhyZWUgNTIvLm5vdGRlZiA1
-My9maXZlIDU0Ly5ub3RkZWYgNTUvc2V2ZW4gNTYvLm5vdGRlZiA1OC9jb2xv
-biA1OS8ubm90ZGVmIDY1L0EgNjYvLm5vdGRlZiA3My9JIDc0Ly5ub3RkZWYg
-OTEvYnJhY2tldGxlZnQgOTIvLm5vdGRlZiA5My9icmFja2V0cmlnaHQgOTQv
-Lm5vdGRlZiA5Ny9hIDk4Ly5ub3RkZWYgOTkvYyAxMDAvLm5vdGRlZiAxMDUv
-aS9qL2sgMTA4Ly5ub3RkZWYgMTEwL24vby9wL3Evci9zL3QvdS92IDExOS8u
-bm90ZGVmIDEyNC9iYXIgMTI1Ly5ub3RkZWZdCj4+IGVuZG9iago1IDAgb2Jq
-IDw8Ci9MZW5ndGgxIDExNzEKL0xlbmd0aDIgNTAwMQovTGVuZ3RoMyA1MzIK
-L0xlbmd0aCA1NzU2ICAgICAgCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0
-cmVhbQp42u2VZzica7fH1WgJEr2EEV0wMxi9RA+il+gxxmAYM4zRe4uSKBEh
-SkTvnWgRUUMSQnTRoxNdBFs5k73fdydnvx/P+XSu88yX57fudf/X/17Puq/h
-5tAzFFK0Q9vC1dAorBBYGCwNUNZWMgWLAMDCIHJubmUMHIpFoFEqUCxcGgCW
-kgIDFD0cACIgAFhcWlRMGiJGzg1QRrv6YBAOjlgAnzL/zyQJgKILHIOAQVEA
-bSjWEe6C04BBkQBDNAwBx/oIAxSRSIDBzx3uAAO4OxzjCbcTJgeDAXYIGBZg
-C3dAoMiBPx1poOzRAIm/wnYerv9e8oRj3HGmAHw4k/wAnEU7NArpA7CD25MD
-ddC4WnCck/8NU/8UV/NAInWgLj/l/+zSf6xDXRBIn39loF1cPbBwDEAbbQfH
-oP6Zeh/+lzklNPI/ymhgoUgETBHlgIQDQH+FEO5qCG+4nR4CC3ME2EOR7vA/
-43CU3T8t4Nr2pwGgooH5PQPN2//6nn8u6kERKKyRj+vfsj+z/2TwL8Z1B4Pw
-BliAhEEgMC4R9/v3m9U/iqmiYGg7BAo3EBBxABSDgfqQ4yYDRxCAHxiAQNnB
-vQFwb5xjoDAKjcVtAeBaEgCwR2PIf35OsDgAaIfGIuHu7oifK38FpQBAKAzX
-ub8jImIAIAxuh0AioX/HxCAAoKOPqyMc9XdIHLdR9W+SEAUANX6RBACo/TdJ
-ggBAvV+EyzT8RbjM+79IEgA0/ZtwMwT8ZUEKVw/2yzYIJ2r3G4IBQPhviCvi
-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
-q7alwCYnSvW4rbI8a0d05O6MUWqKOxfFfM0dz3ccU9du8lmICG2EudEv81F9
-OQmjoF/P5RYo3OPZz9sspevcqCSM6geZu74owMpfdAmEXa2GQ5eefjr91EAr
-n6WDz/5aQ0rc8dxii3ZMHxqofETd6rbv84CWrhwTPcoR/YD95ufxzq/dOYhO
-VayKer5w0FaLOlJoXIJR7yUUv283qKLetTSfTv+RnLP2ti2nVtIqhfXm9SCI
-5T5jGQsB8WjRG4UrZPrk/XS0CL3Dq4c8Vwb1zaoJQFm73sP5hmN3/K1Q6S7t
-jrs39d8kcDiJj9y+uNLBU5N95e1G3gmStfeEy0Da1ktLwa+H2OEBjNu55Zvo
-0xw9yCuM/OoLoaDU1InznanVvVvxZqBCeKSNFsRtNHKjm8s2Autu2r0+mpHR
-ClKqluFQlL88O59mJMXnnIizMLzXueZxFhSqUKxuu37djSjWtMsmY6bVOPd8
-8gMNYu7Wk2Avr2RliNUcZ62ivmEHlWk1xVbotn3Vo+G8HVarF1l8I5RyXu1+
-JHQq/mEz16RYdOE2r3R8N0Q01iJ94fR+Isr0jCDddYWqxPNxtu5gHypdaIUp
-16YcnT01/lOTwq+Sb/PtqbvxWpzwKx4vcra/27t+3tpZHu071f9a9Q/2PT8i
-PG9Td2arq9NqfHgu5XZMcWSPYpUjFdOuvF5Sf03mWU3lW3gc+ODN3aC2LHK+
-HksJ9x30Qf0ZzHgg1CuoyPuRzpetiiGbqM3KiogrsqzB5W9MsZBZNsp8EiTH
-YIFHko0ecdIzWeLJlRF86W/7p5PFJm9KUPWMX2QlHtPnuIsemozgtwXdq9f3
-XUEwwmsZTJedGB8CH4VHxhm8MX2zb2hQmMKTWEPda8/v/ujjGlpW+gFeUpXZ
-umsIN1FdnovLI6IRDY3VCtF65/G6dAFtvbdRRl3VLN79tUMoKZ1PGI6rpJHA
-DEvS/EfDjcqM/aot58TeawsNWuaQXC32O3RMlqDyHWJ1wntGKimSDQ6KF3JC
-VbptWdQCUD6dy0Z148G6T6fRrSfo1faKo/OVUKISYHFzu/lSswrZsk8GtdeH
-rw4KtbfjxV9pP00lN69wFWSODDe27QZoEnkptTWcuG2xfZ2QKeIgVFxau+CN
-RPagG8VDKnpIBf1HEfbzhZFB8XnyZt8MWONTE7FkBFTJNM9t0xWfxZgfl75b
-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
-HCEO2tRcS2aUl68fXr83zDLqxs44CZ6UCslSS23yAkWa6pektesdmmThuQ9Y
-51oXo1LcC6Q6k+/kiKNvX3uOL0bJGDlVQT6H3/2gwrHB+8S+pW7S7H54cRnt
-fOlng1XbhJiMwS1E3T4nYZXGrqt1UM4S6dQ6kDxB87RneCj4/MRX3ETv+KX5
-NYOzu29yj8VVCdZnz2rsL9ID8QbWwObNTtCAE+qOg2rqTEvZgm0HIclKbbME
-gt1xvmnFu1dt9BgOzWkFeWpn3S8NYQYLBVLcLu3NlIaYFVeFCwZ5umBG4UW6
-uOKQ6U0pixoOUfEHsm+t3sQYa5D0mGOYuux++Nj4M172F1euGL66v3Q7by5i
-G68Y7WPvcb9VQNkRFcKw/iYJr/vVZ0sll/cHxLF6i1iCge9TdCJE159aGkV3
-hL0FjyAnXq2usDNF3Dl7u6kndBx7GXhQbgHuKuuhejZ2qKw+H3P/UGZTsMNs
-Y7lqojtb5epy4Xe6qGBAm1OBgfmpcKnY2cAhCs14TGB+T+QWh6vancZ+TJe1
-xErnY3Xrlde7mKRu57u3pn2cQtxyQu/lL+zYsj0hkq9eaAl8wom0l79bYk35
-fskk8IrgslR1pL1tyRLYH2KWtCsd9hoTeQQTsKZz8Dz4qN0xtcNn7ehgOlbt
-aXnkTfK+6xTsSlrkezvvoQiFv6rtlJjf3Mkw60G489knyISm1ZnzhFS7ZDwQ
-K3Nh0FsjQZ2XanI9e37ku63GqcSRFraVlMErJknfHjm4yc/1B0hklzG3INQD
-r68hxv3O1Y0vH9Yy6Y1WLz+33SGa1dnyxb+GcniWSBbDEnCnVRmjJGP0h65I
-nqlW797LcYcs0TzGlK70ixr4D9D/8CH/f4H/EwIwJByKwaJdoBhn8v8Cv3WB
-PGVuZHN0cmVhbQplbmRvYmoKNiAwIG9iaiA8PAovVHlwZSAvRm9udAovU3Vi
-dHlwZSAvVHlwZTEKL0VuY29kaW5nIDIzIDAgUgovRmlyc3RDaGFyIDE2Ci9M
-YXN0Q2hhciAxMjYKL1dpZHRocyAyNCAwIFIKL0Jhc2VGb250IC9BUlpMUkor
-Q01CWDEyCi9Gb250RGVzY3JpcHRvciA0IDAgUgo+PiBlbmRvYmoKNCAwIG9i
-aiA8PAovQXNjZW50IDY5NAovQ2FwSGVpZ2h0IDY4NgovRGVzY2VudCAtMTk0
-Ci9Gb250TmFtZSAvQVJaTFJKK0NNQlgxMgovSXRhbGljQW5nbGUgMAovU3Rl
-bVYgMTA5Ci9YSGVpZ2h0IDQ0NAovRm9udEJCb3ggWy01MyAtMjUxIDExMzkg
-NzUwXQovRmxhZ3MgNAovQ2hhclNldCAoL2RvdGxlc3NpL2FjdXRlL2NlZGls
-bGEvaHlwaGVuL0UvSS9NL1AvUy9XL1gvYS9jL2QvZS9nL2kvbC9tL24vby9w
-L3Ivcy90L3Uvdi94L3RpbGRlKQovRm9udEZpbGUgNSAwIFIKPj4gZW5kb2Jq
-CjI0IDAgb2JqClszMTIgMCAwIDU2MiAwIDAgMCAwIDUwMCAwIDAgMCAwIDAg
-MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMzc1IDAgMCAwIDAgMCAw
-IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA3MzggMCAwIDAg
-NDE5IDAgMCAwIDEwNjcgMCAwIDc2OSAwIDAgNjI1IDAgMCAwIDExNjIgODUw
-IDAgMCAwIDAgMCAwIDAgMCA1NDcgMCA1MDAgNjI1IDUxMyAwIDU2MiAwIDMx
-MiAwIDAgMzEyIDkzNyA2MjUgNTYyIDYyNSAwIDQ1OSA0NDQgNDM3IDYyNSA1
-OTQgMCA1OTQgMCAwIDAgMCAwIDU2MiBdCmVuZG9iagoyMyAwIG9iaiA8PAov
-VHlwZSAvRW5jb2RpbmcKL0RpZmZlcmVuY2VzIFsgMCAvLm5vdGRlZiAxNi9k
-b3RsZXNzaSAxNy8ubm90ZGVmIDE5L2FjdXRlIDIwLy5ub3RkZWYgMjQvY2Vk
-aWxsYSAyNS8ubm90ZGVmIDQ1L2h5cGhlbiA0Ni8ubm90ZGVmIDY5L0UgNzAv
-Lm5vdGRlZiA3My9JIDc0Ly5ub3RkZWYgNzcvTSA3OC8ubm90ZGVmIDgwL1Ag
-ODEvLm5vdGRlZiA4My9TIDg0Ly5ub3RkZWYgODcvVy9YIDg5Ly5ub3RkZWYg
-OTcvYSA5OC8ubm90ZGVmIDk5L2MvZC9lIDEwMi8ubm90ZGVmIDEwMy9nIDEw
-NC8ubm90ZGVmIDEwNS9pIDEwNi8ubm90ZGVmIDEwOC9sL20vbi9vL3AgMTEz
-Ly5ub3RkZWYgMTE0L3Ivcy90L3UvdiAxMTkvLm5vdGRlZiAxMjAveCAxMjEv
-Lm5vdGRlZiAxMjYvdGlsZGUgMTI3Ly5ub3RkZWZdCj4+IGVuZG9iagoxNiAw
-IG9iaiA8PAovVHlwZSAvUGFnZXMKL0NvdW50IDEKL0tpZHMgWzIgMCBSXQo+
-PiBlbmRvYmoKMjUgMCBvYmogPDwKL1R5cGUgL0NhdGFsb2cKL1BhZ2VzIDE2
-IDAgUgo+PiBlbmRvYmoKMjYgMCBvYmogPDwKL1Byb2R1Y2VyIChwZGZlVGVY
-LTEuMjFhKQovQ3JlYXRvciAoVGVYKQovQ3JlYXRpb25EYXRlIChEOjIwMDcw
-ODE4MTU1ODIzLTAzJzAwJykKL1BURVguRnVsbGJhbm5lciAoVGhpcyBpcyBw
-ZGZlVGVYLCBWZXJzaW9uIDMuMTQxNTkyLTEuMjFhLTIuMiAoV2ViMkMgNy41
-LjQpIGtwYXRoc2VhIHZlcnNpb24gMy41LjQpCj4+IGVuZG9iagp4cmVmCjAg
-MjcKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAyMjE4IDAwMDAwIG4gCjAw
-MDAwMDIxMDMgMDAwMDAgbiAKMDAwMDAwMDAwOSAwMDAwMCBuIAowMDAwMDMw
-NTQ5IDAwMDAwIG4gCjAwMDAwMjQ1MTggMDAwMDAgbiAKMDAwMDAzMDM5MyAw
-MDAwMCBuIAowMDAwMDIzNjIxIDAwMDAwIG4gCjAwMDAwMTc1MTUgMDAwMDAg
-biAKMDAwMDAyMzQ2NSAwMDAwMCBuIAowMDAwMDE2MTM2IDAwMDAwIG4gCjAw
-MDAwMDUxNjkgMDAwMDAgbiAKMDAwMDAxNTk3OSAwMDAwMCBuIAowMDAwMDA0
-NzE0IDAwMDAwIG4gCjAwMDAwMDIzMjAgMDAwMDAgbiAKMDAwMDAwNDU1NiAw
-MDAwMCBuIAowMDAwMDMxNTQxIDAwMDAwIG4gCjAwMDAwMDUwNDkgMDAwMDAg
-biAKMDAwMDAwNDkyMiAwMDAwMCBuIAowMDAwMDE2OTEwIDAwMDAwIG4gCjAw
-MDAwMTY1NTMgMDAwMDAgbiAKMDAwMDAyNDE0NiAwMDAwMCBuIAowMDAwMDIz
-OTE1IDAwMDAwIG4gCjAwMDAwMzExMjcgMDAwMDAgbiAKMDAwMDAzMDgyNiAw
-MDAwMCBuIAowMDAwMDMxNTk5IDAwMDAwIG4gCjAwMDAwMzE2NTAgMDAwMDAg
-biAKdHJhaWxlcgo8PAovU2l6ZSAyNwovUm9vdCAyNSAwIFIKL0luZm8gMjYg
-MCBSCi9JRCBbPDk2RUQxNUYwNEE5MDE3QkQxQTVDOEY0NDAxQTFDNDEwPiA8
-OTZFRDE1RjA0QTkwMTdCRDFBNUM4RjQ0MDFBMUM0MTA+XQo+PgpzdGFydHhy
-ZWYKMzE4NTMKJSVFT0YK
-====
-***end123***
-
-probnumber=2
-probname=B
-probfullname=CCA A 1
-probbasename=cc
-probtimelimit=3
-probcolorname=cccaaa
-probcolor=333333
-probinputfilemd5=41545cd5f6a54ab28996d8e0109ba756
-probinputfile=c.in
-ac
-ac
-ac
-
-ac
-ac
-
-ac
-***end123***
-probsolfilemd5=696fd0c1a38fa96d213ae34469540cc6
-probsolfile=c.sol
-caa
-aca
-aac
-
-caa
-aca
-aac
-***end123***
-
-[end]
diff --git a/old/run.sh b/old/run.sh
deleted file mode 100755
index 7f4740e..0000000
--- a/old/run.sh
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/bin/bash
-#//////////////////////////////////////////////////////////////////////////////////////////
-#//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-#//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-#//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-#//
-#//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-#//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-#//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-#//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-#//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-#//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#///////////////////////////////////////////////////////////////////////////////////////////
-#Last modified: 10/aug/2009 by cassio@ime.usp.br
-#
-# parameters are:
-# $1 base_filename
-# $2 source_file
-# $3 input_file
-# $4 languagename
-# $5 problemname
-# $6 timelimit
-#
-# the output of the submission should be directed to the standard output
-#
-# the return code show what happened:
-# 0 ok
-# 1 compile error
-# 2 runtime error
-# 3 timelimit exceeded
-# other_codes are unknown to boca: in this case BOCA will present the
-# last line of standard output to the judge
-
-umask 0022
-chown nobody.nogroup .
-
-export CLASSPATH=.:$CLASSPATH
-
-# this script makes use of safeexec to execute the code with less privilegies
-# make sure that directories below are correct.
-sf=`which safeexec`
-[ -x "$sf" ] || sf=/usr/bin/safeexec
-gcc=`which gcc`
-[ -x "$gcc" ] || gcc=/usr/bin/gcc
-gpp=`which g++`
-[ -x "$gpp" ] || gpp=/usr/bin/g++
-java=`which java`
-[ -x "$java" ] || java=/usr/java/bin/java
-javac=`which javac`
-[ -x "$javac" ] || javac=/usr/java/bin/javac
-pascal=`which fpc`
-[ -x "$pascal" ] || pascal=/usr/bin/fpc
-grep=`which grep`
-[ -x "$grep" ] || grep=/bin/grep
-
-if [ "$1" == "" -o "$2" == "" -o "$3" == "" ]; then
- echo "parameter problem"
- exit 43
-fi
-if [ ! -r "$2" ]; then
- echo "$2 not found or it's not readable"
- exit 44
-fi
-if [ ! -r "$3" ]; then
- echo "$3 not found or it's not readable"
- exit 45
-fi
-if [ ! -x "$sf" ]; then
- echo "$sf not found or it's not executable"
- exit 46
-fi
-
-prefix=$1
-name=$2
-input=$3
-
-# setting up the timelimit according to the problem
-# note that problems should spelling the same as inside BOCA
-if [ "$6" == "" ]; then
-time=5
-else
-time=$6
-fi
-let ttime=$time+30
-
-# choose the compiler according to the language
-# note that languages should spelling the same as inside BOCA
-case "$4" in
-C)
- $gcc -lm -o "$prefix" "$name"
- ret=$?
- if [ "$ret" != "0" ]; then
- echo "Compiling Error: $ret"
- exit 1
- else
- $sf -F10 -t$time -T$ttime -i$input -n0 -R. "./$prefix"
- ret=$?
- if [ $ret -gt 3 ]; then
- ret=0
- fi
- fi
- ;;
-C++)
- $gpp -lm -o "$prefix" "$name"
- ret=$?
- if [ "$ret" != "0" ]; then
- echo "Compiling Error: $ret"
- exit 1
- else
- $sf -F10 -t$time -T$ttime -i$input -n0 -R. "./$prefix"
- ret=$?
- if [ $ret -gt 3 ]; then
- ret=0
- fi
- fi
- ;;
-Pascal)
- $pascal -o"$prefix" "$name" >compiler.out 2>compiler.out
- $grep -irq linking compiler.out
- ret=$?
- $grep -irq "lines compiled" compiler.out
- ret2=$?
- if [ "$ret" != "0" -o "$ret2" != "0" ]; then
- cat compiler.out
- echo "Compiling Error: $ret"
- exit 1
- else
- $sf -F10 -t$time -T$ttime -i$input -opascal.out -n0 -R. "./$prefix"
- ret=$?
- if [ -f pascal.out ]; then
- cat pascal.out
- $grep -irq "runtime error" pascal.out
- ret2=$?
- if [ "$ret2" = "0" ]; then
- echo "Strange output - possible runtime error"
- if [ $ret -lt 4 ]; then
- ret=48
- fi
- fi
- fi
- fi
- ;;
-Java)
- $javac "$name"
- ret=$?
- if [ "$ret" != "0" ]; then
- echo "Compiling Error: $ret"
- exit 1
- else
- $sf -u10 -F30 -t$time -T$ttime -i$input -n0 -R. $java "$prefix"
- ret=$?
- if [ $ret -gt 3 ]; then
- echo "Nonzero return code - possible runtime error"
- ret=47
- fi
- fi
- ;;
-*)
- echo "Language not recognized"
- exit 42
- ;;
-esac
-exit $ret
diff --git a/old/updatescore.sh b/old/updatescore.sh
deleted file mode 100755
index a9c05b7..0000000
--- a/old/updatescore.sh
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/bin/bash
-#//////////////////////////////////////////////////////////////////////////////////////////
-#//BOCA Online Contest Administrator. Copyright (c) 2003- Cassio Polpo de Campos.
-#//It may be distributed under the terms of the Q Public License version 1.0. A copy of the
-#//license can be found with this software or at http://www.opensource.org/licenses/qtpl.php
-#//
-#//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-#//INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-#//PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-#//OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
-#//CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-#//PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-#//OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#///////////////////////////////////////////////////////////////////////////////////////////
-# last updated 26/oct/2011 by cassio@ime.usp.br
-for i in id chown chmod md5sum wget tr cut awk tail head grep cat sed sleep; do
- p=`which $i`
- if [ -x "$p" ]; then
- echo -n ""
- else
- echo command "$i" not found
- exit 1
- fi
-done
-if [ "`id -u`" != "0" ]; then
- echo "Script must run as root"
-fi
-
-privatedir=/var/www/boca/private
-if [ ! -d $privatedir ]; then
- echo "Could not find directory $privatedir"
- exit 1
-fi
-httpbocadir=boca
-tempdir=/tmp
-others=/var/www/boca/private/otherservers
-secs=120
-apacheuser=
-[ -r /etc/icpc/apacheuser ] && apacheuser=`cat /etc/icpc/apacheuser | sed 's/ \t\n//g'`
-[ "$apacheuser" == "" ] && apacheuser=www-data
-id -u $apacheuser > /dev/null 2>/dev/null
-[ $? != 0 ] && echo "User $apacheuser not found -- error to set permissions with chown/chmod"
-
-#hash="shasum -a 256 -"
-hash="md5sum -"
-
-#rm -f $privatedir/score_*.dat
-#rm -f $privatedir/thissitescore.dat
-chown $apacheuser.root $privatedir/score_*.dat
-chown $apacheuser.root $privatedir/thissitescore.dat
-
-BOCASERVER=
-[ -x /etc/icpc/bocaserver.sh ] && . /etc/icpc/bocaserver.sh
-LOCALSERVER=$BOCASERVER
-if [ "$LOCALSERVER" == "" -o "$LOCALSERVER" == "0/0" ]; then
- LOCALSERVER=http://127.0.0.1/$httpbocadir
-else
- LOCALSERVER=http://$LOCALSERVER/$httpbocadir
-fi
-
-if [ ! -r $others ]; then
- echo "External server list in $others not found"
- exit 1
-fi
-echo "Starting loop to get scores from servers defined in $others"
-while /bin/true; do
-echo "Getting scores..."
-
-qtd=1
-for BOCASERVER in `grep -v "^[ \t]*\#" $others | awk '{ print $1; }'`; do
-if [ "$BOCASERVER" == "" ]; then
- continue
-fi
-echo $BOCASERVER | grep -q "http"
-[ $? == 0 ] || BOCASERVER=http://$BOCASERVER/boca
-
-user=`grep -v "^[ \t]*\#" $others | head -n$qtd | tail -n1 | awk '{ print $2; }'`
-[ "$user" == "" ] && user=score
-pass=`grep -v "^[ \t]*\#" $others | head -n$qtd | tail -n1 | awk '{ print $2; }'`
-[ "$pass" == "" ] && pass=score
-let "qtd = $qtd + 1"
-
-wget -t3 -T3 "$LOCALSERVER/scoretable.php?clock=1" -O $tempdir/.temp.txt 2>/dev/null >/dev/null
-if [ $? != 0 ]; then
- echo "Error getting contest clock from $LOCALSERVER"
-else
- tempo=`cat $tempdir/.temp.txt`
- echo -n "Asking server $BOCASERVER at time $tempo. Authenticating with user '$user'..."
- md=`wget -t3 -T3 -S $BOCASERVER/index.php -O /dev/null --save-cookies $tempdir/.cookie.txt --keep-session-cookies 2>&1 | grep PHPSESS | tail -n1 | cut -f2 -d'=' | cut -f1 -d';'`
- res=`echo -n $pass | $hash | cut -f1 -d' '`
- res=`echo -n "${res}${md}" | $hash | cut -f1 -d' '`
- echo -n "sending password..."
- wget -t3 -T3 "$BOCASERVER/index.php?name=${user}&password=${res}" --load-cookies $tempdir/.cookie.txt --keep-session-cookies --save-cookies $tempdir/.cookie.txt -O $tempdir/.temp.txt 2>/dev/null >/dev/null
- grep -qi incorrect $tempdir/.temp.txt
- if [ $? != 0 ]; then
- fname=`echo $BOCASERVER | tr './:' '_'`
- echo "downloading scoretable..."
- wget -t3 -T3 "$BOCASERVER/scoretable.php?remote=$tempo" --load-cookies $tempdir/.cookie.txt --keep-session-cookies --save-cookies $tempdir/.cookie.txt -O $privatedir/score_${fname}.tmp 2>$tempdir/.bocascore.tmp >$tempdir/.bocascore.tmp
- if [ $? == 0 ]; then
- chown $apacheuser.root $privatedir/score_$fname.tmp
- chmod 660 $privatedir/score_$fname.tmp
- mv $privatedir/score_$fname.tmp $privatedir/score_$fname.dat
- echo "Score downloaded successfully into $privatedir/score_$fname.dat"
- else
- echo "Error getting scoretable from $BOCASERVER: `cat $tempdir/.bocascore.tmp`"
- fi
- else
- echo "Error authenticating to server $BOCASERVER"
- fi
-fi
-rm -f $tempdir/.temp.txt
-rm -f $tempdir/.cookie.txt
-done
-
-echo -n "Waiting $secs secs..."
-sleep $secs
-echo ""
-done
diff --git a/old/webcast/config.php b/old/webcast/config.php
deleted file mode 100644
index b16deb6..0000000
--- a/old/webcast/config.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-$loc = $locr = "..";
-require_once("$locr/globals.php");
-require_once("$locr/db.php");
-if(!ValidSession()) {
- InvalidSession("webcast/index.php");
- ForceLoad("$loc/index.php");
-}
-if($_SESSION["usertable"]["usertype"] != "admin") {
- IntrusionNotify("webcast/index.php");
- ForceLoad("$loc/index.php");
-}
-
-$contest = $_SESSION["usertable"]["contestnumber"];
-$site = $_SESSION["usertable"]["usersitenumber"];
-
-if(($ct = DBSiteInfo($contest, $site)) == null)
- ForceLoad("../index.php");
-
-if(isset($_GET['full']) && $_GET['full'] > 0)
- $freezeTime = $ct['siteduration'];
-else
- $freezeTime = $ct['sitelastmilescore'];
-
-?>
diff --git a/old/webcast/contest/index.php b/old/webcast/contest/index.php
deleted file mode 100644
index 3efc719..0000000
--- a/old/webcast/contest/index.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-require '../../db.php';
-require '../config.php';
-
-header('Content-type: text/plain; encoding=utf-8');
-
-$ct = DBContestInfo($contest);
-
-echo
- $ct['contestname'] . "\n";
-
-echo
- $ct['contestduration']/60 . '' .
- $ct['contestlastmileanswer']/60 . '' .
- $ct['contestlastmilescore']/60 . '' .
- $ct['contestpenalty']/60 . "\n";
-
-$c = DBConnect();
-
-$r = DBExec($c,
- 'SELECT problemnumber FROM problemtable' .
- ' WHERE contestnumber = ' . $contest .
- ' AND problemnumber > 0');
-
-$numProblems = DBnlines($r);
-
-$r = DBExec($c,
- 'SELECT username, userfullname FROM usertable' .
- ' WHERE contestnumber = ' . $contest .
- ' AND userenabled = \'t\' AND usersitenumber = ' . $site .
- ' AND usertype = \'team\'');
-
-$numTeams = DBnlines($r);
-
-echo
- $numTeams . '' .
- $numProblems . "\n";
-
-for ($i = 0; $i < $numTeams; $i++) {
- $a = DBRow($r, $i);
- $teamID = $a['username'];
- if(isset($a['usershortname']))
- $teamName = $a['usershortname'];
- else
- $teamName = $a['userfullname'];
- if(isset($a['usershortinstitution']))
- $teamUni = $a['usershortinstitution'];
- else
- $teamUni = $teamName;
-
- echo
- $teamID . '' .
- $teamUni . '' .
- $teamName . "\n";
-}
-
-echo '1' . '' . '1' . "\n";
-echo $numProblems . '' . 'Y' . "\n";
-
-?>
diff --git a/old/webcast/index.php b/old/webcast/index.php
deleted file mode 120000
index 4e9b47a..0000000
--- a/old/webcast/index.php
+++ /dev/null
@@ -1 +0,0 @@
-config.php \ No newline at end of file
diff --git a/old/webcast/runs/index.php b/old/webcast/runs/index.php
deleted file mode 100644
index e28567e..0000000
--- a/old/webcast/runs/index.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-require '../../db.php';
-require '../config.php';
-
-header('Content-type: text/plain; encoding=utf-8');
-
-$s = DBSiteInfo($contest, $site);
-
-$run = DBAllRunsInSites($contest, $site, 'run');
-
-$numRuns = count($run);
-
-for ($i = 0; $i < $numRuns; $i++) {
- $u = DBUserInfo($contest, $site, $run[$i]['user']);
-
- $runID = $run[$i]['number'];
- $runTime = dateconvminutes($run[$i]['timestamp']);
- $runTeam = $u['username'];
- $runProblem = $run[$i]['problem'];
-
- if ($runTime > $freezeTime) {
- continue;
- }
-
- echo
- $runID . '' .
- $runTime . '' .
- $runTeam . '' .
- $runProblem . '';
-
- if ($run[$i]['yes']=='t') {
- echo 'Y' . "\n";
- } else if ($run[$i]['answer'] == 'Not answered yet') {
- echo '?' . "\n";
- } else {
- echo 'N' . "\n";
- };
-}
-
-?>
diff --git a/old/webcast/time/index.php b/old/webcast/time/index.php
deleted file mode 100644
index 061c81f..0000000
--- a/old/webcast/time/index.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-require '../../db.php';
-require '../config.php';
-
-header('Content-type: text/plain; encoding=utf-8');
-
-$s = DBSiteInfo($contest, $site);
-
-echo $s['currenttime'];
-
-?>
diff --git a/old/webcast/version/index.php b/old/webcast/version/index.php
deleted file mode 100644
index 4d474a2..0000000
--- a/old/webcast/version/index.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-require '../../db.php';
-require '../config.php';
-
-header('Content-type: text/plain; encoding=utf-8');
-
-echo '1.0' . "\n";
-
-?>