diff --git a/.dockerignore b/.dockerignore
index 5c6489f88423b99bf64d225538104f2efe6557c5..882ad23dafd9d331e856ce2ad3d04161e0a6ea96 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,12 +1,4 @@
-README.md
-CHANGELOG.md
-docker-compose.yml
-Dockerfile
-.dockerignore
 .git
-.gitattributes
-.gitignore
-.gitlab
-.gitlab-ci.yml
-vendor/
-node_modules/
\ No newline at end of file
+.dockerignore
+metager/vendor
+metager/node_modules
diff --git a/.env b/.env
new file mode 100644
index 0000000000000000000000000000000000000000..d71b9b2ff10b81e8cb89bcec17f752aeedaf1beb
--- /dev/null
+++ b/.env
@@ -0,0 +1,4 @@
+APP_ENV=development
+
+# Variables for Testing
+SELENIUM_IMAGE=selenium/standalone-firefox:99.0
\ No newline at end of file
diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index a8763f8ef5f3ca507073252f6815171c00b47074..0000000000000000000000000000000000000000
--- a/.gitattributes
+++ /dev/null
@@ -1,3 +0,0 @@
-* text=auto
-*.css linguist-vendored
-*.scss linguist-vendored
diff --git a/.gitignore b/.gitignore
index 76d6eb1d04f23834bef2936deb865f6803dd4c04..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,27 +0,0 @@
-/node_modules
-/public/storage
-/vendor
-/.idea
-Homestead.json
-Homestead.yaml
-.env
-.orig
-langfiles.zip
-npm-debug.log
-# The Files created by Webpack in the build process
-/public/**/*.css
-!/public/fonts/arimo/stylesheet.css
-!/public/fonts/liberationsans/stylesheet.css
-/public/**/*.js
-/public/mix-manifest.json
-
-**/*.map
-/.buildpath
-/.project
-
-local.log
-
-browserstack.err
-.npm
-.composer
-.phpunit.result.cache
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8f49eddaf3a8844b0ffb4edcfaf53c1e92fab9b8..c6d3fd32c9e452b8a2918b6400be4c12187cf038 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,168 +1,50 @@
 variables:
     DOCKER_HOST: "tcp://docker-dind.gitlab-suma:2375"
-    AUTO_DEVOPS_BUILD_IMAGE_EXTRA_ARGS: "--network host"
-    POSTGRES_ENABLED: "false"
-    CODE_QUALITY_DISABLED: "true"
-    CONTAINER_SCANNING_DISABLED: "true"
-    DAST_DISABLED: "true"
-    DEPENDENCY_SCANNING_DISABLED: "true"
-    LICENSE_MANAGEMENT_DISABLED: "true"
-    PERFORMANCE_DISABLED: "true"
-    SAST_DISABLED: "true"
-    TEST_DISABLED: "true"
-    AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLES: "AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,S3_HOST,S3_BUCKETNAME"
+    BUILD_DOCKER_IMAGE: docker:20.10.15
+    DEPLOY_KUBERNETES_IMAGE: alpine/k8s:1.22.6
+    DOCKER_FPM_IMAGE_NAME: fpm
+    DOCKER_NGINX_IMAGE_NAME: nginx
 
-include:
-  - template: Jobs/Build.gitlab-ci.yml
-  - template: Jobs/Deploy.gitlab-ci.yml
-
-.auto-deploy:
-  image: "registry.gitlab.com/gitlab-org/cluster-integration/auto-deploy-image:v2.12.0"
+workflow:
+  rules:
+  - if: $CI_COMMIT_BRANCH != "master" && $CI_COMMIT_BRANCH != "development" &&  ($CI_COMMIT_TAG || $CI_COMMIT_BRANCH)
+    variables:
+      APP_URL: "https://${DOCKER_IMAGE_TAG_PREFIX}.review.metager.de"
+      APP_ENV: development
+      DOCKER_IMAGE_TAG_PREFIX: $CI_COMMIT_REF_SLUG
+      DOCKER_COMPOSER_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-composer-$CI_COMMIT_SHA
+      DOCKER_FPM_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-$CI_COMMIT_SHA
+      DOCKER_NGINX_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-$CI_COMMIT_SHA
+      HELM_RELEASE_NAME: review-$DOCKER_IMAGE_TAG_PREFIX
+  - if: $CI_COMMIT_BRANCH == "master"
+    variables:
+      APP_URL: https://metager.de
+      APP_ENV: production
+      DOCKER_IMAGE_TAG_PREFIX: $CI_COMMIT_BRANCH
+      DOCKER_COMPOSER_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-composer-$CI_COMMIT_SHA
+      DOCKER_FPM_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-$CI_COMMIT_SHA
+      DOCKER_NGINX_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-$CI_COMMIT_SHA
+      HELM_RELEASE_NAME: $DOCKER_IMAGE_TAG_PREFIX
+  - if: $CI_COMMIT_BRANCH == "development"
+    variables:
+      APP_URL: https://metager3.de
+      APP_ENV: development
+      DOCKER_IMAGE_TAG_PREFIX: $CI_COMMIT_BRANCH
+      DOCKER_COMPOSER_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-composer-$CI_COMMIT_SHA
+      DOCKER_FPM_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-$CI_COMMIT_SHA
+      DOCKER_NGINX_IMAGE_TAG: $DOCKER_IMAGE_TAG_PREFIX-$CI_COMMIT_SHA
+      HELM_RELEASE_NAME: $DOCKER_IMAGE_TAG_PREFIX
 
 stages:
-  - build
-  - deploy  # dummy stage to follow the template guidelines
-  - review
-  - dast
-  - staging
-  - canary
-  - development
-  - production
-  - incremental rollout 10%
-  - incremental rollout 25%
-  - incremental rollout 50%
-  - incremental rollout 100%
-  - performance
+  - build_composer
+  - build_dependencies
+  - build_docker_images
+  - deploy
   - integrationtest
-  - cleanup
-
-build:
-  services:
-
-review:
-  variables:
-    HELM_UPGRADE_VALUES_FILE: .gitlab/review-apps-values.yaml
-    ROLLOUT_RESOURCE_TYPE: deployment
-  environment:
-    name: review/$CI_COMMIT_REF_NAME
-    on_stop: stop_review
-    auto_stop_in: 2 days
-  rules:
-    - if: '$CI_KUBERNETES_ACTIVE == null || $CI_KUBERNETES_ACTIVE == ""'
-      when: never
-    - if: '$CI_COMMIT_BRANCH == "master"'
-      when: never
-    - if: '$CI_COMMIT_BRANCH == "development"'
-      when: never
-    - if: '$REVIEW_DISABLED'
-      when: never
-    - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH'
-
-stop_review:
-  variables:
-    GIT_STRATEGY: none
-  environment:
-    name: review/$CI_COMMIT_REF_NAME
-    action: stop
-  rules:
-    - if: '$CI_KUBERNETES_ACTIVE == null || $CI_KUBERNETES_ACTIVE == ""'
-      when: never
-    - if: '$CI_COMMIT_BRANCH == "master"'
-      when: never
-    - if: '$CI_COMMIT_BRANCH == "development"'
-      when: never
-    - if: '$REVIEW_DISABLED'
-      when: never
-    - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH'
-      when: manual
-
-
 
-.development: &development_template
-  extends: .auto-deploy
-  stage: development
-  script:
-    - auto-deploy check_kube_domain
-    - auto-deploy download_chart
-    - auto-deploy ensure_namespace
-    - auto-deploy initialize_tiller
-    - auto-deploy create_secret
-    - auto-deploy deploy
-    - auto-deploy delete canary
-    - auto-deploy delete rollout
-    - auto-deploy persist_environment_url
-  variables:
-    HELM_UPGRADE_VALUES_FILE: .gitlab/development-values.yaml
-    ROLLOUT_RESOURCE_TYPE: deployment
-  environment:
-    name: development
-    url: https://metager3.de
-  artifacts:
-    paths: [environment_url.txt]
-
-development:
-  <<: *development_template
-  rules:
-    - if: '$CI_KUBERNETES_ACTIVE == null || $CI_KUBERNETES_ACTIVE == ""'
-      when: never
-    - if: '$STAGING_ENABLED'
-      when: never
-    - if: '$CANARY_ENABLED'
-      when: never
-    - if: '$INCREMENTAL_ROLLOUT_ENABLED'
-      when: never
-    - if: '$INCREMENTAL_ROLLOUT_MODE'
-      when: never
-    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
-
-
-
-production:
-  variables:
-    ADDITIONAL_HOSTS: "metager.org,metager.es"
-    HELM_UPGRADE_VALUES_FILE: .gitlab/production-values.yaml
-    ROLLOUT_RESOURCE_TYPE: deployment
-  environment:
-    url: https://metager.de
-  rules:
-    - if: '$CI_KUBERNETES_ACTIVE == null || $CI_KUBERNETES_ACTIVE == ""'
-      when: never
-    - if: '$STAGING_ENABLED'
-      when: never
-    - if: '$CANARY_ENABLED'
-      when: never
-    - if: '$INCREMENTAL_ROLLOUT_ENABLED'
-      when: never
-    - if: '$INCREMENTAL_ROLLOUT_MODE'
-      when: never
-    - if: '$CI_COMMIT_BRANCH == "master"'
-
-
-integrationtest:
-  stage: integrationtest
-  image: 
-    name: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG:$CI_COMMIT_SHA
-    entrypoint: ["/bin/sh"]
-  script:
-    # Install Dev Dependencies
-    - cp .env.example .env
-    - echo "" >> .env
-    - echo "BROWSERSTACK_USERNAME=\"$BROWSERSTACK_USERNAME\"" >> .env
-    - echo "BROWSERSTACK_ACCESS_KEY=\"$BROWSERSTACK_ACCESS_KEY\"" >> .env
-    - echo "BROWSERSTACK_LOCAL_TUNNEL=\"$BROWSERSTACK_LOCAL_TUNNEL\"" >> .env
-    - URL=$(cat environment_url.txt | tr -d '\n')
-    - sed -i "s#^APP_URL=.*#APP_URL=$URL#g" .env
-    - sed -i "s#^BRANCH_NAME=.*#BRANCH_NAME=$CI_COMMIT_REF_NAME#g" .env
-    - sed -i "s#^COMMIT_NAME=.*#COMMIT_NAME=$CI_COMMIT_REF_SLUG#g" .env
-    - mc alias set --path=on --api S3v4 packages $S3_HOST $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY
-    - if mc cp packages/$S3_BUCKETNAME/packages.tar /tmp/; then tar -xf /tmp/packages.tar; fi
-    - export COMPOSER_HOME=.composer
-    - composer install
-    - tar -cf /tmp/packages.tar .npm .composer
-    - mc cp /tmp/packages.tar packages/$S3_BUCKETNAME/
-    - rm /tmp/packages.tar
-    - rm -rf .npm .composer
-    - php artisan test --parallel --processes=5
-  except:
-    refs: 
-      - master
+include:
+  - local: /.gitlab/ci/build_composer.yml
+  - local: /.gitlab/ci/build_dependencies.yml
+  - local: /.gitlab/ci/build_docker_images.yml
+  - local: /.gitlab/ci/deploy.yml
+  - local: /.gitlab/ci/integrationtest.yml
\ No newline at end of file
diff --git a/.gitlab/ci/build_composer.yml b/.gitlab/ci/build_composer.yml
new file mode 100644
index 0000000000000000000000000000000000000000..0debbdc0535ec2b1b37c35cbf908638bbd49e775
--- /dev/null
+++ b/.gitlab/ci/build_composer.yml
@@ -0,0 +1,13 @@
+composer_image:
+  stage: build_composer
+  image: $BUILD_DOCKER_IMAGE
+  before_script:
+    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+  script:
+    - docker build --network=host
+        --target=composer
+        -f build/fpm/Dockerfile
+        -t ${CI_REGISTRY_IMAGE}/$DOCKER_FPM_IMAGE_NAME:$DOCKER_COMPOSER_IMAGE_TAG .
+    - docker push ${CI_REGISTRY_IMAGE}/$DOCKER_FPM_IMAGE_NAME:$DOCKER_COMPOSER_IMAGE_TAG
+  after_script:
+    - docker logout $CI_REGISTRY
\ No newline at end of file
diff --git a/.gitlab/ci/build_dependencies.yml b/.gitlab/ci/build_dependencies.yml
new file mode 100644
index 0000000000000000000000000000000000000000..147dda609b92e072bf31850b3d8b84f40ddddb29
--- /dev/null
+++ b/.gitlab/ci/build_dependencies.yml
@@ -0,0 +1,34 @@
+npm:
+  stage: build_dependencies
+  image: node:14
+  script:
+    - cd metager
+    - npm install --cache .npm --prefer-offline --no-audit
+    - npm run prod
+  needs: []
+  artifacts:
+    paths:
+      - metager/public
+    expire_in: 2 hrs
+  cache:
+    paths:
+      - metager/.npm/
+
+composer:
+  stage: build_dependencies
+  image: ${CI_REGISTRY_IMAGE}/$DOCKER_FPM_IMAGE_NAME:$DOCKER_COMPOSER_IMAGE_TAG
+  before_script:
+    - export COMPOSER_HOME=$(pwd)/metager/.composer
+  script:
+    - cd metager
+    - echo $COMPOSER_HOME
+    - composer install --optimize-autoloader --no-dev
+  artifacts:
+    paths:
+      - metager/vendor
+    expire_in: 2 hrs
+  cache:
+    paths:
+      - metager/.composer/
+
+  
\ No newline at end of file
diff --git a/.gitlab/ci/build_docker_images.yml b/.gitlab/ci/build_docker_images.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e2a36aacb5b0dfa87a16136e27ea0ec0b6f9b58b
--- /dev/null
+++ b/.gitlab/ci/build_docker_images.yml
@@ -0,0 +1,84 @@
+fpm:
+  stage: build_docker_images
+  image: $BUILD_DOCKER_IMAGE
+  needs:
+    - composer
+    - npm
+  before_script:
+    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+    # We need the vendor files in our final image. Make sure to not ignore the folder
+    - echo '!metager/vendor' >> .dockerignore
+  script:
+    - docker build --network=host
+        --target=production
+        -f build/fpm/Dockerfile
+        -t ${CI_REGISTRY_IMAGE}/$DOCKER_FPM_IMAGE_NAME:$DOCKER_FPM_IMAGE_TAG .
+    - docker push ${CI_REGISTRY_IMAGE}/$DOCKER_FPM_IMAGE_NAME:$DOCKER_FPM_IMAGE_TAG
+  after_script:
+    - docker logout $CI_REGISTRY
+
+nginx:
+  stage: build_docker_images
+  image: $BUILD_DOCKER_IMAGE
+  needs:
+    - npm
+  before_script:
+    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+  script:
+    - docker build --network=host
+        --target=production
+        -f build/nginx/Dockerfile
+        -t ${CI_REGISTRY_IMAGE}/$DOCKER_NGINX_IMAGE_NAME:$DOCKER_NGINX_IMAGE_TAG .
+    - docker push ${CI_REGISTRY_IMAGE}/$DOCKER_NGINX_IMAGE_NAME:$DOCKER_NGINX_IMAGE_TAG
+  after_script:
+    - docker logout $CI_REGISTRY
+
+.cleanup_revision_images:
+  stage: build_docker_images
+  image: $DEPLOY_KUBERNETES_IMAGE
+  needs:
+    - composer
+  variables:
+    FPM_REPOSITORY_ID: 418
+    NGINX_REPOSITORY_ID: 416
+    KEEP_N: 9   # Trim to the latest 9 revisions as the 10th will be deleted in the next stage
+  before_script:
+    - chmod go-r $KUBECONFIG
+  script:
+    - .gitlab/deployment_scripts/cleanup_tags_revision.sh
+    - .gitlab/deployment_scripts/cleanup_tags_non_revision.sh
+
+cleanup_revision_images_review:
+  extends:
+    - .cleanup_revision_images
+  environment:
+    name: review/$CI_COMMIT_REF_SLUG
+    url: "https://${CI_COMMIT_REF_SLUG}.review.metager.de"
+    action: prepare
+    auto_stop_in: 2 days
+  rules:
+    - if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "development"'
+      when: never
+    - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH'
+
+cleanup_revision_images_development:
+  extends:
+    - .cleanup_revision_images
+  environment:
+    name: development
+    url: https://metager3.de
+    action: prepare
+  rules:
+    - if: '$CI_COMMIT_BRANCH != "development"'
+      when: never
+
+cleanup_revision_images_production:
+  extends:
+    - .cleanup_revision_images
+  environment:
+    name: production
+    url: https://metager.de
+    action: prepare
+  rules:
+    - if: '$CI_COMMIT_BRANCH != "master"'
+      when: never
\ No newline at end of file
diff --git a/.gitlab/ci/deploy.yml b/.gitlab/ci/deploy.yml
new file mode 100644
index 0000000000000000000000000000000000000000..014151c19b163fe7971b1062231b4f206ada6d2c
--- /dev/null
+++ b/.gitlab/ci/deploy.yml
@@ -0,0 +1,88 @@
+.deploy:
+  stage: deploy
+  image: $DEPLOY_KUBERNETES_IMAGE
+  needs:
+    - fpm
+    - nginx
+  dependencies: [] # No Artifacts required
+  variables:
+    DEPLOYMENT_CHART_NAME: ${CI_COMMIT_REF_SLUG}
+    BRANCH_NAME: $CI_COMMIT_REF_NAME
+    COMMIT_NAME: $CI_COMMIT_REF_SLUG
+  before_script:
+    - chmod go-r $KUBECONFIG
+  script:
+    - .gitlab/deployment_scripts/update_secret.sh
+    - .gitlab/deployment_scripts/update_deployment.sh
+
+deploy_development:
+  extends:
+    - .deploy
+  environment:
+    name: development
+    url: https://metager3.de
+    action: start
+  variables:
+    DEPLOYMENT_URL: "metager3.de"
+    DEPLOYMENT_HELM_VALUES: .gitlab/development.yaml
+    DEPLOYMENT_CHART_NAME: $CI_COMMIT_BRANCH
+  rules:
+    - if: '$CI_COMMIT_BRANCH == "development"'
+
+deploy_production:
+  extends:
+    - .deploy
+  environment:
+    name: production
+    url: https://metager.de
+    action: start
+  variables:
+    DEPLOYMENT_URL: "metager.de"
+    DEPLOYMENT_HELM_VALUES: .gitlab/production.yaml
+    DEPLOYMENT_CHART_NAME: $CI_COMMIT_BRANCH
+  rules:
+    - if: '$CI_COMMIT_BRANCH == "master"'
+
+deploy_review:
+  extends:
+    - .deploy
+  environment:
+    name: review/$CI_COMMIT_REF_SLUG
+    url: "https://${CI_COMMIT_REF_SLUG}.review.metager.de"
+    action: start
+    on_stop: stop_review
+    auto_stop_in: 2 days
+  variables:
+    DEPLOYMENT_URL: "${CI_COMMIT_REF_SLUG}.review.metager.de"
+    DEPLOYMENT_HELM_VALUES: .gitlab/review.yaml
+    DEPLOYMENT_CHART_NAME: review-${CI_COMMIT_REF_SLUG}
+  rules:
+    - if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "development"'
+      when: never
+    - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH'
+
+stop_review:
+  stage: deploy
+  image: $DEPLOY_KUBERNETES_IMAGE
+  environment:
+    name: review/$CI_COMMIT_REF_SLUG
+    action: stop
+  variables:
+    DEPLOYMENT_CHART_NAME: review-${CI_COMMIT_REF_SLUG}
+    KEEP_N: 0   # Environment gets deleted. No Image Tags to keep
+    FPM_REPOSITORY_ID: 418
+    NGINX_REPOSITORY_ID: 416
+  script:
+    - echo "Removing Image Tags..."
+    - .gitlab/deployment_scripts/cleanup_tags_revision.sh
+    # For some reason an empty image tag gets created for this. We need to delete it until we find out why that is
+    - 'curl --fail --silent -X DELETE -H "JOB-TOKEN: $CI_JOB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/registry/repositories/$FPM_REPOSITORY_ID/tags/$DOCKER_IMAGE_TAG_PREFIX"'
+    - 'curl --fail --silent -X DELETE -H "JOB-TOKEN: $CI_JOB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/registry/repositories/$NGINX_REPOSITORY_ID/tags/$DOCKER_IMAGE_TAG_PREFIX"'
+    - echo "Stopping Deployment..."
+    - kubectl -n $KUBE_NAMESPACE delete secret $CI_COMMIT_REF_SLUG
+    - helm -n $KUBE_NAMESPACE delete $DEPLOYMENT_CHART_NAME
+  when: manual
+  rules:
+    - if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "development"'
+      when: never
+    - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH'
\ No newline at end of file
diff --git a/.gitlab/ci/integrationtest.yml b/.gitlab/ci/integrationtest.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b79bdce640d487bc5129a62c6a083b9cf26325ff
--- /dev/null
+++ b/.gitlab/ci/integrationtest.yml
@@ -0,0 +1,28 @@
+integrationtest:
+  services:
+    - name: selenium/standalone-firefox:99.0
+      alias: selenium-standalone-firefox
+  stage: integrationtest
+  image: 
+    name: ${CI_REGISTRY_IMAGE}/$DOCKER_FPM_IMAGE_NAME:$DOCKER_FPM_IMAGE_TAG
+    entrypoint: ["/bin/bash"]
+  variables:
+    BRANCH_NAME: $CI_COMMIT_REF_NAME
+    COMMIT_NAME: $CI_COMMIT_REF_SLUG
+    SELENIUM_HOST: selenium-standalone-firefox
+  dependencies: [] # No artifacts required
+  before_script:
+    - export COMPOSER_HOME=$(pwd)/metager/.composer
+  script:
+    # Install Dev Dependencies
+    - cd metager
+    - cp $ENV_PRODUCTION .env
+    - composer install
+    - php artisan optimize
+    - php artisan test --without-tty
+  cache:
+    paths:
+      - metager/.composer/
+  except:
+    refs: 
+      - master
\ No newline at end of file
diff --git a/.gitlab/deployment_scripts/cleanup_tags_non_revision.sh b/.gitlab/deployment_scripts/cleanup_tags_non_revision.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3e688b02e9434866ebd6d02704dd88d33bffc6b5
--- /dev/null
+++ b/.gitlab/deployment_scripts/cleanup_tags_non_revision.sh
@@ -0,0 +1,112 @@
+#!/bin/bash
+
+set -e
+
+# Get All existing tags for the fpm repo
+echo "Fetching existing fpm tags..."
+declare -A existing_tags_fpm
+get_tags_url=$CI_API_V4_URL/projects/$CI_PROJECT_ID/registry/repositories/$FPM_REPOSITORY_ID/tags
+page=1
+counter=1
+while [[ "$page" != "" && $counter -le 50 ]]
+do
+    tags=$(curl --fail --silent -D headers.txt "${get_tags_url}?page=$page" | jq -r ".[][\"name\"]")
+    for tag in $tags
+    do
+        if [[ $tag = ${DOCKER_IMAGE_TAG_PREFIX}-* && "$tag" != $DOCKER_IMAGE_TAG_PREFIX && $tag != $DOCKER_FPM_IMAGE_TAG ]]
+        then
+            existing_tags_fpm[$tag]=1
+        fi
+    done
+    while read header
+    do
+        header=$(echo $header | sed -r 's/\s+//g')
+        key=$(echo $header | cut -d':' -f1 )
+        value=$(echo $header | cut -d':' -f2 )
+        case "$key" in
+            x-next-page)
+                page="$value"
+                sleep 1
+                ;;
+        esac
+    done < headers.txt
+    counter=$((counter + 1))
+done
+echo "Got ${#existing_tags_fpm[@]} tags."
+echo ""
+
+# Get All existing tags for the nginx repo
+echo "Fetching existing nginx tags..."
+declare -A existing_tags_nginx
+get_tags_url=$CI_API_V4_URL/projects/$CI_PROJECT_ID/registry/repositories/$NGINX_REPOSITORY_ID/tags
+page=1
+counter=1
+while [[ "$page" != "" && $counter -le 50 ]]
+do
+    tags=$(curl --fail --silent -D headers.txt "${get_tags_url}?page=$page" | jq -r ".[][\"name\"]")
+    for tag in $tags
+    do
+        if [[ $tag = ${DOCKER_IMAGE_TAG_PREFIX}-* && "$tag" != $DOCKER_IMAGE_TAG_PREFIX && $tag != $DOCKER_NGINX_IMAGE_TAG ]]
+        then
+            existing_tags_nginx[$tag]=1
+        fi
+    done
+    while read header
+    do
+        header=$(echo $header | sed -r 's/\s+//g')
+        key=$(echo $header | cut -d':' -f1 )
+        value=$(echo $header | cut -d':' -f2 )
+        case "$key" in
+            x-next-page)
+                page="$value"
+                sleep 1
+                ;;
+        esac
+    done < headers.txt
+    counter=$((counter + 1))
+done
+echo "Got ${#existing_tags_nginx[@]} tags."
+echo ""
+
+# Get List of existing revisions
+echo "Fetching Tags from helm revision history to not be deleted..."
+declare -A revision_tags_fpm
+declare -A revision_tags_nginx
+helm_release_revisions=$(helm -n $KUBE_NAMESPACE history $HELM_RELEASE_NAME -o json | jq -r '.[]["revision"]')
+for revision in $helm_release_revisions
+do
+    revision_values=$(helm -n $KUBE_NAMESPACE get values $HELM_RELEASE_NAME --revision=$revision -o json | jq -r '.')
+    revision_tags_fpm[$(echo $revision_values | jq -r '.image.fpm.tag')]=1
+    revision_tags_nginx[$(echo $revision_values | jq -r '.image.nginx.tag')]=1
+done
+echo "Got ${#revision_tags_fpm[@]} tags for fpm."
+echo ${!revision_tags_fpm[@]}
+echo ""
+echo "Got ${#revision_tags_nginx[@]} tags for nginx."
+echo ${!revision_tags_nginx[@]}
+echo ""
+
+# Delete FPM Tags that are in no revision
+echo "Deleting unused FPM Tags..."
+for fpm_tag in ${!existing_tags_fpm[@]}
+do
+    if [[ ! -v revision_tags_fpm["$fpm_tag"] ]]
+    then
+        echo $fpm_tag
+        curl --fail --silent -X DELETE -H "JOB-TOKEN: $CI_JOB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/registry/repositories/$FPM_REPOSITORY_ID/tags/$fpm_tag"
+        echo ""
+    fi
+done
+echo ""
+
+# Delete NGINX Tags that are in no revision
+echo "Deleting unused NGINX Tags..."
+for nginx_tag in ${!existing_tags_nginx[@]}
+do
+    if [[ ! -v revision_tags_nginx["$nginx_tag"] ]]
+    then
+        echo $nginx_tag
+        curl --fail --silent -X DELETE -H "JOB-TOKEN: $CI_JOB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/registry/repositories/$NGINX_REPOSITORY_ID/tags/$nginx_tag"
+        echo ""
+    fi
+done
\ No newline at end of file
diff --git a/.gitlab/deployment_scripts/cleanup_tags_revision.sh b/.gitlab/deployment_scripts/cleanup_tags_revision.sh
new file mode 100755
index 0000000000000000000000000000000000000000..7af0024ef981bb65b22bbf916c168555650cb05b
--- /dev/null
+++ b/.gitlab/deployment_scripts/cleanup_tags_revision.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+# Call script with KEEP_N variable set to specify the amount of releases to keep
+
+helm -n $KUBE_NAMESPACE history $HELM_RELEASE_NAME
+if [ $? -ne 0 ]
+then
+  echo "Release does not exist yet. Nothing to cleanup!"
+  exit 0
+fi
+
+set -e
+
+revision_count=$(helm -n $KUBE_NAMESPACE history $HELM_RELEASE_NAME -o json | jq -r '. | length')
+
+# Get List of revisions to expire (delete the image tags)
+end_index=$(($KEEP_N > $revision_count ? 0 : $revision_count-$KEEP_N))
+expired_revisions=$(helm -n $KUBE_NAMESPACE history $HELM_RELEASE_NAME -o json | jq -r ".[0:$end_index][][\"revision\"]")
+
+# Loop through those revisions
+declare -A expired_fpm_tags
+declare -A expired_nginx_tags
+for revision in $expired_revisions
+do
+    # Get Values for this revision
+    revision_values=$(helm -n $KUBE_NAMESPACE get values $HELM_RELEASE_NAME --revision=$revision -ojson)
+    # Get Image Tags for this revision
+    revision_fpm_tag=$(echo $revision_values | jq -r '.image.fpm.tag')
+    revision_nginx_tag=$(echo $revision_values | jq -r '.image.nginx.tag')
+
+    # Add Tags to the arrays
+    if [[ $revision_fpm_tag = ${DOCKER_IMAGE_TAG_PREFIX}-* ]]
+    then
+        expired_fpm_tags[$revision_fpm_tag]=0
+        expired_nginx_tags[$revision_nginx_tag]=0
+    fi
+done
+
+# Delete all gathered fpm tags
+for fpm_tag in ${!expired_fpm_tags[@]}
+do
+    echo "Deleting fpm tag $fpm_tag"
+    curl --fail --silent -X DELETE -H "JOB-TOKEN: $CI_JOB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/registry/repositories/$FPM_REPOSITORY_ID/tags/$fpm_tag"
+    echo ""
+done
+# Delete all gathered nginx tags
+for nginx_tag in ${!expired_nginx_tags[@]}
+do
+    echo "Deleting nginx tag $nginx_tag"
+    curl --fail --silent -X DELETE -H "JOB-TOKEN: $CI_JOB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/registry/repositories/$NGINX_REPOSITORY_ID/tags/$nginx_tag"
+    echo ""
+done
\ No newline at end of file
diff --git a/.gitlab/deployment_scripts/headers.txt b/.gitlab/deployment_scripts/headers.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a2a6cad3d09bfebc4ce845ca70ba448271259886
--- /dev/null
+++ b/.gitlab/deployment_scripts/headers.txt
@@ -0,0 +1,20 @@
+HTTP/2 200 
+date: Thu, 12 May 2022 12:34:02 GMT
+content-type: application/json
+cache-control: max-age=0, private, must-revalidate
+etag: W/"fc941e436585c4860547c3da341029d7"
+link: <https://gitlab.metager.de/api/v4/projects/2/registry/repositories/416/tags?id=2&page=1&per_page=20&repository_id=416>; rel="prev", <https://gitlab.metager.de/api/v4/projects/2/registry/repositories/416/tags?id=2&page=1&per_page=20&repository_id=416>; rel="first", <https://gitlab.metager.de/api/v4/projects/2/registry/repositories/416/tags?id=2&page=2&per_page=20&repository_id=416>; rel="last"
+vary: Origin
+x-content-type-options: nosniff
+x-frame-options: SAMEORIGIN
+x-next-page: 
+x-page: 2
+x-per-page: 20
+x-prev-page: 1
+x-request-id: 01G2W461RMNAYQ5MNT1E4A8J8Y
+x-runtime: 0.190039
+x-total: 39
+x-total-pages: 2
+strict-transport-security: max-age=15724800
+permissions-policy: interest-cohort=()
+
diff --git a/.gitlab/deployment_scripts/update_deployment.sh b/.gitlab/deployment_scripts/update_deployment.sh
new file mode 100755
index 0000000000000000000000000000000000000000..cf8e586b78b1d9174a09c6677ec58e19bf20cad1
--- /dev/null
+++ b/.gitlab/deployment_scripts/update_deployment.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+helm -n $KUBE_NAMESPACE upgrade --install \
+    $HELM_RELEASE_NAME \
+    chart/ \
+    -f $DEPLOYMENT_HELM_VALUES \
+    --set environment=$APP_ENV \
+    --set ingress.hosts[0].host="$DEPLOYMENT_URL" \
+    --set image.fpm.tag=$DOCKER_FPM_IMAGE_TAG \
+    --set image.nginx.tag=$DOCKER_NGINX_IMAGE_TAG \
+    --set app_url=$APP_URL \
+    --wait
\ No newline at end of file
diff --git a/.gitlab/deployment_scripts/update_secret.sh b/.gitlab/deployment_scripts/update_secret.sh
new file mode 100755
index 0000000000000000000000000000000000000000..dfdc5f3b5b60aa691a2a1ba378f9a22ff279fea3
--- /dev/null
+++ b/.gitlab/deployment_scripts/update_secret.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+set -e
+
+# Create/Update the secret
+kubectl -n $KUBE_NAMESPACE create secret generic $CI_COMMIT_REF_SLUG \
+  --from-file=${ENV_PRODUCTION} \
+  --from-file=${SUMAS} \
+  --from-file=${SUMASEN} \
+  --from-file=${ADBLACKLIST_DOMAINS} \
+  --from-file=${ADBLACKLIST_URL} \
+  --from-file=${BLACKLIST_DESCRIPTION_URL} \
+  --from-file=${BLACKLIST_DOMAINS} \
+  --from-file=${BLACKLIST_URL} \
+  --from-file=${USERSEEDER} \
+  --dry-run=client \
+  --save-config \
+  -o yaml | \
+  kubectl apply -f -
diff --git a/.gitlab/development-values.yaml b/.gitlab/development-values.yaml
deleted file mode 100644
index 0134f3a2e36192efd38e2c8fd3a442bdb512ecf4..0000000000000000000000000000000000000000
--- a/.gitlab/development-values.yaml
+++ /dev/null
@@ -1,69 +0,0 @@
-postgresql:
-  enabled: false
-service:
-  externalPort: 80
-  internalPort: 8080
-hpa:
-  enabled: true
-  minReplicas: 1
-  maxReplicas: 5
-livenessProbe:
-  initialDelaySeconds: 0
-readinessProbe:
-  initialDelaySeconds: 0
-resourcesPhpfpm: 
-  requests:
-    cpu: 500m
-    memory: 500M
-  limits:
-resourcesNginx: 
-  requests:
-    cpu: 100m
-    memory: 100M
-  limits:
-resourcesRedis: 
-  requests:
-    cpu: 100m
-    memory: 1Gi
-  limits:
-resourcesFetcher: 
-  requests:
-    cpu: 500m
-    memory: 100M
-  limits:
-resourcesScheduler: 
-  requests:
-    cpu: 100m
-    memory: 100M
-  limits:
-resources:
-  requests:
-    cpu: 500m
-    memory: 500M
-podDisruptionBudget:
-  enabled: false
-  minAvailable: 1
-  maxUnavailable:
-podAnnotations:
-  prometheus.io/scrape: "true"
-  prometheus.io/path: /metrics
-  prometheus.io/port: "80"
-deploymentApiVersion: apps/v1
-ingress:
-  tls:
-    enabled: true
-    acme: false
-    secretName: "metager-tls"
-  annotations:
-    nginx.ingress.kubernetes.io/client-body-buffer-size: "30m"
-    nginx.ingress.kubernetes.io/proxy-body-size: "30m"
-    nginx.ingress.kubernetes.io/configuration-snippet: |
-      more_set_headers "Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; script-src-elem 'self' 'unsafe-inline'; script-src-attr 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; style-src-elem 'self' 'unsafe-inline'; style-src-attr 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; media-src; object-src; prefetch-src; child-src; frame-src 'self'; worker-src; frame-ancestors 'self' https://scripts.zdv.uni-mainz.de; form-action 'self' www.paypal.com; base-uri; manifest-src; plugin-types; report-uri; report-to";
-      more_set_headers "X-Frame-Options: sameorigin";
-      more_set_headers "X-Content-Type-Options: nosniff";
-      more_set_headers "ReferrerPolicy: origin";
-      more_set_headers "X-XSS-Protection: 1; mode=block";
-      more_set_headers "Permissions-Policy: interest-cohort=()";
-      if ($arg_out = "results-with-style") {
-        more_set_headers "X-Frame-Options: allow-from https://scripts.zdv.uni-mainz.de/";
-      }
diff --git a/.gitlab/development.yaml b/.gitlab/development.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..6fe3606f67485a5c7ca3abcb59e56c939042effb
--- /dev/null
+++ b/.gitlab/development.yaml
@@ -0,0 +1,13 @@
+ingress:
+  annotations:
+    kubernetes.io/tls-acme: "true"
+    cert-manager.io/cluster-issuer: letsencrypt-prod
+  hosts:
+    - host: metager3.de
+      paths:
+        - path: /
+          pathType: ImplementationSpecific
+  tls:
+    - hosts:
+        - metager3.de
+      secretName: metager-tls
\ No newline at end of file
diff --git a/.gitlab/production-values.yaml b/.gitlab/production-values.yaml
deleted file mode 100644
index 7aa0759b98602eb91c2ff7bd68fa4423701822ec..0000000000000000000000000000000000000000
--- a/.gitlab/production-values.yaml
+++ /dev/null
@@ -1,69 +0,0 @@
-postgresql:
-  enabled: false
-service:
-  externalPort: 80
-  internalPort: 8080
-hpa:
-  enabled: true
-  minReplicas: 3
-  maxReplicas: 100
-podDisruptionBudget:
-  enabled: true
-  minAvailable: 1
-  maxUnavailable:
-prometheus:
-  metrics: true
-livenessProbe:
-  initialDelaySeconds: 0
-readinessProbe:
-  initialDelaySeconds: 0
-resources:
-  requests:
-  limits:
-resourcesPhpfpm: 
-  requests:
-    cpu: 500m
-    memory: 500M
-  limits:
-resourcesNginx: 
-  requests:
-    cpu: 100m
-    memory: 100M
-  limits:
-resourcesRedis: 
-  requests:
-    cpu: 100m
-    memory: 1Gi
-  limits:
-resourcesFetcher: 
-  requests:
-    cpu: 500m
-    memory: 100M
-  limits:
-resourcesScheduler: 
-  requests:
-    cpu: 100m
-    memory: 100M
-  limits:
-resources:
-  requests:
-    cpu: 500m
-    memory: 500M
-ingress:
-  tls:
-    enabled: true
-    acme: false
-    secretName: "metager-tls"
-  annotations:
-    nginx.ingress.kubernetes.io/client-body-buffer-size: "30m"
-    nginx.ingress.kubernetes.io/proxy-body-size: "30m"
-    nginx.ingress.kubernetes.io/configuration-snippet: |
-      more_set_headers "Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; script-src-elem 'self' 'unsafe-inline'; script-src-attr 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; style-src-elem 'self' 'unsafe-inline'; style-src-attr 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; media-src; object-src; prefetch-src; child-src; frame-src 'self'; worker-src; frame-ancestors 'self' https://scripts.zdv.uni-mainz.de; form-action 'self' www.paypal.com; base-uri; manifest-src; plugin-types; report-uri; report-to";
-      more_set_headers "X-Frame-Options: sameorigin";
-      more_set_headers "X-Content-Type-Options: nosniff";
-      more_set_headers "ReferrerPolicy: origin";
-      more_set_headers "X-XSS-Protection: 1; mode=block";
-      more_set_headers "Permissions-Policy: interest-cohort=()";
-      if ($arg_out = "results-with-style") {
-        more_set_headers "X-Frame-Options: allow-from https://scripts.zdv.uni-mainz.de/";
-      }
\ No newline at end of file
diff --git a/.gitlab/production.yaml b/.gitlab/production.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d0acaabb82dac5ae43a299ad15a9d3ceb4181348
--- /dev/null
+++ b/.gitlab/production.yaml
@@ -0,0 +1,26 @@
+ingress:
+  annotations:
+    kubernetes.io/tls-acme: "true"
+    cert-manager.io/cluster-issuer: letsencrypt-prod
+  hosts:
+    - host: metager.de
+      paths:
+        - path: /
+          pathType: ImplementationSpecific
+    - host: metager.org
+      paths:
+        - path: /
+          pathType: ImplementationSpecific
+    - host: metager.es
+      paths:
+        - path: /
+          pathType: ImplementationSpecific
+  tls:
+    - hosts:
+        - metager.de
+        - metager.org
+        - metager.es
+      secretName: metager-tls
+
+autoscaling:
+  maxReplicas: 100
\ No newline at end of file
diff --git a/.gitlab/review-apps-values.yaml b/.gitlab/review-apps-values.yaml
deleted file mode 100644
index 42a7071967854677da7324e70aabe775bee503a2..0000000000000000000000000000000000000000
--- a/.gitlab/review-apps-values.yaml
+++ /dev/null
@@ -1,49 +0,0 @@
-postgresql:
-    enabled: false
-hpa: 
-  enabled: false
-livenessProbe:
-  initialDelaySeconds: 0
-readinessProbe:
-  initialDelaySeconds: 0
-resources:
-  requests:
-  limits:
-ingress: 
-  annotations: 
-    kubernetes.io/tls-acme: "false"
-    nginx.ingress.kubernetes.io/ssl-redirect: "false"
-    nginx.ingress.kubernetes.io/client-body-buffer-size: "30m"
-    nginx.ingress.kubernetes.io/proxy-body-size: "30m"
-    nginx.ingress.kubernetes.io/configuration-snippet: |
-      more_set_headers "Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; script-src-elem 'self' 'unsafe-inline'; script-src-attr 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; style-src-elem 'self' 'unsafe-inline'; style-src-attr 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; media-src; object-src; prefetch-src; child-src; frame-src 'self'; worker-src; frame-ancestors 'self' https://scripts.zdv.uni-mainz.de; form-action 'self' www.paypal.com; base-uri; manifest-src; plugin-types; report-uri; report-to";
-      more_set_headers "X-Frame-Options: sameorigin";
-      more_set_headers "X-Content-Type-Options: nosniff";
-      more_set_headers "ReferrerPolicy: origin";
-      more_set_headers "X-XSS-Protection: 1; mode=block";
-      more_set_headers "Permissions-Policy: interest-cohort=()";
-      if ($arg_out = "results-with-style") {
-        more_set_headers "X-Frame-Options: allow-from https://scripts.zdv.uni-mainz.de/";
-      }
-  tls: 
-    enabled: false
-service: 
-  commonName: ""
-  externalPort: 80
-  internalPort: 8080
-deploymentApiVersion: apps/v1
-resourcesPhpfpm: 
-  requests:
-  limits:
-resourcesNginx: 
-  requests:
-  limits:
-resourcesRedis: 
-  requests:
-  limits:
-resourcesFetcher: 
-  requests:
-  limits:
-resourcesScheduler: 
-  requests:
-  limits:
diff --git a/.gitlab/review.yaml b/.gitlab/review.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..870ff001581d3c79d57e18274cb463f8362b1fb2
--- /dev/null
+++ b/.gitlab/review.yaml
@@ -0,0 +1,12 @@
+ingress:
+  annotations:
+    kubernetes.io/tls-acme: "true"
+    cert-manager.io/cluster-issuer: letsencrypt-prod
+  hosts:
+    - paths:
+        - path: /
+          pathType: ImplementationSpecific
+  tls:
+    - hosts:
+        - "*.review.metager.de"
+      secretName: review-tls
\ No newline at end of file
diff --git a/.settings/.gitignore b/.settings/.gitignore
deleted file mode 100644
index f0f7c9f22d715ac10ca5a978ec67434a7183af5d..0000000000000000000000000000000000000000
--- a/.settings/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/org.eclipse.core.resources.prefs
-/org.eclipse.wst.validation.prefs
diff --git a/.vscode/launch.json b/.vscode/launch.json
index eddd6068e8fa0bb943b3ccf2336eba7bb1609510..2910de9f22f1ed8514ae0b0368b0edfbf4c69b9f 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -10,7 +10,7 @@
             "request": "launch",
             "port": 9003,
             "pathMappings": {
-                "/html": "${workspaceRoot}"
+                "/metager/metager_app": "${workspaceRoot}/metager"
             }
         },
         {
@@ -21,7 +21,7 @@
             "program": "${file}",
             "cwd": "${fileDirname}",
             "pathMappings": {
-                "/html": "${workspaceRoot}"
+                "/metager/metager_app": "${workspaceRoot}/metager"
             }
         }
     ]
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..2059b1ea1178346b73209ed29d4b265cf98edf67
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,6 @@
+{
+    "php.validate.enable": false,
+    "docker-linter.php.enable": true,
+    "docker-linter.php.container": "metager_fpm_1",
+    "docker-linter.php.machine": ""
+}
\ No newline at end of file
diff --git a/DockerfileDev b/DockerfileDev
deleted file mode 100644
index fec1a15f334b648c9f5f4a560a6f64d3fddb528c..0000000000000000000000000000000000000000
--- a/DockerfileDev
+++ /dev/null
@@ -1,73 +0,0 @@
-FROM debian:10
-
-# Install System Components
-RUN apt update \
-    && apt install -y \
-    nginx \
-    tzdata \
-    cron \
-    lsb-release \
-    apt-transport-https \
-    curl \
-    zip
-
-RUN curl -o /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg \
-    && echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list
-
-# Install PHP Components
-RUN apt update \
-    && apt install -y \
-    php7.4 \
-    php7.4-xml \
-    php7.4-fpm \
-    php7.4-common \
-    php7.4-curl \
-    php7.4-mbstring \
-    php7.4-sqlite3 \
-    php7.4-mysql \
-    php7.4-sqlite \
-    php7.4-zip \
-    php7.4-redis \
-    php7.4-gd \
-    php7.4-json \
-    php7.4-xdebug
-
-WORKDIR /html
-
-RUN mkdir -p /run/php && \
-    sed -i 's/error_log = \/var\/log\/php7.4-fpm.log/error_log = \/dev\/stderr/g' /etc/php/7.4/fpm/php-fpm.conf && \
-    sed -i 's/;daemonize = yes/daemonize = no/g' /etc/php/7.4/fpm/php-fpm.conf && \
-    sed -i 's/listen = \/run\/php\/php7.4-fpm.sock/listen = 9000/g' /etc/php/7.4/fpm/pool.d/www.conf && \
-    sed -i 's/;request_terminate_timeout = 0/request_terminate_timeout = 30/g' /etc/php/7.4/fpm/pool.d/www.conf && \
-    sed -i 's/;request_terminate_timeout_track_finished = no/request_terminate_timeout_track_finished = yes/g' /etc/php/7.4/fpm/pool.d/www.conf && \
-    sed -i 's/;decorate_workers_output = no/decorate_workers_output = no/g' /etc/php/7.4/fpm/pool.d/www.conf && \
-    sed -i 's/;catch_workers_output = yes/catch_workers_output = yes/g' /etc/php/7.4/fpm/pool.d/www.conf && \
-    sed -i 's/pm.max_children = 5/pm.max_children = 1024/g' /etc/php/7.4/fpm/pool.d/www.conf && \
-    sed -i 's/pm.start_servers = 2/pm.start_servers = 50/g' /etc/php/7.4/fpm/pool.d/www.conf && \
-    sed -i 's/pm.min_spare_servers = 1/pm.min_spare_servers = 5/g' /etc/php/7.4/fpm/pool.d/www.conf && \
-    sed -i 's/pm.max_spare_servers = 3/pm.max_spare_servers = 50/g' /etc/php/7.4/fpm/pool.d/www.conf && \
-    sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/7.4/fpm/php.ini && \
-    sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 30M/g' /etc/php/7.4/fpm/php.ini && \
-    sed -i 's/post_max_size = 8M/post_max_size = 30M/g' /etc/php/7.4/fpm/php.ini && \
-    echo "xdebug.mode = debug" >> /etc/php/7.4/fpm/conf.d/20-xdebug.ini && \
-    echo "xdebug.start_with_request = yes" >> /etc/php/7.4/fpm/conf.d/20-xdebug.ini && \
-    echo "xdebug.discover_client_host = true" >> /etc/php/7.4/fpm/conf.d/20-xdebug.ini && \
-    echo "xdebug.idekey=VSCODE" >> /etc/php/7.4/fpm/conf.d/20-xdebug.ini && \
-    cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime && \
-    echo "Europe/Berlin" > /etc/timezone && \
-    (crontab -l ; echo "* * * * * php /html/artisan schedule:run >> /dev/null 2>&1") | crontab -
-
-WORKDIR /html
-EXPOSE 80
-
-COPY ./helpers/installComposer.sh /usr/bin/installComposer
-
-RUN chmod +x /usr/bin/installComposer && \
-    /usr/bin/installComposer && \
-    rm /usr/bin/installComposer
-
-CMD chown -R root:www-data storage/logs/metager bootstrap/cache && \
-    chmod -R g+w storage/logs/metager bootstrap/cache && \
-    cron -L /dev/stdout && \
-    composer install && \
-    php-fpm7.4
diff --git a/DockerfileDev.ignore b/DockerfileDev.ignore
deleted file mode 100644
index f0af6630a69016151e561981767bbe24cd44c0d9..0000000000000000000000000000000000000000
--- a/DockerfileDev.ignore
+++ /dev/null
@@ -1,6 +0,0 @@
-README.md
-CHANGELOG.md
-vendor/*
-node_modules/*
-storage/logs/*
-helpers/*
\ No newline at end of file
diff --git a/build/fpm/Dockerfile b/build/fpm/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..5e3d296ddaa91247bf3b8748d91665b916d2ad22
--- /dev/null
+++ b/build/fpm/Dockerfile
@@ -0,0 +1,75 @@
+FROM php:7.4-fpm as composer
+
+# Add Composer installation to image
+ADD build/fpm/installcomposer.sh /usr/bin/installcomposer
+RUN /usr/bin/installcomposer && \
+    rm /usr/bin/installcomposer
+
+# UID and GID this image will run under
+ARG UID=1000
+ARG GID=1000
+
+# Create User
+# Using image as non-root
+RUN groupadd -g ${GID} metager && \
+    useradd -b /home/metager -g ${GID} -u ${UID} -M -s /bin/bash metager && \
+    mkdir -p /home/metager &&\
+    chown ${UID}:${GID} /home/metager
+
+# Install required php modules
+RUN apt update && apt install -y \
+    libzip-dev \
+    libpng-dev && \
+    docker-php-ext-install zip gd pcntl pdo_mysql && \
+    yes '' | pecl install redis-5.3.7 xdebug-3.1.4 && \
+    docker-php-ext-enable redis && \
+    docker-php-ext-enable --ini-name=xdebug.ini xdebug
+
+# Add working dir for the code base
+RUN mkdir -p /metager/metager_app && \
+    chown -R metager:metager /metager
+WORKDIR /metager/metager_app
+
+# Add composer Cache Directory
+RUN mkdir /composer_cache && \
+    chown metager:metager /composer_cache
+VOLUME [ "/composer_cache" ]
+
+FROM composer as development
+
+# Add General Customizations to php.ini
+ADD build/fpm/configuration/php/custom.ini $PHP_INI_DIR/conf.d/custom.ini
+
+# Configure PHP (use development configuration as base)
+RUN mv $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini
+# Add Development Customizations
+ADD build/fpm/configuration/php/development.ini $PHP_INI_DIR/conf.d/development.ini
+
+# Configure FPM
+ADD build/fpm/configuration/fpm/www_01_development.conf $PHP_INI_DIR/../php-fpm.d/www_01.conf
+
+ADD build/fpm/entrypoint/validate_laravel.sh /usr/local/bin/validate_laravel
+ADD build/fpm/entrypoint/entrypoint_development.sh /usr/local/bin/entrypoint
+
+USER metager:metager
+ENTRYPOINT [ "entrypoint" ]
+
+FROM development as production
+
+USER root:root
+
+# Disable xdebug extension and enable opcache
+RUN rm $PHP_INI_DIR/conf.d/xdebug.ini && \
+    docker-php-ext-install --ini-name=opcache.ini opcache
+
+# Reconfigure PHP with production values
+RUN mv $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini
+# Remove development php.ini
+RUN rm $PHP_INI_DIR/conf.d/development.ini
+# Add production php.ini
+ADD build/fpm/configuration/php/production.ini $PHP_INI_DIR/conf.d/production.ini
+ADD build/fpm/entrypoint/entrypoint_production.sh /usr/local/bin/entrypoint
+
+USER metager:metager
+
+ADD --chown=metager:metager metager /metager/metager_app
\ No newline at end of file
diff --git a/build/fpm/configuration/fpm/www_01_development.conf b/build/fpm/configuration/fpm/www_01_development.conf
new file mode 100644
index 0000000000000000000000000000000000000000..6acb40d358a09b2e852df4a5466345fd5e0ebea5
--- /dev/null
+++ b/build/fpm/configuration/fpm/www_01_development.conf
@@ -0,0 +1,4 @@
+; This File holds custom www pool configurations for development deployments
+[www]
+; Do not limit request length
+request_terminate_timeout = 0
diff --git a/build/fpm/configuration/fpm/www_01_production.conf b/build/fpm/configuration/fpm/www_01_production.conf
new file mode 100644
index 0000000000000000000000000000000000000000..4e00b0a696a23b8378c13f57398460c2787aa99a
--- /dev/null
+++ b/build/fpm/configuration/fpm/www_01_production.conf
@@ -0,0 +1,5 @@
+; This File holds custom www pool configurations
+[www]
+; Limit requests to 30 seconds
+request_terminate_timeout = 30
+
diff --git a/build/fpm/configuration/php/custom.ini b/build/fpm/configuration/php/custom.ini
new file mode 100644
index 0000000000000000000000000000000000000000..a14fef8ba5d21785d1d6837b0f867f8654ffaccd
--- /dev/null
+++ b/build/fpm/configuration/php/custom.ini
@@ -0,0 +1,2 @@
+upload_max_filesize = 30M
+post_max_size = 30M
\ No newline at end of file
diff --git a/build/fpm/configuration/php/development.ini b/build/fpm/configuration/php/development.ini
new file mode 100644
index 0000000000000000000000000000000000000000..c06cc5178a4861f7f0e2060fafb55718442711a4
--- /dev/null
+++ b/build/fpm/configuration/php/development.ini
@@ -0,0 +1,12 @@
+; Expose php in development
+expose_php = On
+
+; Enable Xdebug
+xdebug.mode = debug
+xdebug.log_level= 0
+xdebug.start_with_request = yes
+xdebug.discover_client_host = true
+xdebug.idekey=VSCODE
+
+; OP cache
+opcache.enable=0
\ No newline at end of file
diff --git a/build/fpm/configuration/php/production.ini b/build/fpm/configuration/php/production.ini
new file mode 100644
index 0000000000000000000000000000000000000000..64b826bfc7d78ca328f983023e15bf55bbd5e8fb
--- /dev/null
+++ b/build/fpm/configuration/php/production.ini
@@ -0,0 +1,11 @@
+; Do not expose php in production
+expose_php = Off
+
+; OP cache
+opcache.enable=1
+opcache.memory_consumption=128
+opcache.interned_strings_buffer=8
+opcache.max_accelerated_files=10000
+opcache.max_wasted_percentage=5
+opcache.validate_timestamps=1
+opcache.revalidate_freq=300
\ No newline at end of file
diff --git a/build/fpm/entrypoint/entrypoint_development.sh b/build/fpm/entrypoint/entrypoint_development.sh
new file mode 100755
index 0000000000000000000000000000000000000000..5659d893de845fba89486d37ba140b83d7973b14
--- /dev/null
+++ b/build/fpm/entrypoint/entrypoint_development.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+set -e
+
+validate_laravel
+
+if [ ! -f .env ];
+then
+  cp .env.example .env
+fi
+
+sed -i 's/^APP_ENV=.*/APP_ENV=local/g' .env; 
+
+# Make sure App Key is set
+php artisan key:generate
+
+php artisan wait:db
+php artisan migrate
+php artisan db:seed
+
+docker-php-entrypoint php-fpm
\ No newline at end of file
diff --git a/build/fpm/entrypoint/entrypoint_production.sh b/build/fpm/entrypoint/entrypoint_production.sh
new file mode 100755
index 0000000000000000000000000000000000000000..b8930b5b4903c57f56e5c90e12a32bb5e9367d2e
--- /dev/null
+++ b/build/fpm/entrypoint/entrypoint_production.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+set -e
+
+validate_laravel
+
+# Production version will have the .env file mounted at /home/metager/.env
+if [ -f /home/metager/.env ];
+then
+  cp /home/metager/.env .env
+fi
+
+# Create the useragents table in the sqlite database
+php artisan migrate:refresh --path=database/migrations/2019_10_15_103139_create_user_agents_table.php
+
+php artisan optimize
+php artisan route:trans:cache
+
+php artisan spam:load
+php artisan load:affiliate-blacklist
+
+docker-php-entrypoint php-fpm
\ No newline at end of file
diff --git a/build/fpm/entrypoint/validate_laravel.sh b/build/fpm/entrypoint/validate_laravel.sh
new file mode 100755
index 0000000000000000000000000000000000000000..dff1cb2409a92c9f624c8ce01d3787033e46bd29
--- /dev/null
+++ b/build/fpm/entrypoint/validate_laravel.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+set -e
+
+BASE_DIR=/metager/metager_app
+
+if [ ! -f "$BASE_DIR/config/sumas.json" ]; then
+    cp $BASE_DIR/config/sumas.json.example $BASE_DIR/config/sumas.json
+fi
+
+if [ ! -f "$BASE_DIR/config/sumasEn.json" ]; then
+    cp $BASE_DIR/config/sumas.json.example $BASE_DIR/config/sumasEn.json
+fi
+
+if [ ! -f "$BASE_DIR/database/database.sqlite" ]; then
+    touch $BASE_DIR/database/database.sqlite
+fi
+
+if [ ! -d "$BASE_DIR/storage/logs/metager" ]; then
+    mkdir -p $BASE_DIR/storage/logs/metager
+fi
\ No newline at end of file
diff --git a/helpers/installComposer.sh b/build/fpm/installcomposer.sh
old mode 100644
new mode 100755
similarity index 97%
rename from helpers/installComposer.sh
rename to build/fpm/installcomposer.sh
index d9b78454d7eed6e4b2bf0e53dc4e1666010a7ff7..30b33e631e52f9981ccd340862e063111ae00d63
--- a/helpers/installComposer.sh
+++ b/build/fpm/installcomposer.sh
@@ -14,4 +14,4 @@ fi
 php composer-setup.php --install-dir=/usr/bin --filename=composer --quiet
 RESULT=$?
 rm composer-setup.php
-exit $RESULT
+exit $RESULT
\ No newline at end of file
diff --git a/build/nginx/Dockerfile b/build/nginx/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..a4d89d61b0a194a8c0bf51bbc9c481e23bd48dcf
--- /dev/null
+++ b/build/nginx/Dockerfile
@@ -0,0 +1,30 @@
+FROM nginx:1.21.6 as setup
+
+ARG UID=1000
+ARG GID=1000
+ARG USER_HOME=/metager
+
+# Create User
+RUN groupadd -g ${GID} metager && \
+    useradd -b $USER_HOME -g ${GID} -u ${UID} -M -s /bin/bash metager && \
+    mkdir -p $USER_HOME && \
+    mkdir ${USER_HOME}/nginx_tmp && \
+    mkdir ${USER_HOME}/metager_app && \
+    chown -R ${UID}:${GID} $USER_HOME
+
+WORKDIR ${USER_HOME}/metager_app
+
+FROM setup as development
+
+ADD build/nginx/configuration/nginx.conf /etc/nginx/nginx.conf
+ADD build/nginx/configuration/nginx-default-dev.conf /etc/nginx/conf.d/default.conf
+
+USER metager:metager
+
+FROM development as production
+
+USER root:root
+ADD build/nginx/configuration/nginx-default.conf /etc/nginx/conf.d/default.conf
+USER metager:metager
+
+ADD metager/public /metager/metager_app/public
\ No newline at end of file
diff --git a/config/nginx-default.conf b/build/nginx/configuration/nginx-default-dev.conf
similarity index 65%
rename from config/nginx-default.conf
rename to build/nginx/configuration/nginx-default-dev.conf
index b676c8da08f6d6767d39dc77b651ebb295fd9139..4760167a9ed7b08052e155eda9d917aad36a234f 100644
--- a/config/nginx-default.conf
+++ b/build/nginx/configuration/nginx-default-dev.conf
@@ -1,24 +1,36 @@
+resolver 127.0.0.11 valid=10s;
+
 server {
     listen       8080;
     server_name  localhost;
-    root   /html/public;
+    root   /metager/metager_app/public;
     index  index.php index.html index.htm;
 
     client_max_body_size 30M;
 
+    location /health-check/nginx { 
+        access_log off;
+        default_type text/plain;
+        return 200 "healthy\n";
+    }
+
     location / {
         try_files $uri $uri/ /index.php?$query_string;
     }
 
     location ~ \.php$ {
+        set $fpm_server fpm;
         try_files $uri /index.php =404;
         fastcgi_split_path_info ^(.+\.php)(/.+)$;
-        fastcgi_pass phpfpm:9000;
+        fastcgi_pass $fpm_server:9000;
         fastcgi_index index.php;
+        fastcgi_read_timeout 900;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
     }
 
+    #error_page  404              /404.html;
+
     # redirect server error pages to the static page /50x.html
     #
     error_page   500 502 503 504  /50x.html;
diff --git a/config/nginx-default-dev.conf b/build/nginx/configuration/nginx-default.conf
similarity index 77%
rename from config/nginx-default-dev.conf
rename to build/nginx/configuration/nginx-default.conf
index 7baa09880c8ef72e347c8b542e081adcc1275d8e..d6ab2a512f923b54836718bc19a5a4fa4305494c 100644
--- a/config/nginx-default-dev.conf
+++ b/build/nginx/configuration/nginx-default.conf
@@ -1,11 +1,17 @@
 server {
     listen       8080;
     server_name  localhost;
-    root   /html/public;
+    root   /metager/metager_app/public;
     index  index.php index.html index.htm;
 
     client_max_body_size 30M;
 
+    location /health-check/nginx { 
+        access_log off;
+        default_type text/plain;
+        return 200 "healthy\n";
+    }
+
     location / {
         try_files $uri $uri/ /index.php?$query_string;
     }
@@ -13,7 +19,7 @@ server {
     location ~ \.php$ {
         try_files $uri /index.php =404;
         fastcgi_split_path_info ^(.+\.php)(/.+)$;
-        fastcgi_pass phpfpm:9000;
+        fastcgi_pass localhost:9000;
         fastcgi_index index.php;
         fastcgi_read_timeout 900;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
diff --git a/config/nginx.conf b/build/nginx/configuration/nginx.conf
similarity index 66%
rename from config/nginx.conf
rename to build/nginx/configuration/nginx.conf
index 3f8cb5d05aa1a9b8e3f4d0ce63a7d1920ff318e1..cdffe4bb1704da78e06dc3c1104450a1b9a129f1 100644
--- a/config/nginx.conf
+++ b/build/nginx/configuration/nginx.conf
@@ -1,10 +1,7 @@
-#user  www-data;
 worker_processes  auto;
 
 error_log  /dev/stdout warn;
-# pid        /run/nginx.pid;
-
-daemon off;
+pid /metager/nginx_tmp/nginx.pid;
 
 events {
     worker_connections  1024;
@@ -12,6 +9,13 @@ events {
 
 
 http {
+    client_body_temp_path /metager/nginx_tmp/client_temp;
+    proxy_temp_path       /metager/nginx_tmp/proxy_temp_path;
+    fastcgi_temp_path     /metager/nginx_tmp/fastcgi_temp;
+    uwsgi_temp_path       /metager/nginx_tmp/uwsgi_temp;
+    scgi_temp_path        /metager/nginx_tmp/scgi_temp;
+
+
     include       /etc/nginx/mime.types;
     default_type  application/octet-stream;
 
@@ -22,8 +26,6 @@ http {
     access_log  /dev/null  main;
 
     sendfile        on;
-    #tcp_nopush     on;
-
     client_max_body_size 30M;
 
     keepalive_timeout  65;
diff --git a/chart/.helmignore b/chart/.helmignore
new file mode 100644
index 0000000000000000000000000000000000000000..0e8a0eb36f4ca2c939201c0d54b5d82a1ea34778
--- /dev/null
+++ b/chart/.helmignore
@@ -0,0 +1,23 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*.orig
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
diff --git a/chart/CONTRIBUTING.md b/chart/CONTRIBUTING.md
deleted file mode 100644
index 8300fb55e48e358b7c087c1c25f09dfc6034b08c..0000000000000000000000000000000000000000
--- a/chart/CONTRIBUTING.md
+++ /dev/null
@@ -1,57 +0,0 @@
-## Contributing
-
-Thank you for your interest in contributing to this GitLab project! We welcome
-all contributions. By participating in this project, you agree to abide by the
-[code of conduct](#code-of-conduct).
-
-
-## Developer Certificate of Origin + License
-
-By contributing to GitLab B.V., You accept and agree to the following terms and
-conditions for Your present and future Contributions submitted to GitLab B.V.
-Except for the license granted herein to GitLab B.V. and recipients of software
-distributed by GitLab B.V., You reserve all right, title, and interest in and to
-Your Contributions. All Contributions are subject to the following DCO + License
-terms.
-
-[DCO + License](https://gitlab.com/gitlab-org/dco/blob/master/README.md)
-
-_This notice should stay as the first item in the CONTRIBUTING.md file._
-
-## Code of conduct
-
-We want to create a welcoming environment for everyone who is interested
-in contributing. Please visit our [Code of Conduct
-page](https://about.gitlab.com/contributing/code-of-conduct) to learn
-more about our commitment to an open and welcoming environment.
-
-## Merge request guidelines
-
-Below are some guidelines for merge requests:
-
-- Any new configuration option should be documented in
-  the `Configuration` section in README.md.
-- For any template changes, we encourage a test case be added or
-  updated in the
-  [template tests](https://gitlab.com/gitlab-org/charts/auto-deploy-app/-/blob/master/test/template_test.go).
-
-### Working with the tests
-
-The tests are written in [Go](https://golang.org) (version 1.13 or later,
-with [modules enabled](https://golang.org/cmd/go/#hdr-Module_support)) using
-the [Terratest](https://github.com/gruntwork-io/terratest) library. To work
-on the tests, you need to have [Helm 2](https://v2.helm.sh/docs/) and
-[Go](https://golang.org) installed.
-
-To run the tests, run the following commands from the root of your copy of `auto-deploy-app`:
-
-```shell
-helm repo add stable https://charts.helm.sh/stable # required only once
-helm dependency build .               # required any time the dependencies change
-cd test
-GO111MODULE=auto go test ./...        # required for every change to the tests or the template
-```
-
-### Windows users
-
-Some of the dependencies might not be available on Windows (e.g., `github.com/sirupsen/logrus/hooks/syslog`). Therefore we recommend running tests on docker, vagrant boxes or similar virtualization tools.
\ No newline at end of file
diff --git a/chart/Chart.yaml b/chart/Chart.yaml
index ea0a88b30ef7d31997d8d7ba9e23d919db0d54d7..df2d97f9b049022bd3957fef3181086cec8409b9 100644
--- a/chart/Chart.yaml
+++ b/chart/Chart.yaml
@@ -1,5 +1,24 @@
-apiVersion: v1
-description: GitLab's Auto-deploy Helm Chart
-name: auto-deploy-app
-version: 2.11.3
-icon: https://gitlab.com/gitlab-com/gitlab-artwork/raw/master/logo/logo-square.png
+apiVersion: v2
+name: chart
+description: A Helm chart for Kubernetes
+
+# A chart can be either an 'application' or a 'library' chart.
+#
+# Application charts are a collection of templates that can be packaged into versioned archives
+# to be deployed.
+#
+# Library charts provide useful utilities or functions for the chart developer. They're included as
+# a dependency of application charts to inject those utilities and functions into the rendering
+# pipeline. Library charts do not define any templates and therefore cannot be deployed.
+type: application
+
+# This is the chart version. This version number should be incremented each time you make changes
+# to the chart and its templates, including the app version.
+# Versions are expected to follow Semantic Versioning (https://semver.org/)
+version: 0.1.0
+
+# This is the version number of the application being deployed. This version number should be
+# incremented each time you make changes to the application. Versions are not expected to
+# follow Semantic Versioning. They should reflect the version the application is using.
+# It is recommended to use it with quotes.
+appVersion: "1.16.0"
diff --git a/chart/LICENSE b/chart/LICENSE
deleted file mode 100644
index a90ea939517d05f44eb4196dcdaba0f57aab15f2..0000000000000000000000000000000000000000
--- a/chart/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright GitLab B.V.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/chart/README.md b/chart/README.md
deleted file mode 100644
index e32abbdddaacb3718f0414714dc474eed57b9690..0000000000000000000000000000000000000000
--- a/chart/README.md
+++ /dev/null
@@ -1,83 +0,0 @@
-# GitLab's Auto-deploy Helm Chart
-
-## Requirements
-
-- Helm `2.9.0` and above is required in order support `"helm.sh/hook-delete-policy": before-hook-creation` for migrations
-
-## Configuration
-
-| Parameter                     | Description | Default                            |
-| ---                           | ---         | ---                                |
-| replicaCount                  |             | `1`                                |
-| strategyType                  | Pod deployment [strategy](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy) | `nil` |
-| serviceAccountName(**DEPRECATED**)            | Pod service account name override  | `nil` |
-| serviceAccount.name           | Name of service account to use for running the pods | `nil` |
-| serviceAccount.createNew      | If set to `true`, a new service account will be created with the details specified in the other fields under `serviceAccount`. If set to `false`, the service account specified in `serviceAccount.name` is expected to already exist. | `false` |
-| serviceAccount.annotations    | Annotations for the service account to be created | `nil` |
-| image.repository              |             | `gitlab.example.com/group/project` |
-| image.tag                     |             | `stable`                           |
-| image.pullPolicy              |             | `Always`                           |
-| image.secrets                 |             | `[name: gitlab-registry]`          |
-| extraLabels                   | Allow labelling resources with custom key/value pairs | `{}` |
-| lifecycle                     | [Container lifecycle hooks](https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/) | `{}` |
-| podAnnotations                | Pod annotations | `{}`                           |
-| nodeSelector                  | Node labels for pod assignment | `{}`           |
-| tolerations                   | List of node taints to tolerate | `[]`          |
-| affinity                      | Node affinity for pod assignment | `{}`          |
-| application.track             |             | `stable`                           |
-| application.tier              |             | `web`                              |
-| application.migrateCommand    | If present, this variable will run as a shell command within an application Container as a Helm pre-upgrade Hook. Intended to run migration commands. | `nil` |
-| application.initializeCommand | If present, this variable will run as shell command within an application Container as a Helm post-install Hook. Intended to run database initialization commands. When set, the Deployment resource will be skipped.| `nil` |
-| application.secretName        | Pass in the name of a Secret which the deployment will [load all key-value pairs from the Secret as environment variables](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables) in the application container. | `nil` |
-| application.secretChecksum    | Pass in the checksum of the secrets referenced by `application.secretName`. | `nil` |
-| hpa.enabled                   | If true, enables horizontal pod autoscaler. A resource request is also required to be set, such as `resources.requests.cpu: 200m`.| `false` |
-| hpa.minReplicas               |             | `1`                                |
-| hpa.maxReplicas               |             | `5`                                |
-| hpa.targetCPUUtilizationPercentage | Percentage threshold when HPA begins scaling out pods | `80` |
-| gitlab.app                    | GitLab project slug. | `nil` |
-| gitlab.env                    | GitLab environment slug. | `nil` |
-| gitlab.envName                | GitLab environment name. | `nil` |
-| gitlab.envURL                 | GitLab environment URL.  | `nil` |
-| gitlab.projectID              | Gitlab project ID.       | `nil` |
-| service.enabled               |             | `true`                             |
-| service.annotations           | Service annotations | `{}`                       |
-| service.name                  |             | `web`                              |
-| service.type                  |             | `ClusterIP`                        |
-| service.url                   |             | `http://my.host.com/`              |
-| service.additionalHosts       | If present, this list will add additional hostnames to the server configuration. | `nil` |
-| service.commonName            | If present, this will define the ssl certificate common name to be used by CertManager. `service.url` and `service.additionalHosts` will be added as Subject Alternative Names (SANs) | `nil` |
-| service.externalPort          |             | `5000`                             |
-| service.internalPort          |             | `5000`                             |
-| ingress.enabled               | If true, enables ingress | `true`                |
-| ingress.path                  | Default path for the ingress | `/` |
-| ingress.tls.enabled           | If true, enables SSL | `true`                    |
-| ingress.tls.acme              | Controls `kubernetes.io/tls-acme` annotation | `true` |
-| ingress.tls.secretName        | Name of the secret used to terminate SSL traffic | `""` |
-| ingress.tls.useDefaultSecret  | If set to `true`, the `secretName` is not used, which makes Ingress fall back to the default secret (certificate). This requires [configuration of the default secret](https://kubernetes.github.io/ingress-nginx/user-guide/tls/#default-ssl-certificate). | `false` |
-| ingress.modSecurity.enabled | Enable custom configuration for modsecurity, defaulting to [the Core Rule Set](https://coreruleset.org) | `false` |
-| ingress.modSecurity.secRuleEngine | Configuration for [ModSecurity's rule engine](https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual-(v2.x)#SecRuleEngine) | `DetectionOnly` |
-| ingress.modSecurity.secRules | Configuration for custom [ModSecurity's rules](https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual-(v2.x)#secrule) | `nil` |
-| ingress.annotations           | Ingress annotations | `{kubernetes.io/ingress.class: "nginx"}` |
-| livenessProbe.path            | Path to access on the HTTP server on periodic probe of container liveness. | `/`                                |
-| livenessProbe.scheme          | Scheme to access the HTTP server (HTTP or HTTPS). | `HTTP`                                |
-| livenessProbe.initialDelaySeconds | # of seconds after the container has started before liveness probes are initiated. | `15`                               |
-| livenessProbe.timeoutSeconds  | # of seconds after which the liveness probe times out. | `15`                               |
-| livenessProbe.probeType       | Type of [liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes) to use. | `httpGet`
-| livenessProbe.command         | Commands for use with probe type 'exec'. | `{}`
-| readinessProbe.path           | Path to access on the HTTP server on periodic probe of container readiness. | `/`                                |
-| readinessProbe.scheme         | Scheme to access the HTTP server (HTTP or HTTPS). | `HTTP`                                |
-| readinessProbe.initialDelaySeconds | # of seconds after the container has started before readiness probes are initiated. | `5`                                |
-| readinessProbe.timeoutSeconds | # of seconds after which the readiness probe times out. | `3`                                |
-| readinessProbe.probeType     | Type of [readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes) to use. | `httpGet`
-| readinessProbe.command       | Commands for use with probe type 'exec'. | `{}`
-| postgresql.managed            | If true, this will provision a managed Postgres instance via crossplane.            | `false`                             |
-| postgresql.managedClassSelector            | This will allow provisioning a Postgres instance based on label selectors via Crossplane, eg: `managedClassSelector.matchLabels.stack: gitlab`. The `postgresql.managed` value should be true as well for this to be honoured. [Crossplane Configuration](https://docs.gitlab.com/ee/user/clusters/applications.html#crossplane)            | `{}`                             |
-| podDisruptionBudget.enabled   |             | `false`                            |
-| podDisruptionBudget.maxUnavailable |             | `1`                            |
-| podDisruptionBudget.minAvailable | If present, this variable will configure minAvailable in the PodDisruptionBudget. :warning: if you have `replicaCount: 1` and `podDisruptionBudget.minAvailable: 1` `kubectl drain` will be blocked.              | `nil`                            |
-| prometheus.metrics            | Annotates the service for prometheus auto-discovery. Also denies access to the `/metrics` endpoint from external addresses with Ingress. | `false` |
-| networkPolicy.enabled(**DEPRECATED**)         | Enable container network policy | `false` |
-| networkPolicy.spec(**DEPRECATED**)            | [Network policy](https://kubernetes.io/docs/concepts/services-networking/network-policies/) definition | `{ podSelector: { matchLabels: {} }, ingress: [{ from: [{ podSelector: { matchLabels: {} } }, { namespaceSelector: { matchLabels: { app.gitlab.com/managed_by: gitlab } } }] }] }` |
-| ciliumNetworkPolicy.enabled         | Enable container cilium network policy | `false` |
-| ciliumNetworkPolicy.alerts.enabled         | Enable alert generation for container cilium network policy | `false` |
-| ciliumNetworkPolicy.spec            | [Cilium network policy](https://docs.cilium.io/en/v1.8/concepts/kubernetes/policy/#ciliumnetworkpolicy/) definition | `{ endpointSelector: {}, ingress: [{ fromEndpoints: [{ matchLabels: { app.gitlab.com/managed_by: gitlab } }] }] }` |
diff --git a/chart/templates/NOTES.txt b/chart/templates/NOTES.txt
index 5491ce9318e4fd2578c6c86de79f2bd268d00739..319f01bdadd4777dc41d1bc3a87c152d76d1217f 100644
--- a/chart/templates/NOTES.txt
+++ b/chart/templates/NOTES.txt
@@ -1,12 +1,22 @@
-{{- if and .Values.ingress.enabled .Values.service.enabled -}}
-Application should be accessible at
-
-    {{ .Values.service.url }}
-{{- else -}}
-Application was deployed reusing the service at
-
-    {{ .Values.service.url }}
-
-It will share a load balancer with the previous release (or be unavailable if
-no service or ingress was previously deployed).
-{{- end -}}
+1. Get the application URL by running these commands:
+{{- if .Values.ingress.enabled }}
+{{- range $host := .Values.ingress.hosts }}
+  {{- range .paths }}
+  http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
+  {{- end }}
+{{- end }}
+{{- else if contains "NodePort" .Values.service.type }}
+  export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "chart.fullname" . }})
+  export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
+  echo http://$NODE_IP:$NODE_PORT
+{{- else if contains "LoadBalancer" .Values.service.type }}
+     NOTE: It may take a few minutes for the LoadBalancer IP to be available.
+           You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "chart.fullname" . }}'
+  export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "chart.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
+  echo http://$SERVICE_IP:{{ .Values.service.port }}
+{{- else if contains "ClusterIP" .Values.service.type }}
+  export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "chart.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
+  export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
+  echo "Visit http://127.0.0.1:8080 to use your application"
+  kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT
+{{- end }}
diff --git a/chart/templates/_helpers.tpl b/chart/templates/_helpers.tpl
index 8a55ef84929fd773d7c169c94dd101b74d7fe56f..4add1301941d65b66380a4b2acc4733f26996f56 100644
--- a/chart/templates/_helpers.tpl
+++ b/chart/templates/_helpers.tpl
@@ -1,64 +1,77 @@
-{{/* vim: set filetype=mustache: */}}
 {{/*
 Expand the name of the chart.
 */}}
-{{- define "name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 24 | trimSuffix "-" -}}
-{{- end -}}
+{{- define "chart.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
+{{- end }}
 
 {{/*
 Create a default fully qualified app name.
 We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
 */}}
-{{- define "fullname" -}}
-{{- $name := default .Chart.Name .Values.nameOverride -}}
-{{- printf "%s-%s" .Release.Name $name | trimSuffix "-app" | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
-
-{{- define "appname" -}}
-{{- $releaseName := default .Release.Name .Values.releaseOverride -}}
-{{- printf "%s" $releaseName | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
+{{- define "chart.fullname" -}}
+{{- if .Values.fullnameOverride }}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- .Release.Name | trunc 63 | trimSuffix "-" }}
+{{- end }}
+{{- end }}
 
-{{- define "imagename" -}}
-{{- if eq .Values.image.tag "" -}}
-{{- .Values.image.repository -}}
-{{- else -}}
-{{- printf "%s:%s" .Values.image.repository .Values.image.tag -}}
-{{- end -}}
-{{- end -}}
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "chart.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- end }}
 
-{{- define "trackableappname" -}}
-{{- $trackableName := printf "%s-%s" (include "appname" .) .Values.application.track -}}
-{{- $trackableName | trimSuffix "-stable" | trunc 63 | trimSuffix "-" -}}
-{{- end -}}
+{{/*
+Common labels
+*/}}
+{{- define "chart.labels" -}}
+helm.sh/chart: {{ include "chart.chart" . }}
+{{ include "chart.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end }}
 
 {{/*
-Get a hostname from URL
+Selector labels
 */}}
-{{- define "hostname" -}}
-{{- . | trimPrefix "http://" |  trimPrefix "https://" | trimSuffix "/" | trim | quote -}}
-{{- end -}}
+{{- define "chart.selectorLabels" -}}
+app.kubernetes.io/name: {{ .Release.Name }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
 
 {{/*
-Get SecRule's arguments with unescaped single&double quotes
+Create the name of the service account to use
 */}}
-{{- define "secrule" -}}
-{{- $operator := .operator | quote | replace "\"" "\\\"" | replace "'" "\\'" -}}
-{{- $action := .action | quote | replace "\"" "\\\"" | replace "'" "\\'" -}}
-{{- printf "SecRule %s %s %s" .variable $operator $action -}}
+{{- define "chart.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "chart.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
+
+{{- define "fpm_image" -}}
+{{- if eq .Values.image.fpm.tag "" -}}
+{{- .Values.image.fpm.repository -}}
+{{- else -}}
+{{- printf "%s:%s" .Values.image.fpm.repository .Values.image.fpm.tag -}}
+{{- end -}}
 {{- end -}}
 
-{{- define "sharedlabels" -}}
-app: {{ template "appname" . }}
-chart: "{{ .Chart.Name }}-{{ .Chart.Version| replace "+" "_" }}"
-release: {{ .Release.Name }}
-heritage: {{ .Release.Service }}
-app.kubernetes.io/name: {{ template "appname" . }}
-helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version| replace "+" "_" }}"
-app.kubernetes.io/managed-by: {{ .Release.Service }}
-app.kubernetes.io/instance: {{ .Release.Name }}
-{{- if .Values.extraLabels }}
-{{ toYaml $.Values.extraLabels }}
-{{- end }}
+{{- define "nginx_image" -}}
+{{- if eq .Values.image.nginx.tag "" -}}
+{{- .Values.image.nginx.repository -}}
+{{- else -}}
+{{- printf "%s:%s" .Values.image.nginx.repository .Values.image.nginx.tag -}}
+{{- end -}}
+{{- end -}}
+
+{{- define "secret_name" -}}
+{{- printf "%s" .Release.Name | replace "review-" " " | trim }}
 {{- end -}}
\ No newline at end of file
diff --git a/chart/templates/cilium-network-policy.yaml b/chart/templates/cilium-network-policy.yaml
deleted file mode 100644
index 5ad63d4b4ca31b9a6ce2995353ed2194fa7a25ae..0000000000000000000000000000000000000000
--- a/chart/templates/cilium-network-policy.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-{{- if .Values.ciliumNetworkPolicy.enabled -}}
-apiVersion: cilium.io/v2
-kind: CiliumNetworkPolicy
-metadata:
-  name: {{ template "fullname" . }}
-{{- if .Values.ciliumNetworkPolicy.alerts.enabled }}
-  annotations:
-    "app.gitlab.com/alert": "true"
-{{- end }}
-  labels:
-    app.gitlab.com/proj: {{ .Values.gitlab.projectID | quote }}
-{{ include "sharedlabels" . | indent 4}}
-spec:
-{{ toYaml .Values.ciliumNetworkPolicy.spec | indent 2 }}
-{{- end -}}
diff --git a/chart/templates/db-initialize-job.yaml b/chart/templates/db-initialize-job.yaml
deleted file mode 100644
index 73b66eec0e2d7311ee5a2feee2597d04f174e4ab..0000000000000000000000000000000000000000
--- a/chart/templates/db-initialize-job.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-{{- if .Values.application.initializeCommand -}}
-apiVersion: batch/v1
-kind: Job
-metadata:
-  name: {{ template "trackableappname" . }}-db-initialize
-  labels:
-{{ include "sharedlabels" . | indent 4 }}
-  annotations:
-    "helm.sh/hook": post-install
-    "helm.sh/hook-delete-policy": before-hook-creation
-    "helm.sh/hook-weight": "0"
-spec:
-  template:
-    metadata:
-      labels:
-        app: {{ template "appname" . }}
-        release: {{ .Release.Name }}
-    spec:
-      restartPolicy: Never
-      imagePullSecrets:
-{{ toYaml .Values.image.secrets | indent 10 }}
-      containers:
-      - name: {{ .Chart.Name }}
-        image: {{ template "imagename" . }}
-        command: ["/bin/sh"]
-        args: ["-c", "{{ .Values.application.initializeCommand }}"]
-        imagePullPolicy: {{ .Values.image.pullPolicy }}
-        {{- if .Values.application.secretName }}
-        envFrom:
-        - secretRef:
-            name: {{ .Values.application.secretName }}
-        {{- end }}
-        env:
-        - name: DATABASE_URL
-          value: {{ .Values.application.database_url | quote }}
-        - name: GITLAB_ENVIRONMENT_NAME
-          value: {{ .Values.gitlab.envName | quote }}
-        - name: GITLAB_ENVIRONMENT_URL
-          value: {{ .Values.gitlab.envURL | quote }}
-{{- end -}}
diff --git a/chart/templates/db-migrate-hook.yaml b/chart/templates/db-migrate-hook.yaml
deleted file mode 100644
index 5921c4f0ec6d83e0ba0fe64857daf69f06b2ac14..0000000000000000000000000000000000000000
--- a/chart/templates/db-migrate-hook.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-{{- if .Values.application.migrateCommand -}}
-apiVersion: batch/v1
-kind: Job
-metadata:
-  name: {{ template "trackableappname" . }}-db-migrate
-  labels:
-{{ include "sharedlabels" . | indent 4 }}
-  annotations:
-    "helm.sh/hook": pre-upgrade
-    "helm.sh/hook-delete-policy": before-hook-creation
-    "helm.sh/hook-weight": "0"
-spec:
-  template:
-    metadata:
-      labels:
-        app: {{ template "appname" . }}
-        release: {{ .Release.Name }}
-    spec:
-      restartPolicy: Never
-      imagePullSecrets:
-{{ toYaml .Values.image.secrets | indent 10 }}
-      containers:
-      - name: {{ .Chart.Name }}
-        image: {{ template "imagename" . }}
-        command: ["/bin/sh"]
-        args: ["-c", "{{ .Values.application.migrateCommand }}"]
-        imagePullPolicy: {{ .Values.image.pullPolicy }}
-        {{- if .Values.application.secretName }}
-        envFrom:
-        - secretRef:
-            name: {{ .Values.application.secretName }}
-        {{- end }}
-        env:
-        - name: DATABASE_URL
-          value: {{ .Values.application.database_url | quote }}
-        - name: GITLAB_ENVIRONMENT_NAME
-          value: {{ .Values.gitlab.envName | quote }}
-        - name: GITLAB_ENVIRONMENT_URL
-          value: {{ .Values.gitlab.envURL | quote }}
-{{- end -}}
diff --git a/chart/templates/deployment.yaml b/chart/templates/deployment.yaml
index 504664384b074def6cec46580b8da681f8f0db44..af3056da4e446213dd63430315b6e0503c13857c 100644
--- a/chart/templates/deployment.yaml
+++ b/chart/templates/deployment.yaml
@@ -1,382 +1,254 @@
-{{- if not .Values.application.initializeCommand -}}
 apiVersion: apps/v1
 kind: Deployment
 metadata:
-  name: {{ template "trackableappname" . }}
-  annotations:
-    {{ if .Values.gitlab.app }}app.gitlab.com/app: {{ .Values.gitlab.app | quote }}{{ end }}
-    {{ if .Values.gitlab.env }}app.gitlab.com/env: {{ .Values.gitlab.env | quote }}{{ end }}
+  name: {{ include "chart.fullname" . }}
   labels:
-    track: "{{ .Values.application.track }}"
-    tier: "{{ .Values.application.tier }}"
-{{ include "sharedlabels" . | indent 4 }}
+    {{- include "chart.labels" . | nindent 4 }}
 spec:
+  {{- if not .Values.autoscaling.enabled }}
+  replicas: {{ .Values.replicaCount }}
+  {{- end }}
   selector:
     matchLabels:
-      app: {{ template "appname" . }}
-      track: "{{ .Values.application.track }}"
-      tier: "{{ .Values.application.tier }}"
-      release: {{ .Release.Name }}
-  replicas: {{ .Values.replicaCount }}
-{{- if .Values.strategyType }}
-  strategy:
-    type: {{ .Values.strategyType | quote }}
-{{- end }}
+      {{- include "chart.selectorLabels" . | nindent 6 }}
   template:
     metadata:
+      {{- with .Values.podAnnotations }}
       annotations:
-        checksum/application-secrets: "{{ .Values.application.secretChecksum }}"
-        {{ if .Values.gitlab.app }}app.gitlab.com/app: {{ .Values.gitlab.app | quote }}{{ end }}
-        {{ if .Values.gitlab.env }}app.gitlab.com/env: {{ .Values.gitlab.env | quote }}{{ end }}
-{{- if .Values.podAnnotations }}
-{{ toYaml .Values.podAnnotations | indent 8 }}
-{{- end }}
+        {{- toYaml . | nindent 8 }}
+      {{- end }}
       labels:
-        track: "{{ .Values.application.track }}"
-        tier: "{{ .Values.application.tier }}"
-{{ include "sharedlabels" . | indent 8 }}
+        {{- include "chart.selectorLabels" . | nindent 8 }}
     spec:
-{{- if or (.Values.serviceAccount.name) (.Values.serviceAccountName) }}
-      serviceAccountName: {{ .Values.serviceAccount.name | default .Values.serviceAccountName | quote }}
-{{- end }}
+      {{- with .Values.imagePullSecrets }}
       imagePullSecrets:
-{{ toYaml .Values.image.secrets | indent 10 }}
-{{- if .Values.nodeSelector }}
+        {{- toYaml . | nindent 8 }}
+      {{- end }}
+      serviceAccountName: {{ include "chart.serviceAccountName" . }}
+      securityContext:
+        {{- toYaml .Values.podSecurityContext | nindent 8 }}
+      volumes:
+        - name: secrets
+          secret:
+            secretName: {{ template "secret_name" . }}
+        - name: mglogs-persistent-storage
+          persistentVolumeClaim:
+            claimName: mg-logs
+        - name: redis-config
+          configMap:
+            name: {{ include "chart.fullname" . }}-redis-container-config
+      containers:
+        - name: fpm
+          securityContext:
+            {{- toYaml .Values.securityContext | nindent 12 }}
+          image: "{{ template "fpm_image" . }}"
+          imagePullPolicy: {{ .Values.image.fpm.pullPolicy }}
+          env:
+          - name: APP_ENV
+            value: {{ .Values.environment }}
+          - name: APP_URL
+            value: {{ .Values.app_url }}
+          volumeMounts:
+          - name: secrets
+            mountPath: /metager/metager_app/.env
+            subPath: ENV_PRODUCTION
+            readOnly: true
+          - name: secrets
+            mountPath: /metager/metager_app/config/sumas.json
+            subPath: SUMAS
+          - name: secrets
+            mountPath: /metager/metager_app/config/sumasEn.json
+            subPath: SUMASEN
+          - name: secrets
+            mountPath: /metager/metager_app/config/blacklistDomains.txt
+            subPath: BLACKLIST_DOMAINS
+          - name: secrets
+            mountPath: /metager/metager_app/config/blacklistUrl.txt
+            subPath: BLACKLIST_URL
+          - name: secrets
+            mountPath: /metager/metager_app/config/adBlacklistDomains.txt
+            subPath: ADBLACKLIST_DOMAINS
+          - name: secrets
+            mountPath: /metager/metager_app/config/adBlacklistUrl.txt
+            subPath: ADBLACKLIST_URL
+          - name: secrets
+            mountPath: /metager/metager_app/config/blacklistDescriptionUrl.txt
+            subPath: BLACKLIST_DESCRIPTION_URL
+          - name: secrets
+            mountPath: /metager/metager_app/database/seeds/UsersSeeder.php
+            subPath: USERSEEDER
+          - name: mglogs-persistent-storage
+            mountPath: /metager/metager_app/storage/logs/metager
+            readOnly: false
+          ports:
+            - name: http
+              containerPort: 8080
+              protocol: TCP
+          livenessProbe:
+            httpGet:
+              path: /health-check/liveness
+              port: http
+          readinessProbe:
+            httpGet:
+              path: /health-check/liveness
+              port: http
+          startupProbe:
+            tcpSocket:
+              port: 9000
+            failureThreshold: 60
+            periodSeconds: 1
+          resources:
+            requests:
+              cpu: 500m
+              memory: 500M
+            limits:
+        - name: scheduler
+          securityContext:
+            {{- toYaml .Values.securityContext | nindent 12 }}
+          image: "{{ template "fpm_image" . }}"
+          command: ["/bin/bash", "-c"]
+          args: ["/usr/local/bin/php artisan schedule:run && /usr/local/bin/php artisan schedule:work"]
+          imagePullPolicy: {{ .Values.image.fpm.pullPolicy }}
+          env:
+          - name: APP_ENV
+            value: {{ .Values.environment }}
+          volumeMounts:
+          - name: secrets
+            mountPath: /metager/metager_app/.env
+            subPath: ENV_PRODUCTION
+            readOnly: true
+          - name: mglogs-persistent-storage
+            mountPath: /metager/metager_app/storage/logs/metager
+            readOnly: false
+          ports:
+            - name: http
+              containerPort: 8080
+              protocol: TCP
+          livenessProbe:
+            httpGet:
+              path: /health-check/liveness-scheduler
+              port: http
+          readinessProbe:
+            httpGet:
+              path: /health-check/liveness-scheduler
+              port: http
+          startupProbe:
+            httpGet:
+              path: /health-check/liveness-scheduler
+              port: http
+          resources:
+            requests:
+              cpu: 100m
+              memory: 100M
+            limits:
+        - name: worker
+          securityContext:
+            {{- toYaml .Values.securityContext | nindent 12 }}
+          image: "{{ template "fpm_image" . }}"
+          command: ["/usr/local/bin/php"]
+          args: ["artisan", "requests:fetcher"]
+          imagePullPolicy: {{ .Values.image.fpm.pullPolicy }}
+          env:
+          - name: APP_ENV
+            value: {{ .Values.environment }}
+          volumeMounts:
+          - name: secrets
+            mountPath: /metager/metager_app/.env
+            subPath: ENV_PRODUCTION
+            readOnly: true
+          ports:
+            - name: http
+              containerPort: 8080
+              protocol: TCP
+          livenessProbe:
+            httpGet:
+              path: /health-check/liveness-worker
+              port: http
+          readinessProbe:
+            httpGet:
+              path: /health-check/liveness-worker
+              port: http
+          startupProbe:
+            httpGet:
+              path: /health-check/liveness-worker
+              port: http
+          resources:
+            requests:
+              cpu: 500m
+              memory: 100M
+            limits:
+        - name: nginx
+          securityContext:
+            {{- toYaml .Values.securityContext | nindent 12 }}
+          image: "{{ template "nginx_image" . }}"
+          imagePullPolicy: {{ .Values.image.nginx.pullPolicy }}
+          ports:
+            - name: http
+              containerPort: 8080
+              protocol: TCP
+          livenessProbe:
+            httpGet:
+              path: /health-check/nginx
+              port: http
+          readinessProbe:
+            httpGet:
+              path: /health-check/nginx
+              port: http
+          startupProbe:
+            httpGet:
+              path: /health-check/nginx
+              port: http
+            failureThreshold: 60
+            periodSeconds: 1
+          resources:
+            requests:
+              cpu: 100m
+              memory: 100M
+            limits:
+        - name: redis
+          image: "redis:6"
+          imagePullPolicy: {{ .Values.image.pullPolicy }}
+          command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
+          volumeMounts:
+          - name: redis-config
+            mountPath: /usr/local/etc/redis/redis.conf
+            subPath: redis.conf
+            readOnly: true
+          livenessProbe:
+            exec:
+              command:
+              - redis-cli
+              - ping 
+            initialDelaySeconds: 2
+          readinessProbe:
+            exec:
+              command:
+              - redis-cli
+              - ping 
+            initialDelaySeconds: 2
+          resources:
+            requests:
+              cpu: 100m
+              memory: 1Gi
+            limits:
+          securityContext:
+            runAsUser: 999
+            runAsGroup: 999
+            allowPrivilegeEscalation: false
+      {{- with .Values.nodeSelector }}
       nodeSelector:
-{{ toYaml .Values.nodeSelector | indent 8 }}
-{{- end }}
-{{- if .Values.tolerations }}
-      tolerations:
-{{ toYaml .Values.tolerations | indent 8 }}
-{{- end }}
+        {{- toYaml . | nindent 8 }}
+      {{- end }}
       affinity:
         podAntiAffinity:
           preferredDuringSchedulingIgnoredDuringExecution:
-          - weight: 50
-            podAffinityTerm:
-              labelSelector:
-                matchLabels:
-                  app: {{ template "appname" . }}
-              topologyKey: kubernetes.io/hostname
-      volumes:
-      - name: secrets
-        secret:
-          secretName: {{ .Values.application.secretName }}
-      - name: mglogs-persistent-storage
-        persistentVolumeClaim:
-          claimName: mg-logs
-      - name: redis-config
-        configMap:
-          name: redis-container-config
-      securityContext:
-        fsGroup: 1000
-        runAsUser: 1000
-        runAsGroup: 1000
-      containers:
-      - name: {{ .Chart.Name }}-phpfpm
-        image: {{ template "imagename" . }}
-        imagePullPolicy: {{ .Values.image.pullPolicy }}
-        {{- if .Values.application.secretName }}
-        envFrom:
-        - secretRef:
-            name: {{ .Values.application.secretName }}
-        {{- end }}
-        env:
-{{- if .Values.postgresql.managed }}
-        - name: POSTGRES_USER
-          valueFrom:
-            secretKeyRef:
-              name: app-postgres
-              key: username
-        - name: POSTGRES_PASSWORD
-          valueFrom:
-            secretKeyRef:
-              name: app-postgres
-              key: password
-        - name: POSTGRES_HOST
-          valueFrom:
-            secretKeyRef:
-              name: app-postgres
-              key: privateIP
-{{- end }}
-        - name: DATABASE_URL
-          value: {{ .Values.application.database_url | quote }}
-        - name: GITLAB_ENVIRONMENT_NAME
-          value: {{ .Values.gitlab.envName | quote }}
-        - name: GITLAB_ENVIRONMENT_URL
-          value: {{ .Values.gitlab.envURL | quote }}
-{{- if .Values.lifecycle }}
-        lifecycle:
-{{ toYaml .Values.lifecycle | indent 10 }}
-{{- end }}
-        ports:
-        - name: "{{ .Values.service.name }}-phpfpm"
-          containerPort: 9000
-        livenessProbe:
-          tcpSocket:
-            port: "{{ .Values.service.name }}-phpfpm"
-          initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
-          timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
-        readinessProbe:
-          tcpSocket:
-            port: "{{ .Values.service.name }}-phpfpm"
-          initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
-          timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
-        startupProbe:
-          tcpSocket:
-            port: "{{ .Values.service.name }}-phpfpm"
-          failureThreshold: 60
-          periodSeconds: 1
-        volumeMounts:
-        - name: mglogs-persistent-storage
-          mountPath: /html/storage/logs/metager
-          readOnly: false
-        - name: secrets
-          mountPath: /home/metager/.env
-          subPath: env
-          readOnly: true
-        - name: secrets
-          mountPath: /html/database/seeds/UsersSeeder.php
-          subPath: userseeder
-          readOnly: true
-        - name: secrets
-          mountPath: /html/config/sumas.json
-          subPath: sumas
-          readOnly: true
-        - name: secrets
-          mountPath: /html/config/sumasEn.json
-          subPath: sumasen
-          readOnly: true
-        - name: secrets
-          mountPath: /html/config/blacklistUrl.txt
-          subPath: blacklisturl
-          readOnly: true
-        - name: secrets
-          mountPath: /html/config/blacklistDomains.txt
-          subPath: blacklistdomains
-          readOnly: true
-        - name: secrets
-          mountPath: /html/config/adBlacklistUrl.txt
-          subPath: adblacklisturl
-          readOnly: true
-        - name: secrets
-          mountPath: /html/config/blacklistDescriptionUrl.txt
-          subPath: blacklistDescriptionUrl
-          readOnly: true
-        - name: secrets
-          mountPath: /html/config/adBlacklistDomains.txt
-          subPath: adblacklistdomains
-          readOnly: true
-        resources:
-{{ toYaml .Values.resourcesPhpfpm | indent 12 }}
-      - name: {{ .Chart.Name }}-nginx
-        image: {{ template "imagename" . }}
-        command: ["nginx"]
-        imagePullPolicy: {{ .Values.image.pullPolicy }}
-        {{- if .Values.application.secretName }}
-        envFrom:
-        - secretRef:
-            name: {{ .Values.application.secretName }}
-        {{- end }}
-        env:
-{{- if .Values.postgresql.managed }}
-        - name: POSTGRES_USER
-          valueFrom:
-            secretKeyRef:
-              name: app-postgres
-              key: username
-        - name: POSTGRES_PASSWORD
-          valueFrom:
-            secretKeyRef:
-              name: app-postgres
-              key: password
-        - name: POSTGRES_HOST
-          valueFrom:
-            secretKeyRef:
-              name: app-postgres
-              key: privateIP
-{{- end }}
-        - name: DATABASE_URL
-          value: {{ .Values.application.database_url | quote }}
-        - name: GITLAB_ENVIRONMENT_NAME
-          value: {{ .Values.gitlab.envName | quote }}
-        - name: GITLAB_ENVIRONMENT_URL
-          value: {{ .Values.gitlab.envURL | quote }}
-{{- if .Values.lifecycle }}
-        lifecycle:
-{{ toYaml .Values.lifecycle | indent 10 }}
-{{- end }}
-        ports:
-        - name: "{{ .Values.service.name }}"
-          containerPort: {{ .Values.service.internalPort }}
-        livenessProbe:
-{{- if eq .Values.livenessProbe.probeType "httpGet" }}
-          httpGet:
-            path: {{ .Values.livenessProbe.path }}
-            scheme: {{ .Values.livenessProbe.scheme }}
-            port: {{ .Values.service.internalPort }}
-{{- else if eq .Values.livenessProbe.probeType "tcpSocket" }}
-          tcpSocket:
-            port: {{ .Values.service.internalPort }}
-{{- end }}
-          initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
-          timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
-        readinessProbe:
-{{- if eq .Values.readinessProbe.probeType "httpGet" }}
-          httpGet:
-            path: {{ .Values.readinessProbe.path }}
-            scheme: {{ .Values.readinessProbe.scheme }}
-            port: {{ .Values.service.internalPort }}
-{{- else if eq .Values.readinessProbe.probeType "tcpSocket" }}
-          tcpSocket:
-            port: {{ .Values.service.internalPort }}
-{{- end }}
-          initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
-          timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
-        startupProbe:
-{{- if eq .Values.readinessProbe.probeType "httpGet" }}
-          httpGet:
-            path: {{ .Values.readinessProbe.path }}
-            scheme: {{ .Values.readinessProbe.scheme }}
-            port: {{ .Values.service.internalPort }}
-{{- else if eq .Values.readinessProbe.probeType "tcpSocket" }}
-          tcpSocket:
-            port: {{ .Values.service.internalPort }}
-{{- end }}
-          failureThreshold: 60
-          periodSeconds: 1
-        resources:
-{{ toYaml .Values.resourcesNginx | indent 12 }}
-      # Redis Container
-      - name: {{ .Chart.Name }}-redis
-        image: "redis:6"
-        imagePullPolicy: {{ .Values.image.pullPolicy }}
-        command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
-        volumeMounts:
-        - name: redis-config
-          mountPath: /usr/local/etc/redis/redis.conf
-          subPath: redis.conf
-          readOnly: true
-        ports:
-        - name: "{{ .Values.service.name }}-redis"
-          containerPort: 6379
-        livenessProbe:
-          tcpSocket:
-            port: "{{ .Values.service.name }}-redis"
-          initialDelaySeconds: 15
-          timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
-        readinessProbe:
-          tcpSocket:
-            port: "{{ .Values.service.name }}-redis"
-          initialDelaySeconds: 5
-          timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
-        resources:
-{{ toYaml .Values.resourcesRedis | indent 12 }}
-        securityContext:
-          runAsUser: 999
-          runAsGroup: 999
-          allowPrivilegeEscalation: false
-      # Fetcher Container
-      - name: {{ .Chart.Name }}-fetcher
-        image: {{ template "imagename" . }}
-        command: ["/bin/sh"]
-        args: ["-c", "php artisan requests:fetcher"]
-        volumeMounts:
-        - name: secrets
-          mountPath: /html/.env
-          subPath: env
-          readOnly: true
-        imagePullPolicy: {{ .Values.image.pullPolicy }}
-        livenessProbe:
-          httpGet:
-            path: "/health-check/liveness-worker"
-            scheme: "HTTP"
-            port: 8080
-          initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
-          timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
-        readinessProbe:
-          httpGet:
-            path: "/health-check/liveness-worker"
-            scheme: "HTTP"
-            port: 8080
-          initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
-          timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
-        startupProbe:
-          httpGet:
-            path: "/health-check/liveness-worker"
-            scheme: "HTTP"
-            port: 8080
-          failureThreshold: 60
-          periodSeconds: 1
-        resources:
-{{ toYaml .Values.resourcesFetcher | indent 12 }}
-      # Scheduler Container
-      - name: {{ .Chart.Name }}-scheduler
-        image: {{ template "imagename" . }}
-        command: ["/bin/sh"]
-        args: ["-c", "php artisan schedule:work"]
-        volumeMounts:
-        - name: secrets
-          mountPath: /html/.env
-          subPath: env
-          readOnly: true
-        - name: mglogs-persistent-storage
-          mountPath: /html/storage/logs/metager
-          readOnly: false
-        - name: secrets
-          mountPath: /html/database/seeds/UsersSeeder.php
-          subPath: userseeder
-          readOnly: true
-        - name: secrets
-          mountPath: /html/config/sumas.json
-          subPath: sumas
-          readOnly: true
-        - name: secrets
-          mountPath: /html/config/sumasEn.json
-          subPath: sumasen
-          readOnly: true
-        - name: secrets
-          mountPath: /html/config/blacklistUrl.txt
-          subPath: blacklisturl
-          readOnly: true
-        - name: secrets
-          mountPath: /html/config/blacklistDomains.txt
-          subPath: blacklistdomains
-          readOnly: true
-        - name: secrets
-          mountPath: /html/config/adBlacklistUrl.txt
-          subPath: adblacklisturl
-          readOnly: true
-        - name: secrets
-          mountPath: /html/config/blacklistDescriptionUrl.txt
-          subPath: blacklistDescriptionUrl
-          readOnly: true
-        - name: secrets
-          mountPath: /html/config/adBlacklistDomains.txt
-          subPath: adblacklistdomains
-          readOnly: true
-        imagePullPolicy: {{ .Values.image.pullPolicy }}
-        livenessProbe:
-          httpGet:
-            path: "/health-check/liveness-scheduler"
-            scheme: "HTTP"
-            port: 8080
-          initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
-          timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
-        readinessProbe:
-          httpGet:
-            path: "/health-check/liveness-scheduler"
-            scheme: "HTTP"
-            port: 8080
-          initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
-          timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
-        startupProbe:
-          httpGet:
-            path: "/health-check/liveness-scheduler"
-            scheme: "HTTP"
-            port: 8080
-          failureThreshold: 60
-          periodSeconds: 1
-        resources:
-{{ toYaml .Values.resourcesScheduler | indent 12 }}
-{{- end -}}
+            - weight: 50
+              podAffinityTerm:
+                labelSelector:
+                  matchLabels:
+                    app.kubernetes.io/instance: {{ .Release.Name }}
+                topologyKey: kubernetes.io/hostname
+      {{- with .Values.tolerations }}
+      tolerations:
+        {{- toYaml . | nindent 8 }}
+      {{- end }}
diff --git a/chart/templates/hpa.yaml b/chart/templates/hpa.yaml
index af4a374e1e59ccd8603ef2ccaf9f49adeedd11e9..9bee334de3d775c0f5229e888c1f4f4969a6d8a4 100644
--- a/chart/templates/hpa.yaml
+++ b/chart/templates/hpa.yaml
@@ -1,16 +1,32 @@
-{{- if and .Values.hpa.enabled .Values.resources.requests -}}
-apiVersion: autoscaling/v1
+{{- if .Values.autoscaling.enabled }}
+apiVersion: autoscaling/v2beta2
 kind: HorizontalPodAutoscaler
 metadata:
-  name: {{ template "fullname" . }}
+  name: {{ include "chart.fullname" . }}
   labels:
-{{ include "sharedlabels" . | indent 4 }}
+    {{- include "chart.labels" . | nindent 4 }}
 spec:
   scaleTargetRef:
-    kind: Deployment
-    name: {{ template "appname" . }}
     apiVersion: apps/v1
-  minReplicas: {{ .Values.hpa.minReplicas }}
-  maxReplicas: {{ .Values.hpa.maxReplicas }}
-  targetCPUUtilizationPercentage: {{ .Values.hpa.targetCPUUtilizationPercentage }}
-{{- end -}}
+    kind: Deployment
+    name: {{ include "chart.fullname" . }}
+  minReplicas: {{ .Values.autoscaling.minReplicas }}
+  maxReplicas: {{ .Values.autoscaling.maxReplicas }}
+  metrics:
+    {{- if .Values.autoscaling.targetCPUUtilizationPercentage }}
+    - type: Resource
+      resource:
+        name: cpu
+        target:
+          type: Utilization
+          averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
+    {{- end }}
+    {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}
+    - type: Resource
+      resource:
+        name: memory
+        target:
+          type: Utilization
+          averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}
+    {{- end }}
+{{- end }}
diff --git a/chart/templates/ingress.yaml b/chart/templates/ingress.yaml
index 0b16df20643f105567a1eacac90fb17714c8b110..da678609ea89036baa28411df912a4a3da3eca68 100644
--- a/chart/templates/ingress.yaml
+++ b/chart/templates/ingress.yaml
@@ -1,100 +1,68 @@
-{{- if and (.Values.service.enabled) (or (.Values.ingress.enabled) (not (hasKey .Values.ingress "enabled"))) -}}
-{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1/Ingress" }}
+{{- if .Values.ingress.enabled -}}
+{{- $fullName := include "chart.fullname" . -}}
+{{- $svcPort := .Values.service.port -}}
+{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
+  {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }}
+  {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}}
+  {{- end }}
+{{- end }}
+{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
 apiVersion: networking.k8s.io/v1
-{{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1/Ingress"}}
+{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
 apiVersion: networking.k8s.io/v1beta1
-{{ else }}
+{{- else -}}
 apiVersion: extensions/v1beta1
 {{- end }}
 kind: Ingress
 metadata:
-  name: {{ template "fullname" . }}
+  name: {{ $fullName }}
   labels:
-{{ include "sharedlabels" . | indent 4 }}
+    {{- include "chart.labels" . | nindent 4 }}
+  {{- with .Values.ingress.annotations }}
   annotations:
-{{- if .Values.ingress.annotations }}
-{{ toYaml .Values.ingress.annotations | indent 4 }}
-{{- end }}
-{{- if .Values.ingress.tls.enabled }}
-    kubernetes.io/tls-acme: {{ .Values.ingress.tls.acme | quote }}
-{{- end }}
-{{- if eq .Values.application.track "canary" }}
-    nginx.ingress.kubernetes.io/canary: "true"
-    nginx.ingress.kubernetes.io/canary-by-header: "canary"
-{{- if .Values.ingress.canary.weight }}
-    nginx.ingress.kubernetes.io/canary-weight: {{ .Values.ingress.canary.weight | quote }}
-{{- end }}
-{{- end }}
-{{- with .Values.ingress.modSecurity }}
-{{- if .enabled }}
-    nginx.ingress.kubernetes.io/modsecurity-transaction-id: "$server_name-$request_id"
-    nginx.ingress.kubernetes.io/modsecurity-snippet: |
-      SecRuleEngine {{ .secRuleEngine | default "DetectionOnly" | title }}
-{{- range $rule := .secRules }}
-{{ (include "secrule" $rule) | indent 6 }}
-{{- end }}
-{{- end }}
-{{- end }}
-{{- if .Values.prometheus.metrics }}
-    nginx.ingress.kubernetes.io/server-snippet: |-
-      location /metrics {
-          deny all;
-      }
-
-{{- end }}
+    {{- toYaml . | nindent 4 }}
+  {{- end }}
 spec:
-{{- if .Values.ingress.tls.enabled }}
+  {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
+  ingressClassName: {{ .Values.ingress.className }}
+  {{- end }}
+  {{- if .Values.ingress.tls }}
   tls:
-  - hosts:
-{{- if .Values.service.commonName }}
-    - {{ template "hostname" .Values.service.commonName }}
-{{- end }}
-    - {{ template "hostname" .Values.service.url }}
-{{- if .Values.service.additionalHosts }}
-{{- range $host := .Values.service.additionalHosts }}
-    - {{ template "hostname" $host }}
-{{- end -}}
-{{- end }}
-{{- if not .Values.ingress.tls.useDefaultSecret }}
-    secretName: {{ .Values.ingress.tls.secretName | default (printf "%s-tls" (include "fullname" .)) }}
-{{- end }}
-{{- end }}
-  rules:
-  - host: {{ template "hostname" .Values.service.url }}
-    http:
-      &httpRule
-      paths:
-      - path: {{ .Values.ingress.path | default "/" | quote }}
-        {{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1/Ingress" }}
-        pathType: Prefix
+    {{- range .Values.ingress.tls }}
+    - hosts:
+        {{- range .hosts }}
+        - {{ . | quote }}
         {{- end }}
-        backend:
-          {{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1/Ingress" }}
-          service:
-            name: {{ template "fullname" . }}
-            port:
-              number: {{ .Values.service.externalPort }}
-          {{ else }}
-          serviceName: {{ template "fullname" . }}
-          servicePort: {{ .Values.service.externalPort }}
+      secretName: {{ .secretName }}
+    {{- end }}
+  {{- end }}
+  rules:
+    {{- range .Values.ingress.hosts }}
+    - host: {{ .host | quote }}
+      http:
+        paths:
+          {{- range .paths }}
+          - path: {{ .path }}
+            {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }}
+            pathType: {{ .pathType }}
+            {{- end }}
+            backend:
+              {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }}
+              service:
+                name: {{ $fullName }}
+                port:
+                  number: {{ $svcPort }}
+              {{- else }}
+              serviceName: {{ $fullName }}
+              servicePort: {{ $svcPort }}
+              {{- end }}
           {{- end }}
-      - path: /wsb
-        pathType: Prefix
-        backend:
-          service:
-            name: wsb
-            port:
-              number: 80
-{{- if .Values.service.commonName }}
-  - host: {{ template "hostname" .Values.service.commonName }}
-    http:
-      <<: *httpRule
-{{- end -}}
-{{- if .Values.service.additionalHosts }}
-{{- range $host := .Values.service.additionalHosts }}
-  - host: {{ template "hostname" $host }}
-    http:
-      <<: *httpRule
-{{- end -}}
-{{- end -}}
-{{- end -}}
+          - path: /wsb
+            pathType: Prefix
+            backend:
+              service:
+                name: wsb
+                port:
+                  number: 80
+    {{- end }}
+{{- end }}
diff --git a/chart/templates/network-policy.yaml b/chart/templates/network-policy.yaml
deleted file mode 100644
index a3119ed5d7c02f123e99b73a4256e8419bef2809..0000000000000000000000000000000000000000
--- a/chart/templates/network-policy.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-{{- if .Values.networkPolicy.enabled -}}
-apiVersion: networking.k8s.io/v1
-kind: NetworkPolicy
-metadata:
-  name: {{ template "fullname" . }}
-  labels:
-{{ include "sharedlabels" . | indent 4}}
-spec:
-{{ toYaml .Values.networkPolicy.spec | indent 2 }}
-{{- end -}}
diff --git a/chart/templates/pdb.yaml b/chart/templates/pdb.yaml
index aa75d6c1fb476a4b1f1f569204aa509fc133fad9..23a5e6034f14ccd05bc46fd7f99ecd85f3352702 100644
--- a/chart/templates/pdb.yaml
+++ b/chart/templates/pdb.yaml
@@ -1,19 +1,11 @@
-{{- if .Values.podDisruptionBudget.enabled }}
-apiVersion: policy/v1beta1
+apiVersion: policy/v1
 kind: PodDisruptionBudget
 metadata:
-  name: {{ template "fullname" . }}
+  name: {{ include "chart.fullname" . }}
   labels:
-{{ include "sharedlabels" . | indent 4 }}
+    {{- include "chart.labels" . | nindent 4 }}
 spec:
-{{- if .Values.podDisruptionBudget.minAvailable }}
-  minAvailable: {{ .Values.podDisruptionBudget.minAvailable }}
-{{- end }}
-{{- if .Values.podDisruptionBudget.maxUnavailable }}
-  maxUnavailable: {{ .Values.podDisruptionBudget.maxUnavailable }}
-{{- end }}
   selector:
     matchLabels:
-      app: {{ template "appname" . }}
-      release: {{ .Release.Name }}
-{{- end }}
+      {{- include "chart.selectorLabels" . | nindent 6 }}
+  maxUnavailable: 1
\ No newline at end of file
diff --git a/chart/templates/postgres-instance.yaml b/chart/templates/postgres-instance.yaml
deleted file mode 100644
index 3fbeb73068a61a18772b390e5ed2c5a932b1fdda..0000000000000000000000000000000000000000
--- a/chart/templates/postgres-instance.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
-{{- if .Values.postgresql.managed -}}
-apiVersion: database.crossplane.io/v1alpha1
-kind: PostgreSQLInstance
-metadata:
-  name: {{ template "appname" . }}
-spec:
-  engineVersion: "9.6"
-  writeConnectionSecretToRef:
-    name: app-postgres
-{{- if .Values.postgresql.managedClassSelector }}
-  classSelector:
-{{ toYaml .Values.postgresql.managedClassSelector | indent 4 }}
-{{- end }}
-{{- end -}}
diff --git a/chart/templates/redis_config.yaml b/chart/templates/redis_config.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e1c15044689887a7b22a21a048f1206e79104756
--- /dev/null
+++ b/chart/templates/redis_config.yaml
@@ -0,0 +1,14 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: {{ include "chart.fullname" . }}-redis-container-config
+  labels:
+    {{- include "chart.labels" . | nindent 4 }}
+  {{- with .Values.ingress.annotations }}
+  annotations:
+    {{- toYaml . | nindent 4 }}
+  {{- end }}
+data:
+  redis.conf: |
+    maxmemory 1000000000
+    maxmemory-policy allkeys-lru
\ No newline at end of file
diff --git a/chart/templates/service-account.yaml b/chart/templates/service-account.yaml
deleted file mode 100644
index 8787217ab11ee66dbdd1c6ea38ecc2d7bd8c32f8..0000000000000000000000000000000000000000
--- a/chart/templates/service-account.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-{{- with .Values.serviceAccount -}}
-{{- if .createNew }}
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: {{ .name | quote }}
-{{- if .annotations }}
-  annotations:
-{{ toYaml .annotations | indent 4 }}
-{{- end }}
-{{- end }}
-{{- end -}}
diff --git a/chart/templates/service.yaml b/chart/templates/service.yaml
index 272078b40b33a861bf1b97dd5f69a4100b36f604..dfc5b3a33df5c53750ccf846f12f95780d738991 100644
--- a/chart/templates/service.yaml
+++ b/chart/templates/service.yaml
@@ -1,28 +1,15 @@
-{{- if .Values.service.enabled -}}
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ template "fullname" . }}
-  annotations:
-{{- if .Values.service.annotations }}
-{{ toYaml .Values.service.annotations | indent 4 }}
-{{- end }}
-{{- if .Values.prometheus.metrics }}
-    prometheus.io/scrape: "true"
-    prometheus.io/port: "{{ .Values.service.internalPort }}"
-{{- end }}
+  name: {{ include "chart.fullname" . }}
   labels:
-    track: "{{ .Values.application.track }}"
-{{ include "sharedlabels" . | indent 4 }}
+    {{- include "chart.labels" . | nindent 4 }}
 spec:
   type: {{ .Values.service.type }}
   ports:
-  - port: {{ .Values.service.externalPort }}
-    targetPort: {{ .Values.service.internalPort }}
-    protocol: TCP
-    name: {{ .Values.service.name }}
+    - port: {{ .Values.service.port }}
+      targetPort: http
+      protocol: TCP
+      name: http
   selector:
-    app: {{ template "appname" . }}
-    tier: "{{ .Values.application.tier }}"
-    track: "{{ .Values.application.track }}"
-{{- end -}}
+    {{- include "chart.selectorLabels" . | nindent 4 }}
diff --git a/chart/templates/serviceaccount.yaml b/chart/templates/serviceaccount.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..26a57fa8699607b8662fb94f422638afd35d3a6f
--- /dev/null
+++ b/chart/templates/serviceaccount.yaml
@@ -0,0 +1,12 @@
+{{- if .Values.serviceAccount.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: {{ include "chart.serviceAccountName" . }}
+  labels:
+    {{- include "chart.labels" . | nindent 4 }}
+  {{- with .Values.serviceAccount.annotations }}
+  annotations:
+    {{- toYaml . | nindent 4 }}
+  {{- end }}
+{{- end }}
diff --git a/chart/templates/tests/test-connection.yaml b/chart/templates/tests/test-connection.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8dfed872de8b8125728919d61b4381a12c4f98d7
--- /dev/null
+++ b/chart/templates/tests/test-connection.yaml
@@ -0,0 +1,15 @@
+apiVersion: v1
+kind: Pod
+metadata:
+  name: "{{ include "chart.fullname" . }}-test-connection"
+  labels:
+    {{- include "chart.labels" . | nindent 4 }}
+  annotations:
+    "helm.sh/hook": test
+spec:
+  containers:
+    - name: wget
+      image: busybox
+      command: ['wget']
+      args: ['{{ include "chart.fullname" . }}:{{ .Values.service.port }}']
+  restartPolicy: Never
diff --git a/chart/templates/worker-deployment.yaml b/chart/templates/worker-deployment.yaml
deleted file mode 100644
index 596f4883c4e312248399bef18d659b2463d9cf30..0000000000000000000000000000000000000000
--- a/chart/templates/worker-deployment.yaml
+++ /dev/null
@@ -1,142 +0,0 @@
-{{- if and (not .Values.application.initializeCommand) .Values.workers -}}
-apiVersion: v1
-kind: List
-items:
-{{- range $workerName, $workerConfig :=  .Values.workers }}
-- apiVersion: apps/v1
-  kind: Deployment
-  metadata:
-    name: {{ template "trackableappname" $ }}-{{ $workerName }}
-    annotations:
-      {{ if $.Values.gitlab.app }}app.gitlab.com/app: {{ $.Values.gitlab.app | quote }}{{ end }}
-      {{ if $.Values.gitlab.env }}app.gitlab.com/env: {{ $.Values.gitlab.env | quote }}{{ end }}
-    labels:
-      track: "{{ $.Values.application.track }}"
-      tier: worker
-      chart: "{{ $.Chart.Name }}-{{ $.Chart.Version | replace "+" "_" }}"
-      release: {{ $.Release.Name }}
-      heritage: {{ $.Release.Service }}
-  spec:
-    selector:
-      matchLabels:
-        track: "{{ $.Values.application.track }}"
-        tier: worker
-        release: {{ $.Release.Name }}
-    replicas: {{ $workerConfig.replicaCount }}
-  {{- if $workerConfig.strategyType }}
-    strategy:
-      type: {{ $workerConfig.strategyType | quote }}
-  {{- end  }}
-    template:
-      metadata:
-        annotations:
-          checksum/application-secrets: "{{ $.Values.application.secretChecksum }}"
-          {{ if $.Values.gitlab.app }}app.gitlab.com/app: {{ $.Values.gitlab.app | quote }}{{ end }}
-          {{ if $.Values.gitlab.env }}app.gitlab.com/env: {{ $.Values.gitlab.env | quote }}{{ end }}
-{{- if $.Values.podAnnotations }}
-{{ toYaml $.Values.podAnnotations | indent 10 }}
-{{- end }}
-        labels:
-          track: "{{ $.Values.application.track }}"
-          tier: worker
-          release: {{ $.Release.Name }}
-      spec:
-        imagePullSecrets:
-  {{ toYaml $.Values.image.secrets | indent 12 }}
-{{- with $nodeSelectorConfig := default $.Values.nodeSelector $workerConfig.nodeSelector -}}
-{{- if $nodeSelectorConfig  }}
-        nodeSelector:
-{{ toYaml $nodeSelectorConfig | indent 10 }}
-{{- end }}
-{{- end }}
-{{- with $tolerationsConfig := default $.Values.tolerations $workerConfig.tolerations -}}
-{{- if $tolerationsConfig  }}
-        tolerations:
-{{ toYaml $tolerationsConfig | indent 10 }}
-{{- end }}
-{{- end }}
-{{- with $affinityConfig := default $.Values.affinity $workerConfig.affinity -}}
-{{- if $affinityConfig  }}
-        affinity:
-{{ toYaml $affinityConfig | indent 10 }}
-{{- end }}
-{{- end }}
-        terminationGracePeriodSeconds: {{ $workerConfig.terminationGracePeriodSeconds }}
-        containers:
-        - name: {{ $.Chart.Name }}-{{ $workerName }}
-          image: {{ template "imagename" $ }}
-          command:
-          {{- range $workerConfig.command }}
-          - {{ . }}
-          {{- end }}
-          imagePullPolicy: {{ $.Values.image.pullPolicy }}
-          {{- if $.Values.application.secretName }}
-          envFrom:
-          - secretRef:
-              name: {{ $.Values.application.secretName }}
-          {{- end }}
-          env:
-          - name: DATABASE_URL
-            value: {{ $.Values.application.database_url | quote }}
-          - name: GITLAB_ENVIRONMENT_NAME
-            value: {{ $.Values.gitlab.envName | quote }}
-          - name: GITLAB_ENVIRONMENT_URL
-            value: {{ $.Values.gitlab.envURL | quote }}
-{{- with $livenessProbeConfig := default $.Values.livenessProbe $workerConfig.livenessProbe -}}
-{{- if $livenessProbeConfig }}
-          livenessProbe:
-{{- if eq $livenessProbeConfig.probeType "httpGet" }}
-            httpGet:
-              path: {{ $livenessProbeConfig.path }}
-              scheme: {{ $livenessProbeConfig.scheme }}
-              port: {{ $livenessProbeConfig.port | default $.Values.service.internalPort }}
-{{- else if eq $livenessProbeConfig.probeType "tcpSocket" }}
-            tcpSocket:
-              port: {{ $livenessProbeConfig.port | default $.Values.service.internalPort }}
-{{- else if eq $livenessProbeConfig.probeType "exec" }}
-            exec:
-              command:
-{{ toYaml $livenessProbeConfig.command | indent 16 }}
-{{- end }}
-            initialDelaySeconds: {{ $livenessProbeConfig.initialDelaySeconds }}
-            timeoutSeconds: {{ $livenessProbeConfig.timeoutSeconds }}
-{{- end }}
-{{- end }}
-{{- with $readinessProbeConfig := default $.Values.readinessProbe $workerConfig.readinessProbe -}}
-{{- if $readinessProbeConfig }}
-          readinessProbe:
-{{- if eq $readinessProbeConfig.probeType "httpGet" }}
-            httpGet:
-              path: {{ $readinessProbeConfig.path }}
-              scheme: {{ $readinessProbeConfig.scheme }}
-              port: {{ $readinessProbeConfig.port | default $.Values.service.internalPort }}
-{{- else if eq $readinessProbeConfig.probeType "tcpSocket" }}
-            tcpSocket:
-              port: {{ $readinessProbeConfig.port | default $.Values.service.internalPort }}
-{{- else if eq $readinessProbeConfig.probeType "exec" }}
-            exec:
-              command:
-{{ toYaml $readinessProbeConfig.command | indent 16 }}
-{{- end }}
-            initialDelaySeconds: {{ $readinessProbeConfig.initialDelaySeconds }}
-            timeoutSeconds: {{ $readinessProbeConfig.timeoutSeconds }}
-{{- end }}
-{{- end }}
-          {{- if or $workerConfig.lifecycle $workerConfig.preStopCommand }}
-          lifecycle:
-          {{- if $workerConfig.lifecycle }}
-{{ toYaml $workerConfig.lifecycle | indent 12 }}
-          {{- end }}
-            {{- if $workerConfig.preStopCommand }}
-            preStop:
-              exec:
-                command:
-                {{- range $workerConfig.preStopCommand }}
-                - {{ . }}
-                {{- end }}
-            {{- end}}
-          {{- end }}
-          resources:
-{{ toYaml $.Values.resources | indent 12 }}
-{{- end -}}
-{{- end -}}
diff --git a/chart/test/go.mod b/chart/test/go.mod
deleted file mode 100644
index d2059aede2dc2cb5c009160efff7ec76485bfd08..0000000000000000000000000000000000000000
--- a/chart/test/go.mod
+++ /dev/null
@@ -1,14 +0,0 @@
-module gitlab.com/gitlab-org/charts/auto-deploy-app/test
-
-go 1.15
-
-require (
-	github.com/cilium/cilium v1.8.1
-	github.com/gruntwork-io/terratest v0.32.1
-	github.com/stretchr/testify v1.6.1
-	gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c
-	k8s.io/api v0.19.7
-	k8s.io/apimachinery v0.19.7
-)
-
-replace github.com/optiopay/kafka => github.com/cilium/kafka v0.0.0-20180809090225-01ce283b732b
diff --git a/chart/test/go.sum b/chart/test/go.sum
deleted file mode 100644
index fd27883851dc5f6edcccbc464a737086dbb0fe0c..0000000000000000000000000000000000000000
--- a/chart/test/go.sum
+++ /dev/null
@@ -1,986 +0,0 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
-cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
-cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
-cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
-cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
-cloud.google.com/go v0.51.0 h1:PvKAVQWCtlGUSlZkGW3QLelKaWq7KYv/MW1EboG8bfM=
-cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw=
-cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
-cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
-cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
-cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
-dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-github.com/Azure/azure-sdk-for-go v35.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
-github.com/Azure/azure-sdk-for-go v38.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
-github.com/Azure/azure-sdk-for-go v46.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
-github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
-github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
-github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
-github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0=
-github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630=
-github.com/Azure/go-autorest/autorest v0.11.0/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw=
-github.com/Azure/go-autorest/autorest v0.11.5/go.mod h1:foo3aIXRQ90zFve3r0QiDsrjGDUwWhKl0ZOQy1CT14k=
-github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
-github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc=
-github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q=
-github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q=
-github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg=
-github.com/Azure/go-autorest/autorest/adal v0.9.2/go.mod h1:/3SMAM86bP6wC9Ev35peQDUeqFZBMH07vvUOmg4z/fE=
-github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM=
-github.com/Azure/go-autorest/autorest/azure/auth v0.5.1/go.mod h1:ea90/jvmnAwDrSooLH4sRIehEPtG/EPUXavDh31MnA4=
-github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw=
-github.com/Azure/go-autorest/autorest/azure/cli v0.4.0/go.mod h1:JljT387FplPzBA31vUcvsetLKF3pec5bdAxjVU4kI2s=
-github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
-github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g=
-github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
-github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
-github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
-github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
-github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
-github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
-github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc=
-github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA=
-github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8=
-github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI=
-github.com/Azure/go-autorest/autorest/validation v0.3.0/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E=
-github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
-github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
-github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
-github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
-github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14=
-github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
-github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
-github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
-github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
-github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
-github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
-github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
-github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
-github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
-github.com/StackExchange/wmi v0.0.0-20170410192909-ea383cf3ba6e h1:IHXQQIpxASe3m0Jtcd3XongL+lxHNd5nUmvHxJARUmg=
-github.com/StackExchange/wmi v0.0.0-20170410192909-ea383cf3ba6e/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
-github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
-github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0=
-github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
-github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
-github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
-github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
-github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
-github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
-github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
-github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 h1:zV3ejI06GQ59hwDQAvmK1qxOQGB3WuVTRoY0okPTAv0=
-github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
-github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
-github.com/aws/aws-sdk-go v1.16.26/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
-github.com/aws/aws-sdk-go v1.27.1 h1:MXnqY6SlWySaZAqNnXThOvjRFdiiOuKtC6i7baFdNdU=
-github.com/aws/aws-sdk-go v1.27.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
-github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
-github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
-github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
-github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
-github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
-github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI=
-github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
-github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
-github.com/c9s/goprocinfo v0.0.0-20190309065803-0b2ad9ac246b/go.mod h1:uEyr4WpAH4hio6LFriaPkL938XnrvLpNPmQHBdrmbIE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/census-instrumentation/opencensus-proto v0.2.2-0.20191220023634-be218fb6bd67/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
-github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
-github.com/cespare/xxhash/v2 v2.1.0 h1:yTUvW7Vhb89inJ+8irsUqiWjh8iT6sQPZiQzI6ReGkA=
-github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM=
-github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
-github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
-github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
-github.com/cilium/arping v1.0.1-0.20190728065459-c5eaf8d7a710/go.mod h1:ohfPr9hSb4vRsw5UEjCs3OoWD38U0z8EfSgZPbIe/+M=
-github.com/cilium/cilium v1.8.1 h1:xbVx+e420V6bWTZVbOvIJAGBfUifouWghSzM7qzlnRk=
-github.com/cilium/cilium v1.8.1/go.mod h1:tbQxBHzwgQBE39O1xr6+QyIShCAml0iM38MC//5SAvg=
-github.com/cilium/deepequal-gen v0.0.0-20200406125435-ad6a9003139e/go.mod h1:c4R5wxGyXhbM6zyKeRKNIc9aab5EZi4z4oOSZvUMvZA=
-github.com/cilium/ebpf v0.0.0-20200612163523-d7bee28bad96/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s=
-github.com/cilium/ipam v0.0.0-20200420133938-2f672ef3ad54/go.mod h1:Ascfar4FtgB+K+mwqbZpSb3WVZ5sPFIarg+iAOXNZqI=
-github.com/cilium/kafka v0.0.0-20180809090225-01ce283b732b/go.mod h1:ktgizta3CPZBKz5uW272SJyjiro0vn4nOVP7Pk4RopA=
-github.com/cilium/proxy v0.0.0-20200309181938-3cf80fe45d03/go.mod h1:MsrtgITWuZatZCS715qDH+dp2iaVjOuxnIr8uwja5cM=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191230090109-edbea6a78f6d/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
-github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
-github.com/containernetworking/cni v0.7.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
-github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
-github.com/containernetworking/plugins v0.8.2/go.mod h1:TxALKWZpWL79BC3GOYKJzzXr7U8R23PdhwaLp6F3adc=
-github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
-github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
-github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
-github.com/coreos/go-iptables v0.4.2/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
-github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
-github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
-github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
-github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
-github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
-github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
-github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
-github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ=
-github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s=
-github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8=
-github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I=
-github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
-github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
-github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
-github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
-github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
-github.com/docker/cli v0.0.0-20200109221225-a4f60165b7a3/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
-github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y=
-github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
-github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/docker/libnetwork v0.0.0-20190128195551-d8d4c8cf03d7/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8=
-github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
-github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c h1:ZfSZ3P3BedhKGUhzj7BQlPSU4OvT6tfOKe3DVHzOA7s=
-github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
-github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
-github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
-github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
-github.com/elazarl/goproxy v0.0.0-20190911111923-ecfe977594f1 h1:yY9rWGoXv1U5pl4gxqlULARMQD7x0QG85lqEXTWysik=
-github.com/elazarl/goproxy v0.0.0-20190911111923-ecfe977594f1/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM=
-github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2 h1:dWB6v3RcOy03t/bUadywsbyrQwCqZeNIEX6M1OtSZOM=
-github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8=
-github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v0.2.0-java.0.20191226181232-973ea075fe98/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v0.3.0-java/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
-github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
-github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
-github.com/fsnotify/fsnotify v1.4.10-0.20200417215612-7f4cf4dd2b52 h1:0NmERxogGTU8hgzOhRKNoKivtBZkDW29GeuJtK9e0sc=
-github.com/fsnotify/fsnotify v1.4.10-0.20200417215612-7f4cf4dd2b52/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
-github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
-github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
-github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
-github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
-github.com/go-errors/errors v1.0.2-0.20180813162953-d98b870cc4e0 h1:skJKxRtNmevLqnayafdLe2AsenqRupVmzZSqrvb5caU=
-github.com/go-errors/errors v1.0.2-0.20180813162953-d98b870cc4e0/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
-github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
-github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY=
-github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
-github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E=
-github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
-github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI=
-github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
-github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
-github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk=
-github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU=
-github.com/go-openapi/analysis v0.19.10 h1:5BHISBAXOc/aJK25irLZnx2D3s6WyYaY9D4gmuz9fdE=
-github.com/go-openapi/analysis v0.19.10/go.mod h1:qmhS3VNFxBlquFJ0RGoDtylO9y4pgTAUNE9AEEMdlJQ=
-github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
-github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
-github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
-github.com/go-openapi/errors v0.19.3 h1:7MGZI1ibQDLasvAz8HuhvYk9eNJbJkCOXWsSjjMS+Zc=
-github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
-github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
-github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
-github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
-github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
-github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w=
-github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
-github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
-github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
-github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
-github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
-github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o=
-github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
-github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs=
-github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk=
-github.com/go-openapi/loads v0.19.5 h1:jZVYWawIQiA1NBnHla28ktg6hrcfTHsCE+3QLVRBIls=
-github.com/go-openapi/loads v0.19.5/go.mod h1:dswLCAdonkRufe/gSUC3gN8nTSaB9uaS2es0x5/IbjY=
-github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA=
-github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64=
-github.com/go-openapi/runtime v0.19.4 h1:csnOgcgAiuGoM/Po7PEpKDoNulCcF3FGbSnbHfxgjMI=
-github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4=
-github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
-github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
-github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
-github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY=
-github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
-github.com/go-openapi/spec v0.19.6 h1:rMMMj8cV38KVXK7SFc+I2MWClbEfbK705+j+dyqun5g=
-github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
-github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
-github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
-github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY=
-github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU=
-github.com/go-openapi/strfmt v0.19.4 h1:eRvaqAhpL0IL6Trh5fDsGnGhiXndzHFuA05w6sXH6/g=
-github.com/go-openapi/strfmt v0.19.4/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk=
-github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
-github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
-github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
-github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-openapi/swag v0.19.7 h1:VRuXN2EnMSsZdauzdss6JBC29YotDqG59BZ+tdlIL1s=
-github.com/go-openapi/swag v0.19.7/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
-github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4=
-github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
-github.com/go-openapi/validate v0.19.5 h1:QhCBKRYqZR+SKo4gl1lPhPahope8/RLt6EVgY8X80w0=
-github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4=
-github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
-github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
-github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
-github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
-github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
-github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
-github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg=
-github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
-github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
-github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs=
-github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
-github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
-github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk=
-github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28=
-github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo=
-github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk=
-github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw=
-github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360=
-github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg=
-github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE=
-github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8=
-github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
-github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
-github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
-github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
-github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ=
-github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
-github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
-github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
-github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
-github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
-github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
-github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
-github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-containerregistry v0.0.0-20200110202235-f4fb41bf00a3/go.mod h1:2wIuQute9+hhWqvL3vEI7YB0EKluF4WcPzI1eAliazk=
-github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
-github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM=
-github.com/google/gops v0.3.6/go.mod h1:RZ1rH95wsAGX4vMWKmqBOIWynmWisBf4QFdgT/k/xOI=
-github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
-github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
-github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
-github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
-github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
-github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
-github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
-github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I=
-github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
-github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
-github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
-github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
-github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
-github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
-github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
-github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
-github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
-github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
-github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
-github.com/gruntwork-io/gruntwork-cli v0.7.0 h1:YgSAmfCj9c61H+zuvHwKfYUwlMhu5arnQQLM4RH+CYs=
-github.com/gruntwork-io/gruntwork-cli v0.7.0/go.mod h1:jp6Z7NcLF2avpY8v71fBx6hds9eOFPELSuD/VPv7w00=
-github.com/gruntwork-io/terratest v0.32.1 h1:Uho3H7VWD4tEulWov7pWW90V3XATLKxSh88AtrxTYvU=
-github.com/gruntwork-io/terratest v0.32.1/go.mod h1:PlvB/MeCTUE9gX2Eabx/GAFjfuFL8kR8gfwxxn2B15Q=
-github.com/hashicorp/consul/api v1.2.0/go.mod h1:1SIkFYi2ZTXUE5Kgt179+4hH33djo11+0Eo2XgTAtkw=
-github.com/hashicorp/consul/sdk v0.2.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
-github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
-github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
-github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
-github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
-github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
-github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
-github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
-github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI=
-github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
-github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
-github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
-github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
-github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
-github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
-github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
-github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
-github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
-github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
-github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
-github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
-github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
-github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
-github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE=
-github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
-github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
-github.com/imdario/mergo v0.3.7 h1:Y+UAYTZ7gDEuOfhxKWy+dvb5dRQ6rJjFSdX2HZY1/gI=
-github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
-github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
-github.com/ishidawataru/sctp v0.0.0-20180213033435-07191f837fed/go.mod h1:DM4VvS+hD/kDi1U1QsX2fnZowwBhqD0Dk3bRPKF/Oc8=
-github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA=
-github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s=
-github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
-github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
-github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8=
-github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
-github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
-github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
-github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
-github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
-github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
-github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
-github.com/juju/errors v0.0.0-20180806074554-22422dad46e1/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q=
-github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U=
-github.com/juju/testing v0.0.0-20190613124551-e81189438503/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA=
-github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
-github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
-github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
-github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
-github.com/keybase/go-ps v0.0.0-20161005175911-668c8856d999/go.mod h1:hY+WOq6m2FpbvyrI93sMaypsttvaIL5nhVR92dTMUcQ=
-github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
-github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
-github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
-github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
-github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/lyft/protoc-gen-star v0.4.14/go.mod h1:mE8fbna26u7aEA2QCVvvfBU/ZrPgocG1206xAFPcs94=
-github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
-github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
-github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
-github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
-github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8=
-github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
-github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
-github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
-github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
-github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
-github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
-github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
-github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
-github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
-github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
-github.com/mattn/go-shellwords v1.0.5/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
-github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo=
-github.com/mattn/go-zglob v0.0.2-0.20190814121620-e3c945676326/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo=
-github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
-github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY=
-github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
-github.com/miekg/dns v1.1.31 h1:sJFOl9BgwbYAWOGEwr61FU28pqsBNdpRBnhGXtO06Oo=
-github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
-github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
-github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
-github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
-github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
-github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
-github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
-github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-github.com/mitchellh/protoc-gen-go-json v0.0.0-20200113165135-fd297ce346f1/go.mod h1:VhkV06JZBMrulb3fNiUvM5Lmz3yc7ei3omzocl9UtCw=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
-github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
-github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
-github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
-github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
-github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
-github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
-github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
-github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
-github.com/oracle/oci-go-sdk v7.1.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888=
-github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
-github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
-github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
-github.com/pelletier/go-toml v1.4.0 h1:u3Z1r+oOXJIkxqw34zVhyPgjBsm6X2wn21NWs/HfSeg=
-github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
-github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
-github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ=
-github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o=
-github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
-github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
-github.com/pquerna/otp v1.2.0 h1:/A3+Jn+cagqayeR3iHs/L62m5ue7710D35zl1zJ1kok=
-github.com/pquerna/otp v1.2.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg=
-github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
-github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.2.0 h1:g4yo/h/me4ZL9o0SVHNRdS2jn5SY8GDmMgkhQ8Mz70s=
-github.com/prometheus/client_golang v1.2.0/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U=
-github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
-github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
-github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY=
-github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
-github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8=
-github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
-github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
-github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M=
-github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
-github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc=
-github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto=
-github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
-github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
-github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
-github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
-github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
-github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4=
-github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM=
-github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
-github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U=
-github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
-github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
-github.com/servak/go-fastping v0.0.0-20160802140958-5718d12e20a0/go.mod h1:udnTWkGp1ZiRsEU6rPpITf4oM2aLVcoGY/Z100KY4zY=
-github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7 h1:80VN+vGkqM773Br/uNNTSheo3KatTgV8IpjIKjvVLng=
-github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
-github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
-github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
-github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
-github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
-github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
-github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
-github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
-github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
-github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
-github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
-github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
-github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
-github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
-github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
-github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
-github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
-github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
-github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
-github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
-github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
-github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
-github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
-github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
-github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
-github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
-github.com/spf13/viper v1.6.1 h1:VPZzIkznI1YhVMRi6vNFLHSwhnhReBfgTxIPccpfdZk=
-github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
-github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
-github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
-github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
-github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
-github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
-github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
-github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
-github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
-github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
-github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
-github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo=
-github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
-github.com/vdemeester/k8s-pkg-credentialprovider v0.0.0-20200107171650-7c61ffa44238/go.mod h1:JwQJCMWpUDqjZrB5jpw0f5VbN7U95zxFy1ZDpoEarGo=
-github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw=
-github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
-github.com/vishvananda/netlink v1.1.1-0.20200603190939-5a869a71f0cb/go.mod h1:FSQhuTO7eHT34mPzX+B04SUAjiqLxtXs1et0S6l9k4k=
-github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI=
-github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
-github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU=
-github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
-github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
-github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
-github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
-github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
-github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
-go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
-go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
-go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.mongodb.org/mongo-driver v1.3.0 h1:ew6uUIeJOo+qdUUv7LxFCUhtWmVv7ZV/Xuy4FAUsw2E=
-go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
-go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
-go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
-go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
-go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
-go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
-go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
-go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
-golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
-golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
-golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
-golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
-golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
-golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
-golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
-golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
-golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
-golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20171017063910-8dbc5d05d6ed/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190516110030-61b9204099cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200121082415-34d275377bf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201112073958-5cba982894dd h1:5CtCZbICpIOFdgO940moixOPjc0178IU44m4EjOO5IY=
-golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
-golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI=
-golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191205215504-7b8c8591a921/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200113040837-eac381796e91/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200324175852-6fb6f5a9fc59/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
-gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
-gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
-google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
-google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4=
-google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
-google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
-google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
-google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
-google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
-google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
-google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
-google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA=
-google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA=
-google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
-gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
-gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
-gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
-gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
-gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
-gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
-gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
-gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
-gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
-gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
-gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI=
-k8s.io/api v0.18.4/go.mod h1:lOIQAKYgai1+vz9J7YcDZwC26Z0zQewYOGWdyIPUUQ4=
-k8s.io/api v0.19.3/go.mod h1:VF+5FT1B74Pw3KxMdKyinLo+zynBaMBiAfGMuldcNDs=
-k8s.io/api v0.19.7 h1:MpHhls03C2pyzoYcpbe4QqYiiZjdvW+tuWq6TbjV14Y=
-k8s.io/api v0.19.7/go.mod h1:KTryDUT3l6Mtv7K2J2486PNL9DBns3wOYTkGR+iz63Y=
-k8s.io/apiextensions-apiserver v0.18.4/go.mod h1:NYeyeYq4SIpFlPxSAB6jHPIdvu3hL0pc36wuRChybio=
-k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg=
-k8s.io/apimachinery v0.18.4/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko=
-k8s.io/apimachinery v0.19.3/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
-k8s.io/apimachinery v0.19.7 h1:nTaEnYVH+i//aPgMA0zTEV2lfVLCV9LextqVd67mulc=
-k8s.io/apimachinery v0.19.7/go.mod h1:6sRbGRAVY5DOCuZwB5XkqguBqpqLU6q/kOaOdk29z6Q=
-k8s.io/apiserver v0.17.0/go.mod h1:ABM+9x/prjINN6iiffRVNCBR2Wk7uY4z+EtEGZD48cg=
-k8s.io/apiserver v0.18.4/go.mod h1:q+zoFct5ABNnYkGIaGQ3bcbUNdmPyOCoEBcg51LChY8=
-k8s.io/client-go v0.17.0/go.mod h1:TYgR6EUHs6k45hb6KWjVD6jFZvJV4gHDikv/It0xz+k=
-k8s.io/client-go v0.18.4/go.mod h1:f5sXwL4yAZRkAtzOxRWUhA/N8XzGCb+nPZI8PfobZ9g=
-k8s.io/client-go v0.19.3 h1:ctqR1nQ52NUs6LpI0w+a5U+xjYwflFwA13OJKcicMxg=
-k8s.io/client-go v0.19.3/go.mod h1:+eEMktZM+MG0KO+PTkci8xnbCZHvj9TqR6Q1XDUIJOM=
-k8s.io/cloud-provider v0.17.0/go.mod h1:Ze4c3w2C0bRsjkBUoHpFi+qWe3ob1wI2/7cUn+YQIDE=
-k8s.io/code-generator v0.0.0-20191121015212-c4c8f8345c7e/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s=
-k8s.io/code-generator v0.18.4/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c=
-k8s.io/component-base v0.17.0/go.mod h1:rKuRAokNMY2nn2A6LP/MiwpoaMRHpfRnrPaUJJj1Yoc=
-k8s.io/component-base v0.18.4/go.mod h1:7jr/Ef5PGmKwQhyAz/pjByxJbC58mhKAhiaDu0vXfPk=
-k8s.io/csi-translation-lib v0.17.0/go.mod h1:HEF7MEz7pOLJCnxabi45IPkhSsE/KmxPQksuCrHKWls=
-k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
-k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
-k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
-k8s.io/gengo v0.0.0-20200205140755-e0e292d8aa12/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
-k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
-k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
-k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
-k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
-k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A=
-k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
-k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
-k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
-k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o=
-k8s.io/legacy-cloud-providers v0.17.0/go.mod h1:DdzaepJ3RtRy+e5YhNtrCYwlgyK87j/5+Yfp0L9Syp8=
-k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
-k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
-k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg=
-k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=
-modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
-modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
-modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
-modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
-rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
-rsc.io/goversion v1.0.0/go.mod h1:Eih9y/uIBS3ulggl7KNJ09xGSLcuNaLgmvvqa07sgfo=
-sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0=
-sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
-sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU=
-sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18=
-sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
-sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
-sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA=
-sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
-sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
-sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
-sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
diff --git a/chart/test/templates/ciliumnetworkpolicy_test.go b/chart/test/templates/ciliumnetworkpolicy_test.go
deleted file mode 100644
index 12e3c6947bba294744e41bb548599a56deb94060..0000000000000000000000000000000000000000
--- a/chart/test/templates/ciliumnetworkpolicy_test.go
+++ /dev/null
@@ -1,156 +0,0 @@
-package main
-
-import (
-	"regexp"
-	"testing"
-
-	v2 "github.com/cilium/cilium/pkg/k8s/apis/cilium.io/v2"
-	slim_metav1 "github.com/cilium/cilium/pkg/k8s/slim/k8s/apis/meta/v1"
-	"github.com/cilium/cilium/pkg/policy/api"
-	"github.com/gruntwork-io/terratest/modules/helm"
-	"github.com/stretchr/testify/require"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-func TestCiliumNetworkPolicy(t *testing.T) {
-	releaseName := "cilium-network-policy-test"
-	templates := []string{"templates/cilium-network-policy.yaml"}
-	expectedLabels := map[string]string{
-		"app":                          releaseName,
-		"chart":                        chartName,
-		"release":                      releaseName,
-		"heritage":                     "Helm",
-		"app.kubernetes.io/name":       releaseName,
-		"helm.sh/chart":                chartName,
-		"app.kubernetes.io/managed-by": "Helm",
-		"app.kubernetes.io/instance":   releaseName,
-		"app.gitlab.com/proj":          "",
-	}
-	expectedLabelsWithProjectID := map[string]string{
-		"app":                          releaseName,
-		"chart":                        chartName,
-		"release":                      releaseName,
-		"heritage":                     "Helm",
-		"app.kubernetes.io/name":       releaseName,
-		"helm.sh/chart":                chartName,
-		"app.kubernetes.io/managed-by": "Helm",
-		"app.kubernetes.io/instance":   releaseName,
-		"app.gitlab.com/proj":          "91",
-	}
-
-	tcs := []struct {
-		name       string
-		valueFiles []string
-		values     map[string]string
-
-		expectedErrorRegexp *regexp.Regexp
-
-		meta             metav1.ObjectMeta
-		endpointSelector api.EndpointSelector
-		ingress          []api.IngressRule
-		egress           []api.EgressRule
-	}{
-		{
-			name:                "disabled by default",
-			expectedErrorRegexp: regexp.MustCompile("Error: could not find template templates/cilium-network-policy.yaml in chart"),
-		},
-		{
-			name:   "with default policy without project ID",
-			values: map[string]string{"ciliumNetworkPolicy.enabled": "true"},
-			meta:   metav1.ObjectMeta{Name: releaseName + "-auto-deploy", Labels: expectedLabels},
-			endpointSelector: api.EndpointSelector{
-				LabelSelector: &slim_metav1.LabelSelector{MatchLabels: map[string]string(nil)},
-			},
-			ingress: []api.IngressRule{
-				{
-					FromEndpoints: []api.EndpointSelector{
-						{LabelSelector: &slim_metav1.LabelSelector{
-							MatchLabels: map[string]string{"any.app.gitlab.com/managed_by": "gitlab"},
-						}},
-					},
-				},
-			},
-		},
-		{
-			name:   "with default policy",
-			values: map[string]string{"ciliumNetworkPolicy.enabled": "true", "gitlab.projectID": "91"},
-			meta:   metav1.ObjectMeta{Name: releaseName + "-auto-deploy", Labels: expectedLabelsWithProjectID},
-			endpointSelector: api.EndpointSelector{
-				LabelSelector: &slim_metav1.LabelSelector{MatchLabels: map[string]string(nil)},
-			},
-			ingress: []api.IngressRule{
-				{
-					FromEndpoints: []api.EndpointSelector{
-						{LabelSelector: &slim_metav1.LabelSelector{
-							MatchLabels: map[string]string{"any.app.gitlab.com/managed_by": "gitlab"},
-						}},
-					},
-				},
-			},
-		},
-		{
-			name:       "with custom policy without alerts",
-			valueFiles: []string{"../testdata/custom-cilium-policy.yaml"},
-			values:     map[string]string{"ciliumNetworkPolicy.enabled": "true", "gitlab.projectID": "91", "ciliumNetworkPolicy.alerts.enabled": "false"},
-			meta:       metav1.ObjectMeta{Name: releaseName + "-auto-deploy", Labels: expectedLabelsWithProjectID},
-			endpointSelector: api.EndpointSelector{
-				LabelSelector: &slim_metav1.LabelSelector{MatchLabels: map[string]string(nil)},
-			},
-			ingress: []api.IngressRule{
-				{
-					FromEndpoints: []api.EndpointSelector{
-						{LabelSelector: &slim_metav1.LabelSelector{
-							MatchLabels: map[string]string{"any.app.gitlab.com/managed_by": "gitlab"},
-						}},
-					},
-				},
-			},
-		},
-		{
-			name:       "with custom policy with alerts",
-			valueFiles: []string{"../testdata/custom-cilium-policy.yaml"},
-			values:     map[string]string{"ciliumNetworkPolicy.enabled": "true", "gitlab.projectID": "91"},
-			meta:       metav1.ObjectMeta{Name: releaseName + "-auto-deploy", Labels: expectedLabelsWithProjectID, Annotations: map[string]string{"app.gitlab.com/alert": "true"}},
-			endpointSelector: api.EndpointSelector{
-				LabelSelector: &slim_metav1.LabelSelector{MatchLabels: map[string]string(nil)},
-			},
-			ingress: []api.IngressRule{
-				{
-					FromEndpoints: []api.EndpointSelector{
-						{LabelSelector: &slim_metav1.LabelSelector{
-							MatchLabels: map[string]string{"any.app.gitlab.com/managed_by": "gitlab"},
-						}},
-					},
-				},
-			},
-		},
-	}
-
-	for _, tc := range tcs {
-		t.Run(tc.name, func(t *testing.T) {
-			opts := &helm.Options{
-				ValuesFiles: tc.valueFiles,
-				SetValues:   tc.values,
-			}
-			output, err := helm.RenderTemplateE(t, opts, helmChartPath, releaseName, templates)
-
-			if tc.expectedErrorRegexp != nil {
-				require.Regexp(t, tc.expectedErrorRegexp, err.Error())
-				return
-			}
-			if err != nil {
-				t.Error(err)
-				return
-			}
-
-			policy := new(v2.CiliumNetworkPolicy)
-			helm.UnmarshalK8SYaml(t, output, policy)
-
-			require.Equal(t, tc.meta, policy.ObjectMeta)
-			require.Equal(t, tc.endpointSelector.LabelSelector, policy.Spec.EndpointSelector.LabelSelector)
-			require.Equal(t, tc.ingress[0].FromEndpoints[0].LabelSelector, policy.Spec.Ingress[0].FromEndpoints[0].LabelSelector)
-			require.Equal(t, len(tc.ingress), len(policy.Spec.Ingress))
-			require.Equal(t, len(tc.ingress[0].FromEndpoints), len(policy.Spec.Ingress[0].FromEndpoints))
-		})
-	}
-}
diff --git a/chart/test/templates/deployment_test.go b/chart/test/templates/deployment_test.go
deleted file mode 100644
index 1a8b4d60078ddba9569b1489bfd151e1cf95e2f6..0000000000000000000000000000000000000000
--- a/chart/test/templates/deployment_test.go
+++ /dev/null
@@ -1,589 +0,0 @@
-package main
-
-import (
-	"regexp"
-	"strings"
-	"testing"
-
-	"github.com/gruntwork-io/terratest/modules/helm"
-	"github.com/gruntwork-io/terratest/modules/k8s"
-	"github.com/gruntwork-io/terratest/modules/random"
-	"github.com/stretchr/testify/require"
-	appsV1 "k8s.io/api/apps/v1"
-	coreV1 "k8s.io/api/core/v1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/util/intstr"
-)
-
-func TestDeploymentTemplate(t *testing.T) {
-	for _, tc := range []struct {
-		CaseName string
-		Release  string
-		Values   map[string]string
-
-		ExpectedErrorRegexp *regexp.Regexp
-
-		ExpectedName         string
-		ExpectedRelease      string
-		ExpectedStrategyType appsV1.DeploymentStrategyType
-	}{
-		{
-			CaseName: "happy",
-			Release:  "production",
-			Values: map[string]string{
-				"releaseOverride": "productionOverridden",
-			},
-			ExpectedName:         "productionOverridden",
-			ExpectedRelease:      "production",
-			ExpectedStrategyType: appsV1.DeploymentStrategyType(""),
-		}, {
-			// See https://github.com/helm/helm/issues/6006
-			CaseName: "long release name",
-			Release:  strings.Repeat("r", 80),
-
-			ExpectedErrorRegexp: regexp.MustCompile("Error: release name .* exceeds max length of 53"),
-		},
-		{
-			CaseName: "strategyType",
-			Release:  "production",
-			Values: map[string]string{
-				"strategyType": "Recreate",
-			},
-			ExpectedName:         "production",
-			ExpectedRelease:      "production",
-			ExpectedStrategyType: appsV1.RecreateDeploymentStrategyType,
-		},
-	} {
-		t.Run(tc.CaseName, func(t *testing.T) {
-			namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId())
-
-			values := map[string]string{
-				"gitlab.app": "auto-devops-examples/minimal-ruby-app",
-				"gitlab.env": "prod",
-			}
-
-			mergeStringMap(values, tc.Values)
-
-			options := &helm.Options{
-				SetValues:      values,
-				KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
-			}
-
-			output, err := helm.RenderTemplateE(t, options, helmChartPath, tc.Release, []string{"templates/deployment.yaml"})
-
-			if tc.ExpectedErrorRegexp != nil {
-				require.Regexp(t, tc.ExpectedErrorRegexp, err.Error())
-				return
-			}
-			if err != nil {
-				t.Error(err)
-				return
-			}
-
-			var deployment appsV1.Deployment
-			helm.UnmarshalK8SYaml(t, output, &deployment)
-
-			require.Equal(t, tc.ExpectedName, deployment.Name)
-			require.Equal(t, tc.ExpectedStrategyType, deployment.Spec.Strategy.Type)
-
-			require.Equal(t, map[string]string{
-				"app.gitlab.com/app": "auto-devops-examples/minimal-ruby-app",
-				"app.gitlab.com/env": "prod",
-			}, deployment.Annotations)
-			require.Equal(t, map[string]string{
-				"app":                          tc.ExpectedName,
-				"chart":                        chartName,
-				"heritage":                     "Helm",
-				"release":                      tc.ExpectedRelease,
-				"tier":                         "web",
-				"track":                        "stable",
-				"app.kubernetes.io/name":       tc.ExpectedName,
-				"helm.sh/chart":                chartName,
-				"app.kubernetes.io/managed-by": "Helm",
-				"app.kubernetes.io/instance":   tc.ExpectedRelease,
-			}, deployment.Labels)
-
-			require.Equal(t, map[string]string{
-				"app.gitlab.com/app":           "auto-devops-examples/minimal-ruby-app",
-				"app.gitlab.com/env":           "prod",
-				"checksum/application-secrets": "",
-			}, deployment.Spec.Template.Annotations)
-			require.Equal(t, map[string]string{
-				"app":                          tc.ExpectedName,
-				"chart":                        chartName,
-				"heritage":                     "Helm",
-				"release":                      tc.ExpectedRelease,
-				"tier":                         "web",
-				"track":                        "stable",
-				"app.kubernetes.io/name":       tc.ExpectedName,
-				"helm.sh/chart":                chartName,
-				"app.kubernetes.io/managed-by": "Helm",
-				"app.kubernetes.io/instance":   tc.ExpectedRelease,
-			}, deployment.Spec.Template.Labels)
-		})
-	}
-
-	for _, tc := range []struct {
-		CaseName                string
-		Release                 string
-		Values                  map[string]string
-		ExpectedImageRepository string
-	}{
-		{
-			CaseName: "skaffold",
-			Release:  "production",
-			Values: map[string]string{
-				"image.repository": "skaffold",
-				"image.tag":        "",
-			},
-			ExpectedImageRepository: "skaffold",
-		},
-		{
-			CaseName: "skaffold",
-			Release:  "production",
-			Values: map[string]string{
-				"image.repository": "skaffold",
-				"image.tag":        "stable",
-			},
-			ExpectedImageRepository: "skaffold:stable",
-		},
-	} {
-		t.Run(tc.CaseName, func(t *testing.T) {
-			namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId())
-
-			values := map[string]string{
-				"gitlab.app": "auto-devops-examples/minimal-ruby-app",
-				"gitlab.env": "prod",
-			}
-
-			mergeStringMap(values, tc.Values)
-
-			options := &helm.Options{
-				SetValues:      values,
-				KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
-			}
-
-			output := helm.RenderTemplate(t, options, helmChartPath, tc.Release, []string{"templates/deployment.yaml"})
-
-			var deployment appsV1.Deployment
-			helm.UnmarshalK8SYaml(t, output, &deployment)
-
-			require.Equal(t, tc.ExpectedImageRepository, deployment.Spec.Template.Spec.Containers[0].Image)
-		})
-	}
-
-	// serviceAccountName
-	for _, tc := range []struct {
-		CaseName                   string
-		Release                    string
-		Values                     map[string]string
-		ExpectedServiceAccountName string
-	}{
-		{
-			CaseName:                   "default service account",
-			Release:                    "production",
-			ExpectedServiceAccountName: "",
-		},
-		{
-			CaseName: "empty service account name",
-			Release:  "production",
-			Values: map[string]string{
-				"serviceAccountName": "",
-			},
-			ExpectedServiceAccountName: "",
-		},
-		{
-			CaseName: "custom service account name - myServiceAccount",
-			Release:  "production",
-			Values: map[string]string{
-				"serviceAccountName": "myServiceAccount",
-			},
-			ExpectedServiceAccountName: "myServiceAccount",
-		},
-	} {
-		t.Run(tc.CaseName, func(t *testing.T) {
-			namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId())
-
-			values := map[string]string{
-				"gitlab.app": "auto-devops-examples/minimal-ruby-app",
-				"gitlab.env": "prod",
-			}
-
-			mergeStringMap(values, tc.Values)
-
-			options := &helm.Options{
-				SetValues:      values,
-				KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
-			}
-
-			output := helm.RenderTemplate(t, options, helmChartPath, tc.Release, []string{"templates/deployment.yaml"})
-
-			var deployment appsV1.Deployment
-			helm.UnmarshalK8SYaml(t, output, &deployment)
-
-			require.Equal(t, tc.ExpectedServiceAccountName, deployment.Spec.Template.Spec.ServiceAccountName)
-		})
-	}
-
-	// serviceAccount
-	for _, tc := range []struct {
-		CaseName string
-		Release  string
-		Values   map[string]string
-
-		ExpectedServiceAccountName string
-	}{
-		{
-			CaseName:                   "default service account",
-			Release:                    "production",
-			ExpectedServiceAccountName: "",
-		},
-		{
-			CaseName: "empty service account name",
-			Release:  "production",
-			Values: map[string]string{
-				"serviceAccount.name": "",
-			},
-			ExpectedServiceAccountName: "",
-		},
-		{
-			CaseName: "custom service account name - myServiceAccount",
-			Release:  "production",
-			Values: map[string]string{
-				"serviceAccount.name": "myServiceAccount",
-			},
-			ExpectedServiceAccountName: "myServiceAccount",
-		},
-		{
-			CaseName: "serviceAccount.name takes precedence over serviceAccountName",
-			Release:  "production",
-			Values: map[string]string{
-				"serviceAccount.name": "myServiceAccount1",
-				"serviceAccountName":  "myServiceAccount2",
-			},
-			ExpectedServiceAccountName: "myServiceAccount1",
-		},
-	} {
-		t.Run(tc.CaseName, func(t *testing.T) {
-			namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId())
-
-			values := map[string]string{
-				"gitlab.app": "auto-devops-examples/minimal-ruby-app",
-				"gitlab.env": "prod",
-			}
-
-			mergeStringMap(values, tc.Values)
-
-			options := &helm.Options{
-				SetValues:      values,
-				KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
-			}
-
-			output := helm.RenderTemplate(
-				t,
-				options,
-				helmChartPath,
-				tc.Release,
-				[]string{"templates/deployment.yaml"},
-			)
-
-			var deployment appsV1.Deployment
-			helm.UnmarshalK8SYaml(t, output, &deployment)
-
-			require.Equal(t, tc.ExpectedServiceAccountName, deployment.Spec.Template.Spec.ServiceAccountName)
-		})
-	}
-
-	// deployment lifecycle
-	for _, tc := range []struct {
-		CaseName string
-		Release  string
-		Values   map[string]string
-
-		ExpectedLifecycle *coreV1.Lifecycle
-	}{
-		{
-			CaseName: "lifecycle",
-			Release:  "production",
-			Values: map[string]string{
-				"lifecycle.preStop.exec.command[0]": "/bin/sh",
-				"lifecycle.preStop.exec.command[1]": "-c",
-				"lifecycle.preStop.exec.command[2]": "sleep 10",
-			},
-			ExpectedLifecycle: &coreV1.Lifecycle{
-				PreStop: &coreV1.Handler{
-					Exec: &coreV1.ExecAction{
-						Command: []string{"/bin/sh", "-c", "sleep 10"},
-					},
-				},
-			},
-		},
-	} {
-		t.Run(tc.CaseName, func(t *testing.T) {
-			namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId())
-
-			values := map[string]string{
-				"gitlab.app": "auto-devops-examples/minimal-ruby-app",
-				"gitlab.env": "prod",
-			}
-
-			mergeStringMap(values, tc.Values)
-
-			options := &helm.Options{
-				SetValues:      values,
-				KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
-			}
-
-			output := helm.RenderTemplate(t, options, helmChartPath, tc.Release, []string{"templates/deployment.yaml"})
-
-			var deployment appsV1.Deployment
-			helm.UnmarshalK8SYaml(t, output, &deployment)
-
-			require.Equal(t, tc.ExpectedLifecycle, deployment.Spec.Template.Spec.Containers[0].Lifecycle)
-		})
-	}
-
-	// deployment livenessProbe, and readinessProbe tests
-	for _, tc := range []struct {
-		CaseName string
-		Release  string
-		Values   map[string]string
-
-		ExpectedLivenessProbe  *coreV1.Probe
-		ExpectedReadinessProbe *coreV1.Probe
-	}{
-		{
-			CaseName:               "defaults",
-			Release:                "production",
-			ExpectedLivenessProbe:  defaultLivenessProbe(),
-			ExpectedReadinessProbe: defaultReadinessProbe(),
-		},
-		{
-			CaseName: "custom liveness probe",
-			Release:  "production",
-			Values: map[string]string{
-				"livenessProbe.port": "1234",
-			},
-			ExpectedLivenessProbe: &coreV1.Probe{
-				Handler: coreV1.Handler{
-					HTTPGet: &coreV1.HTTPGetAction{
-						Path:   "/",
-						Port:   intstr.FromInt(1234),
-						Scheme: coreV1.URISchemeHTTP,
-					},
-				},
-				InitialDelaySeconds: 15,
-				TimeoutSeconds:      15,
-			},
-			ExpectedReadinessProbe: defaultReadinessProbe(),
-		},
-		{
-			CaseName: "custom readiness probe",
-			Release:  "production",
-			Values: map[string]string{
-				"readinessProbe.port": "2345",
-			},
-			ExpectedLivenessProbe: defaultLivenessProbe(),
-			ExpectedReadinessProbe: &coreV1.Probe{
-				Handler: coreV1.Handler{
-					HTTPGet: &coreV1.HTTPGetAction{
-						Path:   "/",
-						Port:   intstr.FromInt(2345),
-						Scheme: coreV1.URISchemeHTTP,
-					},
-				},
-				InitialDelaySeconds: 5,
-				TimeoutSeconds:      3,
-			},
-		},
-	} {
-		t.Run(tc.CaseName, func(t *testing.T) {
-			namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId())
-
-			values := map[string]string{
-				"gitlab.app": "auto-devops-examples/minimal-ruby-app",
-				"gitlab.env": "prod",
-			}
-
-			mergeStringMap(values, tc.Values)
-
-			options := &helm.Options{
-				SetValues:      values,
-				KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
-			}
-
-			output := helm.RenderTemplate(t, options, helmChartPath, tc.Release, []string{"templates/deployment.yaml"})
-
-			var deployment appsV1.Deployment
-			helm.UnmarshalK8SYaml(t, output, &deployment)
-
-			require.Equal(t, tc.ExpectedLivenessProbe, deployment.Spec.Template.Spec.Containers[0].LivenessProbe)
-			require.Equal(t, tc.ExpectedReadinessProbe, deployment.Spec.Template.Spec.Containers[0].ReadinessProbe)
-		})
-	}
-
-	// Test Deployment selector
-	for _, tc := range []struct {
-		CaseName string
-		Release  string
-		Values   map[string]string
-
-		ExpectedName         string
-		ExpectedRelease      string
-		ExpectedSelector     *metav1.LabelSelector
-		ExpectedNodeSelector map[string]string
-		ExpectedTolerations  []coreV1.Toleration
-		ExpectedAffinity     *coreV1.Affinity
-	}{
-		{
-			CaseName:        "selector",
-			Release:         "production",
-			ExpectedName:    "production",
-			ExpectedRelease: "production",
-			ExpectedSelector: &metav1.LabelSelector{
-				MatchLabels: map[string]string{
-					"app":     "production",
-					"release": "production",
-					"tier":    "web",
-					"track":   "stable",
-				},
-			},
-		},
-		{
-			CaseName: "nodeSelector",
-			Release:  "production",
-			Values: map[string]string{
-				"nodeSelector.disktype": "ssd",
-			},
-			ExpectedName:    "production",
-			ExpectedRelease: "production",
-			ExpectedSelector: &metav1.LabelSelector{
-				MatchLabels: map[string]string{
-					"app":     "production",
-					"release": "production",
-					"tier":    "web",
-					"track":   "stable",
-				},
-			},
-			ExpectedNodeSelector: map[string]string{
-				"disktype": "ssd",
-			},
-		},
-		{
-			CaseName: "tolerations",
-			Release:  "production",
-			Values: map[string]string{
-				"tolerations[0].key":      "key1",
-				"tolerations[0].operator": "Equal",
-				"tolerations[0].value":    "value1",
-				"tolerations[0].effect":   "NoSchedule",
-			},
-			ExpectedName:    "production",
-			ExpectedRelease: "production",
-			ExpectedSelector: &metav1.LabelSelector{
-				MatchLabels: map[string]string{
-					"app":     "production",
-					"release": "production",
-					"tier":    "web",
-					"track":   "stable",
-				},
-			},
-			ExpectedTolerations: []coreV1.Toleration{
-				{
-					Key:      "key1",
-					Operator: "Equal",
-					Value:    "value1",
-					Effect:   "NoSchedule",
-				},
-			},
-		},
-		{
-			CaseName: "affinity",
-			Release:  "production",
-			Values: map[string]string{
-				"affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].key":      "key1",
-				"affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].operator": "DoesNotExist",
-			},
-			ExpectedName:    "production",
-			ExpectedRelease: "production",
-			ExpectedSelector: &metav1.LabelSelector{
-				MatchLabels: map[string]string{
-					"app":     "production",
-					"release": "production",
-					"tier":    "web",
-					"track":   "stable",
-				},
-			},
-			ExpectedAffinity: &coreV1.Affinity{
-				NodeAffinity: &coreV1.NodeAffinity{
-					RequiredDuringSchedulingIgnoredDuringExecution: &coreV1.NodeSelector{
-						NodeSelectorTerms: []coreV1.NodeSelectorTerm{
-							{
-								MatchExpressions: []coreV1.NodeSelectorRequirement{
-									{
-										Key:      "key1",
-										Operator: "DoesNotExist",
-									},
-								},
-							},
-						},
-					},
-				},
-			},
-		},
-	} {
-		t.Run(tc.CaseName, func(t *testing.T) {
-			namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId())
-
-			values := map[string]string{
-				"gitlab.app": "auto-devops-examples/minimal-ruby-app",
-				"gitlab.env": "prod",
-			}
-
-			mergeStringMap(values, tc.Values)
-
-			options := &helm.Options{
-				SetValues:      values,
-				KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
-			}
-
-			output := helm.RenderTemplate(t, options, helmChartPath, tc.Release, []string{"templates/deployment.yaml"})
-
-			var deployment appsV1.Deployment
-			helm.UnmarshalK8SYaml(t, output, &deployment)
-
-			require.Equal(t, tc.ExpectedName, deployment.Name)
-			require.Equal(t, map[string]string{
-				"app":                          tc.ExpectedName,
-				"chart":                        chartName,
-				"heritage":                     "Helm",
-				"release":                      tc.ExpectedRelease,
-				"tier":                         "web",
-				"track":                        "stable",
-				"app.kubernetes.io/name":       tc.ExpectedName,
-				"helm.sh/chart":                chartName,
-				"app.kubernetes.io/managed-by": "Helm",
-				"app.kubernetes.io/instance":   tc.ExpectedRelease,
-			}, deployment.Labels)
-
-			require.Equal(t, tc.ExpectedSelector, deployment.Spec.Selector)
-
-			require.Equal(t, map[string]string{
-				"app":                          tc.ExpectedName,
-				"chart":                        chartName,
-				"heritage":                     "Helm",
-				"release":                      tc.ExpectedRelease,
-				"tier":                         "web",
-				"track":                        "stable",
-				"app.kubernetes.io/name":       tc.ExpectedName,
-				"helm.sh/chart":                chartName,
-				"app.kubernetes.io/managed-by": "Helm",
-				"app.kubernetes.io/instance":   tc.ExpectedRelease,
-			}, deployment.Spec.Template.Labels)
-
-			require.Equal(t, tc.ExpectedNodeSelector, deployment.Spec.Template.Spec.NodeSelector)
-			require.Equal(t, tc.ExpectedTolerations, deployment.Spec.Template.Spec.Tolerations)
-			require.Equal(t, tc.ExpectedAffinity, deployment.Spec.Template.Spec.Affinity)
-		})
-	}
-}
diff --git a/chart/test/templates/ingress_test.go b/chart/test/templates/ingress_test.go
deleted file mode 100644
index 74caa77d0816f93a4461e4caafe1ccc147b40ee0..0000000000000000000000000000000000000000
--- a/chart/test/templates/ingress_test.go
+++ /dev/null
@@ -1,362 +0,0 @@
-package main
-
-import (
-	"regexp"
-	"testing"
-
-	"github.com/gruntwork-io/terratest/modules/helm"
-	"github.com/stretchr/testify/require"
-	extensions "k8s.io/api/extensions/v1beta1"
-	networkingv1 "k8s.io/api/networking/v1"
-	networkingv1beta "k8s.io/api/networking/v1beta1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-func TestIngressTemplate_ModSecurity(t *testing.T) {
-	templates := []string{"templates/ingress.yaml"}
-	modSecuritySnippet := "SecRuleEngine DetectionOnly\n"
-	modSecuritySnippetWithSecRules := modSecuritySnippet + `SecRule REQUEST_HEADERS:User-Agent \"scanner\" \"log,deny,id:107,status:403,msg:\'Scanner Identified\'\"
-SecRule REQUEST_HEADERS:Content-Type \"text/plain\" \"log,deny,id:\'20010\',status:403,msg:\'Text plain not allowed\'\"
-`
-	defaultAnnotations := map[string]string{
-		"kubernetes.io/ingress.class": "nginx",
-		"kubernetes.io/tls-acme":      "true",
-	}
-	defaultModSecurityAnnotations := map[string]string{
-		"nginx.ingress.kubernetes.io/modsecurity-transaction-id": "$server_name-$request_id",
-	}
-	modSecurityAnnotations := make(map[string]string)
-	secRulesAnnotations := make(map[string]string)
-	mergeStringMap(modSecurityAnnotations, defaultAnnotations)
-	mergeStringMap(modSecurityAnnotations, defaultModSecurityAnnotations)
-	mergeStringMap(secRulesAnnotations, defaultAnnotations)
-	mergeStringMap(secRulesAnnotations, defaultModSecurityAnnotations)
-	modSecurityAnnotations["nginx.ingress.kubernetes.io/modsecurity-snippet"] = modSecuritySnippet
-	secRulesAnnotations["nginx.ingress.kubernetes.io/modsecurity-snippet"] = modSecuritySnippetWithSecRules
-
-	tcs := []struct {
-		name       string
-		valueFiles []string
-		values     map[string]string
-		meta       metav1.ObjectMeta
-	}{
-		{
-			name: "defaults",
-			meta: metav1.ObjectMeta{Annotations: defaultAnnotations},
-		},
-		{
-			name:   "with modSecurity enabled without custom secRules",
-			values: map[string]string{"ingress.modSecurity.enabled": "true"},
-			meta:   metav1.ObjectMeta{Annotations: modSecurityAnnotations},
-		},
-		{
-			name:       "with custom secRules",
-			valueFiles: []string{"../testdata/modsecurity-ingress.yaml"},
-			meta:       metav1.ObjectMeta{Annotations: secRulesAnnotations},
-		},
-	}
-
-	for _, tc := range tcs {
-		t.Run(tc.name, func(t *testing.T) {
-			opts := &helm.Options{
-				ValuesFiles: tc.valueFiles,
-				SetValues:   tc.values,
-			}
-			output := helm.RenderTemplate(t, opts, helmChartPath, "ModSecurity-test-release", templates)
-
-			ingress := new(extensions.Ingress)
-			helm.UnmarshalK8SYaml(t, output, ingress)
-
-			require.Equal(t, tc.meta.Annotations, ingress.ObjectMeta.Annotations)
-		})
-	}
-}
-
-func TestIngressTemplate_DifferentTracks(t *testing.T) {
-	templates := []string{"templates/ingress.yaml"}
-	tcs := []struct {
-		name        string
-		releaseName string
-		values      map[string]string
-
-		expectedName                     string
-		expectedLabels                   map[string]string
-		expectedSelector                 map[string]string
-		expectedAnnotations              map[string]string
-		expectedInexistentAnnotationKeys []string
-		expectedErrorRegexp              *regexp.Regexp
-	}{
-		{
-			name:                             "defaults",
-			releaseName:                      "production",
-			expectedName:                     "production-auto-deploy",
-			expectedAnnotations:              map[string]string{"kubernetes.io/ingress.class": "nginx"},
-			expectedInexistentAnnotationKeys: []string{"nginx.ingress.kubernetes.io/canary"},
-		},
-		{
-			name:                             "with canary track",
-			releaseName:                      "production-canary",
-			values:                           map[string]string{"application.track": "canary"},
-			expectedName:                     "production-canary-auto-deploy",
-			expectedAnnotations:              map[string]string{"nginx.ingress.kubernetes.io/canary": "true", "nginx.ingress.kubernetes.io/canary-by-header": "canary", "kubernetes.io/ingress.class": "nginx"},
-			expectedInexistentAnnotationKeys: []string{"nginx.ingress.kubernetes.io/canary-weight"},
-		},
-		{
-			name:                "with canary weight",
-			releaseName:         "production-canary",
-			values:              map[string]string{"application.track": "canary", "ingress.canary.weight": "25"},
-			expectedName:        "production-canary-auto-deploy",
-			expectedAnnotations: map[string]string{"nginx.ingress.kubernetes.io/canary-weight": "25"},
-		},
-	}
-
-	for _, tc := range tcs {
-		t.Run(tc.name, func(t *testing.T) {
-			output, ret := renderTemplate(t, tc.values, tc.releaseName, templates, tc.expectedErrorRegexp)
-
-			if ret == false {
-				return
-			}
-
-			ingress := new(extensions.Ingress)
-			helm.UnmarshalK8SYaml(t, output, ingress)
-			require.Equal(t, tc.expectedName, ingress.ObjectMeta.Name)
-			for key, value := range tc.expectedAnnotations {
-				require.Equal(t, ingress.ObjectMeta.Annotations[key], value)
-			}
-			for _, key := range tc.expectedInexistentAnnotationKeys {
-				require.Empty(t, ingress.ObjectMeta.Annotations[key])
-			}
-		})
-	}
-}
-
-func TestIngressTemplate_TLS(t *testing.T) {
-	templates := []string{"templates/ingress.yaml"}
-	releaseName := "ingress-tls-test"
-	tcs := []struct {
-		name   string
-		values map[string]string
-
-		expectedAnnotations map[string]string
-		expectedIngressTLS  []extensions.IngressTLS
-		expectedErrorRegexp *regexp.Regexp
-	}{
-		{
-			name:                "defaults",
-			expectedAnnotations: map[string]string{"kubernetes.io/ingress.class": "nginx", "kubernetes.io/tls-acme": "true"},
-			expectedIngressTLS: []extensions.IngressTLS{
-				extensions.IngressTLS{
-					Hosts:      []string{"my.host.com"},
-					SecretName: releaseName + "-auto-deploy-tls",
-				},
-			},
-		},
-		{
-			name:                "with tls disabled",
-			values:              map[string]string{"ingress.tls.enabled": "false"},
-			expectedAnnotations: map[string]string{"kubernetes.io/ingress.class": "nginx"},
-			expectedIngressTLS:  []extensions.IngressTLS(nil),
-		},
-	}
-
-	for _, tc := range tcs {
-		t.Run(tc.name, func(t *testing.T) {
-			output, ret := renderTemplate(t, tc.values, releaseName, templates, tc.expectedErrorRegexp)
-
-			if ret == false {
-				return
-			}
-
-			ingress := new(extensions.Ingress)
-			helm.UnmarshalK8SYaml(t, output, ingress)
-			require.Equal(t, tc.expectedAnnotations, ingress.ObjectMeta.Annotations)
-			require.Equal(t, tc.expectedIngressTLS, ingress.Spec.TLS)
-		})
-	}
-}
-
-func TestIngressTemplate_Disable(t *testing.T) {
-	templates := []string{"templates/ingress.yaml"}
-	releaseName := "ingress-disable-test"
-	tcs := []struct {
-		name   string
-		values map[string]string
-
-		expectedName        string
-		expectedErrorRegexp *regexp.Regexp
-	}{
-		{
-			name:         "defaults",
-			expectedName: releaseName + "-auto-deploy",
-		},
-		{
-			name:         "with ingress.enabled key undefined, but service is enabled",
-			values:       map[string]string{"ingress.enabled": "null", "service.enabled": "true"},
-			expectedName: releaseName + "-auto-deploy",
-		},
-		{
-			name:                "with service disabled and track stable",
-			values:              map[string]string{"service.enabled": "false", "application.track": "stable"},
-			expectedErrorRegexp: regexp.MustCompile("Error: could not find template templates/ingress.yaml in chart"),
-		},
-		{
-			name:                "with service disabled and track non-stable",
-			values:              map[string]string{"service.enabled": "false", "application.track": "non-stable"},
-			expectedErrorRegexp: regexp.MustCompile("Error: could not find template templates/ingress.yaml in chart"),
-		},
-		{
-			name:                "with ingress disabled",
-			values:              map[string]string{"ingress.enabled": "false"},
-			expectedErrorRegexp: regexp.MustCompile("Error: could not find template templates/ingress.yaml in chart"),
-		},
-		{
-			name:                "with ingress enabled and service disabled",
-			values:              map[string]string{"ingress.enabled": "true", "service.enabled": "false"},
-			expectedErrorRegexp: regexp.MustCompile("Error: could not find template templates/ingress.yaml in chart"),
-		},
-		{
-			name:                "with ingress disabled and service enabled and track stable",
-			values:              map[string]string{"ingress.enabled": "false", "service.enabled": "true", "application.track": "stable"},
-			expectedErrorRegexp: regexp.MustCompile("Error: could not find template templates/ingress.yaml in chart"),
-		},
-	}
-
-	for _, tc := range tcs {
-		t.Run(tc.name, func(t *testing.T) {
-			opts := &helm.Options{
-				SetValues: tc.values,
-			}
-			output, err := helm.RenderTemplateE(t, opts, helmChartPath, releaseName, templates)
-
-			if tc.expectedErrorRegexp != nil {
-				require.Regexp(t, tc.expectedErrorRegexp, err.Error())
-				return
-			}
-			if err != nil {
-				t.Error(err)
-				return
-			}
-
-			ingress := new(extensions.Ingress)
-			helm.UnmarshalK8SYaml(t, output, ingress)
-			require.Equal(t, tc.expectedName, ingress.ObjectMeta.Name)
-		})
-	}
-}
-
-func TestIngressTemplate_HTTPPath(t *testing.T) {
-	templates := []string{"templates/ingress.yaml"}
-	releaseName := "ingress-http-path-test"
-	tcs := []struct {
-		name   string
-		values map[string]string
-
-		expectedpath string
-	}{
-		{
-			name:         "defaults",
-			expectedpath: "/",
-		},
-		{
-			name:         "with /*",
-			values:       map[string]string{"ingress.path": "/*"},
-			expectedpath: "/*",
-		},
-		{
-			name:         "with /myapi",
-			values:       map[string]string{"ingress.path": "/myapi"},
-			expectedpath: "/myapi",
-		},
-	}
-
-	for _, tc := range tcs {
-		t.Run(tc.name, func(t *testing.T) {
-			opts := &helm.Options{
-				SetValues: tc.values,
-			}
-			output := helm.RenderTemplate(t, opts, helmChartPath, releaseName, templates)
-
-			ingress := new(extensions.Ingress)
-
-			helm.UnmarshalK8SYaml(t, output, ingress)
-			require.Equal(t, tc.expectedpath, ingress.Spec.Rules[0].IngressRuleValue.HTTP.Paths[0].Path)
-		})
-	}
-}
-
-func TestIngressTemplate_TLSSecret(t *testing.T) {
-	templates := []string{"templates/ingress.yaml"}
-	releaseName := "ingress-secret-name-test"
-	tcs := []struct {
-		name   string
-		values map[string]string
-
-		expectedsecretname string
-	}{
-		{
-			name:               "default condition from values - use the provided secretName",
-			expectedsecretname: releaseName + "-auto-deploy-tls",
-		},
-		{
-			name:               "don't set the secretName, use the default secret/cert",
-			values:             map[string]string{"ingress.tls.useDefaultSecret": "true"},
-			expectedsecretname: "",
-		},
-		{
-			name:               "use the provided secretName",
-			values:             map[string]string{"ingress.useDefaultSecret": "false"},
-			expectedsecretname: releaseName + "-auto-deploy-tls",
-		},
-	}
-
-	for _, tc := range tcs {
-		t.Run(tc.name, func(t *testing.T) {
-			opts := &helm.Options{
-				SetValues: tc.values,
-			}
-			output := helm.RenderTemplate(t, opts, helmChartPath, releaseName, templates)
-
-			ingress := new(extensions.Ingress)
-
-			helm.UnmarshalK8SYaml(t, output, ingress)
-			require.Equal(t, tc.expectedsecretname, ingress.Spec.TLS[0].SecretName)
-		})
-	}
-}
-
-func TestIngressTemplate_NetworkingV1Beta1(t *testing.T) {
-	templates := []string{"templates/ingress.yaml"}
-	releaseName := "ingress-networking-v1beta1"
-	opts := &helm.Options{
-		SetValues: map[string]string{"ingress.enabled": "true"},
-	}
-	output := helm.RenderTemplate(t, opts, helmChartPath, releaseName, templates, "--api-versions", "networking.k8s.io/v1beta1/Ingress")
-	ingress := new(networkingv1beta.Ingress)
-	helm.UnmarshalK8SYaml(t, output, ingress)
-	require.Equal(t, "networking.k8s.io/v1beta1", ingress.APIVersion)
-}
-
-func TestIngressTemplate_NetworkingV1(t *testing.T) {
-	templates := []string{"templates/ingress.yaml"}
-	releaseName := "ingress-networking-v1"
-	opts := &helm.Options{
-		SetValues: map[string]string{"ingress.enabled": "true"},
-	}
-	output := helm.RenderTemplate(t, opts, helmChartPath, releaseName, templates, "--api-versions", "networking.k8s.io/v1/Ingress")
-	ingress := new(networkingv1.Ingress)
-	helm.UnmarshalK8SYaml(t, output, ingress)
-	require.Equal(t, "networking.k8s.io/v1", ingress.APIVersion)
-}
-
-func TestIngressTemplate_Extensions(t *testing.T) {
-	templates := []string{"templates/ingress.yaml"}
-	releaseName := "ingress-extensions-v1beta1"
-	opts := &helm.Options{
-		SetValues: map[string]string{"ingress.enabled": "true"},
-	}
-	output := helm.RenderTemplate(t, opts, helmChartPath, releaseName, templates, "--api-versions", "extensions/v1beta1/Ingress")
-	ingress := new(extensions.Ingress)
-	helm.UnmarshalK8SYaml(t, output, ingress)
-	require.Equal(t, "extensions/v1beta1", ingress.APIVersion)
-}
diff --git a/chart/test/templates/networkpolicy_test.go b/chart/test/templates/networkpolicy_test.go
deleted file mode 100644
index 16821bdea1c1ae7e4f00d79c736044bd3097bbfc..0000000000000000000000000000000000000000
--- a/chart/test/templates/networkpolicy_test.go
+++ /dev/null
@@ -1,128 +0,0 @@
-package main
-
-import (
-	"regexp"
-	"testing"
-
-	"github.com/gruntwork-io/terratest/modules/helm"
-	"github.com/stretchr/testify/require"
-	netV1 "k8s.io/api/networking/v1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-func TestNetworkPolicy(t *testing.T) {
-	releaseName := "network-policy-test"
-	templates := []string{"templates/network-policy.yaml"}
-	expectedLabels := map[string]string{
-		"app":                          releaseName,
-		"chart":                        chartName,
-		"release":                      releaseName,
-		"heritage":                     "Helm",
-		"app.kubernetes.io/name":       releaseName,
-		"helm.sh/chart":                chartName,
-		"app.kubernetes.io/managed-by": "Helm",
-		"app.kubernetes.io/instance":   releaseName,
-	}
-
-	tcs := []struct {
-		name       string
-		valueFiles []string
-		values     map[string]string
-
-		expectedErrorRegexp *regexp.Regexp
-
-		meta        metav1.ObjectMeta
-		podSelector metav1.LabelSelector
-		policyTypes []netV1.PolicyType
-		ingress     []netV1.NetworkPolicyIngressRule
-		egress      []netV1.NetworkPolicyEgressRule
-	}{
-		{
-			name:                "disabled by default",
-			expectedErrorRegexp: regexp.MustCompile("Error: could not find template templates/network-policy.yaml in chart"),
-		},
-		{
-			name:        "with default policy",
-			values:      map[string]string{"networkPolicy.enabled": "true"},
-			meta:        metav1.ObjectMeta{Name: releaseName + "-auto-deploy", Labels: expectedLabels},
-			podSelector: metav1.LabelSelector{MatchLabels: map[string]string{}},
-			ingress: []netV1.NetworkPolicyIngressRule{
-				{
-					From: []netV1.NetworkPolicyPeer{
-						{PodSelector: &metav1.LabelSelector{MatchLabels: map[string]string{}}},
-						{NamespaceSelector: &metav1.LabelSelector{
-							MatchLabels: map[string]string{"app.gitlab.com/managed_by": "gitlab"},
-						}},
-					},
-				},
-			},
-		},
-		{
-			name:        "with custom policy",
-			valueFiles:  []string{"../testdata/custom-policy.yaml"},
-			meta:        metav1.ObjectMeta{Name: releaseName + "-auto-deploy", Labels: expectedLabels},
-			podSelector: metav1.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}},
-			ingress: []netV1.NetworkPolicyIngressRule{
-				{
-					From: []netV1.NetworkPolicyPeer{
-						{PodSelector: &metav1.LabelSelector{MatchLabels: map[string]string{}}},
-						{NamespaceSelector: &metav1.LabelSelector{
-							MatchLabels: map[string]string{"name": "foo"},
-						}},
-					},
-				},
-			},
-		},
-		{
-			name:        "with full spec policy",
-			valueFiles:  []string{"../testdata/full-spec-policy.yaml"},
-			meta:        metav1.ObjectMeta{Name: releaseName + "-auto-deploy", Labels: expectedLabels},
-			podSelector: metav1.LabelSelector{MatchLabels: map[string]string{}},
-			policyTypes: []netV1.PolicyType{"Ingress", "Egress"},
-			ingress: []netV1.NetworkPolicyIngressRule{
-				{
-					From: []netV1.NetworkPolicyPeer{
-						{PodSelector: &metav1.LabelSelector{MatchLabels: map[string]string{}}},
-					},
-				},
-			},
-			egress: []netV1.NetworkPolicyEgressRule{
-				{
-					To: []netV1.NetworkPolicyPeer{
-						{NamespaceSelector: &metav1.LabelSelector{
-							MatchLabels: map[string]string{"name": "gitlab-managed-apps"},
-						}},
-					},
-				},
-			},
-		},
-	}
-
-	for _, tc := range tcs {
-		t.Run(tc.name, func(t *testing.T) {
-			opts := &helm.Options{
-				ValuesFiles: tc.valueFiles,
-				SetValues:   tc.values,
-			}
-			output, err := helm.RenderTemplateE(t, opts, helmChartPath, releaseName, templates)
-
-			if tc.expectedErrorRegexp != nil {
-				require.Regexp(t, tc.expectedErrorRegexp, err.Error())
-				return
-			}
-			if err != nil {
-				t.Error(err)
-				return
-			}
-
-			policy := new(netV1.NetworkPolicy)
-			helm.UnmarshalK8SYaml(t, output, policy)
-
-			require.Equal(t, tc.meta, policy.ObjectMeta)
-			require.Equal(t, tc.podSelector, policy.Spec.PodSelector)
-			require.Equal(t, tc.policyTypes, policy.Spec.PolicyTypes)
-			require.Equal(t, tc.ingress, policy.Spec.Ingress)
-			require.Equal(t, tc.egress, policy.Spec.Egress)
-		})
-	}
-}
diff --git a/chart/test/templates/service_account_test.go b/chart/test/templates/service_account_test.go
deleted file mode 100644
index 15da36c8ba6ab95d5016fe6a2f7767eb21b3f080..0000000000000000000000000000000000000000
--- a/chart/test/templates/service_account_test.go
+++ /dev/null
@@ -1,107 +0,0 @@
-package main
-
-import (
-	"regexp"
-	"strings"
-	"testing"
-
-	"github.com/gruntwork-io/terratest/modules/helm"
-	"github.com/gruntwork-io/terratest/modules/k8s"
-	"github.com/gruntwork-io/terratest/modules/random"
-	"github.com/stretchr/testify/require"
-	coreV1 "k8s.io/api/core/v1"
-)
-
-func TestServiceAccountTemplate(t *testing.T) {
-	for _, tc := range []struct {
-		CaseName string
-		Release  string
-		Values   map[string]string
-
-		ExpectedErrorRegexp *regexp.Regexp
-
-		ExpectedName        string
-		ExpectedAnnotations map[string]string
-	}{
-		{
-			CaseName: "not created by default",
-			Release:  "production",
-			Values:   map[string]string{},
-			ExpectedErrorRegexp: regexp.MustCompile(
-				"Error: could not find template templates/service-account.yaml in chart",
-			),
-		},
-		{
-			CaseName: "not created if createNew is set to false",
-			Release:  "production",
-			Values: map[string]string{
-				"serviceAccount.createNew": "false",
-			},
-			ExpectedErrorRegexp: regexp.MustCompile(
-				"Error: could not find template templates/service-account.yaml in chart",
-			),
-		},
-		{
-			CaseName: "no annotations",
-			Release:  "production",
-			Values: map[string]string{
-				"serviceAccount.createNew": "true",
-				"serviceAccount.name":      "anAccountName",
-			},
-			ExpectedName:        "anAccountName",
-			ExpectedAnnotations: nil,
-		},
-		{
-			CaseName: "with annotations",
-			Release:  "production",
-			Values: map[string]string{
-				"serviceAccount.createNew":        "true",
-				"serviceAccount.name":             "anAccountName",
-				"serviceAccount.annotations.key1": "value1",
-				"serviceAccount.annotations.key2": "value2",
-			},
-			ExpectedName: "anAccountName",
-			ExpectedAnnotations: map[string]string{
-				"key1": "value1",
-				"key2": "value2",
-			},
-		},
-	} {
-		t.Run(tc.CaseName, func(t *testing.T) {
-			namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId())
-
-			values := map[string]string{
-				"gitlab.app": "auto-devops-examples/minimal-ruby-app",
-				"gitlab.env": "prod",
-			}
-
-			mergeStringMap(values, tc.Values)
-
-			options := &helm.Options{
-				SetValues:      values,
-				KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
-			}
-
-			output, err := helm.RenderTemplateE(
-				t,
-				options,
-				helmChartPath,
-				tc.Release,
-				[]string{"templates/service-account.yaml"},
-			)
-
-			if tc.ExpectedErrorRegexp != nil {
-				require.Regexp(t, tc.ExpectedErrorRegexp, err.Error())
-				return
-			}
-
-			require.NoError(t, err)
-
-			var serviceAccount coreV1.ServiceAccount
-			helm.UnmarshalK8SYaml(t, output, &serviceAccount)
-
-			require.Equal(t, tc.ExpectedName, serviceAccount.Name)
-			require.Equal(t, tc.ExpectedAnnotations, serviceAccount.Annotations)
-		})
-	}
-}
diff --git a/chart/test/templates/service_test.go b/chart/test/templates/service_test.go
deleted file mode 100644
index 36d81c00423fe0ddfcd3a256b31ec38188619bf1..0000000000000000000000000000000000000000
--- a/chart/test/templates/service_test.go
+++ /dev/null
@@ -1,101 +0,0 @@
-package main
-
-import (
-	"regexp"
-	"testing"
-
-	"github.com/gruntwork-io/terratest/modules/helm"
-	"github.com/stretchr/testify/require"
-	coreV1 "k8s.io/api/core/v1"
-)
-
-func TestServiceTemplate_DifferentTracks(t *testing.T) {
-	templates := []string{"templates/service.yaml"}
-	tcs := []struct {
-		name        string
-		releaseName string
-		values      map[string]string
-
-		expectedName        string
-		expectedLabels      map[string]string
-		expectedSelector    map[string]string
-		expectedErrorRegexp *regexp.Regexp
-	}{
-		{
-			name:             "defaults",
-			releaseName:      "production",
-			expectedName:     "production-auto-deploy",
-			expectedLabels:   map[string]string{"app": "production", "release": "production", "track": "stable"},
-			expectedSelector: map[string]string{"app": "production", "tier": "web", "track": "stable"},
-		},
-		{
-			name:             "with canary track",
-			releaseName:      "production-canary",
-			values:           map[string]string{"application.track": "canary"},
-			expectedName:     "production-canary-auto-deploy",
-			expectedLabels:   map[string]string{"app": "production-canary", "release": "production-canary", "track": "canary"},
-			expectedSelector: map[string]string{"app": "production-canary", "tier": "web", "track": "canary"},
-		},
-	}
-
-	for _, tc := range tcs {
-		t.Run(tc.name, func(t *testing.T) {
-			output, ret := renderTemplate(t, tc.values, tc.releaseName, templates, tc.expectedErrorRegexp)
-
-			if ret == false {
-				return
-			}
-
-			service := new(coreV1.Service)
-			helm.UnmarshalK8SYaml(t, output, service)
-			require.Equal(t, tc.expectedName, service.ObjectMeta.Name)
-			for key, value := range tc.expectedLabels {
-				require.Equal(t, service.ObjectMeta.Labels[key], value)
-			}
-			for key, value := range tc.expectedSelector {
-				require.Equal(t, service.Spec.Selector[key], value)
-			}
-		})
-	}
-}
-
-func TestServiceTemplate_Disable(t *testing.T) {
-	templates := []string{"templates/service.yaml"}
-	releaseName := "service-disable-test"
-	tcs := []struct {
-		name   string
-		values map[string]string
-
-		expectedName        string
-		expectedErrorRegexp *regexp.Regexp
-	}{
-		{
-			name:         "defaults",
-			expectedName: releaseName + "-auto-deploy",
-		},
-		{
-			name:                "with service disabled and track stable",
-			values:              map[string]string{"service.enabled": "false", "application.track": "stable"},
-			expectedErrorRegexp: regexp.MustCompile("Error: could not find template templates/service.yaml in chart"),
-		},
-		{
-			name:                "with service disabled and track non-stable",
-			values:              map[string]string{"service.enabled": "false", "application.track": "non-stable"},
-			expectedErrorRegexp: regexp.MustCompile("Error: could not find template templates/service.yaml in chart"),
-		},
-	}
-
-	for _, tc := range tcs {
-		t.Run(tc.name, func(t *testing.T) {
-			output, ret := renderTemplate(t, tc.values, releaseName, templates, tc.expectedErrorRegexp)
-
-			if ret == false {
-				return
-			}
-
-			service := new(coreV1.Service)
-			helm.UnmarshalK8SYaml(t, output, service)
-			require.Equal(t, tc.expectedName, service.ObjectMeta.Name)
-		})
-	}
-}
diff --git a/chart/test/templates/test_helpers.go b/chart/test/templates/test_helpers.go
deleted file mode 100644
index da8c498aaedee0733c346e21783b1707ad14b501..0000000000000000000000000000000000000000
--- a/chart/test/templates/test_helpers.go
+++ /dev/null
@@ -1,155 +0,0 @@
-package main
-
-import (
-	"io"
-	"log"
-	"os"
-	"regexp"
-	"testing"
-
-	"github.com/gruntwork-io/terratest/modules/helm"
-	"github.com/stretchr/testify/require"
-	"gopkg.in/yaml.v3"
-	appsV1 "k8s.io/api/apps/v1"
-	coreV1 "k8s.io/api/core/v1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/util/intstr"
-)
-
-const (
-	helmChartPath = "../.."
-)
-
-var chartName string // dynamically initialized
-
-func init() {
-	// init chartName dynamically because it is annoying to update this value, but it is needed for some expected labels
-	f, err := os.Open(helmChartPath + "/Chart.yaml")
-	if err != nil {
-		log.Fatalf("Failed to open Chart.yaml: %v", err)
-	}
-	b, err := io.ReadAll(f)
-	if err != nil {
-		log.Fatalf("Failed to read Chart.yaml: %v", err)
-	}
-	m := make(map[interface{}]interface{})
-	err = yaml.Unmarshal(b, m)
-	if err != nil {
-		log.Fatalf("Failed to unmarshal Chart.yaml: %v", err)
-	}
-	chartName = "auto-deploy-app-" + m["version"].(string)
-}
-
-func renderTemplate(t *testing.T, values map[string]string, releaseName string, templates []string, expectedErrorRegexp *regexp.Regexp) (string, bool) {
-	opts := &helm.Options{
-		SetValues: values,
-	}
-
-	output, err := helm.RenderTemplateE(t, opts, helmChartPath, releaseName, templates)
-	if expectedErrorRegexp != nil {
-		if err == nil {
-			t.Error("Expected error but didn't happen")
-		} else {
-			require.Regexp(t, expectedErrorRegexp, err.Error())
-		}
-		return "", false
-	}
-	if err != nil {
-		t.Error(err)
-		return "", false
-	}
-
-	return output, true
-}
-
-type workerDeploymentTestCase struct {
-	ExpectedName           string
-	ExpectedCmd            []string
-	ExpectedStrategyType   appsV1.DeploymentStrategyType
-	ExpectedSelector       *metav1.LabelSelector
-	ExpectedLifecycle      *coreV1.Lifecycle
-	ExpectedLivenessProbe  *coreV1.Probe
-	ExpectedReadinessProbe *coreV1.Probe
-	ExpectedNodeSelector   map[string]string
-	ExpectedTolerations    []coreV1.Toleration
-	ExpectedAffinity       *coreV1.Affinity
-}
-
-type workerDeploymentSelectorTestCase struct {
-	ExpectedName     string
-	ExpectedSelector *metav1.LabelSelector
-}
-
-type deploymentList struct {
-	metav1.TypeMeta `json:",inline"`
-
-	Items []appsV1.Deployment `json:"items" protobuf:"bytes,2,rep,name=items"`
-}
-
-type deploymentAppsV1List struct {
-	metav1.TypeMeta `json:",inline"`
-
-	Items []appsV1.Deployment `json:"items" protobuf:"bytes,2,rep,name=items"`
-}
-
-func mergeStringMap(dst, src map[string]string) {
-	for k, v := range src {
-		dst[k] = v
-	}
-}
-
-func defaultLivenessProbe() *coreV1.Probe {
-	return &coreV1.Probe{
-		Handler: coreV1.Handler{
-			HTTPGet: &coreV1.HTTPGetAction{
-				Path:   "/",
-				Port:   intstr.FromInt(5000),
-				Scheme: coreV1.URISchemeHTTP,
-			},
-		},
-		InitialDelaySeconds: 15,
-		TimeoutSeconds:      15,
-	}
-}
-
-func defaultReadinessProbe() *coreV1.Probe {
-	return &coreV1.Probe{
-		Handler: coreV1.Handler{
-			HTTPGet: &coreV1.HTTPGetAction{
-				Path:   "/",
-				Port:   intstr.FromInt(5000),
-				Scheme: coreV1.URISchemeHTTP,
-			},
-		},
-		InitialDelaySeconds: 5,
-		TimeoutSeconds:      3,
-	}
-}
-
-func workerLivenessProbe() *coreV1.Probe {
-	return &coreV1.Probe{
-		Handler: coreV1.Handler{
-			HTTPGet: &coreV1.HTTPGetAction{
-				Path:   "/worker",
-				Port:   intstr.FromInt(5000),
-				Scheme: coreV1.URISchemeHTTP,
-			},
-		},
-		InitialDelaySeconds: 0,
-		TimeoutSeconds:      0,
-	}
-}
-
-func workerReadinessProbe() *coreV1.Probe {
-	return &coreV1.Probe{
-		Handler: coreV1.Handler{
-			HTTPGet: &coreV1.HTTPGetAction{
-				Path:   "/worker",
-				Port:   intstr.FromInt(5000),
-				Scheme: coreV1.URISchemeHTTP,
-			},
-		},
-		InitialDelaySeconds: 0,
-		TimeoutSeconds:      0,
-	}
-}
diff --git a/chart/test/templates/workerdeployment_test.go b/chart/test/templates/workerdeployment_test.go
deleted file mode 100644
index fd7b49811d208ac3145441dc84e03ff59152ffd1..0000000000000000000000000000000000000000
--- a/chart/test/templates/workerdeployment_test.go
+++ /dev/null
@@ -1,568 +0,0 @@
-package main
-
-import (
-	"regexp"
-	"strings"
-	"testing"
-
-	"github.com/gruntwork-io/terratest/modules/helm"
-	"github.com/gruntwork-io/terratest/modules/k8s"
-	"github.com/gruntwork-io/terratest/modules/random"
-	"github.com/stretchr/testify/require"
-	appsV1 "k8s.io/api/apps/v1"
-	coreV1 "k8s.io/api/core/v1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-func TestWorkerDeploymentTemplate(t *testing.T) {
-	for _, tc := range []struct {
-		CaseName string
-		Release  string
-		Values   map[string]string
-
-		ExpectedErrorRegexp *regexp.Regexp
-
-		ExpectedName        string
-		ExpectedRelease     string
-		ExpectedDeployments []workerDeploymentTestCase
-	}{
-		{
-			CaseName: "happy",
-			Release:  "production",
-			Values: map[string]string{
-				"releaseOverride":            "productionOverridden",
-				"workers.worker1.command[0]": "echo",
-				"workers.worker1.command[1]": "worker1",
-				"workers.worker2.command[0]": "echo",
-				"workers.worker2.command[1]": "worker2",
-			},
-			ExpectedName:    "productionOverridden",
-			ExpectedRelease: "production",
-			ExpectedDeployments: []workerDeploymentTestCase{
-				{
-					ExpectedName:         "productionOverridden-worker1",
-					ExpectedCmd:          []string{"echo", "worker1"},
-					ExpectedStrategyType: appsV1.DeploymentStrategyType(""),
-				},
-				{
-					ExpectedName:         "productionOverridden-worker2",
-					ExpectedCmd:          []string{"echo", "worker2"},
-					ExpectedStrategyType: appsV1.DeploymentStrategyType(""),
-				},
-			},
-		}, {
-			// See https://github.com/helm/helm/issues/6006
-			CaseName: "long release name",
-			Release:  strings.Repeat("r", 80),
-
-			ExpectedErrorRegexp: regexp.MustCompile("Error: release name .* exceeds max length of 53"),
-		},
-		{
-			CaseName: "strategyType",
-			Release:  "production",
-			Values: map[string]string{
-				"workers.worker1.command[0]":   "echo",
-				"workers.worker1.command[1]":   "worker1",
-				"workers.worker1.strategyType": "Recreate",
-			},
-			ExpectedName:    "production",
-			ExpectedRelease: "production",
-			ExpectedDeployments: []workerDeploymentTestCase{
-				{
-					ExpectedName:         "production" + "-worker1",
-					ExpectedCmd:          []string{"echo", "worker1"},
-					ExpectedStrategyType: appsV1.RecreateDeploymentStrategyType,
-				},
-			},
-		},
-		{
-			CaseName:        "nodeSelector",
-			Release:         "production",
-			Values: map[string]string{
-				"workers.worker1.command[0]":            "echo",
-				"workers.worker1.command[1]":            "worker1",
-				"workers.worker1.nodeSelector.disktype": "ssd",
-			},
-			ExpectedName:    "production",
-			ExpectedRelease: "production",
-			ExpectedDeployments: []workerDeploymentTestCase{
-				{
-					ExpectedName:         "production" + "-worker1",
-					ExpectedCmd:          []string{"echo", "worker1"},
-					ExpectedStrategyType: appsV1.DeploymentStrategyType(""),
-					ExpectedNodeSelector: map[string]string{"disktype": "ssd"},
-				},
-			},
-
-		},
-		{
-			CaseName:        "tolerations",
-			Release:         "production",
-			Values: map[string]string{
-				"workers.worker1.command[0]":              "echo",
-				"workers.worker1.command[1]":              "worker1",
-				"workers.worker1.tolerations[0].key":      "key1",
-				"workers.worker1.tolerations[0].operator": "Equal",
-				"workers.worker1.tolerations[0].value":    "value1",
-				"workers.worker1.tolerations[0].effect":   "NoSchedule",
-			},
-			ExpectedName:    "production",
-			ExpectedRelease: "production",
-			ExpectedDeployments: []workerDeploymentTestCase{
-				{
-					ExpectedName:         "production" + "-worker1",
-					ExpectedCmd:          []string{"echo", "worker1"},
-					ExpectedStrategyType: appsV1.DeploymentStrategyType(""),
-					ExpectedTolerations:  []coreV1.Toleration{
-						{
-							Key:      "key1",
-							Operator: "Equal",
-							Value:    "value1",
-							Effect:   "NoSchedule",
-						},
-					},
-				},
-			},
-		},
-		{
-			CaseName:        "affinity",
-			Release:         "production",
-			Values: map[string]string{
-				"workers.worker1.command[0]": "echo",
-				"workers.worker1.command[1]": "worker1",
-				"workers.worker1.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].key":      "key1",
-				"workers.worker1.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].operator": "DoesNotExist",
-			},
-			ExpectedName:    "production",
-			ExpectedRelease: "production",
-			ExpectedDeployments: []workerDeploymentTestCase{
-				{
-					ExpectedName:         "production" + "-worker1",
-					ExpectedCmd:          []string{"echo", "worker1"},
-					ExpectedStrategyType: appsV1.DeploymentStrategyType(""),
-					ExpectedAffinity:     &coreV1.Affinity{
-						NodeAffinity: &coreV1.NodeAffinity{
-							RequiredDuringSchedulingIgnoredDuringExecution: &coreV1.NodeSelector{
-								NodeSelectorTerms: []coreV1.NodeSelectorTerm{
-									{
-										MatchExpressions: []coreV1.NodeSelectorRequirement{
-											{
-												Key:      "key1",
-												Operator: "DoesNotExist",
-											},
-										},
-									},
-								},
-							},
-						},
-					},
-				},
-			},
-		},
-	} {
-		t.Run(tc.CaseName, func(t *testing.T) {
-			namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId())
-
-			values := map[string]string{
-				"gitlab.app": "auto-devops-examples/minimal-ruby-app",
-				"gitlab.env": "prod",
-			}
-
-			mergeStringMap(values, tc.Values)
-
-			options := &helm.Options{
-				SetValues:      values,
-				KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
-			}
-
-			output, err := helm.RenderTemplateE(t, options, helmChartPath, tc.Release, []string{"templates/worker-deployment.yaml"})
-
-			if tc.ExpectedErrorRegexp != nil {
-				require.Regexp(t, tc.ExpectedErrorRegexp, err.Error())
-				return
-			}
-			if err != nil {
-				t.Error(err)
-				return
-			}
-
-			var deployments deploymentList
-			helm.UnmarshalK8SYaml(t, output, &deployments)
-
-			require.Len(t, deployments.Items, len(tc.ExpectedDeployments))
-			for i, expectedDeployment := range tc.ExpectedDeployments {
-				deployment := deployments.Items[i]
-
-				require.Equal(t, expectedDeployment.ExpectedName, deployment.Name)
-				require.Equal(t, expectedDeployment.ExpectedStrategyType, deployment.Spec.Strategy.Type)
-
-				require.Equal(t, map[string]string{
-					"app.gitlab.com/app": "auto-devops-examples/minimal-ruby-app",
-					"app.gitlab.com/env": "prod",
-				}, deployment.Annotations)
-				require.Equal(t, map[string]string{
-					"chart":    chartName,
-					"heritage": "Helm",
-					"release":  tc.ExpectedRelease,
-					"tier":     "worker",
-					"track":    "stable",
-				}, deployment.Labels)
-
-				require.Equal(t, map[string]string{
-					"app.gitlab.com/app":           "auto-devops-examples/minimal-ruby-app",
-					"app.gitlab.com/env":           "prod",
-					"checksum/application-secrets": "",
-				}, deployment.Spec.Template.Annotations)
-				require.Equal(t, map[string]string{
-					"release": tc.ExpectedRelease,
-					"tier":    "worker",
-					"track":   "stable",
-				}, deployment.Spec.Template.Labels)
-
-				require.Len(t, deployment.Spec.Template.Spec.Containers, 1)
-				require.Equal(t, expectedDeployment.ExpectedCmd, deployment.Spec.Template.Spec.Containers[0].Command)
-
-				require.Equal(t, expectedDeployment.ExpectedNodeSelector, deployment.Spec.Template.Spec.NodeSelector)
-				require.Equal(t, expectedDeployment.ExpectedTolerations, deployment.Spec.Template.Spec.Tolerations)
-				require.Equal(t, expectedDeployment.ExpectedAffinity, deployment.Spec.Template.Spec.Affinity)
-			}
-		})
-	}
-
-	// Tests worker selector
-	for _, tc := range []struct {
-		CaseName string
-		Release  string
-		Values   map[string]string
-
-		ExpectedName        string
-		ExpectedRelease     string
-		ExpectedDeployments []workerDeploymentSelectorTestCase
-	}{
-		{
-			CaseName: "worker selector",
-			Release:  "production",
-			Values: map[string]string{
-				"workers.worker1.command[0]": "echo",
-				"workers.worker1.command[1]": "worker1",
-				"workers.worker2.command[0]": "echo",
-				"workers.worker2.command[1]": "worker2",
-			},
-			ExpectedName:    "production",
-			ExpectedRelease: "production",
-			ExpectedDeployments: []workerDeploymentSelectorTestCase{
-				{
-					ExpectedName: "production-worker1",
-					ExpectedSelector: &metav1.LabelSelector{
-						MatchLabels: map[string]string{
-							"release": "production",
-							"tier":    "worker",
-							"track":   "stable",
-						},
-					},
-				},
-				{
-					ExpectedName: "production-worker2",
-					ExpectedSelector: &metav1.LabelSelector{
-						MatchLabels: map[string]string{
-							"release": "production",
-							"tier":    "worker",
-							"track":   "stable",
-						},
-					},
-				},
-			},
-		},
-	} {
-		t.Run(tc.CaseName, func(t *testing.T) {
-			namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId())
-
-			values := map[string]string{
-				"gitlab.app": "auto-devops-examples/minimal-ruby-app",
-				"gitlab.env": "prod",
-			}
-
-			mergeStringMap(values, tc.Values)
-
-			options := &helm.Options{
-				SetValues:      values,
-				KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
-			}
-
-			output := helm.RenderTemplate(t, options, helmChartPath, tc.Release, []string{"templates/worker-deployment.yaml"})
-
-			var deployments deploymentAppsV1List
-			helm.UnmarshalK8SYaml(t, output, &deployments)
-
-			require.Len(t, deployments.Items, len(tc.ExpectedDeployments))
-			for i, expectedDeployment := range tc.ExpectedDeployments {
-				deployment := deployments.Items[i]
-
-				require.Equal(t, expectedDeployment.ExpectedName, deployment.Name)
-
-				require.Equal(t, map[string]string{
-					"chart":    chartName,
-					"heritage": "Helm",
-					"release":  tc.ExpectedRelease,
-					"tier":     "worker",
-					"track":    "stable",
-				}, deployment.Labels)
-
-				require.Equal(t, expectedDeployment.ExpectedSelector, deployment.Spec.Selector)
-
-				require.Equal(t, map[string]string{
-					"release": tc.ExpectedRelease,
-					"tier":    "worker",
-					"track":   "stable",
-				}, deployment.Spec.Template.Labels)
-			}
-		})
-	}
-
-	// worker lifecycle
-	for _, tc := range []struct {
-		CaseName string
-		Values   map[string]string
-		Release  string
-
-		ExpectedDeployments []workerDeploymentTestCase
-	}{
-		{
-			CaseName: "lifecycle",
-			Release:  "production",
-			Values: map[string]string{
-				"workers.worker1.command[0]": "echo",
-				"workers.worker1.command[1]": "worker1",
-				"workers.worker1.lifecycle.preStop.exec.command[0]": "/bin/sh",
-				"workers.worker1.lifecycle.preStop.exec.command[1]": "-c",
-				"workers.worker1.lifecycle.preStop.exec.command[2]": "sleep 10",
-				"workers.worker2.command[0]": "echo",
-				"workers.worker2.command[1]": "worker2",
-				"workers.worker2.lifecycle.preStop.exec.command[0]": "/bin/sh",
-				"workers.worker2.lifecycle.preStop.exec.command[1]": "-c",
-				"workers.worker2.lifecycle.preStop.exec.command[2]": "sleep 15",
-			},
-			ExpectedDeployments: []workerDeploymentTestCase{
-				{
-					ExpectedName:       "production-worker1",
-					ExpectedCmd:        []string{"echo", "worker1"},
-					ExpectedLifecycle: &coreV1.Lifecycle{
-						PreStop: &coreV1.Handler{
-							Exec: &coreV1.ExecAction{
-								Command: []string{"/bin/sh", "-c", "sleep 10"},
-							},
-						},
-					},
-				},
-				{
-					ExpectedName:       "production-worker2",
-					ExpectedCmd:        []string{"echo", "worker2"},
-					ExpectedLifecycle: &coreV1.Lifecycle{
-						PreStop: &coreV1.Handler{
-							Exec: &coreV1.ExecAction{
-								Command: []string{"/bin/sh", "-c", "sleep 15"},
-							},
-						},
-					},
-				},
-			},
-		},
-		{
-			CaseName: "preStopCommand",
-			Release:  "production",
-			Values: map[string]string{
-				"workers.worker1.command[0]": "echo",
-				"workers.worker1.command[1]": "worker1",
-				"workers.worker1.preStopCommand[0]": "/bin/sh",
-				"workers.worker1.preStopCommand[1]": "-c",
-				"workers.worker1.preStopCommand[2]": "sleep 10",
-				"workers.worker2.command[0]": "echo",
-				"workers.worker2.command[1]": "worker2",
-				"workers.worker2.preStopCommand[0]": "/bin/sh",
-				"workers.worker2.preStopCommand[1]": "-c",
-				"workers.worker2.preStopCommand[2]": "sleep 15",
-			},
-			ExpectedDeployments: []workerDeploymentTestCase{
-				{
-					ExpectedName:       "production-worker1",
-					ExpectedCmd:        []string{"echo", "worker1"},
-					ExpectedLifecycle: &coreV1.Lifecycle{
-						PreStop: &coreV1.Handler{
-							Exec: &coreV1.ExecAction{
-								Command: []string{"/bin/sh", "-c", "sleep 10"},
-							},
-						},
-					},
-				},
-				{
-					ExpectedName:       "production-worker2",
-					ExpectedCmd:        []string{"echo", "worker2"},
-					ExpectedLifecycle: &coreV1.Lifecycle{
-						PreStop: &coreV1.Handler{
-							Exec: &coreV1.ExecAction{
-								Command: []string{"/bin/sh", "-c", "sleep 15"},
-							},
-						},
-					},
-				},
-			},
-		},
-	} {
-		t.Run(tc.CaseName, func(t *testing.T) {
-			namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId())
-
-			values := map[string]string{
-				"gitlab.app": "auto-devops-examples/minimal-ruby-app",
-				"gitlab.env": "prod",
-			}
-
-			mergeStringMap(values, tc.Values)
-
-			options := &helm.Options{
-				SetValues:      values,
-				KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
-			}
-
-			output := helm.RenderTemplate(t, options, helmChartPath, tc.Release, []string{"templates/worker-deployment.yaml"})
-
-			var deployments deploymentAppsV1List
-			helm.UnmarshalK8SYaml(t, output, &deployments)
-
-			require.Len(t, deployments.Items, len(tc.ExpectedDeployments))
-
-			for i, expectedDeployment := range tc.ExpectedDeployments {
-				deployment := deployments.Items[i]
-				require.Equal(t, expectedDeployment.ExpectedName, deployment.Name)
-				require.Len(t, deployment.Spec.Template.Spec.Containers, 1)
-				require.Equal(t, expectedDeployment.ExpectedCmd, deployment.Spec.Template.Spec.Containers[0].Command)
-				require.Equal(t, expectedDeployment.ExpectedLifecycle, deployment.Spec.Template.Spec.Containers[0].Lifecycle)
-			}
-		})
-	}
-
-	// worker livenessProbe, and readinessProbe tests
-	for _, tc := range []struct {
-		CaseName string
-		Values   map[string]string
-		Release  string
-
-		ExpectedDeployments []workerDeploymentTestCase
-	}{
-		{
-			CaseName: "default liveness and readiness values",
-			Release:  "production",
-			Values: map[string]string{
-				"workers.worker1.command[0]": "echo",
-				"workers.worker1.command[1]": "worker1",
-				"workers.worker2.command[0]": "echo",
-				"workers.worker2.command[1]": "worker2",
-			},
-			ExpectedDeployments: []workerDeploymentTestCase{
-				{
-					ExpectedName:           "production-worker1",
-					ExpectedCmd:            []string{"echo", "worker1"},
-					ExpectedLivenessProbe:  defaultLivenessProbe(),
-					ExpectedReadinessProbe: defaultReadinessProbe(),
-				},
-				{
-					ExpectedName:           "production-worker2",
-					ExpectedCmd:            []string{"echo", "worker2"},
-					ExpectedLivenessProbe:  defaultLivenessProbe(),
-					ExpectedReadinessProbe: defaultReadinessProbe(),
-				},
-			},
-		},
-		{
-			CaseName: "enableWorkerLivenessProbe",
-			Release:  "production",
-			Values: map[string]string{
-				"workers.worker1.command[0]":              "echo",
-				"workers.worker1.command[1]":              "worker1",
-				"workers.worker1.livenessProbe.path":      "/worker",
-				"workers.worker1.livenessProbe.scheme":    "HTTP",
-				"workers.worker1.livenessProbe.probeType": "httpGet",
-				"workers.worker2.command[0]":              "echo",
-				"workers.worker2.command[1]":              "worker2",
-				"workers.worker2.livenessProbe.path":      "/worker",
-				"workers.worker2.livenessProbe.scheme":    "HTTP",
-				"workers.worker2.livenessProbe.probeType": "httpGet",
-			},
-			ExpectedDeployments: []workerDeploymentTestCase{
-				{
-					ExpectedName:           "production-worker1",
-					ExpectedCmd:            []string{"echo", "worker1"},
-					ExpectedLivenessProbe:  workerLivenessProbe(),
-					ExpectedReadinessProbe: defaultReadinessProbe(),
-				},
-				{
-					ExpectedName:           "production-worker2",
-					ExpectedCmd:            []string{"echo", "worker2"},
-					ExpectedLivenessProbe:  workerLivenessProbe(),
-					ExpectedReadinessProbe: defaultReadinessProbe(),
-				},
-			},
-		},
-		{
-			CaseName: "enableWorkerReadinessProbe",
-			Release:  "production",
-			Values: map[string]string{
-				"workers.worker1.command[0]":               "echo",
-				"workers.worker1.command[1]":               "worker1",
-				"workers.worker1.readinessProbe.path":      "/worker",
-				"workers.worker1.readinessProbe.scheme":    "HTTP",
-				"workers.worker1.readinessProbe.probeType": "httpGet",
-				"workers.worker2.command[0]":               "echo",
-				"workers.worker2.command[1]":               "worker2",
-				"workers.worker2.readinessProbe.path":      "/worker",
-				"workers.worker2.readinessProbe.scheme":    "HTTP",
-				"workers.worker2.readinessProbe.probeType": "httpGet",
-			},
-			ExpectedDeployments: []workerDeploymentTestCase{
-				{
-					ExpectedName:           "production-worker1",
-					ExpectedCmd:            []string{"echo", "worker1"},
-					ExpectedLivenessProbe:  defaultLivenessProbe(),
-					ExpectedReadinessProbe: workerReadinessProbe(),
-				},
-				{
-					ExpectedName:           "production-worker2",
-					ExpectedCmd:            []string{"echo", "worker2"},
-					ExpectedLivenessProbe:  defaultLivenessProbe(),
-					ExpectedReadinessProbe: workerReadinessProbe(),
-				},
-			},
-		},
-	} {
-		t.Run(tc.CaseName, func(t *testing.T) {
-			namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId())
-
-			values := map[string]string{
-				"gitlab.app": "auto-devops-examples/minimal-ruby-app",
-				"gitlab.env": "prod",
-			}
-
-			mergeStringMap(values, tc.Values)
-
-			options := &helm.Options{
-				SetValues:      values,
-				KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
-			}
-
-			output := helm.RenderTemplate(t, options, helmChartPath, tc.Release, []string{"templates/worker-deployment.yaml"})
-
-			var deployments deploymentAppsV1List
-			helm.UnmarshalK8SYaml(t, output, &deployments)
-
-			require.Len(t, deployments.Items, len(tc.ExpectedDeployments))
-
-			for i, expectedDeployment := range tc.ExpectedDeployments {
-				deployment := deployments.Items[i]
-				require.Equal(t, expectedDeployment.ExpectedName, deployment.Name)
-				require.Len(t, deployment.Spec.Template.Spec.Containers, 1)
-				require.Equal(t, expectedDeployment.ExpectedCmd, deployment.Spec.Template.Spec.Containers[0].Command)
-				require.Equal(t, expectedDeployment.ExpectedLivenessProbe, deployment.Spec.Template.Spec.Containers[0].LivenessProbe)
-				require.Equal(t, expectedDeployment.ExpectedReadinessProbe, deployment.Spec.Template.Spec.Containers[0].ReadinessProbe)
-			}
-		})
-	}
-}
diff --git a/chart/test/testdata/custom-cilium-policy.yaml b/chart/test/testdata/custom-cilium-policy.yaml
deleted file mode 100644
index ea92d1f7b9e11887534b7545b700a3a854cee38a..0000000000000000000000000000000000000000
--- a/chart/test/testdata/custom-cilium-policy.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-ciliumNetworkPolicy:
-  enabled: true
-  alerts: 
-    enabled: true
-  spec:
-    endpointSelector: {}
-    ingress:
-    - fromEndpoints:
-      - matchLabels:
-          app.gitlab.com/managed_by: gitlab
diff --git a/chart/test/testdata/custom-policy.yaml b/chart/test/testdata/custom-policy.yaml
deleted file mode 100644
index 8cc487aa725b2bb91a704caf5e39c3a3882be055..0000000000000000000000000000000000000000
--- a/chart/test/testdata/custom-policy.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-networkPolicy:
-  enabled: true
-  spec:
-    podSelector:
-      matchLabels:
-        foo: bar
-    ingress:
-    - from:
-      - podSelector:
-          matchLabels: {}
-      - namespaceSelector:
-          matchLabels:
-            name: foo
diff --git a/chart/test/testdata/full-spec-policy.yaml b/chart/test/testdata/full-spec-policy.yaml
deleted file mode 100644
index 25254b5d2c51802230fd383f206e1848a9517879..0000000000000000000000000000000000000000
--- a/chart/test/testdata/full-spec-policy.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
-networkPolicy:
-  enabled: true
-  spec:
-    podSelector:
-      matchLabels: {}
-    policyTypes:
-    - Ingress
-    - Egress
-    ingress:
-    - from:
-      - podSelector:
-          matchLabels: {}
-    egress:
-    - to:
-      - namespaceSelector:
-          matchLabels:
-            name: gitlab-managed-apps
diff --git a/chart/test/testdata/modsecurity-ingress.yaml b/chart/test/testdata/modsecurity-ingress.yaml
deleted file mode 100644
index 5b8b469c1ece14cd1fdbdda8b503b5a38026141f..0000000000000000000000000000000000000000
--- a/chart/test/testdata/modsecurity-ingress.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-ingress:
-  modSecurity:
-    enabled: true
-    secRules:
-      - variable: "REQUEST_HEADERS:User-Agent"
-        operator: "scanner"
-        action: "log,deny,id:107,status:403,msg:'Scanner Identified'"
-      - variable: "REQUEST_HEADERS:Content-Type"
-        operator: "text/plain"
-        action: "log,deny,id:'20010',status:403,msg:'Text plain not allowed'"
\ No newline at end of file
diff --git a/chart/values.yaml b/chart/values.yaml
index fc9b390f259d551c9a1257c105690355bed2e9e0..f5187bdbcf9dad63c860b7597988f9922da6f410 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -1,169 +1,110 @@
 # Default values for chart.
 # This is a YAML-formatted file.
 # Declare variables to be passed into your templates.
+
 replicaCount: 1
-strategyType:
-# `serviceAccountName` is deprecated in favor of `serviceAccount.name`
-serviceAccountName:
+
 image:
-  repository: gitlab.example.com/group/project
-  tag: stable
   pullPolicy: IfNotPresent
-  secrets:
-    - name: gitlab-registry
-extraLabels: {}
-lifecycle: {}
-# preStop:
-#   exec:
-#     command: ["/bin/sh", "-c", "sleep 10"]
+  fpm:
+    repository: registry.metager.de/open-source/metager/fpm
+    pullPolicy: IfNotPresent
+    # Overrides the image tag whose default is the chart appVersion.
+    tag: ""
+  nginx:
+    repository: registry.metager.de/open-source/metager/nginx
+    pullPolicy: IfNotPresent
+    # Overrides the image tag whose default is the chart appVersion.
+    tag: ""
+
+imagePullSecrets: []
+nameOverride: ""
+fullnameOverride: ""
+
+serviceAccount:
+  # Specifies whether a service account should be created
+  create: true
+  # Annotations to add to the service account
+  annotations: {}
+  # The name of the service account to use.
+  # If not set and create is true, a name is generated using the fullname template
+  name: ""
+
 podAnnotations: {}
-nodeSelector: {}
-affinity: {}
-tolerations: []
-application:
-  track: stable
-  tier: web
-  migrateCommand:
-  initializeCommand:
-  secretName:
-  secretChecksum:
-hpa:
-  enabled: false
-  minReplicas: 1
-  maxReplicas: 5
-  targetCPUUtilizationPercentage: 80
-gitlab:
-  app:
-  env:
-  envName:
-  envURL:
-  projectID:
+
+podSecurityContext: {}
+  # fsGroup: 2000
+
+securityContext: {}
+  # capabilities:
+  #   drop:
+  #   - ALL
+  # readOnlyRootFilesystem: true
+  # runAsNonRoot: true
+  # runAsUser: 1000
+
 service:
-  enabled: true
-  annotations: {}
-  name: web
   type: ClusterIP
-  url: http://my.host.com/
-  additionalHosts:
-  commonName:
-  externalPort: 5000
-  internalPort: 5000
+  port: 80
+
 ingress:
   enabled: true
-  path: "/"
-  tls:
-    enabled: true
-    acme: true
-    secretName: ""
-    useDefaultSecret: false
+  className: "nginx"
   annotations:
-    kubernetes.io/ingress.class: "nginx"
-  modSecurity:
-    enabled: false
-    secRuleEngine: "DetectionOnly"
-    # secRules:
-    #   - variable: ""
-    #     operator: ""
-    #     action: ""
-  canary:
-    weight:
-prometheus:
-  metrics: false
-livenessProbe:
-  path: "/"
-  initialDelaySeconds: 15
-  timeoutSeconds: 15
-  scheme: "HTTP"
-  probeType: "httpGet"
-readinessProbe:
-  path: "/"
-  initialDelaySeconds: 5
-  timeoutSeconds: 3
-  scheme: "HTTP"
-  probeType: "httpGet"
-postgresql:
-  managed: false
-  managedClassSelector:
-    #   matchLabels:
-    #     stack: gitlab (This is an example. The labels should match the labels on the CloudSQLInstanceClass)
-
-resources:
-#  limits:
-#    cpu: 100m
-#    memory: 128Mi
-  requests: {}
-#    cpu: 100m
-#    memory: 128Mi
-
-## Configure PodDisruptionBudget
-## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-#
-podDisruptionBudget:
-  enabled: false
-  # minAvailable: 1
-  maxUnavailable: 1
-
-## Configure NetworkPolicy
-## ref: https://kubernetes.io/docs/concepts/services-networking/network-policies/
-#
-networkPolicy:
-  enabled: false
-  spec:
-    podSelector:
-      matchLabels: {}
-    ingress:
-    - from:
-      - podSelector:
-          matchLabels: {}
-      - namespaceSelector:
-          matchLabels:
-            app.gitlab.com/managed_by: gitlab
-
-ciliumNetworkPolicy:
-  enabled: false
-  alerts:
-    enabled: false
-  spec:
-    endpointSelector: {}
-    ingress:
-    - fromEndpoints:
-      - matchLabels:
-          app.gitlab.com/managed_by: gitlab
+    kubernetes.io/tls-acme: "false"
+    nginx.ingress.kubernetes.io/client-body-buffer-size: 30m
+    nginx.ingress.kubernetes.io/configuration-snippet: >
+      more_set_headers "Content-Security-Policy: default-src 'self'; script-src
+      'self' 'unsafe-inline'; script-src-elem 'self' 'unsafe-inline';
+      script-src-attr 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';
+      style-src-elem 'self' 'unsafe-inline'; style-src-attr 'self'
+      'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src
+      'self'; media-src; object-src; prefetch-src; child-src; frame-src 'self';
+      worker-src; frame-ancestors 'self' https://scripts.zdv.uni-mainz.de;
+      form-action 'self' www.paypal.com; base-uri; manifest-src; plugin-types;
+      report-uri; report-to";
 
-serviceAccount:
-  name:
-  annotations: {}
-  createNew: false
-
-workers: {}
-  # worker:
-  #   replicaCount: 1
-  #   terminationGracePeriodSeconds: 60
-  #   command:
-  #   - /bin/herokuish
-  #   - procfile
-  #   - start
-  #   - worker
-  #   nodeSelector: {}
-  #   tolerations: []
-  #   livenessProbe:
-  #     path: "/"
-  #     initialDelaySeconds: 15
-  #     timeoutSeconds: 15
-  #     scheme: "HTTP"
-  #     probeType: "httpGet"
-  #   readinessProbe:
-  #     path: "/"
-  #     initialDelaySeconds: 5
-  #     timeoutSeconds: 3
-  #     scheme: "HTTP"
-  #     probeType: "httpGet"
-  #   lifecycle:
-  #     preStop:
-  #       exec:
-  #         command: ["/bin/sh", "-c", "sleep 10"]
-  #   preStopCommand:
-  #   - /bin/herokuish
-  #   - procfile
-  #   - start
-  #   - stop_worker
+      more_set_headers "X-Frame-Options: sameorigin";
+
+      more_set_headers "X-Content-Type-Options: nosniff";
+
+      more_set_headers "ReferrerPolicy: origin";
+
+      more_set_headers "X-XSS-Protection: 1; mode=block";
+
+      more_set_headers "Permissions-Policy: interest-cohort=()";
+
+      if ($arg_out = "results-with-style") {
+        more_set_headers "X-Frame-Options: allow-from https://scripts.zdv.uni-mainz.de/";
+      }
+    nginx.ingress.kubernetes.io/proxy-body-size: 30m
+  hosts: []
+  tls: []
+  #  - secretName: chart-example-tls
+  #    hosts:
+  #      - chart-example.local
+
+resources: {}
+  # We usually recommend not to specify default resources and to leave this as a conscious
+  # choice for the user. This also increases chances charts run on environments with little
+  # resources, such as Minikube. If you do want to specify resources, uncomment the following
+  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+  # limits:
+  #   cpu: 100m
+  #   memory: 128Mi
+  # requests:
+  #   cpu: 100m
+  #   memory: 128Mi
+
+autoscaling:
+  enabled: true
+  minReplicas: 2
+  maxReplicas: 5
+  targetCPUUtilizationPercentage: 80
+  targetMemoryUtilizationPercentage: 80
+
+nodeSelector: {}
+
+tolerations: []
+
+affinity: {}
diff --git a/config/browserstack.php b/config/browserstack.php
deleted file mode 100644
index 45847b7914493a354d8d41e12e423e3315d9b9a3..0000000000000000000000000000000000000000
--- a/config/browserstack.php
+++ /dev/null
@@ -1,117 +0,0 @@
-<?php
-
-return [
-    /*
-    |--------------------------------------------------------------------------
-    | Credentials
-    |--------------------------------------------------------------------------
-    |
-    | Your username and access key for BrowserStack.
-    | https://www.browserstack.com/accounts/settings
-    |
-    */
-
-    'username' => env('BROWSERSTACK_USERNAME'),
-
-    'key' => env('BROWSERSTACK_ACCESS_KEY'),
-
-    /*
-    |--------------------------------------------------------------------------
-    | Browser
-    |--------------------------------------------------------------------------
-    |
-    | The browser slug to run on BrowserStack.
-    |
-    */
-
-    'browser' => env('BROWSERSTACK_BROWSER'),
-
-    /*
-    |--------------------------------------------------------------------------
-    | Session
-    |--------------------------------------------------------------------------
-    |
-    | Configuration to make BrowserStack run each tests in a different
-    | session.
-    |
-    */
-
-    'separate_sessions' => env('BROWSERSTACK_SEPARATE_SESSIONS', true),
-
-    /*
-    |--------------------------------------------------------------------------
-    | Capabilities
-    |--------------------------------------------------------------------------
-    |
-    | The configuration for capabilities of the browser.
-    | https://www.browserstack.com/automate/capabilities
-    |
-    */
-
-    'capabilities' => [
-
-        'acceptSslCerts' => env('BROWSERSTACK_ACCEPT_SSL', true),
-
-        'browserstack' => [
-
-            'console' => env('BROWSERSTACK_CONSOLE', 'verbose'),
-
-            'local' => env('BROWSERSTACK_LOCAL_TUNNEL', true),
-
-            'timezone' => env('BROWSERSTACK_TIMEZONE', config('app.timezone')),
-            "timezone" => "Europe/Berlin",
-
-        ],
-        "resolution" => "1920x1080",
-        "project" => env("PROJECT_NAME", "Not Set"),
-        "build" => env("BRANCH_NAME", "Not Set"),
-        "name" => env("COMMIT_NAME", "Not Set"),
-        'resolution' => env('BROWSERSTACK_RESOLUTION', '1920x1080'),
-    ],
-
-    /*
-    |--------------------------------------------------------------------------
-    | Command Arguments
-    |--------------------------------------------------------------------------
-    |
-    | The arguments and flags to use for the BrowserStack local connection.
-    |
-    */
-
-    'arguments' => [
-
-        'binaryPath' => env('BROWSERSTACK_CLI_BINARY_PATH'),
-
-        'logFile' => env('BROWSERSTACK_CLI_LOG_FILE'),
-
-        'v' => env('BROWSERSTACK_CLI_VERBOSE'),
-
-        'force' => env('BROWSERSTACK_CLI_FORCE'),
-
-        'only' => env('BROWSERSTACK_CLI_ONLY'),
-
-        'onlyAutomate' => env('BROWSERSTACK_CLI_ONLY_AUTOMATE'),
-
-        'forcelocal' => env(
-            'BROWSERSTACK_CLI_FORCE_LOCAL',
-            env('BROWSERSTACK_LOCAL_TUNNEL', true)
-        ),
-
-        'localIdentifier' => env('BROWSERSTACK_CLI_LOCAL_IDENTIFIER'),
-
-        'proxyHost' => env('BROWSERSTACK_CLI_PROXY_HOST'),
-
-        'proxyPort' => env('BROWSERSTACK_CLI_PROXY_PORT'),
-
-        'proxyUser' => env('BROWSERSTACK_CLI_PROXY_USER'),
-
-        'proxyPass' => env('BROWSERSTACK_CLI_PROXY_PASSWORD'),
-
-        'forceproxy' => env('BROWSERSTACK_CLI_FORCE_PROXY'),
-
-        'hosts' => env('BROWSERSTACK_CLI_HOSTS'),
-
-        'f' => env('BROWSERSTACK_CLI_F'),
-
-    ],
-];
diff --git a/config/sumas.json.example b/config/sumas.json.example
deleted file mode 100644
index d9962295300d34cd9e18f60f20a883b3c251d36c..0000000000000000000000000000000000000000
--- a/config/sumas.json.example
+++ /dev/null
@@ -1,115 +0,0 @@
-{
-    "sumas": {
-        "dummy": {
-            "host": "dummy-nginx",
-            "path": "\/",
-            "port": 80,
-            "query-parameter": "q",
-            "input-encoding": "utf8",
-            "output-encoding": "utf8",
-            "parser-class": "Dummy",
-            "get-parameter": {},
-            "request-header": {},
-            "display-name": "dummy",
-            "engine-boost": 1,
-            "cache-duration": -1,
-            "disabled": false,
-            "filter-opt-in": false,
-            "homepage": "https:\/\/gitlab.metager.de\/open-source\/dummy-engine"
-        }
-    },
-    "foki": {
-        "web": {
-            "display-name": "index.foki.web",
-            "sumas": [
-                "dummy"
-            ],
-            "main": [
-                "dummy"
-            ]
-        }
-    },
-    "filter": {
-        "query-filter": {},
-        "parameter-filter": {
-            "count": {
-                "name": "metaGer.filter.count",
-                "desc": "",
-                "get-parameter": "count",
-                "values": {
-                    "10": "10",
-                    "20": "20",
-                    "30": "30",
-                    "40": "40",
-                    "50": "50",
-                    "100": "100"
-                },
-                "sumas": {
-                    "dummy": {
-                        "get-parameter": "count",
-                        "values": {
-                            "10": "10",
-                            "20": "20",
-                            "30": "30",
-                            "40": "40",
-                            "50": "50",
-                            "100": "100"
-                        }
-                    }
-                }
-            },
-            "min": {
-                "name": "metaGer.filter.min",
-                "desc": "",
-                "get-parameter": "min",
-                "values": {
-                    "nofilter" : "0",
-                    "2": "2",
-                    "4": "4",
-                    "6": "6",
-                    "8": "8",
-                    "10": "10"
-                },
-                "sumas": {
-                    "dummy": {
-                        "get-parameter": "min",
-                        "values": {
-                            "nofilter" : "0",
-                            "2": "2000",
-                            "4": "4000",
-                            "6": "6000",
-                            "8": "8000",
-                            "10": "10000"
-                        }
-                    }
-                }
-            },
-            "max": {
-                "name": "metaGer.filter.max",
-                "desc": "",
-                "get-parameter": "max",
-                "values": {
-                    "nofilter" : "0",
-                    "2": "2",
-                    "4": "4",
-                    "6": "6",
-                    "8": "8",
-                    "10": "10"
-                },
-                "sumas": {
-                    "dummy": {
-                        "get-parameter": "max",
-                        "values": {
-                            "nofilter" : "0",
-                            "2": "2000",
-                            "4": "4000",
-                            "6": "6000",
-                            "8": "8000",
-                            "10": "10000"
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/database/.gitignore b/database/.gitignore
deleted file mode 100644
index ae95d6c357fb8ab46f200d3406039f7f1000f903..0000000000000000000000000000000000000000
--- a/database/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.sqlite
-useragents.sqlite
\ No newline at end of file
diff --git a/database/useragents.sqlite.example b/database/useragents.sqlite.example
deleted file mode 100755
index 23af7d97ddd9609a699cd6fc3ced2ddafc8a8b46..0000000000000000000000000000000000000000
Binary files a/database/useragents.sqlite.example and /dev/null differ
diff --git a/deploy.sh b/deploy.sh
deleted file mode 100644
index 933329b4aec8c9cca90e95d0d7d95fda807707b4..0000000000000000000000000000000000000000
--- a/deploy.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-set -e 
-
-cd ~/MetaGer_neu
-php artisan requests:gather
-if [ -f ~/MetaGer/artisan ]; then php ~/MetaGer/artisan down;fi
-cd ~/
-while [ -d ~/MetaGer ]; do rm -rf ~/MetaGer;done
-mv MetaGer_neu MetaGer
-sudo pkill --signal SIGHUP supervisord
-php ~/MetaGer/artisan up
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index 9e26aa0127ceb823a8399e23b97815ab9685bfd2..b8a224080f193f735e5ef723200fd0f6ac20bc0c 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,92 +1,93 @@
-version: '3.7'
+version: "3"
+
+# Volumes
+volumes:
+  composer_cache: {}
+  node_cache: {}
+
+# Services
 services:
-  nodejs:
-    image: metager/development:latest
-    restart: always
+  fpm:
     build:
-      context: .
-      dockerfile: Dockerfile
-      target: development
+      &fpm_build
+      context: ./
+      dockerfile: build/fpm/Dockerfile
+      target: ${APP_ENV}
+    restart: unless-stopped
     volumes:
-      - .:/html
-    command: bash -c "npm i --cache .npm --prefer-offline && npm run watch"
-  composer:
-    image: metager/development:latest
-    depends_on:
-      - "nodejs"
-    environment:
-      - COMPOSER_HOME=/html/.composer
-    volumes:
-      - .:/html
-    command: composer install
-  phpfpm:
-    depends_on:
-      - "nodejs"
-    restart: always
-    image: metager/development:latest
-    volumes:
-      - .:/html
+      - ./metager:/metager/metager_app
     healthcheck:
       test: "curl -f http://nginx:8080/health-check/liveness"
   nginx:
+    build:
+      context: ./
+      dockerfile: build/nginx/Dockerfile
+      target: ${APP_ENV}
+    restart: unless-stopped
     depends_on:
-      - "nodejs"
-    restart: always
-    image: metager/development:latest
-    command: nginx
+      - fpm
     volumes:
-      - .:/html
-      - ./config/nginx.conf:/etc/nginx/nginx.conf
-      - ./config/nginx-default-dev.conf:/etc/nginx/sites-available/default
-    ports: 
-    - "8080:8080"
+      - ./metager/public:/metager/metager_app/public
+    ports:
+      - 8080:8080
     healthcheck:
-      test: "curl -f http://nginx:8080/health-check/liveness"
+      test: "curl -f http://nginx:8080/health-check/nginx"
   scheduler:
-    depends_on:
-      - "nodejs"
-    restart: always
-    image: metager/development:latest
-    command: /bin/sh -c "php artisan schedule:work"
+    build:
+      <<: *fpm_build
+    restart: unless-stopped
+    entrypoint: /usr/local/bin/php
+    command: artisan schedule:work
     volumes:
-      - .:/html
+      - ./metager:/metager/metager_app
     healthcheck:
       test: "curl -f http://nginx:8080/health-check/liveness-scheduler"
   worker:
-    depends_on:
-      - "nodejs"
-    restart: always
-    image: metager/development:latest
+    build:
+      <<: *fpm_build
+    restart: unless-stopped
+    entrypoint: /usr/local/bin/php
+    command: artisan requests:fetcher
     volumes:
-      - .:/html
-    command: "php artisan requests:fetcher"
+      - ./metager:/metager/metager_app
     healthcheck:
       test: "curl -f http://nginx:8080/health-check/liveness-worker"
-#  dummy-phpfpm:
-#    restart: on-failure
-#    image: registry.metager.de/open-source/dummy-engine/master
-#    working_dir: /html
-#  dummy-nginx:
-#    depends_on:
-#      - "dummy-phpfpm"
-#    restart: on-failure
-#    image: registry.metager.de/open-source/dummy-engine/master
-#    working_dir: /html
-#    command: sh -c "sed -i 's/fastcgi_pass localhost:9000;/fastcgi_pass dummy-phpfpm:9000;/g' /etc/nginx/conf.d/default.conf && nginx"
-  mgdb:
-    restart: on-failure
-    image: mariadb:latest
-    command: --default-authentication-plugin=mysql_native_password
+  selenium_standalone_firefox:
+    image: ${SELENIUM_IMAGE}
+    restart: always
+    shm_size: 2GB
+    ports:
+      - "7900:7900"
+  composer:
+    build:
+      <<: *fpm_build
+    entrypoint: /usr/bin/composer
+    command: install
     environment:
-      - MYSQL_RANDOM_ROOT_PASSWORD=yes
-      - MYSQL_USER=metager
-      - MYSQL_PASSWORD=metager
-      - MYSQL_DATABASE=metager
-    healthcheck:
-     test: ["CMD", "mysqladmin", "ping", "--silent"]
+      - COMPOSER_HOME=/composer_cache
+    volumes:
+      - ./metager:/metager/metager_app
+      - composer_cache:/composer_cache
+
+  node:
+    image: node:14
+    restart: unless-stopped
+    depends_on:
+      - nginx
+    user: 1000:1000
+    entrypoint: ["/bin/bash", "-c"]
+    command: 
+    - | 
+      npm install
+      npm run watch
+    working_dir: /metager/metager_app
+    volumes:
+      - ./metager:/metager/metager_app
+      - node_cache:/home/node/.npm
   redis:
-    restart: on-failure
-    user: "redis:redis"
     image: redis:6
+    restart: unless-stopped
+    user: "redis:redis"
     healthcheck:
       test: "redis-cli ping"
+  
\ No newline at end of file
diff --git a/helpers/entrypoint.sh b/helpers/entrypoint.sh
deleted file mode 100755
index 0913b951a5cfec5b99c9fe450de614dc72404f31..0000000000000000000000000000000000000000
--- a/helpers/entrypoint.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/sh
-
-# Production version will have the .env file mounted at /home/metager/.env
-if [ -f /home/metager/.env ];
-then
-  cp /home/metager/.env .env
-fi
-
-if [ ! -f .env ];
-then
-  cp .env.example .env
-  php artisan key:generate
-fi
-
-if [ ! -z $GITLAB_ENVIRONMENT_NAME ];
-then
-    if [ "$GITLAB_ENVIRONMENT_NAME" = "production" ]; 
-    then 
-        sed -i 's/^APP_ENV=.*/APP_ENV=production/g' .env; 
-    else 
-        sed -i 's/^APP_ENV=.*/APP_ENV=development/g' .env; 
-    fi
-fi
-
-if [ ! -f "/html/config/sumas.json" ]; then
-    cp /html/config/sumas.json.example /html/config/sumas.json
-fi
-
-if [ ! -f "/html/config/sumasEn.json" ]; then
-    cp /html/config/sumas.json.example /html/config/sumasEn.json
-fi
-
-if [ ! -f "/html/database/useragents.sqlite" ]; then
-    cp /html/database/useragents.sqlite.example /html/database/useragents.sqlite
-fi
-
-if [ ! -d "/html/storage/logs/metager" ]; then
-    mkdir -p /html/storage/logs/metager
-fi
-
-php artisan optimize
-php artisan route:trans:cache
\ No newline at end of file
diff --git a/helpers/entrypointDev.sh b/helpers/entrypointDev.sh
deleted file mode 100755
index 06be8546eeab22745c00b8ce82c150d1f2d9f79c..0000000000000000000000000000000000000000
--- a/helpers/entrypointDev.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-set -e
-
-/bin/sh -c "/html/helpers/entrypoint.sh"
-
-sed -i 's/^APP_ENV=.*/APP_ENV=local/g' .env; 
-
-php artisan wait:db
-rm /html/database/useragents.sqlite
-touch /html/database/useragents.sqlite
-php artisan migrate:fresh
-php artisan db:seed
-
-php-fpm7.4 -F -R
\ No newline at end of file
diff --git a/helpers/entrypointProduction.sh b/helpers/entrypointProduction.sh
deleted file mode 100755
index 98abbfda4b98a8c019ec3b22766c4a49d5546cc4..0000000000000000000000000000000000000000
--- a/helpers/entrypointProduction.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-set -e
-
-/bin/sh -c "/html/helpers/entrypoint.sh"
-
-php artisan spam:load
-php artisan load:affiliate-blacklist
-
-php-fpm7.4 -F -R
\ No newline at end of file
diff --git a/helpers/installNodejs.sh b/helpers/installNodejs.sh
deleted file mode 100644
index b532160eff7ea6a7c010a18c1d91c9fcb821510f..0000000000000000000000000000000000000000
--- a/helpers/installNodejs.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-set -e
-
-NODE_VERSION=v14.17.5
-NODE_DISTRO=linux-x64
-NODE_URL="https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-$NODE_DISTRO.tar.xz"
-# Download Nodejs archive
-curl -o /tmp/node-$NODE_VERSION-$NODE_DISTRO.tar.xz "$NODE_URL"
-
-tar -xJvf /tmp/node-$NODE_VERSION-$NODE_DISTRO.tar.xz -C /usr/local/lib
-mv /usr/local/lib/node-$NODE_VERSION-$NODE_DISTRO /usr/local/lib/nodejs
-rm /tmp/node-$NODE_VERSION-$NODE_DISTRO.tar.xz
-
-echo "export PATH=/usr/local/lib/nodejs/bin:$PATH" >> ~/.profile
-. ~/.profile
\ No newline at end of file
diff --git a/helpers/installPackages.sh b/helpers/installPackages.sh
deleted file mode 100755
index 25779f06616f77efaca56afa8caa5708a43d1669..0000000000000000000000000000000000000000
--- a/helpers/installPackages.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-
-set -e
-
-mc alias set --path=on --api S3v4 packages $S3_HOST $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY
-if mc cp packages/$S3_BUCKETNAME/packages.tar /tmp/; 
-then 
-    tar -xf /tmp/packages.tar
-fi
-
-# Install node modules
-npm i --cache .npm --prefer-offline --no-audit --progress=false
-npm run prod
-
-# Install composer modules
-export COMPOSER_HOME=.composer
-composer install --no-dev
-
-# Add the new cache to the bucket
-tar -cf /tmp/packages.tar .npm .composer
-mc cp /tmp/packages.tar packages/$S3_BUCKETNAME/
-
-# Cleanup
-rm /tmp/packages.tar
-rm -rf .npm .composer
\ No newline at end of file
diff --git a/init.sh b/init.sh
deleted file mode 100755
index 63305b0bdc1795424cbf2d708620b31977d1e2a0..0000000000000000000000000000000000000000
--- a/init.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/sh
-
-# This commands will help initialize data for docker-compose setup
-# Its supposed to run in a php docker image
-
-if [ ! -f "/data/.env" ]; then
-    cp /data/.env.example /data/.env
-fi
-
-if [ ! -f "/data/config/sumas.json" ]; then
-    cp /data/config/sumas.json.example /data/config/sumas.json
-fi
-
-if [ ! -f "/data/config/sumasEn.json" ]; then
-    cp /data/config/sumas.json.example /data/config/sumasEn.json
-fi
-
-if [ -f "/data/database/useragents.sqlite" ]; then
-    rm /data/database/useragents.sqlite
-fi
-
-if [ ! -d "/data/storage/logs/metager" ]; then
-    mkdir -p /data/storage/logs/metager
-fi
-
-cp /data/database/useragents.sqlite.example /data/database/useragents.sqlite
-
-chmod -R go+w storage bootstrap/cache
-
-docker-php-ext-install pdo pdo_mysql
-
-php artisan wait:db
-rm /data/database/useragents.sqlite
-touch /data/database/useragents.sqlite
-php artisan migrate:fresh
-php artisan db:seed
\ No newline at end of file
diff --git a/.env.example b/metager/.env.example
similarity index 90%
rename from .env.example
rename to metager/.env.example
index 0ba35dad3867292d90a11a60eebe9a9b5a8eb465..d8f24bea1886cb387bf9b9ac80124783a27f3762 100644
--- a/.env.example
+++ b/metager/.env.example
@@ -7,9 +7,7 @@ APP_URL=http://nginx
 
 BOT_PROTECTION=true
 
-DB_CONNECTION=mysql
-DB_HOST=mgdb
-DB_PORT=3306
+DB_CONNECTION=sqlite
 DB_DATABASE=metager
 DB_USERNAME=metager
 DB_PASSWORD="metager"
@@ -46,5 +44,6 @@ COMMIT_NAME=Testing
 BROWSERSTACK_BROWSER=WINDOWS_10_FIREFOX
 BROWSERSTACK_SEPARATE_SESSIONS=true
 
+SELENIUM_HOST=selenium_standalone_firefox
 #PROXY_HOST=
-#PROXY_PORT=
\ No newline at end of file
+#PROXY_PORT=
diff --git a/metager/.gitignore b/metager/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..76d6eb1d04f23834bef2936deb865f6803dd4c04
--- /dev/null
+++ b/metager/.gitignore
@@ -0,0 +1,27 @@
+/node_modules
+/public/storage
+/vendor
+/.idea
+Homestead.json
+Homestead.yaml
+.env
+.orig
+langfiles.zip
+npm-debug.log
+# The Files created by Webpack in the build process
+/public/**/*.css
+!/public/fonts/arimo/stylesheet.css
+!/public/fonts/liberationsans/stylesheet.css
+/public/**/*.js
+/public/mix-manifest.json
+
+**/*.map
+/.buildpath
+/.project
+
+local.log
+
+browserstack.err
+.npm
+.composer
+.phpunit.result.cache
diff --git a/app/Console/Commands/AppendLogs.php b/metager/app/Console/Commands/AppendLogs.php
similarity index 74%
rename from app/Console/Commands/AppendLogs.php
rename to metager/app/Console/Commands/AppendLogs.php
index 435e740dc2a34b444e735f32a3ea9bad028f9370..c89888f75666e0685a898d10d38113e4676378ef 100644
--- a/app/Console/Commands/AppendLogs.php
+++ b/metager/app/Console/Commands/AppendLogs.php
@@ -54,17 +54,19 @@ class AppendLogs extends Command
         }
 
         $elements = [];
-        $elementCount = $redis->llen(\App\Console\Commands\AppendLogs::LOGKEY);
-        $elements = $redis->lpop(\App\Console\Commands\AppendLogs::LOGKEY, $elementCount);
-
-        if (!is_array($elements) || sizeof($elements) <= 0) {
-            return;
+        while(($value = $redis->lpop(\App\Console\Commands\AppendLogs::LOGKEY)) !== false){
+            $elements[] = $value;
         }
+
         if (file_put_contents(\App\MetaGer::getMGLogFile(), implode(PHP_EOL, $elements) . PHP_EOL, FILE_APPEND) === false) {
-            $this->error("Konnte Log Zeile(n) nicht schreiben");
-            $redis->lpush(\App\Console\Commands\AppendLogs::LOGKEY, array_reverse($elements));
-        } else {
-            $this->info("Added " . sizeof($elements) . " lines to todays log!");
+            $this->error("Konnte " . sizeof($elements) . " Log Zeile(n) nicht schreiben");
+            foreach($elements as $element){
+                $redis->lPush(\App\Console\Commands\AppendLogs::LOGKEY, $element);
+            }
+        }else{
+            $this->info("Added " . sizeof($elements) . " lines to todays log! " . \App\MetaGer::getMGLogFile());
         }
+
+        
     }
 }
diff --git a/app/Console/Commands/Heartbeat.php b/metager/app/Console/Commands/Heartbeat.php
similarity index 62%
rename from app/Console/Commands/Heartbeat.php
rename to metager/app/Console/Commands/Heartbeat.php
index 645fcf7e3b952c095bc8f67e484b797f74d368c4..27defc087121e9b67ca2acba3a05fba0a061f1b9 100644
--- a/app/Console/Commands/Heartbeat.php
+++ b/metager/app/Console/Commands/Heartbeat.php
@@ -43,13 +43,24 @@ class Heartbeat extends Command
      */
     public function handle()
     {
-        try{
-            $now = Carbon::now();
-            Redis::set(self::REDIS_KEY, $now->format('Y-m-d H:i:s'));
-        } catch (\Exception $e){
-            echo $e->getTraceAsString();
-            return 1;
+        // Redis might not be available now
+        for ($count = 0; $count < 60; $count++) {
+            try {
+                return $this->heartbeat();
+            } catch (\Exception $e) {
+                if ($count >= 60) {
+                    // If its not available after 10 seconds we will exit
+                    return 1;
+                }
+                sleep(1);
+            }
         }
+    }
+
+    private function heartbeat() {
+        $now = Carbon::now();
+        Redis::set(self::REDIS_KEY, $now->format('Y-m-d H:i:s'));
         return 0;
     }
+
 }
diff --git a/app/Console/Commands/LoadAffiliateBlacklist.php b/metager/app/Console/Commands/LoadAffiliateBlacklist.php
similarity index 70%
rename from app/Console/Commands/LoadAffiliateBlacklist.php
rename to metager/app/Console/Commands/LoadAffiliateBlacklist.php
index f67e2916dd8af6f682af2f56f8762559285bee3a..dc17552abb641477c3708065353799185ccf205d 100644
--- a/app/Console/Commands/LoadAffiliateBlacklist.php
+++ b/metager/app/Console/Commands/LoadAffiliateBlacklist.php
@@ -39,10 +39,25 @@ class LoadAffiliateBlacklist extends Command
      */
     public function handle()
     {
+        // Redis might not be available now
+        for ($count = 0; $count < 60; $count++) {
+            try {
+                return $this->loadAffiliateBlacklist();
+            } catch (\Exception $e) {
+                if ($count >= 59) {
+                    // If its not available after 10 seconds we will exit
+                    return 1;
+                }
+                sleep(1);
+            }
+        }
+    }
+
+    private function loadAffiliateBlacklist() {
         $blacklistItems = DB::table("affiliate_blacklist", "b")
-            ->select("hostname")
-            ->where("blacklist", true)
-            ->get();
+        ->select("hostname")
+        ->where("blacklist", true)
+        ->get();
 
         Redis::pipeline(function ($redis) use ($blacklistItems) {
             $redisKey = \App\Http\Controllers\AdgoalController::REDIS_BLACKLIST_KEY;
diff --git a/app/Console/Commands/LoadSpam.php b/metager/app/Console/Commands/LoadSpam.php
similarity index 92%
rename from app/Console/Commands/LoadSpam.php
rename to metager/app/Console/Commands/LoadSpam.php
index aae1869bfe25042e0f774d2481785a18b0944545..39ad9cf63841d2331c4a4fa25a82332fba1fee5e 100644
--- a/app/Console/Commands/LoadSpam.php
+++ b/metager/app/Console/Commands/LoadSpam.php
@@ -42,16 +42,20 @@ class LoadSpam extends Command
         // Redis might not be available now
         for ($count = 0; $count < 60; $count++) {
             try {
-                Redis::connection();
-                break;
+                $this->loadSpam();
+                return 0;
             } catch (\Exception $e) {
                 if ($count >= 59) {
                     // If its not available after 10 seconds we will exit
-                    return;
+                    return 1;
                 }
                 sleep(1);
             }
         }
+        
+    }
+
+    private function loadSpam() {
         $filePath = \storage_path('logs/metager/ban.txt');
         $bans = [];
         if (\file_exists($filePath)) {
diff --git a/app/Console/Commands/MonthlyRequestsGather.php b/metager/app/Console/Commands/MonthlyRequestsGather.php
similarity index 100%
rename from app/Console/Commands/MonthlyRequestsGather.php
rename to metager/app/Console/Commands/MonthlyRequestsGather.php
diff --git a/app/Console/Commands/RequestFetcher.php b/metager/app/Console/Commands/RequestFetcher.php
similarity index 96%
rename from app/Console/Commands/RequestFetcher.php
rename to metager/app/Console/Commands/RequestFetcher.php
index 076c401e2bf670eb1917e18f5d23bfa320c60287..2a91a9389eba8d0465136f377693a9834da45398 100644
--- a/app/Console/Commands/RequestFetcher.php
+++ b/metager/app/Console/Commands/RequestFetcher.php
@@ -62,11 +62,11 @@ class RequestFetcher extends Command
         // Redis might not be available now
         for ($count = 0; $count < 10; $count++) {
             try {
-                Redis::connection();
+                Redis::set(self::HEALTHCHECK_KEY, Carbon::now()->format(self::HEALTHCHECK_FORMAT));
                 break;
-            } catch (\Predis\Connection\ConnectionException $e) {
-                if ($count >= 9) {
-                    // If its not available after 10 seconds we will exit
+            } catch (\Exception $e) {
+                if ($count >= 60) {
+                    // If its not available after 60 seconds we will exit
                     return;
                 }
                 sleep(1);
diff --git a/app/Console/Commands/SaveUseragents.php b/metager/app/Console/Commands/SaveUseragents.php
similarity index 100%
rename from app/Console/Commands/SaveUseragents.php
rename to metager/app/Console/Commands/SaveUseragents.php
diff --git a/app/Console/Commands/StorePartnerCalls.php b/metager/app/Console/Commands/StorePartnerCalls.php
similarity index 100%
rename from app/Console/Commands/StorePartnerCalls.php
rename to metager/app/Console/Commands/StorePartnerCalls.php
diff --git a/app/Console/Commands/WaitDB.php b/metager/app/Console/Commands/WaitDB.php
similarity index 94%
rename from app/Console/Commands/WaitDB.php
rename to metager/app/Console/Commands/WaitDB.php
index 7d1d59fdc0375d2b85c13770b458fdc8d4034ed3..0d18a47b2c6f56e5910a70b399f612a7f2011627 100644
--- a/app/Console/Commands/WaitDB.php
+++ b/metager/app/Console/Commands/WaitDB.php
@@ -42,7 +42,7 @@ class WaitDB extends Command
 
         while (microtime(true) - $starttime < 60) {
             try {
-                $connection = DB::connection('mysql')->getPdo();
+                $connection = DB::getPdo();
                 $this->line("Connection to database successfull");
                 return 0;
             } catch (\Exception $e) {
diff --git a/app/Console/Kernel.php b/metager/app/Console/Kernel.php
similarity index 93%
rename from app/Console/Kernel.php
rename to metager/app/Console/Kernel.php
index 89451d14a5dffc466fa8569d81c2b8169ab02b12..0256954aa6232f74649f8f9adb77ebad7b41d39a 100644
--- a/app/Console/Kernel.php
+++ b/metager/app/Console/Kernel.php
@@ -2,7 +2,7 @@
 
 namespace App\Console;
 
-use DB;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Console\Scheduling\Schedule;
 use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
 
@@ -26,7 +26,7 @@ class Kernel extends ConsoleKernel
         $schedule->command('heartbeat')->everyMinute();
         $schedule->command('requests:gather')->everyFifteenMinutes();
         $schedule->command('requests:useragents')->everyFiveMinutes();
-        $schedule->command('logs:gather')->everyMinute();
+        // $schedule->command('logs:gather')->everyMinute();
         $schedule->command('spam:load')->everyMinute();
         $schedule->command('load:affiliate-blacklist')->everyMinute();
         $schedule->command('affilliates:store')->everyMinute()
diff --git a/app/DynamicEngineParameters.php b/metager/app/DynamicEngineParameters.php
similarity index 100%
rename from app/DynamicEngineParameters.php
rename to metager/app/DynamicEngineParameters.php
diff --git a/app/Exceptions/Handler.php b/metager/app/Exceptions/Handler.php
similarity index 100%
rename from app/Exceptions/Handler.php
rename to metager/app/Exceptions/Handler.php
diff --git a/app/Http/Controllers/AdgoalController.php b/metager/app/Http/Controllers/AdgoalController.php
similarity index 100%
rename from app/Http/Controllers/AdgoalController.php
rename to metager/app/Http/Controllers/AdgoalController.php
diff --git a/app/Http/Controllers/AdgoalTestController.php b/metager/app/Http/Controllers/AdgoalTestController.php
similarity index 100%
rename from app/Http/Controllers/AdgoalTestController.php
rename to metager/app/Http/Controllers/AdgoalTestController.php
diff --git a/app/Http/Controllers/AdminInterface.php b/metager/app/Http/Controllers/AdminInterface.php
similarity index 100%
rename from app/Http/Controllers/AdminInterface.php
rename to metager/app/Http/Controllers/AdminInterface.php
diff --git a/app/Http/Controllers/AdminSpamController.php b/metager/app/Http/Controllers/AdminSpamController.php
similarity index 100%
rename from app/Http/Controllers/AdminSpamController.php
rename to metager/app/Http/Controllers/AdminSpamController.php
diff --git a/app/Http/Controllers/Assoziator.php b/metager/app/Http/Controllers/Assoziator.php
similarity index 100%
rename from app/Http/Controllers/Assoziator.php
rename to metager/app/Http/Controllers/Assoziator.php
diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/metager/app/Http/Controllers/Auth/ForgotPasswordController.php
similarity index 100%
rename from app/Http/Controllers/Auth/ForgotPasswordController.php
rename to metager/app/Http/Controllers/Auth/ForgotPasswordController.php
diff --git a/app/Http/Controllers/Auth/LoginController.php b/metager/app/Http/Controllers/Auth/LoginController.php
similarity index 100%
rename from app/Http/Controllers/Auth/LoginController.php
rename to metager/app/Http/Controllers/Auth/LoginController.php
diff --git a/app/Http/Controllers/Auth/RegisterController.php b/metager/app/Http/Controllers/Auth/RegisterController.php
similarity index 100%
rename from app/Http/Controllers/Auth/RegisterController.php
rename to metager/app/Http/Controllers/Auth/RegisterController.php
diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/metager/app/Http/Controllers/Auth/ResetPasswordController.php
similarity index 100%
rename from app/Http/Controllers/Auth/ResetPasswordController.php
rename to metager/app/Http/Controllers/Auth/ResetPasswordController.php
diff --git a/app/Http/Controllers/Controller.php b/metager/app/Http/Controllers/Controller.php
similarity index 100%
rename from app/Http/Controllers/Controller.php
rename to metager/app/Http/Controllers/Controller.php
diff --git a/app/Http/Controllers/FokiLoader.php b/metager/app/Http/Controllers/FokiLoader.php
similarity index 100%
rename from app/Http/Controllers/FokiLoader.php
rename to metager/app/Http/Controllers/FokiLoader.php
diff --git a/app/Http/Controllers/HealthcheckController.php b/metager/app/Http/Controllers/HealthcheckController.php
similarity index 100%
rename from app/Http/Controllers/HealthcheckController.php
rename to metager/app/Http/Controllers/HealthcheckController.php
diff --git a/app/Http/Controllers/HumanVerification.php b/metager/app/Http/Controllers/HumanVerification.php
similarity index 100%
rename from app/Http/Controllers/HumanVerification.php
rename to metager/app/Http/Controllers/HumanVerification.php
diff --git a/app/Http/Controllers/KeyController.php b/metager/app/Http/Controllers/KeyController.php
similarity index 100%
rename from app/Http/Controllers/KeyController.php
rename to metager/app/Http/Controllers/KeyController.php
diff --git a/app/Http/Controllers/LanguageController.php b/metager/app/Http/Controllers/LanguageController.php
similarity index 100%
rename from app/Http/Controllers/LanguageController.php
rename to metager/app/Http/Controllers/LanguageController.php
diff --git a/app/Http/Controllers/MailController.php b/metager/app/Http/Controllers/MailController.php
similarity index 100%
rename from app/Http/Controllers/MailController.php
rename to metager/app/Http/Controllers/MailController.php
diff --git a/app/Http/Controllers/MetaGerSearch.php b/metager/app/Http/Controllers/MetaGerSearch.php
similarity index 97%
rename from app/Http/Controllers/MetaGerSearch.php
rename to metager/app/Http/Controllers/MetaGerSearch.php
index c2db39cd2c8eb53161d598ef9f873c92232fbf3f..4895b3b8a37c3d8d845d60af1ac0961b805ef8a5 100644
--- a/app/Http/Controllers/MetaGerSearch.php
+++ b/metager/app/Http/Controllers/MetaGerSearch.php
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use App;
 use App\MetaGer;
+use App\PrometheusExporter;
 use Cache;
 use Illuminate\Http\Request;
 use LaravelLocalization;
@@ -14,6 +15,12 @@ class MetaGerSearch extends Controller
 {
     public function search(Request $request, MetaGer $metager, $timing = false)
     {
+        $locale = LaravelLocalization::getCurrentLocale();
+        $preferredLanguage = array($request->getPreferredLanguage());
+        if (!empty($preferredLanguage) && !empty($locale)) {
+            PrometheusExporter::PreferredLanguage($locale, $preferredLanguage);
+        }
+
         if ($request->filled("chrome-plugin")) {
             return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "/plugin"));
         }
diff --git a/app/Http/Controllers/Pictureproxy.php b/metager/app/Http/Controllers/Pictureproxy.php
similarity index 100%
rename from app/Http/Controllers/Pictureproxy.php
rename to metager/app/Http/Controllers/Pictureproxy.php
diff --git a/metager/app/Http/Controllers/SearchEngineList.php b/metager/app/Http/Controllers/SearchEngineList.php
new file mode 100644
index 0000000000000000000000000000000000000000..5a67a5afd3f7eb59ca06ea3b7a242a6eff3724ab
--- /dev/null
+++ b/metager/app/Http/Controllers/SearchEngineList.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\App;
+
+class SearchEngineList extends Controller
+{
+    function index()
+    {
+        $suma_file = "";
+        if (App::isLocale("en")) {
+            $suma_file = config_path() . "/sumasEn.json";
+        } else {
+            $suma_file = config_path() . "/sumas.json";
+        }
+        if (empty($suma_file)) {
+            abort(404);
+        }
+        $suma_file = json_decode(file_get_contents($suma_file));
+        if ($suma_file === null) {
+            abort(404);
+        }
+        $sumas = [];
+        foreach ($suma_file->foki as $fokus_name => $fokus) {
+            foreach ($fokus->sumas as $suma_name) {
+                $sumas[$fokus_name][] = $suma_name;
+            }
+        }
+        $suma_infos = [];
+        foreach ($sumas as $fokus_name => $suma_list) {
+            foreach ($suma_list as $index => $suma_name) {
+                if (!$suma_file->sumas->{$suma_name}->disabled) {
+                    $infos = $suma_file->sumas->{$suma_name}->infos;
+                    $suma_infos[$fokus_name][$suma_name] = clone $infos;
+                }
+            }
+        }
+        return view('search-engine')
+            ->with('title', trans('titles.search-engine'))
+            ->with('navbarFocus', 'info')
+            ->with('suma_infos', $suma_infos);
+    }
+}
diff --git a/app/Http/Controllers/SettingsController.php b/metager/app/Http/Controllers/SettingsController.php
similarity index 84%
rename from app/Http/Controllers/SettingsController.php
rename to metager/app/Http/Controllers/SettingsController.php
index 374209010d2e36156db9d915a870923c1a7f7744..0befea2b40cef3cde08c0e342cc9e8867d3e161f 100644
--- a/app/Http/Controllers/SettingsController.php
+++ b/metager/app/Http/Controllers/SettingsController.php
@@ -24,6 +24,9 @@ class SettingsController extends Controller
         $langFile = json_decode(file_get_contents($langFile));
 
         $sumas = $this->getSumas($fokus);
+        if (sizeof($sumas) === 0) {
+            abort(404);
+        }
 
         # Parse the Parameter Filter
         $filters = [];
@@ -64,11 +67,16 @@ class SettingsController extends Controller
         # Reading cookies for black list entries
         $blacklist = [];
         foreach ($cookies as $key => $value) {
-            if (stripos($key, 'blpage') !== false && stripos($key, $fokus) !== false) {
-                $blacklist[$key] = $value;
+            if (preg_match('/_blpage[0-9]+$/', $key) === 1 && stripos($key, $fokus) !== false) {
+                $blacklist[] = $value;
+            } elseif (preg_match('/_blpage$/', $key) === 1 && stripos($key, $fokus) !== false) {
+                $blacklist = array_merge($blacklist, explode(",", $value));
             }
         }
 
+        $blacklist = array_unique($blacklist);
+        sort($blacklist);
+
         # Generating link with set cookies
         $cookieLink = LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route('loadSettings', $cookies));
 
@@ -90,15 +98,21 @@ class SettingsController extends Controller
         $langFile = MetaGer::getLanguageFile();
         $langFile = json_decode(file_get_contents($langFile));
 
+        if (empty($langFile->foki->{$fokus})) {
+            // Fokus does not exist in this suma file
+            return [];
+        }
+
         $sumasFoki = $langFile->foki->{$fokus}->sumas;
 
         $sumas = [];
         foreach ($sumasFoki as $suma) {
             if ((!empty($langFile->sumas->{$suma}->disabled) && $langFile->sumas->{$suma}->disabled) ||
-                (!empty($langFile->sumas->{$suma}->{"auto-disabled"}) && $langFile->sumas->{$suma}->{"auto-disabled"})) {
+                (!empty($langFile->sumas->{$suma}->{"auto-disabled"}) && $langFile->sumas->{$suma}->{"auto-disabled"})
+            ) {
                 continue;
             }
-            $sumas[$suma]["display-name"] = $langFile->sumas->{$suma}->{"display-name"};
+            $sumas[$suma]["display-name"] = $langFile->sumas->{$suma}->infos->display_name;
             $sumas[$suma]["filtered"] = false;
             if (Cookie::get($fokus . "_engine_" . $suma) === "off") {
                 $sumas[$suma]["enabled"] = false;
@@ -329,42 +343,55 @@ class SettingsController extends Controller
         $fokus = $request->input('fokus', '');
         $url = $request->input('url', '');
 
-        $regexProtocol = '#^([a-z]{0,5}://)?(www.)?#';
-        $blacklist = preg_filter($regexProtocol, '', $request->input('blacklist'));
+        $blacklist = $request->input('blacklist');
+        $blacklist = substr($blacklist, 0, 2048);
 
-        if (stripos($blacklist, '/') !== false) {
-            $blacklist = substr($blacklist, 0, stripos($blacklist, '/'));
-        }
+        // Split the blacklist by all sorts of newlines
+        $blacklist = preg_split('/\r\n|[\r\n]/', $blacklist);
 
-        $regexUrl = '#^(\*\.)?[a-z0-9]+(\.[a-z0-9]+)?(\.[a-z0-9]{2,})$#';
-        if (preg_match($regexUrl, $blacklist) === 1) {
-            $path = \Request::path();
-            $cookiePath = "/" . substr($path, 0, strpos($path, "meta/") + 5);
-            $cookies = Cookie::get();
-            $cookieCounter = 0;
-            $noduplicate = true;
-
-            ksort($cookies);
-
-            if (!empty($cookies)) {
-                foreach ($cookies as $key => $value) {
-                    if (stripos($key, $fokus . '_blpage') === 0) {
-                        if ($value === $blacklist) {
-                            $noduplicate = false;
-                            break;
-                        }
-                        if ((int)(substr($key, strlen($fokus . '_blpage'))) === $cookieCounter) {
-                            $cookieCounter++;
-                        }
-                    }
-                }
+        $valid_blacklist_entries = [];
+
+        foreach ($blacklist as $blacklist_entry) {
+            $regexProtocol = '#^([a-z]{0,5}://)?(www.)?#';
+            $blacklist_entry = preg_filter($regexProtocol, '', $blacklist_entry);
+
+            # Allow Only Domains without path
+            if (stripos($blacklist_entry, '/') !== false) {
+                $blacklist_entry = substr($blacklist_entry, 0, stripos($blacklist_entry, '/'));
             }
-            if ($noduplicate && !empty($blacklist) > 0 && strlen($blacklist) <= 255) {
-                $cookieName= $fokus.'_blpage'.$cookieCounter;
-                Cookie::queue($cookieName, $blacklist, 525600, $cookiePath, null, false, false);
+
+            #fixme: this doesn't match all valid URLs
+            $regexUrl = '#^(\*\.)?[a-z0-9-]+(\.[a-z0-9]+)?(\.[a-z0-9]{2,})$#';
+
+            if (preg_match($regexUrl, $blacklist_entry) === 1) {
+                $valid_blacklist_entries[] = $blacklist_entry;
             }
         }
-        return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route('settings', ["fokus" => $fokus, "url" => $url])));
+
+        # Check if any setting is active
+        $cookies = Cookie::get();
+
+        # Remove all cookies from the old method where they got stored
+        # in multiple Cookies.
+        # The old cookies are in the request currently send so just delete the old cookie
+        foreach ($cookies as $key => $value) {
+            if (preg_match('/_blpage[0-9]+$/', $key) === 1 && stripos($key, $fokus) !== false) {
+                $path = \Request::path();
+                $cookiePath = "/" . substr($path, 0, strpos($path, "meta/") + 5);
+                Cookie::queue($key, "", 0, $cookiePath, null, false, false);
+            }
+        }
+
+        $valid_blacklist_entries = array_unique($valid_blacklist_entries);
+        sort($valid_blacklist_entries);
+
+
+        $path = \Request::path();
+        $cookiePath = "/" . substr($path, 0, strpos($path, "meta/") + 5);
+        $cookieName = $fokus . '_blpage';
+        Cookie::queue($cookieName, implode(",", $valid_blacklist_entries), 525600, $cookiePath, null, false, false);
+
+        return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route('settings', ["fokus" => $fokus, "url" => $url])) . "#bl");
     }
 
     public function deleteBlacklist(Request $request)
@@ -377,7 +404,7 @@ class SettingsController extends Controller
 
         Cookie::queue($cookieKey, "", 0, $cookiePath, null, false, false);
 
-        return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route('settings', ["fokus" => $fokus, "url" => $url])));
+        return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route('settings', ["fokus" => $fokus, "url" => $url])) . "#bl");
     }
 
     public function clearBlacklist(Request $request)
@@ -389,7 +416,7 @@ class SettingsController extends Controller
         $empty = $request->input('empty');
         $cookiePath = "/" . substr($path, 0, strpos($path, "meta/") + 5);
         $cookies = Cookie::get();
-        
+
         foreach ($cookies as $key => $value) {
             if (stripos($key, $fokus . '_blpage') === 0) {
                 Cookie::queue($key, "", 0, $cookiePath, null, false, false);
@@ -426,10 +453,10 @@ class SettingsController extends Controller
                 foreach ($langFile->foki as $fokus => $fokusInfo) {
                     if (strpos($key, $fokus . '_blpage') === 0 && preg_match($regexUrl, $value) === 1) {
                         Cookie::queue($key, $value, 525600, $cookiePath, null, false, false);
-                    } elseif (strpos($key, $fokus.'_setting_') === 0) {
+                    } elseif (strpos($key, $fokus . '_setting_') === 0) {
                         foreach ($langFile->filter->{'parameter-filter'} as $parameter) {
                             foreach ($parameter->values as $p => $v) {
-                                if ($key === $fokus.'_setting_' . $parameter->{'get-parameter'} && $value === $p) {
+                                if ($key === $fokus . '_setting_' . $parameter->{'get-parameter'} && $value === $p) {
                                     Cookie::queue($key, $value, 525600, $cookiePath, null, false, false);
                                 }
                             }
@@ -447,4 +474,8 @@ class SettingsController extends Controller
         }
         return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), url('/')));
     }
+
+    private function loadBlacklist(Request $request)
+    {
+    }
 }
diff --git a/app/Http/Controllers/SitesearchController.php b/metager/app/Http/Controllers/SitesearchController.php
similarity index 100%
rename from app/Http/Controllers/SitesearchController.php
rename to metager/app/Http/Controllers/SitesearchController.php
diff --git a/app/Http/Controllers/StartpageController.php b/metager/app/Http/Controllers/StartpageController.php
similarity index 100%
rename from app/Http/Controllers/StartpageController.php
rename to metager/app/Http/Controllers/StartpageController.php
diff --git a/app/Http/Controllers/Stresstest.php b/metager/app/Http/Controllers/Stresstest.php
similarity index 100%
rename from app/Http/Controllers/Stresstest.php
rename to metager/app/Http/Controllers/Stresstest.php
diff --git a/app/Http/Controllers/ZitatController.php b/metager/app/Http/Controllers/ZitatController.php
similarity index 100%
rename from app/Http/Controllers/ZitatController.php
rename to metager/app/Http/Controllers/ZitatController.php
diff --git a/app/Http/Kernel.php b/metager/app/Http/Kernel.php
similarity index 100%
rename from app/Http/Kernel.php
rename to metager/app/Http/Kernel.php
diff --git a/app/Http/Middleware/BrowserVerification.php b/metager/app/Http/Middleware/BrowserVerification.php
similarity index 100%
rename from app/Http/Middleware/BrowserVerification.php
rename to metager/app/Http/Middleware/BrowserVerification.php
diff --git a/app/Http/Middleware/EncryptCookies.php b/metager/app/Http/Middleware/EncryptCookies.php
similarity index 100%
rename from app/Http/Middleware/EncryptCookies.php
rename to metager/app/Http/Middleware/EncryptCookies.php
diff --git a/app/Http/Middleware/HumanVerification.php b/metager/app/Http/Middleware/HumanVerification.php
similarity index 100%
rename from app/Http/Middleware/HumanVerification.php
rename to metager/app/Http/Middleware/HumanVerification.php
diff --git a/app/Http/Middleware/LocalizationRedirect.php b/metager/app/Http/Middleware/LocalizationRedirect.php
similarity index 100%
rename from app/Http/Middleware/LocalizationRedirect.php
rename to metager/app/Http/Middleware/LocalizationRedirect.php
diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/metager/app/Http/Middleware/RedirectIfAuthenticated.php
similarity index 100%
rename from app/Http/Middleware/RedirectIfAuthenticated.php
rename to metager/app/Http/Middleware/RedirectIfAuthenticated.php
diff --git a/app/Http/Middleware/RemoveKey.php b/metager/app/Http/Middleware/RemoveKey.php
similarity index 100%
rename from app/Http/Middleware/RemoveKey.php
rename to metager/app/Http/Middleware/RemoveKey.php
diff --git a/app/Http/Middleware/UserAgentMaster.php b/metager/app/Http/Middleware/UserAgentMaster.php
similarity index 100%
rename from app/Http/Middleware/UserAgentMaster.php
rename to metager/app/Http/Middleware/UserAgentMaster.php
diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/metager/app/Http/Middleware/VerifyCsrfToken.php
similarity index 100%
rename from app/Http/Middleware/VerifyCsrfToken.php
rename to metager/app/Http/Middleware/VerifyCsrfToken.php
diff --git a/app/Jobs/ConvertCountFile.php b/metager/app/Jobs/ConvertCountFile.php
similarity index 100%
rename from app/Jobs/ConvertCountFile.php
rename to metager/app/Jobs/ConvertCountFile.php
diff --git a/app/Listeners/LogFailedAuthenticationAttempt.php b/metager/app/Listeners/LogFailedAuthenticationAttempt.php
similarity index 100%
rename from app/Listeners/LogFailedAuthenticationAttempt.php
rename to metager/app/Listeners/LogFailedAuthenticationAttempt.php
diff --git a/app/Mail/Sprachdatei.php b/metager/app/Mail/Sprachdatei.php
similarity index 100%
rename from app/Mail/Sprachdatei.php
rename to metager/app/Mail/Sprachdatei.php
diff --git a/app/MetaGer.php b/metager/app/MetaGer.php
similarity index 97%
rename from app/MetaGer.php
rename to metager/app/MetaGer.php
index 0e31d06f74b30f08a7bd0e7aa929e5418ceb4af5..ce9a3ddec32f1bc736f584207ecbd1d00bbbbb5c 100644
--- a/app/MetaGer.php
+++ b/metager/app/MetaGer.php
@@ -465,7 +465,7 @@ class MetaGer
          * If there are no other advertisements we will only display our advertisements 
          * every so often. ~33% in this case
          */
-        if (/*sizeof($this->ads) === 0 &&*/ rand(1, 100) >= 5) {
+        if (/*sizeof($this->ads) === 0 &&*/rand(1, 100) >= 5) {
             return;
         }
 
@@ -733,8 +733,8 @@ class MetaGer
 
             # Prüfe ob Parser vorhanden
             if (!file_exists(app_path() . "/Models/parserSkripte/" . $engine->{"parser-class"} . ".php")) {
-                Log::error("Konnte " . $engine->{"display-name"} . " nicht abfragen, da kein Parser existiert");
-                $this->errors[] = trans('metaGer.engines.noParser', ['engine' => $engine->{"display-name"}]);
+                Log::error("Konnte " . $engine->infos->display_name . " nicht abfragen, da kein Parser existiert");
+                $this->errors[] = trans('metaGer.engines.noParser', ['engine' => $engine->infos->display_name]);
                 continue;
             }
 
@@ -743,7 +743,7 @@ class MetaGer
             try {
                 $tmp = new $path($engineName, $engine, $this);
             } catch (\ErrorException $e) {
-                Log::error("Konnte " . $engine->{"display-name"} . " nicht abfragen. " . $e);
+                Log::error("Konnte " . $engine->infos->display_name . " nicht abfragen. " . $e);
                 continue;
             }
 
@@ -1333,22 +1333,21 @@ class MetaGer
                 $this->hostBlacklist[] = $blacklistString;
             }
         }
-        foreach (Cookie::get() as $key => $value) {
-            if ((stripos($key, $this->fokus . '_blpage') === 0) && (stripos($value, '*.') === false)) {
-                $this->hostBlacklist[] = $value;
-            }
-        }
 
         $this->hostBlacklist = array_unique($this->hostBlacklist);
 
         // print the host blacklist as a user warning
         if (sizeof($this->hostBlacklist) > 0) {
-            $hostString = "";
-            foreach ($this->hostBlacklist as $host) {
-                $hostString .= $host . ", ";
+            if (sizeof($this->hostBlacklist) <= 3) {
+                $hostString = "";
+                foreach ($this->hostBlacklist as $host) {
+                    $hostString .= $host . ", ";
+                }
+                $hostString = rtrim($hostString, ", ");
+                $this->warnings[] = trans('metaGer.formdata.hostBlacklist', ['host' => $hostString]);
+            } else {
+                $this->warnings[] = trans('metaGer.formdata.hostBlacklistCount', ['count' => sizeof($this->hostBlacklist)]);
             }
-            $hostString = rtrim($hostString, ", ");
-            $this->warnings[] = trans('metaGer.formdata.hostBlacklist', ['host' => $hostString]);
         }
     }
 
@@ -1376,8 +1375,17 @@ class MetaGer
             }
         }
         foreach (Cookie::get() as $key => $value) {
-            if (stripos($key, $this->fokus . '_blpage') === 0 && stripos($value, '*.') === 0) {
-                $this->domainBlacklist[] = str_replace("*.", "", $value);
+            $regexUrl = '#^(\*\.)?[a-z0-9-]+(\.[a-z0-9]+)?(\.[a-z0-9]{2,})$#';
+            if (preg_match('/_blpage[0-9]+$/', $key) === 1 && stripos($key, $this->fokus) !== false && preg_match($regexUrl, $value) === 1) {
+                $this->domainBlacklist[] = substr($value, 0, 255);
+            } elseif (preg_match('/_blpage$/', $key) === 1 && stripos($key, $this->fokus) !== false) {
+                $blacklistItems = explode(",", $value);
+                foreach ($blacklistItems as $blacklistItem) {
+
+                    if (preg_match($regexUrl, $blacklistItem) === 1) {
+                        $this->domainBlacklist[] = substr($blacklistItem, 0, 255);
+                    }
+                }
             }
         }
 
@@ -1385,12 +1393,16 @@ class MetaGer
 
         // print the domain blacklist as a user warning
         if (sizeof($this->domainBlacklist) > 0) {
-            $domainString = "";
-            foreach ($this->domainBlacklist as $domain) {
-                $domainString .= $domain . ", ";
+            if (sizeof($this->domainBlacklist) <= 3) {
+                $domainString = "";
+                foreach ($this->domainBlacklist as $domain) {
+                    $domainString .= $domain . ", ";
+                }
+                $domainString = rtrim($domainString, ", ");
+                $this->warnings[] = trans('metaGer.formdata.domainBlacklist', ['domain' => $domainString]);
+            } else {
+                $this->warnings[] = trans('metaGer.formdata.domainBlacklistCount', ['count' => sizeof($this->domainBlacklist)]);
             }
-            $domainString = rtrim($domainString, ", ");
-            $this->warnings[] = trans('metaGer.formdata.domainBlacklist', ['domain' => $domainString]);
         }
     }
 
diff --git a/app/Models/Adgoal.php b/metager/app/Models/Adgoal.php
similarity index 100%
rename from app/Models/Adgoal.php
rename to metager/app/Models/Adgoal.php
diff --git a/app/Models/Admitad.php b/metager/app/Models/Admitad.php
similarity index 100%
rename from app/Models/Admitad.php
rename to metager/app/Models/Admitad.php
diff --git a/app/Models/Key.php b/metager/app/Models/Key.php
similarity index 100%
rename from app/Models/Key.php
rename to metager/app/Models/Key.php
diff --git a/app/Models/LanguageObject.php b/metager/app/Models/LanguageObject.php
similarity index 100%
rename from app/Models/LanguageObject.php
rename to metager/app/Models/LanguageObject.php
diff --git a/app/Models/Quicktips/Quicktip.php b/metager/app/Models/Quicktips/Quicktip.php
similarity index 100%
rename from app/Models/Quicktips/Quicktip.php
rename to metager/app/Models/Quicktips/Quicktip.php
diff --git a/app/Models/Quicktips/Quicktip_detail.php b/metager/app/Models/Quicktips/Quicktip_detail.php
similarity index 100%
rename from app/Models/Quicktips/Quicktip_detail.php
rename to metager/app/Models/Quicktips/Quicktip_detail.php
diff --git a/app/Models/Quicktips/Quicktips.php b/metager/app/Models/Quicktips/Quicktips.php
similarity index 100%
rename from app/Models/Quicktips/Quicktips.php
rename to metager/app/Models/Quicktips/Quicktips.php
diff --git a/app/Models/Result.php b/metager/app/Models/Result.php
similarity index 94%
rename from app/Models/Result.php
rename to metager/app/Models/Result.php
index 5618220cffcddfdab0f782afaf7afb0e58a652df..f142e7273028a7022f9d16d968b2c6345a65ba7c 100644
--- a/app/Models/Result.php
+++ b/metager/app/Models/Result.php
@@ -2,7 +2,6 @@
 
 namespace App\Models;
 
-
 /* Die Klasse Result sammelt alle Informationen über ein einzelnes Suchergebnis.
  *  Die Results werden von den Suchmaschinenspezifischen Parser-Skripten erstellt.
  */
@@ -121,47 +120,9 @@ class Result
             $rank *= floatval($this->engineBoost);
         }
 
-        # Runter Ranken von Yandex Ergebnissen mit zu viel kyrillischen Texten
-        if (stripos($this->gefVon[0], "yandex") !== false) {
-            $rank -= $this->calcYandexBoost($eingabe);
-        }
-
         $this->rank = $rank;
     }
 
-    # Berechnet, ob dieses Suchergebnis einen Malus erhalten soll, oder nicht
-    # Übergeben werden alle Yandex Ergebnisse
-    # Wenn die Suchworte kein kyrillisches Zeichen enthalten, wird das Ergebnis schlechter bewertet,
-    # falls es selbst zu viele kyrillische Zeichen enthält
-    private function calcYandexBoost($tmpEingabe)
-    {
-        $maxRatio = 0.1; # Gibt den Prozentsatz von Kyrillischen Zeichen in Titel und Beschreibung an, ab dem das Ergebnis runter gerankt werden soll
-        if (preg_match('/[А-Яа-яЁё]/u', $tmpEingabe) === 1) {
-            # Das Suchwort enthält kyrillische Zeichen, also dürfen es auch die Ergebnisse
-            return 0;
-        } else {
-            # Wir überprüfen das Verhältnis von Kyrillischen Zeichen im Titel
-            if (preg_match_all('/[А-Яа-яЁё]/u', $this->titel, $matches)) {
-                $count = sizeof($matches[0]);
-                $titleSize = strlen($this->titel);
-                $percKyr = $count / $titleSize;
-                if ($percKyr > $maxRatio) {
-                    return 5;
-                }
-            }
-            # Wir überprüfen das Verhältnis von Kyrillischen Zeichen in der Beschreibung
-            if (preg_match_all('/[А-Яа-яЁё]/u', $this->descr, $matches)) {
-                $count = sizeof($matches[0]);
-                $descrSize = strlen($this->descr);
-                $percKyr = $count / $descrSize;
-                if ($percKyr > $maxRatio) {
-                    return 5;
-                }
-            }
-        }
-        return 0;
-    }
-
     # Berechnet den Ranking-Boost durch ??? URL
     public function calcURLBoost($tmpEingabe)
     {
diff --git a/app/Models/Searchengine.php b/metager/app/Models/Searchengine.php
similarity index 98%
rename from app/Models/Searchengine.php
rename to metager/app/Models/Searchengine.php
index 41203ab722dccb608dc9cfb54a398fcea7b45fdc..31371721b8eb20f6b42e5bbb89a3eda75b54b002 100644
--- a/app/Models/Searchengine.php
+++ b/metager/app/Models/Searchengine.php
@@ -8,6 +8,7 @@ use Illuminate\Support\Facades\Redis;
 abstract class Searchengine
 {
     public $getString = ""; # Der String für die Get-Anfrage
+    public $query = ""; # The search query
     public $engine; # Die ursprüngliche Engine XML
     public $totalResults = 0; # How many Results the Searchengine has found
     public $results = []; # Die geladenen Ergebnisse
@@ -70,7 +71,7 @@ abstract class Searchengine
         }
 
         # Suchstring generieren
-        $q = $metager->getQ();
+        $this->query = $metager->getQ();
         $filters = $metager->getSumaFile()->filter;
         foreach ($metager->getQueryFilter() as $queryFilter => $filter) {
             $filterOptions = $filters->{"query-filter"}->$queryFilter;
@@ -79,7 +80,7 @@ abstract class Searchengine
             }
             $filterOptionsEngine = $filterOptions->sumas->{$this->name};
             $query = $filterOptionsEngine->prefix . $filter . $filterOptionsEngine->suffix;
-            $q = $query . " " . $q;
+            $this->query = $query . " " . $this->query;
         }
 
         $tmpPara = false;
@@ -100,7 +101,7 @@ abstract class Searchengine
             $this->engine->{"get-parameter"}->{$engineParameterKey} = $engineParameterValue;
         }
 
-        $this->getString = $this->generateGetString($q);
+        $this->getString = $this->generateGetString($this->query);
         $this->updateHash();
         $this->canCache = $metager->canCache();
     }
@@ -205,7 +206,7 @@ abstract class Searchengine
                 return $body;
             }
         }
-        
+
         if ($body === "no-result") {
             $body = "";
         }
diff --git a/app/Models/XmlSearchengine.php b/metager/app/Models/XmlSearchengine.php
similarity index 100%
rename from app/Models/XmlSearchengine.php
rename to metager/app/Models/XmlSearchengine.php
diff --git a/app/Models/parserSkripte/Allesklar.php b/metager/app/Models/parserSkripte/Allesklar.php
similarity index 94%
rename from app/Models/parserSkripte/Allesklar.php
rename to metager/app/Models/parserSkripte/Allesklar.php
index 7fe67260aa3d5897dbf49930b4f405b45be91a87..459c40c0e1afe098e8f19ab6301fd51045f53069 100644
--- a/app/Models/parserSkripte/Allesklar.php
+++ b/metager/app/Models/parserSkripte/Allesklar.php
@@ -43,7 +43,8 @@ class Allesklar extends Searchengine
                         $link,
                         $link,
                         $descr,
-                        $this->engine->{"display-name"},$this->engine->homepage,
+                        $this->engine->infos->display_name,
+                        $this->engine->infos->homepage,
                         $this->counter
                     );
                 } catch (\Exception $e) {
@@ -54,5 +55,4 @@ class Allesklar extends Searchengine
             }
         });
     }
-
 }
diff --git a/app/Models/parserSkripte/BASE.php b/metager/app/Models/parserSkripte/BASE.php
similarity index 94%
rename from app/Models/parserSkripte/BASE.php
rename to metager/app/Models/parserSkripte/BASE.php
index c47dee3d8b3ce6bb5b744a6ad49e27b1f6373e26..7d19a44d44911795851adc7ed598548ee13d6cd2 100644
--- a/app/Models/parserSkripte/BASE.php
+++ b/metager/app/Models/parserSkripte/BASE.php
@@ -49,7 +49,8 @@ class BASE extends Searchengine
                         $link,
                         $anzeigeLink,
                         $descr,
-                        $this->engine->{"display-name"}, $this->engine->homepage,
+                        $this->engine->infos->display_name,
+                        $this->engine->infos->homepage,
                         $this->counter
                     );
                 }
diff --git a/app/Models/parserSkripte/Beammachine.php b/metager/app/Models/parserSkripte/Beammachine.php
similarity index 90%
rename from app/Models/parserSkripte/Beammachine.php
rename to metager/app/Models/parserSkripte/Beammachine.php
index 07eedcac904e029f368a79177445b40b86e46174..ea832df9e8a3288d7b4f79e27c13b2caf09f6b7a 100644
--- a/app/Models/parserSkripte/Beammachine.php
+++ b/metager/app/Models/parserSkripte/Beammachine.php
@@ -34,10 +34,10 @@ class Beammachine extends Searchengine
                 $link,
                 $anzeigeLink,
                 $descr,
-                $this->engine->{"display-name"},$this->engine->homepage,
+                $this->engine->infos->display_name,
+                $this->engine->infos->homepage,
                 $this->counter
             );
         }
-
     }
 }
diff --git a/app/Models/parserSkripte/Bing.php b/metager/app/Models/parserSkripte/Bing.php
similarity index 72%
rename from app/Models/parserSkripte/Bing.php
rename to metager/app/Models/parserSkripte/Bing.php
index ba894665af1f07b6fcb38ea2c4552e19b2dc3db6..b6b5d031aadd1a5b96dd32d1d4fa3b4039cfd762 100644
--- a/app/Models/parserSkripte/Bing.php
+++ b/metager/app/Models/parserSkripte/Bing.php
@@ -14,13 +14,17 @@ class Bing extends Searchengine
     {
         parent::__construct($name, $engine, $metager);
 
-        if(LaravelLocalization::getCurrentLocale() === 'en'){
+        if (LaravelLocalization::getCurrentLocale() === 'en') {
             $langFile = $metager->getLanguageFile();
             $langFile = json_decode(file_get_contents($langFile));
-            $acceptLanguage = $metager->request->headers->all()['accept-language'][0];
-            foreach($langFile->filter->{'parameter-filter'}->language->sumas->bing->values as $key => $value){
-                if(stripos($acceptLanguage, "en") === 0 && stripos($acceptLanguage, $value) === 0)
-                $this->engine->{"get-parameter"}->mkt =  $value;
+            $acceptLanguage = $metager->request->headers->all();
+            if (!empty($acceptLanguage["accept-language"]) && is_array($acceptLanguage["accept-language"]) && sizeof($acceptLanguage["accept-language"]) > 0) {
+                $acceptLanguage = $acceptLanguage['accept-language'][0];
+                foreach ($langFile->filter->{'parameter-filter'}->language->sumas->bing->values as $key => $value) {
+                    if (stripos($acceptLanguage, "en") === 0 && stripos($acceptLanguage, $value) === 0) {
+                        $this->engine->{"get-parameter"}->mkt =  $value;
+                    }
+                }
             }
         }
     }
@@ -29,7 +33,9 @@ class Bing extends Searchengine
     {
         try {
             $results = json_decode($result);
-            $this->totalResults = $results->webPages->totalEstimatedMatches;
+            if (!empty($results->webPages->totalEstimatedMatches)) {
+                $this->totalResults = $results->webPages->totalEstimatedMatches;
+            }
 
             # Check if the query got altered
             if (!empty($results->{"queryContext"}) && !empty($results->{"queryContext"}->{"alteredQuery"}) && !empty($results->{"queryContext"}->{"alterationOverrideQuery"})) {
@@ -51,13 +57,12 @@ class Bing extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
                     []
                 );
-
             }
-
         } catch (\Exception $e) {
             Log::error("A problem occurred parsing results from $this->name:");
             Log::error($e->getMessage());
@@ -70,6 +75,9 @@ class Bing extends Searchengine
         try {
             $results = json_decode($result);
 
+            if (empty($results->webPages->totalEstimatedMatches)) {
+                return;
+            }
             $totalMatches = $results->webPages->totalEstimatedMatches;
 
             $newEngine = unserialize(serialize($this->engine));
@@ -91,12 +99,10 @@ class Bing extends Searchengine
 
             $next = new Bing($this->name, $newEngine, $metager);
             $this->next = $next;
-
         } catch (\Exception $e) {
             Log::error("A problem occurred parsing results from $this->name:");
             Log::error($e->getMessage());
             return;
         }
-
     }
 }
diff --git a/app/Models/parserSkripte/BingBilder.php b/metager/app/Models/parserSkripte/BingBilder.php
similarity index 88%
rename from app/Models/parserSkripte/BingBilder.php
rename to metager/app/Models/parserSkripte/BingBilder.php
index 97d26a7d5e23e859dc41ed25b4a03c184cf58871..1ac9fe64fc47a4558cb136dc32a8738f43ea20a9 100644
--- a/app/Models/parserSkripte/BingBilder.php
+++ b/metager/app/Models/parserSkripte/BingBilder.php
@@ -18,7 +18,9 @@ class BingBilder extends Searchengine
     {
         try {
             $results = json_decode($result);
-            $this->totalResults = $results->totalEstimatedMatches;
+            if (!empty($results->totalEstimatedMatches)) {
+                $this->totalResults = $results->totalEstimatedMatches;
+            }
             $results = $results->value;
 
             foreach ($results as $result) {
@@ -34,8 +36,8 @@ class BingBilder extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"},
-                    $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
                     [
                         'image' => $image,
@@ -58,6 +60,9 @@ class BingBilder extends Searchengine
         try {
             $results = json_decode($result);
 
+            if (empty($results->totalEstimatedMatches)) {
+                return;
+            }
             $totalMatches = $results->totalEstimatedMatches;
             $nextOffset = $results->nextOffset;
 
diff --git a/app/Models/parserSkripte/Blogsearch.php b/metager/app/Models/parserSkripte/Blogsearch.php
similarity index 92%
rename from app/Models/parserSkripte/Blogsearch.php
rename to metager/app/Models/parserSkripte/Blogsearch.php
index 83689ffcd439ffac4c9482b9b1c8ad4b48e7cedf..bcccc3e6b159c4691add7839f10b1b39a7c0c86f 100644
--- a/app/Models/parserSkripte/Blogsearch.php
+++ b/metager/app/Models/parserSkripte/Blogsearch.php
@@ -36,7 +36,8 @@ class Blogsearch extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter
                 );
             }
diff --git a/app/Models/parserSkripte/Dailymotion.php b/metager/app/Models/parserSkripte/Dailymotion.php
similarity index 92%
rename from app/Models/parserSkripte/Dailymotion.php
rename to metager/app/Models/parserSkripte/Dailymotion.php
index 58876c2db8e629186144edf4336be3df74455039..7158aa5b47a93a05e74044b2eb95004cacfee9ab 100644
--- a/app/Models/parserSkripte/Dailymotion.php
+++ b/metager/app/Models/parserSkripte/Dailymotion.php
@@ -37,7 +37,8 @@ class Dailymotion extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"},$this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
                     ['partnershop' => false]
                 );
diff --git a/app/Models/parserSkripte/Dart.php b/metager/app/Models/parserSkripte/Dart.php
similarity index 94%
rename from app/Models/parserSkripte/Dart.php
rename to metager/app/Models/parserSkripte/Dart.php
index 49ef4e80b19f2e28108a293629a79c15c1df1b50..deee3c51c3f99f636d634c89ab7fc2f21f4fd70b 100644
--- a/app/Models/parserSkripte/Dart.php
+++ b/metager/app/Models/parserSkripte/Dart.php
@@ -57,11 +57,11 @@ class Dart extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"},$this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter
                 );
             }
         });
-
     }
 }
diff --git a/app/Models/parserSkripte/Dmoznebel.php b/metager/app/Models/parserSkripte/Dmoznebel.php
similarity index 91%
rename from app/Models/parserSkripte/Dmoznebel.php
rename to metager/app/Models/parserSkripte/Dmoznebel.php
index d79c3d3223340372484588fd3dd5f69f0c718313..4e5f45c116048a35f6b3c33f3e691a20c1d148cd 100644
--- a/app/Models/parserSkripte/Dmoznebel.php
+++ b/metager/app/Models/parserSkripte/Dmoznebel.php
@@ -36,10 +36,10 @@ class Dmoznebel extends Searchengine
                 $link,
                 $anzeigeLink,
                 $descr,
-                $this->engine->{"display-name"},$this->engine->homepage,
+                $this->engine->infos->display_name,
+                $this->engine->infos->homepage,
                 $this->counter
             );
         }
-
     }
 }
diff --git a/app/Models/parserSkripte/Dmoznebel_int.php b/metager/app/Models/parserSkripte/Dmoznebel_int.php
similarity index 88%
rename from app/Models/parserSkripte/Dmoznebel_int.php
rename to metager/app/Models/parserSkripte/Dmoznebel_int.php
index 5006bffbb472d94c7524164f239c5ecf3f11049d..9704935684cd0babcd635b4fdb71b69b721d79f8 100644
--- a/app/Models/parserSkripte/Dmoznebel_int.php
+++ b/metager/app/Models/parserSkripte/Dmoznebel_int.php
@@ -28,7 +28,8 @@ class Dmoznebel_int extends Searchengine
             $link,
             $anzeigeLink,
             $descr,
-            $this->engine->{"display-name"},$this->engine->homepage,
+            $this->engine->infos->display_name,
+            $this->engine->infos->homepage,
             $this->counter
         );
     }
diff --git a/app/Models/parserSkripte/Dummy.php b/metager/app/Models/parserSkripte/Dummy.php
similarity index 70%
rename from app/Models/parserSkripte/Dummy.php
rename to metager/app/Models/parserSkripte/Dummy.php
index 8dc7af0b74865eb2457f936918d38e90ce98337a..8ea045717e9d7a68d39918d0baf348076c8bef99 100644
--- a/app/Models/parserSkripte/Dummy.php
+++ b/metager/app/Models/parserSkripte/Dummy.php
@@ -24,20 +24,21 @@ class Dummy extends Searchengine
             }
 
             foreach ($content as $result) {
-                    $title = $result->title;
-                    $link = $result->link;
-                    $anzeigeLink = $link;
-                    $descr = $result->descr;
-                    $this->counter++;
-                    $this->results[] = new \App\Models\Result(
-                        $this->engine,
-                        $title,
-                        $link,
-                        $anzeigeLink,
-                        $descr,
-                        $this->engine->{"display-name"},$this->engine->homepage,
-                        $this->counter
-                    );
+                $title = $result->title;
+                $link = $result->link;
+                $anzeigeLink = $link;
+                $descr = $result->descr;
+                $this->counter++;
+                $this->results[] = new \App\Models\Result(
+                    $this->engine,
+                    $title,
+                    $link,
+                    $anzeigeLink,
+                    $descr,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
+                    $this->counter
+                );
             }
         } catch (\Exception $e) {
             Log::error("A problem occurred parsing results from $this->name:");
@@ -53,14 +54,14 @@ class Dummy extends Searchengine
             $newEngine = unserialize(serialize($this->engine));
 
             $perPage = 0;
-            if(isset($newEngine->{"get-parameter"}->count)){
+            if (isset($newEngine->{"get-parameter"}->count)) {
                 $perPage = $newEngine->{"get-parameter"}->count;
             } else {
                 $perPage = 10;
             }
 
             $offset = 0;
-            if(empty($newEngine->{"get-parameter"}->skip)){
+            if (empty($newEngine->{"get-parameter"}->skip)) {
                 $offset = $perPage;
             } else {
                 $offset = $newEngine->{"get-parameter"}->skip + $perPage;
@@ -74,12 +75,10 @@ class Dummy extends Searchengine
 
             $next = new Dummy($this->name, $newEngine, $metager);
             $this->next = $next;
-
         } catch (\Exception $e) {
             Log::error("A problem occurred parsing results from $this->name:");
             Log::error($e->getMessage());
             return;
         }
-
     }
-}
\ No newline at end of file
+}
diff --git a/app/Models/parserSkripte/Ebay.php b/metager/app/Models/parserSkripte/Ebay.php
similarity index 90%
rename from app/Models/parserSkripte/Ebay.php
rename to metager/app/Models/parserSkripte/Ebay.php
index 848e01a75d484cb5c102f836dcb630f4946a51f4..e26ff21b327236add7df302fff42d72f4765d7c8 100644
--- a/app/Models/parserSkripte/Ebay.php
+++ b/metager/app/Models/parserSkripte/Ebay.php
@@ -51,11 +51,14 @@ class Ebay extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
-                    ['partnershop' => false,
+                    [
+                        'partnershop' => false,
                         'price' => $price,
-                        'image' => $image]
+                        'image' => $image
+                    ]
                 );
                 $count++;
             }
diff --git a/app/Models/parserSkripte/Ecoshopper.php b/metager/app/Models/parserSkripte/Ecoshopper.php
similarity index 89%
rename from app/Models/parserSkripte/Ecoshopper.php
rename to metager/app/Models/parserSkripte/Ecoshopper.php
index 818d55cf7fa39a1f57411fdf65cf27fcafe4316d..4ea3d1f69b6fd5a512d205e16761bc5e556d8765 100644
--- a/app/Models/parserSkripte/Ecoshopper.php
+++ b/metager/app/Models/parserSkripte/Ecoshopper.php
@@ -36,7 +36,6 @@ class Ecoshopper extends Searchengine
                     } else {
                         $anzeigeLink = $link;
                     }
-
                 } else {
                     $anzeigeLink = $link;
                 }
@@ -49,10 +48,13 @@ class Ecoshopper extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
-                    ['partnershop' => false,
-                        'image' => $image]
+                    [
+                        'partnershop' => false,
+                        'image' => $image
+                    ]
                 );
             }
         } catch (\Exception $e) {
diff --git a/app/Models/parserSkripte/Europeana.php b/metager/app/Models/parserSkripte/Europeana.php
similarity index 95%
rename from app/Models/parserSkripte/Europeana.php
rename to metager/app/Models/parserSkripte/Europeana.php
index ce96e7152540285e9d335fd3dcee7e6cd97e2351..c03517b7cfd79a595ed914474a3b448528ad0e07 100644
--- a/app/Models/parserSkripte/Europeana.php
+++ b/metager/app/Models/parserSkripte/Europeana.php
@@ -42,7 +42,8 @@ class Europeana extends Searchengine
                         $link,
                         $anzeigeLink,
                         $descr,
-                        $this->engine->{"display-name"}, $this->engine->homepage,
+                        $this->engine->infos->display_name,
+                        $this->engine->infos->homepage,
                         $this->counter,
                         ['image' => $image]
                     );
diff --git a/app/Models/parserSkripte/Exalead.php b/metager/app/Models/parserSkripte/Exalead.php
similarity index 96%
rename from app/Models/parserSkripte/Exalead.php
rename to metager/app/Models/parserSkripte/Exalead.php
index a500dc750e7aecb7db0915d06d89a549a1018321..c77d335a70713bbd169fb86daea8df0b021118c9 100644
--- a/app/Models/parserSkripte/Exalead.php
+++ b/metager/app/Models/parserSkripte/Exalead.php
@@ -61,7 +61,8 @@ class Exalead extends Searchengine
                         $link,
                         $anzeigeLink,
                         $descr,
-                        $this->engine->{"display-name"}, $this->engine->homepage,
+                        $this->engine->infos->display_name,
+                        $this->engine->infos->homepage,
                         $this->counter
                     );
                 } catch (\ErrorException $e) {
diff --git a/app/Models/parserSkripte/Fairmondo.php b/metager/app/Models/parserSkripte/Fairmondo.php
similarity index 94%
rename from app/Models/parserSkripte/Fairmondo.php
rename to metager/app/Models/parserSkripte/Fairmondo.php
index d305f8922a4ac360de4230ee098381f9dd1a43a7..8b65569f7b663bfde3220a0f6c71a69b469ece5e 100644
--- a/app/Models/parserSkripte/Fairmondo.php
+++ b/metager/app/Models/parserSkripte/Fairmondo.php
@@ -48,8 +48,8 @@ class Fairmondo extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"},
-                    $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
                     [
                         'price' => $price,
diff --git a/app/Models/parserSkripte/Fernsehsuche.php b/metager/app/Models/parserSkripte/Fernsehsuche.php
similarity index 93%
rename from app/Models/parserSkripte/Fernsehsuche.php
rename to metager/app/Models/parserSkripte/Fernsehsuche.php
index 407822b9c8cab166f15ae558a7d0d6edf07995f0..bd3b41e3820d26e19470e95f5a67e002f03c951e 100644
--- a/app/Models/parserSkripte/Fernsehsuche.php
+++ b/metager/app/Models/parserSkripte/Fernsehsuche.php
@@ -38,12 +38,12 @@ class Fernsehsuche extends Searchengine
                         $link,
                         $anzeigeLink,
                         $descr,
-                        $this->engine->{"display-name"},$this->engine->homepage,
+                        $this->engine->infos->display_name,
+                        $this->engine->infos->homepage,
                         $this->counter,
                         ['image' => $image]
                     );
                 } catch (\ErrorException $e) {
-
                 }
             }
         } catch (\Exception $e) {
diff --git a/app/Models/parserSkripte/Fess.php b/metager/app/Models/parserSkripte/Fess.php
similarity index 92%
rename from app/Models/parserSkripte/Fess.php
rename to metager/app/Models/parserSkripte/Fess.php
index bc64cf920d11a9bfdb650a0b1a8b3f2e62a97268..2d75fdeed8f42cab7612e6af5fd8ddeb9feffb6e 100644
--- a/app/Models/parserSkripte/Fess.php
+++ b/metager/app/Models/parserSkripte/Fess.php
@@ -37,11 +37,11 @@ class Fess extends Searchengine
                         $link,
                         $anzeigeLink,
                         $descr,
-                        $this->engine->{"display-name"},$this->engine->homepage,
+                        $this->engine->infos->display_name,
+                        $this->engine->infos->homepage,
                         $this->counter
                     );
                 } catch (\ErrorException $e) {
-
                 }
             }
         } catch (\Exception $e) {
diff --git a/app/Models/parserSkripte/Flickr.php b/metager/app/Models/parserSkripte/Flickr.php
similarity index 95%
rename from app/Models/parserSkripte/Flickr.php
rename to metager/app/Models/parserSkripte/Flickr.php
index c04724e09dc50dcfdb9060673140b5e7ace7df02..f5a7e80905026741b51ae580ce5ccb40ee6935ca 100644
--- a/app/Models/parserSkripte/Flickr.php
+++ b/metager/app/Models/parserSkripte/Flickr.php
@@ -37,7 +37,8 @@ class Flickr extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
                     ['image' => $image]
                 );
diff --git a/app/Models/parserSkripte/Goyax.php b/metager/app/Models/parserSkripte/Goyax.php
similarity index 91%
rename from app/Models/parserSkripte/Goyax.php
rename to metager/app/Models/parserSkripte/Goyax.php
index 66c74a10eb91cb86b17ad3766fe1c3d81cf512ba..8c4625d660cb34fb7655cee3bb4ea2aa0969cb75 100644
--- a/app/Models/parserSkripte/Goyax.php
+++ b/metager/app/Models/parserSkripte/Goyax.php
@@ -31,10 +31,10 @@ class Goyax extends Searchengine
                 $link,
                 $anzeigeLink,
                 $descr,
-                $this->engine->{"display-name"},$this->engine->homepage,
+                $this->engine->infos->display_name,
+                $this->engine->infos->homepage,
                 $this->counter
             );
         });
-
     }
 }
diff --git a/metager/app/Models/parserSkripte/Infotiger.php b/metager/app/Models/parserSkripte/Infotiger.php
new file mode 100644
index 0000000000000000000000000000000000000000..d26c8fb6d550ad76d93d42b9682e32e9d129b1e8
--- /dev/null
+++ b/metager/app/Models/parserSkripte/Infotiger.php
@@ -0,0 +1,104 @@
+<?php
+
+namespace app\Models\parserSkripte;
+
+use App\Models\Searchengine;
+use Log;
+
+class Infotiger extends Searchengine
+{
+    const RESULTS_PER_PAGE = 10;
+    public $results = [];
+
+    public function __construct($name, \stdClass $engine, \App\MetaGer $metager)
+    {
+        parent::__construct($name, $engine, $metager);
+    }
+
+    public function loadResults($resultstring)
+    {
+        $results_json = json_decode($resultstring);
+        if (!$this->validateJsonResponse($results_json)) {
+            return;
+        }
+
+
+        try {
+            foreach ($results_json->response->docs as $result) {
+
+                $title = $result->title;
+                $link = $result->url;
+                $anzeigeLink = $result->purl;
+                $descr = $result->desc;
+                $this->counter++;
+                $this->results[] = new \App\Models\Result(
+                    $this->engine,
+                    $title,
+                    $link,
+                    $anzeigeLink,
+                    $descr,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
+                    $this->counter
+                );
+            }
+        } catch (\Exception $e) {
+            Log::error("A problem occurred parsing results from $this->name:");
+            Log::error($e->getMessage());
+            return;
+        }
+    }
+
+    public function getNext(\App\MetaGer $metager, $result)
+    {
+        $results_json = json_decode($result);
+
+        if (!$this->validateJsonResponse($results_json)) {
+            // Error parsing JSON response
+            return;
+        }
+        $numFound = 0;
+        if (!empty($results_json->response->numFound)) {
+            $numFound = $results_json->response->numFound;
+        }
+        $current_page = intval($this->engine->{"get-parameter"}->page);
+
+        // Currently only 20 pages are supported
+        // No next page if we reached that
+        if ($current_page >= 20) {
+            return;
+        }
+
+        $current_max_result = (($current_page - 1) * self::RESULTS_PER_PAGE) + sizeof($results_json->response->docs);
+
+        if ($numFound > $current_max_result) {
+            # Erstellen des neuen Suchmaschinenobjekts und anpassen des GetStrings:
+            $newEngine = unserialize(serialize($this->engine));
+            $newEngine->{"get-parameter"}->page = $current_page + 1;
+            $next = new Infotiger($this->name, $newEngine, $metager);
+            $this->next = $next;
+        }
+    }
+
+    /**
+     * Checks the returned object if it matches the expected format
+     * 
+     * @param Object $results_json
+     * 
+     * @return boolean Whether or not the object is valid
+     */
+    private function validateJsonResponse($results_json)
+    {
+        if (
+            $results_json === null ||                   // Error parsing JSON response (json_decode returned null)
+            empty($results_json) ||
+            !property_exists($results_json, 'response') ||                 // Unexpected JSON format (no response object)
+            !property_exists($results_json->response, 'docs') ||           // Unexpected JSON format (no docs object)
+            !is_array($results_json->response->docs)    // Unexpected JSON format (docs is not an array)
+        ) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+}
diff --git a/app/Models/parserSkripte/Kelkoo.php b/metager/app/Models/parserSkripte/Kelkoo.php
similarity index 95%
rename from app/Models/parserSkripte/Kelkoo.php
rename to metager/app/Models/parserSkripte/Kelkoo.php
index 75380f558bf80dc0fe2214b57f5dd339ed437c8b..8d231f3255dfeb3d894506337a52ac97b945f5fa 100644
--- a/app/Models/parserSkripte/Kelkoo.php
+++ b/metager/app/Models/parserSkripte/Kelkoo.php
@@ -63,10 +63,13 @@ class Kelkoo extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
-                    ['image' => $image,
-                        'price' => $totalPrice * 100]
+                    [
+                        'image' => $image,
+                        'price' => $totalPrice * 100
+                    ]
                 );
             }
         } catch (\Exception $e) {
@@ -151,6 +154,5 @@ class Kelkoo extends Searchengine
         $token = str_replace(array("+", "/", "="), array(".", "_", "-"), $token);
         $URLreturn = $URLtmp . "&" . $URL_sig . "=" . $token;
         return $URLreturn;
-
     }
 }
diff --git a/app/Models/parserSkripte/Loklak.php b/metager/app/Models/parserSkripte/Loklak.php
similarity index 91%
rename from app/Models/parserSkripte/Loklak.php
rename to metager/app/Models/parserSkripte/Loklak.php
index 8e739a48a3c3983bd057112fdc646b2e539bdfc5..d989dff0c436cdf01018d9f714c010a3d8d44ba0 100644
--- a/app/Models/parserSkripte/Loklak.php
+++ b/metager/app/Models/parserSkripte/Loklak.php
@@ -35,7 +35,8 @@ class Loklak extends Searchengine
                 $link,
                 $anzeigeLink,
                 $descr,
-                $this->engine->{"display-name"},$this->engine->homepage,
+                $this->engine->infos->display_name,
+                $this->engine->infos->homepage,
                 $this->counter
             );
         }
diff --git a/app/Models/parserSkripte/Mg_hochsch_de.php b/metager/app/Models/parserSkripte/Mg_hochsch_de.php
similarity index 90%
rename from app/Models/parserSkripte/Mg_hochsch_de.php
rename to metager/app/Models/parserSkripte/Mg_hochsch_de.php
index 1d74216a4e6a09189047a79d0a64d6e9d63777e8..d7cafd3dfd8b97a8dbf77590876c4a0223dc5fb7 100644
--- a/app/Models/parserSkripte/Mg_hochsch_de.php
+++ b/metager/app/Models/parserSkripte/Mg_hochsch_de.php
@@ -34,10 +34,10 @@ class Mg_hochsch_de extends Searchengine
                 $link,
                 $anzeigeLink,
                 $descr,
-                $this->engine->{"display-name"},$this->engine->homepage,
+                $this->engine->infos->display_name,
+                $this->engine->infos->homepage,
                 $this->counter
             );
         }
-
     }
 }
diff --git a/app/Models/parserSkripte/Mg_produkt2.php b/metager/app/Models/parserSkripte/Mg_produkt2.php
similarity index 94%
rename from app/Models/parserSkripte/Mg_produkt2.php
rename to metager/app/Models/parserSkripte/Mg_produkt2.php
index 455965c9494b60e8b6221447ecdcd10f5e724ce1..b0bdcb7877397ec6b9bad63ee89dae894279c871 100644
--- a/app/Models/parserSkripte/Mg_produkt2.php
+++ b/metager/app/Models/parserSkripte/Mg_produkt2.php
@@ -42,7 +42,8 @@ class Mg_produkt2 extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
                     ['image' => $image]
                 );
diff --git a/app/Models/parserSkripte/Minisucher.php b/metager/app/Models/parserSkripte/Minisucher.php
similarity index 97%
rename from app/Models/parserSkripte/Minisucher.php
rename to metager/app/Models/parserSkripte/Minisucher.php
index 69a55f9dcd5e0bd5bdcc253d441c71e9a330988e..fbbb1ba347b768a3f8d8e3a89039153df3589283 100644
--- a/app/Models/parserSkripte/Minisucher.php
+++ b/metager/app/Models/parserSkripte/Minisucher.php
@@ -57,7 +57,7 @@ class Minisucher extends Searchengine
 
                 $additionalInformation = ['date' => $dateVal];
 
-                $minism = $this->engine->{"display-name"};
+                $minism = $this->engine->infos->display_name;
                 $gefVon = "Minisucher: $minism";
                 $subcollection = $result->xpath('//doc/str[@name="subcollection"]')[0]->__toString();
 
@@ -71,12 +71,9 @@ class Minisucher extends Searchengine
                     $counter,
                     $additionalInformation
                 );
-
             } catch (\ErrorException $e) {
                 continue;
             }
         }
-
     }
-
 }
diff --git a/app/Models/parserSkripte/Mnogosearch.php b/metager/app/Models/parserSkripte/Mnogosearch.php
similarity index 93%
rename from app/Models/parserSkripte/Mnogosearch.php
rename to metager/app/Models/parserSkripte/Mnogosearch.php
index 350eff6c471e1d13524376e48e2c302fbeb08112..b6d6373de2b8fc11952d481cd12fe9bdf0e9025d 100644
--- a/app/Models/parserSkripte/Mnogosearch.php
+++ b/metager/app/Models/parserSkripte/Mnogosearch.php
@@ -39,10 +39,10 @@ class Mnogosearch extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter
                 );
             });
-
     }
 }
diff --git a/app/Models/parserSkripte/Nebel.php b/metager/app/Models/parserSkripte/Nebel.php
similarity index 90%
rename from app/Models/parserSkripte/Nebel.php
rename to metager/app/Models/parserSkripte/Nebel.php
index 2ec701d4b0d781e09ec602485a3f8dfb5750c215..e33004b30ef37670cc9b6f68a7647bb1dcf76609 100644
--- a/app/Models/parserSkripte/Nebel.php
+++ b/metager/app/Models/parserSkripte/Nebel.php
@@ -34,10 +34,10 @@ class Nebel extends Searchengine
                 $link,
                 $anzeigeLink,
                 $descr,
-                $this->engine->{"display-name"}, $this->engine->homepage,
+                $this->engine->infos->display_name,
+                $this->engine->infos->homepage,
                 $this->counter
             );
         }
-
     }
 }
diff --git a/app/Models/parserSkripte/Onenewspage.php b/metager/app/Models/parserSkripte/Onenewspage.php
similarity index 94%
rename from app/Models/parserSkripte/Onenewspage.php
rename to metager/app/Models/parserSkripte/Onenewspage.php
index 0b9ba4bb7689c829e3b9805f20d4f97c0faf2e29..67b0b11429eee00143719ab5e823e0fa1b0ce4c7 100644
--- a/app/Models/parserSkripte/Onenewspage.php
+++ b/metager/app/Models/parserSkripte/Onenewspage.php
@@ -37,7 +37,8 @@ class Onenewspage extends Searchengine
                 $link,
                 $anzeigeLink,
                 $descr,
-                $this->engine->{"display-name"}, $this->engine->homepage,
+                $this->engine->infos->display_name,
+                $this->engine->infos->homepage,
                 $this->counter,
                 $additionalInformation
             );
@@ -45,7 +46,6 @@ class Onenewspage extends Searchengine
         if (count($this->results) > $this->resultCount) {
             $this->resultCount += count($this->results);
         }
-
     }
 
     public function getNext(\App\MetaGer $metager, $result)
diff --git a/app/Models/parserSkripte/Onenewspagegermany.php b/metager/app/Models/parserSkripte/Onenewspagegermany.php
similarity index 94%
rename from app/Models/parserSkripte/Onenewspagegermany.php
rename to metager/app/Models/parserSkripte/Onenewspagegermany.php
index 288f644e0047440a1a8ca3d46aea68cff5bbcf2d..03686a911d6fbb66e01320902647e72436e3cdd6 100644
--- a/app/Models/parserSkripte/Onenewspagegermany.php
+++ b/metager/app/Models/parserSkripte/Onenewspagegermany.php
@@ -40,17 +40,16 @@ class Onenewspagegermany extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
                     $additionalInformation
                 );
             }
-
         }
         if (count($this->results) > $this->resultCount) {
             $this->resultCount += count($this->results);
         }
-
     }
 
     public function getNext(\App\MetaGer $metager, $result)
diff --git a/app/Models/parserSkripte/Onenewspagevideo.php b/metager/app/Models/parserSkripte/Onenewspagevideo.php
similarity index 94%
rename from app/Models/parserSkripte/Onenewspagevideo.php
rename to metager/app/Models/parserSkripte/Onenewspagevideo.php
index a83ae8ddff7123b0c63ef8b8cc3cfc0cf726b98a..f8e6411ef17694b9bd0fe77d3b2bce53d480b4d0 100644
--- a/app/Models/parserSkripte/Onenewspagevideo.php
+++ b/metager/app/Models/parserSkripte/Onenewspagevideo.php
@@ -36,7 +36,8 @@ class Onenewspagevideo extends Searchengine
                 $link,
                 $anzeigeLink,
                 $descr,
-                $this->engine->{"display-name"}, $this->engine->homepage,
+                $this->engine->infos->display_name,
+                $this->engine->infos->homepage,
                 $this->counter,
                 $additionalInformation
             );
diff --git a/app/Models/parserSkripte/Openclipart.php b/metager/app/Models/parserSkripte/Openclipart.php
similarity index 95%
rename from app/Models/parserSkripte/Openclipart.php
rename to metager/app/Models/parserSkripte/Openclipart.php
index 4f184a4976611e01718defc6e203c5f0c5d7e417..0539e923ea47fe4b9cf79bb82f9f1bfbcaf0cfdf 100644
--- a/app/Models/parserSkripte/Openclipart.php
+++ b/metager/app/Models/parserSkripte/Openclipart.php
@@ -37,7 +37,8 @@ class Openclipart extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
                     ['image' => $image]
                 );
diff --git a/app/Models/parserSkripte/Opencrawlastronomie.php b/metager/app/Models/parserSkripte/Opencrawlastronomie.php
similarity index 93%
rename from app/Models/parserSkripte/Opencrawlastronomie.php
rename to metager/app/Models/parserSkripte/Opencrawlastronomie.php
index beeaa07c7fe19c49aa3cc85efe10021fe27bf1bb..bd1a5ad8ce8906e244c9bd174497492e6f4a8e83 100644
--- a/app/Models/parserSkripte/Opencrawlastronomie.php
+++ b/metager/app/Models/parserSkripte/Opencrawlastronomie.php
@@ -41,7 +41,8 @@ class Opencrawlastronomie extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter
                 );
                 $count++;
diff --git a/app/Models/parserSkripte/Opencrawlpolitik.php b/metager/app/Models/parserSkripte/Opencrawlpolitik.php
similarity index 94%
rename from app/Models/parserSkripte/Opencrawlpolitik.php
rename to metager/app/Models/parserSkripte/Opencrawlpolitik.php
index 9f2490f00ddf80bad93c93d94362e2eb1e69d0a2..ba21354dc0e0f6410a97e24bab291bdc9264fe3a 100644
--- a/app/Models/parserSkripte/Opencrawlpolitik.php
+++ b/metager/app/Models/parserSkripte/Opencrawlpolitik.php
@@ -49,7 +49,8 @@ class Opencrawlpolitik extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
                     $additionalInformation
                 );
diff --git a/app/Models/parserSkripte/Opencrawlregengergie.php b/metager/app/Models/parserSkripte/Opencrawlregengergie.php
similarity index 93%
rename from app/Models/parserSkripte/Opencrawlregengergie.php
rename to metager/app/Models/parserSkripte/Opencrawlregengergie.php
index 53d232bf2bfed26b3a9b7331fa9ec2c59133397a..fb1981773c9a259fdc83d700f2d1a842b7ca7260 100644
--- a/app/Models/parserSkripte/Opencrawlregengergie.php
+++ b/metager/app/Models/parserSkripte/Opencrawlregengergie.php
@@ -41,7 +41,8 @@ class Opencrawlregengergie extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter
                 );
                 $count++;
diff --git a/app/Models/parserSkripte/Overture.php b/metager/app/Models/parserSkripte/Overture.php
similarity index 95%
rename from app/Models/parserSkripte/Overture.php
rename to metager/app/Models/parserSkripte/Overture.php
index 2722fef01d64d5d8f42cf4a305837bf584e7d0b6..e0b5c42041e84c87b00a9ddd7349a3cce42d4c86 100644
--- a/app/Models/parserSkripte/Overture.php
+++ b/metager/app/Models/parserSkripte/Overture.php
@@ -46,8 +46,8 @@ class Overture extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"},
-                    $this->engine->{"homepage"},
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
                     []
                 );
@@ -67,8 +67,8 @@ class Overture extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"},
-                    $this->engine->{"homepage"},
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
                     []
                 );
diff --git a/app/Models/parserSkripte/OvertureAds.php b/metager/app/Models/parserSkripte/OvertureAds.php
similarity index 97%
rename from app/Models/parserSkripte/OvertureAds.php
rename to metager/app/Models/parserSkripte/OvertureAds.php
index c27c704e91f1b03d85198906c8487674993342f2..9975a9dbce3a73119448f2d8c8123e0a654204b4 100644
--- a/app/Models/parserSkripte/OvertureAds.php
+++ b/metager/app/Models/parserSkripte/OvertureAds.php
@@ -38,8 +38,8 @@ class OvertureAds extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"},
-                    $this->engine->{"homepage"},
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
                     []
                 );
@@ -113,5 +113,4 @@ class OvertureAds extends Searchengine
 
         return "&affilData=" . $affilDataValue . "&serveUrl=" . $serveUrl;
     }
-
 }
diff --git a/app/Models/parserSkripte/Pixabay.php b/metager/app/Models/parserSkripte/Pixabay.php
similarity index 95%
rename from app/Models/parserSkripte/Pixabay.php
rename to metager/app/Models/parserSkripte/Pixabay.php
index b4d57eb8bc1c970bab864554e9e74438b6ecb671..96c040a3853a3e88f8ba45cd7df2d2f1777007ab 100644
--- a/app/Models/parserSkripte/Pixabay.php
+++ b/metager/app/Models/parserSkripte/Pixabay.php
@@ -37,7 +37,8 @@ class Pixabay extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
                     ['image' => $image]
                 );
diff --git a/app/Models/parserSkripte/ProdSearch.php b/metager/app/Models/parserSkripte/ProdSearch.php
similarity index 89%
rename from app/Models/parserSkripte/ProdSearch.php
rename to metager/app/Models/parserSkripte/ProdSearch.php
index 6cdc54a244950586b751726b65e235c610cdd41d..441d84dd521bd87a18be6ab489d79e0fd69ded1c 100644
--- a/app/Models/parserSkripte/ProdSearch.php
+++ b/metager/app/Models/parserSkripte/ProdSearch.php
@@ -44,11 +44,13 @@ class ProdSearch extends Searchengine
                 $link,
                 $anzeigeLink,
                 $descr,
-                $this->engine->{"display-name"}, $this->engine->homepage,
+                $this->engine->infos->display_name,
+                $this->engine->infos->homepage,
                 $this->counter,
                 [
                     'price' => $price,
-                    'image' => $image]
+                    'image' => $image
+                ]
             );
         }
     }
diff --git a/app/Models/parserSkripte/Qip.php b/metager/app/Models/parserSkripte/Qip.php
similarity index 92%
rename from app/Models/parserSkripte/Qip.php
rename to metager/app/Models/parserSkripte/Qip.php
index 7c3b1f0238421076b4d1649124654f93f58758bd..92a1deffd12e1ffb38e4df32d0bc764a081915e6 100644
--- a/app/Models/parserSkripte/Qip.php
+++ b/metager/app/Models/parserSkripte/Qip.php
@@ -36,7 +36,8 @@ class Qip extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter
                 );
             }
diff --git a/app/Models/parserSkripte/Qualigo.php b/metager/app/Models/parserSkripte/Qualigo.php
similarity index 90%
rename from app/Models/parserSkripte/Qualigo.php
rename to metager/app/Models/parserSkripte/Qualigo.php
index 229ed9fb28ad3e7b4d935cfedeb3b5823d826220..712d4645db0fbb60569d432316097aeb6834fbf2 100644
--- a/app/Models/parserSkripte/Qualigo.php
+++ b/metager/app/Models/parserSkripte/Qualigo.php
@@ -15,7 +15,7 @@ class Qualigo extends XmlSearchengine
 
     protected function loadXmlResults($resultsXml)
     {
-        if(empty($resultsXml) || !$resultsXml){
+        if (empty($resultsXml) || !$resultsXml) {
             Log::error("A problem occurred parsing results from $this->name:");
             return;
         }
@@ -33,8 +33,8 @@ class Qualigo extends XmlSearchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"},
-                    $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter
                 );
             }
diff --git a/app/Models/parserSkripte/Radiobrowser.php b/metager/app/Models/parserSkripte/Radiobrowser.php
similarity index 91%
rename from app/Models/parserSkripte/Radiobrowser.php
rename to metager/app/Models/parserSkripte/Radiobrowser.php
index eafe1d1e8c8bf845b6ae6760c7b8c3979124dfbd..77414984cd6eccc66267d01174f6a5709798632a 100644
--- a/app/Models/parserSkripte/Radiobrowser.php
+++ b/metager/app/Models/parserSkripte/Radiobrowser.php
@@ -25,7 +25,7 @@ class Radiobrowser extends Searchengine
 
             foreach ($content as $result) {
                 $title       = $result->name;
-                $link        = $result->homepage;
+                $link        = $result->infos->homepage;
                 $anzeigeLink = $link;
                 $descr       = "";
                 if ($result->tags != "") {
@@ -50,7 +50,8 @@ class Radiobrowser extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"},$this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter
                 );
             }
diff --git a/app/Models/parserSkripte/Scopia.php b/metager/app/Models/parserSkripte/Scopia.php
similarity index 78%
rename from app/Models/parserSkripte/Scopia.php
rename to metager/app/Models/parserSkripte/Scopia.php
index 937e03470229c7e5d783602384a149ff3ee61e25..c363672eab05c2a5df0e938c3b09f18c3a5b8d71 100644
--- a/app/Models/parserSkripte/Scopia.php
+++ b/metager/app/Models/parserSkripte/Scopia.php
@@ -35,20 +35,20 @@ class Scopia extends Searchengine
                 $link = $result->url->__toString();
                 $anzeigeLink = $link;
                 $descr = $result->description->__toString();
+
                 $this->counter++;
-                if(! $this->containsPornContent($title.$descr)) { //see note at filtering method
+                if (!$this->containsPornContent($title . $descr) && !$this->filterScopia($link)) { //see note at filtering method
                     $this->results[] = new \App\Models\Result(
                         $this->engine,
                         $title,
                         $link,
                         $anzeigeLink,
                         $descr,
-                        $this->engine->{"display-name"},
-                        $this->engine->homepage,
+                        $this->engine->infos->display_name,
+                        $this->engine->infos->homepage,
                         $this->counter
                     );
                 }
-                
             }
         } catch (\Exception $e) {
             Log::error("A problem occurred parsing results from $this->name:");
@@ -57,7 +57,35 @@ class Scopia extends Searchengine
         }
     }
 
-    private function containsPornContent($text) {
+    /**
+     * Decides whether or not to keep the result
+     * 
+     * @return boolean
+     */
+    private function filterScopia($link)
+    {
+        /**
+         * Scopia has too old of an index to have correct results regarding this domains
+         * 
+         * Important: We do not filter out those domains completely as other search engines do have them in the index
+         */
+        $filtered_domains = [
+            "rt.com",
+            "sputniknews.com"
+        ];
+        $target_domain = parse_url($link, PHP_URL_HOST);
+        if ($target_domain !== false) {
+            foreach ($filtered_domains as $filtered_domain) {
+                if (preg_match("/(^|\b|\.){1}" . preg_quote($filtered_domain, "/") . "$/", $target_domain)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private function containsPornContent($text)
+    {
         // Returns true if pornographic content is detected
         // We noticed scopia often serving pornographic results for non-pornographic queries. After much deliberation we decided to filter pornographic results from scopia. Those will have to be supplied by other search engines.
 
@@ -108,8 +136,8 @@ class Scopia extends Searchengine
             "free" => 10,
         ];
         $acc = 0;
-        foreach($words as $word => $score) {
-            if (stristr($text,$word)) {
+        foreach ($words as $word => $score) {
+            if (stristr($text, $word)) {
                 $acc += $score;
             }
         }
@@ -122,7 +150,6 @@ class Scopia extends Searchengine
         $result = str_replace("&", "&amp;", $result);
         try {
             $content = \simplexml_load_string($result);
-
         } catch (\Exception $e) {
             Log::error("A problem occurred parsing results from $this->name:");
             Log::error($e->getMessage());
@@ -144,6 +171,5 @@ class Scopia extends Searchengine
             $next = new Scopia($this->name, $newEngine, $metager);
             $this->next = $next;
         }
-
     }
 }
diff --git a/app/Models/parserSkripte/Shopzilla.php b/metager/app/Models/parserSkripte/Shopzilla.php
similarity index 93%
rename from app/Models/parserSkripte/Shopzilla.php
rename to metager/app/Models/parserSkripte/Shopzilla.php
index f0cf7cf82d423ac93603bb2d56183c838ec647a5..b89b9b796220b37e098bc120225a92dab8536ec4 100644
--- a/app/Models/parserSkripte/Shopzilla.php
+++ b/metager/app/Models/parserSkripte/Shopzilla.php
@@ -47,11 +47,14 @@ class Shopzilla extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter,
-                    ['partnershop' => true,
+                    [
+                        'partnershop' => true,
                         'price' => $price,
-                        'image' => $image]
+                        'image' => $image
+                    ]
                 );
                 $count++;
             }
diff --git a/app/Models/parserSkripte/Similar_product.php b/metager/app/Models/parserSkripte/Similar_product.php
similarity index 90%
rename from app/Models/parserSkripte/Similar_product.php
rename to metager/app/Models/parserSkripte/Similar_product.php
index 3dcf956a0e6394120b98a607ffcd1ca1db3ac505..55489560ffd5ce73efb959cbd2c8e69a7cc32609 100644
--- a/app/Models/parserSkripte/Similar_product.php
+++ b/metager/app/Models/parserSkripte/Similar_product.php
@@ -30,7 +30,8 @@ class Similar_product extends Searchengine
                 $link,
                 $anzeigeLink,
                 $descr,
-                $this->engine->{"display-name"},$this->engine->homepage,
+                $this->engine->infos->display_name,
+                $this->engine->infos->homepage,
                 $this->counter
             );
         }
diff --git a/app/Models/parserSkripte/Similar_product_ads.php b/metager/app/Models/parserSkripte/Similar_product_ads.php
similarity index 91%
rename from app/Models/parserSkripte/Similar_product_ads.php
rename to metager/app/Models/parserSkripte/Similar_product_ads.php
index 8fc6bd78681f45e52590b3b2e8595636fe334139..7c3ea9f2e50f8cc74f1bd59a6e4c2f3b57fadcbd 100644
--- a/app/Models/parserSkripte/Similar_product_ads.php
+++ b/metager/app/Models/parserSkripte/Similar_product_ads.php
@@ -34,10 +34,10 @@ class Similar_product_ads extends Searchengine
                 $link,
                 $anzeigeLink,
                 $descr,
-                $this->engine->{"display-name"},$this->engine->homepage,
+                $this->engine->infos->display_name,
+                $this->engine->infos->homepage,
                 $this->counter
             );
         }
     }
-
 }
diff --git a/app/Models/parserSkripte/Suchticker.php b/metager/app/Models/parserSkripte/Suchticker.php
similarity index 90%
rename from app/Models/parserSkripte/Suchticker.php
rename to metager/app/Models/parserSkripte/Suchticker.php
index 9a147a0c09881110833ce11e4bbb49189775a974..ae07b2ac30c60da0492726176cb87c13e279efc1 100644
--- a/app/Models/parserSkripte/Suchticker.php
+++ b/metager/app/Models/parserSkripte/Suchticker.php
@@ -34,10 +34,10 @@ class Suchticker extends Searchengine
                 $link,
                 $anzeigeLink,
                 $descr,
-                $this->engine->{"display-name"},$this->engine->homepage,
+                $this->engine->infos->display_name,
+                $this->engine->infos->homepage,
                 $this->counter
             );
         }
-
     }
 }
diff --git a/app/Models/parserSkripte/Tuhh.php b/metager/app/Models/parserSkripte/Tuhh.php
similarity index 93%
rename from app/Models/parserSkripte/Tuhh.php
rename to metager/app/Models/parserSkripte/Tuhh.php
index 7dfe58cc2608c72e48731da827e75b3563dc2e1e..2fa6e0fd0c46cbb1c33d983afaefd024469bf92d 100644
--- a/app/Models/parserSkripte/Tuhh.php
+++ b/metager/app/Models/parserSkripte/Tuhh.php
@@ -40,7 +40,8 @@ class Tuhh extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter
                 );
                 $count++;
diff --git a/app/Models/parserSkripte/Wikipedia.php b/metager/app/Models/parserSkripte/Wikipedia.php
similarity index 87%
rename from app/Models/parserSkripte/Wikipedia.php
rename to metager/app/Models/parserSkripte/Wikipedia.php
index c590d75dac4986e23f137eaabd6972ca5571be71..05054e3f32ecdd12e95c1003999cfe33febc2e16 100644
--- a/app/Models/parserSkripte/Wikipedia.php
+++ b/metager/app/Models/parserSkripte/Wikipedia.php
@@ -24,7 +24,8 @@ class Wikipedia extends Searchengine
             $link,
             $result[3],
             $result[2],
-            $this->engine->{"display-name"},$this->engine->homepage,
+            $this->engine->infos->display_name,
+            $this->engine->infos->homepage,
             $counter
         );
     }
diff --git a/app/Models/parserSkripte/Witch.php b/metager/app/Models/parserSkripte/Witch.php
similarity index 93%
rename from app/Models/parserSkripte/Witch.php
rename to metager/app/Models/parserSkripte/Witch.php
index fd47a84cdcfbec7ad86faa46d0864601c0187531..280df33d26e07320a2752fa4f27a5008b79486e9 100644
--- a/app/Models/parserSkripte/Witch.php
+++ b/metager/app/Models/parserSkripte/Witch.php
@@ -37,11 +37,11 @@ class Witch extends Searchengine
                 $link,
                 $anzeigeLink,
                 $descr,
-                $this->engine->{"display-name"}, $this->engine->homepage,
+                $this->engine->infos->display_name,
+                $this->engine->infos->homepage,
                 $this->counter
             );
         }
-
     }
 
     public function getNext(\App\MetaGer $metager, $result)
diff --git a/app/Models/parserSkripte/Yacy.php b/metager/app/Models/parserSkripte/Yacy.php
similarity index 91%
rename from app/Models/parserSkripte/Yacy.php
rename to metager/app/Models/parserSkripte/Yacy.php
index 838a1fa78fb59248510cd14e8e4bd13fcd9be319..43bd3dc42a004ff06d91267ea76081ffd772b4c6 100644
--- a/app/Models/parserSkripte/Yacy.php
+++ b/metager/app/Models/parserSkripte/Yacy.php
@@ -36,11 +36,11 @@ class Yacy extends Searchengine
                         $link,
                         $anzeigeLink,
                         $descr,
-                        $this->engine->{"display-name"}, $this->engine->homepage,
+                        $this->engine->infos->display_name,
+                        $this->engine->infos->homepage,
                         $this->counter
                     );
-                } 
-
+                }
             }
         } catch (\Exception $e) {
             Log::error("A problem occurred parsing results from $this->name:");
@@ -51,7 +51,7 @@ class Yacy extends Searchengine
 
     public function getNext(\App\MetaGer $metager, $result)
     {
-        try{
+        try {
             $resultCount = 0;
             $content = json_decode($result, true);
             $content = $content["channels"];
@@ -61,7 +61,7 @@ class Yacy extends Searchengine
                 $resultCount += sizeof($items);
             }
 
-            if($resultCount > 0){
+            if ($resultCount > 0) {
                 $engine = clone $this->engine;
                 $engine->{"get-parameter"}->startRecord += 10;
                 $next = new Yacy($this->name, $engine, $metager);
diff --git a/app/Models/parserSkripte/Yacyunih.php b/metager/app/Models/parserSkripte/Yacyunih.php
similarity index 93%
rename from app/Models/parserSkripte/Yacyunih.php
rename to metager/app/Models/parserSkripte/Yacyunih.php
index 8b357b024da23aa6f48ece5b2928f4d14a5a4342..a7e2695e9ad3ba3c3276677e79430a94fc360724 100644
--- a/app/Models/parserSkripte/Yacyunih.php
+++ b/metager/app/Models/parserSkripte/Yacyunih.php
@@ -43,7 +43,8 @@ class Yacyunih extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter
                 );
                 $count++;
diff --git a/app/Models/parserSkripte/Yandex.php b/metager/app/Models/parserSkripte/Yandex.php
similarity index 68%
rename from app/Models/parserSkripte/Yandex.php
rename to metager/app/Models/parserSkripte/Yandex.php
index 9f6e68d3b40cf1426ed69bffb4f81e33e4ccc869..e9e44420721c3ad474143a914088cf34f38cf938 100644
--- a/app/Models/parserSkripte/Yandex.php
+++ b/metager/app/Models/parserSkripte/Yandex.php
@@ -40,6 +40,9 @@ class Yandex extends Searchengine
                 if (!$descr) {
                     $descr = strip_tags($result->{"doc"}->{"passages"}->asXML());
                 }
+                if ($this->filterYandexResult($title, $descr, $link)) {
+                    continue;
+                }
                 $this->counter++;
                 $this->results[] = new \App\Models\Result(
                     $this->engine,
@@ -47,7 +50,8 @@ class Yandex extends Searchengine
                     $link,
                     $anzeigeLink,
                     $descr,
-                    $this->engine->{"display-name"}, $this->engine->homepage,
+                    $this->engine->infos->display_name,
+                    $this->engine->infos->homepage,
                     $this->counter
                 );
             }
@@ -57,6 +61,40 @@ class Yandex extends Searchengine
         }
     }
 
+    private function filterYandexResult($title, $description, $link)
+    {
+        /**
+         * Yandex is currently not expected to have neutral results regarding this domains
+         * Thats why we filter those out here.
+         * Important: We do not filter out those domains completely as other search engines do have them in the index
+         * Returns true if the result is to be excluded.
+         */
+        $filtered_domains = [
+            "rt.com",
+            "sputniknews.com"
+        ];
+        $target_domain = parse_url($link, PHP_URL_HOST);
+        if ($target_domain !== false) {
+            foreach ($filtered_domains as $filtered_domain) {
+                if (preg_match("/(^|\b|\.){1}" . preg_quote($filtered_domain, "/") . "$/", $target_domain)) {
+                    return true;
+                }
+            }
+        }
+
+
+        // If the query does not contain kyrillic characters then the result must not contain them or they will be filtered
+        if (
+            preg_match('/[А-Яа-яЁё]/u', $this->query) !== 1 &&
+            (preg_match('/[А-Яа-яЁё]/u', $title) === 1 ||
+                preg_match('/[А-Яа-яЁё]/u', $description) === 1)
+        ) {
+            return true;
+        }
+
+        return false;
+    }
+
     public function getNext(\App\MetaGer $metager, $result)
     {
         $result = preg_replace("/\r\n/si", "", $result);
diff --git a/app/Models/parserSkripte/Zeitde.php b/metager/app/Models/parserSkripte/Zeitde.php
similarity index 91%
rename from app/Models/parserSkripte/Zeitde.php
rename to metager/app/Models/parserSkripte/Zeitde.php
index 884b007d7bf82341eda6fe603b8c25e37178fc23..3dbaa90b0afb09260482e9dc43c1cf937a65fd18 100644
--- a/app/Models/parserSkripte/Zeitde.php
+++ b/metager/app/Models/parserSkripte/Zeitde.php
@@ -38,10 +38,10 @@ class Zeitde extends Searchengine
                 $link,
                 $anzeigeLink,
                 $descr,
-                $this->engine->{"display-name"},$this->engine->homepage,
+                $this->engine->infos->display_name,
+                $this->engine->infos->homepage,
                 $this->counter
             );
         }
-
     }
 }
diff --git a/app/PrometheusExporter.php b/metager/app/PrometheusExporter.php
similarity index 84%
rename from app/PrometheusExporter.php
rename to metager/app/PrometheusExporter.php
index 399b3757d0f5d7ca12b586c742352a7ad44efbc4..f5e769f9c7e269db481c69ce41da983f9dbe613d 100644
--- a/app/PrometheusExporter.php
+++ b/metager/app/PrometheusExporter.php
@@ -46,4 +46,15 @@ class PrometheusExporter
         $histogram = $registry->getOrRegisterHistogram('metager', 'request_time', 'Loading Times for different cases', ['type'], [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 15.0, 20.0, 30.0, 35.0]);
         $histogram->observe($duration, [$type]);
     }
+
+    /**
+     * @param String $language
+     * @param Array $type
+     */
+    public static function PreferredLanguage($language, $type)
+    {
+        $registry = \Prometheus\CollectorRegistry::getDefault();
+        $counter = $registry->getOrRegisterCounter("metager", $language, 'counts preferred language usages', ['type']);
+        $counter->inc($type);
+    }
 }
diff --git a/app/Providers/AppServiceProvider.php b/metager/app/Providers/AppServiceProvider.php
similarity index 100%
rename from app/Providers/AppServiceProvider.php
rename to metager/app/Providers/AppServiceProvider.php
diff --git a/app/Providers/AuthServiceProvider.php b/metager/app/Providers/AuthServiceProvider.php
similarity index 100%
rename from app/Providers/AuthServiceProvider.php
rename to metager/app/Providers/AuthServiceProvider.php
diff --git a/app/Providers/BroadcastServiceProvider.php b/metager/app/Providers/BroadcastServiceProvider.php
similarity index 100%
rename from app/Providers/BroadcastServiceProvider.php
rename to metager/app/Providers/BroadcastServiceProvider.php
diff --git a/app/Providers/EventServiceProvider.php b/metager/app/Providers/EventServiceProvider.php
similarity index 100%
rename from app/Providers/EventServiceProvider.php
rename to metager/app/Providers/EventServiceProvider.php
diff --git a/app/Providers/KeyServiceProvider.php b/metager/app/Providers/KeyServiceProvider.php
similarity index 100%
rename from app/Providers/KeyServiceProvider.php
rename to metager/app/Providers/KeyServiceProvider.php
diff --git a/app/Providers/MetaGerProvider.php b/metager/app/Providers/MetaGerProvider.php
similarity index 100%
rename from app/Providers/MetaGerProvider.php
rename to metager/app/Providers/MetaGerProvider.php
diff --git a/app/Providers/RouteServiceProvider.php b/metager/app/Providers/RouteServiceProvider.php
similarity index 100%
rename from app/Providers/RouteServiceProvider.php
rename to metager/app/Providers/RouteServiceProvider.php
diff --git a/app/Rules/PCSRF.php b/metager/app/Rules/PCSRF.php
similarity index 100%
rename from app/Rules/PCSRF.php
rename to metager/app/Rules/PCSRF.php
diff --git a/app/User.php b/metager/app/User.php
similarity index 100%
rename from app/User.php
rename to metager/app/User.php
diff --git a/app/UserAgent.php b/metager/app/UserAgent.php
similarity index 100%
rename from app/UserAgent.php
rename to metager/app/UserAgent.php
diff --git a/artisan b/metager/artisan
similarity index 100%
rename from artisan
rename to metager/artisan
diff --git a/bootstrap/app.php b/metager/bootstrap/app.php
similarity index 100%
rename from bootstrap/app.php
rename to metager/bootstrap/app.php
diff --git a/bootstrap/autoload.php b/metager/bootstrap/autoload.php
similarity index 100%
rename from bootstrap/autoload.php
rename to metager/bootstrap/autoload.php
diff --git a/bootstrap/cache/.gitignore b/metager/bootstrap/cache/.gitignore
similarity index 100%
rename from bootstrap/cache/.gitignore
rename to metager/bootstrap/cache/.gitignore
diff --git a/composer.json b/metager/composer.json
similarity index 95%
rename from composer.json
rename to metager/composer.json
index f9b01fe354deea05f9970cc13ef95242dc9410c7..e9cd70d81dba1b41e3729fa9d77339f1aeec6884 100644
--- a/composer.json
+++ b/metager/composer.json
@@ -24,8 +24,6 @@
     },
     "require-dev": {
         "brianium/paratest": "^6.3",
-        "browserstack/browserstack-local": "^1.1",
-        "chinleung/laravel-browserstack": "^1.4",
         "facade/ignition": "^2.5",
         "fakerphp/faker": "^1.9.1",
         "laravel/dusk": "^6.15",
diff --git a/composer.lock b/metager/composer.lock
similarity index 80%
rename from composer.lock
rename to metager/composer.lock
index e91f3477cb61a7f3090338710214712d9fb9a677..1ca4ed9df64f642e3efdcbc6a357388a2be166ff 100644
--- a/composer.lock
+++ b/metager/composer.lock
@@ -4,35 +4,35 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "d1864366bb8932b5fbc6cb8fe773e467",
+    "content-hash": "f4e711ef43286529e56d5894b4fea683",
     "packages": [
         {
             "name": "asm89/stack-cors",
-            "version": "v2.0.3",
+            "version": "v2.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/asm89/stack-cors.git",
-                "reference": "9cb795bf30988e8c96dd3c40623c48a877bc6714"
+                "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/asm89/stack-cors/zipball/9cb795bf30988e8c96dd3c40623c48a877bc6714",
-                "reference": "9cb795bf30988e8c96dd3c40623c48a877bc6714",
+                "url": "https://api.github.com/repos/asm89/stack-cors/zipball/73e5b88775c64ccc0b84fb60836b30dc9d92ac4a",
+                "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.0|^8.0",
-                "symfony/http-foundation": "~2.7|~3.0|~4.0|~5.0",
-                "symfony/http-kernel": "~2.7|~3.0|~4.0|~5.0"
+                "php": "^7.2|^8.0",
+                "symfony/http-foundation": "^4|^5|^6",
+                "symfony/http-kernel": "^4|^5|^6"
             },
             "require-dev": {
-                "phpunit/phpunit": "^6|^7|^8|^9",
+                "phpunit/phpunit": "^7|^9",
                 "squizlabs/php_codesniffer": "^3.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0-dev"
+                    "dev-master": "2.1-dev"
                 }
             },
             "autoload": {
@@ -58,22 +58,22 @@
             ],
             "support": {
                 "issues": "https://github.com/asm89/stack-cors/issues",
-                "source": "https://github.com/asm89/stack-cors/tree/v2.0.3"
+                "source": "https://github.com/asm89/stack-cors/tree/v2.1.1"
             },
-            "time": "2021-03-11T06:42:03+00:00"
+            "time": "2022-01-18T09:12:03+00:00"
         },
         {
             "name": "brick/math",
-            "version": "0.9.2",
+            "version": "0.9.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/brick/math.git",
-                "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0"
+                "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0",
-                "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0",
+                "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae",
+                "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae",
                 "shasum": ""
             },
             "require": {
@@ -83,7 +83,7 @@
             "require-dev": {
                 "php-coveralls/php-coveralls": "^2.2",
                 "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0",
-                "vimeo/psalm": "4.3.2"
+                "vimeo/psalm": "4.9.2"
             },
             "type": "library",
             "autoload": {
@@ -108,46 +108,121 @@
             ],
             "support": {
                 "issues": "https://github.com/brick/math/issues",
-                "source": "https://github.com/brick/math/tree/0.9.2"
+                "source": "https://github.com/brick/math/tree/0.9.3"
             },
             "funding": [
+                {
+                    "url": "https://github.com/BenMorel",
+                    "type": "github"
+                },
                 {
                     "url": "https://tidelift.com/funding/github/packagist/brick/math",
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-01-20T22:51:39+00:00"
+            "time": "2021-08-15T20:50:18+00:00"
         },
         {
-            "name": "doctrine/inflector",
-            "version": "2.0.3",
+            "name": "dflydev/dot-access-data",
+            "version": "v3.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/doctrine/inflector.git",
-                "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210"
+                "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
+                "reference": "0992cc19268b259a39e86f296da5f0677841f42c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210",
-                "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210",
+                "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c",
+                "reference": "0992cc19268b259a39e86f296da5f0677841f42c",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.2 || ^8.0"
+                "php": "^7.1 || ^8.0"
             },
             "require-dev": {
-                "doctrine/coding-standard": "^7.0",
-                "phpstan/phpstan": "^0.11",
-                "phpstan/phpstan-phpunit": "^0.11",
-                "phpstan/phpstan-strict-rules": "^0.11",
-                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+                "phpstan/phpstan": "^0.12.42",
+                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3",
+                "scrutinizer/ocular": "1.6.0",
+                "squizlabs/php_codesniffer": "^3.5",
+                "vimeo/psalm": "^3.14"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0.x-dev"
+                    "dev-main": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Dflydev\\DotAccessData\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Dragonfly Development Inc.",
+                    "email": "info@dflydev.com",
+                    "homepage": "http://dflydev.com"
+                },
+                {
+                    "name": "Beau Simensen",
+                    "email": "beau@dflydev.com",
+                    "homepage": "http://beausimensen.com"
+                },
+                {
+                    "name": "Carlos Frutos",
+                    "email": "carlos@kiwing.it",
+                    "homepage": "https://github.com/cfrutos"
+                },
+                {
+                    "name": "Colin O'Dell",
+                    "email": "colinodell@gmail.com",
+                    "homepage": "https://www.colinodell.com"
                 }
+            ],
+            "description": "Given a deep data structure, access data by dot notation.",
+            "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
+            "keywords": [
+                "access",
+                "data",
+                "dot",
+                "notation"
+            ],
+            "support": {
+                "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
+                "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1"
+            },
+            "time": "2021-08-13T13:06:58+00:00"
+        },
+        {
+            "name": "doctrine/inflector",
+            "version": "2.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/inflector.git",
+                "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89",
+                "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
             },
+            "require-dev": {
+                "doctrine/coding-standard": "^8.2",
+                "phpstan/phpstan": "^0.12",
+                "phpstan/phpstan-phpunit": "^0.12",
+                "phpstan/phpstan-strict-rules": "^0.12",
+                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
+                "vimeo/psalm": "^4.10"
+            },
+            "type": "library",
             "autoload": {
                 "psr-4": {
                     "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
@@ -195,7 +270,7 @@
             ],
             "support": {
                 "issues": "https://github.com/doctrine/inflector/issues",
-                "source": "https://github.com/doctrine/inflector/tree/2.0.x"
+                "source": "https://github.com/doctrine/inflector/tree/2.0.4"
             },
             "funding": [
                 {
@@ -211,36 +286,32 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-05-29T15:13:26+00:00"
+            "time": "2021-10-22T20:16:43+00:00"
         },
         {
             "name": "doctrine/lexer",
-            "version": "1.2.1",
+            "version": "1.2.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/lexer.git",
-                "reference": "e864bbf5904cb8f5bb334f99209b48018522f042"
+                "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042",
-                "reference": "e864bbf5904cb8f5bb334f99209b48018522f042",
+                "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229",
+                "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.2 || ^8.0"
+                "php": "^7.1 || ^8.0"
             },
             "require-dev": {
-                "doctrine/coding-standard": "^6.0",
-                "phpstan/phpstan": "^0.11.8",
-                "phpunit/phpunit": "^8.2"
+                "doctrine/coding-standard": "^9.0",
+                "phpstan/phpstan": "^1.3",
+                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+                "vimeo/psalm": "^4.11"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.2.x-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
@@ -275,7 +346,7 @@
             ],
             "support": {
                 "issues": "https://github.com/doctrine/lexer/issues",
-                "source": "https://github.com/doctrine/lexer/tree/1.2.1"
+                "source": "https://github.com/doctrine/lexer/tree/1.2.3"
             },
             "funding": [
                 {
@@ -291,33 +362,33 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-05-25T17:44:05+00:00"
+            "time": "2022-02-28T11:07:21+00:00"
         },
         {
             "name": "dragonmantank/cron-expression",
-            "version": "v3.1.0",
+            "version": "v3.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/dragonmantank/cron-expression.git",
-                "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c"
+                "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c",
-                "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c",
+                "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/be85b3f05b46c39bbc0d95f6c071ddff669510fa",
+                "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.2|^8.0",
-                "webmozart/assert": "^1.7.0"
+                "webmozart/assert": "^1.0"
             },
             "replace": {
                 "mtdowling/cron-expression": "^1.0"
             },
             "require-dev": {
                 "phpstan/extension-installer": "^1.0",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-webmozart-assert": "^0.12.7",
+                "phpstan/phpstan": "^1.0",
+                "phpstan/phpstan-webmozart-assert": "^1.0",
                 "phpunit/phpunit": "^7.0|^8.0|^9.0"
             },
             "type": "library",
@@ -344,7 +415,7 @@
             ],
             "support": {
                 "issues": "https://github.com/dragonmantank/cron-expression/issues",
-                "source": "https://github.com/dragonmantank/cron-expression/tree/v3.1.0"
+                "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.1"
             },
             "funding": [
                 {
@@ -352,7 +423,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-11-24T19:55:57+00:00"
+            "time": "2022-01-18T15:43:28+00:00"
         },
         {
             "name": "egulias/email-validator",
@@ -482,28 +553,26 @@
         },
         {
             "name": "fruitcake/laravel-cors",
-            "version": "v2.0.4",
+            "version": "v2.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/fruitcake/laravel-cors.git",
-                "reference": "a8ccedc7ca95189ead0e407c43b530dc17791d6a"
+                "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/a8ccedc7ca95189ead0e407c43b530dc17791d6a",
-                "reference": "a8ccedc7ca95189ead0e407c43b530dc17791d6a",
+                "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/783a74f5e3431d7b9805be8afb60fd0a8f743534",
+                "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534",
                 "shasum": ""
             },
             "require": {
                 "asm89/stack-cors": "^2.0.1",
                 "illuminate/contracts": "^6|^7|^8|^9",
                 "illuminate/support": "^6|^7|^8|^9",
-                "php": ">=7.2",
-                "symfony/http-foundation": "^4|^5",
-                "symfony/http-kernel": "^4.3.4|^5"
+                "php": ">=7.2"
             },
             "require-dev": {
-                "laravel/framework": "^6|^7|^8",
+                "laravel/framework": "^6|^7.24|^8",
                 "orchestra/testbench-dusk": "^4|^5|^6|^7",
                 "phpunit/phpunit": "^6|^7|^8|^9",
                 "squizlabs/php_codesniffer": "^3.5"
@@ -511,7 +580,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0-dev"
+                    "dev-master": "2.1-dev"
                 },
                 "laravel": {
                     "providers": [
@@ -547,28 +616,32 @@
             ],
             "support": {
                 "issues": "https://github.com/fruitcake/laravel-cors/issues",
-                "source": "https://github.com/fruitcake/laravel-cors/tree/v2.0.4"
+                "source": "https://github.com/fruitcake/laravel-cors/tree/v2.2.0"
             },
             "funding": [
+                {
+                    "url": "https://fruitcake.nl",
+                    "type": "custom"
+                },
                 {
                     "url": "https://github.com/barryvdh",
                     "type": "github"
                 }
             ],
-            "time": "2021-04-26T11:24:25+00:00"
+            "time": "2022-02-23T14:25:13+00:00"
         },
         {
             "name": "globalcitizen/php-iban",
-            "version": "v4.0.0",
+            "version": "v4.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/globalcitizen/php-iban.git",
-                "reference": "a8b0a1bbf42f25d977a28270787212542ba7e71d"
+                "reference": "5bf5d7df0bd0158460897f2b9c26eda91bbf9b7d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/globalcitizen/php-iban/zipball/a8b0a1bbf42f25d977a28270787212542ba7e71d",
-                "reference": "a8b0a1bbf42f25d977a28270787212542ba7e71d",
+                "url": "https://api.github.com/repos/globalcitizen/php-iban/zipball/5bf5d7df0bd0158460897f2b9c26eda91bbf9b7d",
+                "reference": "5bf5d7df0bd0158460897f2b9c26eda91bbf9b7d",
                 "shasum": ""
             },
             "type": "library",
@@ -585,37 +658,32 @@
             "description": "php-iban is a library for parsing and validating IBAN (and IIBAN) bank account information.",
             "support": {
                 "issues": "https://github.com/globalcitizen/php-iban/issues",
-                "source": "https://github.com/globalcitizen/php-iban/tree/v4.0.0"
+                "source": "https://github.com/globalcitizen/php-iban/tree/v4.1.0"
             },
-            "time": "2020-08-24T08:27:30+00:00"
+            "time": "2021-07-01T23:55:02+00:00"
         },
         {
             "name": "graham-campbell/result-type",
-            "version": "v1.0.1",
+            "version": "v1.0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/GrahamCampbell/Result-Type.git",
-                "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb"
+                "reference": "0690bde05318336c7221785f2a932467f98b64ca"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb",
-                "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb",
+                "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca",
+                "reference": "0690bde05318336c7221785f2a932467f98b64ca",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.0|^8.0",
-                "phpoption/phpoption": "^1.7.3"
+                "php": "^7.0 || ^8.0",
+                "phpoption/phpoption": "^1.8"
             },
             "require-dev": {
-                "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0"
+                "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "GrahamCampbell\\ResultType\\": "src/"
@@ -628,7 +696,8 @@
             "authors": [
                 {
                     "name": "Graham Campbell",
-                    "email": "graham@alt-three.com"
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
                 }
             ],
             "description": "An Implementation Of The Result Type",
@@ -641,7 +710,7 @@
             ],
             "support": {
                 "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
-                "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.1"
+                "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4"
             },
             "funding": [
                 {
@@ -653,28 +722,29 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-04-13T13:17:36+00:00"
+            "time": "2021-11-21T21:41:47+00:00"
         },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "7.3.0",
+            "version": "7.4.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "7008573787b430c1c1f650e3722d9bba59967628"
+                "reference": "ac1ec1cd9b5624694c3a40be801d94137afb12b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628",
-                "reference": "7008573787b430c1c1f650e3722d9bba59967628",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ac1ec1cd9b5624694c3a40be801d94137afb12b4",
+                "reference": "ac1ec1cd9b5624694c3a40be801d94137afb12b4",
                 "shasum": ""
             },
             "require": {
                 "ext-json": "*",
-                "guzzlehttp/promises": "^1.4",
-                "guzzlehttp/psr7": "^1.7 || ^2.0",
+                "guzzlehttp/promises": "^1.5",
+                "guzzlehttp/psr7": "^1.8.3 || ^2.1",
                 "php": "^7.2.5 || ^8.0",
-                "psr/http-client": "^1.0"
+                "psr/http-client": "^1.0",
+                "symfony/deprecation-contracts": "^2.2 || ^3.0"
             },
             "provide": {
                 "psr/http-client-implementation": "1.0"
@@ -684,7 +754,7 @@
                 "ext-curl": "*",
                 "php-http/client-integration-tests": "^3.0",
                 "phpunit/phpunit": "^8.5.5 || ^9.3.5",
-                "psr/log": "^1.1"
+                "psr/log": "^1.1 || ^2.0 || ^3.0"
             },
             "suggest": {
                 "ext-curl": "Required for CURL handler support",
@@ -694,35 +764,59 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "7.3-dev"
+                    "dev-master": "7.4-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "GuzzleHttp\\": "src/"
-                },
                 "files": [
                     "src/functions_include.php"
-                ]
+                ],
+                "psr-4": {
+                    "GuzzleHttp\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
             "authors": [
+                {
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
+                },
                 {
                     "name": "Michael Dowling",
                     "email": "mtdowling@gmail.com",
                     "homepage": "https://github.com/mtdowling"
                 },
+                {
+                    "name": "Jeremy Lindblom",
+                    "email": "jeremeamia@gmail.com",
+                    "homepage": "https://github.com/jeremeamia"
+                },
+                {
+                    "name": "George Mponos",
+                    "email": "gmponos@gmail.com",
+                    "homepage": "https://github.com/gmponos"
+                },
+                {
+                    "name": "Tobias Nyholm",
+                    "email": "tobias.nyholm@gmail.com",
+                    "homepage": "https://github.com/Nyholm"
+                },
                 {
                     "name": "Márk Sági-Kazár",
                     "email": "mark.sagikazar@gmail.com",
-                    "homepage": "https://sagikazarmark.hu"
+                    "homepage": "https://github.com/sagikazarmark"
+                },
+                {
+                    "name": "Tobias Schultze",
+                    "email": "webmaster@tubo-world.de",
+                    "homepage": "https://github.com/Tobion"
                 }
             ],
             "description": "Guzzle is a PHP HTTP client library",
-            "homepage": "http://guzzlephp.org/",
             "keywords": [
                 "client",
                 "curl",
@@ -736,7 +830,7 @@
             ],
             "support": {
                 "issues": "https://github.com/guzzle/guzzle/issues",
-                "source": "https://github.com/guzzle/guzzle/tree/7.3.0"
+                "source": "https://github.com/guzzle/guzzle/tree/7.4.2"
             },
             "funding": [
                 {
@@ -748,28 +842,24 @@
                     "type": "github"
                 },
                 {
-                    "url": "https://github.com/alexeyshockov",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/gmponos",
-                    "type": "github"
+                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+                    "type": "tidelift"
                 }
             ],
-            "time": "2021-03-23T11:33:13+00:00"
+            "time": "2022-03-20T14:16:28+00:00"
         },
         {
             "name": "guzzlehttp/promises",
-            "version": "1.4.1",
+            "version": "1.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/promises.git",
-                "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d"
+                "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d",
-                "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d",
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
+                "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
                 "shasum": ""
             },
             "require": {
@@ -781,26 +871,41 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4-dev"
+                    "dev-master": "1.5-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "GuzzleHttp\\Promise\\": "src/"
-                },
                 "files": [
                     "src/functions_include.php"
-                ]
+                ],
+                "psr-4": {
+                    "GuzzleHttp\\Promise\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
             "authors": [
+                {
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
+                },
                 {
                     "name": "Michael Dowling",
                     "email": "mtdowling@gmail.com",
                     "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Tobias Nyholm",
+                    "email": "tobias.nyholm@gmail.com",
+                    "homepage": "https://github.com/Nyholm"
+                },
+                {
+                    "name": "Tobias Schultze",
+                    "email": "webmaster@tubo-world.de",
+                    "homepage": "https://github.com/Tobion"
                 }
             ],
             "description": "Guzzle promises library",
@@ -809,35 +914,52 @@
             ],
             "support": {
                 "issues": "https://github.com/guzzle/promises/issues",
-                "source": "https://github.com/guzzle/promises/tree/1.4.1"
+                "source": "https://github.com/guzzle/promises/tree/1.5.1"
             },
-            "time": "2021-03-07T09:25:29+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/Nyholm",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-10-22T20:56:57+00:00"
         },
         {
             "name": "guzzlehttp/psr7",
-            "version": "1.8.2",
+            "version": "2.2.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/psr7.git",
-                "reference": "dc960a912984efb74d0a90222870c72c87f10c91"
+                "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91",
-                "reference": "dc960a912984efb74d0a90222870c72c87f10c91",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/c94a94f120803a18554c1805ef2e539f8285f9a2",
+                "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.4.0",
-                "psr/http-message": "~1.0",
-                "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
+                "php": "^7.2.5 || ^8.0",
+                "psr/http-factory": "^1.0",
+                "psr/http-message": "^1.0",
+                "ralouphie/getallheaders": "^3.0"
             },
             "provide": {
+                "psr/http-factory-implementation": "1.0",
                 "psr/http-message-implementation": "1.0"
             },
             "require-dev": {
-                "ext-zlib": "*",
-                "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
+                "bamarni/composer-bin-plugin": "^1.4.1",
+                "http-interop/http-factory-tests": "^0.9",
+                "phpunit/phpunit": "^8.5.8 || ^9.3.10"
             },
             "suggest": {
                 "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@@ -845,30 +967,53 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.7-dev"
+                    "dev-master": "2.2-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
                     "GuzzleHttp\\Psr7\\": "src/"
-                },
-                "files": [
-                    "src/functions_include.php"
-                ]
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
             "authors": [
+                {
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
+                },
                 {
                     "name": "Michael Dowling",
                     "email": "mtdowling@gmail.com",
                     "homepage": "https://github.com/mtdowling"
                 },
+                {
+                    "name": "George Mponos",
+                    "email": "gmponos@gmail.com",
+                    "homepage": "https://github.com/gmponos"
+                },
+                {
+                    "name": "Tobias Nyholm",
+                    "email": "tobias.nyholm@gmail.com",
+                    "homepage": "https://github.com/Nyholm"
+                },
+                {
+                    "name": "Márk Sági-Kazár",
+                    "email": "mark.sagikazar@gmail.com",
+                    "homepage": "https://github.com/sagikazarmark"
+                },
                 {
                     "name": "Tobias Schultze",
+                    "email": "webmaster@tubo-world.de",
                     "homepage": "https://github.com/Tobion"
+                },
+                {
+                    "name": "Márk Sági-Kazár",
+                    "email": "mark.sagikazar@gmail.com",
+                    "homepage": "https://sagikazarmark.hu"
                 }
             ],
             "description": "PSR-7 message implementation that also provides common utility methods",
@@ -884,32 +1029,46 @@
             ],
             "support": {
                 "issues": "https://github.com/guzzle/psr7/issues",
-                "source": "https://github.com/guzzle/psr7/tree/1.8.2"
+                "source": "https://github.com/guzzle/psr7/tree/2.2.1"
             },
-            "time": "2021-04-26T09:17:50+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/Nyholm",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2022-03-20T21:55:58+00:00"
         },
         {
             "name": "intervention/image",
-            "version": "2.5.1",
+            "version": "2.7.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Intervention/image.git",
-                "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e"
+                "reference": "744ebba495319501b873a4e48787759c72e3fb8c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Intervention/image/zipball/abbf18d5ab8367f96b3205ca3c89fb2fa598c69e",
-                "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e",
+                "url": "https://api.github.com/repos/Intervention/image/zipball/744ebba495319501b873a4e48787759c72e3fb8c",
+                "reference": "744ebba495319501b873a4e48787759c72e3fb8c",
                 "shasum": ""
             },
             "require": {
                 "ext-fileinfo": "*",
-                "guzzlehttp/psr7": "~1.1",
+                "guzzlehttp/psr7": "~1.1 || ^2.0",
                 "php": ">=5.4.0"
             },
             "require-dev": {
                 "mockery/mockery": "~0.9.2",
-                "phpunit/phpunit": "^4.8 || ^5.7"
+                "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15"
             },
             "suggest": {
                 "ext-gd": "to use GD library based image processing.",
@@ -958,22 +1117,32 @@
             ],
             "support": {
                 "issues": "https://github.com/Intervention/image/issues",
-                "source": "https://github.com/Intervention/image/tree/master"
+                "source": "https://github.com/Intervention/image/tree/2.7.1"
             },
-            "time": "2019-11-02T09:15:47+00:00"
+            "funding": [
+                {
+                    "url": "https://www.paypal.me/interventionphp",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/Intervention",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-12-16T16:49:26+00:00"
         },
         {
             "name": "jaybizzle/crawler-detect",
-            "version": "v1.2.106",
+            "version": "v1.2.111",
             "source": {
                 "type": "git",
                 "url": "https://github.com/JayBizzle/Crawler-Detect.git",
-                "reference": "78bf6792cbf9c569dc0bf2465481978fd2ed0de9"
+                "reference": "d572ed4a65a70a2d2871dc5137c9c5b7e69745ab"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/78bf6792cbf9c569dc0bf2465481978fd2ed0de9",
-                "reference": "78bf6792cbf9c569dc0bf2465481978fd2ed0de9",
+                "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/d572ed4a65a70a2d2871dc5137c9c5b7e69745ab",
+                "reference": "d572ed4a65a70a2d2871dc5137c9c5b7e69745ab",
                 "shasum": ""
             },
             "require": {
@@ -1010,9 +1179,9 @@
             ],
             "support": {
                 "issues": "https://github.com/JayBizzle/Crawler-Detect/issues",
-                "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.106"
+                "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.111"
             },
-            "time": "2021-05-24T20:30:32+00:00"
+            "time": "2022-03-15T22:19:01+00:00"
         },
         {
             "name": "jenssegers/agent",
@@ -1099,16 +1268,16 @@
         },
         {
             "name": "laravel/framework",
-            "version": "v8.44.0",
+            "version": "v8.83.12",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/framework.git",
-                "reference": "7b3b27dc8911ab02a69731af2ba97b5130b2ddb8"
+                "reference": "2af2314989845db68dfbb65a54b8748ffaf26204"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/framework/zipball/7b3b27dc8911ab02a69731af2ba97b5130b2ddb8",
-                "reference": "7b3b27dc8911ab02a69731af2ba97b5130b2ddb8",
+                "url": "https://api.github.com/repos/laravel/framework/zipball/2af2314989845db68dfbb65a54b8748ffaf26204",
+                "reference": "2af2314989845db68dfbb65a54b8748ffaf26204",
                 "shasum": ""
             },
             "require": {
@@ -1118,34 +1287,37 @@
                 "ext-json": "*",
                 "ext-mbstring": "*",
                 "ext-openssl": "*",
-                "league/commonmark": "^1.3",
+                "laravel/serializable-closure": "^1.0",
+                "league/commonmark": "^1.3|^2.0.2",
                 "league/flysystem": "^1.1",
                 "monolog/monolog": "^2.0",
-                "nesbot/carbon": "^2.31",
+                "nesbot/carbon": "^2.53.1",
                 "opis/closure": "^3.6",
                 "php": "^7.3|^8.0",
                 "psr/container": "^1.0",
+                "psr/log": "^1.0|^2.0",
                 "psr/simple-cache": "^1.0",
-                "ramsey/uuid": "^4.0",
-                "swiftmailer/swiftmailer": "^6.0",
-                "symfony/console": "^5.1.4",
-                "symfony/error-handler": "^5.1.4",
-                "symfony/finder": "^5.1.4",
-                "symfony/http-foundation": "^5.1.4",
-                "symfony/http-kernel": "^5.1.4",
-                "symfony/mime": "^5.1.4",
-                "symfony/process": "^5.1.4",
-                "symfony/routing": "^5.1.4",
-                "symfony/var-dumper": "^5.1.4",
+                "ramsey/uuid": "^4.2.2",
+                "swiftmailer/swiftmailer": "^6.3",
+                "symfony/console": "^5.4",
+                "symfony/error-handler": "^5.4",
+                "symfony/finder": "^5.4",
+                "symfony/http-foundation": "^5.4",
+                "symfony/http-kernel": "^5.4",
+                "symfony/mime": "^5.4",
+                "symfony/process": "^5.4",
+                "symfony/routing": "^5.4",
+                "symfony/var-dumper": "^5.4",
                 "tijsverkoyen/css-to-inline-styles": "^2.2.2",
-                "vlucas/phpdotenv": "^5.2",
-                "voku/portable-ascii": "^1.4.8"
+                "vlucas/phpdotenv": "^5.4.1",
+                "voku/portable-ascii": "^1.6.1"
             },
             "conflict": {
                 "tightenco/collect": "<5.5.33"
             },
             "provide": {
-                "psr/container-implementation": "1.0"
+                "psr/container-implementation": "1.0",
+                "psr/simple-cache-implementation": "1.0"
             },
             "replace": {
                 "illuminate/auth": "self.version",
@@ -1181,22 +1353,24 @@
                 "illuminate/view": "self.version"
             },
             "require-dev": {
-                "aws/aws-sdk-php": "^3.155",
-                "doctrine/dbal": "^2.6|^3.0",
-                "filp/whoops": "^2.8",
+                "aws/aws-sdk-php": "^3.198.1",
+                "doctrine/dbal": "^2.13.3|^3.1.4",
+                "filp/whoops": "^2.14.3",
                 "guzzlehttp/guzzle": "^6.5.5|^7.0.1",
                 "league/flysystem-cached-adapter": "^1.0",
-                "mockery/mockery": "^1.4.2",
-                "orchestra/testbench-core": "^6.8",
+                "mockery/mockery": "^1.4.4",
+                "orchestra/testbench-core": "^6.27",
                 "pda/pheanstalk": "^4.0",
-                "phpunit/phpunit": "^8.5.8|^9.3.3",
-                "predis/predis": "^1.1.1",
-                "symfony/cache": "^5.1.4"
+                "phpunit/phpunit": "^8.5.19|^9.5.8",
+                "predis/predis": "^1.1.9",
+                "symfony/cache": "^5.4"
             },
             "suggest": {
-                "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).",
+                "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
+                "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).",
                 "brianium/paratest": "Required to run tests in parallel (^6.0).",
-                "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6|^3.0).",
+                "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).",
+                "ext-bcmath": "Required to use the multiple_of validation rule.",
                 "ext-ftp": "Required to use the Flysystem FTP driver.",
                 "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().",
                 "ext-memcached": "Required to use the memcache cache driver.",
@@ -1204,21 +1378,21 @@
                 "ext-posix": "Required to use all features of the queue worker.",
                 "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).",
                 "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).",
-                "filp/whoops": "Required for friendly error pages in development (^2.8).",
+                "filp/whoops": "Required for friendly error pages in development (^2.14.3).",
                 "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).",
                 "laravel/tinker": "Required to use the tinker console command (^2.0).",
                 "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).",
                 "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).",
                 "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).",
-                "mockery/mockery": "Required to use mocking (^1.4.2).",
+                "mockery/mockery": "Required to use mocking (^1.4.4).",
                 "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
                 "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).",
-                "phpunit/phpunit": "Required to use assertions and run tests (^8.5.8|^9.3.3).",
-                "predis/predis": "Required to use the predis connector (^1.1.2).",
+                "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).",
+                "predis/predis": "Required to use the predis connector (^1.1.9).",
                 "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
-                "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0).",
-                "symfony/cache": "Required to PSR-6 cache bridge (^5.1.4).",
-                "symfony/filesystem": "Required to enable support for relative symbolic links (^5.1.4).",
+                "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0|^7.0).",
+                "symfony/cache": "Required to PSR-6 cache bridge (^5.4).",
+                "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).",
                 "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).",
                 "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)."
             },
@@ -1263,36 +1437,95 @@
                 "issues": "https://github.com/laravel/framework/issues",
                 "source": "https://github.com/laravel/framework"
             },
-            "time": "2021-05-27T16:46:06+00:00"
+            "time": "2022-05-10T13:57:07+00:00"
+        },
+        {
+            "name": "laravel/serializable-closure",
+            "version": "v1.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laravel/serializable-closure.git",
+                "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/9e4b005daa20b0c161f3845040046dc9ddc1d74e",
+                "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.3|^8.0"
+            },
+            "require-dev": {
+                "pestphp/pest": "^1.18",
+                "phpstan/phpstan": "^0.12.98",
+                "symfony/var-dumper": "^5.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laravel\\SerializableClosure\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                },
+                {
+                    "name": "Nuno Maduro",
+                    "email": "nuno@laravel.com"
+                }
+            ],
+            "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
+            "keywords": [
+                "closure",
+                "laravel",
+                "serializable"
+            ],
+            "support": {
+                "issues": "https://github.com/laravel/serializable-closure/issues",
+                "source": "https://github.com/laravel/serializable-closure"
+            },
+            "time": "2022-02-11T19:23:53+00:00"
         },
         {
             "name": "laravel/tinker",
-            "version": "v2.6.1",
+            "version": "v2.7.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/tinker.git",
-                "reference": "04ad32c1a3328081097a181875733fa51f402083"
+                "reference": "dff39b661e827dae6e092412f976658df82dbac5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/tinker/zipball/04ad32c1a3328081097a181875733fa51f402083",
-                "reference": "04ad32c1a3328081097a181875733fa51f402083",
+                "url": "https://api.github.com/repos/laravel/tinker/zipball/dff39b661e827dae6e092412f976658df82dbac5",
+                "reference": "dff39b661e827dae6e092412f976658df82dbac5",
                 "shasum": ""
             },
             "require": {
-                "illuminate/console": "^6.0|^7.0|^8.0",
-                "illuminate/contracts": "^6.0|^7.0|^8.0",
-                "illuminate/support": "^6.0|^7.0|^8.0",
+                "illuminate/console": "^6.0|^7.0|^8.0|^9.0",
+                "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0",
+                "illuminate/support": "^6.0|^7.0|^8.0|^9.0",
                 "php": "^7.2.5|^8.0",
-                "psy/psysh": "^0.10.4",
-                "symfony/var-dumper": "^4.3.4|^5.0"
+                "psy/psysh": "^0.10.4|^0.11.1",
+                "symfony/var-dumper": "^4.3.4|^5.0|^6.0"
             },
             "require-dev": {
                 "mockery/mockery": "~1.3.3|^1.4.2",
                 "phpunit/phpunit": "^8.5.8|^9.3.3"
             },
             "suggest": {
-                "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0)."
+                "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)."
             },
             "type": "library",
             "extra": {
@@ -1329,48 +1562,60 @@
             ],
             "support": {
                 "issues": "https://github.com/laravel/tinker/issues",
-                "source": "https://github.com/laravel/tinker/tree/v2.6.1"
+                "source": "https://github.com/laravel/tinker/tree/v2.7.2"
             },
-            "time": "2021-03-02T16:53:12+00:00"
+            "time": "2022-03-23T12:38:24+00:00"
         },
         {
             "name": "league/commonmark",
-            "version": "1.6.2",
+            "version": "2.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/commonmark.git",
-                "reference": "7d70d2f19c84bcc16275ea47edabee24747352eb"
+                "reference": "32a49eb2b38fe5e5c417ab748a45d0beaab97955"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/7d70d2f19c84bcc16275ea47edabee24747352eb",
-                "reference": "7d70d2f19c84bcc16275ea47edabee24747352eb",
+                "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/32a49eb2b38fe5e5c417ab748a45d0beaab97955",
+                "reference": "32a49eb2b38fe5e5c417ab748a45d0beaab97955",
                 "shasum": ""
             },
             "require": {
                 "ext-mbstring": "*",
-                "php": "^7.1 || ^8.0"
-            },
-            "conflict": {
-                "scrutinizer/ocular": "1.7.*"
+                "league/config": "^1.1.1",
+                "php": "^7.4 || ^8.0",
+                "psr/event-dispatcher": "^1.0",
+                "symfony/deprecation-contracts": "^2.1 || ^3.0",
+                "symfony/polyfill-php80": "^1.16"
             },
             "require-dev": {
-                "cebe/markdown": "~1.0",
-                "commonmark/commonmark.js": "0.29.2",
-                "erusev/parsedown": "~1.0",
+                "cebe/markdown": "^1.0",
+                "commonmark/cmark": "0.30.0",
+                "commonmark/commonmark.js": "0.30.0",
+                "composer/package-versions-deprecated": "^1.8",
+                "embed/embed": "^4.4",
+                "erusev/parsedown": "^1.0",
                 "ext-json": "*",
                 "github/gfm": "0.29.0",
-                "michelf/php-markdown": "~1.4",
-                "mikehaertl/php-shellcommand": "^1.4",
-                "phpstan/phpstan": "^0.12",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2",
-                "scrutinizer/ocular": "^1.5",
-                "symfony/finder": "^4.2"
+                "michelf/php-markdown": "^1.4",
+                "nyholm/psr7": "^1.5",
+                "phpstan/phpstan": "^0.12.88 || ^1.0.0",
+                "phpunit/phpunit": "^9.5.5",
+                "scrutinizer/ocular": "^1.8.1",
+                "symfony/finder": "^5.3",
+                "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0",
+                "unleashedtech/php-coding-standard": "^3.1",
+                "vimeo/psalm": "^4.7.3"
+            },
+            "suggest": {
+                "symfony/yaml": "v2.3+ required if using the Front Matter extension"
             },
-            "bin": [
-                "bin/commonmark"
-            ],
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "2.4-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
                     "League\\CommonMark\\": "src"
@@ -1388,7 +1633,7 @@
                     "role": "Lead Developer"
                 }
             ],
-            "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)",
+            "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)",
             "homepage": "https://commonmark.thephpleague.com",
             "keywords": [
                 "commonmark",
@@ -1402,15 +1647,12 @@
             ],
             "support": {
                 "docs": "https://commonmark.thephpleague.com/",
+                "forum": "https://github.com/thephpleague/commonmark/discussions",
                 "issues": "https://github.com/thephpleague/commonmark/issues",
                 "rss": "https://github.com/thephpleague/commonmark/releases.atom",
                 "source": "https://github.com/thephpleague/commonmark"
             },
             "funding": [
-                {
-                    "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark",
-                    "type": "custom"
-                },
                 {
                     "url": "https://www.colinodell.com/sponsor",
                     "type": "custom"
@@ -1423,29 +1665,107 @@
                     "url": "https://github.com/colinodell",
                     "type": "github"
                 },
-                {
-                    "url": "https://www.patreon.com/colinodell",
-                    "type": "patreon"
-                },
                 {
                     "url": "https://tidelift.com/funding/github/packagist/league/commonmark",
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-12T11:39:41+00:00"
+            "time": "2022-04-07T22:37:05+00:00"
+        },
+        {
+            "name": "league/config",
+            "version": "v1.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/thephpleague/config.git",
+                "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e",
+                "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e",
+                "shasum": ""
+            },
+            "require": {
+                "dflydev/dot-access-data": "^3.0.1",
+                "nette/schema": "^1.2",
+                "php": "^7.4 || ^8.0"
+            },
+            "require-dev": {
+                "phpstan/phpstan": "^0.12.90",
+                "phpunit/phpunit": "^9.5.5",
+                "scrutinizer/ocular": "^1.8.1",
+                "unleashedtech/php-coding-standard": "^3.1",
+                "vimeo/psalm": "^4.7.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.2-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "League\\Config\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Colin O'Dell",
+                    "email": "colinodell@gmail.com",
+                    "homepage": "https://www.colinodell.com",
+                    "role": "Lead Developer"
+                }
+            ],
+            "description": "Define configuration arrays with strict schemas and access values with dot notation",
+            "homepage": "https://config.thephpleague.com",
+            "keywords": [
+                "array",
+                "config",
+                "configuration",
+                "dot",
+                "dot-access",
+                "nested",
+                "schema"
+            ],
+            "support": {
+                "docs": "https://config.thephpleague.com/",
+                "issues": "https://github.com/thephpleague/config/issues",
+                "rss": "https://github.com/thephpleague/config/releases.atom",
+                "source": "https://github.com/thephpleague/config"
+            },
+            "funding": [
+                {
+                    "url": "https://www.colinodell.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.paypal.me/colinpodell/10.00",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/colinodell",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-08-14T12:15:32+00:00"
         },
         {
             "name": "league/flysystem",
-            "version": "1.1.3",
+            "version": "1.1.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/flysystem.git",
-                "reference": "9be3b16c877d477357c015cec057548cf9b2a14a"
+                "reference": "094defdb4a7001845300334e7c1ee2335925ef99"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/9be3b16c877d477357c015cec057548cf9b2a14a",
-                "reference": "9be3b16c877d477357c015cec057548cf9b2a14a",
+                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99",
+                "reference": "094defdb4a7001845300334e7c1ee2335925ef99",
                 "shasum": ""
             },
             "require": {
@@ -1461,7 +1781,6 @@
                 "phpunit/phpunit": "^8.5.8"
             },
             "suggest": {
-                "ext-fileinfo": "Required for MimeType",
                 "ext-ftp": "Allows you to use FTP server storage",
                 "ext-openssl": "Allows you to use FTPS server storage",
                 "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
@@ -1519,7 +1838,7 @@
             ],
             "support": {
                 "issues": "https://github.com/thephpleague/flysystem/issues",
-                "source": "https://github.com/thephpleague/flysystem/tree/1.x"
+                "source": "https://github.com/thephpleague/flysystem/tree/1.1.9"
             },
             "funding": [
                 {
@@ -1527,20 +1846,20 @@
                     "type": "other"
                 }
             ],
-            "time": "2020-08-23T07:39:11+00:00"
+            "time": "2021-12-09T09:40:50+00:00"
         },
         {
             "name": "league/mime-type-detection",
-            "version": "1.7.0",
+            "version": "1.11.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/thephpleague/mime-type-detection.git",
-                "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3"
+                "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3",
-                "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3",
+                "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd",
+                "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd",
                 "shasum": ""
             },
             "require": {
@@ -1548,7 +1867,7 @@
                 "php": "^7.2 || ^8.0"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.18",
+                "friendsofphp/php-cs-fixer": "^3.2",
                 "phpstan/phpstan": "^0.12.68",
                 "phpunit/phpunit": "^8.5.8 || ^9.3"
             },
@@ -1571,7 +1890,7 @@
             "description": "Mime-type detection for Flysystem",
             "support": {
                 "issues": "https://github.com/thephpleague/mime-type-detection/issues",
-                "source": "https://github.com/thephpleague/mime-type-detection/tree/1.7.0"
+                "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0"
             },
             "funding": [
                 {
@@ -1583,20 +1902,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-01-18T20:58:21+00:00"
+            "time": "2022-04-17T13:12:02+00:00"
         },
         {
             "name": "mcamara/laravel-localization",
-            "version": "1.6.1",
+            "version": "1.6.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/mcamara/laravel-localization.git",
-                "reference": "4f0bfd89e5ee8100cb8cff8ca2cc3b985ed46694"
+                "reference": "645819da9ef29f3ba7588d9b4598799caf0b2463"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/mcamara/laravel-localization/zipball/4f0bfd89e5ee8100cb8cff8ca2cc3b985ed46694",
-                "reference": "4f0bfd89e5ee8100cb8cff8ca2cc3b985ed46694",
+                "url": "https://api.github.com/repos/mcamara/laravel-localization/zipball/645819da9ef29f3ba7588d9b4598799caf0b2463",
+                "reference": "645819da9ef29f3ba7588d9b4598799caf0b2463",
                 "shasum": ""
             },
             "require": {
@@ -1622,10 +1941,10 @@
                 }
             },
             "autoload": {
-                "classmap": [],
                 "psr-0": {
                     "Mcamara\\LaravelLocalization": "src/"
-                }
+                },
+                "classmap": []
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1647,7 +1966,7 @@
             ],
             "support": {
                 "issues": "https://github.com/mcamara/laravel-localization/issues",
-                "source": "https://github.com/mcamara/laravel-localization/tree/1.6.1"
+                "source": "https://github.com/mcamara/laravel-localization/tree/1.6.2"
             },
             "funding": [
                 {
@@ -1659,35 +1978,35 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-10-01T07:45:06+00:00"
+            "time": "2021-10-24T11:55:35+00:00"
         },
         {
             "name": "mews/captcha",
-            "version": "3.2.6",
+            "version": "3.2.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/mewebstudio/captcha.git",
-                "reference": "42c1b320e4cad1f6ec9a395da36d7eda5b67d122"
+                "reference": "c4dec4963ea19a89aaf679fac1921323dd7decd8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/mewebstudio/captcha/zipball/42c1b320e4cad1f6ec9a395da36d7eda5b67d122",
-                "reference": "42c1b320e4cad1f6ec9a395da36d7eda5b67d122",
+                "url": "https://api.github.com/repos/mewebstudio/captcha/zipball/c4dec4963ea19a89aaf679fac1921323dd7decd8",
+                "reference": "c4dec4963ea19a89aaf679fac1921323dd7decd8",
                 "shasum": ""
             },
             "require": {
                 "ext-gd": "*",
-                "illuminate/config": "~5|^6|^7|^8",
-                "illuminate/filesystem": "~5|^6|^7|^8",
-                "illuminate/hashing": "~5|^6|^7|^8",
-                "illuminate/session": "~5|^6|^7|^8",
-                "illuminate/support": "~5|^6|^7|^8",
+                "illuminate/config": "~5|^6|^7|^8|^9",
+                "illuminate/filesystem": "~5|^6|^7|^8|^9",
+                "illuminate/hashing": "~5|^6|^7|^8|^9",
+                "illuminate/session": "~5|^6|^7|^8|^9",
+                "illuminate/support": "~5|^6|^7|^8|^9",
                 "intervention/image": "~2.5",
                 "php": "^7.2|^8.0"
             },
             "require-dev": {
                 "mockery/mockery": "^1.0",
-                "phpunit/phpunit": "^8.5"
+                "phpunit/phpunit": "^8.5|^9.0"
             },
             "type": "package",
             "extra": {
@@ -1701,12 +2020,12 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Mews\\Captcha\\": "src/"
-                },
                 "files": [
                     "src/helpers.php"
-                ]
+                ],
+                "psr-4": {
+                    "Mews\\Captcha\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1730,22 +2049,22 @@
             ],
             "support": {
                 "issues": "https://github.com/mewebstudio/captcha/issues",
-                "source": "https://github.com/mewebstudio/captcha/tree/3.2.6"
+                "source": "https://github.com/mewebstudio/captcha/tree/3.2.7"
             },
-            "time": "2021-04-22T18:42:48+00:00"
+            "time": "2022-02-12T15:58:32+00:00"
         },
         {
             "name": "mobiledetect/mobiledetectlib",
-            "version": "2.8.37",
+            "version": "2.8.39",
             "source": {
                 "type": "git",
                 "url": "https://github.com/serbanghita/Mobile-Detect.git",
-                "reference": "9841e3c46f5bd0739b53aed8ac677fa712943df7"
+                "reference": "0fd6753003fc870f6e229bae869cc1337c99bc45"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/9841e3c46f5bd0739b53aed8ac677fa712943df7",
-                "reference": "9841e3c46f5bd0739b53aed8ac677fa712943df7",
+                "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/0fd6753003fc870f6e229bae869cc1337c99bc45",
+                "reference": "0fd6753003fc870f6e229bae869cc1337c99bc45",
                 "shasum": ""
             },
             "require": {
@@ -1756,12 +2075,12 @@
             },
             "type": "library",
             "autoload": {
-                "classmap": [
-                    "Mobile_Detect.php"
-                ],
                 "psr-0": {
                     "Detection": "namespaced/"
-                }
+                },
+                "classmap": [
+                    "Mobile_Detect.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1786,60 +2105,62 @@
             ],
             "support": {
                 "issues": "https://github.com/serbanghita/Mobile-Detect/issues",
-                "source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.37"
+                "source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.39"
             },
-            "funding": [
-                {
-                    "url": "https://github.com/serbanghita",
-                    "type": "github"
-                }
-            ],
-            "time": "2021-02-19T21:22:57+00:00"
+            "time": "2022-02-17T19:24:25+00:00"
         },
         {
             "name": "monolog/monolog",
-            "version": "2.2.0",
+            "version": "2.6.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Seldaek/monolog.git",
-                "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084"
+                "reference": "247918972acd74356b0a91dfaa5adcaec069b6c0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084",
-                "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084",
+                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/247918972acd74356b0a91dfaa5adcaec069b6c0",
+                "reference": "247918972acd74356b0a91dfaa5adcaec069b6c0",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2",
-                "psr/log": "^1.0.1"
+                "psr/log": "^1.0.1 || ^2.0 || ^3.0"
             },
             "provide": {
-                "psr/log-implementation": "1.0.0"
+                "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
             },
             "require-dev": {
                 "aws/aws-sdk-php": "^2.4.9 || ^3.0",
                 "doctrine/couchdb": "~1.0@dev",
-                "elasticsearch/elasticsearch": "^7",
+                "elasticsearch/elasticsearch": "^7 || ^8",
+                "ext-json": "*",
                 "graylog2/gelf-php": "^1.4.2",
+                "guzzlehttp/guzzle": "^7.4",
+                "guzzlehttp/psr7": "^2.2",
                 "mongodb/mongodb": "^1.8",
-                "php-amqplib/php-amqplib": "~2.4",
+                "php-amqplib/php-amqplib": "~2.4 || ^3",
                 "php-console/php-console": "^3.1.3",
-                "phpspec/prophecy": "^1.6.1",
-                "phpstan/phpstan": "^0.12.59",
-                "phpunit/phpunit": "^8.5",
+                "phpspec/prophecy": "^1.15",
+                "phpstan/phpstan": "^0.12.91",
+                "phpunit/phpunit": "^8.5.14",
                 "predis/predis": "^1.1",
-                "rollbar/rollbar": "^1.3",
-                "ruflin/elastica": ">=0.90 <7.0.1",
-                "swiftmailer/swiftmailer": "^5.3|^6.0"
+                "rollbar/rollbar": "^1.3 || ^2 || ^3",
+                "ruflin/elastica": "^7",
+                "swiftmailer/swiftmailer": "^5.3|^6.0",
+                "symfony/mailer": "^5.4 || ^6",
+                "symfony/mime": "^5.4 || ^6"
             },
             "suggest": {
                 "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
                 "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
                 "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
                 "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+                "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
                 "ext-mbstring": "Allow to work properly with unicode symbols",
                 "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
+                "ext-openssl": "Required to send log messages using SSL",
+                "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
                 "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
                 "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
                 "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
@@ -1878,7 +2199,7 @@
             ],
             "support": {
                 "issues": "https://github.com/Seldaek/monolog/issues",
-                "source": "https://github.com/Seldaek/monolog/tree/2.2.0"
+                "source": "https://github.com/Seldaek/monolog/tree/2.6.0"
             },
             "funding": [
                 {
@@ -1890,36 +2211,39 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-12-14T13:15:25+00:00"
+            "time": "2022-05-10T09:36:00+00:00"
         },
         {
             "name": "nesbot/carbon",
-            "version": "2.48.1",
+            "version": "2.58.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/briannesbitt/Carbon.git",
-                "reference": "8d1f50f1436fb4b05e7127360483dd9c6e73da16"
+                "reference": "97a34af22bde8d0ac20ab34b29d7bfe360902055"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8d1f50f1436fb4b05e7127360483dd9c6e73da16",
-                "reference": "8d1f50f1436fb4b05e7127360483dd9c6e73da16",
+                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/97a34af22bde8d0ac20ab34b29d7bfe360902055",
+                "reference": "97a34af22bde8d0ac20ab34b29d7bfe360902055",
                 "shasum": ""
             },
             "require": {
                 "ext-json": "*",
                 "php": "^7.1.8 || ^8.0",
                 "symfony/polyfill-mbstring": "^1.0",
-                "symfony/translation": "^3.4 || ^4.0 || ^5.0"
+                "symfony/polyfill-php80": "^1.16",
+                "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0"
             },
             "require-dev": {
+                "doctrine/dbal": "^2.0 || ^3.0",
                 "doctrine/orm": "^2.7",
-                "friendsofphp/php-cs-fixer": "^2.14 || ^3.0",
+                "friendsofphp/php-cs-fixer": "^3.0",
                 "kylekatarnls/multi-tester": "^2.0",
                 "phpmd/phpmd": "^2.9",
                 "phpstan/extension-installer": "^1.0",
-                "phpstan/phpstan": "^0.12.54",
-                "phpunit/phpunit": "^7.5.20 || ^8.5.14",
+                "phpstan/phpstan": "^0.12.54 || ^1.0",
+                "phpunit/php-file-iterator": "^2.0.5",
+                "phpunit/phpunit": "^7.5.20 || ^8.5.23",
                 "squizlabs/php_codesniffer": "^3.4"
             },
             "bin": [
@@ -1928,8 +2252,8 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.x-dev",
-                    "dev-3.x": "3.x-dev"
+                    "dev-3.x": "3.x-dev",
+                    "dev-master": "2.x-dev"
                 },
                 "laravel": {
                     "providers": [
@@ -1955,21 +2279,22 @@
                 {
                     "name": "Brian Nesbitt",
                     "email": "brian@nesbot.com",
-                    "homepage": "http://nesbot.com"
+                    "homepage": "https://markido.com"
                 },
                 {
                     "name": "kylekatarnls",
-                    "homepage": "http://github.com/kylekatarnls"
+                    "homepage": "https://github.com/kylekatarnls"
                 }
             ],
             "description": "An API extension for DateTime that supports 281 different languages.",
-            "homepage": "http://carbon.nesbot.com",
+            "homepage": "https://carbon.nesbot.com",
             "keywords": [
                 "date",
                 "datetime",
                 "time"
             ],
             "support": {
+                "docs": "https://carbon.nesbot.com/docs",
                 "issues": "https://github.com/briannesbitt/Carbon/issues",
                 "source": "https://github.com/briannesbitt/Carbon"
             },
@@ -1983,20 +2308,167 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-26T22:08:38+00:00"
+            "time": "2022-04-25T19:31:17+00:00"
+        },
+        {
+            "name": "nette/schema",
+            "version": "v1.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nette/schema.git",
+                "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df",
+                "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df",
+                "shasum": ""
+            },
+            "require": {
+                "nette/utils": "^2.5.7 || ^3.1.5 ||  ^4.0",
+                "php": ">=7.1 <8.2"
+            },
+            "require-dev": {
+                "nette/tester": "^2.3 || ^2.4",
+                "phpstan/phpstan-nette": "^0.12",
+                "tracy/tracy": "^2.7"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause",
+                "GPL-2.0-only",
+                "GPL-3.0-only"
+            ],
+            "authors": [
+                {
+                    "name": "David Grudl",
+                    "homepage": "https://davidgrudl.com"
+                },
+                {
+                    "name": "Nette Community",
+                    "homepage": "https://nette.org/contributors"
+                }
+            ],
+            "description": "📐 Nette Schema: validating data structures against a given Schema.",
+            "homepage": "https://nette.org",
+            "keywords": [
+                "config",
+                "nette"
+            ],
+            "support": {
+                "issues": "https://github.com/nette/schema/issues",
+                "source": "https://github.com/nette/schema/tree/v1.2.2"
+            },
+            "time": "2021-10-15T11:40:02+00:00"
+        },
+        {
+            "name": "nette/utils",
+            "version": "v3.2.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nette/utils.git",
+                "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nette/utils/zipball/0af4e3de4df9f1543534beab255ccf459e7a2c99",
+                "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2 <8.2"
+            },
+            "conflict": {
+                "nette/di": "<3.0.6"
+            },
+            "require-dev": {
+                "nette/tester": "~2.0",
+                "phpstan/phpstan": "^1.0",
+                "tracy/tracy": "^2.3"
+            },
+            "suggest": {
+                "ext-gd": "to use Image",
+                "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()",
+                "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
+                "ext-json": "to use Nette\\Utils\\Json",
+                "ext-mbstring": "to use Strings::lower() etc...",
+                "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()",
+                "ext-xml": "to use Strings::length() etc. when mbstring is not available"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.2-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause",
+                "GPL-2.0-only",
+                "GPL-3.0-only"
+            ],
+            "authors": [
+                {
+                    "name": "David Grudl",
+                    "homepage": "https://davidgrudl.com"
+                },
+                {
+                    "name": "Nette Community",
+                    "homepage": "https://nette.org/contributors"
+                }
+            ],
+            "description": "🛠  Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
+            "homepage": "https://nette.org",
+            "keywords": [
+                "array",
+                "core",
+                "datetime",
+                "images",
+                "json",
+                "nette",
+                "paginator",
+                "password",
+                "slugify",
+                "string",
+                "unicode",
+                "utf-8",
+                "utility",
+                "validation"
+            ],
+            "support": {
+                "issues": "https://github.com/nette/utils/issues",
+                "source": "https://github.com/nette/utils/tree/v3.2.7"
+            },
+            "time": "2022-01-24T11:29:14+00:00"
         },
         {
             "name": "nikic/php-parser",
-            "version": "v4.10.5",
+            "version": "v4.13.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f"
+                "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f",
-                "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
+                "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
                 "shasum": ""
             },
             "require": {
@@ -2037,22 +2509,22 @@
             ],
             "support": {
                 "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5"
+                "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
             },
-            "time": "2021-05-03T19:11:20+00:00"
+            "time": "2021-11-30T19:35:32+00:00"
         },
         {
             "name": "opis/closure",
-            "version": "3.6.2",
+            "version": "3.6.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/opis/closure.git",
-                "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6"
+                "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6",
-                "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6",
+                "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad",
+                "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad",
                 "shasum": ""
             },
             "require": {
@@ -2069,12 +2541,12 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Opis\\Closure\\": "src/"
-                },
                 "files": [
                     "functions.php"
-                ]
+                ],
+                "psr-4": {
+                    "Opis\\Closure\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -2102,35 +2574,35 @@
             ],
             "support": {
                 "issues": "https://github.com/opis/closure/issues",
-                "source": "https://github.com/opis/closure/tree/3.6.2"
+                "source": "https://github.com/opis/closure/tree/3.6.3"
             },
-            "time": "2021-04-09T13:42:10+00:00"
+            "time": "2022-01-27T09:35:39+00:00"
         },
         {
             "name": "phpoption/phpoption",
-            "version": "1.7.5",
+            "version": "1.8.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/schmittjoh/php-option.git",
-                "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525"
+                "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525",
-                "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525",
+                "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15",
+                "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9 || ^7.0 || ^8.0"
+                "php": "^7.0 || ^8.0"
             },
             "require-dev": {
                 "bamarni/composer-bin-plugin": "^1.4.1",
-                "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0"
+                "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.7-dev"
+                    "dev-master": "1.8-dev"
                 }
             },
             "autoload": {
@@ -2145,11 +2617,13 @@
             "authors": [
                 {
                     "name": "Johannes M. Schmitt",
-                    "email": "schmittjoh@gmail.com"
+                    "email": "schmittjoh@gmail.com",
+                    "homepage": "https://github.com/schmittjoh"
                 },
                 {
                     "name": "Graham Campbell",
-                    "email": "graham@alt-three.com"
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
                 }
             ],
             "description": "Option Type for PHP",
@@ -2161,7 +2635,7 @@
             ],
             "support": {
                 "issues": "https://github.com/schmittjoh/php-option/issues",
-                "source": "https://github.com/schmittjoh/php-option/tree/1.7.5"
+                "source": "https://github.com/schmittjoh/php-option/tree/1.8.1"
             },
             "funding": [
                 {
@@ -2173,20 +2647,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-07-20T17:29:33+00:00"
+            "time": "2021-12-04T23:24:31+00:00"
         },
         {
             "name": "predis/predis",
-            "version": "v1.1.7",
+            "version": "v1.1.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/predis/predis.git",
-                "reference": "b240daa106d4e02f0c5b7079b41e31ddf66fddf8"
+                "reference": "a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/predis/predis/zipball/b240daa106d4e02f0c5b7079b41e31ddf66fddf8",
-                "reference": "b240daa106d4e02f0c5b7079b41e31ddf66fddf8",
+                "url": "https://api.github.com/repos/predis/predis/zipball/a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e",
+                "reference": "a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e",
                 "shasum": ""
             },
             "require": {
@@ -2231,7 +2705,7 @@
             ],
             "support": {
                 "issues": "https://github.com/predis/predis/issues",
-                "source": "https://github.com/predis/predis/tree/v1.1.7"
+                "source": "https://github.com/predis/predis/tree/v1.1.10"
             },
             "funding": [
                 {
@@ -2239,26 +2713,25 @@
                     "type": "github"
                 }
             ],
-            "time": "2021-04-04T19:34:46+00:00"
+            "time": "2022-01-05T17:46:08+00:00"
         },
         {
             "name": "promphp/prometheus_client_php",
-            "version": "v2.2.2",
+            "version": "v2.6.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PromPHP/prometheus_client_php.git",
-                "reference": "5d27b6d84900d9b3208b5b6bf88d10ed0dc7a154"
+                "reference": "10881142d2c55de19f529ebbcb7f89558c6d46d4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PromPHP/prometheus_client_php/zipball/5d27b6d84900d9b3208b5b6bf88d10ed0dc7a154",
-                "reference": "5d27b6d84900d9b3208b5b6bf88d10ed0dc7a154",
+                "url": "https://api.github.com/repos/PromPHP/prometheus_client_php/zipball/10881142d2c55de19f529ebbcb7f89558c6d46d4",
+                "reference": "10881142d2c55de19f529ebbcb7f89558c6d46d4",
                 "shasum": ""
             },
             "require": {
                 "ext-json": "*",
-                "php": "^7.2|^8.0",
-                "symfony/polyfill-apcu": "^1.6"
+                "php": "^7.2|^8.0"
             },
             "replace": {
                 "endclothing/prometheus_client_php": "*",
@@ -2268,16 +2741,18 @@
             "require-dev": {
                 "guzzlehttp/guzzle": "^6.3|^7.0",
                 "phpstan/extension-installer": "^1.0",
-                "phpstan/phpstan": "^0.12.50",
-                "phpstan/phpstan-phpunit": "^0.12.16",
-                "phpstan/phpstan-strict-rules": "^0.12.5",
-                "phpunit/phpunit": "^8.4|^9.4",
-                "squizlabs/php_codesniffer": "^3.5"
+                "phpstan/phpstan": "^1.5.4",
+                "phpstan/phpstan-phpunit": "^1.1.0",
+                "phpstan/phpstan-strict-rules": "^1.1.0",
+                "phpunit/phpunit": "^9.4",
+                "squizlabs/php_codesniffer": "^3.6",
+                "symfony/polyfill-apcu": "^1.6"
             },
             "suggest": {
                 "ext-apc": "Required if using APCu.",
                 "ext-redis": "Required if using Redis.",
-                "promphp/prometheus_push_gateway_php": "An easy client for using Prometheus PushGateway."
+                "promphp/prometheus_push_gateway_php": "An easy client for using Prometheus PushGateway.",
+                "symfony/polyfill-apcu": "Required if you use APCu on PHP8.0+"
             },
             "type": "library",
             "extra": {
@@ -2303,26 +2778,26 @@
             "description": "Prometheus instrumentation library for PHP applications.",
             "support": {
                 "issues": "https://github.com/PromPHP/prometheus_client_php/issues",
-                "source": "https://github.com/PromPHP/prometheus_client_php/tree/v2.2.2"
+                "source": "https://github.com/PromPHP/prometheus_client_php/tree/v2.6.0"
             },
-            "time": "2021-03-05T08:54:14+00:00"
+            "time": "2022-04-12T14:07:05+00:00"
         },
         {
             "name": "psr/container",
-            "version": "1.1.1",
+            "version": "1.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/container.git",
-                "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
+                "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
-                "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
+                "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.0"
+                "php": ">=7.4.0"
             },
             "type": "library",
             "autoload": {
@@ -2351,9 +2826,9 @@
             ],
             "support": {
                 "issues": "https://github.com/php-fig/container/issues",
-                "source": "https://github.com/php-fig/container/tree/1.1.1"
+                "source": "https://github.com/php-fig/container/tree/1.1.2"
             },
-            "time": "2021-03-05T17:36:06+00:00"
+            "time": "2021-11-05T16:50:12+00:00"
         },
         {
             "name": "psr/event-dispatcher",
@@ -2457,6 +2932,61 @@
             },
             "time": "2020-06-29T06:28:15+00:00"
         },
+        {
+            "name": "psr/http-factory",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-factory.git",
+                "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+                "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.0",
+                "psr/http-message": "^1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interfaces for PSR-7 HTTP message factories",
+            "keywords": [
+                "factory",
+                "http",
+                "message",
+                "psr",
+                "psr-17",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/http-factory/tree/master"
+            },
+            "time": "2019-04-30T12:38:16+00:00"
+        },
         {
             "name": "psr/http-message",
             "version": "1.0.1",
@@ -2613,36 +3143,37 @@
         },
         {
             "name": "psy/psysh",
-            "version": "v0.10.8",
+            "version": "v0.11.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/bobthecow/psysh.git",
-                "reference": "e4573f47750dd6c92dca5aee543fa77513cbd8d3"
+                "reference": "05c544b339b112226ad14803e1e5b09a61957454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/e4573f47750dd6c92dca5aee543fa77513cbd8d3",
-                "reference": "e4573f47750dd6c92dca5aee543fa77513cbd8d3",
+                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/05c544b339b112226ad14803e1e5b09a61957454",
+                "reference": "05c544b339b112226ad14803e1e5b09a61957454",
                 "shasum": ""
             },
             "require": {
                 "ext-json": "*",
                 "ext-tokenizer": "*",
-                "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
-                "php": "^8.0 || ^7.0 || ^5.5.9",
-                "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10",
-                "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7"
+                "nikic/php-parser": "^4.0 || ^3.1",
+                "php": "^8.0 || ^7.0.8",
+                "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4",
+                "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4"
+            },
+            "conflict": {
+                "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
             },
             "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.2",
-                "hoa/console": "3.17.*"
+                "bamarni/composer-bin-plugin": "^1.2"
             },
             "suggest": {
                 "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
                 "ext-pdo-sqlite": "The doc command requires SQLite to work.",
                 "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
-                "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
-                "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
+                "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history."
             },
             "bin": [
                 "bin/psysh"
@@ -2650,7 +3181,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "0.10.x-dev"
+                    "dev-main": "0.11.x-dev"
                 }
             },
             "autoload": {
@@ -2682,9 +3213,9 @@
             ],
             "support": {
                 "issues": "https://github.com/bobthecow/psysh/issues",
-                "source": "https://github.com/bobthecow/psysh/tree/v0.10.8"
+                "source": "https://github.com/bobthecow/psysh/tree/v0.11.4"
             },
-            "time": "2021-04-10T16:23:39+00:00"
+            "time": "2022-05-06T12:49:14+00:00"
         },
         {
             "name": "ralouphie/getallheaders",
@@ -2732,20 +3263,21 @@
         },
         {
             "name": "ramsey/collection",
-            "version": "1.1.3",
+            "version": "1.2.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/ramsey/collection.git",
-                "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1"
+                "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1",
-                "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1",
+                "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a",
+                "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.2 || ^8"
+                "php": "^7.3 || ^8",
+                "symfony/polyfill-php81": "^1.23"
             },
             "require-dev": {
                 "captainhook/captainhook": "^5.3",
@@ -2755,6 +3287,7 @@
                 "hamcrest/hamcrest-php": "^2",
                 "jangregor/phpstan-prophecy": "^0.8",
                 "mockery/mockery": "^1.3",
+                "phpspec/prophecy-phpunit": "^2.0",
                 "phpstan/extension-installer": "^1",
                 "phpstan/phpstan": "^0.12.32",
                 "phpstan/phpstan-mockery": "^0.12.5",
@@ -2782,7 +3315,7 @@
                     "homepage": "https://benramsey.com"
                 }
             ],
-            "description": "A PHP 7.2+ library for representing and manipulating collections.",
+            "description": "A PHP library for representing and manipulating collections.",
             "keywords": [
                 "array",
                 "collection",
@@ -2793,7 +3326,7 @@
             ],
             "support": {
                 "issues": "https://github.com/ramsey/collection/issues",
-                "source": "https://github.com/ramsey/collection/tree/1.1.3"
+                "source": "https://github.com/ramsey/collection/tree/1.2.2"
             },
             "funding": [
                 {
@@ -2805,53 +3338,54 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-01-21T17:40:04+00:00"
+            "time": "2021-10-10T03:01:02+00:00"
         },
         {
             "name": "ramsey/uuid",
-            "version": "4.1.1",
+            "version": "4.2.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/ramsey/uuid.git",
-                "reference": "cd4032040a750077205918c86049aa0f43d22947"
+                "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947",
-                "reference": "cd4032040a750077205918c86049aa0f43d22947",
+                "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df",
+                "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df",
                 "shasum": ""
             },
             "require": {
                 "brick/math": "^0.8 || ^0.9",
                 "ext-json": "*",
-                "php": "^7.2 || ^8",
+                "php": "^7.2 || ^8.0",
                 "ramsey/collection": "^1.0",
-                "symfony/polyfill-ctype": "^1.8"
+                "symfony/polyfill-ctype": "^1.8",
+                "symfony/polyfill-php80": "^1.14"
             },
             "replace": {
                 "rhumsaa/uuid": "self.version"
             },
             "require-dev": {
-                "codeception/aspect-mock": "^3",
-                "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0",
+                "captainhook/captainhook": "^5.10",
+                "captainhook/plugin-composer": "^5.3",
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
                 "doctrine/annotations": "^1.8",
-                "goaop/framework": "^2",
+                "ergebnis/composer-normalize": "^2.15",
                 "mockery/mockery": "^1.3",
                 "moontoast/math": "^1.1",
                 "paragonie/random-lib": "^2",
+                "php-mock/php-mock": "^2.2",
                 "php-mock/php-mock-mockery": "^1.3",
-                "php-mock/php-mock-phpunit": "^2.5",
                 "php-parallel-lint/php-parallel-lint": "^1.1",
-                "phpbench/phpbench": "^0.17.1",
+                "phpbench/phpbench": "^1.0",
                 "phpstan/extension-installer": "^1.0",
                 "phpstan/phpstan": "^0.12",
                 "phpstan/phpstan-mockery": "^0.12",
                 "phpstan/phpstan-phpunit": "^0.12",
-                "phpunit/phpunit": "^8.5",
-                "psy/psysh": "^0.10.0",
-                "slevomat/coding-standard": "^6.0",
+                "phpunit/phpunit": "^8.5 || ^9",
+                "slevomat/coding-standard": "^7.0",
                 "squizlabs/php_codesniffer": "^3.5",
-                "vimeo/psalm": "3.9.4"
+                "vimeo/psalm": "^4.9"
             },
             "suggest": {
                 "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
@@ -2864,23 +3398,25 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.x-dev"
+                    "dev-main": "4.x-dev"
+                },
+                "captainhook": {
+                    "force-install": true
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Ramsey\\Uuid\\": "src/"
-                },
                 "files": [
                     "src/functions.php"
-                ]
+                ],
+                "psr-4": {
+                    "Ramsey\\Uuid\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
             "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
-            "homepage": "https://github.com/ramsey/uuid",
             "keywords": [
                 "guid",
                 "identifier",
@@ -2888,29 +3424,32 @@
             ],
             "support": {
                 "issues": "https://github.com/ramsey/uuid/issues",
-                "rss": "https://github.com/ramsey/uuid/releases.atom",
-                "source": "https://github.com/ramsey/uuid"
+                "source": "https://github.com/ramsey/uuid/tree/4.2.3"
             },
             "funding": [
                 {
                     "url": "https://github.com/ramsey",
                     "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
+                    "type": "tidelift"
                 }
             ],
-            "time": "2020-08-18T17:17:46+00:00"
+            "time": "2021-09-25T23:10:38+00:00"
         },
         {
             "name": "swiftmailer/swiftmailer",
-            "version": "v6.2.7",
+            "version": "v6.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/swiftmailer/swiftmailer.git",
-                "reference": "15f7faf8508e04471f666633addacf54c0ab5933"
+                "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/15f7faf8508e04471f666633addacf54c0ab5933",
-                "reference": "15f7faf8508e04471f666633addacf54c0ab5933",
+                "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c",
+                "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c",
                 "shasum": ""
             },
             "require": {
@@ -2922,7 +3461,7 @@
             },
             "require-dev": {
                 "mockery/mockery": "^1.0",
-                "symfony/phpunit-bridge": "^4.4|^5.0"
+                "symfony/phpunit-bridge": "^4.4|^5.4"
             },
             "suggest": {
                 "ext-intl": "Needed to support internationalized email addresses"
@@ -2960,7 +3499,7 @@
             ],
             "support": {
                 "issues": "https://github.com/swiftmailer/swiftmailer/issues",
-                "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.2.7"
+                "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0"
             },
             "funding": [
                 {
@@ -2972,31 +3511,34 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-03-09T12:30:35+00:00"
+            "abandoned": "symfony/mailer",
+            "time": "2021-10-18T15:26:12+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v5.2.8",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "864568fdc0208b3eba3638b6000b69d2386e6768"
+                "reference": "ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/864568fdc0208b3eba3638b6000b69d2386e6768",
-                "reference": "864568fdc0208b3eba3638b6000b69d2386e6768",
+                "url": "https://api.github.com/repos/symfony/console/zipball/ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b",
+                "reference": "ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2.5",
+                "symfony/deprecation-contracts": "^2.1|^3",
                 "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php73": "^1.8",
-                "symfony/polyfill-php80": "^1.15",
-                "symfony/service-contracts": "^1.1|^2",
-                "symfony/string": "^5.1"
+                "symfony/polyfill-php73": "^1.9",
+                "symfony/polyfill-php80": "^1.16",
+                "symfony/service-contracts": "^1.1|^2|^3",
+                "symfony/string": "^5.1|^6.0"
             },
             "conflict": {
+                "psr/log": ">=3",
                 "symfony/dependency-injection": "<4.4",
                 "symfony/dotenv": "<5.1",
                 "symfony/event-dispatcher": "<4.4",
@@ -3004,16 +3546,16 @@
                 "symfony/process": "<4.4"
             },
             "provide": {
-                "psr/log-implementation": "1.0"
+                "psr/log-implementation": "1.0|2.0"
             },
             "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "^4.4|^5.0",
-                "symfony/dependency-injection": "^4.4|^5.0",
-                "symfony/event-dispatcher": "^4.4|^5.0",
-                "symfony/lock": "^4.4|^5.0",
-                "symfony/process": "^4.4|^5.0",
-                "symfony/var-dumper": "^4.4|^5.0"
+                "psr/log": "^1|^2",
+                "symfony/config": "^4.4|^5.0|^6.0",
+                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+                "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
+                "symfony/lock": "^4.4|^5.0|^6.0",
+                "symfony/process": "^4.4|^5.0|^6.0",
+                "symfony/var-dumper": "^4.4|^5.0|^6.0"
             },
             "suggest": {
                 "psr/log": "For using the console logger",
@@ -3053,7 +3595,7 @@
                 "terminal"
             ],
             "support": {
-                "source": "https://github.com/symfony/console/tree/v5.2.8"
+                "source": "https://github.com/symfony/console/tree/v5.4.8"
             },
             "funding": [
                 {
@@ -3069,24 +3611,25 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-11T15:45:21+00:00"
+            "time": "2022-04-12T16:02:29+00:00"
         },
         {
             "name": "symfony/css-selector",
-            "version": "v5.2.9",
+            "version": "v5.4.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/css-selector.git",
-                "reference": "5d5f97809015102116208b976eb2edb44b689560"
+                "reference": "b0a190285cd95cb019237851205b8140ef6e368e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/5d5f97809015102116208b976eb2edb44b689560",
-                "reference": "5d5f97809015102116208b976eb2edb44b689560",
+                "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e",
+                "reference": "b0a190285cd95cb019237851205b8140ef6e368e",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5"
+                "php": ">=7.2.5",
+                "symfony/polyfill-php80": "^1.16"
             },
             "type": "library",
             "autoload": {
@@ -3118,7 +3661,7 @@
             "description": "Converts CSS selectors to XPath expressions",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/css-selector/tree/v5.2.9"
+                "source": "https://github.com/symfony/css-selector/tree/v5.4.3"
             },
             "funding": [
                 {
@@ -3134,20 +3677,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-16T13:07:46+00:00"
+            "time": "2022-01-02T09:53:40+00:00"
         },
         {
             "name": "symfony/deprecation-contracts",
-            "version": "v2.4.0",
+            "version": "v2.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/deprecation-contracts.git",
-                "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627"
+                "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627",
-                "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627",
+                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
+                "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
                 "shasum": ""
             },
             "require": {
@@ -3156,7 +3699,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "2.4-dev"
+                    "dev-main": "2.5-dev"
                 },
                 "thanks": {
                     "name": "symfony/contracts",
@@ -3185,7 +3728,7 @@
             "description": "A generic function and convention to trigger deprecation notices",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0"
+                "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1"
             },
             "funding": [
                 {
@@ -3201,34 +3744,35 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-03-23T23:28:01+00:00"
+            "time": "2022-01-02T09:53:40+00:00"
         },
         {
             "name": "symfony/dom-crawler",
-            "version": "v5.2.9",
+            "version": "v5.4.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/dom-crawler.git",
-                "reference": "8d5201206ded6f37de475b041a11bfaf3ac73d5e"
+                "reference": "c0bda97480d96337bd3866026159a8b358665457"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/8d5201206ded6f37de475b041a11bfaf3ac73d5e",
-                "reference": "8d5201206ded6f37de475b041a11bfaf3ac73d5e",
+                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/c0bda97480d96337bd3866026159a8b358665457",
+                "reference": "c0bda97480d96337bd3866026159a8b358665457",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2.5",
+                "symfony/deprecation-contracts": "^2.1|^3",
                 "symfony/polyfill-ctype": "~1.8",
                 "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php80": "^1.15"
+                "symfony/polyfill-php80": "^1.16"
             },
             "conflict": {
                 "masterminds/html5": "<2.6"
             },
             "require-dev": {
                 "masterminds/html5": "^2.6",
-                "symfony/css-selector": "^4.4|^5.0"
+                "symfony/css-selector": "^4.4|^5.0|^6.0"
             },
             "suggest": {
                 "symfony/css-selector": ""
@@ -3259,7 +3803,7 @@
             "description": "Eases DOM navigation for HTML and XML documents",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/dom-crawler/tree/v5.2.9"
+                "source": "https://github.com/symfony/dom-crawler/tree/v5.4.6"
             },
             "funding": [
                 {
@@ -3275,33 +3819,35 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-16T13:07:46+00:00"
+            "time": "2022-03-02T12:42:23+00:00"
         },
         {
             "name": "symfony/error-handler",
-            "version": "v5.2.8",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/error-handler.git",
-                "reference": "1416bc16317a8188aabde251afef7618bf4687ac"
+                "reference": "c1fcde614dfe99d62a83b796a53b8bad358b266a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/error-handler/zipball/1416bc16317a8188aabde251afef7618bf4687ac",
-                "reference": "1416bc16317a8188aabde251afef7618bf4687ac",
+                "url": "https://api.github.com/repos/symfony/error-handler/zipball/c1fcde614dfe99d62a83b796a53b8bad358b266a",
+                "reference": "c1fcde614dfe99d62a83b796a53b8bad358b266a",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2.5",
-                "psr/log": "^1.0",
-                "symfony/polyfill-php80": "^1.15",
-                "symfony/var-dumper": "^4.4|^5.0"
+                "psr/log": "^1|^2|^3",
+                "symfony/var-dumper": "^4.4|^5.0|^6.0"
             },
             "require-dev": {
-                "symfony/deprecation-contracts": "^2.1",
-                "symfony/http-kernel": "^4.4|^5.0",
-                "symfony/serializer": "^4.4|^5.0"
+                "symfony/deprecation-contracts": "^2.1|^3",
+                "symfony/http-kernel": "^4.4|^5.0|^6.0",
+                "symfony/serializer": "^4.4|^5.0|^6.0"
             },
+            "bin": [
+                "Resources/bin/patch-type-declarations"
+            ],
             "type": "library",
             "autoload": {
                 "psr-4": {
@@ -3328,7 +3874,7 @@
             "description": "Provides tools to manage errors and ease debugging PHP code",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/error-handler/tree/v5.2.8"
+                "source": "https://github.com/symfony/error-handler/tree/v5.4.8"
             },
             "funding": [
                 {
@@ -3344,27 +3890,27 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-07T13:42:21+00:00"
+            "time": "2022-04-12T15:48:08+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v5.2.4",
+            "version": "v5.4.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "d08d6ec121a425897951900ab692b612a61d6240"
+                "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d08d6ec121a425897951900ab692b612a61d6240",
-                "reference": "d08d6ec121a425897951900ab692b612a61d6240",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d",
+                "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1",
-                "symfony/event-dispatcher-contracts": "^2",
-                "symfony/polyfill-php80": "^1.15"
+                "symfony/deprecation-contracts": "^2.1|^3",
+                "symfony/event-dispatcher-contracts": "^2|^3",
+                "symfony/polyfill-php80": "^1.16"
             },
             "conflict": {
                 "symfony/dependency-injection": "<4.4"
@@ -3374,14 +3920,14 @@
                 "symfony/event-dispatcher-implementation": "2.0"
             },
             "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "^4.4|^5.0",
-                "symfony/dependency-injection": "^4.4|^5.0",
-                "symfony/error-handler": "^4.4|^5.0",
-                "symfony/expression-language": "^4.4|^5.0",
-                "symfony/http-foundation": "^4.4|^5.0",
-                "symfony/service-contracts": "^1.1|^2",
-                "symfony/stopwatch": "^4.4|^5.0"
+                "psr/log": "^1|^2|^3",
+                "symfony/config": "^4.4|^5.0|^6.0",
+                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+                "symfony/error-handler": "^4.4|^5.0|^6.0",
+                "symfony/expression-language": "^4.4|^5.0|^6.0",
+                "symfony/http-foundation": "^4.4|^5.0|^6.0",
+                "symfony/service-contracts": "^1.1|^2|^3",
+                "symfony/stopwatch": "^4.4|^5.0|^6.0"
             },
             "suggest": {
                 "symfony/dependency-injection": "",
@@ -3413,7 +3959,7 @@
             "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/event-dispatcher/tree/v5.2.4"
+                "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.3"
             },
             "funding": [
                 {
@@ -3429,20 +3975,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-02-18T17:12:37+00:00"
+            "time": "2022-01-02T09:53:40+00:00"
         },
         {
             "name": "symfony/event-dispatcher-contracts",
-            "version": "v2.4.0",
+            "version": "v2.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher-contracts.git",
-                "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11"
+                "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11",
-                "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1",
+                "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1",
                 "shasum": ""
             },
             "require": {
@@ -3455,7 +4001,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "2.4-dev"
+                    "dev-main": "2.5-dev"
                 },
                 "thanks": {
                     "name": "symfony/contracts",
@@ -3492,7 +4038,7 @@
                 "standards"
             ],
             "support": {
-                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0"
+                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.1"
             },
             "funding": [
                 {
@@ -3508,24 +4054,26 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-03-23T23:28:01+00:00"
+            "time": "2022-01-02T09:53:40+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v5.2.9",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "ccccb9d48ca42757dd12f2ca4bf857a4e217d90d"
+                "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/ccccb9d48ca42757dd12f2ca4bf857a4e217d90d",
-                "reference": "ccccb9d48ca42757dd12f2ca4bf857a4e217d90d",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9",
+                "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5"
+                "php": ">=7.2.5",
+                "symfony/deprecation-contracts": "^2.1|^3",
+                "symfony/polyfill-php80": "^1.16"
             },
             "type": "library",
             "autoload": {
@@ -3553,85 +4101,7 @@
             "description": "Finds files and directories via an intuitive fluent interface",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/finder/tree/v5.2.9"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-05-16T13:07:46+00:00"
-        },
-        {
-            "name": "symfony/http-client-contracts",
-            "version": "v2.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/http-client-contracts.git",
-                "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4",
-                "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5"
-            },
-            "suggest": {
-                "symfony/http-client-implementation": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "2.4-dev"
-                },
-                "thanks": {
-                    "name": "symfony/contracts",
-                    "url": "https://github.com/symfony/contracts"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Contracts\\HttpClient\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Generic abstractions related to HTTP clients",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "abstractions",
-                "contracts",
-                "decoupling",
-                "interfaces",
-                "interoperability",
-                "standards"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/http-client-contracts/tree/v2.4.0"
+                "source": "https://github.com/symfony/finder/tree/v5.4.8"
             },
             "funding": [
                 {
@@ -3647,33 +4117,33 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-04-11T23:07:08+00:00"
+            "time": "2022-04-15T08:07:45+00:00"
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v5.2.8",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "e8fbbab7c4a71592985019477532629cb2e142dc"
+                "reference": "ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e8fbbab7c4a71592985019477532629cb2e142dc",
-                "reference": "e8fbbab7c4a71592985019477532629cb2e142dc",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2",
+                "reference": "ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1",
+                "symfony/deprecation-contracts": "^2.1|^3",
                 "symfony/polyfill-mbstring": "~1.1",
-                "symfony/polyfill-php80": "^1.15"
+                "symfony/polyfill-php80": "^1.16"
             },
             "require-dev": {
                 "predis/predis": "~1.0",
-                "symfony/cache": "^4.4|^5.0",
-                "symfony/expression-language": "^4.4|^5.0",
-                "symfony/mime": "^4.4|^5.0"
+                "symfony/cache": "^4.4|^5.0|^6.0",
+                "symfony/expression-language": "^4.4|^5.0|^6.0",
+                "symfony/mime": "^4.4|^5.0|^6.0"
             },
             "suggest": {
                 "symfony/mime": "To use the file extension guesser"
@@ -3704,7 +4174,7 @@
             "description": "Defines an object-oriented layer for the HTTP specification",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-foundation/tree/v5.2.8"
+                "source": "https://github.com/symfony/http-foundation/tree/v5.4.8"
             },
             "funding": [
                 {
@@ -3720,40 +4190,39 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-07T13:41:16+00:00"
+            "time": "2022-04-22T08:14:12+00:00"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v5.2.9",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "eb540ef6870dbf33c92e372cfb869ebf9649e6cb"
+                "reference": "cf7e61106abfc19b305ca0aedc41724ced89a02a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/eb540ef6870dbf33c92e372cfb869ebf9649e6cb",
-                "reference": "eb540ef6870dbf33c92e372cfb869ebf9649e6cb",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/cf7e61106abfc19b305ca0aedc41724ced89a02a",
+                "reference": "cf7e61106abfc19b305ca0aedc41724ced89a02a",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2.5",
-                "psr/log": "~1.0",
-                "symfony/deprecation-contracts": "^2.1",
-                "symfony/error-handler": "^4.4|^5.0",
-                "symfony/event-dispatcher": "^5.0",
-                "symfony/http-client-contracts": "^1.1|^2",
-                "symfony/http-foundation": "^4.4|^5.0",
+                "psr/log": "^1|^2",
+                "symfony/deprecation-contracts": "^2.1|^3",
+                "symfony/error-handler": "^4.4|^5.0|^6.0",
+                "symfony/event-dispatcher": "^5.0|^6.0",
+                "symfony/http-foundation": "^5.3.7|^6.0",
                 "symfony/polyfill-ctype": "^1.8",
                 "symfony/polyfill-php73": "^1.9",
-                "symfony/polyfill-php80": "^1.15"
+                "symfony/polyfill-php80": "^1.16"
             },
             "conflict": {
-                "symfony/browser-kit": "<4.4",
+                "symfony/browser-kit": "<5.4",
                 "symfony/cache": "<5.0",
                 "symfony/config": "<5.0",
                 "symfony/console": "<4.4",
-                "symfony/dependency-injection": "<5.1.8",
+                "symfony/dependency-injection": "<5.3",
                 "symfony/doctrine-bridge": "<5.0",
                 "symfony/form": "<5.0",
                 "symfony/http-client": "<5.0",
@@ -3765,23 +4234,24 @@
                 "twig/twig": "<2.13"
             },
             "provide": {
-                "psr/log-implementation": "1.0"
+                "psr/log-implementation": "1.0|2.0"
             },
             "require-dev": {
                 "psr/cache": "^1.0|^2.0|^3.0",
-                "symfony/browser-kit": "^4.4|^5.0",
-                "symfony/config": "^5.0",
-                "symfony/console": "^4.4|^5.0",
-                "symfony/css-selector": "^4.4|^5.0",
-                "symfony/dependency-injection": "^5.1.8",
-                "symfony/dom-crawler": "^4.4|^5.0",
-                "symfony/expression-language": "^4.4|^5.0",
-                "symfony/finder": "^4.4|^5.0",
-                "symfony/process": "^4.4|^5.0",
-                "symfony/routing": "^4.4|^5.0",
-                "symfony/stopwatch": "^4.4|^5.0",
-                "symfony/translation": "^4.4|^5.0",
-                "symfony/translation-contracts": "^1.1|^2",
+                "symfony/browser-kit": "^5.4|^6.0",
+                "symfony/config": "^5.0|^6.0",
+                "symfony/console": "^4.4|^5.0|^6.0",
+                "symfony/css-selector": "^4.4|^5.0|^6.0",
+                "symfony/dependency-injection": "^5.3|^6.0",
+                "symfony/dom-crawler": "^4.4|^5.0|^6.0",
+                "symfony/expression-language": "^4.4|^5.0|^6.0",
+                "symfony/finder": "^4.4|^5.0|^6.0",
+                "symfony/http-client-contracts": "^1.1|^2|^3",
+                "symfony/process": "^4.4|^5.0|^6.0",
+                "symfony/routing": "^4.4|^5.0|^6.0",
+                "symfony/stopwatch": "^4.4|^5.0|^6.0",
+                "symfony/translation": "^4.4|^5.0|^6.0",
+                "symfony/translation-contracts": "^1.1|^2|^3",
                 "twig/twig": "^2.13|^3.0.4"
             },
             "suggest": {
@@ -3816,7 +4286,7 @@
             "description": "Provides a structured process for converting a Request into a Response",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-kernel/tree/v5.2.9"
+                "source": "https://github.com/symfony/http-kernel/tree/v5.4.8"
             },
             "funding": [
                 {
@@ -3832,28 +4302,28 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-19T12:23:45+00:00"
+            "time": "2022-04-27T17:22:21+00:00"
         },
         {
             "name": "symfony/mime",
-            "version": "v5.2.9",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/mime.git",
-                "reference": "64258e870f8cc75c3dae986201ea2df58c210b52"
+                "reference": "af49bc163ec3272f677bde3bc44c0d766c1fd662"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/mime/zipball/64258e870f8cc75c3dae986201ea2df58c210b52",
-                "reference": "64258e870f8cc75c3dae986201ea2df58c210b52",
+                "url": "https://api.github.com/repos/symfony/mime/zipball/af49bc163ec3272f677bde3bc44c0d766c1fd662",
+                "reference": "af49bc163ec3272f677bde3bc44c0d766c1fd662",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1",
+                "symfony/deprecation-contracts": "^2.1|^3",
                 "symfony/polyfill-intl-idn": "^1.10",
                 "symfony/polyfill-mbstring": "^1.0",
-                "symfony/polyfill-php80": "^1.15"
+                "symfony/polyfill-php80": "^1.16"
             },
             "conflict": {
                 "egulias/email-validator": "~3.0.0",
@@ -3864,10 +4334,10 @@
             "require-dev": {
                 "egulias/email-validator": "^2.1.10|^3.1",
                 "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
-                "symfony/dependency-injection": "^4.4|^5.0",
-                "symfony/property-access": "^4.4|^5.1",
-                "symfony/property-info": "^4.4|^5.1",
-                "symfony/serializer": "^5.2"
+                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+                "symfony/property-access": "^4.4|^5.1|^6.0",
+                "symfony/property-info": "^4.4|^5.1|^6.0",
+                "symfony/serializer": "^5.2|^6.0"
             },
             "type": "library",
             "autoload": {
@@ -3899,84 +4369,7 @@
                 "mime-type"
             ],
             "support": {
-                "source": "https://github.com/symfony/mime/tree/v5.2.9"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-05-16T13:07:46+00:00"
-        },
-        {
-            "name": "symfony/polyfill-apcu",
-            "version": "v1.23.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-apcu.git",
-                "reference": "80f7fb64c5b64ebcba76f40215e63808a2062a18"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/80f7fb64c5b64ebcba76f40215e63808a2062a18",
-                "reference": "80f7fb64c5b64ebcba76f40215e63808a2062a18",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Apcu\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "apcu",
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-apcu/tree/v1.23.0"
+                "source": "https://github.com/symfony/mime/tree/v5.4.8"
             },
             "funding": [
                 {
@@ -3992,25 +4385,28 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-02-19T12:13:01+00:00"
+            "time": "2022-04-12T15:48:08+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.23.0",
+            "version": "v1.25.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
+                "reference": "30885182c981ab175d4d034db0f6f469898070ab"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
-                "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
+                "reference": "30885182c981ab175d4d034db0f6f469898070ab",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.1"
             },
+            "provide": {
+                "ext-ctype": "*"
+            },
             "suggest": {
                 "ext-ctype": "For best performance"
             },
@@ -4025,12 +4421,12 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Ctype\\": ""
-                },
                 "files": [
                     "bootstrap.php"
-                ]
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -4055,7 +4451,7 @@
                 "portable"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0"
+                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0"
             },
             "funding": [
                 {
@@ -4071,25 +4467,28 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-02-19T12:13:01+00:00"
+            "time": "2021-10-20T20:35:02+00:00"
         },
         {
             "name": "symfony/polyfill-iconv",
-            "version": "v1.23.0",
+            "version": "v1.25.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-iconv.git",
-                "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933"
+                "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/63b5bb7db83e5673936d6e3b8b3e022ff6474933",
-                "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933",
+                "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40",
+                "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.1"
             },
+            "provide": {
+                "ext-iconv": "*"
+            },
             "suggest": {
                 "ext-iconv": "For best performance"
             },
@@ -4104,12 +4503,12 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Iconv\\": ""
-                },
                 "files": [
                     "bootstrap.php"
-                ]
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Iconv\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -4135,7 +4534,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-iconv/tree/v1.23.0"
+                "source": "https://github.com/symfony/polyfill-iconv/tree/v1.25.0"
             },
             "funding": [
                 {
@@ -4151,20 +4550,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-27T09:27:20+00:00"
+            "time": "2022-01-04T09:04:05+00:00"
         },
         {
             "name": "symfony/polyfill-intl-grapheme",
-            "version": "v1.23.0",
+            "version": "v1.25.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
-                "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab"
+                "reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/24b72c6baa32c746a4d0840147c9715e42bb68ab",
-                "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
+                "reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
                 "shasum": ""
             },
             "require": {
@@ -4184,12 +4583,12 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
-                },
                 "files": [
                     "bootstrap.php"
-                ]
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -4216,7 +4615,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.0"
+                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0"
             },
             "funding": [
                 {
@@ -4232,20 +4631,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-27T09:17:38+00:00"
+            "time": "2021-11-23T21:10:46+00:00"
         },
         {
             "name": "symfony/polyfill-intl-idn",
-            "version": "v1.23.0",
+            "version": "v1.25.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-intl-idn.git",
-                "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65"
+                "reference": "749045c69efb97c70d25d7463abba812e91f3a44"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65",
-                "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44",
+                "reference": "749045c69efb97c70d25d7463abba812e91f3a44",
                 "shasum": ""
             },
             "require": {
@@ -4267,12 +4666,12 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Intl\\Idn\\": ""
-                },
                 "files": [
                     "bootstrap.php"
-                ]
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Idn\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -4303,7 +4702,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0"
+                "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.0"
             },
             "funding": [
                 {
@@ -4319,11 +4718,11 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-27T09:27:20+00:00"
+            "time": "2021-09-14T14:02:44+00:00"
         },
         {
             "name": "symfony/polyfill-intl-normalizer",
-            "version": "v1.23.0",
+            "version": "v1.25.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@@ -4352,12 +4751,12 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
-                },
                 "files": [
                     "bootstrap.php"
                 ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+                },
                 "classmap": [
                     "Resources/stubs"
                 ]
@@ -4387,7 +4786,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0"
+                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0"
             },
             "funding": [
                 {
@@ -4407,21 +4806,24 @@
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.23.0",
+            "version": "v1.25.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1"
+                "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1",
-                "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
+                "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.1"
             },
+            "provide": {
+                "ext-mbstring": "*"
+            },
             "suggest": {
                 "ext-mbstring": "For best performance"
             },
@@ -4436,12 +4838,12 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
-                },
                 "files": [
                     "bootstrap.php"
-                ]
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -4467,7 +4869,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0"
+                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0"
             },
             "funding": [
                 {
@@ -4483,11 +4885,11 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-27T09:27:20+00:00"
+            "time": "2021-11-30T18:21:41+00:00"
         },
         {
             "name": "symfony/polyfill-php72",
-            "version": "v1.23.0",
+            "version": "v1.25.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php72.git",
@@ -4513,12 +4915,12 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Php72\\": ""
-                },
                 "files": [
                     "bootstrap.php"
-                ]
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php72\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -4543,7 +4945,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0"
+                "source": "https://github.com/symfony/polyfill-php72/tree/v1.25.0"
             },
             "funding": [
                 {
@@ -4563,16 +4965,16 @@
         },
         {
             "name": "symfony/polyfill-php73",
-            "version": "v1.23.0",
+            "version": "v1.25.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php73.git",
-                "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010"
+                "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010",
-                "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5",
+                "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5",
                 "shasum": ""
             },
             "require": {
@@ -4589,12 +4991,12 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Php73\\": ""
-                },
                 "files": [
                     "bootstrap.php"
                 ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
                 "classmap": [
                     "Resources/stubs"
                 ]
@@ -4622,7 +5024,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0"
+                "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0"
             },
             "funding": [
                 {
@@ -4638,20 +5040,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-02-19T12:13:01+00:00"
+            "time": "2021-06-05T21:20:04+00:00"
         },
         {
             "name": "symfony/polyfill-php80",
-            "version": "v1.23.0",
+            "version": "v1.25.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php80.git",
-                "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0"
+                "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0",
-                "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c",
+                "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c",
                 "shasum": ""
             },
             "require": {
@@ -4668,12 +5070,12 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Php80\\": ""
-                },
                 "files": [
                     "bootstrap.php"
                 ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
                 "classmap": [
                     "Resources/stubs"
                 ]
@@ -4705,7 +5107,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0"
+                "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0"
             },
             "funding": [
                 {
@@ -4721,25 +5123,104 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-02-19T12:13:01+00:00"
+            "time": "2022-03-04T08:16:47+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php81",
+            "version": "v1.25.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php81.git",
+                "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
+                "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.23-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php81\\": ""
+                },
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2021-09-13T13:58:11+00:00"
         },
         {
             "name": "symfony/process",
-            "version": "v5.2.7",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e"
+                "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e",
-                "reference": "98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e",
+                "url": "https://api.github.com/repos/symfony/process/zipball/597f3fff8e3e91836bb0bd38f5718b56ddbde2f3",
+                "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2.5",
-                "symfony/polyfill-php80": "^1.15"
+                "symfony/polyfill-php80": "^1.16"
             },
             "type": "library",
             "autoload": {
@@ -4767,7 +5248,7 @@
             "description": "Executes commands in sub-processes",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/process/tree/v5.3.0-BETA1"
+                "source": "https://github.com/symfony/process/tree/v5.4.8"
             },
             "funding": [
                 {
@@ -4783,40 +5264,41 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-04-08T10:27:02+00:00"
+            "time": "2022-04-08T05:07:18+00:00"
         },
         {
             "name": "symfony/routing",
-            "version": "v5.2.9",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/routing.git",
-                "reference": "4a7b2bf5e1221be1902b6853743a9bb317f6925e"
+                "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/4a7b2bf5e1221be1902b6853743a9bb317f6925e",
-                "reference": "4a7b2bf5e1221be1902b6853743a9bb317f6925e",
+                "url": "https://api.github.com/repos/symfony/routing/zipball/e07817bb6244ea33ef5ad31abc4a9288bef3f2f7",
+                "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1",
-                "symfony/polyfill-php80": "^1.15"
+                "symfony/deprecation-contracts": "^2.1|^3",
+                "symfony/polyfill-php80": "^1.16"
             },
             "conflict": {
-                "symfony/config": "<5.0",
+                "doctrine/annotations": "<1.12",
+                "symfony/config": "<5.3",
                 "symfony/dependency-injection": "<4.4",
                 "symfony/yaml": "<4.4"
             },
             "require-dev": {
-                "doctrine/annotations": "^1.10.4",
-                "psr/log": "~1.0",
-                "symfony/config": "^5.0",
-                "symfony/dependency-injection": "^4.4|^5.0",
-                "symfony/expression-language": "^4.4|^5.0",
-                "symfony/http-foundation": "^4.4|^5.0",
-                "symfony/yaml": "^4.4|^5.0"
+                "doctrine/annotations": "^1.12",
+                "psr/log": "^1|^2|^3",
+                "symfony/config": "^5.3|^6.0",
+                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+                "symfony/expression-language": "^4.4|^5.0|^6.0",
+                "symfony/http-foundation": "^4.4|^5.0|^6.0",
+                "symfony/yaml": "^4.4|^5.0|^6.0"
             },
             "suggest": {
                 "symfony/config": "For using the all-in-one router or any loader",
@@ -4856,7 +5338,7 @@
                 "url"
             ],
             "support": {
-                "source": "https://github.com/symfony/routing/tree/v5.2.9"
+                "source": "https://github.com/symfony/routing/tree/v5.4.8"
             },
             "funding": [
                 {
@@ -4872,25 +5354,29 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-16T13:07:46+00:00"
+            "time": "2022-04-18T21:45:37+00:00"
         },
         {
             "name": "symfony/service-contracts",
-            "version": "v2.4.0",
+            "version": "v2.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/service-contracts.git",
-                "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"
+                "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
-                "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
+                "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2.5",
-                "psr/container": "^1.1"
+                "psr/container": "^1.1",
+                "symfony/deprecation-contracts": "^2.1|^3"
+            },
+            "conflict": {
+                "ext-psr": "<1.1|>=2"
             },
             "suggest": {
                 "symfony/service-implementation": ""
@@ -4898,7 +5384,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "2.4-dev"
+                    "dev-main": "2.5-dev"
                 },
                 "thanks": {
                     "name": "symfony/contracts",
@@ -4935,7 +5421,7 @@
                 "standards"
             ],
             "support": {
-                "source": "https://github.com/symfony/service-contracts/tree/v2.4.0"
+                "source": "https://github.com/symfony/service-contracts/tree/v2.5.1"
             },
             "funding": [
                 {
@@ -4951,20 +5437,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-04-01T10:43:52+00:00"
+            "time": "2022-03-13T20:07:29+00:00"
         },
         {
             "name": "symfony/string",
-            "version": "v5.2.8",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/string.git",
-                "reference": "01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db"
+                "reference": "3c061a76bff6d6ea427d85e12ad1bb8ed8cd43e8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/string/zipball/01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db",
-                "reference": "01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db",
+                "url": "https://api.github.com/repos/symfony/string/zipball/3c061a76bff6d6ea427d85e12ad1bb8ed8cd43e8",
+                "reference": "3c061a76bff6d6ea427d85e12ad1bb8ed8cd43e8",
                 "shasum": ""
             },
             "require": {
@@ -4975,20 +5461,23 @@
                 "symfony/polyfill-mbstring": "~1.0",
                 "symfony/polyfill-php80": "~1.15"
             },
+            "conflict": {
+                "symfony/translation-contracts": ">=3.0"
+            },
             "require-dev": {
-                "symfony/error-handler": "^4.4|^5.0",
-                "symfony/http-client": "^4.4|^5.0",
+                "symfony/error-handler": "^4.4|^5.0|^6.0",
+                "symfony/http-client": "^4.4|^5.0|^6.0",
                 "symfony/translation-contracts": "^1.1|^2",
-                "symfony/var-exporter": "^4.4|^5.0"
+                "symfony/var-exporter": "^4.4|^5.0|^6.0"
             },
             "type": "library",
             "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\String\\": ""
-                },
                 "files": [
                     "Resources/functions.php"
                 ],
+                "psr-4": {
+                    "Symfony\\Component\\String\\": ""
+                },
                 "exclude-from-classmap": [
                     "/Tests/"
                 ]
@@ -5018,7 +5507,7 @@
                 "utf8"
             ],
             "support": {
-                "source": "https://github.com/symfony/string/tree/v5.2.8"
+                "source": "https://github.com/symfony/string/tree/v5.4.8"
             },
             "funding": [
                 {
@@ -5034,30 +5523,32 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-10T14:56:10+00:00"
+            "time": "2022-04-19T10:40:37+00:00"
         },
         {
             "name": "symfony/translation",
-            "version": "v5.2.9",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation.git",
-                "reference": "61af68dba333e2d376a325a29c2a3f2a605b4876"
+                "reference": "f5c0f6d1f20993b2606f3a5f36b1dc8c1899170b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/61af68dba333e2d376a325a29c2a3f2a605b4876",
-                "reference": "61af68dba333e2d376a325a29c2a3f2a605b4876",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/f5c0f6d1f20993b2606f3a5f36b1dc8c1899170b",
+                "reference": "f5c0f6d1f20993b2606f3a5f36b1dc8c1899170b",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2.5",
+                "symfony/deprecation-contracts": "^2.1|^3",
                 "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php80": "^1.15",
+                "symfony/polyfill-php80": "^1.16",
                 "symfony/translation-contracts": "^2.3"
             },
             "conflict": {
                 "symfony/config": "<4.4",
+                "symfony/console": "<5.3",
                 "symfony/dependency-injection": "<5.0",
                 "symfony/http-kernel": "<5.0",
                 "symfony/twig-bundle": "<5.0",
@@ -5067,15 +5558,17 @@
                 "symfony/translation-implementation": "2.3"
             },
             "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "^4.4|^5.0",
-                "symfony/console": "^4.4|^5.0",
-                "symfony/dependency-injection": "^5.0",
-                "symfony/finder": "^4.4|^5.0",
-                "symfony/http-kernel": "^5.0",
-                "symfony/intl": "^4.4|^5.0",
-                "symfony/service-contracts": "^1.1.2|^2",
-                "symfony/yaml": "^4.4|^5.0"
+                "psr/log": "^1|^2|^3",
+                "symfony/config": "^4.4|^5.0|^6.0",
+                "symfony/console": "^5.4|^6.0",
+                "symfony/dependency-injection": "^5.0|^6.0",
+                "symfony/finder": "^4.4|^5.0|^6.0",
+                "symfony/http-client-contracts": "^1.1|^2.0|^3.0",
+                "symfony/http-kernel": "^5.0|^6.0",
+                "symfony/intl": "^4.4|^5.0|^6.0",
+                "symfony/polyfill-intl-icu": "^1.21",
+                "symfony/service-contracts": "^1.1.2|^2|^3",
+                "symfony/yaml": "^4.4|^5.0|^6.0"
             },
             "suggest": {
                 "psr/log-implementation": "To use logging capability in translator",
@@ -5111,7 +5604,7 @@
             "description": "Provides tools to internationalize your application",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/translation/tree/v5.2.9"
+                "source": "https://github.com/symfony/translation/tree/v5.4.8"
             },
             "funding": [
                 {
@@ -5127,20 +5620,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-16T13:07:46+00:00"
+            "time": "2022-04-22T08:14:12+00:00"
         },
         {
             "name": "symfony/translation-contracts",
-            "version": "v2.4.0",
+            "version": "v2.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation-contracts.git",
-                "reference": "95c812666f3e91db75385749fe219c5e494c7f95"
+                "reference": "1211df0afa701e45a04253110e959d4af4ef0f07"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95",
-                "reference": "95c812666f3e91db75385749fe219c5e494c7f95",
+                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1211df0afa701e45a04253110e959d4af4ef0f07",
+                "reference": "1211df0afa701e45a04253110e959d4af4ef0f07",
                 "shasum": ""
             },
             "require": {
@@ -5152,7 +5645,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "2.4-dev"
+                    "dev-main": "2.5-dev"
                 },
                 "thanks": {
                     "name": "symfony/contracts",
@@ -5189,7 +5682,7 @@
                 "standards"
             ],
             "support": {
-                "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0"
+                "source": "https://github.com/symfony/translation-contracts/tree/v2.5.1"
             },
             "funding": [
                 {
@@ -5205,26 +5698,26 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-03-23T23:28:01+00:00"
+            "time": "2022-01-02T09:53:40+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v5.2.8",
+            "version": "v5.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "d693200a73fae179d27f8f1b16b4faf3e8569eba"
+                "reference": "cdcadd343d31ad16fc5e006b0de81ea307435053"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d693200a73fae179d27f8f1b16b4faf3e8569eba",
-                "reference": "d693200a73fae179d27f8f1b16b4faf3e8569eba",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cdcadd343d31ad16fc5e006b0de81ea307435053",
+                "reference": "cdcadd343d31ad16fc5e006b0de81ea307435053",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2.5",
                 "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php80": "^1.15"
+                "symfony/polyfill-php80": "^1.16"
             },
             "conflict": {
                 "phpunit/phpunit": "<5.4.3",
@@ -5232,8 +5725,9 @@
             },
             "require-dev": {
                 "ext-iconv": "*",
-                "symfony/console": "^4.4|^5.0",
-                "symfony/process": "^4.4|^5.0",
+                "symfony/console": "^4.4|^5.0|^6.0",
+                "symfony/process": "^4.4|^5.0|^6.0",
+                "symfony/uid": "^5.1|^6.0",
                 "twig/twig": "^2.13|^3.0.4"
             },
             "suggest": {
@@ -5277,7 +5771,7 @@
                 "dump"
             ],
             "support": {
-                "source": "https://github.com/symfony/var-dumper/tree/v5.2.8"
+                "source": "https://github.com/symfony/var-dumper/tree/v5.4.8"
             },
             "funding": [
                 {
@@ -5293,30 +5787,30 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-07T13:42:21+00:00"
+            "time": "2022-04-26T13:19:20+00:00"
         },
         {
             "name": "tijsverkoyen/css-to-inline-styles",
-            "version": "2.2.3",
+            "version": "2.2.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
-                "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5"
+                "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/b43b05cf43c1b6d849478965062b6ef73e223bb5",
-                "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5",
+                "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c",
+                "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c",
                 "shasum": ""
             },
             "require": {
                 "ext-dom": "*",
                 "ext-libxml": "*",
                 "php": "^5.5 || ^7.0 || ^8.0",
-                "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0"
+                "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5"
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10"
             },
             "type": "library",
             "extra": {
@@ -5344,37 +5838,37 @@
             "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
             "support": {
                 "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
-                "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.3"
+                "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4"
             },
-            "time": "2020-07-13T06:12:54+00:00"
+            "time": "2021-12-08T09:12:39+00:00"
         },
         {
             "name": "vlucas/phpdotenv",
-            "version": "v5.3.0",
+            "version": "v5.4.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/vlucas/phpdotenv.git",
-                "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56"
+                "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b3eac5c7ac896e52deab4a99068e3f4ab12d9e56",
-                "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56",
+                "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f",
+                "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f",
                 "shasum": ""
             },
             "require": {
                 "ext-pcre": "*",
-                "graham-campbell/result-type": "^1.0.1",
+                "graham-campbell/result-type": "^1.0.2",
                 "php": "^7.1.3 || ^8.0",
-                "phpoption/phpoption": "^1.7.4",
-                "symfony/polyfill-ctype": "^1.17",
-                "symfony/polyfill-mbstring": "^1.17",
-                "symfony/polyfill-php80": "^1.17"
+                "phpoption/phpoption": "^1.8",
+                "symfony/polyfill-ctype": "^1.23",
+                "symfony/polyfill-mbstring": "^1.23.1",
+                "symfony/polyfill-php80": "^1.23.1"
             },
             "require-dev": {
                 "bamarni/composer-bin-plugin": "^1.4.1",
                 "ext-filter": "*",
-                "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5.1"
+                "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10"
             },
             "suggest": {
                 "ext-filter": "Required to use the boolean validator."
@@ -5382,7 +5876,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.3-dev"
+                    "dev-master": "5.4-dev"
                 }
             },
             "autoload": {
@@ -5397,13 +5891,13 @@
             "authors": [
                 {
                     "name": "Graham Campbell",
-                    "email": "graham@alt-three.com",
-                    "homepage": "https://gjcampbell.co.uk/"
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
                 },
                 {
                     "name": "Vance Lucas",
                     "email": "vance@vancelucas.com",
-                    "homepage": "https://vancelucas.com/"
+                    "homepage": "https://github.com/vlucas"
                 }
             ],
             "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
@@ -5414,7 +5908,7 @@
             ],
             "support": {
                 "issues": "https://github.com/vlucas/phpdotenv/issues",
-                "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.0"
+                "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1"
             },
             "funding": [
                 {
@@ -5426,20 +5920,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-01-20T15:23:13+00:00"
+            "time": "2021-12-12T23:22:04+00:00"
         },
         {
             "name": "voku/portable-ascii",
-            "version": "1.5.6",
+            "version": "1.6.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/voku/portable-ascii.git",
-                "reference": "80953678b19901e5165c56752d087fc11526017c"
+                "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c",
-                "reference": "80953678b19901e5165c56752d087fc11526017c",
+                "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a",
+                "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a",
                 "shasum": ""
             },
             "require": {
@@ -5476,7 +5970,7 @@
             ],
             "support": {
                 "issues": "https://github.com/voku/portable-ascii/issues",
-                "source": "https://github.com/voku/portable-ascii/tree/1.5.6"
+                "source": "https://github.com/voku/portable-ascii/tree/1.6.1"
             },
             "funding": [
                 {
@@ -5500,7 +5994,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-11-12T00:07:28+00:00"
+            "time": "2022-01-24T18:55:24+00:00"
         },
         {
             "name": "webmozart/assert",
@@ -5564,16 +6058,16 @@
     "packages-dev": [
         {
             "name": "brianium/paratest",
-            "version": "v6.3.0",
+            "version": "v6.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/paratestphp/paratest.git",
-                "reference": "268d5b2b4237c0abf76c4aa9633ad8580be01e1e"
+                "reference": "589cdb23728b2a19872945580b95d8aa2c6619da"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/paratestphp/paratest/zipball/268d5b2b4237c0abf76c4aa9633ad8580be01e1e",
-                "reference": "268d5b2b4237c0abf76c4aa9633ad8580be01e1e",
+                "url": "https://api.github.com/repos/paratestphp/paratest/zipball/589cdb23728b2a19872945580b95d8aa2c6619da",
+                "reference": "589cdb23728b2a19872945580b95d8aa2c6619da",
                 "shasum": ""
             },
             "require": {
@@ -5582,28 +6076,22 @@
                 "ext-reflection": "*",
                 "ext-simplexml": "*",
                 "php": "^7.3 || ^8.0",
-                "phpunit/php-code-coverage": "^9.2.6",
-                "phpunit/php-file-iterator": "^3.0.5",
+                "phpunit/php-code-coverage": "^9.2.11",
+                "phpunit/php-file-iterator": "^3.0.6",
                 "phpunit/php-timer": "^5.0.3",
-                "phpunit/phpunit": "^9.5.4",
+                "phpunit/phpunit": "^9.5.14",
                 "sebastian/environment": "^5.1.3",
-                "symfony/console": "^4.4.21 || ^5.2.6",
-                "symfony/process": "^4.4.21 || ^5.2.4"
+                "symfony/console": "^5.4.0 || ^6.0.0",
+                "symfony/process": "^5.4.0 || ^6.0.0"
             },
             "require-dev": {
                 "doctrine/coding-standard": "^9.0.0",
-                "ekino/phpstan-banned-code": "^0.4.0",
-                "ergebnis/phpstan-rules": "^0.15.3",
                 "ext-posix": "*",
-                "infection/infection": "^0.21.5",
-                "phpstan/phpstan": "^0.12.84",
-                "phpstan/phpstan-deprecation-rules": "^0.12.6",
-                "phpstan/phpstan-phpunit": "^0.12.18",
-                "phpstan/phpstan-strict-rules": "^0.12.9",
-                "squizlabs/php_codesniffer": "^3.6.0",
-                "symfony/filesystem": "^5.2.6",
-                "thecodingmachine/phpstan-strict-rules": "^0.12.1",
-                "vimeo/psalm": "^4.7.1"
+                "infection/infection": "^0.26.5",
+                "malukenho/mcbumpface": "^1.1.5",
+                "squizlabs/php_codesniffer": "^3.6.2",
+                "symfony/filesystem": "^v5.4.0 || ^6.0.0",
+                "vimeo/psalm": "^4.20.0"
             },
             "bin": [
                 "bin/paratest"
@@ -5642,7 +6130,7 @@
             ],
             "support": {
                 "issues": "https://github.com/paratestphp/paratest/issues",
-                "source": "https://github.com/paratestphp/paratest/tree/v6.3.0"
+                "source": "https://github.com/paratestphp/paratest/tree/v6.4.4"
             },
             "funding": [
                 {
@@ -5654,146 +6142,34 @@
                     "type": "paypal"
                 }
             ],
-            "time": "2021-04-27T09:24:27+00:00"
-        },
-        {
-            "name": "browserstack/browserstack-local",
-            "version": "v1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/browserstack/browserstack-local-php.git",
-                "reference": "491c6e31960ce8111d2cb70cb84d03e73f270dbb"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/browserstack/browserstack-local-php/zipball/491c6e31960ce8111d2cb70cb84d03e73f270dbb",
-                "reference": "491c6e31960ce8111d2cb70cb84d03e73f270dbb",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.19"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "4.6.*"
-            },
-            "suggest": {
-                "phpdocumentor/phpdocumentor": "2.*"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "BrowserStack\\": "lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "PHP bindings for BrowserStack Local",
-            "homepage": "https://github.com/browserstack/browserstack-local-php",
-            "keywords": [
-                "BrowserStack",
-                "browserstacklocal",
-                "local",
-                "php",
-                "selenium"
-            ],
-            "support": {
-                "issues": "https://github.com/browserstack/browserstack-local-php/issues",
-                "source": "https://github.com/browserstack/browserstack-local-php"
-            },
-            "time": "2016-09-19T13:39:06+00:00"
-        },
-        {
-            "name": "chinleung/laravel-browserstack",
-            "version": "v1.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/chinleung/laravel-browserstack.git",
-                "reference": "ba29fd02cefd059494871b0c97cc89785674d1cb"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/chinleung/laravel-browserstack/zipball/ba29fd02cefd059494871b0c97cc89785674d1cb",
-                "reference": "ba29fd02cefd059494871b0c97cc89785674d1cb",
-                "shasum": ""
-            },
-            "require": {
-                "browserstack/browserstack-local": "^1.1",
-                "guzzlehttp/guzzle": "^6.5|^7.0",
-                "illuminate/support": "~5.8.0|^6.0|^7.0|^8.0",
-                "laravel/dusk": "^5.9|^6.0",
-                "php": "^7.2"
-            },
-            "require-dev": {
-                "orchestra/testbench": "3.8.*",
-                "phpunit/phpunit": "^8.0"
-            },
-            "type": "library",
-            "extra": {
-                "laravel": {
-                    "providers": [
-                        "ChinLeung\\BrowserStack\\BrowserStackServiceProvider"
-                    ]
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "ChinLeung\\BrowserStack\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Chin Leung",
-                    "email": "hello@chinleung.com",
-                    "role": "Developer"
-                }
-            ],
-            "description": "Run Laravel Dusk tests on BrowserStack.",
-            "homepage": "https://github.com/chinleung/laravel-browserstack",
-            "keywords": [
-                "BrowserStack",
-                "automate",
-                "chinleung",
-                "laravel-browserstack",
-                "laravel-dusk",
-                "testing"
-            ],
-            "support": {
-                "issues": "https://github.com/chinleung/laravel-browserstack/issues",
-                "source": "https://github.com/chinleung/laravel-browserstack/tree/v1.4.1"
-            },
-            "time": "2021-04-23T14:20:08+00:00"
+            "time": "2022-03-28T07:55:11+00:00"
         },
         {
             "name": "doctrine/instantiator",
-            "version": "1.4.0",
+            "version": "1.4.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
+                "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
-                "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
+                "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.1 || ^8.0"
             },
             "require-dev": {
-                "doctrine/coding-standard": "^8.0",
+                "doctrine/coding-standard": "^9",
                 "ext-pdo": "*",
                 "ext-phar": "*",
-                "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-phpunit": "^0.12",
-                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+                "phpbench/phpbench": "^0.16 || ^1",
+                "phpstan/phpstan": "^1.4",
+                "phpstan/phpstan-phpunit": "^1",
+                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+                "vimeo/psalm": "^4.22"
             },
             "type": "library",
             "autoload": {
@@ -5820,7 +6196,7 @@
             ],
             "support": {
                 "issues": "https://github.com/doctrine/instantiator/issues",
-                "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
+                "source": "https://github.com/doctrine/instantiator/tree/1.4.1"
             },
             "funding": [
                 {
@@ -5836,20 +6212,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-11-10T18:47:58+00:00"
+            "time": "2022-03-03T08:28:38+00:00"
         },
         {
             "name": "facade/flare-client-php",
-            "version": "1.8.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/facade/flare-client-php.git",
-                "reference": "69742118c037f34ee1ef86dc605be4a105d9e984"
+                "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/facade/flare-client-php/zipball/69742118c037f34ee1ef86dc605be4a105d9e984",
-                "reference": "69742118c037f34ee1ef86dc605be4a105d9e984",
+                "url": "https://api.github.com/repos/facade/flare-client-php/zipball/b2adf1512755637d0cef4f7d1b54301325ac78ed",
+                "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed",
                 "shasum": ""
             },
             "require": {
@@ -5872,12 +6248,12 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Facade\\FlareClient\\": "src"
-                },
                 "files": [
                     "src/helpers.php"
-                ]
+                ],
+                "psr-4": {
+                    "Facade\\FlareClient\\": "src"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -5893,7 +6269,7 @@
             ],
             "support": {
                 "issues": "https://github.com/facade/flare-client-php/issues",
-                "source": "https://github.com/facade/flare-client-php/tree/1.8.0"
+                "source": "https://github.com/facade/flare-client-php/tree/1.9.1"
             },
             "funding": [
                 {
@@ -5901,28 +6277,28 @@
                     "type": "github"
                 }
             ],
-            "time": "2021-04-30T11:11:50+00:00"
+            "time": "2021-09-13T12:16:46+00:00"
         },
         {
             "name": "facade/ignition",
-            "version": "2.9.0",
+            "version": "2.17.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/facade/ignition.git",
-                "reference": "e7db3b601ce742568b92648818ef903904d20164"
+                "reference": "1d71996f83c9a5a7807331b8986ac890352b7a0c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/facade/ignition/zipball/e7db3b601ce742568b92648818ef903904d20164",
-                "reference": "e7db3b601ce742568b92648818ef903904d20164",
+                "url": "https://api.github.com/repos/facade/ignition/zipball/1d71996f83c9a5a7807331b8986ac890352b7a0c",
+                "reference": "1d71996f83c9a5a7807331b8986ac890352b7a0c",
                 "shasum": ""
             },
             "require": {
+                "ext-curl": "*",
                 "ext-json": "*",
                 "ext-mbstring": "*",
-                "facade/flare-client-php": "^1.6",
+                "facade/flare-client-php": "^1.9.1",
                 "facade/ignition-contracts": "^1.0.2",
-                "filp/whoops": "^2.4",
                 "illuminate/support": "^7.0|^8.0",
                 "monolog/monolog": "^2.0",
                 "php": "^7.2.5|^8.0",
@@ -5931,6 +6307,7 @@
             },
             "require-dev": {
                 "friendsofphp/php-cs-fixer": "^2.14",
+                "livewire/livewire": "^2.4",
                 "mockery/mockery": "^1.3",
                 "orchestra/testbench": "^5.0|^6.0",
                 "psalm/plugin-laravel": "^1.2"
@@ -5953,12 +6330,12 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Facade\\Ignition\\": "src"
-                },
                 "files": [
                     "src/helpers.php"
-                ]
+                ],
+                "psr-4": {
+                    "Facade\\Ignition\\": "src"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -5978,7 +6355,7 @@
                 "issues": "https://github.com/facade/ignition/issues",
                 "source": "https://github.com/facade/ignition"
             },
-            "time": "2021-05-05T06:45:12+00:00"
+            "time": "2022-02-23T18:31:24+00:00"
         },
         {
             "name": "facade/ignition-contracts",
@@ -6035,32 +6412,34 @@
         },
         {
             "name": "fakerphp/faker",
-            "version": "v1.14.1",
+            "version": "v1.19.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/FakerPHP/Faker.git",
-                "reference": "ed22aee8d17c7b396f74a58b1e7fefa4f90d5ef1"
+                "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/ed22aee8d17c7b396f74a58b1e7fefa4f90d5ef1",
-                "reference": "ed22aee8d17c7b396f74a58b1e7fefa4f90d5ef1",
+                "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/d7f08a622b3346766325488aa32ddc93ccdecc75",
+                "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.1 || ^8.0",
-                "psr/container": "^1.0",
-                "symfony/deprecation-contracts": "^2.2"
+                "psr/container": "^1.0 || ^2.0",
+                "symfony/deprecation-contracts": "^2.2 || ^3.0"
             },
             "conflict": {
                 "fzaninotto/faker": "*"
             },
             "require-dev": {
                 "bamarni/composer-bin-plugin": "^1.4.1",
+                "doctrine/persistence": "^1.3 || ^2.0",
                 "ext-intl": "*",
                 "symfony/phpunit-bridge": "^4.4 || ^5.2"
             },
             "suggest": {
+                "doctrine/orm": "Required to use Faker\\ORM\\Doctrine",
                 "ext-curl": "Required by Faker\\Provider\\Image to download images.",
                 "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.",
                 "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.",
@@ -6069,7 +6448,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "v1.15-dev"
+                    "dev-main": "v1.19-dev"
                 }
             },
             "autoload": {
@@ -6094,27 +6473,27 @@
             ],
             "support": {
                 "issues": "https://github.com/FakerPHP/Faker/issues",
-                "source": "https://github.com/FakerPHP/Faker/tree/v.1.14.1"
+                "source": "https://github.com/FakerPHP/Faker/tree/v1.19.0"
             },
-            "time": "2021-03-30T06:27:33+00:00"
+            "time": "2022-02-02T17:38:57+00:00"
         },
         {
             "name": "filp/whoops",
-            "version": "2.12.1",
+            "version": "2.14.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/filp/whoops.git",
-                "reference": "c13c0be93cff50f88bbd70827d993026821914dd"
+                "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/filp/whoops/zipball/c13c0be93cff50f88bbd70827d993026821914dd",
-                "reference": "c13c0be93cff50f88bbd70827d993026821914dd",
+                "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
+                "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
                 "shasum": ""
             },
             "require": {
                 "php": "^5.5.9 || ^7.0 || ^8.0",
-                "psr/log": "^1.0.1"
+                "psr/log": "^1.0.1 || ^2.0 || ^3.0"
             },
             "require-dev": {
                 "mockery/mockery": "^0.9 || ^1.0",
@@ -6159,7 +6538,7 @@
             ],
             "support": {
                 "issues": "https://github.com/filp/whoops/issues",
-                "source": "https://github.com/filp/whoops/tree/2.12.1"
+                "source": "https://github.com/filp/whoops/tree/2.14.5"
             },
             "funding": [
                 {
@@ -6167,7 +6546,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2021-04-25T12:00:00+00:00"
+            "time": "2022-01-07T12:00:00+00:00"
         },
         {
             "name": "hamcrest/hamcrest-php",
@@ -6222,34 +6601,34 @@
         },
         {
             "name": "laravel/dusk",
-            "version": "v6.15.0",
+            "version": "v6.24.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/dusk.git",
-                "reference": "45b55fa20321086c4f8cc4e712cbe54db644e21c"
+                "reference": "7fed3695741787d9998c5f04c94adfd62d70e766"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/dusk/zipball/45b55fa20321086c4f8cc4e712cbe54db644e21c",
-                "reference": "45b55fa20321086c4f8cc4e712cbe54db644e21c",
+                "url": "https://api.github.com/repos/laravel/dusk/zipball/7fed3695741787d9998c5f04c94adfd62d70e766",
+                "reference": "7fed3695741787d9998c5f04c94adfd62d70e766",
                 "shasum": ""
             },
             "require": {
                 "ext-json": "*",
                 "ext-zip": "*",
-                "illuminate/console": "^6.0|^7.0|^8.0",
-                "illuminate/support": "^6.0|^7.0|^8.0",
+                "illuminate/console": "^6.0|^7.0|^8.0|^9.0",
+                "illuminate/support": "^6.0|^7.0|^8.0|^9.0",
                 "nesbot/carbon": "^2.0",
                 "php": "^7.2|^8.0",
                 "php-webdriver/webdriver": "^1.9.0",
-                "symfony/console": "^4.3|^5.0",
-                "symfony/finder": "^4.3|^5.0",
-                "symfony/process": "^4.3|^5.0",
-                "vlucas/phpdotenv": "^3.0|^4.0|^5.0"
+                "symfony/console": "^4.3|^5.0|^6.0",
+                "symfony/finder": "^4.3|^5.0|^6.0",
+                "symfony/process": "^4.3|^5.0|^6.0",
+                "vlucas/phpdotenv": "^3.0|^4.0|^5.2"
             },
             "require-dev": {
                 "mockery/mockery": "^1.0",
-                "orchestra/testbench": "^4.16|^5.17.1|^6.12.1",
+                "orchestra/testbench": "^4.16|^5.17.1|^6.12.1|^7.0",
                 "phpunit/phpunit": "^7.5.15|^8.4|^9.0"
             },
             "suggest": {
@@ -6289,22 +6668,22 @@
             ],
             "support": {
                 "issues": "https://github.com/laravel/dusk/issues",
-                "source": "https://github.com/laravel/dusk/tree/v6.15.0"
+                "source": "https://github.com/laravel/dusk/tree/v6.24.0"
             },
-            "time": "2021-04-06T14:14:57+00:00"
+            "time": "2022-05-09T13:43:52+00:00"
         },
         {
             "name": "laravel/sail",
-            "version": "v1.7.0",
+            "version": "v1.14.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/sail.git",
-                "reference": "d1f703d73f782af5427697cdc5023395cd341963"
+                "reference": "0e0e51f19c758c79acbda11e3870641fbad5b7d9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/sail/zipball/d1f703d73f782af5427697cdc5023395cd341963",
-                "reference": "d1f703d73f782af5427697cdc5023395cd341963",
+                "url": "https://api.github.com/repos/laravel/sail/zipball/0e0e51f19c758c79acbda11e3870641fbad5b7d9",
+                "reference": "0e0e51f19c758c79acbda11e3870641fbad5b7d9",
                 "shasum": ""
             },
             "require": {
@@ -6351,20 +6730,20 @@
                 "issues": "https://github.com/laravel/sail/issues",
                 "source": "https://github.com/laravel/sail"
             },
-            "time": "2021-05-25T16:41:13+00:00"
+            "time": "2022-05-12T12:53:10+00:00"
         },
         {
             "name": "mockery/mockery",
-            "version": "1.4.3",
+            "version": "1.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/mockery/mockery.git",
-                "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea"
+                "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/mockery/mockery/zipball/d1339f64479af1bee0e82a0413813fe5345a54ea",
-                "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea",
+                "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac",
+                "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac",
                 "shasum": ""
             },
             "require": {
@@ -6421,43 +6800,44 @@
             ],
             "support": {
                 "issues": "https://github.com/mockery/mockery/issues",
-                "source": "https://github.com/mockery/mockery/tree/1.4.3"
+                "source": "https://github.com/mockery/mockery/tree/1.5.0"
             },
-            "time": "2021-02-24T09:51:49+00:00"
+            "time": "2022-01-20T13:18:17+00:00"
         },
         {
             "name": "myclabs/deep-copy",
-            "version": "1.10.2",
+            "version": "1.11.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
+                "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
-                "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
+                "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.1 || ^8.0"
             },
-            "replace": {
-                "myclabs/deep-copy": "self.version"
+            "conflict": {
+                "doctrine/collections": "<1.6.8",
+                "doctrine/common": "<2.13.3 || >=3,<3.2.2"
             },
             "require-dev": {
-                "doctrine/collections": "^1.0",
-                "doctrine/common": "^2.6",
-                "phpunit/phpunit": "^7.1"
+                "doctrine/collections": "^1.6.8",
+                "doctrine/common": "^2.13.3 || ^3.2.2",
+                "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
             },
             "type": "library",
             "autoload": {
-                "psr-4": {
-                    "DeepCopy\\": "src/DeepCopy/"
-                },
                 "files": [
                     "src/DeepCopy/deep_copy.php"
-                ]
+                ],
+                "psr-4": {
+                    "DeepCopy\\": "src/DeepCopy/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -6473,7 +6853,7 @@
             ],
             "support": {
                 "issues": "https://github.com/myclabs/DeepCopy/issues",
-                "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
+                "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
             },
             "funding": [
                 {
@@ -6481,37 +6861,36 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-11-13T09:40:50+00:00"
+            "time": "2022-03-03T13:19:32+00:00"
         },
         {
             "name": "nunomaduro/collision",
-            "version": "v5.4.0",
+            "version": "v5.11.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nunomaduro/collision.git",
-                "reference": "41b7e9999133d5082700d31a1d0977161df8322a"
+                "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nunomaduro/collision/zipball/41b7e9999133d5082700d31a1d0977161df8322a",
-                "reference": "41b7e9999133d5082700d31a1d0977161df8322a",
+                "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461",
+                "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461",
                 "shasum": ""
             },
             "require": {
                 "facade/ignition-contracts": "^1.0",
-                "filp/whoops": "^2.7.2",
+                "filp/whoops": "^2.14.3",
                 "php": "^7.3 || ^8.0",
                 "symfony/console": "^5.0"
             },
             "require-dev": {
                 "brianium/paratest": "^6.1",
                 "fideloper/proxy": "^4.4.1",
-                "friendsofphp/php-cs-fixer": "^2.17.3",
                 "fruitcake/laravel-cors": "^2.0.3",
-                "laravel/framework": "^9.0",
+                "laravel/framework": "8.x-dev",
                 "nunomaduro/larastan": "^0.6.2",
                 "nunomaduro/mock-final-classes": "^1.0",
-                "orchestra/testbench": "^7.0",
+                "orchestra/testbench": "^6.0",
                 "phpstan/phpstan": "^0.12.64",
                 "phpunit/phpunit": "^9.5.0"
             },
@@ -6557,7 +6936,7 @@
             },
             "funding": [
                 {
-                    "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L",
+                    "url": "https://www.paypal.com/paypalme/enunomaduro",
                     "type": "custom"
                 },
                 {
@@ -6569,20 +6948,20 @@
                     "type": "patreon"
                 }
             ],
-            "time": "2021-04-09T13:38:32+00:00"
+            "time": "2022-01-10T16:22:52+00:00"
         },
         {
             "name": "phar-io/manifest",
-            "version": "2.0.1",
+            "version": "2.0.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phar-io/manifest.git",
-                "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133"
+                "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
-                "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
+                "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
+                "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
                 "shasum": ""
             },
             "require": {
@@ -6627,22 +7006,22 @@
             "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
             "support": {
                 "issues": "https://github.com/phar-io/manifest/issues",
-                "source": "https://github.com/phar-io/manifest/tree/master"
+                "source": "https://github.com/phar-io/manifest/tree/2.0.3"
             },
-            "time": "2020-06-27T14:33:11+00:00"
+            "time": "2021-07-20T11:28:43+00:00"
         },
         {
             "name": "phar-io/version",
-            "version": "3.1.0",
+            "version": "3.2.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phar-io/version.git",
-                "reference": "bae7c545bef187884426f042434e561ab1ddb182"
+                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182",
-                "reference": "bae7c545bef187884426f042434e561ab1ddb182",
+                "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
                 "shasum": ""
             },
             "require": {
@@ -6678,22 +7057,22 @@
             "description": "Library for handling version information and constraints",
             "support": {
                 "issues": "https://github.com/phar-io/version/issues",
-                "source": "https://github.com/phar-io/version/tree/3.1.0"
+                "source": "https://github.com/phar-io/version/tree/3.2.1"
             },
-            "time": "2021-02-23T14:00:09+00:00"
+            "time": "2022-02-21T01:04:05+00:00"
         },
         {
             "name": "php-webdriver/webdriver",
-            "version": "1.11.1",
+            "version": "1.12.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-webdriver/php-webdriver.git",
-                "reference": "da16e39968f8dd5cfb7d07eef91dc2b731c69880"
+                "reference": "b27ddf458d273c7d4602106fcaf978aa0b7fe15a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/da16e39968f8dd5cfb7d07eef91dc2b731c69880",
-                "reference": "da16e39968f8dd5cfb7d07eef91dc2b731c69880",
+                "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/b27ddf458d273c7d4602106fcaf978aa0b7fe15a",
+                "reference": "b27ddf458d273c7d4602106fcaf978aa0b7fe15a",
                 "shasum": ""
             },
             "require": {
@@ -6702,32 +7081,31 @@
                 "ext-zip": "*",
                 "php": "^5.6 || ~7.0 || ^8.0",
                 "symfony/polyfill-mbstring": "^1.12",
-                "symfony/process": "^2.8 || ^3.1 || ^4.0 || ^5.0"
+                "symfony/process": "^2.8 || ^3.1 || ^4.0 || ^5.0 || ^6.0"
             },
             "replace": {
                 "facebook/webdriver": "*"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.0",
                 "ondram/ci-detector": "^2.1 || ^3.5 || ^4.0",
                 "php-coveralls/php-coveralls": "^2.4",
                 "php-mock/php-mock-phpunit": "^1.1 || ^2.0",
                 "php-parallel-lint/php-parallel-lint": "^1.2",
                 "phpunit/phpunit": "^5.7 || ^7 || ^8 || ^9",
                 "squizlabs/php_codesniffer": "^3.5",
-                "symfony/var-dumper": "^3.3 || ^4.0 || ^5.0"
+                "symfony/var-dumper": "^3.3 || ^4.0 || ^5.0 || ^6.0"
             },
             "suggest": {
                 "ext-SimpleXML": "For Firefox profile creation"
             },
             "type": "library",
             "autoload": {
-                "psr-4": {
-                    "Facebook\\WebDriver\\": "lib/"
-                },
                 "files": [
                     "lib/Exception/TimeoutException.php"
-                ]
+                ],
+                "psr-4": {
+                    "Facebook\\WebDriver\\": "lib/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -6744,9 +7122,9 @@
             ],
             "support": {
                 "issues": "https://github.com/php-webdriver/php-webdriver/issues",
-                "source": "https://github.com/php-webdriver/php-webdriver/tree/1.11.1"
+                "source": "https://github.com/php-webdriver/php-webdriver/tree/1.12.1"
             },
-            "time": "2021-05-21T15:12:49+00:00"
+            "time": "2022-05-03T12:16:34+00:00"
         },
         {
             "name": "phpdocumentor/reflection-common",
@@ -6803,16 +7181,16 @@
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "5.2.2",
+            "version": "5.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
+                "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
-                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
+                "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
                 "shasum": ""
             },
             "require": {
@@ -6823,7 +7201,8 @@
                 "webmozart/assert": "^1.9.1"
             },
             "require-dev": {
-                "mockery/mockery": "~1.3.2"
+                "mockery/mockery": "~1.3.2",
+                "psalm/phar": "^4.8"
             },
             "type": "library",
             "extra": {
@@ -6853,22 +7232,22 @@
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
             "support": {
                 "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
-                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master"
+                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
             },
-            "time": "2020-09-03T19:13:55+00:00"
+            "time": "2021-10-19T17:43:47+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "1.4.0",
+            "version": "1.6.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
+                "reference": "77a32518733312af16a44300404e945338981de3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
-                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
+                "reference": "77a32518733312af16a44300404e945338981de3",
                 "shasum": ""
             },
             "require": {
@@ -6876,7 +7255,8 @@
                 "phpdocumentor/reflection-common": "^2.0"
             },
             "require-dev": {
-                "ext-tokenizer": "*"
+                "ext-tokenizer": "*",
+                "psalm/phar": "^4.8"
             },
             "type": "library",
             "extra": {
@@ -6902,39 +7282,39 @@
             "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
             "support": {
                 "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
-                "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0"
+                "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
             },
-            "time": "2020-09-17T18:55:26+00:00"
+            "time": "2022-03-15T21:29:03+00:00"
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.13.0",
+            "version": "v1.15.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea"
+                "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea",
-                "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
+                "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.2",
-                "php": "^7.2 || ~8.0, <8.1",
+                "php": "^7.2 || ~8.0, <8.2",
                 "phpdocumentor/reflection-docblock": "^5.2",
                 "sebastian/comparator": "^3.0 || ^4.0",
                 "sebastian/recursion-context": "^3.0 || ^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^6.0",
+                "phpspec/phpspec": "^6.0 || ^7.0",
                 "phpunit/phpunit": "^8.0 || ^9.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.11.x-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
@@ -6969,29 +7349,29 @@
             ],
             "support": {
                 "issues": "https://github.com/phpspec/prophecy/issues",
-                "source": "https://github.com/phpspec/prophecy/tree/1.13.0"
+                "source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
             },
-            "time": "2021-03-17T13:42:18+00:00"
+            "time": "2021-12-08T12:19:24+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
-            "version": "9.2.6",
+            "version": "9.2.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "f6293e1b30a2354e8428e004689671b83871edde"
+                "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde",
-                "reference": "f6293e1b30a2354e8428e004689671b83871edde",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
+                "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
                 "shasum": ""
             },
             "require": {
                 "ext-dom": "*",
                 "ext-libxml": "*",
                 "ext-xmlwriter": "*",
-                "nikic/php-parser": "^4.10.2",
+                "nikic/php-parser": "^4.13.0",
                 "php": ">=7.3",
                 "phpunit/php-file-iterator": "^3.0.3",
                 "phpunit/php-text-template": "^2.0.2",
@@ -7040,7 +7420,7 @@
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
-                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6"
+                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
             },
             "funding": [
                 {
@@ -7048,20 +7428,20 @@
                     "type": "github"
                 }
             ],
-            "time": "2021-03-28T07:26:59+00:00"
+            "time": "2022-03-07T09:28:20+00:00"
         },
         {
             "name": "phpunit/php-file-iterator",
-            "version": "3.0.5",
+            "version": "3.0.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-                "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8"
+                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8",
-                "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
                 "shasum": ""
             },
             "require": {
@@ -7100,7 +7480,7 @@
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
-                "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5"
+                "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
             },
             "funding": [
                 {
@@ -7108,7 +7488,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T05:57:25+00:00"
+            "time": "2021-12-02T12:48:52+00:00"
         },
         {
             "name": "phpunit/php-invoker",
@@ -7293,16 +7673,16 @@
         },
         {
             "name": "phpunit/phpunit",
-            "version": "9.5.4",
+            "version": "9.5.20",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "c73c6737305e779771147af66c96ca6a7ed8a741"
+                "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c73c6737305e779771147af66c96ca6a7ed8a741",
-                "reference": "c73c6737305e779771147af66c96ca6a7ed8a741",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba",
+                "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba",
                 "shasum": ""
             },
             "require": {
@@ -7314,11 +7694,11 @@
                 "ext-xml": "*",
                 "ext-xmlwriter": "*",
                 "myclabs/deep-copy": "^1.10.1",
-                "phar-io/manifest": "^2.0.1",
+                "phar-io/manifest": "^2.0.3",
                 "phar-io/version": "^3.0.2",
                 "php": ">=7.3",
                 "phpspec/prophecy": "^1.12.1",
-                "phpunit/php-code-coverage": "^9.2.3",
+                "phpunit/php-code-coverage": "^9.2.13",
                 "phpunit/php-file-iterator": "^3.0.5",
                 "phpunit/php-invoker": "^3.1.1",
                 "phpunit/php-text-template": "^2.0.3",
@@ -7332,7 +7712,7 @@
                 "sebastian/global-state": "^5.0.1",
                 "sebastian/object-enumerator": "^4.0.3",
                 "sebastian/resource-operations": "^3.0.3",
-                "sebastian/type": "^2.3",
+                "sebastian/type": "^3.0",
                 "sebastian/version": "^3.0.2"
             },
             "require-dev": {
@@ -7353,11 +7733,11 @@
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
-                ],
                 "files": [
                     "src/Framework/Assert/Functions.php"
+                ],
+                "classmap": [
+                    "src/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -7380,11 +7760,11 @@
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.4"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20"
             },
             "funding": [
                 {
-                    "url": "https://phpunit.de/donate.html",
+                    "url": "https://phpunit.de/sponsors.html",
                     "type": "custom"
                 },
                 {
@@ -7392,7 +7772,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2021-03-23T07:16:29+00:00"
+            "time": "2022-04-01T12:37:26+00:00"
         },
         {
             "name": "sebastian/cli-parser",
@@ -7760,16 +8140,16 @@
         },
         {
             "name": "sebastian/environment",
-            "version": "5.1.3",
+            "version": "5.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "388b6ced16caa751030f6a69e588299fa09200ac"
+                "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
-                "reference": "388b6ced16caa751030f6a69e588299fa09200ac",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7",
+                "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7",
                 "shasum": ""
             },
             "require": {
@@ -7811,7 +8191,7 @@
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/environment/issues",
-                "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
+                "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4"
             },
             "funding": [
                 {
@@ -7819,20 +8199,20 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T05:52:38+00:00"
+            "time": "2022-04-03T09:37:03+00:00"
         },
         {
             "name": "sebastian/exporter",
-            "version": "4.0.3",
+            "version": "4.0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65"
+                "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65",
-                "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
+                "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
                 "shasum": ""
             },
             "require": {
@@ -7881,14 +8261,14 @@
                 }
             ],
             "description": "Provides the functionality to export PHP variables for visualization",
-            "homepage": "http://www.github.com/sebastianbergmann/exporter",
+            "homepage": "https://www.github.com/sebastianbergmann/exporter",
             "keywords": [
                 "export",
                 "exporter"
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/exporter/issues",
-                "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3"
+                "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
             },
             "funding": [
                 {
@@ -7896,20 +8276,20 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T05:24:23+00:00"
+            "time": "2021-11-11T14:18:36+00:00"
         },
         {
             "name": "sebastian/global-state",
-            "version": "5.0.2",
+            "version": "5.0.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/global-state.git",
-                "reference": "a90ccbddffa067b51f574dea6eb25d5680839455"
+                "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455",
-                "reference": "a90ccbddffa067b51f574dea6eb25d5680839455",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
+                "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
                 "shasum": ""
             },
             "require": {
@@ -7952,7 +8332,7 @@
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/global-state/issues",
-                "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2"
+                "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
             },
             "funding": [
                 {
@@ -7960,7 +8340,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T15:55:19+00:00"
+            "time": "2022-02-14T08:28:10+00:00"
         },
         {
             "name": "sebastian/lines-of-code",
@@ -8251,28 +8631,28 @@
         },
         {
             "name": "sebastian/type",
-            "version": "2.3.1",
+            "version": "3.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/type.git",
-                "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2"
+                "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2",
-                "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2",
+                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
+                "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.3"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^9.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.3-dev"
+                    "dev-master": "3.0-dev"
                 }
             },
             "autoload": {
@@ -8295,7 +8675,7 @@
             "homepage": "https://github.com/sebastianbergmann/type",
             "support": {
                 "issues": "https://github.com/sebastianbergmann/type/issues",
-                "source": "https://github.com/sebastianbergmann/type/tree/2.3.1"
+                "source": "https://github.com/sebastianbergmann/type/tree/3.0.0"
             },
             "funding": [
                 {
@@ -8303,7 +8683,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T13:18:59+00:00"
+            "time": "2022-03-15T09:54:48+00:00"
         },
         {
             "name": "sebastian/version",
@@ -8360,16 +8740,16 @@
         },
         {
             "name": "theseer/tokenizer",
-            "version": "1.2.0",
+            "version": "1.2.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "75a63c33a8577608444246075ea0af0d052e452a"
+                "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
-                "reference": "75a63c33a8577608444246075ea0af0d052e452a",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
+                "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
                 "shasum": ""
             },
             "require": {
@@ -8398,7 +8778,7 @@
             "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
             "support": {
                 "issues": "https://github.com/theseer/tokenizer/issues",
-                "source": "https://github.com/theseer/tokenizer/tree/master"
+                "source": "https://github.com/theseer/tokenizer/tree/1.2.1"
             },
             "funding": [
                 {
@@ -8406,7 +8786,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-07-12T23:59:07+00:00"
+            "time": "2021-07-28T10:34:58+00:00"
         }
     ],
     "aliases": [],
@@ -8418,5 +8798,5 @@
         "php": "^7.3|^8.0"
     },
     "platform-dev": [],
-    "plugin-api-version": "2.1.0"
+    "plugin-api-version": "2.3.0"
 }
diff --git a/config/.gitignore b/metager/config/.gitignore
similarity index 100%
rename from config/.gitignore
rename to metager/config/.gitignore
diff --git a/config/adBlacklistDomains.txt b/metager/config/adBlacklistDomains.txt
similarity index 100%
rename from config/adBlacklistDomains.txt
rename to metager/config/adBlacklistDomains.txt
diff --git a/config/adBlacklistUrl.txt b/metager/config/adBlacklistUrl.txt
similarity index 100%
rename from config/adBlacklistUrl.txt
rename to metager/config/adBlacklistUrl.txt
diff --git a/config/app.php b/metager/config/app.php
similarity index 100%
rename from config/app.php
rename to metager/config/app.php
diff --git a/config/auth.php b/metager/config/auth.php
similarity index 100%
rename from config/auth.php
rename to metager/config/auth.php
diff --git a/config/broadcasting.php b/metager/config/broadcasting.php
similarity index 100%
rename from config/broadcasting.php
rename to metager/config/broadcasting.php
diff --git a/config/cache.php b/metager/config/cache.php
similarity index 100%
rename from config/cache.php
rename to metager/config/cache.php
diff --git a/config/captcha.php b/metager/config/captcha.php
similarity index 100%
rename from config/captcha.php
rename to metager/config/captcha.php
diff --git a/config/compile.php b/metager/config/compile.php
similarity index 100%
rename from config/compile.php
rename to metager/config/compile.php
diff --git a/config/database.php b/metager/config/database.php
similarity index 98%
rename from config/database.php
rename to metager/config/database.php
index 9d122eee5dc6ae59f613ef5003000b100975c3f8..8b3e132e9d920426b2e15037c8fa4db082c52baf 100644
--- a/config/database.php
+++ b/metager/config/database.php
@@ -53,7 +53,7 @@ return [
         ],
         'useragents' => [
             'driver' => 'sqlite',
-            'database' => database_path('useragents.sqlite'),
+            'database' => database_path(env('SQLITE_DATABASE', 'database.sqlite')),
             'prefix' => '',
         ],
         'mysql' => [
diff --git a/config/filesystems.php b/metager/config/filesystems.php
similarity index 100%
rename from config/filesystems.php
rename to metager/config/filesystems.php
diff --git a/config/hashing.php b/metager/config/hashing.php
similarity index 100%
rename from config/hashing.php
rename to metager/config/hashing.php
diff --git a/config/laravellocalization.php b/metager/config/laravellocalization.php
similarity index 100%
rename from config/laravellocalization.php
rename to metager/config/laravellocalization.php
diff --git a/config/logging.php b/metager/config/logging.php
similarity index 100%
rename from config/logging.php
rename to metager/config/logging.php
diff --git a/config/mail.php b/metager/config/mail.php
similarity index 100%
rename from config/mail.php
rename to metager/config/mail.php
diff --git a/config/metager/metager.php b/metager/config/metager/metager.php
similarity index 94%
rename from config/metager/metager.php
rename to metager/config/metager/metager.php
index 9eb4b24937e9ef8dd914df02c9dc24c42f224449..f144c37bc186e0f4d501727fc5db749f7acffafd 100644
--- a/config/metager/metager.php
+++ b/metager/config/metager/metager.php
@@ -62,8 +62,11 @@ return [
         "version" => env("maps_version"),
     ],
     "git" => [
-        "project_name" => env("PROJECT_NAME", "Not Set"),
+        "project_name" => "MetaGer",
         "branch_name" => env("BRANCH_NAME", "Not Set"),
         "commit_name" => env("COMMIT_NAME", "Not Set"),
     ],
+    "selenium" => [
+        "host" => env("SELENIUM_HOST", "localhost"),
+    ],
 ];
diff --git a/config/queue.php b/metager/config/queue.php
similarity index 100%
rename from config/queue.php
rename to metager/config/queue.php
diff --git a/config/services.php b/metager/config/services.php
similarity index 100%
rename from config/services.php
rename to metager/config/services.php
diff --git a/config/session.php b/metager/config/session.php
similarity index 100%
rename from config/session.php
rename to metager/config/session.php
diff --git a/config/stress.json b/metager/config/stress.json
similarity index 100%
rename from config/stress.json
rename to metager/config/stress.json
diff --git a/metager/config/sumas.json.example b/metager/config/sumas.json.example
new file mode 100644
index 0000000000000000000000000000000000000000..7d1eb42c9e421b9470ed05be0a651b605d9cd127
--- /dev/null
+++ b/metager/config/sumas.json.example
@@ -0,0 +1,18 @@
+{
+    "sumas": {
+
+    },
+    "foki": {
+        "web": {
+            "display-name": "index.foki.web",
+            "sumas": [
+            ],
+            "main": [
+            ]
+        }
+    },
+    "filter": {
+        "query-filter": {},
+        "parameter-filter": {}
+    }
+}
\ No newline at end of file
diff --git a/config/trustedproxy.php b/metager/config/trustedproxy.php
similarity index 94%
rename from config/trustedproxy.php
rename to metager/config/trustedproxy.php
index 78aabbea7fa679dbb2b890b02738dd5eb9843e77..94a851742812578620326131a3b3fa97def6dc32 100644
--- a/config/trustedproxy.php
+++ b/metager/config/trustedproxy.php
@@ -14,7 +14,9 @@ return [
      * of your proxy (e.g. if using Rackspace balancers).
      */
     'proxies' => [
-        '10.244.0.0/16',
+        '10.0.0.0/8',
+        '172.16.0.0/12',
+        '192.168.0.0/16',
         '144.76.113.134',
         '144.76.88.77',
         '167.233.15.225',
diff --git a/config/view.php b/metager/config/view.php
similarity index 100%
rename from config/view.php
rename to metager/config/view.php
diff --git a/metager/database/.gitignore b/metager/database/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..6a91a439ea968bf2f5ce8bb1cd8ddf5bf2cad6c7
--- /dev/null
+++ b/metager/database/.gitignore
@@ -0,0 +1 @@
+*.sqlite
\ No newline at end of file
diff --git a/database/factories/ModelFactory.php b/metager/database/factories/ModelFactory.php
similarity index 100%
rename from database/factories/ModelFactory.php
rename to metager/database/factories/ModelFactory.php
diff --git a/database/migrations/.gitkeep b/metager/database/migrations/.gitkeep
similarity index 100%
rename from database/migrations/.gitkeep
rename to metager/database/migrations/.gitkeep
diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/metager/database/migrations/2014_10_12_100000_create_password_resets_table.php
similarity index 100%
rename from database/migrations/2014_10_12_100000_create_password_resets_table.php
rename to metager/database/migrations/2014_10_12_100000_create_password_resets_table.php
diff --git a/database/migrations/2019_02_19_094337_monthlyrequests.php b/metager/database/migrations/2019_02_19_094337_monthlyrequests.php
similarity index 100%
rename from database/migrations/2019_02_19_094337_monthlyrequests.php
rename to metager/database/migrations/2019_02_19_094337_monthlyrequests.php
diff --git a/database/migrations/2019_04_30_151742_create_failed_jobs_table.php b/metager/database/migrations/2019_04_30_151742_create_failed_jobs_table.php
similarity index 100%
rename from database/migrations/2019_04_30_151742_create_failed_jobs_table.php
rename to metager/database/migrations/2019_04_30_151742_create_failed_jobs_table.php
diff --git a/database/migrations/2019_05_28_153442_create_users_table.php b/metager/database/migrations/2019_05_28_153442_create_users_table.php
similarity index 100%
rename from database/migrations/2019_05_28_153442_create_users_table.php
rename to metager/database/migrations/2019_05_28_153442_create_users_table.php
diff --git a/database/migrations/2019_10_15_103139_create_user_agents_table.php b/metager/database/migrations/2019_10_15_103139_create_user_agents_table.php
similarity index 100%
rename from database/migrations/2019_10_15_103139_create_user_agents_table.php
rename to metager/database/migrations/2019_10_15_103139_create_user_agents_table.php
diff --git a/database/migrations/2020_02_05_163522_create_cache_table.php b/metager/database/migrations/2020_02_05_163522_create_cache_table.php
similarity index 100%
rename from database/migrations/2020_02_05_163522_create_cache_table.php
rename to metager/database/migrations/2020_02_05_163522_create_cache_table.php
diff --git a/database/migrations/2021_10_05_115650_affiliate_clicks.php b/metager/database/migrations/2021_10_05_115650_affiliate_clicks.php
similarity index 100%
rename from database/migrations/2021_10_05_115650_affiliate_clicks.php
rename to metager/database/migrations/2021_10_05_115650_affiliate_clicks.php
diff --git a/database/migrations/2021_10_05_154034_affiliate_blacklist.php b/metager/database/migrations/2021_10_05_154034_affiliate_blacklist.php
similarity index 100%
rename from database/migrations/2021_10_05_154034_affiliate_blacklist.php
rename to metager/database/migrations/2021_10_05_154034_affiliate_blacklist.php
diff --git a/database/seeders/.gitkeep b/metager/database/seeders/.gitkeep
similarity index 100%
rename from database/seeders/.gitkeep
rename to metager/database/seeders/.gitkeep
diff --git a/database/seeders/DatabaseSeeder.php b/metager/database/seeders/DatabaseSeeder.php
similarity index 100%
rename from database/seeders/DatabaseSeeder.php
rename to metager/database/seeders/DatabaseSeeder.php
diff --git a/database/seeders/UsersSeeder.php b/metager/database/seeders/UsersSeeder.php
similarity index 100%
rename from database/seeders/UsersSeeder.php
rename to metager/database/seeders/UsersSeeder.php
diff --git a/package-lock.json b/metager/package-lock.json
similarity index 100%
rename from package-lock.json
rename to metager/package-lock.json
diff --git a/package.json b/metager/package.json
similarity index 100%
rename from package.json
rename to metager/package.json
diff --git a/phpunit.dusk.xml b/metager/phpunit.dusk.xml
similarity index 100%
rename from phpunit.dusk.xml
rename to metager/phpunit.dusk.xml
diff --git a/phpunit.xml b/metager/phpunit.xml
similarity index 100%
rename from phpunit.xml
rename to metager/phpunit.xml
diff --git a/public/.htaccess b/metager/public/.htaccess
similarity index 100%
rename from public/.htaccess
rename to metager/public/.htaccess
diff --git a/public/2866738.html b/metager/public/2866738.html
similarity index 100%
rename from public/2866738.html
rename to metager/public/2866738.html
diff --git a/metager/public/favicon.ico b/metager/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..80bb33e6bac16b5bd859d468118e3d55457b9136
Binary files /dev/null and b/metager/public/favicon.ico differ
diff --git a/public/fonts/arimo/Arimo-Bold.eot b/metager/public/fonts/arimo/Arimo-Bold.eot
similarity index 100%
rename from public/fonts/arimo/Arimo-Bold.eot
rename to metager/public/fonts/arimo/Arimo-Bold.eot
diff --git a/public/fonts/arimo/Arimo-Bold.svg b/metager/public/fonts/arimo/Arimo-Bold.svg
similarity index 100%
rename from public/fonts/arimo/Arimo-Bold.svg
rename to metager/public/fonts/arimo/Arimo-Bold.svg
diff --git a/public/fonts/arimo/Arimo-Bold.ttf b/metager/public/fonts/arimo/Arimo-Bold.ttf
similarity index 100%
rename from public/fonts/arimo/Arimo-Bold.ttf
rename to metager/public/fonts/arimo/Arimo-Bold.ttf
diff --git a/public/fonts/arimo/Arimo-Bold.woff b/metager/public/fonts/arimo/Arimo-Bold.woff
similarity index 100%
rename from public/fonts/arimo/Arimo-Bold.woff
rename to metager/public/fonts/arimo/Arimo-Bold.woff
diff --git a/public/fonts/arimo/Arimo-Bold.woff2 b/metager/public/fonts/arimo/Arimo-Bold.woff2
similarity index 100%
rename from public/fonts/arimo/Arimo-Bold.woff2
rename to metager/public/fonts/arimo/Arimo-Bold.woff2
diff --git a/public/fonts/arimo/Arimo-BoldItalic.eot b/metager/public/fonts/arimo/Arimo-BoldItalic.eot
similarity index 100%
rename from public/fonts/arimo/Arimo-BoldItalic.eot
rename to metager/public/fonts/arimo/Arimo-BoldItalic.eot
diff --git a/public/fonts/arimo/Arimo-BoldItalic.svg b/metager/public/fonts/arimo/Arimo-BoldItalic.svg
similarity index 100%
rename from public/fonts/arimo/Arimo-BoldItalic.svg
rename to metager/public/fonts/arimo/Arimo-BoldItalic.svg
diff --git a/public/fonts/arimo/Arimo-BoldItalic.ttf b/metager/public/fonts/arimo/Arimo-BoldItalic.ttf
similarity index 100%
rename from public/fonts/arimo/Arimo-BoldItalic.ttf
rename to metager/public/fonts/arimo/Arimo-BoldItalic.ttf
diff --git a/public/fonts/arimo/Arimo-BoldItalic.woff b/metager/public/fonts/arimo/Arimo-BoldItalic.woff
similarity index 100%
rename from public/fonts/arimo/Arimo-BoldItalic.woff
rename to metager/public/fonts/arimo/Arimo-BoldItalic.woff
diff --git a/public/fonts/arimo/Arimo-BoldItalic.woff2 b/metager/public/fonts/arimo/Arimo-BoldItalic.woff2
similarity index 100%
rename from public/fonts/arimo/Arimo-BoldItalic.woff2
rename to metager/public/fonts/arimo/Arimo-BoldItalic.woff2
diff --git a/public/fonts/arimo/Arimo-Italic.eot b/metager/public/fonts/arimo/Arimo-Italic.eot
similarity index 100%
rename from public/fonts/arimo/Arimo-Italic.eot
rename to metager/public/fonts/arimo/Arimo-Italic.eot
diff --git a/public/fonts/arimo/Arimo-Italic.svg b/metager/public/fonts/arimo/Arimo-Italic.svg
similarity index 100%
rename from public/fonts/arimo/Arimo-Italic.svg
rename to metager/public/fonts/arimo/Arimo-Italic.svg
diff --git a/public/fonts/arimo/Arimo-Italic.ttf b/metager/public/fonts/arimo/Arimo-Italic.ttf
similarity index 100%
rename from public/fonts/arimo/Arimo-Italic.ttf
rename to metager/public/fonts/arimo/Arimo-Italic.ttf
diff --git a/public/fonts/arimo/Arimo-Italic.woff b/metager/public/fonts/arimo/Arimo-Italic.woff
similarity index 100%
rename from public/fonts/arimo/Arimo-Italic.woff
rename to metager/public/fonts/arimo/Arimo-Italic.woff
diff --git a/public/fonts/arimo/Arimo-Italic.woff2 b/metager/public/fonts/arimo/Arimo-Italic.woff2
similarity index 100%
rename from public/fonts/arimo/Arimo-Italic.woff2
rename to metager/public/fonts/arimo/Arimo-Italic.woff2
diff --git a/public/fonts/arimo/Arimo.eot b/metager/public/fonts/arimo/Arimo.eot
similarity index 100%
rename from public/fonts/arimo/Arimo.eot
rename to metager/public/fonts/arimo/Arimo.eot
diff --git a/public/fonts/arimo/Arimo.svg b/metager/public/fonts/arimo/Arimo.svg
similarity index 100%
rename from public/fonts/arimo/Arimo.svg
rename to metager/public/fonts/arimo/Arimo.svg
diff --git a/public/fonts/arimo/Arimo.ttf b/metager/public/fonts/arimo/Arimo.ttf
similarity index 100%
rename from public/fonts/arimo/Arimo.ttf
rename to metager/public/fonts/arimo/Arimo.ttf
diff --git a/public/fonts/arimo/Arimo.woff b/metager/public/fonts/arimo/Arimo.woff
similarity index 100%
rename from public/fonts/arimo/Arimo.woff
rename to metager/public/fonts/arimo/Arimo.woff
diff --git a/public/fonts/arimo/Arimo.woff2 b/metager/public/fonts/arimo/Arimo.woff2
similarity index 100%
rename from public/fonts/arimo/Arimo.woff2
rename to metager/public/fonts/arimo/Arimo.woff2
diff --git a/public/fonts/arimo/stylesheet.css b/metager/public/fonts/arimo/stylesheet.css
similarity index 100%
rename from public/fonts/arimo/stylesheet.css
rename to metager/public/fonts/arimo/stylesheet.css
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-Bold.eot b/metager/public/fonts/liberationsans/hinted-LiberationSans-Bold.eot
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-Bold.eot
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-Bold.eot
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-Bold.svg b/metager/public/fonts/liberationsans/hinted-LiberationSans-Bold.svg
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-Bold.svg
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-Bold.svg
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-Bold.ttf b/metager/public/fonts/liberationsans/hinted-LiberationSans-Bold.ttf
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-Bold.ttf
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-Bold.ttf
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-Bold.woff b/metager/public/fonts/liberationsans/hinted-LiberationSans-Bold.woff
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-Bold.woff
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-Bold.woff
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-Bold.woff2 b/metager/public/fonts/liberationsans/hinted-LiberationSans-Bold.woff2
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-Bold.woff2
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-Bold.woff2
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.eot b/metager/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.eot
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.eot
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.eot
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.svg b/metager/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.svg
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.svg
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.svg
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.ttf b/metager/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.ttf
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.ttf
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.ttf
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.woff b/metager/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.woff
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.woff
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.woff
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.woff2 b/metager/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.woff2
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.woff2
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-BoldItalic.woff2
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-Italic.eot b/metager/public/fonts/liberationsans/hinted-LiberationSans-Italic.eot
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-Italic.eot
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-Italic.eot
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-Italic.svg b/metager/public/fonts/liberationsans/hinted-LiberationSans-Italic.svg
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-Italic.svg
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-Italic.svg
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-Italic.ttf b/metager/public/fonts/liberationsans/hinted-LiberationSans-Italic.ttf
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-Italic.ttf
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-Italic.ttf
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-Italic.woff b/metager/public/fonts/liberationsans/hinted-LiberationSans-Italic.woff
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-Italic.woff
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-Italic.woff
diff --git a/public/fonts/liberationsans/hinted-LiberationSans-Italic.woff2 b/metager/public/fonts/liberationsans/hinted-LiberationSans-Italic.woff2
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans-Italic.woff2
rename to metager/public/fonts/liberationsans/hinted-LiberationSans-Italic.woff2
diff --git a/public/fonts/liberationsans/hinted-LiberationSans.eot b/metager/public/fonts/liberationsans/hinted-LiberationSans.eot
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans.eot
rename to metager/public/fonts/liberationsans/hinted-LiberationSans.eot
diff --git a/public/fonts/liberationsans/hinted-LiberationSans.svg b/metager/public/fonts/liberationsans/hinted-LiberationSans.svg
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans.svg
rename to metager/public/fonts/liberationsans/hinted-LiberationSans.svg
diff --git a/public/fonts/liberationsans/hinted-LiberationSans.ttf b/metager/public/fonts/liberationsans/hinted-LiberationSans.ttf
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans.ttf
rename to metager/public/fonts/liberationsans/hinted-LiberationSans.ttf
diff --git a/public/fonts/liberationsans/hinted-LiberationSans.woff b/metager/public/fonts/liberationsans/hinted-LiberationSans.woff
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans.woff
rename to metager/public/fonts/liberationsans/hinted-LiberationSans.woff
diff --git a/public/fonts/liberationsans/hinted-LiberationSans.woff2 b/metager/public/fonts/liberationsans/hinted-LiberationSans.woff2
similarity index 100%
rename from public/fonts/liberationsans/hinted-LiberationSans.woff2
rename to metager/public/fonts/liberationsans/hinted-LiberationSans.woff2
diff --git a/public/fonts/liberationsans/stylesheet.css b/metager/public/fonts/liberationsans/stylesheet.css
similarity index 100%
rename from public/fonts/liberationsans/stylesheet.css
rename to metager/public/fonts/liberationsans/stylesheet.css
diff --git a/public/google1d0130450de230c1.html b/metager/public/google1d0130450de230c1.html
similarity index 100%
rename from public/google1d0130450de230c1.html
rename to metager/public/google1d0130450de230c1.html
diff --git a/public/google5226881b42059cc5.html b/metager/public/google5226881b42059cc5.html
similarity index 100%
rename from public/google5226881b42059cc5.html
rename to metager/public/google5226881b42059cc5.html
diff --git a/public/img/1px.png b/metager/public/img/1px.png
similarity index 100%
rename from public/img/1px.png
rename to metager/public/img/1px.png
diff --git a/public/img/App.svg b/metager/public/img/App.svg
similarity index 100%
rename from public/img/App.svg
rename to metager/public/img/App.svg
diff --git a/public/img/Browserstack-logo_2x.png b/metager/public/img/Browserstack-logo_2x.png
similarity index 100%
rename from public/img/Browserstack-logo_2x.png
rename to metager/public/img/Browserstack-logo_2x.png
diff --git a/public/img/Firefox.png b/metager/public/img/Firefox.png
similarity index 100%
rename from public/img/Firefox.png
rename to metager/public/img/Firefox.png
diff --git a/public/img/FirefoxEn.png b/metager/public/img/FirefoxEn.png
similarity index 100%
rename from public/img/FirefoxEn.png
rename to metager/public/img/FirefoxEn.png
diff --git a/public/img/FirefoxEn_Standard.png b/metager/public/img/FirefoxEn_Standard.png
similarity index 100%
rename from public/img/FirefoxEn_Standard.png
rename to metager/public/img/FirefoxEn_Standard.png
diff --git a/public/img/FirefoxEs.png b/metager/public/img/FirefoxEs.png
similarity index 100%
rename from public/img/FirefoxEs.png
rename to metager/public/img/FirefoxEs.png
diff --git a/public/img/FirefoxEs_Standard.png b/metager/public/img/FirefoxEs_Standard.png
similarity index 100%
rename from public/img/FirefoxEs_Standard.png
rename to metager/public/img/FirefoxEs_Standard.png
diff --git a/public/img/Firefox_Standard.png b/metager/public/img/Firefox_Standard.png
similarity index 100%
rename from public/img/Firefox_Standard.png
rename to metager/public/img/Firefox_Standard.png
diff --git a/public/img/Key-verified.svg b/metager/public/img/Key-verified.svg
similarity index 100%
rename from public/img/Key-verified.svg
rename to metager/public/img/Key-verified.svg
diff --git a/public/img/Logo-square-inverted.svg b/metager/public/img/Logo-square-inverted.svg
similarity index 100%
rename from public/img/Logo-square-inverted.svg
rename to metager/public/img/Logo-square-inverted.svg
diff --git a/public/img/WeAcceptBitcoin.png b/metager/public/img/WeAcceptBitcoin.png
similarity index 100%
rename from public/img/WeAcceptBitcoin.png
rename to metager/public/img/WeAcceptBitcoin.png
diff --git a/public/img/ajax-loader.gif b/metager/public/img/ajax-loader.gif
similarity index 100%
rename from public/img/ajax-loader.gif
rename to metager/public/img/ajax-loader.gif
diff --git a/public/img/angle-double-right.svg b/metager/public/img/angle-double-right.svg
similarity index 100%
rename from public/img/angle-double-right.svg
rename to metager/public/img/angle-double-right.svg
diff --git a/public/img/app-grau.svg b/metager/public/img/app-grau.svg
similarity index 100%
rename from public/img/app-grau.svg
rename to metager/public/img/app-grau.svg
diff --git a/public/img/app-icon.svg b/metager/public/img/app-icon.svg
similarity index 100%
rename from public/img/app-icon.svg
rename to metager/public/img/app-icon.svg
diff --git a/public/img/apple/touch-icon-114.png b/metager/public/img/apple/touch-icon-114.png
similarity index 100%
rename from public/img/apple/touch-icon-114.png
rename to metager/public/img/apple/touch-icon-114.png
diff --git a/public/img/apple/touch-icon-120.png b/metager/public/img/apple/touch-icon-120.png
similarity index 100%
rename from public/img/apple/touch-icon-120.png
rename to metager/public/img/apple/touch-icon-120.png
diff --git a/public/img/apple/touch-icon-144.png b/metager/public/img/apple/touch-icon-144.png
similarity index 100%
rename from public/img/apple/touch-icon-144.png
rename to metager/public/img/apple/touch-icon-144.png
diff --git a/public/img/apple/touch-icon-152.png b/metager/public/img/apple/touch-icon-152.png
similarity index 100%
rename from public/img/apple/touch-icon-152.png
rename to metager/public/img/apple/touch-icon-152.png
diff --git a/public/img/apple/touch-icon-180.png b/metager/public/img/apple/touch-icon-180.png
similarity index 100%
rename from public/img/apple/touch-icon-180.png
rename to metager/public/img/apple/touch-icon-180.png
diff --git a/public/img/apple/touch-icon-57.png b/metager/public/img/apple/touch-icon-57.png
similarity index 100%
rename from public/img/apple/touch-icon-57.png
rename to metager/public/img/apple/touch-icon-57.png
diff --git a/public/img/apple/touch-icon-72.png b/metager/public/img/apple/touch-icon-72.png
similarity index 100%
rename from public/img/apple/touch-icon-72.png
rename to metager/public/img/apple/touch-icon-72.png
diff --git a/public/img/apple/touch-icon-76.png b/metager/public/img/apple/touch-icon-76.png
similarity index 100%
rename from public/img/apple/touch-icon-76.png
rename to metager/public/img/apple/touch-icon-76.png
diff --git a/public/img/apple/touch-icon.png b/metager/public/img/apple/touch-icon.png
similarity index 100%
rename from public/img/apple/touch-icon.png
rename to metager/public/img/apple/touch-icon.png
diff --git a/public/img/back-arrow.svg b/metager/public/img/back-arrow.svg
similarity index 100%
rename from public/img/back-arrow.svg
rename to metager/public/img/back-arrow.svg
diff --git a/public/img/bangs-icon-help.svg b/metager/public/img/bangs-icon-help.svg
similarity index 100%
rename from public/img/bangs-icon-help.svg
rename to metager/public/img/bangs-icon-help.svg
diff --git a/public/img/blacklist-tutorial-options.png b/metager/public/img/blacklist-tutorial-options.png
similarity index 100%
rename from public/img/blacklist-tutorial-options.png
rename to metager/public/img/blacklist-tutorial-options.png
diff --git a/public/img/boosticon.png b/metager/public/img/boosticon.png
similarity index 100%
rename from public/img/boosticon.png
rename to metager/public/img/boosticon.png
diff --git a/public/img/capitalization-icon-help.svg b/metager/public/img/capitalization-icon-help.svg
similarity index 100%
rename from public/img/capitalization-icon-help.svg
rename to metager/public/img/capitalization-icon-help.svg
diff --git a/public/img/caret.svg b/metager/public/img/caret.svg
similarity index 100%
rename from public/img/caret.svg
rename to metager/public/img/caret.svg
diff --git a/public/img/chevron-down.svg b/metager/public/img/chevron-down.svg
similarity index 100%
rename from public/img/chevron-down.svg
rename to metager/public/img/chevron-down.svg
diff --git a/public/img/cogs.svg b/metager/public/img/cogs.svg
similarity index 100%
rename from public/img/cogs.svg
rename to metager/public/img/cogs.svg
diff --git a/public/img/cookies.svg b/metager/public/img/cookies.svg
similarity index 100%
rename from public/img/cookies.svg
rename to metager/public/img/cookies.svg
diff --git a/public/img/donate-icon.svg b/metager/public/img/donate-icon.svg
similarity index 100%
rename from public/img/donate-icon.svg
rename to metager/public/img/donate-icon.svg
diff --git a/public/img/ellipsis-horizontal.svg b/metager/public/img/ellipsis-horizontal.svg
similarity index 100%
rename from public/img/ellipsis-horizontal.svg
rename to metager/public/img/ellipsis-horizontal.svg
diff --git a/public/img/ellipsis.svg b/metager/public/img/ellipsis.svg
similarity index 100%
rename from public/img/ellipsis.svg
rename to metager/public/img/ellipsis.svg
diff --git a/metager/public/img/favicon/favicon-1024.png b/metager/public/img/favicon/favicon-1024.png
new file mode 100644
index 0000000000000000000000000000000000000000..17169e7490bd17df7851940958a9a93352c019de
Binary files /dev/null and b/metager/public/img/favicon/favicon-1024.png differ
diff --git a/metager/public/img/favicon/favicon-114.png b/metager/public/img/favicon/favicon-114.png
new file mode 100644
index 0000000000000000000000000000000000000000..a487c4953cf3fb7a76fdc3891ec8b62ac46d501f
Binary files /dev/null and b/metager/public/img/favicon/favicon-114.png differ
diff --git a/metager/public/img/favicon/favicon-120.png b/metager/public/img/favicon/favicon-120.png
new file mode 100644
index 0000000000000000000000000000000000000000..a1c0c4a358b2813a05a5f8390c60a4f1caa96ef3
Binary files /dev/null and b/metager/public/img/favicon/favicon-120.png differ
diff --git a/metager/public/img/favicon/favicon-128.png b/metager/public/img/favicon/favicon-128.png
new file mode 100644
index 0000000000000000000000000000000000000000..2713b2a1210d52a31bf524e25c52510d1606ed7a
Binary files /dev/null and b/metager/public/img/favicon/favicon-128.png differ
diff --git a/metager/public/img/favicon/favicon-144.png b/metager/public/img/favicon/favicon-144.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c003bc73f745dd00743ab93945b622c28cabfa8
Binary files /dev/null and b/metager/public/img/favicon/favicon-144.png differ
diff --git a/metager/public/img/favicon/favicon-152.png b/metager/public/img/favicon/favicon-152.png
new file mode 100644
index 0000000000000000000000000000000000000000..f0ab4944c322b12f33d2d35c0b58a783c6151568
Binary files /dev/null and b/metager/public/img/favicon/favicon-152.png differ
diff --git a/metager/public/img/favicon/favicon-16.png b/metager/public/img/favicon/favicon-16.png
new file mode 100644
index 0000000000000000000000000000000000000000..90336a1961f7b279875c5abb3f8dacf2b57cae78
Binary files /dev/null and b/metager/public/img/favicon/favicon-16.png differ
diff --git a/metager/public/img/favicon/favicon-167.png b/metager/public/img/favicon/favicon-167.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9aa613c28b6c610fb5fcd909419137ab5fab730
Binary files /dev/null and b/metager/public/img/favicon/favicon-167.png differ
diff --git a/metager/public/img/favicon/favicon-180.png b/metager/public/img/favicon/favicon-180.png
new file mode 100644
index 0000000000000000000000000000000000000000..774c7a5574963950a2c063e0a78519597cd8331f
Binary files /dev/null and b/metager/public/img/favicon/favicon-180.png differ
diff --git a/metager/public/img/favicon/favicon-192.png b/metager/public/img/favicon/favicon-192.png
new file mode 100644
index 0000000000000000000000000000000000000000..d9f04ed995bc56e2ec1c131d40c37190306dee52
Binary files /dev/null and b/metager/public/img/favicon/favicon-192.png differ
diff --git a/metager/public/img/favicon/favicon-195.png b/metager/public/img/favicon/favicon-195.png
new file mode 100644
index 0000000000000000000000000000000000000000..7448b6e753fdfe7140b49be26e2f151d96cd9bb8
Binary files /dev/null and b/metager/public/img/favicon/favicon-195.png differ
diff --git a/metager/public/img/favicon/favicon-196.png b/metager/public/img/favicon/favicon-196.png
new file mode 100644
index 0000000000000000000000000000000000000000..a178cea9f98d5375d90c30bc2bca89e09d1c3146
Binary files /dev/null and b/metager/public/img/favicon/favicon-196.png differ
diff --git a/metager/public/img/favicon/favicon-228.png b/metager/public/img/favicon/favicon-228.png
new file mode 100644
index 0000000000000000000000000000000000000000..b61d1af4a46ebda520b8c0aebcc86fc81b650870
Binary files /dev/null and b/metager/public/img/favicon/favicon-228.png differ
diff --git a/metager/public/img/favicon/favicon-32.png b/metager/public/img/favicon/favicon-32.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c455c3259c8a2082972af68b36b23dd3b150e58
Binary files /dev/null and b/metager/public/img/favicon/favicon-32.png differ
diff --git a/metager/public/img/favicon/favicon-48.png b/metager/public/img/favicon/favicon-48.png
new file mode 100644
index 0000000000000000000000000000000000000000..88b0b1a1c5ce55fc59a7430000629bfe0b615b59
Binary files /dev/null and b/metager/public/img/favicon/favicon-48.png differ
diff --git a/metager/public/img/favicon/favicon-57.png b/metager/public/img/favicon/favicon-57.png
new file mode 100644
index 0000000000000000000000000000000000000000..1904ff1a362e683072f42b9f7dfffc5152a9546c
Binary files /dev/null and b/metager/public/img/favicon/favicon-57.png differ
diff --git a/metager/public/img/favicon/favicon-58.png b/metager/public/img/favicon/favicon-58.png
new file mode 100644
index 0000000000000000000000000000000000000000..83d96af61a2d2b689195c2436a2e6573dfa88861
Binary files /dev/null and b/metager/public/img/favicon/favicon-58.png differ
diff --git a/metager/public/img/favicon/favicon-76.png b/metager/public/img/favicon/favicon-76.png
new file mode 100644
index 0000000000000000000000000000000000000000..930623cc84e53a32a6e2468d37c419e9f32913a5
Binary files /dev/null and b/metager/public/img/favicon/favicon-76.png differ
diff --git a/metager/public/img/favicon/favicon-80.png b/metager/public/img/favicon/favicon-80.png
new file mode 100644
index 0000000000000000000000000000000000000000..e75cb41d06a8c266778c9595a1deca8cc804b714
Binary files /dev/null and b/metager/public/img/favicon/favicon-80.png differ
diff --git a/metager/public/img/favicon/favicon-87.png b/metager/public/img/favicon/favicon-87.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b7f61bbea5fa7ad5f1109221ca19cd04e09cfde
Binary files /dev/null and b/metager/public/img/favicon/favicon-87.png differ
diff --git a/metager/public/img/favicon/favicon-96.png b/metager/public/img/favicon/favicon-96.png
new file mode 100644
index 0000000000000000000000000000000000000000..a45ce31bd0abdf273d120fc318468964254b626e
Binary files /dev/null and b/metager/public/img/favicon/favicon-96.png differ
diff --git a/public/img/floppy.svg b/metager/public/img/floppy.svg
similarity index 100%
rename from public/img/floppy.svg
rename to metager/public/img/floppy.svg
diff --git a/public/img/heart.svg b/metager/public/img/heart.svg
similarity index 100%
rename from public/img/heart.svg
rename to metager/public/img/heart.svg
diff --git a/public/img/help-icon.svg b/metager/public/img/help-icon.svg
similarity index 100%
rename from public/img/help-icon.svg
rename to metager/public/img/help-icon.svg
diff --git a/public/img/help-left-searchfield.jpg b/metager/public/img/help-left-searchfield.jpg
similarity index 100%
rename from public/img/help-left-searchfield.jpg
rename to metager/public/img/help-left-searchfield.jpg
diff --git a/public/img/help-middle-searchfield.jpg b/metager/public/img/help-middle-searchfield.jpg
similarity index 100%
rename from public/img/help-middle-searchfield.jpg
rename to metager/public/img/help-middle-searchfield.jpg
diff --git a/public/img/help-more-settings.jpg b/metager/public/img/help-more-settings.jpg
similarity index 100%
rename from public/img/help-more-settings.jpg
rename to metager/public/img/help-more-settings.jpg
diff --git a/public/img/help-right-searchfield.jpg b/metager/public/img/help-right-searchfield.jpg
similarity index 100%
rename from public/img/help-right-searchfield.jpg
rename to metager/public/img/help-right-searchfield.jpg
diff --git a/public/img/help-search-focus.jpg b/metager/public/img/help-search-focus.jpg
similarity index 100%
rename from public/img/help-search-focus.jpg
rename to metager/public/img/help-search-focus.jpg
diff --git a/public/img/help-settings-and-filter.jpg b/metager/public/img/help-settings-and-filter.jpg
similarity index 100%
rename from public/img/help-settings-and-filter.jpg
rename to metager/public/img/help-settings-and-filter.jpg
diff --git a/public/img/help-settings-blacklist-trashcan.jpg b/metager/public/img/help-settings-blacklist-trashcan.jpg
similarity index 100%
rename from public/img/help-settings-blacklist-trashcan.jpg
rename to metager/public/img/help-settings-blacklist-trashcan.jpg
diff --git a/public/img/help-settings-blacklist.jpg b/metager/public/img/help-settings-blacklist.jpg
similarity index 100%
rename from public/img/help-settings-blacklist.jpg
rename to metager/public/img/help-settings-blacklist.jpg
diff --git a/public/img/help-settings-cite.jpg b/metager/public/img/help-settings-cite.jpg
similarity index 100%
rename from public/img/help-settings-cite.jpg
rename to metager/public/img/help-settings-cite.jpg
diff --git a/public/img/help-settings-safesearch.png b/metager/public/img/help-settings-safesearch.png
similarity index 100%
rename from public/img/help-settings-safesearch.png
rename to metager/public/img/help-settings-safesearch.png
diff --git a/public/img/help-settings-search-filter.jpg b/metager/public/img/help-settings-search-filter.jpg
similarity index 100%
rename from public/img/help-settings-search-filter.jpg
rename to metager/public/img/help-settings-search-filter.jpg
diff --git a/public/img/help-used-search-engine-red.jpg b/metager/public/img/help-used-search-engine-red.jpg
similarity index 100%
rename from public/img/help-used-search-engine-red.jpg
rename to metager/public/img/help-used-search-engine-red.jpg
diff --git a/public/img/help-used-search-engine.jpg b/metager/public/img/help-used-search-engine.jpg
similarity index 100%
rename from public/img/help-used-search-engine.jpg
rename to metager/public/img/help-used-search-engine.jpg
diff --git a/public/img/help-vertical-menu.png b/metager/public/img/help-vertical-menu.png
similarity index 100%
rename from public/img/help-vertical-menu.png
rename to metager/public/img/help-vertical-menu.png
diff --git a/public/img/hilfe-php-resultpic-01.png b/metager/public/img/hilfe-php-resultpic-01.png
similarity index 100%
rename from public/img/hilfe-php-resultpic-01.png
rename to metager/public/img/hilfe-php-resultpic-01.png
diff --git a/public/img/hilfe-php-resultpic-02.png b/metager/public/img/hilfe-php-resultpic-02.png
similarity index 100%
rename from public/img/hilfe-php-resultpic-02.png
rename to metager/public/img/hilfe-php-resultpic-02.png
diff --git a/public/img/hilfe-php-resultpic-en-01.png b/metager/public/img/hilfe-php-resultpic-en-01.png
similarity index 100%
rename from public/img/hilfe-php-resultpic-en-01.png
rename to metager/public/img/hilfe-php-resultpic-en-01.png
diff --git a/public/img/hilfe-php-resultpic-en-02.png b/metager/public/img/hilfe-php-resultpic-en-02.png
similarity index 100%
rename from public/img/hilfe-php-resultpic-en-02.png
rename to metager/public/img/hilfe-php-resultpic-en-02.png
diff --git a/public/img/home.svg b/metager/public/img/home.svg
similarity index 100%
rename from public/img/home.svg
rename to metager/public/img/home.svg
diff --git a/public/img/icon-check.svg b/metager/public/img/icon-check.svg
similarity index 100%
rename from public/img/icon-check.svg
rename to metager/public/img/icon-check.svg
diff --git a/public/img/icon-contact.svg b/metager/public/img/icon-contact.svg
similarity index 100%
rename from public/img/icon-contact.svg
rename to metager/public/img/icon-contact.svg
diff --git a/public/img/icon-filter.svg b/metager/public/img/icon-filter.svg
similarity index 100%
rename from public/img/icon-filter.svg
rename to metager/public/img/icon-filter.svg
diff --git a/public/img/icon-language.svg b/metager/public/img/icon-language.svg
similarity index 100%
rename from public/img/icon-language.svg
rename to metager/public/img/icon-language.svg
diff --git a/public/img/icon-leichte-sprache.svg b/metager/public/img/icon-leichte-sprache.svg
similarity index 100%
rename from public/img/icon-leichte-sprache.svg
rename to metager/public/img/icon-leichte-sprache.svg
diff --git a/public/img/icon-lupe.svg b/metager/public/img/icon-lupe.svg
similarity index 100%
rename from public/img/icon-lupe.svg
rename to metager/public/img/icon-lupe.svg
diff --git a/public/img/icon-map.svg b/metager/public/img/icon-map.svg
similarity index 100%
rename from public/img/icon-map.svg
rename to metager/public/img/icon-map.svg
diff --git a/public/img/icon-more-information.svg b/metager/public/img/icon-more-information.svg
similarity index 100%
rename from public/img/icon-more-information.svg
rename to metager/public/img/icon-more-information.svg
diff --git a/public/img/icon-outlink.svg b/metager/public/img/icon-outlink.svg
similarity index 100%
rename from public/img/icon-outlink.svg
rename to metager/public/img/icon-outlink.svg
diff --git a/public/img/icon-paperclip.svg b/metager/public/img/icon-paperclip.svg
similarity index 100%
rename from public/img/icon-paperclip.svg
rename to metager/public/img/icon-paperclip.svg
diff --git a/public/img/icon-services.svg b/metager/public/img/icon-services.svg
similarity index 100%
rename from public/img/icon-services.svg
rename to metager/public/img/icon-services.svg
diff --git a/public/img/icon-settings-grau.svg b/metager/public/img/icon-settings-grau.svg
similarity index 100%
rename from public/img/icon-settings-grau.svg
rename to metager/public/img/icon-settings-grau.svg
diff --git a/public/img/icon-settings.svg b/metager/public/img/icon-settings.svg
similarity index 100%
rename from public/img/icon-settings.svg
rename to metager/public/img/icon-settings.svg
diff --git a/public/img/jugendschutz.svg b/metager/public/img/jugendschutz.svg
similarity index 100%
rename from public/img/jugendschutz.svg
rename to metager/public/img/jugendschutz.svg
diff --git a/public/img/key-icon.svg b/metager/public/img/key-icon.svg
similarity index 100%
rename from public/img/key-icon.svg
rename to metager/public/img/key-icon.svg
diff --git a/public/img/key-verified.svg b/metager/public/img/key-verified.svg
similarity index 100%
rename from public/img/key-verified.svg
rename to metager/public/img/key-verified.svg
diff --git a/public/img/leaf.svg b/metager/public/img/leaf.svg
similarity index 100%
rename from public/img/leaf.svg
rename to metager/public/img/leaf.svg
diff --git a/public/img/lock.svg b/metager/public/img/lock.svg
similarity index 100%
rename from public/img/lock.svg
rename to metager/public/img/lock.svg
diff --git a/public/img/luh_metager.png b/metager/public/img/luh_metager.png
similarity index 100%
rename from public/img/luh_metager.png
rename to metager/public/img/luh_metager.png
diff --git a/public/img/lupe-grau.svg b/metager/public/img/lupe-grau.svg
similarity index 100%
rename from public/img/lupe-grau.svg
rename to metager/public/img/lupe-grau.svg
diff --git a/public/img/maps-grau.svg b/metager/public/img/maps-grau.svg
similarity index 100%
rename from public/img/maps-grau.svg
rename to metager/public/img/maps-grau.svg
diff --git a/public/img/member-icon.svg b/metager/public/img/member-icon.svg
similarity index 100%
rename from public/img/member-icon.svg
rename to metager/public/img/member-icon.svg
diff --git a/public/img/menu.svg b/metager/public/img/menu.svg
similarity index 100%
rename from public/img/menu.svg
rename to metager/public/img/menu.svg
diff --git a/public/img/metager-schloss-orange.svg b/metager/public/img/metager-schloss-orange.svg
similarity index 100%
rename from public/img/metager-schloss-orange.svg
rename to metager/public/img/metager-schloss-orange.svg
diff --git a/public/img/metager-schloss.svg b/metager/public/img/metager-schloss.svg
similarity index 100%
rename from public/img/metager-schloss.svg
rename to metager/public/img/metager-schloss.svg
diff --git a/public/img/metager.svg b/metager/public/img/metager.svg
similarity index 100%
rename from public/img/metager.svg
rename to metager/public/img/metager.svg
diff --git a/public/img/paypalspenden.gif b/metager/public/img/paypalspenden.gif
similarity index 100%
rename from public/img/paypalspenden.gif
rename to metager/public/img/paypalspenden.gif
diff --git a/public/img/plug-in.svg b/metager/public/img/plug-in.svg
similarity index 100%
rename from public/img/plug-in.svg
rename to metager/public/img/plug-in.svg
diff --git a/public/img/proxy.svg b/metager/public/img/proxy.svg
similarity index 100%
rename from public/img/proxy.svg
rename to metager/public/img/proxy.svg
diff --git a/public/img/proxyicon.png b/metager/public/img/proxyicon.png
similarity index 100%
rename from public/img/proxyicon.png
rename to metager/public/img/proxyicon.png
diff --git a/public/img/rainbow.svg b/metager/public/img/rainbow.svg
similarity index 100%
rename from public/img/rainbow.svg
rename to metager/public/img/rainbow.svg
diff --git a/public/img/result-icon-help.svg b/metager/public/img/result-icon-help.svg
similarity index 100%
rename from public/img/result-icon-help.svg
rename to metager/public/img/result-icon-help.svg
diff --git a/public/img/searchfield-icon-help.svg b/metager/public/img/searchfield-icon-help.svg
similarity index 100%
rename from public/img/searchfield-icon-help.svg
rename to metager/public/img/searchfield-icon-help.svg
diff --git a/public/img/searchinsearch-icon-help.svg b/metager/public/img/searchinsearch-icon-help.svg
similarity index 100%
rename from public/img/searchinsearch-icon-help.svg
rename to metager/public/img/searchinsearch-icon-help.svg
diff --git a/public/img/snowflake.svg b/metager/public/img/snowflake.svg
similarity index 100%
rename from public/img/snowflake.svg
rename to metager/public/img/snowflake.svg
diff --git a/public/img/startpage_1997.avif b/metager/public/img/startpage_1997.avif
similarity index 100%
rename from public/img/startpage_1997.avif
rename to metager/public/img/startpage_1997.avif
diff --git a/public/img/startpage_1997.png b/metager/public/img/startpage_1997.png
similarity index 100%
rename from public/img/startpage_1997.png
rename to metager/public/img/startpage_1997.png
diff --git a/public/img/startpage_2006.avif b/metager/public/img/startpage_2006.avif
similarity index 100%
rename from public/img/startpage_2006.avif
rename to metager/public/img/startpage_2006.avif
diff --git a/public/img/startpage_2006.png b/metager/public/img/startpage_2006.png
similarity index 100%
rename from public/img/startpage_2006.png
rename to metager/public/img/startpage_2006.png
diff --git a/public/img/startpage_2015.avif b/metager/public/img/startpage_2015.avif
similarity index 100%
rename from public/img/startpage_2015.avif
rename to metager/public/img/startpage_2015.avif
diff --git a/public/img/startpage_2015.png b/metager/public/img/startpage_2015.png
similarity index 100%
rename from public/img/startpage_2015.png
rename to metager/public/img/startpage_2015.png
diff --git a/public/img/startpage_2016.avif b/metager/public/img/startpage_2016.avif
similarity index 100%
rename from public/img/startpage_2016.avif
rename to metager/public/img/startpage_2016.avif
diff --git a/public/img/startpage_2016.png b/metager/public/img/startpage_2016.png
similarity index 100%
rename from public/img/startpage_2016.png
rename to metager/public/img/startpage_2016.png
diff --git a/public/img/startpage_2019.avif b/metager/public/img/startpage_2019.avif
similarity index 100%
rename from public/img/startpage_2019.avif
rename to metager/public/img/startpage_2019.avif
diff --git a/public/img/startpage_2019.png b/metager/public/img/startpage_2019.png
similarity index 100%
rename from public/img/startpage_2019.png
rename to metager/public/img/startpage_2019.png
diff --git a/public/img/startpage_2020.avif b/metager/public/img/startpage_2020.avif
similarity index 100%
rename from public/img/startpage_2020.avif
rename to metager/public/img/startpage_2020.avif
diff --git a/public/img/startpage_2020.png b/metager/public/img/startpage_2020.png
similarity index 100%
rename from public/img/startpage_2020.png
rename to metager/public/img/startpage_2020.png
diff --git a/public/img/startseite-icon-help.svg b/metager/public/img/startseite-icon-help.svg
similarity index 100%
rename from public/img/startseite-icon-help.svg
rename to metager/public/img/startseite-icon-help.svg
diff --git a/public/img/stopwords-icon-help.svg b/metager/public/img/stopwords-icon-help.svg
similarity index 100%
rename from public/img/stopwords-icon-help.svg
rename to metager/public/img/stopwords-icon-help.svg
diff --git a/public/img/story-plugin.svg b/metager/public/img/story-plugin.svg
similarity index 100%
rename from public/img/story-plugin.svg
rename to metager/public/img/story-plugin.svg
diff --git a/public/img/suchwortasso.svg b/metager/public/img/suchwortasso.svg
similarity index 100%
rename from public/img/suchwortasso.svg
rename to metager/public/img/suchwortasso.svg
diff --git a/public/img/suma_ev_logo-m1-greyscale.png b/metager/public/img/suma_ev_logo-m1-greyscale.png
similarity index 100%
rename from public/img/suma_ev_logo-m1-greyscale.png
rename to metager/public/img/suma_ev_logo-m1-greyscale.png
diff --git a/public/img/tor-icon.svg b/metager/public/img/tor-icon.svg
similarity index 100%
rename from public/img/tor-icon.svg
rename to metager/public/img/tor-icon.svg
diff --git a/public/img/transparency-metaindex.svg b/metager/public/img/transparency-metaindex.svg
similarity index 100%
rename from public/img/transparency-metaindex.svg
rename to metager/public/img/transparency-metaindex.svg
diff --git a/public/img/trashcan.svg b/metager/public/img/trashcan.svg
similarity index 100%
rename from public/img/trashcan.svg
rename to metager/public/img/trashcan.svg
diff --git a/public/img/url-icon-help.svg b/metager/public/img/url-icon-help.svg
similarity index 100%
rename from public/img/url-icon-help.svg
rename to metager/public/img/url-icon-help.svg
diff --git a/public/img/widget.svg b/metager/public/img/widget.svg
similarity index 100%
rename from public/img/widget.svg
rename to metager/public/img/widget.svg
diff --git a/public/img/x.svg b/metager/public/img/x.svg
similarity index 100%
rename from public/img/x.svg
rename to metager/public/img/x.svg
diff --git a/public/index.php b/metager/public/index.php
similarity index 100%
rename from public/index.php
rename to metager/public/index.php
diff --git a/public/metager_maps/.gitkeep b/metager/public/metager_maps/.gitkeep
similarity index 100%
rename from public/metager_maps/.gitkeep
rename to metager/public/metager_maps/.gitkeep
diff --git a/public/metager_maps/app-release.apk b/metager/public/metager_maps/app-release.apk
similarity index 100%
rename from public/metager_maps/app-release.apk
rename to metager/public/metager_maps/app-release.apk
diff --git a/public/metager_maps/version.txt b/metager/public/metager_maps/version.txt
similarity index 100%
rename from public/metager_maps/version.txt
rename to metager/public/metager_maps/version.txt
diff --git a/public/verify-admitad.txt b/metager/public/verify-admitad.txt
similarity index 100%
rename from public/verify-admitad.txt
rename to metager/public/verify-admitad.txt
diff --git a/public/web.config b/metager/public/web.config
similarity index 100%
rename from public/web.config
rename to metager/public/web.config
diff --git a/resources/age/age-de.xml b/metager/resources/age/age-de.xml
similarity index 100%
rename from resources/age/age-de.xml
rename to metager/resources/age/age-de.xml
diff --git a/resources/age/age.xml b/metager/resources/age/age.xml
similarity index 100%
rename from resources/age/age.xml
rename to metager/resources/age/age.xml
diff --git a/resources/age/miracle.xml b/metager/resources/age/miracle.xml
similarity index 100%
rename from resources/age/miracle.xml
rename to metager/resources/age/miracle.xml
diff --git a/resources/css/material-default.css b/metager/resources/css/material-default.css
similarity index 100%
rename from resources/css/material-default.css
rename to metager/resources/css/material-default.css
diff --git a/resources/css/material-inverse.css b/metager/resources/css/material-inverse.css
similarity index 100%
rename from resources/css/material-inverse.css
rename to metager/resources/css/material-inverse.css
diff --git a/resources/css/noheader.css b/metager/resources/css/noheader.css
similarity index 100%
rename from resources/css/noheader.css
rename to metager/resources/css/noheader.css
diff --git a/resources/js/admin/affilliates/index.js b/metager/resources/js/admin/affilliates/index.js
similarity index 100%
rename from resources/js/admin/affilliates/index.js
rename to metager/resources/js/admin/affilliates/index.js
diff --git a/resources/js/app.js b/metager/resources/js/app.js
similarity index 100%
rename from resources/js/app.js
rename to metager/resources/js/app.js
diff --git a/resources/js/donation.js b/metager/resources/js/donation.js
similarity index 100%
rename from resources/js/donation.js
rename to metager/resources/js/donation.js
diff --git a/resources/js/editLanguage.js b/metager/resources/js/editLanguage.js
similarity index 100%
rename from resources/js/editLanguage.js
rename to metager/resources/js/editLanguage.js
diff --git a/resources/js/keyboardNavigation.js b/metager/resources/js/keyboardNavigation.js
similarity index 100%
rename from resources/js/keyboardNavigation.js
rename to metager/resources/js/keyboardNavigation.js
diff --git a/resources/js/lib/bootstrap.js b/metager/resources/js/lib/bootstrap.js
similarity index 100%
rename from resources/js/lib/bootstrap.js
rename to metager/resources/js/lib/bootstrap.js
diff --git a/resources/js/lib/iframeResizer.contentWindow.min.js b/metager/resources/js/lib/iframeResizer.contentWindow.min.js
similarity index 100%
rename from resources/js/lib/iframeResizer.contentWindow.min.js
rename to metager/resources/js/lib/iframeResizer.contentWindow.min.js
diff --git a/resources/js/lib/iframeResizer.min.js b/metager/resources/js/lib/iframeResizer.min.js
similarity index 100%
rename from resources/js/lib/iframeResizer.min.js
rename to metager/resources/js/lib/iframeResizer.min.js
diff --git a/resources/js/lib/jquery-ui.min.js b/metager/resources/js/lib/jquery-ui.min.js
similarity index 100%
rename from resources/js/lib/jquery-ui.min.js
rename to metager/resources/js/lib/jquery-ui.min.js
diff --git a/resources/js/lib/jquery.js b/metager/resources/js/lib/jquery.js
similarity index 100%
rename from resources/js/lib/jquery.js
rename to metager/resources/js/lib/jquery.js
diff --git a/resources/js/lib/masonry.js b/metager/resources/js/lib/masonry.js
similarity index 100%
rename from resources/js/lib/masonry.js
rename to metager/resources/js/lib/masonry.js
diff --git a/resources/js/lib/md5.js b/metager/resources/js/lib/md5.js
similarity index 100%
rename from resources/js/lib/md5.js
rename to metager/resources/js/lib/md5.js
diff --git a/resources/js/lib/vue/app.js b/metager/resources/js/lib/vue/app.js
similarity index 100%
rename from resources/js/lib/vue/app.js
rename to metager/resources/js/lib/vue/app.js
diff --git a/resources/js/lib/vue/bootstrap.js b/metager/resources/js/lib/vue/bootstrap.js
similarity index 100%
rename from resources/js/lib/vue/bootstrap.js
rename to metager/resources/js/lib/vue/bootstrap.js
diff --git a/resources/js/quicktips.js b/metager/resources/js/quicktips.js
similarity index 100%
rename from resources/js/quicktips.js
rename to metager/resources/js/quicktips.js
diff --git a/resources/js/result-saver.js b/metager/resources/js/result-saver.js
similarity index 100%
rename from resources/js/result-saver.js
rename to metager/resources/js/result-saver.js
diff --git a/resources/js/scriptJoinPage.js b/metager/resources/js/scriptJoinPage.js
similarity index 100%
rename from resources/js/scriptJoinPage.js
rename to metager/resources/js/scriptJoinPage.js
diff --git a/resources/js/scriptResultPage.js b/metager/resources/js/scriptResultPage.js
similarity index 100%
rename from resources/js/scriptResultPage.js
rename to metager/resources/js/scriptResultPage.js
diff --git a/resources/js/scriptSettings.js b/metager/resources/js/scriptSettings.js
similarity index 100%
rename from resources/js/scriptSettings.js
rename to metager/resources/js/scriptSettings.js
diff --git a/resources/js/translations.js b/metager/resources/js/translations.js
similarity index 100%
rename from resources/js/translations.js
rename to metager/resources/js/translations.js
diff --git a/resources/js/utility.js b/metager/resources/js/utility.js
similarity index 100%
rename from resources/js/utility.js
rename to metager/resources/js/utility.js
diff --git a/resources/js/widgets.js b/metager/resources/js/widgets.js
similarity index 100%
rename from resources/js/widgets.js
rename to metager/resources/js/widgets.js
diff --git a/resources/lang/de/404.php b/metager/resources/lang/de/404.php
similarity index 100%
rename from resources/lang/de/404.php
rename to metager/resources/lang/de/404.php
diff --git a/resources/lang/de/429.php b/metager/resources/lang/de/429.php
similarity index 100%
rename from resources/lang/de/429.php
rename to metager/resources/lang/de/429.php
diff --git a/resources/lang/de/500.php b/metager/resources/lang/de/500.php
similarity index 100%
rename from resources/lang/de/500.php
rename to metager/resources/lang/de/500.php
diff --git a/resources/lang/de/503.php b/metager/resources/lang/de/503.php
similarity index 100%
rename from resources/lang/de/503.php
rename to metager/resources/lang/de/503.php
diff --git a/resources/lang/de/about.php b/metager/resources/lang/de/about.php
similarity index 100%
rename from resources/lang/de/about.php
rename to metager/resources/lang/de/about.php
diff --git a/resources/lang/de/ad.php b/metager/resources/lang/de/ad.php
similarity index 100%
rename from resources/lang/de/ad.php
rename to metager/resources/lang/de/ad.php
diff --git a/resources/lang/de/app.php b/metager/resources/lang/de/app.php
similarity index 100%
rename from resources/lang/de/app.php
rename to metager/resources/lang/de/app.php
diff --git a/resources/lang/de/asso.php b/metager/resources/lang/de/asso.php
similarity index 100%
rename from resources/lang/de/asso.php
rename to metager/resources/lang/de/asso.php
diff --git a/resources/lang/de/auth.php b/metager/resources/lang/de/auth.php
similarity index 100%
rename from resources/lang/de/auth.php
rename to metager/resources/lang/de/auth.php
diff --git a/resources/lang/de/bitpay.php b/metager/resources/lang/de/bitpay.php
similarity index 100%
rename from resources/lang/de/bitpay.php
rename to metager/resources/lang/de/bitpay.php
diff --git a/resources/lang/de/captcha.php b/metager/resources/lang/de/captcha.php
similarity index 100%
rename from resources/lang/de/captcha.php
rename to metager/resources/lang/de/captcha.php
diff --git a/resources/lang/de/datenschutz.php b/metager/resources/lang/de/datenschutz.php
similarity index 100%
rename from resources/lang/de/datenschutz.php
rename to metager/resources/lang/de/datenschutz.php
diff --git a/metager/resources/lang/de/faktencheck.php b/metager/resources/lang/de/faktencheck.php
new file mode 100644
index 0000000000000000000000000000000000000000..c4da47c57132a05d1551038b3ba5503ebb08035c
--- /dev/null
+++ b/metager/resources/lang/de/faktencheck.php
@@ -0,0 +1,33 @@
+<?php
+return [
+	'heading.1'		=> 'Fakten-Prüfung contra Fake-News:',
+	'paragraph.1'	=> 'Fake News werden oft in Form eines journalistischen Beitrages präsentiert. Die Aussage des Artikels oder die Darstellung entspricht jedoch nicht der Faktenlage. Oft werden Aussagen bei Fake News bewusst erfunden oder verfälscht um politische oder kommerzielle Ziele zu erreichen. (siehe <a href="https://link.springer.com/book/10.1007/978-3-662-58695-2"> Appel 2020</a>) Was kann man also tun, um herauszufinden, ob es sich um Fake-News handelt?',
+	'paragraph.2'	=> 'Dafür gibt es verschiedene Möglichkeiten. Um die Qualität von Informationen zu prüfen, gibt es den sogenannten <a href="https://library.csuchico.edu/sites/default/files/craap-test.pdf">"CRAAP-Test"</a>. Dieser wurde an der California State University in Chico entwickelt. Dieser Test bietet viele hilfreiche Fragen, um zu schauen, ob diese Informationen zuverlässig sind. Zusätzlich zu diesem Test können Sie hier weitere hilfreiche Informationen finden:',
+	'list.1'		=> 'Webseiten',
+	'list.1.1'		=> '<strong>Datum</strong>: Bei guten Quellen ist meistens ein Datum angegeben, wann dieser Artikel veröffentlicht wurde. Dies ist also ein Indiz, was auf die Qualität und Aktualität der Informationen hinweisen kann.',
+	'list.1.2'		=> '<strong>Autor</strong>: Ist ein Autor genannt? Bei den meisten guten Quellen ist ein Autor benannt. Auch dies ist eine wichtige Angabe. Wenn ein Autor angegeben ist, ist es oft sinnvoll zu schauen, ob diese Person öfter etwas zu diesen Themen publiziert.  Zusätzlich kann man schauen, ob diese Person in dem (Fach)gebiet bekannt ist oder es z.B. Wikipedia-Einträge zu dieser gibt.',
+	'list.1.3'		=> '<strong>Angegebene Quellen</strong>: Werden in dem Artikel keine weiteren Quellen genannt? Dies kann oft ein Hinweis auf eine falsche Darstellung oder Aussage sein. Zusätzlich sollte kontrolliert werden, ob die Argumentation im Text logisch und plausibel ist.',
+	'list.1.4'		=> '<strong>Impressum</strong>: Wenn es ein Impressum gibt: Welche Personen (Namen, Firma) werden dort angegeben und was kann über diese herausgefunden werden?',
+
+	'list.2'		=> 'Soziale Medien',
+	'list.2.1'		=> 'Ist ein Autor mit einem Namen genannt, der real erscheint? Ist dies nicht der Fall, ist die Nachricht wahrscheinlich fragwürdig. Hinzu kommt die Frage, ob es zusätzliche Informationen zu dem Namen gibt.',
+	'list.2.2'		=> 'Gibt es weitere Kommunikationskanäle, auf denen diese Person erreichbar ist?',
+	'list.2.3'		=> 'Bei Facebook gibt es zusätzlich die Möglichkeit zu schauen, ob diese Person verifiziert ist.(<a href="https://www.facebook.com/help/196050490547892" target="_blank" rel="noopener">https://www.facebook.com/help/196050490547892</a>)',
+	'list.2.4'		=> 'Seit wann gibt es dieses Profil?',
+	'list.2.5'		=> 'Wie viele Abonenten oder Freunde hat dieses Profil? Was kann über die Namen dieser Personen herausgefunden werden?',
+	'list.3'		=> 'Wikipedia',
+	'list.3.1'		=> 'Nicht alles, was bei Wikipedia steht ist, stimmt auch. Um hier zu kontrollieren, wie akkurat die Informationen sind, kann man folgenes tun:',
+	'list.3.2'		=> 'Versionsgeschichte prüfen: Wer hat wann was geschrieben?',
+	'list.3.3'		=> 'Kann zu diesen Autoren etwas herausgefunden werden?',
+	'list.3.4'		=> 'Gibt es eine Diskussionsseite zu diesem Wikipedia-Eintrag, aus der weitere Rückschlüsse möglich sind?',
+	'list.3.5'		=> 'Überprüfen, welche Quellen im Wikipedia-Eintrag angegeben wurden. Diese können auch oft als weitere Informationsquelle dienen.',
+	'list.4'		=> 'E-Mails',
+	'list.4.1'		=> 'E-Mails zu fälschen ist sehr einfach. Es gibt somit sehr viele Fakemails; wie kann man dies nun überprüfen?',
+	'list.4.2'		=> 'Stammt die Mail wirklich von dem angegebenen Absender? Dazu prüft man den Header der E-Mail. Zusätzlich kann man die dort genannten IP-Adressen und Zustellwege untersuchen. Dies ist jedoch nicht einfach.',
+	'list.4.3'		=> 'Signierte und bestenfalls auch verschlüsselte E-Mail nutzen. Auch dies ist nicht so einfach. Weitere Informationen dazu können Sie hier finden: <a href="https://www.heise.de/ct/artikel/Ausgebootet-289538.html" target="_blank" rel="noopener">https://www.heise.de/ct/artikel/Ausgebootet-289538.html</a>',
+	'list.5'		=> 'Bilder, Videos',
+	'list.5.1'		=> 'Hintergrund genau ansehen. Landschaft, Gebäude, Autos und Kennzeichen, Kleidung, Personen. Ist das stimmig, passt es ggf. mit dem zugehörigen Text zusammen?',
+	'list.5.2'		=> 'Sind mit der Reverse-Image-Search von Bildersuchmaschinen ähnliche Bilder zu finden?',
+	'list.5.3'		=> 'Kann man mit Grafikprogrammen Metadaten der Bilder auslesen? Passen diese Metadaten mit dem Bildinhalt zusammen?',
+	'list.7'		=> 'Es gibt jedoch keine absolute Sicherheit gegen Fälschungen oder Fake-News.',
+];
diff --git a/resources/lang/de/footer.php b/metager/resources/lang/de/footer.php
similarity index 100%
rename from resources/lang/de/footer.php
rename to metager/resources/lang/de/footer.php
diff --git a/resources/lang/de/help/easy-language/help-functions.php b/metager/resources/lang/de/help/easy-language/help-functions.php
similarity index 100%
rename from resources/lang/de/help/easy-language/help-functions.php
rename to metager/resources/lang/de/help/easy-language/help-functions.php
diff --git a/resources/lang/de/help/easy-language/help-mainpages.php b/metager/resources/lang/de/help/easy-language/help-mainpages.php
similarity index 100%
rename from resources/lang/de/help/easy-language/help-mainpages.php
rename to metager/resources/lang/de/help/easy-language/help-mainpages.php
diff --git a/resources/lang/de/help/easy-language/help-privacy-protection.php b/metager/resources/lang/de/help/easy-language/help-privacy-protection.php
similarity index 100%
rename from resources/lang/de/help/easy-language/help-privacy-protection.php
rename to metager/resources/lang/de/help/easy-language/help-privacy-protection.php
diff --git a/resources/lang/de/help/easy-language/help-services.php b/metager/resources/lang/de/help/easy-language/help-services.php
similarity index 100%
rename from resources/lang/de/help/easy-language/help-services.php
rename to metager/resources/lang/de/help/easy-language/help-services.php
diff --git a/resources/lang/de/help/easy-language/help.php b/metager/resources/lang/de/help/easy-language/help.php
similarity index 100%
rename from resources/lang/de/help/easy-language/help.php
rename to metager/resources/lang/de/help/easy-language/help.php
diff --git a/resources/lang/de/help/help-functions.php b/metager/resources/lang/de/help/help-functions.php
similarity index 100%
rename from resources/lang/de/help/help-functions.php
rename to metager/resources/lang/de/help/help-functions.php
diff --git a/resources/lang/de/help/help-mainpages.php b/metager/resources/lang/de/help/help-mainpages.php
similarity index 100%
rename from resources/lang/de/help/help-mainpages.php
rename to metager/resources/lang/de/help/help-mainpages.php
diff --git a/resources/lang/de/help/help-privacy-protection.php b/metager/resources/lang/de/help/help-privacy-protection.php
similarity index 100%
rename from resources/lang/de/help/help-privacy-protection.php
rename to metager/resources/lang/de/help/help-privacy-protection.php
diff --git a/resources/lang/de/help/help-services.php b/metager/resources/lang/de/help/help-services.php
similarity index 100%
rename from resources/lang/de/help/help-services.php
rename to metager/resources/lang/de/help/help-services.php
diff --git a/resources/lang/de/help/help.php b/metager/resources/lang/de/help/help.php
similarity index 100%
rename from resources/lang/de/help/help.php
rename to metager/resources/lang/de/help/help.php
diff --git a/resources/lang/de/icons.php b/metager/resources/lang/de/icons.php
similarity index 100%
rename from resources/lang/de/icons.php
rename to metager/resources/lang/de/icons.php
diff --git a/resources/lang/de/impressum.php b/metager/resources/lang/de/impressum.php
similarity index 100%
rename from resources/lang/de/impressum.php
rename to metager/resources/lang/de/impressum.php
diff --git a/resources/lang/de/index.php b/metager/resources/lang/de/index.php
similarity index 100%
rename from resources/lang/de/index.php
rename to metager/resources/lang/de/index.php
diff --git a/resources/lang/de/jugendschutz.php b/metager/resources/lang/de/jugendschutz.php
similarity index 100%
rename from resources/lang/de/jugendschutz.php
rename to metager/resources/lang/de/jugendschutz.php
diff --git a/resources/lang/de/key.php b/metager/resources/lang/de/key.php
similarity index 100%
rename from resources/lang/de/key.php
rename to metager/resources/lang/de/key.php
diff --git a/resources/lang/de/keyboard-navigation.php b/metager/resources/lang/de/keyboard-navigation.php
similarity index 100%
rename from resources/lang/de/keyboard-navigation.php
rename to metager/resources/lang/de/keyboard-navigation.php
diff --git a/resources/lang/de/keychange.php b/metager/resources/lang/de/keychange.php
similarity index 100%
rename from resources/lang/de/keychange.php
rename to metager/resources/lang/de/keychange.php
diff --git a/resources/lang/de/kontakt.php b/metager/resources/lang/de/kontakt.php
similarity index 100%
rename from resources/lang/de/kontakt.php
rename to metager/resources/lang/de/kontakt.php
diff --git a/resources/lang/de/languages.php b/metager/resources/lang/de/languages.php
similarity index 100%
rename from resources/lang/de/languages.php
rename to metager/resources/lang/de/languages.php
diff --git a/resources/lang/de/metaGer.php b/metager/resources/lang/de/metaGer.php
similarity index 97%
rename from resources/lang/de/metaGer.php
rename to metager/resources/lang/de/metaGer.php
index e7037f1a2c00757a6ad465f336d769a6a7c3e897..8b0312eb454465df0fb3d26e21d8fa5bb9ec85e4 100644
--- a/resources/lang/de/metaGer.php
+++ b/metager/resources/lang/de/metaGer.php
@@ -13,7 +13,9 @@ return [
     'formdata.noSearch' => 'Achtung: Sie haben keinen Suchbegriff eingegeben. Sie können ihre Suchbegriffe oben eingeben und es erneut versuchen.',
     'formdata.dartEurope' => 'Hinweis: Sie haben Dart-Europe aktiviert. Die Suche kann deshalb länger dauern und die maximale Suchzeit wurde auf 10 Sekunden hochgesetzt.',
     'formdata.hostBlacklist' => 'Ergebnisse von folgenden Hosts werden nicht angezeigt: ":host"',
+    'formdata.hostBlacklistCount' => 'Ergebnisse von :count Hosts werden nicht angezeigt.',
     'formdata.domainBlacklist' => 'Ergebnisse von folgenden Domains werden nicht angezeigt: ":domain"',
+    'formdata.domainBlacklistCount' => 'Ergebnisse von :count Domains werden nicht angezeigt.',
     'formdata.urlBlacklist' => 'Ergebnisse mit URLs, die ":url" beinhalten, werden nicht angezeigt',
     'formdata.stopwords' => 'Sie machen eine Ausschlusssuche. Ergebnisse mit folgenden Wörtern werden nicht angezeigt: ":stopwords"',
     'formdata.phrase' => 'Sie führen eine Phrasensuche durch: :phrase',
diff --git a/resources/lang/de/metaGerSearch.php b/metager/resources/lang/de/metaGerSearch.php
similarity index 100%
rename from resources/lang/de/metaGerSearch.php
rename to metager/resources/lang/de/metaGerSearch.php
diff --git a/resources/lang/de/mg-story.php b/metager/resources/lang/de/mg-story.php
similarity index 100%
rename from resources/lang/de/mg-story.php
rename to metager/resources/lang/de/mg-story.php
diff --git a/resources/lang/de/pagination.php b/metager/resources/lang/de/pagination.php
similarity index 100%
rename from resources/lang/de/pagination.php
rename to metager/resources/lang/de/pagination.php
diff --git a/resources/lang/de/partnershops.php b/metager/resources/lang/de/partnershops.php
similarity index 100%
rename from resources/lang/de/partnershops.php
rename to metager/resources/lang/de/partnershops.php
diff --git a/resources/lang/de/passwords.php b/metager/resources/lang/de/passwords.php
similarity index 100%
rename from resources/lang/de/passwords.php
rename to metager/resources/lang/de/passwords.php
diff --git a/resources/lang/de/plugin-desktop/desktop-chrome.php b/metager/resources/lang/de/plugin-desktop/desktop-chrome.php
similarity index 100%
rename from resources/lang/de/plugin-desktop/desktop-chrome.php
rename to metager/resources/lang/de/plugin-desktop/desktop-chrome.php
diff --git a/resources/lang/de/plugin-desktop/desktop-edge.php b/metager/resources/lang/de/plugin-desktop/desktop-edge.php
similarity index 100%
rename from resources/lang/de/plugin-desktop/desktop-edge.php
rename to metager/resources/lang/de/plugin-desktop/desktop-edge.php
diff --git a/resources/lang/de/plugin-desktop/desktop-firefox.php b/metager/resources/lang/de/plugin-desktop/desktop-firefox.php
similarity index 100%
rename from resources/lang/de/plugin-desktop/desktop-firefox.php
rename to metager/resources/lang/de/plugin-desktop/desktop-firefox.php
diff --git a/resources/lang/de/plugin-desktop/desktop-ie.php b/metager/resources/lang/de/plugin-desktop/desktop-ie.php
similarity index 100%
rename from resources/lang/de/plugin-desktop/desktop-ie.php
rename to metager/resources/lang/de/plugin-desktop/desktop-ie.php
diff --git a/resources/lang/de/plugin-desktop/desktop-opera.php b/metager/resources/lang/de/plugin-desktop/desktop-opera.php
similarity index 100%
rename from resources/lang/de/plugin-desktop/desktop-opera.php
rename to metager/resources/lang/de/plugin-desktop/desktop-opera.php
diff --git a/resources/lang/de/plugin-desktop/desktop-safari.php b/metager/resources/lang/de/plugin-desktop/desktop-safari.php
similarity index 100%
rename from resources/lang/de/plugin-desktop/desktop-safari.php
rename to metager/resources/lang/de/plugin-desktop/desktop-safari.php
diff --git a/resources/lang/de/plugin-desktop/desktop-vivaldi.php b/metager/resources/lang/de/plugin-desktop/desktop-vivaldi.php
similarity index 100%
rename from resources/lang/de/plugin-desktop/desktop-vivaldi.php
rename to metager/resources/lang/de/plugin-desktop/desktop-vivaldi.php
diff --git a/resources/lang/de/plugin-mobile/mobile-chrome.php b/metager/resources/lang/de/plugin-mobile/mobile-chrome.php
similarity index 100%
rename from resources/lang/de/plugin-mobile/mobile-chrome.php
rename to metager/resources/lang/de/plugin-mobile/mobile-chrome.php
diff --git a/resources/lang/de/plugin-mobile/mobile-edge.php b/metager/resources/lang/de/plugin-mobile/mobile-edge.php
similarity index 100%
rename from resources/lang/de/plugin-mobile/mobile-edge.php
rename to metager/resources/lang/de/plugin-mobile/mobile-edge.php
diff --git a/resources/lang/de/plugin-mobile/mobile-firefox-klar.php b/metager/resources/lang/de/plugin-mobile/mobile-firefox-klar.php
similarity index 100%
rename from resources/lang/de/plugin-mobile/mobile-firefox-klar.php
rename to metager/resources/lang/de/plugin-mobile/mobile-firefox-klar.php
diff --git a/resources/lang/de/plugin-mobile/mobile-firefox.php b/metager/resources/lang/de/plugin-mobile/mobile-firefox.php
similarity index 100%
rename from resources/lang/de/plugin-mobile/mobile-firefox.php
rename to metager/resources/lang/de/plugin-mobile/mobile-firefox.php
diff --git a/resources/lang/de/plugin-mobile/mobile-opera.php b/metager/resources/lang/de/plugin-mobile/mobile-opera.php
similarity index 100%
rename from resources/lang/de/plugin-mobile/mobile-opera.php
rename to metager/resources/lang/de/plugin-mobile/mobile-opera.php
diff --git a/resources/lang/de/plugin-page.php b/metager/resources/lang/de/plugin-page.php
similarity index 100%
rename from resources/lang/de/plugin-page.php
rename to metager/resources/lang/de/plugin-page.php
diff --git a/resources/lang/de/plugin.php b/metager/resources/lang/de/plugin.php
similarity index 100%
rename from resources/lang/de/plugin.php
rename to metager/resources/lang/de/plugin.php
diff --git a/resources/lang/de/quicktip.php b/metager/resources/lang/de/quicktip.php
similarity index 100%
rename from resources/lang/de/quicktip.php
rename to metager/resources/lang/de/quicktip.php
diff --git a/resources/lang/de/researchandtabs.php b/metager/resources/lang/de/researchandtabs.php
similarity index 100%
rename from resources/lang/de/researchandtabs.php
rename to metager/resources/lang/de/researchandtabs.php
diff --git a/resources/lang/de/result.php b/metager/resources/lang/de/result.php
similarity index 100%
rename from resources/lang/de/result.php
rename to metager/resources/lang/de/result.php
diff --git a/resources/lang/de/resultPage.php b/metager/resources/lang/de/resultPage.php
similarity index 100%
rename from resources/lang/de/resultPage.php
rename to metager/resources/lang/de/resultPage.php
diff --git a/resources/lang/de/results.php b/metager/resources/lang/de/results.php
similarity index 100%
rename from resources/lang/de/results.php
rename to metager/resources/lang/de/results.php
diff --git a/metager/resources/lang/de/search-engine.php b/metager/resources/lang/de/search-engine.php
new file mode 100644
index 0000000000000000000000000000000000000000..abc3958f5dae3b5fe2dbebba7d998fd179b0f886
--- /dev/null
+++ b/metager/resources/lang/de/search-engine.php
@@ -0,0 +1,18 @@
+<?php
+
+return [
+    'head.1' => 'Über unsere Suchmaschinen',
+    'head.2' => 'MetaGer nutzt mehrere Indexe',
+
+
+
+    'text.1' => 'MetaGer ist eine <a href=":transparenz">Metasuchmaschine</a>. Deshalb nutzen wir die Indexe verschiedener anderer Suchmaschinen. Für jede dieser Suchmaschinen haben wir einen kurzen Steckbrief mit den wichtigsten Eckdaten erstellt. Da wir diese Übersicht nicht ständig aktualisieren, sind alle Angaben ohne Gewähr.',
+
+    'text.2.1' => 'Name: ',
+    'text.2.2' => 'Verwendeter Index: ',
+    'text.2.3' => 'Entstanden: ',
+    'text.2.4' => 'Hauptsitz: ',
+    'text.2.5' => 'Betreiber: ',
+    'text.2.6' => 'Geschätzte Seiten im Index: ',
+    'text.2.7' => 'Verwendete MetaGer-Version: ',
+];
diff --git a/resources/lang/de/settings.php b/metager/resources/lang/de/settings.php
similarity index 97%
rename from resources/lang/de/settings.php
rename to metager/resources/lang/de/settings.php
index 407d2c6a0f814bf7165463298ba097867e460d83..26e5814f5a88e54bd7e179f101adbcfa04ca1197 100644
--- a/resources/lang/de/settings.php
+++ b/metager/resources/lang/de/settings.php
@@ -16,7 +16,7 @@ return [
     'text.3' => 'An dieser Stelle können Sie Suchfilter dauerhaft setzen. Mit der Auswahl eines Suchfilters stehen nur noch Suchmaschinen zur Verfügung, welche diesen Filter unterstützen. Umgekehrt werden auch nur Suchfilter angezeigt, welche von der aktuellen Suchmaschinenauswahl unterstützt werden.',
 
     'header.4' => 'Blacklist',
-    'text.4' => 'Hier können Sie Domains eintragen, welche aus Ihrer Suche ausgeschlossen werden sollen. Wenn Sie alle Subdomains einschließen wollen, starten Sie mit "*.".',
+    'text.4' => 'Hier können Sie Domains eintragen, welche aus Ihrer Suche ausgeschlossen werden sollen. Wenn Sie alle Subdomains einschließen wollen, starten Sie mit "*.". Eine Domain pro Zeile.',
     'address' => 'Adresseingabe',
 
     'save' => 'Speichern',
diff --git a/resources/lang/de/sidebar.php b/metager/resources/lang/de/sidebar.php
similarity index 96%
rename from resources/lang/de/sidebar.php
rename to metager/resources/lang/de/sidebar.php
index 0241c401d8b08926cf7904182925b33c0a36eb51..9e23e2fa29107defb6c96201403eaf97e4ebe0b5 100644
--- a/resources/lang/de/sidebar.php
+++ b/metager/resources/lang/de/sidebar.php
@@ -29,6 +29,7 @@ return [
     'nav29' => 'Transparenzerklärung',
     'nav30' => 'Suchmaschinen',
     'nav31' => 'Weitere Infos',
+    'navFactcheck' => 'Faktencheck',
     'navigationToggle' => 'Navigation anzeigen',
     'titles.tips' => 'Tipps',
     'plugin' => 'MetaGer Plugin',
diff --git a/resources/lang/de/sitesearch.php b/metager/resources/lang/de/sitesearch.php
similarity index 100%
rename from resources/lang/de/sitesearch.php
rename to metager/resources/lang/de/sitesearch.php
diff --git a/resources/lang/de/spende.php b/metager/resources/lang/de/spende.php
similarity index 100%
rename from resources/lang/de/spende.php
rename to metager/resources/lang/de/spende.php
diff --git a/resources/lang/de/spendenaufruf.php b/metager/resources/lang/de/spendenaufruf.php
similarity index 100%
rename from resources/lang/de/spendenaufruf.php
rename to metager/resources/lang/de/spendenaufruf.php
diff --git a/resources/lang/de/staticPages.php b/metager/resources/lang/de/staticPages.php
similarity index 100%
rename from resources/lang/de/staticPages.php
rename to metager/resources/lang/de/staticPages.php
diff --git a/resources/lang/de/team.php b/metager/resources/lang/de/team.php
similarity index 100%
rename from resources/lang/de/team.php
rename to metager/resources/lang/de/team.php
diff --git a/resources/lang/de/tips.php b/metager/resources/lang/de/tips.php
similarity index 100%
rename from resources/lang/de/tips.php
rename to metager/resources/lang/de/tips.php
diff --git a/resources/lang/de/titles.php b/metager/resources/lang/de/titles.php
similarity index 100%
rename from resources/lang/de/titles.php
rename to metager/resources/lang/de/titles.php
diff --git a/resources/lang/de/tor.php b/metager/resources/lang/de/tor.php
similarity index 100%
rename from resources/lang/de/tor.php
rename to metager/resources/lang/de/tor.php
diff --git a/resources/lang/de/transparency.php b/metager/resources/lang/de/transparency.php
similarity index 100%
rename from resources/lang/de/transparency.php
rename to metager/resources/lang/de/transparency.php
diff --git a/resources/lang/de/validation.php b/metager/resources/lang/de/validation.php
similarity index 100%
rename from resources/lang/de/validation.php
rename to metager/resources/lang/de/validation.php
diff --git a/resources/lang/de/websearch.php b/metager/resources/lang/de/websearch.php
similarity index 100%
rename from resources/lang/de/websearch.php
rename to metager/resources/lang/de/websearch.php
diff --git a/resources/lang/de/widget.php b/metager/resources/lang/de/widget.php
similarity index 100%
rename from resources/lang/de/widget.php
rename to metager/resources/lang/de/widget.php
diff --git a/resources/lang/de/zitatsuche.php b/metager/resources/lang/de/zitatsuche.php
similarity index 100%
rename from resources/lang/de/zitatsuche.php
rename to metager/resources/lang/de/zitatsuche.php
diff --git a/resources/lang/en/404.php b/metager/resources/lang/en/404.php
similarity index 100%
rename from resources/lang/en/404.php
rename to metager/resources/lang/en/404.php
diff --git a/resources/lang/en/429.php b/metager/resources/lang/en/429.php
similarity index 100%
rename from resources/lang/en/429.php
rename to metager/resources/lang/en/429.php
diff --git a/resources/lang/en/500.php b/metager/resources/lang/en/500.php
similarity index 100%
rename from resources/lang/en/500.php
rename to metager/resources/lang/en/500.php
diff --git a/resources/lang/en/503.php b/metager/resources/lang/en/503.php
similarity index 100%
rename from resources/lang/en/503.php
rename to metager/resources/lang/en/503.php
diff --git a/resources/lang/en/about.php b/metager/resources/lang/en/about.php
similarity index 100%
rename from resources/lang/en/about.php
rename to metager/resources/lang/en/about.php
diff --git a/resources/lang/en/ad.php b/metager/resources/lang/en/ad.php
similarity index 100%
rename from resources/lang/en/ad.php
rename to metager/resources/lang/en/ad.php
diff --git a/resources/lang/en/app.php b/metager/resources/lang/en/app.php
similarity index 100%
rename from resources/lang/en/app.php
rename to metager/resources/lang/en/app.php
diff --git a/resources/lang/en/asso.php b/metager/resources/lang/en/asso.php
similarity index 100%
rename from resources/lang/en/asso.php
rename to metager/resources/lang/en/asso.php
diff --git a/resources/lang/en/auth.php b/metager/resources/lang/en/auth.php
similarity index 100%
rename from resources/lang/en/auth.php
rename to metager/resources/lang/en/auth.php
diff --git a/resources/lang/en/bitpay.php b/metager/resources/lang/en/bitpay.php
similarity index 100%
rename from resources/lang/en/bitpay.php
rename to metager/resources/lang/en/bitpay.php
diff --git a/resources/lang/en/captcha.php b/metager/resources/lang/en/captcha.php
similarity index 100%
rename from resources/lang/en/captcha.php
rename to metager/resources/lang/en/captcha.php
diff --git a/resources/lang/en/datenschutz.php b/metager/resources/lang/en/datenschutz.php
similarity index 100%
rename from resources/lang/en/datenschutz.php
rename to metager/resources/lang/en/datenschutz.php
diff --git a/metager/resources/lang/en/faktencheck.php b/metager/resources/lang/en/faktencheck.php
new file mode 100644
index 0000000000000000000000000000000000000000..c04d50d420f0ae4a069beabbb3b50bacc3b15ece
--- /dev/null
+++ b/metager/resources/lang/en/faktencheck.php
@@ -0,0 +1,34 @@
+<?php
+
+return [
+    'heading.1'		=> 'Fact Checking against Fake News:',
+	'paragraph.1'	=> 'Fake News are works of misinformation which are often presented like journalistic media. Fake News are often used for political or commercial purposes. So what can be done to find out if something is Fake News?',
+	'paragraph.2'	=> 'There are various ways to do this. To check the quality of information, there is the so-called <a href="https://library.csuchico.edu/sites/default/files/craap-test.pdf">"CRAAP-Test"</a>. It was developed at the California State University in Chico. The test offers many helpful questions to assess whether the information is reliable. In addition to this test, you can find more helpful information here:',
+	'list.1'		=> 'Websites',
+	'list.1.1'		=> '<strong>Publication Dates</strong>: Good sources often specify an article’s publication date. This information can indicate the quality and/or currency of the information.',
+	'list.1.2'		=> '<strong>Autor</strong>: Is an author named? Good sources often name an author or anouther source of information. If an author is named it is often useful to find out more information about them and see if that person often publishes about this topic.',
+	'list.1.3'		=> '<strong>Other Sources</strong>: Are there other sources named? It might be worthwhile to also check those and see whether they detract from the plausibility of the primary source.',
+	'list.1.4'		=> '<strong>Imprint</strong>: If there is an imprint: What can be found out about the People/Companies mentioned there?',
+
+	'list.2'		=> 'Social Media',
+	'list.2.1'		=> 'Is an author named with a name that seems real? If this is not the case, the message is probably questionable. There is also the question of whether there is additional information about the name.',
+	'list.2.2'		=> 'Are there other communication channels where this person can be reached?',
+	'list.2.3'		=> 'On Facebook, there is an additional option to see if this person is verified.(<a href="https://www.facebook.com/help/196050490547892" target="_blank" rel="noopener">https://www.facebook.com/help/196050490547892</a>)',
+	'list.2.4'		=> 'Since when does this profile exist?.',
+	'list.2.5'		=> 'How many subscribers or friends does this profile have? What can be found out about the names of these people?',
+	'list.3'		=> 'Wikipedia',
+	'list.3.1'		=> 'Not everything that is written on Wikipedia is correct. To check how accurate the information is, you can do the following:',
+	'list.3.2'		=> 'Check version history: Who wrote what when?',
+	'list.3.3'		=> 'Can anything be found out about these authors?',
+	'list.3.4'		=> 'Is there a discussion page for this Wikipedia entry from which further information can be inferred?',
+	'list.3.5'		=> 'Check which sources were given in the Wikipedia entry. These can also often serve as a further source of information.',
+	'list.4'		=> 'Emails',
+	'list.4.1'		=> 'Faking emails is very easy. Thus, there are very many fakemails; now how to check this?',
+	'list.4.2'		=> 'Does the mail really come from the specified sender? To do this, check the header of the e-mail. In addition, you can examine the IP addresses and delivery routes mentioned there. However, this is not easy.',
+	'list.4.3'		=> 'Use signed and at best also encrypted e-mail. Again, this is not so simple. You can find more information about this here: <a href="https://www.heise.de/ct/artikel/Ausgebootet-289538.html" target="_blank" rel="noopener">https://www.heise.de/ct/artikel/Ausgebootet-289538.html</a>',
+	'list.5'		=> 'Bilder, Videos',
+	'list.5.1'		=> 'Look closely at the background. Landscape, buildings, cars and license plates, clothing, people. Is it coherent, does it fit with the corresponding text?',
+	'list.5.2'		=> 'Can similar images be found with the reverse image search of image search engines?',
+	'list.5.3'		=> 'Is it possible to read metadata of the images with graphics programs? Does this metadata match the image content?',
+	'list.7'		=> 'However, there is no absolute security against fakes or fake news.',
+];
diff --git a/resources/lang/en/footer.php b/metager/resources/lang/en/footer.php
similarity index 100%
rename from resources/lang/en/footer.php
rename to metager/resources/lang/en/footer.php
diff --git a/resources/lang/en/help/easy-language/help-functions.php b/metager/resources/lang/en/help/easy-language/help-functions.php
similarity index 100%
rename from resources/lang/en/help/easy-language/help-functions.php
rename to metager/resources/lang/en/help/easy-language/help-functions.php
diff --git a/resources/lang/en/help/easy-language/help-mainpages.php b/metager/resources/lang/en/help/easy-language/help-mainpages.php
similarity index 100%
rename from resources/lang/en/help/easy-language/help-mainpages.php
rename to metager/resources/lang/en/help/easy-language/help-mainpages.php
diff --git a/resources/lang/en/help/easy-language/help-privacy-protection.php b/metager/resources/lang/en/help/easy-language/help-privacy-protection.php
similarity index 100%
rename from resources/lang/en/help/easy-language/help-privacy-protection.php
rename to metager/resources/lang/en/help/easy-language/help-privacy-protection.php
diff --git a/resources/lang/en/help/easy-language/help-services.php b/metager/resources/lang/en/help/easy-language/help-services.php
similarity index 100%
rename from resources/lang/en/help/easy-language/help-services.php
rename to metager/resources/lang/en/help/easy-language/help-services.php
diff --git a/resources/lang/en/help/easy-language/help.php b/metager/resources/lang/en/help/easy-language/help.php
similarity index 100%
rename from resources/lang/en/help/easy-language/help.php
rename to metager/resources/lang/en/help/easy-language/help.php
diff --git a/resources/lang/en/help/help-functions.php b/metager/resources/lang/en/help/help-functions.php
similarity index 100%
rename from resources/lang/en/help/help-functions.php
rename to metager/resources/lang/en/help/help-functions.php
diff --git a/resources/lang/en/help/help-mainpages.php b/metager/resources/lang/en/help/help-mainpages.php
similarity index 100%
rename from resources/lang/en/help/help-mainpages.php
rename to metager/resources/lang/en/help/help-mainpages.php
diff --git a/resources/lang/en/help/help-privacy-protection.php b/metager/resources/lang/en/help/help-privacy-protection.php
similarity index 100%
rename from resources/lang/en/help/help-privacy-protection.php
rename to metager/resources/lang/en/help/help-privacy-protection.php
diff --git a/resources/lang/en/help/help-services.php b/metager/resources/lang/en/help/help-services.php
similarity index 100%
rename from resources/lang/en/help/help-services.php
rename to metager/resources/lang/en/help/help-services.php
diff --git a/resources/lang/en/help/help.php b/metager/resources/lang/en/help/help.php
similarity index 100%
rename from resources/lang/en/help/help.php
rename to metager/resources/lang/en/help/help.php
diff --git a/resources/lang/en/icons.php b/metager/resources/lang/en/icons.php
similarity index 100%
rename from resources/lang/en/icons.php
rename to metager/resources/lang/en/icons.php
diff --git a/resources/lang/en/impressum.php b/metager/resources/lang/en/impressum.php
similarity index 100%
rename from resources/lang/en/impressum.php
rename to metager/resources/lang/en/impressum.php
diff --git a/resources/lang/en/index.php b/metager/resources/lang/en/index.php
similarity index 100%
rename from resources/lang/en/index.php
rename to metager/resources/lang/en/index.php
diff --git a/resources/lang/en/jugendschutz.php b/metager/resources/lang/en/jugendschutz.php
similarity index 100%
rename from resources/lang/en/jugendschutz.php
rename to metager/resources/lang/en/jugendschutz.php
diff --git a/resources/lang/en/key.php b/metager/resources/lang/en/key.php
similarity index 100%
rename from resources/lang/en/key.php
rename to metager/resources/lang/en/key.php
diff --git a/resources/lang/en/keyboard-navigation.php b/metager/resources/lang/en/keyboard-navigation.php
similarity index 100%
rename from resources/lang/en/keyboard-navigation.php
rename to metager/resources/lang/en/keyboard-navigation.php
diff --git a/resources/lang/en/keychange.php b/metager/resources/lang/en/keychange.php
similarity index 100%
rename from resources/lang/en/keychange.php
rename to metager/resources/lang/en/keychange.php
diff --git a/resources/lang/en/kontakt.php b/metager/resources/lang/en/kontakt.php
similarity index 100%
rename from resources/lang/en/kontakt.php
rename to metager/resources/lang/en/kontakt.php
diff --git a/resources/lang/en/languages.php b/metager/resources/lang/en/languages.php
similarity index 100%
rename from resources/lang/en/languages.php
rename to metager/resources/lang/en/languages.php
diff --git a/resources/lang/en/metaGer.php b/metager/resources/lang/en/metaGer.php
similarity index 97%
rename from resources/lang/en/metaGer.php
rename to metager/resources/lang/en/metaGer.php
index 1e28b69dbdfa672001d2a6f9cbbf63946f718ca9..a03652d3ba2dd8649f688809ed05db987c1b0bdb 100644
--- a/resources/lang/en/metaGer.php
+++ b/metager/resources/lang/en/metaGer.php
@@ -13,7 +13,9 @@ return [
     'formdata.noSearch' => 'Attention: you did not type in any search word/s. Please type search words and try again',
     'formdata.dartEurope' => 'Hint: you have activated Dart-Europe. Therefore the response time might be longer and is set to 10 sec',
     'formdata.hostBlacklist' => 'Results of the following domains will not be shown: \":host\"',
+    'formdata.hostBlacklistCount' => 'Results of :count hosts will not be shown.',
     'formdata.domainBlacklist' => 'These domains get ignored: \":domain\"',
+    'formdata.domainBlacklistCount' => 'Results of :count domains will not be shown.',
     'formdata.urlBlacklist' => 'Results containing \":url\" are not shown.',
     'formdata.stopwords' => 'You have excluded results with the following words: \":stopwords\"',
     'formdata.phrase' => 'You are doing a string search: :phrase',
diff --git a/resources/lang/en/metaGerSearch.php b/metager/resources/lang/en/metaGerSearch.php
similarity index 100%
rename from resources/lang/en/metaGerSearch.php
rename to metager/resources/lang/en/metaGerSearch.php
diff --git a/resources/lang/en/mg-story.php b/metager/resources/lang/en/mg-story.php
similarity index 100%
rename from resources/lang/en/mg-story.php
rename to metager/resources/lang/en/mg-story.php
diff --git a/resources/lang/en/pagination.php b/metager/resources/lang/en/pagination.php
similarity index 100%
rename from resources/lang/en/pagination.php
rename to metager/resources/lang/en/pagination.php
diff --git a/resources/lang/en/partnershops.php b/metager/resources/lang/en/partnershops.php
similarity index 100%
rename from resources/lang/en/partnershops.php
rename to metager/resources/lang/en/partnershops.php
diff --git a/resources/lang/en/passwords.php b/metager/resources/lang/en/passwords.php
similarity index 100%
rename from resources/lang/en/passwords.php
rename to metager/resources/lang/en/passwords.php
diff --git a/resources/lang/en/plugin-desktop/desktop-chrome.php b/metager/resources/lang/en/plugin-desktop/desktop-chrome.php
similarity index 100%
rename from resources/lang/en/plugin-desktop/desktop-chrome.php
rename to metager/resources/lang/en/plugin-desktop/desktop-chrome.php
diff --git a/resources/lang/en/plugin-desktop/desktop-edge.php b/metager/resources/lang/en/plugin-desktop/desktop-edge.php
similarity index 100%
rename from resources/lang/en/plugin-desktop/desktop-edge.php
rename to metager/resources/lang/en/plugin-desktop/desktop-edge.php
diff --git a/resources/lang/en/plugin-desktop/desktop-firefox.php b/metager/resources/lang/en/plugin-desktop/desktop-firefox.php
similarity index 100%
rename from resources/lang/en/plugin-desktop/desktop-firefox.php
rename to metager/resources/lang/en/plugin-desktop/desktop-firefox.php
diff --git a/resources/lang/en/plugin-desktop/desktop-ie.php b/metager/resources/lang/en/plugin-desktop/desktop-ie.php
similarity index 100%
rename from resources/lang/en/plugin-desktop/desktop-ie.php
rename to metager/resources/lang/en/plugin-desktop/desktop-ie.php
diff --git a/resources/lang/en/plugin-desktop/desktop-opera.php b/metager/resources/lang/en/plugin-desktop/desktop-opera.php
similarity index 100%
rename from resources/lang/en/plugin-desktop/desktop-opera.php
rename to metager/resources/lang/en/plugin-desktop/desktop-opera.php
diff --git a/resources/lang/en/plugin-desktop/desktop-safari.php b/metager/resources/lang/en/plugin-desktop/desktop-safari.php
similarity index 100%
rename from resources/lang/en/plugin-desktop/desktop-safari.php
rename to metager/resources/lang/en/plugin-desktop/desktop-safari.php
diff --git a/resources/lang/en/plugin-desktop/desktop-vivaldi.php b/metager/resources/lang/en/plugin-desktop/desktop-vivaldi.php
similarity index 100%
rename from resources/lang/en/plugin-desktop/desktop-vivaldi.php
rename to metager/resources/lang/en/plugin-desktop/desktop-vivaldi.php
diff --git a/resources/lang/en/plugin-mobile/mobile-chrome.php b/metager/resources/lang/en/plugin-mobile/mobile-chrome.php
similarity index 100%
rename from resources/lang/en/plugin-mobile/mobile-chrome.php
rename to metager/resources/lang/en/plugin-mobile/mobile-chrome.php
diff --git a/resources/lang/en/plugin-mobile/mobile-edge.php b/metager/resources/lang/en/plugin-mobile/mobile-edge.php
similarity index 100%
rename from resources/lang/en/plugin-mobile/mobile-edge.php
rename to metager/resources/lang/en/plugin-mobile/mobile-edge.php
diff --git a/resources/lang/en/plugin-mobile/mobile-firefox-klar.php b/metager/resources/lang/en/plugin-mobile/mobile-firefox-klar.php
similarity index 100%
rename from resources/lang/en/plugin-mobile/mobile-firefox-klar.php
rename to metager/resources/lang/en/plugin-mobile/mobile-firefox-klar.php
diff --git a/resources/lang/en/plugin-mobile/mobile-firefox.php b/metager/resources/lang/en/plugin-mobile/mobile-firefox.php
similarity index 100%
rename from resources/lang/en/plugin-mobile/mobile-firefox.php
rename to metager/resources/lang/en/plugin-mobile/mobile-firefox.php
diff --git a/resources/lang/en/plugin-mobile/mobile-opera.php b/metager/resources/lang/en/plugin-mobile/mobile-opera.php
similarity index 100%
rename from resources/lang/en/plugin-mobile/mobile-opera.php
rename to metager/resources/lang/en/plugin-mobile/mobile-opera.php
diff --git a/resources/lang/en/plugin-page.php b/metager/resources/lang/en/plugin-page.php
similarity index 100%
rename from resources/lang/en/plugin-page.php
rename to metager/resources/lang/en/plugin-page.php
diff --git a/resources/lang/en/plugin.php b/metager/resources/lang/en/plugin.php
similarity index 100%
rename from resources/lang/en/plugin.php
rename to metager/resources/lang/en/plugin.php
diff --git a/resources/lang/en/quicktip.php b/metager/resources/lang/en/quicktip.php
similarity index 100%
rename from resources/lang/en/quicktip.php
rename to metager/resources/lang/en/quicktip.php
diff --git a/resources/lang/en/researchandtabs.php b/metager/resources/lang/en/researchandtabs.php
similarity index 100%
rename from resources/lang/en/researchandtabs.php
rename to metager/resources/lang/en/researchandtabs.php
diff --git a/resources/lang/en/result.php b/metager/resources/lang/en/result.php
similarity index 100%
rename from resources/lang/en/result.php
rename to metager/resources/lang/en/result.php
diff --git a/resources/lang/en/resultPage.php b/metager/resources/lang/en/resultPage.php
similarity index 100%
rename from resources/lang/en/resultPage.php
rename to metager/resources/lang/en/resultPage.php
diff --git a/resources/lang/en/results.php b/metager/resources/lang/en/results.php
similarity index 100%
rename from resources/lang/en/results.php
rename to metager/resources/lang/en/results.php
diff --git a/resources/lang/en/search-engine.php b/metager/resources/lang/en/search-engine.php
similarity index 91%
rename from resources/lang/en/search-engine.php
rename to metager/resources/lang/en/search-engine.php
index 3abd61a7c916207fae4894c231955707209402ed..7fc7fc062d4fb6b93ec84d881a1363981663795b 100644
--- a/resources/lang/en/search-engine.php
+++ b/metager/resources/lang/en/search-engine.php
@@ -13,7 +13,7 @@ return [
     'head.10' => 'OneNewspage (Video)',
 
     'text.1' => 'MetaGer is a <a href=":transparenz">metasearch engine</a>. Therefore, we use the indexes of various other search engines. For each of these search engines, we have created a short profile with the key information. Since we do not constantly update this overview, all information is without guarantee.',
-   
+
     'text.2.1' => 'Name: ',
     'text.2.1.1' => 'Yahoo!',
     'text.2.2' => 'Used index: ',
@@ -36,25 +36,25 @@ return [
     'text.3.5' => 'Microsoft Inc.',
     'text.3.6' => 'around 8-14 billion',
     'text.3.7' => 'English search, German search (members only)',
-   
+
     'text.4.1' => 'Scopia',
     'text.4.2' => 'Around 2016 ',
     'text.4.3' => 'Newark, New Jersey, USA',
     'text.4.4' => 'Scopia Technologies ASPEN LLC',
     'text.4.5' => 'German search, English search',
-   
+
     'text.5.1' => 'Netluchs',
     'text.5.2' => '2005',
     'text.5.3' => 'Hamburg, Germany',
     'text.5.4' => 'Michael Nebel (private person)',
     'text.5.5' => '6 Million (updated: 2005)',
     'text.5.6' => 'German search',
-   
+
     'text.6.1' => 'Yandex',
     'text.6.2' => '1997',
     'text.6.3' => 'Mäntsälä, Finland (Europe)',
     'text.6.4' => 'Yandex OY (Corporation)',
-    'text.6.5' => 'German search',   
+    'text.6.5' => 'German search',
 
 
     'text.7.1' => 'Die ZEIT',
@@ -62,21 +62,21 @@ return [
     'text.7.3' => 'Hamburg, Germany',
     'text.7.4' => 'Zeit Online GmbH',
     'text.7.5' => 'German search',
-   
+
 
     'text.8.1' => 'OneNewspage (Deutschland)',
     'text.8.2' => '2008',
     'text.8.3' => 'Wales, England',
     'text.8.4' => 'One News Page Ltd.',
     'text.8.5' => 'German search (Deutschland), English search',
-   
+
 
     'text.9.1' => 'OneNewspage Video (Deutschland)',
     'text.9.2' => '2008',
     'text.9.3' => 'Wales, England',
     'text.9.4' => 'One News Page Ltd.',
     'text.9.5' => 'German search (Deutschland), English search',
-   
+
 
     'text.10.1' => 'YaCy',
     'text.10.2' => '2004',
@@ -85,5 +85,10 @@ return [
     'text.10.5' => '1,7 billion',
     'text.10.6' => 'german search',
 
-
+    'text.12.1' => 'Infotiger',
+    'text.12.2' => '1998',
+    'text.12.3' => 'Munich, Germany',
+    'text.12.4' => 'Infotiger UG (haftungsbeschränkt)',
+    'text.12.5' => '300 million',
+    'text.12.6' => 'german Suche, english Suche',
 ];
diff --git a/resources/lang/en/settings.php b/metager/resources/lang/en/settings.php
similarity index 96%
rename from resources/lang/en/settings.php
rename to metager/resources/lang/en/settings.php
index 6956f43ee213b86f36cf3f5c2008950cb8d909b2..85cadbc7e5388fdba6828a3771d43cee16c655ce 100644
--- a/resources/lang/en/settings.php
+++ b/metager/resources/lang/en/settings.php
@@ -16,7 +16,7 @@ return [
     "text.3" => "At this point you can set search filters permanently. With the selection of a search filter, only search engines are available that support this filter. Conversely, only search filters are displayed which are supported by the current search engine selection.",
 
     'header.4' => 'Black list',
-    'text.4' => 'Here you can add domains to exclude when searching. If you want to exclude all subdomains start with "*.".',
+    'text.4' => 'Here you can add domains to exclude when searching. If you want to exclude all subdomains start with "*.". One domain per line.',
     'address' => 'Address',
 
     "save" => "Save",
diff --git a/resources/lang/en/sidebar.php b/metager/resources/lang/en/sidebar.php
similarity index 96%
rename from resources/lang/en/sidebar.php
rename to metager/resources/lang/en/sidebar.php
index f085d11148c7a36ea241d6352aa02c4a6935a02f..9682ad4db718cc22645cc170350d6b7a0690a5a6 100644
--- a/resources/lang/en/sidebar.php
+++ b/metager/resources/lang/en/sidebar.php
@@ -29,6 +29,7 @@ return [
     'nav29' => 'Transparency statement',
     'nav30' => 'Search engines',
     'nav31' => 'More information',
+    'navFactcheck' => 'fact checking',
     "navigationToggle" => "show navigation",
     'titles.tips' => 'Tips',
     'plugin' => 'MetaGer Plugin',
diff --git a/resources/lang/en/sitesearch.php b/metager/resources/lang/en/sitesearch.php
similarity index 100%
rename from resources/lang/en/sitesearch.php
rename to metager/resources/lang/en/sitesearch.php
diff --git a/resources/lang/en/spende.php b/metager/resources/lang/en/spende.php
similarity index 100%
rename from resources/lang/en/spende.php
rename to metager/resources/lang/en/spende.php
diff --git a/resources/lang/en/spendenaufruf.php b/metager/resources/lang/en/spendenaufruf.php
similarity index 100%
rename from resources/lang/en/spendenaufruf.php
rename to metager/resources/lang/en/spendenaufruf.php
diff --git a/resources/lang/en/staticPages.php b/metager/resources/lang/en/staticPages.php
similarity index 100%
rename from resources/lang/en/staticPages.php
rename to metager/resources/lang/en/staticPages.php
diff --git a/resources/lang/en/team.php b/metager/resources/lang/en/team.php
similarity index 100%
rename from resources/lang/en/team.php
rename to metager/resources/lang/en/team.php
diff --git a/resources/lang/en/tips.php b/metager/resources/lang/en/tips.php
similarity index 100%
rename from resources/lang/en/tips.php
rename to metager/resources/lang/en/tips.php
diff --git a/resources/lang/en/titles.php b/metager/resources/lang/en/titles.php
similarity index 100%
rename from resources/lang/en/titles.php
rename to metager/resources/lang/en/titles.php
diff --git a/resources/lang/en/tor.php b/metager/resources/lang/en/tor.php
similarity index 100%
rename from resources/lang/en/tor.php
rename to metager/resources/lang/en/tor.php
diff --git a/resources/lang/en/transparency.php b/metager/resources/lang/en/transparency.php
similarity index 100%
rename from resources/lang/en/transparency.php
rename to metager/resources/lang/en/transparency.php
diff --git a/resources/lang/en/validation.php b/metager/resources/lang/en/validation.php
similarity index 100%
rename from resources/lang/en/validation.php
rename to metager/resources/lang/en/validation.php
diff --git a/resources/lang/en/websearch.php b/metager/resources/lang/en/websearch.php
similarity index 100%
rename from resources/lang/en/websearch.php
rename to metager/resources/lang/en/websearch.php
diff --git a/resources/lang/en/widget.php b/metager/resources/lang/en/widget.php
similarity index 100%
rename from resources/lang/en/widget.php
rename to metager/resources/lang/en/widget.php
diff --git a/resources/lang/en/zitatsuche.php b/metager/resources/lang/en/zitatsuche.php
similarity index 100%
rename from resources/lang/en/zitatsuche.php
rename to metager/resources/lang/en/zitatsuche.php
diff --git a/resources/lang/es/404.php b/metager/resources/lang/es/404.php
similarity index 100%
rename from resources/lang/es/404.php
rename to metager/resources/lang/es/404.php
diff --git a/resources/lang/es/500.php b/metager/resources/lang/es/500.php
similarity index 100%
rename from resources/lang/es/500.php
rename to metager/resources/lang/es/500.php
diff --git a/resources/lang/es/503.php b/metager/resources/lang/es/503.php
similarity index 100%
rename from resources/lang/es/503.php
rename to metager/resources/lang/es/503.php
diff --git a/resources/lang/es/ad.php b/metager/resources/lang/es/ad.php
similarity index 100%
rename from resources/lang/es/ad.php
rename to metager/resources/lang/es/ad.php
diff --git a/resources/lang/es/app.php b/metager/resources/lang/es/app.php
similarity index 100%
rename from resources/lang/es/app.php
rename to metager/resources/lang/es/app.php
diff --git a/resources/lang/es/asso.php b/metager/resources/lang/es/asso.php
similarity index 100%
rename from resources/lang/es/asso.php
rename to metager/resources/lang/es/asso.php
diff --git a/resources/lang/es/auth.php b/metager/resources/lang/es/auth.php
similarity index 100%
rename from resources/lang/es/auth.php
rename to metager/resources/lang/es/auth.php
diff --git a/resources/lang/es/bitpay.php b/metager/resources/lang/es/bitpay.php
similarity index 100%
rename from resources/lang/es/bitpay.php
rename to metager/resources/lang/es/bitpay.php
diff --git a/resources/lang/es/captcha.php b/metager/resources/lang/es/captcha.php
similarity index 100%
rename from resources/lang/es/captcha.php
rename to metager/resources/lang/es/captcha.php
diff --git a/resources/lang/es/datenschutz.php b/metager/resources/lang/es/datenschutz.php
similarity index 100%
rename from resources/lang/es/datenschutz.php
rename to metager/resources/lang/es/datenschutz.php
diff --git a/resources/lang/es/faktencheck.php b/metager/resources/lang/es/faktencheck.php
similarity index 100%
rename from resources/lang/es/faktencheck.php
rename to metager/resources/lang/es/faktencheck.php
diff --git a/resources/lang/es/faq.php b/metager/resources/lang/es/faq.php
similarity index 100%
rename from resources/lang/es/faq.php
rename to metager/resources/lang/es/faq.php
diff --git a/resources/lang/es/footer.php b/metager/resources/lang/es/footer.php
similarity index 100%
rename from resources/lang/es/footer.php
rename to metager/resources/lang/es/footer.php
diff --git a/resources/lang/es/help/easy-language/help-functions.php b/metager/resources/lang/es/help/easy-language/help-functions.php
similarity index 100%
rename from resources/lang/es/help/easy-language/help-functions.php
rename to metager/resources/lang/es/help/easy-language/help-functions.php
diff --git a/resources/lang/es/help/easy-language/help-mainpages.php b/metager/resources/lang/es/help/easy-language/help-mainpages.php
similarity index 100%
rename from resources/lang/es/help/easy-language/help-mainpages.php
rename to metager/resources/lang/es/help/easy-language/help-mainpages.php
diff --git a/resources/lang/es/help/easy-language/help-privacy-protection.php b/metager/resources/lang/es/help/easy-language/help-privacy-protection.php
similarity index 100%
rename from resources/lang/es/help/easy-language/help-privacy-protection.php
rename to metager/resources/lang/es/help/easy-language/help-privacy-protection.php
diff --git a/resources/lang/es/help/easy-language/help-services.php b/metager/resources/lang/es/help/easy-language/help-services.php
similarity index 100%
rename from resources/lang/es/help/easy-language/help-services.php
rename to metager/resources/lang/es/help/easy-language/help-services.php
diff --git a/resources/lang/es/help/easy-language/help.php b/metager/resources/lang/es/help/easy-language/help.php
similarity index 100%
rename from resources/lang/es/help/easy-language/help.php
rename to metager/resources/lang/es/help/easy-language/help.php
diff --git a/resources/lang/es/help/help-functions.php b/metager/resources/lang/es/help/help-functions.php
similarity index 100%
rename from resources/lang/es/help/help-functions.php
rename to metager/resources/lang/es/help/help-functions.php
diff --git a/resources/lang/es/help/help-mainpages.php b/metager/resources/lang/es/help/help-mainpages.php
similarity index 100%
rename from resources/lang/es/help/help-mainpages.php
rename to metager/resources/lang/es/help/help-mainpages.php
diff --git a/resources/lang/es/help/help-privacy-protection.php b/metager/resources/lang/es/help/help-privacy-protection.php
similarity index 100%
rename from resources/lang/es/help/help-privacy-protection.php
rename to metager/resources/lang/es/help/help-privacy-protection.php
diff --git a/resources/lang/es/help/help-services.php b/metager/resources/lang/es/help/help-services.php
similarity index 100%
rename from resources/lang/es/help/help-services.php
rename to metager/resources/lang/es/help/help-services.php
diff --git a/resources/lang/es/help/help.php b/metager/resources/lang/es/help/help.php
similarity index 100%
rename from resources/lang/es/help/help.php
rename to metager/resources/lang/es/help/help.php
diff --git a/resources/lang/es/impressum.php b/metager/resources/lang/es/impressum.php
similarity index 100%
rename from resources/lang/es/impressum.php
rename to metager/resources/lang/es/impressum.php
diff --git a/resources/lang/es/index.php b/metager/resources/lang/es/index.php
similarity index 100%
rename from resources/lang/es/index.php
rename to metager/resources/lang/es/index.php
diff --git a/resources/lang/es/kontakt.php b/metager/resources/lang/es/kontakt.php
similarity index 100%
rename from resources/lang/es/kontakt.php
rename to metager/resources/lang/es/kontakt.php
diff --git a/resources/lang/es/metaGer.php b/metager/resources/lang/es/metaGer.php
similarity index 100%
rename from resources/lang/es/metaGer.php
rename to metager/resources/lang/es/metaGer.php
diff --git a/resources/lang/es/metaGerSearch.php b/metager/resources/lang/es/metaGerSearch.php
similarity index 100%
rename from resources/lang/es/metaGerSearch.php
rename to metager/resources/lang/es/metaGerSearch.php
diff --git a/resources/lang/es/mg-story.php b/metager/resources/lang/es/mg-story.php
similarity index 100%
rename from resources/lang/es/mg-story.php
rename to metager/resources/lang/es/mg-story.php
diff --git a/resources/lang/es/pagination.php b/metager/resources/lang/es/pagination.php
similarity index 100%
rename from resources/lang/es/pagination.php
rename to metager/resources/lang/es/pagination.php
diff --git a/resources/lang/es/passwords.php b/metager/resources/lang/es/passwords.php
similarity index 100%
rename from resources/lang/es/passwords.php
rename to metager/resources/lang/es/passwords.php
diff --git a/resources/lang/es/plugin-desktop/desktop-chrome.php b/metager/resources/lang/es/plugin-desktop/desktop-chrome.php
similarity index 100%
rename from resources/lang/es/plugin-desktop/desktop-chrome.php
rename to metager/resources/lang/es/plugin-desktop/desktop-chrome.php
diff --git a/resources/lang/es/plugin-desktop/desktop-firefox.php b/metager/resources/lang/es/plugin-desktop/desktop-firefox.php
similarity index 100%
rename from resources/lang/es/plugin-desktop/desktop-firefox.php
rename to metager/resources/lang/es/plugin-desktop/desktop-firefox.php
diff --git a/resources/lang/es/plugin-desktop/desktop-ie.php b/metager/resources/lang/es/plugin-desktop/desktop-ie.php
similarity index 100%
rename from resources/lang/es/plugin-desktop/desktop-ie.php
rename to metager/resources/lang/es/plugin-desktop/desktop-ie.php
diff --git a/resources/lang/es/plugin-desktop/desktop-opera.php b/metager/resources/lang/es/plugin-desktop/desktop-opera.php
similarity index 100%
rename from resources/lang/es/plugin-desktop/desktop-opera.php
rename to metager/resources/lang/es/plugin-desktop/desktop-opera.php
diff --git a/resources/lang/es/plugin-desktop/desktop-safari.php b/metager/resources/lang/es/plugin-desktop/desktop-safari.php
similarity index 100%
rename from resources/lang/es/plugin-desktop/desktop-safari.php
rename to metager/resources/lang/es/plugin-desktop/desktop-safari.php
diff --git a/resources/lang/es/plugin-desktop/desktop-vivaldi.php b/metager/resources/lang/es/plugin-desktop/desktop-vivaldi.php
similarity index 100%
rename from resources/lang/es/plugin-desktop/desktop-vivaldi.php
rename to metager/resources/lang/es/plugin-desktop/desktop-vivaldi.php
diff --git a/resources/lang/es/plugin-page.php b/metager/resources/lang/es/plugin-page.php
similarity index 100%
rename from resources/lang/es/plugin-page.php
rename to metager/resources/lang/es/plugin-page.php
diff --git a/resources/lang/es/plugin.php b/metager/resources/lang/es/plugin.php
similarity index 100%
rename from resources/lang/es/plugin.php
rename to metager/resources/lang/es/plugin.php
diff --git a/resources/lang/es/quicktip.php b/metager/resources/lang/es/quicktip.php
similarity index 100%
rename from resources/lang/es/quicktip.php
rename to metager/resources/lang/es/quicktip.php
diff --git a/resources/lang/es/researchandtabs.php b/metager/resources/lang/es/researchandtabs.php
similarity index 100%
rename from resources/lang/es/researchandtabs.php
rename to metager/resources/lang/es/researchandtabs.php
diff --git a/resources/lang/es/result.php b/metager/resources/lang/es/result.php
similarity index 100%
rename from resources/lang/es/result.php
rename to metager/resources/lang/es/result.php
diff --git a/resources/lang/es/resultPage.php b/metager/resources/lang/es/resultPage.php
similarity index 100%
rename from resources/lang/es/resultPage.php
rename to metager/resources/lang/es/resultPage.php
diff --git a/resources/lang/es/results.php b/metager/resources/lang/es/results.php
similarity index 100%
rename from resources/lang/es/results.php
rename to metager/resources/lang/es/results.php
diff --git a/resources/lang/es/settings.php b/metager/resources/lang/es/settings.php
similarity index 100%
rename from resources/lang/es/settings.php
rename to metager/resources/lang/es/settings.php
diff --git a/resources/lang/es/sidebar.php b/metager/resources/lang/es/sidebar.php
similarity index 100%
rename from resources/lang/es/sidebar.php
rename to metager/resources/lang/es/sidebar.php
diff --git a/resources/lang/es/sitesearch.php b/metager/resources/lang/es/sitesearch.php
similarity index 100%
rename from resources/lang/es/sitesearch.php
rename to metager/resources/lang/es/sitesearch.php
diff --git a/resources/lang/es/spende.php b/metager/resources/lang/es/spende.php
similarity index 100%
rename from resources/lang/es/spende.php
rename to metager/resources/lang/es/spende.php
diff --git a/resources/lang/es/spendenaufruf.php b/metager/resources/lang/es/spendenaufruf.php
similarity index 100%
rename from resources/lang/es/spendenaufruf.php
rename to metager/resources/lang/es/spendenaufruf.php
diff --git a/resources/lang/es/staticPages.php b/metager/resources/lang/es/staticPages.php
similarity index 100%
rename from resources/lang/es/staticPages.php
rename to metager/resources/lang/es/staticPages.php
diff --git a/resources/lang/es/team.php b/metager/resources/lang/es/team.php
similarity index 100%
rename from resources/lang/es/team.php
rename to metager/resources/lang/es/team.php
diff --git a/resources/lang/es/tips.php b/metager/resources/lang/es/tips.php
similarity index 100%
rename from resources/lang/es/tips.php
rename to metager/resources/lang/es/tips.php
diff --git a/resources/lang/es/titles.php b/metager/resources/lang/es/titles.php
similarity index 100%
rename from resources/lang/es/titles.php
rename to metager/resources/lang/es/titles.php
diff --git a/resources/lang/es/tor.php b/metager/resources/lang/es/tor.php
similarity index 100%
rename from resources/lang/es/tor.php
rename to metager/resources/lang/es/tor.php
diff --git a/resources/lang/es/websearch.php b/metager/resources/lang/es/websearch.php
similarity index 100%
rename from resources/lang/es/websearch.php
rename to metager/resources/lang/es/websearch.php
diff --git a/resources/lang/es/widget.php b/metager/resources/lang/es/widget.php
similarity index 100%
rename from resources/lang/es/widget.php
rename to metager/resources/lang/es/widget.php
diff --git a/resources/lang/es/zitatsuche.php b/metager/resources/lang/es/zitatsuche.php
similarity index 100%
rename from resources/lang/es/zitatsuche.php
rename to metager/resources/lang/es/zitatsuche.php
diff --git a/resources/lang/fr/500.php b/metager/resources/lang/fr/500.php
similarity index 100%
rename from resources/lang/fr/500.php
rename to metager/resources/lang/fr/500.php
diff --git a/resources/lang/fr/hilfe.php b/metager/resources/lang/fr/hilfe.php
similarity index 100%
rename from resources/lang/fr/hilfe.php
rename to metager/resources/lang/fr/hilfe.php
diff --git a/resources/lang/fr/impressum.php b/metager/resources/lang/fr/impressum.php
similarity index 100%
rename from resources/lang/fr/impressum.php
rename to metager/resources/lang/fr/impressum.php
diff --git a/resources/lang/fr/index.php b/metager/resources/lang/fr/index.php
similarity index 100%
rename from resources/lang/fr/index.php
rename to metager/resources/lang/fr/index.php
diff --git a/resources/lang/fr/kontakt.php b/metager/resources/lang/fr/kontakt.php
similarity index 100%
rename from resources/lang/fr/kontakt.php
rename to metager/resources/lang/fr/kontakt.php
diff --git a/resources/lang/fr/plugin-page.php b/metager/resources/lang/fr/plugin-page.php
similarity index 100%
rename from resources/lang/fr/plugin-page.php
rename to metager/resources/lang/fr/plugin-page.php
diff --git a/resources/lang/fr/quicktip.php b/metager/resources/lang/fr/quicktip.php
similarity index 100%
rename from resources/lang/fr/quicktip.php
rename to metager/resources/lang/fr/quicktip.php
diff --git a/resources/lang/fr/researchandtabs.php b/metager/resources/lang/fr/researchandtabs.php
similarity index 100%
rename from resources/lang/fr/researchandtabs.php
rename to metager/resources/lang/fr/researchandtabs.php
diff --git a/resources/lang/fr/sitesearch.php b/metager/resources/lang/fr/sitesearch.php
similarity index 100%
rename from resources/lang/fr/sitesearch.php
rename to metager/resources/lang/fr/sitesearch.php
diff --git a/resources/lang/fr/staticPages.php b/metager/resources/lang/fr/staticPages.php
similarity index 100%
rename from resources/lang/fr/staticPages.php
rename to metager/resources/lang/fr/staticPages.php
diff --git a/resources/lang/it/index.php b/metager/resources/lang/it/index.php
similarity index 100%
rename from resources/lang/it/index.php
rename to metager/resources/lang/it/index.php
diff --git a/resources/lang/nd/index.php b/metager/resources/lang/nd/index.php
similarity index 100%
rename from resources/lang/nd/index.php
rename to metager/resources/lang/nd/index.php
diff --git a/resources/lang/nd/sitesearch.php b/metager/resources/lang/nd/sitesearch.php
similarity index 100%
rename from resources/lang/nd/sitesearch.php
rename to metager/resources/lang/nd/sitesearch.php
diff --git a/resources/lang/nl/index.php b/metager/resources/lang/nl/index.php
similarity index 100%
rename from resources/lang/nl/index.php
rename to metager/resources/lang/nl/index.php
diff --git a/resources/less/.csscomb.json b/metager/resources/less/.csscomb.json
similarity index 100%
rename from resources/less/.csscomb.json
rename to metager/resources/less/.csscomb.json
diff --git a/resources/less/.csslintrc b/metager/resources/less/.csslintrc
similarity index 100%
rename from resources/less/.csslintrc
rename to metager/resources/less/.csslintrc
diff --git a/resources/less/jquery-ui/jquery-ui.min.css b/metager/resources/less/jquery-ui/jquery-ui.min.css
similarity index 100%
rename from resources/less/jquery-ui/jquery-ui.min.css
rename to metager/resources/less/jquery-ui/jquery-ui.min.css
diff --git a/resources/less/jquery-ui/jquery-ui.structure.min.css b/metager/resources/less/jquery-ui/jquery-ui.structure.min.css
similarity index 100%
rename from resources/less/jquery-ui/jquery-ui.structure.min.css
rename to metager/resources/less/jquery-ui/jquery-ui.structure.min.css
diff --git a/resources/less/jquery-ui/jquery-ui.theme.min.css b/metager/resources/less/jquery-ui/jquery-ui.theme.min.css
similarity index 100%
rename from resources/less/jquery-ui/jquery-ui.theme.min.css
rename to metager/resources/less/jquery-ui/jquery-ui.theme.min.css
diff --git a/resources/less/metager/bs-variables.less b/metager/resources/less/metager/bs-variables.less
similarity index 100%
rename from resources/less/metager/bs-variables.less
rename to metager/resources/less/metager/bs-variables.less
diff --git a/resources/less/metager/general/base.less b/metager/resources/less/metager/general/base.less
similarity index 100%
rename from resources/less/metager/general/base.less
rename to metager/resources/less/metager/general/base.less
diff --git a/resources/less/metager/general/cards.less b/metager/resources/less/metager/general/cards.less
similarity index 100%
rename from resources/less/metager/general/cards.less
rename to metager/resources/less/metager/general/cards.less
diff --git a/resources/less/metager/general/forms.less b/metager/resources/less/metager/general/forms.less
similarity index 100%
rename from resources/less/metager/general/forms.less
rename to metager/resources/less/metager/general/forms.less
diff --git a/resources/less/metager/general/general.less b/metager/resources/less/metager/general/general.less
similarity index 100%
rename from resources/less/metager/general/general.less
rename to metager/resources/less/metager/general/general.less
diff --git a/resources/less/metager/general/specific.less b/metager/resources/less/metager/general/specific.less
similarity index 100%
rename from resources/less/metager/general/specific.less
rename to metager/resources/less/metager/general/specific.less
diff --git a/resources/less/metager/metager-dark.less b/metager/resources/less/metager/metager-dark.less
similarity index 100%
rename from resources/less/metager/metager-dark.less
rename to metager/resources/less/metager/metager-dark.less
diff --git a/resources/less/metager/metager.less b/metager/resources/less/metager/metager.less
similarity index 100%
rename from resources/less/metager/metager.less
rename to metager/resources/less/metager/metager.less
diff --git a/resources/less/metager/mixins/forms.less b/metager/resources/less/metager/mixins/forms.less
similarity index 100%
rename from resources/less/metager/mixins/forms.less
rename to metager/resources/less/metager/mixins/forms.less
diff --git a/resources/less/metager/mixins/grid.less b/metager/resources/less/metager/mixins/grid.less
similarity index 100%
rename from resources/less/metager/mixins/grid.less
rename to metager/resources/less/metager/mixins/grid.less
diff --git a/resources/less/metager/mixins/mixins.less b/metager/resources/less/metager/mixins/mixins.less
similarity index 100%
rename from resources/less/metager/mixins/mixins.less
rename to metager/resources/less/metager/mixins/mixins.less
diff --git a/resources/less/metager/mixins/nav-divider.less b/metager/resources/less/metager/mixins/nav-divider.less
similarity index 100%
rename from resources/less/metager/mixins/nav-divider.less
rename to metager/resources/less/metager/mixins/nav-divider.less
diff --git a/resources/less/metager/mixins/reset-filter.less b/metager/resources/less/metager/mixins/reset-filter.less
similarity index 100%
rename from resources/less/metager/mixins/reset-filter.less
rename to metager/resources/less/metager/mixins/reset-filter.less
diff --git a/resources/less/metager/mixins/tab-focus.less b/metager/resources/less/metager/mixins/tab-focus.less
similarity index 100%
rename from resources/less/metager/mixins/tab-focus.less
rename to metager/resources/less/metager/mixins/tab-focus.less
diff --git a/resources/less/metager/mixins/text-emphasis.less b/metager/resources/less/metager/mixins/text-emphasis.less
similarity index 100%
rename from resources/less/metager/mixins/text-emphasis.less
rename to metager/resources/less/metager/mixins/text-emphasis.less
diff --git a/resources/less/metager/mixins/vendor-prefixes.less b/metager/resources/less/metager/mixins/vendor-prefixes.less
similarity index 100%
rename from resources/less/metager/mixins/vendor-prefixes.less
rename to metager/resources/less/metager/mixins/vendor-prefixes.less
diff --git a/resources/less/metager/pages/about.less b/metager/resources/less/metager/pages/about.less
similarity index 100%
rename from resources/less/metager/pages/about.less
rename to metager/resources/less/metager/pages/about.less
diff --git a/resources/less/metager/pages/admin/affilliates/index-dark.less b/metager/resources/less/metager/pages/admin/affilliates/index-dark.less
similarity index 100%
rename from resources/less/metager/pages/admin/affilliates/index-dark.less
rename to metager/resources/less/metager/pages/admin/affilliates/index-dark.less
diff --git a/resources/less/metager/pages/admin/affilliates/index.less b/metager/resources/less/metager/pages/admin/affilliates/index.less
similarity index 100%
rename from resources/less/metager/pages/admin/affilliates/index.less
rename to metager/resources/less/metager/pages/admin/affilliates/index.less
diff --git a/resources/less/metager/pages/all.less b/metager/resources/less/metager/pages/all.less
similarity index 100%
rename from resources/less/metager/pages/all.less
rename to metager/resources/less/metager/pages/all.less
diff --git a/resources/less/metager/pages/asso.less b/metager/resources/less/metager/pages/asso.less
similarity index 100%
rename from resources/less/metager/pages/asso.less
rename to metager/resources/less/metager/pages/asso.less
diff --git a/resources/less/metager/pages/asso/style-dark.less b/metager/resources/less/metager/pages/asso/style-dark.less
similarity index 100%
rename from resources/less/metager/pages/asso/style-dark.less
rename to metager/resources/less/metager/pages/asso/style-dark.less
diff --git a/resources/less/metager/pages/asso/style.less b/metager/resources/less/metager/pages/asso/style.less
similarity index 100%
rename from resources/less/metager/pages/asso/style.less
rename to metager/resources/less/metager/pages/asso/style.less
diff --git a/resources/less/metager/pages/contact.less b/metager/resources/less/metager/pages/contact.less
similarity index 100%
rename from resources/less/metager/pages/contact.less
rename to metager/resources/less/metager/pages/contact.less
diff --git a/resources/less/metager/pages/count-dark.less b/metager/resources/less/metager/pages/count-dark.less
similarity index 100%
rename from resources/less/metager/pages/count-dark.less
rename to metager/resources/less/metager/pages/count-dark.less
diff --git a/resources/less/metager/pages/count/style-dark.less b/metager/resources/less/metager/pages/count/style-dark.less
similarity index 100%
rename from resources/less/metager/pages/count/style-dark.less
rename to metager/resources/less/metager/pages/count/style-dark.less
diff --git a/resources/less/metager/pages/count/style.less b/metager/resources/less/metager/pages/count/style.less
similarity index 100%
rename from resources/less/metager/pages/count/style.less
rename to metager/resources/less/metager/pages/count/style.less
diff --git a/resources/less/metager/pages/donation.less b/metager/resources/less/metager/pages/donation.less
similarity index 100%
rename from resources/less/metager/pages/donation.less
rename to metager/resources/less/metager/pages/donation.less
diff --git a/resources/less/metager/pages/help-easy-language.less b/metager/resources/less/metager/pages/help-easy-language.less
similarity index 100%
rename from resources/less/metager/pages/help-easy-language.less
rename to metager/resources/less/metager/pages/help-easy-language.less
diff --git a/resources/less/metager/pages/help.less b/metager/resources/less/metager/pages/help.less
similarity index 100%
rename from resources/less/metager/pages/help.less
rename to metager/resources/less/metager/pages/help.less
diff --git a/resources/less/metager/pages/key-dark.less b/metager/resources/less/metager/pages/key-dark.less
similarity index 100%
rename from resources/less/metager/pages/key-dark.less
rename to metager/resources/less/metager/pages/key-dark.less
diff --git a/resources/less/metager/pages/key.less b/metager/resources/less/metager/pages/key.less
similarity index 100%
rename from resources/less/metager/pages/key.less
rename to metager/resources/less/metager/pages/key.less
diff --git a/resources/less/metager/pages/keychange/index.less b/metager/resources/less/metager/pages/keychange/index.less
similarity index 100%
rename from resources/less/metager/pages/keychange/index.less
rename to metager/resources/less/metager/pages/keychange/index.less
diff --git a/resources/less/metager/pages/language.less b/metager/resources/less/metager/pages/language.less
similarity index 100%
rename from resources/less/metager/pages/language.less
rename to metager/resources/less/metager/pages/language.less
diff --git a/resources/less/metager/pages/plugin-page.less b/metager/resources/less/metager/pages/plugin-page.less
similarity index 100%
rename from resources/less/metager/pages/plugin-page.less
rename to metager/resources/less/metager/pages/plugin-page.less
diff --git a/resources/less/metager/pages/plugin.less b/metager/resources/less/metager/pages/plugin.less
similarity index 100%
rename from resources/less/metager/pages/plugin.less
rename to metager/resources/less/metager/pages/plugin.less
diff --git a/resources/less/metager/pages/privacy.less b/metager/resources/less/metager/pages/privacy.less
similarity index 100%
rename from resources/less/metager/pages/privacy.less
rename to metager/resources/less/metager/pages/privacy.less
diff --git a/resources/less/metager/pages/resultpage.less b/metager/resources/less/metager/pages/resultpage.less
similarity index 100%
rename from resources/less/metager/pages/resultpage.less
rename to metager/resources/less/metager/pages/resultpage.less
diff --git a/resources/less/metager/pages/resultpage/keyboard-nav.less b/metager/resources/less/metager/pages/resultpage/keyboard-nav.less
similarity index 100%
rename from resources/less/metager/pages/resultpage/keyboard-nav.less
rename to metager/resources/less/metager/pages/resultpage/keyboard-nav.less
diff --git a/resources/less/metager/pages/resultpage/product.less b/metager/resources/less/metager/pages/resultpage/product.less
similarity index 100%
rename from resources/less/metager/pages/resultpage/product.less
rename to metager/resources/less/metager/pages/resultpage/product.less
diff --git a/resources/less/metager/pages/resultpage/quicktips.less b/metager/resources/less/metager/pages/resultpage/quicktips.less
similarity index 99%
rename from resources/less/metager/pages/resultpage/quicktips.less
rename to metager/resources/less/metager/pages/resultpage/quicktips.less
index a336505b71f342d684e105fedcae0c25f24a27ed..7db7f8fca8f9c591798f7db0663cab5c8e7702f8 100644
--- a/resources/less/metager/pages/resultpage/quicktips.less
+++ b/metager/resources/less/metager/pages/resultpage/quicktips.less
@@ -153,6 +153,7 @@
             border: none;
             box-shadow: none;
             background-color: inherit;
+            display: var(--ad-display, 'block');
 
             .quicktip-summary {
                 display: flex;
diff --git a/resources/less/metager/pages/resultpage/result-page.less b/metager/resources/less/metager/pages/resultpage/result-page.less
similarity index 100%
rename from resources/less/metager/pages/resultpage/result-page.less
rename to metager/resources/less/metager/pages/resultpage/result-page.less
diff --git a/resources/less/metager/pages/resultpage/result-saver.less b/metager/resources/less/metager/pages/resultpage/result-saver.less
similarity index 100%
rename from resources/less/metager/pages/resultpage/result-saver.less
rename to metager/resources/less/metager/pages/resultpage/result-saver.less
diff --git a/resources/less/metager/pages/resultpage/result.less b/metager/resources/less/metager/pages/resultpage/result.less
similarity index 81%
rename from resources/less/metager/pages/resultpage/result.less
rename to metager/resources/less/metager/pages/resultpage/result.less
index c68a83545058d9102840d1c1d932b66a04ae5d10..607f3465d13c9443049cb9b32808a39d4f1a086c 100644
--- a/resources/less/metager/pages/resultpage/result.less
+++ b/metager/resources/less/metager/pages/resultpage/result.less
@@ -4,42 +4,53 @@
 @result-font-small: 12px;
 @result-description-color: @text-color;
 @result-image-border-color: @color-almost-white;
+
 .result {
 
     // Remove the margin from the first result because it already has margin from the grid ruleset
     &:nth-child(1) {
         margin-top: 0;
     }
+
     margin: @padding-small-default 0px;
-    @media(max-width: @screen-mobile){
+
+    @media(max-width: @screen-mobile) {
         .card;
         margin: @padding-small-default 0px;
     }
-    
+
     padding: 0px 8px;
     width: 100%;
+
     .result-header {
         max-width: 100%;
         overflow: hidden;
+
         .result-headline {
             width: 100%;
             display: flex;
             justify-content: space-between;
             align-items: center;
+
             .result-title {
                 font-size: 22px;
                 margin: 0px;
+
                 &>* {
                     font-size: .8em;
                 }
+
                 .overflow-ellipsis;
+
                 .result-price {
                     padding: 0px 10px;
                     color: white;
                     background-color: #666699;
                     border-radius: 3px;
                 }
+
                 a {
+
                     &,
                     &:active,
                     &:hover,
@@ -50,12 +61,14 @@
                     }
                 }
             }
+
             .result-hoster {
                 cursor: pointer;
                 font-size: .9em;
                 margin-left: 20px;
                 color: #808080;
                 white-space: nowrap;
+
                 >ul {
                     list-style-type: none;
                     padding-left: 20px;
@@ -63,30 +76,72 @@
                     width: fit-content;
                     padding: 8px;
                     display: none;
+
                     a {
                         color: @link-color;
+
                         &:hover {
                             color: @a-hover-color;
                         }
+
                         margin-left: 4px;
                     }
-                }      
-                &:focus > ul {
+                }
+
+                &:focus>ul {
                     display: block;
-                }    
+                }
             }
         }
+
         .result-subheadline {
             width: 100%;
             display: flex;
             align-items: center;
             line-height: 1.3;
+            gap: 0 8px;
+
+            figure.content-warning {
+                display: none;
+
+                &.active {
+                    display: block;
+                    position: relative;
+                    width: 20px;
+                    height: 20px;
+                    background: url('/img/icon-content-warning.svg');
+                    background-repeat: repeat;
+                    background-size: auto;
+                    background-size: contain;
+                    background-repeat: no-repeat;
+                }
+
+                &.active::before {
+                    display: none;
+                    width: max-content;
+                    content: attr(data-title);
+                    position: relative;
+                    background-color: @background-color;
+                    border: 1px solid @border-color;
+                    white-space: nowrap;
+                    padding: 8px;
+                    top: -2.2rem;
+                    left: 1rem;
+                }
+
+                &.active:hover::before,
+                &.active:focus::before {
+                    display: block;
+                }
+            }
+
             .result-link {
                 .overflow-ellipsis;
                 display: block;
                 font-size: .95em;
                 width: fit-content;
                 max-width: 100%;
+
                 &,
                 &:active,
                 &:hover,
@@ -95,9 +150,11 @@
                     font-size: 1em;
                     text-decoration: none;
                 }
+
                 &:visited {
                     color: #8091A2;
                 }
+
                 span.advertisement-mark {
                     border-color: #0d9c0d;
                     color: #0d9c0d;
@@ -111,6 +168,7 @@
                     top: -2px;
                 }
             }
+
             a.partnershop-info {
                 display: block;
                 background-color: white;
@@ -125,34 +183,43 @@
             }
         }
     }
+
     .result-body {
         margin-top: 1px;
-        max-width:100%;
+        max-width: 100%;
         margin-bottom: 8px;
+
         &.with-image {
             display: grid;
             grid-template-columns: minmax(max-content, 160px) auto;
             grid-column-gap: 8px;
             grid-row-gap: 8px;
-            @media(max-width: 380px){
+
+            @media(max-width: 380px) {
                 grid-template-columns: 1fr;
                 grid-template-rows: auto auto;
             }
+
             .result-image {
                 align-self: center;
                 justify-self: center;
             }
+
             .result-description {
                 align-self: center;
             }
         }
+
         text-align: justify;
+
         .result-image {
-            
+
             max-width: 160px;
-            > a{
+
+            >a {
                 display: block;
-                > img {
+
+                >img {
                     display: block;
                     max-width: 160px;
                     max-height: 120px;
@@ -161,21 +228,26 @@
                 }
             }
         }
+
         .result-description {
             align-self: center;
             margin-bottom: 3px;
             color: @result-description-color;
-            font-size: .95em;;
+            font-size: .95em;
+            ;
             line-height: 1.3;
             clear: both;
             overflow: hidden;
+
             .date {
                 font-weight: bold;
             }
+
             p {
                 margin: 0;
                 margin-bottom: 4px;
             }
+
             img {
                 margin: 5px;
                 margin-left: 0px;
@@ -188,16 +260,20 @@
             }
         }
     }
+
     .result-footer {
         margin-top: 2px;
         max-width: 100%;
         display: flex;
         flex-wrap: wrap;
+
         &>* {
             margin-right: 20px;
         }
+
         .result-open,
         .result-open-newtab {
+
             &,
             &:active,
             &:hover,
@@ -210,6 +286,7 @@
         }
 
         .result-open-proxy {
+
             &,
             &:active,
             &:hover,
@@ -219,33 +296,40 @@
                 font-size: .7em;
                 text-decoration: none;
             }
+
             white-space: nowrap;
+
             img {
                 margin-bottom: 0px;
                 margin-right: 2px;
             }
         }
-        .open-result-options, .close-result-options {
+
+        .open-result-options,
+        .close-result-options {
             font-weight: normal;
             font-size: .7em;
             flex-grow: 1;
             text-align: right;
             margin-right: 0;
         }
+
         .close-result-options {
             display: none;
         }
     }
 
     /* CSS Rules for the result options */
-    .result-toggle{
-        &:checked + .result-footer > .open-result-options {
+    .result-toggle {
+        &:checked+.result-footer>.open-result-options {
             display: none;
         }
-        &:checked + .result-footer > .close-result-options {
+
+        &:checked+.result-footer>.close-result-options {
             display: initial;
         }
-        &:checked + .result-footer + .result-options > .options {
+
+        &:checked+.result-footer+.result-options>.options {
             max-height: 150px;
             overflow: initial;
             opacity: 1;
@@ -256,7 +340,9 @@
     .result-footer * {
         font-size: .7em;
     }
+
     &.ad .ad-label {
+
         &,
         & a,
         & a:active,
@@ -267,13 +353,16 @@
             color: #808080;
         }
     }
+
     &>.remover {
         cursor: pointer;
         text-align: right;
         color: #777;
     }
+
     &>.result-options {
         max-width: 100%;
+
         &>.options {
             border-top: 1px solid @border-color;
             width: 100%;
@@ -285,36 +374,43 @@
             -webkit-transition: all 1s;
             opacity: 0;
         }
+
         ul {
             display: flex;
             flex-wrap: wrap;
             margin-bottom: 0;
+
             li {
                 font-size: .85em;
                 margin: 8px 16px 8px 0;
             }
-            @media(max-width: @screen-mobile){
-                li:nth-child(1){
+
+            @media(max-width: @screen-mobile) {
+                li:nth-child(1) {
                     display: none;
                 }
             }
+
             li>a {
                 color: @link-color;
             }
         }
-        
+
     }
 }
+
 #result-img-filter {
     filter: invert(1) brightness(0.4);
-    height:15px;
+    height: 15px;
     margin-right: 4px;
 }
+
 #result-img-settings {
     filter: invert(1) brightness(0.4);
-    height:16px;
+    height: 16px;
     margin-right: 4px;
 }
+
 .result-icon-floppy {
     filter: invert(48%) sepia(60%) saturate(5000%) hue-rotate(188deg);
 }
\ No newline at end of file
diff --git a/resources/less/metager/pages/search-engine.less b/metager/resources/less/metager/pages/search-engine.less
similarity index 100%
rename from resources/less/metager/pages/search-engine.less
rename to metager/resources/less/metager/pages/search-engine.less
diff --git a/resources/less/metager/pages/settings.less b/metager/resources/less/metager/pages/settings.less
similarity index 92%
rename from resources/less/metager/pages/settings.less
rename to metager/resources/less/metager/pages/settings.less
index 30a3466329ec0d98920d613c8064c03a98860437..5300925cf9fe544a8fe4d6a5394be4afb28f3102 100644
--- a/resources/less/metager/pages/settings.less
+++ b/metager/resources/less/metager/pages/settings.less
@@ -54,10 +54,13 @@
         #create{
             display:flex;
             align-items:left;
+            flex-direction: column;
+            gap: 1rem;
             margin-bottom:10px;
             #blacklist{
-                flex-grow:1;
-                width:100%;
+                width: fit-content;
+                font-size: 1.2rem;
+                line-height: 1.2;
                 background-color:@input-bg;
                 color:@input-text;
             }
diff --git a/resources/less/metager/pages/spam.less b/metager/resources/less/metager/pages/spam.less
similarity index 100%
rename from resources/less/metager/pages/spam.less
rename to metager/resources/less/metager/pages/spam.less
diff --git a/resources/less/metager/pages/spende/danke.less b/metager/resources/less/metager/pages/spende/danke.less
similarity index 100%
rename from resources/less/metager/pages/spende/danke.less
rename to metager/resources/less/metager/pages/spende/danke.less
diff --git a/resources/less/metager/pages/start-page.less b/metager/resources/less/metager/pages/start-page.less
similarity index 100%
rename from resources/less/metager/pages/start-page.less
rename to metager/resources/less/metager/pages/start-page.less
diff --git a/resources/less/metager/pages/transparency.less b/metager/resources/less/metager/pages/transparency.less
similarity index 100%
rename from resources/less/metager/pages/transparency.less
rename to metager/resources/less/metager/pages/transparency.less
diff --git a/resources/less/metager/pages/widget.less b/metager/resources/less/metager/pages/widget.less
similarity index 100%
rename from resources/less/metager/pages/widget.less
rename to metager/resources/less/metager/pages/widget.less
diff --git a/resources/less/metager/pages/zitatsuche.less b/metager/resources/less/metager/pages/zitatsuche.less
similarity index 100%
rename from resources/less/metager/pages/zitatsuche.less
rename to metager/resources/less/metager/pages/zitatsuche.less
diff --git a/resources/less/metager/parts/alert.less b/metager/resources/less/metager/parts/alert.less
similarity index 100%
rename from resources/less/metager/parts/alert.less
rename to metager/resources/less/metager/parts/alert.less
diff --git a/resources/less/metager/parts/aufruf-winter.less b/metager/resources/less/metager/parts/aufruf-winter.less
similarity index 100%
rename from resources/less/metager/parts/aufruf-winter.less
rename to metager/resources/less/metager/parts/aufruf-winter.less
diff --git a/resources/less/metager/parts/bitpay.less b/metager/resources/less/metager/parts/bitpay.less
similarity index 100%
rename from resources/less/metager/parts/bitpay.less
rename to metager/resources/less/metager/parts/bitpay.less
diff --git a/resources/less/metager/parts/button.less b/metager/resources/less/metager/parts/button.less
similarity index 100%
rename from resources/less/metager/parts/button.less
rename to metager/resources/less/metager/parts/button.less
diff --git a/resources/less/metager/parts/dropdowns.less b/metager/resources/less/metager/parts/dropdowns.less
similarity index 100%
rename from resources/less/metager/parts/dropdowns.less
rename to metager/resources/less/metager/parts/dropdowns.less
diff --git a/resources/less/metager/parts/footer.less b/metager/resources/less/metager/parts/footer.less
similarity index 100%
rename from resources/less/metager/parts/footer.less
rename to metager/resources/less/metager/parts/footer.less
diff --git a/resources/less/metager/parts/mg-icons.less b/metager/resources/less/metager/parts/mg-icons.less
similarity index 100%
rename from resources/less/metager/parts/mg-icons.less
rename to metager/resources/less/metager/parts/mg-icons.less
diff --git a/resources/less/metager/parts/modals.less b/metager/resources/less/metager/parts/modals.less
similarity index 100%
rename from resources/less/metager/parts/modals.less
rename to metager/resources/less/metager/parts/modals.less
diff --git a/metager/resources/less/metager/parts/scaffolding.less b/metager/resources/less/metager/parts/scaffolding.less
new file mode 100644
index 0000000000000000000000000000000000000000..e80bdb84c3d9231d7e3813731cd6d52450c58b73
--- /dev/null
+++ b/metager/resources/less/metager/parts/scaffolding.less
@@ -0,0 +1,38 @@
+* {
+  .box-sizing(border-box);
+}
+
+*:before,
+*:after {
+  .box-sizing(border-box);
+}
+
+
+body {
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 1.1em;
+  line-height: 1.5;
+  color: @text-color;
+  background-color: @background-color;
+
+}
+
+figure {
+  margin: 0;
+}
+
+img {
+  vertical-align: middle;
+}
+
+
+hr {
+  margin-top: 20px;
+  margin-bottom: 20px;
+  border: 0;
+  border-top: 1px solid #eee;
+}
+
+a {
+  text-decoration: none;
+}
\ No newline at end of file
diff --git a/resources/less/metager/parts/searchbar.less b/metager/resources/less/metager/parts/searchbar.less
similarity index 100%
rename from resources/less/metager/parts/searchbar.less
rename to metager/resources/less/metager/parts/searchbar.less
diff --git a/resources/less/metager/parts/settings.less b/metager/resources/less/metager/parts/settings.less
similarity index 100%
rename from resources/less/metager/parts/settings.less
rename to metager/resources/less/metager/parts/settings.less
diff --git a/resources/less/metager/parts/sidebar.less b/metager/resources/less/metager/parts/sidebar.less
similarity index 100%
rename from resources/less/metager/parts/sidebar.less
rename to metager/resources/less/metager/parts/sidebar.less
diff --git a/resources/less/metager/parts/type.less b/metager/resources/less/metager/parts/type.less
similarity index 98%
rename from resources/less/metager/parts/type.less
rename to metager/resources/less/metager/parts/type.less
index 42511defc2b9818853f6173fa6945fdc68decd0b..5ca4e6c627e2f34087b5bacea97dd62cef014b4a 100644
--- a/resources/less/metager/parts/type.less
+++ b/metager/resources/less/metager/parts/type.less
@@ -41,7 +41,7 @@ h6 {
 h1 {
   font-size: 1.8rem;
   border-bottom: 1px solid @border-color;
-  margin-bottom: 8px;
+  margin-bottom: 1.2rem;
   padding-bottom: 4px;
 }
 
diff --git a/resources/less/metager/startpage-only-dark.less b/metager/resources/less/metager/startpage-only-dark.less
similarity index 100%
rename from resources/less/metager/startpage-only-dark.less
rename to metager/resources/less/metager/startpage-only-dark.less
diff --git a/resources/less/metager/startpage-only-light.less b/metager/resources/less/metager/startpage-only-light.less
similarity index 100%
rename from resources/less/metager/startpage-only-light.less
rename to metager/resources/less/metager/startpage-only-light.less
diff --git a/resources/less/metager/startpage-only.less b/metager/resources/less/metager/startpage-only.less
similarity index 100%
rename from resources/less/metager/startpage-only.less
rename to metager/resources/less/metager/startpage-only.less
diff --git a/resources/less/metager/variables-dark.less b/metager/resources/less/metager/variables-dark.less
similarity index 100%
rename from resources/less/metager/variables-dark.less
rename to metager/resources/less/metager/variables-dark.less
diff --git a/resources/less/metager/variables.less b/metager/resources/less/metager/variables.less
similarity index 100%
rename from resources/less/metager/variables.less
rename to metager/resources/less/metager/variables.less
diff --git a/resources/less/utility.less b/metager/resources/less/utility.less
similarity index 100%
rename from resources/less/utility.less
rename to metager/resources/less/utility.less
diff --git a/resources/sass/_variables.scss b/metager/resources/sass/_variables.scss
similarity index 100%
rename from resources/sass/_variables.scss
rename to metager/resources/sass/_variables.scss
diff --git a/resources/sass/app.scss b/metager/resources/sass/app.scss
similarity index 100%
rename from resources/sass/app.scss
rename to metager/resources/sass/app.scss
diff --git a/resources/views/about.blade.php b/metager/resources/views/about.blade.php
similarity index 100%
rename from resources/views/about.blade.php
rename to metager/resources/views/about.blade.php
diff --git a/resources/views/ad-info.blade.php b/metager/resources/views/ad-info.blade.php
similarity index 100%
rename from resources/views/ad-info.blade.php
rename to metager/resources/views/ad-info.blade.php
diff --git a/resources/views/admin/adgoal.blade.php b/metager/resources/views/admin/adgoal.blade.php
similarity index 100%
rename from resources/views/admin/adgoal.blade.php
rename to metager/resources/views/admin/adgoal.blade.php
diff --git a/resources/views/admin/admin.blade.php b/metager/resources/views/admin/admin.blade.php
similarity index 100%
rename from resources/views/admin/admin.blade.php
rename to metager/resources/views/admin/admin.blade.php
diff --git a/resources/views/admin/affiliates/index.blade.php b/metager/resources/views/admin/affiliates/index.blade.php
similarity index 100%
rename from resources/views/admin/affiliates/index.blade.php
rename to metager/resources/views/admin/affiliates/index.blade.php
diff --git a/resources/views/admin/check.blade.php b/metager/resources/views/admin/check.blade.php
similarity index 100%
rename from resources/views/admin/check.blade.php
rename to metager/resources/views/admin/check.blade.php
diff --git a/resources/views/admin/count.blade.php b/metager/resources/views/admin/count.blade.php
similarity index 100%
rename from resources/views/admin/count.blade.php
rename to metager/resources/views/admin/count.blade.php
diff --git a/resources/views/admin/countGraphToday.blade.php b/metager/resources/views/admin/countGraphToday.blade.php
similarity index 100%
rename from resources/views/admin/countGraphToday.blade.php
rename to metager/resources/views/admin/countGraphToday.blade.php
diff --git a/resources/views/admin/engines.blade.php b/metager/resources/views/admin/engines.blade.php
similarity index 100%
rename from resources/views/admin/engines.blade.php
rename to metager/resources/views/admin/engines.blade.php
diff --git a/resources/views/admin/spam.blade.php b/metager/resources/views/admin/spam.blade.php
similarity index 100%
rename from resources/views/admin/spam.blade.php
rename to metager/resources/views/admin/spam.blade.php
diff --git a/resources/views/app.blade.php b/metager/resources/views/app.blade.php
similarity index 100%
rename from resources/views/app.blade.php
rename to metager/resources/views/app.blade.php
diff --git a/resources/views/assoziator/asso.blade.php b/metager/resources/views/assoziator/asso.blade.php
similarity index 100%
rename from resources/views/assoziator/asso.blade.php
rename to metager/resources/views/assoziator/asso.blade.php
diff --git a/resources/views/berlin.blade.php b/metager/resources/views/berlin.blade.php
similarity index 100%
rename from resources/views/berlin.blade.php
rename to metager/resources/views/berlin.blade.php
diff --git a/resources/views/datenschutz/datenschutz.blade.php b/metager/resources/views/datenschutz/datenschutz.blade.php
similarity index 100%
rename from resources/views/datenschutz/datenschutz.blade.php
rename to metager/resources/views/datenschutz/datenschutz.blade.php
diff --git a/resources/views/datenschutz/english.blade.php b/metager/resources/views/datenschutz/english.blade.php
similarity index 100%
rename from resources/views/datenschutz/english.blade.php
rename to metager/resources/views/datenschutz/english.blade.php
diff --git a/resources/views/datenschutz/german.blade.php b/metager/resources/views/datenschutz/german.blade.php
similarity index 100%
rename from resources/views/datenschutz/german.blade.php
rename to metager/resources/views/datenschutz/german.blade.php
diff --git a/resources/views/datenschutz/twitter-comments.blade.php b/metager/resources/views/datenschutz/twitter-comments.blade.php
similarity index 100%
rename from resources/views/datenschutz/twitter-comments.blade.php
rename to metager/resources/views/datenschutz/twitter-comments.blade.php
diff --git a/resources/views/errors/403.blade.php b/metager/resources/views/errors/403.blade.php
similarity index 100%
rename from resources/views/errors/403.blade.php
rename to metager/resources/views/errors/403.blade.php
diff --git a/resources/views/errors/404.blade.php b/metager/resources/views/errors/404.blade.php
similarity index 100%
rename from resources/views/errors/404.blade.php
rename to metager/resources/views/errors/404.blade.php
diff --git a/resources/views/errors/429.blade.php b/metager/resources/views/errors/429.blade.php
similarity index 100%
rename from resources/views/errors/429.blade.php
rename to metager/resources/views/errors/429.blade.php
diff --git a/resources/views/errors/500.blade.php b/metager/resources/views/errors/500.blade.php
similarity index 100%
rename from resources/views/errors/500.blade.php
rename to metager/resources/views/errors/500.blade.php
diff --git a/resources/views/errors/503.blade.php b/metager/resources/views/errors/503.blade.php
similarity index 100%
rename from resources/views/errors/503.blade.php
rename to metager/resources/views/errors/503.blade.php
diff --git a/resources/views/help/easy-language/help-functions.blade.php b/metager/resources/views/help/easy-language/help-functions.blade.php
similarity index 100%
rename from resources/views/help/easy-language/help-functions.blade.php
rename to metager/resources/views/help/easy-language/help-functions.blade.php
diff --git a/resources/views/help/easy-language/help-mainpages.blade.php b/metager/resources/views/help/easy-language/help-mainpages.blade.php
similarity index 100%
rename from resources/views/help/easy-language/help-mainpages.blade.php
rename to metager/resources/views/help/easy-language/help-mainpages.blade.php
diff --git a/resources/views/help/easy-language/help-privacy-protection.blade.php b/metager/resources/views/help/easy-language/help-privacy-protection.blade.php
similarity index 100%
rename from resources/views/help/easy-language/help-privacy-protection.blade.php
rename to metager/resources/views/help/easy-language/help-privacy-protection.blade.php
diff --git a/resources/views/help/easy-language/help-services.blade.php b/metager/resources/views/help/easy-language/help-services.blade.php
similarity index 100%
rename from resources/views/help/easy-language/help-services.blade.php
rename to metager/resources/views/help/easy-language/help-services.blade.php
diff --git a/resources/views/help/easy-language/help.blade.php b/metager/resources/views/help/easy-language/help.blade.php
similarity index 100%
rename from resources/views/help/easy-language/help.blade.php
rename to metager/resources/views/help/easy-language/help.blade.php
diff --git a/resources/views/help/faktencheck.blade.php b/metager/resources/views/help/faktencheck.blade.php
similarity index 74%
rename from resources/views/help/faktencheck.blade.php
rename to metager/resources/views/help/faktencheck.blade.php
index cf249bc115f21964ea74795ec69959f84e62e3b9..62608a80d0fded421983efe9750369ffd296b791 100644
--- a/resources/views/help/faktencheck.blade.php
+++ b/metager/resources/views/help/faktencheck.blade.php
@@ -6,48 +6,47 @@
 <h1 class="page-title">@lang('faktencheck.heading.1')</h1>
 <div class="card">
 	<p>@lang('faktencheck.paragraph.1')</p>
+	<p>@lang('faktencheck.paragraph.2')</p>
+
 	<ol id="checklist">
 		<li>@lang('faktencheck.list.1')</li>
-		<ol>
+		<ul>
 			<li>@lang('faktencheck.list.1.1')</li>
 			<li>@lang('faktencheck.list.1.2')</li>
 			<li>@lang('faktencheck.list.1.3')</li>
 			<li>@lang('faktencheck.list.1.4')</li>
-			<li>@lang('faktencheck.list.1.5')</li>
-			<li>@lang('faktencheck.list.1.6')</li>
-			<li>@lang('faktencheck.list.1.7')</li>
-			<li>@lang('faktencheck.list.1.8')</li>
-		</ol>
+		</ul>
 		<li>@lang('faktencheck.list.2')</li>
-		<ol>
+		<ul>
 			<li>@lang('faktencheck.list.2.1')</li>
 			<li>@lang('faktencheck.list.2.2')</li>
 			<li>@lang('faktencheck.list.2.3')</li>
 			<li>@lang('faktencheck.list.2.4')</li>
 			<li>@lang('faktencheck.list.2.5')</li>
-			<li>@lang('faktencheck.list.2.6')</li>
-		</ol>
+		</ul>
 		<li>@lang('faktencheck.list.3')</li>
-		<ol>
-			<li>@lang('faktencheck.list.3.1')</li>
+		<p>@lang('faktencheck.list.3.1')</p>
+		<ul>
 			<li>@lang('faktencheck.list.3.2')</li>
 			<li>@lang('faktencheck.list.3.3')</li>
 			<li>@lang('faktencheck.list.3.4')</li>
-		</ol>
+			<li>@lang('faktencheck.list.3.5')</li>
+
+		</ul>
 		<li>@lang('faktencheck.list.4')</li>
-		<ol>
-			<li>@lang('faktencheck.list.4.1')</li>
+		<p>@lang('faktencheck.list.4.1')</p>
+		<ul>
 			<li>@lang('faktencheck.list.4.2')</li>
 			<li>@lang('faktencheck.list.4.3')</li>
-		</ol>
+		</ul>
 		<li>@lang('faktencheck.list.5')</li>
-		<ol>
+		<ul>
 			<li>@lang('faktencheck.list.5.1')</li>
 			<li>@lang('faktencheck.list.5.2')</li>
 			<li>@lang('faktencheck.list.5.3')</li>
-		</ol>
-		<li>@lang('faktencheck.list.6')</li>
+		</ul>
 		<li>@lang('faktencheck.list.7')</li>
-	</ol>
+	</ul>
+
 </div>
 @endsection
\ No newline at end of file
diff --git a/resources/views/help/help-functions.blade.php b/metager/resources/views/help/help-functions.blade.php
similarity index 100%
rename from resources/views/help/help-functions.blade.php
rename to metager/resources/views/help/help-functions.blade.php
diff --git a/resources/views/help/help-mainpages.blade.php b/metager/resources/views/help/help-mainpages.blade.php
similarity index 100%
rename from resources/views/help/help-mainpages.blade.php
rename to metager/resources/views/help/help-mainpages.blade.php
diff --git a/resources/views/help/help-privacy-protection.blade.php b/metager/resources/views/help/help-privacy-protection.blade.php
similarity index 100%
rename from resources/views/help/help-privacy-protection.blade.php
rename to metager/resources/views/help/help-privacy-protection.blade.php
diff --git a/resources/views/help/help-services.blade.php b/metager/resources/views/help/help-services.blade.php
similarity index 100%
rename from resources/views/help/help-services.blade.php
rename to metager/resources/views/help/help-services.blade.php
diff --git a/resources/views/help/help.blade.php b/metager/resources/views/help/help.blade.php
similarity index 100%
rename from resources/views/help/help.blade.php
rename to metager/resources/views/help/help.blade.php
diff --git a/resources/views/humanverification/botOverview.blade.php b/metager/resources/views/humanverification/botOverview.blade.php
similarity index 100%
rename from resources/views/humanverification/botOverview.blade.php
rename to metager/resources/views/humanverification/botOverview.blade.php
diff --git a/resources/views/humanverification/captcha.blade.php b/metager/resources/views/humanverification/captcha.blade.php
similarity index 100%
rename from resources/views/humanverification/captcha.blade.php
rename to metager/resources/views/humanverification/captcha.blade.php
diff --git a/resources/views/impressum.blade.php b/metager/resources/views/impressum.blade.php
similarity index 100%
rename from resources/views/impressum.blade.php
rename to metager/resources/views/impressum.blade.php
diff --git a/resources/views/index.blade.php b/metager/resources/views/index.blade.php
similarity index 100%
rename from resources/views/index.blade.php
rename to metager/resources/views/index.blade.php
diff --git a/resources/views/jugendschutz.blade.php b/metager/resources/views/jugendschutz.blade.php
similarity index 100%
rename from resources/views/jugendschutz.blade.php
rename to metager/resources/views/jugendschutz.blade.php
diff --git a/resources/views/key.blade.php b/metager/resources/views/key.blade.php
similarity index 100%
rename from resources/views/key.blade.php
rename to metager/resources/views/key.blade.php
diff --git a/resources/views/keychange.blade.php b/metager/resources/views/keychange.blade.php
similarity index 100%
rename from resources/views/keychange.blade.php
rename to metager/resources/views/keychange.blade.php
diff --git a/resources/views/keychangethree.blade.php b/metager/resources/views/keychangethree.blade.php
similarity index 100%
rename from resources/views/keychangethree.blade.php
rename to metager/resources/views/keychangethree.blade.php
diff --git a/resources/views/keychangetwo.blade.php b/metager/resources/views/keychangetwo.blade.php
similarity index 100%
rename from resources/views/keychangetwo.blade.php
rename to metager/resources/views/keychangetwo.blade.php
diff --git a/resources/views/kontakt/kontakt.blade.php b/metager/resources/views/kontakt/kontakt.blade.php
similarity index 100%
rename from resources/views/kontakt/kontakt.blade.php
rename to metager/resources/views/kontakt/kontakt.blade.php
diff --git a/resources/views/kontakt/mail.blade.php b/metager/resources/views/kontakt/mail.blade.php
similarity index 100%
rename from resources/views/kontakt/mail.blade.php
rename to metager/resources/views/kontakt/mail.blade.php
diff --git a/resources/views/kontakt/pgp.blade.php b/metager/resources/views/kontakt/pgp.blade.php
similarity index 100%
rename from resources/views/kontakt/pgp.blade.php
rename to metager/resources/views/kontakt/pgp.blade.php
diff --git a/resources/views/languages/edit.blade.php b/metager/resources/views/languages/edit.blade.php
similarity index 100%
rename from resources/views/languages/edit.blade.php
rename to metager/resources/views/languages/edit.blade.php
diff --git a/resources/views/languages/overview.blade.php b/metager/resources/views/languages/overview.blade.php
similarity index 100%
rename from resources/views/languages/overview.blade.php
rename to metager/resources/views/languages/overview.blade.php
diff --git a/resources/views/languages/synoptic.blade.php b/metager/resources/views/languages/synoptic.blade.php
similarity index 100%
rename from resources/views/languages/synoptic.blade.php
rename to metager/resources/views/languages/synoptic.blade.php
diff --git a/resources/views/layouts/ad.blade.php b/metager/resources/views/layouts/ad.blade.php
similarity index 100%
rename from resources/views/layouts/ad.blade.php
rename to metager/resources/views/layouts/ad.blade.php
diff --git a/resources/views/layouts/atom10ad.blade.php b/metager/resources/views/layouts/atom10ad.blade.php
similarity index 100%
rename from resources/views/layouts/atom10ad.blade.php
rename to metager/resources/views/layouts/atom10ad.blade.php
diff --git a/resources/views/layouts/image_result.blade.php b/metager/resources/views/layouts/image_result.blade.php
similarity index 100%
rename from resources/views/layouts/image_result.blade.php
rename to metager/resources/views/layouts/image_result.blade.php
diff --git a/resources/views/layouts/keyboardNavBox.blade.php b/metager/resources/views/layouts/keyboardNavBox.blade.php
similarity index 100%
rename from resources/views/layouts/keyboardNavBox.blade.php
rename to metager/resources/views/layouts/keyboardNavBox.blade.php
diff --git a/resources/views/layouts/researchandtabs.blade.php b/metager/resources/views/layouts/researchandtabs.blade.php
similarity index 90%
rename from resources/views/layouts/researchandtabs.blade.php
rename to metager/resources/views/layouts/researchandtabs.blade.php
index b0c59b3a9de4ad8caeeb4b02d96dfe43085ec044..b5583a4fe7c844b449a2cc458a5cc02b6083c968 100644
--- a/resources/views/layouts/researchandtabs.blade.php
+++ b/metager/resources/views/layouts/researchandtabs.blade.php
@@ -32,13 +32,13 @@
 		@yield('results')
 		<div id="backtotop"><a href="#top">@lang('results.backtotop')</a></div>
 	</div>
-	<div id="additions-container">
+	<div id="additions-container" style="--ad-display: {{ $metager->isApiAuthorized() ? 'none' : 'block' }};">
 		@include('layouts.keyboardNavBox')
 		<div id="quicktips">
-		@if( $metager->showQuicktips() )
+			@if( $metager->showQuicktips() )
 			@include('quicktips', ['quicktips', $quicktips])
-		@endif
+			@endif
 		</div>
 	</div>
 	@include('parts.footer', ['type' => 'resultpage', 'id' => 'resultPageFooter'])
-</div>
+</div>
\ No newline at end of file
diff --git a/resources/views/layouts/result.blade.php b/metager/resources/views/layouts/result.blade.php
similarity index 96%
rename from resources/views/layouts/result.blade.php
rename to metager/resources/views/layouts/result.blade.php
index f46b9d312f5177948ea9f12db849eca680e9436f..2a2384b220e38d14b0bb0bceded63482ae503eef 100644
--- a/resources/views/layouts/result.blade.php
+++ b/metager/resources/views/layouts/result.blade.php
@@ -24,7 +24,7 @@
 			@endif
 		</div>
 		<div class="result-subheadline">
-			<a class="result-link" href="{{ $result->link }}" title="{{ $result->anzeigeLink }}" rel="noopener" target="{{ $metager->getNewtab() }}" tabindex="-1">
+			<a class=" result-link" href="{{ $result->link }}" title="{{ $result->anzeigeLink }}" rel="noopener" target="{{ $metager->getNewtab() }}" tabindex="-1">
 				{{ $result->anzeigeLink }}
 			</a>
 			@if( isset($result->partnershop) && $result->partnershop === TRUE)
diff --git a/resources/views/layouts/resultPage.blade.php b/metager/resources/views/layouts/resultPage.blade.php
similarity index 75%
rename from resources/views/layouts/resultPage.blade.php
rename to metager/resources/views/layouts/resultPage.blade.php
index 4f07f3a9e8c3ebe8cfbb98efb7e1c449131f3bc2..abcfa82d70e0d9c7b250fd16577e1c507585bef4 100644
--- a/resources/views/layouts/resultPage.blade.php
+++ b/metager/resources/views/layouts/resultPage.blade.php
@@ -6,15 +6,23 @@
 	<meta charset="utf-8">
 	<link href="/favicon.ico" rel="icon" type="image/x-icon" />
 	<link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" />
-	<link rel="apple-touch-icon" href="/img/apple/touch-icon.png">
-	<link rel="apple-touch-icon" sizes="57x57" href="/img/apple/touch-icon-57.png">
-	<link rel="apple-touch-icon" sizes="72x72" href="/img/apple/touch-icon-72.png">
-	<link rel="apple-touch-icon" sizes="76x76" href="/img/apple/touch-icon-76.png">
-	<link rel="apple-touch-icon" sizes="114x114" href="/img/apple/touch-icon-114.png">
-	<link rel="apple-touch-icon" sizes="120x120" href="/img/apple/touch-icon-120.png">
-	<link rel="apple-touch-icon" sizes="144x144" href="/img/apple/touch-icon-144.png">
-	<link rel="apple-touch-icon" sizes="152x152" href="/img/apple/touch-icon-152.png">
-	<link rel="apple-touch-icon" sizes="180x180" href="/img/apple/touch-icon-180.png">
+	@foreach(scandir(public_path("img/favicon")) as $file)
+	@if(in_array($file, [".", ".."]))
+	@continue
+	@endif
+	@php
+	preg_match("/(\d+)\.png$/", $file, $matches);
+	@endphp
+	@if($matches)
+	<link rel="icon" sizes="{{$matches[1]}}x{{$matches[1]}}" href="/img/favicon/{{$file}}" type="image/png">
+	<link rel="apple-touch-icon" sizes="{{$matches[1]}}x{{$matches[1]}}" href="/img/favicon/{{$file}}" type="image/png">
+	@endif
+	@endforeach
+	@if(empty(Cookie::get('key')))
+	<link rel="search" type="application/opensearchdescription+xml" title="{{ trans('staticPages.opensearch') }}" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin')) }}">
+	@else
+	<link rel="search" type="application/opensearchdescription+xml" title="{{ trans('staticPages.opensearch') }}" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin', ['key' => Cookie::get('key')])) }}">
+	@endif
 	@if(empty(Cookie::get('key')))
 	<link rel="search" type="application/opensearchdescription+xml" title="{{ trans('staticPages.opensearch') }}" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin')) }}">
 	@else
diff --git a/metager/resources/views/layouts/resultpage/resources.blade.php b/metager/resources/views/layouts/resultpage/resources.blade.php
new file mode 100644
index 0000000000000000000000000000000000000000..9caf74ecfb126d76522f4f725282803a2b2e5abb
--- /dev/null
+++ b/metager/resources/views/layouts/resultpage/resources.blade.php
@@ -0,0 +1,34 @@
+    <link href="/favicon.ico" rel="icon" type="image/x-icon" />
+    <link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" />
+    @foreach(scandir(public_path("img/favicon")) as $file)
+    @if(in_array($file, [".", ".."]))
+    @continue
+    @endif
+    @php
+    preg_match("/(\d+)\.png$/", $file, $matches);
+    @endphp
+    @if($matches)
+    <link rel="icon" sizes="{{$matches[1]}}x{{$matches[1]}}" href="/img/favicon/{{$file}}" type="image/png">
+    <link rel="apple-touch-icon" sizes="{{$matches[1]}}x{{$matches[1]}}" href="/img/favicon/{{$file}}" type="image/png">
+    @endif
+    @endforeach
+    @if(empty(Cookie::get('key')))
+    <link rel="search" type="application/opensearchdescription+xml" title="{{ trans('staticPages.opensearch') }}" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin')) }}">
+    @else
+    <link rel="search" type="application/opensearchdescription+xml" title="{{ trans('staticPages.opensearch') }}" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin', ['key' => Cookie::get('key')])) }}">
+    @endif
+    @if(empty(Cookie::get('key')))
+    <link rel="search" type="application/opensearchdescription+xml" title="{{ trans('staticPages.opensearch') }}" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin')) }}">
+    @else
+    <link rel="search" type="application/opensearchdescription+xml" title="{{ trans('staticPages.opensearch') }}" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin', ['key' => Cookie::get('key')])) }}">
+    @endif
+    <link href="/fonts/liberationsans/stylesheet.css" rel="stylesheet">
+
+    <link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager.css') }}" />
+    @if(Cookie::get('dark_mode') === "2")
+    <link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager-dark.css') }}" />
+    @elseif(Cookie::get('dark_mode') === "1")
+    <link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager.css') }}" />
+    @elseif(Request::input('out', '') !== "results-with-style" )
+    <link type="text/css" rel="stylesheet" media="(prefers-color-scheme:dark)" href="{{ mix('css/themes/metager-dark.css') }}" />
+    @endif
\ No newline at end of file
diff --git a/resources/views/layouts/resultpage/unverifiedResultPage.blade.php b/metager/resources/views/layouts/resultpage/unverifiedResultPage.blade.php
similarity index 100%
rename from resources/views/layouts/resultpage/unverifiedResultPage.blade.php
rename to metager/resources/views/layouts/resultpage/unverifiedResultPage.blade.php
diff --git a/resources/views/layouts/resultpage/verificationCss.blade.php b/metager/resources/views/layouts/resultpage/verificationCss.blade.php
similarity index 100%
rename from resources/views/layouts/resultpage/verificationCss.blade.php
rename to metager/resources/views/layouts/resultpage/verificationCss.blade.php
diff --git a/resources/views/layouts/resultpage/verificationHeader.blade.php b/metager/resources/views/layouts/resultpage/verificationHeader.blade.php
similarity index 100%
rename from resources/views/layouts/resultpage/verificationHeader.blade.php
rename to metager/resources/views/layouts/resultpage/verificationHeader.blade.php
diff --git a/metager/resources/views/layouts/staticPages.blade.php b/metager/resources/views/layouts/staticPages.blade.php
new file mode 100644
index 0000000000000000000000000000000000000000..b9174e990a97f8676518fc06d0f2ed8381f4cb6a
--- /dev/null
+++ b/metager/resources/views/layouts/staticPages.blade.php
@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html lang="{!! trans('staticPages.meta.language') !!}">
+
+<head>
+	<meta charset="utf-8" />
+	<title>@yield('title')</title>
+	<meta name="description" content="{!! trans('staticPages.meta.Description') !!}" />
+	<meta name="keywords" content="{!! trans('staticPages.meta.Keywords') !!}" />
+	<meta name="page-topic" content="Dienstleistung" />
+	<meta name="robots" content="index,follow" />
+	<meta name="revisit-after" content="7 days" />
+	<meta name="audience" content="all" />
+	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
+	<link href="/favicon.ico" rel="icon" type="image/x-icon" />
+	<link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" />
+	@foreach(scandir(public_path("img/favicon")) as $file)
+	@if(in_array($file, [".", ".."]))
+	@continue
+	@endif
+	@php
+	preg_match("/(\d+)\.png$/", $file, $matches);
+	@endphp
+	@if($matches)
+	<link rel="icon" sizes="{{$matches[1]}}x{{$matches[1]}}" href="/img/favicon/{{$file}}" type="image/png">
+	<link rel="apple-touch-icon" sizes="{{$matches[1]}}x{{$matches[1]}}" href="/img/favicon/{{$file}}" type="image/png">
+	@endif
+	@endforeach
+	@if(empty(Cookie::get('key')))
+	<link rel="search" type="application/opensearchdescription+xml" title="{{ trans('staticPages.opensearch') }}" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin')) }}">
+	@else
+	<link rel="search" type="application/opensearchdescription+xml" title="{{ trans('staticPages.opensearch') }}" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin', ['key' => Cookie::get('key')])) }}">
+	@endif
+
+	<link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager.css') }}" />
+	@if(isset($page) && $page === 'startpage')
+	<link type="text/css" rel="stylesheet" href="{{ mix('css/themes/startpage-only-light.css') }}" />
+	@endif
+	@if(Cookie::get('dark_mode') === "2")
+	<link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager-dark.css') }}" />
+	@if(!empty($darkcss) && is_array($darkcss))
+	@foreach($darkcss as $cssFile)
+	<link rel="stylesheet" type="text/css" href="{{ $cssFile }}" />
+	@endforeach
+	@endif
+	@elseif(Cookie::get('dark_mode') === "1")
+	<link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager.css') }}" />
+	@if(isset($page) && $page === 'startpage')
+	<link type="text/css" rel="stylesheet" href="{{ mix('css/themes/startpage-only-light.css') }}" />
+	@endif
+	@else
+	<link type="text/css" rel="stylesheet" media="(prefers-color-scheme:dark)" href="{{ mix('css/themes/metager-dark.css') }}" />
+	@if(!empty($darkcss) && is_array($darkcss))
+	@foreach($darkcss as $cssFile)
+	<link rel="stylesheet" type="text/css" media="(prefers-color-scheme:dark)" href="{{ $cssFile }}" />
+	@endforeach
+	@endif
+	@endif
+	<link type="text/css" rel="stylesheet" href="{{ mix('css/utility.css') }}" />
+	<link href="/fonts/liberationsans/stylesheet.css" rel="stylesheet">
+    @if (isset($css) && is_array($css))
+    @foreach($css as $cssFile)
+    <link href="{{ $cssFile }}" rel="stylesheet" />
+	@endforeach
+	@endif
+	<script src="{{ mix('js/lib.js') }}"></script>
+	<script src="{{ mix('js/utility.js') }}"></script>
+	@if(!empty($js) && is_array($js))
+	@foreach($js as $jsFile)
+	<script src="{{$jsFile}}" async></script>
+	@endforeach
+	@endif
+</head>
+
+<body>
+	@if(Request::getHttpHost() === "metager3.de")
+	<div class="alert alert-info metager3-unstable-warning-static-pages">
+		{!! @trans('resultPage.metager3') !!}
+	</div>
+	@endif
+	<header>
+		@yield('homeIcon')
+	</header>
+	<div class="wrapper {{$page ?? ''}}">
+		<main id="main-content">
+			@if (isset($success))
+			<div class="alert alert-success" role="alert">{{ $success }}</div>
+			@endif
+			@if (isset($info))
+			<div class="alert alert-info" role="alert">{{ $info }}</div>
+			@endif
+			@if (isset($warning))
+			<div class="alert alert-warning" role="alert">{{ $warning }}</div>
+			@endif
+			@if (isset($error))
+			<div class="alert alert-danger" role="alert">{{ $error }}</div>
+			@endif
+			@yield('content')
+		</main>
+	</div>
+	@include('parts.sidebar', ['id' => 'staticPagesSideBar'])
+	@include('parts.sidebar-opener', ['class' => 'fixed'])
+	@if (isset($page) && $page === 'startpage')
+	@include('parts.footer', ['type' => 'startpage', 'id' => 'startPageFooter'])
+	@else
+	@include('parts.footer', ['type' => 'subpage', 'id' => 'subPageFooter'])
+	@endif
+</body>
+
+</html>
diff --git a/resources/views/layouts/subPages.blade.php b/metager/resources/views/layouts/subPages.blade.php
similarity index 100%
rename from resources/views/layouts/subPages.blade.php
rename to metager/resources/views/layouts/subPages.blade.php
diff --git a/resources/views/parts/alteration.blade.php b/metager/resources/views/parts/alteration.blade.php
similarity index 100%
rename from resources/views/parts/alteration.blade.php
rename to metager/resources/views/parts/alteration.blade.php
diff --git a/resources/views/parts/custom-daterange.blade.php b/metager/resources/views/parts/custom-daterange.blade.php
similarity index 100%
rename from resources/views/parts/custom-daterange.blade.php
rename to metager/resources/views/parts/custom-daterange.blade.php
diff --git a/resources/views/parts/errors.blade.php b/metager/resources/views/parts/errors.blade.php
similarity index 100%
rename from resources/views/parts/errors.blade.php
rename to metager/resources/views/parts/errors.blade.php
diff --git a/resources/views/parts/filter.blade.php b/metager/resources/views/parts/filter.blade.php
similarity index 100%
rename from resources/views/parts/filter.blade.php
rename to metager/resources/views/parts/filter.blade.php
diff --git a/resources/views/parts/foki.blade.php b/metager/resources/views/parts/foki.blade.php
similarity index 51%
rename from resources/views/parts/foki.blade.php
rename to metager/resources/views/parts/foki.blade.php
index 3905c52c9f4c503f809a5eda87bfb9027922ac01..40e9f28258e79ad72d54c0b2fbafde1818d5bb6c 100644
--- a/resources/views/parts/foki.blade.php
+++ b/metager/resources/views/parts/foki.blade.php
@@ -1,7 +1,7 @@
 @foreach($metager->getSumaFile()->foki as $name => $fokus)
-	<div id="{{$name}}" @if($metager->getFokus() === $name)class="active"@endif>
-		<a href="@if($metager->getFokus() === $name)#@else{!!$metager->generateSearchLink($name)!!}@endif" @if(!empty($metager) && $metager->isFramed())target="_top" @else target="_self"@endif tabindex="0">@lang($fokus->{"display-name"})</a>
-	</div>
+<div id="{{$name}}" @if($metager->getFokus() === $name)class="active"@endif>
+	<a href="@if($metager->getFokus() === $name)#@else{!!$metager->generateSearchLink($name)!!}@endif" @if(!empty($metager) && $metager->isFramed())target="_top" @else target="_self"@endif tabindex="0">@lang($fokus->{"display-name"})</a>
+</div>
 @endforeach
 @if (LaravelLocalization::getCurrentLocale() == "de")
 <div id="maps">
@@ -9,4 +9,4 @@
 		Maps
 	</a>
 </div>
-@endif
+@endif
\ No newline at end of file
diff --git a/resources/views/parts/footer.blade.php b/metager/resources/views/parts/footer.blade.php
similarity index 100%
rename from resources/views/parts/footer.blade.php
rename to metager/resources/views/parts/footer.blade.php
diff --git a/resources/views/parts/pager.blade.php b/metager/resources/views/parts/pager.blade.php
similarity index 100%
rename from resources/views/parts/pager.blade.php
rename to metager/resources/views/parts/pager.blade.php
diff --git a/resources/views/parts/quicktip.blade.php b/metager/resources/views/parts/quicktip.blade.php
similarity index 100%
rename from resources/views/parts/quicktip.blade.php
rename to metager/resources/views/parts/quicktip.blade.php
diff --git a/resources/views/parts/searchbar.blade.php b/metager/resources/views/parts/searchbar.blade.php
similarity index 100%
rename from resources/views/parts/searchbar.blade.php
rename to metager/resources/views/parts/searchbar.blade.php
diff --git a/resources/views/parts/sidebar-opener.blade.php b/metager/resources/views/parts/sidebar-opener.blade.php
similarity index 100%
rename from resources/views/parts/sidebar-opener.blade.php
rename to metager/resources/views/parts/sidebar-opener.blade.php
diff --git a/resources/views/parts/sidebar.blade.php b/metager/resources/views/parts/sidebar.blade.php
similarity index 97%
rename from resources/views/parts/sidebar.blade.php
rename to metager/resources/views/parts/sidebar.blade.php
index 5ce672e4c2dd1615554bd9df13fcd088f2a2eba5..bded5c813af5125d8feb8979c6dccace780ac512 100644
--- a/resources/views/parts/sidebar.blade.php
+++ b/metager/resources/views/parts/sidebar.blade.php
@@ -49,6 +49,10 @@
           <a href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "/tips/") }}" >{{ trans('sidebar.titles.tips') }}</a>
         </li>
 
+        <li>
+          <a href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "/hilfe/faktencheck/") }}" >{{ trans('sidebar.navFactcheck') }}</a>
+        </li>
+
       </ul>
     </li>
     <hr>
diff --git a/resources/views/parts/spendenaufruf.blade.php b/metager/resources/views/parts/spendenaufruf.blade.php
similarity index 100%
rename from resources/views/parts/spendenaufruf.blade.php
rename to metager/resources/views/parts/spendenaufruf.blade.php
diff --git a/resources/views/parts/utility.blade.php b/metager/resources/views/parts/utility.blade.php
similarity index 100%
rename from resources/views/parts/utility.blade.php
rename to metager/resources/views/parts/utility.blade.php
diff --git a/resources/views/parts/warnings.blade.php b/metager/resources/views/parts/warnings.blade.php
similarity index 100%
rename from resources/views/parts/warnings.blade.php
rename to metager/resources/views/parts/warnings.blade.php
diff --git a/resources/views/plugin-page.blade.php b/metager/resources/views/plugin-page.blade.php
similarity index 100%
rename from resources/views/plugin-page.blade.php
rename to metager/resources/views/plugin-page.blade.php
diff --git a/resources/views/plugin.blade.php b/metager/resources/views/plugin.blade.php
similarity index 100%
rename from resources/views/plugin.blade.php
rename to metager/resources/views/plugin.blade.php
diff --git a/resources/views/plugin/desktop/chrome/v49.blade.php b/metager/resources/views/plugin/desktop/chrome/v49.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/chrome/v49.blade.php
rename to metager/resources/views/plugin/desktop/chrome/v49.blade.php
diff --git a/resources/views/plugin/desktop/chrome/v53.blade.php b/metager/resources/views/plugin/desktop/chrome/v53.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/chrome/v53.blade.php
rename to metager/resources/views/plugin/desktop/chrome/v53.blade.php
diff --git a/resources/views/plugin/desktop/chrome/v59.blade.php b/metager/resources/views/plugin/desktop/chrome/v59.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/chrome/v59.blade.php
rename to metager/resources/views/plugin/desktop/chrome/v59.blade.php
diff --git a/resources/views/plugin/desktop/edge/v15.blade.php b/metager/resources/views/plugin/desktop/edge/v15.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/edge/v15.blade.php
rename to metager/resources/views/plugin/desktop/edge/v15.blade.php
diff --git a/resources/views/plugin/desktop/edge/v18.blade.php b/metager/resources/views/plugin/desktop/edge/v18.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/edge/v18.blade.php
rename to metager/resources/views/plugin/desktop/edge/v18.blade.php
diff --git a/resources/views/plugin/desktop/edge/v80.blade.php b/metager/resources/views/plugin/desktop/edge/v80.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/edge/v80.blade.php
rename to metager/resources/views/plugin/desktop/edge/v80.blade.php
diff --git a/resources/views/plugin/desktop/firefox/v52.blade.php b/metager/resources/views/plugin/desktop/firefox/v52.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/firefox/v52.blade.php
rename to metager/resources/views/plugin/desktop/firefox/v52.blade.php
diff --git a/resources/views/plugin/desktop/firefox/v57.blade.php b/metager/resources/views/plugin/desktop/firefox/v57.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/firefox/v57.blade.php
rename to metager/resources/views/plugin/desktop/firefox/v57.blade.php
diff --git a/resources/views/plugin/desktop/firefox/v61.blade.php b/metager/resources/views/plugin/desktop/firefox/v61.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/firefox/v61.blade.php
rename to metager/resources/views/plugin/desktop/firefox/v61.blade.php
diff --git a/resources/views/plugin/desktop/firefox/v89.blade.php b/metager/resources/views/plugin/desktop/firefox/v89.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/firefox/v89.blade.php
rename to metager/resources/views/plugin/desktop/firefox/v89.blade.php
diff --git a/resources/views/plugin/desktop/ie/v11.blade.php b/metager/resources/views/plugin/desktop/ie/v11.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/ie/v11.blade.php
rename to metager/resources/views/plugin/desktop/ie/v11.blade.php
diff --git a/resources/views/plugin/desktop/ie/v9.blade.php b/metager/resources/views/plugin/desktop/ie/v9.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/ie/v9.blade.php
rename to metager/resources/views/plugin/desktop/ie/v9.blade.php
diff --git a/resources/views/plugin/desktop/opera/v36.blade.php b/metager/resources/views/plugin/desktop/opera/v36.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/opera/v36.blade.php
rename to metager/resources/views/plugin/desktop/opera/v36.blade.php
diff --git a/resources/views/plugin/desktop/safari/v10.blade.php b/metager/resources/views/plugin/desktop/safari/v10.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/safari/v10.blade.php
rename to metager/resources/views/plugin/desktop/safari/v10.blade.php
diff --git a/resources/views/plugin/desktop/vivaldi/v3-3.blade.php b/metager/resources/views/plugin/desktop/vivaldi/v3-3.blade.php
similarity index 100%
rename from resources/views/plugin/desktop/vivaldi/v3-3.blade.php
rename to metager/resources/views/plugin/desktop/vivaldi/v3-3.blade.php
diff --git a/resources/views/plugin/mobile/chrome/v83.blade.php b/metager/resources/views/plugin/mobile/chrome/v83.blade.php
similarity index 100%
rename from resources/views/plugin/mobile/chrome/v83.blade.php
rename to metager/resources/views/plugin/mobile/chrome/v83.blade.php
diff --git a/resources/views/plugin/mobile/edge/v45.blade.php b/metager/resources/views/plugin/mobile/edge/v45.blade.php
similarity index 100%
rename from resources/views/plugin/mobile/edge/v45.blade.php
rename to metager/resources/views/plugin/mobile/edge/v45.blade.php
diff --git a/resources/views/plugin/mobile/firefox-klar/v8-8.blade.php b/metager/resources/views/plugin/mobile/firefox-klar/v8-8.blade.php
similarity index 100%
rename from resources/views/plugin/mobile/firefox-klar/v8-8.blade.php
rename to metager/resources/views/plugin/mobile/firefox-klar/v8-8.blade.php
diff --git a/resources/views/plugin/mobile/firefox/v80.blade.php b/metager/resources/views/plugin/mobile/firefox/v80.blade.php
similarity index 100%
rename from resources/views/plugin/mobile/firefox/v80.blade.php
rename to metager/resources/views/plugin/mobile/firefox/v80.blade.php
diff --git a/resources/views/plugin/mobile/firefox/vlt80.blade.php b/metager/resources/views/plugin/mobile/firefox/vlt80.blade.php
similarity index 100%
rename from resources/views/plugin/mobile/firefox/vlt80.blade.php
rename to metager/resources/views/plugin/mobile/firefox/vlt80.blade.php
diff --git a/resources/views/plugin/mobile/opera/v60.blade.php b/metager/resources/views/plugin/mobile/opera/v60.blade.php
similarity index 100%
rename from resources/views/plugin/mobile/opera/v60.blade.php
rename to metager/resources/views/plugin/mobile/opera/v60.blade.php
diff --git a/resources/views/quicktips.blade.php b/metager/resources/views/quicktips.blade.php
similarity index 100%
rename from resources/views/quicktips.blade.php
rename to metager/resources/views/quicktips.blade.php
diff --git a/resources/views/resultpages/metager3resultsatom10.blade.php b/metager/resources/views/resultpages/metager3resultsatom10.blade.php
similarity index 100%
rename from resources/views/resultpages/metager3resultsatom10.blade.php
rename to metager/resources/views/resultpages/metager3resultsatom10.blade.php
diff --git a/resources/views/resultpages/metager3resultsrss20.blade.php b/metager/resources/views/resultpages/metager3resultsrss20.blade.php
similarity index 100%
rename from resources/views/resultpages/metager3resultsrss20.blade.php
rename to metager/resources/views/resultpages/metager3resultsrss20.blade.php
diff --git a/resources/views/resultpages/resultpage.blade.php b/metager/resources/views/resultpages/resultpage.blade.php
similarity index 100%
rename from resources/views/resultpages/resultpage.blade.php
rename to metager/resources/views/resultpages/resultpage.blade.php
diff --git a/resources/views/resultpages/resultpage_images.blade.php b/metager/resources/views/resultpages/resultpage_images.blade.php
similarity index 100%
rename from resources/views/resultpages/resultpage_images.blade.php
rename to metager/resources/views/resultpages/resultpage_images.blade.php
diff --git a/resources/views/resultpages/results.blade.php b/metager/resources/views/resultpages/results.blade.php
similarity index 100%
rename from resources/views/resultpages/results.blade.php
rename to metager/resources/views/resultpages/results.blade.php
diff --git a/resources/views/resultpages/results_images.blade.php b/metager/resources/views/resultpages/results_images.blade.php
similarity index 100%
rename from resources/views/resultpages/results_images.blade.php
rename to metager/resources/views/resultpages/results_images.blade.php
diff --git a/resources/views/robots/development.blade.php b/metager/resources/views/robots/development.blade.php
similarity index 100%
rename from resources/views/robots/development.blade.php
rename to metager/resources/views/robots/development.blade.php
diff --git a/resources/views/robots/production.blade.php b/metager/resources/views/robots/production.blade.php
similarity index 100%
rename from resources/views/robots/production.blade.php
rename to metager/resources/views/robots/production.blade.php
diff --git a/metager/resources/views/search-engine.blade.php b/metager/resources/views/search-engine.blade.php
new file mode 100644
index 0000000000000000000000000000000000000000..87375a6dddff6f7c54ad5512a551c29b500e84c6
--- /dev/null
+++ b/metager/resources/views/search-engine.blade.php
@@ -0,0 +1,41 @@
+@extends('layouts.subPages')
+
+@section('title', $title )
+
+@section('content')
+
+<div>
+	<h1 class="page-title">{{ trans('search-engine.head.1') }}</h1>
+
+	<div class="card">
+		<h2>{{ trans('search-engine.head.2') }}</h2>
+		<p>{!! trans('search-engine.text.1',["transparenz" => LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "transparency")]) !!}</p>
+	</div>
+	@foreach($suma_infos as $fokus_name => $suma_list)
+	<h1>{{ __('index.foki.' . $fokus_name) }}</h2>
+		<div class="enginecontainer">
+
+			@foreach($suma_list as $suma_name => $suma_infos)
+			<div class="card">
+				<h2><a href="{{$suma_infos->homepage}}" rel="noopener" target="_blank">{{ $suma_infos->display_name }}<img src="/img/icon-outlink.svg" alt="" aria-hidden="true" id="sidebar-img-outlink"></a></h2>
+				@if($suma_infos->index_name !== null)
+				<p><span class="search-engine-dt">{{ trans('search-engine.text.2.2') }}</span>{{ $suma_infos->index_name }}</p>
+				@endif
+				@if($suma_infos->founded !== null)
+				<p><span class="search-engine-dt">{{ trans('search-engine.text.2.3') }}</span>{{ $suma_infos->founded }}</p>
+				@endif
+				@if($suma_infos->headquarter !== null)
+				<p><span class="search-engine-dt">{{ trans('search-engine.text.2.4') }}</span>{{ $suma_infos->headquarter }}</p>
+				@endif
+				@if($suma_infos->operator !== null)
+				<p><span class="search-engine-dt">{{ trans('search-engine.text.2.5') }}</span>{{ $suma_infos->operator }}</p>
+				@endif
+				@if($suma_infos->index_size !== null)
+				<p><span class="search-engine-dt">{{ trans('search-engine.text.2.6') }}</span>{{ $suma_infos->index_size }}</p>
+				@endif
+			</div>
+			@endforeach
+		</div>
+		@endforeach
+</div>
+@endsection
\ No newline at end of file
diff --git a/resources/views/settings/allSettings.blade.php b/metager/resources/views/settings/allSettings.blade.php
similarity index 97%
rename from resources/views/settings/allSettings.blade.php
rename to metager/resources/views/settings/allSettings.blade.php
index e1b126ba6cb0fdfef62383d5bdef994380597bd9..1fae45ccc7e2c2615fc23120d1022d7af6b0430e 100644
--- a/resources/views/settings/allSettings.blade.php
+++ b/metager/resources/views/settings/allSettings.blade.php
@@ -23,7 +23,7 @@
                         <td>{{ $key . " = " . $value }}</td>
                         <td>
                             @if(strpos($key, "_engine_") !== FALSE)
-                            @lang('settings.engineDisabled', ["engine" => $sumaFile->sumas->{substr($key, strrpos($key, "_")+1)}->{"display-name"}, "focus" => trans('index.foki.' . substr($key, 0, strpos($key, "_")))])
+                            @lang('settings.engineDisabled', ["engine" => $sumaFile->sumas->{substr($key, strrpos($key, "_")+1)}->infos->display_name, "focus" => trans('index.foki.' . substr($key, 0, strpos($key, "_")))])
                             @elseif(strpos($key, "_setting_") !== FALSE)
                             @foreach($sumaFile->filter->{"parameter-filter"} as $filterName => $filter)
                             @if($filter->{"get-parameter"} === substr($key, strrpos($key, "_")+1))
diff --git a/resources/views/settings/index.blade.php b/metager/resources/views/settings/index.blade.php
similarity index 85%
rename from resources/views/settings/index.blade.php
rename to metager/resources/views/settings/index.blade.php
index 4289d537c8a915fa067c203af7a920023bb84d02..332abae02f151ad30fb5ebe655b2ceca1eb370af 100644
--- a/resources/views/settings/index.blade.php
+++ b/metager/resources/views/settings/index.blade.php
@@ -89,37 +89,18 @@
         </form>
     </div>
 
-    <div class="card" id="blacklist">
-        <h1>@lang('settings.header.4')</h1>
+    <div class="card" id="blacklist-container">
+        <h1 id="bl">@lang('settings.header.4')</h1>
         <p>@lang('settings.text.4')</p>
         <form id="newentry" action="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route('newBlacklist', ["fokus" => $fokus, "url" => $url])) }}" method="post">
             <input type="hidden" name="url" value="{{ $url }}">
             <input type="hidden" name="fokus" value="{{ $fokus }}">
-            <label for="blacklist">@lang('settings.address')</label>
+            <label for="blacklist">@lang('settings.address') ({{ sizeof($blacklist) }}) </label>
             <div id="create">
-                <input id="blacklist" name="blacklist" type="text" placeholder="example.com">
-                <button type="submit" class="btn btn-default">@lang('settings.add')</button>
+                <textarea name="blacklist" id="blacklist" cols="30" rows="{{ max(min(sizeof($blacklist)+1, 20), 4) }}" maxlength="2048" placeholder="example.com&#10;example2.com&#10;*.example3.com" spellcheck="false">{{ implode("\r\n", $blacklist) }}</textarea>
+                <button type="submit" class="btn btn-default">@lang('settings.save')</button>
             </div>
         </form>
-        @if(!empty($blacklist))
-        <form id="deleteentry" action="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route('deleteBlacklist', ["fokus" => $fokus, "url" => $url])) }}" method="post">
-            <table>
-                @foreach($blacklist as $key => $value)
-                <tr>
-                    <td>
-                        {{ $value }}
-                    </td>
-                    <td>
-                        <button type="submit" name="cookieKey" value="{{ $key }}"><img class="mg-icon allSettings-trashcan-icon" src="/img/trashcan.svg" alt="{{ trans('trashcan.alt') }}"></button>
-                    </td>
-                </tr>
-                @endforeach
-            </table>
-        </form>
-        <form id="clearlist" action="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route('clearBlacklist', ["fokus" => $fokus, "url" => $url])) }}" method="post">
-            <button class="btn btn-default" type="submit" name="clear" value="1">@lang('settings.clear')</button>
-        </form>
-        @endif
     </div>
 
 
diff --git a/resources/views/spende/danke.blade.php b/metager/resources/views/spende/danke.blade.php
similarity index 100%
rename from resources/views/spende/danke.blade.php
rename to metager/resources/views/spende/danke.blade.php
diff --git a/resources/views/spende/partnershops.blade.php b/metager/resources/views/spende/partnershops.blade.php
similarity index 100%
rename from resources/views/spende/partnershops.blade.php
rename to metager/resources/views/spende/partnershops.blade.php
diff --git a/resources/views/spende/spende.blade.php b/metager/resources/views/spende/spende.blade.php
similarity index 100%
rename from resources/views/spende/spende.blade.php
rename to metager/resources/views/spende/spende.blade.php
diff --git a/resources/views/team/pubkey-wsb.blade.php b/metager/resources/views/team/pubkey-wsb.blade.php
similarity index 100%
rename from resources/views/team/pubkey-wsb.blade.php
rename to metager/resources/views/team/pubkey-wsb.blade.php
diff --git a/resources/views/team/team.blade.php b/metager/resources/views/team/team.blade.php
similarity index 100%
rename from resources/views/team/team.blade.php
rename to metager/resources/views/team/team.blade.php
diff --git a/resources/views/tips.blade.php b/metager/resources/views/tips.blade.php
similarity index 100%
rename from resources/views/tips.blade.php
rename to metager/resources/views/tips.blade.php
diff --git a/resources/views/tor.blade.php b/metager/resources/views/tor.blade.php
similarity index 100%
rename from resources/views/tor.blade.php
rename to metager/resources/views/tor.blade.php
diff --git a/resources/views/transparency.blade.php b/metager/resources/views/transparency.blade.php
similarity index 100%
rename from resources/views/transparency.blade.php
rename to metager/resources/views/transparency.blade.php
diff --git a/resources/views/vendor/.gitkeep b/metager/resources/views/vendor/.gitkeep
similarity index 100%
rename from resources/views/vendor/.gitkeep
rename to metager/resources/views/vendor/.gitkeep
diff --git a/resources/views/vendor/notifications/email-plain.blade.php b/metager/resources/views/vendor/notifications/email-plain.blade.php
similarity index 100%
rename from resources/views/vendor/notifications/email-plain.blade.php
rename to metager/resources/views/vendor/notifications/email-plain.blade.php
diff --git a/resources/views/vendor/notifications/email.blade.php b/metager/resources/views/vendor/notifications/email.blade.php
similarity index 100%
rename from resources/views/vendor/notifications/email.blade.php
rename to metager/resources/views/vendor/notifications/email.blade.php
diff --git a/resources/views/vendor/pagination/bootstrap-4.blade.php b/metager/resources/views/vendor/pagination/bootstrap-4.blade.php
similarity index 100%
rename from resources/views/vendor/pagination/bootstrap-4.blade.php
rename to metager/resources/views/vendor/pagination/bootstrap-4.blade.php
diff --git a/resources/views/vendor/pagination/default.blade.php b/metager/resources/views/vendor/pagination/default.blade.php
similarity index 100%
rename from resources/views/vendor/pagination/default.blade.php
rename to metager/resources/views/vendor/pagination/default.blade.php
diff --git a/resources/views/vendor/pagination/simple-bootstrap-4.blade.php b/metager/resources/views/vendor/pagination/simple-bootstrap-4.blade.php
similarity index 100%
rename from resources/views/vendor/pagination/simple-bootstrap-4.blade.php
rename to metager/resources/views/vendor/pagination/simple-bootstrap-4.blade.php
diff --git a/resources/views/vendor/pagination/simple-default.blade.php b/metager/resources/views/vendor/pagination/simple-default.blade.php
similarity index 100%
rename from resources/views/vendor/pagination/simple-default.blade.php
rename to metager/resources/views/vendor/pagination/simple-default.blade.php
diff --git a/resources/views/widget/sitesearch.blade.php b/metager/resources/views/widget/sitesearch.blade.php
similarity index 100%
rename from resources/views/widget/sitesearch.blade.php
rename to metager/resources/views/widget/sitesearch.blade.php
diff --git a/resources/views/widget/websearch-template.blade.php b/metager/resources/views/widget/websearch-template.blade.php
similarity index 100%
rename from resources/views/widget/websearch-template.blade.php
rename to metager/resources/views/widget/websearch-template.blade.php
diff --git a/resources/views/widget/websearch.blade.php b/metager/resources/views/widget/websearch.blade.php
similarity index 100%
rename from resources/views/widget/websearch.blade.php
rename to metager/resources/views/widget/websearch.blade.php
diff --git a/resources/views/widget/widget.blade.php b/metager/resources/views/widget/widget.blade.php
similarity index 100%
rename from resources/views/widget/widget.blade.php
rename to metager/resources/views/widget/widget.blade.php
diff --git a/resources/views/zitatsuche.blade.php b/metager/resources/views/zitatsuche.blade.php
similarity index 100%
rename from resources/views/zitatsuche.blade.php
rename to metager/resources/views/zitatsuche.blade.php
diff --git a/routes/api.php b/metager/routes/api.php
similarity index 100%
rename from routes/api.php
rename to metager/routes/api.php
diff --git a/routes/console.php b/metager/routes/console.php
similarity index 100%
rename from routes/console.php
rename to metager/routes/console.php
diff --git a/routes/cookie.php b/metager/routes/cookie.php
similarity index 100%
rename from routes/cookie.php
rename to metager/routes/cookie.php
diff --git a/routes/session.php b/metager/routes/session.php
similarity index 100%
rename from routes/session.php
rename to metager/routes/session.php
diff --git a/routes/web.php b/metager/routes/web.php
similarity index 98%
rename from routes/web.php
rename to metager/routes/web.php
index 4eadac0d71ad668e77a56155a455d215bb843ba1..46fbe098aeef7b5cf45554fc52c73a726ef9c05e 100644
--- a/routes/web.php
+++ b/metager/routes/web.php
@@ -1,5 +1,6 @@
 <?php
 
+use App\Http\Controllers\SearchEngineList;
 use Illuminate\Support\Facades\Redis;
 use Jenssegers\Agent\Agent;
 use Prometheus\RenderTextFormat;
@@ -81,7 +82,7 @@ Route::get('tor', function () {
         ->with('navbarFocus', 'dienste');
 });
 
-Route::group(['prefix' => 'spende'], function(){
+Route::group(['prefix' => 'spende'], function () {
     Route::get('/', function () {
         return view('spende.spende')
             ->with('title', trans('titles.spende'))
@@ -134,16 +135,13 @@ Route::get('transparency', function () {
         ->with('navbarFocus', 'info');
 });
 
-Route::get('search-engine', function () {
-    return view('search-engine')
-        ->with('title', trans('titles.search-engine'))
-        ->with('navbarFocus', 'info');
-});
+Route::get('search-engine', [SearchEngineList::class, 'index']);
 Route::get('hilfe', function () {
     return view('help/help')
         ->with('title', trans('titles.help'))
         ->with('navbarFocus', 'hilfe');
 });
+
 Route::get('hilfe/easy-language', function () {
     return view('help/easy-language/help')
         ->with('title', trans('titles.help'))
@@ -152,17 +150,19 @@ Route::get('hilfe/easy-language', function () {
             mix('/css/help-easy-language.css'),
         ]);
 });
+
 Route::get('hilfe/faktencheck', function () {
     return view('help/faktencheck')
         ->with('title', trans('titles.faktencheck'))
         ->with('navbarFocus', 'hilfe');
-});
+})->name('faktencheck');
 
 Route::get('hilfe/hauptseiten', function () {
     return view('help/help-mainpages')
         ->with('title', trans('titles.help-mainpages'))
         ->with('navbarFocus', 'hilfe');
 });
+
 Route::get('hilfe/easy-language/hauptseiten', function () {
     return view('help/easy-language/help-mainpages')
         ->with('title', trans('titles.help-mainpages'))
@@ -216,6 +216,7 @@ Route::get('hilfe/easy-language/datensicherheit', function () {
             mix('/css/help-easy-language.css'),
         ]);
 });
+
 Route::get('faq', function () {
     return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), '/hilfe'));
 });
diff --git a/server.php b/metager/server.php
similarity index 100%
rename from server.php
rename to metager/server.php
diff --git a/storage/app/.gitignore b/metager/storage/app/.gitignore
similarity index 100%
rename from storage/app/.gitignore
rename to metager/storage/app/.gitignore
diff --git a/storage/app/public/.gitignore b/metager/storage/app/public/.gitignore
similarity index 100%
rename from storage/app/public/.gitignore
rename to metager/storage/app/public/.gitignore
diff --git a/storage/app/public/stopwords.txt b/metager/storage/app/public/stopwords.txt
similarity index 100%
rename from storage/app/public/stopwords.txt
rename to metager/storage/app/public/stopwords.txt
diff --git a/storage/app/public/zitate.txt b/metager/storage/app/public/zitate.txt
similarity index 100%
rename from storage/app/public/zitate.txt
rename to metager/storage/app/public/zitate.txt
diff --git a/storage/framework/.gitignore b/metager/storage/framework/.gitignore
similarity index 100%
rename from storage/framework/.gitignore
rename to metager/storage/framework/.gitignore
diff --git a/storage/framework/cache/.gitignore b/metager/storage/framework/cache/.gitignore
similarity index 100%
rename from storage/framework/cache/.gitignore
rename to metager/storage/framework/cache/.gitignore
diff --git a/storage/framework/sessions/.gitignore b/metager/storage/framework/sessions/.gitignore
similarity index 100%
rename from storage/framework/sessions/.gitignore
rename to metager/storage/framework/sessions/.gitignore
diff --git a/storage/framework/views/.gitignore b/metager/storage/framework/views/.gitignore
similarity index 100%
rename from storage/framework/views/.gitignore
rename to metager/storage/framework/views/.gitignore
diff --git a/storage/logs/.gitignore b/metager/storage/logs/.gitignore
similarity index 100%
rename from storage/logs/.gitignore
rename to metager/storage/logs/.gitignore
diff --git a/test.sh b/metager/test.sh
similarity index 100%
rename from test.sh
rename to metager/test.sh
diff --git a/tests/Browser/Pages/About.php b/metager/tests/Browser/Pages/About.php
similarity index 100%
rename from tests/Browser/Pages/About.php
rename to metager/tests/Browser/Pages/About.php
diff --git a/tests/Browser/Pages/App.php b/metager/tests/Browser/Pages/App.php
similarity index 100%
rename from tests/Browser/Pages/App.php
rename to metager/tests/Browser/Pages/App.php
diff --git a/tests/Browser/Pages/Datenschutz.php b/metager/tests/Browser/Pages/Datenschutz.php
similarity index 100%
rename from tests/Browser/Pages/Datenschutz.php
rename to metager/tests/Browser/Pages/Datenschutz.php
diff --git a/tests/Browser/Pages/Hilfe.php b/metager/tests/Browser/Pages/Hilfe.php
similarity index 100%
rename from tests/Browser/Pages/Hilfe.php
rename to metager/tests/Browser/Pages/Hilfe.php
diff --git a/tests/Browser/Pages/HomePage.php b/metager/tests/Browser/Pages/HomePage.php
similarity index 100%
rename from tests/Browser/Pages/HomePage.php
rename to metager/tests/Browser/Pages/HomePage.php
diff --git a/tests/Browser/Pages/Impress.php b/metager/tests/Browser/Pages/Impress.php
similarity index 100%
rename from tests/Browser/Pages/Impress.php
rename to metager/tests/Browser/Pages/Impress.php
diff --git a/tests/Browser/Pages/Kontakt.php b/metager/tests/Browser/Pages/Kontakt.php
similarity index 100%
rename from tests/Browser/Pages/Kontakt.php
rename to metager/tests/Browser/Pages/Kontakt.php
diff --git a/tests/Browser/Pages/Page.php b/metager/tests/Browser/Pages/Page.php
similarity index 100%
rename from tests/Browser/Pages/Page.php
rename to metager/tests/Browser/Pages/Page.php
diff --git a/tests/Browser/Pages/Plugin.php b/metager/tests/Browser/Pages/Plugin.php
similarity index 100%
rename from tests/Browser/Pages/Plugin.php
rename to metager/tests/Browser/Pages/Plugin.php
diff --git a/tests/Browser/Pages/SitesearchWidget.php b/metager/tests/Browser/Pages/SitesearchWidget.php
similarity index 100%
rename from tests/Browser/Pages/SitesearchWidget.php
rename to metager/tests/Browser/Pages/SitesearchWidget.php
diff --git a/tests/Browser/Pages/Spende.php b/metager/tests/Browser/Pages/Spende.php
similarity index 100%
rename from tests/Browser/Pages/Spende.php
rename to metager/tests/Browser/Pages/Spende.php
diff --git a/tests/Browser/Pages/Team.php b/metager/tests/Browser/Pages/Team.php
similarity index 100%
rename from tests/Browser/Pages/Team.php
rename to metager/tests/Browser/Pages/Team.php
diff --git a/tests/Browser/Pages/WebsearchWidget.php b/metager/tests/Browser/Pages/WebsearchWidget.php
similarity index 100%
rename from tests/Browser/Pages/WebsearchWidget.php
rename to metager/tests/Browser/Pages/WebsearchWidget.php
diff --git a/tests/Browser/Pages/Widget.php b/metager/tests/Browser/Pages/Widget.php
similarity index 100%
rename from tests/Browser/Pages/Widget.php
rename to metager/tests/Browser/Pages/Widget.php
diff --git a/metager/tests/Browser/StaticPagesTest.php b/metager/tests/Browser/StaticPagesTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b8c72e476bfcded180bdd6bcd5ae3401915aac7d
--- /dev/null
+++ b/metager/tests/Browser/StaticPagesTest.php
@@ -0,0 +1,202 @@
+<?php
+
+namespace Tests\Browser;
+
+use Laravel\Dusk\Browser;
+use Tests\Browser\Pages\HomePage;
+use Tests\Browser\Pages\About;
+use Tests\Browser\Pages\App;
+use Tests\Browser\Pages\Datenschutz;
+use Tests\Browser\Pages\Hilfe;
+use Tests\Browser\Pages\Impress;
+use Tests\Browser\Pages\Kontakt;
+use Tests\Browser\Pages\Plugin;
+use Tests\Browser\Pages\SitesearchWidget;
+use Tests\Browser\Pages\Spende;
+use Tests\Browser\Pages\Team;
+use Tests\Browser\Pages\WebsearchWidget;
+use Tests\Browser\Pages\Widget;
+use Tests\DuskTestCase;
+
+class StaticPagesTest extends DuskTestCase
+{
+    /**
+     * Tests for each static page on MetaGers website whether it can be reached by navigation
+     *
+     * @return void
+     */
+    public function testStartpage()
+    {
+        // Startpage
+        $this->browse(function (Browser $browser) {
+            $browser->visit(new HomePage);
+        });
+    }
+
+    public function testAbout()
+    {
+        // About
+        $this->browse(function (Browser $browser) {
+            $browser->visit("/")
+                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label#navigationKontakt")
+                ->clickLink("Über uns")
+                ->waitForLocation("/about")
+                ->on(new About);
+        });
+    }
+
+    public function testApp()
+    {
+        // App
+        $this->browse(function (Browser $browser) {
+            $browser->visit("/")
+                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label.sidebar-opener[for=sidebarToggle]")
+                ->clickLink("MetaGer App")
+                ->waitForLocation("/app")
+                ->on(new App);
+        });
+    }
+
+    public function testDatenschutz()
+    {
+        // Datenschutz
+        $this->browse(function (Browser $browser) {
+            $browser->visit("/")
+                ->click("label.sidebar-opener[for=sidebarToggle]")
+                ->clickLink("Datenschutz")
+                ->waitForLocation("/datenschutz")
+                ->on(new Datenschutz);
+        });
+    }
+
+    public function testHilfe()
+    {
+        // Hilfe
+        $this->browse(function (Browser $browser) {
+            $browser->visit("/")
+                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label.sidebar-opener[for=sidebarToggle]")
+                ->clickLink("Hilfe")
+                ->waitForLocation("/hilfe")
+                ->on(new Hilfe);
+        });
+    }
+
+    public function testImpressum()
+    {
+        // Impressum
+        $this->browse(function (Browser $browser) {
+            $browser->visit("/")
+                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label#navigationKontakt")
+                ->clickLink("Impressum")
+                ->waitForLocation("/impressum")
+                ->on(new Impress);
+        });
+    }
+
+    public function testKontakt()
+    {
+        // Kontakt
+        $this->browse(function (Browser $browser) {
+            $browser->visit("/")
+                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label#navigationKontakt")
+                ->clickLink("Kontakt")
+                ->waitForLocation("/kontakt")
+                ->on(new Kontakt);
+        });
+    }
+
+    public function testPlugin()
+    {
+        // Plugin
+        $this->browse(function (Browser $browser) {
+            $browser->visit("/")
+                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label[for=servicesToggle]")
+                ->clickLink("MetaGer Plugin")
+                ->waitForLocation("/plugin")
+                ->on(new Plugin);
+        });
+    }
+
+    public function testSpenden()
+    {
+        //Spenden
+        $this->browse(function (Browser $browser) {
+            $browser->visit("/")
+                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label.sidebar-opener[for=sidebarToggle]")
+                ->clickLink("Spenden")
+                ->waitForLocation("/spende")
+                ->on(new Spende);
+        });
+    }
+
+    public function testTeam()
+    {
+        // Team
+        $this->browse(function (Browser $browser) {
+            $browser->visit("/")
+                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label#navigationKontakt")
+                ->clickLink("Team")
+                ->waitForLocation("/team")
+                ->on(new Team);
+        });
+    }
+
+    public function testWidget()
+    {
+        // Widget
+        $this->browse(function (Browser $browser) {
+            $browser->visit("/")
+                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label[for=servicesToggle]")
+                ->clickLink("Widget")
+                ->waitForLocation("/widget")
+                ->on(new Widget);
+        });
+    }
+
+    public function testWebsearchWidget()
+    {
+        // Websearch Widget
+        $this->browse(function (Browser $browser) {
+            $browser->visit("/")
+                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label[for=servicesToggle]")
+                ->clickLink("Widget")
+                ->waitForLocation("/widget")
+                ->clickLink("Suche im Web")
+                ->waitForLocation("\/websearch\/")
+                ->on(new WebsearchWidget);
+        });
+    }
+
+    public function testSitesearchWidget()
+    {
+        // Sitesearch Widget
+        $this->browse(function (Browser $browser) {
+            $browser->visit("/")
+                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label.sidebar-opener[for=sidebarToggle]")
+                ->click("label[for=servicesToggle]")
+                ->clickLink("Widget")
+                ->waitForLocation("/widget")
+                ->clickLink("Suche nur auf einer Domain")
+                ->waitForLocation("/sitesearch/")
+                ->on(new SitesearchWidget);
+        });
+    }
+}
diff --git a/tests/Browser/screenshots/.gitignore b/metager/tests/Browser/screenshots/.gitignore
similarity index 100%
rename from tests/Browser/screenshots/.gitignore
rename to metager/tests/Browser/screenshots/.gitignore
diff --git a/tests/CreatesApplication.php b/metager/tests/CreatesApplication.php
similarity index 100%
rename from tests/CreatesApplication.php
rename to metager/tests/CreatesApplication.php
diff --git a/metager/tests/DuskTestCase.php b/metager/tests/DuskTestCase.php
new file mode 100644
index 0000000000000000000000000000000000000000..6dd830ee90eecb35622c6f201deb9a742729190c
--- /dev/null
+++ b/metager/tests/DuskTestCase.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Tests;
+
+use Facebook\WebDriver\Remote\DesiredCapabilities;
+use Facebook\WebDriver\Remote\RemoteWebDriver;
+use Laravel\Dusk\TestCase as BaseTestCase;
+
+abstract class DuskTestCase extends BaseTestCase
+{
+    use CreatesApplication;
+
+    /**
+     * Prepare for Dusk test execution.
+     *
+     * @beforeClass
+     * @return void
+     */
+    public static function prepare()
+    {
+    }
+
+    /**
+     * Create the RemoteWebDriver instance.
+     *
+     * @return \Facebook\WebDriver\Remote\RemoteWebDriver
+     */
+    protected function driver()
+    {
+        return RemoteWebDriver::create(
+            "http://" . config("metager.metager.selenium.host") . ":4444/wd/hub", DesiredCapabilities::firefox()
+        );
+    }
+}
diff --git a/tests/TestCase.php b/metager/tests/TestCase.php
similarity index 100%
rename from tests/TestCase.php
rename to metager/tests/TestCase.php
diff --git a/webpack.mix.js b/metager/webpack.mix.js
similarity index 96%
rename from webpack.mix.js
rename to metager/webpack.mix.js
index fee99c1788db1b7a330a04b457dec243db29720d..0b23720268eb910950c6b046223a8b5f2d3a0d26 100644
--- a/webpack.mix.js
+++ b/metager/webpack.mix.js
@@ -31,6 +31,7 @@ mix
   .less("resources/less/metager/pages/asso/style-dark.less", "public/css/asso/dark.css")
   .less("resources/less/metager/pages/asso/style.less", "public/css/asso/style.css")
   .less("resources/less/metager/pages/spende/danke.less", "public/css/spende/danke.css")
+  .less("resources/less/metager/pages/keychange/index.less", "public/css/keychange/index.css")
   .less("resources/less/metager/pages/help-easy-language.less", "public/css/help-easy-language.css")
   // js
   .babel(
@@ -67,4 +68,4 @@ mix
   // source maps
   .sourceMaps(false, "inline-source-map")
   // versioning
-  .version();
\ No newline at end of file
+  .version();
diff --git a/public/favicon.ico b/public/favicon.ico
deleted file mode 100755
index db9f2f86dbeac3e45a93f110231a913d95c92122..0000000000000000000000000000000000000000
Binary files a/public/favicon.ico and /dev/null differ
diff --git a/public/fonts/resultPageStyle.css b/public/fonts/resultPageStyle.css
deleted file mode 100644
index c83bde13e182d21fed7fd1a680846eaf2c5e61a1..0000000000000000000000000000000000000000
--- a/public/fonts/resultPageStyle.css
+++ /dev/null
@@ -1,180 +0,0 @@
-.alerter {
-	display: none;
-	text-align: center;
-}
-
-.alerter hr {
-	margin: 8px 0;
-}
-
-#sortMore p p {
-	margin-bottom: 0px;
-	margin-top: 0px;
-}
-
-body {
-	line-height: 1.2!important;
-}
-
-#alerter p {
-	margin-bottom: 10px;
-}
-
-#filterNewSearch {
-	color: #777;
-}
-
-#filterNewSearch:hover {
-	color: #333;
-}
-
-.progress {
-	margin: 0 auto;
-	width: 60%;
-}
-
-#sortSelect {
-	height: 29px;
-	width: 190px;
-	line-height: 29px;
-	padding-top: 3px;
-}
-
-#filterInput {
-	height: 29px;
-	font-size: 0.87em;
-}
-
-#sidebar {
-	border-left-width: 3px;
-	border-left-color: rgb(255, 187, 0);
-	border-left-style: solid;
-}
-
-#suchoptionenContainer {
-	border-bottom-width: 3px;
-	border-bottom-color: rgb(255, 187, 0);
-	border-bottom-style: solid;
-	padding-bottom: 9px;
-	margin-bottom: 10px;
-	padding: 5px;
-	padding-bottom: 0;
-}
-
-#resultHeader {
-	font-size: 15px;
-	margin: 0;
-	padding: 0;
-}
-
-.quicktip {
-	margin-bottom: 20px;
-	padding: 5px;
-}
-
-#sidebar {
-	margin-right: 0.8%;
-	width: 30%;
-	float: right;
-}
-
-#results {
-	padding-top: 70px;
-}
-
-#sortBox {
-	margin-top: 10px;
-}
-
-.wikiqtextract {
-	font-family: Georgia, "Times New Roman", Palatino, Times, serif;
-	font-size: 15px;
-}
-
-.serverInfoButtonLink:hover {
-	color: #555!important;
-}
-
-.serverInfoButtonLink {
-	font-size: 12px;
-	color: #BBB!important;
-}
-
-#sortDropdown {
-	clear: none!important;
-	width: 200px;
-	float: right;
-}
-
-.werbebox {
-	color: rgb(0, 128, 72);
-	padding-bottom: 10px!important;
-}
-
-@media (max-height: 849px) {
-	.ergebnisbox {
-		padding-bottom: 10px;
-	}
-}
-
-@media (min-height: 850px) {
-	.ergebnisbox {
-		padding-bottom: 20px;
-	}
-}
-
-@media (min-width: 1350px) {
-	#filterForm {
-		width: 200px;
-		margin-bottom: 10px;
-	}
-	#sortSelect {
-		float: right;
-	}
-	.ergebnisbox {
-		width: 67%!important;
-	}
-	#sortDropdown {
-		clear: none!important;
-	}
-}
-
-@media (max-width: 1349px) {
-	#filterForm {
-		width: 100%;
-		margin-bottom: 2px;
-	}
-	#sortDropdown {
-		width: 100%;
-		float: none;
-	}
-	#sidebar {
-		float: right;
-		width: 25%;
-	}
-	#filterForm {
-		margin: 3px;
-		margin-top: 3px;
-	}
-	#sortDropdown li {
-		width: 100%;
-	}
-	#sortDropdown {
-		clear: none!important;
-	}
-}
-
-.optionsbody {
-	padding: 15px;
-}
-
-#mehrTrefferLink {
-	margin-left: 40%;
-	width: 20%;
-}
-
-.alert-warning {
-	background-color: #FFF;
-	border-color: #FFF;
-	color: #BA9227;
-}
\ No newline at end of file
diff --git a/public/js/quicktips.js b/public/js/quicktips.js
deleted file mode 100644
index e07a1ce10f2819c5eb2c49c27db5e955195c2733..0000000000000000000000000000000000000000
--- a/public/js/quicktips.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;
-if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")
-},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
-
-/*! iFrame Resizer (iframeSizer.contentWindow.min.js) - v3.5.5 - 2016-06-16
- *  Desc: Include this file in any page being loaded into an iframe
- *        to force the iframe to resize to the content size.
- *  Requires: iframeResizer.min.js on host page.
- *  Copyright: (c) 2016 David J. Bradshaw - dave@bradshaw.net
- *  License: MIT
- */
-
-!function(a,b){"use strict";function c(b,c,d){"addEventListener"in a?b.addEventListener(c,d,!1):"attachEvent"in a&&b.attachEvent("on"+c,d)}function d(b,c,d){"removeEventListener"in a?b.removeEventListener(c,d,!1):"detachEvent"in a&&b.detachEvent("on"+c,d)}function e(a){return a.charAt(0).toUpperCase()+a.slice(1)}function f(a){var b,c,d,e=null,f=0,g=function(){f=Ha(),e=null,d=a.apply(b,c),e||(b=c=null)};return function(){var h=Ha();f||(f=h);var i=ya-(h-f);return b=this,c=arguments,0>=i||i>ya?(e&&(clearTimeout(e),e=null),f=h,d=a.apply(b,c),e||(b=c=null)):e||(e=setTimeout(g,i)),d}}function g(a){return na+"["+pa+"] "+a}function h(b){ma&&"object"==typeof a.console&&console.log(g(b))}function i(b){"object"==typeof a.console&&console.warn(g(b))}function j(){k(),h("Initialising iFrame ("+location.href+")"),l(),o(),n("background",X),n("padding",_),B(),t(),u(),p(),D(),v(),ja=C(),O("init","Init message from host page"),Ea()}function k(){function a(a){return"true"===a?!0:!1}var c=ia.substr(oa).split(":");pa=c[0],Y=b!==c[1]?Number(c[1]):Y,aa=b!==c[2]?a(c[2]):aa,ma=b!==c[3]?a(c[3]):ma,ka=b!==c[4]?Number(c[4]):ka,V=b!==c[6]?a(c[6]):V,Z=c[7],ga=b!==c[8]?c[8]:ga,X=c[9],_=c[10],va=b!==c[11]?Number(c[11]):va,ja.enable=b!==c[12]?a(c[12]):!1,ra=b!==c[13]?c[13]:ra,Ba=b!==c[14]?c[14]:Ba}function l(){function b(){var b=a.iFrameResizer;h("Reading data from page: "+JSON.stringify(b)),Da="messageCallback"in b?b.messageCallback:Da,Ea="readyCallback"in b?b.readyCallback:Ea,ua="targetOrigin"in b?b.targetOrigin:ua,ga="heightCalculationMethod"in b?b.heightCalculationMethod:ga,Ba="widthCalculationMethod"in b?b.widthCalculationMethod:Ba}function c(a,b){return"function"==typeof a&&(h("Setup custom "+b+"CalcMethod"),Ga[b]=a,a="custom"),a}"iFrameResizer"in a&&Object===a.iFrameResizer.constructor&&(b(),ga=c(ga,"height"),Ba=c(Ba,"width")),h("TargetOrigin for parent set to: "+ua)}function m(a,b){return-1!==b.indexOf("-")&&(i("Negative CSS value ignored for "+a),b=""),b}function n(a,c){b!==c&&""!==c&&"null"!==c&&(document.body.style[a]=c,h("Body "+a+' set to "'+c+'"'))}function o(){b===Z&&(Z=Y+"px"),n("margin",m("margin",Z))}function p(){document.documentElement.style.height="",document.body.style.height="",h('HTML & body height set to "auto"')}function q(b){function f(){O(b.eventName,b.eventType)}var g={add:function(b){c(a,b,f)},remove:function(b){d(a,b,f)}};b.eventNames&&Array.prototype.map?(b.eventName=b.eventNames[0],b.eventNames.map(g[b.method])):g[b.method](b.eventName),h(e(b.method)+" event listener: "+b.eventType)}function r(a){q({method:a,eventType:"Animation Start",eventNames:["animationstart","webkitAnimationStart"]}),q({method:a,eventType:"Animation Iteration",eventNames:["animationiteration","webkitAnimationIteration"]}),q({method:a,eventType:"Animation End",eventNames:["animationend","webkitAnimationEnd"]}),q({method:a,eventType:"Input",eventName:"input"}),q({method:a,eventType:"Mouse Up",eventName:"mouseup"}),q({method:a,eventType:"Mouse Down",eventName:"mousedown"}),q({method:a,eventType:"Orientation Change",eventName:"orientationchange"}),q({method:a,eventType:"Print",eventName:["afterprint","beforeprint"]}),q({method:a,eventType:"Ready State Change",eventName:"readystatechange"}),q({method:a,eventType:"Touch Start",eventName:"touchstart"}),q({method:a,eventType:"Touch End",eventName:"touchend"}),q({method:a,eventType:"Touch Cancel",eventName:"touchcancel"}),q({method:a,eventType:"Transition Start",eventNames:["transitionstart","webkitTransitionStart","MSTransitionStart","oTransitionStart","otransitionstart"]}),q({method:a,eventType:"Transition Iteration",eventNames:["transitioniteration","webkitTransitionIteration","MSTransitionIteration","oTransitionIteration","otransitioniteration"]}),q({method:a,eventType:"Transition End",eventNames:["transitionend","webkitTransitionEnd","MSTransitionEnd","oTransitionEnd","otransitionend"]}),"child"===ra&&q({method:a,eventType:"IFrame Resized",eventName:"resize"})}function s(a,b,c,d){return b!==a&&(a in c||(i(a+" is not a valid option for "+d+"CalculationMethod."),a=b),h(d+' calculation method set to "'+a+'"')),a}function t(){ga=s(ga,fa,Ia,"height")}function u(){Ba=s(Ba,Aa,Ja,"width")}function v(){!0===V?(r("add"),G()):h("Auto Resize disabled")}function w(){h("Disable outgoing messages"),sa=!1}function x(){h("Remove event listener: Message"),d(a,"message",T)}function y(){null!==$&&$.disconnect()}function z(){r("remove"),y(),clearInterval(la)}function A(){w(),x(),!0===V&&z()}function B(){var a=document.createElement("div");a.style.clear="both",a.style.display="block",document.body.appendChild(a)}function C(){function d(){return{x:a.pageXOffset!==b?a.pageXOffset:document.documentElement.scrollLeft,y:a.pageYOffset!==b?a.pageYOffset:document.documentElement.scrollTop}}function e(a){var b=a.getBoundingClientRect(),c=d();return{x:parseInt(b.left,10)+parseInt(c.x,10),y:parseInt(b.top,10)+parseInt(c.y,10)}}function f(a){function c(a){var b=e(a);h("Moving to in page link (#"+d+") at x: "+b.x+" y: "+b.y),S(b.y,b.x,"scrollToOffset")}var d=a.split("#")[1]||a,f=decodeURIComponent(d),g=document.getElementById(f)||document.getElementsByName(f)[0];b!==g?c(g):(h("In page link (#"+d+") not found in iFrame, so sending to parent"),S(0,0,"inPageLink","#"+d))}function g(){""!==location.hash&&"#"!==location.hash&&f(location.href)}function j(){function a(a){function b(a){a.preventDefault(),f(this.getAttribute("href"))}"#"!==a.getAttribute("href")&&c(a,"click",b)}Array.prototype.forEach.call(document.querySelectorAll('a[href^="#"]'),a)}function k(){c(a,"hashchange",g)}function l(){setTimeout(g,ca)}function m(){Array.prototype.forEach&&document.querySelectorAll?(h("Setting up location.hash handlers"),j(),k(),l()):i("In page linking not fully supported in this browser! (See README.md for IE8 workaround)")}return ja.enable?m():h("In page linking not enabled"),{findTarget:f}}function D(){h("Enable public methods"),Ca.parentIFrame={autoResize:function(a){return!0===a&&!1===V?(V=!0,v()):!1===a&&!0===V&&(V=!1,z()),V},close:function(){S(0,0,"close"),A()},getId:function(){return pa},getPageInfo:function(a){"function"==typeof a?(Fa=a,S(0,0,"pageInfo")):(Fa=function(){},S(0,0,"pageInfoStop"))},moveToAnchor:function(a){ja.findTarget(a)},reset:function(){R("parentIFrame.reset")},scrollTo:function(a,b){S(b,a,"scrollTo")},scrollToOffset:function(a,b){S(b,a,"scrollToOffset")},sendMessage:function(a,b){S(0,0,"message",JSON.stringify(a),b)},setHeightCalculationMethod:function(a){ga=a,t()},setWidthCalculationMethod:function(a){Ba=a,u()},setTargetOrigin:function(a){h("Set targetOrigin: "+a),ua=a},size:function(a,b){var c=""+(a?a:"")+(b?","+b:"");O("size","parentIFrame.size("+c+")",a,b)}}}function E(){0!==ka&&(h("setInterval: "+ka+"ms"),la=setInterval(function(){O("interval","setInterval: "+ka)},Math.abs(ka)))}function F(){function c(a){function b(a){!1===a.complete&&(h("Attach listeners to "+a.src),a.addEventListener("load",g,!1),a.addEventListener("error",i,!1),l.push(a))}"attributes"===a.type&&"src"===a.attributeName?b(a.target):"childList"===a.type&&Array.prototype.forEach.call(a.target.querySelectorAll("img"),b)}function d(a){l.splice(l.indexOf(a),1)}function e(a){h("Remove listeners from "+a.src),a.removeEventListener("load",g,!1),a.removeEventListener("error",i,!1),d(a)}function f(a,c,d){e(a.target),O(c,d+": "+a.target.src,b,b)}function g(a){f(a,"imageLoad","Image loaded")}function i(a){f(a,"imageLoadFailed","Image load failed")}function j(a){O("mutationObserver","mutationObserver: "+a[0].target+" "+a[0].type),a.forEach(c)}function k(){var a=document.querySelector("body"),b={attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0};return n=new m(j),h("Create body MutationObserver"),n.observe(a,b),n}var l=[],m=a.MutationObserver||a.WebKitMutationObserver,n=k();return{disconnect:function(){"disconnect"in n&&(h("Disconnect body MutationObserver"),n.disconnect(),l.forEach(e))}}}function G(){var b=0>ka;a.MutationObserver||a.WebKitMutationObserver?b?E():$=F():(h("MutationObserver not supported in this browser!"),E())}function H(a,b){function c(a){var c=/^\d+(px)?$/i;if(c.test(a))return parseInt(a,W);var d=b.style.left,e=b.runtimeStyle.left;return b.runtimeStyle.left=b.currentStyle.left,b.style.left=a||0,a=b.style.pixelLeft,b.style.left=d,b.runtimeStyle.left=e,a}var d=0;return b=b||document.body,"defaultView"in document&&"getComputedStyle"in document.defaultView?(d=document.defaultView.getComputedStyle(b,null),d=null!==d?d[a]:0):d=c(b.currentStyle[a]),parseInt(d,W)}function I(a){a>ya/2&&(ya=2*a,h("Event throttle increased to "+ya+"ms"))}function J(a,b){for(var c=b.length,d=0,f=0,g=e(a),i=Ha(),j=0;c>j;j++)d=b[j].getBoundingClientRect()[a]+H("margin"+g,b[j]),d>f&&(f=d);return i=Ha()-i,h("Parsed "+c+" HTML elements"),h("Element position calculated in "+i+"ms"),I(i),f}function K(a){return[a.bodyOffset(),a.bodyScroll(),a.documentElementOffset(),a.documentElementScroll()]}function L(a,b){function c(){return i("No tagged elements ("+b+") found on page"),ea}var d=document.querySelectorAll("["+b+"]");return 0===d.length?c():J(a,d)}function M(){return document.querySelectorAll("body *")}function N(a,c,d,e){function f(){ea=m,za=n,S(ea,za,a)}function g(){function a(a,b){var c=Math.abs(a-b)<=va;return!c}return m=b!==d?d:Ia[ga](),n=b!==e?e:Ja[Ba](),a(ea,m)||aa&&a(za,n)}function i(){return!(a in{init:1,interval:1,size:1})}function j(){return ga in qa||aa&&Ba in qa}function k(){h("No change in size detected")}function l(){i()&&j()?R(c):a in{interval:1}||k()}var m,n;g()||"init"===a?(P(),f()):l()}function O(a,b,c,d){function e(){a in{reset:1,resetPage:1,init:1}||h("Trigger event: "+b)}function f(){return wa&&a in ba}f()?h("Trigger event cancelled: "+a):(e(),Ka(a,b,c,d))}function P(){wa||(wa=!0,h("Trigger event lock on")),clearTimeout(xa),xa=setTimeout(function(){wa=!1,h("Trigger event lock off"),h("--")},ca)}function Q(a){ea=Ia[ga](),za=Ja[Ba](),S(ea,za,a)}function R(a){var b=ga;ga=fa,h("Reset trigger event: "+a),P(),Q("reset"),ga=b}function S(a,c,d,e,f){function g(){b===f?f=ua:h("Message targetOrigin: "+f)}function i(){var g=a+":"+c,i=pa+":"+g+":"+d+(b!==e?":"+e:"");h("Sending message to host page ("+i+")"),ta.postMessage(na+i,f)}!0===sa&&(g(),i())}function T(b){function d(){return na===(""+b.data).substr(0,oa)}function e(){function d(){ia=b.data,ta=b.source,j(),da=!1,setTimeout(function(){ha=!1},ca)}document.body?d():(h("Waiting for page ready"),c(a,"readystatechange",e))}function f(){ha?h("Page reset ignored by init"):(h("Page size reset by host page"),Q("resetPage"))}function g(){O("resizeParent","Parent window requested size check")}function k(){var a=m();ja.findTarget(a)}function l(){return b.data.split("]")[1].split(":")[0]}function m(){return b.data.substr(b.data.indexOf(":")+1)}function n(){return"iFrameResize"in a}function o(){var a=m();h("MessageCallback called from parent: "+a),Da(JSON.parse(a)),h(" --")}function p(){var a=m();h("PageInfoFromParent called from parent: "+a),Fa(JSON.parse(a)),h(" --")}function q(){return b.data.split(":")[2]in{"true":1,"false":1}}function r(){switch(l()){case"reset":f();break;case"resize":g();break;case"inPageLink":case"moveToAnchor":k();break;case"message":o();break;case"pageInfo":p();break;default:n()||q()||i("Unexpected message ("+b.data+")")}}function s(){!1===da?r():q()?e():h('Ignored message of type "'+l()+'". Received before initialization.')}d()&&s()}function U(){"loading"!==document.readyState&&a.parent.postMessage("[iFrameResizerChild]Ready","*")}var V=!0,W=10,X="",Y=0,Z="",$=null,_="",aa=!1,ba={resize:1,click:1},ca=128,da=!0,ea=1,fa="bodyOffset",ga=fa,ha=!0,ia="",ja={},ka=32,la=null,ma=!1,na="[iFrameSizer]",oa=na.length,pa="",qa={max:1,min:1,bodyScroll:1,documentElementScroll:1},ra="child",sa=!0,ta=a.parent,ua="*",va=0,wa=!1,xa=null,ya=16,za=1,Aa="scroll",Ba=Aa,Ca=a,Da=function(){i("MessageCallback function not defined")},Ea=function(){},Fa=function(){},Ga={height:function(){return i("Custom height calculation function not defined"),document.documentElement.offsetHeight},width:function(){return i("Custom width calculation function not defined"),document.body.scrollWidth}},Ha=Date.now||function(){return(new Date).getTime()},Ia={bodyOffset:function(){return document.body.offsetHeight+H("marginTop")+H("marginBottom")},offset:function(){return Ia.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},custom:function(){return Ga.height()},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,K(Ia))},min:function(){return Math.min.apply(null,K(Ia))},grow:function(){return Ia.max()},lowestElement:function(){return Math.max(Ia.bodyOffset(),J("bottom",M()))},taggedElement:function(){return L("bottom","data-iframe-height")}},Ja={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},custom:function(){return Ga.width()},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max(Ja.bodyScroll(),Ja.documentElementScroll())},max:function(){return Math.max.apply(null,K(Ja))},min:function(){return Math.min.apply(null,K(Ja))},rightMostElement:function(){return J("right",M())},taggedElement:function(){return L("right","data-iframe-width")}},Ka=f(N);c(a,"message",T),U()}(window||{});
-//# sourceMappingURL=iframeResizer.contentWindow.map
-//# sourceMappingURL=quicktips.js.map
diff --git a/resources/lang/de/faktencheck.php b/resources/lang/de/faktencheck.php
deleted file mode 100644
index 85f6586b9316b5b3c5d98f9f0e7eca5be9be1a4d..0000000000000000000000000000000000000000
--- a/resources/lang/de/faktencheck.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-return [
-	'heading.1'		=> 'Fakten-Prüfung contra Fake-News:',
-	'paragraph.1'	=> 'Woher kommt die Nachricht?',
-	'list.1'		=> 'Webseite',
-	'list.1.1'		=> 'Hat diese Webseite ein Impressum? Wer ist dort genannt (Namen, Firma, ...) und was kann über diese Personen herausgefunden werden?',
-	'list.1.2'		=> 'Wer ist in der Whois-Datenbank als Eigentümer der Website verzeichnet? Passt das mit dem Impressum zusammen und was kann über die Eigentümer der Website herausgefunden werden? (<a href="https://de.wikipedia.org/wiki/Whois" target="_blank" rel="noopener">https://de.wikipedia.org/wiki/Whois</a>)',
-	'list.1.3'		=> 'Ist auf der Webseite ein Autor genannt? Was kann über diese Persone/n herausgefunden werden?',
-	'list.1.4'		=> 'Publizieren die o.g. Personen häufig/er zu dem Thema? Sind sie bekannt in diesem (Fach)gebiet? Gibt es zu Ihnen vielleicht Wikipedia-Einträge?',
-	'list.1.5'		=> 'Sind im Text Fakten genannt, die an anderer Stelle überprüft werden können? Auch außerhalb von Internet-Quellen?',
-	'list.1.6'		=> 'Gibt der Stil des Schreibens Hinweise, ob der Text evtl. satirisch/ironisch gemeint ist?',
-	'list.1.7'		=> 'Sind im Text Zitate enthalten, deren Korrektheit an anderer Stelle überprüfbar ist?',
-	'list.1.8'		=> 'Ist die Argumentation im Text logisch und plausibel?',
-	'list.2'		=> 'Facebook oder andere soziale Netze oder Foren',
-	'list.2.1'		=> 'Ist ein Autor mit einem Namen genannt, der real erscheint? Wenn nicht: Nachricht äußerst fragwürdig.',
-	'list.2.2'		=> 'Welche zusätzliche Info gibt es zu diesem Namen?',
-	'list.2.3'		=> 'Kann verifiziert werden, ob dieser Name echt ist? Ist diese Person auch auf anderen Kommunikationskanälen erreichbar? Kann man sie anrufen und mit ihr über diesen Text sprechen?',
-	'list.2.4'		=> 'Ist das Profil dieses Namen bei FB verifiziert? (<a href="https://www.facebook.com/help/196050490547892" target="_blank" rel="noopener">https://www.facebook.com/help/196050490547892</a>)',
-	'list.2.5'		=> 'Seit wann gibt es dieses Profil?',
-	'list.2.6'		=> 'Wie viele FB-Freunde hat dieses Profil? Was kann über die Namen dieser Profile herausgefunden werden?',
-	'list.3'		=> 'Wikipedia',
-	'list.3.1'		=> 'Nicht alles, was bei Wikipedia steht ist wahr!!',
-	'list.3.2'		=> 'Versionsgeschichte prüfen: Wer hat wann was geschrieben?',
-	'list.3.3'		=> 'Kann zu diesen Autoren etwas herausgefunden werden?',
-	'list.3.4'		=> 'Gibt es eine Diskussionsseite zu diesem Wikipedia-Eintrag, aus der weitere Rückschlüsse möglich sind?',
-	'list.4'		=> 'EMails',
-	'list.4.1'		=> 'EMails fälschen ist SEHR einfach! => Fakemails.',
-	'list.4.2'		=> 'Stammt die Mail wirklich von dem angegebenen Absender? Header der EMail genau prüfen, und die dort genannten IP-Adressen und Zustellwege untersuchen (nicht einfach).',
-	'list.4.3'		=> 'Signierte und am besten auch verschlüsselte EMail nutzen (nicht einfach); Hinweise dazu hier: <a href="https://www.heise.de/ct/artikel/Ausgebootet-289538.html" target="_blank" rel="noopener">https://www.heise.de/ct/artikel/Ausgebootet-289538.html</a>',
-	'list.5'		=> 'Bilder, Videos',
-	'list.5.1'		=> 'Hintergrund genau ansehen. Landschaft, Gebäude, Autos und Kennzeichen, Kleidung, Personen. Ist das stimmig, passt es ggf. mit dem zugehörigen Text zusammen?',
-	'list.5.2'		=> 'Sind mit der Reverse-Image-Search von Bildsuchmaschinen ähnliche Bilder zu finden?',
-	'list.5.3'		=> 'Kann man mit Grafikprogrammen Metadaten der Bilder auslesen? Passen diese Metadaten mit dem Bildinhalt zusammen?',
-	'list.6'		=> 'Für SmartPhones gibt es eine "Fake News Check"-App, die auch sehr subjektive und emotionale Aspekte berücksichtigt.  Dazu weitere Links zum Fact-Checking',
-	'list.7'		=> 'Es gibt KEINE absolute Sicherheit gegen Fälschungen!!',
-];
diff --git a/resources/lang/de/search-engine.php b/resources/lang/de/search-engine.php
deleted file mode 100644
index 375a03d9436e13a80607b74a2029c26ac702b394..0000000000000000000000000000000000000000
--- a/resources/lang/de/search-engine.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-
-return [
-    'head.1' => 'Über unsere Suchmaschinen',
-    'head.2' => 'MetaGer nutzt mehrere Indexe',
-    'head.3' => 'Yahoo!',
-    'head.4' => 'Bing',
-    'head.5' => 'Scopia',
-    'head.6' => 'Netluchs',
-    'head.7' => 'Yandex',
-    'head.8' => 'Die ZEIT',
-    'head.9' => 'OneNewspage (Deutschland)',
-    'head.10' => 'OneNewspage Video (Deutschland)',
-    'head.11' => 'YaCy',
-
-
-
-    'text.1' => 'MetaGer ist eine <a href=":transparenz">Metasuchmaschine</a>. Deshalb nutzen wir die Indexe verschiedener anderer Suchmaschinen. Für jede dieser Suchmaschinen haben wir einen kurzen Steckbrief mit den wichtigsten Eckdaten erstellt. Da wir diese Übersicht nicht ständig aktualisieren, sind alle Angaben ohne Gewähr.',
-   
-    'text.2.1' => 'Name: ',
-    'text.2.1.1' => 'Yahoo!',
-    'text.2.2' => 'Verwendeter Index: ',
-    'text.2.2.1' => 'Microsoft Bing',
-    'text.2.3' => 'Entstanden: ',
-    'text.2.3.1' => '2. März 1995',
-    'text.2.4' => 'Hauptsitz: ',
-    'text.2.4.1' => 'New York City, USA',
-    'text.2.5' => 'Betreiber: ',
-    'text.2.5.1' => 'Altaba Inc. (ehemals Yahoo Inc.)',
-    'text.2.6' => 'Geschätzte Seiten im Index: ',
-    'text.2.6.1' => 'vermutlich 8-14 Millarden',
-    'text.2.7' => 'Verwendete MetaGer-Version: ',
-    'text.2.7.1' => 'deutsche Suche',
-
-
-    'text.3.1' => 'Bing',
-    'text.3.2' => 'Microsoft Bing',
-    'text.3.3' => '3. Juni 2009',
-    'text.3.4' => 'Redmond, Washington, USA',
-    'text.3.5' => 'Microsoft Inc.',
-    'text.3.6' => 'vermutlich 8-14 Millarden',
-    'text.3.7' => 'englische Suche, deutsche Suche (Nur für Mitglieder)',
-   
-    'text.4.1' => 'Scopia',
-    'text.4.2' => 'Circa 2016 ',
-    'text.4.3' => 'Newark, New Jersey, USA',
-    'text.4.4' => 'Scopia Technologies ASPEN LLC',
-    'text.4.5' => 'deutsche Suche, englische Suche',
-   
-    'text.5.1' => 'Netluchs',
-    'text.5.2' => '2005',
-    'text.5.3' => 'Hamburg, Deutschland',
-    'text.5.4' => 'Michael Nebel (Privatperson)',
-    'text.5.5' => '6 Millionen (Stand: 2005)',
-    'text.5.6' => 'deutsche Suche',
-   
-    'text.6.1' => 'Yandex',
-    'text.6.2' => '1997',
-    'text.6.3' => 'Mäntsälä, Finnland (Europa)',
-    'text.6.4' => 'Yandex OY (Aktiengesellschaft)',
-    'text.6.5' => 'deutsche Suche',   
-
-
-    'text.7.1' => 'Die ZEIT',
-    'text.7.2' => '6. September 2009',
-    'text.7.3' => 'Hamburg, Deutschland',
-    'text.7.4' => 'Zeit Online GmbH',
-    'text.7.5' => 'deutsche Suche',
-   
-
-    'text.8.1' => 'OneNewspage (Deutschland)',
-    'text.8.2' => '2008',
-    'text.8.3' => 'Wales, England',
-    'text.8.4' => 'One News Page Ltd.',
-    'text.8.5' => 'deutsche Suche (Deutschland), englische Suche',
-   
-
-    'text.9.1' => 'OneNewspage Video (Deutschland)',
-    'text.9.2' => '2008',
-    'text.9.3' => 'Wales, England',
-    'text.9.4' => 'One News Page Ltd.',
-    'text.9.5' => 'deutsche Suche (Deutschland), englische Suche',
-   
-
-    'text.10.1' => 'YaCy',
-    'text.10.2' => '2004',
-    'text.10.3' => 'Frankfurt am Main, Deutschland',
-    'text.10.4' => 'Dipl. Inf. Michael Christen',
-    'text.10.5' => '1,7 Milliarden',
-    'text.10.6' => 'deutsche Suche',
-
-
-];
diff --git a/resources/lang/en/faktencheck.php b/resources/lang/en/faktencheck.php
deleted file mode 100644
index 0f14338affbf003b72e555fb1916e14ec1c85cb7..0000000000000000000000000000000000000000
--- a/resources/lang/en/faktencheck.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-return [
-    "heading.1"   => "Fact-checks versus fake news:",
-    "paragraph.1" => "Which origin has this message?",
-    "list.1"      => "Web",
-    "list.1.1"    => "Does this web document have a site notice? What can be found out about these specified persons, companies....",
-    "list.1.2"    => "Checking the WHOIS database: Who is listed as the owner / operator of the website / page? Does this information fit with the site notice? What can be found out about the owner of the web document? (<a href=\"https://de.wikipedia.org/wiki/Whois\" target=\"_blank\" rel=\"noopener\">https://de.wikipedia.org/wiki/Whois</a>)",
-    "list.1.3"    => "On the page: Is there an author mentioned? What can be found out about that author?",
-    "list.1.4"    => "Is it a very well known author on this subject? Any Wikipedia entries?",
-    "list.1.5"    => "Does the text contain facts which can be sifted? Other sources -not only internet- known and available? ",
-    "list.1.6"    => "Does the writing style indicate if the text could be ironical?",
-    "list.1.7"    => "Does the author use a proper citation which can be sifted elsewhere?",
-    "list.1.8"    => "Is the argumentation logical and reasonable ?",
-    "list.2"      => "Facebook and other social nets or panels",
-    "list.2.1"    => "The message is not very believable if there is no real appearing authors name.",
-    "list.2.2"    => "Are there additional informations referring to this author's name?",
-    "list.2.3"    => "Can be verified if this name is real? Is the person reachable on other channels? Is it possible to speak with this person?",
-    "list.2.4"    => "Is there a verified Facebook profile?  (<a href=\"https://www.facebook.com/help/196050490547892\" target=\"_blank\" rel=\"noopener\">https://www.facebook.com/help/196050490547892</a>)",
-    "list.2.5"    => "Since when is this profile online?",
-    "list.2.6"    => "How many friends are listed in this profile? Can be found out anything about these profiles?",
-    "list.3"      => "Wikipedia",
-    "list.3.1"    => "Not everything which can be found on wikipedia is true!",
-    "list.3.2"    => "Check the history: Who wrote this at what time?",
-    "list.3.3"    => "Can be found out anything about these authors?",
-    "list.3.4"    => "Is there a special discussion page on wikipedia?",
-    "list.4"      => "Emails",
-    "list.4.1"    => "It's very easy to fake Emails or to manipulate accounts. => Fakemails.",
-    "list.4.2"    => "It' not easy to find out the origin and other facts of an email.",
-    "list.4.3"    => "It is very good and safe to use encrypted mails. Hints: <a href=\"https://www.heise.de/ct/artikel/Ausgebootet-289538.html\" target=\"_blank\" rel=\"noopener\">https://www.heise.de/ct/artikel/Ausgebootet-289538.html</a> ",
-    "list.5"      => "Pictures an videos",
-    "list.5.1"    => "Check out the image background. Landscape, buildings, cars with their registration numbers, persons and clothes. Does this fit together? Does it fit with the text?",
-    "list.5.2"    => "Could be find similar pictures with an reverse-image-search (provided by image search engines)?",
-    "list.5.3"    => "Open the image file with a graphic application: are their metadatas inside the image and do they fit with the image content?",
-    "list.6"      => "There is a \"Fake News Check\"-App for the smartphone which considers very subjective and emotional issues.",
-    "list.7"      => "There's no such thing as absolute security against fakes.",
-];
diff --git a/resources/less/metager/parts/scaffolding.less b/resources/less/metager/parts/scaffolding.less
deleted file mode 100644
index 1d926a60700ab7423e3039dc2b4d5007a4f51522..0000000000000000000000000000000000000000
--- a/resources/less/metager/parts/scaffolding.less
+++ /dev/null
@@ -1,39 +0,0 @@
-* {
-    .box-sizing(border-box);
-  }
-  *:before,
-  *:after {
-    .box-sizing(border-box);
-  }
-
-
-body{
-    font-family:"Helvetica Neue", Helvetica, Arial, sans-serif ;
-    font-size: 1em;
-    line-height:1.428571429 ;
-    color:@text-color;
-    background-color:@background-color;
-
-}
-
-figure {
-    margin: 0;
-}
-
-img {
-    vertical-align: middle;
-  }
-
- 
-hr {
-  margin-top: 20px;
-  margin-bottom:20px;
-  border: 0;
-  border-top: 1px solid #eee;
-}
-
-a {
-  text-decoration: none;
-}
-  
-  
diff --git a/resources/views/layouts/resultpage/resources.blade.php b/resources/views/layouts/resultpage/resources.blade.php
deleted file mode 100644
index 1e8ff80b1dd6e69aa032582c02a6501f28f26cf0..0000000000000000000000000000000000000000
--- a/resources/views/layouts/resultpage/resources.blade.php
+++ /dev/null
@@ -1,27 +0,0 @@
-    <link href="/favicon.ico" rel="icon" type="image/x-icon" />
-	<link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" />
-	<link rel="apple-touch-icon" href="/img/apple/touch-icon.png">
-	<link rel="apple-touch-icon" sizes="57x57" href="/img/apple/touch-icon-57.png">
-	<link rel="apple-touch-icon" sizes="72x72" href="/img/apple/touch-icon-72.png">
-	<link rel="apple-touch-icon" sizes="76x76" href="/img/apple/touch-icon-76.png">
-	<link rel="apple-touch-icon" sizes="114x114" href="/img/apple/touch-icon-114.png">
-	<link rel="apple-touch-icon" sizes="120x120" href="/img/apple/touch-icon-120.png">
-	<link rel="apple-touch-icon" sizes="144x144" href="/img/apple/touch-icon-144.png">
-	<link rel="apple-touch-icon" sizes="152x152" href="/img/apple/touch-icon-152.png">
-	<link rel="apple-touch-icon" sizes="180x180" href="/img/apple/touch-icon-180.png">
-	@if(empty(Cookie::get('key')))
-	<link rel="search" type="application/opensearchdescription+xml" title="{{ trans('staticPages.opensearch') }}" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin')) }}">
-	@else
-	<link rel="search" type="application/opensearchdescription+xml" title="{{ trans('staticPages.opensearch') }}" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin', ['key' => Cookie::get('key')])) }}">
-	@endif
-	<link href="/fonts/liberationsans/stylesheet.css" rel="stylesheet">
-
-	<link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager.css') }}"/>
-	@if(Cookie::get('dark_mode') === "2")
-		<link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager-dark.css') }}"/>
-	@elseif(Cookie::get('dark_mode') === "1")
-		<link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager.css') }}"/>
-	@elseif(Request::input('out', '') !== "results-with-style" )
-		<link type="text/css" rel="stylesheet" media="(prefers-color-scheme:dark)" href="{{ mix('css/themes/metager-dark.css') }}"/>
-	@endif
-	
diff --git a/resources/views/layouts/staticPages.blade.php b/resources/views/layouts/staticPages.blade.php
deleted file mode 100644
index 082da54c2396205d8b873db783a1c8f7ebc0ce93..0000000000000000000000000000000000000000
--- a/resources/views/layouts/staticPages.blade.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE html>
-<html lang="{!! trans('staticPages.meta.language') !!}">
-	<head>
-		<meta charset="utf-8" />
-		<title>@yield('title')</title>
-		<meta name="description" content="{!! trans('staticPages.meta.Description') !!}" />
-		<meta name="keywords" content="{!! trans('staticPages.meta.Keywords') !!}" />
-		<meta name="page-topic" content="Dienstleistung" />
-		<meta name="robots" content="index,follow" />
-		<meta name="revisit-after" content="7 days" />
-		<meta name="audience" content="all" />
-		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
-		<link href="/favicon.ico" rel="icon" type="image/x-icon" />
-		<link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" />
-		<link rel="apple-touch-icon" href="/img/apple/touch-icon.png">
-		<link rel="apple-touch-icon" sizes="57x57" href="/img/apple/touch-icon-57.png">
-		<link rel="apple-touch-icon" sizes="72x72" href="/img/apple/touch-icon-72.png">
-		<link rel="apple-touch-icon" sizes="76x76" href="/img/apple/touch-icon-76.png">
-		<link rel="apple-touch-icon" sizes="114x114" href="/img/apple/touch-icon-114.png">
-		<link rel="apple-touch-icon" sizes="120x120" href="/img/apple/touch-icon-120.png">
-		<link rel="apple-touch-icon" sizes="144x144" href="/img/apple/touch-icon-144.png">
-		<link rel="apple-touch-icon" sizes="152x152" href="/img/apple/touch-icon-152.png">
-		<link rel="apple-touch-icon" sizes="180x180" href="/img/apple/touch-icon-180.png">
-		@if(empty(Cookie::get('key')))
-		<link rel="search" type="application/opensearchdescription+xml" title="{{ trans('staticPages.opensearch') }}" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin')) }}">
-		@else
-		<link rel="search" type="application/opensearchdescription+xml" title="{{ trans('staticPages.opensearch') }}" href="{{  LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), action('StartpageController@loadPlugin', ['key' => Cookie::get('key')])) }}">
-		@endif
-
-		<link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager.css') }}"/>
-		@if(isset($page) && $page === 'startpage')
-			<link type="text/css" rel="stylesheet" href="{{ mix('css/themes/startpage-only-light.css') }}"/>
-		@endif
-		@if(Cookie::get('dark_mode') === "2")
-			<link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager-dark.css') }}"/>
-			@if(!empty($darkcss) && is_array($darkcss))
-			@foreach($darkcss as $cssFile)
-			<link rel="stylesheet" type="text/css" href="{{ $cssFile }}" />
-			@endforeach
-			@endif
-		@elseif(Cookie::get('dark_mode') === "1")
-			<link type="text/css" rel="stylesheet" href="{{ mix('css/themes/metager.css') }}"/>
-			@if(isset($page) && $page === 'startpage')
-				<link type="text/css" rel="stylesheet" href="{{ mix('css/themes/startpage-only-light.css') }}"/>
-			@endif
-		@else
-			<link type="text/css" rel="stylesheet" media="(prefers-color-scheme:dark)" href="{{ mix('css/themes/metager-dark.css') }}"/>
-			@if(!empty($darkcss) && is_array($darkcss))
-			@foreach($darkcss as $cssFile)
-			<link rel="stylesheet" type="text/css" media="(prefers-color-scheme:dark)" href="{{ $cssFile }}" />
-			@endforeach
-			@endif
-		@endif
-		<link type="text/css" rel="stylesheet" href="{{ mix('css/utility.css') }}" />
-		<link href="/fonts/liberationsans/stylesheet.css" rel="stylesheet">
-		@if (isset($css) && is_array($css))
-		@foreach($css as $cssFile)
-		<link href="{{ $cssFile }}" rel="stylesheet" />
-		@endforeach
-		@endif
-		<script src="{{ mix('js/lib.js') }}"></script>
-		<script src="{{ mix('js/utility.js') }}"></script>
-		@if(!empty($js) && is_array($js))
-		@foreach($js as $jsFile)
-		<script src="{{$jsFile}}" async></script>
-		@endforeach
-		@endif
-	</head>
-	<body>
-		@if(Request::getHttpHost() === "metager3.de")
-		<div class="alert alert-info metager3-unstable-warning-static-pages">
-			{!! @trans('resultPage.metager3') !!}
-		</div>
-		@endif
-		<header>
-			@yield('homeIcon')
-		</header>
-		<div class="wrapper {{$page ?? ''}}">
-			<main id="main-content">
-				@if (isset($success))
-					<div class="alert alert-success" role="alert">{{ $success }}</div>
-				@endif
-				@if (isset($info))
-					<div class="alert alert-info" role="alert">{{ $info }}</div>
-				@endif
-				@if (isset($warning))
-					<div class="alert alert-warning" role="alert">{{ $warning }}</div>
-				@endif
-				@if (isset($error))
-					<div class="alert alert-danger" role="alert">{{ $error }}</div>
-				@endif
-				@yield('content')
-			</main>
-		</div>
-		@include('parts.sidebar', ['id' => 'staticPagesSideBar'])
-		@include('parts.sidebar-opener', ['class' => 'fixed'])
-		@if (isset($page) && $page === 'startpage')
-			@include('parts.footer', ['type' => 'startpage', 'id' => 'startPageFooter'])
-		@else
-			@include('parts.footer', ['type' => 'subpage', 'id' => 'subPageFooter'])
-		@endif
-	</body>
-</html>
diff --git a/resources/views/search-engine.blade.php b/resources/views/search-engine.blade.php
deleted file mode 100644
index 78d36438bdaaf4037020f1da329607a0425b0c02..0000000000000000000000000000000000000000
--- a/resources/views/search-engine.blade.php
+++ /dev/null
@@ -1,99 +0,0 @@
-@extends('layouts.subPages')
-
-@section('title', $title )
-
-@section('content')
-
-<div>
-	<h1 class="page-title">{{ trans('search-engine.head.1') }}</h1>
-
-	<div class="card">
-		<h2>{{ trans('search-engine.head.2') }}</h2>
-		<p>{!! trans('search-engine.text.1',["transparenz" => LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "transparency")]) !!}</p>
-	</div>
-	<div class="enginecontainer">
-		<div class="card">
-			<h2>{{ trans('search-engine.head.3') }}</h2>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.1') }}</span>{{ trans('search-engine.text.2.1.1') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.2') }}</span>{{ trans('search-engine.text.2.2.1') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.3') }}</span>{{ trans('search-engine.text.2.3.1') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.4') }}</span>{{ trans('search-engine.text.2.4.1') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.5') }}</span>{{ trans('search-engine.text.2.5.1') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.6') }}</span>{{ trans('search-engine.text.2.6.1') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.7') }}</span>{{ trans('search-engine.text.2.7.1') }}</p>
-
-
-		</div>
-		<div class="card">
-			<h2>{{ trans('search-engine.head.4') }}</h2>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.1') }}</span>{{ trans('search-engine.text.3.1') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.2') }}</span>{{ trans('search-engine.text.3.2') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.3') }}</span>{{ trans('search-engine.text.3.3') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.4') }}</span>{{ trans('search-engine.text.3.4') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.5') }}</span>{{ trans('search-engine.text.3.5') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.6') }}</span>{{ trans('search-engine.text.3.6') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.7') }}</span>{{ trans('search-engine.text.3.7') }}</p>
-
-		</div>
-		<div class="card">
-			<h2>{{ trans('search-engine.head.5') }}</h2>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.1') }}</span>{{ trans('search-engine.text.4.1') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.3') }}</span>{{ trans('search-engine.text.4.2') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.4') }}</span>{{ trans('search-engine.text.4.3') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.5') }}</span>{{ trans('search-engine.text.4.4') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.7') }}</span>{{ trans('search-engine.text.4.5') }}</p>
-		</div>
-		<div class="card">
-			<h2>{{ trans('search-engine.head.6') }}</h2>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.1') }}</span>{{ trans('search-engine.text.5.1')}}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.3') }}</span>{{ trans('search-engine.text.5.2') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.4') }}</span>{{ trans('search-engine.text.5.3') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.5') }}</span>{{ trans('search-engine.text.5.4') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.6') }}</span>{{ trans('search-engine.text.5.5') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.7') }}</span>{{ trans('search-engine.text.5.6') }}</p>
-
-		</div>
-		<div class="card">
-			<h2>{{ trans('search-engine.head.7') }}</h2>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.1')}}</span>{{ trans('search-engine.text.6.1')}}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.3') }}</span>{{ trans('search-engine.text.6.2') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.4') }}</span>{{ trans('search-engine.text.6.3') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.5') }}</span>{{ trans('search-engine.text.6.4') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.7') }}</span>{{ trans('search-engine.text.6.5') }}</p>
-		</div>
-		<div class="card">
-			<h2>{{ trans('search-engine.head.8') }}</h2>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.1')}}</span>{{ trans('search-engine.text.7.1')}}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.3') }}</span>{{ trans('search-engine.text.7.2') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.4') }}</span>{{ trans('search-engine.text.7.3') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.5') }}</span>{{ trans('search-engine.text.7.4') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.7') }}</span>{{ trans('search-engine.text.7.5') }}</p>
-		</div>
-		<div class="card">
-			<h2>{{ trans('search-engine.head.9') }}</h2>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.1')}}</span>{{ trans('search-engine.text.8.1')}}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.3') }}</span>{{ trans('search-engine.text.8.2') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.4') }}</span>{{ trans('search-engine.text.8.3') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.5') }}</span>{{ trans('search-engine.text.8.4') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.7') }}</span>{{ trans('search-engine.text.8.5') }}</p>
-		</div>
-		<div class="card">
-			<h2>{{ trans('search-engine.head.10') }}</h2>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.1')}}</span>{{ trans('search-engine.text.9.1')}}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.3') }}</span>{{ trans('search-engine.text.9.2') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.4') }}</span>{{ trans('search-engine.text.9.3') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.5') }}</span>{{ trans('search-engine.text.9.4') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.7') }}</span>{{ trans('search-engine.text.9.5') }}</p>
-		</div>
-		<div class="card">
-			<h2>{{ trans('search-engine.head.11') }}</h2>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.1')}}</span>{{ trans('search-engine.text.10.1')}}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.3') }}</span>{{ trans('search-engine.text.10.2') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.4') }}</span>{{ trans('search-engine.text.10.3') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.5') }}</span>{{ trans('search-engine.text.10.4') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.6') }}</span>{{ trans('search-engine.text.10.5') }}</p>
-			<p><span class="search-engine-dt">{{ trans('search-engine.text.2.7') }}</span>{{ trans('search-engine.text.10.6') }}</p>
-		</div>
-	</div>
-</div>
-@endsection
\ No newline at end of file
diff --git a/storage/app/public/MetaGer-release.apk b/storage/app/public/MetaGer-release.apk
deleted file mode 100755
index 9e48e76795a592d9d99c5681cdd641d2a7561a8a..0000000000000000000000000000000000000000
Binary files a/storage/app/public/MetaGer-release.apk and /dev/null differ
diff --git a/storage/app/public/aufnahmeantrag-de.pdf b/storage/app/public/aufnahmeantrag-de.pdf
deleted file mode 100644
index c707bd6d86701c280e17a647a4ae7d0a9ed7da7c..0000000000000000000000000000000000000000
Binary files a/storage/app/public/aufnahmeantrag-de.pdf and /dev/null differ
diff --git a/storage/app/public/aufnahmeantrag-en.pdf b/storage/app/public/aufnahmeantrag-en.pdf
deleted file mode 100644
index 929882f4e76c5be2fee701e591bd0b40c976da43..0000000000000000000000000000000000000000
Binary files a/storage/app/public/aufnahmeantrag-en.pdf and /dev/null differ
diff --git a/tests/Browser/AboutTest.php b/tests/Browser/AboutTest.php
deleted file mode 100644
index c8b187b6505c38a00433f54c51fc074983f1049d..0000000000000000000000000000000000000000
--- a/tests/Browser/AboutTest.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Tests\Browser;
-
-use Laravel\Dusk\Browser;
-use Tests\Browser\Pages\About;
-use Tests\DuskTestCase;
-
-class AboutTest extends DuskTestCase
-{
-
-    public function testAbout()
-    {
-        $this->browse(function (Browser $browser) {
-            $browser->visit("/")
-                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label#navigationKontakt")
-                ->clickLink("Über uns")
-                ->waitForLocation("/about")
-                ->on(new About);
-        });
-    }
-}
\ No newline at end of file
diff --git a/tests/Browser/AppTest.php b/tests/Browser/AppTest.php
deleted file mode 100644
index 123116fb809c58282f25b25f1ea3c67c662a058d..0000000000000000000000000000000000000000
--- a/tests/Browser/AppTest.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-namespace Tests\Browser;
-
-use Laravel\Dusk\Browser;
-use Tests\Browser\Pages\App;
-use Tests\DuskTestCase;
-
-class AppTest extends DuskTestCase
-{
-
-    public function testApp()
-    {
-        $this->browse(function (Browser $browser) {
-            $browser->visit("/")
-                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label.sidebar-opener[for=sidebarToggle]")
-                ->clickLink("MetaGer App")
-                ->waitForLocation("/app")
-                ->on(new App);
-        });
-    }
-}
\ No newline at end of file
diff --git a/tests/Browser/DatenschutzTest.php b/tests/Browser/DatenschutzTest.php
deleted file mode 100644
index b3f1afdab82faec2374ccd913169a8ffd5896b2d..0000000000000000000000000000000000000000
--- a/tests/Browser/DatenschutzTest.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-namespace Tests\Browser;
-
-use Laravel\Dusk\Browser;
-use Tests\Browser\Pages\Datenschutz;
-use Tests\DuskTestCase;
-
-class DatenschutzTest extends DuskTestCase
-{
-    public function testDatenschutz()
-    {
-        $this->browse(function (Browser $browser) {
-            $browser->visit("/")
-                ->click("label.sidebar-opener[for=sidebarToggle]")
-                ->clickLink("Datenschutz")
-                ->waitForLocation("/datenschutz")
-                ->on(new Datenschutz);
-        });
-    }
-}
\ No newline at end of file
diff --git a/tests/Browser/HilfeTest.php b/tests/Browser/HilfeTest.php
deleted file mode 100644
index 8b232d6d16aec7529ae543a49d3da654c8d51c67..0000000000000000000000000000000000000000
--- a/tests/Browser/HilfeTest.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-namespace Tests\Browser;
-
-use Laravel\Dusk\Browser;
-use Tests\Browser\Pages\Hilfe;
-use Tests\DuskTestCase;
-
-class HilfeTest extends DuskTestCase
-{
-    public function testHilfe()
-    {
-        $this->browse(function (Browser $browser) {
-            $browser->visit("/")
-                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label.sidebar-opener[for=sidebarToggle]")
-                ->clickLink("Hilfe")
-                ->waitForLocation("/hilfe")
-                ->on(new Hilfe);
-        });
-    }
-}
\ No newline at end of file
diff --git a/tests/Browser/ImpressumTest.php b/tests/Browser/ImpressumTest.php
deleted file mode 100644
index 6e2ed37f2837914c5ffb38e066b30203912951e6..0000000000000000000000000000000000000000
--- a/tests/Browser/ImpressumTest.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Tests\Browser;
-
-use Laravel\Dusk\Browser;
-use Tests\Browser\Pages\Impress;
-use Tests\DuskTestCase;
-
-class ImpressumTest extends DuskTestCase
-{
-
-    public function testImpress()
-    {
-        $this->browse(function (Browser $browser) {
-            $browser->visit("/")
-                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label#navigationKontakt")
-                ->clickLink("Impressum")
-                ->waitForLocation("/impressum")
-                ->on(new Impress);
-        });
-    }
-}
\ No newline at end of file
diff --git a/tests/Browser/KontaktTest.php b/tests/Browser/KontaktTest.php
deleted file mode 100644
index 92cc97a61d9304b725a01bb8b15e379943fd4a2f..0000000000000000000000000000000000000000
--- a/tests/Browser/KontaktTest.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-namespace Tests\Browser;
-
-use Laravel\Dusk\Browser;
-use Tests\Browser\Pages\Kontakt;
-use Tests\DuskTestCase;
-
-class KontaktTest extends DuskTestCase
-{
-    public function testKontakt()
-    {
-        $this->browse(function (Browser $browser) {
-            $browser->visit("/")
-                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label#navigationKontakt")
-                ->clickLink("Kontakt")
-                ->waitForLocation("/kontakt")
-                ->on(new Kontakt);
-        });
-    }
-}
\ No newline at end of file
diff --git a/tests/Browser/PluginTest.php b/tests/Browser/PluginTest.php
deleted file mode 100644
index ee84e137adae38c940669a0dfbc10be53022ab1e..0000000000000000000000000000000000000000
--- a/tests/Browser/PluginTest.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-namespace Tests\Browser;
-
-use Laravel\Dusk\Browser;
-use Tests\Browser\Pages\Plugin;
-use Tests\DuskTestCase;
-
-class PluginTest extends DuskTestCase
-{
-    public function testPlugin()
-    {
-        $this->browse(function (Browser $browser) {
-            $browser->visit("/")
-                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label[for=servicesToggle]")
-                ->clickLink("MetaGer Plugin")
-                ->waitForLocation("/plugin")
-                ->on(new Plugin);
-        });
-    }
-}
\ No newline at end of file
diff --git a/tests/Browser/SitesearchWidgetTest.php b/tests/Browser/SitesearchWidgetTest.php
deleted file mode 100644
index b580e10a418becdbd75bc88197bb3d5217beb552..0000000000000000000000000000000000000000
--- a/tests/Browser/SitesearchWidgetTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace Tests\Browser;
-
-use Laravel\Dusk\Browser;
-use Tests\Browser\Pages\SitesearchWidget;
-use Tests\DuskTestCase;
-
-class SitesearchWidgetTest extends DuskTestCase
-{
-
-    public function testSitesearchWidget()
-    {
-        $this->browse(function (Browser $browser) {
-            $browser->visit("/")
-                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label[for=servicesToggle]")
-                ->clickLink("Widget")
-                ->waitForLocation("/widget")
-                ->clickLink("Suche nur auf einer Domain")
-                ->waitForLocation("/sitesearch/")
-                ->on(new SitesearchWidget);
-        });
-    }
-}
\ No newline at end of file
diff --git a/tests/Browser/SpendenTest.php b/tests/Browser/SpendenTest.php
deleted file mode 100644
index 36588388423b3df6db9e1f8cdd3829b60e107529..0000000000000000000000000000000000000000
--- a/tests/Browser/SpendenTest.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-namespace Tests\Browser;
-
-use Laravel\Dusk\Browser;
-use Tests\Browser\Pages\Spende;
-use Tests\DuskTestCase;
-
-class SpendenTest extends DuskTestCase
-{
-    public function testSpenden()
-    {
-        $this->browse(function (Browser $browser) {
-            $browser->visit("/")
-                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label.sidebar-opener[for=sidebarToggle]")
-                ->clickLink("Spenden")
-                ->waitForLocation("/spende")
-                ->on(new Spende);
-        });
-    }
-}
\ No newline at end of file
diff --git a/tests/Browser/StartpageTest.php b/tests/Browser/StartpageTest.php
deleted file mode 100644
index 8fead2bf0bae686401470f96d3da966dcab3c1bb..0000000000000000000000000000000000000000
--- a/tests/Browser/StartpageTest.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-namespace Tests\Browser;
-
-use Laravel\Dusk\Browser;
-use Tests\Browser\Pages\HomePage;
-use Tests\DuskTestCase;
-
-class StartpageTest extends DuskTestCase
-{
-    /**
-     * Tests for each static page on MetaGers website whether it can be reached by navigation
-     *
-     * @return void
-     */
-    public function testStartpage()
-    {
-        $this->browse(function (Browser $browser) {
-            $browser->visit(new HomePage);
-        });
-    }
-}
diff --git a/tests/Browser/TeamTest.php b/tests/Browser/TeamTest.php
deleted file mode 100644
index 545e15e44cd00d6a90cd1a6c796faf4af7f4568a..0000000000000000000000000000000000000000
--- a/tests/Browser/TeamTest.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Tests\Browser;
-
-use Laravel\Dusk\Browser;
-use Tests\Browser\Pages\Team;
-use Tests\DuskTestCase;
-
-class TeamTest extends DuskTestCase
-{
-
-    public function testTeam()
-    {
-        $this->browse(function (Browser $browser) {
-            $browser->visit("/")
-                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label#navigationKontakt")
-                ->clickLink("Team")
-                ->waitForLocation("/team")
-                ->on(new Team);
-        });
-    }
-}
\ No newline at end of file
diff --git a/tests/Browser/WebsearchWidgetTest.php b/tests/Browser/WebsearchWidgetTest.php
deleted file mode 100644
index 3a2dc9c24a9827461b777cca8f3a449db1952573..0000000000000000000000000000000000000000
--- a/tests/Browser/WebsearchWidgetTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace Tests\Browser;
-
-use Laravel\Dusk\Browser;
-use Tests\Browser\Pages\WebsearchWidget;
-use Tests\DuskTestCase;
-
-class WebsearchWidgetTest extends DuskTestCase
-{
-
-    public function testWebsearchWidget()
-    {
-        $this->browse(function (Browser $browser) {
-            $browser->visit("/")
-                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label[for=servicesToggle]")
-                ->clickLink("Widget")
-                ->waitForLocation("/widget")
-                ->clickLink("Suche im Web")
-                ->waitForLocation("\/websearch\/")
-                ->on(new WebsearchWidget);
-        });
-    }
-}
\ No newline at end of file
diff --git a/tests/Browser/WidgetTest.php b/tests/Browser/WidgetTest.php
deleted file mode 100644
index d71ce774ef7e24f6f2e993230e54f655b04a829c..0000000000000000000000000000000000000000
--- a/tests/Browser/WidgetTest.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-namespace Tests\Browser;
-
-use Laravel\Dusk\Browser;
-use Tests\Browser\Pages\Widget;
-use Tests\DuskTestCase;
-
-class WidgetTest extends DuskTestCase
-{
-    public function testWidget()
-    {
-        $this->browse(function (Browser $browser) {
-            $browser->visit("/")
-                ->waitFor("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label.sidebar-opener[for=sidebarToggle]")
-                ->click("label[for=servicesToggle]")
-                ->clickLink("Widget")
-                ->waitForLocation("/widget")
-                ->on(new Widget);
-        });
-    }
-}
\ No newline at end of file
diff --git a/tests/DuskTestCase.php b/tests/DuskTestCase.php
deleted file mode 100644
index 2a8da53811ab0da7b899e76df24854ed8fad6582..0000000000000000000000000000000000000000
--- a/tests/DuskTestCase.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace Tests;
-
-use Laravel\Dusk\TestCase as BaseTestCase;
-use \ChinLeung\BrowserStack\RunsOnBrowserStack;
-
-abstract class DuskTestCase extends BaseTestCase
-{
-    use CreatesApplication, RunsOnBrowserStack;
-
-    /**
-     * Prepare for Dusk test execution.
-     *
-     * @beforeClass
-     * @return void
-     */
-    public static function prepare()
-    {
-    }
-
-    protected function getBuildName(): string
-    {
-        return config("metager.metager.git.branch_name");
-    }
-}