diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..51cdc3f21e8b2871609670a55e9efcfa9a4195bb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,189 @@
+
+# Created by https://www.gitignore.io/api/flask,python,visualstudiocode
+# Edit at https://www.gitignore.io/?templates=flask,python,visualstudiocode
+
+### Flask ###
+instance/*
+!instance/.gitignore
+.webassets-cache
+
+### Flask.Python Stack ###
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+#  Usually these files are written by a python script from a template
+#  before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+.hypothesis/
+.pytest_cache/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+
+# Flask stuff:
+instance/
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+.python-version
+
+# celery beat schedule file
+celerybeat-schedule
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+### Python ###
+# Byte-compiled / optimized / DLL files
+
+# C extensions
+
+# Distribution / packaging
+
+# PyInstaller
+#  Usually these files are written by a python script from a template
+#  before PyInstaller builds the exe, so as to inject date/other infos into it.
+
+# Installer logs
+
+# Unit test / coverage reports
+
+# Translations
+
+# Django stuff:
+
+# Flask stuff:
+
+# Scrapy stuff:
+
+# Sphinx documentation
+
+# PyBuilder
+
+# Jupyter Notebook
+
+# IPython
+
+# pyenv
+
+# celery beat schedule file
+
+# SageMath parsed files
+
+# Environments
+
+# Spyder project settings
+
+# Rope project settings
+
+# mkdocs documentation
+
+# mypy
+
+# Pyre type checker
+
+### Python Patch ###
+.venv/
+
+### VisualStudioCode ###
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+
+### VisualStudioCode Patch ###
+# Ignore all local history of files
+.history
+
+# End of https://www.gitignore.io/api/flask,python,visualstudiocode
diff --git a/bin/activate b/bin/activate
new file mode 100644
index 0000000000000000000000000000000000000000..b65ac8a08947c9ec7d2ebdfac3e15adcd6b11b99
--- /dev/null
+++ b/bin/activate
@@ -0,0 +1,78 @@
+# This file must be used with "source bin/activate" *from bash*
+# you cannot run it directly
+
+deactivate () {
+    unset -f pydoc >/dev/null 2>&1
+
+    # reset old environment variables
+    # ! [ -z ${VAR+_} ] returns true if VAR is declared at all
+    if ! [ -z "${_OLD_VIRTUAL_PATH+_}" ] ; then
+        PATH="$_OLD_VIRTUAL_PATH"
+        export PATH
+        unset _OLD_VIRTUAL_PATH
+    fi
+    if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then
+        PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
+        export PYTHONHOME
+        unset _OLD_VIRTUAL_PYTHONHOME
+    fi
+
+    # This should detect bash and zsh, which have a hash command that must
+    # be called to get it to forget past commands.  Without forgetting
+    # past commands the $PATH changes we made may not be respected
+    if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
+        hash -r 2>/dev/null
+    fi
+
+    if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then
+        PS1="$_OLD_VIRTUAL_PS1"
+        export PS1
+        unset _OLD_VIRTUAL_PS1
+    fi
+
+    unset VIRTUAL_ENV
+    if [ ! "${1-}" = "nondestructive" ] ; then
+    # Self destruct!
+        unset -f deactivate
+    fi
+}
+
+# unset irrelevant variables
+deactivate nondestructive
+
+VIRTUAL_ENV="/home/reverend/Programmierung/git_projects/Chaos-Familien-Duell"
+export VIRTUAL_ENV
+
+_OLD_VIRTUAL_PATH="$PATH"
+PATH="$VIRTUAL_ENV/bin:$PATH"
+export PATH
+
+# unset PYTHONHOME if set
+if ! [ -z "${PYTHONHOME+_}" ] ; then
+    _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
+    unset PYTHONHOME
+fi
+
+if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
+    _OLD_VIRTUAL_PS1="$PS1"
+    if [ "x" != x ] ; then
+        PS1="$PS1"
+    else
+        PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1"
+    fi
+    export PS1
+fi
+
+# Make sure to unalias pydoc if it's already there
+alias pydoc 2>/dev/null >/dev/null && unalias pydoc
+
+pydoc () {
+    python -m pydoc "$@"
+}
+
+# This should detect bash and zsh, which have a hash command that must
+# be called to get it to forget past commands.  Without forgetting
+# past commands the $PATH changes we made may not be respected
+if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
+    hash -r 2>/dev/null
+fi
diff --git a/bin/activate.csh b/bin/activate.csh
new file mode 100644
index 0000000000000000000000000000000000000000..5468c7a0db5bd67a24bad8e5e8375bf8ec93a4c9
--- /dev/null
+++ b/bin/activate.csh
@@ -0,0 +1,42 @@
+# This file must be used with "source bin/activate.csh" *from csh*.
+# You cannot run it directly.
+# Created by Davide Di Blasi <davidedb@gmail.com>.
+
+set newline='\
+'
+
+alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH:q" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT:q" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc'
+
+# Unset irrelevant variables.
+deactivate nondestructive
+
+setenv VIRTUAL_ENV "/home/reverend/Programmierung/git_projects/Chaos-Familien-Duell"
+
+set _OLD_VIRTUAL_PATH="$PATH:q"
+setenv PATH "$VIRTUAL_ENV:q/bin:$PATH:q"
+
+
+
+if ("" != "") then
+    set env_name = ""
+else
+    set env_name = "$VIRTUAL_ENV:t:q"
+endif
+
+# Could be in a non-interactive environment,
+# in which case, $prompt is undefined and we wouldn't
+# care about the prompt anyway.
+if ( $?prompt ) then
+    set _OLD_VIRTUAL_PROMPT="$prompt:q"
+if ( "$prompt:q" =~ *"$newline:q"* ) then
+    :
+else
+    set prompt = "[$env_name:q] $prompt:q"
+endif
+endif
+
+unset env_name
+
+alias pydoc python -m pydoc
+
+rehash
diff --git a/bin/activate.fish b/bin/activate.fish
new file mode 100644
index 0000000000000000000000000000000000000000..f347781039907e282f9b5b5b78be571910d2677e
--- /dev/null
+++ b/bin/activate.fish
@@ -0,0 +1,76 @@
+# This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*.
+# Do not run it directly.
+
+function deactivate -d 'Exit virtualenv mode and return to the normal environment.'
+    # reset old environment variables
+    if test -n "$_OLD_VIRTUAL_PATH"
+        set -gx PATH $_OLD_VIRTUAL_PATH
+        set -e _OLD_VIRTUAL_PATH
+    end
+
+    if test -n "$_OLD_VIRTUAL_PYTHONHOME"
+        set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
+        set -e _OLD_VIRTUAL_PYTHONHOME
+    end
+
+    if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
+        # Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`.
+        set -l fish_function_path
+
+        # Erase virtualenv's `fish_prompt` and restore the original.
+        functions -e fish_prompt
+        functions -c _old_fish_prompt fish_prompt
+        functions -e _old_fish_prompt
+        set -e _OLD_FISH_PROMPT_OVERRIDE
+    end
+
+    set -e VIRTUAL_ENV
+
+    if test "$argv[1]" != 'nondestructive'
+        # Self-destruct!
+        functions -e pydoc
+        functions -e deactivate
+    end
+end
+
+# Unset irrelevant variables.
+deactivate nondestructive
+
+set -gx VIRTUAL_ENV "/home/reverend/Programmierung/git_projects/Chaos-Familien-Duell"
+
+set -gx _OLD_VIRTUAL_PATH $PATH
+set -gx PATH "$VIRTUAL_ENV/bin" $PATH
+
+# Unset `$PYTHONHOME` if set.
+if set -q PYTHONHOME
+    set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
+    set -e PYTHONHOME
+end
+
+function pydoc
+    python -m pydoc $argv
+end
+
+if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
+    # Copy the current `fish_prompt` function as `_old_fish_prompt`.
+    functions -c fish_prompt _old_fish_prompt
+
+    function fish_prompt
+        # Save the current $status, for fish_prompts that display it.
+        set -l old_status $status
+
+        # Prompt override provided?
+        # If not, just prepend the environment name.
+        if test -n ""
+            printf '%s%s' "" (set_color normal)
+        else
+            printf '%s(%s) ' (set_color normal) (basename "$VIRTUAL_ENV")
+        end
+
+        # Restore the original $status
+        echo "exit $old_status" | source
+        _old_fish_prompt
+    end
+
+    set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
+end
diff --git a/bin/activate.ps1 b/bin/activate.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..89dbec6ccdc0e9a05e79dbde928707d284712d07
--- /dev/null
+++ b/bin/activate.ps1
@@ -0,0 +1,150 @@
+# This file must be dot sourced from PoSh; you cannot run it
+# directly. Do this: . ./activate.ps1
+
+# FIXME: clean up unused vars.
+$script:THIS_PATH = $myinvocation.mycommand.path
+$script:BASE_DIR = split-path (resolve-path "$THIS_PATH/..") -Parent
+$script:DIR_NAME = split-path $BASE_DIR -Leaf
+
+function global:deactivate ( [switch] $NonDestructive ){
+
+    if ( test-path variable:_OLD_VIRTUAL_PATH ) {
+        $env:PATH = $variable:_OLD_VIRTUAL_PATH
+        remove-variable "_OLD_VIRTUAL_PATH" -scope global
+    }
+
+    if ( test-path function:_old_virtual_prompt ) {
+        $function:prompt = $function:_old_virtual_prompt
+        remove-item function:\_old_virtual_prompt
+    }
+
+    if ($env:VIRTUAL_ENV) {
+        $old_env = split-path $env:VIRTUAL_ENV -leaf
+        remove-item env:VIRTUAL_ENV -erroraction silentlycontinue
+    }
+
+    if ( !$NonDestructive ) {
+        # Self destruct!
+        remove-item function:deactivate
+    }
+}
+
+# unset irrelevant variables
+deactivate -nondestructive
+
+$VIRTUAL_ENV = $BASE_DIR
+$env:VIRTUAL_ENV = $VIRTUAL_ENV
+
+$global:_OLD_VIRTUAL_PATH = $env:PATH
+$env:PATH = "$env:VIRTUAL_ENV/bin:" + $env:PATH
+if (! $env:VIRTUAL_ENV_DISABLE_PROMPT) {
+    function global:_old_virtual_prompt { "" }
+    $function:_old_virtual_prompt = $function:prompt
+    function global:prompt {
+        # Add a prefix to the current prompt, but don't discard it.
+        write-host "($(split-path $env:VIRTUAL_ENV -leaf)) " -nonewline
+        & $function:_old_virtual_prompt
+    }
+}
+
+# SIG # Begin signature block
+# MIISeAYJKoZIhvcNAQcCoIISaTCCEmUCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
+# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
+# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUS5reBwSg3zOUwhXf2jPChZzf
+# yPmggg6tMIIGcDCCBFigAwIBAgIBJDANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQG
+# EwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERp
+# Z2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2Vy
+# dGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDcxMDI0MjIwMTQ2WhcNMTcxMDI0MjIw
+# MTQ2WjCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKzAp
+# BgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2BgNV
+# BAMTL1N0YXJ0Q29tIENsYXNzIDIgUHJpbWFyeSBJbnRlcm1lZGlhdGUgT2JqZWN0
+# IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyiOLIjUemqAbPJ1J
+# 0D8MlzgWKbr4fYlbRVjvhHDtfhFN6RQxq0PjTQxRgWzwFQNKJCdU5ftKoM5N4YSj
+# Id6ZNavcSa6/McVnhDAQm+8H3HWoD030NVOxbjgD/Ih3HaV3/z9159nnvyxQEckR
+# ZfpJB2Kfk6aHqW3JnSvRe+XVZSufDVCe/vtxGSEwKCaNrsLc9pboUoYIC3oyzWoU
+# TZ65+c0H4paR8c8eK/mC914mBo6N0dQ512/bkSdaeY9YaQpGtW/h/W/FkbQRT3sC
+# pttLVlIjnkuY4r9+zvqhToPjxcfDYEf+XD8VGkAqle8Aa8hQ+M1qGdQjAye8OzbV
+# uUOw7wIDAQABo4IB6TCCAeUwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+# AQYwHQYDVR0OBBYEFNBOD0CZbLhLGW87KLjg44gHNKq3MB8GA1UdIwQYMBaAFE4L
+# 7xqkQFulF2mHMMo0aEPQQa7yMD0GCCsGAQUFBwEBBDEwLzAtBggrBgEFBQcwAoYh
+# aHR0cDovL3d3dy5zdGFydHNzbC5jb20vc2ZzY2EuY3J0MFsGA1UdHwRUMFIwJ6Al
+# oCOGIWh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3Nmc2NhLmNybDAnoCWgI4YhaHR0
+# cDovL2NybC5zdGFydHNzbC5jb20vc2ZzY2EuY3JsMIGABgNVHSAEeTB3MHUGCysG
+# AQQBgbU3AQIBMGYwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
+# L3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
+# L2ludGVybWVkaWF0ZS5wZGYwEQYJYIZIAYb4QgEBBAQDAgABMFAGCWCGSAGG+EIB
+# DQRDFkFTdGFydENvbSBDbGFzcyAyIFByaW1hcnkgSW50ZXJtZWRpYXRlIE9iamVj
+# dCBTaWduaW5nIENlcnRpZmljYXRlczANBgkqhkiG9w0BAQUFAAOCAgEAcnMLA3Va
+# N4OIE9l4QT5OEtZy5PByBit3oHiqQpgVEQo7DHRsjXD5H/IyTivpMikaaeRxIv95
+# baRd4hoUcMwDj4JIjC3WA9FoNFV31SMljEZa66G8RQECdMSSufgfDYu1XQ+cUKxh
+# D3EtLGGcFGjjML7EQv2Iol741rEsycXwIXcryxeiMbU2TPi7X3elbwQMc4JFlJ4B
+# y9FhBzuZB1DV2sN2irGVbC3G/1+S2doPDjL1CaElwRa/T0qkq2vvPxUgryAoCppU
+# FKViw5yoGYC+z1GaesWWiP1eFKAL0wI7IgSvLzU3y1Vp7vsYaxOVBqZtebFTWRHt
+# XjCsFrrQBngt0d33QbQRI5mwgzEp7XJ9xu5d6RVWM4TPRUsd+DDZpBHm9mszvi9g
+# VFb2ZG7qRRXCSqys4+u/NLBPbXi/m/lU00cODQTlC/euwjk9HQtRrXQ/zqsBJS6U
+# J+eLGw1qOfj+HVBl/ZQpfoLk7IoWlRQvRL1s7oirEaqPZUIWY/grXq9r6jDKAp3L
+# ZdKQpPOnnogtqlU4f7/kLjEJhrrc98mrOWmVMK/BuFRAfQ5oDUMnVmCzAzLMjKfG
+# cVW/iMew41yfhgKbwpfzm3LBr1Zv+pEBgcgW6onRLSAn3XHM0eNtz+AkxH6rRf6B
+# 2mYhLEEGLapH8R1AMAo4BbVFOZR5kXcMCwowggg1MIIHHaADAgECAgIEuDANBgkq
+# hkiG9w0BAQUFADCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0
+# ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcx
+# ODA2BgNVBAMTL1N0YXJ0Q29tIENsYXNzIDIgUHJpbWFyeSBJbnRlcm1lZGlhdGUg
+# T2JqZWN0IENBMB4XDTExMTIwMzE1MzQxOVoXDTEzMTIwMzE0NTgwN1owgYwxIDAe
+# BgNVBA0TFzU4MTc5Ni1HaDd4Zkp4a3hRU0lPNEUwMQswCQYDVQQGEwJERTEPMA0G
+# A1UECBMGQmVybGluMQ8wDQYDVQQHEwZCZXJsaW4xFjAUBgNVBAMTDUphbm5pcyBM
+# ZWlkZWwxITAfBgkqhkiG9w0BCQEWEmphbm5pc0BsZWlkZWwuaW5mbzCCAiIwDQYJ
+# KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMcPeABYdN7nPq/AkZ/EkyUBGx/l2Yui
+# Lfm8ZdLG0ulMb/kQL3fRY7sUjYPyn9S6PhqqlFnNoGHJvbbReCdUC9SIQYmOEjEA
+# raHfb7MZU10NjO4U2DdGucj2zuO5tYxKizizOJF0e4yRQZVxpUGdvkW/+GLjCNK5
+# L7mIv3Z1dagxDKHYZT74HXiS4VFUwHF1k36CwfM2vsetdm46bdgSwV+BCMmZICYT
+# IJAS9UQHD7kP4rik3bFWjUx08NtYYFAVOd/HwBnemUmJe4j3IhZHr0k1+eDG8hDH
+# KVvPgLJIoEjC4iMFk5GWsg5z2ngk0LLu3JZMtckHsnnmBPHQK8a3opUNd8hdMNJx
+# gOwKjQt2JZSGUdIEFCKVDqj0FmdnDMPfwy+FNRtpBMl1sz78dUFhSrnM0D8NXrqa
+# 4rG+2FoOXlmm1rb6AFtpjAKksHRpYcPk2DPGWp/1sWB+dUQkS3gOmwFzyqeTuXpT
+# 0juqd3iAxOGx1VRFQ1VHLLf3AzV4wljBau26I+tu7iXxesVucSdsdQu293jwc2kN
+# xK2JyHCoZH+RyytrwS0qw8t7rMOukU9gwP8mn3X6mgWlVUODMcHTULjSiCEtvyZ/
+# aafcwjUbt4ReEcnmuZtWIha86MTCX7U7e+cnpWG4sIHPnvVTaz9rm8RyBkIxtFCB
+# nQ3FnoQgyxeJAgMBAAGjggOdMIIDmTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIH
+# gDAuBgNVHSUBAf8EJDAiBggrBgEFBQcDAwYKKwYBBAGCNwIBFQYKKwYBBAGCNwoD
+# DTAdBgNVHQ4EFgQUWyCgrIWo8Ifvvm1/YTQIeMU9nc8wHwYDVR0jBBgwFoAU0E4P
+# QJlsuEsZbzsouODjiAc0qrcwggIhBgNVHSAEggIYMIICFDCCAhAGCysGAQQBgbU3
+# AQICMIIB/zAuBggrBgEFBQcCARYiaHR0cDovL3d3dy5zdGFydHNzbC5jb20vcG9s
+# aWN5LnBkZjA0BggrBgEFBQcCARYoaHR0cDovL3d3dy5zdGFydHNzbC5jb20vaW50
+# ZXJtZWRpYXRlLnBkZjCB9wYIKwYBBQUHAgIwgeowJxYgU3RhcnRDb20gQ2VydGlm
+# aWNhdGlvbiBBdXRob3JpdHkwAwIBARqBvlRoaXMgY2VydGlmaWNhdGUgd2FzIGlz
+# c3VlZCBhY2NvcmRpbmcgdG8gdGhlIENsYXNzIDIgVmFsaWRhdGlvbiByZXF1aXJl
+# bWVudHMgb2YgdGhlIFN0YXJ0Q29tIENBIHBvbGljeSwgcmVsaWFuY2Ugb25seSBm
+# b3IgdGhlIGludGVuZGVkIHB1cnBvc2UgaW4gY29tcGxpYW5jZSBvZiB0aGUgcmVs
+# eWluZyBwYXJ0eSBvYmxpZ2F0aW9ucy4wgZwGCCsGAQUFBwICMIGPMCcWIFN0YXJ0
+# Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MAMCAQIaZExpYWJpbGl0eSBhbmQg
+# d2FycmFudGllcyBhcmUgbGltaXRlZCEgU2VlIHNlY3Rpb24gIkxlZ2FsIGFuZCBM
+# aW1pdGF0aW9ucyIgb2YgdGhlIFN0YXJ0Q29tIENBIHBvbGljeS4wNgYDVR0fBC8w
+# LTAroCmgJ4YlaHR0cDovL2NybC5zdGFydHNzbC5jb20vY3J0YzItY3JsLmNybDCB
+# iQYIKwYBBQUHAQEEfTB7MDcGCCsGAQUFBzABhitodHRwOi8vb2NzcC5zdGFydHNz
+# bC5jb20vc3ViL2NsYXNzMi9jb2RlL2NhMEAGCCsGAQUFBzAChjRodHRwOi8vYWlh
+# LnN0YXJ0c3NsLmNvbS9jZXJ0cy9zdWIuY2xhc3MyLmNvZGUuY2EuY3J0MCMGA1Ud
+# EgQcMBqGGGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tLzANBgkqhkiG9w0BAQUFAAOC
+# AQEAhrzEV6zwoEtKjnFRhCsjwiPykVpo5Eiye77Ve801rQDiRKgSCCiW6g3HqedL
+# OtaSs65Sj2pm3Viea4KR0TECLcbCTgsdaHqw2x1yXwWBQWZEaV6EB05lIwfr94P1
+# SFpV43zkuc+bbmA3+CRK45LOcCNH5Tqq7VGTCAK5iM7tvHwFlbQRl+I6VEL2mjpF
+# NsuRjDOVrv/9qw/a22YJ9R7Y1D0vUSs3IqZx2KMUaYDP7H2mSRxJO2nADQZBtriF
+# gTyfD3lYV12MlIi5CQwe3QC6DrrfSMP33i5Wa/OFJiQ27WPxmScYVhiqozpImFT4
+# PU9goiBv9RKXdgTmZE1PN0NQ5jGCAzUwggMxAgEBMIGTMIGMMQswCQYDVQQGEwJJ
+# TDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0
+# YWwgQ2VydGlmaWNhdGUgU2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3Mg
+# MiBQcmltYXJ5IEludGVybWVkaWF0ZSBPYmplY3QgQ0ECAgS4MAkGBSsOAwIaBQCg
+# eDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEE
+# AYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJ
+# BDEWBBRVGw0FDSiaIi38dWteRUAg/9Pr6DANBgkqhkiG9w0BAQEFAASCAgCInvOZ
+# FdaNFzbf6trmFDZKMojyx3UjKMCqNjHVBbuKY0qXwFC/ElYDV1ShJ2CBZbdurydO
+# OQ6cIQ0KREOCwmX/xB49IlLHHUxNhEkVv7HGU3EKAFf9IBt9Yr7jikiR9cjIsfHK
+# 4cjkoKJL7g28yEpLLkHt1eo37f1Ga9lDWEa5Zq3U5yX+IwXhrUBm1h8Xr033FhTR
+# VEpuSz6LHtbrL/zgJnCzJ2ahjtJoYevdcWiNXffosJHFaSfYDDbiNsPRDH/1avmb
+# 5j/7BhP8BcBaR6Fp8tFbNGIcWHHGcjqLMnTc4w13b7b4pDhypqElBa4+lCmwdvv9
+# GydYtRgPz8GHeoBoKj30YBlMzRIfFYaIFGIC4Ai3UEXkuH9TxYohVbGm/W0Kl4Lb
+# RJ1FwiVcLcTOJdgNId2vQvKc+jtNrjcg5SP9h2v/C4aTx8tyc6tE3TOPh2f9b8DL
+# S+SbVArJpuJqrPTxDDoO1QNjTgLcdVYeZDE+r/NjaGZ6cMSd8db3EaG3ijD/0bud
+# SItbm/OlNVbQOFRR76D+ZNgPcU5iNZ3bmvQQIg6aSB9MHUpIE/SeCkNl9YeVk1/1
+# GFULgNMRmIYP4KLvu9ylh5Gu3hvD5VNhH6+FlXANwFy07uXks5uF8mfZVxVCnodG
+# xkNCx+6PsrA5Z7WP4pXcmYnMn97npP/Q9EHJWw==
+# SIG # End signature block
diff --git a/bin/activate_this.py b/bin/activate_this.py
new file mode 100644
index 0000000000000000000000000000000000000000..444d3fd35df0c017f09ecde40c1c56d20ca48d2d
--- /dev/null
+++ b/bin/activate_this.py
@@ -0,0 +1,36 @@
+"""By using execfile(this_file, dict(__file__=this_file)) you will
+activate this virtualenv environment.
+
+This can be used when you must use an existing Python interpreter, not
+the virtualenv bin/python
+"""
+
+try:
+    __file__
+except NameError:
+    raise AssertionError(
+        "You must run this like execfile('path/to/activate_this.py', dict(__file__='path/to/activate_this.py'))"
+    )
+import os
+import site
+import sys
+
+old_os_path = os.environ.get("PATH", "")
+os.environ["PATH"] = os.path.dirname(os.path.abspath(__file__)) + os.pathsep + old_os_path
+base = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+if sys.platform == "win32":
+    site_packages = os.path.join(base, "Lib", "site-packages")
+else:
+    site_packages = os.path.join(base, "lib", "python%s" % sys.version[:3], "site-packages")
+prev_sys_path = list(sys.path)
+
+site.addsitedir(site_packages)
+sys.real_prefix = sys.prefix
+sys.prefix = base
+# Move the added items to the front of the path:
+new_sys_path = []
+for item in list(sys.path):
+    if item not in prev_sys_path:
+        new_sys_path.append(item)
+        sys.path.remove(item)
+sys.path[:0] = new_sys_path
diff --git a/bin/easy_install b/bin/easy_install
new file mode 100755
index 0000000000000000000000000000000000000000..c8c6fa0590ab11eba4ab9b39eaf4d5811d761391
--- /dev/null
+++ b/bin/easy_install
@@ -0,0 +1,11 @@
+#!/home/reverend/Programmierung/git_projects/Chaos-Familien-Duell/bin/python
+
+# -*- coding: utf-8 -*-
+import re
+import sys
+
+from setuptools.command.easy_install import main
+
+if __name__ == '__main__':
+    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
+    sys.exit(main())
diff --git a/bin/easy_install-3.7 b/bin/easy_install-3.7
new file mode 100755
index 0000000000000000000000000000000000000000..c8c6fa0590ab11eba4ab9b39eaf4d5811d761391
--- /dev/null
+++ b/bin/easy_install-3.7
@@ -0,0 +1,11 @@
+#!/home/reverend/Programmierung/git_projects/Chaos-Familien-Duell/bin/python
+
+# -*- coding: utf-8 -*-
+import re
+import sys
+
+from setuptools.command.easy_install import main
+
+if __name__ == '__main__':
+    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
+    sys.exit(main())
diff --git a/bin/pip b/bin/pip
new file mode 100755
index 0000000000000000000000000000000000000000..2a64bcf0405c084c2655071829fc885073aae314
--- /dev/null
+++ b/bin/pip
@@ -0,0 +1,11 @@
+#!/home/reverend/Programmierung/git_projects/Chaos-Familien-Duell/bin/python
+
+# -*- coding: utf-8 -*-
+import re
+import sys
+
+from pip._internal import main
+
+if __name__ == '__main__':
+    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
+    sys.exit(main())
diff --git a/bin/pip3 b/bin/pip3
new file mode 100755
index 0000000000000000000000000000000000000000..2a64bcf0405c084c2655071829fc885073aae314
--- /dev/null
+++ b/bin/pip3
@@ -0,0 +1,11 @@
+#!/home/reverend/Programmierung/git_projects/Chaos-Familien-Duell/bin/python
+
+# -*- coding: utf-8 -*-
+import re
+import sys
+
+from pip._internal import main
+
+if __name__ == '__main__':
+    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
+    sys.exit(main())
diff --git a/bin/pip3.7 b/bin/pip3.7
new file mode 100755
index 0000000000000000000000000000000000000000..2a64bcf0405c084c2655071829fc885073aae314
--- /dev/null
+++ b/bin/pip3.7
@@ -0,0 +1,11 @@
+#!/home/reverend/Programmierung/git_projects/Chaos-Familien-Duell/bin/python
+
+# -*- coding: utf-8 -*-
+import re
+import sys
+
+from pip._internal import main
+
+if __name__ == '__main__':
+    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
+    sys.exit(main())
diff --git a/bin/python b/bin/python
new file mode 100755
index 0000000000000000000000000000000000000000..7ab007825217cbd41a7585b32e45c766699fecac
Binary files /dev/null and b/bin/python differ
diff --git a/bin/python-config b/bin/python-config
new file mode 100755
index 0000000000000000000000000000000000000000..5c69bcff7ba2bdcfd6c02f1a27702bfd5a3b237b
--- /dev/null
+++ b/bin/python-config
@@ -0,0 +1,78 @@
+#!/home/reverend/Programmierung/git_projects/Chaos-Familien-Duell/bin/python
+
+import sys
+import getopt
+import sysconfig
+
+valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags',
+              'ldflags', 'help']
+
+if sys.version_info >= (3, 2):
+    valid_opts.insert(-1, 'extension-suffix')
+    valid_opts.append('abiflags')
+if sys.version_info >= (3, 3):
+    valid_opts.append('configdir')
+
+
+def exit_with_usage(code=1):
+    sys.stderr.write("Usage: {0} [{1}]\n".format(
+        sys.argv[0], '|'.join('--'+opt for opt in valid_opts)))
+    sys.exit(code)
+
+try:
+    opts, args = getopt.getopt(sys.argv[1:], '', valid_opts)
+except getopt.error:
+    exit_with_usage()
+
+if not opts:
+    exit_with_usage()
+
+pyver = sysconfig.get_config_var('VERSION')
+getvar = sysconfig.get_config_var
+
+opt_flags = [flag for (flag, val) in opts]
+
+if '--help' in opt_flags:
+    exit_with_usage(code=0)
+
+for opt in opt_flags:
+    if opt == '--prefix':
+        print(sysconfig.get_config_var('prefix'))
+
+    elif opt == '--exec-prefix':
+        print(sysconfig.get_config_var('exec_prefix'))
+
+    elif opt in ('--includes', '--cflags'):
+        flags = ['-I' + sysconfig.get_path('include'),
+                 '-I' + sysconfig.get_path('platinclude')]
+        if opt == '--cflags':
+            flags.extend(getvar('CFLAGS').split())
+        print(' '.join(flags))
+
+    elif opt in ('--libs', '--ldflags'):
+        abiflags = getattr(sys, 'abiflags', '')
+        libs = ['-lpython' + pyver + abiflags]
+        libs += getvar('LIBS').split()
+        libs += getvar('SYSLIBS').split()
+        # add the prefix/lib/pythonX.Y/config dir, but only if there is no
+        # shared library in prefix/lib/.
+        if opt == '--ldflags':
+            if not getvar('Py_ENABLE_SHARED'):
+                libs.insert(0, '-L' + getvar('LIBPL'))
+            if not getvar('PYTHONFRAMEWORK'):
+                libs.extend(getvar('LINKFORSHARED').split())
+        print(' '.join(libs))
+
+    elif opt == '--extension-suffix':
+        ext_suffix = sysconfig.get_config_var('EXT_SUFFIX')
+        if ext_suffix is None:
+            ext_suffix = sysconfig.get_config_var('SO')
+        print(ext_suffix)
+
+    elif opt == '--abiflags':
+        if not getattr(sys, 'abiflags', None):
+            exit_with_usage()
+        print(sys.abiflags)
+
+    elif opt == '--configdir':
+        print(sysconfig.get_config_var('LIBPL'))
diff --git a/bin/python3 b/bin/python3
new file mode 120000
index 0000000000000000000000000000000000000000..d8654aa0e2f2f3c1760e0fcbcbb52c1c5941fba7
--- /dev/null
+++ b/bin/python3
@@ -0,0 +1 @@
+python
\ No newline at end of file
diff --git a/bin/python3.7 b/bin/python3.7
new file mode 120000
index 0000000000000000000000000000000000000000..d8654aa0e2f2f3c1760e0fcbcbb52c1c5941fba7
--- /dev/null
+++ b/bin/python3.7
@@ -0,0 +1 @@
+python
\ No newline at end of file
diff --git a/bin/wheel b/bin/wheel
new file mode 100755
index 0000000000000000000000000000000000000000..3beae37b9f23f481edd7575923ca19f899972c0c
--- /dev/null
+++ b/bin/wheel
@@ -0,0 +1,11 @@
+#!/home/reverend/Programmierung/git_projects/Chaos-Familien-Duell/bin/python
+
+# -*- coding: utf-8 -*-
+import re
+import sys
+
+from wheel.cli import main
+
+if __name__ == '__main__':
+    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
+    sys.exit(main())
diff --git a/frontend/current_round.json b/frontend/current_round.json
deleted file mode 100644
index 45efc1b478c4a0d26c68b67f92e0aa8a8a4b5164..0000000000000000000000000000000000000000
--- a/frontend/current_round.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-    "state": "player_select",
-    "points": 0,
-    "current_teams": [
-        "warpzone",
-        "warpzone"
-    ],
-    "current_team_logos": [
-        "halo/i/bims/1/pfad",
-        "halo/i/bims/1/pfad"
-    ],
-    "current_team_points": [
-        0,
-        0
-    ],
-    "current_team_fails": [
-        0,
-        0
-    ],
-    "answer_amount": 0,
-    "question": "",
-    "answers": []
-}
\ No newline at end of file
diff --git a/include/python3.7m b/include/python3.7m
new file mode 120000
index 0000000000000000000000000000000000000000..4fe7f6cf9fba788818066956711299381de9403f
--- /dev/null
+++ b/include/python3.7m
@@ -0,0 +1 @@
+/usr/include/python3.7m
\ No newline at end of file
diff --git a/cfd.sqlite b/src/cfd.sqlite
similarity index 99%
rename from cfd.sqlite
rename to src/cfd.sqlite
index b99013f4cec0de4162665847d0f0bd4f87fbf532..982bdad438b200029529408c0f55b04650c7ced3 100644
Binary files a/cfd.sqlite and b/src/cfd.sqlite differ
diff --git a/data/questions_35c3.json b/src/data/questions_35c3.json
similarity index 100%
rename from data/questions_35c3.json
rename to src/data/questions_35c3.json
diff --git a/frontend/ChaosWest.png b/src/frontend/ChaosWest.png
similarity index 100%
rename from frontend/ChaosWest.png
rename to src/frontend/ChaosWest.png
diff --git a/frontend/ChaosWest.svg b/src/frontend/ChaosWest.svg
similarity index 100%
rename from frontend/ChaosWest.svg
rename to src/frontend/ChaosWest.svg
diff --git a/frontend/PermanentMarker-Regular.ttf b/src/frontend/PermanentMarker-Regular.ttf
similarity index 100%
rename from frontend/PermanentMarker-Regular.ttf
rename to src/frontend/PermanentMarker-Regular.ttf
diff --git a/frontend/PressStart2P-Regular.ttf b/src/frontend/PressStart2P-Regular.ttf
similarity index 100%
rename from frontend/PressStart2P-Regular.ttf
rename to src/frontend/PressStart2P-Regular.ttf
diff --git a/frontend/audio/Familien Duell Intromusik-ZIjs-VVh8l8.m4a b/src/frontend/audio/Familien Duell Intromusik-ZIjs-VVh8l8.m4a
similarity index 100%
rename from frontend/audio/Familien Duell Intromusik-ZIjs-VVh8l8.m4a
rename to src/frontend/audio/Familien Duell Intromusik-ZIjs-VVh8l8.m4a
diff --git a/frontend/audio/failure.mp3 b/src/frontend/audio/failure.mp3
similarity index 100%
rename from frontend/audio/failure.mp3
rename to src/frontend/audio/failure.mp3
diff --git a/frontend/audio/frage.mp3 b/src/frontend/audio/frage.mp3
similarity index 100%
rename from frontend/audio/frage.mp3
rename to src/frontend/audio/frage.mp3
diff --git a/frontend/audio/intro.mp3 b/src/frontend/audio/intro.mp3
similarity index 100%
rename from frontend/audio/intro.mp3
rename to src/frontend/audio/intro.mp3
diff --git a/frontend/chaos_west_text.jpg b/src/frontend/chaos_west_text.jpg
similarity index 100%
rename from frontend/chaos_west_text.jpg
rename to src/frontend/chaos_west_text.jpg
diff --git a/src/frontend/current_round.json b/src/frontend/current_round.json
new file mode 100644
index 0000000000000000000000000000000000000000..8c22bf09c36400cf1246d96850b65a223d3898ba
--- /dev/null
+++ b/src/frontend/current_round.json
@@ -0,0 +1,49 @@
+{
+    "state": "player_select",
+    "points": 0,
+    "current_teams": [
+        "warpzone",
+        "binary kitchen"
+    ],
+    "current_team_logos": [
+        "halo/i/bims/1/pfad",
+        "static/teamlogos/binary kitchen.png"
+    ],
+    "current_team_points": [
+        0,
+        0
+    ],
+    "current_team_fails": [
+        0,
+        0
+    ],
+    "answer_amount": 5,
+    "question": "Nenne eine Shell:",
+    "answers": [
+        {
+            "answer": "bash",
+            "numberOfPeople": 556,
+            "visible": false
+        },
+        {
+            "answer": "zsh",
+            "numberOfPeople": 493,
+            "visible": false
+        },
+        {
+            "answer": "fish",
+            "numberOfPeople": 99,
+            "visible": false
+        },
+        {
+            "answer": "powershell",
+            "numberOfPeople": 29,
+            "visible": false
+        },
+        {
+            "answer": "ksh",
+            "numberOfPeople": 23,
+            "visible": false
+        }
+    ]
+}
\ No newline at end of file
diff --git a/frontend/live.py b/src/frontend/live.py
similarity index 100%
rename from frontend/live.py
rename to src/frontend/live.py
diff --git a/frontend/start.py b/src/frontend/start.py
similarity index 100%
rename from frontend/start.py
rename to src/frontend/start.py
diff --git a/frontend/watterott.png b/src/frontend/watterott.png
similarity index 100%
rename from frontend/watterott.png
rename to src/frontend/watterott.png
diff --git a/model/__init__.py b/src/model/__init__.py
similarity index 100%
rename from model/__init__.py
rename to src/model/__init__.py
diff --git a/model/game.py b/src/model/game.py
similarity index 100%
rename from model/game.py
rename to src/model/game.py
diff --git a/model/question.py b/src/model/question.py
similarity index 100%
rename from model/question.py
rename to src/model/question.py
diff --git a/model/team.py b/src/model/team.py
similarity index 100%
rename from model/team.py
rename to src/model/team.py
diff --git a/rest/__init__.py b/src/rest/__init__.py
similarity index 100%
rename from rest/__init__.py
rename to src/rest/__init__.py
diff --git a/rest/game/__init__.py b/src/rest/game/__init__.py
similarity index 100%
rename from rest/game/__init__.py
rename to src/rest/game/__init__.py
diff --git a/rest/game/game.py b/src/rest/game/game.py
similarity index 100%
rename from rest/game/game.py
rename to src/rest/game/game.py
diff --git a/rest/team/__init__.py b/src/rest/team/__init__.py
similarity index 100%
rename from rest/team/__init__.py
rename to src/rest/team/__init__.py
diff --git a/rest/team/team.py b/src/rest/team/team.py
similarity index 100%
rename from rest/team/team.py
rename to src/rest/team/team.py
diff --git a/start.py b/src/start.py
similarity index 100%
rename from start.py
rename to src/start.py
diff --git a/static/PressStart2P-Regular.ttf b/src/static/PressStart2P-Regular.ttf
similarity index 100%
rename from static/PressStart2P-Regular.ttf
rename to src/static/PressStart2P-Regular.ttf
diff --git a/static/chaos_west_text.jpg b/src/static/chaos_west_text.jpg
similarity index 100%
rename from static/chaos_west_text.jpg
rename to src/static/chaos_west_text.jpg
diff --git a/static/questions_35c3.json b/src/static/questions_35c3.json
similarity index 100%
rename from static/questions_35c3.json
rename to src/static/questions_35c3.json
diff --git a/static/questions_hip_2019.json b/src/static/questions_hip_2019.json
similarity index 100%
rename from static/questions_hip_2019.json
rename to src/static/questions_hip_2019.json
diff --git a/static/teamlogos/0_no_logo_00.png b/src/static/teamlogos/0_no_logo_00.png
similarity index 100%
rename from static/teamlogos/0_no_logo_00.png
rename to src/static/teamlogos/0_no_logo_00.png
diff --git a/static/teamlogos/0_no_logo_01.png b/src/static/teamlogos/0_no_logo_01.png
similarity index 100%
rename from static/teamlogos/0_no_logo_01.png
rename to src/static/teamlogos/0_no_logo_01.png
diff --git a/static/teamlogos/0_no_logo_02.png b/src/static/teamlogos/0_no_logo_02.png
similarity index 100%
rename from static/teamlogos/0_no_logo_02.png
rename to src/static/teamlogos/0_no_logo_02.png
diff --git a/static/teamlogos/binary kitchen.png b/src/static/teamlogos/binary kitchen.png
similarity index 100%
rename from static/teamlogos/binary kitchen.png
rename to src/static/teamlogos/binary kitchen.png
diff --git a/static/teamlogos/entropia.png b/src/static/teamlogos/entropia.png
similarity index 100%
rename from static/teamlogos/entropia.png
rename to src/static/teamlogos/entropia.png
diff --git a/static/teamlogos/warpzone.png b/src/static/teamlogos/warpzone.png
similarity index 100%
rename from static/teamlogos/warpzone.png
rename to src/static/teamlogos/warpzone.png
diff --git a/templates/frontend.jinja b/src/templates/frontend.jinja
similarity index 100%
rename from templates/frontend.jinja
rename to src/templates/frontend.jinja
diff --git a/templates/game.jinja b/src/templates/game.jinja
similarity index 100%
rename from templates/game.jinja
rename to src/templates/game.jinja
diff --git a/templates/layout.jinja b/src/templates/layout.jinja
similarity index 100%
rename from templates/layout.jinja
rename to src/templates/layout.jinja
diff --git a/templates/management.jinja b/src/templates/management.jinja
similarity index 100%
rename from templates/management.jinja
rename to src/templates/management.jinja
diff --git a/utils/__init__.py b/src/utils/__init__.py
similarity index 100%
rename from utils/__init__.py
rename to src/utils/__init__.py
diff --git a/utils/errorlog.py b/src/utils/errorlog.py
similarity index 100%
rename from utils/errorlog.py
rename to src/utils/errorlog.py
diff --git a/views/__init__.py b/src/views/__init__.py
similarity index 100%
rename from views/__init__.py
rename to src/views/__init__.py
diff --git a/views/game.py b/src/views/game.py
similarity index 100%
rename from views/game.py
rename to src/views/game.py
diff --git a/views/management.py b/src/views/management.py
similarity index 100%
rename from views/management.py
rename to src/views/management.py