diff --git a/benchmarks/311/benchmark.sh b/benchmarks/311/benchmark.sh deleted file mode 100755 index 8c3cae3d4..000000000 --- a/benchmarks/311/benchmark.sh +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env bash - -# Parse HWLOC settings -HWLOC="" -if [ $# -ne 0 ] && [ $# -ne 1 ]; then # check nmber of inputs - echo "usage: ./benchmark.sh [-hwloc]" - exit 1 -fi - -if [ $# -eq 1 ]; then # check if hwloc - if [ "$1" != "-hwloc" ]; then # check flag - echo -e "invalid flag: $1\nusage: ./benchmark.sh [-hwloc]" - exit 1 - fi - HWLOC="hwloc-bind --cpubind node:1 --membind node:1 --cpubind node:2 --membind node:2" -fi - -# use 5 runs (3 for very long jobs) and a timeout after 180min/3h -DATA_PATH='/data/311/311_preprocessed.csv' -RESDIR='/results/311' -OUTPUT_DIR='/results/output/311' -NUM_RUNS=11 -TIMEOUT=14400 -PYTHON=python3.6 - -mkdir -p ${RESDIR} - -cp tuplex_config_mt.json tuplex_config.json -echo "running mt tuplex e2e" -for ((r = 1; r <= NUM_RUNS; r++)); do - LOG="${RESDIR}/tuplex-run-e2e-$r.txt" - timeout $TIMEOUT ${HWLOC} ${PYTHON} runtuplex.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/tuplex_e2e >$LOG 2>$LOG.stderr -done - -echo "running mt tuplex cached" -for ((r = 1; r <= NUM_RUNS; r++)); do - LOG="${RESDIR}/tuplex-run-weld-$r.txt" - timeout $TIMEOUT ${HWLOC} ${PYTHON} runtuplex.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/tuplex_cached --weld-mode >$LOG 2>$LOG.stderr -done - -cp tuplex_config_st.json tuplex_config.json -echo "running st tuplex e2e" -for ((r = 1; r <= NUM_RUNS; r++)); do - LOG="${RESDIR}/sttuplex-run-e2e-$r.txt" - timeout $TIMEOUT ${HWLOC} ${PYTHON} runtuplex.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/sttuplex_e2e >$LOG 2>$LOG.stderr -done - -echo "running st tuplex cached" -for ((r = 1; r <= NUM_RUNS; r++)); do - LOG="${RESDIR}/sttuplex-run-weld-$r.txt" - timeout $TIMEOUT ${HWLOC} ${PYTHON} runtuplex.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/sttuplex_cached --weld-mode >$LOG 2>$LOG.stderr -done - -# Weld -echo "running weld" -for ((r = 1; r <= NUM_RUNS; r++)); do - LOG="${RESDIR}/weld-run-$r.txt" - timeout $TIMEOUT ${HWLOC} python2 rungrizzly.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/weld >$LOG 2>$LOG.stderr -done - -# spark -export PYSPARK_PYTHON=${PYTHON} -export PYSPARK_DRIVER_PYTHON=${PYTHON} -echo "benchmarking pyspark e2e" -for ((r = 1; r <= NUM_RUNS; r++)); do - LOG="${RESDIR}/pyspark-run-e2e-$r.txt" - timeout $TIMEOUT ${HWLOC} spark-submit --master "local[16]" --driver-memory 100g runpyspark.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/pyspark_e2e >$LOG 2>$LOG.stderr -done - -echo "benchmarking pyspark cached" -for ((r = 1; r <= NUM_RUNS; r++)); do - LOG="${RESDIR}/pyspark-run-weld-$r.txt" - timeout $TIMEOUT ${HWLOC} spark-submit --master "local[16]" --driver-memory 100g runpyspark.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/pyspark_cached --weld-mode >$LOG 2>$LOG.stderr -done - -echo "benchmarking pyspark sql e2e" -for ((r = 1; r <= NUM_RUNS; r++)); do - LOG="${RESDIR}/pysparksql-run-e2e-$r.txt" - timeout $TIMEOUT ${HWLOC} spark-submit --master "local[16]" --driver-memory 100g runpyspark.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/pysparksql_e2e --sql-mode >$LOG 2>$LOG.stderr -done - -echo "benchmarking pyspark sql cached" -for ((r = 1; r <= NUM_RUNS; r++)); do - LOG="${RESDIR}/pysparksql-run-weld-$r.txt" - timeout $TIMEOUT ${HWLOC} spark-submit --master "local[16]" --driver-memory 100g runpyspark.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/pysparksql_cached --sql-mode --weld-mode >$LOG 2>$LOG.stderr -done - -# Dask -echo "benchmarking dask e2e" -for ((r = 1; r <= NUM_RUNS; r++)); do - LOG="${RESDIR}/dask-run-e2e-$r.txt" - timeout $TIMEOUT ${HWLOC} ${PYTHON} rundask.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/dask_e2e >$LOG 2>$LOG.stderr -done - -echo "benchmarking dask cached" -for ((r = 1; r <= NUM_RUNS; r++)); do - LOG="${RESDIR}/dask-run-weld-$r.txt" - timeout $TIMEOUT ${HWLOC} ${PYTHON} rundask.py --path $DATA_PATH --weld-mode --output-path ${OUTPUT_DIR}/dask_cached >$LOG 2>$LOG.stderr -done - diff --git a/benchmarks/311/runbenchmark.sh b/benchmarks/311/runbenchmark.sh index 66b3de16a..7790e30c1 100644 --- a/benchmarks/311/runbenchmark.sh +++ b/benchmarks/311/runbenchmark.sh @@ -16,34 +16,63 @@ python3 create_conf.py --opt-null --opt-pushdown --opt-filter --opt-llvm > tuple python3 create_conf.py --opt-pushdown --opt-filter --opt-llvm > tuplex_config.json cp tuplex_config.json ${RESDIR} -echo "running tuplex" +# Weld +echo "running weld" +for ((r = 1; r <= NUM_RUNS; r++)); do + LOG="${RESDIR}/weld-run-$r.txt" + rm -rf "${OUTPUT_DIR}/weld_output" + timeout $TIMEOUT ${HWLOC} python2 rungrizzly.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/weld_output >$LOG 2>$LOG.stderr +done + +echo "-- running tuplex (single-threaded & multi-threaded)" + +cp tuplex_config_mt.json tuplex_config.json +echo "running mt tuplex e2e" for ((r = 1; r <= NUM_RUNS; r++)); do LOG="${RESDIR}/tuplex-run-e2e-$r.txt" - rm -rf "${OUTPUT_DIR}/tuplex_output" - timeout $TIMEOUT ${PYTHON} runtuplex.py --path $DATA_PATH --output-path "${OUTPUT_DIR}/tuplex_output" >$LOG 2>$LOG.stderr + timeout $TIMEOUT ${PYTHON} runtuplex.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/tuplex_e2e >$LOG 2>$LOG.stderr done + +echo "running mt tuplex cached" for ((r = 1; r <= NUM_RUNS; r++)); do LOG="${RESDIR}/tuplex-run-weld-$r.txt" - rm -rf "${OUTPUT_DIR}/tuplex_output" - timeout $TIMEOUT ${PYTHON} runtuplex.py --path $DATA_PATH --weld-mode --output-path "${OUTPUT_DIR}/tuplex_output" >$LOG 2>$LOG.stderr + timeout $TIMEOUT ${PYTHON} runtuplex.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/tuplex_cached --weld-mode >$LOG 2>$LOG.stderr +done + +cp tuplex_config_st.json tuplex_config.json +echo "running st tuplex e2e" +for ((r = 1; r <= NUM_RUNS; r++)); do + LOG="${RESDIR}/sttuplex-run-e2e-$r.txt" + timeout $TIMEOUT ${PYTHON} runtuplex.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/sttuplex_e2e >$LOG 2>$LOG.stderr +done + +echo "running st tuplex cached" +for ((r = 1; r <= NUM_RUNS; r++)); do + LOG="${RESDIR}/sttuplex-run-weld-$r.txt" + timeout $TIMEOUT ${PYTHON} runtuplex.py --path $DATA_PATH --output-path ${OUTPUT_DIR}/sttuplex_cached --weld-mode >$LOG 2>$LOG.stderr done + # spark export PYSPARK_PYTHON=${PYTHON} export PYSPARK_DRIVER_PYTHON=${PYTHON} -echo "benchmarking pyspark" +echo "benchmarking pyspark (4 modes)" +echo "benchmarking pyspark e2e" for ((r = 1; r <= NUM_RUNS; r++)); do LOG="${RESDIR}/pyspark-run-e2e-$r.txt" timeout $TIMEOUT spark-submit --master "local[16]" --driver-memory 100g runpyspark.py --path $DATA_PATH --output-path "${OUTPUT_DIR}/spark_output" >$LOG 2>$LOG.stderr done +echo "benchmarking pyspark cached" for ((r = 1; r <= NUM_RUNS; r++)); do LOG="${RESDIR}/pyspark-run-weld-$r.txt" timeout $TIMEOUT spark-submit --master "local[16]" --driver-memory 100g runpyspark.py --path $DATA_PATH --weld-mode --output-path "${OUTPUT_DIR}/spark_output" >$LOG 2>$LOG.stderr done +echo "benchmarking pyspark sql e2e" for ((r = 1; r <= NUM_RUNS; r++)); do LOG="${RESDIR}/pysparksql-run-e2e-$r.txt" timeout $TIMEOUT spark-submit --master "local[16]" --driver-memory 100g runpyspark.py --path $DATA_PATH --sql-mode --output-path "${OUTPUT_DIR}/spark_output" >$LOG 2>$LOG.stderr done +echo "benchmarking pyspark sql cached" for ((r = 1; r <= NUM_RUNS; r++)); do LOG="${RESDIR}/pysparksql-run-weld-$r.txt" timeout $TIMEOUT spark-submit --master "local[16]" --driver-memory 100g runpyspark.py --path $DATA_PATH --sql-mode --weld-mode --output-path "${OUTPUT_DIR}/spark_output" >$LOG 2>$LOG.stderr @@ -51,12 +80,13 @@ done # Dask -echo "benchmarking dask" +echo "benchmarking dask e2e" for ((r = 1; r <= NUM_RUNS; r++)); do LOG="${RESDIR}/dask-run-e2e-$r.txt" - timeout $TIMEOUT ${PYTHON} rundask.py --path $DATA_PATH --output-path "${OUTPUT_DIR}/dask_output" >$LOG 2>$LOG.stderr + timeout $TIMEOUT ${PYTHON} rundask.py --path $DATA_PATH --output-path "${OUTPUT_DIR}/dask_e2e" >$LOG 2>$LOG.stderr done +echo "benchmarking dask cached" for ((r = 1; r <= NUM_RUNS; r++)); do LOG="${RESDIR}/dask-run-weld-$r.txt" - timeout $TIMEOUT ${PYTHON} rundask.py --path $DATA_PATH --weld-mode --output-path "${OUTPUT_DIR}/dask_output" >$LOG 2>$LOG.stderr + timeout $TIMEOUT ${PYTHON} rundask.py --path $DATA_PATH --weld-mode --output-path "${OUTPUT_DIR}/dask_cached" >$LOG 2>$LOG.stderr done diff --git a/benchmarks/311/rundask.py b/benchmarks/311/rundask.py index 9d35fddf3..12093f7c9 100644 --- a/benchmarks/311/rundask.py +++ b/benchmarks/311/rundask.py @@ -1,3 +1,4 @@ +import shutil import time import argparse import json @@ -43,6 +44,16 @@ def fix_zip_codes(zips): # save the run configuration output_path = args.output_path +# if dir exists, remove +if os.path.exists(output_path): + shutil.rmtree(output_path) +os.makedirs(output_path, exist_ok=True) + +# remove all files within + +# dask will fail if it is a directory else +output_path = os.path.join(output_path, 'export-*.csv') + # get the input files perf_paths = [args.data_path] if not os.path.isfile(args.data_path): diff --git a/benchmarks/311/rungrizzly.py b/benchmarks/311/rungrizzly.py index c8258d0da..ce42f267b 100644 --- a/benchmarks/311/rungrizzly.py +++ b/benchmarks/311/rungrizzly.py @@ -47,4 +47,4 @@ print("Total end-to-end time, including compilation: %.2f" % query_time) -print('framework,pandas_load,load,query\n{},{},{},{}'.format('weld-grizzly', pandas_load_time, load_time, query_time)) \ No newline at end of file +print('framework,pandas_load,load,query\n{},{},{},{}'.format('weld-grizzly', pandas_load_time, load_time, query_time)) diff --git a/benchmarks/flights/runbenchmark.sh b/benchmarks/flights/runbenchmark.sh index ed8eecc9d..9bf8da702 100644 --- a/benchmarks/flights/runbenchmark.sh +++ b/benchmarks/flights/runbenchmark.sh @@ -16,6 +16,10 @@ PYTHON=python3.6 mkdir -p ${LG_RESDIR} mkdir -p ${SM_RESDIR} +# create original tuplex_config.json (gets overwritten by breakdown...) +cp tuplex_config_template.json tuplex_config.json +cat tuplex_config.json + echo "running on large flight data" echo "running tuplex" for ((r = 1; r <= NUM_RUNS; r++)); do @@ -65,3 +69,8 @@ for ((r = 1; r <= NUM_RUNS; r++)); do LOG="${SM_RESDIR}/dask-run-$r.txt" timeout $TIMEOUT ${PYTHON} rundask.py --path $SM_INPUT_PATH --output-path $OUTPUT_DIR/dask >$LOG 2>$LOG.stderr done + +# copy config files after LG run +cp tuplex_config.json ${LG_RESDIR}/ +# copy config files after SM run +cp tuplex_config.json ${SM_RESDIR}/ \ No newline at end of file diff --git a/benchmarks/flights/rundask.py b/benchmarks/flights/rundask.py index 945349bcc..52d83afd9 100644 --- a/benchmarks/flights/rundask.py +++ b/benchmarks/flights/rundask.py @@ -92,7 +92,8 @@ #client = Client(n_workers=8, threads_per_worker=1, processes=True) # default init # client = Client(n_workers=16, threads_per_worker=1, processes=True) - client=Client(n_workers=16, threads_per_worker=1, processes=True, memory_limit='8GB') + # because Dask tends to fail for the large flights dataset, give it more memory than Tuplex/Spark + client=Client(n_workers=16, threads_per_worker=1, processes=True, memory_limit='12GB') #client=Client() print(client) diff --git a/benchmarks/flights/tuplex_config_template.json b/benchmarks/flights/tuplex_config_template.json new file mode 100644 index 000000000..5b260bbf4 --- /dev/null +++ b/benchmarks/flights/tuplex_config_template.json @@ -0,0 +1,11 @@ +{"webui.enable": false, +"executorCount": 15, +"executorMemory": "6G", +"driverMemory": "10G", +"partitionSize": "32MB", +"runTimeMemory": "8MB", +"useLLVMOptimizer": true, +"optimizer.nullValueOptimization": true, +"csv.selectionPushdown": true, +"resolveWithInterpreterOnly":false, +"mergeRowsInOrder":false} diff --git a/benchmarks/logs/process_data.py b/benchmarks/logs/process_data.py old mode 100644 new mode 100755 index 585e4f0e1..ffb3e09b7 --- a/benchmarks/logs/process_data.py +++ b/benchmarks/logs/process_data.py @@ -1,19 +1,48 @@ +#!/usr/bin/env python3 import glob import os +import argparse -input_dir = "/disk/data/weblogs/*.*.*.txt" -output_dir = "/disk/data/weblogs_clean" +if __name__ == '__main__': + # parse the arguments + parser = argparse.ArgumentParser(description="Apache data cleaning + join") + parser.add_argument( + "--input-path", + type=str, + dest="input_path", + default="/data/logs", + help="raw logs path", + ) + parser.add_argument( + "--output-path", + type=str, + dest="output_path", + default="/data/logs_clean", + help="raw logs path", + ) -if not os.path.exists(output_dir): - os.makedirs(output_dir) + args = parser.parse_args() -for filename in glob.glob(input_dir): - new_filename = f'{output_dir}/{filename[filename.rfind("/")+1:]}' - print(f'{filename} -> {new_filename}') - with open(filename, "r", encoding='latin_1') as f: - with open(new_filename, 'w') as fo: - for l in f: - test = l.encode('ascii', 'replace').decode('ascii') # make it ascii - test = test.replace('\0', '?') # get rid of null characters - fo.write(test) + input_dir = os.path.join(args.input_path, "*.*.*.txt") + output_dir = args.output_path + if not os.path.exists(output_dir): + os.makedirs(output_dir) + + num_skipped = 0 + for filename in glob.glob(input_dir): + new_filename = f'{output_dir}/{filename[filename.rfind("/")+1:]}' + + if os.path.isfile(new_filename): + num_skipped += 1 + else: + print(f'{filename} -> {new_filename}') + with open(filename, "r", encoding='latin_1') as f: + with open(new_filename, 'w') as fo: + for l in f: + test = l.encode('ascii', 'replace').decode('ascii') # make it ascii + test = test.replace('\0', '?') # get rid of null characters + fo.write(test) + if num_skipped > 0: + print('skipped {} files'.format(num_skipped)) + print('Done.') diff --git a/benchmarks/logs/runbenchmark.sh b/benchmarks/logs/runbenchmark.sh index b39f12305..bec0a78fc 100755 --- a/benchmarks/logs/runbenchmark.sh +++ b/benchmarks/logs/runbenchmark.sh @@ -16,10 +16,14 @@ if [ $# -eq 1 ]; then # check if hwloc HWLOC="hwloc-bind --cpubind node:1 --membind node:1 --cpubind node:2 --membind node:2" fi -DATA_PATH=/data/logs + +# invoke preprocess script +python3 process_data.py --input-path /data/logs --output-path /data/logs_clean + +DATA_PATH=/data/logs_clean IP_PATH=/data/logs/ip_blacklist.csv -RESDIR=/results/weblogs -OUTPUT_DIR=/results/output/weblogs +RESDIR=/results/logs +OUTPUT_DIR=/results/output/logs NUM_RUNS="${NUM_RUNS:-11}" REDUCED_NUM_RUNS=4 TIMEOUT=14400 diff --git a/benchmarks/logs/rundask.py b/benchmarks/logs/rundask.py index 023749404..03a306433 100644 --- a/benchmarks/logs/rundask.py +++ b/benchmarks/logs/rundask.py @@ -244,7 +244,8 @@ def try_int(x): import pandas as pd import numpy as np - client = Client(n_workers=16, threads_per_worker=1, processes=True, memory_limit='8GB') + # because Dask tends to fail for the large flights dataset, give it more memory than Tuplex/Spark + client = Client(n_workers=16, threads_per_worker=1, processes=True, memory_limit='14GB') print(client) startup_time = time.time() - tstart print("Dask startup time: {}".format(startup_time)) diff --git a/benchmarks/logs/tuplex_config.json b/benchmarks/logs/tuplex_config.json index 9753880df..4b683e6b8 100644 --- a/benchmarks/logs/tuplex_config.json +++ b/benchmarks/logs/tuplex_config.json @@ -2,7 +2,7 @@ "executorMemory": "6G", "executorCount": 15, "driverMemory": "10G", - "partitionSize": "32MB", + "partitionSize": "16MB", "runTimeMemory": "64MB", "inputSplitSize": "64MB", "useLLVMOptimizer": true, diff --git a/benchmarks/sigmod21-reproducibility/AWS_Configuration.md b/benchmarks/sigmod21-reproducibility/AWS_Configuration.md index b85240c02..76282a619 100644 --- a/benchmarks/sigmod21-reproducibility/AWS_Configuration.md +++ b/benchmarks/sigmod21-reproducibility/AWS_Configuration.md @@ -22,11 +22,12 @@ sudo chown $(whoami) /disk # 2. install docker sudo apt update sudo apt install -y apt-transport-https ca-certificates curl software-properties-common p7zip-full -curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - -sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update -apt-cache policy docker-ce # should print out apt details -sudo apt install -y docker-ce +sudo apt-get install -y docker-ce docker-ce-cli containerd.io sudo systemctl status docker # should print status out sudo usermod -aG docker ${USER} # allows to run docker commands as non-sudo #logout, login to make user group changes effective diff --git a/benchmarks/sigmod21-reproducibility/README.md b/benchmarks/sigmod21-reproducibility/README.md index 8fc110b2b..562a54b21 100644 --- a/benchmarks/sigmod21-reproducibility/README.md +++ b/benchmarks/sigmod21-reproducibility/README.md @@ -100,7 +100,7 @@ In `AWS_Configuration.md` we provide the commands we used to configure the machi ### D) Experimentation Info -For convenience we provide a top-level command-line interface `/tuplex.py` to carry out various tasks in order to reproduce the results. In order to carry out experiments, a couple steps to be performed after setting up a benchmark machine (as described in C) or `AWS_Setup.md` / `AWS_Configuration.md`), for which the CLI may be used: +For convenience, we provide a top-level command-line interface `/tuplex.py` to carry out various tasks in order to reproduce the results. In order to carry out experiments, a couple steps to be performed after setting up a benchmark machine (as described in C) or `AWS_Setup.md` / `AWS_Configuration.md`), for which the CLI may be used: 1. download & extract data `./tuplex.py download --password ` diff --git a/benchmarks/sigmod21-reproducibility/build_scripts/build_tuplex.sh b/benchmarks/sigmod21-reproducibility/build_scripts/build_tuplex.sh index 2b5067f17..479fd3739 100644 --- a/benchmarks/sigmod21-reproducibility/build_scripts/build_tuplex.sh +++ b/benchmarks/sigmod21-reproducibility/build_scripts/build_tuplex.sh @@ -4,11 +4,15 @@ export CC=gcc-10 export CXX=g++-10 + +CPU_COUNT=$(nproc) +echo "Building using $CPU_COUNT" + TUPLEX_DIR=/code cd $TUPLEX_DIR && cd tuplex && mkdir -p build && \ -cd build && \ -cmake -DBUILD_WITH_AWS=OFF -DBUILD_NATIVE=ON -DPYTHON3_VERSION=3.6 -DLLVM_ROOT_DIR=/usr/lib/llvm-9 -DCMAKE_BUILD_TYPE=Release .. && \ -make -j16 && \ +cd build && rm -rf -- * && \ +cmake -DBUILD_WITH_AWS=OFF -DBUILD_NATIVE=ON -DPYTHON3_VERSION=3.6 -DLLVM_ROOT_DIR=/opt/llvm-9.0 -DCMAKE_BUILD_TYPE=Release .. && \ +make -j${CPU_COUNT} tuplex && \ cd dist/python/ && \ python3.6 setup.py install \ No newline at end of file diff --git a/benchmarks/sigmod21-reproducibility/docker/Dockerfile b/benchmarks/sigmod21-reproducibility/docker/Dockerfile new file mode 100644 index 000000000..870604c01 --- /dev/null +++ b/benchmarks/sigmod21-reproducibility/docker/Dockerfile @@ -0,0 +1,13 @@ +FROM python:3.9.10-bullseye + +RUN apt-get update && apt-get install -y git + +# RUN apt-get install -y texlive-full +# instead of pulling in full texlive, use just needed packages... +RUN apt-get install -y dvipng texlive-latex-extra texlive-fonts-recommended cm-super + +WORKDIR /work +ADD requirements.txt /work/requirements.txt +RUN python3.9 -m pip install -r /work/requirements.txt + +RUN git clone https://github.com/LeonhardFS/tuplex-public.git /work/tuplex && cd /work/tuplex && git checkout --track origin/sigmod-repro && mkdir -p /scripts && cp -r benchmarks/sigmod21-reproducibility/*.py /scripts && cp -r benchmarks/sigmod21-reproducibility/plot_scripts /scripts/plot_scripts \ No newline at end of file diff --git a/benchmarks/sigmod21-reproducibility/docker/README.md b/benchmarks/sigmod21-reproducibility/docker/README.md new file mode 100644 index 000000000..00de3f91f --- /dev/null +++ b/benchmarks/sigmod21-reproducibility/docker/README.md @@ -0,0 +1,22 @@ +## README + +If there are difficulties running the plot scripts, please use this docker file to plot everything. E.g., create +the container via + +``` +docker build -t sigmod21/plot . +``` + +Then, you can use the resulting container to run the plotting script. + +Another option is to use the convenience script provided in this folder and plot e.g. the results out via + +``` +./plot-via-docker.sh /data/results +``` + +(Replace `/data/results` with a path to your results folder) + +--- + +(c) 2017-2022 Tuplex authors diff --git a/benchmarks/sigmod21-reproducibility/docker/plot-via-docker.sh b/benchmarks/sigmod21-reproducibility/docker/plot-via-docker.sh new file mode 100755 index 000000000..a865fa707 --- /dev/null +++ b/benchmarks/sigmod21-reproducibility/docker/plot-via-docker.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +# this script helps to plot local data via the script running the versions within the docker container +# do not use paths with spaces... +INPUT_PATH="$1" +OUTPUT_PATH="$2" +me=`basename "$0"` + +if [ -z "${INPUT_PATH}" ]; then + echo "please specify input folder, usage: $me [output-folder]" + exit 1 +fi + +if [ -z "${OUTPUT_PATH}" ]; then + OUTPUT_PATH=$PWD/plots +fi + +# convert to real paths...! +# if real path is not available on MacOS, install via brew install coreutils + +function realpath() { + # use python + python3 -c "import os; print(os.path.abspath('$1'))" +} + +INPUT_PATH="$(realpath ${INPUT_PATH})" +OUTPUT_PATH="$(realpath $OUTPUT_PATH)" + +echo "-- Plotting using input data from $INPUT_PATH, storing results in $OUTPUT_PATH" + +echo "-- Docker command: docker run -v \"$INPUT_PATH\":/work/results -v \"$OUTPUT_PATH\":/work/plots sigmod21/plot python3 /scripts/tuplex.py plot all --input-path /work/results --output-path /work/plots" +docker run -v "$INPUT_PATH":/work/results -v "$OUTPUT_PATH":/work/plots sigmod21/plot python3 /scripts/tuplex.py plot all --input-path /work/results --output-path /work/plots + +echo "Done." +echo " -- please find all plots in $OUTPUT_PATH" diff --git a/benchmarks/sigmod21-reproducibility/docker/requirements.txt b/benchmarks/sigmod21-reproducibility/docker/requirements.txt new file mode 100644 index 000000000..c6f19fa53 --- /dev/null +++ b/benchmarks/sigmod21-reproducibility/docker/requirements.txt @@ -0,0 +1,7 @@ +docker +click +gdown +matplotlib==3.3.2 +seaborn==0.11.0 +pandas==1.1.4 +brokenaxes==0.4.2 \ No newline at end of file diff --git a/benchmarks/sigmod21-reproducibility/plot_scripts/figure10.py b/benchmarks/sigmod21-reproducibility/plot_scripts/figure10.py index 869fed317..254a689de 100644 --- a/benchmarks/sigmod21-reproducibility/plot_scripts/figure10.py +++ b/benchmarks/sigmod21-reproducibility/plot_scripts/figure10.py @@ -109,10 +109,10 @@ def load_to_df(data_root): # In[15]: -def figure10(flights_path='r5d.8xlarge/flights/', output_folder='plots'): +def figure10(flights_path='r5d.8xlarge/flights/breakdown_small/', output_folder='plots'): logging.info('loading flights data...') - df_flights = load_to_df(os.path.join(flights_path, 'breakdown_small/')) + df_flights = load_to_df(flights_path) # clean type based on settings flags! def extractType(row): diff --git a/benchmarks/sigmod21-reproducibility/plot_scripts/figure4.py b/benchmarks/sigmod21-reproducibility/plot_scripts/figure4.py index cc6bd8e7d..3df247548 100644 --- a/benchmarks/sigmod21-reproducibility/plot_scripts/figure4.py +++ b/benchmarks/sigmod21-reproducibility/plot_scripts/figure4.py @@ -45,6 +45,7 @@ def load_flights_to_df(data_root): for file in files: path = os.path.join(data_root, file) name = file[:file.find('-run')] + basename = os.path.basename(path) if file.endswith('.txt'): # print(path) with open(path, 'r') as fp: @@ -60,7 +61,7 @@ def load_flights_to_df(data_root): run_no = int(path[path.rfind('run-')+4:path.rfind('.txt')]) # tuplex decode - if 'tuplex' in path: + if 'tuplex' in basename: try: d = {} if 'tuplex' in name: @@ -101,13 +102,18 @@ def load_flights_to_df(data_root): print(e) row['mode'] = 'python3' else: - d = json.loads(lines[-1].replace("'", '"')) - + d = {} + try: + d = json.loads(lines[-1].replace("'", '"')) + except Exception as e: + logging.error("failed to load JSON data for {}, did benchmark run through?".format(path)) + continue + # clean framework - if 'pyspark' in file.lower(): + if 'pyspark' in basename.lower(): # adjust spark types row['framework'] = 'spark' - if 'dask' in file.lower(): + if 'dask' in basename.lower(): # adjust spark types row['framework'] = 'dask' diff --git a/benchmarks/sigmod21-reproducibility/plot_scripts/figure5.py b/benchmarks/sigmod21-reproducibility/plot_scripts/figure5.py index 71ced5490..6d658b580 100644 --- a/benchmarks/sigmod21-reproducibility/plot_scripts/figure5.py +++ b/benchmarks/sigmod21-reproducibility/plot_scripts/figure5.py @@ -117,8 +117,8 @@ def figure5(logs_path='r5d.8xlarge/logs/', output_folder='plots'): # pyspark bars plt_bar(ax, 3-w, pyspark_single_regex_udf, w, pyspark_col, 'PySpark (UDF)', 'center', 1120, th=40) plt_bar(ax, -w, pyspark_strip_udf, w, pyspark_col, 'PySpark (UDF)', 'center', 1120, th=40) - plt_bar(ax, 2-w2, pysparksql_percol_regex, w, pysparksql_col, 'PySparkSQL', 'center', yerr=np.array([pysparksql_percol_regex.std()])) - plt_bar(ax, 1-w2, pysparksql_split, w, pysparksql_col, 'PySparkSQL', 'center', yerr=np.array([pysparksql_split.std()])) + plt_bar(ax, 2-w2, pysparksql_percol_regex, w, pysparksql_col, 'PySparkSQL', 'above', above_offset=ao, yerr=np.array([pysparksql_percol_regex.std()])) + plt_bar(ax, 1-w2, pysparksql_split, w, pysparksql_col, 'PySparkSQL', 'above', above_offset=ao, yerr=np.array([pysparksql_split.std()])) ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False) diff --git a/benchmarks/sigmod21-reproducibility/plot_scripts/figure8.py b/benchmarks/sigmod21-reproducibility/plot_scripts/figure8.py index c055cb882..b83ba0d98 100644 --- a/benchmarks/sigmod21-reproducibility/plot_scripts/figure8.py +++ b/benchmarks/sigmod21-reproducibility/plot_scripts/figure8.py @@ -33,171 +33,91 @@ adjust_settings() - -# In[91]: - - def load_311_to_df(paths): rows = [] for path in sorted(paths): - file = os.path.basename(path) - name = file[:file.find('-run')] - if file.endswith('.txt'): - # print(path) - with open(path, 'r') as fp: - lines = fp.readlines() - - # skip empty files (means timeout) - if len(lines) == 0: - continue - - row = {} - # get run number - run_no = int(path[path.rfind('-')+1:path.rfind('.txt')]) - - # tuplex decode - if 'tuplex' in file: - d = json.loads(list(filter(lambda x: 'startupTime' in x, lines))[0]) - - #breakdown time extract for tuplex - c = '\n'.join(lines) - - pattern = re.compile('load&transform tasks in (\d+.\d+)s') - lt_times = np.array(list(map(float, pattern.findall(c)))) - - pattern = re.compile('compiled to x86 in (\d+.\d+)s') - cp_times = np.array(list(map(float, pattern.findall(c)))) - - m = re.search('writing output took (\d+.\d+)s', c) - if m: - w_time = float(m[1]) - row['write'] = w_time - lt_time = lt_times.sum() - cp_time = cp_times.sum() - row['compute'] = lt_time - row['compile'] = cp_time - elif 'weld-run' in file: - keys = lines[-2].strip().split(',') - vals = lines[-1].strip().split(',') - d = dict(zip(keys, vals)) - else: - d = json.loads(lines[-1].replace("'", '"')) - - readTime = d['readTime'] if 'readTime' in d else 0. - writeTime = d['writeTime'] if 'writeTime' in d else 0. - startupTime = d['startupTime'] if 'startupTime' in d else 0. - row = {'startup_time' : startupTime, "load":readTime, "write": writeTime} - if 'weld' in file: - row['compute'] = d['query'] if 'query' in d else d['jobTime'] - row['job_time'] = 0 - if 'weld-run' in file: - row['job_time'] = d['query'] - row['load'] = d['pandas_load'] + d['load'] + + try: + file = os.path.basename(path) + name = file[:file.find('-run')] + if file.endswith('.txt'): + # print(path) + with open(path, 'r') as fp: + lines = fp.readlines() + + # skip empty files (means timeout) + if len(lines) == 0: + continue + + row = {} + + # tuplex decode + if 'tuplex' in name: + # d = {} + # if 'tuplex' in name: + d = json.loads(list(filter(lambda x: 'startupTime' in x, lines))[0]) + # else: + # d = json.loads(lines[-1].replace("'", '"')) + + #breakdown time extract for tuplex + c = '\n'.join(lines) + + pattern = re.compile('load&transform tasks in (\d+.\d+)s') + lt_times = np.array(list(map(float, pattern.findall(c)))) + + pattern = re.compile('compiled to x86 in (\d+.\d+)s') + cp_times = np.array(list(map(float, pattern.findall(c)))) + + m = re.search('writing output took (\d+.\d+)s', c) + if m: + w_time = float(m[1]) + row['write'] = w_time + lt_time = lt_times.sum() + cp_time = cp_times.sum() + row['compute'] = lt_time + row['compile'] = cp_time + else: + d = json.loads(lines[-1].replace("'", '"')) + + # # clean keys + # row = {'startup_time': d['startupTime'], 'job_time': d['jobTime'], } + # if 'load_time' in d.keys(): + # row['load'] = d['load_time'] + # if 'run_time' in d.keys(): + # row['compute'] = d['run_time'] + # if 'write_time' in d.keys(): + # row['write'] = d['write_time'] + # if 'jobTime' in d.keys(): + # row['job_time'] = d['jobTime'] + # else: + # row['job_time'] = d['job_time'] + + # if 'startup_time' in d.keys(): + # row['startup_time'] = d['startup_time'] + + readTime = d['readTime'] if 'readTime' in d else 0. + writeTime = d['writeTime'] if 'writeTime' in d else 0. + row = {'startup_time' : d['startupTime'], "load":readTime, "write": writeTime} + if 'weld' in file: + row['compute'] = d['jobTime'] + row['job_time'] = 0 + row['mode'] = 'weld' else: + assert 'e2e' in file + row['compute'] = 0 row['job_time'] = d['jobTime'] - row['mode'] = 'weld' - else: - assert 'e2e' in file - row['compute'] = 0 - row['job_time'] = d['jobTime'] - row['mode'] = 'e2e' - row['framework'] = name - if name == 'sttuplex': - row['framework'] = 'tuplex' - row['mode'] += '-st' - if len(row) > 0: - row['run'] = run_no - rows.append(row) - else: - print(file) - return pd.DataFrame(rows) - - -# In[121]: - - -def load_311_to_df(paths): - rows = [] - - for path in sorted(paths): - file = os.path.basename(path) - name = file[:file.find('-run')] - if file.endswith('.txt'): - # print(path) - with open(path, 'r') as fp: - lines = fp.readlines() - - # skip empty files (means timeout) - if len(lines) == 0: - continue - - row = {} - - # tuplex decode - if 'tuplex' in file: -# d = {} -# if 'tuplex' in name: - d = json.loads(list(filter(lambda x: 'startupTime' in x, lines))[0]) -# else: -# d = json.loads(lines[-1].replace("'", '"')) - - #breakdown time extract for tuplex - c = '\n'.join(lines) - - pattern = re.compile('load&transform tasks in (\d+.\d+)s') - lt_times = np.array(list(map(float, pattern.findall(c)))) - - pattern = re.compile('compiled to x86 in (\d+.\d+)s') - cp_times = np.array(list(map(float, pattern.findall(c)))) - - m = re.search('writing output took (\d+.\d+)s', c) - if m: - w_time = float(m[1]) - row['write'] = w_time - lt_time = lt_times.sum() - cp_time = cp_times.sum() - row['compute'] = lt_time - row['compile'] = cp_time - else: - d = json.loads(lines[-1].replace("'", '"')) - -# # clean keys -# row = {'startup_time': d['startupTime'], 'job_time': d['jobTime'], } -# if 'load_time' in d.keys(): -# row['load'] = d['load_time'] -# if 'run_time' in d.keys(): -# row['compute'] = d['run_time'] -# if 'write_time' in d.keys(): -# row['write'] = d['write_time'] -# if 'jobTime' in d.keys(): -# row['job_time'] = d['jobTime'] -# else: -# row['job_time'] = d['job_time'] - -# if 'startup_time' in d.keys(): -# row['startup_time'] = d['startup_time'] - - readTime = d['readTime'] if 'readTime' in d else 0. - writeTime = d['writeTime'] if 'writeTime' in d else 0. - row = {'startup_time' : d['startupTime'], "load":readTime, "write": writeTime} - if 'weld' in file: - row['compute'] = d['jobTime'] - row['job_time'] = 0 - row['mode'] = 'weld' - else: - assert 'e2e' in file - row['compute'] = 0 - row['job_time'] = d['jobTime'] - row['mode'] = 'e2e' - row['framework'] = name - if name == 'sttuplex': - row['framework'] = 'tuplex' - row['mode'] += '-st' - if len(row) > 0: - rows.append(row) - else: - print(file) + row['mode'] = 'e2e' + row['framework'] = name + if name == 'sttuplex': + row['framework'] = 'tuplex' + row['mode'] += '-st' + if len(row) > 0: + rows.append(row) + else: + print(file) + except Exception as e: + logging.warning("Could not extract data for path {}, details: {}".format(path, e)) return pd.DataFrame(rows)[['startup_time', 'job_time', 'load', 'compute', 'write', 'framework', 'mode']] @@ -319,9 +239,9 @@ def plot_bars(ax, subdf_mu, subdf_std, key='total', aoff=aoff, precision=precisi precision=precision, above_offset=aoff, yerr=subdf_std[(subdf_std['framework'] == 'tuplex') & (subdf_std['threads'] == 16)][key]) - plt_bar(ax, 4, dask_row_mu[key], w, dask_col, 'Dask', number_positions[3], + plt_bar(ax, 4, subdf_mu[subdf_mu['framework'] == 'dask'][key], w, dask_col, 'Dask', number_positions[3], precision=precision, above_offset=aoff, - yerr=dask_row_std[key]) + yerr=subdf_std[subdf_std['framework'] == 'dask'][key]) mu = subdf_mu[subdf_mu['framework'] == 'pysparksql'][key] sig = subdf_std[subdf_std['framework'] == 'pysparksql'][key] diff --git a/benchmarks/sigmod21-reproducibility/plot_scripts/figure9.py b/benchmarks/sigmod21-reproducibility/plot_scripts/figure9.py index 437e12dec..431a5dda6 100644 --- a/benchmarks/sigmod21-reproducibility/plot_scripts/figure9.py +++ b/benchmarks/sigmod21-reproducibility/plot_scripts/figure9.py @@ -4,6 +4,7 @@ # ## Combined TPC-H Q6 and Q19 Plot # In[96]: +import os.path import warnings warnings.filterwarnings("ignore") import logging @@ -42,7 +43,7 @@ def figure9(tpch_path='r5d.8xlarge/tpch', output_folder='plots'): if not tpch_path.endswith('/'): tpch_path += '/' - hyper_files = glob.glob(tpch_path + 'q19/data/hyper*.txt') + hyper_files = glob.glob(tpch_path + 'q19/hyper*.txt') rows = [] for path in hyper_files: @@ -66,26 +67,32 @@ def figure9(tpch_path='r5d.8xlarge/tpch', output_folder='plots'): # ### Clean Q19/Q6 files def load_paths(paths, sf=1): + if not paths: + return pd.DataFrame() + rows = [] for path in paths: - if 'tuplex' in path: - text = open(path, 'r').read() - name = os.path.basename(path) - fw = name[:name.find('-run')] - subtext = text[text.find('framework,version,load,query'):] - lines = subtext.split() - D = dict(zip(lines[0].split(','), lines[1].split(','))) - D['sf'] = sf - D['framework'] = fw - rows.append(D) - else: - text = open(path, 'r').readlines() - D = dict(zip(text[-2].strip().split(','), text[-1].strip().split(','))) - name = os.path.basename(path) - fw = name[:name.find('-run')] - D['framework'] = fw.replace('-preprocessed', '') # fix for hyper?? - D['sf'] = sf - rows.append(D) + try: + if 'tuplex' in os.path.basename(path): + text = open(path, 'r').read() + name = os.path.basename(path) + fw = name[:name.find('-run')] + subtext = text[text.find('framework,version,load,query'):] + lines = subtext.split() + D = dict(zip(lines[0].split(','), lines[1].split(','))) + D['sf'] = sf + D['framework'] = fw + rows.append(D) + else: + text = open(path, 'r').readlines() + D = dict(zip(text[-2].strip().split(','), text[-1].strip().split(','))) + name = os.path.basename(path) + fw = name[:name.find('-run')] + D['framework'] = fw.replace('-preprocessed', '') # fix for hyper?? + D['sf'] = sf + rows.append(D) + except Exception as e: + logging.warning('Path {}, couldn\'t extract information. Run failed? Skipping for now.'.format(path)) df = pd.DataFrame(rows) df['load'] = df['load'].astype(float) df['query'] = df['query'].astype(float) @@ -99,9 +106,9 @@ def load_paths(paths, sf=1): df = df.sort_values(by='total').reset_index(drop=True) return df - df = load_paths(glob.glob(tpch_path + 'q6/data/*.txt'), sf=10) + df = load_paths(glob.glob(tpch_path + 'q6/*.txt'), sf=10) df.to_csv('q6.csv', index=None) - df = load_paths(glob.glob(tpch_path + 'q19/data/*.txt'), sf=10) + df = load_paths(glob.glob(tpch_path + 'q19/*.txt'), sf=10) df.to_csv('q19.csv', index=None) diff --git a/benchmarks/sigmod21-reproducibility/plot_scripts/paper.py b/benchmarks/sigmod21-reproducibility/plot_scripts/paper.py index a989b30d7..670459070 100644 --- a/benchmarks/sigmod21-reproducibility/plot_scripts/paper.py +++ b/benchmarks/sigmod21-reproducibility/plot_scripts/paper.py @@ -110,116 +110,120 @@ def parse_logs_exp_to_df(data_root): def plt_bar(ax, x, data, w, color, name, value=None, cutoff=None, fsize=30, edge_width=2.5, th=100, above_offset=200, precision=0, yerr=None, hatch=None): - mu = data.mean() - std = data.std() - h = mu - ec = 'white' - if cutoff: - h = cutoff + th / 2 - ec = 'none' if not hatch else color - - if hatch: - plt.rcParams.update({'hatch.color': 'w'}) - plt.rcParams.update({'hatch.linewidth': '4'}) - b = ax.bar(x, h, w, color=color, edgecolor=ec, hatch='//', linewidth=0) - else: - b = ax.bar(x, h, w, color=color, edgecolor=ec) - - for rect in b: - - # if hatch: - # plt.rcParams.update({'hatch.color': 'w'}) - # plt.rcParams.update({'hatch.linewidth': '4'}) - # - # rect.set_hatch(hatch) - # # col = rect.get_facecolor() - # # rect.set_color('none') - # # rect.set_ec(col) - # # rect.set_lw(2) - # col = rect.get_facecolor() - # rect.set_color(col) - # - # # rect.set_ec('w') - # # rect.set_lw(5) - dx = 0 + + try: + mu = data.mean() + std = data.std() + h = mu + ec = 'white' + if cutoff: + h = cutoff + th / 2 + ec = 'none' if not hatch else color + + if hatch: + plt.rcParams.update({'hatch.color': 'w'}) + plt.rcParams.update({'hatch.linewidth': '4'}) + b = ax.bar(x, h, w, color=color, edgecolor=ec, hatch='//', linewidth=0) + else: + b = ax.bar(x, h, w, color=color, edgecolor=ec) + + for rect in b: + + # if hatch: + # plt.rcParams.update({'hatch.color': 'w'}) + # plt.rcParams.update({'hatch.linewidth': '4'}) + # + # rect.set_hatch(hatch) + # # col = rect.get_facecolor() + # # rect.set_color('none') + # # rect.set_ec(col) + # # rect.set_lw(2) + # col = rect.get_facecolor() + # rect.set_color(col) + # + # # rect.set_ec('w') + # # rect.set_lw(5) + dx = 0 + if cutoff: + ax.plot([rect.get_x() + dx, rect.get_x() + dx], [rect.get_y(), rect.get_y() + rect.get_height() + th], + lw=edge_width, color='w') + ax.plot([rect.get_x() + rect.get_width() - dx, rect.get_x() + rect.get_width() - dx], + [rect.get_y(), rect.get_y() + rect.get_height() + th], + lw=edge_width, color='w') + + label = '${}$'.format(int(mu)) + if precision > 0: + label = ('${:.' + str(precision) + 'f}$').format(mu) + + neutral_col = 'k' if hatch else 'white' + + if value == 'center': + ax.text(rect.get_x() + rect.get_width() / 2.0, + rect.get_height() / 2.0, + label, + ha='center', + va='center', rotation=90, fontSize=fsize, fontweight='bold', color=neutral_col) + if value == 'above': + ax.text(rect.get_x() + rect.get_width() / 2.0, + rect.get_height() + above_offset, + label, + ha='center', + va='bottom', rotation=90, fontSize=fsize, fontweight='bold', color=color) + + # add tile to cutoff bar if cutoff: - ax.plot([rect.get_x() + dx, rect.get_x() + dx], [rect.get_y(), rect.get_y() + rect.get_height() + th], - lw=edge_width, color='w') - ax.plot([rect.get_x() + rect.get_width() - dx, rect.get_x() + rect.get_width() - dx], - [rect.get_y(), rect.get_y() + rect.get_height() + th], - lw=edge_width, color='w') - - label = '${}$'.format(int(mu)) - if precision > 0: - label = ('${:.' + str(precision) + 'f}$').format(mu) - - neutral_col = 'k' if hatch else 'white' - - if value == 'center': - ax.text(rect.get_x() + rect.get_width() / 2.0, - rect.get_height() / 2.0, - label, - ha='center', - va='center', rotation=90, fontSize=fsize, fontweight='bold', color=neutral_col) - if value == 'above': - ax.text(rect.get_x() + rect.get_width() / 2.0, - rect.get_height() + above_offset, - label, - ha='center', - va='bottom', rotation=90, fontSize=fsize, fontweight='bold', color=color) - - # add tile to cutoff bar - if cutoff: - - tw = w / 2 - ty = h - tx = x - w / 2 - vertsA = [ - (tx, ty), - (tx + tw / 2, ty + th), - (tx + tw, ty), - (tx + tw, ty - 20), - (tx + 0, ty - 20), - (tx + 0, ty) - ] - codesA = [ - Path.MOVETO, - Path.CURVE3, - Path.CURVE3, - Path.LINETO, - Path.LINETO, - Path.CLOSEPOLY, - ] - tx = x - vertsB = [ - (tx, ty), - (tx + tw / 2, ty - th), - (tx + tw, ty), - (tx, ty) - ] - - codesB = [ - Path.MOVETO, - Path.CURVE3, - Path.CURVE3, - Path.LINETO, - ] - - if not hatch: - pathA = Path(vertsA, codesA) - pathB = Path(vertsB, codesB) - patchA = mpatches.PathPatch(pathA, facecolor=color, edgecolor='none') - ax.add_patch(patchA) - patchB = mpatches.PathPatch(pathB, facecolor='white', edgecolor='none') - ax.add_patch(patchB) - - else: - if yerr is not None: - if len(yerr) == 1: - yerr = np.array(yerr)[0] - ax.errorbar(x, h, - yerr=yerr, - capsize=10, - capthick=edge_width, - color='k', fmt='none', - linewidth=edge_width) + + tw = w / 2 + ty = h + tx = x - w / 2 + vertsA = [ + (tx, ty), + (tx + tw / 2, ty + th), + (tx + tw, ty), + (tx + tw, ty - 20), + (tx + 0, ty - 20), + (tx + 0, ty) + ] + codesA = [ + Path.MOVETO, + Path.CURVE3, + Path.CURVE3, + Path.LINETO, + Path.LINETO, + Path.CLOSEPOLY, + ] + tx = x + vertsB = [ + (tx, ty), + (tx + tw / 2, ty - th), + (tx + tw, ty), + (tx, ty) + ] + + codesB = [ + Path.MOVETO, + Path.CURVE3, + Path.CURVE3, + Path.LINETO, + ] + + if not hatch: + pathA = Path(vertsA, codesA) + pathB = Path(vertsB, codesB) + patchA = mpatches.PathPatch(pathA, facecolor=color, edgecolor='none') + ax.add_patch(patchA) + patchB = mpatches.PathPatch(pathB, facecolor='white', edgecolor='none') + ax.add_patch(patchB) + + else: + if yerr is not None: + if len(yerr) == 1: + yerr = np.array(yerr)[0] + ax.errorbar(x, h, + yerr=yerr, + capsize=10, + capthick=edge_width, + color='k', fmt='none', + linewidth=edge_width) + except Exception as e: + print('plt_bar failed with {}'.format(e)) \ No newline at end of file diff --git a/benchmarks/sigmod21-reproducibility/plot_scripts/zillow_plots.py b/benchmarks/sigmod21-reproducibility/plot_scripts/zillow_plots.py index b8e702773..322593d88 100644 --- a/benchmarks/sigmod21-reproducibility/plot_scripts/zillow_plots.py +++ b/benchmarks/sigmod21-reproducibility/plot_scripts/zillow_plots.py @@ -5,7 +5,7 @@ # this notebook produces all plots necessary for Figure 3 in the final number + numbers for the accompanying text. # Figure 3, 7 and table3 # In[24]: - +import os.path import matplotlib import matplotlib.pyplot as plt @@ -47,7 +47,9 @@ def load_zillow_to_df(data_root): for file in files: path = os.path.join(data_root, file) name = file[:file.find('-run')] - + + basename = os.path.basename(path) + # skip compile runs, they should be loaded separately... if 'compile-run' in file: continue @@ -68,7 +70,7 @@ def load_zillow_to_df(data_root): run_no = int(path[path.rfind('run-')+4:path.rfind('.txt')]) # CC baseline decode - if 'cc-' in path or 'cpp_' in path: + if 'cc-' in basename or 'cpp_' in basename: d = json.loads(lines[-1]) row = {} row['write'] = d['output'] / 10**9 @@ -93,7 +95,7 @@ def load_zillow_to_df(data_root): # override if compute is available if 'compute_time' in d.keys(): row['compute'] = d['compute_time'] - elif 'scala' in path: # Scala + elif 'scala' in basename: # Scala row['framework'] = 'scala' row['type'] = 'single-threaded' @@ -108,7 +110,7 @@ def load_zillow_to_df(data_root): row['startup_time'] = float(re.sub('[^0-9.]*', '', lines[0])) # tuplex decode - elif 'tuplex' in path: + elif 'tuplex' in basename: try: d = {} if 'tuplex' in name: @@ -218,12 +220,21 @@ def load_zillow_to_df(data_root): # print('file: {}'.format(file)) # print(type(e)) # print(e) + logging.warning("Could not parse experimental result file {}, did run complete? Skipping for now.".format(basename)) pass return pd.DataFrame(rows) # In[76]: +def find_idx(arr, f): + idx = 0 + for a in arr: + if f(a): + return idx + idx += 1 + return None + def load_data(zillow_folder='r5d.8xlarge/zillow'): df_Z1 = load_zillow_to_df(os.path.join(zillow_folder, 'Z1/')) df_Z1 = df_Z1[sorted(df_Z1.columns)] @@ -241,7 +252,7 @@ def load_data(zillow_folder='r5d.8xlarge/zillow'): subdf = df[df['type'].isin(['single-threaded-preload', 'preload'])] subdf = subdf.groupby(['framework', 'mode', 'type']).mean().sort_values(by='compute').reset_index() recs = subdf.to_dict('records') - tuplex_time = recs[1]['job_time'] #note the switch due to how times are measured + tuplex_time = recs[find_idx(recs, lambda x: x['framework'] == 'tuplex')]['job_time'] #note the switch due to how times are measured cc_time = recs[0]['compute'] logging.info('Zillow Z1:: Tuplex takes {:.2f}s vs. C++ {:.2f}s, i.e. comes within {:.2f}%'.format(tuplex_time, cc_time, @@ -251,7 +262,7 @@ def load_data(zillow_folder='r5d.8xlarge/zillow'): subdf = df[df['type'].isin(['single-threaded-preload', 'preload'])] subdf = subdf.groupby(['framework', 'mode', 'type']).mean().sort_values(by='compute').reset_index() recs = subdf.to_dict('records') - tuplex_time = recs[1]['job_time'] #note the switch due to how times are measured + tuplex_time = recs[find_idx(recs, lambda x: x['framework'] == 'tuplex')]['job_time'] #note the switch due to how times are measured cc_time = recs[0]['compute'] logging.info('Zillow Z2:: Tuplex takes {:.2f}s vs. C++ {:.2f}s, i.e. comes within {:.2f}%'.format(tuplex_time, cc_time, @@ -288,7 +299,7 @@ def table3(df): # use here df_Z1! # Compare this to best CPython result best_cpython_result = df[df['framework'] == 'python3'].groupby(['framework', 'mode', 'type']) .mean().reset_index().sort_values('compute').head(1)[['framework', 'mode', 'type', 'compute']] - logging.info('Best CPYthon result: {}s'.format(best_cpython_result['compute'].values[0])) + logging.info('Best CPython result: {}s'.format(best_cpython_result['compute'].values[0])) def figure3(df_Z1, df_Z2, output_folder): @@ -300,7 +311,7 @@ def figure3(df_Z1, df_Z2, output_folder): # which df to use? df = df_Z1.copy() - # drop tuplex preload + # drop tuplex preload and single-threaded df = df[df['type'] != 'single-threaded-preload'] query_name = 'Z1' @@ -313,12 +324,15 @@ def figure3(df_Z1, df_Z2, output_folder): df_st_dict = df_st_mu[df_st_mu['type'] == 'dict'].sort_values(by='job_time').reset_index(drop=True) df_st_rest = df_st_mu[~df_st_mu['type'].isin(['tuple', 'dict'])].sort_values(by='job_time').reset_index(drop=True) + # exclude tuplex/single-threaded from st_rest (use the no-nvo version!) + df_st_rest = df_st_rest[~((df_st_rest['type'] == 'single-threaded') & (df_st_rest['framework'] == 'tuplex'))] + df_st_tuple_std = df_st_std[df_st_std['type'] == 'tuple'] df_st_dict_std = df_st_std[df_st_std['type'] == 'dict'] df_st_rest_std = df_st_std[~df_st_std['type'].isin(['tuple', 'dict'])] df_st = df[(df['mode'].isin(['python3', 'c++', 'scala'])) & (df['framework'].isin(st_fws))] - df_st = df_st[~df_st['type'].isin(['multi-threaded', 'cached', 'preload'])] + df_st = df_st[~df_st['type'].isin(['multi-threaded', 'multi-threaded-no-nvo', 'cached', 'preload'])] df_st_mu = df_st.groupby(['framework', 'type']).mean().reset_index() df_st_std = df_st.groupby(['framework', 'type']).std().reset_index() @@ -331,7 +345,10 @@ def figure3(df_Z1, df_Z2, output_folder): df_st_rest_std = df_st_std[~df_st_std['type'].isin(['tuple', 'dict'])] df_mt = df[(df['mode'].isin(['python3', 'c++', 'scala'])) & (df['framework'].isin(mt_fws))] - df_mt = df_mt[~df_mt['type'].isin(['single-threaded', 'cached', 'preload'])] + df_mt = df_mt[~df_mt['type'].isin(['single-threaded', 'single-threaded-no-nvo', 'cached', 'preload'])] + + # exclude tuplex multi-threaded, use the no-nvo setting + df_mt = df_mt[~((df_mt['type'] == 'multi-threaded') & (df_mt['framework'] == 'tuplex'))] df_mt_mu = df_mt.groupby(['framework', 'type']).mean().reset_index() df_mt_std = df_mt.groupby(['framework', 'type']).std().reset_index() @@ -364,6 +381,12 @@ def figure3(df_Z1, df_Z2, output_folder): ##### SINGLE-THREADED ###### ax = axs[0] + + # select Tuplex with single-threaded-no-nvo! + # df_st_rest, df_st_rest_std affected! + df_st_rest = df_st_rest[~((df_st_rest['type'] == 'single-threaded') & (df_st_rest['framework'] == 'tuplex'))] + df_st_rest_std = df_st_rest_std[~((df_st_rest_std['type'] == 'single-threaded') & (df_st_rest_std['framework'] == 'tuplex'))] + python3_dict_err = np.array([df_st_dict_std[df_st_dict_std['framework'] == 'python3']['job_time']]) python3_tuple_err = np.array([df_st_tuple_std[df_st_tuple_std['framework'] == 'python3']['job_time']]) pandas_err = np.array([df_st_rest_std[df_st_rest_std['framework'] == 'pandas']['job_time']]) @@ -519,7 +542,11 @@ def figure3(df_Z1, df_Z2, output_folder): df_st_rest_std = df_st_std[~df_st_std['type'].isin(['tuple', 'dict'])] df_mt = df[(df['mode'].isin(['python3', 'c++', 'scala'])) & (df['framework'].isin(mt_fws))] - df_mt = df_mt[~df_mt['type'].isin(['single-threaded', 'cached', 'preload'])] + df_mt = df_mt[~df_mt['type'].isin(['single-threaded', 'single-threaded-no-nvo', 'cached', 'preload'])] + + # exclude tuplex multi-threaded, use the no-nvo setting + df_mt = df_mt[~((df_mt['type'] == 'multi-threaded') & (df_mt['framework'] == 'tuplex'))] + df_mt_mu = df_mt.groupby(['framework', 'type']).mean().reset_index() df_mt_std = df_mt.groupby(['framework', 'type']).std().reset_index() @@ -697,7 +724,11 @@ def figure7(df_Z1, output_folder): df_st_rest_std = df_st_std[~df_st_std['type'].isin(['tuple', 'dict'])] df_mt = df[(df['mode'].isin(['python3', 'c++', 'scala'])) & (df['framework'].isin(mt_fws))] - df_mt = df_mt[~df_mt['type'].isin(['single-threaded', 'cached', 'preload'])] + df_mt = df_mt[~df_mt['type'].isin(['single-threaded', 'single-threaded-no-nvo', 'cached', 'preload'])] + + # exclude tuplex multi-threaded, use the no-nvo setting + df_mt = df_mt[~((df_mt['type'] == 'multi-threaded') & (df_mt['framework'] == 'tuplex'))] + df_mt_mu = df_mt.groupby(['framework', 'type']).mean().reset_index() df_mt_std = df_mt.groupby(['framework', 'type']).std().reset_index() @@ -724,6 +755,14 @@ def figure7(df_Z1, output_folder): pp_mt_mu = pp_mt.groupby(['framework', 'type', 'mode']).mean().reset_index() pp_mt_std = pp_mt.groupby(['framework', 'type', 'mode']).std().reset_index() + + # select Tuplex with single-threaded-no-nvo! + # df_st_rest, df_st_rest_std affected! + df_st_rest = df_st_rest[~((df_st_rest['type'] == 'multi-threaded-no-nvo') & (df_st_rest['framework'] == 'tuplex'))] + df_st_rest = df_st_rest[~((df_st_rest['type'] == 'single-threaded') & (df_st_rest['framework'] == 'tuplex'))] + df_st_rest_std = df_st_rest_std[~((df_st_rest_std['type'] == 'multi-threaded-no-nvo') & (df_st_rest_std['framework'] == 'tuplex'))] + df_st_rest_std = df_st_rest_std[~((df_st_rest_std['type'] == 'single-threaded') & (df_st_rest_std['framework'] == 'tuplex'))] + # links: https://stackoverflow.com/questions/14852821/aligning-rotated-xticklabels-with-their-respective-xticks sf = 1.1 fig, axs = plt.subplots(figsize=(sf * column_width, sf *column_width / rho * .6), @@ -854,7 +893,7 @@ def figure7(df_Z1, output_folder): dask_pypy_err = np.array([pp_mt_std[df_mt_std['framework'] == 'dask']['job_time']]) plt_bar(ax, 3-w4, df_mt_mu[df_mt_mu['framework'] == 'dask']['job_time'], w2, dask_col_g,'Dask', yerr=dask_py_err) - plt_bar(ax, 3+w4, pp_mt_mu[df_mt_mu['framework'] == 'dask']['job_time'], w2, dask_col,'Dask', yerr=dask_pypy_err) + plt_bar(ax, 3+w4, pp_mt_mu[pp_mt_mu['framework'] == 'dask']['job_time'], w2, dask_col,'Dask', yerr=dask_pypy_err) tplx_err = np.array([df_mt_std[df_mt_std['framework'] == 'tuplex']['job_time']]) diff --git a/benchmarks/sigmod21-reproducibility/results.tar.gz b/benchmarks/sigmod21-reproducibility/results.tar.gz new file mode 100644 index 000000000..7c06563ab Binary files /dev/null and b/benchmarks/sigmod21-reproducibility/results.tar.gz differ diff --git a/benchmarks/sigmod21-reproducibility/tuplex.py b/benchmarks/sigmod21-reproducibility/tuplex.py index db7bc2da0..9c53f2ab9 100755 --- a/benchmarks/sigmod21-reproducibility/tuplex.py +++ b/benchmarks/sigmod21-reproducibility/tuplex.py @@ -8,6 +8,10 @@ import subprocess import docker import gdown +import sys + +# meta targets, i.e. targets that are comprised of other targets +meta_targets = ['all', 'zillow', 'tpch', 'flights'] experiment_targets = ['all', 'zillow', 'flights', 'logs', '311', 'tpch', 'zillow/Z1', 'zillow/Z2', 'zillow/exceptions', @@ -37,6 +41,30 @@ def run(target, num_runs, detach): """ run benchmarks for specific dataset. THIS MIGHT TAKE A WHILE! """ logging.info('Running experiments for target {}'.format(target)) + # experiment_targets = ['all', 'zillow', 'flights', 'logs', '311', + # 'tpch', 'zillow/Z1', 'zillow/Z2', 'zillow/exceptions', + # 'tpch/Q06', 'tpch/Q19', 'flights/breakdown', 'flights/flights'] + + targets = [] + target = target.lower() + + # decode compound targets... + if target == 'zillow': + targets += ['zillow/Z1', 'zillow/Z2', 'zillow/exceptions'] + elif target == 'flights': + targets += ['flights/flights', 'flights/breakdown'] + elif target == 'tpch': + targets += ['tpch/q06', 'tpch/q19'] + elif target == 'all': + targets = [name.lower() for name in experiment_targets if name.lower() not in meta_targets] + else: + targets = [target] + + targets = sorted(targets) + + if len(targets) > 1: + logging.info('Target {} comprised of subtargets:\n\t- {}'.format(target, '\n\t- '.join(targets))) + # docker client dc = docker.from_env() @@ -56,24 +84,4002 @@ def run(target, num_runs, detach): assert container is not None, 'container not valid?' - # experiment_targets = ['all', 'zillow', 'flights', 'logs', '311', - # 'tpch', 'zillow/Z1', 'zillow/Z2', 'zillow/exceptions', - # 'tpch/Q06', 'tpch/Q19', 'flights/breakdown', 'flights/flights'] + # check that all paths exist in docker container + required_paths_in_docker = '''/data/311/311-service-requests-raw.csv +/data/311/311_2010_to_2020.csv +/data/311/311_preprocessed.csv +/data/311/actual_311_2010_to_2020_nyc.csv +/data/flights/GlobalAirportDatabase.txt +/data/flights/L_AIRPORT_ID.csv +/data/flights/L_CARRIER_HISTORY.csv +/data/flights/flights_on_time_performance_2009_01.csv +/data/flights/flights_on_time_performance_2009_02.csv +/data/flights/flights_on_time_performance_2009_03.csv +/data/flights/flights_on_time_performance_2009_04.csv +/data/flights/flights_on_time_performance_2009_05.csv +/data/flights/flights_on_time_performance_2009_06.csv +/data/flights/flights_on_time_performance_2009_07.csv +/data/flights/flights_on_time_performance_2009_08.csv +/data/flights/flights_on_time_performance_2009_09.csv +/data/flights/flights_on_time_performance_2009_10.csv +/data/flights/flights_on_time_performance_2009_11.csv +/data/flights/flights_on_time_performance_2009_12.csv +/data/flights/flights_on_time_performance_2010_01.csv +/data/flights/flights_on_time_performance_2010_02.csv +/data/flights/flights_on_time_performance_2010_03.csv +/data/flights/flights_on_time_performance_2010_04.csv +/data/flights/flights_on_time_performance_2010_05.csv +/data/flights/flights_on_time_performance_2010_06.csv +/data/flights/flights_on_time_performance_2010_07.csv +/data/flights/flights_on_time_performance_2010_08.csv +/data/flights/flights_on_time_performance_2010_09.csv +/data/flights/flights_on_time_performance_2010_10.csv +/data/flights/flights_on_time_performance_2010_11.csv +/data/flights/flights_on_time_performance_2010_12.csv +/data/flights/flights_on_time_performance_2011_01.csv +/data/flights/flights_on_time_performance_2011_02.csv +/data/flights/flights_on_time_performance_2011_03.csv +/data/flights/flights_on_time_performance_2011_04.csv +/data/flights/flights_on_time_performance_2011_05.csv +/data/flights/flights_on_time_performance_2011_06.csv +/data/flights/flights_on_time_performance_2011_07.csv +/data/flights/flights_on_time_performance_2011_08.csv +/data/flights/flights_on_time_performance_2011_09.csv +/data/flights/flights_on_time_performance_2011_10.csv +/data/flights/flights_on_time_performance_2011_11.csv +/data/flights/flights_on_time_performance_2011_12.csv +/data/flights/flights_on_time_performance_2012_01.csv +/data/flights/flights_on_time_performance_2012_02.csv +/data/flights/flights_on_time_performance_2012_03.csv +/data/flights/flights_on_time_performance_2012_04.csv +/data/flights/flights_on_time_performance_2012_05.csv +/data/flights/flights_on_time_performance_2012_06.csv +/data/flights/flights_on_time_performance_2012_07.csv +/data/flights/flights_on_time_performance_2012_08.csv +/data/flights/flights_on_time_performance_2012_09.csv +/data/flights/flights_on_time_performance_2012_10.csv +/data/flights/flights_on_time_performance_2012_11.csv +/data/flights/flights_on_time_performance_2012_12.csv +/data/flights/flights_on_time_performance_2013_01.csv +/data/flights/flights_on_time_performance_2013_02.csv +/data/flights/flights_on_time_performance_2013_03.csv +/data/flights/flights_on_time_performance_2013_04.csv +/data/flights/flights_on_time_performance_2013_05.csv +/data/flights/flights_on_time_performance_2013_06.csv +/data/flights/flights_on_time_performance_2013_07.csv +/data/flights/flights_on_time_performance_2013_08.csv +/data/flights/flights_on_time_performance_2013_09.csv +/data/flights/flights_on_time_performance_2013_10.csv +/data/flights/flights_on_time_performance_2013_11.csv +/data/flights/flights_on_time_performance_2013_12.csv +/data/flights/flights_on_time_performance_2014_01.csv +/data/flights/flights_on_time_performance_2014_02.csv +/data/flights/flights_on_time_performance_2014_03.csv +/data/flights/flights_on_time_performance_2014_04.csv +/data/flights/flights_on_time_performance_2014_05.csv +/data/flights/flights_on_time_performance_2014_06.csv +/data/flights/flights_on_time_performance_2014_07.csv +/data/flights/flights_on_time_performance_2014_08.csv +/data/flights/flights_on_time_performance_2014_09.csv +/data/flights/flights_on_time_performance_2014_10.csv +/data/flights/flights_on_time_performance_2014_11.csv +/data/flights/flights_on_time_performance_2014_12.csv +/data/flights/flights_on_time_performance_2015_01.csv +/data/flights/flights_on_time_performance_2015_02.csv +/data/flights/flights_on_time_performance_2015_03.csv +/data/flights/flights_on_time_performance_2015_04.csv +/data/flights/flights_on_time_performance_2015_05.csv +/data/flights/flights_on_time_performance_2015_06.csv +/data/flights/flights_on_time_performance_2015_07.csv +/data/flights/flights_on_time_performance_2015_08.csv +/data/flights/flights_on_time_performance_2015_09.csv +/data/flights/flights_on_time_performance_2015_10.csv +/data/flights/flights_on_time_performance_2015_11.csv +/data/flights/flights_on_time_performance_2015_12.csv +/data/flights/flights_on_time_performance_2016_01.csv +/data/flights/flights_on_time_performance_2016_02.csv +/data/flights/flights_on_time_performance_2016_03.csv +/data/flights/flights_on_time_performance_2016_04.csv +/data/flights/flights_on_time_performance_2016_05.csv +/data/flights/flights_on_time_performance_2016_06.csv +/data/flights/flights_on_time_performance_2016_07.csv +/data/flights/flights_on_time_performance_2016_08.csv +/data/flights/flights_on_time_performance_2016_09.csv +/data/flights/flights_on_time_performance_2016_10.csv +/data/flights/flights_on_time_performance_2016_11.csv +/data/flights/flights_on_time_performance_2016_12.csv +/data/flights/flights_on_time_performance_2017_01.csv +/data/flights/flights_on_time_performance_2017_02.csv +/data/flights/flights_on_time_performance_2017_03.csv +/data/flights/flights_on_time_performance_2017_04.csv +/data/flights/flights_on_time_performance_2017_05.csv +/data/flights/flights_on_time_performance_2017_06.csv +/data/flights/flights_on_time_performance_2017_07.csv +/data/flights/flights_on_time_performance_2017_08.csv +/data/flights/flights_on_time_performance_2017_09.csv +/data/flights/flights_on_time_performance_2017_10.csv +/data/flights/flights_on_time_performance_2017_11.csv +/data/flights/flights_on_time_performance_2017_12.csv +/data/flights/flights_on_time_performance_2018_01.csv +/data/flights/flights_on_time_performance_2018_02.csv +/data/flights/flights_on_time_performance_2018_03.csv +/data/flights/flights_on_time_performance_2018_04.csv +/data/flights/flights_on_time_performance_2018_05.csv +/data/flights/flights_on_time_performance_2018_06.csv +/data/flights/flights_on_time_performance_2018_07.csv +/data/flights/flights_on_time_performance_2018_08.csv +/data/flights/flights_on_time_performance_2018_09.csv +/data/flights/flights_on_time_performance_2018_10.csv +/data/flights/flights_on_time_performance_2018_11.csv +/data/flights/flights_on_time_performance_2018_12.csv +/data/flights/flights_on_time_performance_2019_01.csv +/data/flights/flights_on_time_performance_2019_02.csv +/data/flights/flights_on_time_performance_2019_03.csv +/data/flights/flights_on_time_performance_2019_04.csv +/data/flights/flights_on_time_performance_2019_05.csv +/data/flights/flights_on_time_performance_2019_06.csv +/data/flights/flights_on_time_performance_2019_07.csv +/data/flights/flights_on_time_performance_2019_08.csv +/data/flights/flights_on_time_performance_2019_09.csv +/data/flights/flights_on_time_performance_2019_10.csv +/data/flights/flights_on_time_performance_2019_11.csv +/data/flights/flights_on_time_performance_2019_12.csv +/data/flights_small/GlobalAirportDatabase.txt +/data/flights_small/L_AIRPORT_ID.csv +/data/flights_small/L_CARRIER_HISTORY.csv +/data/flights_small/flights_on_time_performance_2018_01.csv +/data/flights_small/flights_on_time_performance_2018_02.csv +/data/flights_small/flights_on_time_performance_2018_03.csv +/data/flights_small/flights_on_time_performance_2018_04.csv +/data/flights_small/flights_on_time_performance_2018_05.csv +/data/flights_small/flights_on_time_performance_2018_06.csv +/data/flights_small/flights_on_time_performance_2018_07.csv +/data/flights_small/flights_on_time_performance_2018_08.csv +/data/flights_small/flights_on_time_performance_2018_09.csv +/data/flights_small/flights_on_time_performance_2018_10.csv +/data/flights_small/flights_on_time_performance_2018_11.csv +/data/flights_small/flights_on_time_performance_2018_12.csv +/data/flights_small/flights_on_time_performance_2019_01.csv +/data/flights_small/flights_on_time_performance_2019_02.csv +/data/flights_small/flights_on_time_performance_2019_03.csv +/data/flights_small/flights_on_time_performance_2019_04.csv +/data/flights_small/flights_on_time_performance_2019_05.csv +/data/flights_small/flights_on_time_performance_2019_06.csv +/data/flights_small/flights_on_time_performance_2019_07.csv +/data/flights_small/flights_on_time_performance_2019_08.csv +/data/flights_small/flights_on_time_performance_2019_09.csv +/data/flights_small/flights_on_time_performance_2019_10.csv +/data/flights_small/flights_on_time_performance_2019_11.csv +/data/logs/2000.01.01.txt +/data/logs/2000.01.02.txt +/data/logs/2000.01.03.txt +/data/logs/2000.01.04.txt +/data/logs/2000.01.05.txt +/data/logs/2000.01.06.txt +/data/logs/2000.01.07.txt +/data/logs/2000.01.08.txt +/data/logs/2000.01.09.txt +/data/logs/2000.01.10.txt +/data/logs/2000.01.11.txt +/data/logs/2000.01.12.txt +/data/logs/2000.01.13.txt +/data/logs/2000.01.14.txt +/data/logs/2000.01.15.txt +/data/logs/2000.01.16.txt +/data/logs/2000.01.17.txt +/data/logs/2000.01.18.txt +/data/logs/2000.01.19.txt +/data/logs/2000.01.20.txt +/data/logs/2000.01.21.txt +/data/logs/2000.01.22.txt +/data/logs/2000.01.23.txt +/data/logs/2000.01.24.txt +/data/logs/2000.01.25.txt +/data/logs/2000.01.26.txt +/data/logs/2000.01.27.txt +/data/logs/2000.01.28.txt +/data/logs/2000.01.29.txt +/data/logs/2000.01.30.txt +/data/logs/2000.01.31.txt +/data/logs/2000.02.01.txt +/data/logs/2000.02.02.txt +/data/logs/2000.02.03.txt +/data/logs/2000.02.04.txt +/data/logs/2000.02.05.txt +/data/logs/2000.02.06.txt +/data/logs/2000.02.07.txt +/data/logs/2000.02.08.txt +/data/logs/2000.02.09.txt +/data/logs/2000.02.10.txt +/data/logs/2000.02.11.txt +/data/logs/2000.02.12.txt +/data/logs/2000.02.13.txt +/data/logs/2000.02.14.txt +/data/logs/2000.02.15.txt +/data/logs/2000.02.16.txt +/data/logs/2000.02.17.txt +/data/logs/2000.02.18.txt +/data/logs/2000.02.19.txt +/data/logs/2000.02.20.txt +/data/logs/2000.02.21.txt +/data/logs/2000.02.22.txt +/data/logs/2000.02.23.txt +/data/logs/2000.02.24.txt +/data/logs/2000.02.25.txt +/data/logs/2000.02.26.txt +/data/logs/2000.02.27.txt +/data/logs/2000.02.28.txt +/data/logs/2000.02.29.txt +/data/logs/2000.03.01.txt +/data/logs/2000.03.02.txt +/data/logs/2000.03.03.txt +/data/logs/2000.03.04.txt +/data/logs/2000.03.05.txt +/data/logs/2000.03.06.txt +/data/logs/2000.03.07.txt +/data/logs/2000.03.08.txt +/data/logs/2000.03.09.txt +/data/logs/2000.03.10.txt +/data/logs/2000.03.11.txt +/data/logs/2000.03.12.txt +/data/logs/2000.03.13.txt +/data/logs/2000.03.14.txt +/data/logs/2000.03.15.txt +/data/logs/2000.03.16.txt +/data/logs/2000.03.17.txt +/data/logs/2000.03.18.txt +/data/logs/2000.03.19.txt +/data/logs/2000.03.20.txt +/data/logs/2000.03.21.txt +/data/logs/2000.03.22.txt +/data/logs/2000.03.23.txt +/data/logs/2000.03.24.txt +/data/logs/2000.03.25.txt +/data/logs/2000.03.26.txt +/data/logs/2000.03.27.txt +/data/logs/2000.03.28.txt +/data/logs/2000.03.29.txt +/data/logs/2000.03.30.txt +/data/logs/2000.03.31.txt +/data/logs/2000.04.01.txt +/data/logs/2000.04.02.txt +/data/logs/2000.04.03.txt +/data/logs/2000.04.04.txt +/data/logs/2000.04.05.txt +/data/logs/2000.04.06.txt +/data/logs/2000.04.07.txt +/data/logs/2000.04.08.txt +/data/logs/2000.04.09.txt +/data/logs/2000.04.10.txt +/data/logs/2000.04.11.txt +/data/logs/2000.04.12.txt +/data/logs/2000.04.13.txt +/data/logs/2000.04.14.txt +/data/logs/2000.04.15.txt +/data/logs/2000.04.16.txt +/data/logs/2000.04.17.txt +/data/logs/2000.04.18.txt +/data/logs/2000.04.19.txt +/data/logs/2000.04.20.txt +/data/logs/2000.04.21.txt +/data/logs/2000.04.23.txt +/data/logs/2000.04.24.txt +/data/logs/2000.04.25.txt +/data/logs/2000.04.26.txt +/data/logs/2000.04.27.txt +/data/logs/2000.04.28.txt +/data/logs/2000.04.29.txt +/data/logs/2000.04.30.txt +/data/logs/2000.05.01.txt +/data/logs/2000.05.02.txt +/data/logs/2000.05.03.txt +/data/logs/2000.05.04.txt +/data/logs/2000.05.05.txt +/data/logs/2000.05.06.txt +/data/logs/2000.05.07.txt +/data/logs/2000.05.08.txt +/data/logs/2000.05.09.txt +/data/logs/2000.05.10.txt +/data/logs/2000.05.11.txt +/data/logs/2000.05.12.txt +/data/logs/2000.05.13.txt +/data/logs/2000.05.14.txt +/data/logs/2000.05.15.txt +/data/logs/2000.05.16.txt +/data/logs/2000.05.17.txt +/data/logs/2000.05.18.txt +/data/logs/2000.05.19.txt +/data/logs/2000.05.20.txt +/data/logs/2000.05.21.txt +/data/logs/2000.05.22.txt +/data/logs/2000.05.23.txt +/data/logs/2000.05.24.txt +/data/logs/2000.05.25.txt +/data/logs/2000.05.26.txt +/data/logs/2000.05.27.txt +/data/logs/2000.05.28.txt +/data/logs/2000.05.29.txt +/data/logs/2000.05.30.txt +/data/logs/2000.05.31.txt +/data/logs/2000.06.01.txt +/data/logs/2000.06.02.txt +/data/logs/2000.06.03.txt +/data/logs/2000.06.04.txt +/data/logs/2000.06.05.txt +/data/logs/2000.06.06.txt +/data/logs/2000.06.07.txt +/data/logs/2000.06.08.txt +/data/logs/2000.06.09.txt +/data/logs/2000.06.10.txt +/data/logs/2000.06.11.txt +/data/logs/2000.06.12.txt +/data/logs/2000.06.13.txt +/data/logs/2000.06.14.txt +/data/logs/2000.06.15.txt +/data/logs/2000.06.16.txt +/data/logs/2000.06.17.txt +/data/logs/2000.06.18.txt +/data/logs/2000.06.19.txt +/data/logs/2000.06.20.txt +/data/logs/2000.06.21.txt +/data/logs/2000.06.22.txt +/data/logs/2000.06.23.txt +/data/logs/2000.06.24.txt +/data/logs/2000.06.25.txt +/data/logs/2000.06.26.txt +/data/logs/2000.06.27.txt +/data/logs/2000.06.28.txt +/data/logs/2000.06.29.txt +/data/logs/2000.06.30.txt +/data/logs/2000.07.01.txt +/data/logs/2000.07.02.txt +/data/logs/2000.07.03.txt +/data/logs/2000.07.04.txt +/data/logs/2000.07.05.txt +/data/logs/2000.07.06.txt +/data/logs/2000.07.07.txt +/data/logs/2000.07.08.txt +/data/logs/2000.07.09.txt +/data/logs/2000.07.10.txt +/data/logs/2000.07.11.txt +/data/logs/2000.07.12.txt +/data/logs/2000.07.13.txt +/data/logs/2000.07.14.txt +/data/logs/2000.07.15.txt +/data/logs/2000.07.16.txt +/data/logs/2000.07.17.txt +/data/logs/2000.07.18.txt +/data/logs/2000.07.19.txt +/data/logs/2000.07.20.txt +/data/logs/2000.07.21.txt +/data/logs/2000.07.22.txt +/data/logs/2000.07.23.txt +/data/logs/2000.07.24.txt +/data/logs/2000.07.25.txt +/data/logs/2000.07.26.txt +/data/logs/2000.07.27.txt +/data/logs/2000.07.28.txt +/data/logs/2000.07.29.txt +/data/logs/2000.07.30.txt +/data/logs/2000.07.31.txt +/data/logs/2000.08.01.txt +/data/logs/2000.08.02.txt +/data/logs/2000.08.03.txt +/data/logs/2000.08.04.txt +/data/logs/2000.08.05.txt +/data/logs/2000.08.06.txt +/data/logs/2000.08.07.txt +/data/logs/2000.08.08.txt +/data/logs/2000.08.09.txt +/data/logs/2000.08.10.txt +/data/logs/2000.08.11.txt +/data/logs/2000.08.12.txt +/data/logs/2000.08.13.txt +/data/logs/2000.08.14.txt +/data/logs/2000.08.15.txt +/data/logs/2000.08.16.txt +/data/logs/2000.08.17.txt +/data/logs/2000.08.18.txt +/data/logs/2000.08.19.txt +/data/logs/2000.08.20.txt +/data/logs/2000.08.21.txt +/data/logs/2000.08.22.txt +/data/logs/2000.08.23.txt +/data/logs/2000.08.24.txt +/data/logs/2000.08.25.txt +/data/logs/2000.08.26.txt +/data/logs/2000.08.27.txt +/data/logs/2000.08.28.txt +/data/logs/2000.08.29.txt +/data/logs/2000.08.30.txt +/data/logs/2000.08.31.txt +/data/logs/2000.09.01.txt +/data/logs/2000.09.02.txt +/data/logs/2000.09.03.txt +/data/logs/2000.09.04.txt +/data/logs/2000.09.05.txt +/data/logs/2000.09.06.txt +/data/logs/2000.09.07.txt +/data/logs/2000.09.08.txt +/data/logs/2000.09.09.txt +/data/logs/2000.09.10.txt +/data/logs/2000.09.11.txt +/data/logs/2000.09.12.txt +/data/logs/2000.09.13.txt +/data/logs/2000.09.14.txt +/data/logs/2000.09.15.txt +/data/logs/2000.09.16.txt +/data/logs/2000.09.17.txt +/data/logs/2000.09.18.txt +/data/logs/2000.09.19.txt +/data/logs/2000.09.20.txt +/data/logs/2000.09.21.txt +/data/logs/2000.09.22.txt +/data/logs/2000.09.23.txt +/data/logs/2000.09.24.txt +/data/logs/2000.09.25.txt +/data/logs/2000.09.26.txt +/data/logs/2000.09.27.txt +/data/logs/2000.09.28.txt +/data/logs/2000.09.29.txt +/data/logs/2000.09.30.txt +/data/logs/2000.10.01.txt +/data/logs/2000.10.02.txt +/data/logs/2000.10.03.txt +/data/logs/2000.10.04.txt +/data/logs/2000.10.05.txt +/data/logs/2000.10.06.txt +/data/logs/2000.10.07.txt +/data/logs/2000.10.08.txt +/data/logs/2000.10.09.txt +/data/logs/2000.10.10.txt +/data/logs/2000.10.11.txt +/data/logs/2000.10.12.txt +/data/logs/2000.10.13.txt +/data/logs/2000.10.14.txt +/data/logs/2000.10.15.txt +/data/logs/2000.10.16.txt +/data/logs/2000.10.17.txt +/data/logs/2000.10.18.txt +/data/logs/2000.10.19.txt +/data/logs/2000.10.20.txt +/data/logs/2000.10.21.txt +/data/logs/2000.10.22.txt +/data/logs/2000.10.23.txt +/data/logs/2000.10.24.txt +/data/logs/2000.10.25.txt +/data/logs/2000.10.26.txt +/data/logs/2000.10.27.txt +/data/logs/2000.10.28.txt +/data/logs/2000.10.29.txt +/data/logs/2000.10.30.txt +/data/logs/2000.10.31.txt +/data/logs/2000.11.01.txt +/data/logs/2000.11.02.txt +/data/logs/2000.11.03.txt +/data/logs/2000.11.04.txt +/data/logs/2000.11.05.txt +/data/logs/2000.11.06.txt +/data/logs/2000.11.07.txt +/data/logs/2000.11.08.txt +/data/logs/2000.11.09.txt +/data/logs/2000.11.10.txt +/data/logs/2000.11.11.txt +/data/logs/2000.11.12.txt +/data/logs/2000.11.13.txt +/data/logs/2000.11.14.txt +/data/logs/2000.11.15.txt +/data/logs/2000.11.16.txt +/data/logs/2000.11.17.txt +/data/logs/2000.11.18.txt +/data/logs/2000.11.19.txt +/data/logs/2000.11.20.txt +/data/logs/2000.11.21.txt +/data/logs/2000.11.22.txt +/data/logs/2000.11.23.txt +/data/logs/2000.11.24.txt +/data/logs/2000.11.25.txt +/data/logs/2000.11.26.txt +/data/logs/2000.11.27.txt +/data/logs/2000.11.28.txt +/data/logs/2000.11.29.txt +/data/logs/2000.11.30.txt +/data/logs/2000.12.01.txt +/data/logs/2000.12.02.txt +/data/logs/2000.12.03.txt +/data/logs/2000.12.04.txt +/data/logs/2000.12.05.txt +/data/logs/2000.12.06.txt +/data/logs/2000.12.07.txt +/data/logs/2000.12.08.txt +/data/logs/2000.12.09.txt +/data/logs/2000.12.10.txt +/data/logs/2000.12.11.txt +/data/logs/2000.12.12.txt +/data/logs/2000.12.13.txt +/data/logs/2000.12.14.txt +/data/logs/2000.12.15.txt +/data/logs/2000.12.16.txt +/data/logs/2000.12.17.txt +/data/logs/2000.12.18.txt +/data/logs/2000.12.19.txt +/data/logs/2000.12.20.txt +/data/logs/2000.12.21.txt +/data/logs/2000.12.22.txt +/data/logs/2000.12.23.txt +/data/logs/2000.12.24.txt +/data/logs/2000.12.25.txt +/data/logs/2000.12.27.txt +/data/logs/2000.12.28.txt +/data/logs/2000.12.29.txt +/data/logs/2000.12.30.txt +/data/logs/2000.12.31.txt +/data/logs/2001.01.01.txt +/data/logs/2001.01.02.txt +/data/logs/2001.01.03.txt +/data/logs/2001.01.04.txt +/data/logs/2001.01.05.txt +/data/logs/2001.01.06.txt +/data/logs/2001.01.07.txt +/data/logs/2001.01.08.txt +/data/logs/2001.01.09.txt +/data/logs/2001.01.10.txt +/data/logs/2001.01.11.txt +/data/logs/2001.01.12.txt +/data/logs/2001.01.13.txt +/data/logs/2001.01.14.txt +/data/logs/2001.01.15.txt +/data/logs/2001.01.16.txt +/data/logs/2001.01.17.txt +/data/logs/2001.01.18.txt +/data/logs/2001.01.19.txt +/data/logs/2001.01.20.txt +/data/logs/2001.01.21.txt +/data/logs/2001.01.22.txt +/data/logs/2001.01.23.txt +/data/logs/2001.01.24.txt +/data/logs/2001.01.25.txt +/data/logs/2001.01.26.txt +/data/logs/2001.01.27.txt +/data/logs/2001.01.28.txt +/data/logs/2001.01.29.txt +/data/logs/2001.01.30.txt +/data/logs/2001.01.31.txt +/data/logs/2001.02.01.txt +/data/logs/2001.02.02.txt +/data/logs/2001.02.03.txt +/data/logs/2001.02.04.txt +/data/logs/2001.02.05.txt +/data/logs/2001.02.06.txt +/data/logs/2001.02.07.txt +/data/logs/2001.02.08.txt +/data/logs/2001.02.09.txt +/data/logs/2001.02.10.txt +/data/logs/2001.02.11.txt +/data/logs/2001.02.12.txt +/data/logs/2001.02.13.txt +/data/logs/2001.02.14.txt +/data/logs/2001.02.15.txt +/data/logs/2001.02.16.txt +/data/logs/2001.02.17.txt +/data/logs/2001.02.18.txt +/data/logs/2001.02.19.txt +/data/logs/2001.02.20.txt +/data/logs/2001.02.21.txt +/data/logs/2001.02.22.txt +/data/logs/2001.02.23.txt +/data/logs/2001.02.24.txt +/data/logs/2001.02.25.txt +/data/logs/2001.02.26.txt +/data/logs/2001.02.27.txt +/data/logs/2001.02.28.txt +/data/logs/2001.03.01.txt +/data/logs/2001.03.02.txt +/data/logs/2001.03.03.txt +/data/logs/2001.03.04.txt +/data/logs/2001.03.05.txt +/data/logs/2001.03.06.txt +/data/logs/2001.03.07.txt +/data/logs/2001.03.08.txt +/data/logs/2001.03.09.txt +/data/logs/2001.03.10.txt +/data/logs/2001.03.11.txt +/data/logs/2001.03.12.txt +/data/logs/2001.03.13.txt +/data/logs/2001.03.14.txt +/data/logs/2001.03.15.txt +/data/logs/2001.03.16.txt +/data/logs/2001.03.17.txt +/data/logs/2001.03.18.txt +/data/logs/2001.03.19.txt +/data/logs/2001.03.20.txt +/data/logs/2001.03.21.txt +/data/logs/2001.03.22.txt +/data/logs/2001.03.23.txt +/data/logs/2001.03.24.txt +/data/logs/2001.03.25.txt +/data/logs/2001.03.26.txt +/data/logs/2001.03.27.txt +/data/logs/2001.03.28.txt +/data/logs/2001.03.29.txt +/data/logs/2001.03.30.txt +/data/logs/2001.03.31.txt +/data/logs/2001.04.01.txt +/data/logs/2001.04.02.txt +/data/logs/2001.04.03.txt +/data/logs/2001.04.04.txt +/data/logs/2001.04.05.txt +/data/logs/2001.04.06.txt +/data/logs/2001.04.07.txt +/data/logs/2001.04.08.txt +/data/logs/2001.04.09.txt +/data/logs/2001.04.10.txt +/data/logs/2001.04.11.txt +/data/logs/2001.04.12.txt +/data/logs/2001.04.13.txt +/data/logs/2001.04.14.txt +/data/logs/2001.04.15.txt +/data/logs/2001.04.16.txt +/data/logs/2001.04.17.txt +/data/logs/2001.04.18.txt +/data/logs/2001.04.19.txt +/data/logs/2001.04.20.txt +/data/logs/2001.04.21.txt +/data/logs/2001.04.22.txt +/data/logs/2001.04.23.txt +/data/logs/2001.04.24.txt +/data/logs/2001.04.25.txt +/data/logs/2001.04.26.txt +/data/logs/2001.04.27.txt +/data/logs/2001.04.28.txt +/data/logs/2001.04.29.txt +/data/logs/2001.04.30.txt +/data/logs/2001.05.01.txt +/data/logs/2001.05.02.txt +/data/logs/2001.05.03.txt +/data/logs/2001.05.04.txt +/data/logs/2001.05.05.txt +/data/logs/2001.05.06.txt +/data/logs/2001.05.07.txt +/data/logs/2001.05.08.txt +/data/logs/2001.05.09.txt +/data/logs/2001.05.10.txt +/data/logs/2001.05.11.txt +/data/logs/2001.05.12.txt +/data/logs/2001.05.13.txt +/data/logs/2001.05.14.txt +/data/logs/2001.05.15.txt +/data/logs/2001.05.16.txt +/data/logs/2001.05.17.txt +/data/logs/2001.05.18.txt +/data/logs/2001.05.19.txt +/data/logs/2001.05.20.txt +/data/logs/2001.05.21.txt +/data/logs/2001.05.22.txt +/data/logs/2001.05.23.txt +/data/logs/2001.05.24.txt +/data/logs/2001.05.25.txt +/data/logs/2001.05.26.txt +/data/logs/2001.05.27.txt +/data/logs/2001.05.28.txt +/data/logs/2001.05.29.txt +/data/logs/2001.05.30.txt +/data/logs/2001.05.31.txt +/data/logs/2001.06.01.txt +/data/logs/2001.06.02.txt +/data/logs/2001.06.03.txt +/data/logs/2001.06.04.txt +/data/logs/2001.06.05.txt +/data/logs/2001.06.06.txt +/data/logs/2001.06.07.txt +/data/logs/2001.06.08.txt +/data/logs/2001.06.09.txt +/data/logs/2001.06.10.txt +/data/logs/2001.06.11.txt +/data/logs/2001.06.12.txt +/data/logs/2001.06.13.txt +/data/logs/2001.06.14.txt +/data/logs/2001.06.15.txt +/data/logs/2001.06.16.txt +/data/logs/2001.06.17.txt +/data/logs/2001.06.18.txt +/data/logs/2001.06.19.txt +/data/logs/2001.06.20.txt +/data/logs/2001.06.21.txt +/data/logs/2001.06.22.txt +/data/logs/2001.06.23.txt +/data/logs/2001.06.24.txt +/data/logs/2001.06.25.txt +/data/logs/2001.06.26.txt +/data/logs/2001.06.27.txt +/data/logs/2001.06.28.txt +/data/logs/2001.06.29.txt +/data/logs/2001.06.30.txt +/data/logs/2001.07.01.txt +/data/logs/2001.07.02.txt +/data/logs/2001.07.03.txt +/data/logs/2001.07.04.txt +/data/logs/2001.07.05.txt +/data/logs/2001.07.06.txt +/data/logs/2001.07.07.txt +/data/logs/2001.07.08.txt +/data/logs/2001.07.09.txt +/data/logs/2001.07.10.txt +/data/logs/2001.07.11.txt +/data/logs/2001.07.12.txt +/data/logs/2001.07.13.txt +/data/logs/2001.07.14.txt +/data/logs/2001.07.15.txt +/data/logs/2001.07.16.txt +/data/logs/2001.07.17.txt +/data/logs/2001.07.18.txt +/data/logs/2001.07.19.txt +/data/logs/2001.07.20.txt +/data/logs/2001.07.21.txt +/data/logs/2001.07.22.txt +/data/logs/2001.07.23.txt +/data/logs/2001.07.24.txt +/data/logs/2001.07.25.txt +/data/logs/2001.07.26.txt +/data/logs/2001.07.27.txt +/data/logs/2001.07.28.txt +/data/logs/2001.07.29.txt +/data/logs/2001.07.30.txt +/data/logs/2001.07.31.txt +/data/logs/2001.08.01.txt +/data/logs/2001.08.02.txt +/data/logs/2001.08.03.txt +/data/logs/2001.08.04.txt +/data/logs/2001.08.05.txt +/data/logs/2001.08.06.txt +/data/logs/2001.08.07.txt +/data/logs/2001.08.08.txt +/data/logs/2001.08.09.txt +/data/logs/2001.08.10.txt +/data/logs/2001.08.11.txt +/data/logs/2001.08.12.txt +/data/logs/2001.08.13.txt +/data/logs/2001.08.14.txt +/data/logs/2001.08.15.txt +/data/logs/2001.08.16.txt +/data/logs/2001.08.17.txt +/data/logs/2001.08.18.txt +/data/logs/2001.08.19.txt +/data/logs/2001.08.20.txt +/data/logs/2001.08.21.txt +/data/logs/2001.08.22.txt +/data/logs/2001.08.23.txt +/data/logs/2001.08.24.txt +/data/logs/2001.08.25.txt +/data/logs/2001.08.26.txt +/data/logs/2001.08.27.txt +/data/logs/2001.08.28.txt +/data/logs/2001.08.29.txt +/data/logs/2001.08.30.txt +/data/logs/2001.08.31.txt +/data/logs/2001.09.01.txt +/data/logs/2001.09.02.txt +/data/logs/2001.09.03.txt +/data/logs/2001.09.04.txt +/data/logs/2001.09.05.txt +/data/logs/2001.09.06.txt +/data/logs/2001.09.07.txt +/data/logs/2001.09.08.txt +/data/logs/2001.09.09.txt +/data/logs/2001.09.10.txt +/data/logs/2001.09.11.txt +/data/logs/2001.09.12.txt +/data/logs/2001.09.13.txt +/data/logs/2001.09.14.txt +/data/logs/2001.09.15.txt +/data/logs/2001.09.16.txt +/data/logs/2001.09.17.txt +/data/logs/2001.09.18.txt +/data/logs/2001.09.19.txt +/data/logs/2001.09.20.txt +/data/logs/2001.09.21.txt +/data/logs/2001.09.22.txt +/data/logs/2001.09.23.txt +/data/logs/2001.09.24.txt +/data/logs/2001.09.25.txt +/data/logs/2001.09.26.txt +/data/logs/2001.09.27.txt +/data/logs/2001.09.28.txt +/data/logs/2001.09.29.txt +/data/logs/2001.09.30.txt +/data/logs/2001.10.01.txt +/data/logs/2001.10.02.txt +/data/logs/2001.10.03.txt +/data/logs/2001.10.04.txt +/data/logs/2001.10.05.txt +/data/logs/2001.10.06.txt +/data/logs/2001.10.07.txt +/data/logs/2001.10.08.txt +/data/logs/2001.10.09.txt +/data/logs/2001.10.10.txt +/data/logs/2001.10.11.txt +/data/logs/2001.10.12.txt +/data/logs/2001.10.13.txt +/data/logs/2001.10.14.txt +/data/logs/2001.10.15.txt +/data/logs/2001.10.16.txt +/data/logs/2001.10.17.txt +/data/logs/2001.10.18.txt +/data/logs/2001.10.19.txt +/data/logs/2001.10.20.txt +/data/logs/2001.10.21.txt +/data/logs/2001.10.22.txt +/data/logs/2001.10.23.txt +/data/logs/2001.10.24.txt +/data/logs/2001.10.25.txt +/data/logs/2001.10.26.txt +/data/logs/2001.10.27.txt +/data/logs/2001.10.28.txt +/data/logs/2001.10.29.txt +/data/logs/2001.10.30.txt +/data/logs/2001.10.31.txt +/data/logs/2001.11.01.txt +/data/logs/2001.11.02.txt +/data/logs/2001.11.03.txt +/data/logs/2001.11.04.txt +/data/logs/2001.11.05.txt +/data/logs/2001.11.06.txt +/data/logs/2001.11.07.txt +/data/logs/2001.11.08.txt +/data/logs/2001.11.09.txt +/data/logs/2001.11.10.txt +/data/logs/2001.11.11.txt +/data/logs/2001.11.12.txt +/data/logs/2001.11.13.txt +/data/logs/2001.11.14.txt +/data/logs/2001.11.15.txt +/data/logs/2001.11.16.txt +/data/logs/2001.11.17.txt +/data/logs/2001.11.18.txt +/data/logs/2001.11.19.txt +/data/logs/2001.11.20.txt +/data/logs/2001.11.21.txt +/data/logs/2001.11.22.txt +/data/logs/2001.11.23.txt +/data/logs/2001.11.24.txt +/data/logs/2001.11.25.txt +/data/logs/2001.11.26.txt +/data/logs/2001.11.27.txt +/data/logs/2001.11.28.txt +/data/logs/2001.11.29.txt +/data/logs/2001.11.30.txt +/data/logs/2001.12.01.txt +/data/logs/2001.12.02.txt +/data/logs/2001.12.03.txt +/data/logs/2001.12.04.txt +/data/logs/2001.12.05.txt +/data/logs/2001.12.06.txt +/data/logs/2001.12.07.txt +/data/logs/2001.12.08.txt +/data/logs/2001.12.09.txt +/data/logs/2001.12.10.txt +/data/logs/2001.12.11.txt +/data/logs/2001.12.12.txt +/data/logs/2001.12.13.txt +/data/logs/2001.12.14.txt +/data/logs/2001.12.15.txt +/data/logs/2001.12.16.txt +/data/logs/2001.12.17.txt +/data/logs/2001.12.18.txt +/data/logs/2001.12.19.txt +/data/logs/2001.12.20.txt +/data/logs/2001.12.21.txt +/data/logs/2001.12.22.txt +/data/logs/2001.12.23.txt +/data/logs/2001.12.24.txt +/data/logs/2001.12.25.txt +/data/logs/2001.12.26.txt +/data/logs/2001.12.27.txt +/data/logs/2001.12.28.txt +/data/logs/2001.12.29.txt +/data/logs/2001.12.30.txt +/data/logs/2001.12.31.txt +/data/logs/2002.01.01.txt +/data/logs/2002.01.02.txt +/data/logs/2002.01.03.txt +/data/logs/2002.01.04.txt +/data/logs/2002.01.05.txt +/data/logs/2002.01.06.txt +/data/logs/2002.01.07.txt +/data/logs/2002.01.08.txt +/data/logs/2002.01.09.txt +/data/logs/2002.01.10.txt +/data/logs/2002.01.11.txt +/data/logs/2002.01.12.txt +/data/logs/2002.01.13.txt +/data/logs/2002.01.14.txt +/data/logs/2002.01.15.txt +/data/logs/2002.01.16.txt +/data/logs/2002.01.17.txt +/data/logs/2002.01.18.txt +/data/logs/2002.01.19.txt +/data/logs/2002.01.20.txt +/data/logs/2002.01.21.txt +/data/logs/2002.01.22.txt +/data/logs/2002.01.23.txt +/data/logs/2002.01.24.txt +/data/logs/2002.01.25.txt +/data/logs/2002.01.26.txt +/data/logs/2002.01.27.txt +/data/logs/2002.01.28.txt +/data/logs/2002.01.29.txt +/data/logs/2002.01.30.txt +/data/logs/2002.01.31.txt +/data/logs/2002.02.01.txt +/data/logs/2002.02.02.txt +/data/logs/2002.02.03.txt +/data/logs/2002.02.04.txt +/data/logs/2002.02.05.txt +/data/logs/2002.02.06.txt +/data/logs/2002.02.07.txt +/data/logs/2002.02.08.txt +/data/logs/2002.02.09.txt +/data/logs/2002.02.10.txt +/data/logs/2002.02.11.txt +/data/logs/2002.02.12.txt +/data/logs/2002.02.13.txt +/data/logs/2002.02.14.txt +/data/logs/2002.02.15.txt +/data/logs/2002.02.16.txt +/data/logs/2002.02.17.txt +/data/logs/2002.02.18.txt +/data/logs/2002.02.19.txt +/data/logs/2002.02.20.txt +/data/logs/2002.02.21.txt +/data/logs/2002.02.22.txt +/data/logs/2002.02.23.txt +/data/logs/2002.02.24.txt +/data/logs/2002.02.25.txt +/data/logs/2002.02.26.txt +/data/logs/2002.02.27.txt +/data/logs/2002.02.28.txt +/data/logs/2002.03.01.txt +/data/logs/2002.03.02.txt +/data/logs/2002.03.03.txt +/data/logs/2002.03.04.txt +/data/logs/2002.03.05.txt +/data/logs/2002.03.06.txt +/data/logs/2002.03.07.txt +/data/logs/2002.03.08.txt +/data/logs/2002.03.09.txt +/data/logs/2002.03.10.txt +/data/logs/2002.03.11.txt +/data/logs/2002.03.12.txt +/data/logs/2002.03.13.txt +/data/logs/2002.03.14.txt +/data/logs/2002.03.15.txt +/data/logs/2002.03.16.txt +/data/logs/2002.03.17.txt +/data/logs/2002.03.18.txt +/data/logs/2002.03.19.txt +/data/logs/2002.03.20.txt +/data/logs/2002.03.21.txt +/data/logs/2002.03.22.txt +/data/logs/2002.03.23.txt +/data/logs/2002.03.24.txt +/data/logs/2002.03.25.txt +/data/logs/2002.03.26.txt +/data/logs/2002.03.27.txt +/data/logs/2002.03.28.txt +/data/logs/2002.03.29.txt +/data/logs/2002.03.30.txt +/data/logs/2002.03.31.txt +/data/logs/2002.04.01.txt +/data/logs/2002.04.02.txt +/data/logs/2002.04.03.txt +/data/logs/2002.04.04.txt +/data/logs/2002.04.05.txt +/data/logs/2002.04.06.txt +/data/logs/2002.04.07.txt +/data/logs/2002.04.08.txt +/data/logs/2002.04.09.txt +/data/logs/2002.04.10.txt +/data/logs/2002.04.11.txt +/data/logs/2002.04.12.txt +/data/logs/2002.04.13.txt +/data/logs/2002.04.14.txt +/data/logs/2002.04.15.txt +/data/logs/2002.04.16.txt +/data/logs/2002.04.17.txt +/data/logs/2002.04.18.txt +/data/logs/2002.04.19.txt +/data/logs/2002.04.20.txt +/data/logs/2002.04.21.txt +/data/logs/2002.04.22.txt +/data/logs/2002.04.23.txt +/data/logs/2002.04.24.txt +/data/logs/2002.04.25.txt +/data/logs/2002.04.26.txt +/data/logs/2002.04.27.txt +/data/logs/2002.04.28.txt +/data/logs/2002.04.29.txt +/data/logs/2002.04.30.txt +/data/logs/2002.05.01.txt +/data/logs/2002.05.02.txt +/data/logs/2002.05.03.txt +/data/logs/2002.05.04.txt +/data/logs/2002.05.05.txt +/data/logs/2002.05.06.txt +/data/logs/2002.05.07.txt +/data/logs/2002.05.08.txt +/data/logs/2002.05.09.txt +/data/logs/2002.05.10.txt +/data/logs/2002.05.11.txt +/data/logs/2002.05.12.txt +/data/logs/2002.05.13.txt +/data/logs/2002.05.14.txt +/data/logs/2002.05.15.txt +/data/logs/2002.05.16.txt +/data/logs/2002.05.17.txt +/data/logs/2002.05.18.txt +/data/logs/2002.05.19.txt +/data/logs/2002.05.20.txt +/data/logs/2002.05.21.txt +/data/logs/2002.05.22.txt +/data/logs/2002.05.23.txt +/data/logs/2002.05.24.txt +/data/logs/2002.05.25.txt +/data/logs/2002.05.26.txt +/data/logs/2002.05.27.txt +/data/logs/2002.05.28.txt +/data/logs/2002.05.29.txt +/data/logs/2002.05.30.txt +/data/logs/2002.05.31.txt +/data/logs/2002.06.01.txt +/data/logs/2002.06.02.txt +/data/logs/2002.06.03.txt +/data/logs/2002.06.04.txt +/data/logs/2002.06.05.txt +/data/logs/2002.06.06.txt +/data/logs/2002.06.08.txt +/data/logs/2002.06.09.txt +/data/logs/2002.06.10.txt +/data/logs/2002.06.11.txt +/data/logs/2002.06.12.txt +/data/logs/2002.06.13.txt +/data/logs/2002.06.14.txt +/data/logs/2002.06.15.txt +/data/logs/2002.06.16.txt +/data/logs/2002.06.17.txt +/data/logs/2002.06.18.txt +/data/logs/2002.06.19.txt +/data/logs/2002.06.20.txt +/data/logs/2002.06.21.txt +/data/logs/2002.06.22.txt +/data/logs/2002.06.23.txt +/data/logs/2002.06.24.txt +/data/logs/2002.06.25.txt +/data/logs/2002.06.26.txt +/data/logs/2002.06.27.txt +/data/logs/2002.06.28.txt +/data/logs/2002.06.29.txt +/data/logs/2002.06.30.txt +/data/logs/2002.07.01.txt +/data/logs/2002.07.02.txt +/data/logs/2002.07.03.txt +/data/logs/2002.07.04.txt +/data/logs/2002.07.05.txt +/data/logs/2002.07.06.txt +/data/logs/2002.07.07.txt +/data/logs/2002.07.08.txt +/data/logs/2002.07.09.txt +/data/logs/2002.07.10.txt +/data/logs/2002.07.11.txt +/data/logs/2002.07.12.txt +/data/logs/2002.07.13.txt +/data/logs/2002.07.14.txt +/data/logs/2002.07.15.txt +/data/logs/2002.07.16.txt +/data/logs/2002.07.17.txt +/data/logs/2002.07.18.txt +/data/logs/2002.07.19.txt +/data/logs/2002.07.20.txt +/data/logs/2002.07.21.txt +/data/logs/2002.07.22.txt +/data/logs/2002.07.23.txt +/data/logs/2002.07.24.txt +/data/logs/2002.07.25.txt +/data/logs/2002.07.26.txt +/data/logs/2002.07.27.txt +/data/logs/2002.07.28.txt +/data/logs/2002.07.29.txt +/data/logs/2002.07.30.txt +/data/logs/2002.07.31.txt +/data/logs/2002.08.01.txt +/data/logs/2002.08.02.txt +/data/logs/2002.08.03.txt +/data/logs/2002.08.04.txt +/data/logs/2002.08.05.txt +/data/logs/2002.08.06.txt +/data/logs/2002.08.07.txt +/data/logs/2002.08.08.txt +/data/logs/2002.08.09.txt +/data/logs/2002.08.10.txt +/data/logs/2002.08.11.txt +/data/logs/2002.08.12.txt +/data/logs/2002.08.13.txt +/data/logs/2002.08.14.txt +/data/logs/2002.08.15.txt +/data/logs/2002.08.16.txt +/data/logs/2002.08.17.txt +/data/logs/2002.08.18.txt +/data/logs/2002.08.19.txt +/data/logs/2002.08.20.txt +/data/logs/2002.08.21.txt +/data/logs/2002.08.22.txt +/data/logs/2002.08.23.txt +/data/logs/2002.08.24.txt +/data/logs/2002.08.25.txt +/data/logs/2002.08.26.txt +/data/logs/2002.08.27.txt +/data/logs/2002.08.28.txt +/data/logs/2002.08.29.txt +/data/logs/2002.08.30.txt +/data/logs/2002.08.31.txt +/data/logs/2002.09.01.txt +/data/logs/2002.09.02.txt +/data/logs/2002.09.03.txt +/data/logs/2002.09.04.txt +/data/logs/2002.09.05.txt +/data/logs/2002.09.06.txt +/data/logs/2002.09.07.txt +/data/logs/2002.09.08.txt +/data/logs/2002.09.09.txt +/data/logs/2002.09.10.txt +/data/logs/2002.09.11.txt +/data/logs/2002.09.12.txt +/data/logs/2002.09.13.txt +/data/logs/2002.09.14.txt +/data/logs/2002.09.15.txt +/data/logs/2002.09.16.txt +/data/logs/2002.09.17.txt +/data/logs/2002.09.18.txt +/data/logs/2002.09.19.txt +/data/logs/2002.09.20.txt +/data/logs/2002.09.21.txt +/data/logs/2002.09.22.txt +/data/logs/2002.09.23.txt +/data/logs/2002.09.24.txt +/data/logs/2002.09.25.txt +/data/logs/2002.09.26.txt +/data/logs/2002.09.27.txt +/data/logs/2002.09.28.txt +/data/logs/2002.09.29.txt +/data/logs/2002.09.30.txt +/data/logs/2002.10.01.txt +/data/logs/2002.10.02.txt +/data/logs/2002.10.03.txt +/data/logs/2002.10.04.txt +/data/logs/2002.10.05.txt +/data/logs/2002.10.06.txt +/data/logs/2002.10.07.txt +/data/logs/2002.10.08.txt +/data/logs/2002.10.09.txt +/data/logs/2002.10.10.txt +/data/logs/2002.10.11.txt +/data/logs/2002.10.12.txt +/data/logs/2002.10.13.txt +/data/logs/2002.10.14.txt +/data/logs/2002.10.15.txt +/data/logs/2002.10.16.txt +/data/logs/2002.10.17.txt +/data/logs/2002.10.18.txt +/data/logs/2002.10.19.txt +/data/logs/2002.10.20.txt +/data/logs/2002.10.21.txt +/data/logs/2002.10.22.txt +/data/logs/2002.10.23.txt +/data/logs/2002.10.24.txt +/data/logs/2002.10.25.txt +/data/logs/2002.10.26.txt +/data/logs/2002.10.27.txt +/data/logs/2002.10.28.txt +/data/logs/2002.10.29.txt +/data/logs/2002.10.30.txt +/data/logs/2002.10.31.txt +/data/logs/2002.11.01.txt +/data/logs/2002.11.02.txt +/data/logs/2002.11.03.txt +/data/logs/2002.11.04.txt +/data/logs/2002.11.05.txt +/data/logs/2002.11.06.txt +/data/logs/2002.11.07.txt +/data/logs/2002.11.08.txt +/data/logs/2002.11.09.txt +/data/logs/2002.11.10.txt +/data/logs/2002.11.11.txt +/data/logs/2002.11.12.txt +/data/logs/2002.11.13.txt +/data/logs/2002.11.14.txt +/data/logs/2002.11.15.txt +/data/logs/2002.11.16.txt +/data/logs/2002.11.17.txt +/data/logs/2002.11.18.txt +/data/logs/2002.11.19.txt +/data/logs/2002.11.20.txt +/data/logs/2002.11.21.txt +/data/logs/2002.11.22.txt +/data/logs/2002.11.23.txt +/data/logs/2002.11.24.txt +/data/logs/2002.11.25.txt +/data/logs/2002.11.26.txt +/data/logs/2002.11.27.txt +/data/logs/2002.11.28.txt +/data/logs/2002.11.29.txt +/data/logs/2002.11.30.txt +/data/logs/2002.12.01.txt +/data/logs/2002.12.02.txt +/data/logs/2002.12.03.txt +/data/logs/2002.12.04.txt +/data/logs/2002.12.05.txt +/data/logs/2002.12.06.txt +/data/logs/2002.12.07.txt +/data/logs/2002.12.08.txt +/data/logs/2002.12.09.txt +/data/logs/2002.12.10.txt +/data/logs/2002.12.11.txt +/data/logs/2002.12.12.txt +/data/logs/2002.12.13.txt +/data/logs/2002.12.14.txt +/data/logs/2002.12.15.txt +/data/logs/2002.12.16.txt +/data/logs/2002.12.17.txt +/data/logs/2002.12.18.txt +/data/logs/2002.12.19.txt +/data/logs/2002.12.20.txt +/data/logs/2002.12.21.txt +/data/logs/2002.12.22.txt +/data/logs/2002.12.23.txt +/data/logs/2002.12.24.txt +/data/logs/2002.12.25.txt +/data/logs/2002.12.26.txt +/data/logs/2002.12.27.txt +/data/logs/2002.12.28.txt +/data/logs/2002.12.29.txt +/data/logs/2002.12.30.txt +/data/logs/2002.12.31.txt +/data/logs/2003.01.01.txt +/data/logs/2003.01.02.txt +/data/logs/2003.01.03.txt +/data/logs/2003.01.04.txt +/data/logs/2003.01.05.txt +/data/logs/2003.01.06.txt +/data/logs/2003.01.07.txt +/data/logs/2003.01.08.txt +/data/logs/2003.01.09.txt +/data/logs/2003.01.10.txt +/data/logs/2003.01.11.txt +/data/logs/2003.01.12.txt +/data/logs/2003.01.13.txt +/data/logs/2003.01.14.txt +/data/logs/2003.01.15.txt +/data/logs/2003.01.16.txt +/data/logs/2003.01.17.txt +/data/logs/2003.01.18.txt +/data/logs/2003.01.19.txt +/data/logs/2003.01.20.txt +/data/logs/2003.01.21.txt +/data/logs/2003.01.22.txt +/data/logs/2003.01.23.txt +/data/logs/2003.01.24.txt +/data/logs/2003.01.25.txt +/data/logs/2003.01.26.txt +/data/logs/2003.01.27.txt +/data/logs/2003.01.28.txt +/data/logs/2003.01.29.txt +/data/logs/2003.01.30.txt +/data/logs/2003.01.31.txt +/data/logs/2003.02.01.txt +/data/logs/2003.02.02.txt +/data/logs/2003.02.03.txt +/data/logs/2003.02.04.txt +/data/logs/2003.02.05.txt +/data/logs/2003.02.06.txt +/data/logs/2003.02.07.txt +/data/logs/2003.02.08.txt +/data/logs/2003.02.09.txt +/data/logs/2003.02.10.txt +/data/logs/2003.02.11.txt +/data/logs/2003.02.12.txt +/data/logs/2003.02.13.txt +/data/logs/2003.02.14.txt +/data/logs/2003.02.15.txt +/data/logs/2003.02.16.txt +/data/logs/2003.02.17.txt +/data/logs/2003.02.18.txt +/data/logs/2003.02.19.txt +/data/logs/2003.02.20.txt +/data/logs/2003.02.21.txt +/data/logs/2003.02.22.txt +/data/logs/2003.02.23.txt +/data/logs/2003.02.24.txt +/data/logs/2003.02.25.txt +/data/logs/2003.02.26.txt +/data/logs/2003.02.27.txt +/data/logs/2003.02.28.txt +/data/logs/2003.03.01.txt +/data/logs/2003.03.02.txt +/data/logs/2003.03.03.txt +/data/logs/2003.03.04.txt +/data/logs/2003.03.05.txt +/data/logs/2003.03.06.txt +/data/logs/2003.03.07.txt +/data/logs/2003.03.08.txt +/data/logs/2003.03.09.txt +/data/logs/2003.03.10.txt +/data/logs/2003.03.11.txt +/data/logs/2003.03.12.txt +/data/logs/2003.03.13.txt +/data/logs/2003.03.14.txt +/data/logs/2003.03.15.txt +/data/logs/2003.03.16.txt +/data/logs/2003.03.17.txt +/data/logs/2003.03.18.txt +/data/logs/2003.03.19.txt +/data/logs/2003.03.20.txt +/data/logs/2003.03.21.txt +/data/logs/2003.03.22.txt +/data/logs/2003.03.23.txt +/data/logs/2003.03.24.txt +/data/logs/2003.03.25.txt +/data/logs/2003.03.26.txt +/data/logs/2003.03.27.txt +/data/logs/2003.03.28.txt +/data/logs/2003.03.29.txt +/data/logs/2003.03.30.txt +/data/logs/2003.03.31.txt +/data/logs/2003.04.01.txt +/data/logs/2003.04.02.txt +/data/logs/2003.04.03.txt +/data/logs/2003.04.04.txt +/data/logs/2003.04.05.txt +/data/logs/2003.04.06.txt +/data/logs/2003.04.07.txt +/data/logs/2003.04.08.txt +/data/logs/2003.04.09.txt +/data/logs/2003.04.10.txt +/data/logs/2003.04.11.txt +/data/logs/2003.04.12.txt +/data/logs/2003.04.13.txt +/data/logs/2003.04.14.txt +/data/logs/2003.04.15.txt +/data/logs/2003.04.16.txt +/data/logs/2003.04.17.txt +/data/logs/2003.04.18.txt +/data/logs/2003.04.19.txt +/data/logs/2003.04.20.txt +/data/logs/2003.04.21.txt +/data/logs/2003.04.22.txt +/data/logs/2003.04.23.txt +/data/logs/2003.04.24.txt +/data/logs/2003.04.25.txt +/data/logs/2003.04.26.txt +/data/logs/2003.04.27.txt +/data/logs/2003.04.28.txt +/data/logs/2003.04.29.txt +/data/logs/2003.04.30.txt +/data/logs/2003.05.01.txt +/data/logs/2003.05.02.txt +/data/logs/2003.05.03.txt +/data/logs/2003.05.04.txt +/data/logs/2003.05.05.txt +/data/logs/2003.05.06.txt +/data/logs/2003.05.07.txt +/data/logs/2003.05.08.txt +/data/logs/2003.05.09.txt +/data/logs/2003.05.10.txt +/data/logs/2003.05.11.txt +/data/logs/2003.05.12.txt +/data/logs/2003.05.13.txt +/data/logs/2003.05.14.txt +/data/logs/2003.05.15.txt +/data/logs/2003.05.16.txt +/data/logs/2003.05.17.txt +/data/logs/2003.05.18.txt +/data/logs/2003.05.19.txt +/data/logs/2003.05.20.txt +/data/logs/2003.05.21.txt +/data/logs/2003.05.22.txt +/data/logs/2003.05.23.txt +/data/logs/2003.05.24.txt +/data/logs/2003.05.25.txt +/data/logs/2003.05.26.txt +/data/logs/2003.05.27.txt +/data/logs/2003.05.28.txt +/data/logs/2003.05.29.txt +/data/logs/2003.05.30.txt +/data/logs/2003.05.31.txt +/data/logs/2003.06.01.txt +/data/logs/2003.06.02.txt +/data/logs/2003.06.03.txt +/data/logs/2003.06.04.txt +/data/logs/2003.06.05.txt +/data/logs/2003.06.06.txt +/data/logs/2003.06.07.txt +/data/logs/2003.06.08.txt +/data/logs/2003.06.09.txt +/data/logs/2003.06.10.txt +/data/logs/2003.06.11.txt +/data/logs/2003.06.12.txt +/data/logs/2003.06.13.txt +/data/logs/2003.06.14.txt +/data/logs/2003.06.15.txt +/data/logs/2003.06.16.txt +/data/logs/2003.06.17.txt +/data/logs/2003.06.18.txt +/data/logs/2003.06.19.txt +/data/logs/2003.06.20.txt +/data/logs/2003.06.21.txt +/data/logs/2003.06.22.txt +/data/logs/2003.06.23.txt +/data/logs/2003.06.24.txt +/data/logs/2003.06.25.txt +/data/logs/2003.06.26.txt +/data/logs/2003.06.27.txt +/data/logs/2003.06.28.txt +/data/logs/2003.06.29.txt +/data/logs/2003.06.30.txt +/data/logs/2003.07.01.txt +/data/logs/2003.07.02.txt +/data/logs/2003.07.03.txt +/data/logs/2003.07.04.txt +/data/logs/2003.07.05.txt +/data/logs/2003.07.06.txt +/data/logs/2003.07.07.txt +/data/logs/2003.07.08.txt +/data/logs/2003.07.09.txt +/data/logs/2003.07.10.txt +/data/logs/2003.07.11.txt +/data/logs/2003.07.12.txt +/data/logs/2003.07.13.txt +/data/logs/2003.07.14.txt +/data/logs/2003.07.15.txt +/data/logs/2003.07.16.txt +/data/logs/2003.07.17.txt +/data/logs/2003.07.18.txt +/data/logs/2003.07.19.txt +/data/logs/2003.07.20.txt +/data/logs/2003.07.21.txt +/data/logs/2003.07.22.txt +/data/logs/2003.07.23.txt +/data/logs/2003.07.24.txt +/data/logs/2003.07.25.txt +/data/logs/2003.07.26.txt +/data/logs/2003.07.27.txt +/data/logs/2003.07.28.txt +/data/logs/2003.07.29.txt +/data/logs/2003.07.30.txt +/data/logs/2003.07.31.txt +/data/logs/2003.08.01.txt +/data/logs/2003.08.02.txt +/data/logs/2003.08.03.txt +/data/logs/2003.08.04.txt +/data/logs/2003.08.05.txt +/data/logs/2003.08.06.txt +/data/logs/2003.08.07.txt +/data/logs/2003.08.08.txt +/data/logs/2003.08.09.txt +/data/logs/2003.08.10.txt +/data/logs/2003.08.11.txt +/data/logs/2003.08.12.txt +/data/logs/2003.08.13.txt +/data/logs/2003.08.14.txt +/data/logs/2003.08.15.txt +/data/logs/2003.08.16.txt +/data/logs/2003.08.17.txt +/data/logs/2003.08.18.txt +/data/logs/2003.08.19.txt +/data/logs/2003.08.20.txt +/data/logs/2003.08.21.txt +/data/logs/2003.08.22.txt +/data/logs/2003.08.23.txt +/data/logs/2003.08.24.txt +/data/logs/2003.08.25.txt +/data/logs/2003.08.26.txt +/data/logs/2003.08.27.txt +/data/logs/2003.08.28.txt +/data/logs/2003.08.29.txt +/data/logs/2003.08.30.txt +/data/logs/2003.08.31.txt +/data/logs/2003.09.01.txt +/data/logs/2003.09.02.txt +/data/logs/2003.09.03.txt +/data/logs/2003.09.04.txt +/data/logs/2003.09.05.txt +/data/logs/2003.09.06.txt +/data/logs/2003.09.07.txt +/data/logs/2003.09.08.txt +/data/logs/2003.09.09.txt +/data/logs/2003.09.10.txt +/data/logs/2003.09.11.txt +/data/logs/2003.09.12.txt +/data/logs/2003.09.13.txt +/data/logs/2003.09.14.txt +/data/logs/2003.09.15.txt +/data/logs/2003.09.16.txt +/data/logs/2003.09.17.txt +/data/logs/2003.09.18.txt +/data/logs/2003.09.19.txt +/data/logs/2003.09.20.txt +/data/logs/2003.09.21.txt +/data/logs/2003.09.22.txt +/data/logs/2003.09.23.txt +/data/logs/2003.09.24.txt +/data/logs/2003.09.25.txt +/data/logs/2003.09.26.txt +/data/logs/2003.09.27.txt +/data/logs/2003.09.28.txt +/data/logs/2003.09.29.txt +/data/logs/2003.09.30.txt +/data/logs/2003.10.01.txt +/data/logs/2003.10.02.txt +/data/logs/2003.10.03.txt +/data/logs/2003.10.04.txt +/data/logs/2003.10.05.txt +/data/logs/2003.10.06.txt +/data/logs/2003.10.07.txt +/data/logs/2003.10.08.txt +/data/logs/2003.10.09.txt +/data/logs/2003.10.10.txt +/data/logs/2003.10.11.txt +/data/logs/2003.10.12.txt +/data/logs/2003.10.13.txt +/data/logs/2003.10.14.txt +/data/logs/2003.10.15.txt +/data/logs/2003.10.16.txt +/data/logs/2003.10.17.txt +/data/logs/2003.10.18.txt +/data/logs/2003.10.19.txt +/data/logs/2003.10.20.txt +/data/logs/2003.10.21.txt +/data/logs/2003.10.22.txt +/data/logs/2003.10.23.txt +/data/logs/2003.10.24.txt +/data/logs/2003.10.25.txt +/data/logs/2003.10.26.txt +/data/logs/2003.10.27.txt +/data/logs/2003.10.28.txt +/data/logs/2003.10.29.txt +/data/logs/2003.10.30.txt +/data/logs/2003.10.31.txt +/data/logs/2003.11.01.txt +/data/logs/2003.11.02.txt +/data/logs/2003.11.03.txt +/data/logs/2003.11.04.txt +/data/logs/2003.11.05.txt +/data/logs/2003.11.06.txt +/data/logs/2003.11.07.txt +/data/logs/2003.11.08.txt +/data/logs/2003.11.09.txt +/data/logs/2003.11.10.txt +/data/logs/2003.11.11.txt +/data/logs/2003.11.12.txt +/data/logs/2003.11.13.txt +/data/logs/2003.11.14.txt +/data/logs/2003.11.15.txt +/data/logs/2003.11.16.txt +/data/logs/2003.11.17.txt +/data/logs/2003.11.18.txt +/data/logs/2003.11.19.txt +/data/logs/2003.11.20.txt +/data/logs/2003.11.21.txt +/data/logs/2003.11.22.txt +/data/logs/2003.11.23.txt +/data/logs/2003.11.24.txt +/data/logs/2003.11.25.txt +/data/logs/2003.11.26.txt +/data/logs/2003.11.27.txt +/data/logs/2003.11.28.txt +/data/logs/2003.11.29.txt +/data/logs/2003.11.30.txt +/data/logs/2003.12.01.txt +/data/logs/2003.12.02.txt +/data/logs/2003.12.03.txt +/data/logs/2003.12.04.txt +/data/logs/2003.12.05.txt +/data/logs/2003.12.06.txt +/data/logs/2003.12.07.txt +/data/logs/2003.12.08.txt +/data/logs/2003.12.09.txt +/data/logs/2003.12.10.txt +/data/logs/2003.12.11.txt +/data/logs/2003.12.12.txt +/data/logs/2003.12.13.txt +/data/logs/2003.12.14.txt +/data/logs/2003.12.15.txt +/data/logs/2003.12.16.txt +/data/logs/2003.12.17.txt +/data/logs/2003.12.18.txt +/data/logs/2003.12.19.txt +/data/logs/2003.12.20.txt +/data/logs/2003.12.21.txt +/data/logs/2003.12.22.txt +/data/logs/2003.12.23.txt +/data/logs/2003.12.24.txt +/data/logs/2003.12.25.txt +/data/logs/2003.12.26.txt +/data/logs/2003.12.27.txt +/data/logs/2003.12.28.txt +/data/logs/2003.12.29.txt +/data/logs/2003.12.30.txt +/data/logs/2003.12.31.txt +/data/logs/2004.01.01.txt +/data/logs/2004.01.02.txt +/data/logs/2004.01.03.txt +/data/logs/2004.01.04.txt +/data/logs/2004.01.05.txt +/data/logs/2004.01.06.txt +/data/logs/2004.01.07.txt +/data/logs/2004.01.08.txt +/data/logs/2004.01.09.txt +/data/logs/2004.01.10.txt +/data/logs/2004.01.11.txt +/data/logs/2004.01.12.txt +/data/logs/2004.01.13.txt +/data/logs/2004.01.14.txt +/data/logs/2004.01.15.txt +/data/logs/2004.01.16.txt +/data/logs/2004.01.17.txt +/data/logs/2004.01.18.txt +/data/logs/2004.01.19.txt +/data/logs/2004.01.20.txt +/data/logs/2004.01.21.txt +/data/logs/2004.01.22.txt +/data/logs/2004.01.23.txt +/data/logs/2004.01.24.txt +/data/logs/2004.01.25.txt +/data/logs/2004.01.26.txt +/data/logs/2004.01.27.txt +/data/logs/2004.01.28.txt +/data/logs/2004.01.29.txt +/data/logs/2004.01.30.txt +/data/logs/2004.01.31.txt +/data/logs/2004.02.01.txt +/data/logs/2004.02.02.txt +/data/logs/2004.02.03.txt +/data/logs/2004.02.04.txt +/data/logs/2004.02.05.txt +/data/logs/2004.02.06.txt +/data/logs/2004.02.07.txt +/data/logs/2004.02.08.txt +/data/logs/2004.02.09.txt +/data/logs/2004.02.10.txt +/data/logs/2004.02.11.txt +/data/logs/2004.02.12.txt +/data/logs/2004.02.13.txt +/data/logs/2004.02.14.txt +/data/logs/2004.02.15.txt +/data/logs/2004.02.16.txt +/data/logs/2004.02.17.txt +/data/logs/2004.02.18.txt +/data/logs/2004.02.19.txt +/data/logs/2004.02.20.txt +/data/logs/2004.02.21.txt +/data/logs/2004.02.22.txt +/data/logs/2004.02.23.txt +/data/logs/2004.02.24.txt +/data/logs/2004.02.25.txt +/data/logs/2004.02.26.txt +/data/logs/2004.02.27.txt +/data/logs/2004.02.28.txt +/data/logs/2004.02.29.txt +/data/logs/2004.03.01.txt +/data/logs/2004.03.02.txt +/data/logs/2004.03.03.txt +/data/logs/2004.03.04.txt +/data/logs/2004.03.05.txt +/data/logs/2004.03.06.txt +/data/logs/2004.03.07.txt +/data/logs/2004.03.08.txt +/data/logs/2004.03.09.txt +/data/logs/2004.03.10.txt +/data/logs/2004.03.11.txt +/data/logs/2004.03.12.txt +/data/logs/2004.03.13.txt +/data/logs/2004.03.14.txt +/data/logs/2004.03.15.txt +/data/logs/2004.03.16.txt +/data/logs/2004.03.17.txt +/data/logs/2004.03.18.txt +/data/logs/2004.03.19.txt +/data/logs/2004.03.20.txt +/data/logs/2004.03.21.txt +/data/logs/2004.03.22.txt +/data/logs/2004.03.23.txt +/data/logs/2004.03.24.txt +/data/logs/2004.03.25.txt +/data/logs/2004.03.26.txt +/data/logs/2004.03.27.txt +/data/logs/2004.03.28.txt +/data/logs/2004.03.29.txt +/data/logs/2004.03.30.txt +/data/logs/2004.03.31.txt +/data/logs/2004.04.01.txt +/data/logs/2004.04.02.txt +/data/logs/2004.04.03.txt +/data/logs/2004.04.04.txt +/data/logs/2004.04.05.txt +/data/logs/2004.04.06.txt +/data/logs/2004.04.07.txt +/data/logs/2004.04.08.txt +/data/logs/2004.04.09.txt +/data/logs/2004.04.10.txt +/data/logs/2004.04.11.txt +/data/logs/2004.04.12.txt +/data/logs/2004.04.13.txt +/data/logs/2004.04.14.txt +/data/logs/2004.04.15.txt +/data/logs/2004.04.16.txt +/data/logs/2004.04.17.txt +/data/logs/2004.04.18.txt +/data/logs/2004.04.19.txt +/data/logs/2004.04.20.txt +/data/logs/2004.04.21.txt +/data/logs/2004.04.22.txt +/data/logs/2004.04.23.txt +/data/logs/2004.04.24.txt +/data/logs/2004.04.25.txt +/data/logs/2004.04.26.txt +/data/logs/2004.04.27.txt +/data/logs/2004.04.28.txt +/data/logs/2004.04.29.txt +/data/logs/2004.04.30.txt +/data/logs/2004.05.01.txt +/data/logs/2004.05.02.txt +/data/logs/2004.05.03.txt +/data/logs/2004.05.04.txt +/data/logs/2004.05.05.txt +/data/logs/2004.05.06.txt +/data/logs/2004.05.07.txt +/data/logs/2004.05.08.txt +/data/logs/2004.05.09.txt +/data/logs/2004.05.10.txt +/data/logs/2004.05.11.txt +/data/logs/2004.05.12.txt +/data/logs/2004.05.13.txt +/data/logs/2004.05.14.txt +/data/logs/2004.05.15.txt +/data/logs/2004.05.16.txt +/data/logs/2004.05.17.txt +/data/logs/2004.05.18.txt +/data/logs/2004.05.19.txt +/data/logs/2004.05.20.txt +/data/logs/2004.05.21.txt +/data/logs/2004.05.22.txt +/data/logs/2004.05.23.txt +/data/logs/2004.05.24.txt +/data/logs/2004.05.25.txt +/data/logs/2004.05.26.txt +/data/logs/2004.05.27.txt +/data/logs/2004.05.28.txt +/data/logs/2004.05.29.txt +/data/logs/2004.05.30.txt +/data/logs/2004.05.31.txt +/data/logs/2004.06.01.txt +/data/logs/2004.06.02.txt +/data/logs/2004.06.03.txt +/data/logs/2004.06.04.txt +/data/logs/2004.06.05.txt +/data/logs/2004.06.06.txt +/data/logs/2004.06.07.txt +/data/logs/2004.06.08.txt +/data/logs/2004.06.09.txt +/data/logs/2004.06.10.txt +/data/logs/2004.06.11.txt +/data/logs/2004.06.12.txt +/data/logs/2004.06.13.txt +/data/logs/2004.06.14.txt +/data/logs/2004.06.15.txt +/data/logs/2004.06.16.txt +/data/logs/2004.06.17.txt +/data/logs/2004.06.18.txt +/data/logs/2004.06.19.txt +/data/logs/2004.06.20.txt +/data/logs/2004.06.21.txt +/data/logs/2004.06.22.txt +/data/logs/2004.06.23.txt +/data/logs/2004.06.24.txt +/data/logs/2004.06.25.txt +/data/logs/2004.06.26.txt +/data/logs/2004.06.27.txt +/data/logs/2004.06.28.txt +/data/logs/2004.06.29.txt +/data/logs/2004.06.30.txt +/data/logs/2004.07.01.txt +/data/logs/2004.07.02.txt +/data/logs/2004.07.03.txt +/data/logs/2004.07.04.txt +/data/logs/2004.07.05.txt +/data/logs/2004.07.06.txt +/data/logs/2004.07.07.txt +/data/logs/2004.07.08.txt +/data/logs/2004.07.09.txt +/data/logs/2004.07.10.txt +/data/logs/2004.07.11.txt +/data/logs/2004.07.12.txt +/data/logs/2004.07.13.txt +/data/logs/2004.07.14.txt +/data/logs/2004.07.15.txt +/data/logs/2004.07.16.txt +/data/logs/2004.07.17.txt +/data/logs/2004.07.18.txt +/data/logs/2004.07.19.txt +/data/logs/2004.07.20.txt +/data/logs/2004.07.21.txt +/data/logs/2004.07.22.txt +/data/logs/2004.07.23.txt +/data/logs/2004.07.24.txt +/data/logs/2004.07.25.txt +/data/logs/2004.07.26.txt +/data/logs/2004.07.27.txt +/data/logs/2004.07.28.txt +/data/logs/2004.07.29.txt +/data/logs/2004.07.30.txt +/data/logs/2004.07.31.txt +/data/logs/2004.08.01.txt +/data/logs/2004.08.02.txt +/data/logs/2004.08.03.txt +/data/logs/2004.08.04.txt +/data/logs/2004.08.05.txt +/data/logs/2004.08.06.txt +/data/logs/2004.08.07.txt +/data/logs/2004.08.08.txt +/data/logs/2004.08.09.txt +/data/logs/2004.08.10.txt +/data/logs/2004.08.11.txt +/data/logs/2004.08.12.txt +/data/logs/2004.08.13.txt +/data/logs/2004.08.14.txt +/data/logs/2004.08.15.txt +/data/logs/2004.08.16.txt +/data/logs/2004.08.17.txt +/data/logs/2004.08.18.txt +/data/logs/2004.08.19.txt +/data/logs/2004.08.20.txt +/data/logs/2004.08.21.txt +/data/logs/2004.08.22.txt +/data/logs/2004.08.23.txt +/data/logs/2004.08.24.txt +/data/logs/2004.08.25.txt +/data/logs/2004.08.26.txt +/data/logs/2004.08.27.txt +/data/logs/2004.08.28.txt +/data/logs/2004.08.29.txt +/data/logs/2004.08.30.txt +/data/logs/2004.08.31.txt +/data/logs/2004.09.01.txt +/data/logs/2004.09.02.txt +/data/logs/2004.09.03.txt +/data/logs/2004.09.04.txt +/data/logs/2004.09.05.txt +/data/logs/2004.09.06.txt +/data/logs/2004.09.07.txt +/data/logs/2004.09.08.txt +/data/logs/2004.09.09.txt +/data/logs/2004.09.10.txt +/data/logs/2004.09.11.txt +/data/logs/2004.09.12.txt +/data/logs/2004.09.13.txt +/data/logs/2004.09.14.txt +/data/logs/2004.09.15.txt +/data/logs/2004.09.16.txt +/data/logs/2004.09.17.txt +/data/logs/2004.09.18.txt +/data/logs/2004.09.19.txt +/data/logs/2004.09.20.txt +/data/logs/2004.09.21.txt +/data/logs/2004.09.22.txt +/data/logs/2004.09.23.txt +/data/logs/2004.09.24.txt +/data/logs/2004.09.25.txt +/data/logs/2004.09.26.txt +/data/logs/2004.09.27.txt +/data/logs/2004.09.28.txt +/data/logs/2004.09.29.txt +/data/logs/2004.09.30.txt +/data/logs/2004.10.01.txt +/data/logs/2004.10.02.txt +/data/logs/2004.10.03.txt +/data/logs/2004.10.04.txt +/data/logs/2004.10.05.txt +/data/logs/2004.10.06.txt +/data/logs/2004.10.07.txt +/data/logs/2004.10.08.txt +/data/logs/2004.10.09.txt +/data/logs/2004.10.10.txt +/data/logs/2004.10.11.txt +/data/logs/2004.10.12.txt +/data/logs/2004.10.13.txt +/data/logs/2004.10.14.txt +/data/logs/2004.10.15.txt +/data/logs/2004.10.16.txt +/data/logs/2004.10.17.txt +/data/logs/2004.10.18.txt +/data/logs/2004.10.19.txt +/data/logs/2004.10.20.txt +/data/logs/2004.10.21.txt +/data/logs/2004.10.22.txt +/data/logs/2004.10.23.txt +/data/logs/2004.10.25.txt +/data/logs/2004.10.26.txt +/data/logs/2004.10.27.txt +/data/logs/2004.10.28.txt +/data/logs/2004.10.29.txt +/data/logs/2004.10.30.txt +/data/logs/2004.10.31.txt +/data/logs/2004.11.01.txt +/data/logs/2004.11.02.txt +/data/logs/2004.11.03.txt +/data/logs/2004.11.04.txt +/data/logs/2004.11.05.txt +/data/logs/2004.11.06.txt +/data/logs/2004.11.07.txt +/data/logs/2004.11.08.txt +/data/logs/2004.11.09.txt +/data/logs/2004.11.10.txt +/data/logs/2004.11.11.txt +/data/logs/2004.11.12.txt +/data/logs/2004.11.13.txt +/data/logs/2004.11.14.txt +/data/logs/2004.11.15.txt +/data/logs/2004.11.16.txt +/data/logs/2004.11.17.txt +/data/logs/2004.11.18.txt +/data/logs/2004.11.19.txt +/data/logs/2004.11.20.txt +/data/logs/2004.11.21.txt +/data/logs/2004.11.22.txt +/data/logs/2004.11.23.txt +/data/logs/2004.11.24.txt +/data/logs/2004.11.25.txt +/data/logs/2004.11.26.txt +/data/logs/2004.11.27.txt +/data/logs/2004.11.28.txt +/data/logs/2004.11.29.txt +/data/logs/2004.11.30.txt +/data/logs/2004.12.01.txt +/data/logs/2004.12.02.txt +/data/logs/2004.12.03.txt +/data/logs/2004.12.04.txt +/data/logs/2004.12.05.txt +/data/logs/2004.12.06.txt +/data/logs/2004.12.07.txt +/data/logs/2004.12.08.txt +/data/logs/2004.12.09.txt +/data/logs/2004.12.10.txt +/data/logs/2004.12.11.txt +/data/logs/2004.12.12.txt +/data/logs/2004.12.13.txt +/data/logs/2004.12.14.txt +/data/logs/2004.12.15.txt +/data/logs/2004.12.16.txt +/data/logs/2004.12.17.txt +/data/logs/2004.12.18.txt +/data/logs/2004.12.19.txt +/data/logs/2004.12.20.txt +/data/logs/2004.12.21.txt +/data/logs/2004.12.22.txt +/data/logs/2004.12.23.txt +/data/logs/2004.12.24.txt +/data/logs/2004.12.25.txt +/data/logs/2004.12.26.txt +/data/logs/2004.12.27.txt +/data/logs/2004.12.28.txt +/data/logs/2004.12.29.txt +/data/logs/2004.12.30.txt +/data/logs/2004.12.31.txt +/data/logs/2005.01.01.txt +/data/logs/2005.01.02.txt +/data/logs/2005.01.03.txt +/data/logs/2005.01.04.txt +/data/logs/2005.01.05.txt +/data/logs/2005.01.06.txt +/data/logs/2005.01.07.txt +/data/logs/2005.01.08.txt +/data/logs/2005.01.09.txt +/data/logs/2005.01.10.txt +/data/logs/2005.01.11.txt +/data/logs/2005.01.12.txt +/data/logs/2005.01.13.txt +/data/logs/2005.01.14.txt +/data/logs/2005.01.15.txt +/data/logs/2005.01.16.txt +/data/logs/2005.01.17.txt +/data/logs/2005.01.18.txt +/data/logs/2005.01.19.txt +/data/logs/2005.01.20.txt +/data/logs/2005.01.21.txt +/data/logs/2005.01.22.txt +/data/logs/2005.01.23.txt +/data/logs/2005.01.24.txt +/data/logs/2005.01.25.txt +/data/logs/2005.01.26.txt +/data/logs/2005.01.27.txt +/data/logs/2005.01.28.txt +/data/logs/2005.01.29.txt +/data/logs/2005.01.30.txt +/data/logs/2005.01.31.txt +/data/logs/2005.02.01.txt +/data/logs/2005.02.02.txt +/data/logs/2005.02.03.txt +/data/logs/2005.02.04.txt +/data/logs/2005.02.05.txt +/data/logs/2005.02.06.txt +/data/logs/2005.02.07.txt +/data/logs/2005.02.08.txt +/data/logs/2005.02.09.txt +/data/logs/2005.02.10.txt +/data/logs/2005.02.11.txt +/data/logs/2005.02.12.txt +/data/logs/2005.02.13.txt +/data/logs/2005.02.14.txt +/data/logs/2005.02.15.txt +/data/logs/2005.02.16.txt +/data/logs/2005.02.17.txt +/data/logs/2005.02.18.txt +/data/logs/2005.02.19.txt +/data/logs/2005.02.20.txt +/data/logs/2005.02.21.txt +/data/logs/2005.02.22.txt +/data/logs/2005.02.23.txt +/data/logs/2005.02.24.txt +/data/logs/2005.02.25.txt +/data/logs/2005.02.26.txt +/data/logs/2005.02.27.txt +/data/logs/2005.02.28.txt +/data/logs/2005.03.01.txt +/data/logs/2005.03.02.txt +/data/logs/2005.03.03.txt +/data/logs/2005.03.04.txt +/data/logs/2005.03.05.txt +/data/logs/2005.03.06.txt +/data/logs/2005.03.07.txt +/data/logs/2005.03.08.txt +/data/logs/2005.03.09.txt +/data/logs/2005.03.10.txt +/data/logs/2005.03.11.txt +/data/logs/2005.03.12.txt +/data/logs/2005.03.13.txt +/data/logs/2005.03.14.txt +/data/logs/2005.03.15.txt +/data/logs/2005.03.16.txt +/data/logs/2005.03.17.txt +/data/logs/2005.03.18.txt +/data/logs/2005.03.19.txt +/data/logs/2005.03.20.txt +/data/logs/2005.03.21.txt +/data/logs/2005.03.22.txt +/data/logs/2005.03.23.txt +/data/logs/2005.03.24.txt +/data/logs/2005.03.25.txt +/data/logs/2005.03.26.txt +/data/logs/2005.03.27.txt +/data/logs/2005.03.28.txt +/data/logs/2005.03.29.txt +/data/logs/2005.03.30.txt +/data/logs/2005.03.31.txt +/data/logs/2005.04.01.txt +/data/logs/2005.04.02.txt +/data/logs/2005.04.03.txt +/data/logs/2005.04.04.txt +/data/logs/2005.04.05.txt +/data/logs/2005.04.06.txt +/data/logs/2005.04.07.txt +/data/logs/2005.04.08.txt +/data/logs/2005.04.09.txt +/data/logs/2005.04.10.txt +/data/logs/2005.04.11.txt +/data/logs/2005.04.12.txt +/data/logs/2005.04.13.txt +/data/logs/2005.04.14.txt +/data/logs/2005.04.15.txt +/data/logs/2005.04.16.txt +/data/logs/2005.04.17.txt +/data/logs/2005.04.18.txt +/data/logs/2005.04.19.txt +/data/logs/2005.04.20.txt +/data/logs/2005.04.21.txt +/data/logs/2005.04.22.txt +/data/logs/2005.04.23.txt +/data/logs/2005.04.24.txt +/data/logs/2005.04.25.txt +/data/logs/2005.04.26.txt +/data/logs/2005.04.27.txt +/data/logs/2005.04.28.txt +/data/logs/2005.04.29.txt +/data/logs/2005.04.30.txt +/data/logs/2005.05.01.txt +/data/logs/2005.05.02.txt +/data/logs/2005.05.03.txt +/data/logs/2005.05.04.txt +/data/logs/2005.05.05.txt +/data/logs/2005.05.06.txt +/data/logs/2005.05.07.txt +/data/logs/2005.05.08.txt +/data/logs/2005.05.09.txt +/data/logs/2005.05.10.txt +/data/logs/2005.05.11.txt +/data/logs/2005.05.12.txt +/data/logs/2005.05.13.txt +/data/logs/2005.05.14.txt +/data/logs/2005.05.15.txt +/data/logs/2005.05.16.txt +/data/logs/2005.05.17.txt +/data/logs/2005.05.18.txt +/data/logs/2005.05.19.txt +/data/logs/2005.05.20.txt +/data/logs/2005.05.21.txt +/data/logs/2005.05.22.txt +/data/logs/2005.05.23.txt +/data/logs/2005.05.24.txt +/data/logs/2005.05.25.txt +/data/logs/2005.05.26.txt +/data/logs/2005.05.27.txt +/data/logs/2005.05.28.txt +/data/logs/2005.05.29.txt +/data/logs/2005.05.30.txt +/data/logs/2005.05.31.txt +/data/logs/2005.06.01.txt +/data/logs/2005.06.02.txt +/data/logs/2005.06.03.txt +/data/logs/2005.06.04.txt +/data/logs/2005.06.05.txt +/data/logs/2005.06.06.txt +/data/logs/2005.06.07.txt +/data/logs/2005.06.08.txt +/data/logs/2005.06.09.txt +/data/logs/2005.06.10.txt +/data/logs/2005.06.11.txt +/data/logs/2005.06.12.txt +/data/logs/2005.06.13.txt +/data/logs/2005.06.14.txt +/data/logs/2005.06.15.txt +/data/logs/2005.06.16.txt +/data/logs/2005.06.17.txt +/data/logs/2005.06.18.txt +/data/logs/2005.06.19.txt +/data/logs/2005.06.20.txt +/data/logs/2005.06.21.txt +/data/logs/2005.06.22.txt +/data/logs/2005.06.23.txt +/data/logs/2005.06.24.txt +/data/logs/2005.06.25.txt +/data/logs/2005.06.26.txt +/data/logs/2005.06.27.txt +/data/logs/2005.06.28.txt +/data/logs/2005.06.29.txt +/data/logs/2005.06.30.txt +/data/logs/2005.07.01.txt +/data/logs/2005.07.02.txt +/data/logs/2005.07.03.txt +/data/logs/2005.07.04.txt +/data/logs/2005.07.05.txt +/data/logs/2005.07.06.txt +/data/logs/2005.07.07.txt +/data/logs/2005.07.08.txt +/data/logs/2005.07.09.txt +/data/logs/2005.07.10.txt +/data/logs/2005.07.11.txt +/data/logs/2005.07.12.txt +/data/logs/2005.07.13.txt +/data/logs/2005.07.14.txt +/data/logs/2005.07.15.txt +/data/logs/2005.07.16.txt +/data/logs/2005.07.17.txt +/data/logs/2005.07.18.txt +/data/logs/2005.07.19.txt +/data/logs/2005.07.20.txt +/data/logs/2005.07.21.txt +/data/logs/2005.07.22.txt +/data/logs/2005.07.23.txt +/data/logs/2005.07.24.txt +/data/logs/2005.07.25.txt +/data/logs/2005.07.26.txt +/data/logs/2005.07.27.txt +/data/logs/2005.07.28.txt +/data/logs/2005.07.29.txt +/data/logs/2005.07.30.txt +/data/logs/2005.07.31.txt +/data/logs/2005.08.01.txt +/data/logs/2005.08.02.txt +/data/logs/2005.08.03.txt +/data/logs/2005.08.04.txt +/data/logs/2005.08.05.txt +/data/logs/2005.08.06.txt +/data/logs/2005.08.07.txt +/data/logs/2005.08.08.txt +/data/logs/2005.08.09.txt +/data/logs/2005.08.10.txt +/data/logs/2005.08.11.txt +/data/logs/2005.08.12.txt +/data/logs/2005.08.13.txt +/data/logs/2005.08.14.txt +/data/logs/2005.08.15.txt +/data/logs/2005.08.16.txt +/data/logs/2005.08.17.txt +/data/logs/2005.08.18.txt +/data/logs/2005.08.19.txt +/data/logs/2005.08.20.txt +/data/logs/2005.08.21.txt +/data/logs/2005.08.22.txt +/data/logs/2005.08.23.txt +/data/logs/2005.08.24.txt +/data/logs/2005.08.25.txt +/data/logs/2005.08.26.txt +/data/logs/2005.08.27.txt +/data/logs/2005.08.28.txt +/data/logs/2005.08.29.txt +/data/logs/2005.08.30.txt +/data/logs/2005.08.31.txt +/data/logs/2005.09.01.txt +/data/logs/2005.09.02.txt +/data/logs/2005.09.03.txt +/data/logs/2005.09.04.txt +/data/logs/2005.09.05.txt +/data/logs/2005.09.06.txt +/data/logs/2005.09.07.txt +/data/logs/2005.09.08.txt +/data/logs/2005.09.09.txt +/data/logs/2005.09.10.txt +/data/logs/2005.09.11.txt +/data/logs/2005.09.12.txt +/data/logs/2005.09.13.txt +/data/logs/2005.09.14.txt +/data/logs/2005.09.15.txt +/data/logs/2005.09.16.txt +/data/logs/2005.09.17.txt +/data/logs/2005.09.18.txt +/data/logs/2005.09.19.txt +/data/logs/2005.09.20.txt +/data/logs/2005.09.21.txt +/data/logs/2005.09.22.txt +/data/logs/2005.09.23.txt +/data/logs/2005.09.24.txt +/data/logs/2005.09.25.txt +/data/logs/2005.09.26.txt +/data/logs/2005.09.27.txt +/data/logs/2005.09.28.txt +/data/logs/2005.09.29.txt +/data/logs/2005.09.30.txt +/data/logs/2005.10.01.txt +/data/logs/2005.10.02.txt +/data/logs/2005.10.03.txt +/data/logs/2005.10.04.txt +/data/logs/2005.10.05.txt +/data/logs/2005.10.06.txt +/data/logs/2005.10.07.txt +/data/logs/2005.10.08.txt +/data/logs/2005.10.09.txt +/data/logs/2005.10.10.txt +/data/logs/2005.10.11.txt +/data/logs/2005.10.12.txt +/data/logs/2005.10.13.txt +/data/logs/2005.10.14.txt +/data/logs/2005.10.15.txt +/data/logs/2005.10.16.txt +/data/logs/2005.10.17.txt +/data/logs/2005.10.18.txt +/data/logs/2005.10.19.txt +/data/logs/2005.10.20.txt +/data/logs/2005.10.21.txt +/data/logs/2005.10.22.txt +/data/logs/2005.10.23.txt +/data/logs/2005.10.24.txt +/data/logs/2005.10.25.txt +/data/logs/2005.10.26.txt +/data/logs/2005.10.27.txt +/data/logs/2005.10.28.txt +/data/logs/2005.10.29.txt +/data/logs/2005.10.30.txt +/data/logs/2005.10.31.txt +/data/logs/2005.11.01.txt +/data/logs/2005.11.02.txt +/data/logs/2005.11.03.txt +/data/logs/2005.11.04.txt +/data/logs/2005.11.05.txt +/data/logs/2005.11.06.txt +/data/logs/2005.11.07.txt +/data/logs/2005.11.08.txt +/data/logs/2005.11.09.txt +/data/logs/2005.11.10.txt +/data/logs/2005.11.11.txt +/data/logs/2005.11.12.txt +/data/logs/2005.11.13.txt +/data/logs/2005.11.14.txt +/data/logs/2005.11.15.txt +/data/logs/2005.11.16.txt +/data/logs/2005.11.17.txt +/data/logs/2005.11.18.txt +/data/logs/2005.11.19.txt +/data/logs/2005.11.20.txt +/data/logs/2005.11.21.txt +/data/logs/2005.11.22.txt +/data/logs/2005.11.23.txt +/data/logs/2005.11.24.txt +/data/logs/2005.11.25.txt +/data/logs/2005.11.26.txt +/data/logs/2005.11.27.txt +/data/logs/2005.11.28.txt +/data/logs/2005.11.29.txt +/data/logs/2005.11.30.txt +/data/logs/2005.12.01.txt +/data/logs/2005.12.02.txt +/data/logs/2005.12.03.txt +/data/logs/2005.12.04.txt +/data/logs/2005.12.05.txt +/data/logs/2005.12.06.txt +/data/logs/2005.12.07.txt +/data/logs/2005.12.08.txt +/data/logs/2005.12.09.txt +/data/logs/2005.12.10.txt +/data/logs/2005.12.11.txt +/data/logs/2005.12.12.txt +/data/logs/2005.12.13.txt +/data/logs/2005.12.14.txt +/data/logs/2005.12.15.txt +/data/logs/2005.12.16.txt +/data/logs/2005.12.17.txt +/data/logs/2005.12.18.txt +/data/logs/2005.12.19.txt +/data/logs/2005.12.20.txt +/data/logs/2005.12.21.txt +/data/logs/2005.12.22.txt +/data/logs/2005.12.23.txt +/data/logs/2005.12.24.txt +/data/logs/2005.12.25.txt +/data/logs/2005.12.26.txt +/data/logs/2005.12.27.txt +/data/logs/2005.12.28.txt +/data/logs/2005.12.29.txt +/data/logs/2005.12.30.txt +/data/logs/2005.12.31.txt +/data/logs/2006.01.01.txt +/data/logs/2006.01.02.txt +/data/logs/2006.01.03.txt +/data/logs/2006.01.04.txt +/data/logs/2006.01.05.txt +/data/logs/2006.01.06.txt +/data/logs/2006.01.07.txt +/data/logs/2006.01.08.txt +/data/logs/2006.01.09.txt +/data/logs/2006.01.10.txt +/data/logs/2006.01.11.txt +/data/logs/2006.01.12.txt +/data/logs/2006.01.13.txt +/data/logs/2006.01.14.txt +/data/logs/2006.01.15.txt +/data/logs/2006.01.16.txt +/data/logs/2006.01.17.txt +/data/logs/2006.01.18.txt +/data/logs/2006.01.19.txt +/data/logs/2006.01.20.txt +/data/logs/2006.01.21.txt +/data/logs/2006.01.22.txt +/data/logs/2006.01.23.txt +/data/logs/2006.01.24.txt +/data/logs/2006.01.25.txt +/data/logs/2006.01.26.txt +/data/logs/2006.01.27.txt +/data/logs/2006.01.28.txt +/data/logs/2006.01.29.txt +/data/logs/2006.01.30.txt +/data/logs/2006.01.31.txt +/data/logs/2006.02.01.txt +/data/logs/2006.02.02.txt +/data/logs/2006.02.03.txt +/data/logs/2006.02.04.txt +/data/logs/2006.02.05.txt +/data/logs/2006.02.06.txt +/data/logs/2006.02.07.txt +/data/logs/2006.02.08.txt +/data/logs/2006.02.09.txt +/data/logs/2006.02.10.txt +/data/logs/2006.02.11.txt +/data/logs/2006.02.12.txt +/data/logs/2006.02.13.txt +/data/logs/2006.02.14.txt +/data/logs/2006.02.15.txt +/data/logs/2006.02.16.txt +/data/logs/2006.02.17.txt +/data/logs/2006.02.18.txt +/data/logs/2006.02.19.txt +/data/logs/2006.02.20.txt +/data/logs/2006.02.21.txt +/data/logs/2006.02.22.txt +/data/logs/2006.02.23.txt +/data/logs/2006.02.24.txt +/data/logs/2006.02.25.txt +/data/logs/2006.02.26.txt +/data/logs/2006.02.27.txt +/data/logs/2006.02.28.txt +/data/logs/2006.03.01.txt +/data/logs/2006.03.02.txt +/data/logs/2006.03.03.txt +/data/logs/2006.03.04.txt +/data/logs/2006.03.05.txt +/data/logs/2006.03.06.txt +/data/logs/2006.03.07.txt +/data/logs/2006.03.08.txt +/data/logs/2006.03.09.txt +/data/logs/2006.03.10.txt +/data/logs/2006.03.11.txt +/data/logs/2006.03.12.txt +/data/logs/2006.03.13.txt +/data/logs/2006.03.14.txt +/data/logs/2006.03.15.txt +/data/logs/2006.03.16.txt +/data/logs/2006.03.17.txt +/data/logs/2006.03.18.txt +/data/logs/2006.03.19.txt +/data/logs/2006.03.20.txt +/data/logs/2006.03.21.txt +/data/logs/2006.03.22.txt +/data/logs/2006.03.23.txt +/data/logs/2006.03.24.txt +/data/logs/2006.03.25.txt +/data/logs/2006.03.26.txt +/data/logs/2006.03.27.txt +/data/logs/2006.03.28.txt +/data/logs/2006.03.29.txt +/data/logs/2006.03.30.txt +/data/logs/2006.03.31.txt +/data/logs/2006.04.01.txt +/data/logs/2006.04.02.txt +/data/logs/2006.04.03.txt +/data/logs/2006.04.04.txt +/data/logs/2006.04.05.txt +/data/logs/2006.04.06.txt +/data/logs/2006.04.07.txt +/data/logs/2006.04.08.txt +/data/logs/2006.04.09.txt +/data/logs/2006.04.10.txt +/data/logs/2006.04.11.txt +/data/logs/2006.04.12.txt +/data/logs/2006.04.13.txt +/data/logs/2006.04.14.txt +/data/logs/2006.04.15.txt +/data/logs/2006.04.16.txt +/data/logs/2006.04.17.txt +/data/logs/2006.04.18.txt +/data/logs/2006.04.19.txt +/data/logs/2006.04.20.txt +/data/logs/2006.04.21.txt +/data/logs/2006.04.22.txt +/data/logs/2006.04.23.txt +/data/logs/2006.04.24.txt +/data/logs/2006.04.25.txt +/data/logs/2006.04.26.txt +/data/logs/2006.04.27.txt +/data/logs/2006.04.28.txt +/data/logs/2006.04.29.txt +/data/logs/2006.04.30.txt +/data/logs/2006.05.01.txt +/data/logs/2006.05.02.txt +/data/logs/2006.05.03.txt +/data/logs/2006.05.04.txt +/data/logs/2006.05.05.txt +/data/logs/2006.05.06.txt +/data/logs/2006.05.07.txt +/data/logs/2006.05.08.txt +/data/logs/2006.05.09.txt +/data/logs/2006.05.10.txt +/data/logs/2006.05.11.txt +/data/logs/2006.05.12.txt +/data/logs/2006.05.13.txt +/data/logs/2006.05.14.txt +/data/logs/2006.05.15.txt +/data/logs/2006.05.16.txt +/data/logs/2006.05.17.txt +/data/logs/2006.05.18.txt +/data/logs/2006.05.19.txt +/data/logs/2006.05.20.txt +/data/logs/2006.05.21.txt +/data/logs/2006.05.22.txt +/data/logs/2006.05.23.txt +/data/logs/2006.05.24.txt +/data/logs/2006.05.25.txt +/data/logs/2006.05.26.txt +/data/logs/2006.05.27.txt +/data/logs/2006.05.28.txt +/data/logs/2006.05.29.txt +/data/logs/2006.05.30.txt +/data/logs/2006.05.31.txt +/data/logs/2006.06.01.txt +/data/logs/2006.06.02.txt +/data/logs/2006.06.03.txt +/data/logs/2006.06.04.txt +/data/logs/2006.06.05.txt +/data/logs/2006.06.06.txt +/data/logs/2006.06.07.txt +/data/logs/2006.06.08.txt +/data/logs/2006.06.09.txt +/data/logs/2006.06.10.txt +/data/logs/2006.06.11.txt +/data/logs/2006.06.12.txt +/data/logs/2006.06.13.txt +/data/logs/2006.06.14.txt +/data/logs/2006.06.15.txt +/data/logs/2006.06.16.txt +/data/logs/2006.06.17.txt +/data/logs/2006.06.18.txt +/data/logs/2006.06.19.txt +/data/logs/2006.06.20.txt +/data/logs/2006.06.21.txt +/data/logs/2006.06.22.txt +/data/logs/2006.06.23.txt +/data/logs/2006.06.24.txt +/data/logs/2006.06.25.txt +/data/logs/2006.06.26.txt +/data/logs/2006.06.27.txt +/data/logs/2006.06.28.txt +/data/logs/2006.06.29.txt +/data/logs/2006.06.30.txt +/data/logs/2006.07.01.txt +/data/logs/2006.07.02.txt +/data/logs/2006.07.03.txt +/data/logs/2006.07.04.txt +/data/logs/2006.07.05.txt +/data/logs/2006.07.06.txt +/data/logs/2006.07.07.txt +/data/logs/2006.07.08.txt +/data/logs/2006.07.09.txt +/data/logs/2006.07.10.txt +/data/logs/2006.07.11.txt +/data/logs/2006.07.12.txt +/data/logs/2006.07.13.txt +/data/logs/2006.07.14.txt +/data/logs/2006.07.15.txt +/data/logs/2006.07.16.txt +/data/logs/2006.07.17.txt +/data/logs/2006.07.18.txt +/data/logs/2006.07.19.txt +/data/logs/2006.07.20.txt +/data/logs/2006.07.21.txt +/data/logs/2006.07.22.txt +/data/logs/2006.07.23.txt +/data/logs/2006.07.24.txt +/data/logs/2006.07.25.txt +/data/logs/2006.07.26.txt +/data/logs/2006.07.27.txt +/data/logs/2006.07.28.txt +/data/logs/2006.07.29.txt +/data/logs/2006.07.30.txt +/data/logs/2006.07.31.txt +/data/logs/2006.08.01.txt +/data/logs/2006.08.02.txt +/data/logs/2006.08.03.txt +/data/logs/2006.08.04.txt +/data/logs/2006.08.05.txt +/data/logs/2006.08.06.txt +/data/logs/2006.08.07.txt +/data/logs/2006.08.08.txt +/data/logs/2006.08.09.txt +/data/logs/2006.08.10.txt +/data/logs/2006.08.11.txt +/data/logs/2006.08.12.txt +/data/logs/2006.08.13.txt +/data/logs/2006.08.14.txt +/data/logs/2006.08.15.txt +/data/logs/2006.08.16.txt +/data/logs/2006.08.17.txt +/data/logs/2006.08.18.txt +/data/logs/2006.08.19.txt +/data/logs/2006.08.20.txt +/data/logs/2006.08.21.txt +/data/logs/2006.08.22.txt +/data/logs/2006.08.23.txt +/data/logs/2006.08.24.txt +/data/logs/2006.08.25.txt +/data/logs/2006.08.26.txt +/data/logs/2006.08.27.txt +/data/logs/2006.08.28.txt +/data/logs/2006.08.29.txt +/data/logs/2006.08.30.txt +/data/logs/2006.08.31.txt +/data/logs/2006.09.01.txt +/data/logs/2006.09.02.txt +/data/logs/2006.09.03.txt +/data/logs/2006.09.04.txt +/data/logs/2006.09.05.txt +/data/logs/2006.09.06.txt +/data/logs/2006.09.07.txt +/data/logs/2006.09.08.txt +/data/logs/2006.09.09.txt +/data/logs/2006.09.10.txt +/data/logs/2006.09.11.txt +/data/logs/2006.09.12.txt +/data/logs/2006.09.13.txt +/data/logs/2006.09.14.txt +/data/logs/2006.09.15.txt +/data/logs/2006.09.16.txt +/data/logs/2006.09.17.txt +/data/logs/2006.09.18.txt +/data/logs/2006.09.19.txt +/data/logs/2006.09.20.txt +/data/logs/2006.09.21.txt +/data/logs/2006.09.22.txt +/data/logs/2006.09.23.txt +/data/logs/2006.09.24.txt +/data/logs/2006.09.25.txt +/data/logs/2006.09.26.txt +/data/logs/2006.09.27.txt +/data/logs/2006.09.28.txt +/data/logs/2006.09.29.txt +/data/logs/2006.09.30.txt +/data/logs/2006.10.01.txt +/data/logs/2006.10.02.txt +/data/logs/2006.10.03.txt +/data/logs/2006.10.04.txt +/data/logs/2006.10.05.txt +/data/logs/2006.10.06.txt +/data/logs/2006.10.07.txt +/data/logs/2006.10.08.txt +/data/logs/2006.10.09.txt +/data/logs/2006.10.10.txt +/data/logs/2006.10.11.txt +/data/logs/2006.10.12.txt +/data/logs/2006.10.13.txt +/data/logs/2006.10.14.txt +/data/logs/2006.10.15.txt +/data/logs/2006.10.16.txt +/data/logs/2006.10.17.txt +/data/logs/2006.10.18.txt +/data/logs/2006.10.19.txt +/data/logs/2006.10.20.txt +/data/logs/2006.10.21.txt +/data/logs/2006.10.22.txt +/data/logs/2006.10.23.txt +/data/logs/2006.10.24.txt +/data/logs/2006.10.25.txt +/data/logs/2006.10.26.txt +/data/logs/2006.10.27.txt +/data/logs/2006.10.28.txt +/data/logs/2006.10.29.txt +/data/logs/2006.10.30.txt +/data/logs/2006.10.31.txt +/data/logs/2006.11.01.txt +/data/logs/2006.11.02.txt +/data/logs/2006.11.03.txt +/data/logs/2006.11.04.txt +/data/logs/2006.11.05.txt +/data/logs/2006.11.06.txt +/data/logs/2006.11.07.txt +/data/logs/2006.11.08.txt +/data/logs/2006.11.09.txt +/data/logs/2006.11.10.txt +/data/logs/2006.11.11.txt +/data/logs/2006.11.12.txt +/data/logs/2006.11.13.txt +/data/logs/2006.11.14.txt +/data/logs/2006.11.15.txt +/data/logs/2006.11.16.txt +/data/logs/2006.11.17.txt +/data/logs/2006.11.18.txt +/data/logs/2006.11.19.txt +/data/logs/2006.11.20.txt +/data/logs/2006.11.21.txt +/data/logs/2006.11.22.txt +/data/logs/2006.11.23.txt +/data/logs/2006.11.24.txt +/data/logs/2006.11.25.txt +/data/logs/2006.11.26.txt +/data/logs/2006.11.27.txt +/data/logs/2006.11.28.txt +/data/logs/2006.11.29.txt +/data/logs/2006.11.30.txt +/data/logs/2006.12.01.txt +/data/logs/2006.12.02.txt +/data/logs/2006.12.03.txt +/data/logs/2006.12.04.txt +/data/logs/2006.12.05.txt +/data/logs/2006.12.06.txt +/data/logs/2006.12.07.txt +/data/logs/2006.12.08.txt +/data/logs/2006.12.09.txt +/data/logs/2006.12.10.txt +/data/logs/2006.12.11.txt +/data/logs/2006.12.12.txt +/data/logs/2006.12.13.txt +/data/logs/2006.12.14.txt +/data/logs/2006.12.15.txt +/data/logs/2006.12.16.txt +/data/logs/2006.12.17.txt +/data/logs/2006.12.18.txt +/data/logs/2006.12.19.txt +/data/logs/2006.12.20.txt +/data/logs/2006.12.21.txt +/data/logs/2006.12.22.txt +/data/logs/2006.12.23.txt +/data/logs/2006.12.24.txt +/data/logs/2006.12.25.txt +/data/logs/2006.12.26.txt +/data/logs/2006.12.27.txt +/data/logs/2006.12.28.txt +/data/logs/2006.12.29.txt +/data/logs/2006.12.30.txt +/data/logs/2006.12.31.txt +/data/logs/2007.01.01.txt +/data/logs/2007.01.02.txt +/data/logs/2007.01.03.txt +/data/logs/2007.01.04.txt +/data/logs/2007.01.05.txt +/data/logs/2007.01.06.txt +/data/logs/2007.01.07.txt +/data/logs/2007.01.08.txt +/data/logs/2007.01.09.txt +/data/logs/2007.01.10.txt +/data/logs/2007.01.11.txt +/data/logs/2007.01.12.txt +/data/logs/2007.01.13.txt +/data/logs/2007.01.14.txt +/data/logs/2007.01.15.txt +/data/logs/2007.01.16.txt +/data/logs/2007.01.17.txt +/data/logs/2007.01.18.txt +/data/logs/2007.01.19.txt +/data/logs/2007.01.20.txt +/data/logs/2007.01.21.txt +/data/logs/2007.01.22.txt +/data/logs/2007.01.23.txt +/data/logs/2007.01.24.txt +/data/logs/2007.01.25.txt +/data/logs/2008.01.01.txt +/data/logs/2008.01.02.txt +/data/logs/2008.01.03.txt +/data/logs/2008.01.04.txt +/data/logs/2008.01.05.txt +/data/logs/2008.01.06.txt +/data/logs/2008.01.07.txt +/data/logs/2008.01.08.txt +/data/logs/2008.01.09.txt +/data/logs/2008.01.10.txt +/data/logs/2008.01.11.txt +/data/logs/2008.01.12.txt +/data/logs/2008.01.13.txt +/data/logs/2008.01.14.txt +/data/logs/2008.01.15.txt +/data/logs/2008.01.16.txt +/data/logs/2008.01.17.txt +/data/logs/2008.01.18.txt +/data/logs/2008.01.19.txt +/data/logs/2008.01.20.txt +/data/logs/2008.01.21.txt +/data/logs/2008.01.22.txt +/data/logs/2008.01.23.txt +/data/logs/2008.01.24.txt +/data/logs/2008.01.25.txt +/data/logs/2008.01.26.txt +/data/logs/2008.01.27.txt +/data/logs/2008.01.28.txt +/data/logs/2008.01.29.txt +/data/logs/2008.01.30.txt +/data/logs/2008.01.31.txt +/data/logs/2008.02.01.txt +/data/logs/2008.02.02.txt +/data/logs/2008.02.03.txt +/data/logs/2008.02.04.txt +/data/logs/2008.02.05.txt +/data/logs/2008.02.06.txt +/data/logs/2008.02.07.txt +/data/logs/2008.02.08.txt +/data/logs/2008.02.09.txt +/data/logs/2008.02.10.txt +/data/logs/2008.02.11.txt +/data/logs/2008.02.12.txt +/data/logs/2008.02.13.txt +/data/logs/2008.02.14.txt +/data/logs/2008.02.15.txt +/data/logs/2008.02.16.txt +/data/logs/2008.02.17.txt +/data/logs/2008.02.18.txt +/data/logs/2008.02.19.txt +/data/logs/2008.02.20.txt +/data/logs/2008.02.21.txt +/data/logs/2008.02.22.txt +/data/logs/2008.02.23.txt +/data/logs/2008.02.24.txt +/data/logs/2008.02.25.txt +/data/logs/2008.02.26.txt +/data/logs/2008.02.27.txt +/data/logs/2008.02.28.txt +/data/logs/2008.02.29.txt +/data/logs/2008.03.01.txt +/data/logs/2008.03.02.txt +/data/logs/2008.03.03.txt +/data/logs/2008.03.04.txt +/data/logs/2008.03.05.txt +/data/logs/2008.03.06.txt +/data/logs/2008.03.07.txt +/data/logs/2008.03.08.txt +/data/logs/2008.03.09.txt +/data/logs/2008.03.10.txt +/data/logs/2008.03.11.txt +/data/logs/2008.03.12.txt +/data/logs/2008.03.13.txt +/data/logs/2008.03.14.txt +/data/logs/2008.03.15.txt +/data/logs/2008.03.16.txt +/data/logs/2008.03.17.txt +/data/logs/2008.03.18.txt +/data/logs/2008.03.19.txt +/data/logs/2008.03.20.txt +/data/logs/2008.03.21.txt +/data/logs/2008.03.22.txt +/data/logs/2008.03.23.txt +/data/logs/2008.03.24.txt +/data/logs/2008.03.25.txt +/data/logs/2008.03.26.txt +/data/logs/2008.03.27.txt +/data/logs/2008.03.28.txt +/data/logs/2008.03.29.txt +/data/logs/2008.03.30.txt +/data/logs/2008.03.31.txt +/data/logs/2008.04.01.txt +/data/logs/2008.04.02.txt +/data/logs/2008.04.03.txt +/data/logs/2008.04.04.txt +/data/logs/2008.04.05.txt +/data/logs/2008.04.06.txt +/data/logs/2008.04.07.txt +/data/logs/2008.04.08.txt +/data/logs/2008.04.09.txt +/data/logs/2008.04.10.txt +/data/logs/2008.04.11.txt +/data/logs/2008.04.12.txt +/data/logs/2008.04.13.txt +/data/logs/2008.04.14.txt +/data/logs/2008.04.15.txt +/data/logs/2008.04.16.txt +/data/logs/2008.04.17.txt +/data/logs/2008.04.18.txt +/data/logs/2008.04.19.txt +/data/logs/2008.04.20.txt +/data/logs/2008.04.21.txt +/data/logs/2008.04.22.txt +/data/logs/2008.04.23.txt +/data/logs/2008.04.24.txt +/data/logs/2008.04.25.txt +/data/logs/2008.04.26.txt +/data/logs/2008.04.27.txt +/data/logs/2008.04.28.txt +/data/logs/2008.04.29.txt +/data/logs/2008.04.30.txt +/data/logs/2008.05.01.txt +/data/logs/2008.05.02.txt +/data/logs/2008.05.03.txt +/data/logs/2008.05.04.txt +/data/logs/2008.05.05.txt +/data/logs/2008.05.06.txt +/data/logs/2008.05.07.txt +/data/logs/2008.05.08.txt +/data/logs/2008.05.09.txt +/data/logs/2008.05.10.txt +/data/logs/2008.05.11.txt +/data/logs/2008.05.12.txt +/data/logs/2008.05.13.txt +/data/logs/2008.05.14.txt +/data/logs/2008.05.15.txt +/data/logs/2008.05.16.txt +/data/logs/2008.05.17.txt +/data/logs/2008.05.18.txt +/data/logs/2008.05.19.txt +/data/logs/2008.05.20.txt +/data/logs/2008.05.21.txt +/data/logs/2008.05.22.txt +/data/logs/2008.05.23.txt +/data/logs/2008.05.24.txt +/data/logs/2008.05.25.txt +/data/logs/2008.05.26.txt +/data/logs/2008.05.27.txt +/data/logs/2008.05.28.txt +/data/logs/2008.05.29.txt +/data/logs/2008.05.30.txt +/data/logs/2008.05.31.txt +/data/logs/2008.06.01.txt +/data/logs/2008.06.02.txt +/data/logs/2008.06.03.txt +/data/logs/2008.06.04.txt +/data/logs/2008.06.05.txt +/data/logs/2008.06.06.txt +/data/logs/2008.06.07.txt +/data/logs/2008.06.08.txt +/data/logs/2008.06.09.txt +/data/logs/2008.06.10.txt +/data/logs/2008.06.11.txt +/data/logs/2008.06.12.txt +/data/logs/2008.06.13.txt +/data/logs/2008.06.14.txt +/data/logs/2008.06.15.txt +/data/logs/2008.06.16.txt +/data/logs/2008.06.17.txt +/data/logs/2008.06.18.txt +/data/logs/2008.06.19.txt +/data/logs/2008.06.20.txt +/data/logs/2008.06.21.txt +/data/logs/2008.06.22.txt +/data/logs/2008.06.23.txt +/data/logs/2008.06.24.txt +/data/logs/2008.06.25.txt +/data/logs/2008.06.26.txt +/data/logs/2008.06.27.txt +/data/logs/2008.06.28.txt +/data/logs/2008.06.29.txt +/data/logs/2008.06.30.txt +/data/logs/2008.07.01.txt +/data/logs/2008.07.02.txt +/data/logs/2008.07.03.txt +/data/logs/2008.07.04.txt +/data/logs/2008.07.05.txt +/data/logs/2008.07.06.txt +/data/logs/2008.07.07.txt +/data/logs/2008.07.08.txt +/data/logs/2008.07.09.txt +/data/logs/2008.07.10.txt +/data/logs/2008.07.11.txt +/data/logs/2008.07.12.txt +/data/logs/2008.07.13.txt +/data/logs/2008.07.14.txt +/data/logs/2008.07.15.txt +/data/logs/2008.07.16.txt +/data/logs/2008.07.17.txt +/data/logs/2008.07.18.txt +/data/logs/2008.07.19.txt +/data/logs/2008.07.20.txt +/data/logs/2008.07.21.txt +/data/logs/2008.07.22.txt +/data/logs/2008.07.23.txt +/data/logs/2008.07.24.txt +/data/logs/2008.07.25.txt +/data/logs/2008.07.26.txt +/data/logs/2008.07.27.txt +/data/logs/2008.07.28.txt +/data/logs/2008.07.29.txt +/data/logs/2008.07.31.txt +/data/logs/2008.08.01.txt +/data/logs/2008.08.02.txt +/data/logs/2010.04.02.txt +/data/logs/2010.04.03.txt +/data/logs/2010.04.04.txt +/data/logs/2010.04.05.txt +/data/logs/2010.04.06.txt +/data/logs/2010.04.07.txt +/data/logs/2010.04.08.txt +/data/logs/2010.04.09.txt +/data/logs/2010.04.10.txt +/data/logs/2010.04.11.txt +/data/logs/2010.04.12.txt +/data/logs/2010.04.13.txt +/data/logs/2010.04.14.txt +/data/logs/2010.04.15.txt +/data/logs/2010.04.16.txt +/data/logs/2010.04.17.txt +/data/logs/2010.04.18.txt +/data/logs/2010.04.19.txt +/data/logs/2010.04.20.txt +/data/logs/2010.04.21.txt +/data/logs/2010.04.22.txt +/data/logs/2010.04.23.txt +/data/logs/2010.04.24.txt +/data/logs/2010.04.25.txt +/data/logs/2010.04.26.txt +/data/logs/2010.04.27.txt +/data/logs/2010.04.28.txt +/data/logs/2010.04.29.txt +/data/logs/2010.04.30.txt +/data/logs/2010.05.01.txt +/data/logs/2010.05.02.txt +/data/logs/2010.05.03.txt +/data/logs/2010.05.04.txt +/data/logs/2010.05.05.txt +/data/logs/2010.05.06.txt +/data/logs/2010.05.07.txt +/data/logs/2010.05.08.txt +/data/logs/2010.05.09.txt +/data/logs/2010.05.10.txt +/data/logs/2010.05.11.txt +/data/logs/2010.05.12.txt +/data/logs/2010.05.13.txt +/data/logs/2010.05.14.txt +/data/logs/2010.05.15.txt +/data/logs/2010.05.16.txt +/data/logs/2010.05.17.txt +/data/logs/2010.05.18.txt +/data/logs/2010.05.19.txt +/data/logs/2010.05.20.txt +/data/logs/2010.05.21.txt +/data/logs/2010.05.22.txt +/data/logs/2010.05.23.txt +/data/logs/2010.05.24.txt +/data/logs/2010.05.25.txt +/data/logs/2010.05.26.txt +/data/logs/2010.05.27.txt +/data/logs/2010.05.28.txt +/data/logs/2010.05.29.txt +/data/logs/2010.05.30.txt +/data/logs/2010.05.31.txt +/data/logs/2010.06.01.txt +/data/logs/2010.06.02.txt +/data/logs/2010.06.03.txt +/data/logs/2010.06.04.txt +/data/logs/2010.06.05.txt +/data/logs/2010.06.06.txt +/data/logs/2010.06.07.txt +/data/logs/2010.06.08.txt +/data/logs/2010.06.09.txt +/data/logs/2010.06.10.txt +/data/logs/2010.06.11.txt +/data/logs/2010.06.12.txt +/data/logs/2010.06.13.txt +/data/logs/2010.06.14.txt +/data/logs/2010.06.15.txt +/data/logs/2010.06.16.txt +/data/logs/2010.06.17.txt +/data/logs/2010.06.18.txt +/data/logs/2010.06.19.txt +/data/logs/2010.06.20.txt +/data/logs/2010.06.21.txt +/data/logs/2010.06.22.txt +/data/logs/2010.06.23.txt +/data/logs/2010.06.24.txt +/data/logs/2010.06.25.txt +/data/logs/2010.06.26.txt +/data/logs/2010.06.27.txt +/data/logs/2010.06.28.txt +/data/logs/2010.06.29.txt +/data/logs/2010.06.30.txt +/data/logs/2010.07.01.txt +/data/logs/2010.07.02.txt +/data/logs/2010.07.03.txt +/data/logs/2010.07.04.txt +/data/logs/2010.07.05.txt +/data/logs/2010.07.06.txt +/data/logs/2010.07.07.txt +/data/logs/2010.07.08.txt +/data/logs/2010.07.09.txt +/data/logs/2010.07.10.txt +/data/logs/2010.07.11.txt +/data/logs/2010.07.12.txt +/data/logs/2010.07.13.txt +/data/logs/2010.07.14.txt +/data/logs/2010.07.15.txt +/data/logs/2010.07.16.txt +/data/logs/2010.07.17.txt +/data/logs/2010.07.18.txt +/data/logs/2010.07.19.txt +/data/logs/2010.07.20.txt +/data/logs/2010.07.21.txt +/data/logs/2010.07.22.txt +/data/logs/2010.07.23.txt +/data/logs/2010.07.24.txt +/data/logs/2010.07.25.txt +/data/logs/2010.07.26.txt +/data/logs/2010.07.27.txt +/data/logs/2010.07.28.txt +/data/logs/2010.07.29.txt +/data/logs/2010.07.30.txt +/data/logs/2010.07.31.txt +/data/logs/2010.08.01.txt +/data/logs/2010.08.02.txt +/data/logs/2010.08.03.txt +/data/logs/2010.08.04.txt +/data/logs/2010.08.05.txt +/data/logs/2010.08.06.txt +/data/logs/2010.08.07.txt +/data/logs/2010.08.08.txt +/data/logs/2010.08.09.txt +/data/logs/2010.08.10.txt +/data/logs/2010.08.11.txt +/data/logs/2010.08.12.txt +/data/logs/2010.08.13.txt +/data/logs/2010.08.14.txt +/data/logs/2010.08.15.txt +/data/logs/2010.08.16.txt +/data/logs/2010.08.17.txt +/data/logs/2010.08.18.txt +/data/logs/2010.08.19.txt +/data/logs/2010.08.20.txt +/data/logs/2010.08.21.txt +/data/logs/2010.08.22.txt +/data/logs/2010.08.23.txt +/data/logs/2010.08.24.txt +/data/logs/2010.08.25.txt +/data/logs/2010.08.26.txt +/data/logs/2010.08.27.txt +/data/logs/2010.08.28.txt +/data/logs/2010.08.29.txt +/data/logs/2010.08.30.txt +/data/logs/2010.08.31.txt +/data/logs/2010.09.01.txt +/data/logs/2010.09.02.txt +/data/logs/2010.09.03.txt +/data/logs/2010.09.04.txt +/data/logs/2010.09.05.txt +/data/logs/2010.09.06.txt +/data/logs/2010.09.07.txt +/data/logs/2010.09.08.txt +/data/logs/2010.09.09.txt +/data/logs/2010.09.10.txt +/data/logs/2010.09.11.txt +/data/logs/2010.09.12.txt +/data/logs/2010.09.13.txt +/data/logs/2010.09.14.txt +/data/logs/2010.09.15.txt +/data/logs/2010.09.16.txt +/data/logs/2010.09.17.txt +/data/logs/2010.09.18.txt +/data/logs/2010.09.19.txt +/data/logs/2010.09.20.txt +/data/logs/2010.09.21.txt +/data/logs/2010.09.22.txt +/data/logs/2010.09.23.txt +/data/logs/2010.09.24.txt +/data/logs/2010.09.25.txt +/data/logs/2010.09.26.txt +/data/logs/2010.09.27.txt +/data/logs/2010.09.28.txt +/data/logs/2010.09.29.txt +/data/logs/2010.09.30.txt +/data/logs/2010.10.01.txt +/data/logs/2010.10.02.txt +/data/logs/2010.10.03.txt +/data/logs/2010.10.04.txt +/data/logs/2010.10.05.txt +/data/logs/2010.10.06.txt +/data/logs/2010.10.07.txt +/data/logs/2010.10.08.txt +/data/logs/2010.10.09.txt +/data/logs/2010.10.10.txt +/data/logs/2010.10.11.txt +/data/logs/2010.10.12.txt +/data/logs/2010.10.13.txt +/data/logs/2010.10.14.txt +/data/logs/2010.10.15.txt +/data/logs/2010.10.16.txt +/data/logs/2010.10.17.txt +/data/logs/2010.10.18.txt +/data/logs/2010.10.19.txt +/data/logs/2010.10.20.txt +/data/logs/2010.10.21.txt +/data/logs/2010.10.22.txt +/data/logs/2010.10.23.txt +/data/logs/2010.10.24.txt +/data/logs/2010.10.25.txt +/data/logs/2010.10.26.txt +/data/logs/2010.10.27.txt +/data/logs/2010.10.28.txt +/data/logs/2010.10.29.txt +/data/logs/2010.10.30.txt +/data/logs/2010.10.31.txt +/data/logs/2010.11.01.txt +/data/logs/2010.11.02.txt +/data/logs/2010.11.03.txt +/data/logs/2010.11.04.txt +/data/logs/2010.11.05.txt +/data/logs/2010.11.06.txt +/data/logs/2010.11.07.txt +/data/logs/2010.11.08.txt +/data/logs/2010.11.09.txt +/data/logs/2010.11.10.txt +/data/logs/2010.11.11.txt +/data/logs/2010.11.12.txt +/data/logs/2010.11.13.txt +/data/logs/2010.11.14.txt +/data/logs/2010.11.15.txt +/data/logs/2010.11.16.txt +/data/logs/2010.11.17.txt +/data/logs/2010.11.18.txt +/data/logs/2010.11.19.txt +/data/logs/2010.11.20.txt +/data/logs/2010.11.21.txt +/data/logs/2010.11.22.txt +/data/logs/2010.11.23.txt +/data/logs/2010.11.24.txt +/data/logs/2010.11.25.txt +/data/logs/2010.11.26.txt +/data/logs/2010.11.27.txt +/data/logs/2010.11.28.txt +/data/logs/2010.11.29.txt +/data/logs/2010.11.30.txt +/data/logs/2010.12.01.txt +/data/logs/2010.12.02.txt +/data/logs/2010.12.03.txt +/data/logs/2010.12.04.txt +/data/logs/2010.12.05.txt +/data/logs/2010.12.06.txt +/data/logs/2010.12.07.txt +/data/logs/2010.12.08.txt +/data/logs/2010.12.09.txt +/data/logs/2010.12.10.txt +/data/logs/2010.12.11.txt +/data/logs/2010.12.12.txt +/data/logs/2010.12.13.txt +/data/logs/2010.12.14.txt +/data/logs/2010.12.15.txt +/data/logs/2010.12.16.txt +/data/logs/2010.12.17.txt +/data/logs/2010.12.18.txt +/data/logs/2010.12.19.txt +/data/logs/2010.12.20.txt +/data/logs/2010.12.21.txt +/data/logs/2010.12.22.txt +/data/logs/2010.12.23.txt +/data/logs/2010.12.24.txt +/data/logs/2010.12.25.txt +/data/logs/2010.12.26.txt +/data/logs/2010.12.27.txt +/data/logs/2010.12.28.txt +/data/logs/2010.12.29.txt +/data/logs/2010.12.30.txt +/data/logs/2010.12.31.txt +/data/logs/2011.01.01.txt +/data/logs/2011.01.02.txt +/data/logs/2011.01.03.txt +/data/logs/2011.01.04.txt +/data/logs/2011.01.05.txt +/data/logs/2011.01.06.txt +/data/logs/2011.01.07.txt +/data/logs/2011.01.08.txt +/data/logs/2011.01.09.txt +/data/logs/2011.01.10.txt +/data/logs/2011.01.11.txt +/data/logs/2011.01.12.txt +/data/logs/2011.01.13.txt +/data/logs/2011.01.14.txt +/data/logs/2011.01.15.txt +/data/logs/2011.01.16.txt +/data/logs/2011.01.17.txt +/data/logs/2011.01.18.txt +/data/logs/2011.01.19.txt +/data/logs/2011.01.20.txt +/data/logs/2011.01.21.txt +/data/logs/2011.01.22.txt +/data/logs/2011.01.23.txt +/data/logs/2011.01.24.txt +/data/logs/2011.01.25.txt +/data/logs/2011.01.26.txt +/data/logs/2011.01.27.txt +/data/logs/2011.01.28.txt +/data/logs/2011.01.29.txt +/data/logs/2011.01.30.txt +/data/logs/2011.01.31.txt +/data/logs/2011.02.01.txt +/data/logs/2011.02.02.txt +/data/logs/2011.02.03.txt +/data/logs/2011.02.04.txt +/data/logs/2011.02.05.txt +/data/logs/2011.02.06.txt +/data/logs/2011.02.07.txt +/data/logs/2011.02.08.txt +/data/logs/2011.02.09.txt +/data/logs/2011.02.10.txt +/data/logs/2011.02.11.txt +/data/logs/2011.02.12.txt +/data/logs/2011.02.13.txt +/data/logs/2011.02.14.txt +/data/logs/2011.02.15.txt +/data/logs/2011.02.16.txt +/data/logs/2011.02.17.txt +/data/logs/2011.02.18.txt +/data/logs/2011.02.19.txt +/data/logs/2011.02.20.txt +/data/logs/2011.02.21.txt +/data/logs/2011.02.22.txt +/data/logs/2011.02.23.txt +/data/logs/2011.02.24.txt +/data/logs/2011.02.25.txt +/data/logs/2011.02.26.txt +/data/logs/2011.02.27.txt +/data/logs/2011.02.28.txt +/data/logs/2011.03.01.txt +/data/logs/2011.03.02.txt +/data/logs/2011.03.03.txt +/data/logs/2011.03.04.txt +/data/logs/2011.03.05.txt +/data/logs/2011.03.06.txt +/data/logs/2011.03.07.txt +/data/logs/2011.03.08.txt +/data/logs/2011.03.09.txt +/data/logs/2011.03.10.txt +/data/logs/2011.03.11.txt +/data/logs/2011.03.12.txt +/data/logs/2011.03.13.txt +/data/logs/2011.03.14.txt +/data/logs/2011.03.15.txt +/data/logs/2011.03.16.txt +/data/logs/2011.03.17.txt +/data/logs/2011.03.18.txt +/data/logs/2011.03.19.txt +/data/logs/2011.03.20.txt +/data/logs/2011.03.21.txt +/data/logs/2011.03.22.txt +/data/logs/2011.03.23.txt +/data/logs/2011.03.24.txt +/data/logs/2011.03.25.txt +/data/logs/2011.03.26.txt +/data/logs/2011.03.27.txt +/data/logs/2011.03.28.txt +/data/logs/2011.03.29.txt +/data/logs/2011.03.30.txt +/data/logs/2011.03.31.txt +/data/logs/2011.04.01.txt +/data/logs/2011.04.02.txt +/data/logs/2011.04.03.txt +/data/logs/2011.04.04.txt +/data/logs/2011.04.05.txt +/data/logs/2011.04.06.txt +/data/logs/2011.04.07.txt +/data/logs/2011.04.08.txt +/data/logs/2011.04.09.txt +/data/logs/2011.04.10.txt +/data/logs/2011.04.11.txt +/data/logs/2011.04.12.txt +/data/logs/2011.04.13.txt +/data/logs/2011.04.14.txt +/data/logs/2011.04.15.txt +/data/logs/2011.04.16.txt +/data/logs/2011.04.17.txt +/data/logs/2011.04.18.txt +/data/logs/2011.04.19.txt +/data/logs/2011.04.20.txt +/data/logs/2011.04.21.txt +/data/logs/2011.04.22.txt +/data/logs/2011.04.23.txt +/data/logs/2011.04.24.txt +/data/logs/2011.04.25.txt +/data/logs/2011.04.26.txt +/data/logs/2011.04.27.txt +/data/logs/2011.04.28.txt +/data/logs/2011.04.29.txt +/data/logs/2011.04.30.txt +/data/logs/2011.05.01.txt +/data/logs/2011.05.02.txt +/data/logs/2011.05.03.txt +/data/logs/2011.05.04.txt +/data/logs/2011.05.05.txt +/data/logs/2011.05.06.txt +/data/logs/2011.05.07.txt +/data/logs/2011.05.08.txt +/data/logs/2011.05.09.txt +/data/logs/2011.05.10.txt +/data/logs/2011.05.11.txt +/data/logs/2011.05.12.txt +/data/logs/2011.05.13.txt +/data/logs/2011.05.14.txt +/data/logs/2011.05.15.txt +/data/logs/2011.05.16.txt +/data/logs/2011.05.17.txt +/data/logs/2011.05.18.txt +/data/logs/2011.05.19.txt +/data/logs/2011.05.20.txt +/data/logs/2011.05.21.txt +/data/logs/2011.05.22.txt +/data/logs/2011.05.23.txt +/data/logs/2011.05.24.txt +/data/logs/2011.05.25.txt +/data/logs/2011.05.26.txt +/data/logs/2011.05.27.txt +/data/logs/2011.05.28.txt +/data/logs/2011.05.29.txt +/data/logs/2011.05.30.txt +/data/logs/2011.05.31.txt +/data/logs/2011.06.01.txt +/data/logs/2011.06.02.txt +/data/logs/2011.06.03.txt +/data/logs/2011.06.04.txt +/data/logs/2011.06.05.txt +/data/logs/2011.06.06.txt +/data/logs/2011.06.07.txt +/data/logs/2011.06.08.txt +/data/logs/2011.06.09.txt +/data/logs/2011.06.10.txt +/data/logs/2011.06.11.txt +/data/logs/2011.06.12.txt +/data/logs/2011.06.13.txt +/data/logs/2011.06.14.txt +/data/logs/2011.06.15.txt +/data/logs/2011.06.16.txt +/data/logs/2011.06.17.txt +/data/logs/2011.06.18.txt +/data/logs/2011.06.19.txt +/data/logs/2011.06.20.txt +/data/logs/2011.06.21.txt +/data/logs/2011.06.22.txt +/data/logs/2011.06.23.txt +/data/logs/2011.06.24.txt +/data/logs/2011.06.25.txt +/data/logs/2011.06.26.txt +/data/logs/2011.06.27.txt +/data/logs/2011.06.28.txt +/data/logs/2011.06.29.txt +/data/logs/2011.06.30.txt +/data/logs/2011.07.01.txt +/data/logs/2011.07.02.txt +/data/logs/2011.07.03.txt +/data/logs/2011.07.04.txt +/data/logs/2011.07.05.txt +/data/logs/2011.07.06.txt +/data/logs/2011.07.07.txt +/data/logs/2011.07.08.txt +/data/logs/2011.07.09.txt +/data/logs/2011.07.10.txt +/data/logs/2011.07.11.txt +/data/logs/2011.07.12.txt +/data/logs/2011.07.13.txt +/data/logs/2011.07.14.txt +/data/logs/2011.07.15.txt +/data/logs/2011.07.16.txt +/data/logs/2011.07.17.txt +/data/logs/2011.07.18.txt +/data/logs/2011.07.19.txt +/data/logs/2011.07.20.txt +/data/logs/2011.07.21.txt +/data/logs/2011.07.22.txt +/data/logs/2011.07.23.txt +/data/logs/2011.07.24.txt +/data/logs/2011.07.25.txt +/data/logs/2011.07.26.txt +/data/logs/2011.07.27.txt +/data/logs/2011.07.28.txt +/data/logs/2011.07.29.txt +/data/logs/2011.07.30.txt +/data/logs/2011.07.31.txt +/data/logs/2011.08.01.txt +/data/logs/2011.08.02.txt +/data/logs/2011.08.03.txt +/data/logs/2011.08.04.txt +/data/logs/2011.08.05.txt +/data/logs/2011.08.06.txt +/data/logs/2011.08.07.txt +/data/logs/2011.08.08.txt +/data/logs/2011.08.09.txt +/data/logs/2011.08.10.txt +/data/logs/2011.08.11.txt +/data/logs/2011.08.12.txt +/data/logs/2011.08.13.txt +/data/logs/2011.08.14.txt +/data/logs/2011.08.15.txt +/data/logs/2011.08.16.txt +/data/logs/2011.08.17.txt +/data/logs/2011.08.18.txt +/data/logs/2011.08.19.txt +/data/logs/2011.08.20.txt +/data/logs/2011.08.21.txt +/data/logs/2011.08.22.txt +/data/logs/2011.08.23.txt +/data/logs/2011.08.24.txt +/data/logs/2011.08.25.txt +/data/logs/2011.08.26.txt +/data/logs/2011.08.27.txt +/data/logs/2011.08.28.txt +/data/logs/2011.08.29.txt +/data/logs/2011.08.30.txt +/data/logs/2011.08.31.txt +/data/logs/2011.09.01.txt +/data/logs/2011.09.02.txt +/data/logs/2011.09.03.txt +/data/logs/2011.09.04.txt +/data/logs/2011.09.05.txt +/data/logs/2011.09.06.txt +/data/logs/2011.09.07.txt +/data/logs/2011.09.08.txt +/data/logs/2011.09.09.txt +/data/logs/2011.09.10.txt +/data/logs/2011.09.11.txt +/data/logs/2011.09.12.txt +/data/logs/2011.09.13.txt +/data/logs/2011.09.14.txt +/data/logs/2011.09.15.txt +/data/logs/2011.09.16.txt +/data/logs/2011.09.17.txt +/data/logs/2011.09.18.txt +/data/logs/2011.09.19.txt +/data/logs/2011.09.20.txt +/data/logs/2011.09.21.txt +/data/logs/2011.09.22.txt +/data/logs/2011.09.23.txt +/data/logs/2011.09.24.txt +/data/logs/2011.09.25.txt +/data/logs/2011.09.26.txt +/data/logs/2011.09.27.txt +/data/logs/2011.09.28.txt +/data/logs/2011.09.29.txt +/data/logs/2011.09.30.txt +/data/logs/2011.10.01.txt +/data/logs/2011.10.02.txt +/data/logs/2011.10.03.txt +/data/logs/2011.10.04.txt +/data/logs/2011.10.05.txt +/data/logs/2011.10.06.txt +/data/logs/2011.10.07.txt +/data/logs/2011.10.08.txt +/data/logs/2011.10.09.txt +/data/logs/2011.10.10.txt +/data/logs/2011.10.11.txt +/data/logs/2011.10.12.txt +/data/logs/2011.10.13.txt +/data/logs/2011.10.14.txt +/data/logs/2011.10.15.txt +/data/logs/2011.10.16.txt +/data/logs/2011.10.17.txt +/data/logs/2011.10.18.txt +/data/logs/2011.10.19.txt +/data/logs/2011.10.20.txt +/data/logs/2011.10.21.txt +/data/logs/2011.10.22.txt +/data/logs/2011.10.23.txt +/data/logs/2011.10.24.txt +/data/logs/2011.10.25.txt +/data/logs/2011.10.26.txt +/data/logs/2011.10.27.txt +/data/logs/2011.10.28.txt +/data/logs/2011.10.29.txt +/data/logs/2011.10.30.txt +/data/logs/2011.10.31.txt +/data/logs/2011.11.01.txt +/data/logs/2011.11.02.txt +/data/logs/2011.11.03.txt +/data/logs/2011.11.04.txt +/data/logs/2011.11.05.txt +/data/logs/2011.11.06.txt +/data/logs/2011.11.07.txt +/data/logs/2011.11.08.txt +/data/logs/2011.11.09.txt +/data/logs/2011.11.10.txt +/data/logs/2011.11.11.txt +/data/logs/2011.11.12.txt +/data/logs/2011.11.13.txt +/data/logs/2011.11.14.txt +/data/logs/2011.11.15.txt +/data/logs/2011.11.16.txt +/data/logs/2011.11.17.txt +/data/logs/2011.11.18.txt +/data/logs/2011.11.19.txt +/data/logs/2011.11.20.txt +/data/logs/2011.11.21.txt +/data/logs/2011.11.22.txt +/data/logs/2011.11.23.txt +/data/logs/2011.11.24.txt +/data/logs/2011.11.25.txt +/data/logs/2011.11.26.txt +/data/logs/2011.11.27.txt +/data/logs/2011.11.28.txt +/data/logs/2011.11.29.txt +/data/logs/2011.11.30.txt +/data/logs/2011.12.01.txt +/data/logs/2011.12.02.txt +/data/logs/2011.12.03.txt +/data/logs/2011.12.04.txt +/data/logs/2011.12.05.txt +/data/logs/2011.12.06.txt +/data/logs/2011.12.07.txt +/data/logs/2011.12.08.txt +/data/logs/2011.12.09.txt +/data/logs/2011.12.10.txt +/data/logs/2011.12.11.txt +/data/logs/2011.12.12.txt +/data/logs/2011.12.13.txt +/data/logs/2011.12.14.txt +/data/logs/2011.12.15.txt +/data/logs/2011.12.16.txt +/data/logs/2011.12.17.txt +/data/logs/2011.12.18.txt +/data/logs/2011.12.19.txt +/data/logs/2011.12.20.txt +/data/logs/2011.12.21.txt +/data/logs/2011.12.22.txt +/data/logs/2011.12.23.txt +/data/logs/2011.12.24.txt +/data/logs/2011.12.25.txt +/data/logs/2011.12.26.txt +/data/logs/2011.12.27.txt +/data/logs/2011.12.28.txt +/data/logs/2011.12.29.txt +/data/logs/2011.12.30.txt +/data/logs/2011.12.31.txt +/data/logs/2012.01.01.txt +/data/logs/2012.01.02.txt +/data/logs/2012.01.03.txt +/data/logs/2012.01.04.txt +/data/logs/2012.01.05.txt +/data/logs/2012.01.06.txt +/data/logs/2012.01.07.txt +/data/logs/2012.01.08.txt +/data/logs/2012.01.09.txt +/data/logs/2012.01.10.txt +/data/logs/2012.01.11.txt +/data/logs/2012.01.12.txt +/data/logs/2012.01.13.txt +/data/logs/2012.01.14.txt +/data/logs/2012.01.15.txt +/data/logs/2012.01.16.txt +/data/logs/2012.01.17.txt +/data/logs/2012.01.18.txt +/data/logs/2012.01.19.txt +/data/logs/2012.01.20.txt +/data/logs/2012.01.21.txt +/data/logs/2012.01.22.txt +/data/logs/2012.01.23.txt +/data/logs/2012.01.24.txt +/data/logs/2012.01.25.txt +/data/logs/2012.01.26.txt +/data/logs/2012.01.27.txt +/data/logs/2012.01.28.txt +/data/logs/2012.01.29.txt +/data/logs/2012.01.30.txt +/data/logs/2012.01.31.txt +/data/logs/2012.02.01.txt +/data/logs/2012.02.02.txt +/data/logs/2012.02.03.txt +/data/logs/2012.02.04.txt +/data/logs/2012.02.05.txt +/data/logs/2012.02.06.txt +/data/logs/2012.02.07.txt +/data/logs/2012.02.08.txt +/data/logs/2012.02.09.txt +/data/logs/2012.02.10.txt +/data/logs/2012.02.11.txt +/data/logs/2012.02.12.txt +/data/logs/2012.02.13.txt +/data/logs/2012.02.14.txt +/data/logs/2012.02.15.txt +/data/logs/2012.02.16.txt +/data/logs/2012.02.17.txt +/data/logs/2012.02.18.txt +/data/logs/2012.02.19.txt +/data/logs/2012.02.20.txt +/data/logs/2012.02.21.txt +/data/logs/2012.02.22.txt +/data/logs/2012.02.23.txt +/data/logs/2012.02.24.txt +/data/logs/2012.02.25.txt +/data/logs/2012.02.26.txt +/data/logs/2012.02.27.txt +/data/logs/2012.02.28.txt +/data/logs/2012.02.29.txt +/data/logs/2012.03.01.txt +/data/logs/2012.03.02.txt +/data/logs/2012.03.03.txt +/data/logs/2012.03.04.txt +/data/logs/2012.03.05.txt +/data/logs/2012.03.06.txt +/data/logs/2012.03.07.txt +/data/logs/2012.03.08.txt +/data/logs/2012.03.09.txt +/data/logs/2012.03.10.txt +/data/logs/2012.03.11.txt +/data/logs/2012.03.12.txt +/data/logs/2012.03.13.txt +/data/logs/2012.03.14.txt +/data/logs/2012.03.15.txt +/data/logs/2012.03.16.txt +/data/logs/2012.03.17.txt +/data/logs/2012.03.18.txt +/data/logs/2012.03.19.txt +/data/logs/2012.03.20.txt +/data/logs/2012.03.21.txt +/data/logs/2012.03.22.txt +/data/logs/2012.03.23.txt +/data/logs/2012.03.24.txt +/data/logs/2012.03.25.txt +/data/logs/2012.03.26.txt +/data/logs/2012.03.27.txt +/data/logs/2012.03.28.txt +/data/logs/2012.03.29.txt +/data/logs/2012.03.30.txt +/data/logs/2012.03.31.txt +/data/logs/2012.04.01.txt +/data/logs/2012.04.02.txt +/data/logs/2012.04.03.txt +/data/logs/2012.04.04.txt +/data/logs/2012.04.05.txt +/data/logs/2012.04.06.txt +/data/logs/2012.04.07.txt +/data/logs/2012.04.08.txt +/data/logs/2012.04.09.txt +/data/logs/2012.04.10.txt +/data/logs/2012.04.11.txt +/data/logs/2012.04.12.txt +/data/logs/2012.04.13.txt +/data/logs/2012.04.14.txt +/data/logs/2012.04.15.txt +/data/logs/2012.04.16.txt +/data/logs/2012.04.17.txt +/data/logs/2012.04.18.txt +/data/logs/2012.04.19.txt +/data/logs/2012.04.20.txt +/data/logs/2012.04.21.txt +/data/logs/2012.04.22.txt +/data/logs/2012.04.23.txt +/data/logs/2012.04.24.txt +/data/logs/2012.04.25.txt +/data/logs/2012.04.26.txt +/data/logs/2012.04.27.txt +/data/logs/2012.04.28.txt +/data/logs/2012.04.29.txt +/data/logs/2012.04.30.txt +/data/logs/2012.05.01.txt +/data/logs/2012.05.02.txt +/data/logs/2012.05.03.txt +/data/logs/2012.05.04.txt +/data/logs/2012.05.05.txt +/data/logs/2012.05.06.txt +/data/logs/2012.05.07.txt +/data/logs/2012.05.08.txt +/data/logs/2012.05.09.txt +/data/logs/2012.05.10.txt +/data/logs/2012.05.11.txt +/data/logs/2012.05.12.txt +/data/logs/2012.05.13.txt +/data/logs/2012.05.14.txt +/data/logs/2012.05.15.txt +/data/logs/2012.05.16.txt +/data/logs/2012.05.17.txt +/data/logs/2012.05.18.txt +/data/logs/2012.05.19.txt +/data/logs/2012.05.20.txt +/data/logs/2012.05.21.txt +/data/logs/2012.05.22.txt +/data/logs/2012.05.23.txt +/data/logs/2012.05.24.txt +/data/logs/2012.05.25.txt +/data/logs/2012.05.26.txt +/data/logs/2012.05.27.txt +/data/logs/2012.05.28.txt +/data/logs/2012.05.29.txt +/data/logs/2012.05.30.txt +/data/logs/2012.05.31.txt +/data/logs/2012.06.01.txt +/data/logs/2012.06.02.txt +/data/logs/2012.06.03.txt +/data/logs/2012.06.04.txt +/data/logs/2012.06.05.txt +/data/logs/2012.06.06.txt +/data/logs/2012.06.07.txt +/data/logs/2012.06.08.txt +/data/logs/2012.06.09.txt +/data/logs/2012.06.10.txt +/data/logs/2012.06.11.txt +/data/logs/2012.06.12.txt +/data/logs/2012.06.13.txt +/data/logs/2012.06.14.txt +/data/logs/2012.06.15.txt +/data/logs/2012.06.16.txt +/data/logs/2012.06.17.txt +/data/logs/2012.06.18.txt +/data/logs/2012.06.19.txt +/data/logs/2012.06.20.txt +/data/logs/2012.06.21.txt +/data/logs/2012.06.22.txt +/data/logs/2012.06.23.txt +/data/logs/2012.06.24.txt +/data/logs/2012.06.25.txt +/data/logs/2012.06.26.txt +/data/logs/2012.06.27.txt +/data/logs/2012.06.28.txt +/data/logs/2012.06.29.txt +/data/logs/2012.06.30.txt +/data/logs/2012.07.01.txt +/data/logs/2012.07.02.txt +/data/logs/2012.07.03.txt +/data/logs/2012.07.04.txt +/data/logs/2012.07.05.txt +/data/logs/2012.07.06.txt +/data/logs/2012.07.07.txt +/data/logs/2012.07.08.txt +/data/logs/2012.07.09.txt +/data/logs/2012.07.10.txt +/data/logs/2012.07.11.txt +/data/logs/2012.07.12.txt +/data/logs/2012.07.13.txt +/data/logs/2012.07.14.txt +/data/logs/2012.07.15.txt +/data/logs/2012.07.16.txt +/data/logs/2012.07.17.txt +/data/logs/2012.07.18.txt +/data/logs/2012.07.19.txt +/data/logs/2012.07.20.txt +/data/logs/2012.07.21.txt +/data/logs/2012.07.22.txt +/data/logs/2012.07.23.txt +/data/logs/2012.07.24.txt +/data/logs/2012.07.25.txt +/data/logs/2012.07.26.txt +/data/logs/2012.07.27.txt +/data/logs/2012.07.28.txt +/data/logs/2012.07.29.txt +/data/logs/2012.07.30.txt +/data/logs/2012.07.31.txt +/data/logs/2012.08.01.txt +/data/logs/2012.08.02.txt +/data/logs/2012.08.03.txt +/data/logs/2012.08.04.txt +/data/logs/2012.08.05.txt +/data/logs/2012.08.06.txt +/data/logs/2012.08.07.txt +/data/logs/2012.08.08.txt +/data/logs/2012.08.09.txt +/data/logs/2012.08.10.txt +/data/logs/2012.08.11.txt +/data/logs/2012.08.12.txt +/data/logs/2012.08.13.txt +/data/logs/2012.08.14.txt +/data/logs/2012.08.15.txt +/data/logs/2012.08.16.txt +/data/logs/2012.08.17.txt +/data/logs/2012.08.18.txt +/data/logs/2012.08.19.txt +/data/logs/2012.08.20.txt +/data/logs/2012.08.21.txt +/data/logs/2012.08.22.txt +/data/logs/2012.08.23.txt +/data/logs/2012.08.24.txt +/data/logs/2012.08.25.txt +/data/logs/2012.08.26.txt +/data/logs/2012.08.27.txt +/data/logs/2012.08.28.txt +/data/logs/2012.08.29.txt +/data/logs/2012.08.30.txt +/data/logs/2012.08.31.txt +/data/logs/2012.09.01.txt +/data/logs/2012.09.02.txt +/data/logs/2012.09.03.txt +/data/logs/2012.09.04.txt +/data/logs/2012.09.05.txt +/data/logs/2012.09.06.txt +/data/logs/2012.09.07.txt +/data/logs/2012.09.08.txt +/data/logs/2012.09.09.txt +/data/logs/2012.09.10.txt +/data/logs/2012.09.11.txt +/data/logs/2012.09.12.txt +/data/logs/2012.09.13.txt +/data/logs/2012.09.14.txt +/data/logs/2012.09.15.txt +/data/logs/2012.09.16.txt +/data/logs/2012.09.17.txt +/data/logs/2012.09.18.txt +/data/logs/2012.09.19.txt +/data/logs/2012.09.20.txt +/data/logs/2012.09.21.txt +/data/logs/2012.09.22.txt +/data/logs/2012.09.23.txt +/data/logs/2012.09.24.txt +/data/logs/2012.09.25.txt +/data/logs/2012.09.26.txt +/data/logs/2012.09.27.txt +/data/logs/2012.09.28.txt +/data/logs/2012.09.29.txt +/data/logs/2012.09.30.txt +/data/logs/2012.10.01.txt +/data/logs/2012.10.02.txt +/data/logs/2012.10.03.txt +/data/logs/2012.10.04.txt +/data/logs/2012.10.05.txt +/data/logs/2012.10.06.txt +/data/logs/2012.10.07.txt +/data/logs/2012.10.08.txt +/data/logs/2012.10.09.txt +/data/logs/2012.10.10.txt +/data/logs/2012.10.11.txt +/data/logs/2012.10.12.txt +/data/logs/2012.10.13.txt +/data/logs/2012.10.14.txt +/data/logs/2012.10.15.txt +/data/logs/2012.10.16.txt +/data/logs/2012.10.17.txt +/data/logs/2012.10.18.txt +/data/logs/2012.10.19.txt +/data/logs/2012.10.20.txt +/data/logs/2012.10.21.txt +/data/logs/2012.10.22.txt +/data/logs/2012.10.23.txt +/data/logs/2012.10.24.txt +/data/logs/2012.10.25.txt +/data/logs/2012.10.26.txt +/data/logs/2012.10.27.txt +/data/logs/2012.10.28.txt +/data/logs/2012.10.29.txt +/data/logs/2012.10.30.txt +/data/logs/2012.10.31.txt +/data/logs/2012.11.01.txt +/data/logs/2012.11.02.txt +/data/logs/2012.11.03.txt +/data/logs/2012.11.04.txt +/data/logs/2012.11.05.txt +/data/logs/2012.11.06.txt +/data/logs/2012.11.07.txt +/data/logs/2012.11.08.txt +/data/logs/2012.11.09.txt +/data/logs/2012.11.10.txt +/data/logs/2012.11.11.txt +/data/logs/2012.11.12.txt +/data/logs/2012.11.13.txt +/data/logs/2012.11.14.txt +/data/logs/2012.11.15.txt +/data/logs/2012.11.16.txt +/data/logs/2012.11.17.txt +/data/logs/2012.11.18.txt +/data/logs/2012.11.19.txt +/data/logs/2012.11.20.txt +/data/logs/2012.11.21.txt +/data/logs/2012.11.22.txt +/data/logs/2012.11.23.txt +/data/logs/2012.11.24.txt +/data/logs/2012.11.25.txt +/data/logs/2012.11.26.txt +/data/logs/2012.11.27.txt +/data/logs/2012.11.28.txt +/data/logs/2012.11.29.txt +/data/logs/2012.11.30.txt +/data/logs/2012.12.01.txt +/data/logs/2012.12.02.txt +/data/logs/2012.12.03.txt +/data/logs/2012.12.04.txt +/data/logs/2012.12.05.txt +/data/logs/2012.12.06.txt +/data/logs/2012.12.07.txt +/data/logs/2012.12.08.txt +/data/logs/2012.12.09.txt +/data/logs/2012.12.10.txt +/data/logs/2012.12.11.txt +/data/logs/2012.12.12.txt +/data/logs/2012.12.13.txt +/data/logs/2012.12.14.txt +/data/logs/2012.12.15.txt +/data/logs/2012.12.16.txt +/data/logs/2012.12.17.txt +/data/logs/2012.12.18.txt +/data/logs/2012.12.19.txt +/data/logs/2012.12.20.txt +/data/logs/2012.12.21.txt +/data/logs/2012.12.22.txt +/data/logs/2012.12.23.txt +/data/logs/2012.12.24.txt +/data/logs/2012.12.25.txt +/data/logs/2012.12.26.txt +/data/logs/2012.12.27.txt +/data/logs/2012.12.28.txt +/data/logs/2012.12.29.txt +/data/logs/2012.12.30.txt +/data/logs/2012.12.31.txt +/data/logs/ip_blacklist.csv +/data/tpch/q19_preprocessed/lineitem-sf-10.tbl +/data/tpch/q19_preprocessed/part-sf-10.tbl +/data/tpch/q6/string/lineitem.tbl +/data/tpch/q6_preprocessed/lineitem-sf-10.tbl +/data/zillow/Z1_preprocessed/zillow_Z1_10G.csv +/data/zillow/Z2_preprocessed/zillow_Z2_10G.csv +/data/zillow/Zdirty/zillow_dirty@10G.csv +/data/zillow/Zdirty/zillow_dirty_synthetic@10G.csv'''.split() - targets = [] - target = target.lower() + # check that tuplex exists python3.6 -c "import tuplex" + cmd = 'python3.6 -c "import tuplex"' + exit_code, output = container.exec_run(cmd, stderr=True, stdout=True, detach=detach) + if 0 != exit_code: + logging.error("Did not find tuplex module, please run first build subcommand.") + sys.exit(1) + + # check that each file exists + file_failure = False + for i, path in enumerate(required_paths_in_docker): + cmd = "test -f {}".format(path) + exit_code, output = container.exec_run(cmd, stderr=True, stdout=True, detach=detach) + if 0 != exit_code: + logging.error("path {} not found in docker container, please check host.".format(path)) + file_failure = True + + if i % 100 == 0 and i > 0: + logging.info('Checked {}/{} files for presence in container...'.format(i, len(required_paths_in_docker))) + logging.info('File check completed.') + if file_failure: + logging.error("Not all files required to run benchmarks are present, aborting benchmark.") + sys.exit(1) - # decode compound targets... - if target == 'zillow': - targets += ['zillow/Z1', 'zillow/Z2', 'zillow/exceptions'] - elif target == 'flights': - targets += ['flights/flights', 'flights/breakdown'] - elif target == 'tpch': - targets += ['tpch/q06', 'tpch/q19'] - elif target == 'all': - targets = [name.lower() for name in experiment_targets if name.lower() != 'all'] - else: - targets = [target] for target in targets: # run individual targets @@ -84,10 +4090,13 @@ def run(target, num_runs, detach): 'zillow/exceptions': '/code/benchmarks/dirty_zillow/', 'logs': '/code/benchmarks/logs/', '311': '/code/benchmarks/311/', - 'tpch/q06': '/code/benchmarks/Q06/', - 'tpch/q19': '/code/benchmarks/Q19/', + 'tpch/q06': '/code/benchmarks/tpch/Q06/', + 'tpch/q19': '/code/benchmarks/tpch/Q19/', 'flights/flights': '/code/benchmarks/flights/', - 'flights/breakdown': '/code/benchmarks/flights/', } + 'flights/breakdown': '/code/benchmarks/flights/'} + + # lowercase + target = target.lower() benchmark_path = path_dict[target] benchmark_script = 'runbenchmark.sh' @@ -97,7 +4106,10 @@ def run(target, num_runs, detach): benchmark_script = 'runbreakdown.sh' cmd = 'bash -c "cd {} && bash {}"'.format(benchmark_path, benchmark_script) - env = {'NUM_RUNS': num_runs} + env = {'NUM_RUNS': num_runs, + 'PATH': '/opt/spark@2/bin:/bin:/opt/scala/bin:/root/.cargo/bin:/root/.cargo/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', + 'SPARK_HOME': '/opt/spark@2', + 'SCALA_HOME': '/opt/scala'} logging.info('Starting benchmark using command: docker exec -i{}t {} {}'.format('d' if detach else '', DOCKER_CONTAINER_NAME, cmd)) @@ -196,7 +4208,7 @@ def plot_figure9(tpch_path='r5d.8xlarge/tpch', output_folder='plots'): def plot_figure10(flights_path='r5d.8xlarge/flights', output_folder='plots'): - logging.info('Plotting Figure10 (Flights breakdown') + logging.info('Plotting Figure10 (Flights breakdown)') logging.info('Benchmark result folder specified as {}'.format(flights_path)) from plot_scripts.figure10 import figure10 @@ -305,6 +4317,7 @@ def plot(target, output_path, input_path): DEFAULT_ZILLOW_PATH = input_path + '/zillow' DEFAULT_FLIGHTS_PATH = input_path + '/flights' + DEFAULT_FLIGHTS_BREAKDOWN_PATH = input_path + '/flights/flights_breakdown' DEFAULT_LOGS_PATH = input_path + '/logs' DEFAULT_311_PATH = input_path + '/311' DEFAULT_TPCH_PATH = input_path + '/tpch' @@ -317,23 +4330,52 @@ def plot(target, output_path, input_path): # go through list and plot whatever was selected if 'table3' == target.lower() or PLOT_ALL: - plot_table3(DEFAULT_ZILLOW_PATH, output_path) + try: + plot_table3(DEFAULT_ZILLOW_PATH, output_path) + except Exception as e: + logging.error("Failed to compute table3") if 'figure3' == target.lower() or PLOT_ALL: - plot_figure3(DEFAULT_ZILLOW_PATH, output_path) + try: + plot_figure3(DEFAULT_ZILLOW_PATH, output_path) + except Exception as e: + logging.error("Failed to plot figure3") if 'figure4' == target.lower() or PLOT_ALL: - plot_figure4(DEFAULT_FLIGHTS_PATH, output_path) + try: + plot_figure4(DEFAULT_FLIGHTS_PATH, output_path) + except Exception as e: + logging.error("Failed to plot figure4") if 'figure5' == target.lower() or PLOT_ALL: - plot_figure5(DEFAULT_LOGS_PATH, output_path) + try: + if not os.path.isdir(DEFAULT_LOGS_PATH): + DEFAULT_LOGS_PATH = input_path + '/weblogs' + plot_figure5(DEFAULT_LOGS_PATH, output_path) + except Exception as e: + logging.error("Failed to plot figure5") if 'figure6' == target.lower() or PLOT_ALL: - plot_figure6(DEFAULT_ZILLOW_PATH, output_path) + try: + plot_figure6(DEFAULT_ZILLOW_PATH, output_path) + except Exception as e: + logging.error("Failed to plot figure6") if 'figure7' == target.lower() or PLOT_ALL: - plot_figure7(DEFAULT_ZILLOW_PATH, output_path) + try: + plot_figure7(DEFAULT_ZILLOW_PATH, output_path) + except Exception as e: + logging.error("Failed to plot figure7") if 'figure8' == target.lower() or PLOT_ALL: - plot_figure8(DEFAULT_311_PATH, output_path) + try: + plot_figure8(DEFAULT_311_PATH, output_path) + except Exception as e: + logging.error("Failed to plot figure8") if 'figure9' == target.lower() or PLOT_ALL: - plot_figure9(DEFAULT_TPCH_PATH, output_path) + try: + plot_figure9(DEFAULT_TPCH_PATH, output_path) + except Exception as e: + logging.error("Failed to plot figure9") if 'figure10' == target.lower() or PLOT_ALL: - plot_figure10(DEFAULT_FLIGHTS_PATH, output_path) + try: + plot_figure10(DEFAULT_FLIGHTS_BREAKDOWN_PATH, output_path) + except Exception as e: + logging.error("Failed to plot figure10") logging.info('Plotting done.') diff --git a/benchmarks/tpch/Q19/runbenchmark.sh b/benchmarks/tpch/Q19/runbenchmark.sh index 7d5592373..534512989 100644 --- a/benchmarks/tpch/Q19/runbenchmark.sh +++ b/benchmarks/tpch/Q19/runbenchmark.sh @@ -34,7 +34,7 @@ done echo "Tuplex (Cached)" for ((r = 1; r <= NUM_RUNS; r++)); do LOG="${RESDIR}/tuplex-st-cached-run-$r.txt" - timeout $TIMEOUT ${PYTHON} runtuplex.py ---lineitem_path $L_INPUT_PATH --part_path $P_INPUT_PATH --preprocessed --cache --weld >$LOG 2>$LOG.stderr + timeout $TIMEOUT ${PYTHON} runtuplex.py --lineitem_path $L_INPUT_PATH --part_path $P_INPUT_PATH --preprocessed --cache --weld >$LOG 2>$LOG.stderr done echo "Weld" diff --git a/benchmarks/tpch/Q19/runhyper.py b/benchmarks/tpch/Q19/runhyper.py index b330586d5..788a3d7d8 100644 --- a/benchmarks/tpch/Q19/runhyper.py +++ b/benchmarks/tpch/Q19/runhyper.py @@ -234,16 +234,22 @@ def run_create_hyper_file_from_csv(): lineitem_table_name = '' part_table_name = '' - if args.preprocessed: - connection.catalog.create_table(table_definition=lineitem_table_preprocessed) - lineitem_table_name = lineitem_table_preprocessed.table_name - connection.catalog.create_table(table_definition=part_table_preprocessed) - part_table_name = part_table_preprocessed.table_name + if args.weld_mode: + connection.catalog.create_table(table_definition=lineitem_table_weld) + lineitem_table_name = lineitem_table_weld.table_name + connection.catalog.create_table(table_definition=part_table_weld) + part_table_name = part_table_weld.table_name else: - connection.catalog.create_table(table_definition=lineitem_table) - lineitem_table_name = lineitem_table.table_name - connection.catalog.create_table(table_definition=part_table) - part_table_name = part_table.table_name + if args.preprocessed: + connection.catalog.create_table(table_definition=lineitem_table_preprocessed) + lineitem_table_name = lineitem_table_preprocessed.table_name + connection.catalog.create_table(table_definition=part_table_preprocessed) + part_table_name = part_table_preprocessed.table_name + else: + connection.catalog.create_table(table_definition=lineitem_table) + lineitem_table_name = lineitem_table.table_name + connection.catalog.create_table(table_definition=part_table) + part_table_name = part_table.table_name # Using path to current file, create a path that locates CSV file packaged with these examples. lineitem_csv_path = args.lineitem_path diff --git a/benchmarks/zillow/Z1/runbenchmark.sh b/benchmarks/zillow/Z1/runbenchmark.sh index 971969dea..4163f2ab8 100644 --- a/benchmarks/zillow/Z1/runbenchmark.sh +++ b/benchmarks/zillow/Z1/runbenchmark.sh @@ -121,13 +121,13 @@ done echo "benchmarking dask" for ((r = 1; r <= NUM_RUNS; r++)); do LOG="${RESDIR}/dask_pypy3-run-$r.txt" - timeout $TIMEOUT ${PYPY} rundask.py --mode dask --output-path ${OUTPUT_DIR}/dask_output --path $INPUT_FILE >$LOG 2>$LOG.stderr + ${PYPY} rundask.py --mode dask --output-path ${OUTPUT_DIR}/dask_output --path $INPUT_FILE >$LOG 2>$LOG.stderr done echo "benchmarking pandas" for ((r = 1; r <= NUM_RUNS; r++)); do LOG="${RESDIR}/pandas_pypy3-run-$r.txt" - timeout $TIMEOUT ${PYPY} rundask.py --mode pandas --output-path ${OUTPUT_DIR}/pandas_output --path $INPUT_FILE >$LOG 2>$LOG.stderr + ${PYPY} rundask.py --mode pandas --output-path ${OUTPUT_DIR}/pandas_output --path $INPUT_FILE >$LOG 2>$LOG.stderr done echo "benchmarking python with cython" diff --git a/benchmarks/zillow/Z1/rundask.py b/benchmarks/zillow/Z1/rundask.py index 94934151d..5ce0eb2d0 100644 --- a/benchmarks/zillow/Z1/rundask.py +++ b/benchmarks/zillow/Z1/rundask.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 # Dask based cleaning script (can be easily modified to pandas/modin/...) +import platform import time import sys import json @@ -122,7 +123,9 @@ def runDask(paths, output_path): tstart = time.time() - client = Client(n_workers=16, threads_per_worker=1, processes=True, memory_limit='8GB') + # because PyPy needs a ton of memory, give it 14G + # client = Client(n_workers=16, threads_per_worker=1, processes=True, memory_limit='8GB') + client = Client(n_workers=16, threads_per_worker=1, processes=True, memory_limit='14GB') print(client) startup_time = time.time() - tstart @@ -133,7 +136,13 @@ def runDask(paths, output_path): df['bedrooms'] = df['facts and features'].apply(extractBd, meta=('facts and features', 'str')).astype(int) df = df[df['bedrooms'] < 10] - df['type'] = df['title'].apply(extractType) + + # correct for PyPy internal error + meta_title = '__no_default__' + if platform.python_implementation().lower() == 'pypy': + meta_title = ('title', 'str') + + df['type'] = df['title'].apply(extractType, meta=meta_title) df = df[df['type'] == 'house'] df['zipcode'] = df['postal_code'].apply(lambda zc: '%05d' % int(zc), meta=('postal_code', 'str')) @@ -141,7 +150,7 @@ def runDask(paths, output_path): df['city'] = df['city'].apply(lambda x: x[0].upper() + x[1:].lower(), meta=('city', 'str')) df['bathrooms'] = df['facts and features'].apply(extractBa, meta=('facts and features', 'str')).astype(int) df['sqft'] = df['facts and features'].apply(extractSqft, meta=('facts and features', 'str')).astype(int) - df['offer'] = df['title'].apply(extractOffer) + df['offer'] = df['title'].apply(extractOffer, meta=meta_title) df['price'] = df[['price', 'offer', 'facts and features', 'sqft']].apply(extractPrice, axis=1, meta=('facts and features', 'str')).astype(int) diff --git a/benchmarks/zillow/Z1/scala/project/plugins.sbt b/benchmarks/zillow/Z1/scala/project/plugins.sbt new file mode 100644 index 000000000..7bc4622d2 --- /dev/null +++ b/benchmarks/zillow/Z1/scala/project/plugins.sbt @@ -0,0 +1 @@ +addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.1.0") diff --git a/benchmarks/zillow/Z2/runbenchmark.sh b/benchmarks/zillow/Z2/runbenchmark.sh index 7897daf67..e84cd8156 100644 --- a/benchmarks/zillow/Z2/runbenchmark.sh +++ b/benchmarks/zillow/Z2/runbenchmark.sh @@ -121,13 +121,13 @@ done echo "benchmarking dask" for ((r = 1; r <= NUM_RUNS; r++)); do LOG="${RESDIR}/dask_pypy3-run-$r.txt" - timeout $TIMEOUT ${PYPY} rundask.py --mode dask --output-path ${OUTPUT_DIR}/dask_output --path $INPUT_FILE >$LOG 2>$LOG.stderr + ${PYPY} rundask.py --mode dask --output-path ${OUTPUT_DIR}/dask_output --path $INPUT_FILE >$LOG 2>$LOG.stderr done echo "benchmarking pandas" for ((r = 1; r <= NUM_RUNS; r++)); do LOG="${RESDIR}/pandas_pypy3-run-$r.txt" - timeout $TIMEOUT ${PYPY} rundask.py --mode pandas --output-path ${OUTPUT_DIR}/pandas_output --path $INPUT_FILE >$LOG 2>$LOG.stderr + ${PYPY} rundask.py --mode pandas --output-path ${OUTPUT_DIR}/pandas_output --path $INPUT_FILE >$LOG 2>$LOG.stderr done echo "benchmarking python with cython" diff --git a/benchmarks/zillow/Z2/rundask.py b/benchmarks/zillow/Z2/rundask.py index a2bf5cb5f..461cf0e90 100644 --- a/benchmarks/zillow/Z2/rundask.py +++ b/benchmarks/zillow/Z2/rundask.py @@ -8,6 +8,7 @@ import glob import argparse import psutil +import platform tstart = time.time() import pandas as pd @@ -129,9 +130,16 @@ def runDask(paths, output_path): tstart = time.time() - client = Client(n_workers=16, threads_per_worker=1, processes=True, memory_limit='8GB') + # because PyPy needs a ton of memory, give it 14G + # client = Client(n_workers=16, threads_per_worker=1, processes=True, memory_limit='8GB') + client = Client(n_workers=16, threads_per_worker=1, processes=True, memory_limit='14GB') print(client) + # correct for PyPy internal error + meta_title = '__no_default__' + if platform.python_implementation().lower() == 'pypy': + meta_title = ('title', 'str') + startup_time = time.time() - tstart df = dd.read_csv(paths, low_memory=False) @@ -140,7 +148,7 @@ def runDask(paths, output_path): df['bedrooms'] = df['facts and features'].apply(extractBd, meta=('facts and features', 'str')).astype(int) df = df[df['bedrooms'] < 10] - df['type'] = df['title'].apply(extractType) + df['type'] = df['title'].apply(extractType, meta=meta_title) df = df[df['type'] == 'condo'] df['zipcode'] = df['postal_code'].apply(lambda zc: '%05d' % int(zc), meta=('postal_code', 'str')) @@ -148,7 +156,7 @@ def runDask(paths, output_path): df['city'] = df['city'].apply(lambda x: x[0].upper() + x[1:].lower(), meta=('city', 'str')) df['bathrooms'] = df['facts and features'].apply(extractBa, meta=('facts and features', 'str')).astype(int) df['sqft'] = df['facts and features'].apply(extractSqft, meta=('facts and features', 'str')).astype(int) - df['offer'] = df['title'].apply(extractOffer) + df['offer'] = df['title'].apply(extractOffer, meta=meta_title) df['price'] = df[['price', 'offer', 'facts and features', 'sqft']].apply(extractPrice, axis=1, meta=('facts and features', 'str')).astype(int) diff --git a/benchmarks/zillow/Z2/scala/project/plugins.sbt b/benchmarks/zillow/Z2/scala/project/plugins.sbt new file mode 100644 index 000000000..7bc4622d2 --- /dev/null +++ b/benchmarks/zillow/Z2/scala/project/plugins.sbt @@ -0,0 +1 @@ +addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.1.0") diff --git a/scripts/docker/benchmark/Dockerfile b/scripts/docker/benchmark/Dockerfile index ea95b5f51..9ea6bfa4d 100644 --- a/scripts/docker/benchmark/Dockerfile +++ b/scripts/docker/benchmark/Dockerfile @@ -1,7 +1,7 @@ # Docker image based on Ubuntu 20.04 which holds all frameworks for evaluation # (c) 2021 L.Spiegelberg, R. Yesantharao -FROM ubuntu:groovy-20210225 +FROM ubuntu:20.04 MAINTAINER Leonhard Spiegelberg "leonhard_spiegelberg@brown.edu" # Use /tmp folder to build everything... @@ -158,7 +158,7 @@ RUN set -ex; \ apt-get update; \ apt-get install -y --no-install-recommends wget; \ \ - wget -O get-pip.py 'https://bootstrap.pypa.io/get-pip.py'; \ + wget -O get-pip.py 'https://bootstrap.pypa.io/pip/3.6/get-pip.py'; \ \ apt-mark auto '.*' > /dev/null; \ [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \ @@ -196,10 +196,6 @@ RUN /bin/bash /usr/src/install_llvm6.sh COPY install_llvm9.sh /usr/src/install_llvm9.sh RUN /bin/bash /usr/src/install_llvm9.sh -# install weld -COPY install_weld.sh /usr/src/install_weld.sh -RUN /bin/bash /usr/src/install_weld.sh - # TODO: LS --> Spark 2.4.7 + Scala 2.12.10 COPY install_spark.sh /usr/src/install_spark.sh RUN /bin/bash /usr/src/install_spark.sh @@ -224,6 +220,11 @@ RUN /bin/bash /usr/src/install_tuplex_reqs.sh ADD install_sbt.sh /usr/src/install_sbt.sh RUN /bin/bash /usr/src/install_sbt.sh +# install weld (last) +ADD PatchedGrizzlyMakefile.make /usr/src/PatchedGrizzlyMakefile.make +COPY install_weld.sh /usr/src/install_weld.sh +RUN /bin/bash /usr/src/install_weld.sh + # clean RUN rm -rf /usr/src RUN rm -rf /tmp/* diff --git a/scripts/docker/benchmark/PatchedGrizzlyMakefile.make b/scripts/docker/benchmark/PatchedGrizzlyMakefile.make new file mode 100644 index 000000000..b449c18b2 --- /dev/null +++ b/scripts/docker/benchmark/PatchedGrizzlyMakefile.make @@ -0,0 +1,41 @@ +OS=$(shell uname -s) +LLVM_VERSION=$(shell llvm-config --version | cut -d . -f 1,2) + +PYTHON_HEADER_INCLUDE = $(shell python2-config --includes) +NUMPY_HEADER_INCLUDE = -I$(shell python2 -c "import numpy; print numpy.get_include()" 2>/dev/null) + +ifndef EXEC + EXEC=python +endif + +PYTHON_LDFLAGS=-L$(shell $(EXEC) -c "from distutils import sysconfig; print sysconfig.get_config_var('LIBDIR')" 2>/dev/null) $(shell python2-config --libs) + +ifeq (${NUMPY_HEADER_INCLUDE}, -I) + $(error Error: NumPy installation not found) +endif + +ifeq (${OS}, Darwin) + # OS X + CLANG ?= clang + CLANGPP ?= clang++ + FLAGS=-march=native -O3 -flto + DFLAGS=-dynamiclib + DYLIB_SUFFIX=.dylib + PYTHON_INCLUDES=${PYTHON_HEADER_INCLUDE} ${NUMPY_HEADER_INCLUDE} +else ifeq (${OS}, Linux) + # Linux + CLANG ?= clang-${LLVM_VERSION} + CLANGPP ?= clang++-${LLVM_VERSION} + FLAGS=-mavx2 -fuse-ld=gold -flto + DFLAGS=-shared -fPIC + DYLIB_SUFFIX=.so + PYTHON_INCLUDES=${PYTHON_HEADER_INCLUDE} ${NUMPY_HEADER_INCLUDE} +else + $(error Unsupported platform: ${OS}) +endif + +convertor: + ${CLANG} ${DFLAGS} -w -march=native $(PYTHON_LDFLAGS) numpy_weld_convertor.cpp -o numpy_weld_convertor${DYLIB_SUFFIX} ${PYTHON_INCLUDES} + +clean: + rm -rf run numpy_weld_convertor${DYLIB_SUFFIX} *.pyc diff --git a/scripts/docker/benchmark/install_llvm6.sh b/scripts/docker/benchmark/install_llvm6.sh index 6860f15be..35bc95517 100644 --- a/scripts/docker/benchmark/install_llvm6.sh +++ b/scripts/docker/benchmark/install_llvm6.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # installs LLVM 6.0.1 to /opt -apt-get update && apt-get install -y libxml2-dev +apt-get update && apt-get install -y libxml2-dev wget build-essential cd /usr/src && wget https://releases.llvm.org/6.0.1/llvm-6.0.1.src.tar.xz && @@ -24,4 +24,4 @@ make install # ln -s /opt/llvm-6.0/bin/clang++ /opt/llvm-6.0/bin/clang++-6.0 cd /opt/llvm-6.0/bin && ln -s clang++ clang++-6.0 -echo "LLVM6 installed" \ No newline at end of file +echo "LLVM6 installed" diff --git a/scripts/docker/benchmark/install_weld.sh b/scripts/docker/benchmark/install_weld.sh index a89e8462f..0db6925d8 100644 --- a/scripts/docker/benchmark/install_weld.sh +++ b/scripts/docker/benchmark/install_weld.sh @@ -1,5 +1,12 @@ #!/usr/bin/env bash + +set -ex + +# check from where script is invoked +CWD="$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)" + # Install Rust (without the stupid prompt) +apt-get update && apt-get install -y curl git build-essential curl https://sh.rustup.rs -sSf | sh -s -- -y && echo "export PATH=\$HOME/.cargo/bin:\$PATH" >> $HOME/.bashrc && @@ -8,8 +15,18 @@ export PATH="$HOME/.cargo/bin:$PATH" && source $HOME/.cargo/env export LLVM_SYS_60_PREFIX=/opt/llvm-6.0 export PATH=/opt/llvm-6.0/bin/:$PATH -cd /usr/src && +pushd /tmp git clone https://github.com/weld-project/weld.git && cd weld \ && export PATH=$HOME/.cargo/bin:$PATH && rustup default nightly \ && export WELD_HOME=`pwd` && export PATH=/opt/llvm-6.0/bin/:$PATH \ -&& cargo build --release && cd .. && mv weld /opt/weld \ No newline at end of file +&& cargo build --release && cd .. && mv weld /opt/weld +popd + +# Install Weld/Grizzly. Only python2 supported for this, hence use python2 +# need to fix Makefile -> copy Makefile fix +export PATH=/opt/llvm-6.0/bin/:$PATH +export WELD_HOME=/opt/weld +cp $CWD/PatchedGrizzlyMakefile.make /opt/weld/python/grizzly/grizzly/Makefile + +apt-get update && apt install -y python2 python2-dev && curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py && python2 get-pip.py && pip2 install pandas numpy +cd /opt/weld/python && cd pyweld && python2 setup.py install && cd .. && cd grizzly && python2 setup.py install diff --git a/tuplex/test/io/FileOutputTest.cc b/tuplex/test/io/FileOutputTest.cc index 78299c72f..29fbd0e9d 100644 --- a/tuplex/test/io/FileOutputTest.cc +++ b/tuplex/test/io/FileOutputTest.cc @@ -19,8 +19,8 @@ class FileOutputTest : public TuplexTest { std::string folderName; void SetUp() override { - TuplexTest::SetUp(); using namespace tuplex; + TuplexTest::SetUp(); auto vfs = VirtualFileSystem::fromURI("."); folderName = "FileOutput" + std::string(::testing::UnitTest::GetInstance()->current_test_info()->name()); vfs.remove(folderName);